From 2b79e7cdf5192cc2ebdc3b2733d85e0fafd9fe7b Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 22 Feb 2024 22:23:29 +0000 Subject: [PATCH 001/695] Fix b7630b0: Incorrect padding for text purchase list. (#12160) Restore to original (and more normal) framerect padding. --- src/build_vehicle_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 467b9c0bed..fb127c7920 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1821,7 +1821,7 @@ struct BuildVehicleWindow : Window { int needed_height = this->details_height; /* Draw details panels. */ if (this->sel_engine != INVALID_ENGINE) { - const Rect r = this->GetWidget(WID_BV_PANEL)->GetCurrentRect().Shrink(WidgetDimensions::scaled.frametext, WidgetDimensions::scaled.framerect); + const Rect r = this->GetWidget(WID_BV_PANEL)->GetCurrentRect().Shrink(WidgetDimensions::scaled.framerect); int text_end = DrawVehiclePurchaseInfo(r.left, r.right, r.top, this->sel_engine, this->te); needed_height = std::max(needed_height, (text_end - r.top) / GetCharacterHeight(FS_NORMAL)); } From b22fb43ceafe9ec5643de1e88ec892ba08bd56d0 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Fri, 23 Feb 2024 13:08:16 +0000 Subject: [PATCH 002/695] Fix #10490: Allow ships to exit depots if another is not moving at the exit point (#12161) --- src/ship_cmd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index dc57b19125..a2d1210c29 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -364,11 +364,11 @@ void Ship::UpdateDeltaXY() } /** - * Test-procedure for HasVehicleOnPos to check for any ships which are visible and not stopped by the player. + * Test-procedure for HasVehicleOnPos to check for any ships which are moving. */ static Vehicle *EnsureNoMovingShipProc(Vehicle *v, void *) { - return v->type == VEH_SHIP && (v->vehstatus & (VS_HIDDEN | VS_STOPPED)) == 0 ? v : nullptr; + return v->type == VEH_SHIP && v->cur_speed != 0 ? v : nullptr; } static bool CheckReverseShip(const Ship *v, Trackdir *trackdir = nullptr) From 7135330819254f5317885c8f29161dfe5ad9dc3f Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 23 Feb 2024 18:35:31 +0000 Subject: [PATCH 003/695] Update: Translations from eints vietnamese: 3 changes by KhoiCanDev chinese (simplified): 5 changes by WenSimEHRP hungarian: 63 changes by titanicbobo belarusian: 47 changes by KorneySan finnish: 2 changes by hpiirai ukrainian: 25 changes by StepanIvasyn danish: 38 changes by bscargo portuguese (brazilian): 158 changes by pasantoro --- src/lang/afrikaans.txt | 2 + src/lang/arabic_egypt.txt | 2 + src/lang/basque.txt | 2 + src/lang/belarusian.txt | 96 ++++----- src/lang/brazilian_portuguese.txt | 318 +++++++++++++++--------------- src/lang/bulgarian.txt | 2 + src/lang/catalan.txt | 2 + src/lang/chuvash.txt | 2 + src/lang/croatian.txt | 2 + src/lang/czech.txt | 2 + src/lang/danish.txt | 78 ++++---- src/lang/dutch.txt | 2 + src/lang/english_AU.txt | 2 + src/lang/english_US.txt | 2 + src/lang/esperanto.txt | 2 + src/lang/estonian.txt | 2 + src/lang/faroese.txt | 2 + src/lang/finnish.txt | 6 +- src/lang/french.txt | 2 + src/lang/frisian.txt | 2 + src/lang/gaelic.txt | 2 + src/lang/galician.txt | 2 + src/lang/german.txt | 2 + src/lang/greek.txt | 2 + src/lang/hebrew.txt | 2 + src/lang/hindi.txt | 2 + src/lang/hungarian.txt | 75 ++++++- src/lang/icelandic.txt | 2 + src/lang/ido.txt | 2 + src/lang/indonesian.txt | 2 + src/lang/irish.txt | 2 + src/lang/italian.txt | 2 + src/lang/japanese.txt | 2 + src/lang/korean.txt | 2 + src/lang/latin.txt | 2 + src/lang/latvian.txt | 2 + src/lang/lithuanian.txt | 2 + src/lang/luxembourgish.txt | 2 + src/lang/macedonian.txt | 2 + src/lang/malay.txt | 2 + src/lang/maltese.txt | 2 + src/lang/marathi.txt | 2 + src/lang/norwegian_bokmal.txt | 2 + src/lang/norwegian_nynorsk.txt | 2 + src/lang/persian.txt | 2 + src/lang/polish.txt | 2 + src/lang/portuguese.txt | 2 + src/lang/romanian.txt | 2 + src/lang/russian.txt | 2 + src/lang/serbian.txt | 2 + src/lang/simplified_chinese.txt | 12 +- src/lang/slovak.txt | 2 + src/lang/slovenian.txt | 2 + src/lang/spanish.txt | 2 + src/lang/spanish_MX.txt | 2 + src/lang/swedish.txt | 2 + src/lang/tamil.txt | 2 + src/lang/thai.txt | 2 + src/lang/traditional_chinese.txt | 2 + src/lang/turkish.txt | 2 + src/lang/ukrainian.txt | 39 ++-- src/lang/urdu.txt | 2 + src/lang/vietnamese.txt | 8 +- src/lang/welsh.txt | 2 + 64 files changed, 469 insertions(+), 275 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index a20d244ba9..2490b8d382 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -964,6 +964,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Verlaag STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Verhoog die hoeveelheid van jou koers vir een Pond (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Stel die wissel koers vir jou koers vir een Pond (£) + STR_CURRENCY_PREFIX :{LTBLUE}Voorvoegsel: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Stel die voorvoegsel teks vir jou koers STR_CURRENCY_SUFFIX :{LTBLUE}Agtervoegsel: {ORANGE}{STRING} @@ -5138,6 +5139,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 4a544f8057..ca2952976a 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1002,6 +1002,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK} £ قل STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK} £ زد قيمة عملتك لكل جنية استرليني STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK} حدد قيمة الصرف لعملتك مقابل الجنية الاسترليني (£) + STR_CURRENCY_PREFIX :{LTBLUE} علامة العملة السابقة: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK} حدد الرمز الاستهلالي لعملتك STR_CURRENCY_SUFFIX :{LTBLUE} علامة العملة الاخيرة: {ORANGE}{STRING} @@ -4933,6 +4934,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 1d7afb8268..4a51da72f6 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -934,6 +934,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Zure dib STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Zure dibisaren balioa libra (£) bat igo STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Zure dibisaren balioa trukatzerakoan libra (£) batetan jarri + STR_CURRENCY_PREFIX :{LTBLUE}Aurrizkia: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Zure dibisaren sinboloa finkatu STR_CURRENCY_SUFFIX :{LTBLUE}Atzizkia: {ORANGE}{STRING} @@ -4878,6 +4879,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index bda848aa30..f6f1f8444c 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -581,8 +581,8 @@ STR_UNITS_PERIODS :{NUM}{NBSP}цы # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Фільтар: -STR_LIST_FILTER_OSKTITLE :{BLACK}Увядзіце радок фільтра -STR_LIST_FILTER_TOOLTIP :{BLACK}Увядзіце ключавое слова для фільтрацыі сьпісу +STR_LIST_FILTER_OSKTITLE :{BLACK}Увядзіце ключавыя словы для фільтраваньня сьпісу +STR_LIST_FILTER_TOOLTIP :{BLACK}Увядзіце ключавыя словы для фільтраваньня сьпісу STR_TOOLTIP_GROUP_ORDER :{BLACK}Выбар парадку групоўкі STR_TOOLTIP_SORT_ORDER :{BLACK}Зьмена напрамку сартаваньня (зьмяньшэньне / ўзрастаньне) @@ -922,7 +922,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Ґраф STR_GRAPH_INCOME_CAPTION :{WHITE}Ґрафік даходу STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Колькасьць перавезеных грузаў STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Рэйтынґ кампаніі (макс. = 1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Вартасьць кампаніі +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Ґрафік змены вартасьці кампаніі STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Апошнія 72 хвіліны @@ -1431,6 +1431,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Падв STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Зьнізіць курс вашае валюты ў адносінах да фунта (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Усталяваць курс вашае валюты ў адносінах да фунта (£) + STR_CURRENCY_PREFIX :{LTBLUE}Прэфікс: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Усталяваць прэфікс для вашае валюты STR_CURRENCY_SUFFIX :{LTBLUE}Суфікс: {ORANGE}{STRING} @@ -1618,7 +1619,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Выдаткі STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Усталюйце ўзровень выдаткаў на будаўніцтва й набыцьцё STR_CONFIG_SETTING_RECESSIONS :Спады: {STRING} -STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Калі ўключана, спад можа наставаць раз у некалькі гадоў. Падчас спаду ўвесь аб'ём вытворчасьці значна ніжэй (ён вяртаецца да ранейшага ўзроўня, калі спад сканчаецца) +STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Калі ўключана, у гульні часам адбываюцца эканамічныя крызісы. Падчас крызісу аб'ёмы вытворчасьці значна змяншаюцца (і вяртаюцца да ранейшага ўзроўня, калі крызіс сканчаецца). STR_CONFIG_SETTING_TRAIN_REVERSING :Забараніць разварот цягнікоў на станцыях: {STRING} STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Калі ўключана, цягнікі ня будуць разварочвацца на прахадных станцыях, нават калі гэта дазволіць скараціць шлях да наступнага пункта прызначэньня. @@ -1865,7 +1866,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Арыґіна STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Тып ландшафту: {STRING} -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Толькі для TerraGenesis){}Узгоркаватасць ландшафту +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Азначце вышыню гор і ўзгоркаў на мапе STR_CONFIG_SETTING_INDUSTRY_DENSITY :Колькасць прадпрыемстваў: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Выберыце, колькі прадпрыемстваў ствараць напачатку і на якім узроўні падтрымліваць іх колькасць падчас гульні. @@ -1893,7 +1894,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Грубы STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Вельмі грубы STR_CONFIG_SETTING_VARIETY :Разнастайнасць ландшафту: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Толькі для TerraGenesis){}Вызначае наяўнасць на карце як горных, так і раўнінных абласцей. Паколькі дадзеная наладка ўплывае толькі на згладжванне карты, астатнія наладкі павінны быць выстаўлены ў горны ландшафт. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Вызначае наяўнасць на карце як горных, так і раўнінных абласцей. Чым вышэй разнастайнасць, тым вышэй розніца ў вышыні паміж гэтымі зонамі. STR_CONFIG_SETTING_RIVER_AMOUNT :Колькасць рэк: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Выберыце колькасць рэк на мапе @@ -1948,7 +1949,7 @@ STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :шэры і ч STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :адценьні шэрага STR_CONFIG_SETTING_SCROLLMODE :Перамяшчэнне агляду: {STRING} -STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Спосаб перамяшчэння па гульнёваму полю +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Спосаб перамяшчэньня па гульнёваму полю. Варыянты з зафіксаваным курсорам не працуюць на некаторых сістэмах, напрыклад, у браўзарах, на сэнсарных экранах, на Linux з Wayland і г. д. ###length 4 STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Перамяшчаць з дапамогай ПКМ, зафіксаваўшы курсор STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Перамяшчаць з дапамогай ПКМ, зафіксаваўшы курсор @@ -2513,11 +2514,11 @@ STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Выбр STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Выбраць ляндшафт субтрапічнага клімату STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Выбраць цацачны сьвет -STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Паказаць наладкі гульні +STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Адкрыць акно з асноўнымі наладкамі гульні STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Паказаць табліцу рэкордаў STR_INTRO_TOOLTIP_HELP :{BLACK}Спасылкі на дакументацыю і інтэрнэт-рэсурсы STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Адкрыць наладкі -STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Паказаць наладкі NewGRF +STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Адкрыць наладкі NewGRF STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Праверыць новы й абноўлены кантэнт, каб спампаваць STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Адкрыць наладкі ШІ STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Адкрыць наладкі гульнёвых скрыптоў @@ -2975,7 +2976,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Выні STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Вы пакідаеце OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Умовы загрузкі змесціва зь іншых сайтаў могуць адрозьнівацца.{}За інструкцыямі па ўсталёўцы кампанэнтаў OpenTTD вам трэба зьвярнуцца на адпаведныя сайты.{}Вы жадаеце працягнуць? STR_CONTENT_FILTER_TITLE :{BLACK}Фільтар па бірках/назвах: -STR_CONTENT_OPEN_URL :{BLACK}Наведаць вэб-старонку +STR_CONTENT_OPEN_URL :{BLACK}Вэб-сайт STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Наведаць вэб-старонку для гэтага кантэнту STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Запампаваць STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Запусьціць запампоўку выбранага кантэнту @@ -3241,7 +3242,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Буда STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Будаўніцтва шлюзаў. Пры націснутым Shift — ацэнка кошту будаўніцтва. STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Будаўніцтва докаў (для набыцця і абслугоўваньня караблёў). Пры націснутым Shift — ацэнка кошту будаўніцтва. STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Будаўніцтва прыстаняў. Націснуты Ctrl дазваляе аб'ядноўваць прыстані. Пры націснутым Shift — ацэнка кошту будаўніцтва. -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Разьмясьціць буй, які можа быць выкарыстаны як пункт шляху. Пры націснутым Shift — ацэнка кошту будаўніцтва. +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Разьмясьціць буй, які можа быць выкарыстаны як маршрутны пункт. Пры націснутым Shift — ацэнка кошту будаўніцтва. STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Будаўніцтва аквэдукаў Пры націснутым Shift — ацэнка кошту будаўніцтва. STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Пабудаваць канал. Ctrl+пстрычка па клетцы на ўзроўні мора — запоўніць яго вадой. STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Стварэньне рэк на мапе. Пры націснутым Ctrl яны ствараюцца па дыяганалі. @@ -3255,7 +3256,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Док # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Aэрапорты -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Будаўніцтва аэрапортаў. Націск Ctrl дазваляе аб'ядноўваць станцыі. Пры націснутым Shift — ацэнка кошту будаўніцтва. +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Будаўніцтва аэрапортаў. Націснуты Ctrl дазваляе аб'ядноўваць аэрапорты. Пры націснутым Shift — ацэнка кошту будаўніцтва. # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Выбар аэрапорта @@ -3287,13 +3288,13 @@ STR_STATION_BUILD_NOISE :{BLACK}Узро # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Земляныя работы STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Апусціць кут зямлі. Пстрычка+перацягваньне апускае абраны кут і прамавугольную вобласць на новую глыбіню. Ctrl+пстрычка+перацягваньне — выбар вобласьці па дыяганалі. Пры націснутым Shift — ацэнка кошту будаўніцтва. -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Падняць кут зямлі. Перацягваньне падымае першы абраны кут і выраўноўвае выбраную вобласьць да новай вышыні кута. Ctrl выбірае вобласьць па дыяганалі. Пры націснутым Shift — ацэнка кошту будаўніцтва. +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Падняць кут зямлі. Пстрычка+перацягваньне паднімае абраны кут і прамавугольную вобласць на новую вышыню. Ctrl+пстрычка+перацягваньне — выбар вобласці па дыяганалі. Пры націснутым Shift — ацэнка кошту будаўніцтва. STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Выраўнаваць прамавугольны ўчастак зямлі да вышыні першага абранага кута. Ctrl+пстрычка+перацягваньне — выбар вобласці па дыяганалі. Пры націснутым Shift — ацэнка кошту выраўноўваньня. -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Набыцьцё зямлі. Пры націснутым Shift — ацэнка кошту набыцьця. +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Набыцьцё зямлі для будучага выкарыстаньня. Ctrl+пстрычка+перацягваньне — выбар вобласці па дыяганалі. Пры націснутым Shift — ацэнка кошту набыцьця. # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Выбар аб'екта -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Абярыце ствараны аб'ект. Пры націснутым Shift — ацэнка кошту пабудовы. +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Абярыце аб'ект для пабудовы. Ctrl+пстрычка+перацягваньне — выбар вобласці па дыяганалі. Пры націснутым Shift — ацэнка кошту пабудовы. STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Абярыце клясу аб'екта для будаўніцтва STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Прагляд аб'екта STR_OBJECT_BUILD_SIZE :{BLACK}Памер: {GOLD}{NUM} x {NUM} клетак @@ -3305,7 +3306,7 @@ STR_OBJECT_CLASS_TRNS :Перадат STR_PLANT_TREE_CAPTION :{WHITE}Дрэвы STR_PLANT_TREE_TOOLTIP :{BLACK}Выберыце тып дрэваў для пасадкі. Калі на ўчастку ўжо ёсьць дрэвы, будуць дададзены некалькі дрэваў рознага тыпу, незалежна ад выбранага. STR_TREES_RANDOM_TYPE :{BLACK}Дрэвы розных відаў -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Высадка дрэў выпадковага тыпу. Пры націснутым Shift — ацэнка кошту высадкі. +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Высадка дрэў выпадковага тыпу. Ctrl+пстрычка+перацягваньне — выбар вобласці па дыяганалі. Пры націснутым Shift — ацэнка кошту высадкі. STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Расставіць па мапе STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Пасадзіць дрэвы розных выпадковых відаў па усёй мапе STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Дрэва @@ -3318,7 +3319,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}Стварыць выпадковую мапу @@ -3364,7 +3365,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}Крат STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Выпадковая # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Стварыць новае прадпрыемства +STR_FUND_INDUSTRY_CAPTION :{WHITE}Стварэньне прадпрыемстваў STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Выберыце тып вытворчасьці са сьпісу STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Шмат выпадковых прадпрыемстваў STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Выпадкова разьмясьціць прадпрыемствы на мапе @@ -3387,7 +3388,7 @@ STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Спаж STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Гарадзкія будынкі STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Пстрычка па прадпрыемстве пакажа ягоных пастаўшчыкоў і спажыўцоў STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Пстрычка па тыпе грузу пакажа ягоных пастаўшчыкоў і спажыўцоў -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Паказаць ланцужок +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Вытворчы ланцужок STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Паказаць вытворцаў сыравіны й спажыўцоў прадукцыі гэтага прадпрыемства STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Лiнк да мiнiмапы STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Выберыце паказаныя прадпрыемствы таксама й на мiнiмапе @@ -3849,7 +3850,7 @@ STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}У мо 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} патрабуе TTD вэрсіі {2:STRING} -STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} зроблены для выкарыстаньня сумесна з {STRING} +STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} зроблены для выкарыстаньня сумесна з {2:STRING} STR_NEWGRF_ERROR_INVALID_PARAMETER :Няправільны парамэтр {1:STRING}: парамэтр {2:STRING} ({3:NUM}) STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} павінен быць загружаны перад {2:STRING}. STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} павінен быць загружаны пасьля {2:STRING}. @@ -3936,7 +3937,7 @@ STR_TOWN_DIRECTORY_CAPTION :{WHITE}Гара STR_TOWN_DIRECTORY_NONE :{ORANGE}- Няма - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Мегаполіс){BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Сьпіс гарадоў: клiк па назьве паказвае горад у асноўным вакне. Ctrl+клiк паказвае ў дадатковым вакне. +STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Сьпіс гарадоў: пстрычка па назьве паказвае горад у асноўным вакне. Ctrl+пстрычка — у дадатковым вакне. STR_TOWN_POPULATION :{BLACK}Насельніцтва: {COMMA} # Town view window @@ -3989,7 +3990,7 @@ STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Купіць э STR_LOCAL_AUTHORITY_ACTION_BRIBE :Даць хабар мясцовай адміністрацыі ###next-name-looks-similar -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Правесьці малую рэклямную кампанію для павелічэньня груза-і пасажырапатоку на вашых станцыях.{}Кошт: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Правесці малую рэклямную кампанію для павелічэння груза- і пасажырапатоку на вашых станцыях.{}Яна часова павялічыць рэйтынг вашых станцый, пабудаваных побач з цэнтрам горада.{}{POP_COLOUR}Кошт: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Правесьці сярэднюю рэклямную кампанію для павелічэньня груза-і пасажырапатоку на вашых станцыях.{}Яна часова павялічыць рэйтынг вашых станцый, змешчаных ня вельмі далёка ад цэнтра горада.{}{POP_COLOUR}Кошт: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Правесьці вялікую рэклямную кампанію для павелічэньня груза-і пасажырапатоку на вашых станцыях.{}Яна часова павялічыць рэйтынг вашых станцый на значнай плошчы ў горадзе і наваколлях.{}{POP_COLOUR}Кошт: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Прафінансаваць рэканструкцыю гарадской дарожнай сеткі.{}Працы, працягласцю да 6 месяцаў, прыводзяць да значных дарожных затораў.{}{POP_COLOUR}Кошт: {CURRENCY_LONG} @@ -4068,7 +4069,7 @@ STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Наст STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Няправільная спасылка на дасягненьне # Station list window -STR_STATION_LIST_TOOLTIP :{BLACK}Сьпіс станцыяў: пстрычка па назьве паказвае станцыю ў асноўным вакне. Ctrl+клiк паказвае ў дадатковым вакне. +STR_STATION_LIST_TOOLTIP :{BLACK}Сьпіс станцыяў: пстрычка па назьве паказвае станцыю ў асноўным вакне. Ctrl+пстрычка — у дадатковым вакне. STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Можна выбраць некалькі варыянтаў, пстрыкаючы па іх з заціснутым Ctrl STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} — {COMMA} станцы{P я i яў} STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} @@ -4151,7 +4152,7 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Прад STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Паказаць маршрутны пункт у асноўным вакне. Ctrl+клік — паказаць у дадатковым вакне. STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Перайменаваць маршрутны пункт -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Паказаць буй у асноўным вакне. Ctrl+клік — паказаць у дадатковым вакне. +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Паказаць буй у асноўным вакне. Ctrl+пстрычка — паказаць у дадатковым вакне. STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Зьмяніць назву буя STR_EDIT_WAYPOINT_NAME :{WHITE}Назва маршрутнага пункта @@ -4227,7 +4228,7 @@ STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Пабу STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Агледзець штаб STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Агледзець штаб-кватэру кампаніі STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Перамясьціць -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Перамясьціць штаб-кватэру кампаніі ў іншае месца за 1% ацэнкавага кошту капіталу кампаніі. Shift+пстрычка — ацэнка кошту пераносу. +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Перамясьціць штаб-кватэру кампаніі ў іншае месца за 1% ацэнкавага кошту капіталу кампаніі. Пры націснутым Shift — ацэнка кошту пераносу. STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Дэталi STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Паказаць дэталёвыя iнфраструктурныя падлiкi STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Перадаць грошы @@ -4360,7 +4361,7 @@ STR_GROUP_CREATE_TOOLTIP :{BLACK}Ства STR_GROUP_DELETE_TOOLTIP :{BLACK}Выдаліць выбраную групу STR_GROUP_RENAME_TOOLTIP :{BLACK}Перайменаваць выбраную групу STR_GROUP_LIVERY_TOOLTIP :{BLACK}Змяніць колер абранае групы -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Абарона транспарту ў групе ад глабальнай аўтазамены +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Абарона транспарта ў групе ад глабальнай аўтазамены. Ctrl+пстрычка — абарона таксама і ўкладзеных груп. STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Выдаліць ґрупу STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Вы ўпэўнены, што жадаеце выдаліць гэту ґрупу з усімі вытворнымі? @@ -4429,9 +4430,9 @@ STR_CARGO_TYPE_FILTER_NONE :Няма ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Сьпіс лакаматываў і вагонаў - пстрыкніце для атрыманьня інфармацыі. Ctrl+пстрычка схавае/пакажа ТС. -STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Сьпіс аўтатранспарту - пстрыкніце для атрыманьня інфармацыі. Ctrl+пстрычка схавае/пакажа выбраны аўтамабіль. -STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Сьпіс караблёў - пстрыкніце для атрыманьня інфармацыі. Ctrl+пстрычка схавае/пакажа выбраны карабель. -STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Сьпіс паветраных судоў: пстрыкніце для атрыманьня інфармацыі. Ctrl+пстрычка схавае/пакажа ТС. +STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Сьпіс даступных мадэляў аўтатранспарта. Абярыце адну з іх для атрыманьня інфармацыі. Ctrl+пстрычка схавае/пакажа абраную мадэль. +STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Сьпіс даступных мадэляў караблёў. Абярыце адну з іх для атрыманьня інфармацыі. Ctrl+пстрычка схавае/пакажа абраную мадэль. +STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Сьпіс даступных мадэляў паветраных судоў. Абярыце адну з іх для атрыманьня інфармацыі. Ctrl+пстрычка схавае/пакажа абраную мадэль. ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Купіць @@ -4447,15 +4448,15 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купі ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Набыць абраны лякаматыў/ваґон. Shift+пстрычка — ацэнка кошту набыцьця. -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Набыць абраны аўтамабіль. Shift+пстрычка — ацэнка кошту набыцьця. -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Набыць абраны карабель. Shift+пстрычка — ацэнка кошту набыцьця. -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Набыць абраны авіятранспарт. Shift+пстрычка — ацэнка кошту набыцьця. +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Набыць абраны аўтамабіль. Пры націснутым Shift — ацэнка кошту набыцьця. +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Набыць абраны карабель. Пры націснутым Shift — ацэнка кошту набыцьця. +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Набыць абраны авіятранспарт. Пры націснутым Shift — ацэнка кошту набыцьця. ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Набыць і пераабсталяваць абраны лякаматыў/ваґон. Пры націснутым Shift — ацэнка кошту набыцця. -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Набыць і пераабсталяваць абраны аўтамабіль. Shift+пстрычка пакажа арыентыровачны кошт куплі. +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Набыць і пераабсталяваць абраны аўтамабіль. Пры націснутым Shift — ацэнка кошту набыцьця. STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Набыць і пераабсталяваць абраны карабель. Пры націснутым Shift — ацэнка кошту набыцця. -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Набыць і пераабсталяваць абранае паветранае судна. Пры націснутым Shift — ацэнка кошту куплі. +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Набыць і пераабсталяваць абранае паветранае судна. Пры націснутым Shift — ацэнка кошту набыцьця. ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Перайменаваць @@ -4505,7 +4506,7 @@ STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} а STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Цягнікі. Выкарыстоўвайце перацягваньне для зьмены складу цягніка; націсьніце ПКМ для атрыманьня інфармацыі. Утрымлівайце Ctrl для перацягваньня ваґона разам з усімі наступнымі за ім. +STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Цягнікі ў дэпо. Фармуйце саставы з дапамогай перацягваньня лакаматываў і вагонаў. Націсніце ПКМ для атрыманьня інфармацыі. Пры націснутым Ctrl абедзве функцыі працуюць ад абранага вагона да канца саставу. STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Аўтамабiлi: правы клік для атрыманьня інфармацыі STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Караблi: правы клік для атрыманьня інфармацыі STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Авiятранспарт: правы клік для атрыманьня інфармацыі @@ -4547,16 +4548,16 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Капі STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Капіяваць авіятранспарт ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Стварыць копію састава. Націсьніце на кнопку, а затым на цягнік усярэдзіне ці знадворку дэпо. Ctrl+пстрычка створыць цягнік з агульным маршрутам. Shift+пстрычка - ацэнка кошту куплі. -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Стварыць копію аўтамабіля. Націсьніце на кнопку, а затым на машыну ўнутры ці звонку гаража. Ctrl+пстрычка створыць аўтамабіль з агульнымі заданьнямі. Shift+пстрычка — ацэнка кошту набыцьця. -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Стварыць копію карабля. Націсьніце на кнопку, а затым на карабель унутры ці звонку дока. Ctrl+пстрычка створыць карабель з агульнымі заданьнямі. Shift+пстрычка — ацэнка кошту набыцьця. +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Набыць копію састава. Націсьніце на кнопку, а затым на цягнік усярэдзіне ці знадворку дэпо. Ctrl+пстрычка створыць цягнік з агульным маршрутам. Shift+пстрычка — ацэнка кошту набыцьця. +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Набыць копію аўтамабіля. Націсьніце на кнопку, а затым на машыну ўнутры ці звонку гаража. Ctrl+пстрычка створыць аўтамабіль з агульнымі заданьнямі. Shift+пстрычка — ацэнка кошту набыцьця. +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Набыць копію карабля. Націсьніце на кнопку, а затым на карабель унутры ці звонку дока. Ctrl+пстрычка створыць карабель з агульнымі заданьнямі. Shift+пстрычка — ацэнка кошту набыцьця. STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Набыць копію паветр. судна. Націсьніце на кнопку, а потым на паветр. судна ўнутры ці звонку анґара. Ctrl+пстрычка створыць копію з агульнымі заданьнямі. Shift+пстрычка — ацэнка кошту набыцьця. ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Паказаць дэпо ў асноўным вакне. Ctrl+клік — паказаць у дадатковым вакне. -STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Паказаць гараж у асноўным вакне. Ctrl+клік — паказаць у дадатковым вакне. -STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Паказаць док у асноўным вакне. Ctrl+клік — паказаць у дадатковым вакне. -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Паказаць анґар у асноўным вакне. Ctrl+клік — паказаць у дадатковым вакне. +STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Паказаць дэпо ў асноўным вакне. Ctrl+пстрычка — паказаць у дадатковым вакне. +STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Паказаць гараж у асноўным вакне. Ctrl+пстрычка — паказаць у дадатковым вакне. +STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Паказаць док у асноўным вакне. Ctrl+пстрычка — паказаць у дадатковым вакне. +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Паказаць анґар у асноўным вакне. Ctrl+пстрычка — паказаць у дадатковым вакне. ###length VEHICLE_TYPES STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Атрымаць сьпіс цягнiкоў, якія маюць у заданьнях гэтае дэпо @@ -4696,10 +4697,10 @@ STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Пасл STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Паслаць паветр. судна ў анґар. Ctrl+клік — толькі для абслугоўваньня. ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Стварыць копію састава. Ctrl+пстрычка створыць цягнік з агульнымі заданьнямі. Shift+пстрычка — ацэнка кошту набыцьця. -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Стварыць копію аўтамабіля. Ctrl+пстрычка створыць аўтамабіль з агульнымі заданьнямі. Shift+пстрычка — ацэнка кошту набыцьця. -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Стварыць копію карабля. Ctrl+пстрычка створыць карабель з агульнымі заданьнямі. Shift+пстрычка — ацэнка кошту набыцьця. -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Стварыць копію паветр. судна. Ctrl+пстрычка створыць копію з агульнымі заданьнямі. Shift+пстрычка — ацэнка кошту набыцьця. +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Набыць копію састава. Ctrl+пстрычка створыць цягнік з агульнымі заданьнямі. Shift+пстрычка — ацэнка кошту набыцьця. +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Набыць копію аўтамабіля. Ctrl+пстрычка створыць аўтамабіль з агульнымі заданьнямі. Shift+пстрычка — ацэнка кошту набыцьця. +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Набыць копію карабля. Ctrl+пстрычка створыць карабель з агульнымі заданьнямі. Shift+пстрычка — ацэнка кошту набыцьця. +STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Набыць копію паветр. судна. Ctrl+пстрычка створыць копію з агульнымі заданьнямі. Shift+пстрычка — ацэнка кошту набыцьця. STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Прымусіць цягнік праехаць чырвоны сыґнал святлафора STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Завярнуць цягнiк у адваротны бок @@ -5079,7 +5080,7 @@ STR_TIMETABLE_START_TOOLTIP :{BLACK}Выбе STR_TIMETABLE_START_SECONDS_QUERY :Секунд да запуску графіка STR_TIMETABLE_CHANGE_TIME :{BLACK}Зьмяніць час -STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Зьмяніць час для вылучанага заданьня +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Зьмяніць час, выдаткаваны на выкананьне вылучанага заданьня. Ctrl+пстрычка ўсталёўвае час для ўсіх заданьняў. STR_TIMETABLE_CLEAR_TIME :{BLACK}Ськінуць час STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Скінуць час у вылучаным заданьні. Ctrl+пстрычка — скінуць час ва ўсіх заданьнях. @@ -6283,6 +6284,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index e211f4c444..258c0e5d65 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -258,7 +258,7 @@ STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP} # Time units used in string control characters STR_UNITS_DAYS :{COMMA}{NBSP}dia{P "" s} -STR_UNITS_SECONDS :{COMMA}{NBSP}sedundo{P "" s} +STR_UNITS_SECONDS :{COMMA}{NBSP}segundo{P "" s} STR_UNITS_TICKS :{COMMA}{NBSP}tique{P "" s} STR_UNITS_MONTHS :{NUM}{NBSP}m{P ês eses} @@ -408,7 +408,7 @@ STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Construi STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Construir aeroportos STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Abrir menu de paisagismo, menu de árvores ou colocar um sinal STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Abrir janela de som/música -STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Abrir última mensagem/notícia, histórico de mensagens ou remover todas as mensagens +STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Abrir última mensagem/notícia, histórico de mensagens ou apagar todas as mensagens STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Abrir menu informações do terreno, captura de tela, sobre o OpenTTD e ferramentas de desenvolvedor STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Trocar a barra de ferramentas @@ -497,7 +497,7 @@ STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Fundar nova ind # URailway construction menu STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Construção de ferrovia -STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construção de ferrovia elétrificada +STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construção de ferrovia eletrificada STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Construção de monotrilho STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construção de Maglev @@ -759,7 +759,7 @@ STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Mostrar STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Mostrar vegetação no mapa STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Mostrar proprietários dos terrenos no mapa STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Clique em um tipo de indústria para mostrar/ocultar a indústria. Ctrl+Clique desabilita todos os tipos exceto a selecionada. Ctrl+Clique nela novamente para habilitar todos os tipos de indústrias -STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Clique em uma empresa para mostrar/ocultar suas propriedades. Ctrl+Clique desabilita todas as companias exceto a selecionada. Ctrl+Clique nela novamente para habilitar todas as empresas +STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Clique em uma empresa para mostrar/ocultar suas propriedades. Ctrl+Clique desabilita todas as empresas exceto a selecionada. Ctrl+Clique nela novamente para habilitar todas as empresas STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Clique em uma carga para mostrar/ocultar suas propriedades. Ctrl+Clique desabilita todas as cargas exceto a selecionada. Ctrl+Clique novamente para habilitar todas as cargas STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Estradas @@ -774,7 +774,7 @@ STR_SMALLMAP_LEGENDA_AIRCRAFT :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_TRANSPORT_ROUTES :{TINY_FONT}{BLACK}Rotas de Transporte STR_SMALLMAP_LEGENDA_FOREST :{TINY_FONT}{BLACK}Floresta STR_SMALLMAP_LEGENDA_RAILROAD_STATION :{TINY_FONT}{BLACK}Estação Ferroviária -STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Estação de Caminhões +STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Estação de Caminhão STR_SMALLMAP_LEGENDA_BUS_STATION :{TINY_FONT}{BLACK}Estação de Ônibus STR_SMALLMAP_LEGENDA_AIRPORT_HELIPORT :{TINY_FONT}{BLACK}Aeroporto/Heliporto STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLACK}Doca @@ -842,7 +842,7 @@ STR_NEWS_ROAD_VEHICLE_CRASH :{BIG_FONT}{BLAC STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLACK}Acidente Aéreo!{}{COMMA} morrem em explosão na {STATION} STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Acidente Aéreo!{}Aeronave ficou sem combustível, {COMMA} morrem em explosão -STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLACK}Desastre de Zepelin em {STATION}! +STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLACK}Desastre de Zepelim em {STATION}! STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}Veículo rodoviário destruído em colisão com OVNI! STR_NEWS_DISASTER_AIRPLANE_OIL_REFINERY :{BIG_FONT}{BLACK}Explosão em refinaria de petróleo perto de {TOWN}! STR_NEWS_DISASTER_HELICOPTER_FACTORY :{BIG_FONT}{BLACK}Fábrica destruída em circunstâncias suspeitas perto de {TOWN}! @@ -991,15 +991,15 @@ STR_GAME_OPTIONS_CURRENCY_NOK :Coroa Noruegues STR_GAME_OPTIONS_CURRENCY_PLN :Złoty Polonês STR_GAME_OPTIONS_CURRENCY_RON :Lei Romeno STR_GAME_OPTIONS_CURRENCY_RUR :Rublo Russo -STR_GAME_OPTIONS_CURRENCY_SIT :Tolar Eslovênio +STR_GAME_OPTIONS_CURRENCY_SIT :Tolar Esloveno STR_GAME_OPTIONS_CURRENCY_SEK :Coroa Sueca STR_GAME_OPTIONS_CURRENCY_TRY :Lira Turca STR_GAME_OPTIONS_CURRENCY_SKK :Coroa Eslovaca STR_GAME_OPTIONS_CURRENCY_BRL :Real Brasileiro STR_GAME_OPTIONS_CURRENCY_EEK :Coroa Estoniana STR_GAME_OPTIONS_CURRENCY_LTL :Litas Lituano -STR_GAME_OPTIONS_CURRENCY_KRW :Won Sul-Coreano -STR_GAME_OPTIONS_CURRENCY_ZAR :Rand Sul-Africano +STR_GAME_OPTIONS_CURRENCY_KRW :Won Sul Coreano +STR_GAME_OPTIONS_CURRENCY_ZAR :Rand Sul Africano STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizado... STR_GAME_OPTIONS_CURRENCY_GEL :Lari da Georgia STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iraniano @@ -1041,9 +1041,9 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Marque e STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}A configuração terá efeito somente após reiniciar o jogo STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync -STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para habilitar o v-sync na tela. Qualquer mudança nesta configuração será aplicada somente após reiniciar o jogo. Só funciona com a aceleração de hardware habilitada +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para ativar Vsync na tela. Quando modificada, esta configuração será aplicada somente ao reiniciar o jogo. Só funciona com a aceleração de hardware habilitada -STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Driver de vídeo atual: {STRING} +STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}"Driver" atual: {STRING} STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Tamanho da interface STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Arraste o controle deslizante para definir o tamanho da interface. Ctrl+Arrastar para fazer um ajuste contínuo @@ -1118,6 +1118,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Diminuir STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Aumentar o valor da sua moeda para uma Libra(£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Definir a taxa de câmbio de sua moeda por uma Libra(£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefixo: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Definir o prefixo para a sua moeda STR_CURRENCY_SUFFIX :{LTBLUE}Sufixo: {ORANGE}{STRING} @@ -1186,7 +1187,7 @@ STR_SUBSIDY_X4 :x4 STR_CLIMATE_TEMPERATE_LANDSCAPE :Clima temperado STR_CLIMATE_SUB_ARCTIC_LANDSCAPE :Clima subárctico STR_CLIMATE_SUB_TROPICAL_LANDSCAPE :Clima subtropical -STR_CLIMATE_TOYLAND_LANDSCAPE :Clima Terra dos Brinquedos +STR_CLIMATE_TOYLAND_LANDSCAPE :"Clima" Terra dos Brinquedos ###length 7 STR_TERRAIN_TYPE_VERY_FLAT :Muito Plano @@ -1215,11 +1216,11 @@ STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(sem explicaç STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{ORANGE}{STRING}{POP_COLOUR} STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor padrão: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipo de configuração: {ORANGE}{STRING} -STR_CONFIG_SETTING_TYPE_CLIENT :Configuração de cliente (não guardado no savegame; afeta todos os jogos) -STR_CONFIG_SETTING_TYPE_GAME_MENU :Configuração do jogo (guardado no savegame; afeta apenas novos jogos) -STR_CONFIG_SETTING_TYPE_GAME_INGAME :Configuração do jogo (guardado no savegame; afeta apenas o jogo atual) -STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Configurações da empresa (guardado no savegame; afeta apenas novos jogos) -STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Configurações da empresa (guardado no savegame; afeta apenas a empresa atual) +STR_CONFIG_SETTING_TYPE_CLIENT :Configuração de cliente (não é incluída em jogos salvos; afeta todos os jogos) +STR_CONFIG_SETTING_TYPE_GAME_MENU :Configuração do jogo (armazenado no jogo salvo; afeta apenas novos jogos) +STR_CONFIG_SETTING_TYPE_GAME_INGAME :Configuração do jogo (armazenado no jogo salvo; afeta apenas o jogo atual) +STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Configurações da empresa (armazenadas no jogo salvo; afeta apenas novos jogos) +STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Configurações da empresa (armazenadas no jogo salvo; afeta apenas a empresa atual) STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Cuidado! STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Essa ação irá restaurar todas as configurações para os valores padrão.{}Tem certeza que deseja continuar? @@ -1228,17 +1229,17 @@ STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo: STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Restringe a lista abaixo usando filtros pré-definidos STR_CONFIG_SETTING_RESTRICT_BASIC :Básico (mostrar apenas as configurações importantes) STR_CONFIG_SETTING_RESTRICT_ADVANCED :Avançado (mostra a maioria das definições) -STR_CONFIG_SETTING_RESTRICT_ALL :Expert (mostrar todas as definições, incluindo as estranhas) +STR_CONFIG_SETTING_RESTRICT_ALL :Especialista (mostrar todas as definições, incluindo as estranhas) STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Configurações com um valor diferente do padrão STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Configurações com um valor diferente das preferências para novos jogos STR_CONFIG_SETTING_TYPE_DROPDOWN_HELPTEXT :{BLACK}Restringe a lista abaixo a determinados tipos STR_CONFIG_SETTING_TYPE_DROPDOWN_ALL :Todos os tipos de configuração -STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Configuração do cliente (não é guardado no savegame; afeta todos os jogos) -STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Configurações do jogo (guardado no savegame; afeta apenas novos jogos) -STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Configurações do jogo (guardado no savegame; afeta apenas o jogo atual) -STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Configurações da empresa (guardado no savegame; afeta apenas novos jogos) -STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Configurações da empresa (guardado no savegame; afeta apenas a empresa atual) +STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Configuração do cliente (não armazenada no jogo salvo; afeta todos os jogos) +STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Configurações do jogo (armazenadas no jogo salvo; afeta apenas novos jogos) +STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Configurações do jogo (armazenadas no jogo salvo; afeta apenas o jogo atual) +STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Configurações da empresa (armazenadas no jogo salvo; afeta apenas novos jogos) +STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Configurações da empresa (armazenadas no jogo salvo; afeta apenas a empresa atual) STR_CONFIG_SETTINGS_NONE :{WHITE}- Nenhum - ###length 3 @@ -1343,10 +1344,10 @@ STR_CONFIG_SETTING_SMOKE_AMOUNT :Quantidade de f STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Define a quantidade de fumaça ou fagulhas emitidas pelos veículos STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Modelo de aceleração dos trens: {STRING} -STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Selecionar o modelo físico para a aceleração dos trens. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do trem, tais como comprimeno e força de tração +STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Selecionar o modelo físico para a aceleração dos trens. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do trem, tais como comprimento e força de tração STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Modelo de aceleração dos veículos: {STRING} -STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Selecionar o modelo físico para a aceleração dos veículos rodoviários. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas cpnsiderando várias propriedades do veículo, por exemplo a força de tração +STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Selecionar o modelo físico para a aceleração dos veículos rodoviários. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do veículo, por exemplo a força de tração STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :Inclinação do terreno para trens: {STRING} STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Inclinação de um quadrado inclinado para um trem. Valores grandes tornam mais difícil para um trem subir uma colina @@ -1373,7 +1374,7 @@ STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Altura máxima STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Comprimento máximo de túneis: {STRING} STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Comprimento máximo para construção de túneis -STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Método manual de constução de indústria primária: {STRING} +STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Método manual de construção de indústria primária: {STRING} STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Método de fundar uma indústria primária. 'Nenhum' significa que não é possível fundar nenhuma; 'Prospecção' significa que é possível fundar, mas a construção ocorre em um local aleatório do mapa e pode até falhar; 'Como as outras indústrias' significa que novas indústrias podem ser construídas em qualquer local escolhido pelas empresas, como se fossem indústrias de processamento ###length 3 STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :Nenhum @@ -1523,11 +1524,11 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY :Quantia mínima STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Quantia mínima de dinheiro que deve existir na conta bancária para a renovação automática de veículos ser considerada STR_CONFIG_SETTING_ERRMSG_DURATION :Duração da mensagem de erro: {STRING} -STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duração da visualização de mensagens de erro em uma janela vermelha. Algumas mensagens de erro (crítico) não são fechadas automaticamante após este tempo, mas precisam ser fechadas manualmente +STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duração da visualização de mensagens de erro em uma janela vermelha. Algumas mensagens de erro (crítico) não são fechadas automaticamente após este tempo, mas precisam ser fechadas manualmente STR_CONFIG_SETTING_HOVER_DELAY :Mostrar textos de ajuda: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Atraso após o qual os textos de ajuda são mostrados quando o cursor ficar sobre algum elemento da interface. Alternativamente, os textos de ajuda podem ser mostrados com o botão direito do mouse quando este valor está definido como 0 -STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Manter o cursor por {COMMA} milisegundo{P 0 "" s} +STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Manter o cursor por {COMMA} milissegundo{P 0 "" s} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Botão direito @@ -1580,7 +1581,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Irregular STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Muito Irregular STR_CONFIG_SETTING_VARIETY :Distribuição de variedade: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Escolher se o mapa conterá tanto áreas montanhosas como áreas planas. Quanto maior a variedade, maiores as diferenças de altura entre as áreas montnahosas e as planas. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Escolher se o mapa conterá tanto áreas montanhosas como áreas planas. Quanto maior a variedade, maiores as diferenças de altura entre as áreas montanhosas e as planas. STR_CONFIG_SETTING_RIVER_AMOUNT :Quantidade de rios: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Escolher quantos rios serão gerados @@ -1602,12 +1603,12 @@ STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Conduzir pela d STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotação do mapa topográfico: {STRING} STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Escolher em que sentido a imagem do mapa topográfico será girada para caber no mundo do jogo ###length 2 -STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Sentido Anti-Horário +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Sentido Anti-horário STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Sentido Horário STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :Altura de um mapa de cenário plano: {STRING} ###length 2 -STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}Um ou mais quadrados no canto norte não estão vazios +STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}Um ou mais quadrados na borda norte não estão vazios STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}Um ou mais quadrados em um dos cantos não é água STR_CONFIG_SETTING_STATION_SPREAD :Tamanho máximo de estação {STRING} @@ -1617,7 +1618,7 @@ STR_CONFIG_SETTING_SERVICEATHELIPAD :Manutenção au STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Efetuar manutenção de helicópteros após cada pouso, mesmo se não existir um depósito no aeroporto STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Ligar ferramentas de paisagismo com ferramentas de trilhos/estradas/água/aeroportos: {STRING} -STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Quando abrir uma barra de feramentas para um tipo de transporte, abrir também a barra de terraplanagem +STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Quando abrir uma barra de ferramentas para um tipo de transporte, abrir também a barra de terraplanagem STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :Cor do solo usada no minimapa: {STRING} STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Cor do terreno no minimapa @@ -1659,7 +1660,7 @@ STR_CONFIG_SETTING_PREFER_TEAMCHAT :Preferir chat d STR_CONFIG_SETTING_PREFER_TEAMCHAT_HELPTEXT :Troca o mapeamento entre o chat interno da empresa e o chat público para e respectivamente STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :Velocidade da roda do mouse no mapa: {STRING} -STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Controla a sensibilidade da roda do moude na rolagem +STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Controla a sensibilidade da roda do mouse na rolagem STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING :Função da roda do mouse: {STRING} STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING_HELPTEXT :Ativa o rolamento com rodas de mouse bidimensionais @@ -1704,7 +1705,7 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :longo (31 Dez 2 STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :curto (31-12-2008) STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31) -STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Pausar automaticamente ao inicar um novo jogo: {STRING} +STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Pausar automaticamente ao iniciar um novo jogo: {STRING} STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Quando ativado, o jogo irá pausar automaticamente quando um novo jogo começar, permitindo o estudo detalhado do mapa STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Durante uma pausa permitir: {STRING} @@ -1809,7 +1810,7 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Se ativado, nã STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desativar embarcação para o computador: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Se ativado, não permite que jogadores controlados pelo computador construam embarcações -STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permitir IA em multiplayer: {STRING} +STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permitir IA's em multijogador: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite que jogadores controlados pelo computador participem de jogos multijogador STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes antes de scripts serem suspensos: {STRING} @@ -1837,7 +1838,7 @@ STR_CONFIG_SETTING_NOSERVICE :Desativar manut STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Quando ativado, veículos não recebem manutenção se não puderem quebrar STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Penalidade de velocidade de carregamento para trens que são mais longos que a estação: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quando ativado, os trens que são muito compridos para a estação são carregados mais lentamente do que os trens que caibem na estação. Esta definição não afeta a geração de rotas. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quando ativado, os trens que são muito compridos para a estação demoram mais tempo para carregar do que um trem que cabe na estação. Esta definição não afeta a geração de rotas. STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ativar limites de velocidade para vagões: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Quando ativado, aplica os limites de velocidade dos vagões para definir a velocidade máxima de um trem @@ -1891,7 +1892,7 @@ STR_CONFIG_SETTING_NEWS_SUBSIDIES :Subsídios: {ST STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Mostrar um jornal sobre eventos relacionados a subsídios STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION :Informações gerais: {STRING} -STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION_HELPTEXT :Mostrar um jornal sobre eventos gerais, como a compra de direitos de exclusividade ou financimento para a reconstrução de estradas +STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION_HELPTEXT :Mostrar um jornal sobre eventos gerais, como a compra de direitos de exclusividade ou financiamento para a reconstrução de estradas ###length 3 STR_CONFIG_SETTING_NEWS_MESSAGES_OFF :Desligado STR_CONFIG_SETTING_NEWS_MESSAGES_SUMMARY :Resumo @@ -2063,7 +2064,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Métrico (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_DAYS :Unidades do jogo (quadrados/dia) -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_SECS :Unidades do jogo (quadrados/seg) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_SECS :Unidades do jogo (quadrados/s) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :Nós STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Unidade de potência veicular: {STRING} @@ -2161,7 +2162,7 @@ STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... igno STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ignorando conjunto de Sons Base '{STRING}': não encontrado STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ignorando conjunto de Músicas Base '{STRING}': não encontrado STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Memória insuficiente -STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Falha ao alocar {BYTES} de spritecache. A spritecache foi reduzida para {BYTES}. Isto irá reduzir o desempenho do OpenTTD. Para diminuir os requisitos de memória você pode desabilitar gráficos de 32bpp e/ou os niveis de zoom +STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Falha ao alocar {BYTES} de spritecache. A spritecache foi reduzida para {BYTES}. Isto irá reduzir o desempenho do OpenTTD. Para diminuir os requisitos de memória você pode desabilitar gráficos de 32 bpp e/ou os níveis de zoom # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Erro nas configurações de vídeo... @@ -2238,7 +2239,7 @@ STR_HELP_WINDOW_BUGTRACKER :{BLACK}Relatar STR_HELP_WINDOW_COMMUNITY :{BLACK}Comunidade # Cheat window -STR_CHEATS :{WHITE}Opções da Sandbox +STR_CHEATS :{WHITE}Opções da "Sandbox" STR_CHEAT_MONEY :{LTBLUE}Aumentar dinheiro em {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Jogando como empresa: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Escavadeira mágica (remove indústrias, objetos estáticos): {ORANGE}{STRING} @@ -2314,7 +2315,7 @@ STR_FACE_SIMPLE :{BLACK}Simples STR_FACE_SIMPLE_TOOLTIP :{BLACK}Seleção simples de face STR_FACE_LOAD :{BLACK}Carregar STR_FACE_LOAD_TOOLTIP :{BLACK}Carregar face favorita -STR_FACE_LOAD_DONE :{WHITE}Sau face favorita foi carregada do arquivo de configuração do OpenTTD +STR_FACE_LOAD_DONE :{WHITE}Sua face favorita foi carregada do arquivo de configuração do OpenTTD STR_FACE_FACECODE :{BLACK}Número da face do jogador STR_FACE_FACECODE_TOOLTIP :{BLACK}Ver e/ou definir o número de face do presidente da empresa STR_FACE_FACECODE_CAPTION :{WHITE}Ver e/ou definir número de face do presidente @@ -2324,7 +2325,7 @@ STR_FACE_SAVE :{BLACK}Salvar STR_FACE_SAVE_TOOLTIP :{BLACK}Salvar face favorita STR_FACE_SAVE_DONE :{WHITE}Esta face será salva como sua favorita no arquivo de configuração do OpenTTD STR_FACE_EUROPEAN :{BLACK}Europeu -STR_FACE_SELECT_EUROPEAN :{BLACK}Selecionar faces Européias +STR_FACE_SELECT_EUROPEAN :{BLACK}Selecionar faces Europeias STR_FACE_AFRICAN :{BLACK}Africano STR_FACE_SELECT_AFRICAN :{BLACK}Selecionar faces Africanas STR_FACE_YES :Sim @@ -2332,8 +2333,8 @@ STR_FACE_NO :Não STR_FACE_MOUSTACHE_EARRING_TOOLTIP :{BLACK}Ativar bigode ou brinco STR_FACE_HAIR :Cabelo: STR_FACE_HAIR_TOOLTIP :{BLACK}Alterar cabelo -STR_FACE_EYEBROWS :Sombrancelhas: -STR_FACE_EYEBROWS_TOOLTIP :{BLACK}Alterar sombrancelhas +STR_FACE_EYEBROWS :Sobrancelhas: +STR_FACE_EYEBROWS_TOOLTIP :{BLACK}Alterar sobrancelhas STR_FACE_EYECOLOUR :Cor do olho: STR_FACE_EYECOLOUR_TOOLTIP :{BLACK}Alterar cor do olho STR_FACE_GLASSES :Óculos: @@ -2482,7 +2483,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Nome STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Seu nome de jogador STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Editar o seu nome de jogador STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Seu nome de jogador -STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Ações administrattivas a serem executadas para este cliente +STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Ações administrativas a serem executadas para este cliente STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Ações administrativas a serem executadas para esta empresa STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Juntar-se a esta empresa STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Enviar uma mensagem a este jogador @@ -2576,7 +2577,7 @@ STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Você fo STR_NETWORK_ERROR_KICKED :{WHITE}Você foi expulso do jogo STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Motivo: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Não é permitido trapacear neste servidor -STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Você enviou muitos comandos ao servidor +STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Você estava enviando comandos demais ao servidor STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Você demorou muito para digitar a senha STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Seu computador é muito lento para acompanhar o servidor STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Seu computador demorou muito para transferir o mapa @@ -2602,7 +2603,7 @@ STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :empresa errada STR_NETWORK_ERROR_CLIENT_KICKED :expulso pelo servidor STR_NETWORK_ERROR_CLIENT_CHEATER :estava tentando trapacear STR_NETWORK_ERROR_CLIENT_SERVER_FULL :servidor cheio -STR_NETWORK_ERROR_CLIENT_TOO_MANY_COMMANDS :estava enviando muitos comandos +STR_NETWORK_ERROR_CLIENT_TOO_MANY_COMMANDS :estava enviando comandos demais STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :a senha não foi recebida a tempo STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :limite de tempo atingido STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :demorou muito para transferir o mapa @@ -2787,7 +2788,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construi STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Construir ponto de controle na ferrovia. Ctrl+Clique para selecionar outro ponto de controle e unir com este. Ctrl+Shift+Clique mostra o custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Construir estação ferroviária. Ctrl+Clique para selecionar outra estação e unir com esta. Ctrl+Shift+Clique mostra o custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Construir sinal na ferrovia. Ctrl+Clique para construir o sinal com estilo diferente{}Clique+Arraste para preencher a seção selecionada da ferrovia com os sinais no espaçamento escolhido. Ctrl+Clique+Arraste para colocar sinais até a próxima junção, estação ou sinal. Ctrl+Shift+Clique+Arrastar mostra o custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Construir ponte ferroviária. Presionar Shift mostra o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Construir ponte ferroviária. Pressionar Shift mostra o custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Construir túnel ferroviário. Shift+Clique mostra o custo estimado STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Construir/remover ferrovia, sinais, pontos de controle e estações. Ctrl+Clique para também remover os trilhos de pontos de controle e das estações STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Converter/Atualizar tipo de trilho. Shift+Clique mostra o custo estimado @@ -2827,7 +2828,7 @@ STR_STATION_CLASS_WAYP_WAYPOINT :Ponto de contro # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Seleção de Sinais -STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Mostar/ocultar os tipos de sinais avançados +STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Mostrar/ocultar os tipos de sinais avançados STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Sinal de Bloqueio (semáforo){}Este é o tipo mais básico de sinal, permitindo apenas um trem passar no mesmo bloco de linha ao mesmo tempo STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Sinal de Entrada (semáforo){}Permanece verde enquanto houver um ou mais sinais de saída verdes na seção da linha. Caso contrário, ficará vermelho STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Sinal de Saída (semáforo){}Funciona da mesma forma que o sinal de bloqueio, mas é necessário para ativar a cor correta nos pré-sinais de entrada e combinado. @@ -2874,7 +2875,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construir depósito de bonde (para compra e manutenção de bondes). Shift+Clique mostra o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Construir estação de ônibus. Ctrl+Clique para selecionar outra estação e unir com esta. Ctrl+Shift+Clique mostra o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Construir estação de bonde de passageiros. Ctrl+Clique para selecionar outra estação e unir com esta. Ctrl+Shift+Clique mostra o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Construir estação de caminhões. Ctrl+Clique para selecionar outra estação e unir com esta. Ctrl+Shift+Clique mostra o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Construir estação de caminhão. Ctrl+Clique para selecionar outra estação e unir com esta. Ctrl+Shift+Clique mostra o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Construir estação de bonde de carga. Ctrl+Clique para selecionar outra estação e unir com esta. Ctrl+Shift+Clique mostra o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Ativar/Desativar estradas de sentido único STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Construir ponte rodoviária. Shift+Clique mostra o custo estimado @@ -2898,8 +2899,8 @@ STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Selecion # Road vehicle station construction window STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Orientação da Estação de Ônibus STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Selecionar a orientação da estação de ônibus -STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Orientação da Estação de Caminhões -STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Selecionar orientação da estação de caminhões +STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Orientação da Estação de Caminhão +STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Selecionar orientação da estação de caminhão STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Orientação da Estação de Bonde de Passageiros STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Selecionar orientação da estação de bonde de passageiros STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Orientação da Estação de Bonde de Carga @@ -2912,7 +2913,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Construi STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Construir eclusas. Shift+Clique mostra o custo estimado STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Construir depósito de embarcações (para compra e manutenção de embarcações). Shift+Clique mostra o custo estimado STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construir doca naval. Ctrl+Clique para selecionar outra estação e unir com esta. Ctrl+Shift+Clique mostra o custo estimado -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Colocar uma bóia que pode ser usada como ponto de controle. Shift+Clique mostra o custo estimado +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Colocar uma boia que pode ser usada como ponto de controle. Shift+Clique mostra o custo estimado STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construir aqueduto. Shift+Clique mostra o custo estimado STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Construir canal. Usar Ctrl+Clique no nível do mar para inundar com água do mar STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Colocar rios. Ctrl+Clique para selecionar diagonalmente @@ -2970,7 +2971,7 @@ STR_OBJECT_CLASS_TRNS :Transmissores # Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Árvores -STR_PLANT_TREE_TOOLTIP :{BLACK}Escolher tipo de árvore para plantar. Se no quadrado já existir uma árvore, serão adicionadas mais árvores de diferentes tipos indepentendemente do tipo selecionado +STR_PLANT_TREE_TOOLTIP :{BLACK}Escolher tipo de árvore para plantar. Se no quadrado já existir uma árvore, serão adicionadas mais árvores de diferentes tipos independentemente do tipo selecionado STR_TREES_RANDOM_TYPE :{BLACK}Árvores de tipo aleatório STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plantar árvores de tipo aleatório. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Ctrl+Shift+Clique+Arrastar mostra o custo estimado STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Plantar Aleatoriamente @@ -3020,7 +3021,7 @@ STR_FOUND_TOWN_INITIAL_SIZE_LARGE_BUTTON :{BLACK}Grande STR_FOUND_TOWN_SIZE_RANDOM :{BLACK}Aleatório STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Selecionar o tamanho da localidade STR_FOUND_TOWN_CITY :{BLACK}Cidade -STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Cidades crescem mais depressa do que as localidades normais{}Dependendo das configuraçãos, elas são maiores quando fundadas +STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Cidades crescem mais depressa do que as localidades normais{}Dependendo das configurações, elas são maiores quando fundadas STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Disposição de estradas na localidade: STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Selecionar disposição das estradas utilizada para esta localidade @@ -3110,17 +3111,17 @@ STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Ferrovia com si STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Ferrovia com sinais de caminho STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Ferrovia com sinais de sentido único STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Ferrovia com sinais de bloqueio e pré-sinais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Ferrovia com sinais de bloqueio e de saida +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Ferrovia com sinais de bloqueio e de saída STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Ferrovia com sinais de bloqueio e combinados STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Ferrovia com sinais de bloqueio e de caminho STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Ferrovia com sinais de bloqueio e de sentido único -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Ferrovia com pré-sinais e sinais de saida +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Ferrovia com pré-sinais e sinais de saída STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Ferrovia com pré-sinais e sinais combinados STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Ferrovia com pré-sinais e sinais de caminho STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Ferrovia com pré-sinais e sinais de sentido único -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Ferrovia com sinais de saida e combinados +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Ferrovia com sinais de saída e combinados STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Ferrovia com sinais de saída e de caminho -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Ferrovia com sinais de saida e de sentido único +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Ferrovia com sinais de saída e de sentido único STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Ferrovia com sinais combinados e de caminho STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Ferrovia com sinais combinados e de sentido único STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Ferrovia com sinais de caminho e de sentido único @@ -3143,10 +3144,10 @@ STR_LAI_TREE_NAME_CACTUS_PLANTS :Cactos STR_LAI_STATION_DESCRIPTION_RAILROAD_STATION :Estação ferroviária STR_LAI_STATION_DESCRIPTION_AIRCRAFT_HANGAR :Hangar STR_LAI_STATION_DESCRIPTION_AIRPORT :Aeroporto -STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Estação de caminhões +STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Estação de caminhão STR_LAI_STATION_DESCRIPTION_BUS_STATION :Estação de ônibus STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :Doca naval -STR_LAI_STATION_DESCRIPTION_BUOY :Bóia +STR_LAI_STATION_DESCRIPTION_BUOY :Boia STR_LAI_STATION_DESCRIPTION_WAYPOINT :Ponto de controle STR_LAI_WATER_DESCRIPTION_WATER :Água @@ -3259,8 +3260,8 @@ STR_SAVELOAD_HOME_BUTTON :{BLACK}Clique a STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} livres STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Lista de unidades, diretórios e arquivos de jogos gravados STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Nome selecionado para salvar o jogo -STR_SAVELOAD_DELETE_BUTTON :{BLACK}Remover -STR_SAVELOAD_DELETE_TOOLTIP :{BLACK}Remover o jogo selecionado +STR_SAVELOAD_DELETE_BUTTON :{BLACK}Apagar +STR_SAVELOAD_DELETE_TOOLTIP :{BLACK}Apagar o jogo salvo selecionado STR_SAVELOAD_SAVE_BUTTON :{BLACK}Salvar STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Salvar o jogo atual, usando o nome escolhido STR_SAVELOAD_LOAD_BUTTON :{BLACK}Abrir @@ -3335,7 +3336,7 @@ STR_MAPGEN_TOWN_NAME_HUNGARIAN :Húngaro STR_MAPGEN_TOWN_NAME_AUSTRIAN :Austríaco STR_MAPGEN_TOWN_NAME_ROMANIAN :Romeno STR_MAPGEN_TOWN_NAME_CZECH :Checo -STR_MAPGEN_TOWN_NAME_SWISS :Suiço +STR_MAPGEN_TOWN_NAME_SWISS :Suíço STR_MAPGEN_TOWN_NAME_DANISH :Dinamarquês STR_MAPGEN_TOWN_NAME_TURKISH :Turco STR_MAPGEN_TOWN_NAME_ITALIAN :Italiano @@ -3390,7 +3391,7 @@ STR_GENERATION_WORLD_GENERATION :{BLACK}Geraçã STR_GENERATION_RIVER_GENERATION :{BLACK}Geração de rios STR_GENERATION_TREE_GENERATION :{BLACK}Geração de árvores STR_GENERATION_OBJECT_GENERATION :{BLACK}Geração de objetos -STR_GENERATION_CLEARING_TILES :{BLACK}Geração de area rochosa e irregular +STR_GENERATION_CLEARING_TILES :{BLACK}Geração de área rochosa e irregular STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurando o jogo STR_GENERATION_PREPARING_TILELOOP :{BLACK}Executando o tile-loop STR_GENERATION_PREPARING_SCRIPT :{BLACK}Executando o script @@ -3406,8 +3407,8 @@ STR_NEWGRF_FILTER_TITLE :{ORANGE}Filtro: STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}Carrega a predefinição selecionada STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}Salvar predefinição STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP :{BLACK}Salvar a lista atual como uma predefinição -STR_NEWGRF_SETTINGS_PRESET_DELETE :{BLACK}Remover predefinição -STR_NEWGRF_SETTINGS_PRESET_DELETE_TOOLTIP :{BLACK}Remover a predefinição selecionada +STR_NEWGRF_SETTINGS_PRESET_DELETE :{BLACK}Excluir predefinição +STR_NEWGRF_SETTINGS_PRESET_DELETE_TOOLTIP :{BLACK}Excluir a predefinição selecionada STR_NEWGRF_SETTINGS_ADD :{BLACK}Adicionar STR_NEWGRF_SETTINGS_ADD_FILE_TOOLTIP :{BLACK}Adicionar NewGRF selecionado à sua configuração STR_NEWGRF_SETTINGS_RESCAN_FILES :{BLACK}Procurar arquivos NewGRF @@ -3465,7 +3466,7 @@ STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Alterar STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Fechar STR_NEWGRF_PARAMETERS_RESET :{BLACK}Redefinir STR_NEWGRF_PARAMETERS_RESET_TOOLTIP :{BLACK}Restaurar todos os parâmetros para os valores padrão -STR_NEWGRF_PARAMETERS_DEFAULT_NAME :Parãmetro {NUM} +STR_NEWGRF_PARAMETERS_DEFAULT_NAME :Parâmetro {NUM} STR_NEWGRF_PARAMETERS_SETTING :{STRING}: {ORANGE}{STRING} STR_NEWGRF_PARAMETERS_NUM_PARAM :{LTBLUE}Número de parâmetros: {ORANGE}{NUM} @@ -3522,18 +3523,18 @@ STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} deve STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} deve ser carregado depois de {2:STRING} STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} requer OpenTTD versão {2:STRING} ou superior STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :o arquivo GRF foi designado para tradução -STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Existem muitos NewGRFs carregados +STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Foram carregados NewGRFs demais STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Carregar {1:STRING} como NewGRF estático com {2:STRING} pode causar dessincronização STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Sprite inesperado (sprite {3:NUM}) STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Propriedade de Ação 0 desconhecida {4:HEX} (sprite {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Tentativa de uso de ID inválido (sprite {3:NUM}) STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} contém um sprite corrompido. Todos os sprites corrompidos serão apresentados como um ponto de interrogação (?) vermelho -STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contém multiplas entradas de Ação 8 (sprite {3:NUM}) +STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contém múltiplas entradas Ação 8 (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Leitura após o final do pseudo-sprite (sprite {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF necessários estão indisponíveis (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} foi desativado por {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato de layout de sprite inválido/desconhecido (sprite {3:NUM}) -STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Existem muitos elementos na lista de valores de propriedade (sprite {3:NUM}, property {4:HEX}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Há elementos demais na lista de valores de propriedade (sprite {3:NUM}, propriedade {4:HEX}) STR_NEWGRF_ERROR_INDPROD_CALLBACK :Retorno de produção da indústria inválido (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings @@ -3542,7 +3543,7 @@ STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Você e STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Não é possível adicionar arquivo: ID do GRF duplicado STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Arquivo correspondente não encontrado (GRF compatível carregado) -STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Não é possível adicionar arquivo: Limite de NewGRF's atingido +STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Não é possível adicionar arquivo: limite de NewGRF's atingido STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}GRF(s) compatíveis foram carregados para os arquivos ausentes STR_NEWGRF_DISABLED_WARNING :{WHITE}Arquivo(s) GRF ausentes foram desativados @@ -3561,7 +3562,7 @@ STR_NEWGRF_BROKEN :{WHITE}O compor STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}O estado do vagão motorizado mudou para '{1:ENGINE}' quando estiver fora do depósito STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}O comprimento do veículo mudou para '{1:ENGINE}' quando estiver fora do depósito STR_NEWGRF_BROKEN_CAPACITY :{WHITE}A capacidade do veículo mudou para '{1:ENGINE}' quando estiver fora do depósito ou em adaptação -STR_BROKEN_VEHICLE_LENGTH :{WHITE}O trem '{VEHICLE}' pertencente a '{COMPANY}' tem um comprimento inválido. Possivelmente devido a problemas com NewGRFs. Pode ocorrer desincronização ou travamento +STR_BROKEN_VEHICLE_LENGTH :{WHITE}O trem '{VEHICLE}' pertencente a '{COMPANY}' tem um comprimento inválido. Possivelmente devido a problemas com NewGRFs. Pode ocorrer erros de sincronização ou travamento STR_NEWGRF_BUGGY :{WHITE}O NewGRF '{0:STRING}' retorna informação incorreta STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}A informação de carga/adaptação para '{1:ENGINE}' é diferente da lista de compra depois da construção. Isto pode fazer a renovação/substituição automática falhar se adaptar corretamente @@ -3656,7 +3657,7 @@ STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Comprar direito STR_LOCAL_AUTHORITY_ACTION_BRIBE :Subornar a autoridade local ###next-name-looks-similar -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma campanha publicitária pequena local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na avaliação da estação em um raio pequeno ao redor do centro da localidade.{}{POP_COLOUR}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma campanha publicitária pequena local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na avaliação da estação em um raio pequeno ao redor do centro da localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma campanha publicitária média local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na avaliação da estação em um raio médio ao redor do centro da cidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma campanha publicitária grande local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na avaliação da estação em um raio grande ao redor do centro da localidade{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Financiar a reconstrução da rede urbana de estradas.{}Provoca uma perturbação considerável no tráfego por até 6 meses.{}{POP_COLOUR}Custo: {CURRENCY_LONG} @@ -3809,7 +3810,7 @@ STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Mostrar STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Mostrar todas as aeronaves que têm esta estação na sua programação STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Mostrar todas as embarcações que têm esta estação na sua programação -STR_STATION_VIEW_RENAME_STATION_CAPTION :Renomear estação/área de carga +STR_STATION_VIEW_RENAME_STATION_CAPTION :Renomear estação/local de carga STR_STATION_VIEW_CLOSE_AIRPORT :{BLACK}Fechar aeroporto STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Impedir aviões de pousarem nesse aeroporto @@ -3818,7 +3819,7 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Impedir STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centralizar visualização na localização do ponto de controle. Ctrl+Clique abre uma nova visualização na localização do ponto de controle STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Alterar o nome do ponto de controle -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centralizar visualização na localização da bóia. Ctrl+Clique abre uma nova visualização na localização da bóia +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centralizar visualização na localização da boia. Ctrl+Clique abre uma nova visualização na localização da boia STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Alterar o nome da boia STR_EDIT_WAYPOINT_NAME :{WHITE}Editar nome do ponto de controle @@ -4024,13 +4025,13 @@ STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COM STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - Clique em um grupo para listar todos os veículos do grupo. Clique+Arraste para organizar a hierarquia. STR_GROUP_CREATE_TOOLTIP :{BLACK}Clique para criar um grupo -STR_GROUP_DELETE_TOOLTIP :{BLACK}Remover o grupo selecionado +STR_GROUP_DELETE_TOOLTIP :{BLACK}Excluir o grupo selecionado STR_GROUP_RENAME_TOOLTIP :{BLACK}Renomear o grupo selecionado STR_GROUP_LIVERY_TOOLTIP :{BLACK}Alterar a pintura do grupo selecionado STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clique para excluir esse grupo da substituição automática global. Ctrl+Clique para excluir também os subgrupos. -STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Remover grupo -STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Você tem certeza que deseja remover esse grupo e seus descendentes? +STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Excluir grupo +STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Você tem certeza que deseja excluir esse grupo e seus descendentes? STR_GROUP_ADD_SHARED_VEHICLE :Adicionar veículos compartilhados STR_GROUP_REMOVE_ALL_VEHICLES :Remover todos os veículos @@ -4095,10 +4096,10 @@ STR_CARGO_TYPE_FILTER_FREIGHT :Carga STR_CARGO_TYPE_FILTER_NONE :Nenhum ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista de seleção de trens. Clique em um trem para informações. Cltr+Clique para mostrar/ocultar esse tipo de veículo -STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Lista de seleção de veículos rodoviários. Clique em um veículo para informações. Cltr+Clique para mostrar/ocultar esse tipo de veículo +STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista de seleção de trens. Clique em um trem para informações. Ctrl+Clique para mostrar/ocultar esse tipo de veículo +STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Lista de seleção de veículos rodoviários. Clique em um veículo para informações. Ctrl+Clique para mostrar/ocultar esse tipo de veículo STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Lista de seleção de embarcações. Clique em uma embarcação para informações. Ctrl+Clique para mostrar/ocultar esse tipo de embarcação -STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lista de seleção de aeronaves. Clique em uma aeronave para informações. Cltr+Clique para mostrar/ocultar esse tipo de aeronave +STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lista de seleção de aeronaves. Clique em uma aeronave para informações. Ctrl+Clique para mostrar/ocultar esse tipo de aeronave ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Comprar Veículo @@ -4229,7 +4230,7 @@ STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrali STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Obter uma lista de todos os trens com este depósito em suas ordens STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Obter uma lista de todos os veículos com este depósito em suas ordens STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TOOLTIP :{BLACK}Obter uma lista de todas as embarcações com este depósito em suas ordens -STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Obter uma lista de todas as aeronaves com qualquer hangar deste aeoroporto em suas ordens +STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Obter uma lista de todas as aeronaves com qualquer hangar deste aeroporto em suas ordens ###length VEHICLE_TYPES STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP :{BLACK}Clique para todos os trens pararem dentro do depósito @@ -4299,7 +4300,7 @@ STR_REPLACE_NOT_REPLACING :{BLACK}Não sub STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Nenhum veículo selecionado STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} quando velho STR_REPLACE_VEHICLES_STOP :{BLACK}Parar Substituição de Veículos -STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Pressione para interromper a subsituição do tipo de locomotiva selecionda à esquerda +STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Pressione para interromper a substituição do tipo de locomotiva selecionada à esquerda STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Alternar entre a janela de substituição de locomotivas e a de substituição de vagões STR_REPLACE_ENGINES :Locomotivas @@ -4309,13 +4310,13 @@ STR_REPLACE_ALL_ROADTYPE :Todos os veícu ###length 2 STR_REPLACE_HELP_RAILTYPE :{BLACK}Selecionar o tipo de ferrovia para o qual deseja efetuar a substituição das locomotivas -STR_REPLACE_HELP_ROADTYPE :{BLACK}Selecionar o tipo de estrada para o qual você deseja substituir os veículoss +STR_REPLACE_HELP_ROADTYPE :{BLACK}Selecionar o tipo de estrada para o qual você deseja substituir os veículos ###next-name-looks-similar STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Mostrar qual locomotiva que substituirá a que está selecionada à esquerda, se houver selecionada STR_REPLACE_RAIL_VEHICLES :Trens STR_REPLACE_ELRAIL_VEHICLES :Locomotivas Elétricas -STR_REPLACE_MONORAIL_VEHICLES :Monotrilho +STR_REPLACE_MONORAIL_VEHICLES :Monotrilhos STR_REPLACE_MAGLEV_VEHICLES :Maglevs STR_REPLACE_ROAD_VEHICLES :Veículos rodoviários @@ -4352,9 +4353,9 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Forçar STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Centralizar visualização no destino da ordem. Ctrl+Clique abre uma nova visualização na localização do destino da ordem ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Adaptar trem para transporatr um tipo de carga diferente +STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Adaptar trem para transportar um tipo de carga diferente STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Adaptar veículo para transportar um tipo de carga diferente -STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Adaptar embarcação para transporatr um tipo de carga diferente +STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Adaptar embarcação para transportar um tipo de carga diferente STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Adaptar aeronave para transportar um tipo de carga diferente ###length VEHICLE_TYPES @@ -4430,7 +4431,7 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Peso: {L STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucro neste ano: {LTBLUE}{CURRENCY_LONG} (ano passado: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Lucro neste ano: {LTBLUE}{CURRENCY_LONG} (último ano: {CURRENCY_LONG}) {BLACK}Desempenho min.: {LTBLUE}{POWER_TO_WEIGHT} -STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Lucro neste período: {LTBLUE}{CURRENCY_LONG} (útimo período: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Lucro neste período: {LTBLUE}{CURRENCY_LONG} (último período: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Lucro neste período: {LTBLUE}{CURRENCY_LONG} (último período: {CURRENCY_LONG}) {BLACK}Desempenho mín.: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Confiabilidade: {LTBLUE}{COMMA}% {BLACK}Quebras desde a última manutenção: {LTBLUE}{COMMA} @@ -4447,12 +4448,12 @@ STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Interval STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Intervalo de manutenção: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Última manutenção: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Última manutenção: {LTBLUE}{NUM} minuto{P "" s} atrás -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Aumentar o intervalo de manutenção em 10 dias. Ctrl+Click para aumentar o intervalo de manutenção em 5 dias -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Aumentar o intervalo de manutenção em 5 minutos. Ctrl+Click para aumentar o intervalo de manutenção em 1 minuto -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Aumentar o intervalo de manutenção em 10 porcento. Ctrl+Click para aumentar o intervalo de manutenção em 5 porcento -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Diminuir o intervalo de manutenção em 10 dias. Ctrl+Click para diminuir o intervalo de manutenção em 5 dias -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Diminuir o intervalo de manutenção em 5 minutos. Ctrl+Click para diminuir o intervalo de manutenção em 1 minuto -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Diminuir o intervalo de manutenção em 10 porcento. Ctrl+Click para diminuir o intervalo de manutenção em 5 porcento +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Aumentar o intervalo de manutenção em 10 dias. Ctrl+Clique para aumentar o intervalo de manutenção em 5 dias +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Aumentar o intervalo de manutenção em 5 minutos. Ctrl+Clique para aumentar o intervalo de manutenção em 1 minuto +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Aumentar o intervalo de manutenção em 10 porcento. Ctrl+Clique para aumentar o intervalo de manutenção em 5 porcento +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Diminuir o intervalo de manutenção em 10 dias. Ctrl+Clique para diminuir o intervalo de manutenção em 5 dias +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Diminuir o intervalo de manutenção em 5 minutos. Ctrl+Clique para diminuir o intervalo de manutenção em 1 minuto +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Diminuir o intervalo de manutenção em 10 porcento. Ctrl+Clique para diminuir o intervalo de manutenção em 5 porcento STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Alterar o tipo de intervalo entre manutenções STR_VEHICLE_DETAILS_DEFAULT :Padrão @@ -4656,7 +4657,7 @@ STR_ORDER_TRANSFER_FULL_LOAD :(Transferir e a STR_ORDER_TRANSFER_FULL_LOAD_ANY :(Transferir e aguardar por qualquer carga completa) STR_ORDER_TRANSFER_NO_LOAD :(Transferir e partir vazio) STR_ORDER_NO_UNLOAD :(Não descarregar e pegar carga) -STR_ORDER_NO_UNLOAD_FULL_LOAD :(Não descarregar e aquardar por carga completa) +STR_ORDER_NO_UNLOAD_FULL_LOAD :(Não descarregar e aguardar por carga completa) STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Não descarregar e aguardar por qualquer carga completa) STR_ORDER_NO_UNLOAD_NO_LOAD :(Não descarregar e não carregar) @@ -4747,8 +4748,8 @@ STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Alternar STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY} STR_TIMETABLE_DEPARTURE_DATE :D: {COLOUR}{DATE_TINY} -STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} seg. -STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :D: {COLOUR}{COMMA} seg. +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} s +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :D: {COLOUR}{COMMA} s # Date window (for timetable) @@ -4773,7 +4774,7 @@ STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Parar em STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Parar em STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Quando uma mensagem de registo da IA for igual a esta sequência, o jogo é pausado STR_AI_DEBUG_MATCH_CASE :{BLACK}Diferenciar maiúsculas/minúsculas -STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Ativar correspondência de maiúsculas/minúsculas na comparação das mensagens de resgistro da IA com a sequência de parada +STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Ativar correspondência de maiúsculas/minúsculas na comparação das mensagens de registro da IA com a sequência de parada STR_AI_DEBUG_CONTINUE :{BLACK}Continuar STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Sair da pausa e continuar a IA STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Ver saída de depuração desta IA. Ctrl+Clique para abrir em uma nova janela @@ -4896,7 +4897,7 @@ STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravaç STR_ERROR_AUTOSAVE_FAILED :{WHITE}Falha ao salvar automaticamente STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Não é possível ler a unidade STR_ERROR_GAME_SAVE_FAILED :{WHITE}Falha ao salvar o jogo{}{STRING} -STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Não é possível excluir o arquivo +STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Não é possível apagar o arquivo STR_ERROR_GAME_LOAD_FAILED :{WHITE}Falha ao abrir o jogo{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erro interno: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Jogo salvo corrompido - {STRING} @@ -4967,9 +4968,9 @@ STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}A autori STR_ERROR_BRIBE_FAILED :{WHITE}A sua tentativa de suborno foi descoberta por um investigador regional # Levelling errors -STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}Não é possível elevar terreno deste local... -STR_ERROR_CAN_T_LOWER_LAND_HERE :{WHITE}Não é possível abaixar terreno deste local... -STR_ERROR_CAN_T_LEVEL_LAND_HERE :{WHITE}Não é possível nivelar o terreno deste local... +STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}Não é possível elevar terreno aqui... +STR_ERROR_CAN_T_LOWER_LAND_HERE :{WHITE}Não é possível abaixar terreno aqui... +STR_ERROR_CAN_T_LEVEL_LAND_HERE :{WHITE}Não é possível nivelar o terreno aqui... STR_ERROR_EXCAVATION_WOULD_DAMAGE :{WHITE}A escavação estragaria o túnel STR_ERROR_ALREADY_AT_SEA_LEVEL :{WHITE}... já está ao nível do mar STR_ERROR_TOO_HIGH :{WHITE}... muito alto @@ -4993,21 +4994,21 @@ STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Não é # Town related errors STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Não é possível construir localidades STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Não é possível renomear a localidade... -STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Não é possível fundar uma localidade neste local... +STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Não é possível fundar uma localidade aqui... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Não é possível expandir a localidade... STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... muito perto da borda do mapa STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... muito perto de outra localidade -STR_ERROR_TOO_MANY_TOWNS :{WHITE}... existem muitas localidades +STR_ERROR_TOO_MANY_TOWNS :{WHITE}... há localidades demais STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... não existe mais espaço no mapa STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Trabalhos na estrada sendo realizados STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Não é possível remover esta localidade...{}Uma estação ou depósito refere-se à localidade ou não é possível remover um quadrado pertencente à mesma STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... não há local adequado para uma estátua no centro desta localidade # Industry related errors -STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... existem muitas indústrias +STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... há indústrias demais STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Não é possível gerar indústrias... -STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Não é possível construir {STRING} neste local... -STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Não é possível construir este tipo de indústria neste local... +STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Não é possível construir {STRING} aqui... +STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Não é possível construir este tipo de indústria aqui... STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Não é possível prospectar indústria... STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... muito perto de outra indústria STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... é necessário fundar uma localidade primeiro @@ -5029,20 +5030,20 @@ STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Não hav STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Alterar os parâmetros de geração do mapa para obter um mapa melhor # Station construction related errors -STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Não é possível construir estação ferroviária neste local... +STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Não é possível construir estação ferroviária aqui... STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Não é possível construir estação de ônibus... -STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Não é possível construir estação de carga para caminhões... +STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Não é possível construir estação de caminhão... STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Não é possível construir estação de bonde de passageiros... STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Não é possível construir estação de bonde de carga... -STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Não é possível construir doca neste local... -STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Não é possível construir aeroporto neste local... +STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Não é possível construir doca aqui... +STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Não é possível construir aeroporto aqui... -STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Unir mais de uma estação/área de carga existente +STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Unir mais de uma estação/local de carga existente STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... estação muito extensa -STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Muitas estações/locais de carga -STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Muitas partes de estação ferroviária -STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Muitas paradas de ônibus -STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Existem muitas áreas de carga +STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Há estações/locais de carga demais +STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Há partes de estação ferroviária demais +STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Há paradas de ônibus demais +STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Há estações de caminhão demais STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Muito perto de outra doca STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Muito perto de outro aeroporto STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Não é possível renomear a estação... @@ -5058,8 +5059,8 @@ STR_ERROR_CAN_T_REMOVE_BUS_STATION :{WHITE}Não é STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Não é possível remover estação de caminhão... STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Não é possível remover estação de bonde de passageiros... STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Não é possível remover estação de bonde de carga... -STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Precisa remover o ponto de parada primeiro -STR_ERROR_THERE_IS_NO_STATION :{WHITE}...não há estação neste local +STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Precisa remover o ponto de parada na estrada primeiro +STR_ERROR_THERE_IS_NO_STATION :{WHITE}...não há estação aqui STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}Precisa demolir a estação ferroviária primeiro STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Precisa demolir a estação de ônibus primeiro @@ -5073,20 +5074,20 @@ STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Precisa STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Unir mais de um ponto de controle existente STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Muito perto de outro ponto de controle -STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Não é possível construir ponto de controle de trem neste local... -STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Não é possível colocar bóia neste local... +STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Não é possível construir ponto de controle de trem aqui... +STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Não é possível colocar boia aqui... STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Não é possível alterar o nome do ponto de controle... -STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Não é possível remover ponto de controle de trem deste local... +STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Não é possível remover ponto de controle de trem aqui... STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Precisa remover o ponto de controle de trem primeiro -STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... bóia no caminho -STR_ERROR_BUOY_IS_IN_USE :{WHITE}... bóia está em uso por outra empresa! +STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... boia no caminho +STR_ERROR_BUOY_IS_IN_USE :{WHITE}... boia está em uso por outra empresa! # Depot related errors -STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Não é possível construir depósito ferroviário neste local... -STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Não é possível construir depósito de veículos rodoviários neste local... -STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Não é possível construir depósito de bonde neste local... -STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Não é possível construir depósito de embarcações neste local... +STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Não é possível construir depósito ferroviário aqui... +STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Não é possível construir depósito de veículos rodoviários aqui... +STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Não é possível construir depósito de bonde aqui... +STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Não é possível construir depósito de embarcações aqui... STR_ERROR_CAN_T_RENAME_DEPOT :{WHITE}Não é possível renomear o depósito... @@ -5116,7 +5117,7 @@ STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... não STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... não é possível desagrupar um veículo com uma ordem condicional # Autoreplace related errors -STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} é muito longo depois da substituíção +STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} é muito longo depois da substituição STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Regras de substituição automática/renovação não foram aplicadas STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(limite de dinheiro) STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}O novo veículo não pode transportar {STRING} @@ -5130,49 +5131,49 @@ STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Precisa STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Estrada de sentido único ou bloqueada STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Passagens de nível não são permitidas para este tipo de linha STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Passagens de nível não permitidas para este tipo de estrada -STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Não é possível construir sinais neste local... -STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Não é possível construir ferrovia neste local... -STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Não é possível remover ferrovia deste local... -STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Não é possível remover sinais deste local... -STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Não é possível converter os sinais deste local... +STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Não é possível construir sinais aqui... +STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Não é possível construir ferrovia aqui... +STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Não é possível remover ferrovia daqui... +STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Não é possível remover sinais daqui... +STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Não é possível converter os sinais aqui... STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}...não há ferrovia STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}...não há sinais -STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Não é possível converter o tipo de trilho deste local... +STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Não é possível converter o tipo de trilho aqui... # Road construction errors STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Precisa remover a estrada primeiro STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... estradas de sentido único não podem ter junções -STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Não é possível construir estrada neste local... -STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Não é possível construir linha de bonde neste local... -STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Não é possível remover estrada deste local... -STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Não é possível remover linha de bonde deste local... +STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Não é possível construir estrada aqui... +STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Não é possível construir linha de bonde aqui... +STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Não é possível remover estrada daqui... +STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Não é possível remover linha de bonde daqui... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... não há estrada STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... não há linha de bonde -STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Não é possível converter o tipo de estrada deste local... -STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Não é possível converter o tipo de linha de bonde deste local... +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Não é possível converter o tipo de estrada aqui... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Não é possível converter o tipo de linha de bonde aqui... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Estrada não adequada STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Linha de bonde não adequada # Waterway construction errors -STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Não é possível construir canais neste local... -STR_ERROR_CAN_T_BUILD_LOCKS :{WHITE}Não é possível construir eclusas neste local... -STR_ERROR_CAN_T_PLACE_RIVERS :{WHITE}Não é possível colocar rios neste local... +STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Não é possível construir canais aqui... +STR_ERROR_CAN_T_BUILD_LOCKS :{WHITE}Não é possível construir eclusas aqui... +STR_ERROR_CAN_T_PLACE_RIVERS :{WHITE}Não é possível colocar rios aqui... STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}... deve ser construído na água STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE}... não é possível construir na água STR_ERROR_CAN_T_BUILD_ON_SEA :{WHITE}... não é possível construir em mar aberto STR_ERROR_CAN_T_BUILD_ON_CANAL :{WHITE}... não é possível construir em um canal STR_ERROR_CAN_T_BUILD_ON_RIVER :{WHITE}... não é possível construir em um rio STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Precisa demolir o canal primeiro -STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Não é possível construir aqueduto neste local... +STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Não é possível construir aqueduto aqui... # Tree related errors STR_ERROR_TREE_ALREADY_HERE :{WHITE}... árvore já plantada aqui STR_ERROR_TREE_WRONG_TERRAIN_FOR_TREE_TYPE :{WHITE}... terreno errado para esse tipo de árvore -STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}Não é possível plantar árvores neste local... +STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}Não é possível plantar árvores aqui... # Bridge related errors -STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Não é possível construir ponte neste local... +STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Não é possível construir ponte aqui... STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Precisa demolir a ponte primeiro STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Não é possível iniciar e terminar no mesmo ponto STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Extremidades da ponte não estão no mesmo nível @@ -5184,7 +5185,7 @@ STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... pont STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :{WHITE}Ponte terminaria fora do mapa # Tunnel related errors -STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Não é possível construir túnel neste local... +STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Não é possível construir túnel aqui... STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}O local é inadequado para a entrada do túnel STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Precisa demolir o túnel primeiro STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Há outro túnel no caminho @@ -5193,7 +5194,7 @@ STR_ERROR_UNABLE_TO_EXCAVATE_LAND :{WHITE}Não é STR_ERROR_TUNNEL_TOO_LONG :{WHITE}... túnel muito longo # Object related errors -STR_ERROR_TOO_MANY_OBJECTS :{WHITE}... existem muitos objetos +STR_ERROR_TOO_MANY_OBJECTS :{WHITE}... há objetos demais STR_ERROR_CAN_T_BUILD_OBJECT :{WHITE}Não é possível construir objeto... STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Objeto no caminho STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... sede de empresa no caminho @@ -5203,7 +5204,7 @@ STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}... limi # Group related errors STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Não é possível criar grupo... -STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Não é possível remover grupo... +STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Não é possível excluir este grupo... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Não é possível renomear grupo... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Não é possível definir grupo ascendente... STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... não são permitidos ciclos na hierarquia de grupos @@ -5267,7 +5268,7 @@ STR_ERROR_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Não é STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Não é possível vender embarcação... STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Não é possível vender aeronave... -STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Existem muitos veículos no jogo +STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Há veículos demais no jogo STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Não é possível alterar o intervalo manutenção... STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... o veículo está destruído @@ -5290,9 +5291,9 @@ STR_ERROR_AIRCRAFT_IS_IN_FLIGHT :{WHITE}Aeronave # Order related errors STR_ERROR_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Não há espaço para mais ordens -STR_ERROR_TOO_MANY_ORDERS :{WHITE}Muitas ordens +STR_ERROR_TOO_MANY_ORDERS :{WHITE}Há ordens demais STR_ERROR_CAN_T_INSERT_NEW_ORDER :{WHITE}Não é possível inserir nova ordem... -STR_ERROR_CAN_T_DELETE_THIS_ORDER :{WHITE}Não é possível excluir esta ordem... +STR_ERROR_CAN_T_DELETE_THIS_ORDER :{WHITE}Não é possível remover esta ordem... STR_ERROR_CAN_T_MODIFY_THIS_ORDER :{WHITE}Não é possível modificar esta ordem... STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Não é possível mover esta ordem... STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Não é possível saltar a ordem atual... @@ -5312,12 +5313,12 @@ STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... aero # Extra messages which go on the third line of errors, explaining why orders failed STR_ERROR_NO_RAIL_STATION :{WHITE}Não existe uma estação ferroviária STR_ERROR_NO_BUS_STATION :{WHITE}Não existe uma estação de ônibus -STR_ERROR_NO_TRUCK_STATION :{WHITE}Não existe uma estação de caminhões +STR_ERROR_NO_TRUCK_STATION :{WHITE}Não existe uma estação de caminhão STR_ERROR_NO_DOCK :{WHITE}Não existe uma doca STR_ERROR_NO_AIRPORT :{WHITE}Não existe um aeroporto/heliporto STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Não existem paradas com tipo de estrada compatível STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Não existem paradas com tipo de bonde compatível -STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Não existem paradas adequadas para veículos rodoviários articulados.{}Os veículos rodoviários articulados precisam parar em estações de passagem ("drive-through") e não em estações padrão +STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Não existem paradas adequadas para veículos rodoviários articulados.{}Os veículos rodoviários articulados precisam parar em estações de passagem e não em estações padrão STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Este avião não pode pousar neste heliporto STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Este helicóptero não pode pousar neste aeroporto STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Não existe um ponto de controle ferroviário @@ -5332,7 +5333,7 @@ STR_ERROR_TIMETABLE_NOT_STARTED :{WHITE}... o ho # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... há placas demais -STR_ERROR_CAN_T_PLACE_SIGN_HERE :{WHITE}Não é possível colocar placa neste local... +STR_ERROR_CAN_T_PLACE_SIGN_HERE :{WHITE}Não é possível colocar placa aqui... STR_ERROR_CAN_T_CHANGE_SIGN_NAME :{WHITE}Não é possível alterar o nome da placa... STR_ERROR_CAN_T_DELETE_SIGN :{WHITE}Não é possível remover a placa... @@ -5751,8 +5752,8 @@ STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA STR_FORMAT_INDUSTRY_NAME :{1:STRING} de {0:TOWN} ###length 2 -STR_FORMAT_BUOY_NAME :Bóia de {TOWN} -STR_FORMAT_BUOY_NAME_SERIAL :Bóia de {TOWN} #{COMMA} +STR_FORMAT_BUOY_NAME :Boia de {TOWN} +STR_FORMAT_BUOY_NAME_SERIAL :Boia de {TOWN} #{COMMA} ###length 2 STR_FORMAT_WAYPOINT_NAME :Ponto de controle de {TOWN} @@ -5808,6 +5809,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index f2de6f5aff..1aaefc7c94 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1019,6 +1019,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Нама STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Увеличи стойността на твоята валута за една лира (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Сложи обменния курс на твоята валута за една лира (£) + STR_CURRENCY_PREFIX :{LTBLUE}Представка: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Укажете префиксен текст за валутата STR_CURRENCY_SUFFIX :{LTBLUE}Надставка: {ORANGE}{STRING} @@ -5178,6 +5179,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 8e7333dab1..bd48adfd68 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1118,6 +1118,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Disminue STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Augmenta la quantitat de moneda per cada lliura (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Estableix el tipus de canvi de la moneda per cada Lliura (£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefix: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Estableix el prefix de text per a la moneda STR_CURRENCY_SUFFIX :{LTBLUE}Sufix: {ORANGE}{STRING} @@ -5808,6 +5809,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index 6c772d9192..112ae79fb9 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -496,6 +496,7 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :расна # Custom currency window + STR_CURRENCY_PREFIX :{LTBLUE}Префикс: {ORANGE}{STRING} STR_CURRENCY_SUFFIX :{LTBLUE}Суффикс: {ORANGE}{STRING} @@ -1810,6 +1811,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index a27afb423a..269aef5767 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1066,6 +1066,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Smanjite STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Povećajte iznos vaše valute za jednu funtu (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Postavite omjer zamjene vaše valute za jednu funtu (£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefiks: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Postavite prefiks za vašu valutu STR_CURRENCY_SUFFIX :{LTBLUE}Sufiks: {ORANGE}{STRING} @@ -5364,6 +5365,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/czech.txt b/src/lang/czech.txt index d102c0600b..efbaef3647 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1204,6 +1204,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Snížit STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Zvýšit hodnotu vlastní měny oproti libře (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Určit směnný kurz vlastní měny oproti libře (£) + STR_CURRENCY_PREFIX :{LTBLUE}Předpona: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Určit předponu pro vlastní měnu STR_CURRENCY_SUFFIX :{LTBLUE}Přípona: {ORANGE}{STRING} @@ -6027,6 +6028,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 937086807b..404b9044cd 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -289,7 +289,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Klik og STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Skift mellem stort/lille vindue STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Scrollbar - scroller listen op/ned STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Scroll bar - flytter listen mod venstre/højre -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Nedriv bygninger osv. på et stykke land. Ctrl vælger arealet diagonalt. Shift skifter mellem at bygge og vise prisoverslag. +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Nedriv bygninger osv. på et stykke land. Ctrl+klik vælger arealet diagonalt. Shift skifter mellem at bygge og vise prisoverslag. # Show engines button ###length VEHICLE_TYPES @@ -384,8 +384,8 @@ STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Kør spi STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Valgmuligheder og indstillinger STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Gem spillet, forlad spillet, afslut STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Vis kort, ekstra vindue, laststrøm eller liste over skilte -STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Vis byoversigten -STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Vis tilskudsordninger +STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Åben byoversigten +STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Åben tilskudsordninger STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Åbn liste over virksomhedens stationer STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Åben selskabets finans informationer STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Åben generel selskabs information @@ -420,10 +420,10 @@ STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Flyt sta STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Klik for at angive startdatoen STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Åbn kort, ekstra visnings af skilteliste eller by- eller brancheoversigt STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Åbn landskabsmenuen, eller generer en ny verden -STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Bygenerering +STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Byg eller generer by STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Byg eller generer industrier STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Byg vejinfrastruktur -STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Sporvejskonstruktion +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Byg sporvejskonstruktion STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plante træer. Ctrl+klik+træk for at markere området diagonalt. Tryk også på Shift for kun at vise omkostningsestimat STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Placér skilt STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Placer objekt. Ctrl+klik+træk for at markere området diagonalt. Tryk også på Shift for kun at vise omkostningsestimat @@ -1117,6 +1117,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Reducer STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Forøg beløb i din valuta for et pund (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Sæt vekselkursen i din valuta for et pund (£) + STR_CURRENCY_PREFIX :{LTBLUE}Præfiks: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Sæt præfiks-streng for din valuta STR_CURRENCY_SUFFIX :{LTBLUE}Endetillæg: {ORANGE}{STRING} @@ -1271,10 +1272,10 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Ubegrænset pen STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Tillad ubegrænset forbrug og deaktiver virksomheders konkurs STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimum startlån: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimumbeløb et selskab kan låne (uden at tage inflation i betragtning) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Det maksimale beløb en virksomhed kan låne (uden at tage højde for inflation). Hvis den er indstillet til "Intet lån", vil ingen penge være tilgængelige, medmindre de leveres af et spilscript eller indstillingen "Uendelige penge". STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :No loan {RED}Kræver, at Game Script leverer indledende midler +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Intet lån STR_CONFIG_SETTING_INTEREST_RATE :Lånerente: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lånerente; kontrollerer også inflationen hvis aktiveret @@ -1828,7 +1829,7 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Standard servic STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Sæt serviceintervallets standardværdi for nye fly. STR_CONFIG_SETTING_SERVINT_SHIPS :Standard serviceinterval for skibe: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Sæt serviceintervallets standardværdi for nye skibe. -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA} dag{P 0 "" e}/% +STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}dag{P 0 "" s}/Minute{P 0 "" r}/% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Deaktiveret @@ -2199,14 +2200,14 @@ STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Vælg 's STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Vælg 'subtropisk' landskab STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Vælg 'legetøjsland' landskab -STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Sæt spillet op -STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Hvis topscoreliste +STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Åbn spilmuligheder +STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Åben topscoreliste STR_INTRO_TOOLTIP_HELP :{BLACK}Få adgang til dokumentation og online ressourcer STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Åben indstillinger -STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Vis NewGRF-indstillinger +STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Åben NewGRF-indstillinger STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Tjek for nyt og opdateret indhold til download STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Åben AI indstillinger -STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Vis indstillinger for spilscript +STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Åben indstillinger for spilscript STR_INTRO_TOOLTIP_QUIT :{BLACK}Afslut 'OpenTTD' STR_INTRO_BASESET :{BLACK} Det aktuelt valgte base grafiksæt mangler {NUM} sprite {P "" s}. Se venligst efter opdateringer til basesættet. @@ -2780,12 +2781,12 @@ STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Elektrisk jernb STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Monorailkonstruktion STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Magnetskinnekonstruktion -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Byg jernbane. Ctrl skifter mellem at bygge og fjerne elementer. Shift skifter mellem at bygge og vise prisoverslag. -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Byg jernbane med auto-jernbane-værktøj. Ctrl skifter mellem at bygge og fjerne elementer. Shift skifter mellem at bygge og vise prisoverslag. +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Byg jernbanespor. Ctrl+klik skifter mellem at bygge og fjerne elementer. Shift skifter mellem at bygge og vise prisoverslag. +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Byg jernbane med auto-jernbane-værktøj. Ctrl+klik skifter mellem at bygge og fjerne elementer. Shift skifter mellem at bygge og vise prisoverslag. STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Byg en remise (til køb og servicering af tog). Shift skifter mellem at bygge og vise prisoverslag. STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Ombyg jernbane til rutepunkt. Ctrl muliggør sammenslutning af rutepunkt. Shift skifter mellem at bygge og vise prisoverslag. -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Byg en banegård. Ctrl muliggør sammenslutning af stationer. Shift skifter mellem at bygge og vise prisoverslag. -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Byg signal på jernbane. Ctrl skifter semafor-/lyssignaler{}Hvis du trækker, opbygges signaler langs en lige jernbanestrækning. Ctrl bygger signaler op til næste vejkryds eller signal{}Ctrl+klik skifter til at åbne vinduet til valg af signal. Shift skifter mellem at bygge/vise omkostningsestimat +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Byg en banegård. Ctrl+klik muliggør sammenslutning af stationer. Shift skifter mellem at bygge og vise prisoverslag. +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Byg signal på jernbane. Ctrl+klik for at bygge den alternative signalstil{}Klik+Træk for at udfylde den valgte sektion af skinnen med signaler med den valgte afstand. Ctrl+klik+træk for at fylde signaler op til næste vejkryds, station eller signal. Tryk også på Shift for kun at vise omkostningsestimat STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Byg jernbanebro. Shift skifter mellem at bygge og vise prisoverslag. STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Byg jernbanetunnel. Shift skifter mellem at bygge og vise prisoverslag. STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Skift mellem at bygge og fjerne jernbaneskinner, signaler, rutepunkter og stationer. Hold Ctrl nede for også at fjerne togspor fra rutepunkter og stationer. @@ -2839,7 +2840,7 @@ STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Udgangss STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Kombi signal (elektrisk){}Kombi signalet fungerer både som indgangs- og udgangssignal. Dette muliggør opbygning af store forgreninger af signaler. STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Togvejssignal (elektrisk){}Et togvejssignal tillader, at mere en et tog ad gangen kan køre inden for en signalblok, hvis toget kan reservere en togvej til et sikkert sted at stoppe. Togvejssignaler kan passeres fra bagsiden. STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Ensrettet togvejssignal (elektrisk){}Et togvejssignal tillader, at mere en et tog ad gangen kan køre inden for en signalblok, hvis toget kan reservere en togvej til et sikkert sted at stoppe. Ensrettede togvejssignaler kan ikke passeres fra bagsiden. -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Signalombygning{}Når denne er valgt, vil klik på et eksisterende signal ombygge det til den valgte signaltype og -variant. Ctrl vil skifte den eksisterende signalvariant. Shift skifter mellem at bygge og vise prisoverslag. +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Signalombygning{}Når denne er valgt, vil klik på et eksisterende signal ombygge det til den valgte signaltype og -variant. Ctrl+klik vil skifte den eksisterende signalvariant. Shift+klik skifter mellem at bygge og vise prisoverslag. STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Træk-og-slip signalafstand STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Formindsk træk-og-slip signalafstand STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Forøg træk-og-slip signalafstand @@ -2866,14 +2867,14 @@ STR_BRIDGE_TUBULAR_SILICON :Rørformet bro, STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Vejkonstruktion STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Sporvejskonstruktion STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Byg vejstrækning. Ctrl+klik for at fjerne vejafsnit. Tryk også på Shift for at vise omkostningsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Byg sporvej. Ctrl skifter mellem at bygge og fjerne elementer. Shift skifter mellem at bygge og vise prisoverslag. +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Byg sporvej. Ctrl+klik skifter mellem at bygge og fjerne elementer. Shift skifter mellem at bygge og vise prisoverslag. STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Byg vejsektion ved hjælp af Autoroad-tilstand. Ctrl+klik for at fjerne vejafsnit. Tryk også på Shift for kun at vise omkostningsestimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Byg sporvognssektion ved hjælp af Autotram-tilstand. Ctrl+klik for at fjerne sporvejssektionen. Tryk også på Shift for kun at vise omkostningsestimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Byg værksted (til køb og servicering af vejkøretøjer). Shift skifter mellem at bygge og vise prisoverslag. STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Byg sporvognsremise (til køb og serviceing af sporvogne). Shift skifter mellem at bygge og vise prisoverslag. STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Byg busstation. Ctrl+klik for at vælge en anden station at deltage i. Tryk også på Shift for kun at vise omkostningsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Byg en passager-sporvognsstation. Ctrl muliggør sammenslutning af stationer. Shift skifter mellem at bygge og vise prisoverslag. -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Byg lastbilstation. Ctrl gør det muligt at tilslutte stationer. Shift skifter mellem at bygge/vise omkostningsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Byg en passager-sporvognsstation. Ctrl+klik muliggør sammenslutning af stationer. Shift skifter mellem at bygge og vise prisoverslag. +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Byg lastbilstation. Ctrl+klik gør det muligt at tilslutte stationer. Shift skifter mellem at bygge/vise omkostningsestimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Byg godssporvognsstation. Ctrl+klik for at vælge en anden station at deltage i. Tryk også på Shift for kun at vise omkostningsestimat STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Aktiver/Deaktiver ensrettede veje STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Byg en bro. Shift skifter mellem at bygge og vise prisoverslag. @@ -2913,8 +2914,8 @@ STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Byg en s STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Byg en havn. Ctrl muliggør sammenslutning af stationer. Shift skifter mellem at bygge og vise prisoverslag. STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Placer en bøje, der kan bruges som yderligere navigationspunkt. Shift skifter mellem at bygge og vise prisoverslag. STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Byg akvædukt. Tryk også på Shift for kun at vise omkostningsestimat -STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Definer vandområde.{}Lav en kanal, med mindre CTRL-tasten bruges ved havniveau, da omgivelserne i stedet vil blive oversvømmet -STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Placér floder. Ctrl markerer området diagonalt. +STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Lav en kanal, med mindre CTRL-tasten bruges ved havniveau, da omgivelserne i stedet vil blive oversvømmet +STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Placér floder. Ctrl+klik markerer området diagonalt. # Ship depot construction window STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Retning af skibsdok @@ -2952,14 +2953,14 @@ STR_STATION_BUILD_NOISE :{BLACK}Generere # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Landskabsværktøjer -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Sænk punkter i landskabet. Ved trækning sænkes det først valgte hjørne, og udligner det valgte område til samme niveau. Ctrl vælger området diagonalt. Shift skifter mellem at bygge og vise prisoverslag. +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Sænk et hjørne af jorden. Klik+træk for at sænke det første valgte hjørne og udjævne det valgte område til den nye hjørnehøjde. Ctrl+klik+træk for at markere området diagonalt. Tryk også på Shift for kun at vise omkostningsestimat STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Løft et hjørne af jorden. Klik+træk for at hæve det første valgte hjørne og udjævne det valgte område til den nye hjørnehøjde. Ctrl+klik+træk for at markere området diagonalt. Tryk også på Shift for kun at vise omkostningsestimat -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Udjævn et område til en højde svarende til det først markerede hjørne. Ctrl vælger området diagonalt. Shift skifter mellem at bygge og vise prisoverslag. +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Udjævn et landområde til højden af det første valgte hjørne. Ctrl+klik+træk for at markere området diagonalt. Tryk også på Shift for kun at vise omkostningsestimat STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Køb land til fremtidig brug. Shift skifter mellem at bygge og vise prisoverslag. # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objekt valg -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vælg objektet der skal bygges. Shift skifter mellem at bygge og vise prisoverslag +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vælg objekt, der skal bygges. Ctrl+klik+træk for at markere området diagonalt. Tryk også på Shift for kun at vise omkostningsestimat STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Vælg hvilken objekttype du vil bygge STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Forvisning af objektet STR_OBJECT_BUILD_SIZE :{BLACK}Størrelse: {GOLD}{NUM} x {NUM} felter @@ -3311,11 +3312,11 @@ STR_MAPGEN_VARIETY :{BLACK}Varietet STR_MAPGEN_GENERATE :{WHITE}Generer STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Skab en verden og spil OpenTTD! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF indstillinger -STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Vis indstillinger for NewGRF +STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Åben indstillinger for NewGRF STR_MAPGEN_AI_SETTINGS :{BLACK}AI indstillinger -STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Vis AI indstillinger +STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Åben AI indstillinger STR_MAPGEN_GS_SETTINGS :{BLACK}Indstillinger for spilscript -STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Vis indstillinger for spilscript +STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Åben indstillinger for spilscript ###length 21 STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Engelske @@ -3735,7 +3736,7 @@ STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Ugyldig m # Station list window STR_STATION_LIST_TOOLTIP :{BLACK}Stationsnavne - klik på et navn for at centrere skærmen over stationen. Ctrl+Klik åbner et nyt vindue ved stationens lokalitet -STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Hold Ctrl nede for at vælge mere end én ting +STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Hold Ctrl+klik nede for at vælge mere end én ting STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} Stationer STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} @@ -4094,7 +4095,7 @@ STR_CARGO_TYPE_FILTER_FREIGHT :Fragt STR_CARGO_TYPE_FILTER_NONE :Ingen ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Togvalgsliste - klik på et køretøj for mere information +STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Valgliste for togkøretøjer. Klik på køretøjet for information. Ctrl+klik for at vise/skjule denne køretøjstype STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Liste over køretøjstyper - klik på køretøj for information STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Skib valgliste. Klik på skib for information. Ctrl + Klik for at skifte skjule skibstypen STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Luftfartøj valgliste. Klik på fly til orientering. Ctrl + Klik for at vise/skjule flytypen @@ -4386,12 +4387,12 @@ STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Ingen str STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Afventer fri passage STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}For langt til næste destination -STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}Retning mod {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Ingen ordrer, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Retning mod {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Retning mod {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Service ved {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}Afsæt og service ved {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Retning mod {0:STATION} +STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Ingen ordrer +STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Retning mod {0:WAYPOINT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Retning mod {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Service ved {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Afsæt og service ved {0:DEPOT} STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - Kan ikke nå {0:STATION} STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Kan ikke nå {0:WAYPOINT} @@ -4723,7 +4724,7 @@ STR_TIMETABLE_START_TOOLTIP :{BLACK}Vælg, h STR_TIMETABLE_START_SECONDS_QUERY :Sekunder til tidsplanen starter STR_TIMETABLE_CHANGE_TIME :{BLACK}Ændre tid -STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Ændre den tid, som den fremhævede rækkefølge skal tage. Ctrl+Click angiver tidspunktet for alle ordrer +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Ændre den tid, som den fremhævede rækkefølge skal tage. Ctrl+klik angiver tidspunktet for alle ordrer STR_TIMETABLE_CLEAR_TIME :{BLACK}Nulstil tid STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Nulstil tiden for den markerede ordre. Ctrl+klik for at rydde tiden for alle ordrer @@ -4777,7 +4778,7 @@ STR_AI_DEBUG_CONTINUE :{BLACK}Fortsæt STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Sæt spillet i gang, og start den kunstige intelligens igen STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Se fejlretningsoutput af denne AI. Ctrl-klik for at åbne i et nyt vindue STR_AI_GAME_SCRIPT :{BLACK}Spil Script -STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Tjek SpilScript-loggen +STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Tjek SpilScript-loggen. Ctrl+klik for at åbne i et nyt vindue STR_ERROR_AI_NO_AI_FOUND :Ingen passende AI kan findes.{}Denne AI er en pladsholder, og vil ikke gøre noget.{} Du kan downloade indtil flere AI'er fra 'Online Indhold'-systemet. STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}En af de kørende scripts gik ned. Rapporter det venligst til script-udvikleren sammen med et skærmbillede af AI/spilscript-debugvinduet. @@ -5807,6 +5808,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 7b535ef0a9..d4024fb1e1 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1117,6 +1117,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Verlaag STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Verhoog de wisselkoers van jouw munteenheid ten opzichte van het pond (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Stel de wisselkoers in van jouw munteenheid ten opzichte van het pond (£) + STR_CURRENCY_PREFIX :{LTBLUE}Voorvoegsel: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Stel het voorvoegsel in voor jouw munteenheid STR_CURRENCY_SUFFIX :{LTBLUE}Achtervoegsel: {ORANGE}{STRING} @@ -5807,6 +5808,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 75f9da2d39..b119217fa1 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1117,6 +1117,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Decrease STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Increase the amount of your currency for one Pound (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Set the exchange rate of your currency for one Pound (£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefix: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Set the prefix string for your currency STR_CURRENCY_SUFFIX :{LTBLUE}Suffix: {ORANGE}{STRING} @@ -5807,6 +5808,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 73fac4bfc2..9acc4af1bc 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1117,6 +1117,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Decrease STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Increase the amount of your currency for one Pound (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Set the exchange rate of your currency for one Pound (£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefix: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Set the prefix string for your currency STR_CURRENCY_SUFFIX :{LTBLUE}Suffix: {ORANGE}{STRING} @@ -5807,6 +5808,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index abb9eb3551..d14554bc88 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1118,6 +1118,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Malpliig STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Pliigu la kvanton de via valuto kiu egalas al unu pundo (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Indiku la kurzon de via valuto por unu pundo (£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefikso: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Ekekti simbolon de via valuto STR_CURRENCY_SUFFIX :{LTBLUE}Sufikso: {ORANGE}{STRING} @@ -5507,6 +5508,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 1d19b4844e..e1330cc1e1 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1144,6 +1144,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Langeta STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Tõsta oma valuuta väärtust naela (£) suhtes STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Määra oma valuuta kurss naela (£) suhtes + STR_CURRENCY_PREFIX :{LTBLUE}Eesliide: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Määra oma valuuta eesliide STR_CURRENCY_SUFFIX :{LTBLUE}Järelliide: {ORANGE}{STRING} @@ -5723,6 +5724,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 59546002ba..a655a31665 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -914,6 +914,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Minka um STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Vaks um hvussu nógv av tínum gjaldoyra skal til fyri at keypa eitt pund (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Set gjaldsoyra kursin av tínum gjaldsoyra fyri eitt pund (£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefiks: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Set prefiksi fyri títt gjaldsoyra STR_CURRENCY_SUFFIX :{LTBLUE}Suffiks: {ORANGE}{STRING} @@ -4527,6 +4528,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 12065da4e4..a0c8e7e529 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1117,6 +1117,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Pienenn STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Suurenna vaihtokurssia verrattuna puntaan (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Aseta vaihtokurssi valuutallesi verrattuna puntaan (£) + STR_CURRENCY_PREFIX :{LTBLUE}Etuliite: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Valitse alkuliite valuutallesi STR_CURRENCY_SUFFIX :{LTBLUE}Jälkiliite: {ORANGE}{STRING} @@ -1271,10 +1272,10 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Loputon raha: { STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Salli rajaton rahankäyttö ja estä yritysten konkurssit STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Suurin mahdollinen laina alussa: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Suurin mahdollinen yhtiön ottama laina (ottamatta huomioon inflaatiota) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Enimmäissumma, jonka yritys voi lainata (ottamatta huomioon inflaatiota). Jos tämä on ”ei lainaa”, rahaa ei ole käytettävissä ilman peliskriptiä tai ”loputon raha” -asetusta. STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Ei lainaa {RED}Vaatii peliskriptin, joka tarjoaa alkupääoman +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Ei lainaa STR_CONFIG_SETTING_INTEREST_RATE :Korko: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lainan korko; ohjaa myös inflaatiota mikäli käytössä @@ -5807,6 +5808,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/french.txt b/src/lang/french.txt index c998cbc777..e0e9763b2f 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1118,6 +1118,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Réduire STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Augmenter le montant de cette devise pour une livre (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Définir le taux de change de cette devise pour une livre (£) + STR_CURRENCY_PREFIX :{LTBLUE}Préfixe{NBSP}: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Définir le préfixe pour cette devise STR_CURRENCY_SUFFIX :{LTBLUE}Suffixe{NBSP}: {ORANGE}{STRING} @@ -5808,6 +5809,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index 48abbde22c..b5f91b8a7e 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -957,6 +957,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Ferleegj STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Ferheegje de wikselkoers fan jo faluta yn ferlyk mei de Britske Pûn (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Stel de wikselkoers fan dyn faluta yn ferlyk mei de Britske Pûn (£) + STR_CURRENCY_PREFIX :{LTBLUE}Foarheaksel: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Stel it foarrinteken yn foar jo faluta STR_CURRENCY_SUFFIX :{LTBLUE}Efterheaksel: {ORANGE}{STRING} @@ -4716,6 +4717,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 0ddb6d6ca3..299cc438ad 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1148,6 +1148,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Lùghdai STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Meudaich meud an airgeadra agad airson not (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Suidhich luach-iomlaid an airgeadra agad airson not (£) + STR_CURRENCY_PREFIX :{LTBLUE}Ro-leasachan: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Suidhich sreang ro-leasachain an airgeadra agad STR_CURRENCY_SUFFIX :{LTBLUE}Iar-leasachan: {ORANGE}{STRING} @@ -5431,6 +5432,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 766c6fe07c..8e17c98f66 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1118,6 +1118,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Disminu STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Incrementa-la cantidade da túa moeda por unha Libra esterlina (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{G=n}{BLACK}Configura-lo cambio da túa moeda por unha Libra esterlina (£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefixo: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Configura-lo prefixo para a túa moeda STR_CURRENCY_SUFFIX :{LTBLUE}Sufixo: {ORANGE}{STRING} @@ -5808,6 +5809,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/german.txt b/src/lang/german.txt index dd691147da..c341aa817d 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1118,6 +1118,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Eigene W STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Eigene Währung gegenüber dem Pfund (£) verbilligen STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Umrechnungskurs der eigenen Währung gegenüber dem Pfund (£) festlegen + STR_CURRENCY_PREFIX :{LTBLUE}Präfix: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Das Zeichen für die eigene Währung festlegen (Prefix) STR_CURRENCY_SUFFIX :{LTBLUE}Suffix: {ORANGE}{STRING} @@ -5808,6 +5809,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 840cef2cba..ab0fbdc710 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1104,6 +1104,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Μείω STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Αυξήστε το ποσό της ισοτιμίας σας για μία Λίρα (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Ρυθμίστε τη συναλλαγματική ισοτιμία του νομίσματος για μια λίρα (£) + STR_CURRENCY_PREFIX :{LTBLUE}Πρόθεμα: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Ορίστε το πρόθεμα για το νόμισμά σας STR_CURRENCY_SUFFIX :{LTBLUE}Επίθεμα: {ORANGE}{STRING} @@ -5567,6 +5568,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 05fba1514c..5b3d7b6dc4 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -976,6 +976,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK} הקט STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}הגדל את ערך המטבע שלך עבור פאונד (£) אחד STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}קבע את שער החליפין של המטבע שלך עם פאונד (£) אחד + STR_CURRENCY_PREFIX :{LTBLUE}תחילית: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}קבע את המחרוזת התחילית עבור המטבע שלך STR_CURRENCY_SUFFIX :{LTBLUE}סופית: {ORANGE}{STRING} @@ -5204,6 +5205,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index 6da9dbe9fe..a79561e0aa 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -366,6 +366,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}एक + STR_NUM_HIGH :उच्च STR_VARIETY_MEDIUM :मध्यम @@ -1712,6 +1713,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 2a5d8352ab..69f3540949 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -320,10 +320,14 @@ STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP} # Time units used in string control characters STR_UNITS_DAYS :{COMMA}{NBSP}nap{P "" s} +STR_UNITS_SECONDS :{COMMA}{NBSP}másodperc +STR_UNITS_TICKS :{COMMA}{NBSP}tick -STR_UNITS_MONTHS :{NUM}{NBSP}hónap{P "" s} -STR_UNITS_MINUTES :{NUM}{NBSP}perc{P "" s} +STR_UNITS_MONTHS :{NUM}{NBSP}hónap +STR_UNITS_MINUTES :{NUM}{NBSP}perc +STR_UNITS_YEARS :{NUM}{NBSP}év +STR_UNITS_PERIODS :{NUM}{NBSP}időszak # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Szűrő kifejezés: @@ -390,7 +394,9 @@ STR_SORT_BY_TYPE :Típus STR_SORT_BY_TRANSPORTED :Elszállítás STR_SORT_BY_NUMBER :Szám STR_SORT_BY_PROFIT_LAST_YEAR :Tavalyi profit +STR_SORT_BY_PROFIT_LAST_PERIOD :Nyereség az elmúlt időszakban STR_SORT_BY_PROFIT_THIS_YEAR :Idei profit +STR_SORT_BY_PROFIT_THIS_PERIOD :Nyereség ebben az időszakban STR_SORT_BY_AGE :Életkor STR_SORT_BY_RELIABILITY :Megbízhatóság STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Rakomány sz. összkapacitás @@ -418,7 +424,9 @@ STR_SORT_BY_POPULATION :Lakosság STR_SORT_BY_RATING :Értékelés STR_SORT_BY_NUM_VEHICLES :Járművek száma STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Tavalyi összes profit +STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD :Összes nyereség az elmúlt időszakban STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Idei összes profit +STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Összes nyereség ebben az időszakban STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Tavalyi átlagos profit STR_SORT_BY_AVERAGE_PROFIT_LAST_PERIOD :Átlagos nyereség az elmúlt időszakban STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Idei átlagos profit @@ -720,7 +728,11 @@ STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Kölcsö STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Összesen: ###next-name-looks-similar +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}A nyereséget termelő járművek száma a múlt évben. Ide tartoznak a közúti járművek, vonatok, hajók és repülőgépek +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}A nyereséget termelő járművek száma az elmúlt időszakban. Ide tartoznak a közúti járművek, vonatok, hajók és repülőgépek STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Közelmúltban kiszolgált állomásrészek száma. Vasútállomás, buszmegálló, repülőtér külön számolódik, még akkor is, ha egy állomáshoz tartoznak +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}A legalacsonyabb bevétellel rendelkező jármű nyeresége ( csak két évnél régebbi járműveknél) +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}A legalacsonyabb bevétellel rendelkező jármű nyeresége (csak a két időszaknál régebbi járműveknél) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Megkeresett pénz a negyedévben a legkisebb profitnál az utolsó 12 negyedévben. STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Megkeresett pénz a negyedévben a legnagyobb profitnál az utolsó 12 negyedévben STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Utolsó négy negyedévben elszállított rakomány @@ -992,11 +1004,13 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}A látk STR_GAME_OPTIONS_CAPTION :{WHITE}Alapbeállítások STR_GAME_OPTIONS_TAB_GENERAL :Általános -STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Állítsd be az általános beállításokat +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Általános beállítások módosítása STR_GAME_OPTIONS_TAB_GRAPHICS :Grafika -STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Állítsd be a grafikával kapcsolatos beállításokat +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Grafikus beállítások módosítása STR_GAME_OPTIONS_TAB_SOUND :Hang effektek -STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Állítsd be a hanggal és zenével kapcsolatos beállításokat +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Hang- és zenebeállítások módosítása +STR_GAME_OPTIONS_TAB_SOCIAL :Közösségi +STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}Közösségi beállítások módosítása STR_GAME_OPTIONS_VOLUME :Hangerő STR_GAME_OPTIONS_SFX_VOLUME :Hang effektek @@ -1056,6 +1070,7 @@ STR_GAME_OPTIONS_CURRENCY_HKD :Hongkongi Doll STR_GAME_OPTIONS_CURRENCY_INR :Indiai Rúpia STR_GAME_OPTIONS_CURRENCY_IDR :Indonéz rúpia STR_GAME_OPTIONS_CURRENCY_MYR :Maláj ringgit +STR_GAME_OPTIONS_CURRENCY_LVL :Lett Lat STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Automatikus mentés STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Az automatikus mentések közötti időtartam kiválasztása @@ -1137,6 +1152,7 @@ STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}További STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(nincs közösségi média integrációhoz szükséges kiegészítő telepítve) +STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{BLACK}{STRING} ({STRING}) STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :{BLACK}Platform: STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Kiegészítő állapota: @@ -1161,6 +1177,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Átvált STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Átváltási arány növelése egy Fonthoz (£) képest STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Átváltási arány beállítása egy Fonthoz (£) képest + STR_CURRENCY_PREFIX :{LTBLUE}Előtag: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Előtag beállítása a pénznemedhez STR_CURRENCY_SUFFIX :{LTBLUE}Utótag: {ORANGE}{STRING} @@ -1338,7 +1355,9 @@ STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Támogatott kap STR_CONFIG_SETTING_SUBSIDY_DURATION :Támogatások hossza: {STRING} ###length 2 STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Az elnyert támogatások ennyi időn keresztül lesznek érvényesek. +STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT_PERIODS :Itt beállítható a támogatások megadásának gyakorisága +STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{UNITS_YEARS_OR_PERIODS} ###setting-zero-is-special STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Nincsenek támogatások @@ -1526,7 +1545,8 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :minden járműr STR_CONFIG_SETTING_WARN_INCOME_LESS :Figyelmeztetés veszteséges jármű esetén: {STRING} ###length 2 -STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Üzenetek megjelenítése azokról a járművekről, melyek nem termeltek profitot egy naptári év alatt +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Üzenetek megjelenítése azokról a járművekről, melyek nem termeltek profitot egy év alatt +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Üzenetek megjelenítése azokról a járművekről, melyek nem termeltek profitot egy időszakon belül STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Járművek sosem avulnak el: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Bekapcsolva minden járműmodell örökké elérhető marad bevezetése után @@ -1546,6 +1566,8 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (calendar tim STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Települések rakománytermelésének mértéke: {STRING} STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :A települések rakománytermelésének mértéke százalékban. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Gazdasági épületek rakománytermelésének mértéke: {STRING} +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :A gazdasági épületek rakománytermelésének mértéke százalékban. STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatikusan felújítja a járművet ha elöregedik: {STRING} @@ -2156,10 +2178,12 @@ STR_CONFIG_SETTING_LIMITATIONS :Korlátozások STR_CONFIG_SETTING_ACCIDENTS :Katasztrófák / Balesetek STR_CONFIG_SETTING_GENWORLD :Térképgenerálás STR_CONFIG_SETTING_ENVIRONMENT :Környezet +STR_CONFIG_SETTING_ENVIRONMENT_TIME :Idő STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :Önkormányzatok STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :Települések STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Gazdasági épületek STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Rakományok szétosztása (úticélok) +STR_CONFIG_SETTING_ENVIRONMENT_TREES :Fák STR_CONFIG_SETTING_AI :Ellenfelek STR_CONFIG_SETTING_AI_NPC :Számítógép által vezérelt ellenfelek STR_CONFIG_SETTING_NETWORK :Hálózat @@ -2406,6 +2430,9 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Térkép STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}A játék térképének mérete{}Kattints ide a rendezéshez STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Dátum STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Az aktuális dátum +STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM} óra {NUM} perc +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}Játékidő +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}Játékidő{}amíg a játék nem volt szünetben STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Nyelv, szerver verzió stb. STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Kattintással a listában szereplő játék kiválasztása @@ -2421,6 +2448,7 @@ STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}A szerv STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Meghívókód: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Kezdési dátum: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Jelenlegi dátum: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Játékidő: {WHITE}{NUM} óra {NUM} perc STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Játékszkript: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Jelszóval védve! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SZERVER OFFLINE @@ -2786,6 +2814,8 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Az állo STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Az állomással lefedett terület mutatása (vonzáskörzet) STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Elfogad:{GOLD}{CARGO_LIST} STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Termel: {GOLD}{CARGO_LIST} +STR_STATION_BUILD_INFRASTRUCTURE_COST_YEAR :{BLACK}Üzemeltetés: {GOLD}{CURRENCY_SHORT}/év +STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}Üzemeltetés: {GOLD}{CURRENCY_SHORT}/időszak # Join station window STR_JOIN_STATION_CAPTION :{WHITE}Állomás egyesítése @@ -3327,6 +3357,7 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}A sivata STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Tereptípus: STR_MAPGEN_SEA_LEVEL :{BLACK}Tengerszint: +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Tengerszint kiválasztása STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Folyók: STR_MAPGEN_SMOOTHNESS :{BLACK}Simaság: STR_MAPGEN_VARIETY :{BLACK}Változatosság eloszlása: @@ -3394,6 +3425,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Lapos te STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Egy lapos terepet generál STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Véletlen térkép STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Lapos terep magassága: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}A szárazföld tengerszint feletti magasságának kiválasztása STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Lapos terep magasságának csökkentése eggyel STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Lapos terep magasságának növelése eggyel @@ -3637,6 +3669,8 @@ STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} szállítva STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (több szükséges) STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (szállítva) +STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}A település {ORANGE}{UNITS_DAYS_OR_SECONDS} növekszik +STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}{BLACK}A település {ORANGE}{UNITS_DAYS_OR_SECONDS} növekszik (támogatást kapott) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}A település {RED}nem{BLACK} növekszik STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Zajszint a városban: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}A fő nézetet a városra állítja. Ctrl+kattintás esetén új nézetet nyit a város pozíciójára @@ -3676,6 +3710,8 @@ STR_LOCAL_AUTHORITY_ACTION_BRIBE :Önkormányzat STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Kis helyi reklámhadjárat indítása, hogy több utast és rakományt vonzz a megállóidba.{}A város körül kis területen ideiglenesen javítja az állomásaid minősítését.{}{POP_COLOUR}Ára: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Közepes helyi reklámhadjárat indítása, hogy több utast és rakományt vonzz a megállóidba.{}A város körül közepes méretű területen ideiglenesen javítja az állomásaid minősítését.{}{POP_COLOUR}Ára: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Nagy helyi reklámhadjárat indítása, hogy több utast és rakományt vonzz a megállóidba.{}A város körül nagy területen ideiglenesen javítja az állomásaid minősítését.{}{POP_COLOUR}Ára: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}A városi úthálózat felújításának finanszírozása.{}Akár 6 hónapig is jelentős fennakadást okoz a közúti forgalomban.{}{POP_COLOUR}Ára: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}A városi úthálózat felújításának finanszírozása.{}Akár 6 percig is jelentős fennakadást okoz a közúti forgalomban.{}{POP_COLOUR}Ára: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Szobor építése a vállalatod tiszteletére.{}Javítja az állomásaid értékelését a városban.{}{POP_COLOUR}Ára: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Új kereskedelmi épületek építésének támogatása a városban.{}A város egy ideig gyorsabban fog növekedni.{}{POP_COLOUR}Ára: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}A megítélésed növelése az önkormányzat megvesztegetésével, komoly büntetést kockáztatva, ha az kiderül.Ezzel megszüntetheted egy versenytársad kizárólagos szállítási jogát is.{}{POP_COLOUR}Ára: {CURRENCY_LONG} @@ -3756,7 +3792,12 @@ STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOI STR_STATION_LIST_NONE :{YELLOW}- Nincs - STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Minden szállítóegység kiválasztása STR_STATION_LIST_CARGO_FILTER_ALL_AND_NO_RATING :Minden rakománytípus és semmi minősítés +STR_STATION_LIST_CARGO_FILTER_MULTIPLE :Többféle rakománytípus +STR_STATION_LIST_CARGO_FILTER_NO_CARGO_TYPES :Semmilyen rakománytípus STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :Csak rakományértékelés nélkül +STR_STATION_LIST_CARGO_FILTER_SELECT_ALL :Összes rakománytípus és értékelés nélküli +STR_STATION_LIST_CARGO_FILTER_NO_RATING :Rakományértékelés nélkül +STR_STATION_LIST_CARGO_FILTER_EXPAND :Több megjelenítése... # Station view window STR_STATION_VIEW_CAPTION :{WHITE}{STATION} {STATION_FEATURES} @@ -3772,6 +3813,7 @@ STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPAN STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Vélemény STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Vélemény megmutatása az állomásról +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MINUTE :{BLACK}Percenkénti ellátás és helyi minősítés: STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) STR_STATION_VIEW_GROUP :{BLACK}Csoportosítás @@ -3956,6 +3998,7 @@ STR_INDUSTRY_DIRECTORY_FILTER_NONE :Semmi # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Múlt havi termelés: +STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Termelés az elmúlt percben: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% elszállítva) STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}A fő nézetet a gazdasági épületre állítja. Ctrl+kattintás esetén új látképet nyit a gazdasági épület pozíciójára STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Termelési szint: {YELLOW}{COMMA}% @@ -4397,10 +4440,10 @@ STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Útban STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Javítás {DEPOT}ban, {VELOCITY} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}Csoport bontás és szervizelés itt: {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{STATION} nem elérhető, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{WAYPOINT} nem elérhető, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{DEPOT} nem elérhető, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{DEPOT} nem elérhető, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - {0:STATION} nem elérhető +STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - {0:WAYPOINT} nem elérhető, +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{1:VELOCITY} - {0:DEPOT} nem elérhető +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - {0:DEPOT} nem elérhető # Vehicle stopped/started animations ###length 2 @@ -4446,7 +4489,11 @@ STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Szállí STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Javítási időköz: {LTBLUE}{COMMA}{NBSP}nap{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Szervizintervallum: {LTBLUE}{COMMA}{NBSP}perc{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Szervizintervallum: {LTBLUE}{COMMA}%{BLACK} {STRING} +STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Utolsó javítás: {LTBLUE}{DATE_LONG} +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Utolsó javítás: {LTBLUE}{NUM} perce STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Szervizintervallum növelése 10 nappal. Ctrl+kattintással 5 nappal növelhető a szervizintervallum +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Szervizintervallum növelése 5 perccel. Ctrl+kattintással 1 perccel növelhető a szervizintervallum +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Szervizintervallum növelése 10 százalékkal. Ctrl+kattintással 5 százalékkal növelhető a szervizintervallum STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Szervizintervallum csökkentése 10 nappal. Ctrl+kattintással 5 nappal csökkenthető a szervizintervallum STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Szervizintervallum csökkentése 5 perccel. Ctrl+kattintással 1 perccel csökkenthető a szervizintervallum STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Szervizintervallum csökkentése 10 százalékkal. Ctrl+kattintással 5 százalékkal csökkenthető a szervizintervallum @@ -4706,9 +4753,12 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Ez a já STR_TIMETABLE_STATUS_LATE :{BLACK}Ez a jármű jelenleg {STRING} eltéréssel, késéssel közlekedik STR_TIMETABLE_STATUS_EARLY :{BLACK}Ez a jármű jelenleg {STRING} eltéréssel, korábban közlekedik STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}A menetrend még nincs megkezdve +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}A menetrend ekkor kezdődik: {STRING} +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}A menetrend {COMMA} másodperc múlva kezdődik STR_TIMETABLE_START :{BLACK}Menetrend megkezdése +STR_TIMETABLE_START_SECONDS_QUERY :Másodpercek a menetrend kezdetéig STR_TIMETABLE_CHANGE_TIME :{BLACK}Idő megváltoztatása STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}A kijelölt utasítás végrehajtási idejét változtatja meg. Ctrl+kattintással beállítod az időt az összes utasításhoz. @@ -5095,6 +5145,10 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Rossz járműte # Depot unbunching related errors STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... csak egy csoportbontási utasítás lehetséges +STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... a telerakodás utasítás nem használható a csoportbontás utasításnál +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... a csoportbontás nem lehetséges egy telerakodás utasítással rendelkező járműnél +STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... a feltételes utasítások nem használhatóak a csoportbontás utasításnál +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... a csoportbontás nem lehetséges egy feltételes utasítással rendelkező járműnél # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} túl hosszú a csere után @@ -5830,6 +5884,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index add7480775..320ebcb1a9 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -913,6 +913,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Hækka g STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Lækka gengi miðað við pund (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Setja gengi gjaldmiðils miðað við pund (£) + STR_CURRENCY_PREFIX :{LTBLUE}Forskeyti: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Veldu forskeyti fyrir gjaldmiðilinn STR_CURRENCY_SUFFIX :{LTBLUE}Viðskeyti: {ORANGE}{STRING} @@ -4766,6 +4767,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/ido.txt b/src/lang/ido.txt index a7d415ad70..b229f9bbd5 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -498,6 +498,7 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :altra + STR_NUM_LOW :Basa STR_NUM_NORMAL :Normala STR_NUM_HIGH :Alta @@ -1702,6 +1703,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 6f7640baa4..b02ccd0747 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1087,6 +1087,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Menurunk STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Meningkatkan nilai mata uang satu Pound (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Atur penukaran nilai mata uang per satu Pound (£) + STR_CURRENCY_PREFIX :{LTBLUE}Awalan: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Masukkan awalan untuk mata uang STR_CURRENCY_SUFFIX :{LTBLUE}Akhiran: {ORANGE}{STRING} @@ -5662,6 +5663,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/irish.txt b/src/lang/irish.txt index df9d85a6c2..46091c3ca0 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -990,6 +990,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Laghdaig STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Méadaigh méid d'airgeadra ar Euro (€) amháin STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Socraigh ráta malairte d'airgeadra ar Euro (€) amháin + STR_CURRENCY_PREFIX :{LTBLUE}Réimír: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Socraigh an teaghrán réimíre dod' airgeadra STR_CURRENCY_SUFFIX :{LTBLUE}Iarmhír: {ORANGE}{STRING} @@ -5380,6 +5381,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 82e86f9e3f..c349087d60 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1119,6 +1119,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Riduce l STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Aumenta l'ammontare della valuta per una Sterlina (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Imposta il tasso di cambio della valuta per una Sterlina (£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefisso: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Imposta il prefisso per la valuta STR_CURRENCY_SUFFIX :{LTBLUE}Suffisso: {ORANGE}{STRING} @@ -5848,6 +5849,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 2fe3c8cec1..a130c5061e 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1032,6 +1032,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}英ポ STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}英ポンドに対するお使いの通貨の為替レートを増やします STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}英ポンドに対するお使いの通貨の為替レートを設定します + STR_CURRENCY_PREFIX :{LTBLUE}接頭文字: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}通貨の接頭文字を入力します STR_CURRENCY_SUFFIX :{LTBLUE}接尾文字: {ORANGE}{STRING} @@ -5518,6 +5519,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/korean.txt b/src/lang/korean.txt index c83ac108b2..2a611b5d32 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1118,6 +1118,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}(1 파 STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}(1 파운드(£)에 대한) 사용자 화폐 단위 양을 증가시킵니다 STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}1 파운드(£)에 해당하는 사용자 화폐 단위의 환율을 설정하십시오 + STR_CURRENCY_PREFIX :{LTBLUE}접두어: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}사용자 화폐 단위 앞에 붙는 문구를 설정하십시오 STR_CURRENCY_SUFFIX :{LTBLUE}접미어: {ORANGE}{STRING} @@ -5808,6 +5809,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 85aa6289b1..40c09de3aa 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1140,6 +1140,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Minuere STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Augere copiam nummi tui quae aequa est uni Librae Brittanicae (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Eligere collybum nummi tui + STR_CURRENCY_PREFIX :{LTBLUE}Praefixum: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Eligere praefixum nummi tui STR_CURRENCY_SUFFIX :{LTBLUE}Suffixum: {ORANGE}{STRING} @@ -5381,6 +5382,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 4f4160399e..2f3f374047 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1119,6 +1119,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Samazin STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Palielināt savas valūtas vienību daudzumu attiecībā pret vienu mārciņu (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Uzstādīt savas valūtas maiņas kursu pret vienu mārciņu (£) + STR_CURRENCY_PREFIX :{LTBLUE}Priedēklis: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Uzstādīt priedēkli savai valūtai STR_CURRENCY_SUFFIX :{LTBLUE}Piedēklis: {ORANGE}{STRING} @@ -5818,6 +5819,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 97f7f64e46..f72620059a 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1208,6 +1208,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Sumažin STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Padidinti valiutos kiekį vienu svaru (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Nustatyti valiutos keitimo kursą vienam svarui (£) + STR_CURRENCY_PREFIX :{LTBLUE}Priešdėlis: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Nustatyti prefiksą valiutai STR_CURRENCY_SUFFIX :{LTBLUE}Pavadinimas: {ORANGE}{STRING} @@ -5936,6 +5937,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index ca0ae58bee..7636164d87 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1117,6 +1117,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Setz de STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Setz de Betrag Suen dee fir 1 Pond (£) gebraucht gëtt erop STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Setzt de Wiesselcours fir deng Währung fir 1 Pond (£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefix: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Setzt de Prefix fir deng Währung STR_CURRENCY_SUFFIX :{LTBLUE}Suffix: {ORANGE}{STRING} @@ -5807,6 +5808,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index f5049b3f5d..34310c245c 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -795,6 +795,7 @@ STR_GAME_OPTIONS_CAPTION :{WHITE}Опци + STR_NUM_CUSTOM_NUMBER :Прилагодено ({NUM}) @@ -2220,6 +2221,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 2e359372a6..390c949740 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -918,6 +918,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Kurangka STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Tambahkan nilai matawang anda untuk satu Pound (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Tetapkan kadar pertukaran mata wang anda untuk stau Paun (£) + STR_CURRENCY_PREFIX :{LTBLUE}Imbuhan awalan: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Tetapkan permulaan untuk mata wang anda STR_CURRENCY_SUFFIX :{LTBLUE}Imbuhan akhiran: {ORANGE}{STRING} @@ -4673,6 +4674,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index 821c75b6ca..044b9c049a 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -434,6 +434,7 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :oħrajn + ###length 5 ###length 6 @@ -1746,6 +1747,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index f9c9c8f416..88f4c54703 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -732,6 +732,7 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :अन्य + ###length 5 ###length 6 @@ -2094,6 +2095,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index ce9d362794..f6b7b5a793 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -998,6 +998,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Reduser STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Øk valutaen din i forhold til ett pund (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Still inn valutakursen din i forhold til ett pund (£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefiks: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Velg prefiks for din valuta STR_CURRENCY_SUFFIX :{LTBLUE}Suffiks: {ORANGE}{STRING} @@ -5411,6 +5412,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 9cfadd3aab..63be836b0d 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -945,6 +945,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Reduser STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Auk verdien av din valuta sett opp mot eitt pund (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Sett valutakursen for eitt pund (£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefiks: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Vel prefiks for din valuta STR_CURRENCY_SUFFIX :{LTBLUE}Suffiks: {ORANGE}{STRING} @@ -4908,6 +4909,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 4f7369d29a..e09d2942a1 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -935,6 +935,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}کم ک STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}زیاد کردن ارزش واحد پول در ازای یک پوند (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}نرخ ارز واحد پول را در ازای یک پوند تنظیم کنید (£) + STR_CURRENCY_PREFIX :{LTBLUE}پیشوند: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}پیشوند واحد پولتان را انتخاب کنید STR_CURRENCY_SUFFIX :{LTBLUE}پسوند: {ORANGE}{STRING} @@ -4229,6 +4230,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/polish.txt b/src/lang/polish.txt index bcab0794d2..5574239633 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1497,6 +1497,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Zmniejsz STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Zwiększ kurs wymiany za jednego funta (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Ustal kurs wymiany za jednego funta (£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefiks: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Ustaw przedrostek dla swojej waluty STR_CURRENCY_SUFFIX :{LTBLUE}Sufiks: {ORANGE}{STRING} @@ -6248,6 +6249,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 25ffcdd62f..83ac340bc7 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1118,6 +1118,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Diminuir STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Aumentar a quantidade da sua moeda para uma Libra (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Definir a taxa de câmbio da sua moeda para uma Libra (£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefixo: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Definir o prefixo para a sua moeda STR_CURRENCY_SUFFIX :{LTBLUE}Sufixo: {ORANGE}{STRING} @@ -5808,6 +5809,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 678e2ed1b2..f12ea93783 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1117,6 +1117,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Scade va STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Mărește valoarea monedei tale pentru o liră sterlină (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Setează rata de schimb pentru o liră sterlină (£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefix: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Setează prefixul monedei STR_CURRENCY_SUFFIX :{LTBLUE}Sufix: {ORANGE}{STRING} @@ -5807,6 +5808,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/russian.txt b/src/lang/russian.txt index b8a5867887..4a008ec046 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1262,6 +1262,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Повы STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Снизить курс вашей валюты по отношению к фунту (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Установить курс вашей валюты по отношению к фунту (£) + STR_CURRENCY_PREFIX :{LTBLUE}Префикс: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Установить префикс вашей валюты STR_CURRENCY_SUFFIX :{LTBLUE}Суффикс: {ORANGE}{STRING} @@ -6031,6 +6032,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 3a6a7078b9..762c065784 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1233,6 +1233,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Smanji v STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Povećaj vrednost svoje valute u odnosu na jednu funtu (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Postavi vrednost svoje valute u odnosu na jednu funtu (£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefiks: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Postavi prefiks za svoju valutu STR_CURRENCY_SUFFIX :{LTBLUE}Sufiks: {ORANGE}{STRING} @@ -5752,6 +5753,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 65cd2668cd..a8f680e9d1 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1117,6 +1117,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}减少 STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}增加英磅(£)兑换自定义货币的数量 STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}设置自定义货币与英磅(£)的兑换比率 + STR_CURRENCY_PREFIX :{LTBLUE}前缀: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}设置自定义货币的首字 STR_CURRENCY_SUFFIX :{LTBLUE}后缀: {ORANGE}{STRING} @@ -3735,7 +3736,7 @@ STR_STORY_BOOK_INVALID_GOAL_REF :{RED}无效的 # Station list window STR_STATION_LIST_TOOLTIP :{BLACK}车站名称{}点击可将屏幕中心移动到车站所在位置. 单击的同时按住Ctrl会在新视点中显示车站位置 -STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}按住 CTRL 可以同时选择多项 +STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}按住 键点选以选择多个项目 STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} 车站 STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} @@ -4320,7 +4321,7 @@ STR_REPLACE_MAGLEV_VEHICLES :磁悬浮列车 STR_REPLACE_ROAD_VEHICLES :路面交通工具 STR_REPLACE_TRAM_VEHICLES :电车 -STR_REPLACE_REMOVE_WAGON :{BLACK}清理挂车({STRING}):{ORANGE}{STRING} +STR_REPLACE_REMOVE_WAGON :{BLACK}移除车厢({STRING}):{ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}当车辆升级可能造成列车变长时{}自动从最前面的挂车去掉若干节以保证列车长度不变 STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. 按下CTRL并点击来同样应用于子组 @@ -4442,8 +4443,8 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}运载 STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}转运成本: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}每 {LTBLUE}{COMMA}{NBSP}天进行维护{BLACK} 上次维护日期:{LTBLUE}{STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}服务间隔:{LTBLUE}{COMMA}{NBSP}分钟{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}保养周期:{LTBLUE}{COMMA}%{BLACK} 上次保养:{LTBLUE}{STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}维修间隔:{LTBLUE}{COMMA}{NBSP}分钟{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}维护间隔:{LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :最近保养:{LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :最近保养:{LTBLUE}{NUM}{NBSP}分钟前 STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :将维修间隔增大 10 天。按住 点击可将维修间隔增大 5 天。 @@ -4775,7 +4776,7 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}符合 STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}切换对比AI 记录信息是否与断点字符串相符时是否要符合大小写 STR_AI_DEBUG_CONTINUE :{BLACK}继续 STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}取消暂停AI -STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}查看此AI的调试输出。按住Ctrl键点选以打开新窗口 +STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}查看此 AI 的调试输出。按住 操作以打开新窗口。 STR_AI_GAME_SCRIPT :{BLACK}游戏脚本 STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}检查游戏脚本日志。按住Ctrl键点选以打开新窗口 @@ -5807,6 +5808,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 268186796c..db791016cd 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1117,6 +1117,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Znížen STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Zvýšenie hodnoty vašej meny oproti jednej libre (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Nastaviť kurz pre vašu menu oproti libre (£) + STR_CURRENCY_PREFIX :{LTBLUE}Predpona: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Nastavit prefix pre vašu menu STR_CURRENCY_SUFFIX :{LTBLUE}Prípona: {ORANGE}{STRING} @@ -5606,6 +5607,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 06f1a88917..f8c88f8f92 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1100,6 +1100,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Zmanjša STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Povečaj količino svojega denarja za en funt (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Nastavi tečaj menjave svoje valute za en funt (£) + STR_CURRENCY_PREFIX :{LTBLUE}Predpona: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Nastavi oznako za svojo valuto STR_CURRENCY_SUFFIX :{LTBLUE}Zapona: {ORANGE}{STRING} @@ -5204,6 +5205,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index c7b0ad5839..a5fbb3dec0 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1118,6 +1118,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Reduce l STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Incrementa la cantidad de tu moneda en una Libra (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Configura el valor de cambio de tu moneda por una Libra (£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefijo: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Configura el prefijo de tu moneda STR_CURRENCY_SUFFIX :{LTBLUE}Sufijo: {ORANGE}{STRING} @@ -5808,6 +5809,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index b6503234b5..b689918406 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1086,6 +1086,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Reducir STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Incrementar el valor de la moneda por una libra (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Ajustar el valor de cambio de la moneda por una Libra (£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefijo: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Establecer el prefijo de la moneda STR_CURRENCY_SUFFIX :{LTBLUE}Sufijo: {ORANGE}{STRING} @@ -5651,6 +5652,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index c52be106f4..75c0c4cd4d 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1117,6 +1117,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Minska v STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Öka värdet för din valuta med ett pund (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Sätt växelkursen för din valuta mot ett pund (£) + STR_CURRENCY_PREFIX :{LTBLUE}Prefix: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Sätt prefix-sträng för din valuta STR_CURRENCY_SUFFIX :{LTBLUE}Ändelse: {ORANGE}{STRING} @@ -5807,6 +5808,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 97a5a0b64e..411091bb9a 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1080,6 +1080,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}உங STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}உங்கள் நாணய மதிப்பினை ஒரு பவுண்டு (£) அளவு அதிகரிக்கவும் STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}உங்களது நாணயத்தின் நாணயமாற்று விகிதத்தை ஒரு பவுண்டாக (£) அமைக்கவும் + STR_CURRENCY_PREFIX :{LTBLUE}முன் ஒட்டு: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}உங்கள் நாணயத்தின் முன் ஒட்டத்தினை அமையுங்கள் STR_CURRENCY_SUFFIX :{LTBLUE}பின் ஒட்டு: {ORANGE}{STRING} @@ -5373,6 +5374,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 0e5501ef44..bc4ec29aae 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -956,6 +956,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}ลด STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}เพิ่มจำนวนสกุลเงินของคุณสำหรับหนึ่งปอนด์ (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}กำหนดอัตราแลกเปลี่ยนของสกุลเงินหนึ่งปอนด์ (£) + STR_CURRENCY_PREFIX :{LTBLUE}คำนำหน้า: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}สัญลักษณ์หน้าสกุลเงินของท่าน STR_CURRENCY_SUFFIX :{LTBLUE}คำเสริมท้าย: {ORANGE}{STRING} @@ -5114,6 +5115,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 5479c59f67..ff65d6e4d7 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1053,6 +1053,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}降低 STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}提升自訂幣值對 1 英鎊 (£) 的匯率 STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}設定自訂幣值對 1 英鎊 (£) 的匯率 + STR_CURRENCY_PREFIX :{LTBLUE}前置字:{ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}為你的貨幣指定前置字串 STR_CURRENCY_SUFFIX :{LTBLUE}後置字:{ORANGE}{STRING} @@ -5564,6 +5565,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 154b0c4c5b..5a68161693 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1118,6 +1118,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Bir Ster STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Bir Sterlin'e (£) karşılık gelen para biriminizi arttırın STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Bir Sterlin'e (£) karşılık gelen para biriminizi belirleyin + STR_CURRENCY_PREFIX :{LTBLUE}Ön ek: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Para biriminiz için ön ek belirleyin STR_CURRENCY_SUFFIX :{LTBLUE}Son ek: {ORANGE}{STRING} @@ -5818,6 +5819,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 109150e75b..ee329786fa 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1204,6 +1204,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Змен STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Збільшити кількість своєї валюти за 1 фунт (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Встановити обмінний курс своєї валюти до 1 фунта (£) + STR_CURRENCY_PREFIX :{LTBLUE}Префікс: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Встановити префікс для своєї валюти STR_CURRENCY_SUFFIX :{LTBLUE}Суфікс: {ORANGE}{STRING} @@ -1547,8 +1548,10 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Витрати STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :При включенні інфраструктура потребує коштів для утримання. Витрати збільшуються не пропорційно з ростом розміру мережі, більше впливаючи на великі компанії ніж на малі STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Колір компанії: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Виберіть початковий колір для компанії +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Оберіть початковий колір для компанії +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Початковий другорядний колір для компанії: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Оберіть початковий другорядний колір для компанії, якщо використовується NewGRF, у якому він допускається STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Аеропорти не застарівають: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :При включенні кожен аеропорт буде доступним для будівництва безстроково після його впровадження. @@ -2177,10 +2180,12 @@ STR_CONFIG_SETTING_LIMITATIONS :Обмежен STR_CONFIG_SETTING_ACCIDENTS :Катастрофи STR_CONFIG_SETTING_GENWORLD :Створення світу STR_CONFIG_SETTING_ENVIRONMENT :Довкілля +STR_CONFIG_SETTING_ENVIRONMENT_TIME :Час STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :Органи влади STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :Міста STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Підприємства STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Розподіл вантажів +STR_CONFIG_SETTING_ENVIRONMENT_TREES :Дерева STR_CONFIG_SETTING_AI :Конкуренти STR_CONFIG_SETTING_AI_NPC :Віртуальні гравці STR_CONFIG_SETTING_NETWORK :Мережа @@ -2260,7 +2265,7 @@ STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Пока STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Налаштування відображення STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Показати налаштування NewGRF STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Перевірити доступний для завантаження додатковий контент -STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Показати налаштування ШІ +STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Відкрити налаштування ШІ STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Показати налаштування ігрового скрипту STR_INTRO_TOOLTIP_QUIT :{BLACK}Вийти з OpenTTD @@ -2911,20 +2916,20 @@ STR_BRIDGE_TUBULAR_SILICON :Трубчас # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Автомобільне будівництво STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Будівництво трамвайних колій -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Будувати дорогу. Ctrl переключає побудову/знесення для будівництва доріг. Утримуйте Shift для показу витрат +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Будувати дорогу. Ctrl+клац для знесення доріг. Утримуйте Shift для показу тільки витрат STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Будувати трамвайну колію. Ctrl переключає побудову/знесення для будівництва трамвайної колії. Утримуйте Shift для показу витрат на будівництво -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Будувати дорогу в режимі Автобудування. Ctrl переключає побудову/знесення для будівництва доріг. Утримуйте Shift для показу витрат на будівництво -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Будувати трамвайну лінію в режимі Автобудування. Ctrl переключає побудову/знесення для будівництва трамвайної колії. Утримуйте Shift для показу витрат на будівництво -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Будувати автомобільне депо (для будівництва і обслуговування автомобілів). Утримуйте Shift для показу витрат на будівництво +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Будувати дорогу в режимі Автобудування. Ctrl+клац для знесення доріг. Утримуйте Shift для показу тільки витрат +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Будувати трамвайну колію в режимі Автобудування. Ctrl+клац для знесення колій. Утримуйте Shift для показу тільки витрат +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Будувати гараж (для будівництва і обслуговування автомобілів). Утримуйте Shift для показу витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Будувати трамвайне депо (для будівництва та обслуговування трамваїв). Утримуйте Shift для показу витрат на будівництво -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Будувати автобусну зупинку. Ctrl дозволяє об'єднувати станції. Утримуйте Shift для показу витрат на будівництво +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Будувати автобусну зупинку. Ctrl+клац щоб обрати іншу зупинку для приєднання. Утримуйте Shift для показу тільки витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Будувати пасажирську трамвайну станцію. Ctrl дозволяє об'єднувати станції. Утримуйте Shift для показу витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Будувати вантажний майданчик. Ctrl дозволяє об'єднувати станції. Утримуйте Shift для показу витрат на будівництво -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Побудувати товарну трамвайну станцію. Ctrl дозволяє об'єднувати станції. Утримуйте Shift для показу витрат на побудову +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Побудувати вантажну трамвайну станцію. Ctrl+клац щоб обрати іншу зупинку для приєднання. Утримуйте Shift для показу тільки витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Вкл./відкл. односторонні дороги -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Будувати міст. Утримуйте Shift для показу витрат на придбання +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Будувати дорожній міст. Утримуйте Shift для показу тільки витрат на придбання STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Побудувати трамвайний міст. Утримуйте Shift для показу витрат на придбання -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Будувати тунель. Утримуйте Shift для показу витрат на придбання +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Будувати дорожній тунель. Утримуйте Shift для показу тільки витрат на придбання STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Побудувати трамвайний тунель. Утримуйте Shift для показу витрат на придбання STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Будувати/зруйнувати дорогу STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Будувати/демонтувати колію @@ -4136,7 +4141,7 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Купи STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купити і переобладнати авто STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купити і переобладнати авто STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купіть і переобладнайте корабель -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купуйте та переобладнайте літаки +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купуйте та переобладнайте повітряні апарати ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Купити вибраний поїзд. Утримуйте Shift для показу витрат на придбання @@ -4148,7 +4153,7 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Купи STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбайте та переобладнайте виділений поїзд. Shift+клац показує орієнтовну вартість без покупки STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбайте та переобладнайте авто. Shift+клац показує орієнтовну вартість без покупки STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбайте та переобладнайте виділене судно. Shift+клац показує орієнтовну вартість без покупки -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбайте та переобладнайте виділені літаки. Shift+клац показує орієнтовну вартість без покупки +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбайте та переобладнайте виділений повітряний апарат. Утримуйте Shift, щоб побачити тільки орієнтовну вартість ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Назва @@ -4454,6 +4459,7 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Вага STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Дохід цього року: {LTBLUE}{CURRENCY_LONG} (торік: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Дохід цього року: {LTBLUE}{CURRENCY_LONG} (минулого року: {CURRENCY_LONG}) {BLACK}Найгірше: {LTBLUE}{POWER_TO_WEIGHT} +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Прибуток цього періоду: {LTBLUE}{CURRENCY_LONG} (минулого періоду: {CURRENCY_LONG}) STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Надійність: {LTBLUE}{COMMA}% {BLACK}Аварії після останнього техогляду: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Побудований: {LTBLUE}{NUM}{BLACK} Вартість: {LTBLUE}{CURRENCY_LONG} @@ -4580,6 +4586,8 @@ STR_ORDER_DROP_HALT_DEPOT :Прямува ###length VEHICLE_TYPES STR_ORDER_TRAIN_DEPOT_ACTION_TOOLTIP :{BLACK}Виберіть дію до виконання в цьому депо STR_ORDER_ROAD_DEPOT_ACTION_TOOLTIP :{BLACK}Виберіть дію до виконання в цьому гаражі +STR_ORDER_SHIP_DEPOT_ACTION_TOOLTIP :{BLACK}Виберіть дію до виконання в цьому депо +STR_ORDER_HANGAR_ACTION_TOOLTIP :{BLACK}Виберіть дію до виконання в цьому ангарі ###next-name-looks-similar STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Дані транспорту для базування наказу @@ -4731,6 +4739,7 @@ STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Цей STR_TIMETABLE_STATUS_START_IN_SECONDS.r :{BLACK}Цей розклад почнеться після {COMMA} секунди STR_TIMETABLE_STATUS_START_IN_SECONDS.d :{BLACK}Цей розклад почнеться після {COMMA} секунд +STR_TIMETABLE_START :{BLACK}Початок розкладу STR_TIMETABLE_CHANGE_TIME :{BLACK}Змінити час @@ -4755,6 +4764,8 @@ STR_TIMETABLE_EXPECTED :{BLACK}Очік STR_TIMETABLE_SCHEDULED :{BLACK}Призначено STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Перемкнути очікуване на заплановане +STR_TIMETABLE_ARRIVAL_DATE :В: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :В: {COLOUR}{COMMA} сек STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :П: {COLOUR}{COMMA} сек @@ -4848,6 +4859,8 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Ігровий STR_AI_SETTINGS_CLOSE :{BLACK}Закрити STR_AI_SETTINGS_RESET :{BLACK}Скидання STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} +STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] +STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window @@ -4862,6 +4875,7 @@ STR_TEXTFILE_VIEW_LICENCE :{BLACK}Ліце STR_TEXTFILE_README_CAPTION :{WHITE}Документація до {STRING} {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Зміни в {STRING} {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}Ліцензія до {STRING} {STRING} +STR_TEXTFILE_SURVEY_RESULT_CAPTION :{BLACK}Попередній перегляд геологічної розвідки STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}документ OpenTTD '{STRING}' @@ -5834,6 +5848,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index 33d2590293..e4a7f4edf9 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -910,6 +910,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}ایک STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}ایک پاونڈ (£) کے لئے اپنی کرنسی کی تعداد میں اضافہ کریں STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}ایک پاونڈ (£) کے لئے اپنی کرنسی کا exchange rate اختیار کریں + STR_CURRENCY_PREFIX :{LTBLUE}سابقہ: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}اپنی کرنسی کا سابقہ رکھیں STR_CURRENCY_SUFFIX :{LTBLUE}لاحقہ: {ORANGE}{STRING} @@ -3139,6 +3140,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 9797de87f4..6fb8118435 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1117,6 +1117,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Giảm t STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Tăng tỉ giá tiền của bạn đối với 1 Pound (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Điều chỉnh tỉ giá tiền của bạn đối với 1 Pound (£) + STR_CURRENCY_PREFIX :{LTBLUE}Tiền tố: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Chỉnh tiếp đầu ngữ cho tiền tệ của bạn STR_CURRENCY_SUFFIX :{LTBLUE}Hậu tố: {ORANGE}{STRING} @@ -1271,10 +1272,10 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Tiền vô hạ STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Cho phép chi tiêu không giới hạn và tắt bỏ việc phá sản của các công ty STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Khoảng vay khởi nghiệp tối đa: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Hạn mức tối đa một công ty có thể vay (không tính lạm phát) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Hạn mức vay khởi nghiệp tối đa một công ty có thể vay (không tính lạm phát). Nếu chọn "Không có khoản vay", tiền sẽ không có sẵn trừ khi được cung cấp bằng Game Script hoặc thiêt lập "Tiền vô hạn". STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Không có khoản vay {RED}Cần Game Script để cung cấp khoảng vốn ban đầu +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Không có khoản vay STR_CONFIG_SETTING_INTEREST_RATE :Lãi suất vay: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lãi xuất vay; ảnh hưởng tới cả lạm phát nếu bật tùy chọn đó @@ -3560,7 +3561,7 @@ STR_NEWGRF_BROKEN :{WHITE}Hoạt STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Trạng thái đầu kéo '{1:ENGINE}' được thay đổi khi không ở trong xưởng sửa chữa. STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Nó cắt ngắn độ dài của đoàn tàu '{1:ENGINE}' nếu không ở trong xưởng. STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Sức chứa của phương tiện bị thay đổi '{1:ENGINE}' khi không ở trong xưởng hoặc vì cải biến -STR_BROKEN_VEHICLE_LENGTH :{WHITE}Đoàn tàu '{VEHICLE}' của '{COMPANY}' có độ dài không hợp lệ. Có thể gây sự cố với NewGRFs. Ván chơi có thể mất đồng bộ hoặc bị treo +STR_BROKEN_VEHICLE_LENGTH :{WHITE}Đoàn tàu '{VEHICLE}' của '{COMPANY}' có độ dài không hợp lệ. Sự cố có thể có căn nguyên từ NewGRFs. Ván chơi có thể mất đồng bộ hoặc bị treo STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' không hợp lệ. STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Danh mục hàng hoá/cải biến được cho '{1:ENGINE}' khác với danh mục mua được sau khi đã có. Việc này khiến cho việc tự thay thế hay là tự cải biến không chính xác. @@ -5807,6 +5808,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 7dc73ca2e1..a04f058b5f 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1031,6 +1031,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Llehad y STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Amlhau yr swm o eich arian cyfred am un Punt (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}newid y raddfa gyfnewid o eich arian cyfred i un Punt (£) + STR_CURRENCY_PREFIX :{LTBLUE}Rhagddodiad: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Dewis y rhagddodiad ar gyfer eich arian STR_CURRENCY_SUFFIX :{LTBLUE}Olddodiad: {ORANGE}{STRING} @@ -5405,6 +5406,7 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} + STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} From 222832f1d477c323f3d869dd92e097717f694b8d Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Fri, 23 Feb 2024 20:02:59 +0000 Subject: [PATCH 004/695] Fix #12166: Crash when opening tram road stop build window (#12168) --- src/road_gui.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/road_gui.cpp b/src/road_gui.cpp index c242c397bb..d8cf2bf004 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -1132,9 +1132,11 @@ private: const RoadStopSpec *spec = RoadStopClass::Get(_roadstop_gui_settings.roadstop_class)->GetSpec(_roadstop_gui_settings.roadstop_type); /* Raise and lower to ensure the correct widget is lowered after changing displayed orientation plane. */ - this->RaiseWidget(WID_BROS_STATION_NE + _roadstop_gui_settings.orientation); - this->GetWidget(WID_BROS_AVAILABLE_ORIENTATIONS)->SetDisplayedPlane((spec != nullptr && HasBit(spec->flags, RSF_DRIVE_THROUGH_ONLY)) ? 1 : 0); - this->LowerWidget(WID_BROS_STATION_NE + _roadstop_gui_settings.orientation); + if (RoadTypeIsRoad(_cur_roadtype)) { + this->RaiseWidget(WID_BROS_STATION_NE + _roadstop_gui_settings.orientation); + this->GetWidget(WID_BROS_AVAILABLE_ORIENTATIONS)->SetDisplayedPlane((spec != nullptr && HasBit(spec->flags, RSF_DRIVE_THROUGH_ONLY)) ? 1 : 0); + this->LowerWidget(WID_BROS_STATION_NE + _roadstop_gui_settings.orientation); + } if (_roadstop_gui_settings.orientation >= DIAGDIR_END) return; From c25d9f5c81524b2eaeaa35fe4ae58451b4f367af Mon Sep 17 00:00:00 2001 From: Richard Wheeler <2762690+zephyris@users.noreply.github.com> Date: Sat, 24 Feb 2024 00:04:34 +0000 Subject: [PATCH 005/695] Fix: Make link graph node borders scale with GUI (#12167) --- src/linkgraph/linkgraph_gui.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index a1dfa0c8a8..0bd7f2d947 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -341,7 +341,7 @@ void LinkGraphOverlay::DrawStationDots(const DrawPixelInfo *dpi) const * Draw a square symbolizing a producer of cargo. * @param x X coordinate of the middle of the vertex. * @param y Y coordinate of the middle of the vertex. - * @param size Y and y extend of the vertex. + * @param size x and y extent of the vertex. * @param colour Colour with which the vertex will be filled. * @param border_colour Colour for the border of the vertex. */ @@ -350,15 +350,10 @@ void LinkGraphOverlay::DrawStationDots(const DrawPixelInfo *dpi) const size--; int w1 = size / 2; int w2 = size / 2 + size % 2; + int borderwidth = ScaleGUITrad(1); + GfxFillRect(x - w1 - borderwidth, y - w1 - borderwidth, x + w2 + borderwidth, y + w2 + borderwidth, border_colour); GfxFillRect(x - w1, y - w1, x + w2, y + w2, colour); - - w1++; - w2++; - GfxDrawLine(x - w1, y - w1, x + w2, y - w1, border_colour); - GfxDrawLine(x - w1, y + w2, x + w2, y + w2, border_colour); - GfxDrawLine(x - w1, y - w1, x - w1, y + w2, border_colour); - GfxDrawLine(x + w2, y - w1, x + w2, y + w2, border_colour); } bool LinkGraphOverlay::ShowTooltip(Point pt, TooltipCloseCondition close_cond) From 677ec70b0e93448c3bb5df171d0b4c5a1750cdfc Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Sat, 24 Feb 2024 11:09:16 -0500 Subject: [PATCH 006/695] Fix fd9e72a: Helptext for timekeeping unit setting erroneously refers to vehicle movement (#12172) --- src/lang/english.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index e04b85a6da..a640d34a9a 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1494,7 +1494,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Vehicles never STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :When enabled, all vehicle models remain available forever after their introduction STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Timekeeping: {STRING2} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Select the timekeeping units of the game. This cannot be changed later.{}{}Calendar-based is the classic OpenTTD experience, with a year consisting of 12 months, and each month having 28-31 days.{}{}In Wallclock-based time, vehicle movement, cargo production, and financials are instead based on one-minute increments, which is about as long as a 30 day month takes in Calendar-based mode. These are grouped into 12-minute periods, equivalent to a year in Calendar-based mode.{}{}In either mode there is always a classic calendar, which is used for introduction dates of vehicles, houses, and other infrastructure. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Select the timekeeping units of the game. This cannot be changed later.{}{}Calendar-based is the classic OpenTTD experience, with a year consisting of 12 months, and each month having 28-31 days.{}{}In Wallclock-based time, cargo production and financials are instead based on one-minute increments, which is about as long as a 30 day month takes in Calendar-based mode. These are grouped into 12-minute periods, equivalent to a year in Calendar-based mode.{}{}In either mode there is always a classic calendar, which is used for introduction dates of vehicles, houses, and other infrastructure. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendar STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Wallclock From ddb391407440522fdcd28f51e64f4a4ee14ee9fa Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 24 Feb 2024 18:35:08 +0000 Subject: [PATCH 007/695] Update: Translations from eints english (au): 6 changes by krysclarke swedish: 19 changes by sereneavatar estonian: 30 changes by RM87 chinese (simplified): 3 changes by Kevin-mao0721 hungarian: 60 changes by titanicbobo italian: 6 changes by Rivarossi russian: 3 changes by Ln-Wolf, 3 changes by KorneySan finnish: 6 changes by hpiirai ukrainian: 7 changes by StepanIvasyn latvian: 6 changes by lexuslatvia portuguese: 37 changes by azulcosta portuguese (brazilian): 19 changes by pasantoro polish: 6 changes by SzyZuu --- src/lang/brazilian_portuguese.txt | 32 +++++++----- src/lang/english_AU.txt | 6 +++ src/lang/estonian.txt | 31 ++++++++++- src/lang/finnish.txt | 6 +++ src/lang/hungarian.txt | 85 ++++++++++++++++++++++--------- src/lang/italian.txt | 6 +++ src/lang/latvian.txt | 6 +++ src/lang/polish.txt | 6 +++ src/lang/portuguese.txt | 68 ++++++++++++++----------- src/lang/russian.txt | 6 +++ src/lang/simplified_chinese.txt | 6 +-- src/lang/swedish.txt | 32 +++++++----- src/lang/ukrainian.txt | 7 +++ 13 files changed, 211 insertions(+), 86 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 258c0e5d65..373682b3f2 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -50,7 +50,7 @@ STR_CARGO_PLURAL_RUBBER :Borracha STR_CARGO_PLURAL_SUGAR :Açúcar STR_CARGO_PLURAL_TOYS :Brinquedos STR_CARGO_PLURAL_SWEETS :Doces -STR_CARGO_PLURAL_COLA :Bebida de cola +STR_CARGO_PLURAL_COLA :Bebida de Cola STR_CARGO_PLURAL_CANDYFLOSS :Algodão Doce STR_CARGO_PLURAL_BUBBLES :Bolhas STR_CARGO_PLURAL_TOFFEE :Caramelo @@ -84,7 +84,7 @@ STR_CARGO_SINGULAR_RUBBER :Borracha STR_CARGO_SINGULAR_SUGAR :Açúcar STR_CARGO_SINGULAR_TOY :Brinquedo STR_CARGO_SINGULAR_SWEETS :Doce -STR_CARGO_SINGULAR_COLA :Bebida de cola +STR_CARGO_SINGULAR_COLA :Bebida de Cola STR_CARGO_SINGULAR_CANDYFLOSS :Algodão Doce STR_CARGO_SINGULAR_BUBBLE :Bolha STR_CARGO_SINGULAR_TOFFEE :Caramelo @@ -118,7 +118,7 @@ STR_QUANTITY_RUBBER :{VOLUME_LONG} d STR_QUANTITY_SUGAR :{WEIGHT_LONG} de açúcar STR_QUANTITY_TOYS :{COMMA}{NBSP}brinquedo{P "" s} STR_QUANTITY_SWEETS :{COMMA}{NBSP}saco{P "" s} de doces -STR_QUANTITY_COLA :{VOLUME_LONG} de bebida de cola +STR_QUANTITY_COLA :{VOLUME_LONG} de bebida de Cola STR_QUANTITY_CANDYFLOSS :{WEIGHT_LONG} de algodão doce STR_QUANTITY_BUBBLES :{COMMA} bolha{P "" s} STR_QUANTITY_TOFFEE :{WEIGHT_LONG} de caramelo @@ -1041,7 +1041,7 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Marque e STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}A configuração terá efeito somente após reiniciar o jogo STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync -STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para ativar Vsync na tela. Quando modificada, esta configuração será aplicada somente ao reiniciar o jogo. Só funciona com a aceleração de hardware habilitada +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para ativar Vsync na tela. Se modificada, esta configuração só terá efeito quado o jogo for reiniciado. Só funciona com aceleração de hardware habilitada STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}"Driver" atual: {STRING} @@ -1118,6 +1118,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Diminuir STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Aumentar o valor da sua moeda para uma Libra(£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Definir a taxa de câmbio de sua moeda por uma Libra(£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Separador: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Definir o separador para a sua moeda STR_CURRENCY_PREFIX :{LTBLUE}Prefixo: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Definir o prefixo para a sua moeda @@ -1273,7 +1275,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Dinheiro infini STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Permite gastos ilimitados e desabilita a falência de empresas STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Valor máximo do empréstimo inicial: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Valor máximo que uma empresa pode emprestar (sem considerar a inflação). Se definido como "Sem empréstimo", não haverá dinheiro disponível a menos que seja fornecido por um Script de Jogo ou pela definição "Dinheiro ilimitado". +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Valor máximo que uma empresa pode emprestar (sem considerar a inflação). Se definido como "Sem empréstimo", não haverá dinheiro disponível a menos que seja fornecido por um Script de Jogo ou pela configuração "Dinheiro ilimitado". STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sem empréstimo @@ -1405,7 +1407,7 @@ STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Se ativado, a j STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Novas ordens são 'sem parar' por padrão: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalmente, um veículo irá parar em cada estação por onde passa. Ativando esta configuração, o veículo passará por todas as estações na sua rota, sem parar, até o destino final. Esta opção define somente um modo padrão para novas ordens. Ordens individuais podem ser definidas explicitamente para qualquer um dos dois comportamentos -STR_CONFIG_SETTING_STOP_LOCATION :Novas ordens de trem param por padrão no {STRING} da plataforma +STR_CONFIG_SETTING_STOP_LOCATION :Novas ordens de trem, por padrão, têm parada no {STRING} da plataforma STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Local padrão onde um trem irá parar na plataforma. No 'início' significa próximo à entrada, 'meio' significa no meio da plataforma e 'fim' significa parar na saída da plataforma. Esta opção apenas define um padrão para as novas ordens. Ordens individuais podem ter o local de parada definido clicando no texto da ordem ###length 3 STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :início @@ -1844,7 +1846,7 @@ STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ativar limites STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Quando ativado, aplica os limites de velocidade dos vagões para definir a velocidade máxima de um trem STR_CONFIG_SETTING_DISABLE_ELRAILS :Desativar ferrovias elétricas: {STRING} -STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Se ativado, essa opção desativa a necessidade de eletrificar os trilhos para que locomotivas elétricas possam utilizá-los +STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Se ativado, essa configuração desativa a necessidade de eletrificar os trilhos para que locomotivas elétricas possam utilizá-los STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Chegada do primeiro veículo à estação do jogador: {STRING} STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Mostrar um jornal quando o primeiro veículo chegar a uma estação nova do jogador @@ -2148,7 +2150,7 @@ STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Alterar STR_CONFIG_ERROR :{WHITE}Erro no arquivo de configuração... STR_CONFIG_ERROR_ARRAY :{WHITE}... erro no array '{STRING}' STR_CONFIG_ERROR_INVALID_VALUE :{WHITE}... valor inválido '{STRING}' para '{STRING}' -STR_CONFIG_ERROR_TRAILING_CHARACTERS :{WHITE}... caracteres extras no fim da definição '{STRING}' +STR_CONFIG_ERROR_TRAILING_CHARACTERS :{WHITE}... caracteres extras no final de '{STRING}' STR_CONFIG_ERROR_DUPLICATE_GRFID :{WHITE}... ignorando NewGRF '{STRING}': ID do GRF é idêntico a '{STRING}' STR_CONFIG_ERROR_INVALID_GRF :{WHITE}... ignorando NewGRF inválido '{STRING}': {STRING} STR_CONFIG_ERROR_INVALID_GRF_NOT_FOUND :não encontrado @@ -2971,7 +2973,7 @@ STR_OBJECT_CLASS_TRNS :Transmissores # Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Árvores -STR_PLANT_TREE_TOOLTIP :{BLACK}Escolher tipo de árvore para plantar. Se no quadrado já existir uma árvore, serão adicionadas mais árvores de diferentes tipos independentemente do tipo selecionado +STR_PLANT_TREE_TOOLTIP :{BLACK}Escolher tipo de árvore para plantar. Se no quadrado já existir uma árvore, serão adicionadas mais árvores de diferentes tipos, ignorando o tipo selecionado STR_TREES_RANDOM_TYPE :{BLACK}Árvores de tipo aleatório STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plantar árvores de tipo aleatório. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Ctrl+Shift+Clique+Arrastar mostra o custo estimado STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Plantar Aleatoriamente @@ -3393,7 +3395,7 @@ STR_GENERATION_TREE_GENERATION :{BLACK}Geraçã STR_GENERATION_OBJECT_GENERATION :{BLACK}Geração de objetos STR_GENERATION_CLEARING_TILES :{BLACK}Geração de área rochosa e irregular STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurando o jogo -STR_GENERATION_PREPARING_TILELOOP :{BLACK}Executando o tile-loop +STR_GENERATION_PREPARING_TILELOOP :{BLACK}Configurando o terreno STR_GENERATION_PREPARING_SCRIPT :{BLACK}Executando o script STR_GENERATION_PREPARING_GAME :{BLACK}Preparando o jogo @@ -3524,7 +3526,7 @@ STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} deve STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} requer OpenTTD versão {2:STRING} ou superior STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :o arquivo GRF foi designado para tradução STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Foram carregados NewGRFs demais -STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Carregar {1:STRING} como NewGRF estático com {2:STRING} pode causar dessincronização +STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Carregar {1:STRING} como NewGRF estático com {2:STRING} pode causar erro de sincronização STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Sprite inesperado (sprite {3:NUM}) STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Propriedade de Ação 0 desconhecida {4:HEX} (sprite {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Tentativa de uso de ID inválido (sprite {3:NUM}) @@ -4945,7 +4947,7 @@ STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY :{YELLOW}Mensage STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Fora dos limites do mapa STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Muito perto da borda do mapa STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Não há dinheiro - requer {CURRENCY_LONG} -STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Necessário terreno plano +STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}É necessário terreno plano STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Terreno inclinado na direção errada STR_ERROR_CAN_T_DO_THIS :{WHITE}Não é possível fazer isto... STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Edifício deve ser demolido primeiro @@ -5421,7 +5423,7 @@ STR_INDUSTRY_NAME_LUMBER_MILL :{G=f}Madeireira STR_INDUSTRY_NAME_COTTON_CANDY_FOREST :{G=f}Floresta de Algodão Doce STR_INDUSTRY_NAME_CANDY_FACTORY :{G=f}Fábrica de Doces STR_INDUSTRY_NAME_BATTERY_FARM :{G=f}Fazenda de Pilhas -STR_INDUSTRY_NAME_COLA_WELLS :{G=m}Poços de Xarope de cola +STR_INDUSTRY_NAME_COLA_WELLS :{G=m}Poços de Xarope de Cola STR_INDUSTRY_NAME_TOY_SHOP :{G=f}Loja de Brinquedos STR_INDUSTRY_NAME_TOY_FACTORY :{G=f}Fábrica de Brinquedos STR_INDUSTRY_NAME_PLASTIC_FOUNTAINS :{G=f}Fontes de Plástico @@ -5809,6 +5811,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}M +STR_CURRENCY_SHORT_GIGA :{NBSP}G +STR_CURRENCY_SHORT_TERA :{NBSP}T STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index b119217fa1..1c7b33a783 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1117,6 +1117,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Decrease STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Increase the amount of your currency for one Pound (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Set the exchange rate of your currency for one Pound (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Separator: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Set the separator for your currency STR_CURRENCY_PREFIX :{LTBLUE}Prefix: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Set the prefix string for your currency @@ -5808,6 +5810,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}m +STR_CURRENCY_SHORT_GIGA :{NBSP}bn +STR_CURRENCY_SHORT_TERA :{NBSP}tn STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index e1330cc1e1..fa1ed4976d 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -416,9 +416,13 @@ STR_SORT_BY_POPULATION :Rahvaarv STR_SORT_BY_RATING :Hinnang STR_SORT_BY_NUM_VEHICLES :Sõidukite koguarv STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Eelmise aasta kogukasum +STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD :Eelmise perioodi kogukasum STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Selle aasta kogukasum +STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Selle perioodi kogukasum STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Eelmise aasta keskmine kasum +STR_SORT_BY_AVERAGE_PROFIT_LAST_PERIOD :Keskmine kasum eelmisel perioodil STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Selle aasta keskmine kasum +STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Keskmine kasum sellel perioodil # Group by options for vehicle list STR_GROUP_BY_NONE :Puudub @@ -972,6 +976,8 @@ STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLAC STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Teenusetoetust makstakse ettevõttele {STRING}!{}{}{STRING} kohast {STRING} kohta {STRING} teenuse eest makstakse järgmise {UNITS_YEARS_OR_MINUTES} aasta jooksul kolmekordselt! STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Teenusetoetust makstakse ettevõttele {STRING}!{}{}{STRING} kohast {STRING} kohta {STRING} teenuse eest makstakse järgmise {UNITS_YEARS_OR_MINUTES} aasta jooksul neljakordselt! +STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Liikluskaos {TOWN} linnas!{}{}{STRING} poolt rahastatud teede renoveerimisprogramm toob 6 kuud häda ja viletsust mootorsõiduki juhtidele! +STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}Liikluskaos {TOWN} linnas!{}{}{STRING} poolt rahastatud teede renoveerimisprogramm toob 6 minutit häda ja viletsust mootorsõiduki juhtidele! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transpordimonopol! # Extra view window @@ -1128,8 +1134,18 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Lähtemu STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Valib kasutatava lähtemuusikakogu STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Rohkem teavet lähtemuusikakogu kohta +STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(puuduvad pistikprogrammid sotsiaalplatvormidega integreerumiseks) +STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :{BLACK}Platvorm: +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Pistikprogrammi olek: +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_RUNNING :{GREEN}Töötab +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_FAILED :{RED}Alglaadimine ebaõnnestus +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_PLATFORM_NOT_RUNNING :{ORANGE}{STRING} ei tööta +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNLOADED :{RED}Ei ole laetud +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :{RED}Duplikaat pistikprogramm +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNSUPPORTED_API :{RED}Versioon ei ole toetatud +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Vigane signatuur STR_BASESET_STATUS :{STRING} {RED}({NUM} puuduv/vigane fail{P "" s}) @@ -1446,7 +1462,8 @@ STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Igas vaates STR_CONFIG_SETTING_BRIBE :Altkäemaksud kohalikele omavalitsustele: {STRING} ###length 2 -STR_CONFIG_SETTING_BRIBE_HELPTEXT :Võimaldab asulate omavalitsustele altkäemaksu pakkuda. Tabamise korral võetakse ettevõttelt kuueks kuuks ära õigus asulas tegutseda +STR_CONFIG_SETTING_BRIBE_HELPTEXT :Võimaldab asulate omavalitsustele altkäemaksu pakkuda. Tabamise korral võetakse ettevõttelt kuueks kuuks õigus asulas tegutseda +STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :Võimaldab asulate omavalitsustele altkäemaksu pakkuda. Tabamise korral võetakse ettevõttelt kuueks minutiks õigus asulas tegutseda STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Ainuveoõiguste ostmine: {STRING} ###length 2 @@ -1848,6 +1865,8 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Väljas STR_CONFIG_SETTING_NOSERVICE :Hoolduse keelamine rikete väljalülitamisel: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Kui on aktiveeritud, siis ei teostata hooldust sõidukitele mille tõrkumine ei ole võimalik +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Laadimiskiiruse aeglustus rongidele, mis on jaamast pikemad: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Sisselülitatud olekus laadivad jaama jaoks liiga pikad rongid kauem kui rongid, mis jaama mahuvad. See seade ei mõjuta rajaleidmist. STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Vagunite kiiruspiirangud: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Kui on aktiveeritud siis kasutatakse rongi maksimaalse kiiruse arvutamiseks ka vagunite kiiruse piirangut @@ -2507,6 +2526,10 @@ STR_NETWORK_ASK_RELAY_NO :{BLACK}Ei STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Jah, ainult seekord STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}jah, ära küsi uuesti +STR_NETWORK_ASK_SURVEY_CAPTION :Osaleda automaatses uuringus? +STR_NETWORK_ASK_SURVEY_PREVIEW :Vaata uuringutulemust +STR_NETWORK_ASK_SURVEY_LINK :Uuringust ja privaatsusest +STR_NETWORK_ASK_SURVEY_NO :Ei STR_NETWORK_SPECTATORS :Vaatlejad @@ -3865,6 +3888,8 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Täpsust STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Vaata täpset taristu hulka STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Saada raha STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Saada sellele ettevõttele raha +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Vaenulik ülevõtmine +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Võta see ettevõte vaenulikult üle STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Uus nägu STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Vali presidendile uus nägu @@ -4383,6 +4408,8 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Tühimas STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Kasum sel aastal: {LTBLUE}{CURRENCY_LONG} (eelmisel: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Kasum sellel aastal: {LTBLUE}{CURRENCY_LONG} (eelmisel aastal: {CURRENCY_LONG}) {BLACK}Min. jõudlus: {LTBLUE}{POWER_TO_WEIGHT} +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Kasum sellel perioodil: {LTBLUE}{CURRENCY_LONG} (eelmisel perioodil: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Kasum sellel perioodil: {LTBLUE}{CURRENCY_LONG} (eelmisel perioodil: {CURRENCY_LONG}) {BLACK}Min. jõudlus: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Tehnoseisund: {LTBLUE}{COMMA}% {BLACK}Rikkeid eelmisest hooldusest: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Valmistatud: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY_LONG} @@ -4655,7 +4682,9 @@ STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Graafiku STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}See graafik algab {STRING} STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}See graafik algab {COMMA}. sekundi pärast +STR_TIMETABLE_START :{BLACK}Alusta graafikut +STR_TIMETABLE_START_SECONDS_QUERY :Sekundeid kuni graafik algab STR_TIMETABLE_CHANGE_TIME :{BLACK}Muuda aega STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Muuda märgitud korraldusele määratud aega. Ctrl+klõps seab aja kõigile korraldustele diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index a0c8e7e529..155f81af04 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1117,6 +1117,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Pienenn STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Suurenna vaihtokurssia verrattuna puntaan (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Aseta vaihtokurssi valuutallesi verrattuna puntaan (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Erotin: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Valitse erotin valuutallesi STR_CURRENCY_PREFIX :{LTBLUE}Etuliite: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Valitse alkuliite valuutallesi @@ -5808,6 +5810,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}000 +STR_CURRENCY_SHORT_MEGA :{NBSP}milj. +STR_CURRENCY_SHORT_GIGA :{NBSP}mrd. +STR_CURRENCY_SHORT_TERA :{NBSP}bilj. STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 69f3540949..26b0663e15 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -450,13 +450,13 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Térkép STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Településlista mutatása STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Támogatások megjelenítése STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Állomások listája -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Pénzügyi adatok +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Pénzügyi adatok megnyitása STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Általános adatok STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Napló STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Célok listája STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Vállalati grafikonok és rakományok szállítási díja STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}A vállalatok helyezése -STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Gazdasági épületek szemügyre vétele vagy egy új gazdasági épület építése +STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Gazdasági épületek listázása, ipari lánc megnyitása, vagy új gazdasági épületek építése STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Vonatok listája. Ctrl+kattintással válszthatsz a csoport- vagy járműlista között STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Közúti járművek listája. Ctrl+kattintással válszthatsz a csoport- vagy járműlista között STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Hajók listája. Ctrl+kattintással válszthatsz a csoport- vagy járműlista között @@ -984,8 +984,12 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}A támogatás határideje lejárt:{}{}{STRING} szállításáért {STRING} és {STRING} között már nem jár támogatás STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Támogatás visszavonva:{}{}{STRING} szállítása {STRING} és {STRING} között már nem támogatott +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Támogatási ajánlat:{}{}Az első {STRING} szállító {STRING} és {STRING} között {UNITS_YEARS_OR_MINUTES} támogatást kap a helyi önkormányzattól! ###length 4 +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}{STRING} támogatást kapott!{}{}Így {STRING} szállítása {STRING} és {STRING} között a következő {UNITS_YEARS_OR_MINUTES} másfélszeres hasznot hoz neki! STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}{STRING} támogatást kapott!{}{}Így {STRING} szállítása {STRING} és {STRING} kétszeres hasznot hoz neki a következő {UNITS_YEARS_OR_MINUTES}ben! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}{STRING} támogatást kapott!{}{}Így {STRING} szállítása {STRING} és {STRING} között a következő {UNITS_YEARS_OR_MINUTES} háromszoros hasznot hoz neki! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}{STRING} támogatást kapott!{}{}Így {STRING} szállítása {STRING} és {STRING} között a következő {UNITS_YEARS_OR_MINUTES} négyszeres hasznot hoz neki! STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Forgalmi káosz {TOWN}-ban!{}{}A {STRING} által támogatott útfelújítási program 6 hónap keservet okoz a közlekedőknek! STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}Forgalmi káosz {TOWN}-ban!{}{}A {STRING} által támogatott útfelújítási program 6 perc keservet okoz a közlekedőknek! @@ -1177,6 +1181,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Átvált STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Átváltási arány növelése egy Fonthoz (£) képest STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Átváltási arány beállítása egy Fonthoz (£) képest +STR_CURRENCY_SEPARATOR :{LTBLUE}Elválasztó: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Elválaszó beállítása a pénznemedhez STR_CURRENCY_PREFIX :{LTBLUE}Előtag: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Előtag beállítása a pénznemedhez @@ -1332,10 +1338,10 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Végtelen pénz STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Végtelen költés engedélyezése és vállalatok csődhelyzet-lehetőségének kikapcsolása STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximális kezdeti hitelkeret: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximálisan kölcsönözhető összeg (az inflációtól eltekintve) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximálisan kölcsönözhető összeg (az inflációtól eltekintve). Ha a "Nincs kölcsön" értékre van állítva, akkor nem lesz elérhető pénz, kivéve, ha azt egy játékszkript vagy a "Végtelen pénz" beállítás biztosítja. STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Nincs kölcsön {RED}Kezdőtőkéhez játékszkript szükséges +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Nincs kölcsön STR_CONFIG_SETTING_INTEREST_RATE :Kamatláb: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Banki hitel kamat; inflációt is szabályozza, ha be van kapcsolva @@ -1621,14 +1627,14 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Olajfinomítók STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Megadhatod, hogy a térkép szélétől milyen messze épülhetnek olajfinomítók és olajfúró tornyok. Sziget jellegű térképek esetén így a part közelében fognak épülni. 256 mezőnél szélesebb, ill. hosszabb térképek esetén ez az érték felszorzódik. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Hóhatár magassága: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Ezzel a beállítással szabályozhatod a szub-arktikus táj hóhatárát. A hó befolyással lehet a gazdasági épületek generálására és a települések növekedésére. Csak a pályaszerkesztőben lehet állítani, más esetben a havas terület százalékos kiterjedéséből kerül kiszámításra. +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Ez a beállítás szabályozza szub-arktikus táj hóhatárát. A hó befolyással lehet a gazdasági épületek generálására és a települések növekedésére. Csak a pályaszerkesztőben lehet állítani, más esetben a havas terület százalékos kiterjedéséből kerül kiszámításra. STR_CONFIG_SETTING_SNOW_COVERAGE :Havas terület kiterjedése: {STRING} STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Beállíthatod, hogy a szub-arktikus tájon a térkép mekkora részét fedje hó. A hó befolyással van a gazdasági épületek elhelyezésére és a települések növekedésére. A beállítás csak a térképgenerátort érinti. A tengerszint feletti legelső szintet sosem fedheti hó. STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Sivatag kiterjedése: {STRING} -STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Beállíthatod, hogy a szubtrópusi tájon a térkép mekkora részét fedje sivatag. A sivatag hatással van a gazdasági épületek elhelyezésére és a települések növekedésére. A beállítás csak a térképgenerátort érinti. +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Beállíthatod, hogy a szubtrópusi tájon a térkép mekkora részét fedje sivatag. A sivatag hatással van a gazdasági épületek és a települések elhelyezésére és a települések növekedésére. A beállítás csak a térképgenerátort érinti. STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :A terep durvasága: {STRING} @@ -2174,6 +2180,7 @@ STR_CONFIG_SETTING_ACCOUNTING :Pénzügyek STR_CONFIG_SETTING_VEHICLES :Járművek STR_CONFIG_SETTING_VEHICLES_PHYSICS :Fizika STR_CONFIG_SETTING_VEHICLES_ROUTING :Útvonalkeresés +STR_CONFIG_SETTING_VEHICLES_ORDERS :Utasítások STR_CONFIG_SETTING_LIMITATIONS :Korlátozások STR_CONFIG_SETTING_ACCIDENTS :Katasztrófák / Balesetek STR_CONFIG_SETTING_GENWORLD :Térképgenerálás @@ -2318,13 +2325,17 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vonat sz STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Közúti jármű színsémák mutatása STR_LIVERY_SHIP_TOOLTIP :{BLACK}Hajó színsémák mutatása STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Repülőgép színsémák mutatása +STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Vonatcsoportok színeinek megjelenítése STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Közúti járművek csoportjainak színeinek megjelenítése STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Hajócsoportok színeinek megjelenítése -STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Válassz egy elsődleges színt a kiválasztott sémához. Ctrl+kattintással az összes sémához ezt a színt állíthatod be -STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Válassz egy másodlagos színt a kiválasztott sémához. Ctrl+kattintással az összes sémához ezt a színt állíthatod be +STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Repülőgépcsoportok színeinek megjelenítése +STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Válassz egy elsődleges színt a kiválasztott sémához. Ctrl+kattintással beállítható ez a szín az összes színsémához +STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Válassz egy másodlagos színt a kiválasztott sémához. Ctrl+kattintással beállítható ez a szín az összes színsémához STR_LIVERY_PANEL_TOOLTIP :{BLACK}Válassz megváltoztatandó színsémát, vagy színsémákat Ctrl+kattintással. Kattints a dobozra a színséma használat váltásához. +STR_LIVERY_TRAIN_GROUP_EMPTY :Nincsenek vonatcsoportok létrehozva STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Nincs közúti járművek csoportja beállítva STR_LIVERY_SHIP_GROUP_EMPTY :Nincs hajócsoport beállítva +STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Nincs repülőgépcsoport beállítva ###length 23 STR_LIVERY_DEFAULT :Alapértelmezett @@ -2804,7 +2815,10 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}túlterhelt # Linkgraph tooltip +STR_LINKGRAPH_STATS_TOOLTIP_MONTH :{BLACK}{CARGO_LONG} havi szállításáért {STATION} és {STATION} között ({COMMA}% elszállítva){STRING} +STR_LINKGRAPH_STATS_TOOLTIP_MINUTE :{BLACK}{CARGO_LONG} percenkénti szállításáért {STATION} és {STATION} között ({COMMA}% elszállítva){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} visszaszállításra ({COMMA}% elszállítva) +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Átlagos utazási idő: {UNITS_DAYS_OR_SECONDS} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Lefedett terület mutatása: @@ -2838,7 +2852,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Vasúti STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Vasúti járműtelep építése (vonatok vételére és karbantartására). Shift lenyomásával becsült építési költséget mutat STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Ellenőrző pont építése vágányra. A Ctrl lenyomásával az ellenőrző pontok egyesíthetőek. Shift lenyomásával megmutatja a becsült építési költséget STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Vasútállomás építése. A Ctrl lenyomásával egyesítheted más állomásokkal. Shift lenyomásával megmutatja a becsült építési költséget -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Vasúti jelzők építése. Ctrl gombbal váltás az alak- és fényjelzők között{}Húzással a sínek mentén végig jelzők épülnek. Húzva Ctrl gombbal a következő pályakiágazásig vagy jelzőig épít jelzőket{}Ctrl+kattintással válthatod a megnyitandó jelzőépítés-kezelő ablakot. Shift lenyomásával megmutatja a becsült építési költséget +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Vasúti jelzők építése. Ctrl gombbal váltás az alak- és fényjelzők között{}Húzással a sínek mentén végig jelzők épülnek. Húzva Ctrl gombbal a következő pályakiágazásig vagy jelzőig épít jelzőket. Ctrl+kattintással válthatod a megnyitandó jelzőépítés-kezelő ablakot. Shift lenyomásával megmutatja a becsült építési költséget STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Vasúti híd építése. Shift lenyomásával megmutatja a becsült építési költséget STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Vasúti alagút építése. Shift lenyomásával megmutatja a becsült építési költséget STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Váltás építés/feleszedés között vasúti pályák, jelzők, ellenőrző pontok és vasútállomások esetében. Ctrl nyomvatartásával az ellenőrző pontokon és állomásokon a vasúti pályát is eltávolítja @@ -2925,7 +2939,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Villamos STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Garázs építése (járművek vételére és karbantartására). Shift lenyomásával megmutatja a becsült építési költséget STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Villamos remíz építése (járművek megépítésére és javítására). Shift lenyomásával megmutatja a becsült építési költséget STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Buszmegálló építése. A Ctrl lenyomásával egyesítheted más állomásokkal. Shift lenyomásával megmutatja a becsült építési költséget -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Villamos-utasváró építése. A Ctrl lenyomásával egyesítheted más állomásokkal. Shift lenyomásával megmutatja a becsült építési költséget +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Villamosmegálló építése. A Ctrl lenyomásával egyesítheted más állomásokkal. Shift lenyomásával megmutatja a becsült építési költséget STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Teherautó-rakodóhely építése. A Ctrl lenyomásával egyesítheted más állomásokkal. Shift lenyomásával megmutatja a becsült építési költséget STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Tehervillamos-állomás építése. A Ctrl lenyomásával egyesítheted más állomásokkal. Shift lenyomásával megmutatja a becsült építési költséget STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Egyirányú utak be/kikapcsolása @@ -2952,8 +2966,8 @@ STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Buszmeg STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Buszmegálló helyzetének kiválasztása STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Rakodóhely helyzete STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Teherautó-rakodó helyzetének kiválasztása -STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Villamos-utasváró helyzete -STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Villamos-utasváró helyzetének kiválasztása +STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Villamosmegálló helyzete +STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Villamosmegálló helyzetének kiválasztása STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Tehervillamos-állomás helyzete STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Tehervillamos-állomás helyzetének kiválasztása @@ -3663,6 +3677,7 @@ STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Város) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Lakosság: {ORANGE}{COMMA}{BLACK} Házak: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} a legutóbbi hónapban: {ORANGE}{COMMA}{BLACK} maximum: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}{CARGO_LIST} elmúlt percben: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}A város növekedéséhez szükséges rakomány: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} szükséges STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} szükséges télen @@ -3714,6 +3729,8 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}A városi úthálózat felújításának finanszírozása.{}Akár 6 percig is jelentős fennakadást okoz a közúti forgalomban.{}{POP_COLOUR}Ára: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Szobor építése a vállalatod tiszteletére.{}Javítja az állomásaid értékelését a városban.{}{POP_COLOUR}Ára: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Új kereskedelmi épületek építésének támogatása a városban.{}A város egy ideig gyorsabban fog növekedni.{}{POP_COLOUR}Ára: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Kizárólagos szállítási jogok vásárlása 12 hónapra ebben a városban.{}Az ellenfelek állomásai nem fognak se utast, se rakományt kapni. A versenytársak sikeres megvesztegetése felbontja ezt a szerződést.{}{POP_COLOUR}Ára: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Kizárólagos szállítási jogok vásárlása 12 percre ebben a városban.{}Az ellenfelek állomásai nem fognak se utast, se rakományt kapni. A versenytársak sikeres megvesztegetése felbontja ezt a szerződést.{}{POP_COLOUR}Ára: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}A megítélésed növelése az önkormányzat megvesztegetésével, komoly büntetést kockáztatva, ha az kiderül.Ezzel megszüntetheted egy versenytársad kizárólagos szállítási jogát is.{}{POP_COLOUR}Ára: {CURRENCY_LONG} # Goal window @@ -3813,6 +3830,7 @@ STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPAN STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Vélemény STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Vélemény megmutatása az állomásról +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MONTH :{BLACK}Havi ellátás és helyi minősítés: STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MINUTE :{BLACK}Percenkénti ellátás és helyi minősítés: STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) @@ -4040,6 +4058,7 @@ STR_VEHICLE_LIST_REPLACE_VEHICLES :Járművek lecs STR_VEHICLE_LIST_SEND_FOR_SERVICING :Javításra küldés STR_VEHICLE_LIST_CREATE_GROUP :Csoport létrehozása STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Idei nyereség: {CURRENCY_LONG} (Tavalyi: {CURRENCY_LONG}) +STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{TINY_FONT}{BLACK}Nyereség ebben az időszakban: {CURRENCY_LONG} (elmúlt időszakban: {CURRENCY_LONG}) STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} @@ -4425,20 +4444,21 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Aktuáli # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Berakodás / Kirakodás STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Indul +STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Várakozás csoportbontásra STR_VEHICLE_STATUS_CRASHED :{RED}Balesetet szenvedett! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Lerobbant STR_VEHICLE_STATUS_STOPPED :{RED}Áll -STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Lassít, {VELOCITY} +STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}{VELOCITY} - Lassít STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Nincs áram STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Szabad útra vár STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}A következő repülőtér túl messze van -STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{STATION} állomás felé, {VELOCITY} -STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Nincs utasítás, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Útban {WAYPOINT} felé, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Útban {DEPOT} felé, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Javítás {DEPOT}ban, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}Csoport bontás és szervizelés itt: {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Ütban {0:STATION} állomás felé +STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Nincs utasítás +STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Útban {0:WAYPOINT} felé +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Útban {0:DEPOT} felé +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Javítás {0:DEPOT}ban +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Csoport bontás és szervizelés itt: {0:DEPOT} STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - {0:STATION} nem elérhető STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - {0:WAYPOINT} nem elérhető, @@ -4465,7 +4485,8 @@ STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Repülő STR_VEHICLE_INFO_AGE :{COMMA} év ({COMMA}) STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} év ({COMMA}) -STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Kor: {LTBLUE}{STRING}{BLACK} Üzemeltetés: {LTBLUE}{CURRENCY_LONG}/év +STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Kor: {LTBLUE}{STRING}{BLACK} Üzemeltetés: {LTBLUE}{CURRENCY_LONG}/év +STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Kor: {LTBLUE}{STRING}{BLACK} Üzemeltetés: {LTBLUE}{CURRENCY_LONG}/időszak STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Végsebesség: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Sebesség: {LTBLUE}{VELOCITY} {BLACK}Típus: {LTBLUE}{STRING} @@ -4475,7 +4496,8 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Súly: { STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Idei haszon: {LTBLUE}{CURRENCY_LONG} (tavalyi: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Idei haszon: {LTBLUE}{CURRENCY_LONG} (tavalyi: {CURRENCY_LONG}) {BLACK}Minimum teljesítmény: {LTBLUE}{POWER_TO_WEIGHT} -STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Nyereség ebben az időszakban: {LTBLUE}{CURRENCY_LONG} (elmúlt időszak: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Nyereség ebben az időszakban: {LTBLUE}{CURRENCY_LONG} (elmúlt időszakban: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Nyereség ebben az időszakban: {LTBLUE}{CURRENCY_LONG} (emúlt időszakban: {CURRENCY_LONG}) {BLACK}Min. teljesítmény: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Megbízhatóság: {LTBLUE}{COMMA}% {BLACK}Lerobbanások az utolsó javítás óta: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Vásárlás éve: {LTBLUE}{NUM}{BLACK} Érték: {LTBLUE}{CURRENCY_LONG} @@ -4501,6 +4523,7 @@ STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Szervizi STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Javítási időköz módjának megváltoztatása STR_VEHICLE_DETAILS_DEFAULT :Alapértelmezett STR_VEHICLE_DETAILS_DAYS :Napok +STR_VEHICLE_DETAILS_MINUTES :Perc STR_VEHICLE_DETAILS_PERCENT :Százalék ###length VEHICLE_TYPES @@ -4566,6 +4589,7 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Átkapcs STR_ORDERS_LIST_TOOLTIP :{BLACK}Utasításlista - kattints egy célpontra a kijelöléséhez. Ctrl+kattintással az utasítás helyszínére görget STR_ORDER_INDEX :{COMMA}:{NBSP} +STR_ORDER_TEXT :{STRING} {STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Utasítások vége - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Megosztott utasításlista vége - - @@ -4602,10 +4626,13 @@ STR_ORDER_DROP_REFIT_AUTO_ANY :Elérhető rako STR_ORDER_DROP_GO_ALWAYS_DEPOT :Mindig menj javítani STR_ORDER_DROP_SERVICE_DEPOT :Ha javításra szorul STR_ORDER_DROP_HALT_DEPOT :Maradj ott +STR_ORDER_DROP_UNBUNCH :Csoportbontás # Depot action tooltips, one per vehicle type ###length VEHICLE_TYPES +STR_ORDER_TRAIN_DEPOT_ACTION_TOOLTIP :{BLACK}Válaszd ki a vasúti járműtelepre alkalmazni kívánt műveletet STR_ORDER_ROAD_DEPOT_ACTION_TOOLTIP :{BLACK}Válaszd ki a garázsra alkalmazni kívánt műveletet +STR_ORDER_SHIP_DEPOT_ACTION_TOOLTIP :{BLACK}Válaszd ki a dokkra alkalmazni kívánt műveletet STR_ORDER_HANGAR_ACTION_TOOLTIP :{BLACK}Válaszd ki a hangárra alkalmazni kívánt műveletet ###next-name-looks-similar @@ -4676,6 +4703,7 @@ STR_ORDER_REFIT_ORDER :(Átalakít err STR_ORDER_REFIT_STOP_ORDER :(átalakít erre: {STRING}, és megáll) STR_ORDER_STOP_ORDER :(megáll) +STR_ORDER_WAIT_TO_UNBUNCH :(várakozás csoportbontásra) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Az állomás nem használható){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4757,6 +4785,7 @@ STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}A menetr STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}A menetrend {COMMA} másodperc múlva kezdődik STR_TIMETABLE_START :{BLACK}Menetrend megkezdése +STR_TIMETABLE_START_TOOLTIP :{BLACK}Menetrend kezdésének beállítása. Ctrl+kattintással az összes jármű indításának egyenletes elosztása a relatív utasításuk alapján, ha az utasítás teljesen be van ütemezve STR_TIMETABLE_START_SECONDS_QUERY :Másodpercek a menetrend kezdetéig @@ -4767,7 +4796,7 @@ STR_TIMETABLE_CLEAR_TIME :{BLACK}Idő tö STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}A kijelölt menetrendi sorhoz tartozó végrehajtási idő törlése. Ctrl+Klikkel kitörlöd az időt az összes utasításnál. STR_TIMETABLE_CHANGE_SPEED :{BLACK}Sebességkorlátozás megváltoztatása -STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Kijelölt utasítás sebességkorlátozásának megváltoztatása. Ctrl+kattintással beállíthatod a sebességet az összes utasításhoz. +STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Kijelölt utasítás sebességkorlátozásának megváltoztatása. Ctrl+kattintással beállítható a sebesség az összes utasítás számára STR_TIMETABLE_CLEAR_SPEED :{BLACK}Sebességkorlátozás törlése STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Sebességkorlátozás törlése a kijelölt utasításból. Ctrl+kattintással kitörlöd a sebességet az összes utasításból. @@ -4783,7 +4812,9 @@ STR_TIMETABLE_SCHEDULED :{BLACK}Tervezet STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Váltás a várható és a tervezett időpontok között STR_TIMETABLE_ARRIVAL_DATE :Érk.: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :Ind.: {COLOUR}{DATE_TINY} STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :Érk.: {COLOUR}{COMMA} mp +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :Ind.: {COLOUR}{COMMA} mp # Date window (for timetable) @@ -5067,7 +5098,7 @@ STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Változt STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Nem építhetsz ide vasútállomást... STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Nem építhetsz ide buszmegállót... STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Nem építhetsz ide teherautó-rakodóhelyet... -STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Nem építhetsz ide villamos-utasvárót... +STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Nem építhetsz ide villamosmegállót... STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Nem építhetsz ide tehervillamos-állomást... STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Nem építhetsz ide kikötőt... STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Nem építhetsz ide repülőteret... @@ -5091,7 +5122,7 @@ STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Nem lehe STR_ERROR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Előbb le kell rombolnod a vasútállomást STR_ERROR_CAN_T_REMOVE_BUS_STATION :{WHITE}Nem távolíthatod el ezt a buszmegállót... STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Nem távolíthatod el ezt a teherautó-rakodóhelyet... -STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Nem lehet a villamos-utasvárót eltávolítani... +STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Nem lehet a villamosmegállót eltávolítani... STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Nem lehet a tehervillamos-állomást eltávolítani STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Előbb el kell távolítanod a megállóhelyet STR_ERROR_THERE_IS_NO_STATION :{WHITE}... nincs itt állomás @@ -5099,7 +5130,7 @@ STR_ERROR_THERE_IS_NO_STATION :{WHITE}... ninc STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}Előbb le kell rombolnod a vasútállomást STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Előbb le kell rombolnod a buszmegállót STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST :{WHITE}Előbb le kell rombolnod a teherautó-rakodóhelyet -STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST :{WHITE}Előbb le kell rombolni a villamos-utasvárót +STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST :{WHITE}Előbb le kell rombolni a villamosmegállót STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST :{WHITE}Előbb le kell rombolni a tehervillamos-állomást STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Előbb le kell rombolnod a kikötőt STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Előbb le kell rombolnod a repülőteret @@ -5884,6 +5915,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP} ezer +STR_CURRENCY_SHORT_MEGA :{NBSP} millió +STR_CURRENCY_SHORT_GIGA :{NBSP} Milliárd +STR_CURRENCY_SHORT_TERA :{NBSP} billó STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/italian.txt b/src/lang/italian.txt index c349087d60..72bbf97666 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1119,6 +1119,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Riduce l STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Aumenta l'ammontare della valuta per una Sterlina (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Imposta il tasso di cambio della valuta per una Sterlina (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Separatore: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Impostare il separatore per la valuta STR_CURRENCY_PREFIX :{LTBLUE}Prefisso: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Imposta il prefisso per la valuta @@ -5849,6 +5851,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}m +STR_CURRENCY_SHORT_GIGA :{NBSP}bn +STR_CURRENCY_SHORT_TERA :{NBSP}tn STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 2f3f374047..eee846205d 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1119,6 +1119,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Samazin STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Palielināt savas valūtas vienību daudzumu attiecībā pret vienu mārciņu (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Uzstādīt savas valūtas maiņas kursu pret vienu mārciņu (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Atdalītājs: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Iestatiet savas valūtas atdalītāju STR_CURRENCY_PREFIX :{LTBLUE}Priedēklis: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Uzstādīt priedēkli savai valūtai @@ -5819,6 +5821,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}tūkst. +STR_CURRENCY_SHORT_MEGA :{NBSP}milj. +STR_CURRENCY_SHORT_GIGA :{NBSP}mljrd. +STR_CURRENCY_SHORT_TERA :{NBSP}trlj. STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 5574239633..9095929521 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1497,6 +1497,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Zmniejsz STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Zwiększ kurs wymiany za jednego funta (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Ustal kurs wymiany za jednego funta (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Separator: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Ustaw separator dla twojej waluty STR_CURRENCY_PREFIX :{LTBLUE}Prefiks: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Ustaw przedrostek dla swojej waluty @@ -6249,6 +6251,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}m +STR_CURRENCY_SHORT_GIGA :{NBSP}mld +STR_CURRENCY_SHORT_TERA :{NBSP}tn STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 83ac340bc7..072cc49f66 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -538,37 +538,37 @@ STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Ativar coloraç STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Alternar contornos de "widget" ###length 31 -STR_DAY_NUMBER_1ST :1 -STR_DAY_NUMBER_2ND :2 -STR_DAY_NUMBER_3RD :3 -STR_DAY_NUMBER_4TH :4 -STR_DAY_NUMBER_5TH :5 -STR_DAY_NUMBER_6TH :6 -STR_DAY_NUMBER_7TH :7 -STR_DAY_NUMBER_8TH :8 -STR_DAY_NUMBER_9TH :9 -STR_DAY_NUMBER_10TH :10 -STR_DAY_NUMBER_11TH :11 -STR_DAY_NUMBER_12TH :12 -STR_DAY_NUMBER_13TH :13 -STR_DAY_NUMBER_14TH :14 -STR_DAY_NUMBER_15TH :15 -STR_DAY_NUMBER_16TH :16 -STR_DAY_NUMBER_17TH :17 -STR_DAY_NUMBER_18TH :18 -STR_DAY_NUMBER_19TH :19 -STR_DAY_NUMBER_20TH :20 -STR_DAY_NUMBER_21ST :21 -STR_DAY_NUMBER_22ND :22 -STR_DAY_NUMBER_23RD :23 -STR_DAY_NUMBER_24TH :24 -STR_DAY_NUMBER_25TH :25 -STR_DAY_NUMBER_26TH :26 -STR_DAY_NUMBER_27TH :27 -STR_DAY_NUMBER_28TH :28 -STR_DAY_NUMBER_29TH :29 -STR_DAY_NUMBER_30TH :30 -STR_DAY_NUMBER_31ST :31 +STR_DAY_NUMBER_1ST :1.º +STR_DAY_NUMBER_2ND :2.º +STR_DAY_NUMBER_3RD :3.º +STR_DAY_NUMBER_4TH :4.º +STR_DAY_NUMBER_5TH :5.º +STR_DAY_NUMBER_6TH :6.º +STR_DAY_NUMBER_7TH :7.º +STR_DAY_NUMBER_8TH :8.º +STR_DAY_NUMBER_9TH :9.º +STR_DAY_NUMBER_10TH :10.º +STR_DAY_NUMBER_11TH :11.º +STR_DAY_NUMBER_12TH :12.º +STR_DAY_NUMBER_13TH :13.º +STR_DAY_NUMBER_14TH :14.º +STR_DAY_NUMBER_15TH :15.º +STR_DAY_NUMBER_16TH :16.º +STR_DAY_NUMBER_17TH :17.º +STR_DAY_NUMBER_18TH :18.º +STR_DAY_NUMBER_19TH :19.º +STR_DAY_NUMBER_20TH :20.º +STR_DAY_NUMBER_21ST :21.º +STR_DAY_NUMBER_22ND :22.º +STR_DAY_NUMBER_23RD :23.º +STR_DAY_NUMBER_24TH :24.º +STR_DAY_NUMBER_25TH :25.º +STR_DAY_NUMBER_26TH :26.º +STR_DAY_NUMBER_27TH :27.º +STR_DAY_NUMBER_28TH :28.º +STR_DAY_NUMBER_29TH :29.º +STR_DAY_NUMBER_30TH :30.º +STR_DAY_NUMBER_31ST :31.º ###length 12 STR_MONTH_ABBREV_JAN :Jan @@ -1118,6 +1118,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Diminuir STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Aumentar a quantidade da sua moeda para uma Libra (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Definir a taxa de câmbio da sua moeda para uma Libra (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Separador: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Define o separador para a sua moeda STR_CURRENCY_PREFIX :{LTBLUE}Prefixo: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Definir o prefixo para a sua moeda @@ -5809,6 +5811,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}M +STR_CURRENCY_SHORT_GIGA :{NBSP}G +STR_CURRENCY_SHORT_TERA :{NBSP}T STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 4a008ec046..b745984ff6 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1262,6 +1262,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Повы STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Снизить курс вашей валюты по отношению к фунту (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Установить курс вашей валюты по отношению к фунту (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Разделитель: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Установите разделитель для вашей валюты STR_CURRENCY_PREFIX :{LTBLUE}Префикс: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Установить префикс вашей валюты @@ -6032,6 +6034,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}к +STR_CURRENCY_SHORT_MEGA :{NBSP}млн +STR_CURRENCY_SHORT_GIGA :{NBSP}млрд +STR_CURRENCY_SHORT_TERA :трлн STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index a8f680e9d1..7bd4b2a82c 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1492,7 +1492,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :载具永不过 STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :启用时,所有载具一经面世,就可以永远选择购买使用。 STR_CONFIG_SETTING_TIMEKEEPING_UNITS :时间模式:{STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :选择游戏的计时模式。 请注意此项无法在游戏进行时更改{}{}日历模式为经典的 OpenTTD 体验,在此模式中,一年由 12 个月组成,每个月有 28-31 天。{}{}在挂钟模式中,车辆移动、货物生产和财务计算等都以分钟为单位,一分钟约等于日历模式中的一个月,即 30 天。两种模式都包含一个用来记录载具、房屋与其他基础设施引入日期的计时器。 +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :选择游戏的计时模式。 请注意此项无法在游戏进行时更改{}{}日历模式为经典的 OpenTTD 体验,在此模式中,一年由 12 个月组成,每个月有 28-31 天。{}{}在挂钟模式中,车辆移动、货物生产和财务计算等都以分钟为单位,一分钟约等于日历模式中的一个月,即 30 天。此模式下每12分钟即日历模式下的一年。{}{}两种模式都包含一个用来记录载具、房屋与其他基础设施引入日期的计时器。 ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :日历 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :挂钟 @@ -4098,7 +4098,7 @@ STR_CARGO_TYPE_FILTER_NONE :没有 STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}列车选择列表。点击载具以展示信息。按住 键点选以显示 / 隐藏当前载具。 STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}路面车辆选择列表。点击车辆查看详细信息,或者按住 Ctrl 键再点击以切换是否隐藏车辆的种类 STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}船舶选择列表。点击船舶查看详细信息,或者按住 Ctrl 键再点击以切换是否隐藏船舶的种类 -STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}飞行器选择列表。点击飞行器查看详细信息,或者按住 Ctrl 键再点击以切换是否隐藏飞行器的种类 +STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}飞机选择列表。点击飞机查看详细信息,或者按住 Ctrl 键再点击以切换是否隐藏飞机的种类 ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}购买车头/车厢 @@ -5238,7 +5238,7 @@ STR_ERROR_CAN_T_RENAME_SHIP :{WHITE}不能 STR_ERROR_CAN_T_RENAME_AIRCRAFT :{WHITE}不能为飞机命名…… ###length VEHICLE_TYPES -STR_ERROR_CAN_T_STOP_START_TRAIN :{WHITE}不能 启动/停止 列车! +STR_ERROR_CAN_T_STOP_START_TRAIN :{WHITE}不能 启动/停止 列车…… STR_ERROR_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}不能 停止/启动 汽车... STR_ERROR_CAN_T_STOP_START_SHIP :{WHITE}不能 停止/启动 船只…… STR_ERROR_CAN_T_STOP_START_AIRCRAFT :{WHITE}不能 启动/停止 飞机 diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 75c0c4cd4d..a1e9b5c5b3 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1117,6 +1117,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Minska v STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Öka värdet för din valuta med ett pund (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Sätt växelkursen för din valuta mot ett pund (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Skiljetecken: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Ange skiljetecknet för din valuta STR_CURRENCY_PREFIX :{LTBLUE}Prefix: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Sätt prefix-sträng för din valuta @@ -1272,10 +1274,10 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Obegränsat kap STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Tillåt obegränsat spenderande och inaktivera konkurser av företag STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximalt startlån: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximalt belopp ett företag kan låna (där inflationen inte tas med i beräkningen) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximalt belopp ett företag kan låna (där inflationen inte tas med i beräkningen). Om inställt på "Inga lån" kommer inga pengar finnas tillgängliga såvida inte utdelat av ett spelskript eller inställningen "Obegränsat kapital". STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Inget lån {RED}Kräver spelskript som sätter startkapital +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Inga lån STR_CONFIG_SETTING_INTEREST_RATE :Räntenivå: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Räntenivå för lån; styr även inflationen om sådan är aktiverad @@ -4382,22 +4384,22 @@ STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Väntar STR_VEHICLE_STATUS_CRASHED :{RED}Kraschad! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Motorstopp STR_VEHICLE_STATUS_STOPPED :{RED}Stoppat -STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Stannar, {VELOCITY} +STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}{VELOCITY} - Stannar STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Ingen kraft STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Väntar på ledig väg STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Nästa destination ligger för långt bort -STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}På väg mot {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Inga order, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} -På väg mot {0:STATION} +STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Inga ordrar STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}På väg mot {WAYPOINT} i {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}På väg mot {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Service vid {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}Glesa ut och serva vid {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - På väg mot {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Service vid {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Glesa ut och serva vid {0:DEPOT} -STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE} Kan inte nå {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}Kan inte nå {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}Kan inte nå {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}Kan inte nå {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - Kan inte nå {0:STATION} +STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Kan inte nå {0:WAYPOINT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Kan inte nå {0:DEPOT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Kan inte nå {0:DEPOT} # Vehicle stopped/started animations ###length 2 @@ -4611,7 +4613,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Åk till närms STR_ORDER_GO_TO_NEAREST_HANGAR :Åk till närmsta hangar STR_ORDER_CONDITIONAL :Villkorat order-hopp STR_ORDER_SHARE :Dela order -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Infoga ny order före markerad order, eller lägg till i slutet av listan. Ctrl+Klick på en station för 'full last någon godstyp', på ett riktmärke för att invertera inställningen 'non-stop som standard', och på en depå för 'service'. Klicka på ett annat fordon för att kopiera dess ordrar eller Ctrl+Klick för att dela ordrar. En depåorder stänger av automatisk service av fordonet +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Infoga ny order före markerad order, eller lägg till i slutet av listan. Ctrl+Klick på en station för 'full last någon godstyp', på ett riktmärke för att invertera inställningen 'non-stop som standard', och på en depå för 'glesa ut'. Klicka på ett annat fordon för att kopiera dess ordrar eller Ctrl+Klick för att dela ordrar. En depåorder stänger av automatisk service av fordonet STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Visa alla fordon som har samma schema @@ -5808,6 +5810,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}t +STR_CURRENCY_SHORT_MEGA :{NBSP}mn +STR_CURRENCY_SHORT_GIGA :{NBSP}md +STR_CURRENCY_SHORT_TERA :{NBSP}bn STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index ee329786fa..a996e5456f 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -729,6 +729,7 @@ STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Кіль STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Рейтинг продуктивності компанії (найбільший рейтинг=1000) STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Вартість компанії +STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Останні 72 хвилини STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Тарифи на доставку вантажів STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Плата за доставку 10 одиниць (або 10,000 літрів) вантажу на відстань 20 квадратів @@ -748,6 +749,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Нати # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Рейтингова таблиця STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' +STR_COMPANY_LEAGUE_COMPANY_RANK :{YELLOW}#{NUM} STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Інженер STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Регулювальник STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Диспетчер @@ -3334,10 +3336,12 @@ STR_MAPGEN_MAPSIZE :{BLACK}Розм STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Оберіть розмір карти в клітинках. Кількість доступних клітинок буде трохи меншою STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Міста: +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :BLACK}Оберіть щільність міст або випадкову кількість STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Назви міст: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Виберіть стиль назв міст STR_MAPGEN_DATE :{BLACK}Дата: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Кількість виробництв: +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :BLACK}Оберіть щільність виробництв або випадкову кількість STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Найвища гора: STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Збільшити на одиницю максимальну висоту найвищої гори на мапі STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Зменшити на одиницю максимальну висоту найвищої гори на мапі @@ -3417,6 +3421,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Рівн STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Генерувати рівнину STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Випадково STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Висота рівня моря +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Обрати висоту суходолу над рівнем моря STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Підняти рівень рівної землі на 1 STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Опустити рівень рівної землі на 1 @@ -4866,6 +4871,7 @@ STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STR # Textfile window STR_TEXTFILE_JUMPLIST :{WHITE}Зміст STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING} +STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Повернутися до історії навігації STR_TEXTFILE_WRAP_TEXT :{WHITE}Розмістити текст STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Розмістити текст у вікні без необхідності прокрутки STR_TEXTFILE_VIEW_README :{BLACK}Інструкція @@ -5322,6 +5328,7 @@ STR_ERROR_NO_BUS_STATION :{WHITE}Нема STR_ERROR_NO_TRUCK_STATION :{WHITE}Немає вантажної станції STR_ERROR_NO_DOCK :{WHITE}Немає порту STR_ERROR_NO_AIRPORT :{WHITE}Немає аеропорту або геліпорту +STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Немає зупинок із сумісним типом дороги STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Немає зупинок із сумісним типом трамвайної колії STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Цей літак не може приземлятися у цьому геліпорті STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Цей гелікоптер не може приземлятися у цьому аеропорту From 8afef45d4e92ea66f35c35102302c97d1632043c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 25 Feb 2024 08:35:57 +0000 Subject: [PATCH 008/695] Fix d3c673e: Don't defer OnResize() after ReInit() (#12174) Some windows resize themselves during painting and issue ReInit(). In this case deferred OnResize() causes a visible glitch as the event is handled on the next redraw. --- src/window.cpp | 14 +++++++++----- src/window_func.h | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index 2151be5f49..314bc9a72c 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -984,7 +984,7 @@ void Window::ReInit(int rx, int ry, bool reposition) this->FindWindowPlacementAndResize(this->window_desc->GetDefaultWidth(), this->window_desc->GetDefaultHeight()); } - ResizeWindow(this, dx, dy); + ResizeWindow(this, dx, dy, true, false); /* ResizeWindow() does this->SetDirty() already, no need to do it again here. */ } @@ -1447,8 +1447,8 @@ void Window::FindWindowPlacementAndResize(int def_width, int def_height) ResizeWindow(this, enlarge_x, enlarge_y); /* ResizeWindow() calls this->OnResize(). */ } else { - /* Schedule OnResize; that way the scrollbars and matrices get initialized. */ - this->ScheduleResize(); + /* Always call OnResize; that way the scrollbars and matrices get initialized. */ + this->OnResize(); } int nx = this->left; @@ -2024,7 +2024,7 @@ static void EnsureVisibleCaption(Window *w, int nx, int ny) * @param delta_y Delta y-size of changed window * @param clamp_to_screen Whether to make sure the whole window stays visible */ -void ResizeWindow(Window *w, int delta_x, int delta_y, bool clamp_to_screen) +void ResizeWindow(Window *w, int delta_x, int delta_y, bool clamp_to_screen, bool schedule_resize) { if (delta_x != 0 || delta_y != 0) { if (clamp_to_screen) { @@ -2051,7 +2051,11 @@ void ResizeWindow(Window *w, int delta_x, int delta_y, bool clamp_to_screen) EnsureVisibleCaption(w, w->left, w->top); /* Schedule OnResize to make sure everything is initialised correctly if it needs to be. */ - w->ScheduleResize(); + if (schedule_resize) { + w->ScheduleResize(); + } else { + w->OnResize(); + } w->SetDirty(); } diff --git a/src/window_func.h b/src/window_func.h index da798aa4e9..8bc5aba228 100644 --- a/src/window_func.h +++ b/src/window_func.h @@ -26,7 +26,7 @@ Window *FindWindowById(WindowClass cls, T number) return FindWindowById(cls, number.base()); } -void ResizeWindow(Window *w, int x, int y, bool clamp_to_screen = true); +void ResizeWindow(Window *w, int x, int y, bool clamp_to_screen = true, bool schedule_resize = true); int PositionMainToolbar(Window *w); int PositionStatusbar(Window *w); int PositionNewsMessage(Window *w); From 56cf89d189a87d66c010439e9f702164620d925d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 25 Feb 2024 12:36:13 +0000 Subject: [PATCH 009/695] Change: Use bitmap for free unit ID generation. (#12165) This improves performance of finding the next free unit number for a vehicle. Based loosely on pool's used slot bitmap. --- src/company_base.h | 15 ++++++++ src/economy.cpp | 11 ++---- src/saveload/vehicle_sl.cpp | 4 +++ src/train_cmd.cpp | 3 +- src/vehicle.cpp | 72 ++++++++++++++++++++----------------- src/vehicle_base.h | 17 ++------- src/vehicle_cmd.cpp | 2 ++ 7 files changed, 68 insertions(+), 56 deletions(-) diff --git a/src/company_base.h b/src/company_base.h index fdfa4a2428..b29d0ddc1c 100644 --- a/src/company_base.h +++ b/src/company_base.h @@ -49,6 +49,19 @@ struct CompanyInfrastructure { uint32_t GetTramTotal() const; }; +class FreeUnitIDGenerator { +public: + UnitID NextID() const; + UnitID UseID(UnitID index); + void ReleaseID(UnitID index); + +private: + using BitmapStorage = size_t; + static constexpr size_t BITMAP_SIZE = std::numeric_limits::digits; + + std::vector used_bitmap; +}; + typedef Pool CompanyPool; extern CompanyPool _company_pool; @@ -129,6 +142,8 @@ struct Company : CompanyProperties, CompanyPool::PoolItem<&_company_pool> { CompanyInfrastructure infrastructure; ///< NOSAVE: Counts of company owned infrastructure. + FreeUnitIDGenerator freeunits[VEH_COMPANY_END]; + Money GetMaxLoan() const; /** diff --git a/src/economy.cpp b/src/economy.cpp index d699d8f5d0..cd739cde88 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -430,17 +430,13 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) } { - FreeUnitIDGenerator unitidgen[] = { - FreeUnitIDGenerator(VEH_TRAIN, new_owner), FreeUnitIDGenerator(VEH_ROAD, new_owner), - FreeUnitIDGenerator(VEH_SHIP, new_owner), FreeUnitIDGenerator(VEH_AIRCRAFT, new_owner) - }; + Company *new_company = new_owner == INVALID_OWNER ? nullptr : Company::Get(new_owner); /* Override company settings to new company defaults in case we need to convert them. * This is required as the CmdChangeServiceInt doesn't copy the supplied value when it is non-custom */ if (new_owner != INVALID_OWNER) { Company *old_company = Company::Get(old_owner); - Company *new_company = Company::Get(new_owner); old_company->settings.vehicle.servint_aircraft = new_company->settings.vehicle.servint_aircraft; old_company->settings.vehicle.servint_trains = new_company->settings.vehicle.servint_trains; @@ -457,8 +453,6 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) * This prevents invalid values on mismatching company defaults being accepted. */ if (!v->ServiceIntervalIsCustom()) { - Company *new_company = Company::Get(new_owner); - /* Technically, passing the interval is not needed as the command will query the default value itself. * However, do not rely on that behaviour. */ @@ -477,7 +471,8 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) } if (v->IsPrimaryVehicle()) { GroupStatistics::CountVehicle(v, 1); - v->unitnumber = unitidgen[v->type].NextID(); + auto &unitidgen = new_company->freeunits[v->type]; + v->unitnumber = unitidgen.UseID(unitidgen.NextID()); } /* Invalidate the vehicle's cargo payment "owner cache". */ diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index c8f3caac82..38b602c50c 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -517,6 +517,10 @@ void AfterLoadVehicles(bool part_of_load) default: break; } + if (part_of_load && v->unitnumber != 0) { + Company::Get(v->owner)->freeunits[v->type].UseID(v->unitnumber); + } + v->UpdateDeltaXY(); v->coord.left = INVALID_COORD; v->sprite_cache.old_coord.left = INVALID_COORD; diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 1a3d74b00b..1189607161 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -1178,7 +1178,7 @@ static void NormaliseTrainHead(Train *head) /* If we don't have a unit number yet, set one. */ if (head->unitnumber != 0) return; - head->unitnumber = GetFreeUnitNumber(VEH_TRAIN); + head->unitnumber = Company::Get(head->owner)->freeunits[head->type].UseID(GetFreeUnitNumber(VEH_TRAIN)); } /** @@ -1336,6 +1336,7 @@ CommandCost CmdMoveRailVehicle(DoCommandFlag flags, VehicleID src_veh, VehicleID } /* Remove stuff not valid anymore for non-front engines. */ DeleteVehicleOrders(src); + Company::Get(src->owner)->freeunits[src->type].ReleaseID(src->unitnumber); src->unitnumber = 0; src->name.clear(); } diff --git a/src/vehicle.cpp b/src/vehicle.cpp index b1fa59a2d2..1226b332c9 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -846,6 +846,8 @@ void Vehicle::PreDestructor() DeleteGroupHighlightOfVehicle(this); } + Company::Get(this->owner)->freeunits[this->type].ReleaseID(this->unitnumber); + if (this->type == VEH_AIRCRAFT && this->IsPrimaryVehicle()) { Aircraft *a = Aircraft::From(this); Station *st = GetTargetAirportIfValid(a); @@ -1816,44 +1818,50 @@ VehicleEnterTileStatus VehicleEnterTile(Vehicle *v, TileIndex tile, int x, int y } /** - * Initializes the structure. Vehicle unit numbers are supposed not to change after - * struct initialization, except after each call to this->NextID() the returned value - * is assigned to a vehicle. - * @param type type of vehicle - * @param owner owner of vehicles + * Find first unused unit number. + * This does not mark the unit number as used. + * @returns First unused unit number. */ -FreeUnitIDGenerator::FreeUnitIDGenerator(VehicleType type, CompanyID owner) : cache(nullptr), maxid(0), curid(0) +UnitID FreeUnitIDGenerator::NextID() const { - /* Find maximum */ - for (const Vehicle *v : Vehicle::Iterate()) { - if (v->type == type && v->owner == owner) { - this->maxid = std::max(this->maxid, v->unitnumber); - } - } - - if (this->maxid == 0) return; - - /* Reserving 'maxid + 2' because we need: - * - space for the last item (with v->unitnumber == maxid) - * - one free slot working as loop terminator in FreeUnitIDGenerator::NextID() */ - this->cache = CallocT(this->maxid + 2); - - /* Fill the cache */ - for (const Vehicle *v : Vehicle::Iterate()) { - if (v->type == type && v->owner == owner) { - this->cache[v->unitnumber] = true; - } + for (auto it = std::begin(this->used_bitmap); it != std::end(this->used_bitmap); ++it) { + BitmapStorage available = ~(*it); + if (available == 0) continue; + return static_cast(std::distance(std::begin(this->used_bitmap), it) * BITMAP_SIZE + FindFirstBit(available) + 1); } + return static_cast(this->used_bitmap.size() * BITMAP_SIZE + 1); } -/** Returns next free UnitID. Supposes the last returned value was assigned to a vehicle. */ -UnitID FreeUnitIDGenerator::NextID() +/** + * Use a unit number. If the unit number is not valid it is ignored. + * @param index Unit number to use. + * @returns Unit number used. + */ +UnitID FreeUnitIDGenerator::UseID(UnitID index) { - if (this->maxid <= this->curid) return ++this->curid; + if (index == 0 || index == UINT16_MAX) return index; - while (this->cache[++this->curid]) { } // it will stop, we reserved more space than needed + index--; - return this->curid; + size_t slot = index / BITMAP_SIZE; + if (slot >= this->used_bitmap.size()) this->used_bitmap.resize(slot + 1); + SetBit(this->used_bitmap[index / BITMAP_SIZE], index % BITMAP_SIZE); + + return index + 1; +} + +/** + * Release a unit number. If the unit number is not valid it is ignored. + * @param index Unit number to release. + */ +void FreeUnitIDGenerator::ReleaseID(UnitID index) +{ + if (index == 0 || index == UINT16_MAX) return; + + index--; + + assert(index / BITMAP_SIZE < this->used_bitmap.size()); + ClrBit(this->used_bitmap[index / BITMAP_SIZE], index % BITMAP_SIZE); } /** @@ -1876,9 +1884,7 @@ UnitID GetFreeUnitNumber(VehicleType type) const Company *c = Company::Get(_current_company); if (c->group_all[type].num_vehicle >= max_veh) return UINT16_MAX; // Currently already at the limit, no room to make a new one. - FreeUnitIDGenerator gen(type, _current_company); - - return gen.NextID(); + return c->freeunits[type].NextID(); } diff --git a/src/vehicle_base.h b/src/vehicle_base.h index 560bd41f1c..073a356c79 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -755,7 +755,7 @@ public: * and that shall not be resetted for the new vehicle. * @param src The old vehicle */ - inline void CopyVehicleConfigAndStatistics(const Vehicle *src) + inline void CopyVehicleConfigAndStatistics(Vehicle *src) { this->CopyConsistPropertiesFrom(src); @@ -766,6 +766,8 @@ public: this->profit_this_year = src->profit_this_year; this->profit_last_year = src->profit_last_year; + + src->unitnumber = 0; } @@ -1270,19 +1272,6 @@ struct SpecializedVehicle : public Vehicle { static Pool::IterateWrapper Iterate(size_t from = 0) { return Pool::IterateWrapper(from); } }; -/** Generates sequence of free UnitID numbers */ -struct FreeUnitIDGenerator { - bool *cache; ///< array of occupied unit id numbers - UnitID maxid; ///< maximum ID at the moment of constructor call - UnitID curid; ///< last ID returned; 0 if none - - FreeUnitIDGenerator(VehicleType type, CompanyID owner); - UnitID NextID(); - - /** Releases allocated memory */ - ~FreeUnitIDGenerator() { free(this->cache); } -}; - /** Sentinel for an invalid coordinate. */ static const int32_t INVALID_COORD = 0x7fffffff; diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 4817627e8c..97ecf8432f 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -194,6 +194,8 @@ std::tuple CmdBuildVehicle(D GroupStatistics::CountVehicle(v, 1); if (!(subflags & DC_AUTOREPLACE)) OrderBackup::Restore(v, client_id); } + + Company::Get(v->owner)->freeunits[v->type].UseID(v->unitnumber); } From 0463d4c198501eb5d531bbef1b2fd1c9e15587fd Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 24 Dec 2023 22:51:55 +0000 Subject: [PATCH 010/695] Codechange: Remove direct access to _colour_gradient. Access is now through GetColourGradient, which ensures parameters are in range. --- src/bootstrap_gui.cpp | 4 ++-- src/build_vehicle_gui.cpp | 2 +- src/company_cmd.cpp | 6 +++--- src/console_gui.cpp | 4 ++-- src/depot_gui.cpp | 2 +- src/gfx_type.h | 2 ++ src/graph_gui.cpp | 6 +++--- src/group_gui.cpp | 4 ++-- src/linkgraph/linkgraph_gui.cpp | 8 +++---- src/main_gui.cpp | 9 ++++---- src/misc_gui.cpp | 2 +- src/network/network_gui.cpp | 2 +- src/order_gui.cpp | 2 +- src/palette.cpp | 37 ++++++++++++++++++++++++++++++-- src/palette_func.h | 7 ++---- src/settings_gui.cpp | 6 +++--- src/smallmap_gui.cpp | 2 +- src/train_gui.cpp | 4 ++-- src/vehicle_gui.cpp | 2 +- src/viewport.cpp | 2 +- src/widget.cpp | 38 ++++++++++++++++----------------- src/widgets/dropdown_type.h | 6 +++--- src/widgets/slider.cpp | 6 +++--- 23 files changed, 98 insertions(+), 65 deletions(-) diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index 4a1b72d9c5..606d6cbad3 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -385,9 +385,9 @@ bool HandleBootstrap() * This way the mauve and gray colours work and we can show the user interface. */ GfxInitPalettes(); static const int offsets[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0, 0, 0, 0x04, 0x08 }; - for (uint i = 0; i != 16; i++) { + for (Colours i = COLOUR_BEGIN; i != COLOUR_END; i++) { for (int j = 0; j < 8; j++) { - _colour_gradient[i][j] = offsets[i] + j; + SetColourGradient(i, j, offsets[i] + j); } } diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index fb127c7920..8c575fe067 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1017,7 +1017,7 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li int sprite_right = GetVehicleImageCellSize(type, EIT_PURCHASE).extend_right; int sprite_width = sprite_left + sprite_right; int circle_width = std::max(GetScaledSpriteSize(SPR_CIRCLE_FOLDED).width, GetScaledSpriteSize(SPR_CIRCLE_UNFOLDED).width); - int linecolour = _colour_gradient[COLOUR_ORANGE][4]; + int linecolour = GetColourGradient(COLOUR_ORANGE, 4); Rect ir = r.WithHeight(step_size).Shrink(WidgetDimensions::scaled.matrix); int sprite_y_offset = ScaleSpriteTrad(sprite_y_offsets[type]) + ir.Height() / 2; diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index e73ebedec4..d1490f98fd 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -146,8 +146,8 @@ void SetLocalCompany(CompanyID new_company) */ TextColour GetDrawStringCompanyColour(CompanyID company) { - if (!Company::IsValidID(company)) return (TextColour)_colour_gradient[COLOUR_WHITE][4] | TC_IS_PALETTE_COLOUR; - return (TextColour)_colour_gradient[_company_colours[company]][4] | TC_IS_PALETTE_COLOUR; + if (!Company::IsValidID(company)) return (TextColour)GetColourGradient(COLOUR_WHITE, 4) | TC_IS_PALETTE_COLOUR; + return (TextColour)GetColourGradient(_company_colours[company], 4) | TC_IS_PALETTE_COLOUR; } /** @@ -477,7 +477,7 @@ static Colours GenerateCompanyColour() Colours colours[COLOUR_END]; /* Initialize array */ - for (uint i = 0; i < COLOUR_END; i++) colours[i] = (Colours)i; + for (uint i = 0; i < COLOUR_END; i++) colours[i] = static_cast(i); /* And randomize it */ for (uint i = 0; i < 100; i++) { diff --git a/src/console_gui.cpp b/src/console_gui.cpp index 0e3ac41a16..afbdeab972 100644 --- a/src/console_gui.cpp +++ b/src/console_gui.cpp @@ -493,8 +493,8 @@ bool IsValidConsoleColour(TextColour c) /* A text colour from the palette is used; must be the company * colour gradient, so it must be one of those. */ c &= ~TC_IS_PALETTE_COLOUR; - for (uint i = COLOUR_BEGIN; i < COLOUR_END; i++) { - if (_colour_gradient[i][4] == c) return true; + for (Colours i = COLOUR_BEGIN; i < COLOUR_END; i++) { + if (GetColourGradient(i, 4) == c) return true; } return false; diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index 9b7831c156..ff125856e6 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -384,7 +384,7 @@ struct DepotWindow : Window { */ if (this->type == VEH_TRAIN && _consistent_train_width != 0) { int w = ScaleSpriteTrad(2 * _consistent_train_width); - int col = _colour_gradient[wid->colour][4]; + int col = GetColourGradient(wid->colour, 4); Rect image = ir.Indent(this->header_width, rtl).Indent(this->count_width, !rtl); int first_line = w + (-this->hscroll->GetPosition()) % w; if (rtl) { diff --git a/src/gfx_type.h b/src/gfx_type.h index fbedceb87c..fc4eabbd77 100644 --- a/src/gfx_type.h +++ b/src/gfx_type.h @@ -11,6 +11,7 @@ #define GFX_TYPE_H #include "core/endian_type.hpp" +#include "core/enum_type.hpp" #include "core/geometry_type.hpp" #include "zoom_type.h" @@ -247,6 +248,7 @@ enum Colours : byte { COLOUR_END, INVALID_COLOUR = 0xFF, }; +DECLARE_POSTFIX_INCREMENT(Colours) DECLARE_ENUM_AS_ADDABLE(Colours) /** Colour of the strings, see _string_colourmap in table/string_colours.h or docs/ottd-colourtext-palette.png */ diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index da5ba21c53..cdf154e57b 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -627,7 +627,7 @@ public: for (CompanyID k = COMPANY_FIRST; k < MAX_COMPANIES; k++) { const Company *c = Company::GetIfValid(k); if (c != nullptr) { - this->colours[numd] = _colour_gradient[c->colour][6]; + this->colours[numd] = GetColourGradient(c->colour, 6); for (int j = this->num_on_x_axis, i = 0; --j >= 0;) { if (j >= c->num_valid_stat_ent) { this->cost[numd][i] = INVALID_DATAPOINT; @@ -1294,8 +1294,8 @@ struct PerformanceRatingDetailWindow : Window { ScoreID score_type = (ScoreID)(widget - WID_PRD_SCORE_FIRST); /* The colours used to show how the progress is going */ - int colour_done = _colour_gradient[COLOUR_GREEN][4]; - int colour_notdone = _colour_gradient[COLOUR_RED][4]; + int colour_done = GetColourGradient(COLOUR_GREEN, 4); + int colour_notdone = GetColourGradient(COLOUR_RED, 4); /* Draw all the score parts */ int64_t val = _score_part[company][score_type]; diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 50e6990fe8..16b1c58a47 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -262,7 +262,7 @@ private: { /* Highlight the group if a vehicle is dragged over it */ if (g_id == this->group_over) { - GfxFillRect(left + WidgetDimensions::scaled.bevel.left, y + WidgetDimensions::scaled.framerect.top, right - WidgetDimensions::scaled.bevel.right, y + this->tiny_step_height - 1 - WidgetDimensions::scaled.framerect.bottom, _colour_gradient[COLOUR_GREY][7]); + GfxFillRect(left + WidgetDimensions::scaled.bevel.left, y + WidgetDimensions::scaled.framerect.top, right - WidgetDimensions::scaled.bevel.right, y + this->tiny_step_height - 1 - WidgetDimensions::scaled.framerect.bottom, GetColourGradient(COLOUR_GREY, 7)); } if (g_id == NEW_GROUP) return; @@ -630,7 +630,7 @@ public: for (size_t i = this->vscroll->GetPosition(); i < max; ++i) { const Vehicle *v = this->vehgroups[i].GetSingleVehicle(); if (v->group_id != this->vli.index) { - GfxFillRect(mr.Shrink(WidgetDimensions::scaled.bevel), _colour_gradient[COLOUR_GREY][3], FILLRECT_CHECKER); + GfxFillRect(mr.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(COLOUR_GREY, 3), FILLRECT_CHECKER); } mr = mr.Translate(0, this->resize.step_height); } diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index 0bd7f2d947..02bb623e60 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -312,7 +312,7 @@ void LinkGraphOverlay::DrawContent(Point pta, Point ptb, const LinkProperties &c GfxDrawLine(pta.x, pta.y + offset_y, ptb.x, ptb.y + offset_y, colour, width, dash); } - GfxDrawLine(pta.x, pta.y, ptb.x, ptb.y, _colour_gradient[COLOUR_GREY][1], width); + GfxDrawLine(pta.x, pta.y, ptb.x, ptb.y, GetColourGradient(COLOUR_GREY, 1), width); } /** @@ -331,9 +331,9 @@ void LinkGraphOverlay::DrawStationDots(const DrawPixelInfo *dpi) const uint r = width * 2 + width * 2 * std::min(200U, i.second) / 200; LinkGraphOverlay::DrawVertex(pt.x, pt.y, r, - _colour_gradient[st->owner != OWNER_NONE ? - Company::Get(st->owner)->colour : COLOUR_GREY][5], - _colour_gradient[COLOUR_GREY][1]); + GetColourGradient(st->owner != OWNER_NONE ? + Company::Get(st->owner)->colour : COLOUR_GREY, 5), + GetColourGradient(COLOUR_GREY, 1)); } } diff --git a/src/main_gui.cpp b/src/main_gui.cpp index aaac9a11eb..c2663cbcc3 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -540,11 +540,12 @@ void ShowSelectGameWindow(); */ void SetupColoursAndInitialWindow() { - for (uint i = 0; i != 16; i++) { + for (Colours i = COLOUR_BEGIN; i != COLOUR_END; i++) { const byte *b = GetNonSprite(GENERAL_SPRITE_COLOUR(i), SpriteType::Recolour); - - assert(b); - memcpy(_colour_gradient[i], b + 0xC6, sizeof(_colour_gradient[i])); + assert(b != nullptr); + for (uint j = 0; j < 8; j++) { + SetColourGradient(i, j, b[0xC6 + j]); + } } new MainWindow(&_main_window_desc); diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index adea0e237f..1b56fb0082 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -794,7 +794,7 @@ void QueryString::DrawEditBox(const Window *w, WidgetID wid) const DrawFrameRect(cr, wi->colour, wi->IsLowered() ? FR_LOWERED : FR_NONE); DrawSpriteIgnorePadding(rtl ? SPR_IMG_DELETE_RIGHT : SPR_IMG_DELETE_LEFT, PAL_NONE, cr, SA_CENTER); - if (this->text.bytes == 1) GfxFillRect(cr.Shrink(WidgetDimensions::scaled.bevel), _colour_gradient[wi->colour & 0xF][2], FILLRECT_CHECKER); + if (this->text.bytes == 1) GfxFillRect(cr.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(wi->colour, 2), FILLRECT_CHECKER); DrawFrameRect(fr, wi->colour, FR_LOWERED | FR_DARKENED); GfxFillRect(fr.Shrink(WidgetDimensions::scaled.bevel), PC_BLACK); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 2590475ca7..d9143162c9 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1946,7 +1946,7 @@ public: DrawFrameRect(r, button->colour, FR_NONE); DrawSprite(button->sprite, PAL_NONE, r.left + WidgetDimensions::scaled.framerect.left, r.top + WidgetDimensions::scaled.framerect.top); if (button->disabled) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), _colour_gradient[button->colour & 0xF][2], FILLRECT_CHECKER); + GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(button->colour, 2), FILLRECT_CHECKER); } int width = button->width + WidgetDimensions::scaled.hsep_normal; diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 055f89e0fa..4efc0fa419 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -1124,7 +1124,7 @@ public: int top = (this->order_over < this->selected_order ? y : y + line_height) - WidgetDimensions::scaled.framerect.top; int bottom = std::min(top + 2, ir.bottom); top = std::max(top - 3, ir.top); - GfxFillRect(ir.left, top, ir.right, bottom, _colour_gradient[COLOUR_GREY][7]); + GfxFillRect(ir.left, top, ir.right, bottom, GetColourGradient(COLOUR_GREY, 7)); break; } y += line_height; diff --git a/src/palette.cpp b/src/palette.cpp index c2311ed08a..087bb28a6b 100644 --- a/src/palette.cpp +++ b/src/palette.cpp @@ -23,8 +23,6 @@ Palette _cur_palette; -byte _colour_gradient[COLOUR_END][8]; - static std::recursive_mutex _palette_mutex; ///< To coordinate access to _cur_palette. /** @@ -295,3 +293,38 @@ TextColour GetContrastColour(uint8_t background, uint8_t threshold) /* Compare with threshold brightness which defaults to 128 (50%) */ return sq1000_brightness < ((uint) threshold) * ((uint) threshold) * 1000 ? TC_WHITE : TC_BLACK; } + +/** + * Lookup table of colour shades for all 16 colour gradients. + * 8 colours per gradient from darkest (0) to lightest (7) + */ +struct ColourGradients +{ + using ColourGradient = std::array; + + static inline std::array gradient{}; +}; + +/** + * Get colour gradient palette index. + * @param colour Colour. + * @param shade Shade level from 1 to 7. + * @returns palette index of colour. + */ +byte GetColourGradient(Colours colour, uint8_t shade) +{ + return ColourGradients::gradient[colour % COLOUR_END][shade % 8]; +} + +/** + * Set colour gradient palette index. + * @param colour Colour. + * @param shade Shade level from 1 to 7. + * @param palette_index Palette index to set. + */ +void SetColourGradient(Colours colour, uint8_t shade, byte palette_index) +{ + assert(colour < COLOUR_END); + assert(shade < 8); + ColourGradients::gradient[colour % COLOUR_END][shade % 8] = palette_index; +} diff --git a/src/palette_func.h b/src/palette_func.h index 894099d6fe..3ada906f9e 100644 --- a/src/palette_func.h +++ b/src/palette_func.h @@ -39,11 +39,8 @@ inline bool IsValidColours(Colours colours) TextColour GetContrastColour(uint8_t background, uint8_t threshold = 128); -/** - * All 16 colour gradients - * 8 colours per gradient from darkest (0) to lightest (7) - */ -extern byte _colour_gradient[COLOUR_END][8]; +byte GetColourGradient(Colours colour, uint8_t shade); +void SetColourGradient(Colours colour, uint8_t shade, byte palette_colour); /** * Return the colour for a particular greyscale level. diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 4c76cf9c04..21603b2be0 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1414,7 +1414,7 @@ uint BaseSettingEntry::Draw(GameSettings *settings_ptr, int left, int right, int int x = rtl ? right : left; if (cur_row >= first_row) { - int colour = _colour_gradient[COLOUR_ORANGE][4]; + int colour = GetColourGradient(COLOUR_ORANGE, 4); y += (cur_row - first_row) * SETTING_HEIGHT; // Compute correct y start position /* Draw vertical for parent nesting levels */ @@ -2909,7 +2909,7 @@ void ShowGameSettings() */ void DrawArrowButtons(int x, int y, Colours button_colour, byte state, bool clickable_left, bool clickable_right) { - int colour = _colour_gradient[button_colour][2]; + int colour = GetColourGradient(button_colour, 2); Dimension dim = NWidgetScrollbar::GetHorizontalDimension(); Rect lr = {x, y, x + (int)dim.width - 1, y + (int)dim.height - 1}; @@ -2940,7 +2940,7 @@ void DrawArrowButtons(int x, int y, Colours button_colour, byte state, bool clic */ void DrawDropDownButton(int x, int y, Colours button_colour, bool state, bool clickable) { - int colour = _colour_gradient[button_colour][2]; + int colour = GetColourGradient(button_colour, 2); Rect r = {x, y, x + SETTING_BUTTON_WIDTH - 1, y + SETTING_BUTTON_HEIGHT - 1}; diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index b058290aaf..6ac9d18fdc 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -346,7 +346,7 @@ void BuildOwnerLegend() int i = NUM_NO_COMPANY_ENTRIES; for (const Company *c : Company::Iterate()) { - _legend_land_owners[i].colour = _colour_gradient[c->colour][5]; + _legend_land_owners[i].colour = GetColourGradient(c->colour, 5); _legend_land_owners[i].company = c->index; _legend_land_owners[i].show_on_map = true; _legend_land_owners[i].col_break = false; diff --git a/src/train_gui.cpp b/src/train_gui.cpp index 4eda2a351b..53e23367b9 100644 --- a/src/train_gui.cpp +++ b/src/train_gui.cpp @@ -76,7 +76,7 @@ static int HighlightDragPosition(int px, int max_width, int y, VehicleID selecti int top = y - height / 2; Rect r = {drag_hlight_left, top, drag_hlight_right, top + height - 1}; /* Sprite-scaling is used here as the area is from sprite size */ - GfxFillRect(r.Shrink(ScaleSpriteTrad(1)), _colour_gradient[COLOUR_GREY][7]); + GfxFillRect(r.Shrink(ScaleSpriteTrad(1)), GetColourGradient(COLOUR_GREY, 7)); } return drag_hlight_width; @@ -399,7 +399,7 @@ void DrawTrainDetails(const Train *v, const Rect &r, int vscroll_pos, uint16_t v if (vscroll_pos <= 0 && vscroll_pos > -vscroll_cap) { int py = r.top - line_height * vscroll_pos + text_y_offset; if (i > 0 || separate_sprite_row) { - if (vscroll_pos != 0) GfxFillRect(r.left, py - WidgetDimensions::scaled.matrix.top - 1, r.right, py - WidgetDimensions::scaled.matrix.top, _colour_gradient[COLOUR_GREY][5]); + if (vscroll_pos != 0) GfxFillRect(r.left, py - WidgetDimensions::scaled.matrix.top - 1, r.right, py - WidgetDimensions::scaled.matrix.top, GetColourGradient(COLOUR_GREY, 5)); } switch (det_tab) { case TDW_TAB_CARGO: diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index b7f117e9c1..b7c7b12715 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -624,7 +624,7 @@ static void DrawVehicleRefitWindow(const RefitOptions &refits, const RefitOption bool rtl = _current_text_dir == TD_RTL; uint iconwidth = std::max(GetSpriteSize(SPR_CIRCLE_FOLDED).width, GetSpriteSize(SPR_CIRCLE_UNFOLDED).width); uint iconheight = GetSpriteSize(SPR_CIRCLE_FOLDED).height; - int linecolour = _colour_gradient[COLOUR_ORANGE][4]; + int linecolour = GetColourGradient(COLOUR_ORANGE, 4); int iconleft = rtl ? ir.right - iconwidth : ir.left; int iconcenter = rtl ? ir.right - iconwidth / 2 : ir.left + iconwidth / 2; diff --git a/src/viewport.cpp b/src/viewport.cpp index 0c40926e81..e5b51f1c28 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1716,7 +1716,7 @@ static void ViewportDrawStrings(ZoomLevel zoom, const StringSpriteToDrawVector * /* Don't draw the rectangle. * Real colours need the TC_IS_PALETTE_COLOUR flag. * Otherwise colours from _string_colourmap are assumed. */ - colour = (TextColour)_colour_gradient[ss.colour][6] | TC_IS_PALETTE_COLOUR; + colour = (TextColour)GetColourGradient(ss.colour, 6) | TC_IS_PALETTE_COLOUR; } else { /* Draw the rectangle if 'transparent station signs' is off, * or if we are drawing a general text sign (STR_WHITE_SIGN). */ diff --git a/src/widget.cpp b/src/widget.cpp index 33942a6b8b..1749787739 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -275,17 +275,17 @@ WidgetID GetWidgetFromPos(const Window *w, int x, int y) * @param top Top edge of the frame * @param right Right edge of the frame * @param bottom Bottom edge of the frame - * @param colour Colour table to use. @see _colour_gradient + * @param colour Colour table to use. @see Colours * @param flags Flags controlling how to draw the frame. @see FrameFlags */ void DrawFrameRect(int left, int top, int right, int bottom, Colours colour, FrameFlags flags) { assert(colour < COLOUR_END); - uint dark = _colour_gradient[colour][3]; - uint medium_dark = _colour_gradient[colour][5]; - uint medium_light = _colour_gradient[colour][6]; - uint light = _colour_gradient[colour][7]; + uint dark = GetColourGradient(colour, 3); + uint medium_dark = GetColourGradient(colour, 5); + uint medium_light = GetColourGradient(colour, 6); + uint light = GetColourGradient(colour, 7); if (flags & FR_TRANSPARENT) { GfxFillRect(left, top, right, bottom, PALETTE_TO_TRANSPARENT, FILLRECT_RECOLOUR); @@ -423,7 +423,7 @@ static inline void DrawMatrix(const Rect &r, Colours colour, bool clicked, uint1 row_height = r.Height() / num_rows; } - int col = _colour_gradient[colour & 0xF][6]; + int col = GetColourGradient(colour, 6); int x = r.left; for (int ctr = num_columns; ctr > 1; ctr--) { @@ -437,7 +437,7 @@ static inline void DrawMatrix(const Rect &r, Colours colour, bool clicked, uint1 GfxFillRect(r.left + WidgetDimensions::scaled.bevel.left, x, r.right - WidgetDimensions::scaled.bevel.right, x + WidgetDimensions::scaled.bevel.top - 1, col); } - col = _colour_gradient[colour & 0xF][4]; + col = GetColourGradient(colour, 4); x = r.left - 1; for (int ctr = num_columns; ctr > 1; ctr--) { @@ -469,8 +469,8 @@ static inline void DrawVerticalScrollbar(const Rect &r, Colours colour, bool up_ DrawImageButtons(r.WithHeight(height, false), NWID_VSCROLLBAR, colour, up_clicked, SPR_ARROW_UP, SA_CENTER); DrawImageButtons(r.WithHeight(height, true), NWID_VSCROLLBAR, colour, down_clicked, SPR_ARROW_DOWN, SA_CENTER); - int c1 = _colour_gradient[colour & 0xF][3]; - int c2 = _colour_gradient[colour & 0xF][7]; + int c1 = GetColourGradient(colour, 3); + int c2 = GetColourGradient(colour, 7); /* draw "shaded" background */ GfxFillRect(r.left, r.top + height, r.right, r.bottom - height, c2); @@ -508,8 +508,8 @@ static inline void DrawHorizontalScrollbar(const Rect &r, Colours colour, bool l DrawImageButtons(r.WithWidth(width, false), NWID_HSCROLLBAR, colour, left_clicked, SPR_ARROW_LEFT, SA_CENTER); DrawImageButtons(r.WithWidth(width, true), NWID_HSCROLLBAR, colour, right_clicked, SPR_ARROW_RIGHT, SA_CENTER); - int c1 = _colour_gradient[colour & 0xF][3]; - int c2 = _colour_gradient[colour & 0xF][7]; + int c1 = GetColourGradient(colour, 3); + int c2 = GetColourGradient(colour, 7); /* draw "shaded" background */ GfxFillRect(r.left + width, r.top, r.right - width, r.bottom, c2); @@ -547,8 +547,8 @@ static inline void DrawFrame(const Rect &r, Colours colour, TextColour text_colo if (str != STR_NULL) x2 = DrawString(r.left + WidgetDimensions::scaled.frametext.left, r.right - WidgetDimensions::scaled.frametext.right, r.top, str, text_colour, align, false, fs); - int c1 = _colour_gradient[colour][3]; - int c2 = _colour_gradient[colour][7]; + int c1 = GetColourGradient(colour, 3); + int c2 = GetColourGradient(colour, 7); /* If the frame has text, adjust the top bar to fit half-way through */ Rect inner = r.Shrink(ScaleGUITrad(1)); @@ -645,7 +645,7 @@ static inline void DrawResizeBox(const Rect &r, Colours colour, bool at_left, bo if (bevel) { DrawFrameRect(r.left, r.top, r.right, r.bottom, colour, (clicked) ? FR_LOWERED : FR_NONE); } else if (clicked) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), _colour_gradient[colour][6]); + GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(colour, 6)); } DrawSpriteIgnorePadding(at_left ? SPR_WINDOW_RESIZE_LEFT : SPR_WINDOW_RESIZE_RIGHT, PAL_NONE, r.Shrink(ScaleGUITrad(2)), at_left ? (SA_LEFT | SA_BOTTOM | SA_FORCE) : (SA_RIGHT | SA_BOTTOM | SA_FORCE)); } @@ -685,7 +685,7 @@ void DrawCaption(const Rect &r, Colours colour, Owner owner, TextColour text_col DrawFrameRect(ir, colour, company_owned ? FR_LOWERED | FR_DARKENED | FR_BORDERONLY : FR_LOWERED | FR_DARKENED); if (company_owned) { - GfxFillRect(ir.Shrink(WidgetDimensions::scaled.bevel), _colour_gradient[_company_colours[owner]][4]); + GfxFillRect(ir.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(_company_colours[owner], 4)); } if (str != STR_NULL) { @@ -1906,7 +1906,7 @@ NWidgetCore *NWidgetMatrix::GetWidgetFromPos(int x, int y) /* virtual */ void NWidgetMatrix::Draw(const Window *w) { /* Fill the background. */ - GfxFillRect(this->GetCurrentRect(), _colour_gradient[this->colour & 0xF][5]); + GfxFillRect(this->GetCurrentRect(), GetColourGradient(this->colour, 5)); /* Set up a clipping area for the previews. */ bool rtl = _current_text_dir == TD_RTL; @@ -2171,7 +2171,7 @@ void NWidgetBackground::Draw(const Window *w) if (this->child != nullptr) this->child->Draw(w); if (this->IsDisabled()) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), _colour_gradient[this->colour & 0xF][2], FILLRECT_CHECKER); + GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(this->colour, 2), FILLRECT_CHECKER); } DrawOutline(w, this); @@ -2416,7 +2416,7 @@ void NWidgetScrollbar::Draw(const Window *w) } if (this->IsDisabled()) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), _colour_gradient[this->colour & 0xF][2], FILLRECT_CHECKER); + GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(this->colour, 2), FILLRECT_CHECKER); } DrawOutline(w, this); @@ -2867,7 +2867,7 @@ void NWidgetLeaf::Draw(const Window *w) if (this->index >= 0) w->DrawWidget(r, this->index); if (this->IsDisabled()) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), _colour_gradient[this->colour & 0xF][2], FILLRECT_CHECKER); + GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(this->colour, 2), FILLRECT_CHECKER); } DrawOutline(w, this); diff --git a/src/widgets/dropdown_type.h b/src/widgets/dropdown_type.h index 485ce44c8b..5191bc335d 100644 --- a/src/widgets/dropdown_type.h +++ b/src/widgets/dropdown_type.h @@ -37,7 +37,7 @@ public: virtual void Draw(const Rect &full, const Rect &, bool, Colours bg_colour) const { - if (this->masked) GfxFillRect(full, _colour_gradient[bg_colour][5], FILLRECT_CHECKER); + if (this->masked) GfxFillRect(full, GetColourGradient(bg_colour, 5), FILLRECT_CHECKER); } TextColour GetColour(bool sel) const @@ -63,8 +63,8 @@ public: void Draw(const Rect &full, const Rect &, bool, Colours bg_colour) const override { - uint8_t c1 = _colour_gradient[bg_colour][3]; - uint8_t c2 = _colour_gradient[bg_colour][7]; + uint8_t c1 = GetColourGradient(bg_colour, 3); + uint8_t c2 = GetColourGradient(bg_colour, 7); int mid = CenterBounds(full.top, full.bottom, 0); GfxFillRect(full.left, mid - WidgetDimensions::scaled.bevel.bottom, full.right, mid - 1, c1); diff --git a/src/widgets/slider.cpp b/src/widgets/slider.cpp index 43ddbb335a..7e299b19d5 100644 --- a/src/widgets/slider.cpp +++ b/src/widgets/slider.cpp @@ -41,9 +41,9 @@ void DrawSliderWidget(Rect r, int min_value, int max_value, int value, const std int wx1 = r.left + sw / 2; int wx2 = r.right - sw / 2; if (_current_text_dir == TD_RTL) std::swap(wx1, wx2); - const uint shadow = _colour_gradient[COLOUR_GREY][3]; - const uint fill = _colour_gradient[COLOUR_GREY][6]; - const uint light = _colour_gradient[COLOUR_GREY][7]; + const uint shadow = GetColourGradient(COLOUR_GREY, 3); + const uint fill = GetColourGradient(COLOUR_GREY, 6); + const uint light = GetColourGradient(COLOUR_GREY, 7); const std::vector wedge{ Point{wx1, r.bottom - ha}, Point{wx2, r.top + ha}, Point{wx2, r.bottom - ha} }; GfxFillPolygon(wedge, fill); GfxDrawLine(wedge[0].x, wedge[0].y, wedge[2].x, wedge[2].y, light, t); From ae3390fe48859fe5529478755a2a1d883d9ebbec Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 28 Dec 2023 10:02:49 +0000 Subject: [PATCH 011/695] Codechange: Add ColourShade enum. --- src/bootstrap_gui.cpp | 2 +- src/build_vehicle_gui.cpp | 2 +- src/company_cmd.cpp | 4 ++-- src/console_gui.cpp | 2 +- src/depot_gui.cpp | 2 +- src/graph_gui.cpp | 6 +++--- src/group_gui.cpp | 4 ++-- src/linkgraph/linkgraph_gui.cpp | 6 +++--- src/main_gui.cpp | 2 +- src/misc_gui.cpp | 2 +- src/network/network_gui.cpp | 2 +- src/order_gui.cpp | 2 +- src/palette.cpp | 12 +++++------ src/palette_func.h | 18 +++++++++++++++-- src/settings_gui.cpp | 6 +++--- src/smallmap_gui.cpp | 2 +- src/train_gui.cpp | 4 ++-- src/vehicle_gui.cpp | 2 +- src/viewport.cpp | 2 +- src/widget.cpp | 36 ++++++++++++++++----------------- src/widgets/dropdown_type.h | 6 +++--- src/widgets/slider.cpp | 6 +++--- 22 files changed, 72 insertions(+), 58 deletions(-) diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index 606d6cbad3..657c4faa17 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -386,7 +386,7 @@ bool HandleBootstrap() GfxInitPalettes(); static const int offsets[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0, 0, 0, 0x04, 0x08 }; for (Colours i = COLOUR_BEGIN; i != COLOUR_END; i++) { - for (int j = 0; j < 8; j++) { + for (ColourShade j = SHADE_BEGIN; j < SHADE_END; j++) { SetColourGradient(i, j, offsets[i] + j); } } diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 8c575fe067..ec99aeaa78 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1017,7 +1017,7 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li int sprite_right = GetVehicleImageCellSize(type, EIT_PURCHASE).extend_right; int sprite_width = sprite_left + sprite_right; int circle_width = std::max(GetScaledSpriteSize(SPR_CIRCLE_FOLDED).width, GetScaledSpriteSize(SPR_CIRCLE_UNFOLDED).width); - int linecolour = GetColourGradient(COLOUR_ORANGE, 4); + int linecolour = GetColourGradient(COLOUR_ORANGE, SHADE_4); Rect ir = r.WithHeight(step_size).Shrink(WidgetDimensions::scaled.matrix); int sprite_y_offset = ScaleSpriteTrad(sprite_y_offsets[type]) + ir.Height() / 2; diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index d1490f98fd..89e9f0174f 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -146,8 +146,8 @@ void SetLocalCompany(CompanyID new_company) */ TextColour GetDrawStringCompanyColour(CompanyID company) { - if (!Company::IsValidID(company)) return (TextColour)GetColourGradient(COLOUR_WHITE, 4) | TC_IS_PALETTE_COLOUR; - return (TextColour)GetColourGradient(_company_colours[company], 4) | TC_IS_PALETTE_COLOUR; + if (!Company::IsValidID(company)) return (TextColour)GetColourGradient(COLOUR_WHITE, SHADE_4) | TC_IS_PALETTE_COLOUR; + return (TextColour)GetColourGradient(_company_colours[company], SHADE_4) | TC_IS_PALETTE_COLOUR; } /** diff --git a/src/console_gui.cpp b/src/console_gui.cpp index afbdeab972..4c8a3865c2 100644 --- a/src/console_gui.cpp +++ b/src/console_gui.cpp @@ -494,7 +494,7 @@ bool IsValidConsoleColour(TextColour c) * colour gradient, so it must be one of those. */ c &= ~TC_IS_PALETTE_COLOUR; for (Colours i = COLOUR_BEGIN; i < COLOUR_END; i++) { - if (GetColourGradient(i, 4) == c) return true; + if (GetColourGradient(i, SHADE_4) == c) return true; } return false; diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index ff125856e6..15fd96b3e1 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -384,7 +384,7 @@ struct DepotWindow : Window { */ if (this->type == VEH_TRAIN && _consistent_train_width != 0) { int w = ScaleSpriteTrad(2 * _consistent_train_width); - int col = GetColourGradient(wid->colour, 4); + int col = GetColourGradient(wid->colour, SHADE_4); Rect image = ir.Indent(this->header_width, rtl).Indent(this->count_width, !rtl); int first_line = w + (-this->hscroll->GetPosition()) % w; if (rtl) { diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index cdf154e57b..96e908c5a3 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -627,7 +627,7 @@ public: for (CompanyID k = COMPANY_FIRST; k < MAX_COMPANIES; k++) { const Company *c = Company::GetIfValid(k); if (c != nullptr) { - this->colours[numd] = GetColourGradient(c->colour, 6); + this->colours[numd] = GetColourGradient(c->colour, SHADE_6); for (int j = this->num_on_x_axis, i = 0; --j >= 0;) { if (j >= c->num_valid_stat_ent) { this->cost[numd][i] = INVALID_DATAPOINT; @@ -1294,8 +1294,8 @@ struct PerformanceRatingDetailWindow : Window { ScoreID score_type = (ScoreID)(widget - WID_PRD_SCORE_FIRST); /* The colours used to show how the progress is going */ - int colour_done = GetColourGradient(COLOUR_GREEN, 4); - int colour_notdone = GetColourGradient(COLOUR_RED, 4); + int colour_done = GetColourGradient(COLOUR_GREEN, SHADE_4); + int colour_notdone = GetColourGradient(COLOUR_RED, SHADE_4); /* Draw all the score parts */ int64_t val = _score_part[company][score_type]; diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 16b1c58a47..7f4bc625bc 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -262,7 +262,7 @@ private: { /* Highlight the group if a vehicle is dragged over it */ if (g_id == this->group_over) { - GfxFillRect(left + WidgetDimensions::scaled.bevel.left, y + WidgetDimensions::scaled.framerect.top, right - WidgetDimensions::scaled.bevel.right, y + this->tiny_step_height - 1 - WidgetDimensions::scaled.framerect.bottom, GetColourGradient(COLOUR_GREY, 7)); + GfxFillRect(left + WidgetDimensions::scaled.bevel.left, y + WidgetDimensions::scaled.framerect.top, right - WidgetDimensions::scaled.bevel.right, y + this->tiny_step_height - 1 - WidgetDimensions::scaled.framerect.bottom, GetColourGradient(COLOUR_GREY, SHADE_7)); } if (g_id == NEW_GROUP) return; @@ -630,7 +630,7 @@ public: for (size_t i = this->vscroll->GetPosition(); i < max; ++i) { const Vehicle *v = this->vehgroups[i].GetSingleVehicle(); if (v->group_id != this->vli.index) { - GfxFillRect(mr.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(COLOUR_GREY, 3), FILLRECT_CHECKER); + GfxFillRect(mr.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(COLOUR_GREY, SHADE_3), FILLRECT_CHECKER); } mr = mr.Translate(0, this->resize.step_height); } diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index 02bb623e60..60cdb235d9 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -312,7 +312,7 @@ void LinkGraphOverlay::DrawContent(Point pta, Point ptb, const LinkProperties &c GfxDrawLine(pta.x, pta.y + offset_y, ptb.x, ptb.y + offset_y, colour, width, dash); } - GfxDrawLine(pta.x, pta.y, ptb.x, ptb.y, GetColourGradient(COLOUR_GREY, 1), width); + GfxDrawLine(pta.x, pta.y, ptb.x, ptb.y, GetColourGradient(COLOUR_GREY, SHADE_1), width); } /** @@ -332,8 +332,8 @@ void LinkGraphOverlay::DrawStationDots(const DrawPixelInfo *dpi) const LinkGraphOverlay::DrawVertex(pt.x, pt.y, r, GetColourGradient(st->owner != OWNER_NONE ? - Company::Get(st->owner)->colour : COLOUR_GREY, 5), - GetColourGradient(COLOUR_GREY, 1)); + Company::Get(st->owner)->colour : COLOUR_GREY, SHADE_5), + GetColourGradient(COLOUR_GREY, SHADE_1)); } } diff --git a/src/main_gui.cpp b/src/main_gui.cpp index c2663cbcc3..686629f1fe 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -543,7 +543,7 @@ void SetupColoursAndInitialWindow() for (Colours i = COLOUR_BEGIN; i != COLOUR_END; i++) { const byte *b = GetNonSprite(GENERAL_SPRITE_COLOUR(i), SpriteType::Recolour); assert(b != nullptr); - for (uint j = 0; j < 8; j++) { + for (ColourShade j = SHADE_BEGIN; j < SHADE_END; j++) { SetColourGradient(i, j, b[0xC6 + j]); } } diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 1b56fb0082..bd3113859c 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -794,7 +794,7 @@ void QueryString::DrawEditBox(const Window *w, WidgetID wid) const DrawFrameRect(cr, wi->colour, wi->IsLowered() ? FR_LOWERED : FR_NONE); DrawSpriteIgnorePadding(rtl ? SPR_IMG_DELETE_RIGHT : SPR_IMG_DELETE_LEFT, PAL_NONE, cr, SA_CENTER); - if (this->text.bytes == 1) GfxFillRect(cr.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(wi->colour, 2), FILLRECT_CHECKER); + if (this->text.bytes == 1) GfxFillRect(cr.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(wi->colour, SHADE_2), FILLRECT_CHECKER); DrawFrameRect(fr, wi->colour, FR_LOWERED | FR_DARKENED); GfxFillRect(fr.Shrink(WidgetDimensions::scaled.bevel), PC_BLACK); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index d9143162c9..2fa675276d 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1946,7 +1946,7 @@ public: DrawFrameRect(r, button->colour, FR_NONE); DrawSprite(button->sprite, PAL_NONE, r.left + WidgetDimensions::scaled.framerect.left, r.top + WidgetDimensions::scaled.framerect.top); if (button->disabled) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(button->colour, 2), FILLRECT_CHECKER); + GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(button->colour, SHADE_2), FILLRECT_CHECKER); } int width = button->width + WidgetDimensions::scaled.hsep_normal; diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 4efc0fa419..7845b22c3d 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -1124,7 +1124,7 @@ public: int top = (this->order_over < this->selected_order ? y : y + line_height) - WidgetDimensions::scaled.framerect.top; int bottom = std::min(top + 2, ir.bottom); top = std::max(top - 3, ir.top); - GfxFillRect(ir.left, top, ir.right, bottom, GetColourGradient(COLOUR_GREY, 7)); + GfxFillRect(ir.left, top, ir.right, bottom, GetColourGradient(COLOUR_GREY, SHADE_7)); break; } y += line_height; diff --git a/src/palette.cpp b/src/palette.cpp index 087bb28a6b..8892e5715a 100644 --- a/src/palette.cpp +++ b/src/palette.cpp @@ -300,7 +300,7 @@ TextColour GetContrastColour(uint8_t background, uint8_t threshold) */ struct ColourGradients { - using ColourGradient = std::array; + using ColourGradient = std::array; static inline std::array gradient{}; }; @@ -311,9 +311,9 @@ struct ColourGradients * @param shade Shade level from 1 to 7. * @returns palette index of colour. */ -byte GetColourGradient(Colours colour, uint8_t shade) +byte GetColourGradient(Colours colour, ColourShade shade) { - return ColourGradients::gradient[colour % COLOUR_END][shade % 8]; + return ColourGradients::gradient[colour % COLOUR_END][shade % SHADE_END]; } /** @@ -322,9 +322,9 @@ byte GetColourGradient(Colours colour, uint8_t shade) * @param shade Shade level from 1 to 7. * @param palette_index Palette index to set. */ -void SetColourGradient(Colours colour, uint8_t shade, byte palette_index) +void SetColourGradient(Colours colour, ColourShade shade, byte palette_index) { assert(colour < COLOUR_END); - assert(shade < 8); - ColourGradients::gradient[colour % COLOUR_END][shade % 8] = palette_index; + assert(shade < SHADE_END); + ColourGradients::gradient[colour % COLOUR_END][shade % SHADE_END] = palette_index; } diff --git a/src/palette_func.h b/src/palette_func.h index 3ada906f9e..f6374bb685 100644 --- a/src/palette_func.h +++ b/src/palette_func.h @@ -10,6 +10,7 @@ #ifndef PALETTE_FUNC_H #define PALETTE_FUNC_H +#include "core/enum_type.hpp" #include "gfx_type.h" #include "strings_type.h" #include "string_type.h" @@ -39,8 +40,21 @@ inline bool IsValidColours(Colours colours) TextColour GetContrastColour(uint8_t background, uint8_t threshold = 128); -byte GetColourGradient(Colours colour, uint8_t shade); -void SetColourGradient(Colours colour, uint8_t shade, byte palette_colour); +enum ColourShade : uint8_t { + SHADE_BEGIN = 0, + SHADE_1, + SHADE_2, + SHADE_3, + SHADE_4, + SHADE_5, + SHADE_6, + SHADE_7, + SHADE_END, +}; +DECLARE_POSTFIX_INCREMENT(ColourShade) + +byte GetColourGradient(Colours colour, ColourShade shade); +void SetColourGradient(Colours colour, ColourShade shade, byte palette_colour); /** * Return the colour for a particular greyscale level. diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 21603b2be0..e702a7d7b9 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1414,7 +1414,7 @@ uint BaseSettingEntry::Draw(GameSettings *settings_ptr, int left, int right, int int x = rtl ? right : left; if (cur_row >= first_row) { - int colour = GetColourGradient(COLOUR_ORANGE, 4); + int colour = GetColourGradient(COLOUR_ORANGE, SHADE_4); y += (cur_row - first_row) * SETTING_HEIGHT; // Compute correct y start position /* Draw vertical for parent nesting levels */ @@ -2909,7 +2909,7 @@ void ShowGameSettings() */ void DrawArrowButtons(int x, int y, Colours button_colour, byte state, bool clickable_left, bool clickable_right) { - int colour = GetColourGradient(button_colour, 2); + int colour = GetColourGradient(button_colour, SHADE_2); Dimension dim = NWidgetScrollbar::GetHorizontalDimension(); Rect lr = {x, y, x + (int)dim.width - 1, y + (int)dim.height - 1}; @@ -2940,7 +2940,7 @@ void DrawArrowButtons(int x, int y, Colours button_colour, byte state, bool clic */ void DrawDropDownButton(int x, int y, Colours button_colour, bool state, bool clickable) { - int colour = GetColourGradient(button_colour, 2); + int colour = GetColourGradient(button_colour, SHADE_2); Rect r = {x, y, x + SETTING_BUTTON_WIDTH - 1, y + SETTING_BUTTON_HEIGHT - 1}; diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 6ac9d18fdc..349a1629e2 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -346,7 +346,7 @@ void BuildOwnerLegend() int i = NUM_NO_COMPANY_ENTRIES; for (const Company *c : Company::Iterate()) { - _legend_land_owners[i].colour = GetColourGradient(c->colour, 5); + _legend_land_owners[i].colour = GetColourGradient(c->colour, SHADE_5); _legend_land_owners[i].company = c->index; _legend_land_owners[i].show_on_map = true; _legend_land_owners[i].col_break = false; diff --git a/src/train_gui.cpp b/src/train_gui.cpp index 53e23367b9..901d48f5e3 100644 --- a/src/train_gui.cpp +++ b/src/train_gui.cpp @@ -76,7 +76,7 @@ static int HighlightDragPosition(int px, int max_width, int y, VehicleID selecti int top = y - height / 2; Rect r = {drag_hlight_left, top, drag_hlight_right, top + height - 1}; /* Sprite-scaling is used here as the area is from sprite size */ - GfxFillRect(r.Shrink(ScaleSpriteTrad(1)), GetColourGradient(COLOUR_GREY, 7)); + GfxFillRect(r.Shrink(ScaleSpriteTrad(1)), GetColourGradient(COLOUR_GREY, SHADE_7)); } return drag_hlight_width; @@ -399,7 +399,7 @@ void DrawTrainDetails(const Train *v, const Rect &r, int vscroll_pos, uint16_t v if (vscroll_pos <= 0 && vscroll_pos > -vscroll_cap) { int py = r.top - line_height * vscroll_pos + text_y_offset; if (i > 0 || separate_sprite_row) { - if (vscroll_pos != 0) GfxFillRect(r.left, py - WidgetDimensions::scaled.matrix.top - 1, r.right, py - WidgetDimensions::scaled.matrix.top, GetColourGradient(COLOUR_GREY, 5)); + if (vscroll_pos != 0) GfxFillRect(r.left, py - WidgetDimensions::scaled.matrix.top - 1, r.right, py - WidgetDimensions::scaled.matrix.top, GetColourGradient(COLOUR_GREY, SHADE_5)); } switch (det_tab) { case TDW_TAB_CARGO: diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index b7c7b12715..be43be784c 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -624,7 +624,7 @@ static void DrawVehicleRefitWindow(const RefitOptions &refits, const RefitOption bool rtl = _current_text_dir == TD_RTL; uint iconwidth = std::max(GetSpriteSize(SPR_CIRCLE_FOLDED).width, GetSpriteSize(SPR_CIRCLE_UNFOLDED).width); uint iconheight = GetSpriteSize(SPR_CIRCLE_FOLDED).height; - int linecolour = GetColourGradient(COLOUR_ORANGE, 4); + int linecolour = GetColourGradient(COLOUR_ORANGE, SHADE_4); int iconleft = rtl ? ir.right - iconwidth : ir.left; int iconcenter = rtl ? ir.right - iconwidth / 2 : ir.left + iconwidth / 2; diff --git a/src/viewport.cpp b/src/viewport.cpp index e5b51f1c28..9c861e0aa8 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1716,7 +1716,7 @@ static void ViewportDrawStrings(ZoomLevel zoom, const StringSpriteToDrawVector * /* Don't draw the rectangle. * Real colours need the TC_IS_PALETTE_COLOUR flag. * Otherwise colours from _string_colourmap are assumed. */ - colour = (TextColour)GetColourGradient(ss.colour, 6) | TC_IS_PALETTE_COLOUR; + colour = (TextColour)GetColourGradient(ss.colour, SHADE_6) | TC_IS_PALETTE_COLOUR; } else { /* Draw the rectangle if 'transparent station signs' is off, * or if we are drawing a general text sign (STR_WHITE_SIGN). */ diff --git a/src/widget.cpp b/src/widget.cpp index 1749787739..1348923839 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -282,10 +282,10 @@ void DrawFrameRect(int left, int top, int right, int bottom, Colours colour, Fra { assert(colour < COLOUR_END); - uint dark = GetColourGradient(colour, 3); - uint medium_dark = GetColourGradient(colour, 5); - uint medium_light = GetColourGradient(colour, 6); - uint light = GetColourGradient(colour, 7); + uint dark = GetColourGradient(colour, SHADE_3); + uint medium_dark = GetColourGradient(colour, SHADE_5); + uint medium_light = GetColourGradient(colour, SHADE_6); + uint light = GetColourGradient(colour, SHADE_7); if (flags & FR_TRANSPARENT) { GfxFillRect(left, top, right, bottom, PALETTE_TO_TRANSPARENT, FILLRECT_RECOLOUR); @@ -423,7 +423,7 @@ static inline void DrawMatrix(const Rect &r, Colours colour, bool clicked, uint1 row_height = r.Height() / num_rows; } - int col = GetColourGradient(colour, 6); + int col = GetColourGradient(colour, SHADE_6); int x = r.left; for (int ctr = num_columns; ctr > 1; ctr--) { @@ -437,7 +437,7 @@ static inline void DrawMatrix(const Rect &r, Colours colour, bool clicked, uint1 GfxFillRect(r.left + WidgetDimensions::scaled.bevel.left, x, r.right - WidgetDimensions::scaled.bevel.right, x + WidgetDimensions::scaled.bevel.top - 1, col); } - col = GetColourGradient(colour, 4); + col = GetColourGradient(colour, SHADE_4); x = r.left - 1; for (int ctr = num_columns; ctr > 1; ctr--) { @@ -469,8 +469,8 @@ static inline void DrawVerticalScrollbar(const Rect &r, Colours colour, bool up_ DrawImageButtons(r.WithHeight(height, false), NWID_VSCROLLBAR, colour, up_clicked, SPR_ARROW_UP, SA_CENTER); DrawImageButtons(r.WithHeight(height, true), NWID_VSCROLLBAR, colour, down_clicked, SPR_ARROW_DOWN, SA_CENTER); - int c1 = GetColourGradient(colour, 3); - int c2 = GetColourGradient(colour, 7); + int c1 = GetColourGradient(colour, SHADE_3); + int c2 = GetColourGradient(colour, SHADE_7); /* draw "shaded" background */ GfxFillRect(r.left, r.top + height, r.right, r.bottom - height, c2); @@ -508,8 +508,8 @@ static inline void DrawHorizontalScrollbar(const Rect &r, Colours colour, bool l DrawImageButtons(r.WithWidth(width, false), NWID_HSCROLLBAR, colour, left_clicked, SPR_ARROW_LEFT, SA_CENTER); DrawImageButtons(r.WithWidth(width, true), NWID_HSCROLLBAR, colour, right_clicked, SPR_ARROW_RIGHT, SA_CENTER); - int c1 = GetColourGradient(colour, 3); - int c2 = GetColourGradient(colour, 7); + int c1 = GetColourGradient(colour, SHADE_3); + int c2 = GetColourGradient(colour, SHADE_7); /* draw "shaded" background */ GfxFillRect(r.left + width, r.top, r.right - width, r.bottom, c2); @@ -547,8 +547,8 @@ static inline void DrawFrame(const Rect &r, Colours colour, TextColour text_colo if (str != STR_NULL) x2 = DrawString(r.left + WidgetDimensions::scaled.frametext.left, r.right - WidgetDimensions::scaled.frametext.right, r.top, str, text_colour, align, false, fs); - int c1 = GetColourGradient(colour, 3); - int c2 = GetColourGradient(colour, 7); + int c1 = GetColourGradient(colour, SHADE_3); + int c2 = GetColourGradient(colour, SHADE_7); /* If the frame has text, adjust the top bar to fit half-way through */ Rect inner = r.Shrink(ScaleGUITrad(1)); @@ -645,7 +645,7 @@ static inline void DrawResizeBox(const Rect &r, Colours colour, bool at_left, bo if (bevel) { DrawFrameRect(r.left, r.top, r.right, r.bottom, colour, (clicked) ? FR_LOWERED : FR_NONE); } else if (clicked) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(colour, 6)); + GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(colour, SHADE_6)); } DrawSpriteIgnorePadding(at_left ? SPR_WINDOW_RESIZE_LEFT : SPR_WINDOW_RESIZE_RIGHT, PAL_NONE, r.Shrink(ScaleGUITrad(2)), at_left ? (SA_LEFT | SA_BOTTOM | SA_FORCE) : (SA_RIGHT | SA_BOTTOM | SA_FORCE)); } @@ -685,7 +685,7 @@ void DrawCaption(const Rect &r, Colours colour, Owner owner, TextColour text_col DrawFrameRect(ir, colour, company_owned ? FR_LOWERED | FR_DARKENED | FR_BORDERONLY : FR_LOWERED | FR_DARKENED); if (company_owned) { - GfxFillRect(ir.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(_company_colours[owner], 4)); + GfxFillRect(ir.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(_company_colours[owner], SHADE_4)); } if (str != STR_NULL) { @@ -1906,7 +1906,7 @@ NWidgetCore *NWidgetMatrix::GetWidgetFromPos(int x, int y) /* virtual */ void NWidgetMatrix::Draw(const Window *w) { /* Fill the background. */ - GfxFillRect(this->GetCurrentRect(), GetColourGradient(this->colour, 5)); + GfxFillRect(this->GetCurrentRect(), GetColourGradient(this->colour, SHADE_5)); /* Set up a clipping area for the previews. */ bool rtl = _current_text_dir == TD_RTL; @@ -2171,7 +2171,7 @@ void NWidgetBackground::Draw(const Window *w) if (this->child != nullptr) this->child->Draw(w); if (this->IsDisabled()) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(this->colour, 2), FILLRECT_CHECKER); + GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(this->colour, SHADE_2), FILLRECT_CHECKER); } DrawOutline(w, this); @@ -2416,7 +2416,7 @@ void NWidgetScrollbar::Draw(const Window *w) } if (this->IsDisabled()) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(this->colour, 2), FILLRECT_CHECKER); + GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(this->colour, SHADE_2), FILLRECT_CHECKER); } DrawOutline(w, this); @@ -2867,7 +2867,7 @@ void NWidgetLeaf::Draw(const Window *w) if (this->index >= 0) w->DrawWidget(r, this->index); if (this->IsDisabled()) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(this->colour, 2), FILLRECT_CHECKER); + GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(this->colour, SHADE_2), FILLRECT_CHECKER); } DrawOutline(w, this); diff --git a/src/widgets/dropdown_type.h b/src/widgets/dropdown_type.h index 5191bc335d..850294dba2 100644 --- a/src/widgets/dropdown_type.h +++ b/src/widgets/dropdown_type.h @@ -37,7 +37,7 @@ public: virtual void Draw(const Rect &full, const Rect &, bool, Colours bg_colour) const { - if (this->masked) GfxFillRect(full, GetColourGradient(bg_colour, 5), FILLRECT_CHECKER); + if (this->masked) GfxFillRect(full, GetColourGradient(bg_colour, SHADE_5), FILLRECT_CHECKER); } TextColour GetColour(bool sel) const @@ -63,8 +63,8 @@ public: void Draw(const Rect &full, const Rect &, bool, Colours bg_colour) const override { - uint8_t c1 = GetColourGradient(bg_colour, 3); - uint8_t c2 = GetColourGradient(bg_colour, 7); + uint8_t c1 = GetColourGradient(bg_colour, SHADE_3); + uint8_t c2 = GetColourGradient(bg_colour, SHADE_7); int mid = CenterBounds(full.top, full.bottom, 0); GfxFillRect(full.left, mid - WidgetDimensions::scaled.bevel.bottom, full.right, mid - 1, c1); diff --git a/src/widgets/slider.cpp b/src/widgets/slider.cpp index 7e299b19d5..1194264dd0 100644 --- a/src/widgets/slider.cpp +++ b/src/widgets/slider.cpp @@ -41,9 +41,9 @@ void DrawSliderWidget(Rect r, int min_value, int max_value, int value, const std int wx1 = r.left + sw / 2; int wx2 = r.right - sw / 2; if (_current_text_dir == TD_RTL) std::swap(wx1, wx2); - const uint shadow = GetColourGradient(COLOUR_GREY, 3); - const uint fill = GetColourGradient(COLOUR_GREY, 6); - const uint light = GetColourGradient(COLOUR_GREY, 7); + const uint shadow = GetColourGradient(COLOUR_GREY, SHADE_3); + const uint fill = GetColourGradient(COLOUR_GREY, SHADE_6); + const uint light = GetColourGradient(COLOUR_GREY, SHADE_7); const std::vector wedge{ Point{wx1, r.bottom - ha}, Point{wx2, r.top + ha}, Point{wx2, r.bottom - ha} }; GfxFillPolygon(wedge, fill); GfxDrawLine(wedge[0].x, wedge[0].y, wedge[2].x, wedge[2].y, light, t); From 912d7bd80e818ad0240134ed9f6c0625117e42ac Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 28 Dec 2023 10:04:55 +0000 Subject: [PATCH 012/695] Codechange: Give ColourShade values names instead of numbers. --- src/build_vehicle_gui.cpp | 2 +- src/company_cmd.cpp | 4 ++-- src/console_gui.cpp | 2 +- src/depot_gui.cpp | 2 +- src/graph_gui.cpp | 6 +++--- src/group_gui.cpp | 4 ++-- src/linkgraph/linkgraph_gui.cpp | 6 +++--- src/misc_gui.cpp | 2 +- src/network/network_gui.cpp | 2 +- src/order_gui.cpp | 2 +- src/palette_func.h | 14 ++++++------- src/settings_gui.cpp | 6 +++--- src/smallmap_gui.cpp | 2 +- src/train_gui.cpp | 4 ++-- src/vehicle_gui.cpp | 2 +- src/viewport.cpp | 2 +- src/widget.cpp | 36 ++++++++++++++++----------------- src/widgets/dropdown_type.h | 6 +++--- src/widgets/slider.cpp | 6 +++--- 19 files changed, 55 insertions(+), 55 deletions(-) diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index ec99aeaa78..f4729fe920 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1017,7 +1017,7 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li int sprite_right = GetVehicleImageCellSize(type, EIT_PURCHASE).extend_right; int sprite_width = sprite_left + sprite_right; int circle_width = std::max(GetScaledSpriteSize(SPR_CIRCLE_FOLDED).width, GetScaledSpriteSize(SPR_CIRCLE_UNFOLDED).width); - int linecolour = GetColourGradient(COLOUR_ORANGE, SHADE_4); + int linecolour = GetColourGradient(COLOUR_ORANGE, SHADE_NORMAL); Rect ir = r.WithHeight(step_size).Shrink(WidgetDimensions::scaled.matrix); int sprite_y_offset = ScaleSpriteTrad(sprite_y_offsets[type]) + ir.Height() / 2; diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 89e9f0174f..d6844c58e9 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -146,8 +146,8 @@ void SetLocalCompany(CompanyID new_company) */ TextColour GetDrawStringCompanyColour(CompanyID company) { - if (!Company::IsValidID(company)) return (TextColour)GetColourGradient(COLOUR_WHITE, SHADE_4) | TC_IS_PALETTE_COLOUR; - return (TextColour)GetColourGradient(_company_colours[company], SHADE_4) | TC_IS_PALETTE_COLOUR; + if (!Company::IsValidID(company)) return (TextColour)GetColourGradient(COLOUR_WHITE, SHADE_NORMAL) | TC_IS_PALETTE_COLOUR; + return (TextColour)GetColourGradient(_company_colours[company], SHADE_NORMAL) | TC_IS_PALETTE_COLOUR; } /** diff --git a/src/console_gui.cpp b/src/console_gui.cpp index 4c8a3865c2..4d4d642976 100644 --- a/src/console_gui.cpp +++ b/src/console_gui.cpp @@ -494,7 +494,7 @@ bool IsValidConsoleColour(TextColour c) * colour gradient, so it must be one of those. */ c &= ~TC_IS_PALETTE_COLOUR; for (Colours i = COLOUR_BEGIN; i < COLOUR_END; i++) { - if (GetColourGradient(i, SHADE_4) == c) return true; + if (GetColourGradient(i, SHADE_NORMAL) == c) return true; } return false; diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index 15fd96b3e1..c96ae80748 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -384,7 +384,7 @@ struct DepotWindow : Window { */ if (this->type == VEH_TRAIN && _consistent_train_width != 0) { int w = ScaleSpriteTrad(2 * _consistent_train_width); - int col = GetColourGradient(wid->colour, SHADE_4); + int col = GetColourGradient(wid->colour, SHADE_NORMAL); Rect image = ir.Indent(this->header_width, rtl).Indent(this->count_width, !rtl); int first_line = w + (-this->hscroll->GetPosition()) % w; if (rtl) { diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 96e908c5a3..6869041b8d 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -627,7 +627,7 @@ public: for (CompanyID k = COMPANY_FIRST; k < MAX_COMPANIES; k++) { const Company *c = Company::GetIfValid(k); if (c != nullptr) { - this->colours[numd] = GetColourGradient(c->colour, SHADE_6); + this->colours[numd] = GetColourGradient(c->colour, SHADE_LIGHTER); for (int j = this->num_on_x_axis, i = 0; --j >= 0;) { if (j >= c->num_valid_stat_ent) { this->cost[numd][i] = INVALID_DATAPOINT; @@ -1294,8 +1294,8 @@ struct PerformanceRatingDetailWindow : Window { ScoreID score_type = (ScoreID)(widget - WID_PRD_SCORE_FIRST); /* The colours used to show how the progress is going */ - int colour_done = GetColourGradient(COLOUR_GREEN, SHADE_4); - int colour_notdone = GetColourGradient(COLOUR_RED, SHADE_4); + int colour_done = GetColourGradient(COLOUR_GREEN, SHADE_NORMAL); + int colour_notdone = GetColourGradient(COLOUR_RED, SHADE_NORMAL); /* Draw all the score parts */ int64_t val = _score_part[company][score_type]; diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 7f4bc625bc..3a6bdd4f70 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -262,7 +262,7 @@ private: { /* Highlight the group if a vehicle is dragged over it */ if (g_id == this->group_over) { - GfxFillRect(left + WidgetDimensions::scaled.bevel.left, y + WidgetDimensions::scaled.framerect.top, right - WidgetDimensions::scaled.bevel.right, y + this->tiny_step_height - 1 - WidgetDimensions::scaled.framerect.bottom, GetColourGradient(COLOUR_GREY, SHADE_7)); + GfxFillRect(left + WidgetDimensions::scaled.bevel.left, y + WidgetDimensions::scaled.framerect.top, right - WidgetDimensions::scaled.bevel.right, y + this->tiny_step_height - 1 - WidgetDimensions::scaled.framerect.bottom, GetColourGradient(COLOUR_GREY, SHADE_LIGHTEST)); } if (g_id == NEW_GROUP) return; @@ -630,7 +630,7 @@ public: for (size_t i = this->vscroll->GetPosition(); i < max; ++i) { const Vehicle *v = this->vehgroups[i].GetSingleVehicle(); if (v->group_id != this->vli.index) { - GfxFillRect(mr.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(COLOUR_GREY, SHADE_3), FILLRECT_CHECKER); + GfxFillRect(mr.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(COLOUR_GREY, SHADE_DARK), FILLRECT_CHECKER); } mr = mr.Translate(0, this->resize.step_height); } diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index 60cdb235d9..24cfb92098 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -312,7 +312,7 @@ void LinkGraphOverlay::DrawContent(Point pta, Point ptb, const LinkProperties &c GfxDrawLine(pta.x, pta.y + offset_y, ptb.x, ptb.y + offset_y, colour, width, dash); } - GfxDrawLine(pta.x, pta.y, ptb.x, ptb.y, GetColourGradient(COLOUR_GREY, SHADE_1), width); + GfxDrawLine(pta.x, pta.y, ptb.x, ptb.y, GetColourGradient(COLOUR_GREY, SHADE_DARKEST), width); } /** @@ -332,8 +332,8 @@ void LinkGraphOverlay::DrawStationDots(const DrawPixelInfo *dpi) const LinkGraphOverlay::DrawVertex(pt.x, pt.y, r, GetColourGradient(st->owner != OWNER_NONE ? - Company::Get(st->owner)->colour : COLOUR_GREY, SHADE_5), - GetColourGradient(COLOUR_GREY, SHADE_1)); + Company::Get(st->owner)->colour : COLOUR_GREY, SHADE_LIGHT), + GetColourGradient(COLOUR_GREY, SHADE_DARKEST)); } } diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index bd3113859c..3d45881c47 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -794,7 +794,7 @@ void QueryString::DrawEditBox(const Window *w, WidgetID wid) const DrawFrameRect(cr, wi->colour, wi->IsLowered() ? FR_LOWERED : FR_NONE); DrawSpriteIgnorePadding(rtl ? SPR_IMG_DELETE_RIGHT : SPR_IMG_DELETE_LEFT, PAL_NONE, cr, SA_CENTER); - if (this->text.bytes == 1) GfxFillRect(cr.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(wi->colour, SHADE_2), FILLRECT_CHECKER); + if (this->text.bytes == 1) GfxFillRect(cr.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(wi->colour, SHADE_DARKER), FILLRECT_CHECKER); DrawFrameRect(fr, wi->colour, FR_LOWERED | FR_DARKENED); GfxFillRect(fr.Shrink(WidgetDimensions::scaled.bevel), PC_BLACK); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 2fa675276d..1b7a6619ab 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1946,7 +1946,7 @@ public: DrawFrameRect(r, button->colour, FR_NONE); DrawSprite(button->sprite, PAL_NONE, r.left + WidgetDimensions::scaled.framerect.left, r.top + WidgetDimensions::scaled.framerect.top); if (button->disabled) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(button->colour, SHADE_2), FILLRECT_CHECKER); + GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(button->colour, SHADE_DARKER), FILLRECT_CHECKER); } int width = button->width + WidgetDimensions::scaled.hsep_normal; diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 7845b22c3d..8c8e16dfa9 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -1124,7 +1124,7 @@ public: int top = (this->order_over < this->selected_order ? y : y + line_height) - WidgetDimensions::scaled.framerect.top; int bottom = std::min(top + 2, ir.bottom); top = std::max(top - 3, ir.top); - GfxFillRect(ir.left, top, ir.right, bottom, GetColourGradient(COLOUR_GREY, SHADE_7)); + GfxFillRect(ir.left, top, ir.right, bottom, GetColourGradient(COLOUR_GREY, SHADE_LIGHTEST)); break; } y += line_height; diff --git a/src/palette_func.h b/src/palette_func.h index f6374bb685..c7d4f30cb1 100644 --- a/src/palette_func.h +++ b/src/palette_func.h @@ -42,13 +42,13 @@ TextColour GetContrastColour(uint8_t background, uint8_t threshold = 128); enum ColourShade : uint8_t { SHADE_BEGIN = 0, - SHADE_1, - SHADE_2, - SHADE_3, - SHADE_4, - SHADE_5, - SHADE_6, - SHADE_7, + SHADE_DARKEST, + SHADE_DARKER, + SHADE_DARK, + SHADE_NORMAL, + SHADE_LIGHT, + SHADE_LIGHTER, + SHADE_LIGHTEST, SHADE_END, }; DECLARE_POSTFIX_INCREMENT(ColourShade) diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index e702a7d7b9..6eb44c6c1a 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1414,7 +1414,7 @@ uint BaseSettingEntry::Draw(GameSettings *settings_ptr, int left, int right, int int x = rtl ? right : left; if (cur_row >= first_row) { - int colour = GetColourGradient(COLOUR_ORANGE, SHADE_4); + int colour = GetColourGradient(COLOUR_ORANGE, SHADE_NORMAL); y += (cur_row - first_row) * SETTING_HEIGHT; // Compute correct y start position /* Draw vertical for parent nesting levels */ @@ -2909,7 +2909,7 @@ void ShowGameSettings() */ void DrawArrowButtons(int x, int y, Colours button_colour, byte state, bool clickable_left, bool clickable_right) { - int colour = GetColourGradient(button_colour, SHADE_2); + int colour = GetColourGradient(button_colour, SHADE_DARKER); Dimension dim = NWidgetScrollbar::GetHorizontalDimension(); Rect lr = {x, y, x + (int)dim.width - 1, y + (int)dim.height - 1}; @@ -2940,7 +2940,7 @@ void DrawArrowButtons(int x, int y, Colours button_colour, byte state, bool clic */ void DrawDropDownButton(int x, int y, Colours button_colour, bool state, bool clickable) { - int colour = GetColourGradient(button_colour, SHADE_2); + int colour = GetColourGradient(button_colour, SHADE_DARKER); Rect r = {x, y, x + SETTING_BUTTON_WIDTH - 1, y + SETTING_BUTTON_HEIGHT - 1}; diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 349a1629e2..6544f42a9e 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -346,7 +346,7 @@ void BuildOwnerLegend() int i = NUM_NO_COMPANY_ENTRIES; for (const Company *c : Company::Iterate()) { - _legend_land_owners[i].colour = GetColourGradient(c->colour, SHADE_5); + _legend_land_owners[i].colour = GetColourGradient(c->colour, SHADE_LIGHT); _legend_land_owners[i].company = c->index; _legend_land_owners[i].show_on_map = true; _legend_land_owners[i].col_break = false; diff --git a/src/train_gui.cpp b/src/train_gui.cpp index 901d48f5e3..d62d3dce55 100644 --- a/src/train_gui.cpp +++ b/src/train_gui.cpp @@ -76,7 +76,7 @@ static int HighlightDragPosition(int px, int max_width, int y, VehicleID selecti int top = y - height / 2; Rect r = {drag_hlight_left, top, drag_hlight_right, top + height - 1}; /* Sprite-scaling is used here as the area is from sprite size */ - GfxFillRect(r.Shrink(ScaleSpriteTrad(1)), GetColourGradient(COLOUR_GREY, SHADE_7)); + GfxFillRect(r.Shrink(ScaleSpriteTrad(1)), GetColourGradient(COLOUR_GREY, SHADE_LIGHTEST)); } return drag_hlight_width; @@ -399,7 +399,7 @@ void DrawTrainDetails(const Train *v, const Rect &r, int vscroll_pos, uint16_t v if (vscroll_pos <= 0 && vscroll_pos > -vscroll_cap) { int py = r.top - line_height * vscroll_pos + text_y_offset; if (i > 0 || separate_sprite_row) { - if (vscroll_pos != 0) GfxFillRect(r.left, py - WidgetDimensions::scaled.matrix.top - 1, r.right, py - WidgetDimensions::scaled.matrix.top, GetColourGradient(COLOUR_GREY, SHADE_5)); + if (vscroll_pos != 0) GfxFillRect(r.left, py - WidgetDimensions::scaled.matrix.top - 1, r.right, py - WidgetDimensions::scaled.matrix.top, GetColourGradient(COLOUR_GREY, SHADE_LIGHT)); } switch (det_tab) { case TDW_TAB_CARGO: diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index be43be784c..b35d40c102 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -624,7 +624,7 @@ static void DrawVehicleRefitWindow(const RefitOptions &refits, const RefitOption bool rtl = _current_text_dir == TD_RTL; uint iconwidth = std::max(GetSpriteSize(SPR_CIRCLE_FOLDED).width, GetSpriteSize(SPR_CIRCLE_UNFOLDED).width); uint iconheight = GetSpriteSize(SPR_CIRCLE_FOLDED).height; - int linecolour = GetColourGradient(COLOUR_ORANGE, SHADE_4); + int linecolour = GetColourGradient(COLOUR_ORANGE, SHADE_NORMAL); int iconleft = rtl ? ir.right - iconwidth : ir.left; int iconcenter = rtl ? ir.right - iconwidth / 2 : ir.left + iconwidth / 2; diff --git a/src/viewport.cpp b/src/viewport.cpp index 9c861e0aa8..cd5987e6c6 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1716,7 +1716,7 @@ static void ViewportDrawStrings(ZoomLevel zoom, const StringSpriteToDrawVector * /* Don't draw the rectangle. * Real colours need the TC_IS_PALETTE_COLOUR flag. * Otherwise colours from _string_colourmap are assumed. */ - colour = (TextColour)GetColourGradient(ss.colour, SHADE_6) | TC_IS_PALETTE_COLOUR; + colour = (TextColour)GetColourGradient(ss.colour, SHADE_LIGHTER) | TC_IS_PALETTE_COLOUR; } else { /* Draw the rectangle if 'transparent station signs' is off, * or if we are drawing a general text sign (STR_WHITE_SIGN). */ diff --git a/src/widget.cpp b/src/widget.cpp index 1348923839..0e4f8cda46 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -282,10 +282,10 @@ void DrawFrameRect(int left, int top, int right, int bottom, Colours colour, Fra { assert(colour < COLOUR_END); - uint dark = GetColourGradient(colour, SHADE_3); - uint medium_dark = GetColourGradient(colour, SHADE_5); - uint medium_light = GetColourGradient(colour, SHADE_6); - uint light = GetColourGradient(colour, SHADE_7); + uint dark = GetColourGradient(colour, SHADE_DARK); + uint medium_dark = GetColourGradient(colour, SHADE_LIGHT); + uint medium_light = GetColourGradient(colour, SHADE_LIGHTER); + uint light = GetColourGradient(colour, SHADE_LIGHTEST); if (flags & FR_TRANSPARENT) { GfxFillRect(left, top, right, bottom, PALETTE_TO_TRANSPARENT, FILLRECT_RECOLOUR); @@ -423,7 +423,7 @@ static inline void DrawMatrix(const Rect &r, Colours colour, bool clicked, uint1 row_height = r.Height() / num_rows; } - int col = GetColourGradient(colour, SHADE_6); + int col = GetColourGradient(colour, SHADE_LIGHTER); int x = r.left; for (int ctr = num_columns; ctr > 1; ctr--) { @@ -437,7 +437,7 @@ static inline void DrawMatrix(const Rect &r, Colours colour, bool clicked, uint1 GfxFillRect(r.left + WidgetDimensions::scaled.bevel.left, x, r.right - WidgetDimensions::scaled.bevel.right, x + WidgetDimensions::scaled.bevel.top - 1, col); } - col = GetColourGradient(colour, SHADE_4); + col = GetColourGradient(colour, SHADE_NORMAL); x = r.left - 1; for (int ctr = num_columns; ctr > 1; ctr--) { @@ -469,8 +469,8 @@ static inline void DrawVerticalScrollbar(const Rect &r, Colours colour, bool up_ DrawImageButtons(r.WithHeight(height, false), NWID_VSCROLLBAR, colour, up_clicked, SPR_ARROW_UP, SA_CENTER); DrawImageButtons(r.WithHeight(height, true), NWID_VSCROLLBAR, colour, down_clicked, SPR_ARROW_DOWN, SA_CENTER); - int c1 = GetColourGradient(colour, SHADE_3); - int c2 = GetColourGradient(colour, SHADE_7); + int c1 = GetColourGradient(colour, SHADE_DARK); + int c2 = GetColourGradient(colour, SHADE_LIGHTEST); /* draw "shaded" background */ GfxFillRect(r.left, r.top + height, r.right, r.bottom - height, c2); @@ -508,8 +508,8 @@ static inline void DrawHorizontalScrollbar(const Rect &r, Colours colour, bool l DrawImageButtons(r.WithWidth(width, false), NWID_HSCROLLBAR, colour, left_clicked, SPR_ARROW_LEFT, SA_CENTER); DrawImageButtons(r.WithWidth(width, true), NWID_HSCROLLBAR, colour, right_clicked, SPR_ARROW_RIGHT, SA_CENTER); - int c1 = GetColourGradient(colour, SHADE_3); - int c2 = GetColourGradient(colour, SHADE_7); + int c1 = GetColourGradient(colour, SHADE_DARK); + int c2 = GetColourGradient(colour, SHADE_LIGHTEST); /* draw "shaded" background */ GfxFillRect(r.left + width, r.top, r.right - width, r.bottom, c2); @@ -547,8 +547,8 @@ static inline void DrawFrame(const Rect &r, Colours colour, TextColour text_colo if (str != STR_NULL) x2 = DrawString(r.left + WidgetDimensions::scaled.frametext.left, r.right - WidgetDimensions::scaled.frametext.right, r.top, str, text_colour, align, false, fs); - int c1 = GetColourGradient(colour, SHADE_3); - int c2 = GetColourGradient(colour, SHADE_7); + int c1 = GetColourGradient(colour, SHADE_DARK); + int c2 = GetColourGradient(colour, SHADE_LIGHTEST); /* If the frame has text, adjust the top bar to fit half-way through */ Rect inner = r.Shrink(ScaleGUITrad(1)); @@ -645,7 +645,7 @@ static inline void DrawResizeBox(const Rect &r, Colours colour, bool at_left, bo if (bevel) { DrawFrameRect(r.left, r.top, r.right, r.bottom, colour, (clicked) ? FR_LOWERED : FR_NONE); } else if (clicked) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(colour, SHADE_6)); + GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(colour, SHADE_LIGHTER)); } DrawSpriteIgnorePadding(at_left ? SPR_WINDOW_RESIZE_LEFT : SPR_WINDOW_RESIZE_RIGHT, PAL_NONE, r.Shrink(ScaleGUITrad(2)), at_left ? (SA_LEFT | SA_BOTTOM | SA_FORCE) : (SA_RIGHT | SA_BOTTOM | SA_FORCE)); } @@ -685,7 +685,7 @@ void DrawCaption(const Rect &r, Colours colour, Owner owner, TextColour text_col DrawFrameRect(ir, colour, company_owned ? FR_LOWERED | FR_DARKENED | FR_BORDERONLY : FR_LOWERED | FR_DARKENED); if (company_owned) { - GfxFillRect(ir.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(_company_colours[owner], SHADE_4)); + GfxFillRect(ir.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(_company_colours[owner], SHADE_NORMAL)); } if (str != STR_NULL) { @@ -1906,7 +1906,7 @@ NWidgetCore *NWidgetMatrix::GetWidgetFromPos(int x, int y) /* virtual */ void NWidgetMatrix::Draw(const Window *w) { /* Fill the background. */ - GfxFillRect(this->GetCurrentRect(), GetColourGradient(this->colour, SHADE_5)); + GfxFillRect(this->GetCurrentRect(), GetColourGradient(this->colour, SHADE_LIGHT)); /* Set up a clipping area for the previews. */ bool rtl = _current_text_dir == TD_RTL; @@ -2171,7 +2171,7 @@ void NWidgetBackground::Draw(const Window *w) if (this->child != nullptr) this->child->Draw(w); if (this->IsDisabled()) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(this->colour, SHADE_2), FILLRECT_CHECKER); + GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(this->colour, SHADE_DARKER), FILLRECT_CHECKER); } DrawOutline(w, this); @@ -2416,7 +2416,7 @@ void NWidgetScrollbar::Draw(const Window *w) } if (this->IsDisabled()) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(this->colour, SHADE_2), FILLRECT_CHECKER); + GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(this->colour, SHADE_DARKER), FILLRECT_CHECKER); } DrawOutline(w, this); @@ -2867,7 +2867,7 @@ void NWidgetLeaf::Draw(const Window *w) if (this->index >= 0) w->DrawWidget(r, this->index); if (this->IsDisabled()) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(this->colour, SHADE_2), FILLRECT_CHECKER); + GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(this->colour, SHADE_DARKER), FILLRECT_CHECKER); } DrawOutline(w, this); diff --git a/src/widgets/dropdown_type.h b/src/widgets/dropdown_type.h index 850294dba2..89adabde09 100644 --- a/src/widgets/dropdown_type.h +++ b/src/widgets/dropdown_type.h @@ -37,7 +37,7 @@ public: virtual void Draw(const Rect &full, const Rect &, bool, Colours bg_colour) const { - if (this->masked) GfxFillRect(full, GetColourGradient(bg_colour, SHADE_5), FILLRECT_CHECKER); + if (this->masked) GfxFillRect(full, GetColourGradient(bg_colour, SHADE_LIGHT), FILLRECT_CHECKER); } TextColour GetColour(bool sel) const @@ -63,8 +63,8 @@ public: void Draw(const Rect &full, const Rect &, bool, Colours bg_colour) const override { - uint8_t c1 = GetColourGradient(bg_colour, SHADE_3); - uint8_t c2 = GetColourGradient(bg_colour, SHADE_7); + uint8_t c1 = GetColourGradient(bg_colour, SHADE_DARK); + uint8_t c2 = GetColourGradient(bg_colour, SHADE_LIGHTEST); int mid = CenterBounds(full.top, full.bottom, 0); GfxFillRect(full.left, mid - WidgetDimensions::scaled.bevel.bottom, full.right, mid - 1, c1); diff --git a/src/widgets/slider.cpp b/src/widgets/slider.cpp index 1194264dd0..b5553e56cb 100644 --- a/src/widgets/slider.cpp +++ b/src/widgets/slider.cpp @@ -41,9 +41,9 @@ void DrawSliderWidget(Rect r, int min_value, int max_value, int value, const std int wx1 = r.left + sw / 2; int wx2 = r.right - sw / 2; if (_current_text_dir == TD_RTL) std::swap(wx1, wx2); - const uint shadow = GetColourGradient(COLOUR_GREY, SHADE_3); - const uint fill = GetColourGradient(COLOUR_GREY, SHADE_6); - const uint light = GetColourGradient(COLOUR_GREY, SHADE_7); + const uint shadow = GetColourGradient(COLOUR_GREY, SHADE_DARK); + const uint fill = GetColourGradient(COLOUR_GREY, SHADE_LIGHTER); + const uint light = GetColourGradient(COLOUR_GREY, SHADE_LIGHTEST); const std::vector wedge{ Point{wx1, r.bottom - ha}, Point{wx2, r.top + ha}, Point{wx2, r.bottom - ha} }; GfxFillPolygon(wedge, fill); GfxDrawLine(wedge[0].x, wedge[0].y, wedge[2].x, wedge[2].y, light, t); From 86be6d7e0b5e3925a04c81976c5df0b3a2e14483 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 28 Dec 2023 16:06:35 +0000 Subject: [PATCH 013/695] Codechange: Off-by-one in colour gradient initialisation. Remap sprites start with a count byte followed by 256 entries, but SetupColoursAndInitialWindow did not take account of this extra byte and therefore started at palette index 0xC5 instead of 0xC6. This caused the first colour of each gradient to be incorrect and all shades were actually 1 step lower in the gradient than indicated. --- src/main_gui.cpp | 2 +- src/palette_func.h | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main_gui.cpp b/src/main_gui.cpp index 686629f1fe..a413cd3594 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -541,7 +541,7 @@ void ShowSelectGameWindow(); void SetupColoursAndInitialWindow() { for (Colours i = COLOUR_BEGIN; i != COLOUR_END; i++) { - const byte *b = GetNonSprite(GENERAL_SPRITE_COLOUR(i), SpriteType::Recolour); + const byte *b = GetNonSprite(GENERAL_SPRITE_COLOUR(i), SpriteType::Recolour) + 1; assert(b != nullptr); for (ColourShade j = SHADE_BEGIN; j < SHADE_END; j++) { SetColourGradient(i, j, b[0xC6 + j]); diff --git a/src/palette_func.h b/src/palette_func.h index c7d4f30cb1..0f35bc0258 100644 --- a/src/palette_func.h +++ b/src/palette_func.h @@ -42,13 +42,14 @@ TextColour GetContrastColour(uint8_t background, uint8_t threshold = 128); enum ColourShade : uint8_t { SHADE_BEGIN = 0, - SHADE_DARKEST, + SHADE_DARKEST = SHADE_BEGIN, SHADE_DARKER, SHADE_DARK, SHADE_NORMAL, SHADE_LIGHT, SHADE_LIGHTER, SHADE_LIGHTEST, + SHADE_LIGHTEREST, SHADE_END, }; DECLARE_POSTFIX_INCREMENT(ColourShade) From 7b1e3cfeb58ceed9babc33922480372c55d06fa4 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 25 Feb 2024 18:35:26 +0000 Subject: [PATCH 014/695] Update: Translations from eints english (au): 1 change by krysclarke swedish: 1 change by niklasva chinese (simplified): 6 changes by WenSimEHRP korean: 21 changes by telk5093 hungarian: 1 change by PstasDev italian: 1 change by Rivarossi belarusian: 7 changes by KorneySan russian: 7 changes by Ln-Wolf, 3 changes by KorneySan catalan: 9 changes by J0anJosep danish: 7 changes by bscargo french: 7 changes by ottdfevr portuguese: 1 change by jcteotonio hindi: 2 changes by michaelsmassey portuguese (brazilian): 115 changes by pasantoro polish: 1 change by pAter-exe --- src/lang/belarusian.txt | 8 +- src/lang/brazilian_portuguese.txt | 230 +++++++++++++++--------------- src/lang/catalan.txt | 12 +- src/lang/danish.txt | 8 +- src/lang/english_AU.txt | 2 +- src/lang/french.txt | 8 +- src/lang/hindi.txt | 2 + src/lang/hungarian.txt | 2 +- src/lang/italian.txt | 2 +- src/lang/korean.txt | 36 +++-- src/lang/polish.txt | 2 +- src/lang/portuguese.txt | 2 +- src/lang/russian.txt | 20 +-- src/lang/simplified_chinese.txt | 6 + src/lang/swedish.txt | 2 +- 15 files changed, 190 insertions(+), 152 deletions(-) diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index f6f1f8444c..4c4c67bb50 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -1431,6 +1431,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Падв STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Зьнізіць курс вашае валюты ў адносінах да фунта (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Усталяваць курс вашае валюты ў адносінах да фунта (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Падзельнік: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Усталяваць падзельнік для вашае валюты STR_CURRENCY_PREFIX :{LTBLUE}Прэфікс: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Усталяваць прэфікс для вашае валюты @@ -1806,7 +1808,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Транспа STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Калі ўключана, усе мадэлі транспартных сродкаў пасьля з'яўленьня застануцца даступнымі назаўжды. STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Гульнёвы час: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Выбар сістэмы адліку часу, выкарыстанай у гульні. Пасля старту змяніць яе немагчыма.{}{}Каляндар - гэта класічная сістэма, першапачаткова ўжытая ў OpenTTD: год складаецца з 12 месяцаў, у кожным з якіх 28-31{NBSP}дзень.{}{}У рэжыме рэальнага часу разлікі вытворчасці, рухі транспарта і фінансавых паказчыкаў заснаваны на інтэрвалах працягласцю ў 1{NBSP}хвіліну, што прыкладна адпавядае 30{NBSP}дням у рэжыме календара. Гэтыя інтэрвалы групуюцца ў 12-хвілінныя цыклы, якія адпавядаюць 1{NBSP}году ў класічным рэжыме.{}{}У любым выпадку, з'яўленьне новых транспартных сродкаў, будынкаў і інфраструктуры будзе суправаджацца календаром са зразумелымі датамі. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Выбар сістэмы адліку часу, выкарыстанай у гульні. Пасля старту змяніць яе немагчыма.{}{}Каляндар - гэта класічная сістэма, першапачаткова ўжытая ў OpenTTD: год складаецца з 12 месяцаў, у кожным з якіх 28-31{NBSP}дзень.{}{}У рэжыме рэальнага часу разлікі вытворчасці й фінансавых паказчыкаў заснаваны на інтэрвалах працягласцю ў 1{NBSP}хвіліну, што прыкладна адпавядае 30{NBSP}дням у рэжыме календара. Гэтыя інтэрвалы групуюцца ў 12-хвілінныя цыклы, якія адпавядаюць 1{NBSP}году ў класічным рэжыме.{}{}У любым выпадку, з'яўленьне новых транспартных сродкаў, будынкаў і інфраструктуры будзе суправаджацца календаром са зразумелымі датамі. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Каляндар STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Рэальны час @@ -6284,6 +6286,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}тыс +STR_CURRENCY_SHORT_MEGA :{NBSP}млн +STR_CURRENCY_SHORT_GIGA :{NBSP}млрд +STR_CURRENCY_SHORT_TERA :{NBSP}трлн STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 373682b3f2..5f94865013 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -215,7 +215,7 @@ STR_UNITS_VELOCITY_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_VELOCITY_METRIC :{DECIMAL}{NBSP}km/h STR_UNITS_VELOCITY_SI :{DECIMAL}{NBSP}m/s STR_UNITS_VELOCITY_GAMEUNITS_DAY :{DECIMAL}{NBSP}quadrados/dia -STR_UNITS_VELOCITY_GAMEUNITS_SEC :{DECIMAL}{NBSP}quadrados/segundo +STR_UNITS_VELOCITY_GAMEUNITS_SEC :{DECIMAL}{NBSP}quadrados/s STR_UNITS_VELOCITY_KNOTS :{DECIMAL}{NBSP}nós STR_UNITS_POWER_IMPERIAL :{DECIMAL}{NBSP}hp @@ -278,19 +278,19 @@ STR_TOOLTIP_SORT_CRITERIA :{BLACK}Selecion STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Selecionar critério de busca STR_BUTTON_SORT_BY :{BLACK}Ordenar por STR_BUTTON_CATCHMENT :{BLACK}Cobertura -STR_TOOLTIP_CATCHMENT :{BLACK}Mostrar/ocultar a área de cobertura +STR_TOOLTIP_CATCHMENT :{BLACK}Mostrar/Ocultar a área de cobertura STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Fechar janela -STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Título da janela - arraste isto para mover a janela +STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Título da janela - Clique+Arraste isto para mover a janela STR_TOOLTIP_SHADE :{BLACK}Encolher janela - mostrar apenas a barra de título -STR_TOOLTIP_DEBUG :{BLACK}Mostrar informações de depuração de NewGRF +STR_TOOLTIP_DEBUG :{BLACK}Mostrar informação de depuração de NewGRF STR_TOOLTIP_DEFSIZE :{BLACK}Redimensionar a janela para o tamanho padrão. Ctrl+Clique para salvar o tamanho atual como padrão STR_TOOLTIP_STICKY :{BLACK}Marcar esta janela para não ser fechada pela tecla 'Fechar Todas as Janelas'. Ctrl+Clique para salvar o estado como padrão STR_TOOLTIP_RESIZE :{BLACK}Clique e arraste para redimensionar esta janela STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Alternar entre janela grande/pequena -STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de rolagem - rola a lista acima/abaixo -STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de rolagem - rola a lista para esquerda/direita -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolir construções etc. em um quadrado do terreno. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Ctrl+Shift+Clique+Arrastar mostra o custo estimado +STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de rolagem - desloca a lista para cima/baixo +STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de rolagem - desloca a lista para a esquerda/direita +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolir construções etc. em um quadrado do terreno. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado # Show engines button ###length VEHICLE_TYPES @@ -318,7 +318,7 @@ STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|Q # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Comprimento: {NUM} STR_MEASURE_AREA :{BLACK}Área: {NUM} x {NUM} -STR_MEASURE_LENGTH_HEIGHTDIFF :{BLACK}Comprimento: {NUM}{}Diferença de Altura: {HEIGHT} +STR_MEASURE_LENGTH_HEIGHTDIFF :{BLACK}Comprimento: {NUM}{}Diferença de altura: {HEIGHT} STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Área: {NUM} x {NUM}{}Diferença de altura: {HEIGHT} @@ -394,7 +394,7 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Abrir li STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Abrir lista de objetivos STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Abrir gráficos da empresa e receitas por carga STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Abrir tabela de classificação das empresas -STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Abrir catálogo de indústrias, cadeia industrial ou financiar a construção de uma nova indústria +STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Abrir lista de indústrias, cadeia industrial ou financiar a construção de uma nova indústria STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Abrir lista de trens da empresa. Ctrl+Clique para mostrar ou ocultar os grupos de veículos, em oposição à configuração escolhida STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Abrir lista de veículos da empresa. Ctrl+Clique para mostrar ou ocultar os grupos de veículos, em oposição à configuração escolhida STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Abrir lista de embarcações da empresa. Ctrl+Clique para mostrar ou ocultar os grupos de veículos, em oposição à configuração escolhida @@ -406,10 +406,10 @@ STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Construi STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Construir infraestrutura para bondes STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Construir infraestrutura de hidrovias STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Construir aeroportos -STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Abrir menu de paisagismo, menu de árvores ou colocar um sinal +STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Abrir menu de paisagismo, menu de árvores ou colocar uma placa STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Abrir janela de som/música STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Abrir última mensagem/notícia, histórico de mensagens ou apagar todas as mensagens -STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Abrir menu informações do terreno, captura de tela, sobre o OpenTTD e ferramentas de desenvolvedor +STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Abrir informações do terreno, menu de captura de tela, créditos do OpenTTD ou ferramentas de desenvolvedor STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Trocar a barra de ferramentas # Extra tooltips for the scenario editor toolbar @@ -425,16 +425,16 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Construi STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Construir ou gerar indústrias STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Construir infraestrutura rodoviária STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construir infraestrutura de bondes -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árvores. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Ctrl+Shift+Clique+Arrastar mostra o custo estimado +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árvores. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Colocar placa -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objeto. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Ctrl+Shift+Clique+Arrastar mostra o custo estimado +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objeto. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado # Scenario editor file menu ###length 7 STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO :Salvar cenário -STR_SCENEDIT_FILE_MENU_LOAD_SCENARIO :Carregar cenário +STR_SCENEDIT_FILE_MENU_LOAD_SCENARIO :Abrir cenário STR_SCENEDIT_FILE_MENU_SAVE_HEIGHTMAP :Salvar mapa topográfico -STR_SCENEDIT_FILE_MENU_LOAD_HEIGHTMAP :Carregar mapa topográfico +STR_SCENEDIT_FILE_MENU_LOAD_HEIGHTMAP :Abrir mapa topográfico STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Sair do editor de cenários STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Sair @@ -444,14 +444,14 @@ STR_SCENEDIT_FILE_MENU_QUIT :Sair STR_SETTINGS_MENU_GAME_OPTIONS :Opções do jogo STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Configurações STR_SETTINGS_MENU_AI_SETTINGS :Configurações de IA -STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Configurações de script de jogo +STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Configurações de Script de Jogo STR_SETTINGS_MENU_NEWGRF_SETTINGS :Configurações de NewGRF -STR_SETTINGS_MENU_SANDBOX_OPTIONS :Opções da "sandbox" +STR_SETTINGS_MENU_SANDBOX_OPTIONS :Opções da "Sandbox" STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Opções de transparência STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Mostrar nomes de localidades STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Mostrar nomes de estações STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Mostrar nomes dos pontos de controle -STR_SETTINGS_MENU_SIGNS_DISPLAYED :Mostrar sinais +STR_SETTINGS_MENU_SIGNS_DISPLAYED :Mostrar placas STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Mostrar placas e nomes dos concorrentes STR_SETTINGS_MENU_FULL_ANIMATION :Animação completa STR_SETTINGS_MENU_FULL_DETAIL :Máximo de detalhes @@ -491,7 +491,7 @@ STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Classificação STR_GRAPH_MENU_HIGHSCORE :Tabela de classificações # Industry menu -STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Catálogo de indústrias +STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Lista de indústrias STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Cadeias industriais STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Fundar nova indústria @@ -527,15 +527,15 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Apagar todas as # About menu STR_ABOUT_MENU_LAND_BLOCK_INFO :Informações do terreno STR_ABOUT_MENU_HELP :Ajuda & manuais -STR_ABOUT_MENU_TOGGLE_CONSOLE :Mostrar/ocultar console +STR_ABOUT_MENU_TOGGLE_CONSOLE :Mostrar/Ocultar console STR_ABOUT_MENU_AI_DEBUG :Depuração de IA/Script de jogo STR_ABOUT_MENU_SCREENSHOT :Captura de tela STR_ABOUT_MENU_SHOW_FRAMERATE :Mostrar taxa de quadros STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Alinhador de sprites -STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Mostrar/ocultar as bordas delimitadoras -STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Ativar/desativar a colorização dos blocos sujos -STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Mostrar/ocultar os contornos do elemento +STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Mostrar/Ocultar as caixas delimitadoras +STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Ativar/Desativar a coloração dos blocos sujos +STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Mostrar/Ocultar contornos do elemento ###length 31 STR_DAY_NUMBER_1ST :1 @@ -622,7 +622,7 @@ STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLA STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Desabilitar tudo STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Mostrar todas as cargas no gráfico de receitas por carga STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Não mostrar cargas no gráfico de receitas por carga -STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostrar/ocultar gráfico para o tipo de carga +STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostrar/Ocultar gráfico para o tipo de carga STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Mostrar avaliações detalhadas de desempenho @@ -671,8 +671,8 @@ STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Número STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Número de estações recentemente atendidas. Estações de trem, paradas de ônibus, aeroportos, etc. são contados individualmente, mesmo que pertençam à mesma estação STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}Lucro do veículo com a menor receita (somente veículos com mais de dois anos são considerados) STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}Lucro do veículo com a menor receita (somente veículos com mais de dois períodos são considerados) -STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Quantia de dinheiro obtido no trimestre com o menor lucro dos últimos 12 trimestres -STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Quantia de dinheiro obtido no trimestre com o maior lucro dos últimos 12 trimestres +STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Quantia de dinheiro obtida no trimestre com o menor lucro dos últimos 12 trimestres +STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Quantia de dinheiro obtida no trimestre com o maior lucro dos últimos 12 trimestres STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Unidades de carga entregue nos últimos quatro trimestres STR_PERFORMANCE_DETAIL_CARGO_TOOLTIP :{BLACK}Número de tipos de carga entregues no último trimestre STR_PERFORMANCE_DETAIL_MONEY_TOOLTIP :{BLACK}Quantia de dinheiro que esta empresa tem no banco @@ -754,7 +754,7 @@ STR_SMALLMAP_TYPE_OWNERS :Proprietários STR_SMALLMAP_TOOLTIP_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Mostrar contornos do terreno no mapa STR_SMALLMAP_TOOLTIP_SHOW_VEHICLES_ON_MAP :{BLACK}Mostrar veículos no mapa STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}Mostrar indústrias no mapa -STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Mostrar fluxo de cargas no mapa +STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Mostrar fluxo de carga no mapa STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Mostrar rotas de transporte no mapa STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Mostrar vegetação no mapa STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Mostrar proprietários dos terrenos no mapa @@ -792,7 +792,7 @@ STR_SMALLMAP_LEGENDA_INDUSTRIES :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLACK}Deserto STR_SMALLMAP_LEGENDA_SNOW :{TINY_FONT}{BLACK}Neve -STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Mostrar/ocultar nomes das localidades no mapa +STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Mostrar/Ocultar nomes das localidades no mapa STR_SMALLMAP_CENTER :{BLACK}Centralizar o minimapa na localização atual STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STRING} ({NUM}) STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} @@ -803,7 +803,7 @@ STR_SMALLMAP_ENABLE_ALL :{BLACK}Habilita STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Mostrar altura STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Não mostrar indústrias no mapa STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Mostrar todas as indústrias no mapa -STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Mostrar/ocultar mapa topográfico +STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Mostrar/Ocultar mapa topográfico STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Mostrar no mapa as propriedades que não pertencem às empresas STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Mostrar no mapa as propriedades de todas as empresas STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Não mostrar as cargas no mapa @@ -836,11 +836,11 @@ STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLAC STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeira embarcação chega nas {STATION}! STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeira aeronave chega no {STATION}! -STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Acidente de Trem!{}{COMMA} morrem em explosão após colisão -STR_NEWS_ROAD_VEHICLE_CRASH_DRIVER :{BIG_FONT}{BLACK}Acidente Rodoviário!{}Condutor morre em explosão após colisão com um trem -STR_NEWS_ROAD_VEHICLE_CRASH :{BIG_FONT}{BLACK}Acidente Rodoviário!{}{COMMA} morrem em explosão após colisão com um trem -STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLACK}Acidente Aéreo!{}{COMMA} morrem em explosão na {STATION} -STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Acidente Aéreo!{}Aeronave ficou sem combustível, {COMMA} morrem em explosão +STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Acidente de Trem!{}{COMMA} morrem na explosão após a colisão +STR_NEWS_ROAD_VEHICLE_CRASH_DRIVER :{BIG_FONT}{BLACK}Acidente Rodoviário!{}Condutor morre na explosão após a colisão com um trem +STR_NEWS_ROAD_VEHICLE_CRASH :{BIG_FONT}{BLACK}Acidente Rodoviário!{}{COMMA} morrem na explosão após a colisão com um trem +STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLACK}Acidente Aéreo!{}{COMMA} morrem na explosão em {STATION} +STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Acidente Aéreo!{}Aeronave ficou sem combustível, {COMMA} morrem na explosão STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLACK}Desastre de Zepelim em {STATION}! STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}Veículo rodoviário destruído em colisão com OVNI! @@ -848,9 +848,9 @@ STR_NEWS_DISASTER_AIRPLANE_OIL_REFINERY :{BIG_FONT}{BLAC STR_NEWS_DISASTER_HELICOPTER_FACTORY :{BIG_FONT}{BLACK}Fábrica destruída em circunstâncias suspeitas perto de {TOWN}! STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLACK}OVNI pousa em {TOWN}! STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}Afundamento da mina de carvão deixa rastro de destruição perto de {TOWN}! -STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Inundações!{}Pelo menos {COMMA} desaparecidos, supostamente mortos após inundações significativas! +STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Inundações!{}Pelo menos {COMMA} desaparecidos, supostamente mortos após terríveis inundações! -STR_NEWS_COMPANY_IN_TROUBLE_TITLE :{BIG_FONT}{BLACK}Empresa de transporte em apuros! +STR_NEWS_COMPANY_IN_TROUBLE_TITLE :{BIG_FONT}{BLACK}Empresa de transporte em dificuldades! STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} será vendida ou declarada falida a menos que aumente o desempenho em breve! STR_NEWS_COMPANY_MERGER_TITLE :{BIG_FONT}{BLACK}Fusão de empresas de transportes! STR_NEWS_COMPANY_MERGER_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} foi vendida para {STRING} por {CURRENCY_LONG}! @@ -864,7 +864,7 @@ STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDE STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} financiou a construção da nova localidade de {TOWN}! STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Uma nova localidade chamada {TOWN} foi fundada! -STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Nov{G o a} {STRING} under construction near {TOWN}! +STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Nov{G o a} {STRING} em construção perto de {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Nov{G o a} {STRING} sendo plantada perto de {TOWN}! STR_NEWS_INDUSTRY_CLOSURE_GENERAL :{BIG_FONT}{BLACK}{STRING} anuncia o encerramento iminente! @@ -872,17 +872,17 @@ STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS :{BIG_FONT}{BLAC STR_NEWS_INDUSTRY_CLOSURE_LACK_OF_TREES :{BIG_FONT}{BLACK}Falta de árvores nas proximidades faz {STRING} anunciar o encerramento iminente! STR_NEWS_EURO_INTRODUCTION :{BIG_FONT}{BLACK}União Monetária Europeia!{}{}O Euro é introduzido como moeda única para as operações diárias em seu país! -STR_NEWS_BEGIN_OF_RECESSION :{BIG_FONT}{BLACK}Recessão Mundial!{}{}Especialistas financeiros temem o pior enquanto a economia afunda! +STR_NEWS_BEGIN_OF_RECESSION :{BIG_FONT}{BLACK}Recessão Mundial!{}{}Especialistas financeiros temem o pior com a economia em queda! STR_NEWS_END_OF_RECESSION :{BIG_FONT}{BLACK}Fim da recessão!{}{}Melhoras no comércio inspiram confiança nas indústrias à medida que a economia se fortalece! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL :{BIG_FONT}{BLACK}{INDUSTRY} aumenta a produção! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL :{BIG_FONT}{BLACK}Nova camada de carvão encontrada na {INDUSTRY}!{}A produção deverá duplicar! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL :{BIG_FONT}{BLACK}Novas reservas de petróleo encontradas {G nos na} {INDUSTRY}!{}A produção deverá duplicar! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM :{BIG_FONT}{BLACK}Métodos agrícolas aperfeiçoados na {INDUSTRY} deverão duplicar a produção! -STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}A produção de {STRING} {G nos na} {INDUSTRY} aumentou em {COMMA}%! +STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}Produção de {STRING} {G nos na} {INDUSTRY} aumenta {COMMA}%! STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}A produção de {INDUSTRY} foi reduzida em 50% -STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Infestação de insetos causa destruição {G no na} {INDUSTRY}!{}A produção caiu em 50% -STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}A produção de {STRING} {G nos na} {INDUSTRY} diminui {COMMA}%! +STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Infestação de insetos causa destruição {G no na} {INDUSTRY}!{}Produção diminui em 50% +STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}Produção de {STRING} {G nos na} {INDUSTRY} diminui {COMMA}%! ###length VEHICLE_TYPES STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} está aguardando no depósito @@ -1041,7 +1041,7 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Marque e STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}A configuração terá efeito somente após reiniciar o jogo STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync -STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para ativar Vsync na tela. Se modificada, esta configuração só terá efeito quado o jogo for reiniciado. Só funciona com aceleração de hardware habilitada +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para ativar v-sync na tela. Se modificada, esta configuração só terá efeito quado o jogo for reiniciado. Só funciona com aceleração de hardware habilitada STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}"Driver" atual: {STRING} @@ -1287,7 +1287,7 @@ STR_CONFIG_SETTING_RUNNING_COSTS :Custos de Opera STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Configurar nível de manutenção e custos operacionais de veículos e infraestrutura STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Velocidade de construção: {STRING} -STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Limitar a quantidade ações de construção para IAs +STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Limitar a quantidade ações de construção para IA's STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Quebra de veículos: {STRING} STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Controla a frequência com a qual veículos com manutenção inadequada podem quebrar @@ -1436,7 +1436,7 @@ STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permitir financ STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Permite que empresas doem dinheiro às localidades para custear novas casas STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Permitir financiar a reconstrução de estradas locais:{STRING} -STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Permitir que empresas doem dinheiro para localidades reconstruirem estradas para sabotar os serviços rodoviários na localidade +STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Permitir que empresas doem dinheiro às localidades para reconstrução de estradas para sabotar os serviços rodoviários na localidade STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Permitir enviar dinheiro para outras empresas: {STRING} STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Permite a transferências de dinheiro entre empresas em modo multijogador @@ -1495,7 +1495,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Veículos nunca STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Quanto ativado, todos os modelos de veículos permanecerão disponíveis para sempre após a sua introdução STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Unidades de tempo: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecionar as unidades de tempo do jogo. Isso não pode ser alterado posteriormente.{}{}O modo clássico de tempo do OpenTTD é baseado em um calendário, com um ano composto de 12 meses e cada mês com 28-31 dias.{}{}No tempo baseado em relógio de parede, a movimentação de veículos, a produção de carga e as finanças são baseadas em incrementos de um minuto, que tem aproximadamente a mesma duração que um mês de 30 dias no modo baseado em calendário. Esses incrementos são agrupados em períodos de 12 minutos, equivalentes a um ano no modo baseado em calendário.{}{}Nos dois modos, há sempre um calendário clássico, que é usado para datas de introdução de veículos, casas e outras infraestruturas. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecionar as unidades de tempo para o jogo. Isto não pode ser alterado posteriormente.{}{}O modo clássico no OpenTTD é baseado em um calendário, em que um ano é composto de 12 meses e cada mês tem 28-31 dias.{}{}No tempo baseado no relógio de parede, a produção de carga e as finanças são baseadas em incrementos de um minuto, que tem aproximadamente a mesma duração de um mês de 30 dias no modo baseado em calendário. Esses incrementos são agrupados em períodos de 12 minutos, equivalentes a um ano no modo baseado em calendário.{}{}Nos dois modos, há sempre um calendário clássico, que é usado para datas de introdução de veículos, casas e outras infraestruturas. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendário STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Relógio de parede @@ -1546,7 +1546,7 @@ STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as carg STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Se ativado, a carga transportável do veículo aparecerá acima dele nas listas de veículos STR_CONFIG_SETTING_LANDSCAPE :Clima: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os climas definem a jogabilidade básica com diferentes cargas e requerimentos para o crescimento das localidades. NewGRF's e Scripts de Jogo permitem um controle mais fino +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os climas definem a jogabilidade básica com diferentes cargas e requerimentos para o crescimento das localidades. NewGRFs e Scripts de Jogo permitem um controle mais fino STR_CONFIG_SETTING_LAND_GENERATOR :Gerador de Terreno: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :O gerador original depende do conjunto gráfico base e produz formas de terreno pré-definidas. TerraGenesis é um gerador baseado no algoritmo de ruído de Perlin com definições mais refinadas @@ -2784,16 +2784,16 @@ STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construção de STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Construção de Ferrovias (monotrilho) STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Construção de Ferrovias Maglev -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir ferrovia. Ctrl+Clique remove a ferrovia. Ctrl+Shift+Clique mostra o custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construir ferrovia usando o modo Autotrilho. Ctrl+Clique remove seção da ferrovia. Ctrl+Shift+Clique mostra o custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construir depósito de trem (para compra e manutenção de trens). Shift+Clique mostra o custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Construir ponto de controle na ferrovia. Ctrl+Clique para selecionar outro ponto de controle e unir com este. Ctrl+Shift+Clique mostra o custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Construir estação ferroviária. Ctrl+Clique para selecionar outra estação e unir com esta. Ctrl+Shift+Clique mostra o custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Construir sinal na ferrovia. Ctrl+Clique para construir o sinal com estilo diferente{}Clique+Arraste para preencher a seção selecionada da ferrovia com os sinais no espaçamento escolhido. Ctrl+Clique+Arraste para colocar sinais até a próxima junção, estação ou sinal. Ctrl+Shift+Clique+Arrastar mostra o custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Construir ponte ferroviária. Pressionar Shift mostra o custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Construir túnel ferroviário. Shift+Clique mostra o custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Construir/remover ferrovia, sinais, pontos de controle e estações. Ctrl+Clique para também remover os trilhos de pontos de controle e das estações -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Converter/Atualizar tipo de trilho. Shift+Clique mostra o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir ferrovia. Ctrl+Clique remove a ferrovia. Pressione também Shift para apenas mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construir ferrovia usando o modo Autotrilho. Ctrl+Clique remove seção da ferrovia. Pressione também Shift para apenas mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construir depósito de trem (para compra e manutenção de trens). Pressione também Shift para apenas mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Construir ponto de controle na ferrovia. Ctrl+Clique para selecionar outro ponto de controle e unir com este. Pressione também Shift para apenas mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Construir estação ferroviária. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Construir sinal na ferrovia. Ctrl+Clique para construir o sinal com estilo diferente{}Clique+Arraste para preencher a seção selecionada da ferrovia com os sinais no espaçamento escolhido. Ctrl+Clique+Arraste para colocar sinais até a próxima junção, estação ou sinal. Pressione também Shift para apenas mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Construir ponte ferroviária. Pressione também Shift para apenas mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Construir túnel ferroviário. Pressione também Shift para apenas mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Construir/Remover ferrovia, sinais, pontos de controle e estações. Ctrl+Clique para também remover os trilhos de pontos de controle e das estações +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Converter/Atualizar tipo de trilho. Pressione também Shift para apenas mostrar o custo estimado STR_RAIL_NAME_RAILROAD :Ferrovia STR_RAIL_NAME_ELRAIL :Ferrovia eletrificada @@ -2830,7 +2830,7 @@ STR_STATION_CLASS_WAYP_WAYPOINT :Ponto de contro # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Seleção de Sinais -STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Mostrar/ocultar os tipos de sinais avançados +STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Mostrar/Ocultar tipos de sinais avançados STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Sinal de Bloqueio (semáforo){}Este é o tipo mais básico de sinal, permitindo apenas um trem passar no mesmo bloco de linha ao mesmo tempo STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Sinal de Entrada (semáforo){}Permanece verde enquanto houver um ou mais sinais de saída verdes na seção da linha. Caso contrário, ficará vermelho STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Sinal de Saída (semáforo){}Funciona da mesma forma que o sinal de bloqueio, mas é necessário para ativar a cor correta nos pré-sinais de entrada e combinado. @@ -2843,7 +2843,7 @@ STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Sinal de STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Sinal Combinado (elétrico){}O sinal combinado funciona simultaneamente como um sinal de entrada e de saída. Isto permite construir ramificações complexas de pré-sinais. STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Sinal de Caminho (elétrico){}Um sinal de caminho que permite mais de um trem passar por um sinal de bloqueio ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Sinais de caminho padrões podem ser passados no sentido contrário STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Sinal de Sentido Único (elétrico){}Um sinal de caminho que permite mais de um trem passar por um sinal de bloqueio ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Os sinais de sentido único não podem ser passados no sentido contrário -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Converter sinal{}Clique em um sinal existente para convertê-lo para o tipo e variante de sinal selecionado. Ctrl+Clique muda a variante existente. Shift+Clique mostra o custo estimado da conversão +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Converter sinal{}Clique em um sinal existente para convertê-lo para o tipo e variante de sinal selecionado. Ctrl+Clique muda a variante existente. Shift+Clique mostra o custo estimado de conversão STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distância entre os sinais quando arrastar STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Diminuir a distância entre os sinais quando arrastar STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Aumentar a distância entre os sinais quando arrastar @@ -2869,25 +2869,25 @@ STR_BRIDGE_TUBULAR_SILICON :Tubular, Silíc # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Construção de estradas STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Construção de Linhas de Bonde -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Construir seção de estrada. Ctrl+Clique remove seção da estrada. Ctrl+Shift+Clique mostra o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Construir linha de bonde. Ctrl+Clique remove seção da linha. Ctrl+Shift+Clique mostra o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Construir estrada usando o modo Autoestrada. Ctrl+Clique remove seção da estrada. Ctrl+Shift+Clique mostra o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Construir linha de bonde usando o modo Autotrilho. Ctrl+Clique remove uma seção da linha. Ctrl+Shift+Clique mostra o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construir depósito para veículos rodoviários (para compra e manutenção de veículos). Shift+Clique mostra o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construir depósito de bonde (para compra e manutenção de bondes). Shift+Clique mostra o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Construir estação de ônibus. Ctrl+Clique para selecionar outra estação e unir com esta. Ctrl+Shift+Clique mostra o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Construir estação de bonde de passageiros. Ctrl+Clique para selecionar outra estação e unir com esta. Ctrl+Shift+Clique mostra o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Construir estação de caminhão. Ctrl+Clique para selecionar outra estação e unir com esta. Ctrl+Shift+Clique mostra o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Construir estação de bonde de carga. Ctrl+Clique para selecionar outra estação e unir com esta. Ctrl+Shift+Clique mostra o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Construir seção de estrada. Ctrl+Clique remove seção da estrada. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Construir linha de bonde. Ctrl+Clique remove seção da linha. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Construir estrada usando o modo Autoestrada. Ctrl+Clique remove seção da estrada. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Construir linha de bonde usando o modo Autotrilho. Ctrl+Clique remove uma seção da linha. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construir depósito para veículos rodoviários (para compra e manutenção de veículos). Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construir depósito de bonde (para compra e manutenção de bondes). Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Construir estação de ônibus. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Construir estação de bonde de passageiros. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Construir estação de caminhão. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Construir estação de bonde de carga. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Ativar/Desativar estradas de sentido único -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Construir ponte rodoviária. Shift+Clique mostra o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Construir ponte para bondes. Shift+Clique mostra o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Construir túnel rodoviário. Shift+Clique mostra o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Construir túnel para bondes. Shift+Clique mostra o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Construir/remover estradas -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Construir/remover linhas de bonde -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Converter/Atualizar o tipo de estrada. Shift+Clique mostra custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Converter/Atualizar o tipo de bonde. Shift+Clique mostra o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Construir ponte rodoviária. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Construir ponte para bondes. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Construir túnel rodoviário. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Construir túnel para bondes. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Construir/Remover estradas +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Construir/Remover linhas de bonde +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Converter/Atualizar o tipo de estrada. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Converter/Atualizar o tipo de bonde. Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_NAME_ROAD :Estrada STR_ROAD_NAME_TRAM :Bonde @@ -2911,12 +2911,12 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Selecion # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Construção de Hidrovias STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Hidrovias -STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Construir canais. Shift+Clique mostra o custo estimado -STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Construir eclusas. Shift+Clique mostra o custo estimado -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Construir depósito de embarcações (para compra e manutenção de embarcações). Shift+Clique mostra o custo estimado -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construir doca naval. Ctrl+Clique para selecionar outra estação e unir com esta. Ctrl+Shift+Clique mostra o custo estimado -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Colocar uma boia que pode ser usada como ponto de controle. Shift+Clique mostra o custo estimado -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construir aqueduto. Shift+Clique mostra o custo estimado +STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Construir canais. Pressione também Shift para apenas mostrar o custo estimado +STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Construir eclusas. Pressione também Shift para apenas mostrar o custo estimado +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Construir depósito de embarcações (para compra e manutenção de embarcações). Pressione também Shift para apenas mostrar o custo estimado +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construir doca naval. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Colocar uma boia que pode ser usada como ponto de controle. Pressione também Shift para apenas mostrar o custo estimado +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construir aqueduto. Pressione também Shift para apenas mostrar o custo estimado STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Construir canal. Usar Ctrl+Clique no nível do mar para inundar com água do mar STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Colocar rios. Ctrl+Clique para selecionar diagonalmente @@ -2929,7 +2929,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Doca # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Aeroportos -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Construir aeroporto. Ctrl+Clique para selecionar outro aeroporto e unir com este. Ctrl+Shift+Clique mostra o custo estimado +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Construir aeroporto. Ctrl+Clique para selecionar outro aeroporto e unir com este. Pressione também Shift para apenas mostrar o custo estimado # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Seleção de Aeroporto @@ -2956,14 +2956,14 @@ STR_STATION_BUILD_NOISE :{BLACK}Ruído g # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Paisagismo -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Abaixar um canto do terreno. Clique+Arraste para abaixar o primeiro canto selecionado e nivelar a área selecionada à nova altura do canto. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Ctrl+Shift+Clique+Arrastar mostra o custo estimado -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Elevar um canto do terreno. Clique+Arraste para elevar o primeiro canto selecionado e nivelar a área selecionada à nova altura do canto. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Ctrl+Shift+Clique+Arrastar mostra o custo estimado -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Nivelar uma área do terreno à altura do primeiro canto selecionado. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Ctrl+Shift+Clique+Arrastar mostra o custo estimado -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar terreno para uso futuro. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Ctrl+Shift+Clique+Arrastar mostra o custo estimado +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Abaixar um canto do terreno. Clique+Arraste para abaixar o primeiro canto selecionado e nivelar a área selecionada à nova altura do canto. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Elevar um canto do terreno. Clique+Arraste para elevar o primeiro canto selecionado e nivelar a área selecionada à nova altura do canto. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Nivelar uma área do terreno à altura do primeiro canto selecionado. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar terreno para uso futuro. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Seleção de Objeto -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Selecionar objeto para construir. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Ctrl+Shift+Clique+Arrastar mostra o custo estimado +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Selecionar objeto para construir. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Selecionar classe do objeto para construir STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Pré-visualização do objeto STR_OBJECT_BUILD_SIZE :{BLACK}Tamanho: {GOLD}{NUM} x {NUM} quadrados @@ -2975,7 +2975,7 @@ STR_OBJECT_CLASS_TRNS :Transmissores STR_PLANT_TREE_CAPTION :{WHITE}Árvores STR_PLANT_TREE_TOOLTIP :{BLACK}Escolher tipo de árvore para plantar. Se no quadrado já existir uma árvore, serão adicionadas mais árvores de diferentes tipos, ignorando o tipo selecionado STR_TREES_RANDOM_TYPE :{BLACK}Árvores de tipo aleatório -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plantar árvores de tipo aleatório. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Ctrl+Shift+Clique+Arrastar mostra o custo estimado +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plantar árvores de tipo aleatório. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Plantar Aleatoriamente STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plantar árvores aleatoriamente no terreno STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal @@ -3002,7 +3002,7 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Você te # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Geração de Localidades STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Nova Localidade -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Fundar nova localidade. Shift+Clique mostra o custo estimado +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Fundar nova localidade. Pressione também Shift para apenas mostrar o custo estimado STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Localidade Aleatória STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Fundar localidade em um local aleatório STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Várias localidades aleatórias @@ -3428,7 +3428,7 @@ STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Uma list STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Definir parâmetros STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}Mostrar parâmetros STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Alternar paleta -STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Ativar/desativar a paleta de NewGRF selecionado.{}Faça isso quando os gráficos deste NewGRF ficarem cor de rosa no jogo +STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Ativar/Desativar a paleta de NewGRF selecionado.{}Faça isso quando os gráficos deste NewGRF ficarem cor de rosa no jogo STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Aplicar alterações STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Procurar o conteúdo online @@ -3545,7 +3545,7 @@ STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Você e STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Não é possível adicionar arquivo: ID do GRF duplicado STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Arquivo correspondente não encontrado (GRF compatível carregado) -STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Não é possível adicionar arquivo: limite de NewGRF's atingido +STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Não é possível adicionar arquivo: limite de NewGRFs atingido STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}GRF(s) compatíveis foram carregados para os arquivos ausentes STR_NEWGRF_DISABLED_WARNING :{WHITE}Arquivo(s) GRF ausentes foram desativados @@ -3897,7 +3897,7 @@ STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Construi STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Ver sede STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Ver sede da empresa STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Mover sede -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Reconstruir sede da empresa em outro local por 1% do valor da empresa. Shift+Clique mostra o custo estimado +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Reconstruir sede da empresa em outro local por 1% do valor da empresa. Pressione também Shift para apenas mostrar o custo estimado STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detalhes STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Ver contagens detalhadas da infraestrutura STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Dar dinheiro @@ -4116,16 +4116,16 @@ STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Adaptar Aeronaves ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar o veículo ferroviário selecionado. Shift+Clique mostra o custo estimado -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar o veículo rodoviário selecionado. Shift+Clique mostra o custo estimado -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar a embarcação selecionada. Shift+Clique mostra o custo estimado -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar aeronave selecionada. Shift+Clique mostra o custo estimado +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar o veículo ferroviário selecionado. Pressione também Shift para apenas mostrar o custo estimado +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar o veículo rodoviário selecionado. Pressione também Shift para apenas mostrar o custo estimado +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar a embarcação selecionada. Pressione também Shift para apenas mostrar o custo estimado +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar aeronave selecionada. Pressione também Shift para apenas mostrar o custo estimado ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e adaptar o veículo ferroviário selecionado. Shift+Clique mostra o custo estimado -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e adaptar o veículo rodoviário selecionado. Shift+Clique mostra o custo estimado -STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e adaptar a embarcação selecionada. Shift+Clique mostra o custo estimado -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e adaptar a aeronave selecionada. Shift+Clique mostra o custo estimado +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e adaptar o veículo ferroviário selecionado. Pressione também Shift para apenas mostrar o custo estimado +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e adaptar o veículo rodoviário selecionado. Pressione também Shift para apenas mostrar o custo estimado +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e adaptar a embarcação selecionada. Pressione também Shift para apenas mostrar o custo estimado +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e adaptar a aeronave selecionada. Pressione também Shift para apenas mostrar o custo estimado ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Renomear @@ -4152,10 +4152,10 @@ STR_BUY_VEHICLE_SHIP_SHOW_TOGGLE_BUTTON :{BLACK}Mostrar STR_BUY_VEHICLE_AIRCRAFT_SHOW_TOGGLE_BUTTON :{BLACK}Mostrar ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Mostrar/ocultar o tipo de veículo ferroviário -STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Mostrar/ocultar o tipo de veículo rodoviário -STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Mostrar/ocultar o tipo de embarcação -STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Mostrar/ocultar o tipo de aeronave +STR_BUY_VEHICLE_TRAIN_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Mostrar/Ocultar tipo de veículo ferroviário +STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Mostrar/Ocultar tipo de veículo rodoviário +STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Mostrar/Ocultar tipo de embarcação +STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Mostrar/Ocultar tipo de aeronave ###length VEHICLE_TYPES STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}Renomear tipo de veículo ferroviário @@ -4217,10 +4217,10 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Clonar E STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Clonar Aeronave ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Comprar uma cópia de um trem incluindo todos os vagões. Clique nesse botão e depois em um trem que estiver dentro ou fora de um depósito. Ctrl+Clique compartilha as ordens. Ctrl+Shift+Clique mostra o custo estimado -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Comprar uma cópia de um veículo rodoviário. Clique nesse botão e depois em um veículo que estiver dentro ou fora de um depósito. Ctrl+Clique compartilha as ordens. Ctrl+Shift+Clique mostra o custo estimado -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Comprar uma cópia de uma embarcação. Clique nesse botão e depois em uma embarcação que estiver dentro ou fora de um depósito. Ctrl+Clique compartilha as ordens. Ctrl+Shift+Clique mostra o custo estimado -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Comprar uma cópia de uma aeronave. Clique nesse botão e depois em uma aeronave que estiver dentro ou fora de um hangar. Ctrl+Clique compartilha as ordens. Ctrl+Shift+Clique mostra o custo estimado +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Comprar uma cópia de um trem incluindo todos os vagões. Clique nesse botão e depois em um trem que estiver dentro ou fora de um depósito. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Comprar uma cópia de um veículo rodoviário. Clique nesse botão e depois em um veículo que estiver dentro ou fora de um depósito. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Comprar uma cópia de uma embarcação. Clique nesse botão e depois em uma embarcação que estiver dentro ou fora de um depósito. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Comprar uma cópia de uma aeronave. Clique nesse botão e depois em uma aeronave que estiver dentro ou fora de um hangar. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centralizar visualização na localização do depósito ferroviário. Ctrl+Clique abre uma nova visualização na localização do depósito ferroviário @@ -4344,10 +4344,10 @@ STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar e STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar aeronave para o hangar. Ctrl+Clique fará apenas manutenção ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Comprar uma cópia do trem incluindo todos os vagões. Ctrl+Clique compartilha as ordens. Ctrl+Shift+Clique mostra o custo estimado -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Comprar uma cópia do veículo rodoviário. Ctrl+Clique compartilha as ordens. Ctrl+Shift+Clique mostra o custo estimado -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Comprar uma cópia da embarcação. Ctrl+Clique compartilha as ordens. Ctrl+Shift+Clique mostra o custo estimado -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Comprar uma cópia da aeronave. Ctrl+Clique compartilha as ordens. Ctrl+Shift+Clique mostra o custo estimado +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Comprar uma cópia do trem incluindo todos os vagões. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Comprar uma cópia do veículo rodoviário. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Comprar uma cópia da embarcação. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Comprar uma cópia da aeronave. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Forçar o trem a prosseguir sem aguardar o sinal de liberação STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Inverter a direção do trem @@ -4771,7 +4771,7 @@ STR_AI_DEBUG_SETTINGS :{BLACK}Definiç STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Alterar as configurações do script STR_AI_DEBUG_RELOAD :{BLACK}Recarregar IA STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Interromper a IA, recarregar o script e reiniciar a IA -STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Ativar/desativar pausa quando uma mensagem de registo da IA corresponder à sequência de pausa +STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Ativar/Desativar pausa quando uma mensagem de registo da IA corresponder à sequência de pausa STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Parar em: STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Parar em STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Quando uma mensagem de registo da IA for igual a esta sequência, o jogo é pausado @@ -4806,7 +4806,7 @@ STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Mover a STR_AI_CONFIG_GAMESCRIPT :{SILVER}Script de Jogo STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Parâmetros -STR_AI_CONFIG_AI :{SILVER}IAs +STR_AI_CONFIG_AI :{SILVER}IA's STR_AI_CONFIG_CHANGE_AI :{BLACK}Selecionar IA STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Selecionar Script de Jogo diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index bd48adfd68..2b5d834a2b 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1118,6 +1118,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Disminue STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Augmenta la quantitat de moneda per cada lliura (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Estableix el tipus de canvi de la moneda per cada Lliura (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Separador: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Establiu el separador de la vostra moneda. STR_CURRENCY_PREFIX :{LTBLUE}Prefix: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Estableix el prefix de text per a la moneda @@ -1273,10 +1275,10 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Diners infinits STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Permet gastar diners sense límit i desactiva les bancarrotes de les companyies. STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Préstec inicial màxim: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Quantitat màxima del préstec que pot demanar una companyia (sense tenir en compte la inflació) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Quantitat màxima del préstec que pot demanar una companyia (sense tenir en compte la inflació). Si s'estableix a "Sense préstecs", no es podran aconseguir diners a no ser que els proporcionin els scripts de partida o l'opció "Diners infinits". STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sense préstec {RED}Fa falta un script de partida que doni els fons inicials +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sense préstecs STR_CONFIG_SETTING_INTEREST_RATE :Taxa d'interès: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Tipus d'interès dels préstecs; també controla la inflació, si està activada @@ -1493,7 +1495,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Els vehicles ma STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Si està activat, tots els models de vehicles continuen disponibles per sempre després de la seva introducció. STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Mode temporal: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Trieu les unitats del mode temporal de la partida. Una vegada començada la partida, no es pot canviar.{}{}El mode calendari ofereix l'experiència clàssica de l'OpenTTD, on un any té 12 mesos i cada mes té entre 28 i 31 dies.{}{}Amb el mode de rellotge de paret, el moviment del vehicle, la producció de càrrega i les finances es basen en increments d'un minut, que equival més o menys a un mes d'uns 30 dies en el mode calendari.{}{}En tots els modes sempre hi ha un calendari clàssic, que es fa servir per a la data d'introducció dels vehicles, cases i altres infraestructures. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Trieu les unitats del mode temporal de la partida. Una vegada començada la partida, no es pot canviar.{}{}El mode calendari ofereix l'experiència clàssica de l'OpenTTD, on un any té 12 mesos i cada mes té entre 28 i 31 dies.{}{}Amb el mode de rellotge de paret, la producció de càrrega i les finances es basen en increments d'un minut, que equival més o menys a un mes d'uns 30 dies en el mode calendari.{}{}En tots els modes sempre hi ha un calendari clàssic, que es fa servir per a la data d'introducció dels vehicles, cases i altres infraestructures. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendari STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Rellotge de paret @@ -5809,6 +5811,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}M +STR_CURRENCY_SHORT_GIGA :{NBSP}G +STR_CURRENCY_SHORT_TERA :{NBSP}T STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 404b9044cd..6fae2956cb 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1117,6 +1117,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Reducer STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Forøg beløb i din valuta for et pund (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Sæt vekselkursen i din valuta for et pund (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Separator: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Indstil separatoren for din valuta STR_CURRENCY_PREFIX :{LTBLUE}Præfiks: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Sæt præfiks-streng for din valuta @@ -1492,7 +1494,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Køretøjernes STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Når aktiveret, forbliver alle biltyper tilgængelige for evigt efter indførelse STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Tidtagning: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Vælg spillets tidtagningsenheder. Dette kan ikke ændres senere.{}{}Kalenderbaseret er den klassiske OpenTTD-oplevelse, med et år bestående af 12 måneder, og hver måned har 28-31 dage.{}{}I vægur-baseret tid, køretøjsbevægelser, gods produktion, og økonomi er i stedet baseret på trin på et minut, hvilket er omtrent lige så lang tid, som en måned på 30 dage tager i kalenderbaseret tilstand. Disse er grupperet i 12-minutters perioder, svarende til et år i kalenderbaseret tilstand.{}{}I begge tilstande er der altid en klassisk kalender, som bruges til introduktionsdatoer for køretøjer, huse og anden infrastruktur. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Vælg spillets tidtagningsenheder. Dette kan ikke ændres senere.{}{}Kalenderbaseret er den klassiske OpenTTD-oplevelse, med et år bestående af 12 måneder, og hver måned har 28-31 dage.{}{}I Vægur-baseret tid, lastproduktion og økonomi er i stedet baseret på trin på et minut, hvilket er omtrent lige så lang tid, som en måned på 30 dage tager i kalenderbaseret tilstand. Disse er grupperet i 12-minutters perioder, svarende til et år i kalenderbaseret tilstand.{}{}I begge tilstande er der altid en klassisk kalender, som bruges til introduktionsdatoer for køretøjer, huse og anden infrastruktur. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalender STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Vægur @@ -5808,6 +5810,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}m +STR_CURRENCY_SHORT_GIGA :{NBSP}bn +STR_CURRENCY_SHORT_TERA :{NBSP}tn STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 1c7b33a783..6c0b8f11c4 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1494,7 +1494,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Vehicles never STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :When enabled, all vehicle models remain available forever after their introduction STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Timekeeping: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Select the timekeeping units of the game. This cannot be changed later.{}{}Calendar-based is the classic OpenTTD experience, with a year consisting of 12 months, and each month having 28-31 days.{}{}In Wallclock-based time, vehicle movement, cargo production, and financials are instead based on one-minute increments, which is about as long as a 30 day month takes in Calendar-based mode. These are grouped into 12-minute periods, equivalent to a year in Calendar-based mode.{}{}In either mode there is always a classic calendar, which is used for introduction dates of vehicles, houses, and other infrastructure. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Select the timekeeping units of the game. This cannot be changed later.{}{}Calendar-based is the classic OpenTTD experience, with a year consisting of 12 months, and each month having 28-31 days.{}{}In Wallclock-based time, cargo production and financials are instead based on one-minute increments, which is about as long as a 30 day month takes in Calendar-based mode. These are grouped into 12-minute periods, equivalent to a year in Calendar-based mode.{}{}In either mode there is always a classic calendar, which is used for introduction dates of vehicles, houses, and other infrastructure. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendar STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Wallclock diff --git a/src/lang/french.txt b/src/lang/french.txt index e0e9763b2f..f4806dc117 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1118,6 +1118,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Réduire STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Augmenter le montant de cette devise pour une livre (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Définir le taux de change de cette devise pour une livre (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Séparateur : {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Définir le séparateur pour votre monnaie STR_CURRENCY_PREFIX :{LTBLUE}Préfixe{NBSP}: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Définir le préfixe pour cette devise @@ -1493,7 +1495,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Les véhicules STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Quand il est actif, tous les modèles de véhicule restent disponibles pour toujours après leur introduction STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Mesure du temps{NBSP}: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Sélectionner les unités de mesure du temps pour la partie. Ce choix ne peut pas être modifié par la suite.{}{}"Calendrier" correspond à l’expérience classique d'OpenTTD, avec une année de 12 mois et chaque mois ayant de 28 à 31 jours.{}{}Quand le temps est basé sur la "pendule", les mouvements des véhicules, la production de marchandises et les finances sont basés sur des incréments d'une minute, équivalent à des mois de 30 jours dans le mode "calendrier". Ceux-ci sont groupés par période de 12 minutes, équivalent à une année dans le mode "calendrier".{}{}Quelque soit le mode, il y a toujours un calendrier classique, utilisé pour les dates d'introduction des véhicules, maisons, et autres infrastructures. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Sélectionner les unités de mesure du temps pour la partie. Ce choix ne peut pas être modifié par la suite.{}{}"Calendrier" correspond à l’expérience classique d'OpenTTD, avec une année de 12 mois et chaque mois ayant de 28 à 31 jours.{}{}Quand le temps est basé sur la "pendule", la production de marchandises et les finances sont basées sur des incréments d'une minute, équivalent à des mois de 30 jours dans le mode "calendrier". Ceux-ci sont groupés par période de 12 minutes, équivalent à une année dans le mode "calendrier".{}{}Quelque soit le mode, il y a toujours un calendrier classique, utilisé pour les dates d'introduction des véhicules, maisons, et autres infrastructures. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendrier STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Pendule @@ -5809,6 +5811,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}K +STR_CURRENCY_SHORT_MEGA :{NBSP}M +STR_CURRENCY_SHORT_GIGA :{NBSP}G +STR_CURRENCY_SHORT_TERA :{NBSP}T STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index a79561e0aa..ffa56608e0 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -194,6 +194,8 @@ STR_RAIL_MENU_ELRAIL_CONSTRUCTION :विद्य STR_ABOUT_MENU_LAND_BLOCK_INFO :भूमि क्षेत्र की जानकारी STR_ABOUT_MENU_HELP :सहायता और नियमावली STR_ABOUT_MENU_AI_DEBUG :एआई/गेम स्क्रिप्ट डिबग +STR_ABOUT_MENU_SCREENSHOT :स्क्रीनशॉट +STR_ABOUT_MENU_SHOW_FRAMERATE :फ्रेमदर दिखाएं STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD' के बारे में ###length 31 diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 26b0663e15..30f2eb9f76 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -4842,7 +4842,7 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Kis- és STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Kis- és nagybetűk megkülönböztetése az MI naplóbejegyzéseknek a megállítási sorral való összehasonlításánál STR_AI_DEBUG_CONTINUE :{BLACK}Folytatás STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Játék folytatása és MI visszakapcsolása -STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}A MI kimeneti nyomonkövetésének megtekintése. Ctrl+kattintás új ablakban történő megnyitáshoz +STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}A MI kimeneti nyomonkövetésének megtekintése. Ctrl+Kattintás új ablakban történő megnyitáshoz STR_AI_GAME_SCRIPT :{BLACK}Játékszkript STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Játékszkript napló ellenőrzése diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 72bbf97666..3bca21c938 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1529,7 +1529,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :I veicoli non d STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Se abilitata, dopo la loro introduzione, tutti i tipi di veicoli rimarranno sempre disponibili. STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Unità di tempo: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Seleziona le unità di misura del tempo del gioco. Questo non può essere cambiato in seguito.{}{}Il calendario è l'esperienza classica di OpenTTD, con un anno composto da 12 mesi, e ciascun mese ha 28-31 giorni.{}{}In base all'orologio, gli spostamenti dei veicoli, la produzione di merci e gli aspetti finanziari sono invece basati su incrementi di un minuto, che corrisponde approssimativamente al tempo necessario per un mese di 30 giorni in modalità basata sul calendario. Questi sono raggruppati in periodi di 12 minuti, equivalenti a un anno in modalità basata sul calendario.{}{}In entrambe le modalità c'è sempre un calendario classico, utilizzato per le date di introduzione di veicoli, case e altre infrastrutture. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selezionare le unità di misura del tempo del gioco. Non è possibile modificarla in seguito.{}{}La modalità basata sul calendario è l'esperienza classica di OpenTTD, con un anno composto da 12 mesi e ogni mese di 28-31 giorni.{}{}Nel tempo basato sull'orologio a muro, la produzione di merci e le finanze si basano invece su incrementi di un minuto, che è più o meno la durata di un mese di 30 giorni nella modalità basata sul calendario. Questi sono raggruppati in periodi di 12 minuti, equivalenti a un anno nella modalità basata sul calendario.{}{}In entrambe le modalità è sempre presente un calendario classico, che viene utilizzato per le date di introduzione di veicoli, case e altre infrastrutture. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendario STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Orologio diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 2a611b5d32..0039898918 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1118,6 +1118,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}(1 파 STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}(1 파운드(£)에 대한) 사용자 화폐 단위 양을 증가시킵니다 STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}1 파운드(£)에 해당하는 사용자 화폐 단위의 환율을 설정하십시오 +STR_CURRENCY_SEPARATOR :{LTBLUE}단위 구분: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}화폐의 단위를 구분할 구분자를 설정합니다 STR_CURRENCY_PREFIX :{LTBLUE}접두어: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}사용자 화폐 단위 앞에 붙는 문구를 설정하십시오 @@ -1273,10 +1275,10 @@ STR_CONFIG_SETTING_INFINITE_MONEY :돈 무제한: STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :돈을 무제한으로 만들고 회사가 파산하지 않게 만듭니다 STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :최대 초기 대출금: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :한 회사가 최대한 빌릴 수 있는 대출금의 양을 조절할 수 있습니다. (여기서 설정한 값은 인플레이션에 의한 효과를 적용하지 않은 값입니다.) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :(인플레이션 효과를 적용하지 않고) 한 회사가 최대한 빌릴 수 있는 대출금의 양을 조절할 수 있습니다. 이 설정을 "대출 불가"로 설정하면, 게임 스크립트가 돈을 지급하거나 "돈 무한 모드" 설정을 사용하지 않는 한, 돈을 사용할 수 없습니다. STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :대출 불가 {RED}초기 자금을 제공하려면 게임 스크립트가 필요합니다 +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :대출 불가 STR_CONFIG_SETTING_INTEREST_RATE :대출 금리: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :대출 금리입니다. 인플레이션 설정이 켜져있는 경우 인플레이션의 영향을 받습니다. @@ -1493,7 +1495,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :옛날 차량 STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :이 설정을 켜면, 오래된 차량 모델을 포함하여 모든 차량 모델을 도입 이후에 계속 사용할 수 있게 됩니다. STR_CONFIG_SETTING_TIMEKEEPING_UNITS :시간 단위: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :게임에서 사용할 시간 표시 단위를 선택합니다. 나중에 변경할 수 없습니다.{}{}달력 기반은 1년 12개월, 매월 28~31일로 구성된 고전적인 OpenTTD 환경입니다.{}{}벽시계 기반은 차량 이동, 화물 생산 및 재정이 1분 단위로 대신 계산됩니다. 1분은 달력 기반 모드에서 한 달, 즉 30일 정도 걸리는 시간으로, 12분 간격으로 묶어서 1년을 구성합니다.{}{}두 단위 모두, 시간 표시 단위와 상관없이 차량, 건물 및 기타 기반 시설 도입 날짜 등에는 기존의 달력 시스템을 별도로 사용합니다. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :게임에서 사용할 시간 표시 단위를 선택합니다. 나중에 변경할 수 없습니다.{}{}달력 기반은 1년 12개월, 매월 28~31일로 구성된 고전적인 OpenTTD 환경입니다.{}{}벽시계 기반은 화물 생산 및 재정이 1분 단위로 대신 계산됩니다. 1분은 달력 기반 모드에서 한 달, 즉 30일 정도 걸리는 시간으로, 12분 간격으로 묶어서 1년을 구성합니다.{}{}두 단위 모두, 시간 표시 단위와 상관없이 차량, 건물 및 기타 기반 시설 도입 날짜 등에는 기존의 달력 시스템을 별도로 사용합니다. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :달력 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :벽시계 @@ -4383,22 +4385,22 @@ STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}배차 STR_VEHICLE_STATUS_CRASHED :{RED}충돌! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}고장 STR_VEHICLE_STATUS_STOPPED :{RED}정지함 -STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}멈추는 중, {VELOCITY} +STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}{VELOCITY} - 멈추는 중 STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}동력 없음 STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}빈 경로 탐색중 STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}다음 목적지가 너무 멀리 있습니다 -STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}다음 목적지: {STATION} ({VELOCITY}) -STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}경로 없음 ({VELOCITY}) -STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}다음 목적지: {WAYPOINT} ({VELOCITY}) -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}다음 목적지: {DEPOT} ({VELOCITY}) -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}점검: {DEPOT} ({VELOCITY}) -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}점검 및 배차 간격 대기: {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - 다음 목적지: {0:STATION} +STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - 경로 없음 +STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - 다음 목적지: {0:WAYPOINT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - 다음 목적지: {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - {0:DEPOT}에서 점검 +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - {0:DEPOT}에서 점검 및 배차 간격 대기 -STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{STATION}에 갈 수 없음, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{WAYPOINT}에 갈 수 없음, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{DEPOT}에 갈 수 없음, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{DEPOT}에 갈 수 없음, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - {0:STATION}에 갈 수 없음 +STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - {0:WAYPOINT}에 갈 수 없음 +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{1:VELOCITY} - {0:DEPOT}에 갈 수 없음 +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - {0:DEPOT}에 갈 수 없음 # Vehicle stopped/started animations ###length 2 @@ -4612,7 +4614,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :가까운 차 STR_ORDER_GO_TO_NEAREST_HANGAR :가까운 격납고로 STR_ORDER_CONDITIONAL :조건부 경로 건너뛰기 STR_ORDER_SHARE :경로 공유하기 -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}선택된 경로 바로 전이나 목록 맨 끝에 새 경로를 삽입합니다. CTRL+클릭하면, 역에서는 '아무 화물이나 가득 싣기'로, 경유지에서는 '기본적으로 직행' 설정에서 설정한 완행/직행을 반대로 적용하고, 차량기지에서는 '점검'으로 지정됩니다. '공유된 경로'를 클릭하거나 CTRL+클릭하면 선택한 차량과 이 차량의 경로를 공유합니다. 단순히 클릭하면 그 차량의 경로를 복사하기만 합니다. 차량기지를 경로에 포함시키면 이 차량은 자동으로 점검을 하러 가지 않게 됩니다 +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}선택된 경로 바로 전이나 목록 맨 끝에 새 경로를 삽입합니다. CTRL+클릭하면, 역에서는 '아무 화물이나 가득 싣기'로, 경유지에서는 '기본적으로 직행' 설정에서 설정한 완행/직행을 반대로 적용하고, 차량기지에서는 '배차 간격 유지'로 지정됩니다. '공유된 경로'를 클릭하거나 CTRL+클릭하면 선택한 차량과 이 차량의 경로를 공유합니다. 단순히 클릭하면 그 차량의 경로를 복사하기만 합니다. 차량기지를 경로에 포함시키면 이 차량은 자동으로 점검을 하러 가지 않게 됩니다 STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}이 경로를 공유하고 있는 모든 차량을 표시합니다 @@ -5809,6 +5811,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}m +STR_CURRENCY_SHORT_GIGA :{NBSP}bn +STR_CURRENCY_SHORT_TERA :{NBSP}tn STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 9095929521..37256b86b8 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1874,7 +1874,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Pojazdy nigdy n STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kiedy włączone, wszystkie modele pojazdów pozostają dostępne na zawsze od daty ich wprowadzenia STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Miara czasu: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Wybierz jednostki pomiaru czasu w grze. Nie można tego zmienić później.{}{}Kalendarz jest klasycznym trybem OpenTTD, z rokiem składającym się z 12 miesięcy, a każdy miesiąc ma 28-31 dni.{}{}W trybie zegarowym ruch pojazdów, produkcja ładunków oraz finanse są oparte na jednominutowych przyrostach, czyli mniej więcej tak długo, jak trwa 30-dniowy miesiąc w trybie kalendarzowym. Są one pogrupowane w 12-minutowe okresy, co z kolei odpowiada rokowi w trybie kalendarzowym.{}{}W obu metodach zawsze funkcjonuje klasyczny kalendarz, który jest używany do dat wprowadzenia pojazdów, domów i innej infrastruktury. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Wybierz jednostki pomiaru czasu w grze. Nie można tego zmienić później.{}{}Kalendarz jest klasycznym trybem OpenTTD, z rokiem składającym się z 12 miesięcy, a każdy miesiąc ma 28-31 dni.{}{}W trybie zegarowym produkcja ładunków oraz finanse są oparte na jednominutowych przyrostach, czyli mniej więcej tak długo, jak trwa 30-dniowy miesiąc w trybie kalendarzowym. Są one pogrupowane w 12-minutowe okresy, co z kolei odpowiada rokowi w trybie kalendarzowym.{}{}W obu metodach zawsze funkcjonuje klasyczny kalendarz, który jest używany do dat wprowadzenia pojazdów, domów i innej infrastruktury. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalendarz STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Tarcza zegara diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 072cc49f66..ae9c5c9030 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1495,7 +1495,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Veículos nunca STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Quando ativo, todos os modelos de veículos permanecerão disponíveis para sempre após a sua introdução STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Unidades de cronometragem: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecione as unidades de cronometragem do jogo. Isso não pode ser alterado posteriormente.{}{}O uso baseado no calendário é a experiência clássica do OpenTTD, em que um ano corresponde a 12 meses e cada mês tem 28 a 31 dias.{}{}No tempo baseado no relógio de parede, o movimento de veículos, a produção de carga e as finanças baseiam-se em incrementos de um minuto, o que equivale a um mês de 30 dias no modo baseado no calendário. Eles são agrupados em períodos de 12 minutos, equivalentes a um ano no modo baseado em calendário.{}{}Em ambos os modos há sempre um calendário clássico, que é usado para datas de introdução de veículos, casas e outras infraestruturas. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecione as unidades de cronometragem do jogo. Isto não pode ser alterado posteriormente.{}{}O uso baseado no calendário é a experiência clássica do OpenTTD, em que um ano corresponde a 12 meses e cada mês tem 28 a 31 dias.{}{}No tempo baseado no relógio de parede, o movimento de veículos, a produção de carga e as finanças baseiam-se em incrementos de um minuto, o que equivale a um mês de 30 dias no modo baseado no calendário. Estes são agrupados em períodos de 12 minutos, equivalentes a um ano no modo baseado em calendário.{}{}Em ambos os modos há sempre um calendário clássico, que é usado para datas de introdução de veículos, casas e outras infraestruturas. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendário STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Relógio de parede diff --git a/src/lang/russian.txt b/src/lang/russian.txt index b745984ff6..95e39773a1 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -403,7 +403,7 @@ STR_TOOLTIP_SORT_CRITERIA :{BLACK}Смен STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Выберите фильтр STR_BUTTON_SORT_BY :{BLACK}Сортировка STR_BUTTON_CATCHMENT :{BLACK}Охват -STR_TOOLTIP_CATCHMENT :{BLACK}Показать область, обслуживаемую станцией. +STR_TOOLTIP_CATCHMENT :{BLACK}Показать область, обслуживаемую станцией STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Закрыть окно STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Окна можно перетаскивать, схватив за заголовок @@ -459,7 +459,7 @@ STR_SORT_BY_NUMBER :Номер STR_SORT_BY_PROFIT_LAST_YEAR :Прибыль в прошлом году STR_SORT_BY_PROFIT_LAST_PERIOD :Прибыль в прошлом цикле STR_SORT_BY_PROFIT_THIS_YEAR :Прибыль в текущем году -STR_SORT_BY_PROFIT_THIS_PERIOD :Доход в текущем цикле +STR_SORT_BY_PROFIT_THIS_PERIOD :Прибыль в текущем цикле STR_SORT_BY_AGE :Возраст STR_SORT_BY_RELIABILITY :Надёжность STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Вместимость груза @@ -488,11 +488,11 @@ STR_SORT_BY_RATING :Рейтинг STR_SORT_BY_NUM_VEHICLES :Количество транспортных средств STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Общая прибыль в прошлом году STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD :Общая прибыль в прошлом цикле -STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Доход в этом году -STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Прибыль в текущем цикле +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Общая прибыль в текущем году +STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Общая прибыль в текущем цикле STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Средняя прибыль в прошлом году STR_SORT_BY_AVERAGE_PROFIT_LAST_PERIOD :Средняя прибыль в прошлом цикле -STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Средняя прибыль в этом году +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Средняя прибыль в текущем году STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Средняя прибыль в текущем цикле # Group by options for vehicle list @@ -552,7 +552,7 @@ STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Стро STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Строительство трамвайной инфраструктуры STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Посадить деревья. Ctrl+перетаскивание{NBSP}- выбор диагональной области. При нажатом Shift{NBSP}- оценка стоимости высадки. STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Поставить метку -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Разместить объект. Ctrl+щелчок+перетаскивание - выбор диагональной области. При нажатом Shift - оценка стоимости строительства. +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Разместить объект. Ctrl+перетаскивание - выбор диагональной области. При нажатом Shift - оценка стоимости строительства. # Scenario editor file menu ###length 7 @@ -1048,7 +1048,7 @@ STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}ТС «{ STR_NEWS_TRAIN_IS_STUCK :{WHITE}ТС «{VEHICLE}» не может найти путь для продолжения движения STR_NEWS_VEHICLE_IS_LOST :{WHITE}ТС «{VEHICLE}» заблудилось STR_NEWS_VEHICLE_UNPROFITABLE_YEAR :{WHITE}Доход ТС «{VEHICLE}» в прошлом году составил {CURRENCY_LONG} -STR_NEWS_VEHICLE_UNPROFITABLE_PERIOD :{WHITE}Доход ТС «{VEHICLE}» в прошлом цикле: {CURRENCY_LONG} +STR_NEWS_VEHICLE_UNPROFITABLE_PERIOD :{WHITE}Доход ТС «{VEHICLE}» в прошлом цикле составил {CURRENCY_LONG} STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}ТС «{VEHICLE}» не может достичь пункта назначения - слишком далеко STR_NEWS_ORDER_REFIT_FAILED :{WHITE}ТС «{VEHICLE}» остановлено из-за сбоя переоборудования @@ -1645,7 +1645,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Транспо STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :При включении все транспортные средства остаются доступными для покупки в любое время после начала их производства STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Игровое время: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Выбор системы отсчёта времени, используемой в игре. После старта сменить её невозможно.{}{}Календарь - это классическая система, изначально использовавшаяся в OpenTTD: год состоит из 12 месяцев, в каждом из которых 28-31{NBSP}день.{}{}В режиме реального времени расчёты производства, движения транспорта и финансовых показателей основаны на интервалах длительностью в 1{NBSP}минуту, что примерно соответствует 30{NBSP}дням в режиме календаря. Эти интервалы группируются в 12-минутные циклы, соответствующие 1{NBSP}году в классическом режиме.{}{}В любом случае, появление новых транспортных средств, зданий и инфраструктуры будет сопровождаться календарём с понятными датами. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Выбор системы отсчёта времени, используемой в игре. После старта сменить её невозможно.{}{}Календарь - это классическая система, изначально использовавшаяся в OpenTTD: год состоит из 12 месяцев, в каждом из которых 28-31{NBSP}день.{}{}В режиме реального времени расчёты производства и финансовых показателей основаны на интервалах длительностью в 1{NBSP}минуту, что примерно соответствует 30{NBSP}дням в режиме календаря. Эти интервалы группируются в 12-минутные циклы, соответствующие 1{NBSP}году в классическом режиме.{}{}В любом случае, появление новых транспортных средств, зданий и инфраструктуры будет сопровождаться календарём с понятными датами. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Календарь STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Реальное время @@ -6034,10 +6034,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} -STR_CURRENCY_SHORT_KILO :{NBSP}к +STR_CURRENCY_SHORT_KILO :{NBSP}тыс STR_CURRENCY_SHORT_MEGA :{NBSP}млн STR_CURRENCY_SHORT_GIGA :{NBSP}млрд -STR_CURRENCY_SHORT_TERA :трлн +STR_CURRENCY_SHORT_TERA :{NBSP}трлн STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 7bd4b2a82c..24b9b6ecff 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1117,6 +1117,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}减少 STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}增加英磅(£)兑换自定义货币的数量 STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}设置自定义货币与英磅(£)的兑换比率 +STR_CURRENCY_SEPARATOR :{LTBLUE}分隔符:{ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}选择自定义货币的分隔符 STR_CURRENCY_PREFIX :{LTBLUE}前缀: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}设置自定义货币的首字 @@ -5808,6 +5810,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}M +STR_CURRENCY_SHORT_GIGA :{NBSP}B +STR_CURRENCY_SHORT_TERA :{NBSP}T STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index a1e9b5c5b3..e8be900ac5 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1494,7 +1494,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Fordon blir ald STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Om det är aktiverat förblir alla fordonstyper tillgängliga i obegränsad tid efter att de introducerats STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Tidhållning: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Välj enheter för spelets tidhållning. Detta kan inte ändras senare.{}{}Kalenderbaserat spelläge är den klassiska OpenTTD-upplevelsen, där ett år består av 12 månader och varje månad har 28-31 dagar.{}{}I Väggklockbaserat spelläge är fordonsrörelse, godsproduktion, och finanser istället baserade på enminutssteg, vilket är ungefär så länge som en 30-dagarsmånad tar i Kalenderbaserat spelläge. Dessa är grupperade i 12-minutersperioder motsvarande ett år i Kalenderbaserat spelläge.{}{}Oavsett spelläge finns det alltid en klassisk kalender som används för introduktionsdatum av fordon, byggnader, och annan infrastruktur. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Välj enheter för spelets tidhållning. Detta kan inte ändras senare.{}{}Kalenderbaserat spelläge är den klassiska OpenTTD-upplevelsen, där ett år består av 12 månader och varje månad har 28-31 dagar.{}{}I Väggklockbaserat spelläge är godsproduktion och finanser istället baserade på enminutssteg, vilket är ungefär så länge som en 30-dagarsmånad tar i Kalenderbaserat spelläge. Dessa är grupperade i 12-minutersperioder motsvarande ett år i Kalenderbaserat spelläge.{}{}Oavsett spelläge finns det alltid en klassisk kalender som används för introduktionsdatum av fordon, byggnader, och annan infrastruktur. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalender STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Väggklocka From e939f59cbb7e3b78bbded33e55c471a1ed22fac0 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 26 Feb 2024 13:49:26 +0100 Subject: [PATCH 015/695] Codechange: replace "byte" with "uint8_t" in settings (#12179) --- src/settings_type.h | 118 ++++++++++++++++++++++---------------------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/src/settings_type.h b/src/settings_type.h index 3d16ceae47..0ec5785d8b 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -93,27 +93,27 @@ enum RightClickClose : uint8_t { /** Settings related to the difficulty of the game */ struct DifficultySettings { - byte competitor_start_time; ///< Unused value, used to load old savegames. - byte competitor_intelligence; ///< Unused value, used to load old savegames. + uint8_t competitor_start_time; ///< Unused value, used to load old savegames. + uint8_t competitor_intelligence; ///< Unused value, used to load old savegames. - byte max_no_competitors; ///< the number of competitors (AIs) + uint8_t max_no_competitors; ///< the number of competitors (AIs) uint16_t competitors_interval; ///< the interval (in minutes) between adding competitors - byte number_towns; ///< the amount of towns - byte industry_density; ///< The industry density. @see IndustryDensity + uint8_t number_towns; ///< the amount of towns + uint8_t industry_density; ///< The industry density. @see IndustryDensity uint32_t max_loan; ///< the maximum initial loan - byte initial_interest; ///< amount of interest (to pay over the loan) - byte vehicle_costs; ///< amount of money spent on vehicle running cost - byte competitor_speed; ///< the speed at which the AI builds - byte vehicle_breakdowns; ///< likelihood of vehicles breaking down - byte subsidy_multiplier; ///< payment multiplier for subsidized deliveries + uint8_t initial_interest; ///< amount of interest (to pay over the loan) + uint8_t vehicle_costs; ///< amount of money spent on vehicle running cost + uint8_t competitor_speed; ///< the speed at which the AI builds + uint8_t vehicle_breakdowns; ///< likelihood of vehicles breaking down + uint8_t subsidy_multiplier; ///< payment multiplier for subsidized deliveries uint16_t subsidy_duration; ///< duration of subsidies - byte construction_cost; ///< how expensive is building - byte terrain_type; ///< the mountainousness of the landscape - byte quantity_sea_lakes; ///< the amount of seas/lakes + uint8_t construction_cost; ///< how expensive is building + uint8_t terrain_type; ///< the mountainousness of the landscape + uint8_t quantity_sea_lakes; ///< the amount of seas/lakes bool economy; ///< how volatile is the economy bool line_reverse_mode; ///< reversing at stations or not bool disasters; ///< are disasters enabled - byte town_council_tolerance; ///< minimum required town ratings to be allowed to demolish stuff + uint8_t town_council_tolerance; ///< minimum required town ratings to be allowed to demolish stuff bool infinite_money; ///< whether spending money despite negative balance is allowed }; @@ -137,7 +137,7 @@ struct GUISettings { bool new_nonstop; ///< ttdpatch compatible nonstop handling uint8_t stop_location; ///< what is the default stop location of trains? uint8_t auto_scrolling; ///< scroll when moving mouse to the edge (see #ViewportAutoscrolling) - byte errmsg_duration; ///< duration of error message + uint8_t errmsg_duration; ///< duration of error message uint16_t hover_delay_ms; ///< time required to activate a hover event, in milliseconds bool link_terraform_toolbar; ///< display terraform toolbar when displaying rail, road, water and airport toolbars uint8_t smallmap_land_colour; ///< colour used for land and heightmap at the smallmap @@ -145,7 +145,7 @@ struct GUISettings { uint8_t scroll_mode; ///< viewport scroll mode bool smooth_scroll; ///< smooth scroll viewports bool measure_tooltip; ///< show a permanent tooltip when dragging tools - byte liveries; ///< options for displaying company liveries, 0=none, 1=self, 2=all + uint8_t liveries; ///< options for displaying company liveries, 0=none, 1=self, 2=all bool prefer_teamchat; ///< choose the chat message target with \, true=all clients, false=your team uint8_t advanced_vehicle_list; ///< use the "advanced" vehicle list uint8_t loading_indicators; ///< show loading indicators @@ -163,7 +163,7 @@ struct GUISettings { bool autosave_on_exit; ///< save an autosave when you quit the game, but do not ask "Do you really want to quit?" bool autosave_on_network_disconnect; ///< save an autosave when you get disconnected from a network game with an error? uint8_t date_format_in_default_names; ///< should the default savegame/screenshot name use long dates (31th Dec 2008), short dates (31-12-2008) or ISO dates (2008-12-31) - byte max_num_autosaves; ///< controls how many autosavegames are made before the game starts to overwrite (names them 0 to max_num_autosaves - 1) + uint8_t max_num_autosaves; ///< controls how many autosavegames are made before the game starts to overwrite (names them 0 to max_num_autosaves - 1) bool population_in_label; ///< show the population of a town in its label? uint8_t right_mouse_btn_emulation; ///< should we emulate right mouse clicking? uint8_t scrollwheel_scrolling; ///< scrolling using the scroll wheel? @@ -178,19 +178,19 @@ struct GUISettings { TimetableMode timetable_mode; ///< Time units for timetables: days, seconds, or ticks bool quick_goto; ///< Allow quick access to 'goto button' in vehicle orders window bool auto_euro; ///< automatically switch to euro in 2002 - byte drag_signals_density; ///< many signals density + uint8_t drag_signals_density; ///< many signals density bool drag_signals_fixed_distance; ///< keep fixed distance between signals when dragging TimerGameCalendar::Year semaphore_build_before; ///< build semaphore signals automatically before this year - byte news_message_timeout; ///< how much longer than the news message "age" should we keep the message in the history + uint8_t news_message_timeout; ///< how much longer than the news message "age" should we keep the message in the history bool show_track_reservation; ///< highlight reserved tracks. - byte station_numtracks; ///< the number of platforms to default on for rail stations - byte station_platlength; ///< the platform length, in tiles, for rail stations + uint8_t station_numtracks; ///< the number of platforms to default on for rail stations + uint8_t station_platlength; ///< the platform length, in tiles, for rail stations bool station_dragdrop; ///< whether drag and drop is enabled for stations bool station_show_coverage; ///< whether to highlight coverage area bool persistent_buildingtools; ///< keep the building tools active after usage bool expenses_layout; ///< layout of expenses window uint32_t last_newgrf_count; ///< the numbers of NewGRFs we found during the last scan - byte missing_strings_threshold; ///< the number of missing strings before showing the warning + uint8_t missing_strings_threshold; ///< the number of missing strings before showing the warning uint8_t graph_line_thickness; ///< the thickness of the lines in the various graph guis uint8_t osk_activation; ///< Mouse gesture to trigger the OSK. Colours starting_colour; ///< default color scheme for the company to start a new game with @@ -257,14 +257,14 @@ struct MusicSettings { /** Settings related to currency/unit systems. */ struct LocaleSettings { - byte currency; ///< currency we currently use - byte units_velocity; ///< unit system for velocity of trains and road vehicles - byte units_velocity_nautical; ///< unit system for velocity of ships and aircraft - byte units_power; ///< unit system for power - byte units_weight; ///< unit system for weight - byte units_volume; ///< unit system for volume - byte units_force; ///< unit system for force - byte units_height; ///< unit system for height + uint8_t currency; ///< currency we currently use + uint8_t units_velocity; ///< unit system for velocity of trains and road vehicles + uint8_t units_velocity_nautical; ///< unit system for velocity of ships and aircraft + uint8_t units_power; ///< unit system for power + uint8_t units_weight; ///< unit system for weight + uint8_t units_volume; ///< unit system for volume + uint8_t units_force; ///< unit system for force + uint8_t units_height; ///< unit system for height std::string digit_group_separator; ///< thousand separator for non-currencies std::string digit_group_separator_currency; ///< thousand separator for currencies std::string digit_decimal_separator; ///< decimal separator @@ -341,27 +341,27 @@ struct GameCreationSettings { TimerGameCalendar::Year ending_year; ///< scoring end date uint8_t map_x; ///< X size of map uint8_t map_y; ///< Y size of map - byte land_generator; ///< the landscape generator - byte oil_refinery_limit; ///< distance oil refineries allowed from map edge - byte snow_line_height; ///< the configured snow line height (deduced from "snow_coverage") - byte snow_coverage; ///< the amount of snow coverage on the map - byte desert_coverage; ///< the amount of desert coverage on the map - byte heightmap_height; ///< highest mountain for heightmap (towards what it scales) - byte tgen_smoothness; ///< how rough is the terrain from 0-3 - byte tree_placer; ///< the tree placer algorithm - byte heightmap_rotation; ///< rotation director for the heightmap - byte se_flat_world_height; ///< land height a flat world gets in SE - byte town_name; ///< the town name generator used for town names - byte landscape; ///< the landscape we're currently in - byte water_borders; ///< bitset of the borders that are water + uint8_t land_generator; ///< the landscape generator + uint8_t oil_refinery_limit; ///< distance oil refineries allowed from map edge + uint8_t snow_line_height; ///< the configured snow line height (deduced from "snow_coverage") + uint8_t snow_coverage; ///< the amount of snow coverage on the map + uint8_t desert_coverage; ///< the amount of desert coverage on the map + uint8_t heightmap_height; ///< highest mountain for heightmap (towards what it scales) + uint8_t tgen_smoothness; ///< how rough is the terrain from 0-3 + uint8_t tree_placer; ///< the tree placer algorithm + uint8_t heightmap_rotation; ///< rotation director for the heightmap + uint8_t se_flat_world_height; ///< land height a flat world gets in SE + uint8_t town_name; ///< the town name generator used for town names + uint8_t landscape; ///< the landscape we're currently in + uint8_t water_borders; ///< bitset of the borders that are water uint16_t custom_town_number; ///< manually entered number of towns uint16_t custom_industry_number; ///< manually entered number of industries - byte variety; ///< variety level applied to TGP - byte custom_terrain_type; ///< manually entered height for TGP to aim for - byte custom_sea_level; ///< manually entered percentage of water in the map - byte min_river_length; ///< the minimum river length - byte river_route_random; ///< the amount of randomicity for the route finding - byte amount_of_rivers; ///< the amount of rivers + uint8_t variety; ///< variety level applied to TGP + uint8_t custom_terrain_type; ///< manually entered height for TGP to aim for + uint8_t custom_sea_level; ///< manually entered percentage of water in the map + uint8_t min_river_length; ///< the minimum river length + uint8_t river_route_random; ///< the amount of randomicity for the route finding + uint8_t amount_of_rivers; ///< the amount of rivers }; /** Settings related to construction in-game */ @@ -370,9 +370,9 @@ struct ConstructionSettings { bool build_on_slopes; ///< allow building on slopes bool autoslope; ///< allow terraforming under things uint16_t max_bridge_length; ///< maximum length of bridges - byte max_bridge_height; ///< maximum height of bridges + uint8_t max_bridge_height; ///< maximum height of bridges uint16_t max_tunnel_length; ///< maximum length of tunnels - byte train_signal_side; ///< show signals on left / driving / right side + uint8_t train_signal_side; ///< show signals on left / driving / right side bool extra_dynamite; ///< extra dynamite bool road_stop_on_town_road; ///< allow building of drive-through road stops on town owned roads bool road_stop_on_competitor_road; ///< allow building of drive-through road stops on roads owned by competitors @@ -489,12 +489,12 @@ struct PathfinderSettings { bool forbid_90_deg; ///< forbid trains to make 90 deg turns bool reverse_at_signals; ///< whether to reverse at signals at all - byte wait_oneway_signal; ///< waitingtime in days before a oneway signal - byte wait_twoway_signal; ///< waitingtime in days before a twoway signal + uint8_t wait_oneway_signal; ///< waitingtime in days before a oneway signal + uint8_t wait_twoway_signal; ///< waitingtime in days before a twoway signal bool reserve_paths; ///< always reserve paths regardless of signal type. - byte wait_for_pbs_path; ///< how long to wait for a path reservation. - byte path_backoff_interval; ///< ticks between checks for a free path. + uint8_t wait_for_pbs_path; ///< how long to wait for a path reservation. + uint8_t path_backoff_interval; ///< ticks between checks for a free path. NPFSettings npf; ///< pathfinder settings for the new pathfinder YAPFSettings yapf; ///< pathfinder settings for the yet another pathfinder @@ -528,8 +528,8 @@ struct VehicleSettings { uint8_t freight_trains; ///< value to multiply the weight of cargo by bool dynamic_engines; ///< enable dynamic allocation of engine data bool never_expire_vehicles; ///< never expire vehicles - byte extend_vehicle_life; ///< extend vehicle life by this many years - byte road_side; ///< the side of the road vehicles drive on + uint8_t extend_vehicle_life; ///< extend vehicle life by this many years + uint8_t road_side; ///< the side of the road vehicles drive on uint8_t plane_crashes; ///< number of plane crashes, 0 = none, 1 = reduced, 2 = normal }; @@ -539,7 +539,7 @@ struct EconomySettings { bool bribe; ///< enable bribing the local authority EconomyType type; ///< economy type (original/smooth/frozen) uint8_t feeder_payment_share; ///< percentage of leg payment to virtually pay in feeder systems - byte dist_local_authority; ///< distance for town local authority, default 20 + uint8_t dist_local_authority; ///< distance for town local authority, default 20 bool exclusive_rights; ///< allow buying exclusive rights bool fund_buildings; ///< allow funding new buildings bool fund_roads; ///< allow funding local road reconstruction @@ -591,7 +591,7 @@ struct StationSettings { bool adjacent_stations; ///< allow stations to be built directly adjacent to other stations bool distant_join_stations; ///< allow to join non-adjacent stations bool never_expire_airports; ///< never expire airports - byte station_spread; ///< amount a station may spread + uint8_t station_spread; ///< amount a station may spread }; /** Default settings for vehicles. */ From 149592e4dd27706053ba8cb999c11eee6243c579 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 26 Feb 2024 18:45:02 +0000 Subject: [PATCH 016/695] Update: Translations from eints english (us): 9 changes by 2TallTyler chinese (simplified): 10 changes by WenSimEHRP luxembourgish: 21 changes by phreeze83 greek: 11 changes by Xertoveizer hungarian: 60 changes by titanicbobo german: 37 changes by frosch123 french: 9 changes by Bulest portuguese (brazilian): 74 changes by pasantoro polish: 5 changes by pAter-exe --- src/lang/brazilian_portuguese.txt | 148 +++++++++++++++--------------- src/lang/english_US.txt | 12 ++- src/lang/french.txt | 18 ++-- src/lang/german.txt | 68 +++++++------- src/lang/greek.txt | 12 ++- src/lang/hungarian.txt | 120 ++++++++++++------------ src/lang/luxembourgish.txt | 36 +++++--- src/lang/polish.txt | 10 +- src/lang/simplified_chinese.txt | 20 ++-- 9 files changed, 236 insertions(+), 208 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 5f94865013..196dc8ff7b 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -285,7 +285,7 @@ STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Título STR_TOOLTIP_SHADE :{BLACK}Encolher janela - mostrar apenas a barra de título STR_TOOLTIP_DEBUG :{BLACK}Mostrar informação de depuração de NewGRF STR_TOOLTIP_DEFSIZE :{BLACK}Redimensionar a janela para o tamanho padrão. Ctrl+Clique para salvar o tamanho atual como padrão -STR_TOOLTIP_STICKY :{BLACK}Marcar esta janela para não ser fechada pela tecla 'Fechar Todas as Janelas'. Ctrl+Clique para salvar o estado como padrão +STR_TOOLTIP_STICKY :{BLACK}Fixar esta janela para ela não ser fechada pela tecla 'Fechar Todas as Janelas'. Use Ctrl+Clique para salvar o estado como padrão STR_TOOLTIP_RESIZE :{BLACK}Clique e arraste para redimensionar esta janela STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Alternar entre janela grande/pequena STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de rolagem - desloca a lista para cima/baixo @@ -302,8 +302,8 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT :{BLACK}Mostrar ###length VEHICLE_TYPES STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP :{BLACK}Ativando este botão, os veículos ferroviários ocultos também serão mostrados STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE_TOOLTIP :{BLACK}Ativando este botão, os veículos rodoviários ocultos também serão mostrados -STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP_TOOLTIP :{BLACK}Ativando esse botão, as embarcações ocultas também serão mostradas -STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Ativando esse botão, as aeronaves ocultas também serão mostradas +STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP_TOOLTIP :{BLACK}Ativando este botão, as embarcações ocultas também serão mostradas +STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Ativando este botão, as aeronaves ocultas também serão mostradas # Query window STR_BUTTON_DEFAULT :{BLACK}Padrão @@ -382,7 +382,7 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Abrir a ###length 31 STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausar jogo STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Acelerar o jogo -STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opções e definições +STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opções e configurações STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Salvar, abrir ou abandonar jogo, sair do OpenTTD STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Abrir mapa, nova visualização, fluxo de cargas ou lista de sinais STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Abrir lista de localidades ou encontrar localidade @@ -881,7 +881,7 @@ STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL :{BIG_FONT}{BLAC STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM :{BIG_FONT}{BLACK}Métodos agrícolas aperfeiçoados na {INDUSTRY} deverão duplicar a produção! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}Produção de {STRING} {G nos na} {INDUSTRY} aumenta {COMMA}%! STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}A produção de {INDUSTRY} foi reduzida em 50% -STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Infestação de insetos causa destruição {G no na} {INDUSTRY}!{}Produção diminui em 50% +STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Infestação de insetos causa destruição {G no na} {INDUSTRY}!{}Produção diminui 50% STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}Produção de {STRING} {G nos na} {INDUSTRY} diminui {COMMA}%! ###length VEHICLE_TYPES @@ -936,10 +936,10 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLAC # Extra view window STR_EXTRA_VIEWPORT_TITLE :{WHITE}Janela de visualização {COMMA} -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Trocar de visualização +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Mudar a visualização STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copiar a localização da visualização principal para esta visualização -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Colar da visualização principal -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Colar a localização desta janela de visualização para a visualização principal +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Mudar a visualização principal +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copiar a localização desta visualização para a visualização principal # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Opções do Jogo @@ -1037,16 +1037,16 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :outra STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Aceleração de hardware -STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Marque esta caixa para permitir que o OpenTTD tente usar a aceleração de hardware. Qualquer mudança nesta configuração será aplicada somente após reiniciar o jogo +STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Marque esta caixa para permitir que o OpenTTD tente usar aceleração de hardware. Se modificada, esta configuração terá efeito somente após reiniciar o jogo STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}A configuração terá efeito somente após reiniciar o jogo STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync -STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para ativar v-sync na tela. Se modificada, esta configuração só terá efeito quado o jogo for reiniciado. Só funciona com aceleração de hardware habilitada +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para ativar v-sync na tela. Se modificada, esta configuração terá efeito somente após reiniciar o jogo. Só funciona com aceleração de hardware habilitada STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}"Driver" atual: {STRING} STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Tamanho da interface -STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Arraste o controle deslizante para definir o tamanho da interface. Ctrl+Arrastar para fazer um ajuste contínuo +STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Arraste o controle deslizante para definir o tamanho da interface. Ctrl+Arrastar para um ajuste contínuo STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Detetar automaticamente o tamanho STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Marque esta caixa para detetar automaticamente o tamanho da interface @@ -1056,7 +1056,7 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Marque e STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Usar a fonte sprite tradicional STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marque esta caixa se preferir usar o tipo de fonte tradicional de tamanho fixo. STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Fontes com bordas suaves -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marque esta caixa para fontes redimensionáveis com bordas suaves. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marque esta caixa para fontes redimensionáveis com contornos suaves. STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1066,7 +1066,7 @@ STR_GAME_OPTIONS_GUI_SCALE_5X :5x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Pesquisa automatizada STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participar de pesquisa automatizada -STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Quando ativado, o OpenTTD transmitirá uma pesquisa ao sair de um jogo +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Quando ativado, o OpenTTD enviará uma pesquisa ao sair de um jogo STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}Sobre pesquisa e privacidade STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Isso abre um navegador com mais informações sobre a pesquisa automatizada STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Pré-visualizar resultado da pesquisa @@ -1075,20 +1075,20 @@ STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Mostrar STR_GAME_OPTIONS_GRAPHICS :{BLACK}Gráficos STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Taxa de atualização da tela -STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Selecionar qual taxa de atualização da tela usar +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Selecione qual taxa de atualização da tela será usada STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz -STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Taxas de atualização superiores a 60Hz podem afetar o desempenho. +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Taxas de atualização superiores a 60Hz podem interferir no desempenho. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos base -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecionar qual conjunto de gráficos base usar (não pode ser alterado no jogo, só a partir do menu principal) +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecione qual conjunto de gráficos base usar (não pode ser alterado no jogo, só a partir do menu principal) STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Informações adicionais sobre o conjunto de gráficos base STR_GAME_OPTIONS_BASE_SFX :{BLACK}Conjunto de sons base -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Selecionar qual conjunto de sons base usar (não pode ser alterado no jogo, só a partir do menu principal) +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Selecione qual conjunto de sons base usar (não pode ser alterado no jogo, só a partir do menu principal) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Informações sobre o conjunto de sons base STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Conjunto de músicas base -STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selecionar qual conjunto de músicas base usar +STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selecione qual conjunto de músicas base usar STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Informação adicional sobre o conjunto de músicas base STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(não exitem plugins para integrar com as plataformas sociais instaladas) @@ -1098,7 +1098,7 @@ STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :{BLACK}Platafor STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Estado do plugin: STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_RUNNING :{GREEN}Executando -STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_FAILED :{RED}Falha na inicialização +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_FAILED :{RED}Falha ao inicializar STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_PLATFORM_NOT_RUNNING :{ORANGE}{STRING} não executando STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNLOADED :{RED}Descarregado STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :{RED}Plugin duplicado @@ -1107,7 +1107,7 @@ STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Assinatura STR_BASESET_STATUS :{STRING} {RED}({NUM} arquivo{P "" s} em falta/corrompido{P "" s}) -STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Falha ao obter a lista de resoluções suportadas +STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Falha ao obter uma lista de resoluções suportadas STR_ERROR_FULLSCREEN_FAILED :{WHITE}Modo de tela cheia falhou # Custom currency window @@ -1189,7 +1189,7 @@ STR_SUBSIDY_X4 :x4 STR_CLIMATE_TEMPERATE_LANDSCAPE :Clima temperado STR_CLIMATE_SUB_ARCTIC_LANDSCAPE :Clima subárctico STR_CLIMATE_SUB_TROPICAL_LANDSCAPE :Clima subtropical -STR_CLIMATE_TOYLAND_LANDSCAPE :"Clima" Terra dos Brinquedos +STR_CLIMATE_TOYLAND_LANDSCAPE :Paisagem Terra dos Brinquedos ###length 7 STR_TERRAIN_TYPE_VERY_FLAT :Muito Plano @@ -1211,27 +1211,27 @@ STR_WARNING_NO_SUITABLE_AI :{WHITE}Não exi # Settings tree window STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Configurações STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtro: -STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Expandir todas -STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Colapsar todas +STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Expandir tudo +STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Colapsar tudo STR_CONFIG_SETTING_RESET_ALL :{BLACK}Restaurar todos os valores STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(sem explicação disponível) STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{ORANGE}{STRING}{POP_COLOUR} STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor padrão: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipo de configuração: {ORANGE}{STRING} -STR_CONFIG_SETTING_TYPE_CLIENT :Configuração de cliente (não é incluída em jogos salvos; afeta todos os jogos) +STR_CONFIG_SETTING_TYPE_CLIENT :Configuração de cliente (não é armazenada em jogos salvos; afeta todos os jogos) STR_CONFIG_SETTING_TYPE_GAME_MENU :Configuração do jogo (armazenado no jogo salvo; afeta apenas novos jogos) STR_CONFIG_SETTING_TYPE_GAME_INGAME :Configuração do jogo (armazenado no jogo salvo; afeta apenas o jogo atual) -STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Configurações da empresa (armazenadas no jogo salvo; afeta apenas novos jogos) -STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Configurações da empresa (armazenadas no jogo salvo; afeta apenas a empresa atual) +STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Configuração da empresa (armazenada no jogo salvo; afeta apenas novos jogos) +STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Configuração da empresa (armazenada no jogo salvo; afeta apenas a empresa atual) STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Cuidado! -STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Essa ação irá restaurar todas as configurações para os valores padrão.{}Tem certeza que deseja continuar? +STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Esta ação irá restaurar todas as configurações do jogo para os seus valores padrão.{}Você tem certeza que deseja continuar? STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoria: STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo: STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Restringe a lista abaixo usando filtros pré-definidos STR_CONFIG_SETTING_RESTRICT_BASIC :Básico (mostrar apenas as configurações importantes) -STR_CONFIG_SETTING_RESTRICT_ADVANCED :Avançado (mostra a maioria das definições) -STR_CONFIG_SETTING_RESTRICT_ALL :Especialista (mostrar todas as definições, incluindo as estranhas) +STR_CONFIG_SETTING_RESTRICT_ADVANCED :Avançado (mostrar a maioria das configurações) +STR_CONFIG_SETTING_RESTRICT_ALL :Especialista (mostrar todas as configurações, incluindo as estranhas) STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Configurações com um valor diferente do padrão STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Configurações com um valor diferente das preferências para novos jogos @@ -1262,7 +1262,7 @@ STR_CONFIG_SETTING_COMPANIES_ALL :Todas as empres ###length 3 STR_CONFIG_SETTING_NONE :Nenhum STR_CONFIG_SETTING_ORIGINAL :Original -STR_CONFIG_SETTING_REALISTIC :Realístico +STR_CONFIG_SETTING_REALISTIC :Realista ###length 3 STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Esquerda @@ -1271,7 +1271,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Direita STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}segundo{P 0 "" s} -STR_CONFIG_SETTING_INFINITE_MONEY :Dinheiro infinito: {STRING} +STR_CONFIG_SETTING_INFINITE_MONEY :Dinheiro ilimitado: {STRING} STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Permite gastos ilimitados e desabilita a falência de empresas STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Valor máximo do empréstimo inicial: {STRING} @@ -1320,7 +1320,7 @@ STR_CONFIG_SETTING_CITY_APPROVAL :Atitude da auto STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Define de que forma o ruído sonoro e os danos ambientais causados pelas empresas afetam a sua classificação na localidade e as futuras ações de construção na localidade STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Limite de altura do mapa: {STRING} -STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Define a altura máxima do terreno do mapa. Com "(auto)" um bom valor será escolhido após a geração do terreno +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Define a altura máxima do terreno do mapa. Com "(automático)" um valor adequado será escolhido após a geração do terreno STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(automático) @@ -1333,7 +1333,7 @@ STR_CONFIG_SETTING_CATCHMENT :Permitir áreas STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Usa área de abrangência de tamanhos diferentes para diferentes tipos de estações e aeroportos STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Estações de empresas podem servir indústrias com estações neutras anexadas: {STRING} -STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Se ativado, indústrias com estações incluídas (como as Petrolíferas) podem ser servidas por estações da empresa que estão nas redondezas. Quando desativado, essas indústrias só podem ser servidas pela sua própria estação. Qualquer estação da empresa nas redondezas não poderá servir as indústrias e a estação incluída não poderá servir outra entidade senão a própria indústria +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Quando ativado, indústrias com estações incluídas (como as Petrolíferas) podem ser servidas por estações da empresa construídas nas proximidades. Quando desativado, essas indústrias só podem ser servidas pela sua própria estação. Qualquer estação da empresa nas redondezas não poderá servir a indústria e a estação incluída não poderá atender outra senão a própria indústria STR_CONFIG_SETTING_EXTRADYNAMITE :Permitir a remoção de mais estradas, pontes e túneis das cidades: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Torna mais fácil remover edifícios e infraestruturas das localidades @@ -1365,7 +1365,7 @@ STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permitir a uni STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite adicionar partes a uma estação sem tocar diretamente nas partes já existentes usando Ctrl+Clique quando for adicionar partes novas STR_CONFIG_SETTING_INFLATION :Inflação: {STRING} -STR_CONFIG_SETTING_INFLATION_HELPTEXT :Permitir inflação na economia, na qual os custos aumentam ligeiramente mais depressa do que os recebimentos +STR_CONFIG_SETTING_INFLATION_HELPTEXT :Permitir inflação na economia, na qual os custos aumentam ligeiramente mais depressa do que as receitas STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Comprimento máximo de pontes: {STRING} STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Comprimento máximo para construção de pontes @@ -1387,7 +1387,7 @@ STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Área plana ao STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Quantidade de terreno plano à volta de uma indústria. Isto garante que um espaço vazio permanecerá disponível em torno da indústria para a construção de linhas, etc. STR_CONFIG_SETTING_MULTIPINDTOWN :Permitir várias indústrias semelhantes por localidade: {STRING} -STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normalmente, localidades não aceitam mais de uma indústria de cada tipo. Se ativado, permite várias indústrias do mesmo tipo na mesma localidade +STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normalmente, localidades não aceitam mais de uma indústria de cada tipo. Com esta configuração, será possível existir várias indústrias do mesmo tipo na mesma localidade STR_CONFIG_SETTING_SIGNALSIDE :Mostrar sinais: {STRING} STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Escolher em que lado da via colocar sinais @@ -1401,8 +1401,8 @@ STR_CONFIG_SETTING_SHOWFINANCES :Mostrar janela STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Mostrar janela de finanças no fim do período: {STRING} ###length 2 -STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Se ativado, a janela de finanças é aberta ao final de cada ano para permitir uma inspeção fácil do estado financeiro da empresa -STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Se ativado, a janela de finanças é aberta no final de cada período permitindo uma inspeção fácil do estado financeiro da empresa +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Se ativado, a janela de finanças é aberta ao final de cada ano, permitindo uma inspeção fácil do estado financeiro da empresa +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Se ativado, a janela de finanças é aberta no final de cada período, permitindo uma inspeção fácil do estado financeiro da empresa STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Novas ordens são 'sem parar' por padrão: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalmente, um veículo irá parar em cada estação por onde passa. Ativando esta configuração, o veículo passará por todas as estações na sua rota, sem parar, até o destino final. Esta opção define somente um modo padrão para novas ordens. Ordens individuais podem ser definidas explicitamente para qualquer um dos dois comportamentos @@ -1415,7 +1415,7 @@ STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :meio STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :fim STR_CONFIG_SETTING_AUTOSCROLL :Mover a janela quando o cursor está na borda do mapa: {STRING} -STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Quando ativado, a visualização irá se mover quando o mouse se aproximar das bordas da janela +STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Quando ativado, as visualizações começarão a se mover quando o mouse se aproximar das bordas da janela ###length 4 STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Desativado STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Visualização principal, apenas em tela cheia @@ -1455,8 +1455,8 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Nenhum STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reduzido STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal -STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Permitir passagens de nível nas estradas ou trilhos de outras empresas: {STRING} -STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Permitir a construção de passagens de nível nas estradas ou trilhos de outras empresas +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Permitir passagens de nível com estradas ou trilhos dos concorrentes: {STRING} +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Permitir a construção de passagens de nível nas estradas ou trilhos que pertencem aos concorrentes STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permitir estações de passagem nas estradas das localidades: {STRING} STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Permitir a construção de estações de passagem nas estradas que pertencem às localidades @@ -1474,7 +1474,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Cor inicial sec STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Escolher a cor inicial secundária para a empresa, se um NewGRF precisar usá-la. STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeroportos nunca expiram: {STRING} -STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Se ativado, cada tipo de aeroporto ficará disponível para sempre após a sua introdução +STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Quando ativada, esta configuração torna cada tipo de aeroporto disponível para sempre após a sua introdução STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Avisar se o veículo está perdido: {STRING} STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :Mostrar mensagens sobre veículos que não conseguem encontrar um caminho para o destino ordenado @@ -1492,7 +1492,7 @@ STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Quando ativado, STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Quando ativado, uma mensagem é enviada quando um veículo não gerou qualquer lucro durante um período STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Veículos nunca saem de linha: {STRING} -STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Quanto ativado, todos os modelos de veículos permanecerão disponíveis para sempre após a sua introdução +STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Quando ativado, todos os modelos de veículos permanecerão disponíveis para sempre após a sua introdução STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Unidades de tempo: {STRING} STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecionar as unidades de tempo para o jogo. Isto não pode ser alterado posteriormente.{}{}O modo clássico no OpenTTD é baseado em um calendário, em que um ano é composto de 12 meses e cada mês tem 28-31 dias.{}{}No tempo baseado no relógio de parede, a produção de carga e as finanças são baseadas em incrementos de um minuto, que tem aproximadamente a mesma duração de um mês de 30 dias no modo baseado em calendário. Esses incrementos são agrupados em períodos de 12 minutos, equivalentes a um ano no modo baseado em calendário.{}{}Nos dois modos, há sempre um calendário clássico, que é usado para datas de introdução de veículos, casas e outras infraestruturas. @@ -1543,7 +1543,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Espessura da li STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostrar o nome do NewGRF na janela de comprar veículos: {STRING} STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Adiciona uma linha à janela de aquisição de veículos, mostrando a qual NewGRF pertence o veículo selecionado. STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as cargas que os veículos podem transportar nas janelas de listagem {STRING} -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Se ativado, a carga transportável do veículo aparecerá acima dele nas listas de veículos +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Se ativado, a carga transportável pelo veículo aparecerá acima dele nas listas de veículos STR_CONFIG_SETTING_LANDSCAPE :Clima: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os climas definem a jogabilidade básica com diferentes cargas e requerimentos para o crescimento das localidades. NewGRFs e Scripts de Jogo permitem um controle mais fino @@ -1645,17 +1645,17 @@ STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Mover mapa com STR_CONFIG_SETTING_SCROLLMODE_RMB :Mover mapa com Botão Direito Mouse STR_CONFIG_SETTING_SCROLLMODE_LMB :Move mapa com Botão Esquerdo Mouse -STR_CONFIG_SETTING_SMOOTH_SCROLLING :Suavizar rolamento da visualização: {STRING} -STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla como a visualização principal se move para uma localização específica ao clicar no minimapa ou ao dar um comando para ir a um objeto específico no mapa. Se ativado, a visualização principal se move suavemente, se desativado a visualização salta diretamente para o ponto escolhido +STR_CONFIG_SETTING_SMOOTH_SCROLLING :Suavizar deslocamento da visualização: {STRING} +STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla como a visualização principal se move para uma localização específica ao clicar no minimapa ou quando é dado um comando para ir até um objeto específico no mapa. Se ativado, a visualização principal se move suavemente, se desativado a visualização salta diretamente para o ponto escolhido STR_CONFIG_SETTING_MEASURE_TOOLTIP :Mostrar medidas quando usar as ferramentas de construção: {STRING} -STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Mostrar as distâncias em quadrados e diferenças de altura quando Clicar+Arrastar nas ações de construção +STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Mostrar distâncias em quadrados e diferenças de altura quando Clicar+Arrastar nas ações de construção STR_CONFIG_SETTING_LIVERIES :Mostrar pinturas específicas do tipo de veículo: {STRING} STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Controla a utilização de pinturas específicas por tipo de veículo (em vez de pinturas por empresa) ###length 3 STR_CONFIG_SETTING_LIVERIES_NONE :Nenhum -STR_CONFIG_SETTING_LIVERIES_OWN :Minha empresa +STR_CONFIG_SETTING_LIVERIES_OWN :Própria empresa STR_CONFIG_SETTING_LIVERIES_ALL :Todas as empresas STR_CONFIG_SETTING_PREFER_TEAMCHAT :Preferir chat de equipe com : {STRING} @@ -1686,8 +1686,8 @@ STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Nunca STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Perguntar STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Permitir -STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Simulação de clique com botão direito: {STRING} -STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Selecionar o método para simular os cliques do botão direito do mouse +STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulação de clique com botão direito: {STRING} +STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Selecionar o método para emular os cliques do botão direito do mouse ###length 3 STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+Clique STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+Clique @@ -1698,7 +1698,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Fecha uma janel ###length 3 STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_NO :Não STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES :Sim -STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :Sim, exceto as aderidas +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :Sim, exceto fixadas STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Usar o formato de data {STRING} ao salvar os arquivos de jogos STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Formato da data nos nomes dos jogos salvos @@ -1801,19 +1801,19 @@ STR_CONFIG_SETTING_MAX_SHIPS :Número máximo STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT :Número máximo de embarcações que uma empresa pode ter STR_CONFIG_SETTING_AI_BUILDS_TRAINS :Desativar trens para o computador: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT :Se ativado, não permite que jogadores controlados pelo computador construam trens +STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT :Quando ativada, esta configuração não permite a construção de trens por um competidor controlado por IA STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :Desativar veículos rodoviários para o computador: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :Se ativado, não permite a construção de veículos rodoviários por um jogador controlado pelo computador +STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :Quando ativada, esta configuração não permite a construção de veículos rodoviários por um competidor controlado por IA STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :Desativar aeronaves para o computador: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Se ativado, não permite a construção de aeronaves por um jogador controlado pelo computador +STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Quando ativada, esta configuração não permite a construção de aeronaves por um competidor controlado por IA STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desativar embarcação para o computador: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Se ativado, não permite que jogadores controlados pelo computador construam embarcações +STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Quando ativada, esta configuração não permite a construção de embarcações por um competidor controlado por IA STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permitir IA's em multijogador: {STRING} -STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite que jogadores controlados pelo computador participem de jogos multijogador +STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite que competidores controlados por IA participem de jogos multijogador STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes antes de scripts serem suspensos: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Número máximo de passos computacionais que um script pode executar em um turno @@ -1840,25 +1840,25 @@ STR_CONFIG_SETTING_NOSERVICE :Desativar manut STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Quando ativado, veículos não recebem manutenção se não puderem quebrar STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Penalidade de velocidade de carregamento para trens que são mais longos que a estação: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quando ativado, os trens que são muito compridos para a estação demoram mais tempo para carregar do que um trem que cabe na estação. Esta definição não afeta a geração de rotas. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quando ativado, os trens que são muito compridos para a estação demoram mais tempo para carregar do que um trem que cabe na estação. Esta configuração não afeta a geração de rotas. STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ativar limites de velocidade para vagões: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Quando ativado, aplica os limites de velocidade dos vagões para definir a velocidade máxima de um trem STR_CONFIG_SETTING_DISABLE_ELRAILS :Desativar ferrovias elétricas: {STRING} -STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Se ativado, essa configuração desativa a necessidade de eletrificar os trilhos para que locomotivas elétricas possam utilizá-los +STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Quando ativada, esta configuração desativa a necessidade de eletrificar os trilhos para que locomotivas elétricas possam utilizá-los STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Chegada do primeiro veículo à estação do jogador: {STRING} STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Mostrar um jornal quando o primeiro veículo chegar a uma estação nova do jogador -STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Chegada do primeiro veículo na estação concorrente: {STRING} +STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Chegada do primeiro veículo à estação de um concorrente: {STRING} STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Mostrar um jornal quando o primeiro veículo chegar a uma estação nova de um concorrente STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Acidentes / desastres: {STRING} STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Mostrar um jornal quando ocorrem acidentes ou desastres STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :Acidentes de veículos dos concorrentes: {STRING} -STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :Mostrar um jornal para os concorrentes sobre veículos acidentados +STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :Mostrar um jornal sobre veículos acidentados para concorrentes STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Informações da empresa: {STRING} STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Mostrar um jornal quando uma nova empresa é criada ou quando empresas estão à beira da falência @@ -1953,13 +1953,13 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Aleatório STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Localidades podem construir estradas: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Permitir que localidades construam estradas para crescimento. Desative para prevenir a construção de estradas pelas autoridades locais STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Localidades podem construir passagens de nível: {STRING} -STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Se ativado, permite que as localidades construam ruas que atravessam ferrovias +STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Quando ativada, esta configuração permite que as localidades construam passagens de nível STR_CONFIG_SETTING_NOISE_LEVEL :Limitar a localização do aeroporto em função do nível de ruído: {STRING} -STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Permitir que as localidades impeçam a construção de aeroportos em função da aceitação do nível de ruído, que é baseado no total de habitantes da localidade e no tamanho e distância do aeroporto. Se esta definição estiver desativada, as localidades permitirão apenas dois aeroportos, a menos que a atitude da autoridade local esteja definida como "Permissiva" +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Permitir que as localidades impeçam a construção de aeroportos em função da aceitação do nível de ruído, que é baseado no total de habitantes da localidade e no tamanho e distância do aeroporto. Se esta configuração estiver desativada, as localidades permitirão apenas dois aeroportos, a menos que a atitude da autoridade local esteja definida como "Permissiva" STR_CONFIG_SETTING_TOWN_FOUNDING :Fundar localidades no jogo: {STRING} -STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Se ativado, permite aos jogadores fundar novas localidades no jogo +STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Quando ativada, esta configuração permite aos jogadores fundar novas localidades no jogo ###length 3 STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Proibido STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permitido @@ -1983,13 +1983,13 @@ STR_CONFIG_SETTING_TOOLBAR_POS :Posição da ba STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Posição horizontal da barra de ferramentas principal na parte superior da tela STR_CONFIG_SETTING_STATUSBAR_POS :Posição da barra de status: {STRING} STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT :Posição horizontal da barra de status na parte inferior da tela -STR_CONFIG_SETTING_SNAP_RADIUS :Distância mínima para adesão automática entre as janelas: {STRING} -STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Distância entre janelas antes que a janela que está a ser movida seja automaticamente alinhada com as janelas mais próximas +STR_CONFIG_SETTING_SNAP_RADIUS :Distância para alinhamento de janelas: {STRING} +STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Distância entre janelas para que a janela que está sendo movida se alinhe automaticamente às janelas mais próximas STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} pixel{P 0 "" s} ###setting-zero-is-special STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Desativado -STR_CONFIG_SETTING_SOFT_LIMIT :Número máximo de janelas livres: {STRING} -STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Número de janelas abertas não aderidas antes que as janelas antigas sejam automaticamente fechadas, liberando espaço para novas janelas +STR_CONFIG_SETTING_SOFT_LIMIT :Número máximo de janelas não fixadas: {STRING} +STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Número de janelas não fixadas abertas antes que as janelas antigas sejam automaticamente fechadas, liberando espaço para novas janelas STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} ###setting-zero-is-special STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :desativado @@ -2129,7 +2129,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Indústrias STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Distribuição de Carga STR_CONFIG_SETTING_ENVIRONMENT_TREES :Árvores STR_CONFIG_SETTING_AI :Competidores -STR_CONFIG_SETTING_AI_NPC :Jogadores IA +STR_CONFIG_SETTING_AI_NPC :Competidores IA STR_CONFIG_SETTING_NETWORK :Rede STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Gerador de rotas para os trens: {STRING} @@ -2144,7 +2144,7 @@ STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permitir que os STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recomendado) -STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Alterar valor +STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Alterar valor da definição # Config errors STR_CONFIG_ERROR :{WHITE}Erro no arquivo de configuração... @@ -2477,7 +2477,7 @@ STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Nome do servido STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Visibilidade STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Se outras pessoas podem ver seu servidor na lista pública STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Código de convite -STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Código de convite que outros jogadores podem usar para se juntar a esse servidor +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Código de convite que outros jogadores podem usar para acessar este servidor STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}Tipo de conexão STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Se e como seu servidor pode ser acessado por outros STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Jogador @@ -2525,7 +2525,7 @@ STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Sim, ape STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Sim, não perguntar novamente STR_NETWORK_ASK_SURVEY_CAPTION :Participar de pesquisa automatizada? -STR_NETWORK_ASK_SURVEY_TEXT :Você gostaria de participar da pesquisa automatizada?{}O OpenTTD transmitirá uma pesquisa ao sair do jogo.{}Você pode alterar isso a qualquer momento em "Opções do jogo". +STR_NETWORK_ASK_SURVEY_TEXT :Você gostaria de participar da pesquisa automatizada?{}O OpenTTD enviará uma pesquisa ao sair de um jogo.{}Você pode alterar isso a qualquer momento em "Opções do jogo". STR_NETWORK_ASK_SURVEY_PREVIEW :Pré-visualizar resultado da pesquisa STR_NETWORK_ASK_SURVEY_LINK :Sobre pesquisa e privacidade STR_NETWORK_ASK_SURVEY_NO :Não @@ -3668,7 +3668,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Financiar a construção de novos edifícios na localidade.{}Produz um aumento temporário no crescimento desta localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Comprar os direitos exclusivos de transporte na localidade por 12 meses.{}A autoridade local não permitirá que passageiros e cargas usem as estações dos concorrentes. Um suborno bem sucedido feito por um concorrente irá cancelar este contrato.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Comprar os direitos exclusivos de transporte na localidade por 12 minutos.{}A autoridade local não permitirá que passageiros e cargas usem as estações dos concorrentes. Um suborno bem sucedido feito por um concorrente irá cancelar este contrato.{}{POP_COLOUR}Custo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Subornar a autoridade local para aumentar a sua avaliação e anular o direito exclusivo de transporte da concorrência, correndo o risco de uma penalidade severa se for apanhado.{}{POP_COLOUR}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Subornar a autoridade local para aumentar a sua avaliação e anular um direito exclusivo de transporte de um concorrente, correndo o risco de uma penalidade severa se for apanhado.{}{POP_COLOUR}Custo: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} - Objetivos @@ -4614,7 +4614,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Ir para o depó STR_ORDER_GO_TO_NEAREST_HANGAR :Ir para o hangar mais próximo STR_ORDER_CONDITIONAL :Saltar ordem condicional STR_ORDER_SHARE :Compartilhar ordens -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Inserir uma nova ordem antes da ordem selecionada ou adicionar no final da lista. Ctrl+Clique em uma estação para 'carga completa de qualquer carga', em um ponto de controle para inverter a definição padrão 'sem parar' ou em um depósito para 'desagrupar'. Clique em outro veículo para copiar suas ordens ou Ctrl+Clique para compartilhar as ordens. Uma ordem de depósito desativa a manutenção automática do veículo +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Inserir uma nova ordem antes da ordem selecionada ou adicionar no final da lista. Ctrl+Clique em uma estação para 'carga completa de qualquer carga', em um ponto de controle para inverter a configuração padrão 'sem parar' ou em um depósito para 'desagrupar'. Clique em outro veículo para copiar suas ordens ou Ctrl+Clique para compartilhar as ordens. Uma ordem de depósito desativa a manutenção automática do veículo STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Mostrar todos os veículos que compartilham essa programação @@ -4767,7 +4767,7 @@ STR_DATE_YEAR_TOOLTIP :{BLACK}Selecion STR_AI_DEBUG :{WHITE}Depuração de IA/Script do Jogo STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM}) STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Nome do script -STR_AI_DEBUG_SETTINGS :{BLACK}Definições +STR_AI_DEBUG_SETTINGS :{BLACK}Configurações STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Alterar as configurações do script STR_AI_DEBUG_RELOAD :{BLACK}Recarregar IA STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Interromper a IA, recarregar o script e reiniciar a IA @@ -4796,7 +4796,7 @@ STR_AI_CONFIG_HUMAN_PLAYER :Jogador humano STR_AI_CONFIG_RANDOM_AI :IA aleatória STR_AI_CONFIG_NONE :(nenhum) STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM} -STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Número máx. de competidores: {ORANGE}{COMMA} +STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Número máximo de competidores: {ORANGE}{COMMA} STR_AI_CONFIG_COMPETITORS_INTERVAL :{LTBLUE}Intervalo entre o início dos competidores: {ORANGE}{COMMA} minuto{P "" s} STR_AI_CONFIG_MOVE_UP :{BLACK}Mover para cima diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 9acc4af1bc..ca604684c2 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1117,6 +1117,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Decrease STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Increase the amount of your currency for one Pound (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Set the exchange rate of your currency for one Pound (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Separator: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Set the separator for your currency STR_CURRENCY_PREFIX :{LTBLUE}Prefix: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Set the prefix string for your currency @@ -1272,10 +1274,10 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Infinite money: STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Allow unlimited spending and disable bankruptcy of companies STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximum initial loan: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account). If set to "No loan", no money will be available unless provided by a Game Script or the "Infinite money" setting. STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :No loan {RED}Requires Game Script to provide initial funds +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :No loan STR_CONFIG_SETTING_INTEREST_RATE :Interest rate: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Loan interest rate; also controls inflation, if enabled @@ -1492,7 +1494,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Vehicles never STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :When enabled, all vehicle models remain available forever after their introduction STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Timekeeping: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Select the timekeeping units of the game. This cannot be changed later.{}{}Calendar-based is the classic OpenTTD experience, with a year consisting of 12 months, and each month having 28-31 days.{}{}In Wallclock-based time, vehicle movement, cargo production, and financials are instead based on one-minute increments, which is about as long as a 30 day month takes in Calendar-based mode. These are grouped into 12-minute periods, equivalent to a year in Calendar-based mode.{}{}In either mode there is always a classic calendar, which is used for introduction dates of vehicles, houses, and other infrastructure. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Select the timekeeping units of the game. This cannot be changed later.{}{}Calendar-based is the classic OpenTTD experience, with a year consisting of 12 months, and each month having 28-31 days.{}{}In Wallclock-based time, cargo production and financials are instead based on one-minute increments, which is about as long as a 30 day month takes in Calendar-based mode. These are grouped into 12-minute periods, equivalent to a year in Calendar-based mode.{}{}In either mode there is always a classic calendar, which is used for introduction dates of vehicles, houses, and other infrastructure. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendar STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Wallclock @@ -5808,6 +5810,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}m +STR_CURRENCY_SHORT_GIGA :{NBSP}bn +STR_CURRENCY_SHORT_TERA :{NBSP}tn STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/french.txt b/src/lang/french.txt index f4806dc117..0dbaf25d3a 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1703,9 +1703,9 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :Oui, sauf les f STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Utiliser le format de date {STRING} pour le nom des sauvegardes STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Format de la date dans les noms des fichiers de sauvegarde ###length 3 -STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :Long (31 Déc 2008) -STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :Court (31-12-2008) -STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31) +STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :Long (31 Déc 2023) +STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :Court (31-12-2023) +STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2023-12-31) STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Pause automatique en début de nouvelle partie{NBSP}: {STRING} STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Lorsqu'il est activé, la partie sera mise en pause automatiquement au démarrage, afin de permettre une étude approfondie de la carte @@ -2252,7 +2252,7 @@ STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Modifier STR_CHEAT_CHANGE_DATE :{LTBLUE}Changer la date{NBSP}: {ORANGE}{DATE_SHORT} STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Modifier l'année courante STR_CHEAT_SETUP_PROD :{LTBLUE}Permettre la modification des valeurs de production{NBSP}: {ORANGE}{STRING} -STR_CHEAT_STATION_RATING :{LTBLUE}Fixer la qualité de service de la station à 100 % : {ORANGE}{STRING} +STR_CHEAT_STATION_RATING :{LTBLUE}Fixer la qualité de service de la station à 100% : {ORANGE}{STRING} # Livery window STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Couleur @@ -2264,14 +2264,14 @@ STR_LIVERY_SHIP_TOOLTIP :{BLACK}Montrer STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Montrer les livrées d'aéronefs STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Afficher les couleurs des groupes de trains STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Afficher les couleurs des groupes de véhicules -STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Afficher les couleurs des groupes de bateaux +STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Afficher les couleurs des groupes de naivres STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Afficher les couleurs des groupes d'avions STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Choisir la couleur primaire de la livrée sélectionnée. Ctrl-clic pour appliquer cette couleur à toutes les livrées. STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Choisir la couleur secondaire de la livrée sélectionnée. Ctrl-clic pour appliquer cette couleur à toutes les livrées. STR_LIVERY_PANEL_TOOLTIP :{BLACK}Sélectionner la livrée à modifier ou plusieurs d'entre elles par Ctrl-clic. Cliquer sur la case à cocher pour en activer l'utilisation ou non. STR_LIVERY_TRAIN_GROUP_EMPTY :Aucun groupe de trains STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Aucun groupe de véhicules -STR_LIVERY_SHIP_GROUP_EMPTY :Aucun groupe de bateaux +STR_LIVERY_SHIP_GROUP_EMPTY :Aucun groupe de navires STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Aucun groupe d'avions ###length 23 @@ -3906,7 +3906,7 @@ STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Rachat d STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Racheter de force cette compagnie STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nouveau visage -STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Choix d'un nouveau visage pour le P.D.G. +STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Choisir un nouveau visage pour le P.D.G. STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Couleur STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Changer la couleur des véhicules STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Nom de la société @@ -4112,7 +4112,7 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Acheter ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :Achat et réaménagement du véhicule STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Acheter et réaménager -STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :Acheter et réaménager le bateau +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Acheter et réaménager le navire STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Acheter et réaménager ###length VEHICLE_TYPES @@ -4219,7 +4219,7 @@ STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Copier u ###length VEHICLE_TYPES STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Acheter une copie d'un train et de ses wagons. Cliquer ici puis sur un train dans ou hors d'un dépôt.{}Ctrl-clic pour partager les ordres.{}Shift-clic pour afficher seulement le coût estimé. STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Acheter une copie d'un véhicule routier. Cliquer ici puis sur un véhicule routier dans ou hors d'un dépôt.{}Ctrl-clic pour partager les ordres.{}Shift-clic pour afficher seulement le coût estimé. -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Acheter une copie du bateau. Cliquer sur ce bouton et sur un bateau dans ou en dehors du dépôt. Ctrl+Clic pour partager les ordres. Utiliser Shift pour afficher le coût estimé seulement. +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Acheter une copie du navire. Cliquer sur ce bouton et sur un navire dans ou en dehors du dépôt. Ctrl+Clic pour partager les ordres. Utiliser Shift pour afficher le coût estimé seulement. STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Acheter une copie d'un aéronef. Cliquer ici puis sur un aéronef dans ou hors d'un hangar.{}Ctrl-clic pour partager les ordres.{}Shift-clic pour afficher seulement le coût estimé. ###length VEHICLE_TYPES diff --git a/src/lang/german.txt b/src/lang/german.txt index c341aa817d..3a2457df67 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -265,7 +265,7 @@ STR_UNITS_MONTHS :{NUM}{NBSP}Mona STR_UNITS_MINUTES :{NUM}{NBSP}minute{P "" n} STR_UNITS_YEARS :{NUM}{NBSP}Jahr{P "" e} -STR_UNITS_PERIODS :{NUM}{NBSP}Zeitr{P "aum" "äume"} +STR_UNITS_PERIODS :{NUM}{NBSP}Zykl{P "us" "en"} # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filter: @@ -332,9 +332,9 @@ STR_SORT_BY_TYPE :Typ STR_SORT_BY_TRANSPORTED :Transportiert STR_SORT_BY_NUMBER :Nummer STR_SORT_BY_PROFIT_LAST_YEAR :Gewinn im letzten Jahr -STR_SORT_BY_PROFIT_LAST_PERIOD :Gewinn im letzten Quartal +STR_SORT_BY_PROFIT_LAST_PERIOD :Gewinn im letzten Zyklus STR_SORT_BY_PROFIT_THIS_YEAR :Gewinn in diesem Jahr -STR_SORT_BY_PROFIT_THIS_PERIOD :Gewinn in diesem Zeitraum +STR_SORT_BY_PROFIT_THIS_PERIOD :Gewinn in diesem Zyklus STR_SORT_BY_AGE :Alter STR_SORT_BY_RELIABILITY :Zuverlässigkeit STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Gesamtkapazität pro Fracht @@ -362,13 +362,13 @@ STR_SORT_BY_POPULATION :Bevölkerung STR_SORT_BY_RATING :Bewertung STR_SORT_BY_NUM_VEHICLES :Anzahl der Fahrzeuge STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Gewinn im letzten Jahr -STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD :Gesamter Gewinn im letzten Quartal +STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD :Gesamter Gewinn im letzten Zyklus STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Gewinn in diesem Jahr -STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Gesamter Gewinn in diesem Zeitraum +STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Gesamter Gewinn in diesem Zyklus STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Durchschnittlicher Gewinn im letzten Jahr -STR_SORT_BY_AVERAGE_PROFIT_LAST_PERIOD :Durchschnittlicher Gewinn im letzten Zeitraum +STR_SORT_BY_AVERAGE_PROFIT_LAST_PERIOD :Durchschnittlicher Gewinn im letzten Zyklus STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Durchschnittlicher Gewinn in diesem Jahr -STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Durchschnittlicher Gewinn in diesem Zeitraum +STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Durchschnittlicher Gewinn in diesem Zyklus # Group by options for vehicle list STR_GROUP_BY_NONE :Keine @@ -667,10 +667,10 @@ STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Gesamt: ###next-name-looks-similar STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}Anzahl der Fahrzeuge, die im letzten Jahr einen Gewinn erzielt haben. Diese beinhaltet Straßenfahrzeuge, Züge, Schiffe und Flugzeuge -STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Anzahl der Fahrzeuge, die im letzten Zeitraum einen Gewinn erzielt haben. Diese beinhaltet Straßenfahrzeuge, Züge, Schiffe und Flugzeuge +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Anzahl der Fahrzeuge, die im letzten Zyklus einen Gewinn erzielt haben. Dies beinhaltet Straßenfahrzeuge, Züge, Schiffe und Flugzeuge STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Anzahl vor kurzem genutzter Stationen (wenn Stationen verschiedener Typen verbunden sind, werden sie trotzdem einzeln gezählt) -STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}Der Gewinn des unptofitabelsten Fahrzeugs. Hierbei werden nur Fahrzeuge älter als 2 Jahre mit einbezogen. -STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}Der Gewinn des unptofitabelsten Fahrzeugs. Hierbei werden nur Fahrzeuge älter als 2 Quartale mit einbezogen. +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}Der Gewinn des unprofitabelsten Fahrzeugs. Hierbei werden nur Fahrzeuge älter als 2 Jahre mit einbezogen. +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}Der Gewinn des unprofitabelsten Fahrzeugs. Hierbei werden nur Fahrzeuge älter als 2 Zyklen mit einbezogen. STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Geringste Quartalseinnahmen in den letzten 3 Jahren STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Höchste Quartalseinnahmen in den letzten 3 Jahren STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Im letzten Jahr gelieferte Frachteinheiten @@ -903,8 +903,8 @@ STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} wird sehr alt und sollte dringend ersetzt werden STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} findet keinen Weg zum Vorankommen STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} hat sich verirrt -STR_NEWS_VEHICLE_UNPROFITABLE_YEAR :{WHITE} Gewinn durch {VEHICLE} betrug {CURRENCY_LONG} im letzten Jahr -STR_NEWS_VEHICLE_UNPROFITABLE_PERIOD :{WHITE}Gewinn durch {VEHICLE} betrug {CURRENCY_LONG} im letzten Zeitraum +STR_NEWS_VEHICLE_UNPROFITABLE_YEAR :{WHITE}Jahres-Gewinn durch {VEHICLE} betrug {CURRENCY_LONG} +STR_NEWS_VEHICLE_UNPROFITABLE_PERIOD :{WHITE}Zyklus-Gewinn durch {VEHICLE} betrug {CURRENCY_LONG} STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} kann sein Ziel nicht erreichen, da es außer Reichweite liegt STR_NEWS_ORDER_REFIT_FAILED :{WHITE}Umrüstung fehlgeschlagen bei {VEHICLE} @@ -1118,6 +1118,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Eigene W STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Eigene Währung gegenüber dem Pfund (£) verbilligen STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Umrechnungskurs der eigenen Währung gegenüber dem Pfund (£) festlegen +STR_CURRENCY_SEPARATOR :{LTBLUE}Trennzeichen: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Das Tausender-Trennzeichen für die eigene Währung festlegen STR_CURRENCY_PREFIX :{LTBLUE}Präfix: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Das Zeichen für die eigene Währung festlegen (Prefix) @@ -1296,7 +1298,7 @@ STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Einstellen, wie STR_CONFIG_SETTING_SUBSIDY_DURATION :Subventionsdauer: {STRING} ###length 2 STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Wähle die Anzahl der Jahre, für die eine Subvention vergeben wird -STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT_PERIODS :Wähle die Anzahl der Zeiträume, für die eine Subvention vergeben wird +STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT_PERIODS :Wähle die Anzahl an Zyklen, für die eine Subvention vergeben wird STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{UNITS_YEARS_OR_PERIODS} ###setting-zero-is-special @@ -1396,11 +1398,11 @@ STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Auf der rechten ###length 2 STR_CONFIG_SETTING_SHOWFINANCES :Zeige Firmenfinanzen am Ende des Jahres: {STRING} -STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Zeige Firmenfinanzen am Ende des Zeitraums: {STRING} +STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Zeige Firmenfinanzen am Ende jedes Zyklus: {STRING} ###length 2 STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Blende am Ende jedes Jahres automatisch die Einkommensübersicht des Unternehmes ein, um eine schnelle Übersicht über den finanziellen Status zu bekommen -STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Wenn aktiviert, erscheint das Finanz-Fenster immer am Ende des Quartals. Dies ermöglicht einen einfachen Überblick über die finanzielle Situation und Entwicklung der Firma. +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Wenn aktiviert, erscheint das Finanz-Fenster immer am Ende jedes Zyklus. Dies ermöglicht einen einfachen Überblick über die finanzielle Situation und Entwicklung der Firma. STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Aufträge standardmäßig ohne Zwischenhalt anfahren: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalerweise hält ein Fahrzeug an jeder Station, die es passiert. Wird diese Einstellung aktiviert, hält das Fahrzeug nur an den Stationen, die explizit in den Aufträgen angeführt sind. Bedenke, dass dieses nur das Standard-Verhalten für neue Aufträge beschreibt. Einzelne Aufträge können explizit auf jedes gewünschte Verhalten geändert werden @@ -1487,13 +1489,13 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :Für alle Fahrz STR_CONFIG_SETTING_WARN_INCOME_LESS :Warnen, wenn Einnahmen eines Fahrzeuges negativ sind: {STRING} ###length 2 STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Falls aktiviert, wird eine Nachricht gesendet, falls ein Fahrzeug innerhalb eines Jahres keinen Gewinn erwirtschaftet hat -STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Falls aktiviert, wird eine Nachricht gesendet, falls ein Fahrzeug innerhalb einer Zeitspanne keinen Gewinn erwirtschaftet hat +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Falls aktiviert, wird eine Nachricht gesendet, falls ein Fahrzeug innerhalb eines Zyklus keinen Gewinn erwirtschaftet hat STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Fahrzeuge veralten nie: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Erlauben, dass Fahrzeuge nach ihrem Einführungsdatum ewig verfügbar bleiben STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Zeiteinheit: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Wähle die Zeiteinheit des Spiels. Diese kann später nicht geändert werden.{}{}Kalender-basiert ist die klassische OpenTTD Erfahrung, in dem ein Jahr aus 12 Monaten besteht und jeder Monat 28-31 Tage hat.{}{}In Wanduhr-basierter Zeit sind Fahrzeuggeschwindigkeit, Güterproduktion und Finanzen basierend auf 1-minütigen Inkrementen, welche etwa so lang wie ein 30-tägiger Monat im Kalender-basierten Modus sind. Diese sind in 12-minütige Zeiträume gruppiert, equivalent zu einem Kalender-Jahr.{}{}In beiden Modi ist immer ein klassischer Kalender, welcher für das Einführungdatum von Fahrzeugen, Häusern und anderer Infrastruktur genutzt wird. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Wähle die Zeitbasis des Spiels. Diese kann später nicht geändert werden.{}{}Kalender-basiert ist die klassische OpenTTD Erfahrung, in dem ein Jahr aus 12 Monaten besteht und jeder Monat 28-31 Tage hat.{}{}In Wanduhr-basierter Zeit sind Güterproduktion und Finanzen basierend auf 1-minütigen Intervallen, welche etwa so lang wie ein 30-tägiger Monat im Kalender-basierten Modus sind. Diese sind in 12-minütigen Zyklen gruppiert, equivalent zu einem Kalender-Jahr.{}{}In beiden Modi gilt immer auch ein klassischer Kalender für das Einführungdatum von Fahrzeugen, Häusern und anderer Infrastruktur. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalender STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Wanduhr @@ -1765,11 +1767,11 @@ STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Soundeffekte be ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR :Bericht am Jahresende: {STRING} -STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Ende des Zeitraums: {STRING} +STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Ende eines Zyklus: {STRING} ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Soundeffekte beim Jahresrückblick auf die Bilanzen der vergangenen Jahre abspielen -STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Spiele ein Geräusch am Ende eines Quartals ab, welches die Firmenbilanz im Vergleich zum letzten Quartal wiedergibt +STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Spiele ein Geräusch am Ende jedes Zyklus ab, welches die Firmenbilanz im Vergleich zum vorherigen Zyklus wiedergibt STR_CONFIG_SETTING_SOUND_CONFIRM :Baumaßnahmen: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Soundeffekte bei Baumaßnahmen oder anderen Aktionen abspielen @@ -2764,7 +2766,7 @@ STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Einzugsg STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Nimmt an: {GOLD}{CARGO_LIST} STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Liefert: {GOLD}{CARGO_LIST} STR_STATION_BUILD_INFRASTRUCTURE_COST_YEAR :{BLACK}Unterhaltskosten: {GOLD}{CURRENCY_SHORT}/Jahr -STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}Wartungskosten: {GOLD}{CURRENCY_SHORT}/Quartal +STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}Wartungskosten: {GOLD}{CURRENCY_SHORT}/Zyklus # Join station window STR_JOIN_STATION_CAPTION :{WHITE}Verbinde mit Station @@ -3828,7 +3830,7 @@ STR_EDIT_WAYPOINT_NAME :{WHITE}Namen de STR_FINANCES_CAPTION :{WHITE}{COMPANY} – Finanzen {BLACK}{COMPANY_NUM} STR_FINANCES_YEAR :{WHITE}{NUM} STR_FINANCES_YEAR_CAPTION :{WHITE}Jahr -STR_FINANCES_PERIOD_CAPTION :{WHITE}Zeitraum +STR_FINANCES_PERIOD_CAPTION :{WHITE}Zyklus ###length 3 STR_FINANCES_REVENUE_TITLE :{WHITE}Einnahmen @@ -3931,7 +3933,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stationen STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Stationsfelder STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Flughäfen STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR :{WHITE}{CURRENCY_LONG}/Jahr -STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD :{WHITE}{CURRENCY_LONG}/Zeitraum +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD :{WHITE}{CURRENCY_LONG}/Zyklus # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrien @@ -3993,7 +3995,7 @@ STR_VEHICLE_LIST_REPLACE_VEHICLES :Fahrzeuge erset STR_VEHICLE_LIST_SEND_FOR_SERVICING :Zur Wartung schicken STR_VEHICLE_LIST_CREATE_GROUP :Gruppe erstellen STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Gewinn im laufenden Jahr: {CURRENCY_LONG} (vergangenes Jahr: {CURRENCY_LONG}) -STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{TINY_FONT}{BLACK}Profit in diesem Zeitraum: {CURRENCY_LONG} (letzter Zeitraum: {CURRENCY_LONG}) +STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{TINY_FONT}{BLACK}Profit in diesem Zyklus: {CURRENCY_LONG} (letzter Zyklus: {CURRENCY_LONG}) STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} @@ -4039,9 +4041,9 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Liste leeren STR_GROUP_RENAME_CAPTION :{BLACK}Gruppe umbenennen STR_GROUP_PROFIT_THIS_YEAR :Gewinn dieses Jahr: -STR_GROUP_PROFIT_THIS_PERIOD :Gewinn in diesem Zeitraum: +STR_GROUP_PROFIT_THIS_PERIOD :Gewinn in diesem Zyklus: STR_GROUP_PROFIT_LAST_YEAR :Gewinn letztes Jahr: -STR_GROUP_PROFIT_LAST_PERIOD :Gewinn im letzten Zeitraum: +STR_GROUP_PROFIT_LAST_PERIOD :Gewinn im letzten Zyklus: STR_GROUP_OCCUPANCY :Aktuelle Nutzung: STR_GROUP_OCCUPANCY_VALUE :{NUM}% @@ -4069,7 +4071,7 @@ STR_PURCHASE_INFO_SPEED :{BLACK}Geschwin STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Geschwindigkeit auf dem Meer: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Geschwindigkeit auf Kanälen und Flüssen: {GOLD}{VELOCITY} STR_PURCHASE_INFO_RUNNINGCOST_YEAR :{BLACK}Betriebskosten: {GOLD}{CURRENCY_LONG}/Jahr -STR_PURCHASE_INFO_RUNNINGCOST_PERIOD :{BLACK}Betriebskosten: {GOLD}{CURRENCY_LONG}/Zeitraum +STR_PURCHASE_INFO_RUNNINGCOST_PERIOD :{BLACK}Betriebskosten: {GOLD}{CURRENCY_LONG}/Zyklus STR_PURCHASE_INFO_CAPACITY :{BLACK}Kapazität: {GOLD}{CARGO_LONG} {STRING} STR_PURCHASE_INFO_REFITTABLE :(umrüstbar) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Entworfen: {GOLD}{NUM}{BLACK} Betriebsdauer: {GOLD}{COMMA} Jahr{P "" e} @@ -4271,7 +4273,7 @@ STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Geschw.: {VELOC STR_ENGINE_PREVIEW_TYPE :Flugzeugtyp: {STRING} STR_ENGINE_PREVIEW_TYPE_RANGE :Flugzeugtyp: {STRING} Reichweite: {COMMA} Felder STR_ENGINE_PREVIEW_RUNCOST_YEAR :Betriebskosten: {CURRENCY_LONG}/Jahr -STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Betriebskosten: {CURRENCY_LONG}/Zeitraum +STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Betriebskosten: {CURRENCY_LONG}/Zyklus STR_ENGINE_PREVIEW_CAPACITY :Kapazität: {CARGO_LONG} STR_ENGINE_PREVIEW_CAPACITY_2 :Kapazität: {CARGO_LONG}, {CARGO_LONG} @@ -4421,7 +4423,7 @@ STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Name des STR_VEHICLE_INFO_AGE :{COMMA} Jahr{P "" e} ({COMMA}) STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} Jahr{P "" e} ({COMMA}) STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Alter: {LTBLUE}{STRING}{BLACK} Betriebskosten: {LTBLUE}{CURRENCY_LONG}/Jahr -STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Alter: {LTBLUE}{STRING}{BLACK} Betriebskosten: {LTBLUE}{CURRENCY_LONG}/Zeitraum +STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Alter: {LTBLUE}{STRING}{BLACK} Betriebskosten: {LTBLUE}{CURRENCY_LONG}/Zyklus STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Max. Geschw.: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Max. Geschw.: {LTBLUE}{VELOCITY} {BLACK}Flugzeugtyp: {LTBLUE}{STRING} @@ -4430,9 +4432,9 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Gewicht: STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Gewicht: {LTBLUE}{WEIGHT_SHORT} {BLACK}Leistung: {LTBLUE}{POWER}{BLACK} Max. Geschw.: {LTBLUE}{VELOCITY} {BLACK}Max. Zugkraft: {LTBLUE}{FORCE} STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Gewinn dieses Jahr: {LTBLUE}{CURRENCY_LONG} (letztes Jahr: {CURRENCY_LONG}) -STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Gewinn im laufenden Jahr: {LTBLUE}{CURRENCY_LONG} (vergangenes Jahr: {CURRENCY_LONG}) {BLACK}Min. Leistung: {LTBLUE}{POWER_TO_WEIGHT} -STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Gewinn in diesem Zeitraum: {LTBLUE}{CURRENCY_LONG} (im letzten Zeitraum: {CURRENCY_LONG}) -STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Gewinn in diesem Zeitraum: {LTBLUE}{CURRENCY_LONG} (im letzten Zeitraum: {CURRENCY_LONG}) {BLACK}Min. Leistung: {LTBLUE}{POWER_TO_WEIGHT} +STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Gewinn im laufenden Jahr: {LTBLUE}{CURRENCY_LONG} (vergangenes Jahr: {CURRENCY_LONG}) {BLACK}Min. Leistungsdichte: {LTBLUE}{POWER_TO_WEIGHT} +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Gewinn in diesem Zyklus: {LTBLUE}{CURRENCY_LONG} (im letzten Zyklus: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Gewinn in diesem Zyklus: {LTBLUE}{CURRENCY_LONG} (im letzten Zyklus: {CURRENCY_LONG}) {BLACK}Min. Leistungsdichte: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Zuverlässigkeit: {LTBLUE}{COMMA}% {BLACK}Pannen seit der letzten Wartung: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Gebaut: {LTBLUE}{NUM}{BLACK} Wert: {LTBLUE}{CURRENCY_LONG} @@ -5809,6 +5811,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}Tsd. +STR_CURRENCY_SHORT_MEGA :{NBSP}Mio. +STR_CURRENCY_SHORT_GIGA :{NBSP}Mrd. +STR_CURRENCY_SHORT_TERA :{NBSP}Bio. STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/greek.txt b/src/lang/greek.txt index ab0fbdc710..e5590b5dc1 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -251,6 +251,12 @@ STR_COLOUR_WHITE :Λευκό STR_COLOUR_RANDOM :Τυχαία ###length 17 +STR_COLOUR_SECONDARY_DARK_BLUE :Σκούρο Μπλε +STR_COLOUR_SECONDARY_GREEN :Πράσινο +STR_COLOUR_SECONDARY_DARK_GREEN :Σκούρο Πράσινο +STR_COLOUR_SECONDARY_BLUE :Μπλε +STR_COLOUR_SECONDARY_CREAM :Κρεμ +STR_COLOUR_SECONDARY_BROWN :Καφέ # Units used in OpenTTD @@ -1587,7 +1593,7 @@ STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Θέσημο τ ###length 4 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_GREY_TO_RED :Γκρι σε Κόκκινο STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Ασπρόμαυρο STR_CONFIG_SETTING_SCROLLMODE :Συμπεριφορά κύλισης του παραθύρου εμφάνισης: {STRING} @@ -4626,10 +4632,14 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Στιγ STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Στιγμιότυπο μίνι χάρτη # Script Parameters +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Παράμετροι STR_AI_SETTINGS_CAPTION_AI :AI +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Σενάριο Παιχνιδιού STR_AI_SETTINGS_CLOSE :{BLACK}Κλείσιμο STR_AI_SETTINGS_RESET :{BLACK}Επαναφορά STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} +STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] +STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 30f2eb9f76..3851726cf2 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -352,7 +352,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Fogd és STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Kicsi/nagy ablakméret közötti váltás STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Görgetősáv - fel/le görgeti a listát STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Görgetősáv - jobbra/balra görgeti a listát -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Építmények lerombolása egy mezőről. Ctrl lenyomásával átlós terület jelölhető ki. Shift lenyomásával megmutatja a becsült költséget +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Építmények lerombolása egy mezőről. Ctrl+kattintás+húzással átlós terület jelölhető ki. Shift lenyomásával megmutatja a becsült költséget # Show engines button ###length VEHICLE_TYPES @@ -446,32 +446,32 @@ STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Játék STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Játék gyorsítása STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Alapbeállítások és beállítások STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Játék mentése vagy játék elhagyása, kilépés -STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Térkép, extra látkép, rakományáramlás és feliratok listája -STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Településlista mutatása -STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Támogatások megjelenítése -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Állomások listája +STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Térkép, extra látkép, rakományáramlás és feliratlista megnyitása +STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Településlista megnyitása +STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Támogatások megnyitása +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Állomáslista megnyitása STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Pénzügyi adatok megnyitása STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Általános adatok -STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Napló -STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Célok listája -STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Vállalati grafikonok és rakományok szállítási díja +STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Napló megnyitása +STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Céllista megnyitása +STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Vállalati grafikonok és rakományszállítási díjak megnyitása STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}A vállalatok helyezése STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Gazdasági épületek listázása, ipari lánc megnyitása, vagy új gazdasági épületek építése -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Vonatok listája. Ctrl+kattintással válszthatsz a csoport- vagy járműlista között -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Közúti járművek listája. Ctrl+kattintással válszthatsz a csoport- vagy járműlista között -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Hajók listája. Ctrl+kattintással válszthatsz a csoport- vagy járműlista között -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Repülőgépek listája. Ctrl+kattintással válszthatsz a csoport- vagy járműlista között -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Közelítés -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Távolítás -STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Vasúti pálya építése -STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Út építése -STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Villamospálya építése -STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Vízi út építése +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Vonatlista megnyitása. Ctrl+kattintással válszthatsz a csoport- vagy járműlista között +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Közúti járműlista megnyitása. Ctrl+kattintással válszthatsz a csoport- vagy járműlista között +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Hajóista megnyitása. Ctrl+kattintással válszthatsz a csoport- vagy járműlista között +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Repülőgéplista megnyitása. Ctrl+kattintással válszthatsz a csoport- vagy járműlista között +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Nagyítás +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Kicsinyítés +STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Vasúti infrastruktúra építése +STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Közúti infrastruktúra építése +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Villamos infrastruktúra építése +STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Vízi úti infrastruktúra építése STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Repülőtér építése -STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Nyisd meg a tájrendező ablakot a talaj emeléséhez vagy süllyesztéséhez, faültetéshez stb. +STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Tájszerkesztő, faültető vagy feliratlétrehozó menü megnyitása STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Hang/zene beállításai STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Legutóbbi üzenet/újsághír megmutatása, üzenetelőzmények vagy minden üzenet törlése -STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Terület-információ, konzol, képmentések, az OpenTTD-ről és fejlesztői eszközök +STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Terület-információ, képernyőmentések, OpenTTD névjegy vagy fejlesztői eszközök megnyitása STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Eszköztár váltás # Extra tooltips for the scenario editor toolbar @@ -481,12 +481,12 @@ STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Pályas STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}A kezdődátum hátrébb állítása egy évvel STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}A kezdődátum előrébb állítása egy évvel STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Kattints ide a kezdődátum beírásához -STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Térkép, városlista -STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Táj szerkesztése -STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Település-generálás -STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Gazdasági épület-generálás -STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Út építése -STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Villamospálya építése +STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Térkép, extra látkép, feliratok listája, városlista és gazdasági épületlista +STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Tájszerkesztő megnyitása vagy új világ létrehozása +STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Települések építése vagy generálása +STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Gazdasági épületek építése vagy generálása +STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Közúti infrastruktúra építése +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Villamos infrastruktúra építése STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Faültetés. Ctrl lenyomásával átlós terület jelölhető ki. Shift lenyomásával megmutatja a becsült építési költséget. STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Felirat lerakása STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Objektum építése. Ctrl lenyomásával átlós terület jelölhető ki. Shift lenyomásával megmutatja a becsült építési költséget. @@ -503,12 +503,12 @@ STR_SCENEDIT_FILE_MENU_QUIT :Kilépés # Settings menu ###length 16 -STR_SETTINGS_MENU_GAME_OPTIONS :Alapbeállítások +STR_SETTINGS_MENU_GAME_OPTIONS :Játékbeállítások STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Beállítások STR_SETTINGS_MENU_AI_SETTINGS :MI Beállítások STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Játékszkript beállítások STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF beállítások -STR_SETTINGS_MENU_SANDBOX_OPTIONS :Homokozó mód beállításai +STR_SETTINGS_MENU_SANDBOX_OPTIONS :Homokozó mód beállítások STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Átlátszósági beállítások STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Városnevek mutatása STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Állomásnevek mutatása @@ -1005,7 +1005,7 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Fő néz STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}A látkép pozícióját a fő nézetre másolja # Game options window -STR_GAME_OPTIONS_CAPTION :{WHITE}Alapbeállítások +STR_GAME_OPTIONS_CAPTION :{WHITE}Játékbeállítások STR_GAME_OPTIONS_TAB_GENERAL :Általános STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Általános beállítások módosítása @@ -1089,7 +1089,7 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :120 percenként STR_GAME_OPTIONS_LANGUAGE :{BLACK}Nyelv STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Válassz nyelvet -STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% teljesítve) +STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% lefordítva) STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Teljes képernyő STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Jelöld be ezt, ha teljes képernyős módban szeretnél játszani az OpenTTD-vel @@ -1109,7 +1109,7 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Jelöld STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Jelenlegi meghajtó: {STRING} STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Felület mérete -STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Használd a csúszkát a felület méretének beállításához. Ctrl nyomva tartásával további folyamatos állítás +STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Használd a csúszkát a felület méretének beállításához. Ctrl+húzás a finom állításhoz STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Méret automatikus felismerése STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Jelöld be ezt, a felület méretének automatikus felismeréséhez @@ -1618,7 +1618,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Eredeti STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Tereptípus: {STRING} -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :A térkép domborzata +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :A dombok és hegyek magasságának beállítása STR_CONFIG_SETTING_INDUSTRY_DENSITY :Gazdasági épületek száma: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Mennyi gazdasági épület legyen, és mennyire legyenek fenntartva a játék folyamán @@ -1638,7 +1638,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Beállíthatod, STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :A terep durvasága: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(csak TerraGenesis esetén) Kiválaszthatod a hegyek mennyiségét: a sima térképeken kevesebb, de kiterjedtebb hegy van, míg a durva térképeken sok hegy van, amik kissé ismétlődőnek tűnhetnek. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :A dombok mennyiségének beállítása. A sima térképeken kevesebb, de nagyobb dombok vannak, míg a durva térképeken sok kisebb domb van, amik kissé ismétlődőnek tűnhetnek. ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Nagyon sima STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Sima @@ -1895,7 +1895,7 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Alapértelmezet STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Alapértelmezett javítási intervallum beállítása új repülőgépeknek, ha nincs külön javítási intervallum beállítva a járműre STR_CONFIG_SETTING_SERVINT_SHIPS :Alapértelmezett javítási intervallum hajóknak: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Alapértelmezett javítási intervallum beállítása új hajóknak, ha nincs külön javítási intervallum beállítva a járműre -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}nap/% +STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Nap/Perc/% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :kikapcsolva @@ -2266,14 +2266,14 @@ STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Szubarkt STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Szubtrópusi táj kiválasztása STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Játékvilág táj kiválasztása -STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}A játék alapvető beállításainak (pl. nyelv, grafikus alapcsomag, stb.) megjelenítése -STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Rekord tábla megjelenítése +STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}A játékbeállítások megnyitása +STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Rekord tábla megnyitása STR_INTRO_TOOLTIP_HELP :{BLACK}Férj hozzá a dokumentációhoz és az online tartalmakhoz -STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}A beállítások megjelenítése -STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}NewGRF beállítások megjelenítése +STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}A beállítások megnyitása +STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}NewGRF beállítások megnyitása STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Új és frissített tartalmak megtekintése és letöltése -STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}MI beállítások megjelenítése -STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Játékszkript beállítások megjelenítése +STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}MI beállítások megnyitása +STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Játékszkript beállítások megnyitása STR_INTRO_TOOLTIP_QUIT :{BLACK}Kilépés az OpenTTD-ből STR_INTRO_BASESET :{BLACK}A jelenleg kiválasztott grafikus alapcsomagból {NUM} sprite hiányzik. Frissítsd a grafikus alapcsomagot! @@ -2304,7 +2304,7 @@ STR_HELP_WINDOW_BUGTRACKER :{BLACK}Hiba jel STR_HELP_WINDOW_COMMUNITY :{BLACK}Közösség # Cheat window -STR_CHEATS :{WHITE}Csalások +STR_CHEATS :{WHITE}Homokozó mód beállítások STR_CHEAT_MONEY :{LTBLUE}Tőkeemelés {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Irányított vállalat: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Csodabuldózer (lerombol gazdasági épületeket, mozgathatatlan objektumokat): {ORANGE}{STRING} @@ -2493,7 +2493,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}A játé STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Jelszó beállítása STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Védd le a játékodat jelszóval, ha nem akarod hogy illetéktelenek csatlakozzanak -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Láthatóság +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Láthatóság: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Mások láthassák-e a szerveredet a publikus listában STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} kliens STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Játékosok max. száma: @@ -2588,7 +2588,7 @@ STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Igen, mo STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Igen, ne kérdezd újra STR_NETWORK_ASK_SURVEY_CAPTION :Részvétel automata felmérésben? -STR_NETWORK_ASK_SURVEY_TEXT :Szeretnél részt venni az automata felmérésben?{}Az OpenTTD a játékból kilépéskor egy felmérést fog továbbítani.{}Ezt a beállítást bármikor megváltoztathatod a "Játék beállítások" menüpontban. +STR_NETWORK_ASK_SURVEY_TEXT :Szeretnél részt venni az automata felmérésben?{}Az OpenTTD a játékból kilépéskor egy felmérést fog továbbítani.{}Ezt a beállítást bármikor megváltoztathatod a "Játékbeállítások" menüpontban. STR_NETWORK_ASK_SURVEY_PREVIEW :Felmérés eredményének előnézete STR_NETWORK_ASK_SURVEY_LINK :Felmérésről és titoktartásról STR_NETWORK_ASK_SURVEY_NO :Nem @@ -2906,7 +2906,7 @@ STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Kijárat STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Kombinált jelző (fény){}A kombinált jelző voltaképpen egy kijárati- és egy bejárati jelző egybeépítve. Segítségével komoly váltókörzetek építhetőek bejárati jelzőkből STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Irányjelző (fény){}Egy irányjelző lehetővé teszi, hogy amennyiben a vonatok le tudnak foglalni maguknak egy biztonságos vágányutat a következő jelzőig, több vonat is beléphessen ugyanabba a jelzőblokkba. Az irányjelzők mellett hátulról is el lehet haladni STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Egyirányú irányjelző (fény){}Egy irányjelző lehetővé teszi, hogy amennyiben a vonatok le tudnak foglalni maguknak egy biztonságos vágányutat a következő jelzőig, több vonat is beléphessen ugyanabba a jelzőblokkba. Az egyirányú jelzők mellett nem lehet hátulról elhaladni -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Jelző átalakítás{}Amikor ki van jelölve, egy meglévő jelzőre való kattintással átkonvertálja a kiválasztott jelzőtípusra és -variációra, CTRL+kattintás a variációt fogja változtatni. Shift+kattintással megmutatja a becsült átalakítási költséget +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Jelző átalakítás{}Amikor ki van jelölve, egy meglévő jelzőre való kattintással átalakítja a kiválasztott jelzőtípusra és -változatra, Ctrl+kattintás a változatok között fog váltani. Shift+kattintással megmutatja a becsült átalakítási költséget STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Automata jelzőtelepítés esetén a jelzők távolsága STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Automata jelzőtelepítés esetén a jelzők távolságának csökkentése STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Automata jelzőtelepítés esetén a jelzők távolságának növelése @@ -2977,11 +2977,11 @@ STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Vízi ut STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Csatorna építése. Shift lenyomásával megmutatja a becsült építési költséget STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Zsilip építése. Shift lenyomásával megmutatja a várható építési költséget STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Dokk építése (hajók vételére és karbantartására). Shift lenyomásával megmutatja a becsült építési költséget -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Kikötő építése. A Ctrl lenyomásával egyesítheted más állomásokkal. Shift lenyomásával megmutatja a becsült építési költséget +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Kikötő építése. Ctrl+kattintással egyesítheted más állomásokkal. Shift lenyomásával megmutatja a becsült építési költséget STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Bója lerakása, amit a hajók útirányjelző pontként használhatnak. Shift lenyomásával megmutatja a becsült építési költséget STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Csatornahíd építése. Shift lenyomásával megmutatja a várható építési költséget -STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Vizi terület definiálása.{}Csatornát készít, kivéve ha tengerszinten Ctrl gombot lenyomva használod, ekkor elárasztja a területet -STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Folyók elhelyezése +STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Csatorna építése. Ctrl+kattintással elárasztja a területet tengervízzel a tengerszinten +STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Folyók elhelyezése. Ctrl+kattintással átlós terület jelölhető ki # Ship depot construction window STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Dokk helyzete @@ -3038,7 +3038,7 @@ STR_OBJECT_CLASS_TRNS :Adótornyok STR_PLANT_TREE_CAPTION :{WHITE}Fák STR_PLANT_TREE_TOOLTIP :{BLACK}Ültetendő fa kiválasztása. Ha már van fa a mezőn, akkor újabb fák ültetése a kiválasztott fatípustól függetlenül STR_TREES_RANDOM_TYPE :{BLACK}Véletlenszerű fafélék -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Véletlenszerűen kiválasztott fákat helyez el. Ctrl lenyomásával átlós terület jelölhető ki. Shift lenyomásával megmutatja a becsült építési költséget. +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Véletlenszerűen kiválasztott fákat helyez el. Ctrl+kattintás+húzással átlós terület jelölhető ki. Shift lenyomásával megmutatja a becsült építési költséget. STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Véletlenszerű fák STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Véletlenszerűen fákat ültet a térképre STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normál @@ -3131,7 +3131,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Válaszd # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Terület-információ -STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}A főnézetet a csempére állítja. Ctrl+Klikk megnyit egy új főnézetet a csempén. +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}A fő nézetet a csempére állítja. Ctrl+kattintás esetén új látképet nyit a csempe pozíciójára STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}{LTBLUE}Nem lehet lerombolni STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}A megtisztítás költsége: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Bevétel lerombolás esetén: {LTBLUE}{CURRENCY_LONG} @@ -3143,7 +3143,7 @@ STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}A vasút STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Helyi önkormányzat: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Nincs STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordináták: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) -STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Épült: {LTBLUE}{DATE_LONG} +STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Épült/felújítva: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Állomás osztálya: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Állomás típusa: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Repülőtér osztály: {LTBLUE}{STRING} @@ -3378,11 +3378,11 @@ STR_MAPGEN_VARIETY :{BLACK}Változa STR_MAPGEN_GENERATE :{WHITE}Generál STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Készíts egy világot és játssz OpenTTD-t! STR_MAPGEN_NEWGRF_SETTINGS :NewGRF Beállítások -STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}NewGRF beállítások megjelenítése +STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}NewGRF beállítások megnyitása STR_MAPGEN_AI_SETTINGS :{BLACK}MI Beállítások -STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}MI beállítások megjelenítése +STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}MI beállítások megnyitása STR_MAPGEN_GS_SETTINGS :{BLACK}Játékszkript Beállítások -STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Játékszkript beállítások megjelenítése +STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Játékszkript beállítások megnyitása ###length 21 STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Angol (Eredeti) @@ -4288,7 +4288,7 @@ STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Ide katt ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}A fő nézetet a járműtelepre állítja. Ctrl+kattintás esetén új látképet nyit a járműtelep pozíciójára STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}A fő nézetet a garázsra állítja. Ctrl+kattintás esetén új látképet nyit a garázs pozíciójára -STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}A fő nézetet a dokkra állítja. Ctrl+kattintás esetén új látképet nyit a dokk pozíciójára +STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}A fő nézetet a dokkra állítja. Ctrl+kattintással új látképet nyit a dokk pozíciójára STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}A fő nézetet a hangárra állítja. Ctrl+kattintás esetén új látképet nyit a hangár pozíciójára ###length VEHICLE_TYPES @@ -4562,7 +4562,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Új kapa STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Új kapacitás: {GOLD}{CARGO_LONG}{}{BLACK}Bevétel átalakításból: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Új kapacitás: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Átalakítás költsége: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Új kapacitás: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Bevétel átalakításból: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Átalakítandó járművek kiválasztása. Egérrel húzva több jármű választható ki. Üres helyre kattintva az egész jármű jelölhető ki. Ctrl+Kattintással a jármű és az azt követő szerelvény jelölhető ki +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Átalakítandó járművek kiválasztása. Ctrk+húzással több jármű választható ki. Üres helyre kattintva az egész jármű jelölhető ki. Ctrl+kattintással a jármű és az azt követő szerelvény jelölhető ki ###length VEHICLE_TYPES STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Vonat által szállítandó rakomány kiválasztása @@ -4654,9 +4654,9 @@ STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Hogyan v STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :egyenlő STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :nem egyenlő STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :kevesebb, mint -STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :nem több, mint +STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :kevesebb vagy egyenlő, mint STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :több, mint -STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :nem kevesebb, mint +STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :több vagy egyenlő, mint STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :igaz STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :hamis @@ -4793,13 +4793,13 @@ STR_TIMETABLE_CHANGE_TIME :{BLACK}Idő meg STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}A kijelölt utasítás végrehajtási idejét változtatja meg. Ctrl+kattintással beállítod az időt az összes utasításhoz. STR_TIMETABLE_CLEAR_TIME :{BLACK}Idő törlése -STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}A kijelölt menetrendi sorhoz tartozó végrehajtási idő törlése. Ctrl+Klikkel kitörlöd az időt az összes utasításnál. +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}A kijelölt utasításhoz tartozó idő törlése. Ctrl+kattintás az összes utasításból törli az időt STR_TIMETABLE_CHANGE_SPEED :{BLACK}Sebességkorlátozás megváltoztatása STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Kijelölt utasítás sebességkorlátozásának megváltoztatása. Ctrl+kattintással beállítható a sebesség az összes utasítás számára STR_TIMETABLE_CLEAR_SPEED :{BLACK}Sebességkorlátozás törlése -STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Sebességkorlátozás törlése a kijelölt utasításból. Ctrl+kattintással kitörlöd a sebességet az összes utasításból. +STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Sebességkorlátozás törlése a kijelölt utasításból. Ctrl+kattintás az összes utasításból törli a sebességkorlátozást STR_TIMETABLE_RESET_LATENESS :{BLACK}Késés nullázása STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Késés-számláló nullázása, azaz a jármű pontos lesz. Ctrl+kattintással az egész csoportot nullázhatod, vagyis a legutolsó pont időben lesz a többi pedig korán @@ -4844,7 +4844,7 @@ STR_AI_DEBUG_CONTINUE :{BLACK}Folytat STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Játék folytatása és MI visszakapcsolása STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}A MI kimeneti nyomonkövetésének megtekintése. Ctrl+Kattintás új ablakban történő megnyitáshoz STR_AI_GAME_SCRIPT :{BLACK}Játékszkript -STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Játékszkript napló ellenőrzése +STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Játékszkript napló ellenőrzése. Ctrl+kattintás új ablakban történő megnyitáshoz STR_ERROR_AI_NO_AI_FOUND :Nincs MI, amit be lehetne tölteni.{}A jelenlegi MI csak dísz és nem fog semmit csinálni.{}MI-k letöltéséhez használd a tartalomletöltő rendszert STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Az egyik futó szkript futása közben hiba történt. Kérjük jelezd ezt a szkript készítőjének az MI / Játékzkript nyomkövetés ablakról készített képernyőmentéssel diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 7636164d87..b71baf6c02 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1117,6 +1117,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Setz de STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Setz de Betrag Suen dee fir 1 Pond (£) gebraucht gëtt erop STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Setzt de Wiesselcours fir deng Währung fir 1 Pond (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Separator: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Setz de Separator fir deng Wähung STR_CURRENCY_PREFIX :{LTBLUE}Prefix: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Setzt de Prefix fir deng Währung @@ -1272,10 +1274,10 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Endlos Geld: {S STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Erlaab fir endlos Geld auszeginn an schalt de Bankrott vu Firmen aus STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximalen Ufanksloun: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximalwäert den eng Firma kann léinen (ouni Inflatioun matzerechnen) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximalwäert den eng Firma ka léinen (ouni Inflatioun matzerechnen). Wann "keen Kredit" gewielt gouf, gëtt et kee Geld ausser e Game Script, oder d'"Endlos geld" Astellung gëtt es. STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Kee Kredit {RED}Spill-Script muss am Ufank e Geldbetrag zur Verfügung ginn +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Kee Kredit STR_CONFIG_SETTING_INTEREST_RATE :Zënssaz: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Zënssaz; kontrolléiert och d'Inflatioun wann ugeschalt @@ -1492,7 +1494,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Gefierer lafen STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Wann ugeschalt, bleiwen all Modeller vu Gefierer éiweg verfügbar STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Zäitmiessung: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Wiel d'Zäitmiessungsuniten déi am Spill benotzt ginn. Dat kann spéider net méi geännert ginn.{}{}Kalennerbaséiert ass d'standart OpenTTD Erfahrung, wou all Joer 12 Méint huet an all Mount 28-31 Deeg.{}{}Wann d'Auer un der Mauer ausgewielt gëtt, si Gefierbewegungen, Wuereproduktioun an finanziell Saachen op 1-Minut-Schrëtt baséiert, wat ongeféiert esou laang ass wéi en 30 Deeg Mount am kalennerbaséierte Modus. Déi si gruppéiert an 12-Minute Perdioden, equivalent zu engem Joer am kalennerbaséierte Modus.{}{}An béide Modi gëtt et emmer e klassesche Kalenner de gebraucht fir d'Aféirungsdaten fir Gefier, Häiser an aner Infrastrukturen. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Wiel d'Zäitmiessungsuniten déi am Spill benotzt ginn. Dat kann spéider net méi geännert ginn.{}{}Kalennerbaséiert ass d'standart OpenTTD Erfahrung, wou all Joer 12 Méint huet an all Mount 28-31 Deeg.{}{}Wann d'Auer un der Mauer ausgewielt gëtt, Wuereproduktioun an finanziell Saachen op 1-Minut-Schrëtt baséiert, wat ongeféiert esou laang ass wéi en 30 Deeg Mount am kalennerbaséierte Modus. Déi si gruppéiert an 12-Minute Perdioden, equivalent zu engem Joer am kalennerbaséierte Modus.{}{}An béide Modi gëtt et emmer e klassesche Kalenner de gebraucht fir d'Aféirungsdaten fir Gefier, Häiser an aner Infrastrukturen. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalenner STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Auer un der Mauer @@ -4382,22 +4384,22 @@ STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Warden STR_VEHICLE_STATUS_CRASHED :{RED}Accident! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Pann STR_VEHICLE_STATUS_STOPPED :{RED}Gestoppt -STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Stoppt, {VELOCITY} +STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}{VELOCITY} - Am gaang ze stoppen STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Keng Energie STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Waard op en fräie Wee STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Ze wäit op nächst Destinatioun -STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}Ennerwee op {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Keng Opträg, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Ennerwee op {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Ennerwee an den {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Revisioun am {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}Verspreeën a Revisioun am Schapp {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Ennerwee op {0:STATION} +STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Keng Opträg +STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Ennerwee op {0:WAYPOINT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Ennerwee an den {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Revisoun am {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Verspreeën a Revisioun am Schapp {0:DEPOT} -STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}Kann {STATION} net erreechen, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}Kann {WAYPOINT} net erreechen, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}Kann {DEPOT} net erreechen, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}Kann den {DEPOT} net erreechen, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - Kann {0:STATION} net erreechen +STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Kann {0:WAYPOINT} net erreechen +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Kann {0:DEPOT} net erreechen, +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Kann den {0:DEPOT} net erreechen # Vehicle stopped/started animations ###length 2 @@ -4611,7 +4613,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Géi an den noo STR_ORDER_GO_TO_NEAREST_HANGAR :Géi an den noosten Hangar STR_ORDER_CONDITIONAL :Bedéngten Optragssprong STR_ORDER_SHARE :Opträg deelen -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Setzt en neien Optrag firun den ungewielten Optrag, oder un d'Enn vun der Lëscht. Ctrl+Klick op eng Statioun fir 'voll belueden mat all Wueren', op e Weepunkt fir den 'non-stop Standard' emzeschalten, oder op e Schapp fir eng 'Revisioun'. Klick op e Gefier fir seng Opträg ze kopéieren oder Ctrl+Klick fir seng Opträg ze deelen. En Depot Optrag schalt d'automatesch Revisioun vum Gefier aus +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Setzt en neien Optrag firun den ungewielten Optrag, oder un d'Enn vun der Lëscht. Ctrl+Klick op eng Statioun fir 'voll belueden mat all Wueren', op e Weepunkt fir den 'non-stop Standard' emzeschalten, oder op e Schapp fir ze 'verspreeën'. Klick op e Gefier fir seng Opträg ze kopéieren oder Ctrl+Klick fir seng Opträg ze deelen. En Depot Optrag schalt d'automatesch Revisioun vum Gefier aus STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Weis all Gefierer déi dësen Plang deelen @@ -5808,6 +5810,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}m +STR_CURRENCY_SHORT_GIGA :{NBSP}mia +STR_CURRENCY_SHORT_TERA :{NBSP}bn STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 37256b86b8..d665399fb8 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1500,9 +1500,9 @@ STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Ustal ku STR_CURRENCY_SEPARATOR :{LTBLUE}Separator: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Ustaw separator dla twojej waluty -STR_CURRENCY_PREFIX :{LTBLUE}Prefiks: {ORANGE}{STRING} +STR_CURRENCY_PREFIX :{LTBLUE}Przedrostek: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Ustaw przedrostek dla swojej waluty -STR_CURRENCY_SUFFIX :{LTBLUE}Sufiks: {ORANGE}{STRING} +STR_CURRENCY_SUFFIX :{LTBLUE}Przyrostek: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_SUFFIX_TOOLTIP :{BLACK}Ustaw symbol dla twojej waluty STR_CURRENCY_SWITCH_TO_EURO :{LTBLUE}Przejście na euro: {ORANGE}w {NUM} roku @@ -6251,10 +6251,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} -STR_CURRENCY_SHORT_KILO :{NBSP}k -STR_CURRENCY_SHORT_MEGA :{NBSP}m +STR_CURRENCY_SHORT_KILO :{NBSP}tys. +STR_CURRENCY_SHORT_MEGA :{NBSP}mln STR_CURRENCY_SHORT_GIGA :{NBSP}mld -STR_CURRENCY_SHORT_TERA :{NBSP}tn +STR_CURRENCY_SHORT_TERA :{NBSP}bln STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 24b9b6ecff..62fee25d6d 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1494,7 +1494,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :载具永不过 STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :启用时,所有载具一经面世,就可以永远选择购买使用。 STR_CONFIG_SETTING_TIMEKEEPING_UNITS :时间模式:{STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :选择游戏的计时模式。 请注意此项无法在游戏进行时更改{}{}日历模式为经典的 OpenTTD 体验,在此模式中,一年由 12 个月组成,每个月有 28-31 天。{}{}在挂钟模式中,车辆移动、货物生产和财务计算等都以分钟为单位,一分钟约等于日历模式中的一个月,即 30 天。此模式下每12分钟即日历模式下的一年。{}{}两种模式都包含一个用来记录载具、房屋与其他基础设施引入日期的计时器。 +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :选择游戏的计时模式。 请注意此项无法在游戏进行时更改{}{}日历模式为经典的 OpenTTD 体验,在此模式中,一年由 12 个月组成,每个月有 28-31 天。{}{}在挂钟模式中,车辆移动、货物生产和财务计算等都以分钟为单位,一分钟约等于日历模式中的一个月,即 30 天。此模式下每 12 分钟即日历模式下的一年。{}{}两种模式都包含一个用来记录载具、房屋与其他基础设施引入日期的计时器。 ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :日历 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :挂钟 @@ -2791,7 +2791,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}建设 STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}建设铁路信号。建筑时按住 键单击以对信号应用不同风格样式。{}在建设时拖拽以在拖拽区间内按照设定的信号间距均匀建设信号。按住 键拖拽以按设定的检举建设信号至下一个岔道 / 车站 / 信号。按住 以显示预计费用。 STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}建设铁路桥梁。按住 键显示预计费用。 STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}建设铁路隧道。按住 键以显示预计费用。 -STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}切换建设/拆除轨道、信号灯、路点和车站。按住 Ctrl 键可在移除路点和车站时同时移除轨道。 +STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}切换建筑 / 拆除铁轨、信号机、路点以及车站。按住 键点选以同时移除路点及车站中的铁轨 STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}转换/升级 铁路类型。按住 Shift 键显示预计费用。 STR_RAIL_NAME_RAILROAD :铁路 @@ -2914,7 +2914,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}修建 STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}建设船闸。按住 键点选以显示预计费用。 STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}建造船坞(可以购买或保养船只),按住 键以显示预计费用。 STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}建造码头。按住 键以合并车站,按住 Shift 键以显示预计费用。 -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}放置一个浮标,该浮标可以用作路点,按住 Shift 键操作可以显示所需资金 +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}放置一个浮标,可以用作路点。按住 键操作以显示预计费用 STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}建设渡槽,按住 Shift 键操作可以显示所需资金 STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}修建运河。在海平面按住 键则会淹没周围土地。 STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}放置河流。按住 键以沿对角线放置。 @@ -2974,7 +2974,7 @@ STR_OBJECT_CLASS_TRNS :发射机 STR_PLANT_TREE_CAPTION :{WHITE}树木 STR_PLANT_TREE_TOOLTIP :{BLACK}选择要种植的树木类型。如果格子内已经有树木,将种植随机类型的树木 STR_TREES_RANDOM_TYPE :{BLACK}随机类型的树木 -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}种植随机类型的树木。按 Ctrl 键沿对角线建造,按住 Shift 键可以显示所需资金 +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}种植随机类型的树木。按 键操作以沿对角线建造,按住 键以显示预计费用 STR_TREES_RANDOM_TREES_BUTTON :{BLACK}随机树木 STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}随机地种植一些树木 STR_TREES_MODE_NORMAL_BUTTON :{BLACK}正常 @@ -3877,10 +3877,10 @@ STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDE STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}开业时间:{WHITE}{NUM} STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}色彩方案: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}载具总数: -STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} 列火车 -STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} 辆汽车 -STR_COMPANY_VIEW_AIRCRAFT :{WHITE}{COMMA} 架飞机 -STR_COMPANY_VIEW_SHIPS :{WHITE}{COMMA} 艘轮船 +STR_COMPANY_VIEW_TRAINS :{WHITE}列车 {COMMA} 列 +STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}车辆 {COMMA} 辆 +STR_COMPANY_VIEW_AIRCRAFT :{WHITE}飞机 {COMMA} 架 +STR_COMPANY_VIEW_SHIPS :{WHITE}船舶 {COMMA} 艘 STR_COMPANY_VIEW_VEHICLES_NONE :{WHITE}无 STR_COMPANY_VIEW_COMPANY_VALUE :{GOLD}公司市值:{WHITE}{CURRENCY_LONG} STR_COMPANY_VIEW_INFRASTRUCTURE :{GOLD}基建设施: @@ -4498,7 +4498,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}新的 STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}新装载量: {GOLD}{CARGO_LONG}{}{BLACK}改装后收入: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}新的运载类型: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}改装所需: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}新装载量: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}改装后收入: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}请选择要改装的车辆. 拖动鼠标可多选.点击空白区域选择整辆列车. Ctrl+左键 选定该车厢及其之后车厢。 +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}选择改装的车厢。按 键拖曳以选择多节车厢。点选空白的区域以选择整列列车。按 键选择车厢以选择该车厢及其之后的车厢 ###length VEHICLE_TYPES STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}选择希望列车装载的货物类型 @@ -4613,7 +4613,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :前往最近的 STR_ORDER_GO_TO_NEAREST_HANGAR :前往最近的机库 STR_ORDER_CONDITIONAL :条件性命令跳过 STR_ORDER_SHARE :共享调度计划 -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}在调度列表的结尾或选定项目前{}增加一条新指令,按住Ctrl使命令为“装满任意货物”{}路点命令为“不停车”{}车库命令为“保养” +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}在选定的指令前插入新指令,或者添加新指令至计划末尾。按 键点选车站、路点或车库以分别应用“满载任意一种货物”、“不停车前往”以及“班次均匀”。点击另一辆载具以复制其调度计划,按住 点选则可共享调度计划。如果调度计划上有任何指令涉及车库,则该载具不会自行维护。 STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}显示所有共享此调度计划的{}车辆/船只/飞机 From e775ef2b70fe94224ab88203c21acfc0aa7f1a3a Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Tue, 27 Feb 2024 02:41:59 +0100 Subject: [PATCH 017/695] Fix: initialize _switch_mode_time so crash-logs before first game have a realistic time (#12184) --- src/openttd.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/openttd.cpp b/src/openttd.cpp index 31db6b0d60..94c9b6e748 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -517,6 +517,8 @@ static const OptionData _options[] = { */ int openttd_main(int argc, char *argv[]) { + _switch_mode_time = std::chrono::steady_clock::now(); + std::string musicdriver; std::string sounddriver; std::string videodriver; From 2fb159355063cfdfa032d0c372111d60a9829a05 Mon Sep 17 00:00:00 2001 From: Kuhnovic <68320206+Kuhnovic@users.noreply.github.com> Date: Tue, 27 Feb 2024 12:55:42 +0100 Subject: [PATCH 018/695] Fix e38c3c5: Added missing return statement (#12185) --- src/pathfinder/yapf/yapf_ship.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp index 5ce0d3b7a0..d1b3daa708 100644 --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -252,7 +252,7 @@ public: path_found = pf.FindPath(v); Node *node = pf.GetBestNode(); if (attempt == 0 && !path_found) continue; // Try again with restricted search area. - if (!path_found || node == nullptr) GetRandomFollowUpTrackdir(v, src_tile, trackdir, true); + if (!path_found || node == nullptr) return GetRandomFollowUpTrackdir(v, src_tile, trackdir, true); /* Return only the path within the current water region if an intermediate destination was returned. If not, cache the entire path * to the final destination tile. The low-level pathfinder might actually prefer a different docking tile in a nearby region. Without From f612bc6ee2cbcc4c5e435742d72f7fc852ae345d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Tue, 27 Feb 2024 18:16:21 +0100 Subject: [PATCH 019/695] Fix bf4b6696: [Script] Broken ScriptText circular reference detection (#12187) --- src/script/api/script_text.cpp | 24 ++++++++++++------------ src/script/api/script_text.hpp | 11 ++++++----- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/script/api/script_text.cpp b/src/script/api/script_text.cpp index 2b16a6de9e..272302154f 100644 --- a/src/script/api/script_text.cpp +++ b/src/script/api/script_text.cpp @@ -160,25 +160,30 @@ SQInteger ScriptText::_set(HSQUIRRELVM vm) std::string ScriptText::GetEncodedText() { - StringIDList seen_ids; + ScriptTextList seen_texts; ParamList params; int param_count = 0; std::string result; auto output = std::back_inserter(result); - this->_FillParamList(params); - this->_GetEncodedText(output, param_count, seen_ids, params); + this->_FillParamList(params, seen_texts); + this->_GetEncodedText(output, param_count, params); if (param_count > SCRIPT_TEXT_MAX_PARAMETERS) throw Script_FatalError(fmt::format("{}: Too many parameters", GetGameStringName(this->string))); return result; } -void ScriptText::_FillParamList(ParamList ¶ms) +void ScriptText::_FillParamList(ParamList ¶ms, ScriptTextList &seen_texts) { + if (std::find(seen_texts.begin(), seen_texts.end(), this) != seen_texts.end()) throw Script_FatalError(fmt::format("{}: Circular reference detected", GetGameStringName(this->string))); + seen_texts.push_back(this); + for (int i = 0; i < this->paramc; i++) { Param *p = &this->param[i]; params.emplace_back(this->string, i, p); if (!std::holds_alternative(*p)) continue; - std::get(*p)->_FillParamList(params); + std::get(*p)->_FillParamList(params, seen_texts); } + + seen_texts.pop_back(); } void ScriptText::ParamCheck::Encode(std::back_insert_iterator &output) @@ -190,13 +195,10 @@ void ScriptText::ParamCheck::Encode(std::back_insert_iterator &outp this->used = true; } -void ScriptText::_GetEncodedText(std::back_insert_iterator &output, int ¶m_count, StringIDList &seen_ids, ParamSpan args) +void ScriptText::_GetEncodedText(std::back_insert_iterator &output, int ¶m_count, ParamSpan args) { const std::string &name = GetGameStringName(this->string); - if (std::find(seen_ids.begin(), seen_ids.end(), this->string) != seen_ids.end()) throw Script_FatalError(fmt::format("{}: Circular reference detected", name)); - seen_ids.push_back(this->string); - Utf8Encode(output, SCC_ENCODED); fmt::format_to(output, "{:X}", this->string); @@ -234,7 +236,7 @@ void ScriptText::_GetEncodedText(std::back_insert_iterator &output, int count = 0; fmt::format_to(output, ":"); ScriptTextRef &ref = std::get(*p.param); - ref->_GetEncodedText(output, count, seen_ids, args.subspan(idx)); + ref->_GetEncodedText(output, count, args.subspan(idx)); p.used = true; if (++count != cur_param.consumes) { ScriptLog::Error(fmt::format("{}({}): {{{}}} expects {} to be consumed, but {} consumes {}", name, param_count + 1, cur_param.cmd, cur_param.consumes - 1, GetGameStringName(ref->string), count - 1)); @@ -255,8 +257,6 @@ void ScriptText::_GetEncodedText(std::back_insert_iterator &output, param_count += cur_param.consumes; } - - seen_ids.pop_back(); } const std::string Text::GetDecodedText() diff --git a/src/script/api/script_text.hpp b/src/script/api/script_text.hpp index 9e6f1333c7..e3c9ec6a2f 100644 --- a/src/script/api/script_text.hpp +++ b/src/script/api/script_text.hpp @@ -129,7 +129,7 @@ public: private: using ScriptTextRef = ScriptObjectRef; - using StringIDList = std::vector; + using ScriptTextList = std::vector; using Param = std::variant; struct ParamCheck { @@ -155,17 +155,18 @@ private: * The parameters are added as _GetEncodedText used to encode them * before the addition of parameter validation. * @param params The list of parameters to fill. + * @param seen_texts The list of seen ScriptText. */ - void _FillParamList(ParamList ¶ms); + void _FillParamList(ParamList ¶ms, ScriptTextList &seen_texts); /** * Internal function for recursive calling this function over multiple * instances, while writing in the same buffer. * @param output The output to write the encoded text to. - * @param param_count The number of parameters that are in the string. - * @param seen_ids The list of seen StringID. + * @param param_count The number of parameters that are consumed by the string. + * @param args The parameters to be consumed. */ - void _GetEncodedText(std::back_insert_iterator &output, int ¶m_count, StringIDList &seen_ids, ParamSpan args); + void _GetEncodedText(std::back_insert_iterator &output, int ¶m_count, ParamSpan args); /** * Set a parameter, where the value is the first item on the stack. From bf865dc5365eb6883574d2a2b50082903b60061a Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 26 Feb 2024 17:19:12 +0000 Subject: [PATCH 020/695] Codechange: Add `GetVisibleRangeIterators()` to `Scrollbar`. --- src/widget_type.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/widget_type.h b/src/widget_type.h index 3f28ffc1d9..b7a8393fca 100644 --- a/src/widget_type.h +++ b/src/widget_type.h @@ -833,6 +833,20 @@ public: int GetScrolledRowFromWidget(int clickpos, const Window * const w, WidgetID widget, int padding = 0, int line_height = -1) const; + /** + * Get a pair of iterators for the range of visible elements in a container. + * @param container Container of elements represented by the scrollbar. + * @returns Pair of iterators of visible elements. + */ + template + auto GetVisibleRangeIterators(Tcontainer &container) const + { + assert(this->GetCount() == container.size()); // Scrollbar and container size must match. + auto first = std::next(std::begin(container), this->GetPosition()); + auto last = std::next(first, std::min(this->GetCapacity(), this->GetCount() - this->GetPosition())); + return std::make_pair(first, last); + } + /** * Return an iterator pointing to the element of a scrolled widget that a user clicked in. * @param container Container of elements represented by the scrollbar. From a61311fcb0d2e340d1a6ebfb1bb1545120a182e9 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 25 Feb 2024 21:33:11 +0000 Subject: [PATCH 021/695] Codefix: DrawEngineList does not accept EngineID. Replace min/max parameters of DrawEngineList with scrollbar reference, and use iterators instead of indices. --- src/autoreplace_gui.cpp | 6 ++---- src/build_vehicle_gui.cpp | 23 ++++++++++------------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 64707259d3..5072dbb4ae 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -33,7 +33,7 @@ #include "safeguards.h" -void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_list, uint16_t min, uint16_t max, EngineID selected_id, bool show_count, GroupID selected_group); +void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_list, const Scrollbar &sb, EngineID selected_id, bool show_count, GroupID selected_group); static bool EngineNumberSorter(const GUIEngineListItem &a, const GUIEngineListItem &b) { @@ -487,11 +487,9 @@ public: case WID_RV_LEFT_MATRIX: case WID_RV_RIGHT_MATRIX: { int side = (widget == WID_RV_LEFT_MATRIX) ? 0 : 1; - EngineID start = static_cast(this->vscroll[side]->GetPosition()); // what is the offset for the start (scrolling) - EngineID end = static_cast(std::min(this->vscroll[side]->GetCapacity() + start, this->engines[side].size())); /* Do the actual drawing */ - DrawEngineList((VehicleType)this->window_number, r, this->engines[side], start, end, this->sel_engine[side], side == 0, this->sel_group); + DrawEngineList((VehicleType)this->window_number, r, this->engines[side], *this->vscroll[side], this->sel_engine[side], side == 0, this->sel_group); break; } } diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index f4729fe920..11211a2ae9 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -998,18 +998,16 @@ int DrawVehiclePurchaseInfo(int left, int right, int y, EngineID engine_number, * @param type Type of vehicle (VEH_*) * @param r The Rect of the list * @param eng_list What engines to draw - * @param min where to start in the list - * @param max where in the list to end + * @param sb Scrollbar of list. * @param selected_id what engine to highlight as selected, if any * @param show_count Whether to show the amount of engines or not * @param selected_group the group to list the engines of */ -void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_list, uint16_t min, uint16_t max, EngineID selected_id, bool show_count, GroupID selected_group) +void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_list, const Scrollbar &sb, EngineID selected_id, bool show_count, GroupID selected_group) { static const int sprite_y_offsets[] = { -1, -1, -2, -2 }; - /* Obligatory sanity checks! */ - assert(max <= eng_list.size()); + auto [first, last] = sb.GetVisibleRangeIterators(eng_list); bool rtl = _current_text_dir == TD_RTL; int step_size = GetEngineListHeight(type); @@ -1028,9 +1026,8 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li replace_icon = GetSpriteSize(SPR_GROUP_REPLACE_ACTIVE); uint biggest_num_engines = 0; - for (auto i = min; i < max; i++) { - const auto &item = eng_list[i]; - const uint num_engines = GetGroupNumEngines(_local_company, selected_group, item.engine_id); + for (auto it = first; it != last; ++it) { + const uint num_engines = GetGroupNumEngines(_local_company, selected_group, it->engine_id); biggest_num_engines = std::max(biggest_num_engines, num_engines); } @@ -1048,8 +1045,8 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li int replace_icon_y_offset = (ir.Height() - replace_icon.height) / 2; int y = ir.top; - for (; min < max; min++, y += step_size) { - const auto &item = eng_list[min]; + for (auto it = first; it != last; ++it) { + const auto &item = *it; uint indent = item.indent * WidgetDimensions::scaled.hsep_indent; bool has_variants = (item.flags & EngineDisplayFlags::HasVariants) != EngineDisplayFlags::None; bool is_folded = (item.flags & EngineDisplayFlags::IsFolded) != EngineDisplayFlags::None; @@ -1085,10 +1082,11 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li /* Draw tree lines */ Rect fr = ir.Indent(indent - WidgetDimensions::scaled.hsep_indent, rtl).WithWidth(circle_width, rtl); int ycenter = y + normal_text_y_offset + GetCharacterHeight(FS_NORMAL) / 2; - bool continues = (min + 1U) < eng_list.size() && eng_list[min + 1].indent == item.indent; + bool continues = std::next(it) != std::end(eng_list) && std::next(it)->indent == item.indent; GfxDrawLine(fr.left + circle_width / 2, y - WidgetDimensions::scaled.matrix.top, fr.left + circle_width / 2, continues ? y - WidgetDimensions::scaled.matrix.top + step_size - 1 : ycenter, linecolour, WidgetDimensions::scaled.fullbevel.top); GfxDrawLine(fr.left + circle_width / 2, ycenter, fr.right, ycenter, linecolour, WidgetDimensions::scaled.fullbevel.top); } + y += step_size; } } @@ -1791,8 +1789,7 @@ struct BuildVehicleWindow : Window { this->vehicle_type, r, this->eng_list, - this->vscroll->GetPosition(), - static_cast(std::min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->eng_list.size())), + *this->vscroll, this->sel_engine, false, DEFAULT_GROUP From 59420d57ec1c9551c4b656eac9e290b1bd863ff7 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 27 Feb 2024 17:19:17 +0000 Subject: [PATCH 022/695] Codechange: Use vehicle tile hash to build depot vehicle list. (#12186) This avoids iterating the entire vehicle pool. --- src/vehiclelist.cpp | 62 ++++++++++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/src/vehiclelist.cpp b/src/vehiclelist.cpp index 5095b71ee0..31c494e9a6 100644 --- a/src/vehiclelist.cpp +++ b/src/vehiclelist.cpp @@ -9,6 +9,7 @@ #include "stdafx.h" #include "train.h" +#include "vehicle_func.h" #include "vehiclelist.h" #include "vehiclelist_func.h" #include "group.h" @@ -59,6 +60,39 @@ bool VehicleListIdentifier::UnpackIfValid(uint32_t data) return result; } +/** Data for building a depot vehicle list. */ +struct BuildDepotVehicleListData +{ + VehicleList *engines; ///< Pointer to list to add vehicles to. + VehicleList *wagons; ///< Pointer to list to add wagons to (can be nullptr). + VehicleType type; ///< Type of vehicle. + bool individual_wagons; ///< If true add every wagon to \a wagons which is not attached to an engine. If false only add the first wagon of every row. +}; + +/** + * Add vehicles to a depot vehicle list. + * @param v The found vehicle. + * @param data The depot vehicle list data. + * @return Always nullptr. + */ +static Vehicle *BuildDepotVehicleListProc(Vehicle *v, void *data) +{ + auto bdvld = static_cast(data); + if (v->type != bdvld->type || !v->IsInDepot()) return nullptr; + + if (bdvld->type == VEH_TRAIN) { + const Train *t = Train::From(v); + if (t->IsArticulatedPart() || t->IsRearDualheaded()) return nullptr; + if (bdvld->wagons != nullptr && t->First()->IsFreeWagon()) { + if (bdvld->individual_wagons || t->IsFreeWagon()) bdvld->wagons->push_back(t); + return nullptr; + } + } + + if (v->IsPrimaryVehicle()) bdvld->engines->push_back(v); + return nullptr; +}; + /** * Generate a list of vehicles inside a depot. * @param type Type of vehicle @@ -72,32 +106,8 @@ void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engine engines->clear(); if (wagons != nullptr && wagons != engines) wagons->clear(); - for (const Vehicle *v : Vehicle::Iterate()) { - /* General tests for all vehicle types */ - if (v->type != type) continue; - if (v->tile != tile) continue; - - switch (type) { - case VEH_TRAIN: { - const Train *t = Train::From(v); - if (t->IsArticulatedPart() || t->IsRearDualheaded()) continue; - if (!t->IsInDepot()) continue; - if (wagons != nullptr && t->First()->IsFreeWagon()) { - if (individual_wagons || t->IsFreeWagon()) wagons->push_back(t); - continue; - } - if (!t->IsPrimaryVehicle()) continue; - break; - } - - default: - if (!v->IsPrimaryVehicle()) continue; - if (!v->IsInDepot()) continue; - break; - } - - engines->push_back(v); - } + BuildDepotVehicleListData bdvld{engines, wagons, type, individual_wagons}; + FindVehicleOnPos(tile, &bdvld, BuildDepotVehicleListProc); /* Ensure the lists are not wasting too much space. If the lists are fresh * (i.e. built within a command) then this will actually do nothing. */ From e93d081a4af01cb55a0c27b288a74c61d1789ea7 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 27 Feb 2024 18:18:57 +0000 Subject: [PATCH 023/695] Codechange: Use range-for instead of indexed loop. (#12191) --- src/vehicle_cmd.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 97ecf8432f..57a66b5cb6 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -670,9 +670,7 @@ CommandCost CmdMassStartStopVehicle(DoCommandFlag flags, TileIndex tile, bool do BuildDepotVehicleList(vli.vtype, tile, &list, nullptr); } - for (uint i = 0; i < list.size(); i++) { - const Vehicle *v = list[i]; - + for (const Vehicle *v : list) { if (!!(v->vehstatus & VS_STOPPED) != do_start) continue; if (!vehicle_list_window && !v->IsChainInDepot()) continue; @@ -705,8 +703,8 @@ CommandCost CmdDepotSellAllVehicles(DoCommandFlag flags, TileIndex tile, Vehicle CommandCost last_error = CMD_ERROR; bool had_success = false; - for (uint i = 0; i < list.size(); i++) { - CommandCost ret = Command::Do(flags, list[i]->index, true, false, INVALID_CLIENT_ID); + for (const Vehicle *v : list) { + CommandCost ret = Command::Do(flags, v->index, true, false, INVALID_CLIENT_ID); if (ret.Succeeded()) { cost.AddCost(ret); had_success = true; @@ -736,9 +734,7 @@ CommandCost CmdDepotMassAutoReplace(DoCommandFlag flags, TileIndex tile, Vehicle /* Get the list of vehicles in the depot */ BuildDepotVehicleList(vehicle_type, tile, &list, &list, true); - for (uint i = 0; i < list.size(); i++) { - const Vehicle *v = list[i]; - + for (const Vehicle *v : list) { /* Ensure that the vehicle completely in the depot */ if (!v->IsChainInDepot()) continue; From 529d8134966a34d6dfad85aab6febbf646acd02b Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 27 Feb 2024 18:35:58 +0000 Subject: [PATCH 024/695] Update: Translations from eints hungarian: 96 changes by titanicbobo, 11 changes by pnpBrumi ukrainian: 19 changes by StepanIvasyn latvian: 1 change by lexuslatvia spanish: 9 changes by MontyMontana portuguese (brazilian): 94 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 188 +++++++++++++------------- src/lang/hungarian.txt | 214 +++++++++++++++--------------- src/lang/latvian.txt | 2 +- src/lang/spanish.txt | 12 +- src/lang/ukrainian.txt | 21 ++- 5 files changed, 230 insertions(+), 207 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 196dc8ff7b..35aa2d46d1 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -446,7 +446,7 @@ STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Configurações STR_SETTINGS_MENU_AI_SETTINGS :Configurações de IA STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Configurações de Script de Jogo STR_SETTINGS_MENU_NEWGRF_SETTINGS :Configurações de NewGRF -STR_SETTINGS_MENU_SANDBOX_OPTIONS :Opções da "Sandbox" +STR_SETTINGS_MENU_SANDBOX_OPTIONS :Opções de "jogar sujo" STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Opções de transparência STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Mostrar nomes de localidades STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Mostrar nomes de estações @@ -1224,7 +1224,7 @@ STR_CONFIG_SETTING_TYPE_GAME_INGAME :Configuração STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Configuração da empresa (armazenada no jogo salvo; afeta apenas novos jogos) STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Configuração da empresa (armazenada no jogo salvo; afeta apenas a empresa atual) STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Cuidado! -STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Esta ação irá restaurar todas as configurações do jogo para os seus valores padrão.{}Você tem certeza que deseja continuar? +STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Esta ação irá restaurar todas as configurações do jogo para os seus valores padrão.{}Tem certeza de que deseja continuar? STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoria: STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo: @@ -1700,7 +1700,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_NO :Não STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES :Sim STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :Sim, exceto fixadas -STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Usar o formato de data {STRING} ao salvar os arquivos de jogos +STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Usar o formato de data {STRING} nos nomes ao salvar jogos STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Formato da data nos nomes dos jogos salvos ###length 3 STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :longo (31 Dez 2008) @@ -1719,10 +1719,10 @@ STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Todas as açõe STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Todas as ações STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Usar grupos na lista de veículos: {STRING} -STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ativar a utilização de listas de veículos avançada para agrupamento de veículos +STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ativar a utilização de listas avançadas de veículos para o agrupamento de veículos STR_CONFIG_SETTING_LOADING_INDICATORS :Usar indicadores de carga: {STRING} -STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Selecionar se os indicadores de carga são mostrados acima dos veículos (des)carregando +STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Selecionar se os indicadores de carga são mostrados acima dos veículos enquanto carregam ou descarregam STR_CONFIG_SETTING_TIMETABLE_MODE :Unidades de tempo para horários: {STRING} STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Selecionar as unidades de tempo usadas nos horários dos veículos @@ -1745,7 +1745,7 @@ STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Último dispon STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Mais utilizado STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Mostrar caminhos reservados para trajetos: {STRING} -STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Dar aos trajetos reservados uma cor diferente para ajudar em problemas com trens que se recusam a passar por seções controlados por sinais de caminho +STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Destacar os trajetos reservados com uma cor diferente para ajudar em problemas com trens que se recusam a passar por seções controlados por sinais de caminho STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Manter as ferramentas de construção ativas após o uso: {STRING} STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Manter ativas as ferramentas de construção para pontes, túneis, etc. após o uso @@ -1755,7 +1755,7 @@ STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Remover automat STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Limite de velocidade do avanço rápido: {STRING} STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limite da velocidade do jogo quando o avanço rápido está ativado. 0 = sem limite (tão rápido quanto o seu computador permitir). Valores abaixo de 100% tornam o jogo mais lento. O limite superior depende das especificações do seu computador e pode variar dependendo do jogo. -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% a velocidade normal do jogo +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% da velocidade normal do jogo ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Sem limite (o máximo que o seu computador suporta) @@ -1766,7 +1766,7 @@ STR_CONFIG_SETTING_SOUND_NEWS :Jornal: {STRING STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Reproduzir efeito sonoro ao mostrar um jornal ###length 2 -STR_CONFIG_SETTING_SOUND_NEW_YEAR :Fim de ano: {STRING} +STR_CONFIG_SETTING_SOUND_NEW_YEAR :Fim do ano: {STRING} STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Fim do período: {STRING} ###length 2 @@ -1818,7 +1818,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite que com STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes antes de scripts serem suspensos: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Número máximo de passos computacionais que um script pode executar em um turno STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Utilização máxima de memória por script: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Quantidade de memória que um script pode usar antes de ser automaticamente concluído. Pode ser necessário aumentar este valor para mapas maiores. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Quantidade de memória que um script pode usar antes dele ser encerrado automaticamente. Para mapas maiores pode ser necessário aumentar este valor. STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Intervalos de manutenção são em porcentagem: {STRING} @@ -1858,7 +1858,7 @@ STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Acidentes / des STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Mostrar um jornal quando ocorrem acidentes ou desastres STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :Acidentes de veículos dos concorrentes: {STRING} -STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :Mostrar um jornal sobre veículos acidentados para concorrentes +STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :Mostrar um jornal sobre veículos acidentados para os concorrentes STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Informações da empresa: {STRING} STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Mostrar um jornal quando uma nova empresa é criada ou quando empresas estão à beira da falência @@ -1900,7 +1900,7 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_OFF :Desligado STR_CONFIG_SETTING_NEWS_MESSAGES_SUMMARY :Resumo STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Completo -STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Noticias coloridas aparecem em: {STRING} +STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Notícias em cores aparecem em: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Ano em que os jornais serão mostrados em cores. Antes deste ano, serão mostrados em preto e branco. STR_CONFIG_SETTING_STARTING_YEAR :Data de início: {STRING} @@ -1911,7 +1911,7 @@ STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nunca STR_CONFIG_SETTING_ECONOMY_TYPE :Tipo de economia: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :A economia 'Suave' faz mudanças de produção com mais frequência e em etapas menores. Economia 'Congelada' não permite mudanças de produção e fechamentos de indústrias. Esta configuração pode não ter efeito se os tipos de indústria forem fornecidos por um NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Economia 'Suave' faz mudanças de produção com mais frequência e em etapas menores. Economia 'Congelada' não permite mudanças de produção e fechamentos de indústrias. Esta configuração pode não ter efeito se os tipos de indústria forem fornecidos por um NewGRF. ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Suave @@ -1948,7 +1948,7 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT :Padrão STR_CONFIG_SETTING_TOWN_LAYOUT_BETTER_ROADS :Estradas melhores STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :Grade 2x2 STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :Grade 3x3 -STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Aleatório +STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Aleatória STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Localidades podem construir estradas: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Permitir que localidades construam estradas para crescimento. Desative para prevenir a construção de estradas pelas autoridades locais @@ -1956,7 +1956,7 @@ STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Localidades pod STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Quando ativada, esta configuração permite que as localidades construam passagens de nível STR_CONFIG_SETTING_NOISE_LEVEL :Limitar a localização do aeroporto em função do nível de ruído: {STRING} -STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Permitir que as localidades impeçam a construção de aeroportos em função da aceitação do nível de ruído, que é baseado no total de habitantes da localidade e no tamanho e distância do aeroporto. Se esta configuração estiver desativada, as localidades permitirão apenas dois aeroportos, a menos que a atitude da autoridade local esteja definida como "Permissiva" +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Permitir que as localidades impeçam a construção de aeroportos em função do nível de aceitação de ruído, que é baseado no total de habitantes da localidade e no tamanho e distância do aeroporto. Se esta configuração estiver desativada, as localidades permitirão apenas dois aeroportos, a menos que a atitude da autoridade local esteja definida como "Permissiva" STR_CONFIG_SETTING_TOWN_FOUNDING :Fundar localidades no jogo: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Quando ativada, esta configuração permite aos jogadores fundar novas localidades no jogo @@ -2027,20 +2027,20 @@ STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Quantidade de l STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 a cada {COMMA} ###setting-zero-is-special STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Nenhum -STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador do tamanho inicial da cidade: {STRING} +STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador de tamanho inicial da cidade: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamanho médio das cidades em relação às localidades normais no início do jogo STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Atualizar a distribuição a cada {STRING} STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo entre recálculos subsequentes da rede de conexões. Cada recálculo atualiza os planos para um componente da rede. Isso significa que um valor X para esta configuração não significa que toda a rede será atualizada a cada X segundos. Apenas algum componente será atualizado. Quanto menor o tempo definido, mais tempo de CPU será necessário para calculá-lo. Quanto maior o valor definido, mais tempo será necessário até que a distribuição de carga inicie nas novas rotas. STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Usar {STRING} para recalcular a distribuição -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo gasto para cada recálculo de um componente da rede de conexões. Quando um recálculo é iniciado, uma tarefa é gerada e pode ser executada por esse número de segundos. Quanto menor for esse valor, maior a chance de que a tarefa não seja concluída quando deveria. Então o jogo para até que ela seja completada, causando um atraso. Quanto maior for esse valor, mais tempo será necessário para a distribuição ser atualizada quando as rotas mudam. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo gasto para cada recálculo de um componente da rede de conexões. Quando um recálculo é iniciado, uma tarefa é gerada e pode ser executada por esse número de segundos. Quanto menor for esse valor, maior a chance de que a tarefa não seja concluída quando deveria. Então o jogo para até que ela seja completada, causando um atraso. Quanto maior for esse valor, mais tempo será necessário para a distribuição ser atualizada quando as rotas mudam. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribuição para passageiros: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" significa que aproximadamente o mesmo número de passageiros irá de uma estação A para uma estação B assim como de B para A. "Assimétrico" significa que um número arbitrário de passageiros pode ir em qualquer direção. "Manual" significa que não haverá distribuição automática para os passageiros. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" significa que aproximadamente o mesmo número de passageiros irá de uma estação A para uma estação B, assim como de B para A. "Assimétrico" significa que um número arbitrário de passageiros pode ir em qualquer direção. "Manual" significa que não haverá distribuição automática dos passageiros. STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modo de distribuição para correspondências: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simétrico" significa que aproximadamente a mesma quantidade de correspondência será enviada de uma estação A para uma estação B assim como de B para A. "Assimétrica" significa que quantidades arbitrárias de correspondência podem ser enviadas em qualquer direção. "Manual" significa que nenhuma distribuição automática ocorrerá por correio. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simétrico" significa que aproximadamente a mesma quantidade de correspondência será enviada de uma estação A para uma estação B, assim como de B para A. "Assimétrica" significa que quantidades arbitrárias de correspondência podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática de correspondências. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Modo de distribuição para a classe de carga BLINDADA: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe de carga BLINDADA contém objetos de valor em clima temperado, diamantes em clima subtropical ou ouro em clima subártico. NewGRFs podem mudar isso. "Simétrica" significa que aproximadamente a mesma quantidade dessa carga será enviada de uma estação A para uma estação B assim como de B para A. "Assimétrica" significa que quantidades arbitrárias dessa carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática para aquela carga. Recomenda-se definir isso como assimétrico ou manual ao jogar subártico ou subtropical, pois os bancos só recebem carga nesses climas. Para temperado, você também pode escolher simétrico, pois os bancos enviarão objetos de valor de volta ao banco de origem. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe de carga BLINDADA contém objetos de valor em clima temperado, diamantes em clima subtropical ou ouro em clima subártico. NewGRFs podem mudar isso. "Simétrica" significa que aproximadamente a mesma quantidade dessa carga será enviada de uma estação A para uma estação B, assim como de B para A. "Assimétrica" significa que quantidades arbitrárias dessa carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática para aquela carga. Recomenda-se definir isso como assimétrico ou manual ao jogar subártico ou subtropical, pois os bancos só recebem carga nesses climas. Para temperado, você também pode escolher simétrico, pois os bancos enviarão objetos de valor de volta ao banco de origem. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Modo de distribuição para outras classes de carga: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Assimétrico" significa que quantidades arbitrárias de carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática dessas cargas. ###length 3 @@ -2054,10 +2054,10 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Quanto maior fo STR_CONFIG_SETTING_DEMAND_DISTANCE :Efeito da distância na demanda: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Se for definido um valor maior que 0, a distância entre a estação de origem A de alguma carga e um possível destino B terá um efeito na quantidade de carga transportada de A até B. Quanto mais distante B estiver de A, menos carga será enviada. Quanto maior o valor definido, menos carga será transportada para estações distantes e mais carga será enviada para estações mais próximas. STR_CONFIG_SETTING_DEMAND_SIZE :Quantidade de carga retornada no modo simétrico: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Definindo isto para menos de 100% faz com que a distribuição simétrica comporte-se mais como a assimétrica. Menos carga será devolvida à força se uma certa quantidade for enviada a uma estação. Se você definir para 0% a distribuição simétrica se comportará exatamente como a assimétrica. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Definindo isto para menos de 100% faz com que a distribuição simétrica comporte-se mais como a assimétrica. Menos carga será forçadamente devolvida se uma certa quantidade for enviada a uma estação. Se você definir para 0% a distribuição simétrica se comportará exatamente como a assimétrica. STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturação de rotas curtas antes de usar rotas de grande capacidade: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequentemente há diversas rotas entre duas estações. Cargodist irá saturar a rota mais curta primeiro, depois usar a segunda rota mais curta até saturá-la, e assim por diante. A saturação é determinada por uma estimativa da capacidade e do uso planejado. Ao saturar todas as rotas, se ainda houver demanda não atendida, irá sobrecarregar todas as rotas, dando preferência àquelas de maior capacidade. Entretanto, na maioria das vezes o algoritmo não irá estimar corretamente a capacidade. Essa configuração permite definir até que porcentagem uma rota mais curta deverá ser saturada na primeira passada antes do algoritmo selecionar a próxima rota mais longa. Defina-o para menos de 100% para evitar estações sobrecarregadas no caso de capacidade superestimada. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequentemente há diversas rotas entre duas estações. Cargodist irá saturar a rota mais curta primeiro, depois usar a segunda rota mais curta até saturá-la, e assim por diante. A saturação é determinada por uma estimativa da capacidade e da utilização prevista. Ao saturar todas as rotas, se ainda houver demanda não atendida, CargoDist irá sobrecarregar todas as rotas, dando preferência àquelas de maior capacidade. Entretanto, na maioria das vezes o algoritmo não irá estimar corretamente a capacidade. Esta configuração permite definir até que porcentagem uma rota mais curta deverá ser saturada na primeira passada antes do algoritmo selecionar a próxima rota mais longa. Defina-o para menos de 100% para evitar estações sobrecarregadas no caso de capacidade superestimada. STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unidades de velocidade (terrestre): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Unidades de velocidade (náutica): {STRING} @@ -2132,14 +2132,14 @@ STR_CONFIG_SETTING_AI :Competidores STR_CONFIG_SETTING_AI_NPC :Competidores IA STR_CONFIG_SETTING_NETWORK :Rede -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Gerador de rotas para os trens: {STRING} +STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Gerador de rotas para trens: {STRING} STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Gerador de rotas usado para os trens -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Gerador de rotas para os veículos: {STRING} +STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Gerador de rotas para veículos: {STRING} STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Gerador de rotas usado para os veículos rodoviários -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Gerador de rotas para as embarcações: {STRING} +STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Gerador de rotas para embarcações: {STRING} STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Gerador de rotas usado para as embarcações STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Reversão automática em sinais: {STRING} -STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permitir que os trens invertam a direção em um sinal, se eles esperaram ali por muito tempo +STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permitir que os trens invertam a direção em um sinal, se eles esperaram lá muito tempo ###length 2 STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recomendado) @@ -2152,7 +2152,7 @@ STR_CONFIG_ERROR_ARRAY :{WHITE}... erro STR_CONFIG_ERROR_INVALID_VALUE :{WHITE}... valor inválido '{STRING}' para '{STRING}' STR_CONFIG_ERROR_TRAILING_CHARACTERS :{WHITE}... caracteres extras no final de '{STRING}' STR_CONFIG_ERROR_DUPLICATE_GRFID :{WHITE}... ignorando NewGRF '{STRING}': ID do GRF é idêntico a '{STRING}' -STR_CONFIG_ERROR_INVALID_GRF :{WHITE}... ignorando NewGRF inválido '{STRING}': {STRING} +STR_CONFIG_ERROR_INVALID_GRF :{WHITE}... ignorando NewGRF '{STRING}' inválido: {STRING} STR_CONFIG_ERROR_INVALID_GRF_NOT_FOUND :não encontrado STR_CONFIG_ERROR_INVALID_GRF_UNSAFE :inseguro para uso estático STR_CONFIG_ERROR_INVALID_GRF_SYSTEM :NewGRF do sistema @@ -2164,7 +2164,7 @@ STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... igno STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ignorando conjunto de Sons Base '{STRING}': não encontrado STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ignorando conjunto de Músicas Base '{STRING}': não encontrado STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Memória insuficiente -STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Falha ao alocar {BYTES} de spritecache. A spritecache foi reduzida para {BYTES}. Isto irá reduzir o desempenho do OpenTTD. Para diminuir os requisitos de memória você pode desabilitar gráficos de 32 bpp e/ou os níveis de zoom +STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Falha ao alocar {BYTES} de memória para sprites. A reserva de memória para sprites foi reduzida para {BYTES}. Isto irá reduzir o desempenho do OpenTTD. Para diminuir os requisitos de memória você pode desabilitar gráficos de 32bpp e/ou diminuir os níveis de ampliação das visualizações # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Erro nas configurações de vídeo... @@ -2186,7 +2186,7 @@ STR_INTRO_HIGHSCORE :{BLACK}Tabela d STR_INTRO_HELP :{BLACK}Ajuda & Manuais STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Configurações STR_INTRO_NEWGRF_SETTINGS :{BLACK}Configurações de NewGRF -STR_INTRO_ONLINE_CONTENT :{BLACK}Checar conteúdo online +STR_INTRO_ONLINE_CONTENT :{BLACK}Verificar conteúdo online STR_INTRO_AI_SETTINGS :{BLACK}Configurações de IA STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Configurações de Script de Jogo STR_INTRO_QUIT :{BLACK}Sair @@ -2195,7 +2195,7 @@ STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Iniciar STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Abrir um jogo salvo STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Iniciar um novo jogo, usando um mapa topográfico como terreno STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Iniciar um novo jogo, usando um cenário personalizado -STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Criar um mundo/cenário de jogo personalizado +STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Criar um cenário de jogo personalizado STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Iniciar um jogo multijogador STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Selecionar paisagem 'clima temperado' @@ -2218,18 +2218,18 @@ STR_INTRO_TRANSLATION :{BLACK}Faltam { # Quit window STR_QUIT_CAPTION :{WHITE}Sair -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Você tem certeza que deseja sair do OpenTTD? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Tem certeza de que deseja sair do OpenTTD? STR_QUIT_YES :{BLACK}Sim STR_QUIT_NO :{BLACK}Não # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abandonar jogo -STR_ABANDON_GAME_QUERY :{YELLOW}Você tem certeza que deseja abandonar este jogo? -STR_ABANDON_SCENARIO_QUERY :{YELLOW}Você tem certeza que deseja abandonar este cenário? +STR_ABANDON_GAME_QUERY :{YELLOW}Tem certeza de que deseja abandonar este jogo? +STR_ABANDON_SCENARIO_QUERY :{YELLOW}Tem certeza de que deseja abandonar este cenário? # Help window STR_HELP_WINDOW_CAPTION :{WHITE}Ajuda & Manuais -STR_HELP_WINDOW_WEBSITES :{BLACK}Sites na Web +STR_HELP_WINDOW_WEBSITES :{BLACK}Páginas na Internet STR_HELP_WINDOW_DOCUMENTS :{BLACK}Documentos STR_HELP_WINDOW_README :{BLACK}Leia-me STR_HELP_WINDOW_CHANGELOG :{BLACK}Registo de modificações @@ -2241,7 +2241,7 @@ STR_HELP_WINDOW_BUGTRACKER :{BLACK}Relatar STR_HELP_WINDOW_COMMUNITY :{BLACK}Comunidade # Cheat window -STR_CHEATS :{WHITE}Opções da "Sandbox" +STR_CHEATS :{WHITE}Opções de "Jogar Sujo" STR_CHEAT_MONEY :{LTBLUE}Aumentar dinheiro em {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Jogando como empresa: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Escavadeira mágica (remove indústrias, objetos estáticos): {ORANGE}{STRING} @@ -2325,7 +2325,7 @@ STR_FACE_FACECODE_SET :{WHITE}Um novo STR_FACE_FACECODE_ERR :{WHITE}Não foi possível alterar o número de face do presidente - deve ser um número entre 0 e 4,294,967,295! STR_FACE_SAVE :{BLACK}Salvar STR_FACE_SAVE_TOOLTIP :{BLACK}Salvar face favorita -STR_FACE_SAVE_DONE :{WHITE}Esta face será salva como sua favorita no arquivo de configuração do OpenTTD +STR_FACE_SAVE_DONE :{WHITE}Esta face será armazenada como sua favorita no arquivo de configuração do OpenTTD STR_FACE_EUROPEAN :{BLACK}Europeu STR_FACE_SELECT_EUROPEAN :{BLACK}Selecionar faces Europeias STR_FACE_AFRICAN :{BLACK}Africano @@ -2380,12 +2380,12 @@ STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Data STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Data atual STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}h {NUM}min STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}Tempo de jogo -STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}Tempo jogando enquanto{}o jogo não estava pausado +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}Tempo de jogo enquanto{}o jogo não estava pausado STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Idioma, versão do servidor, etc. STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Clique em um jogo da lista para selecioná-lo STR_NETWORK_SERVER_LIST_LAST_JOINED_SERVER :{BLACK}Servidor no qual você entrou na última vez: -STR_NETWORK_SERVER_LIST_CLICK_TO_SELECT_LAST :{BLACK}Clique para selecionar o servidor no qual você jogou da última vez +STR_NETWORK_SERVER_LIST_CLICK_TO_SELECT_LAST :{BLACK}Clique para selecionar o servidor no qual você jogou na última vez STR_NETWORK_SERVER_LIST_GAME_INFO :{SILVER}INFORMAÇÃO DO JOGO STR_NETWORK_SERVER_LIST_CLIENTS :{SILVER}Clientes: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA} @@ -2428,7 +2428,7 @@ STR_NETWORK_START_SERVER_CAPTION :{WHITE}Iniciar STR_NETWORK_START_SERVER_NEW_GAME_NAME :{BLACK}Nome do jogo: STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}O nome do jogo será mostrado aos outros jogadores no menu de seleção de jogos multijogador STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Definir senha -STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Proteja o jogo com uma senha se não desejar que seja publicamente acessível +STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Proteja o jogo com uma senha se não desejar que ele seja publicamente acessível STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibilidade STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Se outras pessoas podem ver seu servidor na lista pública @@ -2437,7 +2437,7 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Número STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Escolher o número máximo de clientes. Não é necessário que todos os disponíveis sejam ocupados STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} empresa{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Número máximo de empresas: -STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limita o servidor para uma certa quantia de empresas +STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limitar o servidor a um certo número de empresas STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Coloque o nome para o jogo em rede @@ -2460,15 +2460,15 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Obtendo STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconectar -STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor está protegido. Digite a senha -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa está protegida. Digite a senha +STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Introduza a senha +STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Introduza a senha # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Jogadores online +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Jogadores conectados STR_NETWORK_COMPANY_LIST_SPECTATE :Assistir # Network client list -STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Jogadores Online +STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Jogadores Conectados STR_NETWORK_CLIENT_LIST_SERVER :{BLACK}Servidor STR_NETWORK_CLIENT_LIST_SERVER_NAME :{BLACK}Nome STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP :{BLACK}Nome do servidor no qual você está jogando @@ -2485,8 +2485,8 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Nome STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Seu nome de jogador STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Editar o seu nome de jogador STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Seu nome de jogador -STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Ações administrativas a serem executadas para este cliente -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Ações administrativas a serem executadas para esta empresa +STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Ações administrativas para executar para este cliente +STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Ações administrativas para executar para esta empresa STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Juntar-se a esta empresa STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Enviar uma mensagem a este jogador STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Enviar uma mensagem a todos os jogadores desta empresa @@ -2495,7 +2495,7 @@ STR_NETWORK_CLIENT_LIST_SPECTATORS :Espectadores STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nova empresa) STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Criar uma nova empresa e juntar-se a ela STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Esse é você -STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Esse é o hospedeiro do jogo +STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Este é o hospedeiro do jogo STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} cliente{P "" s} - {NUM}/{NUM} empres{P a as} STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}Número de clientes atualmente conectados, número de empresas e número máximo de empresas permitido pelo administrador do servidor @@ -2510,13 +2510,13 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Via retr STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Expulsar STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Banir STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Excluir -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Desbloqueio com senha +STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Desbloquear com senha STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Ação administrativa -STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Você tem certeza que deseja expulsar o jogador '{STRING}'? -STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Você tem certeza que deseja banir o jogador '{STRING}'? -STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Você tem certeza que deseja excluir a empresa '{COMPANY}'? -STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Você tem certeza que deseja restaurar a senha da empresa '{COMPANY}'? +STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Tem certeza de que deseja expulsar o jogador '{STRING}'? +STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Tem certeza de que deseja banir o jogador '{STRING}'? +STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Tem certeza de que deseja excluir a empresa '{COMPANY}'? +STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Tem certeza de que deseja apagar a senha da empresa '{COMPANY}'? STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Usar retransmissão? STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Erro ao estabelecer uma conexão entre você e o servidor.'{STRING}'Você gostaria de retransmitir essa sessão via '{STRING}'? @@ -2525,7 +2525,7 @@ STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Sim, ape STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Sim, não perguntar novamente STR_NETWORK_ASK_SURVEY_CAPTION :Participar de pesquisa automatizada? -STR_NETWORK_ASK_SURVEY_TEXT :Você gostaria de participar da pesquisa automatizada?{}O OpenTTD enviará uma pesquisa ao sair de um jogo.{}Você pode alterar isso a qualquer momento em "Opções do jogo". +STR_NETWORK_ASK_SURVEY_TEXT :Você gostaria de participar da pesquisa automatizada?{}O OpenTTD enviará uma pesquisa ao sair de um jogo.{}Você pode alterar isso a qualquer momento em "Opções do Jogo". STR_NETWORK_ASK_SURVEY_PREVIEW :Pré-visualizar resultado da pesquisa STR_NETWORK_ASK_SURVEY_LINK :Sobre pesquisa e privacidade STR_NETWORK_ASK_SURVEY_NO :Não @@ -2535,16 +2535,16 @@ STR_NETWORK_SPECTATORS :Espectadores # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Não salvar a senha digitada -STR_COMPANY_PASSWORD_OK :{BLACK}Dar à empresa uma nova senha +STR_COMPANY_PASSWORD_OK :{BLACK}Atribuir à empresa a nova senha STR_COMPANY_PASSWORD_CAPTION :{WHITE}Senha da empresa STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Senha padrão da empresa -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Usar esta senha de empresa como padrão para novas empresas +STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Usar a senha desta empresa como padrão para novas empresas # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Participar STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Participar e jogar por esta empresa STR_COMPANY_VIEW_PASSWORD :{BLACK}Senha -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Protege a sua empresa com uma senha para prevenir a entrada de usuários não autorizados +STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Proteja a sua empresa com uma senha para impedir a participação de usuários não autorizados STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Definir senha para empresa # Network chat @@ -2591,7 +2591,7 @@ STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Nos últ ###length 21 STR_NETWORK_ERROR_CLIENT_GENERAL :erro geral -STR_NETWORK_ERROR_CLIENT_DESYNC :erro de dessincronização +STR_NETWORK_ERROR_CLIENT_DESYNC :erro por perda de sincronização STR_NETWORK_ERROR_CLIENT_SAVEGAME :não foi possível carregar o mapa STR_NETWORK_ERROR_CLIENT_CONNECTION_LOST :conexão perdida STR_NETWORK_ERROR_CLIENT_PROTOCOL_ERROR :erro de protocolo @@ -2661,11 +2661,11 @@ STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Marcar p STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}Desmarcar tudo STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Marcar todo o conteúdo para não ser baixado STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Procurar em sites externos -STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Conteúdo procurado não está disponível no servidor de conteúdo do OpenTTD se hospedado em websites não relacionados ao OpenTTD +STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Procurar conteúdo, que não está disponível no servidor de conteúdo do OpenTTD, em sites não associados ao OpenTTD STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Você está saindo do OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Os termos e condições ao baixar conteúdo de fontes externas pode variar.{}Você deverá consultar as fontes para obter instruções de como instalar o conteúdo no OpenTTD.{}Você deseja continuar? STR_CONTENT_FILTER_TITLE :{BLACK}Filtrar por etiqueta/nome: -STR_CONTENT_OPEN_URL :{BLACK}Visitar a página web +STR_CONTENT_OPEN_URL :{BLACK}Página da internet STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Visitar o site desse conteúdo STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Download STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Iniciar o download do conteúdo selecionado @@ -2693,7 +2693,7 @@ STR_CONTENT_NO_ZLIB :{WHITE}OpenTTD STR_CONTENT_NO_ZLIB_SUB :{WHITE}... não é possível fazer o download do conteúdo! # Order of these is important! -STR_CONTENT_TYPE_BASE_GRAPHICS :Gráficos padrão +STR_CONTENT_TYPE_BASE_GRAPHICS :Gráficos base STR_CONTENT_TYPE_NEWGRF :NewGRF STR_CONTENT_TYPE_AI :IA STR_CONTENT_TYPE_AI_LIBRARY :Biblioteca de IA's @@ -2860,7 +2860,7 @@ STR_BRIDGE_NAME_SUSPENSION_STEEL :Suspensa, Aço STR_BRIDGE_NAME_GIRDER_STEEL :Vigas, Aço STR_BRIDGE_NAME_CANTILEVER_STEEL :Cantilever, Aço STR_BRIDGE_NAME_SUSPENSION_CONCRETE :Suspensa, Concreto -STR_BRIDGE_NAME_WOODEN :De madeira +STR_BRIDGE_NAME_WOODEN :Madeira STR_BRIDGE_NAME_CONCRETE :Concreto STR_BRIDGE_NAME_TUBULAR_STEEL :Tubular, Aço STR_BRIDGE_TUBULAR_SILICON :Tubular, Silício @@ -2870,11 +2870,11 @@ STR_BRIDGE_TUBULAR_SILICON :Tubular, Silíc STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Construção de estradas STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Construção de Linhas de Bonde STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Construir seção de estrada. Ctrl+Clique remove seção da estrada. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Construir linha de bonde. Ctrl+Clique remove seção da linha. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Construir seção de linha de bonde. Ctrl+Clique remove seção da linha. Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Construir estrada usando o modo Autoestrada. Ctrl+Clique remove seção da estrada. Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Construir linha de bonde usando o modo Autotrilho. Ctrl+Clique remove uma seção da linha. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construir depósito para veículos rodoviários (para compra e manutenção de veículos). Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construir depósito de bonde (para compra e manutenção de bondes). Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construir depósito rodoviário (para compra e manutenção de veículos). Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construir depósito de bondes (para compra e manutenção de bondes). Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Construir estação de ônibus. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Construir estação de bonde de passageiros. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Construir estação de caminhão. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado @@ -2917,7 +2917,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Construi STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construir doca naval. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Colocar uma boia que pode ser usada como ponto de controle. Pressione também Shift para apenas mostrar o custo estimado STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construir aqueduto. Pressione também Shift para apenas mostrar o custo estimado -STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Construir canal. Usar Ctrl+Clique no nível do mar para inundar com água do mar +STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Construir canal. Ctrl+Clique no nível do mar para inundar com água do mar STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Colocar rios. Ctrl+Clique para selecionar diagonalmente # Ship depot construction window @@ -2979,11 +2979,11 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plantar STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Plantar Aleatoriamente STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plantar árvores aleatoriamente no terreno STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plantar árvores isoladas usando Clicar+Arrastar sobre o terreno. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plantar árvores isoladas ao arrastar o cursor sobre o terreno. STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Bosque -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plantar pequenas florestas usando Clicar+Arrastar sobre o terreno. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plantar florestas pequenas ao arrastar o cursor sobre o terreno. STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Floresta -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantar florestas grandes usando Clicar+Arrastar sobre o terreno. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantar florestas grandes ao arrastar o cursor sobre o terreno. # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Geração de Terreno @@ -2993,11 +2993,11 @@ STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Aumentar STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Diminuir área do terreno para abaixar/levantar STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Gerar terreno aleatório STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Criar novo cenário -STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Redefinir paisagem +STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Restaurar paisagem STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Remover todas as propriedades das empresas do mapa -STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Redefinir Paisagem -STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Você tem certeza que deseja remover todas as propriedades da empresa? +STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Restaurar Paisagem +STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Tem certeza de que deseja remover todas as propriedades das empresas? # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Geração de Localidades @@ -3008,7 +3008,7 @@ STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Fundar l STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Várias localidades aleatórias STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Cobrir o mapa com localidades colocadas aleatoriamente STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Expandir todas as localidades -STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Fazer todas as localidades crescerem ligeiramente +STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Fazer com que todas as localidades cresçam ligeiramente STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nome da localidade: STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Introduza o nome da localidade @@ -3017,8 +3017,8 @@ STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Nome ale STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Gerar novo nome aleatório STR_FOUND_TOWN_INITIAL_SIZE_TITLE :{YELLOW}Tamanho da localidade: -STR_FOUND_TOWN_INITIAL_SIZE_SMALL_BUTTON :{BLACK}Pequena -STR_FOUND_TOWN_INITIAL_SIZE_MEDIUM_BUTTON :{BLACK}Média +STR_FOUND_TOWN_INITIAL_SIZE_SMALL_BUTTON :{BLACK}Pequeno +STR_FOUND_TOWN_INITIAL_SIZE_MEDIUM_BUTTON :{BLACK}Médio STR_FOUND_TOWN_INITIAL_SIZE_LARGE_BUTTON :{BLACK}Grande STR_FOUND_TOWN_SIZE_RANDOM :{BLACK}Aleatório STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Selecionar o tamanho da localidade @@ -3028,18 +3028,18 @@ STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Cidades STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Disposição de estradas na localidade: STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Selecionar disposição das estradas utilizada para esta localidade STR_FOUND_TOWN_SELECT_LAYOUT_ORIGINAL :{BLACK}Original -STR_FOUND_TOWN_SELECT_LAYOUT_BETTER_ROADS :{BLACK}Melhorado +STR_FOUND_TOWN_SELECT_LAYOUT_BETTER_ROADS :{BLACK}Estradas melhores STR_FOUND_TOWN_SELECT_LAYOUT_2X2_GRID :{BLACK}Grade 2x2 STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}Grade 3x3 -STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Aleatório +STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Aleatória # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Fundação de Indústrias STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Escolher a indústria apropriada desta lista STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Criar indústrias aleatórias -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Cobrir o mapa com indústrias colocadas aleatoriamente +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Preencher o mapa com indústrias colocadas aleatoriamente STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Criar indústrias aleatórias -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Você tem certeza que deseja criar muitas indústrias aleatoriamente? +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Tem certeza de que deseja criar muitas indústrias aleatoriamente? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Custo: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Prospectar STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Construir @@ -3047,7 +3047,7 @@ STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Fundar STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Remover todas as indústrias STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Remover todas as indústrias que existem atualmente no mapa STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Remover todas as indústrias -STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Você tem certeza que deseja remover todas as indústrias? +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Tem certeza de que deseja remover todas as indústrias? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Cadeia Industrial - {STRING} @@ -3068,7 +3068,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Selecion # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Informações do Terreno -STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Centralizar visualização na localização do quadrado. Ctrl+Clique abre uma nova visualização nesse local. +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Centralizar visualização na localização do quadrado. Ctrl+Clique abre uma nova visualização na localização do quadrado. STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Custo para limpar: {LTBLUE}N/D STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Custo para limpar: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Receita após limpar: {LTBLUE}{CURRENCY_LONG} @@ -3081,9 +3081,9 @@ STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autorida STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Nenhum STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordenadas: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Construído/renovado: {LTBLUE}{DATE_LONG} -STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Classe de estação: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Classe da estação: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de estação: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Classe de aeroporto: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Classe do aeroporto: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_NAME :{BLACK}Nome do aeroporto: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nome do quadrado do aeroporto: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} @@ -3132,7 +3132,7 @@ STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Depósito ferro STR_LAI_ROAD_DESCRIPTION_ROAD :Estrada STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Estrada iluminada STR_LAI_ROAD_DESCRIPTION_TREE_LINED_ROAD :Estrada arborizada -STR_LAI_ROAD_DESCRIPTION_ROAD_VEHICLE_DEPOT :Depósito para veículos rodoviários +STR_LAI_ROAD_DESCRIPTION_ROAD_VEHICLE_DEPOT :Depósito rodoviário STR_LAI_ROAD_DESCRIPTION_ROAD_RAIL_LEVEL_CROSSING :Passagem de nível em estrada/linha STR_LAI_ROAD_DESCRIPTION_TRAMWAY :Linha de bonde @@ -3157,7 +3157,7 @@ STR_LAI_WATER_DESCRIPTION_CANAL :Canal STR_LAI_WATER_DESCRIPTION_LOCK :Eclusa STR_LAI_WATER_DESCRIPTION_RIVER :Rio STR_LAI_WATER_DESCRIPTION_COAST_OR_RIVERBANK :Costa ou margem -STR_LAI_WATER_DESCRIPTION_SHIP_DEPOT :Estaleiro naval +STR_LAI_WATER_DESCRIPTION_SHIP_DEPOT :Depósito de embarcações # Industries come directly from their industry names @@ -3173,7 +3173,7 @@ STR_LAI_BRIDGE_DESCRIPTION_RAIL_CONCRETE :Ponte ferroviá STR_LAI_BRIDGE_DESCRIPTION_RAIL_TUBULAR_STEEL :Ponte ferroviária tubular STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_STEEL :Ponte rodoviária suspensa em aço -STR_LAI_BRIDGE_DESCRIPTION_ROAD_GIRDER_STEEL :Ponte rodoviária com vigas em aço +STR_LAI_BRIDGE_DESCRIPTION_ROAD_GIRDER_STEEL :Ponte rodoviária com vigas de aço STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL :Ponte rodoviária cantilever em aço STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_CONCRETE :Ponte rodoviária suspensa de concreto reforçado STR_LAI_BRIDGE_DESCRIPTION_ROAD_WOODEN :Ponte rodoviária de madeira @@ -3197,7 +3197,7 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Taxa de quadros STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Taxa de simulação: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Número de tiques simulados por segundo +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Número de tiques simulados por segundo. STR_FRAMERATE_RATE_BLITTER :{BLACK}Taxa de quadros gráficos: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Número de quadros de vídeo renderizados por segundo. STR_FRAMERATE_SPEED_FACTOR :{BLACK}Fator de velocidade atual do jogo: {DECIMAL}x @@ -3226,7 +3226,7 @@ STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Tiques STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Tiques do mundo: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Atraso na rede de conexões: STR_FRAMERATE_DRAWING :{BLACK}Renderização de gráficos: -STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Visualizadores do mundo: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Visualizações do mundo: STR_FRAMERATE_VIDEO :{BLACK}Saída de video: STR_FRAMERATE_SOUND :{BLACK}Mixagem de áudio: STR_FRAMERATE_ALLSCRIPTS :{BLACK} SJ/IA total: @@ -3243,7 +3243,7 @@ STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Tiques de aeron STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Tiques do mundo STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Atraso na rede de conexões STR_FRAMETIME_CAPTION_DRAWING :Renderizações de gráficos -STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Renderização de visualizações do mundo +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Renderização de visualizações STR_FRAMETIME_CAPTION_VIDEO :Saída de vídeo STR_FRAMETIME_CAPTION_SOUND :Mixagem de áudio STR_FRAMETIME_CAPTION_ALLSCRIPTS :Total de scripts SJ/IA @@ -3275,7 +3275,7 @@ STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtro: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Substituir Arquivo -STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Você tem certeza que deseja substituir o arquivo existente? +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Tem certeza de que deseja substituir o arquivo existente? STR_SAVELOAD_DIRECTORY :{STRING} (Diretório) STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Diretório raiz) @@ -3541,7 +3541,7 @@ STR_NEWGRF_ERROR_INDPROD_CALLBACK :Retorno de prod # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Cuidado! -STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Você está prestes a efetuar alterações em um jogo em andamento. Isto pode travar o OpenTTD ou quebrar o estado do jogo. Não envie relatórios de erros sobre esses problemas.{}Você tem certeza que realmente deseja continuar? +STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Você está prestes a efetuar alterações em um jogo em andamento. Isto pode travar o OpenTTD ou quebrar o estado do jogo. Não envie relatórios de erros sobre esses problemas.{}Tem certeza de que realmente deseja continuar? STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Não é possível adicionar arquivo: ID do GRF duplicado STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Arquivo correspondente não encontrado (GRF compatível carregado) @@ -3682,7 +3682,7 @@ STR_GOALS_TEXT :{ORANGE}{STRING STR_GOALS_NONE :{ORANGE}- Nenhum - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique no objetivo para centralizar a visualização principal na indústria/localidade/quadrado. Ctrl+Clique abre uma nova visualização na localização da indústria/localidade/quadrado +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique no objetivo para centralizar a visualização na indústria/localidade/quadrado. Ctrl+Clique abre uma nova visualização na localização da indústria/localidade/quadrado # Goal question window STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Pergunta @@ -4033,7 +4033,7 @@ STR_GROUP_LIVERY_TOOLTIP :{BLACK}Alterar STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clique para excluir esse grupo da substituição automática global. Ctrl+Clique para excluir também os subgrupos. STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Excluir grupo -STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Você tem certeza que deseja excluir esse grupo e seus descendentes? +STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Tem certeza de que deseja excluir esse grupo e seus descendentes? STR_GROUP_ADD_SHARED_VEHICLE :Adicionar veículos compartilhados STR_GROUP_REMOVE_ALL_VEHICLES :Remover todos os veículos @@ -4247,7 +4247,7 @@ STR_DEPOT_MASS_START_DEPOT_SHIP_TOOLTIP :{BLACK}Clique p STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Clique para todas as aeronaves saírem do hangar STR_DEPOT_DRAG_WHOLE_TRAIN_TO_SELL_TOOLTIP :{BLACK}Arraste a locomotiva até aqui para vender todo o trem -STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Você está prestes a vender todos os veículos do depósito. Você tem certeza? +STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Você está prestes a vender todos os veículos do depósito. Tem certeza? # Engine preview window STR_ENGINE_PREVIEW_CAPTION :{WHITE}Mensagem de um fabricante de veículos @@ -5087,8 +5087,8 @@ STR_ERROR_BUOY_IS_IN_USE :{WHITE}... boia # Depot related errors STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Não é possível construir depósito ferroviário aqui... -STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Não é possível construir depósito de veículos rodoviários aqui... -STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Não é possível construir depósito de bonde aqui... +STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Não é possível construir depósito rodoviário aqui... +STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Não é possível construir depósito de bondes aqui... STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Não é possível construir depósito de embarcações aqui... STR_ERROR_CAN_T_RENAME_DEPOT :{WHITE}Não é possível renomear o depósito... diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 3851726cf2..2f41c6c330 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -319,7 +319,7 @@ STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m # Time units used in string control characters -STR_UNITS_DAYS :{COMMA}{NBSP}nap{P "" s} +STR_UNITS_DAYS :{COMMA}{NBSP}nap STR_UNITS_SECONDS :{COMMA}{NBSP}másodperc STR_UNITS_TICKS :{COMMA}{NBSP}tick @@ -352,7 +352,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Fogd és STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Kicsi/nagy ablakméret közötti váltás STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Görgetősáv - fel/le görgeti a listát STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Görgetősáv - jobbra/balra görgeti a listát -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Építmények lerombolása egy mezőről. Ctrl+kattintás+húzással átlós terület jelölhető ki. Shift lenyomásával megmutatja a becsült költséget +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Építmények lerombolása egy mezőről. Ctrl+kattintás+húzással átlós terület jelölhető ki. Shift+kattintással csak a becsült költséget jeleníti meg # Show engines button ###length VEHICLE_TYPES @@ -469,8 +469,8 @@ STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Villamos STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Vízi úti infrastruktúra építése STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Repülőtér építése STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Tájszerkesztő, faültető vagy feliratlétrehozó menü megnyitása -STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Hang/zene beállításai -STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Legutóbbi üzenet/újsághír megmutatása, üzenetelőzmények vagy minden üzenet törlése +STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Hang/zene ablak megnyitása +STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Legutóbbi üzenet/újsághír megnyitása, üzenetelőzmények vagy minden üzenet törlése STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Terület-információ, képernyőmentések, OpenTTD névjegy vagy fejlesztői eszközök megnyitása STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Eszköztár váltás @@ -487,9 +487,9 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Települ STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Gazdasági épületek építése vagy generálása STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Közúti infrastruktúra építése STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Villamos infrastruktúra építése -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Faültetés. Ctrl lenyomásával átlós terület jelölhető ki. Shift lenyomásával megmutatja a becsült építési költséget. +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Fák ültetése. Ctrl+kattintás+húzással átlós terület jelölhető ki. Shift+kattintással csak a becsült költséget jeleníti meg STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Felirat lerakása -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Objektum építése. Ctrl lenyomásával átlós terület jelölhető ki. Shift lenyomásával megmutatja a becsült építési költséget. +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Objektum építése. Ctrl+kattintás+húzással átlós terület jelölhető ki. Shift+kattintással csak a becsült költséget jeleníti meg # Scenario editor file menu ###length 7 @@ -499,7 +499,7 @@ STR_SCENEDIT_FILE_MENU_SAVE_HEIGHTMAP :Magasságtérk STR_SCENEDIT_FILE_MENU_LOAD_HEIGHTMAP :Magasságtérkép betöltése STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Pályaszerkesztő elhagyása STR_SCENEDIT_FILE_MENU_SEPARATOR : -STR_SCENEDIT_FILE_MENU_QUIT :Kilépés +STR_SCENEDIT_FILE_MENU_QUIT :Kilépés az OpenTTD-ből # Settings menu ###length 16 @@ -523,8 +523,8 @@ STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Átlátszó fel # File menu STR_FILE_MENU_SAVE_GAME :Játék mentése STR_FILE_MENU_LOAD_GAME :Játék betöltése -STR_FILE_MENU_QUIT_GAME :Kilépés a játékból -STR_FILE_MENU_EXIT :Kilépés +STR_FILE_MENU_QUIT_GAME :Kilépés ebből a játékból +STR_FILE_MENU_EXIT :Kilépés az OpenTTD-ből # Map menu STR_MAP_MENU_MAP_OF_WORLD :Világtérkép @@ -837,7 +837,7 @@ STR_SMALLMAP_LEGENDA_TRANSPORT_ROUTES :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_FOREST :{TINY_FONT}{BLACK}Erdő STR_SMALLMAP_LEGENDA_FOREST.t :{TINY_FONT}{BLACK}erdőt STR_SMALLMAP_LEGENDA_RAILROAD_STATION :{TINY_FONT}{BLACK}Vasútállomás -STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Teherautó-rakodóhely +STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Teherautó-állomás STR_SMALLMAP_LEGENDA_BUS_STATION :{TINY_FONT}{BLACK}Buszmegálló STR_SMALLMAP_LEGENDA_AIRPORT_HELIPORT :{TINY_FONT}{BLACK}Repülőtér/Helikopter-leszálló STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLACK}Kikötő @@ -1332,7 +1332,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Balra STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Középen STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Jobbra -STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}másodperc{P 0 "" ek} +STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}másodperc STR_CONFIG_SETTING_INFINITE_MONEY :Végtelen pénz: {STRING} STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Végtelen költés engedélyezése és vállalatok csődhelyzet-lehetőségének kikapcsolása @@ -1371,7 +1371,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Építkezési k STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Építkezések és beszerzésk költségeinek szintje STR_CONFIG_SETTING_RECESSIONS :Gazdasági válságok: {STRING} -STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Ha bekapcsolod, gazdasági válság fog kitörni néhány évente. A válság alatt az összes ipar jelentősen kevesebbet termel. (A válság végével a termelés visszaáll az eredeti szintre.) +STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Ha bekapcsolod, időszakonként gazdasági válság fog kitörni. A válság alatt az összes ipar jelentősen kevesebbet termel. (A válság végével a termelés visszaáll az eredeti szintre.) STR_CONFIG_SETTING_TRAIN_REVERSING :Vonatok állomáson történő megfordulásának tiltása: {STRING} STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Ha engedélyezve van, a vonatok nem fordulnak vissza egy (nem vég-) állomáson, még ha lenne egy rövidebb út is visszafordulva @@ -1425,7 +1425,7 @@ STR_CONFIG_SETTING_FORBID_90_DEG :Vonatok nem teh STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 fokos kanyarok akkor fordulnak elő, ha egy vízszintes pályaelemet egy függőleges elem követ közvetlenül a következő mezőn, ami által a vonat egy 90 fokos kanyart tesz a szokásos 45 fokos helyett. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Nem közvetlen szomszédos állomások egyesítése: {STRING} -STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Állomásrészek hozzáadásának engedélyezése úgy, hogy az nem érinti közvetlenül a meglévő részeket. Ctrl+kattintás szükséges hozzá az új részek elhelyezése közben +STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Állomásrészek hozzáadásának engedélyezése úgy, hogy az nem érinti közvetlenül a meglévő részeket. Ez Ctrl+kattintással tehető meg az új részek elhelyezése közben STR_CONFIG_SETTING_INFLATION :Infláció: {STRING} STR_CONFIG_SETTING_INFLATION_HELPTEXT :Infláció engedélyezése a gazdaságban, ahol a költségek jobban emelkednek, mint a bevételek @@ -1558,7 +1558,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Járművek sose STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Bekapcsolva minden járműmodell örökké elérhető marad bevezetése után STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Időszámítás: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Válaszd ki a játék időszámítási egységeit. Ez később nem módosítható.{}{}A naptár alapú a klasszikus OpenTTD-élmény, ahol egy év 12 hónapból, és minden hónap 28-31 napból áll.{}{}A faliórás időszámításban a járművek mozgása, a rakománytermelés és a pénzügyek ehelyett egyperces lépéseken alapulnak, ami nagyjából annyi idő, mint amennyi egy 30 napos hónap tart a naptár alapú módban. Ezek 12 perces időszakokba vannak csoportosítva, ami egy évnek felel meg a naptáralapú időben.{}{}Mindkét módban mindig van egy klasszikus naptár, amelyet a járművek, házak és egyéb infrastruktúra bevezetési dátumaihoz használnak. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Válaszd ki a játék időszámítási egységeit. Ez később nem módosítható.{}{}A naptár alapú a klasszikus OpenTTD-élmény, ahol egy év 12 hónapból, és minden hónap 28-31 napból áll.{}{}A faliórás időszámításban a rakománytermelés és a pénzügyek ehelyett egyperces lépéseken alapulnak, ami nagyjából annyi idő, mint amennyi egy 30 napos hónap tart a naptár alapú módban. Ezek 12 perces időszakokba vannak csoportosítva, ami egy évnek felel meg a naptáralapú időben.{}{}Mindkét módban mindig van egy klasszikus naptár, amelyet a járművek, házak és egyéb infrastruktúra bevezetési dátumaihoz használnak. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Naptár STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Falióra @@ -1630,7 +1630,7 @@ STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Hóhatár magas STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Ez a beállítás szabályozza szub-arktikus táj hóhatárát. A hó befolyással lehet a gazdasági épületek generálására és a települések növekedésére. Csak a pályaszerkesztőben lehet állítani, más esetben a havas terület százalékos kiterjedéséből kerül kiszámításra. STR_CONFIG_SETTING_SNOW_COVERAGE :Havas terület kiterjedése: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Beállíthatod, hogy a szub-arktikus tájon a térkép mekkora részét fedje hó. A hó befolyással van a gazdasági épületek elhelyezésére és a települések növekedésére. A beállítás csak a térképgenerátort érinti. A tengerszint feletti legelső szintet sosem fedheti hó. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Beállíthatod, hogy a szub-arktikus tájon a térkép mekkora részét fedje hó. A hó befolyással van a gazdasági épületek elhelyezésére és a települések növekedésére. A beállítás csak a térképgenerátort érinti. A tengerszintet és a partokat szintet sosem fedheti hó. STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Sivatag kiterjedése: {STRING} @@ -1646,7 +1646,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Durva STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Nagyon durva STR_CONFIG_SETTING_VARIETY :Változatosság eloszlása: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :(csak TerraGenesis esetén) Bekapcsolása esetén a térképen lesznek hegyvidékes és sík területek is. Mivel ettől a térkép csak simább lesz, ezért javasolt a 'Hegyes' beállítás használata a tereptípushoz. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Bekapcsolása esetén a térképen lesznek hegyvidékes és sík területek is. Nagyobb változatosság esetén nagyobb lesz a magasságkülönbség a sík és hegyvidékes területek között. STR_CONFIG_SETTING_RIVER_AMOUNT :A folyók mennyisége: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Mennyi folyó legyen a térképen @@ -2281,12 +2281,12 @@ STR_INTRO_TRANSLATION :{BLACK}Ebből a # Quit window STR_QUIT_CAPTION :{WHITE}Kilépés -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Biztosan bezárod ezt a programot? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Biztosan bezárod az OpenTTD-t? STR_QUIT_YES :{BLACK}Igen STR_QUIT_NO :{BLACK}Nem # Abandon game -STR_ABANDON_GAME_CAPTION :{WHITE}Kilépés a játékból +STR_ABANDON_GAME_CAPTION :{WHITE}Kilépés ebből a játékból STR_ABANDON_GAME_QUERY :{YELLOW}Biztosan kilépsz ebből a játékból? STR_ABANDON_SCENARIO_QUERY :{YELLOW}Biztosan abba akarod hagyni a pálya szerkesztését? @@ -2847,16 +2847,16 @@ STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Villamosított STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Egysínű vasút építése STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Maglev vasút építése -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Pályafektetés. A Ctrl billentyűvel válthatsz építés és rombolás között. Shift lenyomásával megmutatja a becsült építési/bontási költséget -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Vasúti pálya építése egyszerűsített módon. A Ctrl billentyű segítségével lehet váltani az építés/rombolás között. Shift lenyomásával megmutatja a becsült építési/eltávolítási költséget -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Vasúti járműtelep építése (vonatok vételére és karbantartására). Shift lenyomásával becsült építési költséget mutat -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Ellenőrző pont építése vágányra. A Ctrl lenyomásával az ellenőrző pontok egyesíthetőek. Shift lenyomásával megmutatja a becsült építési költséget -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Vasútállomás építése. A Ctrl lenyomásával egyesítheted más állomásokkal. Shift lenyomásával megmutatja a becsült építési költséget -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Vasúti jelzők építése. Ctrl gombbal váltás az alak- és fényjelzők között{}Húzással a sínek mentén végig jelzők épülnek. Húzva Ctrl gombbal a következő pályakiágazásig vagy jelzőig épít jelzőket. Ctrl+kattintással válthatod a megnyitandó jelzőépítés-kezelő ablakot. Shift lenyomásával megmutatja a becsült építési költséget -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Vasúti híd építése. Shift lenyomásával megmutatja a becsült építési költséget -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Vasúti alagút építése. Shift lenyomásával megmutatja a becsült építési költséget -STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Váltás építés/feleszedés között vasúti pályák, jelzők, ellenőrző pontok és vasútállomások esetében. Ctrl nyomvatartásával az ellenőrző pontokon és állomásokon a vasúti pályát is eltávolítja -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Sínek átalakítása a kiválasztott típusra. Shift lenyomásával megmutatja a becsült építési költséget +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Pályafektetés. Ctrl+kattintással válthatsz építés és rombolás között. Shift+kattintással csak a becsült költséget jeleníti meg +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Vasúti pálya építése egyszerűsített módon. A Ctrl billentyű segítségével lehet váltani az építés/rombolás között. Shift+kattintással csak a becsült költséget jeleníti meg +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Vasúti járműtelep építése (vonatok vételére és karbantartására). Shift+kattintással csak a becsült költséget jeleníti meg +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Ellenőrző pont építése vágányra. Ctrl+kattintással egyesíthető más ellenőrző pontokkal. Shift+kattintással csak a becsült költséget jeleníti meg +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Vasútállomás építése. Ctrl+kattintással egyesíthető más állomásokkal. Shift+kattintással csak a becsült költséget jeleníti meg +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Vasúti jelzők építése. Ctrl+kattintással váltás az alak- és fényjelzők között{}Kattintás+húzással a sínek mentén végig jelzők épülnek. Ctrl+kattintás+húzással a következő pályakiágazásig vagy jelzőig épít jelzőket. Shift+kattintással csak a becsült költséget jeleníti meg +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Vasúti híd építése. Shift+kattintással csak a becsült költséget jeleníti meg +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Vasúti alagút építése. Shift+kattintással csak a becsült költséget jeleníti meg +STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Váltás építés/feleszedés között vasúti pályák, jelzők, ellenőrző pontok és vasútállomások esetében. Ctrl+kattintással az ellenőrző pontokon és állomásokon a vasúti pályát is eltávolítja +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Sínek átalakítása a kiválasztott típusra. Shift+kattintással csak a becsült költséget jeleníti meg STR_RAIL_NAME_RAILROAD :Vasút STR_RAIL_NAME_ELRAIL :Villamosított vasút @@ -2932,25 +2932,25 @@ STR_BRIDGE_TUBULAR_SILICON :Cső, Szilikon # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Út építése STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Villamospálya építése -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Út építése. A Ctrl billentyűvel válthatsz építés és rombolás között. Shift lenyomásával megmutatja a becsült építési/bontási költséget -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Villamospálya építése. A Ctrl billentyűvel válthatsz építés és rombolás között. Shift lenyomásával megmutatja a becsült építési/bontási költséget -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Közút építése egyszerűsített módon. A Ctrl billentyűvel válthatsz építés és rombolás között. Shift lenyomásával megmutatja a becsült építési költséget -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Villamospálya építése egyszerűsített módon. A Ctrl billentyűvel válthatsz építés és rombolás között. Shift lenyomásával megmutatja a becsült építési költséget -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Garázs építése (járművek vételére és karbantartására). Shift lenyomásával megmutatja a becsült építési költséget -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Villamos remíz építése (járművek megépítésére és javítására). Shift lenyomásával megmutatja a becsült építési költséget -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Buszmegálló építése. A Ctrl lenyomásával egyesítheted más állomásokkal. Shift lenyomásával megmutatja a becsült építési költséget -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Villamosmegálló építése. A Ctrl lenyomásával egyesítheted más állomásokkal. Shift lenyomásával megmutatja a becsült építési költséget -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Teherautó-rakodóhely építése. A Ctrl lenyomásával egyesítheted más állomásokkal. Shift lenyomásával megmutatja a becsült építési költséget -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Tehervillamos-állomás építése. A Ctrl lenyomásával egyesítheted más állomásokkal. Shift lenyomásával megmutatja a becsült építési költséget +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Út építése. Ctrl+kattintás az út lerombolásához. Shift+kattintással csak a becsült költséget jeleníti meg +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Villamospálya építése. Ctrl+kattintás a pálya lerombolásához. Shift+kattintással csak a becsült költséget jeleníti meg +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Közút építése egyszerűsített módon. Ctrl+kattintás az út lerombolásához. Shift+kattintással csak a becsült költséget jeleníti meg +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Villamospálya építése egyszerűsített módon. Ctrl+kattintás a pálya lerombolásához. Shift+kattintással csak a becsült költséget jeleníti meg +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Garázs építése (járművek vételére és karbantartására). Shift+kattintással csak a becsült költséget jeleníti meg +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Villamos remíz építése (járművek megépítésére és javítására). Shift+kattintással csak a becsült költséget jeleníti meg +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Buszmegálló építése. Ctrl+kattintással egyesíthető más állomásokkal. Shift+kattintással csak a becsült költséget jeleníti meg +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Villamosmegálló építése. Ctrl+kattintással egyesíthető más állomásokkal. SShift+kattintással csak a becsült költséget jeleníti meg +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Teherautó-állomás építése. Ctrl+kattintással egyesíthető más állomásokkal. Shift+kattintással csak a becsült költséget jeleníti meg +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Tehervillamos-állomás építése. Ctrl+kattintással egyesíthető más állomásokkal. Shift+kattintással csak a becsült költséget jeleníti meg STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Egyirányú utak be/kikapcsolása -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Közúti híd építése. Shift lenyomásával megmutatja a becsült építési költséget -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Villamos-híd építése. Shift lenyomásával megmutatja a becsült építési költséget -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Közúti alagút építése. Shift lenyomásával megmutatja a becsült építési költséget -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Villamos-alagút építése. Shift lenyomásával megmutatja a becsült építési költséget +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Közúti híd építése. Shift+kattintással csak a becsült költséget jeleníti meg +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Villamos-híd építése. Shift+kattintással csak a becsült költséget jeleníti meg +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Közúti alagút építése. Shift+kattintással csak a becsült költséget jeleníti meg +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Villamos-alagút építése. Shift+kattintással csak a becsült költséget jeleníti meg STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Építés és felszedés közötti váltás utaknál STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Építés és bontás közötti váltás villamospályáknál -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Út átalakítása a kiválasztott típusra. Shift lenyomásával megmutatja a becsült építési költséget -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Villamospálya átalakítása a kiválasztott típusra. Shift lenyomásával megmutatja a becsült építési költséget +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Út átalakítása a kiválasztott típusra. Shift+kattintással csak a becsült költséget jeleníti meg +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Villamospálya átalakítása a kiválasztott típusra. Shift+kattintással csak a becsült költséget jeleníti meg STR_ROAD_NAME_ROAD :Út STR_ROAD_NAME_TRAM :Villamospálya @@ -2965,7 +2965,7 @@ STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Remíz h STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Buszmegálló helyzete STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Buszmegálló helyzetének kiválasztása STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Rakodóhely helyzete -STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Teherautó-rakodó helyzetének kiválasztása +STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Teherautó-állomás helyzetének kiválasztása STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Villamosmegálló helyzete STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Villamosmegálló helyzetének kiválasztása STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Tehervillamos-állomás helyzete @@ -2974,12 +2974,12 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Tehervil # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Vízi utak építése STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Vízi utak -STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Csatorna építése. Shift lenyomásával megmutatja a becsült építési költséget -STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Zsilip építése. Shift lenyomásával megmutatja a várható építési költséget -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Dokk építése (hajók vételére és karbantartására). Shift lenyomásával megmutatja a becsült építési költséget -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Kikötő építése. Ctrl+kattintással egyesítheted más állomásokkal. Shift lenyomásával megmutatja a becsült építési költséget -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Bója lerakása, amit a hajók útirányjelző pontként használhatnak. Shift lenyomásával megmutatja a becsült építési költséget -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Csatornahíd építése. Shift lenyomásával megmutatja a várható építési költséget +STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Csatorna építése. Shift+kattintással csak a becsült költséget jeleníti meg +STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Zsilip építése. Shift+kattintással csak a becsült költséget jeleníti meg +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Dokk építése (hajók vételére és karbantartására). Shift+kattintással csak a becsült költséget jeleníti meg +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Kikötő építése. Ctrl+kattintással egyesíthető más állomásokkal. Shift+kattintással csak a becsült költséget jeleníti meg +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Bója lerakása, amit a hajók útirányjelző pontként használhatnak. Shift+kattintással csak a becsült költséget jeleníti meg +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Csatornahíd építése. Shift+kattintással csak a becsült költséget jeleníti meg STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Csatorna építése. Ctrl+kattintással elárasztja a területet tengervízzel a tengerszinten STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Folyók elhelyezése. Ctrl+kattintással átlós terület jelölhető ki @@ -2992,7 +2992,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Kikötő # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Repülőterek -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Repülőtér építése. A Ctrl lenyomásával egyesítheted más állomásokkal. Shift lenyomásával megmutatja a becsült építési költséget +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Repülőtér építése. Ctrl+kattintással egyesíthető más állomásokkal. Shift+kattintással csak a becsült költséget jeleníti meg # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Repülőtér beállítása @@ -3019,14 +3019,14 @@ STR_STATION_BUILD_NOISE :{BLACK}Zajterme # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Tájrendezés -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Egy pont lesüllyesztése. Húzással az első kiválasztott sarkot lesüllyeszti, majd a kiválasztott területet vele egy szintbe hozza. Ctrl lenyomásával átlós terület jelölhető ki. Shift lenyomásával megmutatja a terepsüllyesztés várható építési költségét -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Egy sarokpont megemelése. Húzással az első kiválasztott sarkot megemeli, majd a kiválasztott területet vele egy szintbe hozza. Ctrl lenyomásával átlós terület jelölhető ki. Shift lenyomásával megmutatja a terepemelés várható építési költségét -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Talaj a kijelölt sarokpont szintjére hozása. Ctrl lenyomásával átlós terület jelölhető ki. Shift lenyomásával megmutatja az átalakítás várható költségét -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Földterület megvétele későbbi használatra. Ctrl lenyomásával átlós terület jelölhető ki. Shift lenyomásával megmutatja a várható költséget +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Egy pont lesüllyesztése. Húzással az első kiválasztott sarkot lesüllyeszti, majd a kiválasztott területet vele egy szintbe hozza. Ctrl+kattintás+húzással átlós terület jelölhető ki. Shift+kattintással csak a becsült költséget jeleníti meg +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Egy sarokpont megemelése. Húzással az első kiválasztott sarkot megemeli, majd a kiválasztott területet vele egy szintbe hozza. Ctrl+kattintás+húzással átlós terület jelölhető ki. Shift+kattintással csak a becsült költséget jeleníti meg +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Talaj a kijelölt sarokpont szintjére hozása. Ctrl+kattintás+húzással átlós terület jelölhető ki. Shift+kattintással csak a becsült költséget jeleníti meg +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Földterület megvétele későbbi használatra. Ctrl+kattintás+húzással átlós terület jelölhető ki. Shift+kattintással csak a becsült költséget jeleníti meg # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objektum kiválasztása -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Építendő objektum kiválasztása. Ctrl lenyomásával átlós terület jelölhető ki. Shift lenyomásával megmutatja a becsült költséget +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Építendő objektum kiválasztása. Ctrl+kattintás+húzással átlós terület jelölhető ki. Shift+kattintással csak a becsült költséget jeleníti meg STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Építendő objektum típusának kiválasztása STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Objektum előnézete STR_OBJECT_BUILD_SIZE :{BLACK}Méret: {GOLD}{NUM} x {NUM} mező @@ -3038,7 +3038,7 @@ STR_OBJECT_CLASS_TRNS :Adótornyok STR_PLANT_TREE_CAPTION :{WHITE}Fák STR_PLANT_TREE_TOOLTIP :{BLACK}Ültetendő fa kiválasztása. Ha már van fa a mezőn, akkor újabb fák ültetése a kiválasztott fatípustól függetlenül STR_TREES_RANDOM_TYPE :{BLACK}Véletlenszerű fafélék -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Véletlenszerűen kiválasztott fákat helyez el. Ctrl+kattintás+húzással átlós terület jelölhető ki. Shift lenyomásával megmutatja a becsült építési költséget. +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Véletlenszerűen kiválasztott fákat helyez el. Ctrl+kattintás+húzással átlós terület jelölhető ki. Shift+kattintással csak a becsült költséget jeleníti meg STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Véletlenszerű fák STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Véletlenszerűen fákat ültet a térképre STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normál @@ -3051,7 +3051,7 @@ STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}A tájon # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Táj szerkesztése STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Sziklás területek elhelyezése a térképen -STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Sivatagot hoz létre.{}Nyomj Ctrl-t az eltávolításához +STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Sivatag létrehozása.{}Ctrl+kattintás a sivatag eltávolításához STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Az emelendő/süllyesztendő földterület növelése STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Az emelendő/süllyesztendő földterület csökkentése STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Véletlenszerű táj készítése @@ -3065,7 +3065,7 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Biztos v # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Városkészítés STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Új település -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Új település építése. Shift+kattintással megmutatja a becsült költséget +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Új település építése. Shift+kattintással csak a becsült költséget jeleníti meg STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Egy véletlen település STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Település építése véletlenszerű helyre STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Sok véletlen település @@ -3209,7 +3209,7 @@ STR_LAI_TREE_NAME_CACTUS_PLANTS :Kaktusz STR_LAI_STATION_DESCRIPTION_RAILROAD_STATION :Vasútállomás STR_LAI_STATION_DESCRIPTION_AIRCRAFT_HANGAR :Repülőtéri hangár STR_LAI_STATION_DESCRIPTION_AIRPORT :Repülőtér -STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Teherautó-rakodóhely +STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Teherautó-állomás STR_LAI_STATION_DESCRIPTION_BUS_STATION :Buszmegálló STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :Kikötő STR_LAI_STATION_DESCRIPTION_BUOY :Bója @@ -3658,7 +3658,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Kis- és # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Felirat szerkesztése -STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}A fő nézetet a felirat helyére állítja. Ctrl+kattintás esetén új nézetet nyit a felirat helyére. +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}A fő nézetet a felirat helyére állítja. Ctrl+kattintással új nézet nyílik a felirat helyzeténél STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Következő felirat STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Előző felirat @@ -3669,7 +3669,7 @@ STR_TOWN_DIRECTORY_CAPTION :{WHITE}Városok STR_TOWN_DIRECTORY_NONE :{ORANGE}- Nincs - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Város){BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Városnevek - kattints egy névre a város megnézéséhez. Ctrl+kattintás esetén új látképet nyit a város pozíciójára +STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Városnevek - kattints egy névre a város megnézéséhez. Ctrl+kattintással új nézet nyílik a városnál STR_TOWN_POPULATION :{BLACK}Világnépesség: {COMMA} # Town view window @@ -3684,11 +3684,11 @@ STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} szállítva STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (több szükséges) STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (szállítva) -STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}A település {ORANGE}{UNITS_DAYS_OR_SECONDS} növekszik +STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}A település {ORANGE}{UNITS_DAYS_OR_SECONDS}onta növekszik STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}{BLACK}A település {ORANGE}{UNITS_DAYS_OR_SECONDS} növekszik (támogatást kapott) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}A település {RED}nem{BLACK} növekszik STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Zajszint a városban: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} -STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}A fő nézetet a városra állítja. Ctrl+kattintás esetén új nézetet nyit a város pozíciójára +STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}A fő nézetet a városra állítja. Ctrl+kattintással új nézet nyílik a város helyzeténél STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Önkormányzat STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Az önkormányzat adatainak megmutatása STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}A város nevének megváltoztatása @@ -3745,7 +3745,7 @@ STR_GOALS_TEXT :{ORANGE}{STRING STR_GOALS_NONE :{ORANGE}- Nincs - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Kattintással a fő nézetet a célra állítja. Ctrl+kattintással új látképet nyit a gazdasági épület/település/mező helyéről +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Kattintással a fő nézetet a célra állítja. Ctrl+kattintással új nézet nyílik a gazdasági épület/település/mező helyzeténél # Goal question window STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Kérdés @@ -3781,7 +3781,7 @@ STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_NONE :{ORANGE}--- STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Már támogatást kap STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} szállításáért {STRING} és {STRING} között {YELLOW} ({COMPANY}{YELLOW}, {STRING}) -STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Kattints egy sorra a város/gazdasági épület megnézéséhez. Ctrl+kattintás esetén új látképet nyit a város/gazdasági épület pozíciójára +STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Kattints egy sorra a város/gazdasági épület megnézéséhez. Ctrl+kattintással új nézet nyílik a város/gazdasági épület helyzeténél STR_SUBSIDIES_OFFERED_EXPIRY_DATE :eddig: {DATE_SHORT} STR_SUBSIDIES_OFFERED_EXPIRY_TIME :ezen belül: {UNITS_MONTHS_OR_MINUTES} STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :eddig: {DATE_SHORT} @@ -3801,8 +3801,8 @@ STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Követke STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Érvénytelen cél referencia # Station list window -STR_STATION_LIST_TOOLTIP :{BLACK}Állomásnevek - kattints egy névre az állomás megnézéséhez. Ctrl+kattintásra új látképet nyit az állomás pozíciójára -STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Több elem kiválasztásához tartsd lenyomva a Ctrl gombot +STR_STATION_LIST_TOOLTIP :{BLACK}Állomásnevek - kattints egy névre az állomás megnézéséhez. Ctrl+kattintással új nézet nyílik az állomás helyzeténél +STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Ctrl+kattintás több elem kiválasztásához STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} állomásai - {COMMA} STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} @@ -3867,7 +3867,7 @@ STR_CARGO_RATING_VERY_GOOD :nagyon jó STR_CARGO_RATING_EXCELLENT :kiváló STR_CARGO_RATING_OUTSTANDING :kimagasló -STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}A fő nézetet az állomásra állítja. Ctrl+kattintás esetén új látképet nyit az állomás pozíciójára +STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}A fő nézetet az állomásra állítja. Ctrl+kattintással új nézet nyílik az állomás helyzeténél STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Az állomás nevének megváltoztatása STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Kilistázza az összes vonatot, aminek a menetrendjében szerepel ez az állomás @@ -3882,9 +3882,9 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Repülő # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} -STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}A fő nézetet az ellenőrző pontra állítja. Ctrl+kattintás esetén új látképet nyit az ellenőrző pont pozíciójára +STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}A fő nézetet az ellenőrző pontra állítja. Ctrl+kattintással új nézet nyílik az ellenőrzőpontnál STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Átnevezi az ellenőrző pontot -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}A fő nézetet a bójára állítja. Ctrl+kattintás esetén új látképet nyit a bója pozíciójára +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}A fő nézetet a bójára állítja. Ctrl+kattintással új nézet nyílik a bója helyzeténél STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Bója átnevezése STR_EDIT_WAYPOINT_NAME :{WHITE}Ellenőrző pont nevének módosítása @@ -3960,7 +3960,7 @@ STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}A válla STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Székház STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Székház megtekintése STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}SZH áthelyezése -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}A vállalat székházának újraépítése máshol a vállalat értékének 1%-áért. Shift+kattintással megmutatja a becsült költséget a székhely áthelyezése nélkül +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}A vállalat székházának újraépítése máshol a vállalat értékének 1%-áért. Shift+kattintással csak a becsült költséget jeleníti meg STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Részletek STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Részletes információk megtekintése az infrastruktúráról STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Adományozz pénzt @@ -4007,7 +4007,7 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} és {NUM} további... -STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Gazdasági épületek neve - a névre kattintva a fő nézetet a választott objektumra irányíthatod. Ctrl+kattintással új látképet nyit a gazdasági épület pozíciójára +STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Gazdasági épületek neve - a névre kattintva a fő nézetet a választott objektumra irányíthatod. Ctrl+kattintással új nézet nyílik a gazdasági épület helyzeténél STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Elfogad: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Termel: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Minden rakománytípus @@ -4018,7 +4018,7 @@ STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTR STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Múlt havi termelés: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Termelés az elmúlt percben: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% elszállítva) -STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}A fő nézetet a gazdasági épületre állítja. Ctrl+kattintás esetén új látképet nyit a gazdasági épület pozíciójára +STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}A fő nézetet a gazdasági épületre állítja. Ctrl+kattintással új nézet nyílik a gazdasági épület helyzeténél STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Termelési szint: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A gyár bejelentette a közelgő bezárását! @@ -4179,16 +4179,16 @@ STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Megvesz STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Megvesz és átalakít ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}A kijelölt vasúti jármű megvétele. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}A kijelölt közúti jármű megvétele. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}A kijelölt hajó megvétele. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}A kijelölt repülőgép megvétele. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}A kijelölt vasúti jármű megvétele. Shift+kattintással csak a becsült költséget jeleníti meg +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}A kijelölt közúti jármű megvétele. Shift+kattintással csak a becsült költséget jeleníti meg +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}A kijelölt hajó megvétele. Shift+kattintással csak a becsült költséget jeleníti meg +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}A kijelölt repülőgép megvétele. Shift+kattintással csak a becsült költséget jeleníti meg ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}A kijelölt vasúti jármű megvétele és átalakítása a kijelölt rakománytípusra. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}A kijelölt közúti jármű megvétele és átalakítása a kijelölt rakománytípusra. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül -STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}A kijelölt hajó megvétele és átalakítása a kijelölt rakománytípusra. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}A kijelölt repülőgép megvétele és átalakítása a kijelölt rakománytípusra. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}A kijelölt vasúti jármű megvétele és átalakítása a kijelölt rakománytípusra. Shift+kattintással csak a becsült költséget jeleníti meg +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}A kijelölt közúti jármű megvétele és átalakítása a kijelölt rakománytípusra. Shift+kattintással csak a becsült költséget jeleníti meg +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}A kijelölt hajó megvétele és átalakítása a kijelölt rakománytípusra. Shift+kattintással csak a becsült költséget jeleníti meg +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}A kijelölt repülőgép megvétele és átalakítása a kijelölt rakománytípusra. Shift+kattintással csak a becsült költséget jeleníti meg ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Átnevez @@ -4238,7 +4238,7 @@ STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} j STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Vonatok - bal gombbal húzással áthelyezheted a járműveket a vonatba/vonatból, jobb gombbal kattintással járműinformáció. Ctrl lenyomásával a funkciókat a szerelvényre alkalmazod. +STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Vonatok - bal gombbal húzással áthelyezheted a járműveket a vonatba/vonatból, jobb gombbal kattintással járműinformáció. Ctrl+kattintással a funkciókat a szerelvényre alkalmazod. STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Járművek - kattints jobb gombbal egy járműre az adataihoz STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Hajók - kattints jobb gombbal egy hajóra az adataihoz STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Repülőgépek - kattints jobb gombbal egy repülőgépre az adataihoz @@ -4280,16 +4280,16 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Hajó m STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Repülőgép másolása ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Ide kattintva elkészítheted egy teljes vonat másolatát annak összes kocsijával. Kattints erre a gombra, majd a vonatra kívül vagy belül a járműtelepen. Kattints ide, majd a másolandó vonatra. Ctrl+kattintással az utasításlistát is megosztod. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Ide kattintva megveheted egy közúti jármű másolatát. Kattints ide, majd a másolandó járműre a járműtelepen belül vagy kívül. Ctrl+kattintással az utasításlistát is megosztod. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Ide kattintva elkészítheted egy hajó másolatát. Kattints ide, majd a másolandó hajóra. Ctrl+Kattintással a menetrendet is megosztod. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Ide kattintva elkészítheted egy repülőgép másolatát. Kattints ide, majd a másolandó repülőgépre. Ctrl+kattintással a menetrendet is megosztod. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Ide kattintva elkészítheted egy teljes vonat másolatát annak összes kocsijával. Kattints erre a gombra, majd a vonatra kívül vagy belül a járműtelepen. Kattints ide, majd a másolandó vonatra. Ctrl+kattintás az utasítások megosztásához. Shift+kattintással csak a becsült költséget jeleníti meg +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Ide kattintva megveheted egy közúti jármű másolatát. Kattints ide, majd a másolandó járműre a járműtelepen belül vagy kívül. Ctrl+kattintás az utasítások megosztásához. Shift+kattintással csak a becsült költséget jeleníti meg +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Ide kattintva elkészítheted egy hajó másolatát. Kattints ide, majd a másolandó hajóra. Ctrl+kattintás az utasítások megosztásához. Shift+kattintással csak a becsült költséget jeleníti meg +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Ide kattintva elkészítheted egy repülőgép másolatát. Kattints ide, majd a másolandó repülőgépre. Ctrl+kattintás az utasítások megosztásához. Shift+kattintással csak a becsült költséget jeleníti meg ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}A fő nézetet a járműtelepre állítja. Ctrl+kattintás esetén új látképet nyit a járműtelep pozíciójára -STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}A fő nézetet a garázsra állítja. Ctrl+kattintás esetén új látképet nyit a garázs pozíciójára -STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}A fő nézetet a dokkra állítja. Ctrl+kattintással új látképet nyit a dokk pozíciójára -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}A fő nézetet a hangárra állítja. Ctrl+kattintás esetén új látképet nyit a hangár pozíciójára +STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}A fő nézetet a járműtelepre állítja. Ctrl+kattintással új nézet nyílik a járműtelep helyzeténél +STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}A fő nézetet a garázsra állítja. Ctrl+kattintással új nézet nyílik a garázs helyzeténél +STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}A fő nézetet a dokkra állítja. Ctrl+kattintással új nézet nyíilik a dokk helyzeténél +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}A fő nézetet a hangárra állítja. Ctrl+kattintással új nézet nyílik a hangár helyzeténél ###length VEHICLE_TYPES STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Vonatok listája, amelyek menetrendjében a járműtelep szerepel @@ -4396,9 +4396,9 @@ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Közelítés a vonat jelenlegi helyzetére. Dupla kattintással a fő nézetben követni fogja a vonatot. Ctrl+kattintással új nézet nyílik a vonat helyzetére. -STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Közelítés a közúti jármű jelenlegi helyzetére. Dupla kattintással a fő nézetben követni fogja a járművet. Ctrl+kattintással új nézet nyílik a jármű helyzetére. -STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Közelítés a hajó jelenlegi helyzetére. Dupla kattintással a fő nézetben követni fogja a hajót. Ctrl+kattintással új nézet nyílik a hajó helyzetére. -STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Közelítés a repülőgép jelenlegi helyzetére. Dupla kattintással a fő nézetben követni fogja a repülőgépet. Ctrl+kattintással új nézet nyílik a repülőgép helyzetére. +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Közelítés a közúti jármű jelenlegi helyzetére. Dupla kattintással a fő nézetben követni fogja a járművet. Ctrl+kattintással új nézet nyílik a jármű helyzeténél +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Közelítés a hajó jelenlegi helyzetére. Dupla kattintással a fő nézetben követni fogja a hajót. Ctrl+kattintással új nézet nyílik a hajó helyzeténél +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Közelítés a repülőgép jelenlegi helyzetére. Dupla kattintással a fő nézetben követni fogja a repülőgépet. Ctrl+kattintással új nézet nyílik a repülőgép helyzeténél ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}A járműtelepre küldi a vonatot. Ctrl+kattintással csak javításra @@ -4407,15 +4407,15 @@ STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Dokkba k STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Hangárba küldi a repülőgépet. Ctrl+kattintással csak javításra ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Ide kattintva a teljes vonat másolatát készítheted el. Ctrl+kattintással az utasításlistát is megosztod. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Ide kattintva a jármű másolatát készítheted el. Ctrl+kattintással az utasításlistát is megosztod. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Ide kattintva a hajó másolatát készítheted el. Ctrl+kattintással az utasításlistát is megosztod. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Ide kattintva a repülőgép másolatát készítheted el. Ctrl+kattintással az utasításlistát is megosztod. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Ide kattintva a teljes vonat másolatát készítheted el. Ctrl+kattintás az utasítások megosztásához. Shift+kattintással csak a becsült költséget jeleníti meg +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Egy közúti jármű másolatának vásárlása. Ctrl+kattintás az utasítások megosztásához. Shift+kattintással csak a becsült költséget jeleníti meg +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Ide kattintva a hajó másolatát készítheted el. Ctrl+kattintás az utasítások megosztásához. Shift+kattintással csak a becsült költséget jeleníti meg +STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Ide kattintva a repülőgép másolatát készítheted el. Ctrl+kattintás az utasítások megosztásához. Shift+kattintással csak a becsült költséget jeleníti meg STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}A vonat rákényszerítése a megállj jelzés meghaladására STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Vonat megfordítása STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Jármű rákényszerítése megfordulásra -STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Közelítés a célpontra. Ctrl+kattintással új nézet nyílik a célpont helyére. +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Közelítés a célpontra. Ctrl+kattintással új nézet nyílik a célpont helyénél. ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}A vonat átalakítása másfajta rakomány szállítására @@ -4677,7 +4677,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Legközelebbi j STR_ORDER_GO_TO_NEAREST_HANGAR :Legközelebbi hangárba STR_ORDER_CONDITIONAL :Feltételes ugrás STR_ORDER_SHARE :Utasításlista megosztása -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Új utasítás beillesztése a kijelölt utasítás elé vagy a lista végére. Ctrl+kattintás állomásoknál 'bármiből teljes rakományra vár'-t, ellenőrző pontoknál 'Non-stop'-ot, járműtelepeknél 'Javításra menj' parancsot ad a célponthoz. 'Menetrend megosztása' esetén a jármű megosztja az utasításait a kiválasztott járművel. Ha járműtelep szerepel a menetrendben, kikapcsolja az automatikus javításokat +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Új utasítás beillesztése a kijelölt utasítás elé vagy a lista végére. Ctrl+kattintás állomásoknál 'bármiből teljes rakományra vár'-t, ellenőrző pontoknál a 'Minden új utasítás alapból non-stop' beállítás fordítottját, járműtelepeknél 'várakozás csoportbontásra' parancsot ad a célponthoz. Kattints egy másik járműre, hogy lemásold az utasításait, vagy Ctrl+kattints, hogy megoszd vele az utasításait. Ha járműtelep szerepel a menetrendben, kikapcsolja az automatikus javításokat STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Megmutatja az összes járművet, amik megosztják ezt az utasításlistát @@ -4860,7 +4860,7 @@ STR_AI_CONFIG_RANDOM_AI :Véletlenszerű STR_AI_CONFIG_NONE :(nincs) STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM} STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Ellenfelek száma legfeljebb: {ORANGE}{COMMA} -STR_AI_CONFIG_COMPETITORS_INTERVAL :{LTBLUE}Ellenfelek indítása közötti időtartam: {ORANGE}{COMMA} perc{P "" s} +STR_AI_CONFIG_COMPETITORS_INTERVAL :{LTBLUE}Ellenfelek indítása közötti időtartam: {ORANGE}{COMMA} perc STR_AI_CONFIG_MOVE_UP :{BLACK}Mozgatás Fel STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Kiválasztott MI mozgatása felfelé a listában @@ -5097,7 +5097,7 @@ STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Változt # Station construction related errors STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Nem építhetsz ide vasútállomást... STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Nem építhetsz ide buszmegállót... -STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Nem építhetsz ide teherautó-rakodóhelyet... +STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Nem építhetsz ide teherautó-állomást... STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Nem építhetsz ide villamosmegállót... STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Nem építhetsz ide tehervillamos-állomást... STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Nem építhetsz ide kikötőt... @@ -5108,7 +5108,7 @@ STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... az STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Túl sok az állomás/rakodóhely STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Túl sok vasútállomás-rész STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Túl sok buszmegálló -STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Túl sok a teherautó-rakodóhely +STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Túl sok a teherautó-állomás STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Túl közel van egy másik kikötőhöz STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Túl közel van egy másik repülőtérhez STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Nem nevezheted át az állomást... @@ -5121,7 +5121,7 @@ STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... áth STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Nem lehet eltávolítani az állomás részét... STR_ERROR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Előbb le kell rombolnod a vasútállomást STR_ERROR_CAN_T_REMOVE_BUS_STATION :{WHITE}Nem távolíthatod el ezt a buszmegállót... -STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Nem távolíthatod el ezt a teherautó-rakodóhelyet... +STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Nem távolíthatod el ezt a teherautó-állomást... STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Nem lehet a villamosmegállót eltávolítani... STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Nem lehet a tehervillamos-állomást eltávolítani STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Előbb el kell távolítanod a megállóhelyet @@ -5129,7 +5129,7 @@ STR_ERROR_THERE_IS_NO_STATION :{WHITE}... ninc STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}Előbb le kell rombolnod a vasútállomást STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Előbb le kell rombolnod a buszmegállót -STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST :{WHITE}Előbb le kell rombolnod a teherautó-rakodóhelyet +STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST :{WHITE}Előbb le kell rombolnod a teherautó-állomást STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST :{WHITE}Előbb le kell rombolni a villamosmegállót STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST :{WHITE}Előbb le kell rombolni a tehervillamos-állomást STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Előbb le kell rombolnod a kikötőt @@ -5378,7 +5378,7 @@ STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... a re # Extra messages which go on the third line of errors, explaining why orders failed STR_ERROR_NO_RAIL_STATION :{WHITE}Nem található vasútállomás STR_ERROR_NO_BUS_STATION :{WHITE}Nem található buszmegálló -STR_ERROR_NO_TRUCK_STATION :{WHITE}Nem található teherautó-rakodóhely +STR_ERROR_NO_TRUCK_STATION :{WHITE}Nem található teherautó-állomás STR_ERROR_NO_DOCK :{WHITE}Kikötő nem található STR_ERROR_NO_AIRPORT :{WHITE}Nem található repülőtér/Helikopter-leszálló STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Nem található megálló kompatibilis úttípussal diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index eee846205d..13651b8555 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1496,7 +1496,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Transportlīdze STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kad ieslēgts, visi transportlīdzekļu modeļi pēc to ieviešanas vienmēr ir pieejami STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Laika uzskaite: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Izvēlieties spēles laika mērīšanas vienības. Vēlāk to nevar mainīt.{}{}Kalendāra pamatā ir klasiskā OpenTTD pieredze, kurā gads sastāv no 12 mēnešiem un katru mēnesi ir 28–31 diena.{}{}{}Uz sienas pulksteni balstītā laikā, transportlīdzekļu kustībā, kravu ražošana, un finanses ir balstītas uz vienas minūtes soli, kas ir aptuveni tikpat ilgs laiks, cik 30 dienu mēnesis aizņem kalendāra režīmā. Tie ir sagrupēti 12 minūšu periodos, kas ir līdzvērtīgi gadam kalendāra režīmā.{}{}{}Abos režīmos vienmēr ir klasisks kalendārs, kas tiek izmantots transportlīdzekļu, māju un citas infrastruktūras datu ievadīšanai. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Izvēlieties spēles laika mērīšanas vienības. Vēlāk to nevar mainīt.{}{}Kalendāra pamatā ir klasiskā OpenTTD pieredze, kurā gads sastāv no 12 mēnešiem un katru mēnesi ir 28–31 diena.{}{}{}Uz sienas pulksteni balstītā laikā, kravu ražošanā un finansēs tā vietā tiek balstītas uz vienas minūtes soli, kas ir aptuveni tikpat ilgs, cik 30 dienu mēnesis aizņem kalendāra režīmā. Tie ir sagrupēti 12 minūšu periodos, kas ir līdzvērtīgi gadam kalendāra režīmā.{}{}{}Abos režīmos vienmēr ir klasisks kalendārs, kas tiek izmantots transportlīdzekļu, māju un citas infrastruktūras parādīšanās spēlē. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalendārs STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Sienas pulkstenis diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index a5fbb3dec0..3f3934b3a6 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -353,7 +353,7 @@ STR_SORT_BY_ENGINE_ID :Identificador d STR_SORT_BY_COST :Precio STR_SORT_BY_POWER :Potencia STR_SORT_BY_TRACTIVE_EFFORT :Fuerza de tracción -STR_SORT_BY_INTRO_DATE :Fecha introducción +STR_SORT_BY_INTRO_DATE :Fecha de lanzamiento STR_SORT_BY_RUNNING_COST :Coste operación STR_SORT_BY_POWER_VS_RUNNING_COST :Potencia/coste operación STR_SORT_BY_CARGO_CAPACITY :Capacidad de carga @@ -1118,6 +1118,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Reduce l STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Incrementa la cantidad de tu moneda en una Libra (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Configura el valor de cambio de tu moneda por una Libra (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Separador: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Establece el separador para la moneda STR_CURRENCY_PREFIX :{LTBLUE}Prefijo: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Configura el prefijo de tu moneda @@ -1493,7 +1495,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Los vehículos STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Si se activa, todos los modelos de vehículos permanecen disponibles para siempre una vez han sido introducidos STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Modo temporal: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecciona el modo temporal del juego. Este ajuste no puede ser cambiado más adelante.{}{}"Calendario" es la experiencia clásica de OpenTTD, donde un año tiene 12 meses y cada mes entre 28 y 31 días.{}{}En el modo "Reloj", el movimiento de los vehículos, la producción de carga y la gestión financiera se basan en incrementos de un minuto, que es similar a lo que tarda un mes de 30 días en el modo "Calendario". Éstos se agrupan en períodos de 12 minutos, que equivalen a un año en el modo "Calendario".{}{}En uno y otro modo siempre hay un calendario clásico que es usado para las fechas de aparición de vehículos, casas y otras infraestructuras. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecciona el modo temporal del juego. Este ajuste no puede ser cambiado más adelante.{}{}"Calendario" es la experiencia clásica de OpenTTD, donde un año tiene 12 meses y cada mes entre 28 y 31 días.{}{}En el modo "Reloj", la producción de carga y la gestión financiera se basan en incrementos de un minuto, que es similar a lo que tarda un mes de 30 días en el modo "Calendario". Éstos se agrupan en períodos de 12 minutos, que equivalen a un año en el modo "Calendario".{}{}En uno y otro modo siempre existe un calendario clásico que es usado para las fechas de lanzamiento de vehículos, casas y otras infraestructuras. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendario STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Reloj @@ -2388,7 +2390,7 @@ STR_NETWORK_SERVER_LIST_CLICK_TO_SELECT_LAST :{BLACK}Clica pa STR_NETWORK_SERVER_LIST_GAME_INFO :{SILVER}INFORMACIÓN DEL JUEGO STR_NETWORK_SERVER_LIST_CLIENTS :{SILVER}Clientes: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA} STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}Terreno: {WHITE}{STRING} -STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}Tamaño del Mapa: {WHITE}{COMMA}x{COMMA} +STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}Tamaño del mapa: {WHITE}{COMMA}x{COMMA} STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Versión del servidor: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Dirección del servidor: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Código de invitación: {WHITE}{STRING} @@ -5809,6 +5811,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}M +STR_CURRENCY_SHORT_GIGA :{NBSP}kM +STR_CURRENCY_SHORT_TERA :{NBSP}MM STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index a996e5456f..31e879bbd5 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1190,10 +1190,18 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Базо STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Оберіть базовий музичний набір для використання STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Допоміжна інформація про базовий музичний набір +STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(не встановлено додатків для інтеграції з соціальними платформами) STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :{BLACK}Платформа: +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Стан додатка: +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_RUNNING :{GREEN}Працює +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_FAILED :{RED}Не вдалося з'єднатися +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_PLATFORM_NOT_RUNNING :{ORANGE}{STRING} не працює +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :{RED}Подвоєння додатка +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Неправильний підпис +STR_BASESET_STATUS :{STRING} {RED}(відсутніх або зіпсованих файлів: {NUM}) STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Не вдалося отримати список підтримуваних дозволів STR_ERROR_FULLSCREEN_FAILED :{WHITE}Повноекранний режим не працює @@ -1909,6 +1917,8 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Відключ STR_CONFIG_SETTING_NOSERVICE :Не відправляти на техогляд, якщо відключені аварії: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Включення цієї опції дозволяє не проводити автоматичний техогляд у разі, якщо поломки транспорту вимкнено. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Зменшення швидкості завантаження потягів, які довші за станцію: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Якщо увімкнуто, потяги довші за станцію завантажуються значно повільніше, ніж потяги які вміщуються на станції. Налаштування не впливає на пошук шляху. STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Враховувати обмеження швидкості вагонів: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :При включенні максимальна швидкість потяга враховує обмеження швидкості вагонів. @@ -2264,10 +2274,10 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Вибр STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Показати налаштування гри STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Показати таблицю рекордів -STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Налаштування відображення +STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Показати налаштування STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Показати налаштування NewGRF STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Перевірити доступний для завантаження додатковий контент -STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Відкрити налаштування ШІ +STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Показати налаштування ШІ STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Показати налаштування ігрового скрипту STR_INTRO_TOOLTIP_QUIT :{BLACK}Вийти з OpenTTD @@ -4480,6 +4490,9 @@ STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Інте STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Інтервал техогляду: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Останній техогляд: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Від останнього техогляду минуло хвилин: {LTBLUE}{NUM} +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Зменшити період обслуговування на 10 днів. Ctrl+клац зменшує період обслуговування на 5 днів +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Зменшити період обслуговування на 5 хвилин. Ctrl+клац зменшує період обслуговування на 1 хвилину +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Зменшити період обслуговування на 10 відсотків. Ctrl+клац зменшує період обслуговування на 5 відсотків STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Відлік інтервалу між техоглядами STR_VEHICLE_DETAILS_DEFAULT :Стандартно @@ -5855,6 +5868,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}тис. +STR_CURRENCY_SHORT_MEGA :{NBSP}млн +STR_CURRENCY_SHORT_GIGA :{NBSP}млрд +STR_CURRENCY_SHORT_TERA :{NBSP}трлн STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} From d4f0f0e2c502f0dd115b72f47ddfea5c8a1aec56 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 27 Feb 2024 20:10:06 +0000 Subject: [PATCH 025/695] Codechange: Use `GetVisibleRangeIterators()` in more places. (#12190) This replaces more first/last index calculation, along with indexed array/vector access, with iterator access instead. --- src/bridge_gui.cpp | 8 ++++---- src/fios_gui.cpp | 4 ++-- src/graph_gui.cpp | 8 +++----- src/group_gui.cpp | 6 +++--- src/industry_gui.cpp | 14 +++++++------- src/network/network_content_gui.cpp | 7 ++----- src/network/network_gui.cpp | 7 +++---- src/newgrf_debug_gui.cpp | 10 +++++----- src/newgrf_gui.cpp | 17 ++++++++--------- src/script/script_gui.cpp | 9 +++++---- src/signs_gui.cpp | 6 +++--- src/station_gui.cpp | 13 +++++++------ src/town_gui.cpp | 7 +++---- src/vehicle_gui.cpp | 7 +++---- 14 files changed, 58 insertions(+), 65 deletions(-) diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index fec724bb4c..15eea9a0d0 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -231,11 +231,11 @@ public: case WID_BBS_BRIDGE_LIST: { Rect tr = r.WithHeight(this->resize.step_height).Shrink(WidgetDimensions::scaled.matrix); bool rtl = _current_text_dir == TD_RTL; - for (int i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < (int)this->bridges.size(); i++) { - const BuildBridgeData &bridge_data = this->bridges.at(i); - const BridgeSpec *b = bridge_data.spec; + auto [first, last] = this->vscroll->GetVisibleRangeIterators(this->bridges); + for (auto it = first; it != last; ++it) { + const BridgeSpec *b = it->spec; DrawSpriteIgnorePadding(b->sprite, b->pal, tr.WithWidth(this->icon_width, rtl), SA_HOR_CENTER | SA_BOTTOM); - DrawStringMultiLine(tr.Indent(this->icon_width + WidgetDimensions::scaled.hsep_normal, rtl), GetBridgeSelectString(bridge_data)); + DrawStringMultiLine(tr.Indent(this->icon_width + WidgetDimensions::scaled.hsep_normal, rtl), GetBridgeSelectString(*it)); tr = tr.Translate(0, this->resize.step_height); } break; diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index ac073062fe..a6ec99bf81 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -441,8 +441,8 @@ public: GfxFillRect(br, PC_BLACK); Rect tr = r.Shrink(WidgetDimensions::scaled.inset).WithHeight(this->resize.step_height); - uint scroll_pos = this->vscroll->GetPosition(); - for (auto it = this->display_list.begin() + scroll_pos; it != this->display_list.end() && tr.top < br.bottom; ++it) { + auto [first, last] = this->vscroll->GetVisibleRangeIterators(this->display_list); + for (auto it = first; it != last; ++it) { const FiosItem *item = *it; if (item == this->selected) { diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 6869041b8d..d1112c5eea 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -1023,13 +1023,11 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { bool rtl = _current_text_dir == TD_RTL; - int pos = this->vscroll->GetPosition(); - int max = pos + this->vscroll->GetCapacity(); + auto [first, last] = this->vscroll->GetVisibleRangeIterators(_sorted_standard_cargo_specs); Rect line = r.WithHeight(this->line_height); - for (const CargoSpec *cs : _sorted_standard_cargo_specs) { - if (pos-- > 0) continue; - if (--max < 0) break; + for (auto it = first; it != last; ++it) { + const CargoSpec *cs = *it; bool lowered = !HasBit(_legend_excluded_cargo, cs->Index()); diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 3a6bdd4f70..00520c7ed8 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -626,9 +626,9 @@ public: if (this->vli.index != ALL_GROUP && this->grouping == GB_NONE) { /* Mark vehicles which are in sub-groups (only if we are not using shared order coalescing) */ Rect mr = r.WithHeight(this->resize.step_height); - size_t max = std::min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->vehgroups.size()); - for (size_t i = this->vscroll->GetPosition(); i < max; ++i) { - const Vehicle *v = this->vehgroups[i].GetSingleVehicle(); + auto [first, last] = this->vscroll->GetVisibleRangeIterators(this->vehgroups); + for (auto it = first; it != last; ++it) { + const Vehicle *v = it->GetSingleVehicle(); if (v->group_id != this->vli.index) { GfxFillRect(mr.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(COLOUR_GREY, SHADE_DARK), FILLRECT_CHECKER); } diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 573f3fb064..03b279edfa 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -528,8 +528,9 @@ public: icon.top = r.top + (this->resize.step_height - this->legend.height + 1) / 2; icon.bottom = icon.top + this->legend.height - 1; - for (uint16_t i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < this->vscroll->GetCount(); i++) { - IndustryType type = this->list[i]; + auto [first, last] = this->vscroll->GetVisibleRangeIterators(this->list); + for (auto it = first; it != last; ++it) { + IndustryType type = *it; bool selected = this->selected_type == type; const IndustrySpec *indsp = GetIndustrySpec(type); @@ -1699,20 +1700,19 @@ public: DrawString(ir, STR_INDUSTRY_DIRECTORY_NONE); break; } - int n = 0; const CargoID acf_cid = this->accepted_cargo_filter_criteria; - for (uint i = this->vscroll->GetPosition(); i < this->industries.size(); i++) { + auto [first, last] = this->vscroll->GetVisibleRangeIterators(this->industries); + for (auto it = first; it != last; ++it) { TextColour tc = TC_FROMSTRING; if (acf_cid != CargoFilterCriteria::CF_ANY && acf_cid != CargoFilterCriteria::CF_NONE) { - Industry *ind = const_cast(this->industries[i]); + Industry *ind = const_cast(*it); if (IndustryTemporarilyRefusesCargo(ind, acf_cid)) { tc = TC_GREY | TC_FORCED; } } - DrawString(ir, this->GetIndustryString(this->industries[i]), tc); + DrawString(ir, this->GetIndustryString(*it), tc); ir.top += this->resize.step_height; - if (++n == this->vscroll->GetCapacity()) break; // max number of industries in 1 window } break; } diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 9b0229e116..f3dbcc3763 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -652,11 +652,8 @@ public: int text_y_offset = (this->resize.step_height - GetCharacterHeight(FS_NORMAL)) / 2; Rect mr = r.WithHeight(this->resize.step_height); - auto iter = this->content.begin() + this->vscroll->GetPosition(); - size_t last = this->vscroll->GetPosition() + this->vscroll->GetCapacity(); - auto end = (last < this->content.size()) ? this->content.begin() + last : this->content.end(); - - for (/**/; iter != end; iter++) { + auto [first, last] = this->vscroll->GetVisibleRangeIterators(this->content); + for (auto iter = first; iter != last; iter++) { const ContentInfo *ci = *iter; if (ci == this->selected) GfxFillRect(mr.Shrink(WidgetDimensions::scaled.bevel), PC_GREY); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 1b7a6619ab..89cc53879e 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -527,10 +527,9 @@ public: case WID_NG_MATRIX: { uint16_t y = r.top; - const int max = std::min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (int)this->servers.size()); - - for (int i = this->vscroll->GetPosition(); i < max; ++i) { - const NetworkGameList *ngl = this->servers[i]; + auto [first, last] = this->vscroll->GetVisibleRangeIterators(this->servers); + for (auto it = first; it != last; ++it) { + const NetworkGameList *ngl = *it; this->DrawServerLine(ngl, y, ngl == this->server); y += this->resize.step_height; } diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index 6bb16255bb..9dcd14c9d9 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -933,13 +933,13 @@ struct SpriteAlignerWindow : Window { const NWidgetBase *nwid = this->GetWidget(widget); int step_size = nwid->resize_y; - std::vector &list = _newgrf_debug_sprite_picker.sprites; - int max = std::min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (uint)list.size()); + const std::vector &list = _newgrf_debug_sprite_picker.sprites; Rect ir = r.Shrink(WidgetDimensions::scaled.matrix); - for (int i = this->vscroll->GetPosition(); i < max; i++) { - SetDParam(0, list[i]); - DrawString(ir, STR_JUST_COMMA, list[i] == this->current_sprite ? TC_WHITE : TC_BLACK, SA_RIGHT | SA_FORCE); + auto [first, last] = this->vscroll->GetVisibleRangeIterators(list); + for (auto it = first; it != last; ++it) { + SetDParam(0, *it); + DrawString(ir, STR_JUST_COMMA, *it == this->current_sprite ? TC_WHITE : TC_BLACK, SA_RIGHT | SA_FORCE); ir.top += step_size; } break; diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index c1fdb7aec2..bcfe6810c3 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -909,11 +909,10 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { Rect tr = r.Shrink(WidgetDimensions::scaled.framerect); uint step_height = this->GetWidget(WID_NS_AVAIL_LIST)->resize_y; int offset_y = (step_height - GetCharacterHeight(FS_NORMAL)) / 2; - uint min_index = this->vscroll2->GetPosition(); - uint max_index = std::min(min_index + this->vscroll2->GetCapacity(), (uint)this->avails.size()); - for (uint i = min_index; i < max_index; i++) { - const GRFConfig *c = this->avails[i]; + auto [first, last] = this->vscroll2->GetVisibleRangeIterators(this->avails); + for (auto it = first; it != last; ++it) { + const GRFConfig *c = *it; bool h = (c == this->avail_sel); const char *text = c->GetName(); @@ -2127,13 +2126,13 @@ struct SavePresetWindow : public Window { uint step_height = this->GetWidget(WID_SVP_PRESET_LIST)->resize_y; int offset_y = (step_height - GetCharacterHeight(FS_NORMAL)) / 2; Rect tr = r.Shrink(WidgetDimensions::scaled.framerect); - uint min_index = this->vscroll->GetPosition(); - uint max_index = std::min(min_index + this->vscroll->GetCapacity(), (uint)this->presets.size()); - for (uint i = min_index; i < max_index; i++) { - if ((int)i == this->selected) GfxFillRect(br.left, tr.top, br.right, tr.top + step_height - 1, PC_DARK_BLUE); + auto [first, last] = this->vscroll->GetVisibleRangeIterators(this->presets); + for (auto it = first; it != last; ++it) { + int row = static_cast(std::distance(std::begin(this->presets), it)); + if (row == this->selected) GfxFillRect(br.left, tr.top, br.right, tr.top + step_height - 1, PC_DARK_BLUE); - DrawString(tr.left, tr.right, tr.top + offset_y, this->presets[i], ((int)i == this->selected) ? TC_WHITE : TC_SILVER); + DrawString(tr.left, tr.right, tr.top + offset_y, *it, (row == this->selected) ? TC_WHITE : TC_SILVER); tr.top += step_height; } break; diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp index 21bee4ac2b..85c593466e 100644 --- a/src/script/script_gui.cpp +++ b/src/script/script_gui.cpp @@ -927,7 +927,7 @@ struct ScriptDebugWindow : public Window { { if (this->filter.script_debug_company == INVALID_COMPANY) return; - ScriptLogTypes::LogData &log = this->GetLogData(); + const ScriptLogTypes::LogData &log = this->GetLogData(); if (log.empty()) return; Rect fr = r.Shrink(WidgetDimensions::scaled.framerect); @@ -943,8 +943,9 @@ struct ScriptDebugWindow : public Window { fr.left -= this->hscroll->GetPosition(); - for (int i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && (size_t)i < log.size(); i++) { - const ScriptLogTypes::LogLine &line = log[i]; + auto [first, last] = this->vscroll->GetVisibleRangeIterators(log); + for (auto it = first; it != last; ++it) { + const ScriptLogTypes::LogLine &line = *it; TextColour colour; switch (line.type) { @@ -957,7 +958,7 @@ struct ScriptDebugWindow : public Window { } /* Check if the current line should be highlighted */ - if (i == this->highlight_row) { + if (std::distance(std::begin(log), it) == this->highlight_row) { fr.bottom = fr.top + this->resize.step_height - 1; GfxFillRect(fr, PC_BLACK); if (colour == TC_BLACK) colour = TC_WHITE; // Make black text readable by inverting it to white. diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index 9826c87087..579548d86c 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -211,9 +211,9 @@ struct SignListWindow : Window, SignList { tr = tr.Indent(this->text_offset, rtl); /* At least one sign available. */ - for (uint16_t i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < this->vscroll->GetCount(); i++) - { - const Sign *si = this->signs[i]; + auto [first, last] = this->vscroll->GetVisibleRangeIterators(this->signs); + for (auto it = first; it != last; ++it) { + const Sign *si = *it; if (si->owner != OWNER_NONE) DrawCompanyIcon(si->owner, icon_left, tr.top + sprite_offset_y); diff --git a/src/station_gui.cpp b/src/station_gui.cpp index d9e4f6eb05..5f08c816ce 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -455,7 +455,6 @@ public: case WID_STL_LIST: { bool rtl = _current_text_dir == TD_RTL; - size_t max = std::min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->stations.size()); Rect tr = r.Shrink(WidgetDimensions::scaled.framerect); uint line_height = this->GetWidget(widget)->resize_y; /* Spacing between station name and first rating graph. */ @@ -463,8 +462,9 @@ public: /* Spacing between additional rating graphs. */ int rating_spacing = WidgetDimensions::scaled.hsep_normal; - for (size_t i = this->vscroll->GetPosition(); i < max; ++i) { // do until max number of stations of owner - const Station *st = this->stations[i]; + auto [first, last] = this->vscroll->GetVisibleRangeIterators(this->stations); + for (auto it = first; it != last; ++it) { + const Station *st = *it; assert(st->xy != INVALID_TILE); /* Do not do the complex check HasStationInUse here, it may be even false @@ -2320,11 +2320,12 @@ struct SelectStationWindow : Window { if (widget != WID_JS_PANEL) return; Rect tr = r.Shrink(WidgetDimensions::scaled.framerect); - for (uint i = this->vscroll->GetPosition(); i < _stations_nearby_list.size(); ++i, tr.top += this->resize.step_height) { - if (_stations_nearby_list[i] == NEW_STATION) { + auto [first, last] = this->vscroll->GetVisibleRangeIterators(_stations_nearby_list); + for (auto it = first; it != last; ++it, tr.top += this->resize.step_height) { + if (*it == NEW_STATION) { DrawString(tr, T::EXPECTED_FACIL == FACIL_WAYPOINT ? STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT : STR_JOIN_STATION_CREATE_SPLITTED_STATION); } else { - const T *st = T::Get(_stations_nearby_list[i]); + const T *st = T::Get(*it); SetDParam(0, st->index); SetDParam(1, st->facilities); DrawString(tr, T::EXPECTED_FACIL == FACIL_WAYPOINT ? STR_STATION_LIST_WAYPOINT : STR_STATION_LIST_STATION); diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 39b8dfa89b..e82ed1eb2d 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -840,7 +840,6 @@ public: break; case WID_TD_LIST: { - int n = 0; Rect tr = r.Shrink(WidgetDimensions::scaled.framerect); if (this->towns.empty()) { // No towns available. DrawString(tr, STR_TOWN_DIRECTORY_NONE); @@ -853,8 +852,9 @@ public: int icon_x = tr.WithWidth(icon_size.width, rtl).left; tr = tr.Indent(icon_size.width + WidgetDimensions::scaled.hsep_normal, rtl); - for (uint i = this->vscroll->GetPosition(); i < this->towns.size(); i++) { - const Town *t = this->towns[i]; + auto [first, last] = this->vscroll->GetVisibleRangeIterators(this->towns); + for (auto it = first; it != last; ++it) { + const Town *t = *it; assert(t->xy != INVALID_TILE); /* Draw rating icon. */ @@ -872,7 +872,6 @@ public: DrawString(tr.left, tr.right, tr.top + (this->resize.step_height - GetCharacterHeight(FS_NORMAL)) / 2, GetTownString(t)); tr.top += this->resize.step_height; - if (++n == this->vscroll->GetCapacity()) break; // max number of towns in 1 window } break; } diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index b35d40c102..7f8a28fa35 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -1704,10 +1704,9 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int int vehicle_button_x = rtl ? ir.right - profit.width : ir.left; - uint max = static_cast(std::min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->vehgroups.size())); - for (uint i = this->vscroll->GetPosition(); i < max; ++i) { - - const GUIVehicleGroup &vehgroup = this->vehgroups[i]; + auto [first, last] = this->vscroll->GetVisibleRangeIterators(this->vehgroups); + for (auto it = first; it != last; ++it) { + const GUIVehicleGroup &vehgroup = *it; SetDParam(0, vehgroup.GetDisplayProfitThisYear()); SetDParam(1, vehgroup.GetDisplayProfitLastYear()); From fad77261eacdbc8c3207ed920e0d0f08286b4027 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Tue, 27 Feb 2024 21:25:49 +0100 Subject: [PATCH 026/695] Fix f6dd505: Missing savegame conversion for current_order (#12188) --- src/saveload/afterload.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 1581b7bdd4..7fca426964 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -1771,6 +1771,11 @@ bool AfterLoadGame() if (!order->IsType(OT_GOTO_DEPOT)) continue; order->SetDepotActionType((OrderDepotActionFlags)(order->GetDepotActionType() >> 1)); } + + for (Vehicle *v : Vehicle::Iterate()) { + if (!v->current_order.IsType(OT_GOTO_DEPOT)) continue; + v->current_order.SetDepotActionType((OrderDepotActionFlags)(v->current_order.GetDepotActionType() >> 1)); + } } /* The water class was moved/unified. */ From c4f94795071754a0aaf54549cf22f0f9f285c774 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 28 Feb 2024 18:35:37 +0000 Subject: [PATCH 027/695] Update: Translations from eints chinese (simplified): 19 changes by WenSimEHRP ukrainian: 9 changes by StepanIvasyn portuguese (brazilian): 43 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 86 +++++++++++++++---------------- src/lang/simplified_chinese.txt | 38 +++++++------- src/lang/ukrainian.txt | 10 +++- 3 files changed, 71 insertions(+), 63 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 35aa2d46d1..7859c8ac2c 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1105,7 +1105,7 @@ STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :{RED}Plugin dup STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNSUPPORTED_API :{RED}Versão não suportada STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Assinatura inválida -STR_BASESET_STATUS :{STRING} {RED}({NUM} arquivo{P "" s} em falta/corrompido{P "" s}) +STR_BASESET_STATUS :{STRING} {RED}({NUM} arquivo{P "" s} faltando/corrompido{P "" s}) STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Falha ao obter uma lista de resoluções suportadas STR_ERROR_FULLSCREEN_FAILED :{WHITE}Modo de tela cheia falhou @@ -2717,7 +2717,7 @@ STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD :{WHITE}O downlo STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... arquivo não pode ser gravado STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}Falha na descompactação do arquivo -STR_MISSING_GRAPHICS_SET_CAPTION :{WHITE}Gráficos ausentes +STR_MISSING_GRAPHICS_SET_CAPTION :{WHITE}Gráficos não instalados STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD precisa de gráficos para funcionar, mas nenhum foi encontrado. Você permite ao OpenTTD fazer o download e instalar esses gráficos? STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Sim, obter os gráficos pela rede STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Não, sair do OpenTTD @@ -3299,12 +3299,12 @@ STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Escolher STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Aumentar de uma unidade a altura máxima do pico mais alto no mapa STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Diminuir de uma unidade a altura máxima do pico mais alto no mapa STR_MAPGEN_SNOW_COVERAGE :{BLACK}Cobertura de neve: -STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Aumentar em dez porcento a cobertura de neve -STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Reduzir em dez porcento a cobertura de neve +STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Aumentar a cobertura de neve em dez por cento +STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Diminuir a cobertura de neve em dez por cento STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_DESERT_COVERAGE :{BLACK}Cobertura do deserto: -STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}Aumentar a cobertura do deserto em dez porcento -STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Diminuir a cobertura do deserto em dez por cento +STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}Aumentar a cobertura de deserto em dez por cento +STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Diminuir a cobertura de deserto em dez por cento STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Tipo de terreno: STR_MAPGEN_SEA_LEVEL :{BLACK}Nível do mar: @@ -3351,7 +3351,7 @@ STR_MAPGEN_NORTHWEST :{BLACK}Noroeste STR_MAPGEN_NORTHEAST :{BLACK}Nordeste STR_MAPGEN_SOUTHEAST :{BLACK}Sudeste STR_MAPGEN_SOUTHWEST :{BLACK}Sudoeste -STR_MAPGEN_BORDER_FREEFORM :{BLACK}Livre +STR_MAPGEN_BORDER_FREEFORM :{BLACK}Forma livre STR_MAPGEN_BORDER_WATER :{BLACK}Água STR_MAPGEN_BORDER_RANDOM :{BLACK}Aleatório STR_MAPGEN_BORDER_RANDOMIZE :{BLACK}Aleatório @@ -3361,7 +3361,7 @@ STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotaçã STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nome do mapa topográfico: STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}O nome do arquivo de imagem do mapa topográfico STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Tamanho: -STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}O tamanho da imagem do mapa topográfico original. Para melhores resultados, cada lado deve ser igual a um comprimento de lado de mapa disponível no OpenTTD, como 256, 512, 1024, etc. +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}O tamanho da imagem original do mapa topográfico. Para melhores resultados, cada lado deve corresponder a um comprimento de lado de mapa disponível no OpenTTD, tais como 256, 512, 1024, etc. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Altura desejada do pico @@ -3395,7 +3395,7 @@ STR_GENERATION_TREE_GENERATION :{BLACK}Geraçã STR_GENERATION_OBJECT_GENERATION :{BLACK}Geração de objetos STR_GENERATION_CLEARING_TILES :{BLACK}Geração de área rochosa e irregular STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurando o jogo -STR_GENERATION_PREPARING_TILELOOP :{BLACK}Configurando o terreno +STR_GENERATION_PREPARING_TILELOOP :{BLACK}Preparando o terreno STR_GENERATION_PREPARING_SCRIPT :{BLACK}Executando o script STR_GENERATION_PREPARING_GAME :{BLACK}Preparando o jogo @@ -3431,7 +3431,7 @@ STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Alternar STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Ativar/Desativar a paleta de NewGRF selecionado.{}Faça isso quando os gráficos deste NewGRF ficarem cor de rosa no jogo STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Aplicar alterações -STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Procurar o conteúdo online +STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Procurar conteúdo que falta online STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP :{BLACK}Verificar se o conteúdo em falta pode ser encontrado online STR_NEWGRF_SETTINGS_FILENAME :{BLACK}Nome do arquivo: {SILVER}{STRING} @@ -3442,8 +3442,8 @@ STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}Soma MD5 STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Padrão (D) STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Padrão (D) / 32 bpp -STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legado (W) -STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legado (W) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Antiga (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Antiga (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parâmetros: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PARAMETER_NONE :Nenhum @@ -3454,7 +3454,7 @@ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Incompatí # NewGRF save preset window STR_SAVE_PRESET_CAPTION :{WHITE}Salvar predefinição -STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lista de predefinições disponíveis, selecione uma para copiá-la como nome da gravação abaixo +STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lista de predefinições disponíveis, selecione uma para copiá-la como nome para a gravação abaixo STR_SAVE_PRESET_TITLE :{BLACK}Introduzir um nome para a predefinição STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Nome que está selecionado para a gravação da predefinição STR_SAVE_PRESET_CANCEL :{BLACK}Cancelar @@ -3466,7 +3466,7 @@ STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Salvar a STR_BASEGRF_PARAMETERS_CAPTION :{WHITE}Alterar parâmetros dos gráficos base STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Alterar parâmetros de NewGRF STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Fechar -STR_NEWGRF_PARAMETERS_RESET :{BLACK}Redefinir +STR_NEWGRF_PARAMETERS_RESET :{BLACK}Restaurar STR_NEWGRF_PARAMETERS_RESET_TOOLTIP :{BLACK}Restaurar todos os parâmetros para os valores padrão STR_NEWGRF_PARAMETERS_DEFAULT_NAME :Parâmetro {NUM} STR_NEWGRF_PARAMETERS_SETTING :{STRING}: {ORANGE}{STRING} @@ -3487,11 +3487,11 @@ STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parâmet # Sprite aligner window STR_SPRITE_ALIGNER_CAPTION :{WHITE}Alinhando sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Próximo sprite -STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Ir para o próximo sprite normal, pulando quaisquer sprites falsos, recoloridos ou de fontes e junta tudo do último sprite ao primeiro +STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Ir para o próximo sprite normal, pulando quaisquer sprites falsos/recoloridos/tipo de letra e retornar do último sprite ao primeiro STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ir para o sprite -STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Ir para o sprite determinado. Se o sprite não é um sprite normal, segue para o próximo sprite normal +STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Ir para o sprite selecionado. Se o sprite não for um sprite normal, seguir para o próximo sprite normal STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Sprite anterior -STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Ir para o sprite normal anterior, pulando quaisquer sprites falsos, recoloridos ou de fontes e junta tudo do primeiro sprite ao último +STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Ir para o sprite normal anterior, pulando quaisquer sprites falsos/recoloridos/tipo de letra e retornar do primeiro sprite ao último STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representação do sprite atualmente selecionado. O alinhamento é ignorado ao desenhar este sprite STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move o sprite, alterando os deslocamentos X e Y. Ctrl+Clique move o sprite 8 unidades por vez @@ -3499,10 +3499,10 @@ STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move o s STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Deslocamento centralizado STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprite centralizado -STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Mira +STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Retículo -STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Redefinir relativo -STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Redefinir os deslocamentos relativos atuais +STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Restaurar relativo +STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Restaurar os deslocamentos relativos atuais STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}Deslocamento X: {NUM}, Deslocamento Y: {NUM} (Absoluto) STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}Deslocamento X: {NUM}, Deslocamento Y: {NUM} (Relativo) STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Escolher sprite @@ -3524,32 +3524,32 @@ STR_NEWGRF_ERROR_INVALID_PARAMETER :Parâmetro inv STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} deve ser carregado antes de {2:STRING} STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} deve ser carregado depois de {2:STRING} STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} requer OpenTTD versão {2:STRING} ou superior -STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :o arquivo GRF foi designado para tradução +STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :o arquivo GRF que foi desenvolvido para traduzir STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Foram carregados NewGRFs demais STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Carregar {1:STRING} como NewGRF estático com {2:STRING} pode causar erro de sincronização STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Sprite inesperado (sprite {3:NUM}) -STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Propriedade de Ação 0 desconhecida {4:HEX} (sprite {3:NUM}) +STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Propriedade Action 0 desconhecida {4:HEX} (sprite {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Tentativa de uso de ID inválido (sprite {3:NUM}) STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} contém um sprite corrompido. Todos os sprites corrompidos serão apresentados como um ponto de interrogação (?) vermelho -STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contém múltiplas entradas Ação 8 (sprite {3:NUM}) -STR_NEWGRF_ERROR_READ_BOUNDS :Leitura após o final do pseudo-sprite (sprite {3:NUM}) +STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contém múltiplas entradas Action 8 (sprite {3:NUM}) +STR_NEWGRF_ERROR_READ_BOUNDS :Leitura depois do fim do pseudo-sprite (sprite {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF necessários estão indisponíveis (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} foi desativado por {STRING} -STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato de layout de sprite inválido/desconhecido (sprite {3:NUM}) +STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato de disposição de sprite inválido/desconhecido (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Há elementos demais na lista de valores de propriedade (sprite {3:NUM}, propriedade {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Retorno de produção da indústria inválido (sprite {3:NUM}, "{2:STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Chamada de produção da indústria inválido (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Cuidado! -STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Você está prestes a efetuar alterações em um jogo em andamento. Isto pode travar o OpenTTD ou quebrar o estado do jogo. Não envie relatórios de erros sobre esses problemas.{}Tem certeza de que realmente deseja continuar? +STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Você está prestes a efetuar alterações em um jogo em andamento. Isto pode fazer o OpenTTD terminar abruptamente ou travar o jogo. Não envie relatórios de erros sobre estas questões.{}Tem certeza de que realmente deseja continuar? STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Não é possível adicionar arquivo: ID do GRF duplicado STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Arquivo correspondente não encontrado (GRF compatível carregado) STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Não é possível adicionar arquivo: limite de NewGRFs atingido -STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}GRF(s) compatíveis foram carregados para os arquivos ausentes -STR_NEWGRF_DISABLED_WARNING :{WHITE}Arquivo(s) GRF ausentes foram desativados -STR_NEWGRF_UNPAUSE_WARNING_TITLE :{YELLOW}Arquivo(s) GRF ausentes +STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}GRF's compatíveis foram carregados para os arquivos que faltam +STR_NEWGRF_DISABLED_WARNING :{WHITE}Arquivos GRF ausentes foram desativados +STR_NEWGRF_UNPAUSE_WARNING_TITLE :{YELLOW}Arquivos GRF em falta STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Sair da pausa pode travar o OpenTTD. Não envie relatórios de erros sobre travamentos subsequentes.{}Você realmente deseja sair da pausa? # NewGRF status @@ -3557,20 +3557,20 @@ STR_NEWGRF_LIST_NONE :Nenhum ###length 3 STR_NEWGRF_LIST_ALL_FOUND :Todos os arquivos estão presentes STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}Foram encontrados arquivos compatíveis -STR_NEWGRF_LIST_MISSING :{RED}Arquivos ausentes +STR_NEWGRF_LIST_MISSING :{RED}Arquivos em falta # NewGRF 'it's broken' warnings -STR_NEWGRF_BROKEN :{WHITE}O comportamento de NewGRF '{0:STRING}' pode causar dessincronizações e/ou travamentos +STR_NEWGRF_BROKEN :{WHITE}O comportamento de NewGRF '{0:STRING}' pode causar erros de sincronização e/ou travamentos STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}O estado do vagão motorizado mudou para '{1:ENGINE}' quando estiver fora do depósito STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}O comprimento do veículo mudou para '{1:ENGINE}' quando estiver fora do depósito STR_NEWGRF_BROKEN_CAPACITY :{WHITE}A capacidade do veículo mudou para '{1:ENGINE}' quando estiver fora do depósito ou em adaptação -STR_BROKEN_VEHICLE_LENGTH :{WHITE}O trem '{VEHICLE}' pertencente a '{COMPANY}' tem um comprimento inválido. Possivelmente devido a problemas com NewGRFs. Pode ocorrer erros de sincronização ou travamento +STR_BROKEN_VEHICLE_LENGTH :{WHITE}O trem '{VEHICLE}' pertencente a '{COMPANY}' tem um comprimento inválido, possivelmente devido à problemas com NewGRFs. Podem ocorrer erros de sincronização ou travamento do jogo -STR_NEWGRF_BUGGY :{WHITE}O NewGRF '{0:STRING}' retorna informação incorreta +STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' fornece informação incorreta STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}A informação de carga/adaptação para '{1:ENGINE}' é diferente da lista de compra depois da construção. Isto pode fazer a renovação/substituição automática falhar se adaptar corretamente -STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' causou um loop infinito no retorno de chamada de produção -STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Retorno de chamada {1:HEX} devolveu um resultado desconhecido/inválido {2:HEX} -STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' retornou tipo de carga inválido no retorno de chamada de produção em {2:HEX} +STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' causou um loop infinito na chamada de produção +STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Chamada {1:HEX} devolveu resultado desconhecido/inválido {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' devolveu tipo de carga inválido na chamada de produção em {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3620,7 +3620,7 @@ STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} é necessário no inverno STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} entregue STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (ainda necessário) -STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (entregue{P "" s}) +STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (entregue) STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Localidade cresce a cada {ORANGE}{UNITS_DAYS_OR_SECONDS} STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Localidade cresce a cada {ORANGE}{UNITS_DAYS_OR_SECONDS} (financiada) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Localidade {RED}não{BLACK} está crescendo @@ -3671,7 +3671,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Subornar a autoridade local para aumentar a sua avaliação e anular um direito exclusivo de transporte de um concorrente, correndo o risco de uma penalidade severa se for apanhado.{}{POP_COLOUR}Custo: {CURRENCY_LONG} # Goal window -STR_GOALS_CAPTION :{WHITE}{COMPANY} - Objetivos +STR_GOALS_CAPTION :{WHITE}Objetivos de {COMPANY} STR_GOALS_SPECTATOR_CAPTION :{WHITE}Objetivos globais STR_GOALS_SPECTATOR :Objetivos Globais STR_GOALS_GLOBAL_BUTTON :{BLACK}Globais @@ -3725,7 +3725,7 @@ STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :até {DATE_SHOR STR_SUBSIDIES_SUBSIDISED_EXPIRY_TIME :{UNITS_MONTHS_OR_MINUTES} restante{P "" s} # Story book window -STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} - Livro de História +STR_STORY_BOOK_CAPTION :{WHITE}Livro de História de {COMPANY} STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Livro de Histórias Global STR_STORY_BOOK_SPECTATOR :Livro de Histórias Global STR_STORY_BOOK_TITLE :{YELLOW}{STRING} @@ -3740,7 +3740,7 @@ STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Referênci # Station list window STR_STATION_LIST_TOOLTIP :{BLACK}Nomes das estações - Clique no nome para centralizar a visualização na estação. Ctrl+Clique abre uma nova visualização na localização da estação STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Ctrl+Clique para selecionar vários itens -STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} Estações +STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} Estaç{P ão ões} STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- Nenhum - @@ -4452,10 +4452,10 @@ STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Última manuten STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Última manutenção: {LTBLUE}{NUM} minuto{P "" s} atrás STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Aumentar o intervalo de manutenção em 10 dias. Ctrl+Clique para aumentar o intervalo de manutenção em 5 dias STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Aumentar o intervalo de manutenção em 5 minutos. Ctrl+Clique para aumentar o intervalo de manutenção em 1 minuto -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Aumentar o intervalo de manutenção em 10 porcento. Ctrl+Clique para aumentar o intervalo de manutenção em 5 porcento +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Aumentar o intervalo de manutenção em 10 por cento. Ctrl+Clique para aumentar o intervalo de manutenção em 5 por cento STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Diminuir o intervalo de manutenção em 10 dias. Ctrl+Clique para diminuir o intervalo de manutenção em 5 dias STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Diminuir o intervalo de manutenção em 5 minutos. Ctrl+Clique para diminuir o intervalo de manutenção em 1 minuto -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Diminuir o intervalo de manutenção em 10 porcento. Ctrl+Clique para diminuir o intervalo de manutenção em 5 porcento +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Diminuir o intervalo de manutenção em 10 por cento. Ctrl+Clique para diminuir o intervalo de manutenção em 5 por cento STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Alterar o tipo de intervalo entre manutenções STR_VEHICLE_DETAILS_DEFAULT :Padrão diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 62fee25d6d..c3a8416eba 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -289,7 +289,7 @@ STR_TOOLTIP_RESIZE :{BLACK}点击 STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}切换窗口大小 STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}滚动条 - 上下滚动列表 STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}滚动条 - 左右滚动列表 -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}拆除地块上的建筑物等设施,按住Ctrl键选择对角线区域,按住Shift键操作只提示预计成本 +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}清除地面。按住 键以沿对角线操作,按住 键操作以显示预计成本。 # Show engines button ###length VEHICLE_TYPES @@ -398,7 +398,7 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}显示 STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}显示公司汽车列表。按住 键单击以显示/隐藏载具组。 STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}显示公司船只列表。按住 键单击以显示/隐藏载具组。 STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}显示公司飞机列表。按住 键单击以显示/隐藏载具组。 -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}放大视图 +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}放大 STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}缩小 STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}建设铁路设施 STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}建设公路设施 @@ -1274,10 +1274,10 @@ STR_CONFIG_SETTING_INFINITE_MONEY :无限资金: { STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :允许无限制的支出并禁止公司破产 STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :最大初始贷款: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :公司最大贷款额(不考虑通货膨胀的影响) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :公司最大贷款额(不考虑通货膨胀的影响)。如果此项被设为“无贷款”则开局时不会有任何金钱提供。此时金钱需要由沙盒选项、无限金钱或者游戏脚本提供。 STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :无贷款 {RED}需要有游戏脚本以提供初始资金 +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :无贷款 STR_CONFIG_SETTING_INTEREST_RATE :贷款利率: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :贷款利率;如果通货膨胀启用,将同时影响通货膨胀率。 @@ -2956,9 +2956,9 @@ STR_STATION_BUILD_NOISE :{BLACK}产生 # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}景观美化 STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}降低地面。按住 键以沿对角线操作,按住 键操作以显示预计成本。 -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}升高地块的一角 +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}升高地面。按住 键以沿对角线操作,按住 键操作以显示预计成本。 STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}拉平地面。按住 键以沿对角线操作,按住 键操作以显示预计成本。 -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}购买土地以备将来使用。按 Ctrl 键可选择对角线区域。按 Shift 键可以预览所需资金。 +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}购买土地以备将来使用。按住 键以沿对角线操作,按住 键操作以显示预计成本。 # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}物体选单 @@ -3943,7 +3943,7 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING},{STRING},{STRING}以及其余 {NUM} 个…… -STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}工业设施{}点击可以将屏幕中心移动到其所在位置. 单击的同时按住Ctrl会在新视点中显示工业位置 +STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}工业名称 - 点选名称以将屏幕中心移动到当前工业的位置。按住 键点选会在新视点中显示工业位置。 STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}接受的货物:{SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}产出的货物:{SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :所有货物类型 @@ -4098,7 +4098,7 @@ STR_CARGO_TYPE_FILTER_NONE :没有 ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}列车选择列表。点击载具以展示信息。按住 键点选以显示 / 隐藏当前载具。 -STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}路面车辆选择列表。点击车辆查看详细信息,或者按住 Ctrl 键再点击以切换是否隐藏车辆的种类 +STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}汽车选择列表。点击载具以展示信息。按住 键点选以显示 / 隐藏当前载具。 STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}船舶选择列表。点击船舶查看详细信息,或者按住 Ctrl 键再点击以切换是否隐藏船舶的种类 STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}飞机选择列表。点击飞机查看详细信息,或者按住 Ctrl 键再点击以切换是否隐藏飞机的种类 @@ -4219,13 +4219,13 @@ STR_DEPOT_CLONE_AIRCRAFT :{BLACK}克隆 STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}复制火车。点击此按钮然后再点击任意一列在车库内或车库外的火车以复制购买。按住 键单击以共享调度计划。按住 键单击以显示预计费用。 STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}复制汽车。点击此按钮然后再点击任意一辆在车库内或车库外的载具以复制购买。按住 键单击以共享调度计划。按住 键单击以显示预计费用。 STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}复制船只。点击此按钮然后再点击任意一辆在车库内或车库外的载具以复制购买。按住 键单击以共享调度计划。按住 键单击以显示预计费用。 -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}复制飞机。按此按钮后{}点击一个在机库内或外面的飞机即可。按住 Ctrl 键单击可以同时共享调度计划,按住 Shift 键单击可以显示所需资金 +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}复制飞机。点击此按钮然后再点击任意一辆在车库内或车库外的载具以复制购买。按住 键单击以共享调度计划。按住 键单击以显示预计费用。 ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到列车车库所在的位置。按住 单击会在新视点中显示列车车库位置。 STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到车库所在的位置。按住 单击会在新视点中显示目标位置。 STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到当前船坞的位置. 单击的同时按住Ctrl会在新视点中显示船坞位置 -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到当前机库的位置. 单击的同时按住Ctrl会在新视点中显示机库位置 +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到机库所在的位置。按住 单击会在新视点中显示目标位置。 ###length VEHICLE_TYPES STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}显示所有调度计划中含有此车库的列车 @@ -4334,13 +4334,13 @@ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}将主视角中心移动到列车所在的位置。双击将会在主视角中跟踪列车。单击的同时按住Ctrl会在新视点中显示列车位置 STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK} 将主视角中心移动到车辆所在的位置。双击将会在主视角中跟踪车辆。单击的同时按住 Ctrl 会在新视点中显示车辆位置 STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}将主视角中心移动到船只所在的位置。双击将会在主视角中跟踪船只。单击的同时按住Ctrl会在新视点中显示船只位置 -STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}将主视角中心移动到飞机所在的位置。双击将会在主视角中跟踪飞机。单击的同时按住Ctrl会在新视点中显示飞机位置 +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}将主视角中心移动到飞机所在的位置。双击将会在主视角中跟踪飞机。按 键操作以在新视点中显示飞机 ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令列车前往车库。按住 键操作以仅作保养。 -STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令汽车前往车库{}Ctrl+单击 时汽车只进行保养 +STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令汽车前往车库。按住 键操作以仅作保养。 STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令船只前往船坞{}Ctrl+单击 时船只只进行保养 -STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令飞机前往机库{}Ctrl+单击 时飞机只进行保养 +STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令飞机前往机库。按住 键操作以仅作保养。 ###length VEHICLE_TYPES STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}复制这列火车。按住 键单击以共享调度计划。按住 键单击以显示预计费用。 @@ -4384,7 +4384,7 @@ STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}等待 STR_VEHICLE_STATUS_CRASHED :{RED}已撞毁! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}抛锚 STR_VEHICLE_STATUS_STOPPED :{RED}停运 -STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}正在停止,{VELOCITY} +STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}{VELOCITY} - 正在停止 STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}没有电力 STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}等待空余轨道 STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}距离下一目的地过远 @@ -4523,7 +4523,7 @@ STR_ORDERS_CAPTION :{WHITE}{VEHICLE STR_ORDERS_TIMETABLE_VIEW :{BLACK}时刻表 STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}切换到时刻表视图 -STR_ORDERS_LIST_TOOLTIP :{BLACK}调度列表{}单击一个调度指令以选定{}CTRL+左键{}将视点移动到相应的车站 +STR_ORDERS_LIST_TOOLTIP :{BLACK}调度列表 - 点击命令以选定命令。按 键操作以跳至命令目标在地图上的位置 STR_ORDER_INDEX :{COMMA}:{NBSP} STR_ORDER_TEXT :{STRING} {STRING} {STRING} {STRING} @@ -4600,13 +4600,13 @@ STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}要比 STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}请输入要比较的值 STR_ORDERS_SKIP_BUTTON :{BLACK}跳过 -STR_ORDERS_SKIP_TOOLTIP :{BLACK}跳过当前命令并执行下一条命令{}CTRL+单击 可以跳过选定的命令 +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_TOOLTIP :{BLACK}退出共享调度计划。 按住 Ctrl 键单击可以同时清除此载具的调度计划。 +STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}退出共享调度计划。 按 键单击可以同时清除此载具的调度计划。 STR_ORDERS_GO_TO_BUTTON :{BLACK}前往 STR_ORDER_GO_TO_NEAREST_DEPOT :前往最近的车库 @@ -4738,7 +4738,7 @@ STR_TIMETABLE_CLEAR_SPEED :{BLACK}取消 STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}清除选定命令设定的限速。按住 键操作以清除所有命令的限速。 STR_TIMETABLE_RESET_LATENESS :{BLACK}清除晚点计数器 -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}重置晚点计数器,从而使车辆被视为准时到达。CTRL+点击会重置全分组的计数器,从而使晚点最多的载具被视为准点而其他被视为早点 +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}重置晚点计数器,从而使车辆被视为准时到达。按 键操作以重置全分组的计数器,从而使晚点最多的载具被视为准点而其他被视为早点 STR_TIMETABLE_AUTOFILL :{BLACK}自动填充 STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}根据下一次运行的时间自动填充时刻表。按住Ctrl单击可保持等候时间 @@ -4780,7 +4780,7 @@ STR_AI_DEBUG_CONTINUE :{BLACK}继续 STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}取消暂停AI STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}查看此 AI 的调试输出。按住 操作以打开新窗口。 STR_AI_GAME_SCRIPT :{BLACK}游戏脚本 -STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}检查游戏脚本日志。按住Ctrl键点选以打开新窗口 +STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}检查游戏脚本日志。按住 操作以打开新窗口 STR_ERROR_AI_NO_AI_FOUND :找不到可用的AI。{}本AI是一个演示AI,并不会在游戏中做任何动作,{}您可以通过“在线查找扩展包”功能下载新的AI。 STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}您使用的一个AI崩溃了。请附上一张AI调试窗口的截图,将此错误通报AI作者。 diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 31e879bbd5..03513bbae8 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1578,7 +1578,8 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :Так, для STR_CONFIG_SETTING_WARN_INCOME_LESS :Попереджувати про збиткові транспортні засоби: {STRING} ###length 2 -STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Вмикає/вимикає повідомлення про транспортні засоби, що не принесли прибутку на протязі року. +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :При включенні виринають повідомлення про транспортні засоби, що не принесли прибутку впродовж року. +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :При включенні виринають повідомлення про транспортні засоби, що не принесли прибутку впродовж періоду STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Транспортні засоби не застарівають: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :При включенні будь-яка модель транспортного засобу буде доступна для придбання безстроково після її впровадження. @@ -1847,9 +1848,11 @@ STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Відтвор ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR :Кінець року: {STRING} +STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Кінець періоду: {STRING} ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Грати звуковий ефект у кінці року при підбитті результатів річної діяльності компанії порівняно з попереднім роком +STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Грати звуковий ефект у кінці періоду при підбитті результатів періодної діяльності компанії порівняно з попереднім періодом STR_CONFIG_SETTING_SOUND_CONFIRM :Будівництво: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Відтворювати звуковий ефект при успішному будівництві споруд або інших діях @@ -3819,6 +3822,8 @@ STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPAN STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Рейтинг STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Показати рейтинг станції +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MONTH :{BLACK}Постачання впродовж місяця і місцевий рейтинг: +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MINUTE :BLACK}Постачання впродовж хвилини і місцевий рейтинг: STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) STR_STATION_VIEW_GROUP :{BLACK}Групувати по @@ -4490,6 +4495,9 @@ STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Інте STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Інтервал техогляду: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Останній техогляд: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Від останнього техогляду минуло хвилин: {LTBLUE}{NUM} +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Збільшити період обслуговування на 10 днів. Ctrl+клац збільшує період обслуговування на 5 днів +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Збільшити період обслуговування на 5 хвилин. Ctrl+клац збільшує період обслуговування на 1 хвилину +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Збільшити період обслуговування на 10 відсотків. Ctrl+клац збільшує період обслуговування на 5 відсотків STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Зменшити період обслуговування на 10 днів. Ctrl+клац зменшує період обслуговування на 5 днів STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Зменшити період обслуговування на 5 хвилин. Ctrl+клац зменшує період обслуговування на 1 хвилину STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Зменшити період обслуговування на 10 відсотків. Ctrl+клац зменшує період обслуговування на 5 відсотків From c0b5510a94206033ae1bb6437248ca59d6fb6f9d Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 29 Feb 2024 18:35:53 +0000 Subject: [PATCH 028/695] Update: Translations from eints portuguese (brazilian): 157 changes by pasantoro polish: 5 changes by pAter-exe --- src/lang/brazilian_portuguese.txt | 314 +++++++++++++++--------------- src/lang/polish.txt | 10 +- 2 files changed, 162 insertions(+), 162 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 7859c8ac2c..b749413d31 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -774,7 +774,7 @@ STR_SMALLMAP_LEGENDA_AIRCRAFT :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_TRANSPORT_ROUTES :{TINY_FONT}{BLACK}Rotas de Transporte STR_SMALLMAP_LEGENDA_FOREST :{TINY_FONT}{BLACK}Floresta STR_SMALLMAP_LEGENDA_RAILROAD_STATION :{TINY_FONT}{BLACK}Estação Ferroviária -STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Estação de Caminhão +STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Estação de Caminhões STR_SMALLMAP_LEGENDA_BUS_STATION :{TINY_FONT}{BLACK}Estação de Ônibus STR_SMALLMAP_LEGENDA_AIRPORT_HELIPORT :{TINY_FONT}{BLACK}Aeroporto/Heliporto STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLACK}Doca @@ -905,7 +905,7 @@ STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} está perdido STR_NEWS_VEHICLE_UNPROFITABLE_YEAR :{WHITE}{VEHICLE} gerou um lucro de {CURRENCY_LONG} no último ano STR_NEWS_VEHICLE_UNPROFITABLE_PERIOD :{WHITE}{VEHICLE} gerou um lucro de {CURRENCY_LONG} no último período -STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} não pode chegar no próximo destino porque ele está fora da autonomia +STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} não pode chegar no próximo destino porque ele está além da autonomia STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} parou porque uma ordem de adaptação falhou STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Renovação automática falhou para {VEHICLE}{}{STRING} @@ -1401,18 +1401,18 @@ STR_CONFIG_SETTING_SHOWFINANCES :Mostrar janela STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Mostrar janela de finanças no fim do período: {STRING} ###length 2 -STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Se ativado, a janela de finanças é aberta ao final de cada ano, permitindo uma inspeção fácil do estado financeiro da empresa -STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Se ativado, a janela de finanças é aberta no final de cada período, permitindo uma inspeção fácil do estado financeiro da empresa +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Se ativado, a janela de finanças é aberta no fim de cada ano, permitindo uma inspeção fácil do estado financeiro da empresa +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Se ativado, a janela de finanças é aberta no fim de cada período, permitindo uma inspeção fácil do estado financeiro da empresa STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Novas ordens são 'sem parar' por padrão: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalmente, um veículo irá parar em cada estação por onde passa. Ativando esta configuração, o veículo passará por todas as estações na sua rota, sem parar, até o destino final. Esta opção define somente um modo padrão para novas ordens. Ordens individuais podem ser definidas explicitamente para qualquer um dos dois comportamentos STR_CONFIG_SETTING_STOP_LOCATION :Novas ordens de trem, por padrão, têm parada no {STRING} da plataforma -STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Local padrão onde um trem irá parar na plataforma. No 'início' significa próximo à entrada, 'meio' significa no meio da plataforma e 'fim' significa parar na saída da plataforma. Esta opção apenas define um padrão para as novas ordens. Ordens individuais podem ter o local de parada definido clicando no texto da ordem +STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Local padrão onde um trem irá parar na plataforma. No 'início' significa próximo à entrada, 'meio' significa no meio da plataforma e 'final' significa parar na saída da plataforma. Esta opção apenas define um padrão para as novas ordens. Ordens individuais podem ter o local de parada definido clicando no texto da ordem ###length 3 STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :início STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :meio -STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :fim +STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :final STR_CONFIG_SETTING_AUTOSCROLL :Mover a janela quando o cursor está na borda do mapa: {STRING} STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Quando ativado, as visualizações começarão a se mover quando o mouse se aproximar das bordas da janela @@ -1770,8 +1770,8 @@ STR_CONFIG_SETTING_SOUND_NEW_YEAR :Fim do ano: {ST STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Fim do período: {STRING} ###length 2 -STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Reproduzir um som no final do ano, resumindo o desempenho da empresa nesse ano em comparação com o desempenho no ano anterior -STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Reproduzir um som no final do período, resumindo o desempenho da empresa nesse período em comparação com o desempenho no período anterior +STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Reproduzir um som no fim do ano e apresentar o desempenho da empresa neste ano em comparação com o desempenho no ano anterior +STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Reproduzir um som no fim do período e apresentar o desempenho da empresa neste período em comparação com o desempenho no período anterior STR_CONFIG_SETTING_SOUND_CONFIRM :Construção: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Reproduzir efeito sonoro para construções ou outras ações bem sucedidas @@ -1905,7 +1905,7 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Ano em que os j STR_CONFIG_SETTING_STARTING_YEAR :Data de início: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Pontuação no fim do ano: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Ano em que o jogo termina para fins de pontuação. No final desse ano, a pontuação da empresa é registrada e a tela de pontuação máxima é exibida, mas os jogadores podem continuar jogando depois disso.{}Se isso for antes do ano de início, a tela de pontuação máxima nunca é exibida. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Ano em que o jogo termina para fins de pontuação. No fim desse ano, a pontuação da empresa é registrada e a tela de pontuação máxima é exibida, mas os jogadores podem continuar jogando depois disso.{}Se isso for antes do ano de início, a tela de pontuação máxima nunca é exibida. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nunca @@ -2232,7 +2232,7 @@ STR_HELP_WINDOW_CAPTION :{WHITE}Ajuda & STR_HELP_WINDOW_WEBSITES :{BLACK}Páginas na Internet STR_HELP_WINDOW_DOCUMENTS :{BLACK}Documentos STR_HELP_WINDOW_README :{BLACK}Leia-me -STR_HELP_WINDOW_CHANGELOG :{BLACK}Registo de modificações +STR_HELP_WINDOW_CHANGELOG :{BLACK}Registro de modificações STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Erros conhecidos STR_HELP_WINDOW_LICENSE :{BLACK}Licença STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD @@ -2786,7 +2786,7 @@ STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Construção de STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir ferrovia. Ctrl+Clique remove a ferrovia. Pressione também Shift para apenas mostrar o custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construir ferrovia usando o modo Autotrilho. Ctrl+Clique remove seção da ferrovia. Pressione também Shift para apenas mostrar o custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construir depósito de trem (para compra e manutenção de trens). Pressione também Shift para apenas mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construir depósito ferroviário (para compra e manutenção de trens). Pressione também Shift para apenas mostrar o custo estimado STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Construir ponto de controle na ferrovia. Ctrl+Clique para selecionar outro ponto de controle e unir com este. Pressione também Shift para apenas mostrar o custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Construir estação ferroviária. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Construir sinal na ferrovia. Ctrl+Clique para construir o sinal com estilo diferente{}Clique+Arraste para preencher a seção selecionada da ferrovia com os sinais no espaçamento escolhido. Ctrl+Clique+Arraste para colocar sinais até a próxima junção, estação ou sinal. Pressione também Shift para apenas mostrar o custo estimado @@ -2876,9 +2876,9 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Construi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construir depósito rodoviário (para compra e manutenção de veículos). Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construir depósito de bondes (para compra e manutenção de bondes). Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Construir estação de ônibus. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Construir estação de bonde de passageiros. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Construir estação de caminhão. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Construir estação de bonde de carga. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Construir estação de bondes de passageiros. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Construir estação de caminhões. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Construir estação de bondes de carga. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Ativar/Desativar estradas de sentido único STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Construir ponte rodoviária. Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Construir ponte para bondes. Pressione também Shift para apenas mostrar o custo estimado @@ -2901,12 +2901,12 @@ STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Selecion # Road vehicle station construction window STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Orientação da Estação de Ônibus STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Selecionar a orientação da estação de ônibus -STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Orientação da Estação de Caminhão -STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Selecionar orientação da estação de caminhão -STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Orientação da Estação de Bonde de Passageiros -STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Selecionar orientação da estação de bonde de passageiros -STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Orientação da Estação de Bonde de Carga -STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Selecionar orientação da estação de bonde de carga +STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Orientação da Estação de Caminhões +STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Selecionar orientação da estação de caminhões +STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Orientação da Estação de Bondes de Passageiros +STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Selecionar orientação da estação de bondes de passageiros +STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Orientação da Estação de Bondes de Carga +STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Selecionar orientação da estação de bondes de carga # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Construção de Hidrovias @@ -3146,7 +3146,7 @@ STR_LAI_TREE_NAME_CACTUS_PLANTS :Cactos STR_LAI_STATION_DESCRIPTION_RAILROAD_STATION :Estação ferroviária STR_LAI_STATION_DESCRIPTION_AIRCRAFT_HANGAR :Hangar STR_LAI_STATION_DESCRIPTION_AIRPORT :Aeroporto -STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Estação de caminhão +STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Estação de caminhões STR_LAI_STATION_DESCRIPTION_BUS_STATION :Estação de ônibus STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :Doca naval STR_LAI_STATION_DESCRIPTION_BUOY :Boia @@ -3532,7 +3532,7 @@ STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Propriedade Act STR_NEWGRF_ERROR_INVALID_ID :Tentativa de uso de ID inválido (sprite {3:NUM}) STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} contém um sprite corrompido. Todos os sprites corrompidos serão apresentados como um ponto de interrogação (?) vermelho STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contém múltiplas entradas Action 8 (sprite {3:NUM}) -STR_NEWGRF_ERROR_READ_BOUNDS :Leitura depois do fim do pseudo-sprite (sprite {3:NUM}) +STR_NEWGRF_ERROR_READ_BOUNDS :Leitura depois do final do pseudo-sprite (sprite {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF necessários estão indisponíveis (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} foi desativado por {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato de disposição de sprite inválido/desconhecido (sprite {3:NUM}) @@ -3693,7 +3693,7 @@ STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Erro # Goal Question button list ###length 18 STR_GOAL_QUESTION_BUTTON_CANCEL :Cancelar -STR_GOAL_QUESTION_BUTTON_OK :OK +STR_GOAL_QUESTION_BUTTON_OK :Confirmar STR_GOAL_QUESTION_BUTTON_NO :Não STR_GOAL_QUESTION_BUTTON_YES :Sim STR_GOAL_QUESTION_BUTTON_DECLINE :Recusar @@ -3746,9 +3746,9 @@ STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOI STR_STATION_LIST_NONE :{YELLOW}- Nenhum - STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Selecionar todas as instalações STR_STATION_LIST_CARGO_FILTER_ALL_AND_NO_RATING :Todos os tipos de carga e sem classificação -STR_STATION_LIST_CARGO_FILTER_MULTIPLE :Diversos tipos de carga +STR_STATION_LIST_CARGO_FILTER_MULTIPLE :Vários tipos de carga STR_STATION_LIST_CARGO_FILTER_NO_CARGO_TYPES :Sem tipos de carga -STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :Apenas cargas sem classificação +STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :Apenas sem classificação de carga STR_STATION_LIST_CARGO_FILTER_SELECT_ALL :Selecionar tudo e sem classificação STR_STATION_LIST_CARGO_FILTER_NO_RATING :Sem classificação de carga STR_STATION_LIST_CARGO_FILTER_EXPAND :Mostrar mais... @@ -3774,7 +3774,7 @@ STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING} STR_STATION_VIEW_GROUP :{BLACK}Agrupar por STR_STATION_VIEW_WAITING_STATION :Estação: Aguardando STR_STATION_VIEW_WAITING_AMOUNT :Quantidade: Aguardando -STR_STATION_VIEW_PLANNED_STATION :Estação: Planejada +STR_STATION_VIEW_PLANNED_STATION :Estação: Planejado STR_STATION_VIEW_PLANNED_AMOUNT :Quantidade: Planejada STR_STATION_VIEW_FROM :{YELLOW}{CARGO_SHORT} de {STATION} STR_STATION_VIEW_VIA :{YELLOW}{CARGO_SHORT} via {STATION} @@ -3859,13 +3859,13 @@ STR_FINANCES_ZERO_INCOME :{CURRENCY_LONG} STR_FINANCES_POSITIVE_INCOME :+{CURRENCY_LONG} STR_FINANCES_PROFIT :{WHITE}Lucro STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Balanço Bancário -STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Fundos Próprios +STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Recursos Próprios STR_FINANCES_LOAN_TITLE :{WHITE}Empréstimo STR_FINANCES_INTEREST_RATE :{WHITE}Juros do Empréstimo: {BLACK}{NUM}% STR_FINANCES_MAX_LOAN :{WHITE}Empréstimo Máximo: {BLACK}{CURRENCY_LONG} STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG} -STR_FINANCES_BORROW_BUTTON :{BLACK}Pedir empréstimo {CURRENCY_LONG} +STR_FINANCES_BORROW_BUTTON :{BLACK}Pedir emprestado {CURRENCY_LONG} STR_FINANCES_BORROW_TOOLTIP :{BLACK}Aumentar o empréstimo. Ctrl+Clique solicita o máximo possível STR_FINANCES_REPAY_BUTTON :{BLACK}Pagar empréstimo {CURRENCY_LONG} STR_FINANCES_REPAY_TOOLTIP :{BLACK}Pagar parte do empréstimo. Ctrl+Clique paga o máximo possível @@ -3875,18 +3875,18 @@ STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Infraest STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY} {BLACK}{COMPANY_NUM} STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Presidente) -STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inaugurado: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inauguração: {WHITE}{NUM} STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Esquema de Cores: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Veículos: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} tre{P m ns} STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} veículo{P "" s} rodoviário{P "" s} STR_COMPANY_VIEW_AIRCRAFT :{WHITE}{COMMA} aeronave{P "" s} -STR_COMPANY_VIEW_SHIPS :{WHITE}{COMMA} embarca{P ção ções} +STR_COMPANY_VIEW_SHIPS :{WHITE}{COMMA} embarcaç{P ão ões} STR_COMPANY_VIEW_VEHICLES_NONE :{WHITE}Nenhum STR_COMPANY_VIEW_COMPANY_VALUE :{GOLD}Valor da empresa: {WHITE}{CURRENCY_LONG} STR_COMPANY_VIEW_INFRASTRUCTURE :{GOLD}Infraestrutura: -STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA} se{P ção ções} de ferrovia -STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} se{P ção ções} de estrada +STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA} seç{P ão ões} de ferrovia +STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} seç{P ão ões} de estrada STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} quadrado{P "" s} com água STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} parte{P "" s} de estação STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} aeroporto{P "" s} @@ -3916,7 +3916,7 @@ STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Alterar STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nome da Empresa STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nome do Presidente -STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Inserir a quantia de dinheiro que você deseja dar +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Introduza a quantia de dinheiro que você deseja dar STR_BUY_COMPANY_MESSAGE :{WHITE}Estamos à procura de uma empresa de transportes para comprar a nossa empresa.{}{}Você deseja comprar {COMPANY} por {CURRENCY_LONG}? STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Na aquisição hostil de {COMPANY} você irá adquirir todos os ativos, liquidar todos os empréstimos e pagar o valor de 2 anos de lucros.{}{}O total estimado é de {CURRENCY_LONG}.{}{}Você deseja continuar esta aquisição hostil? @@ -3974,7 +3974,7 @@ STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Alterar ###length VEHICLE_TYPES STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} Tre{P m ns} STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} Veículo{P "" s} -STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} Embarca{P ção ções} +STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} Embarcaç{P ão ões} STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} Aeronave{P "" s} ###length VEHICLE_TYPES @@ -4085,7 +4085,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacida STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagões motorizados: {GOLD}+{POWER}{BLACK} Peso: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Adaptável para: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Todos os tipos de carga -STR_PURCHASE_INFO_NONE :Nenhum +STR_PURCHASE_INFO_NONE :Nenhuma STR_PURCHASE_INFO_ENGINES_ONLY :Apenas locomotivas STR_PURCHASE_INFO_ALL_BUT :Todas menos {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Força de Tração Máx. : {GOLD}{FORCE} @@ -4098,10 +4098,10 @@ STR_CARGO_TYPE_FILTER_FREIGHT :Carga STR_CARGO_TYPE_FILTER_NONE :Nenhum ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista de seleção de trens. Clique em um trem para informações. Ctrl+Clique para mostrar/ocultar esse tipo de veículo -STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Lista de seleção de veículos rodoviários. Clique em um veículo para informações. Ctrl+Clique para mostrar/ocultar esse tipo de veículo -STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Lista de seleção de embarcações. Clique em uma embarcação para informações. Ctrl+Clique para mostrar/ocultar esse tipo de embarcação -STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lista de seleção de aeronaves. Clique em uma aeronave para informações. Ctrl+Clique para mostrar/ocultar esse tipo de aeronave +STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista de seleção de trens. Clique em um trem para informações. Ctrl+Clique para mostrar/ocultar este tipo de veículo +STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Lista de seleção de veículos rodoviários. Clique em um veículo para informações. Ctrl+Clique para mostrar/ocultar este tipo de veículo +STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Lista de seleção de embarcações. Clique em uma embarcação para informações. Ctrl+Clique para mostrar/ocultar este tipo de embarcação +STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lista de seleção de aeronaves. Clique em uma aeronave para informações. Ctrl+Clique para mostrar/ocultar este tipo de aeronave ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Comprar Veículo @@ -4113,7 +4113,7 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Comprar STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Adaptar Veículo STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Adaptar Veículo STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Adaptar Embarcação -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Adaptar Aeronaves +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Adaptar Aeronave ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar o veículo ferroviário selecionado. Pressione também Shift para apenas mostrar o custo estimado @@ -4315,7 +4315,7 @@ STR_REPLACE_HELP_RAILTYPE :{BLACK}Selecion STR_REPLACE_HELP_ROADTYPE :{BLACK}Selecionar o tipo de estrada para o qual você deseja substituir os veículos ###next-name-looks-similar -STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Mostrar qual locomotiva que substituirá a que está selecionada à esquerda, se houver selecionada +STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Mostrar qual locomotiva substituirá a que está selecionada à esquerda, se houver selecionada STR_REPLACE_RAIL_VEHICLES :Trens STR_REPLACE_ELRAIL_VEHICLES :Locomotivas Elétricas STR_REPLACE_MONORAIL_VEHICLES :Monotrilhos @@ -4326,7 +4326,7 @@ STR_REPLACE_TRAM_VEHICLES :Bondes STR_REPLACE_REMOVE_WAGON :{BLACK}Remoção de vagões ({STRING}): {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}A substituição automática irá manter o trem com o mesmo comprimento removendo vagões (começando pela frente), se a substituição da locomotiva aumentar o comprimento do trem -STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl+Clique para aplicar também aos subgrupos +STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl+Clique para aplicar também aos subgrupos # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} @@ -4345,7 +4345,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar a ###length VEHICLE_TYPES STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Comprar uma cópia do trem incluindo todos os vagões. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Comprar uma cópia do veículo rodoviário. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Comprar uma cópia do veículo. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Comprar uma cópia da embarcação. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Comprar uma cópia da aeronave. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado @@ -4380,7 +4380,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Estado a # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Carregando / descarregando -STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Saindo +STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Partindo STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Aguardando para desagrupar STR_VEHICLE_STATUS_CRASHED :{RED}Acidentado! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Quebrado @@ -4432,7 +4432,7 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Peso: {L STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Velocidade máx: {LTBLUE}{VELOCITY} {BLACK}Força de Tração máx.: {LTBLUE}{FORCE} STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucro neste ano: {LTBLUE}{CURRENCY_LONG} (ano passado: {CURRENCY_LONG}) -STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Lucro neste ano: {LTBLUE}{CURRENCY_LONG} (último ano: {CURRENCY_LONG}) {BLACK}Desempenho min.: {LTBLUE}{POWER_TO_WEIGHT} +STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Lucro neste ano: {LTBLUE}{CURRENCY_LONG} (último ano: {CURRENCY_LONG}) {BLACK}Desempenho mín.: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Lucro neste período: {LTBLUE}{CURRENCY_LONG} (último período: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Lucro neste período: {LTBLUE}{CURRENCY_LONG} (último período: {CURRENCY_LONG}) {BLACK}Desempenho mín.: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Confiabilidade: {LTBLUE}{COMMA}% {BLACK}Quebras desde a última manutenção: {LTBLUE}{COMMA} @@ -4494,7 +4494,7 @@ STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Capacida # Vehicle refit STR_REFIT_CAPTION :{WHITE}{VEHICLE} (Adaptar) -STR_REFIT_TITLE :{GOLD}Selecionar tipo de carga para transportar: +STR_REFIT_TITLE :{GOLD}Selecionar tipo de carga a ser transportada: STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}{}{BLACK}Custo de adaptação: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}{}{BLACK}Receita com a adaptação: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Custo de adaptação: {RED}{CURRENCY_LONG} @@ -4522,7 +4522,7 @@ STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Adaptar # Order view STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (Ordens) STR_ORDERS_TIMETABLE_VIEW :{BLACK}Horários -STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Mudar para a visão de horários +STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Mudar para a visualização de horários STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de ordens - Clique em uma ordem para selecioná-la. Ctrl+Clique mostra o destino da ordem STR_ORDER_INDEX :{COMMA}:{NBSP} @@ -4534,7 +4534,7 @@ STR_ORDERS_END_OF_SHARED_ORDERS :- - Fim das Ord # Order bottom buttons STR_ORDER_NON_STOP :{BLACK}Sem parar STR_ORDER_GO_TO :Ir para -STR_ORDER_GO_NON_STOP_TO :Ir sem parar para +STR_ORDER_GO_NON_STOP_TO :Ir, sem parar, para STR_ORDER_GO_VIA :Ir via STR_ORDER_GO_NON_STOP_VIA :Ir sem parar via STR_ORDER_TOOLTIP_NON_STOP :{BLACK}Alterar o modo de parada da ordem selecionada @@ -4561,7 +4561,7 @@ STR_ORDER_DROP_REFIT_AUTO :Carga fixa STR_ORDER_DROP_REFIT_AUTO_ANY :Carga disponível STR_ORDER_DROP_GO_ALWAYS_DEPOT :Ir sempre -STR_ORDER_DROP_SERVICE_DEPOT :Manutenção, se necessária +STR_ORDER_DROP_SERVICE_DEPOT :Manutenção se necessária STR_ORDER_DROP_HALT_DEPOT :Parar STR_ORDER_DROP_UNBUNCH :Desagrupar @@ -4589,11 +4589,11 @@ STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Confiabilidade STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Como comparar os dados do veículo com o valor introduzido STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :é igual a -STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :é não igual a +STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :é diferente de STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :é menor que -STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :é menor ou igual a +STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :é menor que ou igual a STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :é maior que -STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :é maior ou igual a +STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :é maior que ou igual a STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :é verdadeiro STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :é falso @@ -4620,13 +4620,13 @@ STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Mostrar # String parts to build the order string STR_ORDER_GO_TO_WAYPOINT :Ir via {WAYPOINT} -STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Ir sem parar via {WAYPOINT} +STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Ir, sem parar, via {WAYPOINT} STR_ORDER_SERVICE_AT :Manutenção em -STR_ORDER_SERVICE_NON_STOP_AT :Manutenção sem parar em +STR_ORDER_SERVICE_NON_STOP_AT :Manutenção, sem parar, em STR_ORDER_NEAREST_DEPOT :o mais próximo -STR_ORDER_NEAREST_HANGAR :o Hangar mais próximo +STR_ORDER_NEAREST_HANGAR :o hangar mais próximo ###length 3 STR_ORDER_TRAIN_DEPOT :Depósito Ferroviário STR_ORDER_ROAD_VEHICLE_DEPOT :Depósito Rodoviário @@ -4681,9 +4681,9 @@ STR_ORDER_AUTO_REFIT_ANY :carga disponív ###length 3 STR_ORDER_STOP_LOCATION_NEAR_END :[início] STR_ORDER_STOP_LOCATION_MIDDLE :[meio] -STR_ORDER_STOP_LOCATION_FAR_END :[fim] +STR_ORDER_STOP_LOCATION_FAR_END :[final] -STR_ORDER_OUT_OF_RANGE :{RED} (Próximo destino está fora da autonomia) +STR_ORDER_OUT_OF_RANGE :{RED} (Próximo destino está além da autonomia) STR_ORDER_CONDITIONAL_UNCONDITIONAL :Saltar para a ordem {COMMA} STR_ORDER_CONDITIONAL_NUM :Saltar para a ordem {COMMA} quando {STRING} {STRING} {COMMA} @@ -4706,9 +4706,9 @@ STR_TIMETABLE_TRAVEL_FOR :Viajar por {STR STR_TIMETABLE_TRAVEL_FOR_SPEED :Viajar por {STRING} no máximo a {VELOCITY} STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Viajar (por {STRING}, não programado) STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Viajar (por {STRING}, não programado) no máximo a {VELOCITY} -STR_TIMETABLE_STAY_FOR_ESTIMATED :(ficar por {STRING}, não programado) +STR_TIMETABLE_STAY_FOR_ESTIMATED :(aguardar por {STRING}, não programado) STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(viajar por {STRING}, não programado) -STR_TIMETABLE_STAY_FOR :e ficar por {STRING} +STR_TIMETABLE_STAY_FOR :e aguardar por {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :e viajar por {STRING} STR_TIMETABLE_TOTAL_TIME :{BLACK}Este horário levará {STRING} para completar @@ -4718,7 +4718,7 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Este ve STR_TIMETABLE_STATUS_LATE :{BLACK}Este veículo está atualmente circulando {STRING} atrasado STR_TIMETABLE_STATUS_EARLY :{BLACK}Este veículo está atualmente circulando {STRING} adiantado STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Este horário ainda não começou -STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Este horário irá iniciar às {STRING} +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Este horário irá iniciar em {STRING} STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Este horário irá iniciar em {COMMA} segundos STR_TIMETABLE_START :{BLACK}Iniciar Horário @@ -4730,16 +4730,16 @@ STR_TIMETABLE_CHANGE_TIME :{BLACK}Alterar STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Alterar o período de tempo que a ordem selecionada deve durar. Ctrl+Clique define o tempo para todas as ordens STR_TIMETABLE_CLEAR_TIME :{BLACK}Apagar Tempo -STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Apagar o período de tempo da ordem selecionada. Ctrl+Clique limpa o tempo de todas as ordens +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Apagar o período de tempo da ordem selecionada. Ctrl+Clique apaga o tempo de todas as ordens STR_TIMETABLE_CHANGE_SPEED :{BLACK}Alterar limite de velocidade STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Alterar a velocidade máxima de viagem da ordem selecionada. Ctrl+Clique define a velocidade para todas as ordens STR_TIMETABLE_CLEAR_SPEED :{BLACK}Remover limite de velocidade -STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Apagar a velocidade máxima de viagem da ordem selecionada. Ctrl+Clique remove as velocidades para todas as ordens +STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Apagar a velocidade máxima de viagem da ordem selecionada. Ctrl+Clique apaga as velocidades para todas as ordens STR_TIMETABLE_RESET_LATENESS :{BLACK}Reiniciar o Contador de Atrasos -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reiniciar o contador de atrasos, assim o veículo ficará no horário. Ctrl+Clique para reiniciar todo o grupo, de modo que o último veículo ficará pontual e todos os outros estarão antecipados +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reiniciar o contador de atrasos, assim o veículo ficará no horário. Ctrl+Clique para reiniciar todo o grupo, de modo que o veículo mais atrasado ficará pontual e todos os outros estarão antecipados STR_TIMETABLE_AUTOFILL :{BLACK}Preencher automaticamente STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Preencher o horário automaticamente com os valores da próxima viagem. Ctrl+Clique para tentar manter os tempos de espera @@ -4771,19 +4771,19 @@ STR_AI_DEBUG_SETTINGS :{BLACK}Configur STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Alterar as configurações do script STR_AI_DEBUG_RELOAD :{BLACK}Recarregar IA STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Interromper a IA, recarregar o script e reiniciar a IA -STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Ativar/Desativar pausa quando uma mensagem de registo da IA corresponder à sequência de pausa +STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Ativar/Desativar pausa quando uma mensagem de registro da IA corresponder à sequência de pausa STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Parar em: STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Parar em -STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Quando uma mensagem de registo da IA for igual a esta sequência, o jogo é pausado +STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Quando uma mensagem de registro da IA for igual a esta sequência, o jogo é pausado STR_AI_DEBUG_MATCH_CASE :{BLACK}Diferenciar maiúsculas/minúsculas STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Ativar correspondência de maiúsculas/minúsculas na comparação das mensagens de registro da IA com a sequência de parada STR_AI_DEBUG_CONTINUE :{BLACK}Continuar STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Sair da pausa e continuar a IA -STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Ver saída de depuração desta IA. Ctrl+Clique para abrir em uma nova janela +STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Mostrar saída de depuração desta IA. Ctrl+Clique para abrir em uma nova janela STR_AI_GAME_SCRIPT :{BLACK}Script de jogo -STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Verifique o registo do Script de Jogo. Ctrl+Clique para abrir em uma nova janela +STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Verificar o registro do Script de Jogo. Ctrl+Clique para abrir em uma nova janela -STR_ERROR_AI_NO_AI_FOUND :Não foi encontrada IA adequada para carregar.{}Esta IA é um script vazio e não fará nada.{}Você pode obter várias IA usando o sistema de 'Conteúdo Online' +STR_ERROR_AI_NO_AI_FOUND :Não foi encontrada IA adequada para carregar.{}Esta IA é um pacote vazio e não fará nada.{}Você pode obter várias IA's usando o sistema de 'Conteúdo Online' STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Um dos scripts em execução travou. Favor relatar isto ao autor do script com uma captura de tela da Janela de Depuração de IA/Script de Jogo STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}A janela de Depuração de IA/Script de Jogo está disponível somente para o servidor @@ -4855,7 +4855,7 @@ STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING} STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Retornar no histórico de navegação STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Avançar no histórico de navegação STR_TEXTFILE_WRAP_TEXT :{WHITE}Quebrar linhas do texto -STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Ajustar o comprimento das linhas para o texto preencher a janela e, assim, não precisar rolar o conteúdo +STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Ajustar o comprimento das linhas para o texto preencher a janela e não precisar rolar o conteúdo STR_TEXTFILE_VIEW_README :{BLACK}Leia-me STR_TEXTFILE_VIEW_README_TOOLTIP :Ver o arquivo Leia-me para este conteúdo STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Registro de modificações @@ -4885,12 +4885,12 @@ STR_INCOME_FLOAT_COST_SMALL :{TINY_FONT}{RED STR_INCOME_FLOAT_COST :{RED}Custo: {CURRENCY_LONG} STR_INCOME_FLOAT_INCOME_SMALL :{TINY_FONT}{GREEN}Receita: {CURRENCY_LONG} STR_INCOME_FLOAT_INCOME :{GREEN}Receita: {CURRENCY_LONG} -STR_FEEDER_TINY :{TINY_FONT}{YELLOW}Transferir: {CURRENCY_LONG} -STR_FEEDER :{YELLOW}Transferir: {CURRENCY_LONG} -STR_FEEDER_INCOME_TINY :{TINY_FONT}{YELLOW}Transferir: {CURRENCY_LONG}{WHITE} / {GREEN}Receita: {CURRENCY_LONG} -STR_FEEDER_INCOME :{YELLOW}Transferir: {CURRENCY_LONG}{WHITE} / {GREEN}Receita: {CURRENCY_LONG} -STR_FEEDER_COST_TINY :{TINY_FONT}{YELLOW}Transferir: {CURRENCY_LONG}{WHITE} / {RED}Custo: {CURRENCY_LONG} -STR_FEEDER_COST :{YELLOW}Transferir: {CURRENCY_LONG}{WHITE} / {RED}Custo: {CURRENCY_LONG} +STR_FEEDER_TINY :{TINY_FONT}{YELLOW}Transferência: {CURRENCY_LONG} +STR_FEEDER :{YELLOW}Transferência: {CURRENCY_LONG} +STR_FEEDER_INCOME_TINY :{TINY_FONT}{YELLOW}Transferência: {CURRENCY_LONG}{WHITE} / {GREEN}Receita: {CURRENCY_LONG} +STR_FEEDER_INCOME :{YELLOW}Transferência: {CURRENCY_LONG}{WHITE} / {GREEN}Receita: {CURRENCY_LONG} +STR_FEEDER_COST_TINY :{TINY_FONT}{YELLOW}Transferência: {CURRENCY_LONG}{WHITE} / {RED}Custo: {CURRENCY_LONG} +STR_FEEDER_COST :{YELLOW}Transferência: {CURRENCY_LONG}{WHITE} / {RED}Custo: {CURRENCY_LONG} STR_MESSAGE_ESTIMATED_COST :{WHITE}Custo Estimado: {CURRENCY_LONG} STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Receita Estimada: {CURRENCY_LONG} @@ -4907,7 +4907,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Jogo salvo foi STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Arquivo não legível STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Arquivo não gravável STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Verificação de integridade de dados falhou -STR_GAME_SAVELOAD_ERROR_PATCHPACK :Jogo salvo é feito com uma versão modificada +STR_GAME_SAVELOAD_ERROR_PATCHPACK :Jogo salvo foi feito com uma versão modificada STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Jogo foi salvo em uma versão sem suporte a bondes. Todos os bondes foram removidos @@ -4926,7 +4926,7 @@ STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}... não STR_ERROR_HEIGHTMAP_TOO_LARGE :{WHITE}... imagem é muito grande STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}Aviso de redimensionamento -STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Redimensionar muito o mapa original não é recomendado. Continuar com a geração? +STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Redimensionar demais o mapa original não é recomendado. Continuar com a geração? # Soundset messages STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Somente um conjunto de sons de reserva foi encontrado. Se você quiser sons, instale um conjunto usando o sistema de 'Conteúdo Online' @@ -4936,7 +4936,7 @@ STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Captura STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}A captura de tela terá uma resolução de {COMMA}x{COMMA} pixels. Essa captura pode demorar. Deseja continuar? STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Mapa topográfico gravado como '{STRING}' com sucesso. O pico mais alto tem {NUM} -STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Captura de tela gravada com sucesso como '{STRING}' +STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Captura de tela gravada como '{STRING}' com sucesso STR_ERROR_SCREENSHOT_FAILED :{WHITE}A captura de tela falhou! # Error message titles @@ -4946,7 +4946,7 @@ STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY :{YELLOW}Mensage # Generic construction errors STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Fora dos limites do mapa STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Muito perto da borda do mapa -STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Não há dinheiro - requer {CURRENCY_LONG} +STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Dinheiro insuficiente - é necessário {CURRENCY_LONG} STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}É necessário terreno plano STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Terreno inclinado na direção errada STR_ERROR_CAN_T_DO_THIS :{WHITE}Não é possível fazer isto... @@ -4957,8 +4957,8 @@ STR_ERROR_ALREADY_BUILT :{WHITE}... já STR_ERROR_OWNED_BY :{WHITE}... propriedade de {STRING} STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... área é propriedade de outra empresa STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... limite de paisagismo atingido -STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... limite de remoção de quadrado atingido -STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... limite de plantação de árvore atingido +STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... limite de limpeza de quadrados atingido +STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... limite de plantação de árvores atingido STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}Nome deve ser único STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{1:STRING} no caminho STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Não permitido enquanto pausado @@ -4973,7 +4973,7 @@ STR_ERROR_BRIBE_FAILED :{WHITE}A sua te STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}Não é possível elevar terreno aqui... STR_ERROR_CAN_T_LOWER_LAND_HERE :{WHITE}Não é possível abaixar terreno aqui... STR_ERROR_CAN_T_LEVEL_LAND_HERE :{WHITE}Não é possível nivelar o terreno aqui... -STR_ERROR_EXCAVATION_WOULD_DAMAGE :{WHITE}A escavação estragaria o túnel +STR_ERROR_EXCAVATION_WOULD_DAMAGE :{WHITE}A escavação danificaria o túnel STR_ERROR_ALREADY_AT_SEA_LEVEL :{WHITE}... já está ao nível do mar STR_ERROR_TOO_HIGH :{WHITE}... muito alto STR_ERROR_ALREADY_LEVELLED :{WHITE}... já está plano @@ -5034,9 +5034,9 @@ STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Alterar # Station construction related errors STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Não é possível construir estação ferroviária aqui... STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Não é possível construir estação de ônibus... -STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Não é possível construir estação de caminhão... -STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Não é possível construir estação de bonde de passageiros... -STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Não é possível construir estação de bonde de carga... +STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Não é possível construir estação de caminhões... +STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Não é possível construir estação de bondes de passageiros... +STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Não é possível construir estação de bondes de carga... STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Não é possível construir doca aqui... STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Não é possível construir aeroporto aqui... @@ -5056,21 +5056,21 @@ STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... esta # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Não é possível remover parte da estação... -STR_ERROR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Precisa remover a estação ferroviária primeiro +STR_ERROR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}É necessário remover a estação ferroviária primeiro STR_ERROR_CAN_T_REMOVE_BUS_STATION :{WHITE}Não é possível remover estação de ônibus... -STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Não é possível remover estação de caminhão... -STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Não é possível remover estação de bonde de passageiros... -STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Não é possível remover estação de bonde de carga... -STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Precisa remover o ponto de parada na estrada primeiro +STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Não é possível remover estação de caminhões... +STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Não é possível remover estação de bondes de passageiros... +STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Não é possível remover estação de bondes de carga... +STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}É necessário remover o ponto de parada rodoviário primeiro STR_ERROR_THERE_IS_NO_STATION :{WHITE}...não há estação aqui -STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}Precisa demolir a estação ferroviária primeiro -STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Precisa demolir a estação de ônibus primeiro -STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST :{WHITE}Precisa demolir a estação de caminhão primeiro -STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST :{WHITE}Precisa demolir a estação de bonde de passageiros primeiro -STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST :{WHITE}Precisa demolir a estação de bonde primeiro -STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Precisa demolir a doca primeiro -STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Precisa demolir o aeroporto primeiro +STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}É necessário demolir a estação ferroviária primeiro +STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}É necessário demolir a estação de ônibus primeiro +STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST :{WHITE}É necessário demolir a estação de caminhões primeiro +STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST :{WHITE}É necessário demolir a estação de bondes de passageiros primeiro +STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST :{WHITE}É necessário demolir a estação de bondes de carga primeiro +STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}É necessário demolir a doca primeiro +STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}É necessário demolir o aeroporto primeiro # Waypoint related errors STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Unir mais de um ponto de controle existente @@ -5080,8 +5080,8 @@ STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Não é STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Não é possível colocar boia aqui... STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Não é possível alterar o nome do ponto de controle... -STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Não é possível remover ponto de controle de trem aqui... -STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Precisa remover o ponto de controle de trem primeiro +STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Não é possível remover ponto de controle de trem daqui... +STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}É necessário remover o ponto de controle ferroviário primeiro STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... boia no caminho STR_ERROR_BUOY_IS_IN_USE :{WHITE}... boia está em uso por outra empresa! @@ -5098,7 +5098,7 @@ STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... deve STR_ERROR_SHIP_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... deve estar parado em um depósito STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}... deve estar parado em um hangar -STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Os trens só podem ser modificados quando parados em um depósito +STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Trens só podem ser modificados quando estão parados em um depósito STR_ERROR_TRAIN_TOO_LONG :{WHITE}Trem muito longo STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Não é possível inverter a direção do veículo... STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}... composto por múltiplas unidades @@ -5112,7 +5112,7 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Não é STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Tipo de depósito errado # Depot unbunching related errors -STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... só pode ter uma ordem de desagrupar +STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... pode ter somente uma ordem de desagrupar STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... não é possível usar ordens de carga completa quando o veículo tem uma ordem de desagrupar STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... não é possível desagrupar um veículo com uma ordem de carga completa STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... não é possível usar ordens condicionais quando um veículo tem uma ordem de desagrupar @@ -5127,24 +5127,24 @@ STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}O novo v # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Combinação de linhas impossível -STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Precisa remover os sinais primeiro +STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}É necessário remover os sinais primeiro STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Ferrovia não adequada -STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Precisa remover a ferrovia primeiro +STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}É necessário remover a ferrovia primeiro STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Estrada de sentido único ou bloqueada STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Passagens de nível não são permitidas para este tipo de linha -STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Passagens de nível não permitidas para este tipo de estrada +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Passagens de nível não são permitidas para este tipo de estrada STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Não é possível construir sinais aqui... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Não é possível construir ferrovia aqui... STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Não é possível remover ferrovia daqui... STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Não é possível remover sinais daqui... -STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Não é possível converter os sinais aqui... +STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Não é possível converter os sinais daqui... STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}...não há ferrovia STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}...não há sinais -STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Não é possível converter o tipo de trilho aqui... +STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Não é possível converter o tipo de trilho daqui... # Road construction errors -STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Precisa remover a estrada primeiro +STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}É necessário remover a estrada primeiro STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... estradas de sentido único não podem ter junções STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Não é possível construir estrada aqui... STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Não é possível construir linha de bonde aqui... @@ -5152,8 +5152,8 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Não é STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Não é possível remover linha de bonde daqui... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... não há estrada STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... não há linha de bonde -STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Não é possível converter o tipo de estrada aqui... -STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Não é possível converter o tipo de linha de bonde aqui... +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Não é possível converter o tipo de estrada daqui... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Não é possível converter o tipo de linha de bonde daqui... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Estrada não adequada STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Linha de bonde não adequada @@ -5166,7 +5166,7 @@ STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE}... não STR_ERROR_CAN_T_BUILD_ON_SEA :{WHITE}... não é possível construir em mar aberto STR_ERROR_CAN_T_BUILD_ON_CANAL :{WHITE}... não é possível construir em um canal STR_ERROR_CAN_T_BUILD_ON_RIVER :{WHITE}... não é possível construir em um rio -STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Precisa demolir o canal primeiro +STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}É necessário demolir o canal primeiro STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Não é possível construir aqueduto aqui... # Tree related errors @@ -5176,12 +5176,12 @@ STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}Não é # Bridge related errors STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Não é possível construir ponte aqui... -STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Precisa demolir a ponte primeiro +STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}É necessário demolir a ponte primeiro STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Não é possível iniciar e terminar no mesmo ponto STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Extremidades da ponte não estão no mesmo nível STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}A ponte é muito baixa para este terreno STR_ERROR_BRIDGE_TOO_HIGH_FOR_TERRAIN :{WHITE}A ponte é muito alta para este terreno. -STR_ERROR_START_AND_END_MUST_BE_IN :{WHITE}Inicio e fim devem estar alinhados +STR_ERROR_START_AND_END_MUST_BE_IN :{WHITE}Início e final devem estar alinhados STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}... os extremos da ponte devem estar sobre a terra STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... ponte muito longa STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :{WHITE}Ponte terminaria fora do mapa @@ -5189,7 +5189,7 @@ STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :{WHITE}Ponte te # Tunnel related errors STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Não é possível construir túnel aqui... STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}O local é inadequado para a entrada do túnel -STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Precisa demolir o túnel primeiro +STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}É necessário demolir o túnel primeiro STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Há outro túnel no caminho STR_ERROR_TUNNEL_THROUGH_MAP_BORDER :{WHITE}O túnel terminaria fora do mapa STR_ERROR_UNABLE_TO_EXCAVATE_LAND :{WHITE}Não é possível escavar o terreno para o outro lado do túnel @@ -5207,11 +5207,11 @@ STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}... limi # Group related errors STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Não é possível criar grupo... STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Não é possível excluir este grupo... -STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Não é possível renomear grupo... -STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Não é possível definir grupo ascendente... +STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Não é possível renomear o grupo... +STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Não é possível definir grupo principal... STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... não são permitidos ciclos na hierarquia de grupos -STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Não é possível remover todos os veículos desse grupo... -STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Não é possível adicionar o veículo a esse grupo... +STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Não é possível remover todos os veículos deste grupo... +STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Não é possível adicionar o veículo a este grupo... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Não é possível adicionar veículos compartilhados ao grupo... # Generic vehicle errors @@ -5230,19 +5230,19 @@ STR_ERROR_AIRCRAFT_NOT_AVAILABLE :{WHITE}Aeronave ###length VEHICLE_TYPES STR_ERROR_CAN_T_REFIT_TRAIN :{WHITE}Não é possível adaptar o trem... -STR_ERROR_CAN_T_REFIT_ROAD_VEHICLE :{WHITE}Não é possível adaptar o veículo rodoviário... +STR_ERROR_CAN_T_REFIT_ROAD_VEHICLE :{WHITE}Não é possível adaptar o veículo... STR_ERROR_CAN_T_REFIT_SHIP :{WHITE}Não é possível adaptar a embarcação... STR_ERROR_CAN_T_REFIT_AIRCRAFT :{WHITE}Não é possível adaptar a aeronave... ###length VEHICLE_TYPES STR_ERROR_CAN_T_RENAME_TRAIN :{WHITE}Não é possível renomear o trem... -STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Não é possível renomear o veículo rodoviário... +STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Não é possível renomear o veículo... STR_ERROR_CAN_T_RENAME_SHIP :{WHITE}Não é possível renomear a embarcação... STR_ERROR_CAN_T_RENAME_AIRCRAFT :{WHITE}Não é possível renomear a aeronave... ###length VEHICLE_TYPES STR_ERROR_CAN_T_STOP_START_TRAIN :{WHITE}Não é possível parar/iniciar trem... -STR_ERROR_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}Não é possível parar/iniciar veículo rodoviário... +STR_ERROR_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}Não é possível parar/iniciar veículo... STR_ERROR_CAN_T_STOP_START_SHIP :{WHITE}Não é possível parar/iniciar embarcação... STR_ERROR_CAN_T_STOP_START_AIRCRAFT :{WHITE}Não é possível parar/iniciar aeronave... @@ -5278,7 +5278,7 @@ STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... o ve STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... nem todos os veículos são idênticos STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Não haverá veículos disponíveis -STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Mudar a sua configuração NewGRF +STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Altere a sua configuração NewGRF STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Não existem veículos disponíveis ainda STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Inicie um novo jogo depois de {DATE_SHORT} ou utilize um NewGRF que forneça veículos iniciais @@ -5301,7 +5301,7 @@ STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Não é STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Não é possível saltar a ordem atual... STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Não é possível saltar a ordem selecionada... STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... veiculo não pode ir a todas as estações -STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... veiculo não pode ir a essa estação +STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... veiculo não pode ir à essa estação STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... um veículo compartilhando esta ordem não pode ir à essa estação STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... nem todos os veículos possuem as mesmas ordens STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... nem todos os veículos estão compartilhando ordens @@ -5315,7 +5315,7 @@ STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... aero # Extra messages which go on the third line of errors, explaining why orders failed STR_ERROR_NO_RAIL_STATION :{WHITE}Não existe uma estação ferroviária STR_ERROR_NO_BUS_STATION :{WHITE}Não existe uma estação de ônibus -STR_ERROR_NO_TRUCK_STATION :{WHITE}Não existe uma estação de caminhão +STR_ERROR_NO_TRUCK_STATION :{WHITE}Não existe uma estação de caminhões STR_ERROR_NO_DOCK :{WHITE}Não existe uma doca STR_ERROR_NO_AIRPORT :{WHITE}Não existe um aeroporto/heliporto STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Não existem paradas com tipo de estrada compatível @@ -5353,8 +5353,8 @@ STR_BASESOUNDS_WIN_DESCRIPTION :Sons Originais STR_BASESOUNDS_NONE_DESCRIPTION :Um conjunto de sons vazio. STR_BASEMUSIC_WIN_DESCRIPTION :Música Original do Transport Tycoon Deluxe, edição Windows. STR_BASEMUSIC_DOS_DESCRIPTION :Música Original do Transport Tycoon Deluxe, edição DOS. -STR_BASEMUSIC_TTO_DESCRIPTION :Música Original do Transport Tycoon, edição (Original/Editor de Mundo) DOS. -STR_BASEMUSIC_NONE_DESCRIPTION :Um conjunto de música vazio. +STR_BASEMUSIC_TTO_DESCRIPTION :Música Original do Transport Tycoon, edição (Original/Editor Mundial) DOS. +STR_BASEMUSIC_NONE_DESCRIPTION :Um conjunto de músicas vazio. ##id 0x2000 # Town building names @@ -5388,7 +5388,7 @@ STR_TOWN_BUILDING_NAME_HOUSES_2 :Casas STR_TOWN_BUILDING_NAME_CINEMA_1 :Cinema STR_TOWN_BUILDING_NAME_SHOPPING_MALL_1 :Centro comercial STR_TOWN_BUILDING_NAME_IGLOO_1 :Iglu -STR_TOWN_BUILDING_NAME_TEPEES_1 :Ocas +STR_TOWN_BUILDING_NAME_TEPEES_1 :Tendas STR_TOWN_BUILDING_NAME_TEAPOT_HOUSE_1 :Casa-bule STR_TOWN_BUILDING_NAME_PIGGY_BANK_1 :Cofrinho @@ -5399,7 +5399,7 @@ STR_INDUSTRY_NAME_POWER_STATION :{G=f}Usina de E STR_INDUSTRY_NAME_SAWMILL :{G=f}Serraria STR_INDUSTRY_NAME_FOREST :{G=f}Floresta STR_INDUSTRY_NAME_OIL_REFINERY :{G=f}Refinaria de Petróleo -STR_INDUSTRY_NAME_OIL_RIG :{G=f}Plataforma Petrolífera +STR_INDUSTRY_NAME_OIL_RIG :{G=f}Plataforma de Petróleo STR_INDUSTRY_NAME_FACTORY :{G=f}Fábrica STR_INDUSTRY_NAME_PRINTING_WORKS :{G=f}Gráfica STR_INDUSTRY_NAME_STEEL_MILL :{G=f}Siderúrgica @@ -5407,7 +5407,7 @@ STR_INDUSTRY_NAME_FARM :{G=f}Fazenda STR_INDUSTRY_NAME_COPPER_ORE_MINE :{G=f}Mina de Cobre STR_INDUSTRY_NAME_OIL_WELLS :{G=m}Poços de Petróleo STR_INDUSTRY_NAME_BANK :{G=m}Banco -STR_INDUSTRY_NAME_FOOD_PROCESSING_PLANT :{G=f}Indústria Alimentícia +STR_INDUSTRY_NAME_FOOD_PROCESSING_PLANT :{G=f}Indústria de Alimentos STR_INDUSTRY_NAME_PAPER_MILL :{G=f}Fábrica de Papel STR_INDUSTRY_NAME_GOLD_MINE :{G=f}Mina de Ouro STR_INDUSTRY_NAME_BANK_TROPIC_ARCTIC :{G=m}Banco @@ -5471,7 +5471,7 @@ STR_SV_STNAME_UPPER :{STRING} de Cim STR_SV_STNAME_LOWER :{STRING} de Baixo STR_SV_STNAME_HELIPORT :Heliporto de {STRING} STR_SV_STNAME_FOREST :Floresta de {STRING} -STR_SV_STNAME_FALLBACK :Estação de {STRING} #{NUM} +STR_SV_STNAME_FALLBACK :{STRING} - Estação #{NUM} ############ end of savegame specific region! @@ -5520,7 +5520,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FOOD_VAN :Vagão de Alime STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PAPER_TRUCK :Vagão de Papel STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COPPER_ORE_HOPPER :Vagão de Minério de Cobre STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_WATER_TANKER :Vagão de Água -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FRUIT_TRUCK :Vagão de Fruta +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FRUIT_TRUCK :Vagão de Frutas STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_RUBBER_TRUCK :Vagão de Borracha STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_SUGAR_TRUCK :Vagão de Açúcar STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COTTON_CANDY_HOPPER :Vagão de Algodão Doce @@ -5550,7 +5550,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FOOD_VAN :Vagão de Alime STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PAPER_TRUCK :Vagão de Papel STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COPPER_ORE_HOPPER :Vagão de Minério de Cobre STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_WATER_TANKER :Vagão de Água -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FRUIT_TRUCK :Vagão de Fruta +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FRUIT_TRUCK :Vagão de Frutas STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_RUBBER_TRUCK :Vagão de Borracha STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_SUGAR_TRUCK :Vagão de Açúcar STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COTTON_CANDY_HOPPER :Vagão de Algodão Doce @@ -5560,7 +5560,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COLA_TANKER :Vagão de Xarop STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_CANDY_VAN :Vagão de Doces STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :Vagão de Brinquedos STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BATTERY_TRUCK :Vagão de Pilhas -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FIZZY_DRINK_TRUCK :Vagão de Refrigerante +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FIZZY_DRINK_TRUCK :Vagão de Refrigerantes STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PLASTIC_TRUCK :Vagão de Plástico STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (Elétrico) STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (Elétrico) @@ -5582,7 +5582,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FOOD_VAN :Vagão de Alime STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PAPER_TRUCK :Vagão de Papel STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COPPER_ORE_HOPPER :Vagão de Minério de Cobre STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WATER_TANKER :Vagão de Água -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FRUIT_TRUCK :Vagão de Fruta +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FRUIT_TRUCK :Vagão de Frutas STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_RUBBER_TRUCK :Vagão de Borracha STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_SUGAR_TRUCK :Vagão de Açúcar STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COTTON_CANDY_HOPPER :Vagão de Algodão Doce @@ -5591,8 +5591,8 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BUBBLE_VAN :Vagão de Bolha STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COLA_TANKER :Vagão de Xarope de Cola STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_CANDY_VAN :Vagão de Doces STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOY_VAN :Vagão de Brinquedos -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BATTERY_TRUCK :Vagão de Pilha -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FIZZY_DRINK_TRUCK :Vagão de Refrigerante +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BATTERY_TRUCK :Vagão de Pilhas +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FIZZY_DRINK_TRUCK :Vagão de Refrigerantes STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PLASTIC_TRUCK :Vagão de Plástico ###length 88 @@ -5615,9 +5615,9 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_MAIL_TRUCK :Caminhão de Co STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_OIL_TANKER :Caminhão de Petróleo Witcombe STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_OIL_TANKER :Caminhão de Petróleo Foster STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_OIL_TANKER :Caminhão de Petróleo Perry -STR_VEHICLE_NAME_ROAD_VEHICLE_TALBOTT_LIVESTOCK_VAN :Caminhão de Gado Talbott -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_LIVESTOCK_VAN :Caminhão de Gado Uhl -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_LIVESTOCK_VAN :Caminhão de Gado Foster +STR_VEHICLE_NAME_ROAD_VEHICLE_TALBOTT_LIVESTOCK_VAN :Furgão de Gado Talbott +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_LIVESTOCK_VAN :Furgão de Gado Uhl +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_LIVESTOCK_VAN :Furgão de Gado Foster STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_GOODS_TRUCK :Caminhão de Bens Balogh STR_VEHICLE_NAME_ROAD_VEHICLE_CRAIGHEAD_GOODS_TRUCK :Caminhão de Bens Craighead STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GOODS_TRUCK :Caminhão de Bens Goss @@ -5636,9 +5636,9 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_STEEL_TRUCK :Caminhão de A STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_ARMORED_TRUCK :Caminhão Blindado Balogh STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_ARMORED_TRUCK :Caminhão Blindado Uhl STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_ARMORED_TRUCK :Caminhão Blindado Foster -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_FOOD_VAN :Caminhão de Alimentos Foster -STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_FOOD_VAN :Caminhão de Alimentos Perry -STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_FOOD_VAN :Caminhão de Alimentos Chippy +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_FOOD_VAN :Furgão de Alimentos Foster +STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_FOOD_VAN :Furgão de Alimentos Perry +STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_FOOD_VAN :Furgão de Alimentos Chippy STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_PAPER_TRUCK :Caminhão de Papel Uhl STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_PAPER_TRUCK :Caminhão de Papel Balogh STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_PAPER_TRUCK :Caminhão de Papel MPS @@ -5648,9 +5648,9 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_COPPER_ORE_TRUCK :Caminhão de Mi STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_WATER_TANKER :Caminhão de Água Uhl STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_WATER_TANKER :Caminhão de Água Balogh STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_WATER_TANKER :Caminhão de Água MPS -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_FRUIT_TRUCK :Caminhão de Fruta Balogh -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_FRUIT_TRUCK :Caminhão de Fruta Uhl -STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_FRUIT_TRUCK :Caminhão de Fruta Kelling +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_FRUIT_TRUCK :Caminhão de Frutas Balogh +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_FRUIT_TRUCK :Caminhão de Frutas Uhl +STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_FRUIT_TRUCK :Caminhão de Frutas Kelling STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_RUBBER_TRUCK :Caminhão de Borracha Balogh STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_RUBBER_TRUCK :Caminhão de Borracha Uhl STR_VEHICLE_NAME_ROAD_VEHICLE_RMT_RUBBER_TRUCK :Caminhão de Borracha RMT @@ -5666,18 +5666,18 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COTTON_CANDY_TRUCK :Caminhão de Al STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOFFEE_TRUCK :Caminhão de Caramelo MightyMover STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOFFEE_TRUCK :Caminhão de Caramelo Powernaught STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOFFEE_TRUCK :Caminhão de Caramelo Wizzowow -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOY_VAN :Caminhão de Brinquedos MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOY_VAN :Caminhão de Brinquedos Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOY_VAN :Caminhão de Brinquedos Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOY_VAN :Furgão de Brinquedos MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOY_VAN :Furgão de Brinquedos Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOY_VAN :Furgão de Brinquedos Wizzowow STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_CANDY_TRUCK :Caminhão de Doces MightyMover STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_CANDY_TRUCK :Caminhão de Doces Powernaught STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_CANDY_TRUCK :Caminhão de Doces Wizzowow -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BATTERY_TRUCK :Caminhão de Pilha MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BATTERY_TRUCK :Caminhão de Pilha Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BATTERY_TRUCK :Caminhão de Pilha Wizzowow -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_FIZZY_DRINK :Caminhão de Refrigerante MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_FIZZY_DRINK :Caminhão de Refrigerante Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_FIZZY_DRINK_TRUCK :Caminhão de Refrigerante Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BATTERY_TRUCK :Caminhão de Pilhas MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BATTERY_TRUCK :Caminhão de Pilhas Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BATTERY_TRUCK :Caminhão de Pilhas Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_FIZZY_DRINK :Caminhão de Refrigerantes MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_FIZZY_DRINK :Caminhão de Refrigerantes Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_FIZZY_DRINK_TRUCK :Caminhão de Refrigerantes Wizzowow STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_PLASTIC_TRUCK :Caminhão de Plástico MightyMover STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_PLASTIC_TRUCK :Caminhão de Plástico Powernaught STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_PLASTIC_TRUCK :Caminhão de Plástico Wizzowow @@ -5688,11 +5688,11 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BUBBLE_TRUCK :Caminhão de Bo ###length 11 STR_VEHICLE_NAME_SHIP_MPS_OIL_TANKER :Navio Petroleiro MPS STR_VEHICLE_NAME_SHIP_CS_INC_OIL_TANKER :Navio Petroleiro CS-Inc. -STR_VEHICLE_NAME_SHIP_MPS_PASSENGER_FERRY :Navio de Passageiros MPS -STR_VEHICLE_NAME_SHIP_FFP_PASSENGER_FERRY :Navio de Passageiros FFP +STR_VEHICLE_NAME_SHIP_MPS_PASSENGER_FERRY :Balsa de Passageiros MPS +STR_VEHICLE_NAME_SHIP_FFP_PASSENGER_FERRY :Balsa de Passageiros FFP STR_VEHICLE_NAME_SHIP_BAKEWELL_300_HOVERCRAFT :Hovercraft Bakewell 300 -STR_VEHICLE_NAME_SHIP_CHUGGER_CHUG_PASSENGER :Navio de Passageiros Chugger-Chug -STR_VEHICLE_NAME_SHIP_SHIVERSHAKE_PASSENGER_FERRY :Navio de Passageiros Shivershake +STR_VEHICLE_NAME_SHIP_CHUGGER_CHUG_PASSENGER :Balsa de Passageiros Chugger-Chug +STR_VEHICLE_NAME_SHIP_SHIVERSHAKE_PASSENGER_FERRY :Balsa de Passageiros Shivershake STR_VEHICLE_NAME_SHIP_YATE_CARGO_SHIP :Navio Cargueiro Yate STR_VEHICLE_NAME_SHIP_BAKEWELL_CARGO_SHIP :Navio Cargueiro Bakewell STR_VEHICLE_NAME_SHIP_MIGHTYMOVER_CARGO_SHIP :Navio Cargueiro MightyMover diff --git a/src/lang/polish.txt b/src/lang/polish.txt index d665399fb8..ec5efcbf8a 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1892,17 +1892,17 @@ STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Skala produkcji STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skaluj produkcję ładunków w przedsiębiorstwach w oparciu o ten procent. STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% -STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autoodnawianie pojazdów gdy stają się stare: {STRING} +STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatyczne odnawianie pojazdów, gdy stają się stare: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Kiedy włączone, pojazd zbliżający się do końca swojej żywotności zostaje automatycznie zastąpiony, gdy warunki jego odnowienia są spełnione -STR_CONFIG_SETTING_AUTORENEW_MONTHS :Automatyczna odnowa, gdy pojazd ma {STRING} maksymalnym wieku +STR_CONFIG_SETTING_AUTORENEW_MONTHS :Automatyczne odnowienie, gdy pojazd ma {STRING} maksymalnym wieku STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Odpowiedni wiek pojazdu, kiedy powinien on zostać automatycznie odnowiony ###length 2 STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} miesi{P ąc ące ęcy} do STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} miesi{P ąc ące ęcy} po -STR_CONFIG_SETTING_AUTORENEW_MONEY :Min. ilość pieniędzy potrzebna do autoodnowienia: {STRING} -STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimalna ilość pieniędzy, która musi znajdować się w banku zanim auto-odnawianie będzie brane pod uwagę +STR_CONFIG_SETTING_AUTORENEW_MONEY :Minimalna ilość pieniędzy potrzebna do automatycznego odnowienia: {STRING} +STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimalna ilość pieniędzy, która musi znajdować się na koncie, zanim automatyczne odnawianie będzie brane pod uwagę STR_CONFIG_SETTING_ERRMSG_DURATION :Czas wyświetlania komunikatów o błędach: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Czas wyświetlania komunikatów o błędach w czerwonym oknie. Niektóre (krytyczne) komunikaty o błędach nie zamykają się automatycznie po tym czasie, tylko muszą zostać zamknięte ręcznie @@ -3946,7 +3946,7 @@ STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Zmienion STR_BROKEN_VEHICLE_LENGTH :{WHITE}Pociąg „{VEHICLE}” należący do „{COMPANY}” ma nieprawidłową długość. Prawdopodobnie jest to spowodowane problemami z NewGRF-ami. Gra może się desychronizować lub zawiesić STR_NEWGRF_BUGGY :{WHITE}NewGRF „{0:STRING}” dostarcza niepoprawne dane -STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Informacje o ładunku/naprawie dla „{1:ENGINE}” różnią się od listy zakupu po zbudowaniu. Może to spowodować, że autoodnowienie/-zamiana nie wykona remontu poprawnie +STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Informacje o ładunku/naprawie dla „{1:ENGINE}” różnią się od listy zakupu po zbudowaniu. Może to spowodować, że automatyczne odnowienie/zamiana nie wykona się poprawnie STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}„{1:STRING}” spowodował nieskończoną pętlę w wywołaniu zwrotnym produkcji STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Wywołanie zwrotne {1:HEX} zwróciło nieznany/błędny wynik {2:HEX} STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}„{1:STRING}” zwrócił niewłaściwy typ ładunku w wywołaniu zwrotnym produkcji w {2:HEX} From f0a891c4f782e1d1c838b3531352cc088f5aa349 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 1 Mar 2024 02:00:13 +0000 Subject: [PATCH 029/695] Cleanup: Remove unused last_num_specs from SlRoadStopTileData. (#12198) Inadvertently copy & pasted from another Sl handler. --- src/saveload/station_sl.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index e2b1524e08..50227920dc 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -564,8 +564,6 @@ public: }; inline const static SaveLoadCompatTable compat_description = {}; - static uint8_t last_num_specs; ///< Number of specs of the last loaded station. - void Save(BaseStation *bst) const override { SlSetStructListLength(bst->custom_roadstop_tile_data.size()); From 667adf7df9738fc9adb388f8be659007d01d1b7d Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 1 Mar 2024 18:35:36 +0000 Subject: [PATCH 030/695] Update: Translations from eints chinese (simplified): 26 changes by WenSimEHRP korean: 5 changes by telk5093 dutch: 9 changes by Afoklala portuguese (brazilian): 25 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 50 ++++++++++++++--------------- src/lang/dutch.txt | 12 +++++-- src/lang/korean.txt | 10 +++--- src/lang/simplified_chinese.txt | 52 +++++++++++++++---------------- 4 files changed, 65 insertions(+), 59 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index b749413d31..84646b812e 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -308,7 +308,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Ativando # Query window STR_BUTTON_DEFAULT :{BLACK}Padrão STR_BUTTON_CANCEL :{BLACK}Cancelar -STR_BUTTON_OK :{BLACK}OK +STR_BUTTON_OK :{BLACK}Confirmar STR_WARNING_PASSWORD_SECURITY :{YELLOW}Aviso: os administradores do servidor podem ler qualquer texto inserido aqui. # On screen keyboard window @@ -499,7 +499,7 @@ STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Fundar nova ind STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Construção de ferrovia STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construção de ferrovia eletrificada STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Construção de monotrilho -STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construção de Maglev +STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construção de MagLev # Road construction menu STR_ROAD_MENU_ROAD_CONSTRUCTION :Construção de estradas @@ -717,7 +717,7 @@ STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Programa STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} '{STRING}' STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Índice de faixas STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programa - '{STRING}' -STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Limpar +STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Apagar STR_PLAYLIST_CHANGE_SET :{BLACK}Mudar conjunto STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Apagar o programa atual (apenas Personalizado 1 ou Personalizado 2) STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Mudar a seleção musical para outro conjunto instalado @@ -1001,7 +1001,7 @@ STR_GAME_OPTIONS_CURRENCY_LTL :Litas Lituano STR_GAME_OPTIONS_CURRENCY_KRW :Won Sul Coreano STR_GAME_OPTIONS_CURRENCY_ZAR :Rand Sul Africano STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizado... -STR_GAME_OPTIONS_CURRENCY_GEL :Lari da Georgia +STR_GAME_OPTIONS_CURRENCY_GEL :Lari da Geórgia STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iraniano STR_GAME_OPTIONS_CURRENCY_RUB :Novo Rublo Russo STR_GAME_OPTIONS_CURRENCY_MXN :Peso Mexicano @@ -1918,7 +1918,7 @@ STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Suave STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Congelada STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentagem do lucro da etapa a pagar em sistemas de transbordo: {STRING} -STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentagem da receita dada a trajetos intermediários em sistemas de transbordo, dando mais controle sobre a receita +STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentagem da receita dada às etapas intermediárias em sistemas de transbordo, dando maior controle sobre a receita STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Quando arrastar, colocar sinais a cada: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Define a distância na qual os sinais serão construídos em uma linha até o próximo obstáculo (sinal, junção), quando colocar sinais arrastando @@ -2280,7 +2280,7 @@ STR_LIVERY_STEAM :Máquina a Vapo STR_LIVERY_DIESEL :Locomotiva Diesel STR_LIVERY_ELECTRIC :Locomotiva Elétrica STR_LIVERY_MONORAIL :Locomotiva Monotrilho -STR_LIVERY_MAGLEV :Locomotiva Maglev +STR_LIVERY_MAGLEV :Locomotiva MagLev STR_LIVERY_DMU :DMU STR_LIVERY_EMU :EMU STR_LIVERY_PASSENGER_WAGON_STEAM :Vagão de Passageiros (Vapor) @@ -2496,7 +2496,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nova empresa) STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Criar uma nova empresa e juntar-se a ela STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Esse é você STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Este é o hospedeiro do jogo -STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} cliente{P "" s} - {NUM}/{NUM} empres{P a as} +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} cliente{P "" s} - {NUM}/{NUM} empresa{P "" s} STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}Número de clientes atualmente conectados, número de empresas e número máximo de empresas permitido pelo administrador do servidor # Matches ConnectionType @@ -2779,10 +2779,10 @@ STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Constru STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Desativado pois não existem atualmente veículos disponíveis para esta infraestrutura # Rail construction toolbar -STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construção de Ferrovias -STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construção de Ferrovias (elétricas) -STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Construção de Ferrovias (monotrilho) -STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Construção de Ferrovias Maglev +STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construção de Ferrovia +STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construção de Ferrovia Eletrificada +STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Construção de Monotrilho +STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Construção de MagLev STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir ferrovia. Ctrl+Clique remove a ferrovia. Pressione também Shift para apenas mostrar o custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construir ferrovia usando o modo Autotrilho. Ctrl+Clique remove seção da ferrovia. Pressione também Shift para apenas mostrar o custo estimado @@ -3092,7 +3092,7 @@ STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STR STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipo de ferrovia: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Tipo de estrada: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Tipo de bonde: {LTBLUE}{STRING} -STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Limite de velocidade da linha: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Limite de velocidade da ferrovia {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Limite de velocidade da estrada: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Limite de velocidade dos bondes: {LTBLUE}{VELOCITY} @@ -4052,7 +4052,7 @@ STR_GROUP_OCCUPANCY_VALUE :{NUM}% STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Novos Veículos Ferroviários STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Novos Veículos Ferroviários Elétricos STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Novos Veículos Monotrilho -STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Novos Veículos Maglev +STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Novos Veículos MagLev STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Novos Veículos Rodoviários STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Novos Bondes @@ -5452,25 +5452,25 @@ STR_SV_STNAME_WEST :{STRING} - Oest STR_SV_STNAME_CENTRAL :{STRING} - Centro STR_SV_STNAME_TRANSFER :{STRING} - Transbordo STR_SV_STNAME_HALT :{STRING} - Parada -STR_SV_STNAME_VALLEY :Vale de {STRING} -STR_SV_STNAME_HEIGHTS :Montes de {STRING} -STR_SV_STNAME_WOODS :Bosques de {STRING} -STR_SV_STNAME_LAKESIDE :Lago de {STRING} +STR_SV_STNAME_VALLEY :{STRING} - Vale +STR_SV_STNAME_HEIGHTS :{STRING} - Colinas +STR_SV_STNAME_WOODS :{STRING} - Bosques +STR_SV_STNAME_LAKESIDE :{STRING} - Litoral STR_SV_STNAME_EXCHANGE :{STRING} - Intercâmbio -STR_SV_STNAME_AIRPORT :Aeroporto de {STRING} -STR_SV_STNAME_OILFIELD :Petrolífera de {STRING} -STR_SV_STNAME_MINES :Minas de {STRING} -STR_SV_STNAME_DOCKS :Docas de {STRING} +STR_SV_STNAME_AIRPORT :{STRING} - Aeroporto +STR_SV_STNAME_OILFIELD :{STRING} - Petrolífera +STR_SV_STNAME_MINES :{STRING} - Minas +STR_SV_STNAME_DOCKS :{STRING} - Docas STR_SV_STNAME_BUOY :{STRING} STR_SV_STNAME_WAYPOINT :{STRING} ##id 0x6020 STR_SV_STNAME_ANNEXE :{STRING} - Anexo STR_SV_STNAME_SIDINGS :{STRING} - Desvios STR_SV_STNAME_BRANCH :{STRING} - Ramal -STR_SV_STNAME_UPPER :{STRING} de Cima -STR_SV_STNAME_LOWER :{STRING} de Baixo -STR_SV_STNAME_HELIPORT :Heliporto de {STRING} -STR_SV_STNAME_FOREST :Floresta de {STRING} +STR_SV_STNAME_UPPER :{STRING} - Superior +STR_SV_STNAME_LOWER :{STRING} - Inferior +STR_SV_STNAME_HELIPORT :{STRING} - Heliporto +STR_SV_STNAME_FOREST :{STRING} - Floresta STR_SV_STNAME_FALLBACK :{STRING} - Estação #{NUM} ############ end of savegame specific region! diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index d4024fb1e1..1eb1581f8a 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1117,6 +1117,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Verlaag STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Verhoog de wisselkoers van jouw munteenheid ten opzichte van het pond (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Stel de wisselkoers in van jouw munteenheid ten opzichte van het pond (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Scheidingsteken: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Stel het scheidingsteken voor je munteenheid in STR_CURRENCY_PREFIX :{LTBLUE}Voorvoegsel: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Stel het voorvoegsel in voor jouw munteenheid @@ -1272,10 +1274,10 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Onbeperkt geld: STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Je kunt onbeperkt geld uitgeven en bedrijven gaan niet failliet STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximale beginlening: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximaal bedrag dat een bedrijf kan lenen (zonder rekening te houden met de inflatie) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximaal bedrag dat een bedrijf kan lenen (zonder rekening te houden met de inflatie). Als je dit instelt op 'Geen lening' kun je geen geld krijgen tenzij door middel van een spelscript of de instelling 'Onbeperkt geld'. STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Geen lening {RED}Spelscript vereist voor aanvankelijk saldo +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Geen lening STR_CONFIG_SETTING_INTEREST_RATE :Rente van lening: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Percentage rente op lening; bepaald ook het inflatiecijfer wanneer ingeschakeld @@ -1492,7 +1494,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Voertuigen verl STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Wanneer ingeschakeld, alle voertuig modellen blijven voor altijd beschikbaar na hun introductie STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Tijd bijhouden: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecteer de tijdbasis voor het spel. Dit kan later niet meer worden gewijzigd.{}{}Kalender is het klassieke OpenTTD, met een jaar met 12 maanden en maanden met 28-31 dagen.{}{}Bij Muurklok worden voertuigbewegingen, vrachtproductie en financiën gebaseerd op stappen van één minuut, ongeveer zolang als maanden van 30 dagen in Kalender-modus. Deze worden gegroepeerd in perioden van 12 minuten, equivalent aan een jaar in Kalender-modus.{}{}In beide modi heb je altijd een klassieke kalender die wordt gebruikt voor de introductiedatums van voertuigen, huizen en andere infrastructuur. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecteer de tijdbasis voor het spel. Dit kan later niet meer worden gewijzigd.{}{}Kalender is het klassieke OpenTTD, met een jaar met 12 maanden en maanden met 28-31 dagen.{}{}Bij Muurklok worden vrachtproductie en financiën gebaseerd op stappen van één minuut, ongeveer zolang als maanden van 30 dagen in Kalender-modus. Deze worden gegroepeerd in perioden van 12 minuten, equivalent aan een jaar in Kalender-modus.{}{}In beide modi heb je altijd een klassieke kalender die wordt gebruikt voor de introductiedatums van voertuigen, huizen en andere infrastructuur. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalender STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Muurklok @@ -5808,6 +5810,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}mjn +STR_CURRENCY_SHORT_GIGA :{NBSP}mjd +STR_CURRENCY_SHORT_TERA :{NBSP}bn STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 0039898918..4a2705ee2e 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -3745,12 +3745,12 @@ STR_STATION_LIST_STATION :{YELLOW}{STATIO STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- 없음 - STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}모든 시설을 선택합니다. -STR_STATION_LIST_CARGO_FILTER_ALL_AND_NO_RATING :등급이 없는 모든 화물 +STR_STATION_LIST_CARGO_FILTER_ALL_AND_NO_RATING :모든 화물 STR_STATION_LIST_CARGO_FILTER_MULTIPLE :여러 개의 화물 -STR_STATION_LIST_CARGO_FILTER_NO_CARGO_TYPES :등급이 없는 화물 -STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :등급이 없는 화물만 -STR_STATION_LIST_CARGO_FILTER_SELECT_ALL :등급이 없는 모든 화물 -STR_STATION_LIST_CARGO_FILTER_NO_RATING :등급이 없는 화물 +STR_STATION_LIST_CARGO_FILTER_NO_CARGO_TYPES :등급 없는 화물 +STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :등급 없는 화물만 +STR_STATION_LIST_CARGO_FILTER_SELECT_ALL :모든 화물 +STR_STATION_LIST_CARGO_FILTER_NO_RATING :등급 없는 화물 STR_STATION_LIST_CARGO_FILTER_EXPAND :더 보기... # Station view window diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index c3a8416eba..86944c02bf 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -406,7 +406,7 @@ STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}建设 STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}建设水运设施 STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}建设机场 STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}打开景观美化工具栏以修改地形、设置地貌等 -STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}显示 声音/音乐 控制菜单 +STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}显示声音与音乐控制菜单 STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}显示最新消息、新闻,消息历史或删除所有消息 STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}查询地块信息、截图、关于 OpenTTD 和开发者工具 STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}切换工具栏 @@ -423,7 +423,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}修改 STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}城镇生成 STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}建造或生成工业 STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}建设公路设施 -STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}电车道建设 +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}建设电车设施 STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}种植树木。按住 以沿对角线建造。按住 键以显示预计费用。 STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}放置标志 STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}放置物件。按住 以沿对角线放置,按住 以显示预计费用。 @@ -1929,7 +1929,7 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :在 {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :设置电子信号灯出现的时间,在此之前,使用悬臂信号灯(功能相同,外观不同) STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :在以下信号类型中循环: {STRING} -STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :选择用Ctrl+点击的方式切换信号灯类型时的备选类型 +STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :选择按 键操作以切换信号灯类型时使用的信号备选类型 ###length 2 STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :仅当前信号组 STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :全部可见 @@ -2786,13 +2786,13 @@ STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :磁悬浮铁路 STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}建设铁轨。按住 键以移除铁轨。按住 键以显示预计费用。 STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}使用多向路轨工具铺设轨道。按住 键点选以移除轨道。按住 键点选以显示预计费用。 STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}建设列车车库(可以购买或维护列车)。按住 键以显示预计费用。 -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}建设铁路路点。按住 Ctrl 键允许合并路点。按住 Shift 键显示预计费用。 +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}建设铁路路点。按住 键以合并路点。按住 键以显示预计费用。 STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}建设火车站。按住 键以合并车站。按住 键以显示预计费用。 STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}建设铁路信号。建筑时按住 键单击以对信号应用不同风格样式。{}在建设时拖拽以在拖拽区间内按照设定的信号间距均匀建设信号。按住 键拖拽以按设定的检举建设信号至下一个岔道 / 车站 / 信号。按住 以显示预计费用。 STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}建设铁路桥梁。按住 键显示预计费用。 STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}建设铁路隧道。按住 键以显示预计费用。 STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}切换建筑 / 拆除铁轨、信号机、路点以及车站。按住 键点选以同时移除路点及车站中的铁轨 -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}转换/升级 铁路类型。按住 Shift 键显示预计费用。 +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}转换或升级铁路类型。按住 键单击以显示预计费用。 STR_RAIL_NAME_RAILROAD :铁路 STR_RAIL_NAME_ELRAIL :电气化铁路 @@ -2886,7 +2886,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}建设 STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}建设/拆除 公路 STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}建设/拆除 电车轨道 STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}转换或升级道路类型。按住 键单击以显示预计费用。 -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :转换/升级 电车道类型。按住 Shift 键显示预计费用。 +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}转换或升级电车轨道类型。按住 键单击以显示预计费用。 STR_ROAD_NAME_ROAD :公路 STR_ROAD_NAME_TRAM :电车轨道 @@ -2928,7 +2928,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}码头 # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}机场 -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}新建机场。按住 Ctrl 键允许合并站台,按住 Shift 键操作可以显示所需资金 +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}建设机场。按住 键以合并车站。按住 键以显示预计费用。 # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}飞机场选单 @@ -2987,7 +2987,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}划出沙漠区域{}按住 键操作以移除沙漠区域 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}随机生成土地 @@ -3594,7 +3594,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}显示 # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}标记标志文字 -STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到标志的位置. 单击的同时按住Ctrl会在新视点中显示标志位置 +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到标志所在的位置。按住 单击会在新视点中显示目标位置。 STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}前往下个标记 STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}前往上个标记 @@ -3624,7 +3624,7 @@ STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}城镇 STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}城镇每 {ORANGE}{UNITS_DAYS_OR_SECONDS}{BLACK}{NBSP}成长一次(正接受资助) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK} 城镇发展正在 {RED}停滞 {BLACK}! STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}当前城镇噪音: {ORANGE}{COMMA}{BLACK} 最大: {ORANGE}{COMMA} -STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}将屏幕中心移动到城镇所在的位置. 单击的同时按住Ctrl会在新视点中显示城镇位置 +STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}将屏幕中心移动到城镇的位置。按住 键点选会在新视点中显示目标位置。 STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}地方政府 STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}显示地方政府的信息 STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}城镇改名 @@ -3681,7 +3681,7 @@ STR_GOALS_TEXT :{ORANGE}{STRING STR_GOALS_NONE :{ORANGE}- 无目标 - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}点击使得视图移动到该工业/城镇/地块. Ctrl+左键 在该处创建一个视点. +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}将屏幕中心移动到当前工业或城镇所占格的位置。按住 键点选会在新视点中显示目标位置。 # Goal question window STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}帮助索引 @@ -3737,7 +3737,7 @@ STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}转到 STR_STORY_BOOK_INVALID_GOAL_REF :{RED}无效的目标参照 # Station list window -STR_STATION_LIST_TOOLTIP :{BLACK}车站名称{}点击可将屏幕中心移动到车站所在位置. 单击的同时按住Ctrl会在新视点中显示车站位置 +STR_STATION_LIST_TOOLTIP :{BLACK}车站名称 - 点选名称以将屏幕中心移动到车站的位置。按住 键点选会在新视点中显示车站位置。 STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}按住 键点选以选择多个项目 STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} 车站 STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} @@ -3803,7 +3803,7 @@ STR_CARGO_RATING_VERY_GOOD :优秀 STR_CARGO_RATING_EXCELLENT :卓越 STR_CARGO_RATING_OUTSTANDING :完美(最高评价) -STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}将屏幕中心移动到车站所在的位置. 单击的同时按住Ctrl会在新视点中显示车站位置 +STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}将屏幕中心移动到车站所在的位置。按住 单击会在新视点中显示目标位置。 STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}重命名车站 STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}显示所有调度计划中含有此车站的列车 @@ -4099,7 +4099,7 @@ STR_CARGO_TYPE_FILTER_NONE :没有 ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}列车选择列表。点击载具以展示信息。按住 键点选以显示 / 隐藏当前载具。 STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}汽车选择列表。点击载具以展示信息。按住 键点选以显示 / 隐藏当前载具。 -STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}船舶选择列表。点击船舶查看详细信息,或者按住 Ctrl 键再点击以切换是否隐藏船舶的种类 +STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}船舶选择列表。点击载具以展示信息。按住 键点选以显示 / 隐藏当前载具。 STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}飞机选择列表。点击飞机查看详细信息,或者按住 Ctrl 键再点击以切换是否隐藏飞机的种类 ###length VEHICLE_TYPES @@ -4174,7 +4174,7 @@ STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}列车 - 左键拖动可调整车厢,右击可查看详情。按Ctrl执行上述操作可同时操作之后车厢。 +STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}列车 - 左键拖动可调整车厢,右击可查看详情。按 操作以同时操作该车厢与其之后的所有车厢。 STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}汽车 - 右击可查看详细信息 STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}船只 - 右击可查看详细信息 STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}飞机 - 右击可查看详细信息 @@ -4224,7 +4224,7 @@ STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}复制 ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到列车车库所在的位置。按住 单击会在新视点中显示列车车库位置。 STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到车库所在的位置。按住 单击会在新视点中显示目标位置。 -STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到当前船坞的位置. 单击的同时按住Ctrl会在新视点中显示船坞位置 +STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到船坞所在的位置。按住 单击会在新视点中显示目标位置。 STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到机库所在的位置。按住 单击会在新视点中显示目标位置。 ###length VEHICLE_TYPES @@ -4331,15 +4331,15 @@ STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. 按 STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}将主视角中心移动到列车所在的位置。双击将会在主视角中跟踪列车。单击的同时按住Ctrl会在新视点中显示列车位置 -STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK} 将主视角中心移动到车辆所在的位置。双击将会在主视角中跟踪车辆。单击的同时按住 Ctrl 会在新视点中显示车辆位置 -STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}将主视角中心移动到船只所在的位置。双击将会在主视角中跟踪船只。单击的同时按住Ctrl会在新视点中显示船只位置 +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}将主视角中心移动到列车所在的位置。双击将会在主视角中跟踪列车。按 键操作以在新视点中显示列车 +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}将主视角中心移动到载具所在的位置。双击将会在主视角中跟踪载具。按 键操作以在新视点中显示载具 +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}将主视角中心移动到船舶所在的位置。双击将会在主视角中跟踪船舶。按 键操作以在新视点中显示船舶 STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}将主视角中心移动到飞机所在的位置。双击将会在主视角中跟踪飞机。按 键操作以在新视点中显示飞机 ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令列车前往车库。按住 键操作以仅作保养。 STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令汽车前往车库。按住 键操作以仅作保养。 -STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令船只前往船坞{}Ctrl+单击 时船只只进行保养 +STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令船舶前往船坞。按住 键操作以仅作保养。 STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令飞机前往机库。按住 键操作以仅作保养。 ###length VEHICLE_TYPES @@ -4351,7 +4351,7 @@ STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}复制 STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}命令列车强行通过信号 STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}命令列车调头 STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}强制汽车掉头 -STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到当前指令的目的地。单击的同时按住Ctrl会在新视点中显示指令目的地的位置 +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到指令目的地所在的位置。按住 单击会在新视点中显示目标位置。 ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}改装列车以装载另一类型的货物 @@ -4390,7 +4390,7 @@ STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}等待 STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}距离下一目的地过远 STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - 正前往 {0:STATION} -STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}没有目标,{VELOCITY} +STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - 没有目标 STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - 正前往 {0:WAYPOINT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - 正前往 {0:DEPOT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - 正在前往 {0:DEPOT} 以进行维护 @@ -4421,7 +4421,7 @@ STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}命名 STR_VEHICLE_INFO_AGE :{COMMA} 年 ({COMMA}) STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} 年 ({COMMA}) -STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}年龄:{LTBLUE}{STRING}{BLACK} 运行成本:{LTBLUE}{CURRENCY_LONG} /年 +STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}年龄:{LTBLUE}{STRING}{BLACK} 运行成本:{LTBLUE}{CURRENCY_LONG}/年 STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}年龄:{LTBLUE}{STRING}{BLACK} 运行费用:{LTBLUE}{CURRENCY_LONG}/周期 STR_VEHICLE_INFO_MAX_SPEED :{BLACK}最大速度:{LTBLUE}{VELOCITY} @@ -4721,18 +4721,18 @@ STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}本时 STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}本时刻表将会在 {COMMA} 秒内开始 STR_TIMETABLE_START :{BLACK}开始时刻表 -STR_TIMETABLE_START_TOOLTIP :{BLACK}选择此时刻表开始的时间。如果订单完全按时刻表安排,则按住Ctrl键并单击会根据它们的相对顺序,且均匀分配共享此订单的所有车辆的开始时间。 +STR_TIMETABLE_START_TOOLTIP :{BLACK}选择此时刻表开始的时间。如果调度计划有完善的时刻表,则按住 键单击会根据它们的相对顺序均匀分配共享此调度计划的所有车辆的出开始时间。 STR_TIMETABLE_START_SECONDS_QUERY :直至时刻表开始的秒数 STR_TIMETABLE_CHANGE_TIME :{BLACK}改变时间 -STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}改变高亮选择的命令执行的时间,按住Ctrl单击可为所有命令设置时间 +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}修改选定命令设定的时间。按住 键操作以修改所有命令的限时。 STR_TIMETABLE_CLEAR_TIME :{BLACK}清除时间 STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}清除选定命令设定的时间。按住 键操作以清除所有命令的限时。 STR_TIMETABLE_CHANGE_SPEED :{BLACK}更改限速 -STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}更改高亮调度命令的最高限速。按住Ctrl键单击可为所有命令设置速度 +STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}修改选定命令设定的限速。按住 键操作以修改所有命令的限速。 STR_TIMETABLE_CLEAR_SPEED :{BLACK}取消限速 STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}清除选定命令设定的限速。按住 键操作以清除所有命令的限速。 From 890040ceea26b0ba58ca7575296a7a10461d83a5 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Fri, 1 Mar 2024 15:47:10 -0500 Subject: [PATCH 031/695] Update: Developer credits (#12173) --- CREDITS.md | 4 ++-- src/misc_gui.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CREDITS.md b/CREDITS.md index 1988223bf9..5b1aa2219b 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -7,10 +7,10 @@ - Michael Lutz (michi_cc) - General / Path based signals (since 0.7) - Niels Martin Hansen (nielsm) - Music system, general coding (since 1.9) - Owen Rudge (orudge) - Forum host, OS/2 port (since 0.1) -- Peter Nelson (peter1138) - Spiritual descendant from newGRF gods (since 0.4.5) +- Peter Nelson (peter1138) - Spiritual descendant from NewGRF gods (since 0.4.5) - Remko Bijker (Rubidium) - Coder and way more (since 0.4.5) - Patric Stout (TrueBrain) - NoProgrammer (since 0.3), sys op -- Tyler Trahan (2TallTyler) - General coding (since 13) +- Tyler Trahan (2TallTyler) - General / Time Lord (since 13) ### Inactive Developers: diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 3d45881c47..ef33c153df 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -418,7 +418,7 @@ static const char * const _credits[] = { " Peter Nelson (peter1138) - Spiritual descendant from NewGRF gods (since 0.4.5)", " Remko Bijker (Rubidium) - Coder and way more (since 0.4.5)", " Patric Stout (TrueBrain) - NoProgrammer (since 0.3), sys op", - " Tyler Trahan (2TallTyler) - General coding (since 13)", + " Tyler Trahan (2TallTyler) - General / Time Lord (since 13)", "", "Inactive Developers:", " Grzegorz Duczy\u0144ski (adf88) - General coding (1.7 - 1.8)", From b3075410991431db40c0e4cd8af64dff8ebf6f5a Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Fri, 1 Mar 2024 21:22:20 +0100 Subject: [PATCH 032/695] Fix #12196: always show selected content, even when filtering --- src/network/network_content_gui.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index f3dbcc3763..5c85417d91 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -466,6 +466,8 @@ class NetworkContentListWindow : public Window, ContentCallback { /** Filter content by tags/name */ static bool CDECL TagNameFilter(const ContentInfo * const *a, ContentListFilterData &filter) { + if ((*a)->state == ContentInfo::SELECTED || (*a)->state == ContentInfo::AUTOSELECTED) return true; + filter.string_filter.ResetState(); for (auto &tag : (*a)->tags) filter.string_filter.AddLine(tag); @@ -808,6 +810,7 @@ public: if (click_count > 1 || IsInsideBS(pt.x, checkbox->pos_x, checkbox->current_x)) { _network_content_client.ToggleSelectedState(this->selected); this->content.ForceResort(); + this->content.ForceRebuild(); } if (this->filter_data.types.any()) { From 7824ae5b5972d82a246dc6801feea148a36bdf07 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Fri, 1 Mar 2024 21:22:34 +0100 Subject: [PATCH 033/695] Fix #12196: disable "select upgrade" button when filtering --- src/network/network_content_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 5c85417d91..479be14e51 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -997,7 +997,7 @@ public: this->SetWidgetDisabledState(WID_NCL_DOWNLOAD, this->filesize_sum == 0 || (FindWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD) != nullptr && data != 2)); this->SetWidgetDisabledState(WID_NCL_UNSELECT, this->filesize_sum == 0); this->SetWidgetDisabledState(WID_NCL_SELECT_ALL, !show_select_all); - this->SetWidgetDisabledState(WID_NCL_SELECT_UPDATE, !show_select_upgrade); + this->SetWidgetDisabledState(WID_NCL_SELECT_UPDATE, !show_select_upgrade || !this->filter_data.string_filter.IsEmpty()); this->SetWidgetDisabledState(WID_NCL_OPEN_URL, this->selected == nullptr || this->selected->url.empty()); for (TextfileType tft = TFT_CONTENT_BEGIN; tft < TFT_CONTENT_END; tft++) { this->SetWidgetDisabledState(WID_NCL_TEXTFILE + tft, this->selected == nullptr || this->selected->state != ContentInfo::ALREADY_HERE || !this->selected->GetTextfile(tft).has_value()); From 3fd5c33ae6d37ce3efcf3d19a2f54fcd6e486bfd Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Fri, 1 Mar 2024 16:29:55 -0500 Subject: [PATCH 034/695] Fix f6dd505: Only reset unbunching departure data in the correct depot (#12155) --- src/vehicle.cpp | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 1226b332c9..5083a79037 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -2438,11 +2438,28 @@ bool Vehicle::HasUnbunchingOrder() const return false; } +/** + * Check if the previous order is a depot unbunching order. + * @return true Iff the previous order is a depot order with the unbunch flag. + */ +static bool PreviousOrderIsUnbunching(const Vehicle *v) +{ + /* If we are headed for the first order, we must wrap around back to the last order. */ + bool is_first_order = (v->GetOrder(v->cur_real_order_index) == v->GetFirstOrder()); + Order *previous_order = (is_first_order) ? v->GetLastOrder() : v->GetOrder(v->cur_real_order_index - 1); + + if (previous_order == nullptr || !previous_order->IsType(OT_GOTO_DEPOT)) return false; + return (previous_order->GetDepotActionType() & ODATFB_UNBUNCH) != 0; +} + /** * Leave an unbunching depot and calculate the next departure time for shared order vehicles. */ void Vehicle::LeaveUnbunchingDepot() { + /* Don't do anything if this is not our unbunching order. */ + if (!PreviousOrderIsUnbunching(this)) return; + /* Set the start point for this round trip time. */ this->depot_unbunching_last_departure = TimerGameTick::counter; @@ -2494,13 +2511,8 @@ bool Vehicle::IsWaitingForUnbunching() const /* Don't do anything if there aren't enough orders. */ if (this->GetNumOrders() <= 1) return false; - /* - * Make sure this is the correct depot for unbunching. - * If we are headed for the first order, we must wrap around back to the last order. - */ - bool is_first_order = (this->GetOrder(this->cur_real_order_index) == this->GetFirstOrder()); - Order *previous_order = (is_first_order) ? this->GetLastOrder() : this->GetOrder(this->cur_real_order_index - 1); - if (previous_order == nullptr || !previous_order->IsType(OT_GOTO_DEPOT) || !(previous_order->GetDepotActionType() & ODATFB_UNBUNCH)) return false; + /* Don't do anything if this is not our unbunching order. */ + if (!PreviousOrderIsUnbunching(this)) return false; return (this->depot_unbunching_next_departure > TimerGameTick::counter); }; From a602845d0a35331f1e012cd13ca921c6bc42b58d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 1 Mar 2024 22:08:18 +0000 Subject: [PATCH 035/695] Fix #12202: Race condition when using sprite picker. (#12204) When using the sprite picker the screen is redrawn so that the sprites under the mouse cursor can be captured. This redraw also caused the sprite aligner window to be redrawn before the OnInvalidateData event that updates its scrollbars with the list count. --- src/newgrf_debug_gui.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index 9dcd14c9d9..e200515e26 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -930,6 +930,9 @@ struct SpriteAlignerWindow : Window { } case WID_SA_LIST: { + /* Don't redraw sprite list while it is still being filled by picker. */ + if (_newgrf_debug_sprite_picker.mode == SPM_REDRAW) break; + const NWidgetBase *nwid = this->GetWidget(widget); int step_size = nwid->resize_y; From b53d79b1d2e71af82b598b79d0daa2a84c2931c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Sat, 2 Mar 2024 00:07:43 +0100 Subject: [PATCH 036/695] Codechange: Don't use NOT_REACHED() when catching unhandled thread exceptions (#12199) --- src/thread.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/thread.h b/src/thread.h index 336a0317be..d393b95cd5 100644 --- a/src/thread.h +++ b/src/thread.h @@ -12,6 +12,7 @@ #include "debug.h" #include "crashlog.h" +#include "error_func.h" #include #include #include @@ -62,6 +63,8 @@ inline bool StartNewThread(std::thread *thr, const char *name, TFn&& _Fx, TArgs& try { /* Call user function with the given arguments. */ F(A...); + } catch (std::exception &e) { + FatalError("Unhandled exception in {} thread: {}", name, e.what()); } catch (...) { NOT_REACHED(); } From 253ba0d354dcb2cb3c754256fa4ff374e28676fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Sat, 2 Mar 2024 13:02:56 +0100 Subject: [PATCH 037/695] Fix #12195: Reset cursor when no Object is selected (#12207) --- src/object_gui.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/object_gui.cpp b/src/object_gui.cpp index a72edbe4ff..6e911359aa 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -441,6 +441,8 @@ public: if (_selected_object_index != -1) { SetObjectToPlaceWnd(SPR_CURSOR_TRANSMITTER, PAL_NONE, HT_RECT | HT_DIAGONAL, this); + } else { + ResetObjectToPlace(); } this->UpdateButtons(_selected_object_class, _selected_object_index, _selected_object_view); From aff09306de0118cb7a671b3a03671f59a15c03f0 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 2 Mar 2024 11:45:01 +0100 Subject: [PATCH 038/695] Fix #12076: Do not allow 'join' command on dedicated servers --- src/console_cmds.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 98a521861e..0c766b0f47 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -155,6 +155,21 @@ DEF_CONSOLE_HOOK(ConHookNeedNetwork) return CHR_ALLOW; } +/** + * Check whether we are in a multiplayer game and are playing, i.e. we are not the dedicated server. + * @return Are we a client or non-dedicated server in a network game? True when yes, false otherwise. + */ +DEF_CONSOLE_HOOK(ConHookNeedNonDedicatedNetwork) +{ + if (!NetworkAvailable(echo)) return CHR_DISALLOW; + + if (_network_dedicated) { + if (echo) IConsolePrint(CC_ERROR, "This command is not available to a dedicated network server."); + return CHR_DISALLOW; + } + return CHR_ALLOW; +} + /** * Check whether we are in singleplayer mode. * @return True when no network is active. @@ -2693,7 +2708,7 @@ void IConsoleStdLibRegister() IConsole::CmdRegister("reconnect", ConNetworkReconnect, ConHookClientOnly); IConsole::CmdRegister("rcon", ConRcon, ConHookNeedNetwork); - IConsole::CmdRegister("join", ConJoinCompany, ConHookNeedNetwork); + IConsole::CmdRegister("join", ConJoinCompany, ConHookNeedNonDedicatedNetwork); IConsole::AliasRegister("spectate", "join 255"); IConsole::CmdRegister("move", ConMoveClient, ConHookServerOnly); IConsole::CmdRegister("reset_company", ConResetCompany, ConHookServerOnly); From 8f22066b9a66b0cd2cce08ccc224b49864823eb0 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 2 Mar 2024 16:05:43 +0100 Subject: [PATCH 039/695] Fix #12147: reset all saved settings to their default before loading a game (#12210) --- src/saveload/settings_sl.cpp | 18 ++++++++++++++---- src/settings.cpp | 16 ++++++++++++++++ src/settings_internal.h | 9 +++++++++ 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/saveload/settings_sl.cpp b/src/saveload/settings_sl.cpp index ab8f5cec28..987344f952 100644 --- a/src/saveload/settings_sl.cpp +++ b/src/saveload/settings_sl.cpp @@ -187,10 +187,20 @@ struct PATSChunkHandler : ChunkHandler { void Load() const override { - /* Copy over default setting since some might not get loaded in - * a networking environment. This ensures for example that the local - * currency setting stays when joining a network-server */ - LoadSettings(this->GetSettingTable(), &_settings_game, _settings_sl_compat); + const auto settings_table = this->GetSettingTable(); + + /* Reset all settings to their default, so any settings missing in the savegame + * are their default, and not "value of last game". AfterLoad might still fix + * up values to become non-default, depending on the saveload version. */ + for (auto &desc : settings_table) { + const SettingDesc *sd = GetSettingDesc(desc); + if (sd->flags & SF_NOT_IN_SAVE) continue; + if ((sd->flags & SF_NO_NETWORK_SYNC) && _networking && !_network_server) continue; + + sd->ResetToDefault(&_settings_game); + } + + LoadSettings(settings_table, &_settings_game, _settings_sl_compat); } void LoadCheck(size_t) const override diff --git a/src/settings.cpp b/src/settings.cpp index 5200b2394c..0fc581443e 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -768,6 +768,11 @@ bool IntSettingDesc::IsDefaultValue(void *object) const return this->def == object_value; } +void IntSettingDesc::ResetToDefault(void *object) const +{ + this->Write(object, this->def); +} + std::string StringSettingDesc::FormatValue(const void *object) const { const std::string &str = this->Read(object); @@ -800,6 +805,11 @@ bool StringSettingDesc::IsDefaultValue(void *object) const return this->def == str; } +void StringSettingDesc::ResetToDefault(void *object) const +{ + this->Write(object, this->def); +} + bool ListSettingDesc::IsSameValue(const IniItem *, void *) const { /* Checking for equality is way more expensive than just writing the value. */ @@ -812,6 +822,12 @@ bool ListSettingDesc::IsDefaultValue(void *) const return false; } +void ListSettingDesc::ResetToDefault(void *) const +{ + /* Resetting a list to default is not supported. */ + NOT_REACHED(); +} + /** * Loads all items from a 'grpname' section into a list * The list parameter can be a nullptr pointer, in this case nothing will be diff --git a/src/settings_internal.h b/src/settings_internal.h index f74127a8ae..177d00a324 100644 --- a/src/settings_internal.h +++ b/src/settings_internal.h @@ -137,6 +137,11 @@ struct SettingDesc { * @return true iff the value is the default value. */ virtual bool IsDefaultValue(void *object) const = 0; + + /** + * Reset the setting to its default value. + */ + virtual void ResetToDefault(void *object) const = 0; }; /** Base integer type, including boolean, settings. Only these are shown in the settings UI. */ @@ -236,6 +241,7 @@ struct IntSettingDesc : SettingDesc { void ParseValue(const IniItem *item, void *object) const override; bool IsSameValue(const IniItem *item, void *object) const override; bool IsDefaultValue(void *object) const override; + void ResetToDefault(void *object) const override; int32_t Read(const void *object) const; private: @@ -332,6 +338,7 @@ struct StringSettingDesc : SettingDesc { void ParseValue(const IniItem *item, void *object) const override; bool IsSameValue(const IniItem *item, void *object) const override; bool IsDefaultValue(void *object) const override; + void ResetToDefault(void *object) const override; const std::string &Read(const void *object) const; private: @@ -350,6 +357,7 @@ struct ListSettingDesc : SettingDesc { void ParseValue(const IniItem *item, void *object) const override; bool IsSameValue(const IniItem *item, void *object) const override; bool IsDefaultValue(void *object) const override; + void ResetToDefault(void *object) const override; }; /** Placeholder for settings that have been removed, but might still linger in the savegame. */ @@ -361,6 +369,7 @@ struct NullSettingDesc : SettingDesc { void ParseValue(const IniItem *, void *) const override { NOT_REACHED(); } bool IsSameValue(const IniItem *, void *) const override { NOT_REACHED(); } bool IsDefaultValue(void *) const override { NOT_REACHED(); } + void ResetToDefault(void *) const override { NOT_REACHED(); } }; typedef std::variant SettingVariant; From d7c485d4b9649722d64626415dd2b023ed0b8ecb Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 2 Mar 2024 18:34:44 +0000 Subject: [PATCH 040/695] Update: Translations from eints estonian: 166 changes by siimsoni, 22 changes by RM87 chinese (simplified): 6 changes by WenSimEHRP serbian: 172 changes by nkrs ukrainian: 11 changes by StepanIvasyn spanish: 1 change by MontyMontana portuguese (brazilian): 149 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 298 +++++++++++++++--------------- src/lang/estonian.txt | 252 ++++++++++++++++++------- src/lang/serbian.txt | 191 +++++++++++++++++-- src/lang/simplified_chinese.txt | 12 +- src/lang/spanish.txt | 2 +- src/lang/ukrainian.txt | 14 +- 6 files changed, 527 insertions(+), 242 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 84646b812e..3c40089e35 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -269,23 +269,23 @@ STR_UNITS_PERIODS :{NUM}{NBSP}per # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtro: -STR_LIST_FILTER_OSKTITLE :{BLACK}Introduzir uma ou mais palavras-chave para procurar na lista -STR_LIST_FILTER_TOOLTIP :{BLACK}Introduzir uma ou mais palavras-chave para procurar na lista +STR_LIST_FILTER_OSKTITLE :{BLACK}Digitar uma ou mais palavras-chave para procurar na lista +STR_LIST_FILTER_TOOLTIP :{BLACK}Digite uma ou mais palavras-chave para procurar na lista STR_TOOLTIP_GROUP_ORDER :{BLACK}Selecionar ordem de agrupamento STR_TOOLTIP_SORT_ORDER :{BLACK}Selecionar ordenação (descendente/ascendente) STR_TOOLTIP_SORT_CRITERIA :{BLACK}Selecionar critério de ordenação -STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Selecionar critério de busca +STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Selecionar o critério de procura STR_BUTTON_SORT_BY :{BLACK}Ordenar por STR_BUTTON_CATCHMENT :{BLACK}Cobertura STR_TOOLTIP_CATCHMENT :{BLACK}Mostrar/Ocultar a área de cobertura STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Fechar janela STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Título da janela - Clique+Arraste isto para mover a janela -STR_TOOLTIP_SHADE :{BLACK}Encolher janela - mostrar apenas a barra de título +STR_TOOLTIP_SHADE :{BLACK}Encolher janela - mostrar somente a barra de título STR_TOOLTIP_DEBUG :{BLACK}Mostrar informação de depuração de NewGRF STR_TOOLTIP_DEFSIZE :{BLACK}Redimensionar a janela para o tamanho padrão. Ctrl+Clique para salvar o tamanho atual como padrão -STR_TOOLTIP_STICKY :{BLACK}Fixar esta janela para ela não ser fechada pela tecla 'Fechar Todas as Janelas'. Use Ctrl+Clique para salvar o estado como padrão +STR_TOOLTIP_STICKY :{BLACK}Fixar esta janela para ela não ser fechada pela tecla 'Fechar Todas as Janelas'. Ctrl+Clique para salvar o estado como padrão STR_TOOLTIP_RESIZE :{BLACK}Clique e arraste para redimensionar esta janela STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Alternar entre janela grande/pequena STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de rolagem - desloca a lista para cima/baixo @@ -410,7 +410,7 @@ STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Abrir me STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Abrir janela de som/música STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Abrir última mensagem/notícia, histórico de mensagens ou apagar todas as mensagens STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Abrir informações do terreno, menu de captura de tela, créditos do OpenTTD ou ferramentas de desenvolvedor -STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Trocar a barra de ferramentas +STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Trocar barras de ferramentas # Extra tooltips for the scenario editor toolbar STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Salvar cenário, abrir cenário, abandonar editor de cenário, sair @@ -418,7 +418,7 @@ STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Editor de Cenário STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Mover a data inicial 1 ano para trás STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Mover a data inicial 1 ano para frente -STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Clique para informar o ano de início +STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Clique para inserir o ano de início STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Abrir mapa, visualização extra, lista de sinais, lista de localidades ou de indústrias STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Abrir menu de paisagismo ou gerar um novo mundo STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Construir ou gerar localidades @@ -702,7 +702,7 @@ STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Passar p STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Passar para a próxima faixa na seleção STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Parar a reprodução de música STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Iniciar a reprodução de música -STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Arrastar os controles deslizantes para definir o volume de músicas e efeitos sonoros +STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Arraste os controles deslizantes para definir o volume de músicas e efeitos sonoros STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Selecionar programa 'Todas as faixas' STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Selecionar músicas 'Estilo Antigo' STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Selecionar músicas 'Estilo Moderno' @@ -719,10 +719,10 @@ STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLA STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programa - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Apagar STR_PLAYLIST_CHANGE_SET :{BLACK}Mudar conjunto -STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Apagar o programa atual (apenas Personalizado 1 ou Personalizado 2) +STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Apagar o programa atual (somente Personalizado 1 ou Personalizado 2) STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Mudar a seleção musical para outro conjunto instalado -STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Clique na faixa de música para a adicionar ao programa atual (apenas Personalizado 1 ou Personalizado 2) -STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Clique na faixa de música para remover do programa atual (apenas Personalizado 1 ou Personalizado 2) +STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Clique na faixa de música para a adicionar ao programa atual (somente Personalizado 1 ou Personalizado 2) +STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Clique na faixa de música para remover do programa atual (somente Personalizado 1 ou Personalizado 2) # Highscore window STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Melhores empresas @@ -758,8 +758,8 @@ STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Mostrar STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Mostrar rotas de transporte no mapa STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Mostrar vegetação no mapa STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Mostrar proprietários dos terrenos no mapa -STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Clique em um tipo de indústria para mostrar/ocultar a indústria. Ctrl+Clique desabilita todos os tipos exceto a selecionada. Ctrl+Clique nela novamente para habilitar todos os tipos de indústrias -STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Clique em uma empresa para mostrar/ocultar suas propriedades. Ctrl+Clique desabilita todas as empresas exceto a selecionada. Ctrl+Clique nela novamente para habilitar todas as empresas +STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Clique em um tipo de indústria para mostrar/ocultar a indústria. Ctrl+Clique desabilita todos os tipos exceto a selecionada. Ctrl+Clique novamente para habilitar todos os tipos de indústrias +STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Clique em uma empresa para mostrar/ocultar suas propriedades. Ctrl+Clique desabilita todas as empresas exceto a selecionada. Ctrl+Clique novamente para habilitar todas as empresas STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Clique em uma carga para mostrar/ocultar suas propriedades. Ctrl+Clique desabilita todas as cargas exceto a selecionada. Ctrl+Clique novamente para habilitar todas as cargas STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Estradas @@ -1041,7 +1041,7 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Marque e STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}A configuração terá efeito somente após reiniciar o jogo STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync -STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para ativar v-sync na tela. Se modificada, esta configuração terá efeito somente após reiniciar o jogo. Só funciona com aceleração de hardware habilitada +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para ativar v-sync na tela. Se modificada, esta configuração terá efeito somente após reiniciar o jogo. Funciona somente com aceleração de hardware habilitada STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}"Driver" atual: {STRING} @@ -1075,20 +1075,20 @@ STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Mostrar STR_GAME_OPTIONS_GRAPHICS :{BLACK}Gráficos STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Taxa de atualização da tela -STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Selecione qual taxa de atualização da tela será usada +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Selecionar qual taxa de atualização da tela será usada STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Taxas de atualização superiores a 60Hz podem interferir no desempenho. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos base -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecione qual conjunto de gráficos base usar (não pode ser alterado no jogo, só a partir do menu principal) +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecionar qual conjunto de gráficos base usar (não pode ser alterado no jogo, só a partir do menu principal) STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Informações adicionais sobre o conjunto de gráficos base STR_GAME_OPTIONS_BASE_SFX :{BLACK}Conjunto de sons base -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Selecione qual conjunto de sons base usar (não pode ser alterado no jogo, só a partir do menu principal) +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Selecionar qual conjunto de sons base usar (não pode ser alterado no jogo, só a partir do menu principal) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Informações sobre o conjunto de sons base STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Conjunto de músicas base -STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selecione qual conjunto de músicas base usar +STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selecionar qual conjunto de músicas base usar STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Informação adicional sobre o conjunto de músicas base STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(não exitem plugins para integrar com as plataformas sociais instaladas) @@ -1134,10 +1134,10 @@ STR_CURRENCY_INCREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Mudar pa STR_CURRENCY_PREVIEW :{LTBLUE}Pré-visualização: {ORANGE}{CURRENCY_LONG} STR_CURRENCY_CUSTOM_CURRENCY_PREVIEW_TOOLTIP :{BLACK}10000 Libras (£) na sua moeda -STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Alterar o parâmetro de moeda personalizada +STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Modificar o parâmetro de moeda personalizada STR_NONE :Nenhum -STR_FUNDING_ONLY :Apenas financiamento +STR_FUNDING_ONLY :Somente financiamento STR_MINIMAL :Mínimo STR_NUM_VERY_LOW :Muito baixo STR_NUM_LOW :Baixo @@ -1219,17 +1219,17 @@ STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{O STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor padrão: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipo de configuração: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE_CLIENT :Configuração de cliente (não é armazenada em jogos salvos; afeta todos os jogos) -STR_CONFIG_SETTING_TYPE_GAME_MENU :Configuração do jogo (armazenado no jogo salvo; afeta apenas novos jogos) -STR_CONFIG_SETTING_TYPE_GAME_INGAME :Configuração do jogo (armazenado no jogo salvo; afeta apenas o jogo atual) -STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Configuração da empresa (armazenada no jogo salvo; afeta apenas novos jogos) -STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Configuração da empresa (armazenada no jogo salvo; afeta apenas a empresa atual) +STR_CONFIG_SETTING_TYPE_GAME_MENU :Configuração do jogo (armazenado no jogo salvo; afeta somente novos jogos) +STR_CONFIG_SETTING_TYPE_GAME_INGAME :Configuração do jogo (armazenado no jogo salvo; afeta somente o jogo atual) +STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Configuração da empresa (armazenada no jogo salvo; afeta somente novos jogos) +STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Configuração da empresa (armazenada no jogo salvo; afeta somente a empresa atual) STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Cuidado! STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Esta ação irá restaurar todas as configurações do jogo para os seus valores padrão.{}Tem certeza de que deseja continuar? STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoria: STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo: STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Restringe a lista abaixo usando filtros pré-definidos -STR_CONFIG_SETTING_RESTRICT_BASIC :Básico (mostrar apenas as configurações importantes) +STR_CONFIG_SETTING_RESTRICT_BASIC :Básico (mostrar somente as configurações importantes) STR_CONFIG_SETTING_RESTRICT_ADVANCED :Avançado (mostrar a maioria das configurações) STR_CONFIG_SETTING_RESTRICT_ALL :Especialista (mostrar todas as configurações, incluindo as estranhas) STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Configurações com um valor diferente do padrão @@ -1238,10 +1238,10 @@ STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Configurações STR_CONFIG_SETTING_TYPE_DROPDOWN_HELPTEXT :{BLACK}Restringe a lista abaixo a determinados tipos STR_CONFIG_SETTING_TYPE_DROPDOWN_ALL :Todos os tipos de configuração STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Configuração do cliente (não armazenada no jogo salvo; afeta todos os jogos) -STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Configurações do jogo (armazenadas no jogo salvo; afeta apenas novos jogos) -STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Configurações do jogo (armazenadas no jogo salvo; afeta apenas o jogo atual) -STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Configurações da empresa (armazenadas no jogo salvo; afeta apenas novos jogos) -STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Configurações da empresa (armazenadas no jogo salvo; afeta apenas a empresa atual) +STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Configurações do jogo (armazenadas no jogo salvo; afeta somente novos jogos) +STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Configurações do jogo (armazenadas no jogo salvo; afeta somente o jogo atual) +STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Configurações da empresa (armazenadas no jogo salvo; afeta somente novos jogos) +STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Configurações da empresa (armazenadas no jogo salvo; afeta somente a empresa atual) STR_CONFIG_SETTINGS_NONE :{WHITE}- Nenhum - ###length 3 @@ -1362,7 +1362,7 @@ STR_CONFIG_SETTING_FORBID_90_DEG :Proibir trens d STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas em 90 graus ocorrem quando uma via horizontal é seguida imediatamente por outra vertical em um quadrado adjacente, fazendo com que o trem vire 90 graus quando passa de um quadrado para o próximo, ao invés dos habituais 45 graus para as outras combinações de vias. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permitir a união de estações não adjacentes: {STRING} -STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite adicionar partes a uma estação sem tocar diretamente nas partes já existentes usando Ctrl+Clique quando for adicionar partes novas +STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite acrescentar partes a uma estação sem tocar diretamente nas partes já existentes, usando Ctrl+Clique enquanto coloca as novas partes STR_CONFIG_SETTING_INFLATION :Inflação: {STRING} STR_CONFIG_SETTING_INFLATION_HELPTEXT :Permitir inflação na economia, na qual os custos aumentam ligeiramente mais depressa do que as receitas @@ -1408,7 +1408,7 @@ STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Novas ordens s STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalmente, um veículo irá parar em cada estação por onde passa. Ativando esta configuração, o veículo passará por todas as estações na sua rota, sem parar, até o destino final. Esta opção define somente um modo padrão para novas ordens. Ordens individuais podem ser definidas explicitamente para qualquer um dos dois comportamentos STR_CONFIG_SETTING_STOP_LOCATION :Novas ordens de trem, por padrão, têm parada no {STRING} da plataforma -STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Local padrão onde um trem irá parar na plataforma. No 'início' significa próximo à entrada, 'meio' significa no meio da plataforma e 'final' significa parar na saída da plataforma. Esta opção apenas define um padrão para as novas ordens. Ordens individuais podem ter o local de parada definido clicando no texto da ordem +STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Local padrão onde um trem irá parar na plataforma. No 'início' significa próximo à entrada, 'meio' significa no meio da plataforma e 'final' significa parar na saída da plataforma. Esta opção define somente um padrão para as novas ordens. Ordens individuais podem ter o local de parada definido clicando no texto da ordem ###length 3 STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :início STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :meio @@ -1418,7 +1418,7 @@ STR_CONFIG_SETTING_AUTOSCROLL :Mover a janela STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Quando ativado, as visualizações começarão a se mover quando o mouse se aproximar das bordas da janela ###length 4 STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Desativado -STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Visualização principal, apenas em tela cheia +STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Visualização principal, somente em tela cheia STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Visualização principal STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Todas as visualizações @@ -1462,7 +1462,7 @@ STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permitir estaç STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Permitir a construção de estações de passagem nas estradas que pertencem às localidades STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Permitir estações de passagem nas estradas dos concorrentes: {STRING} STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Permitir a construção de estações de passagem nas estradas que pertencem a outras empresas -STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Não é possível alterar essa configuração quando já existem veículos +STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Não é possível alterar esta configuração quando já existem veículos STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Manutenção de infraestrutura: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Quando ativado, a infraestrutura gera custos de manutenção. O custo aumenta proporcionalmente com o tamanho da rede de transportes, afetando mais as empresas maiores do que as menores @@ -1555,7 +1555,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Tipo de terreno: {STRING} -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Apenas TerraGenesis) Relevo do terreno +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Escolher a altura das colinas e montanhas da paisagem STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densidade de indústrias: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Define quantas indústrias devem ser geradas e que nível deve ser mantido durante o jogo @@ -1564,14 +1564,14 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distância máx STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limite de distância entre a borda do mapa e o local de construção de refinarias e plataformas de petróleo. Em mapas de ilhas isso garante que elas fiquem perto da costa. Em mapas com mais de 256 quadrados esse valor é aumentado. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altura da linha de neve: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Escolher a que altura a neve começa na paisagem subártica. A neve também afeta a geração de indústrias e os requisitos de crescimento das localidades. Só pode ser modificado no Editor de Cenário ou então é calculado usando a "cobertura de neve" +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Escolher a que altura a neve começa na paisagem subártica. A neve também afeta a geração de indústrias e os requisitos de crescimento das localidades. Pode ser modificado somente no Editor de Cenário ou então é calculado usando a "cobertura de neve" STR_CONFIG_SETTING_SNOW_COVERAGE :Cobertura de neve: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de neve na paisagem subártica. A neve também afeta a geração das indústrias e os requisitos para crescimento das localidades. Usado apenas durante a geração do mapa. O nível do mar e as suas encostas nunca têm neve. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de neve na paisagem subártica. A neve também afeta a geração das indústrias e os requisitos para crescimento das localidades. Usado somente durante a geração do mapa. O nível do mar e as suas encostas nunca têm neve. STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Cobertura do deserto: {STRING} -STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de deserto na paisagem tropical. O deserto também afeta a geração das indústrias. Usado apenas durante a geração do mapa +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de deserto na paisagem tropical. O deserto também afeta a geração das indústrias. Usado somente durante a geração do mapa STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Irregularidade do terreno: {STRING} @@ -1620,7 +1620,7 @@ STR_CONFIG_SETTING_SERVICEATHELIPAD :Manutenção au STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Efetuar manutenção de helicópteros após cada pouso, mesmo se não existir um depósito no aeroporto STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Ligar ferramentas de paisagismo com ferramentas de trilhos/estradas/água/aeroportos: {STRING} -STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Quando abrir uma barra de ferramentas para um tipo de transporte, abrir também a barra de terraplanagem +STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Quando abrir uma barra de ferramentas para um tipo de transporte, também abrir a barra de terraplanagem STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :Cor do solo usada no minimapa: {STRING} STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Cor do terreno no minimapa @@ -1658,8 +1658,8 @@ STR_CONFIG_SETTING_LIVERIES_NONE :Nenhum STR_CONFIG_SETTING_LIVERIES_OWN :Própria empresa STR_CONFIG_SETTING_LIVERIES_ALL :Todas as empresas -STR_CONFIG_SETTING_PREFER_TEAMCHAT :Preferir chat de equipe com : {STRING} -STR_CONFIG_SETTING_PREFER_TEAMCHAT_HELPTEXT :Troca o mapeamento entre o chat interno da empresa e o chat público para e respectivamente +STR_CONFIG_SETTING_PREFER_TEAMCHAT :Preferência de chat em equipe com : {STRING} +STR_CONFIG_SETTING_PREFER_TEAMCHAT_HELPTEXT :Trocar o mapeamento entre o chat interno da empresa e o chat público para e , respectivamente STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :Velocidade da roda do mouse no mapa: {STRING} STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Controla a sensibilidade da roda do mouse na rolagem @@ -1745,7 +1745,7 @@ STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Último dispon STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Mais utilizado STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Mostrar caminhos reservados para trajetos: {STRING} -STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Destacar os trajetos reservados com uma cor diferente para ajudar em problemas com trens que se recusam a passar por seções controlados por sinais de caminho +STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Destacar os trajetos reservados com uma cor diferente para ajudar em problemas com trens que se recusam a entrar em seções controlados por sinais de caminho STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Manter as ferramentas de construção ativas após o uso: {STRING} STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Manter ativas as ferramentas de construção para pontes, túneis, etc. após o uso @@ -1870,16 +1870,16 @@ STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE :Fechamento de i STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE_HELPTEXT :Mostrar um jornal quando uma indústria fechar STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES :Mudanças econômicas: {STRING} -STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES_HELPTEXT :Mostrar um jornal quando ocorrem mudanças globais na economia +STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES_HELPTEXT :Mostrar um jornal quando ocorrem alterações globais na economia STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY :Mudanças na produção das indústrias servidas pela empresa: {STRING} -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :Mostrar um jornal quando mudar o nível de produção das indústrias que são atendidas pela empresa +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :Mostrar um jornal quando ocorre alteração no nível de produção das indústrias que são atendidas pela empresa STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER :Mudanças na produção das indústrias servidas pelo(s) concorrente(s): {STRING} -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :Mostrar um jornal quando mudar o nível de produção das indústrias que são atendidas pelos concorrentes +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :Mostrar um jornal quando ocorre alteração no nível de produção das indústrias que são atendidas pelos concorrentes -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Outras mudanças de produção das indústrias: {STRING} -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Mostrar um jornal quando mudar o nível de produção das indústrias que não são atendidas pela empresa ou por concorrentes +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Mudanças na produção de outras indústrias: {STRING} +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Mostrar um jornal quando ocorre alteração no nível de produção das indústrias que não são atendidas pela empresa ou por concorrentes STR_CONFIG_SETTING_NEWS_ADVICE :Avisos / informações sobre os veículos da empresa: {STRING} STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Mostrar mensagens sobre veículos que requerem atenção @@ -1887,7 +1887,7 @@ STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Mostrar mensage STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Novos veículos: {STRING} STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Mostrar um jornal quando é disponibilizado um novo tipo de veículo -STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Alterações de aceitação de carga: {STRING} +STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Mudanças de aceitação de carga: {STRING} STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Exibir mensagens quando estações alterarem a aceitação de algumas cargas STR_CONFIG_SETTING_NEWS_SUBSIDIES :Subsídios: {STRING} @@ -1911,7 +1911,7 @@ STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nunca STR_CONFIG_SETTING_ECONOMY_TYPE :Tipo de economia: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Economia 'Suave' faz mudanças de produção com mais frequência e em etapas menores. Economia 'Congelada' não permite mudanças de produção e fechamentos de indústrias. Esta configuração pode não ter efeito se os tipos de indústria forem fornecidos por um NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Economia 'Suave' faz alterações de produção com mais frequência e em etapas menores. Economia 'Congelada' não permite alterações de produção e fechamentos de indústrias. Esta configuração pode não ter efeito se os tipos de indústria forem fornecidos por um NewGRF. ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Suave @@ -1927,18 +1927,18 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Quando arrastar STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Selecionar o comportamento da colocação de sinais ao usar Ctrl+Arrastar. Se desativado, sinais são colocados ao redor de túneis ou pontes para evitar seções longas sem sinais. Se ativado, sinais são colocados a cada N quadrados, facilitando o alinhamento de sinais em linhas paralelas STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Usar automaticamente semáforos antes de: {STRING} -STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Definir o ano em que os sinais elétricos serão usados nas linhas. Antes deste ano, sinais não-elétricos serão usados (eles possuem a mesma funcionalidade, mas aspecto diferente) +STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Definir o ano em que os sinais elétricos serão usados nas ferrovias. Antes deste ano, sinais não-elétricos serão usados (eles possuem a mesma funcionalidade, mas aspecto diferente) STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Alternar entre tipos de sinais: {STRING} -STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Selecionar os tipos de sinal a serem alternados quando usar Ctrl+Clique em um sinal existente com a ferramenta de sinais +STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Selecionar os tipos de sinal a serem alternados quando usar Ctrl+Clique em um sinal construído com a ferramenta de sinais ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :Apenas grupo atual +STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :Somente grupo atual STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Todos visíveis STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Mostrar tipos de sinais: {STRING} STR_CONFIG_SETTING_SIGNAL_GUI_MODE_HELPTEXT :Escolher quais tipos de sinais são mostrados na barra de ferramentas de sinais ###length 2 -STR_CONFIG_SETTING_SIGNAL_GUI_MODE_PATH :Apenas sinais de caminho +STR_CONFIG_SETTING_SIGNAL_GUI_MODE_PATH :Somente sinais de caminho STR_CONFIG_SETTING_SIGNAL_GUI_MODE_ALL_CYCLE_PATH :Todos os sinais STR_CONFIG_SETTING_TOWN_LAYOUT :Disposição de estradas para novas localidades: {STRING} @@ -1956,7 +1956,7 @@ STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Localidades pod STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Quando ativada, esta configuração permite que as localidades construam passagens de nível STR_CONFIG_SETTING_NOISE_LEVEL :Limitar a localização do aeroporto em função do nível de ruído: {STRING} -STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Permitir que as localidades impeçam a construção de aeroportos em função do nível de aceitação de ruído, que é baseado no total de habitantes da localidade e no tamanho e distância do aeroporto. Se esta configuração estiver desativada, as localidades permitirão apenas dois aeroportos, a menos que a atitude da autoridade local esteja definida como "Permissiva" +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Permitir que as localidades impeçam a construção de aeroportos em função do nível de aceitação de ruído, que é baseado no total de habitantes da localidade e no tamanho e distância do aeroporto. Se esta configuração estiver desativada, as localidades permitirão somente dois aeroportos, a menos que a atitude da autoridade local esteja definida como "Permissiva" STR_CONFIG_SETTING_TOWN_FOUNDING :Fundar localidades no jogo: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Quando ativada, esta configuração permite aos jogadores fundar novas localidades no jogo @@ -1975,7 +1975,7 @@ STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Surgimento de STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controla o aparecimento aleatório de árvores durante o jogo. Isto poderá afetar indústrias que dependem do crescimento de árvores, como as madeireiras ###length 4 STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Crescer sem espalhar {RED}(afeta madeireiras) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Crescer mas espalhar apenas em florestas tropicais +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Crescer mas espalhar somente em florestas tropicais STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Crescer e espalhar em todos os lugares STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Não crescer e não espalhar {RED}(afeta madeireiras) @@ -2031,7 +2031,7 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador d STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamanho médio das cidades em relação às localidades normais no início do jogo STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Atualizar a distribuição a cada {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo entre recálculos subsequentes da rede de conexões. Cada recálculo atualiza os planos para um componente da rede. Isso significa que um valor X para esta configuração não significa que toda a rede será atualizada a cada X segundos. Apenas algum componente será atualizado. Quanto menor o tempo definido, mais tempo de CPU será necessário para calculá-lo. Quanto maior o valor definido, mais tempo será necessário até que a distribuição de carga inicie nas novas rotas. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo entre recálculos subsequentes da rede de conexões. Cada recálculo atualiza os planos para um componente da rede. Isso significa que um valor X para esta configuração não significa que toda a rede será atualizada a cada X segundos. Somente algum componente será atualizado. Quanto menor o tempo definido, mais tempo de CPU será necessário para calculá-lo. Quanto maior o valor definido, mais tempo será necessário até que a distribuição de carga inicie nas novas rotas. STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Usar {STRING} para recalcular a distribuição STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo gasto para cada recálculo de um componente da rede de conexões. Quando um recálculo é iniciado, uma tarefa é gerada e pode ser executada por esse número de segundos. Quanto menor for esse valor, maior a chance de que a tarefa não seja concluída quando deveria. Então o jogo para até que ela seja completada, causando um atraso. Quanto maior for esse valor, mais tempo será necessário para a distribuição ser atualizada quando as rotas mudam. @@ -2040,7 +2040,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" si STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modo de distribuição para correspondências: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simétrico" significa que aproximadamente a mesma quantidade de correspondência será enviada de uma estação A para uma estação B, assim como de B para A. "Assimétrica" significa que quantidades arbitrárias de correspondência podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática de correspondências. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Modo de distribuição para a classe de carga BLINDADA: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe de carga BLINDADA contém objetos de valor em clima temperado, diamantes em clima subtropical ou ouro em clima subártico. NewGRFs podem mudar isso. "Simétrica" significa que aproximadamente a mesma quantidade dessa carga será enviada de uma estação A para uma estação B, assim como de B para A. "Assimétrica" significa que quantidades arbitrárias dessa carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática para aquela carga. Recomenda-se definir isso como assimétrico ou manual ao jogar subártico ou subtropical, pois os bancos só recebem carga nesses climas. Para temperado, você também pode escolher simétrico, pois os bancos enviarão objetos de valor de volta ao banco de origem. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe de carga BLINDADA contém objetos de valor em clima temperado, diamantes em clima subtropical ou ouro em clima subártico. NewGRFs podem modificar isso. "Simétrica" significa que aproximadamente a mesma quantidade dessa carga será enviada de uma estação A para uma estação B, assim como de B para A. "Assimétrica" significa que quantidades arbitrárias dessa carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática para aquela carga. Recomenda-se definir isso como assimétrico ou manual ao jogar subártico ou subtropical, pois os bancos só recebem carga nesses climas. Para temperado, você também pode escolher simétrico, pois os bancos enviarão objetos de valor de volta ao banco de origem. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Modo de distribuição para outras classes de carga: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Assimétrico" significa que quantidades arbitrárias de carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática dessas cargas. ###length 3 @@ -2057,7 +2057,7 @@ STR_CONFIG_SETTING_DEMAND_SIZE :Quantidade de c STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Definindo isto para menos de 100% faz com que a distribuição simétrica comporte-se mais como a assimétrica. Menos carga será forçadamente devolvida se uma certa quantidade for enviada a uma estação. Se você definir para 0% a distribuição simétrica se comportará exatamente como a assimétrica. STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturação de rotas curtas antes de usar rotas de grande capacidade: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequentemente há diversas rotas entre duas estações. Cargodist irá saturar a rota mais curta primeiro, depois usar a segunda rota mais curta até saturá-la, e assim por diante. A saturação é determinada por uma estimativa da capacidade e da utilização prevista. Ao saturar todas as rotas, se ainda houver demanda não atendida, CargoDist irá sobrecarregar todas as rotas, dando preferência àquelas de maior capacidade. Entretanto, na maioria das vezes o algoritmo não irá estimar corretamente a capacidade. Esta configuração permite definir até que porcentagem uma rota mais curta deverá ser saturada na primeira passada antes do algoritmo selecionar a próxima rota mais longa. Defina-o para menos de 100% para evitar estações sobrecarregadas no caso de capacidade superestimada. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequentemente há diversas rotas entre duas estações. Cargodist irá saturar a rota mais curta primeiro, depois usar a segunda rota mais curta até saturá-la, e assim por diante. A saturação é determinada por uma estimativa da capacidade e da utilização prevista. Ao saturar todas as rotas, se ainda existir demanda não atendida, CargoDist irá sobrecarregar todas as rotas, dando preferência àquelas de maior capacidade. Entretanto, na maioria das vezes o algoritmo não irá estimar corretamente a capacidade. Esta configuração permite definir até que porcentagem uma rota mais curta deverá ser saturada na primeira passada antes do algoritmo selecionar a próxima rota mais longa. Defina-o para menos de 100% para evitar estações sobrecarregadas no caso de capacidade superestimada. STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unidades de velocidade (terrestre): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Unidades de velocidade (náutica): {STRING} @@ -2251,7 +2251,7 @@ STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Editar STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Editar a altura máxima das montanhas no mapa STR_CHEAT_CHANGE_DATE :{LTBLUE}Alterar data: {ORANGE}{DATE_SHORT} STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Alterar ano atual -STR_CHEAT_SETUP_PROD :{LTBLUE}Ativar modificação de valores de produção: {ORANGE}{STRING} +STR_CHEAT_SETUP_PROD :{LTBLUE}Ativar alteração de valores de produção: {ORANGE}{STRING} STR_CHEAT_STATION_RATING :{LTBLUE}Fixar classificações da estação em 100%: {ORANGE}{STRING} # Livery window @@ -2266,8 +2266,8 @@ STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Mostrar STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Mostrar cores dos grupos de veículos rodoviários STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Mostrar cores dos grupos de embarcações STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Mostrar cores dos grupos de aeronaves -STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Escolher a cor principal para o esquema selecionado. Ctrl+Clique para definir esta cor para todos os esquemas -STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Escolher a cor secundária para o esquema selecionado. Ctrl+Clique para definir esta cor para todos os esquemas +STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Escolher a cor principal para o esquema selecionado. Ctrl+Clique define esta cor para todos os esquemas +STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Escolher a cor secundária para o esquema selecionado. Ctrl+Clique define esta cor para todos os esquemas STR_LIVERY_PANEL_TOOLTIP :{BLACK}Selecionar o esquema de cores a alterar ou esquemas múltiplos utilizando Ctrl+Clique. Clique na opção para usar o esquema de cores STR_LIVERY_TRAIN_GROUP_EMPTY :Não há grupos de trens configurados STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Não há grupos de veículos configurados @@ -2361,7 +2361,7 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Alterar ###length 3 STR_NETWORK_SERVER_VISIBILITY_LOCAL :Local STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Público -STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :Apenas por convite +STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :Somente por convite # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijogador @@ -2419,8 +2419,8 @@ STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adiciona STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Iniciar servidor STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Iniciar um servidor próprio -STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Introduza o seu nome -STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Introduza o endereço de servidor ou código de convite +STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Digite o seu nome +STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Digite o endereço de servidor ou código de convite # Start new multiplayer server STR_NETWORK_START_SERVER_CAPTION :{WHITE}Iniciar novo jogo multijogador @@ -2460,8 +2460,8 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Obtendo STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconectar -STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Introduza a senha -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Introduza a senha +STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Digite a senha +STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Digite a senha # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Jogadores conectados @@ -2521,7 +2521,7 @@ STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Tem cer STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Usar retransmissão? STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Erro ao estabelecer uma conexão entre você e o servidor.'{STRING}'Você gostaria de retransmitir essa sessão via '{STRING}'? STR_NETWORK_ASK_RELAY_NO :{BLACK}Não -STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Sim, apenas dessa vez +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Sim, desta vez STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Sim, não perguntar novamente STR_NETWORK_ASK_SURVEY_CAPTION :Participar de pesquisa automatizada? @@ -2535,7 +2535,7 @@ STR_NETWORK_SPECTATORS :Espectadores # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Não salvar a senha digitada -STR_COMPANY_PASSWORD_OK :{BLACK}Atribuir à empresa a nova senha +STR_COMPANY_PASSWORD_OK :{BLACK}Atribuir nova senha à empresa STR_COMPANY_PASSWORD_CAPTION :{WHITE}Senha da empresa STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Senha padrão da empresa STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Usar a senha desta empresa como padrão para novas empresas @@ -2559,7 +2559,7 @@ STR_NETWORK_CHAT_CLIENT :[Privado] {STRI STR_NETWORK_CHAT_TO_CLIENT :[Privado] Para {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_ALL :[Todos] {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_EXTERNAL :[{3:STRING}] {0:STRING}: {WHITE}{1:STRING} -STR_NETWORK_CHAT_OSKTITLE :{BLACK}Introduza a mensagem para conversar na rede +STR_NETWORK_CHAT_OSKTITLE :{BLACK}Digite a mensagem para conversar na rede # Network messages STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Não foram encontradas interfaces de rede ou o jogo foi compilado sem ENABLE_NETWORK @@ -2831,18 +2831,18 @@ STR_STATION_CLASS_WAYP_WAYPOINT :Ponto de contro # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Seleção de Sinais STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Mostrar/Ocultar tipos de sinais avançados -STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Sinal de Bloqueio (semáforo){}Este é o tipo mais básico de sinal, permitindo apenas um trem passar no mesmo bloco de linha ao mesmo tempo -STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Sinal de Entrada (semáforo){}Permanece verde enquanto houver um ou mais sinais de saída verdes na seção da linha. Caso contrário, ficará vermelho +STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Sinal de Bloqueio (semáforo){}Este é o tipo mais básico de sinal, permitindo que somente um trem esteja na mesma seção ao mesmo tempo +STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Sinal de Entrada (semáforo){}Permanece verde enquanto existir um ou mais sinais de saída verdes na seção seguinte da linha. Caso contrário, ficará vermelho STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Sinal de Saída (semáforo){}Funciona da mesma forma que o sinal de bloqueio, mas é necessário para ativar a cor correta nos pré-sinais de entrada e combinado. STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Sinal Combinado (semáforo){}O sinal combinado funciona simultaneamente como um sinal de entrada e de saída. Isto permite a construção de ramificações complexas de pré-sinais. -STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Sinal de Caminho (semáforo){}Um sinal de caminho que permite mais de um trem passar por um sinal de bloqueio ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Sinais de caminho padrões podem ser passados no sentido contrário -STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Sinal de Sentido Único(semáforo){}Um sinal de caminho que permite mais de um trem passar por um sinal de bloqueio ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Os sinais de sentido único não podem ser passados no sentido contrário -STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Sinal de Bloqueio (elétrico){}Este é o tipo mais básico de sinal, permitindo apenas um trem passar no mesmo bloco de linha ao mesmo tempo -STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Sinal de Entrada (elétrico){}Permanece verde enquanto houver um ou mais sinais de saída verdes na seção da linha. Caso contrário, ficará vermelho. +STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Sinal de Caminho (semáforo){}Um sinal de caminho que permite mais de um trem entrar em uma seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Sinais de caminho padrões podem ser passados no sentido contrário +STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Sinal de Sentido Único(semáforo){}Um sinal de caminho que permite mais de um trem entrar em uma seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Os sinais de sentido único não podem ser passados no sentido contrário +STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Sinal de Bloqueio (elétrico){}Este é o tipo mais básico de sinal, permitindo que somente um trem esteja na mesma seção ao mesmo tempo +STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Sinal de Entrada (elétrico){}Permanece verde enquanto existir um ou mais sinais de saída verdes na seção seguinte da linha. Caso contrário, ficará vermelho. STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Sinal de Saída (elétrico){}Funciona da mesma forma que o sinal de bloqueio, mas é necessário para ativar a cor correta nos pré-sinais de entrada e combinado. STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Sinal Combinado (elétrico){}O sinal combinado funciona simultaneamente como um sinal de entrada e de saída. Isto permite construir ramificações complexas de pré-sinais. -STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Sinal de Caminho (elétrico){}Um sinal de caminho que permite mais de um trem passar por um sinal de bloqueio ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Sinais de caminho padrões podem ser passados no sentido contrário -STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Sinal de Sentido Único (elétrico){}Um sinal de caminho que permite mais de um trem passar por um sinal de bloqueio ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Os sinais de sentido único não podem ser passados no sentido contrário +STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Sinal de Caminho (elétrico){}Um sinal de caminho que permite mais de um trem entrar em uma seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Sinais de caminho padrões podem ser passados no sentido contrário +STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Sinal de Sentido Único (elétrico){}Um sinal de caminho que permite mais de um trem entrar em uma seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Os sinais de sentido único não podem ser passados no sentido contrário STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Converter sinal{}Clique em um sinal existente para convertê-lo para o tipo e variante de sinal selecionado. Ctrl+Clique muda a variante existente. Shift+Clique mostra o custo estimado de conversão STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distância entre os sinais quando arrastar STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Diminuir a distância entre os sinais quando arrastar @@ -2872,7 +2872,7 @@ STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Constru STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Construir seção de estrada. Ctrl+Clique remove seção da estrada. Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Construir seção de linha de bonde. Ctrl+Clique remove seção da linha. Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Construir estrada usando o modo Autoestrada. Ctrl+Clique remove seção da estrada. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Construir linha de bonde usando o modo Autotrilho. Ctrl+Clique remove uma seção da linha. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Construir linha de bonde usando o modo Autotrilho. Ctrl+Clique remove seção da linha. Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construir depósito rodoviário (para compra e manutenção de veículos). Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construir depósito de bondes (para compra e manutenção de bondes). Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Construir estação de ônibus. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado @@ -3011,8 +3011,8 @@ STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Expandir STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Fazer com que todas as localidades cresçam ligeiramente STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nome da localidade: -STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Introduza o nome da localidade -STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Clique para introduzir o nome da localidade +STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Digite o nome da localidade +STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Clique para inserir o nome da localidade STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Nome aleatório STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Gerar novo nome aleatório @@ -3102,7 +3102,7 @@ STR_LAI_CLEAR_DESCRIPTION_ROUGH_LAND :Terreno irregul STR_LAI_CLEAR_DESCRIPTION_BARE_LAND :Terreno descoberto STR_LAI_CLEAR_DESCRIPTION_GRASS :Gramado STR_LAI_CLEAR_DESCRIPTION_FIELDS :Campos -STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Coberto de neve +STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Terreno coberto de neve STR_LAI_CLEAR_DESCRIPTION_DESERT :Deserto STR_LAI_RAIL_DESCRIPTION_TRACK :Ferrovia @@ -3141,7 +3141,7 @@ STR_LAI_TOWN_INDUSTRY_DESCRIPTION_UNDER_CONSTRUCTION :{STRING} (em co STR_LAI_TREE_NAME_TREES :Árvores STR_LAI_TREE_NAME_RAINFOREST :Floresta Tropical -STR_LAI_TREE_NAME_CACTUS_PLANTS :Cactos +STR_LAI_TREE_NAME_CACTUS_PLANTS :Plantas de cactos STR_LAI_STATION_DESCRIPTION_RAILROAD_STATION :Estação ferroviária STR_LAI_STATION_DESCRIPTION_AIRCRAFT_HANGAR :Hangar @@ -3279,7 +3279,7 @@ STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Tem cer STR_SAVELOAD_DIRECTORY :{STRING} (Diretório) STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Diretório raiz) -STR_SAVELOAD_OSKTITLE :{BLACK}Introduza um nome para salvar o jogo +STR_SAVELOAD_OSKTITLE :{BLACK}Digite um nome para o jogo que será gravado # World generation STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Geração de Mapas @@ -3368,7 +3368,7 @@ STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Altura d STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Pico mais elevado STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Cobertura com neve (em %) STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Cobertura com deserto (em %) -STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Mudar ano de início +STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Alterar ano de início # SE Map generation STR_SE_MAPGEN_CAPTION :{WHITE}Tipo de cenário @@ -3380,7 +3380,7 @@ STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Escolher STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Mover altura do terreno plano um nível abaixo STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Mover altura do terreno plano um nível acima -STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Mudar a altura do terreno plano +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Modificar a altura do terreno plano # Map generation progress STR_GENERATION_WORLD :{WHITE}Gerando Mundo... @@ -3429,7 +3429,7 @@ STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Definir STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}Mostrar parâmetros STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Alternar paleta STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Ativar/Desativar a paleta de NewGRF selecionado.{}Faça isso quando os gráficos deste NewGRF ficarem cor de rosa no jogo -STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Aplicar alterações +STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Aplicar modificações STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Procurar conteúdo que falta online STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP :{BLACK}Verificar se o conteúdo em falta pode ser encontrado online @@ -3455,10 +3455,10 @@ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Incompatí # NewGRF save preset window STR_SAVE_PRESET_CAPTION :{WHITE}Salvar predefinição STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lista de predefinições disponíveis, selecione uma para copiá-la como nome para a gravação abaixo -STR_SAVE_PRESET_TITLE :{BLACK}Introduzir um nome para a predefinição +STR_SAVE_PRESET_TITLE :{BLACK}Digite um nome para a predefinição STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Nome que está selecionado para a gravação da predefinição STR_SAVE_PRESET_CANCEL :{BLACK}Cancelar -STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Não mudar a predefinição +STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Não alterar a predefinição STR_SAVE_PRESET_SAVE :{BLACK}Salvar STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Salvar a predefinição com o nome selecionado @@ -3541,7 +3541,7 @@ STR_NEWGRF_ERROR_INDPROD_CALLBACK :Chamada de prod # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Cuidado! -STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Você está prestes a efetuar alterações em um jogo em andamento. Isto pode fazer o OpenTTD terminar abruptamente ou travar o jogo. Não envie relatórios de erros sobre estas questões.{}Tem certeza de que realmente deseja continuar? +STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Você está prestes a efetuar modificações em um jogo em andamento. Isto pode fazer o OpenTTD terminar abruptamente ou travar o jogo. Não envie relatórios de erros sobre estas questões.{}Tem certeza de que realmente deseja continuar? STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Não é possível adicionar arquivo: ID do GRF duplicado STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Arquivo correspondente não encontrado (GRF compatível carregado) @@ -3599,7 +3599,7 @@ STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Centrali STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Ir para a próxima placa STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Ir para a placa anterior -STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Introduza um nome para a placa +STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Digite um nome para a placa # Town directory window STR_TOWN_DIRECTORY_CAPTION :{WHITE}Localidades @@ -3748,7 +3748,7 @@ STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Selecion STR_STATION_LIST_CARGO_FILTER_ALL_AND_NO_RATING :Todos os tipos de carga e sem classificação STR_STATION_LIST_CARGO_FILTER_MULTIPLE :Vários tipos de carga STR_STATION_LIST_CARGO_FILTER_NO_CARGO_TYPES :Sem tipos de carga -STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :Apenas sem classificação de carga +STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :Somente sem classificação de carga STR_STATION_LIST_CARGO_FILTER_SELECT_ALL :Selecionar tudo e sem classificação STR_STATION_LIST_CARGO_FILTER_NO_RATING :Sem classificação de carga STR_STATION_LIST_CARGO_FILTER_EXPAND :Mostrar mais... @@ -3865,10 +3865,10 @@ STR_FINANCES_INTEREST_RATE :{WHITE}Juros do STR_FINANCES_MAX_LOAN :{WHITE}Empréstimo Máximo: {BLACK}{CURRENCY_LONG} STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG} -STR_FINANCES_BORROW_BUTTON :{BLACK}Pedir emprestado {CURRENCY_LONG} -STR_FINANCES_BORROW_TOOLTIP :{BLACK}Aumentar o empréstimo. Ctrl+Clique solicita o máximo possível -STR_FINANCES_REPAY_BUTTON :{BLACK}Pagar empréstimo {CURRENCY_LONG} -STR_FINANCES_REPAY_TOOLTIP :{BLACK}Pagar parte do empréstimo. Ctrl+Clique paga o máximo possível +STR_FINANCES_BORROW_BUTTON :{BLACK}Emprestar {CURRENCY_LONG} +STR_FINANCES_BORROW_TOOLTIP :{BLACK}Aumentar o valor do empréstimo. Ctrl+Clique para solicitar o máximo possível +STR_FINANCES_REPAY_BUTTON :{BLACK}Pagar {CURRENCY_LONG} +STR_FINANCES_REPAY_TOOLTIP :{BLACK}Pagar parte do empréstimo. Ctrl+Clique para pagar o máximo possível STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Infraestrutura # Company view @@ -3916,7 +3916,7 @@ STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Alterar STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nome da Empresa STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nome do Presidente -STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Introduza a quantia de dinheiro que você deseja dar +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Digite a quantia de dinheiro que você deseja dar STR_BUY_COMPANY_MESSAGE :{WHITE}Estamos à procura de uma empresa de transportes para comprar a nossa empresa.{}{}Você deseja comprar {COMPANY} por {CURRENCY_LONG}? STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Na aquisição hostil de {COMPANY} você irá adquirir todos os ativos, liquidar todos os empréstimos e pagar o valor de 2 anos de lucros.{}{}O total estimado é de {CURRENCY_LONG}.{}{}Você deseja continuar esta aquisição hostil? @@ -3944,7 +3944,7 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} e mais {NUM} ... -STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nomes de indústrias - Clique no nome para centralizar a visualização na indústria. Ctrl+Clique abr uma nova visualização na localização da indústria +STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nomes de indústrias - Clique no nome para centralizar a visualização na indústria. Ctrl+Clique abre uma nova visualização na localização da indústria STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Carga aceita: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Carga produzida: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Todos os tipos de carga @@ -4028,9 +4028,9 @@ STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COM STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - Clique em um grupo para listar todos os veículos do grupo. Clique+Arraste para organizar a hierarquia. STR_GROUP_CREATE_TOOLTIP :{BLACK}Clique para criar um grupo STR_GROUP_DELETE_TOOLTIP :{BLACK}Excluir o grupo selecionado -STR_GROUP_RENAME_TOOLTIP :{BLACK}Renomear o grupo selecionado +STR_GROUP_RENAME_TOOLTIP :{BLACK}Alterar o nome do grupo selecionado STR_GROUP_LIVERY_TOOLTIP :{BLACK}Alterar a pintura do grupo selecionado -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clique para excluir esse grupo da substituição automática global. Ctrl+Clique para excluir também os subgrupos. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clique para excluir esse grupo da substituição automática global. Ctrl+Clique para também excluir os subgrupos. STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Excluir grupo STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Tem certeza de que deseja excluir esse grupo e seus descendentes? @@ -4086,7 +4086,7 @@ STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagões STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Adaptável para: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Todos os tipos de carga STR_PURCHASE_INFO_NONE :Nenhuma -STR_PURCHASE_INFO_ENGINES_ONLY :Apenas locomotivas +STR_PURCHASE_INFO_ENGINES_ONLY :Somente locomotivas STR_PURCHASE_INFO_ALL_BUT :Todas menos {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Força de Tração Máx. : {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Autonomia: {GOLD}{COMMA} quadrados @@ -4175,7 +4175,7 @@ STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} ve STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Trens - arraste o veículo com o botão esquerdo do mouse para acrescentar/retirar do trem. Clique com o botão direito para informações. Ctrl+Clique para aplicar ambas as funções à sequência restante +STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Trens - arraste o veículo com o botão esquerdo do mouse para acrescentar/retirar do trem. Clique com o botão direito para informações. Ctrl+Clique para aplicar uma das funções à sequência restante STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Veículos - Clique com o botão direito em um veículo para informações STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Embarcações - Clique com o botão direito em uma embarcação para informações STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Aeronaves - Clique com o botão direito em uma aeronave para informações @@ -4296,7 +4296,7 @@ STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Selecion STR_REPLACE_VEHICLES_START :{BLACK}Iniciar Substituição de Veículos STR_REPLACE_VEHICLES_NOW :Substituir todos os veículos agora -STR_REPLACE_VEHICLES_WHEN_OLD :Substituir apenas veículos velhos +STR_REPLACE_VEHICLES_WHEN_OLD :Substituir somente veículos velhos STR_REPLACE_HELP_START_BUTTON :{BLACK}Pressione para iniciar a substituição do tipo de locomotiva selecionada à esquerda com o tipo de locomotiva selecionada à direita STR_REPLACE_NOT_REPLACING :{BLACK}Não substituindo STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Nenhum veículo selecionado @@ -4315,7 +4315,7 @@ STR_REPLACE_HELP_RAILTYPE :{BLACK}Selecion STR_REPLACE_HELP_ROADTYPE :{BLACK}Selecionar o tipo de estrada para o qual você deseja substituir os veículos ###next-name-looks-similar -STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Mostrar qual locomotiva substituirá a que está selecionada à esquerda, se houver selecionada +STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Mostrar qual locomotiva substituirá a que está selecionada à esquerda, se alguma foi selecionada STR_REPLACE_RAIL_VEHICLES :Trens STR_REPLACE_ELRAIL_VEHICLES :Locomotivas Elétricas STR_REPLACE_MONORAIL_VEHICLES :Monotrilhos @@ -4326,7 +4326,7 @@ STR_REPLACE_TRAM_VEHICLES :Bondes STR_REPLACE_REMOVE_WAGON :{BLACK}Remoção de vagões ({STRING}): {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}A substituição automática irá manter o trem com o mesmo comprimento removendo vagões (começando pela frente), se a substituição da locomotiva aumentar o comprimento do trem -STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl+Clique para aplicar também aos subgrupos +STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl+Clique para também aplicar aos subgrupos # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} @@ -4338,10 +4338,10 @@ STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Centrali STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Centralizar visualização na localização da aeronave. Clique duplo para seguir a aeronave na visualização principal. Ctrl+Clique abre uma nova visualização na localização da aeronave ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar trem para o depósito. Ctrl+Clique fará apenas manutenção -STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar veículo para o depósito. Ctrl+Clique fará apenas manutenção -STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar embarcação para o depósito. Ctrl+Clique fará apenas manutenção -STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar aeronave para o hangar. Ctrl+Clique fará apenas manutenção +STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar trem para o depósito. Ctrl+Clique para fazer apenas manutenção +STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar veículo para o depósito. Ctrl+Clique para fazer apenas manutenção +STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar embarcação para o depósito. Ctrl+Clique para fazer apenas manutenção +STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar aeronave para o hangar. Ctrl+Clique para fazer apenas manutenção ###length VEHICLE_TYPES STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Comprar uma cópia do trem incluindo todos os vagões. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado @@ -4361,10 +4361,10 @@ STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Adaptar STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Adaptar aeronave para transportar um tipo de carga diferente ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Mostrar ordens do trem. Ctrl+Clique para mostrar a tabela de horários do trem -STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Mostrar ordens do veículo. Ctrl+Clique para mostrar a tabela de horários do veículo -STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Mostrar ordens da embarcação. Ctrl+Clique para mostrar a tabela de horários da embarcação -STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Mostrar ordens da aeronave. Ctrl+Clique para mostrar a tabela de horários da aeronave +STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Mostrar ordens do trem. Ctrl+Clique mostra a tabela de horários do trem +STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Mostrar ordens do veículo. Ctrl+Clique mostra a tabela de horários do veículo +STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Mostrar ordens da embarcação. Ctrl+Clique mostra a tabela de horários da embarcação +STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Mostrar ordens da aeronave. Ctrl+Clique mostra a tabela de horários da aeronave ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Mostrar detalhes do trem @@ -4450,12 +4450,12 @@ STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Interval STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Intervalo de manutenção: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Última manutenção: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Última manutenção: {LTBLUE}{NUM} minuto{P "" s} atrás -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Aumentar o intervalo de manutenção em 10 dias. Ctrl+Clique para aumentar o intervalo de manutenção em 5 dias -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Aumentar o intervalo de manutenção em 5 minutos. Ctrl+Clique para aumentar o intervalo de manutenção em 1 minuto -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Aumentar o intervalo de manutenção em 10 por cento. Ctrl+Clique para aumentar o intervalo de manutenção em 5 por cento -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Diminuir o intervalo de manutenção em 10 dias. Ctrl+Clique para diminuir o intervalo de manutenção em 5 dias -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Diminuir o intervalo de manutenção em 5 minutos. Ctrl+Clique para diminuir o intervalo de manutenção em 1 minuto -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Diminuir o intervalo de manutenção em 10 por cento. Ctrl+Clique para diminuir o intervalo de manutenção em 5 por cento +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Aumentar o intervalo de manutenção em 10 dias. Ctrl+Clique aumenta o intervalo de manutenção em 5 dias +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Aumentar o intervalo de manutenção em 5 minutos. Ctrl+Clique aumenta o intervalo de manutenção em 1 minuto +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Aumentar o intervalo de manutenção em 10 por cento. Ctrl+Clique aumenta o intervalo de manutenção em 5 por cento +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Diminuir o intervalo de manutenção em 10 dias. Ctrl+Clique diminui o intervalo de manutenção em 5 dias +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Diminuir o intervalo de manutenção em 5 minutos. Ctrl+Clique diminui o intervalo de manutenção em 1 minuto +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Diminuir o intervalo de manutenção em 10 por cento. Ctrl+Clique diminui o intervalo de manutenção em 5 por cento STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Alterar o tipo de intervalo entre manutenções STR_VEHICLE_DETAILS_DEFAULT :Padrão @@ -4587,7 +4587,7 @@ STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Tempo de vida r STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Confiabilidade máxima ###next-name-looks-similar -STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Como comparar os dados do veículo com o valor introduzido +STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Como comparar os dados do veículo com o valor passado STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :é igual a STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :é diferente de STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :é menor que @@ -4598,10 +4598,10 @@ STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :é verdadeiro STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :é falso STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}O valor para comparar com os dados do veículo -STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Introduza um valor para comparar +STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Digite um valor para comparar STR_ORDERS_SKIP_BUTTON :{BLACK}Saltar -STR_ORDERS_SKIP_TOOLTIP :{BLACK}Saltar a ordem atual e iniciar a próxima. Ctrl+Clique para saltar até a ordem selecionada +STR_ORDERS_SKIP_TOOLTIP :{BLACK}Saltar a ordem atual e iniciar a próxima. Ctrl+Clique salta até a ordem selecionada STR_ORDERS_DELETE_BUTTON :{BLACK}Remover STR_ORDERS_DELETE_TOOLTIP :{BLACK}Remover a ordem selecionada @@ -4726,20 +4726,20 @@ STR_TIMETABLE_START_TOOLTIP :{BLACK}Selecion STR_TIMETABLE_START_SECONDS_QUERY :Segundos até o horário iniciar -STR_TIMETABLE_CHANGE_TIME :{BLACK}Alterar Tempo +STR_TIMETABLE_CHANGE_TIME :{BLACK}Modificar Tempo STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Alterar o período de tempo que a ordem selecionada deve durar. Ctrl+Clique define o tempo para todas as ordens STR_TIMETABLE_CLEAR_TIME :{BLACK}Apagar Tempo STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Apagar o período de tempo da ordem selecionada. Ctrl+Clique apaga o tempo de todas as ordens -STR_TIMETABLE_CHANGE_SPEED :{BLACK}Alterar limite de velocidade +STR_TIMETABLE_CHANGE_SPEED :{BLACK}Modificar limite de velocidade STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Alterar a velocidade máxima de viagem da ordem selecionada. Ctrl+Clique define a velocidade para todas as ordens STR_TIMETABLE_CLEAR_SPEED :{BLACK}Remover limite de velocidade STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Apagar a velocidade máxima de viagem da ordem selecionada. Ctrl+Clique apaga as velocidades para todas as ordens STR_TIMETABLE_RESET_LATENESS :{BLACK}Reiniciar o Contador de Atrasos -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reiniciar o contador de atrasos, assim o veículo ficará no horário. Ctrl+Clique para reiniciar todo o grupo, de modo que o veículo mais atrasado ficará pontual e todos os outros estarão antecipados +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reiniciar o contador de atrasos, assim o veículo ficará no horário. Ctrl+Clique reinicia todo o grupo, de modo que o veículo mais atrasado ficará pontual e todos os outros estarão antecipados STR_TIMETABLE_AUTOFILL :{BLACK}Preencher automaticamente STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Preencher o horário automaticamente com os valores da próxima viagem. Ctrl+Clique para tentar manter os tempos de espera @@ -5098,7 +5098,7 @@ STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... deve STR_ERROR_SHIP_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... deve estar parado em um depósito STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}... deve estar parado em um hangar -STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Trens só podem ser modificados quando estão parados em um depósito +STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Trens podem ser modificados somente quando estão parados em um depósito STR_ERROR_TRAIN_TOO_LONG :{WHITE}Trem muito longo STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Não é possível inverter a direção do veículo... STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}... composto por múltiplas unidades @@ -5131,7 +5131,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}É neces STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Ferrovia não adequada STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}É necessário remover a ferrovia primeiro STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Estrada de sentido único ou bloqueada -STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Passagens de nível não são permitidas para este tipo de linha +STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Passagens de nível não são permitidas para este tipo de trilho STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Passagens de nível não são permitidas para este tipo de estrada STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Não é possível construir sinais aqui... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Não é possível construir ferrovia aqui... @@ -5445,33 +5445,33 @@ STR_SV_AIRCRAFT_NAME :Aeronave #{COMM ###length 27 STR_SV_STNAME :{STRING} -STR_SV_STNAME_NORTH :{STRING} - Norte -STR_SV_STNAME_SOUTH :{STRING} - Sul -STR_SV_STNAME_EAST :{STRING} - Leste -STR_SV_STNAME_WEST :{STRING} - Oeste -STR_SV_STNAME_CENTRAL :{STRING} - Centro -STR_SV_STNAME_TRANSFER :{STRING} - Transbordo -STR_SV_STNAME_HALT :{STRING} - Parada -STR_SV_STNAME_VALLEY :{STRING} - Vale -STR_SV_STNAME_HEIGHTS :{STRING} - Colinas -STR_SV_STNAME_WOODS :{STRING} - Bosques -STR_SV_STNAME_LAKESIDE :{STRING} - Litoral -STR_SV_STNAME_EXCHANGE :{STRING} - Intercâmbio -STR_SV_STNAME_AIRPORT :{STRING} - Aeroporto -STR_SV_STNAME_OILFIELD :{STRING} - Petrolífera -STR_SV_STNAME_MINES :{STRING} - Minas -STR_SV_STNAME_DOCKS :{STRING} - Docas +STR_SV_STNAME_NORTH :{STRING}, Norte +STR_SV_STNAME_SOUTH :{STRING}, Sul +STR_SV_STNAME_EAST :{STRING}, Leste +STR_SV_STNAME_WEST :{STRING}, Oeste +STR_SV_STNAME_CENTRAL :{STRING}, Centro +STR_SV_STNAME_TRANSFER :{STRING}, Transbordo +STR_SV_STNAME_HALT :{STRING}, Parada +STR_SV_STNAME_VALLEY :Vale de {STRING} +STR_SV_STNAME_HEIGHTS :Colinas de {STRING} +STR_SV_STNAME_WOODS :Bosque de {STRING} +STR_SV_STNAME_LAKESIDE :Litoral de {STRING} +STR_SV_STNAME_EXCHANGE :{STRING}, Intercâmbio +STR_SV_STNAME_AIRPORT :Aeroporto de {STRING} +STR_SV_STNAME_OILFIELD :Petrolífera de {STRING} +STR_SV_STNAME_MINES :Minas de {STRING} +STR_SV_STNAME_DOCKS :Docas de {STRING} STR_SV_STNAME_BUOY :{STRING} STR_SV_STNAME_WAYPOINT :{STRING} ##id 0x6020 -STR_SV_STNAME_ANNEXE :{STRING} - Anexo -STR_SV_STNAME_SIDINGS :{STRING} - Desvios -STR_SV_STNAME_BRANCH :{STRING} - Ramal -STR_SV_STNAME_UPPER :{STRING} - Superior -STR_SV_STNAME_LOWER :{STRING} - Inferior -STR_SV_STNAME_HELIPORT :{STRING} - Heliporto -STR_SV_STNAME_FOREST :{STRING} - Floresta -STR_SV_STNAME_FALLBACK :{STRING} - Estação #{NUM} +STR_SV_STNAME_ANNEXE :{STRING}, Anexo +STR_SV_STNAME_SIDINGS :{STRING}, Desvios +STR_SV_STNAME_BRANCH :{STRING}, Ramal +STR_SV_STNAME_UPPER :Acima de {STRING} +STR_SV_STNAME_LOWER :Abaixo de {STRING} +STR_SV_STNAME_HELIPORT :Heliporto de {STRING} +STR_SV_STNAME_FOREST :Floresta de {STRING} +STR_SV_STNAME_FALLBACK :{STRING}, Estação #{NUM} ############ end of savegame specific region! diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index fa1ed4976d..bec5d35f33 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -388,7 +388,9 @@ STR_SORT_BY_TYPE :Tüüp STR_SORT_BY_TRANSPORTED :Veetud STR_SORT_BY_NUMBER :Number STR_SORT_BY_PROFIT_LAST_YEAR :Eelmise aasta kasum +STR_SORT_BY_PROFIT_LAST_PERIOD :Kasum eelmisel perioodil STR_SORT_BY_PROFIT_THIS_YEAR :Selle aasta kasum +STR_SORT_BY_PROFIT_THIS_PERIOD :Kasum sellel perioodil STR_SORT_BY_AGE :Vanus STR_SORT_BY_RELIABILITY :Tehnoseisund STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Täielik kandevõime veoseliigi kohta @@ -445,8 +447,8 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Avab ett STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Ava ettevõtte rahavoogude aruanne STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Ava ettevõtte ülevaade STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Näita juturaamatut -STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Näita eesmärke -STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Ava graafik +STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Ava eesmärgiloend +STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Ava ettevõtte graafikud ja kaubamaksumuste määrad STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Ava ettevõtete edetabel STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Uue tööstuse rajamise rahastamine või tööstuste registri avamine STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Ava ettevõtte rongide register. Jaotus- ja sõidukiregistrit vahetatakse Ctrl+klõpsu abil @@ -455,10 +457,10 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Ava ette STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Ava ettevõtte õhusõidukite register. Jaotus- ja sõidukiregistrit vahetatakse Ctrl+klõpsu abil STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Suurenda vaadet STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Vähenda vaadet -STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Ehita raudtee -STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Ehita maantee -STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Ehita trammiteid -STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Ehita laevakai +STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Ehita raudteetaristut +STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Ehita maanteetaristut +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Ehita trammiteetaristut +STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Ehita veeteetaristut STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Ehita lennuväli STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Ava riba maastikutarvikutega, millega saab maad tõsta/langetada, puid istutada, jne. STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Näita heli/muusika akent @@ -500,6 +502,7 @@ STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Seaded STR_SETTINGS_MENU_AI_SETTINGS :TI seaded STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :GameScript'i seaded STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-i seadistus +STR_SETTINGS_MENU_SANDBOX_OPTIONS :Liivakasti valikud STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Läbipaistvuse seadistus STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Näidatavad asustuste nimed STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Näidatavad jaamanimed @@ -580,14 +583,15 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Kustuta kõik t # About menu STR_ABOUT_MENU_LAND_BLOCK_INFO :Maa-ala andmed STR_ABOUT_MENU_HELP :Abi & kasutusjuhendid -STR_ABOUT_MENU_TOGGLE_CONSOLE :Lülita konsool sisse/välja +STR_ABOUT_MENU_TOGGLE_CONSOLE :Vahelda konsooli STR_ABOUT_MENU_AI_DEBUG :AI/GameScripti debugimine STR_ABOUT_MENU_SCREENSHOT :Ekraanipilt STR_ABOUT_MENU_SHOW_FRAMERATE :Näita kaadrisagedust STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD' kohta STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite aligner -STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Kontuuride kuvamine -STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Vaheta toon määrdunud plokil +STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Vahelda piirangkaste +STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Vahelda määrdunud plokkide värvimist +STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Vahelda vidinakontuure ###length 31 STR_DAY_NUMBER_1ST :1. @@ -664,6 +668,7 @@ STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Äraveet STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Ettevõtte tegevushinnang (suurim hinnang saab olla 1000) STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Firmaväärtused +STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Viimased 72 minutit STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Veotariifid STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Päeva transiidis @@ -673,7 +678,7 @@ STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLA STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Kõik välja STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Näita kõiki kaubatüüpe kaubamaksumuste määrade graafikul STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Ära näita kaubatüüpe kaubamaksumuste määrade graafikul -STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Lülita veoste graafik sisse/välja +STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Vahelda veoseliikide graafik sisse/välja STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Näita põhjalike tegevushinnanguid @@ -760,7 +765,7 @@ STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Vali 'uu STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}'Ezy Street' stiilis muusikaprogrammi valimine STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Vali 'isiklik 1' programm STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Vali 'isiklik 2' programm -STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Lülita lugude segamine sisse ja välja +STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Vahelda lugude segamine sisse/välja STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Näita muusikalugude valimise akent # Playlist window @@ -776,6 +781,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Vajuta l STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Vajuta laulule, et see eemaldada praegusest progammist (Custom1 või Custom2 ainult) # Highscore window +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Edukaimad ettevõtted STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Äriinimene STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Ettevõtja @@ -808,8 +814,8 @@ STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Näita k STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Näita kaardil veoliine STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Näita kaardil taimestikku STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Näita kaardil maaomanikke -STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Klõps tööstuse tüübil lülitab sisse/välja selle kuvamise. Ctrl+klõps lülitab välja kõik tüübid peale valitu. Teistkordne Ctrl+klõps lülitab sisse kõik tööstuse tüübid -STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Klõpsa ettevõttel, et tema varade kuvamine sisse/välja lülitada. Ctrl+klõps eemaldab valikust kõik teised ettevõtted. Teiskordne Ctrl+klõps valib välja kõik ettevõtted +STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Klõps tööstuse tüübil vaheldab selle näitamist. Ctrl+klõps lülitab välja kõik tüübid peale valitu. Teistkordne Ctrl+klõps lülitab sisse kõik tööstuse tüübid +STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Klõpsa ettevõttel, et vaheldada varade kuvamine näitamist. Ctrl+klõps eemaldab valikust kõik teised ettevõtted. Teiskordne Ctrl+klõps valib välja kõik ettevõtted STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Kaubale klõpsamine vahetab selle omaduse näitamist. Kõik teised kaubad keelatakse CTRL-klõpsuga. Kõik kaubad lubatakse järgmise CTRL-klõpsuga STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Sõiduteed @@ -868,6 +874,7 @@ STR_STATUSBAR_AUTOSAVE :{RED}VÄLPSALVE STR_STATUSBAR_SAVING_GAME :{RED}* * MÄNGU SALVESTAMINE * * STR_STATUSBAR_SPECTATOR :{WHITE}(vaatleja) +STR_STATUSBAR_INFINITE_MONEY :{WHITE}(lõpmatu raha) # News message history STR_MESSAGE_HISTORY :{WHITE}Sõnumite ajalugu @@ -965,6 +972,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Uus {STR STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Ava sõiduki jaole fokuseeritud jaoaken +STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}{STATION} ei võta enam vastu: {CARGO_LIST} STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION} võtab nüüd vastu: {CARGO_LIST} STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Toetuse pakkumine lõppes:{}{}{STRING.g} kohast {STRING} kohta {STRING} veoste eest ei maksta enam toetusi @@ -979,6 +987,8 @@ STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLAC STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Liikluskaos {TOWN} linnas!{}{}{STRING} poolt rahastatud teede renoveerimisprogramm toob 6 kuud häda ja viletsust mootorsõiduki juhtidele! STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}Liikluskaos {TOWN} linnas!{}{}{STRING} poolt rahastatud teede renoveerimisprogramm toob 6 minutit häda ja viletsust mootorsõiduki juhtidele! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transpordimonopol! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLACK}Asula {TOWN} kohalik omavalitsus allkirjastas leppe ettevõttega {STRING} vedude ainuõiguseks 12 kuuks! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}Asula {TOWN} kohalik omavalitsus allkirjastas leppe ettevõttega {STRING} vedude ainuõiguseks 12 minutiks! # Extra view window STR_EXTRA_VIEWPORT_TITLE :{WHITE}Vaateaken {COMMA} @@ -1000,6 +1010,8 @@ STR_GAME_OPTIONS_TAB_SOCIAL :Sotsiaal STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}Vali sotsiaalse integratsiooni seaded STR_GAME_OPTIONS_VOLUME :Helitase +STR_GAME_OPTIONS_SFX_VOLUME :Heliefektid +STR_GAME_OPTIONS_MUSIC_VOLUME :Muusika STR_GAME_OPTIONS_VOLUME_0 :0% STR_GAME_OPTIONS_VOLUME_25 :25% @@ -1090,6 +1102,7 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Märgi, STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Hetke draiver: {STRING} STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Liidese suurus +STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Lohista liugurit liidesesuuruse seadmiseks. Ctrl+lohistamisel pidevkohendamine STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Tuvasta automaatselt suurus STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Märgi see kast, et tuvastada liidese suurus automaatselt @@ -1122,20 +1135,21 @@ STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Vali, mi STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Värskendussagedused üle 60Hz võivad jõudlusele löögi anda. -STR_GAME_OPTIONS_BASE_GRF :{BLACK}Lähtegraafikakogu -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Valib kasutatava lähtegraafikakogu -STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Lisateave lähtegraafikakogu kohta +STR_GAME_OPTIONS_BASE_GRF :{BLACK}Põhigraafika komplekt +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Vali kasutatav põhigraafika komplekt (mängus ei saa muuta, ainult peamenüüst) +STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Lisateave põhigraafika komplekti kohta STR_GAME_OPTIONS_BASE_SFX :{BLACK}Lähtehelikogu -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Valib kasutatava lähtehelikogu +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Vali põhihelide komplekt (mängus ei saa muuta, ainult peamenüüst) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Lisateave lähtehelikogu kohta -STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Lähtemuusikakogu +STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Põhimuusika komplekt STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Valib kasutatava lähtemuusikakogu -STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Rohkem teavet lähtemuusikakogu kohta +STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Rohkem teavet põhimuusika komplekti kohta STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(puuduvad pistikprogrammid sotsiaalplatvormidega integreerumiseks) +STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{BLACK}{STRING} ({STRING}) STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :{BLACK}Platvorm: STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Pistikprogrammi olek: @@ -1160,6 +1174,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Langeta STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Tõsta oma valuuta väärtust naela (£) suhtes STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Määra oma valuuta kurss naela (£) suhtes +STR_CURRENCY_SEPARATOR :{LTBLUE}Eraldaja: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK} Määra oma valuuta kümnendkohtade eraldaja STR_CURRENCY_PREFIX :{LTBLUE}Eesliide: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Määra oma valuuta eesliide @@ -1255,6 +1271,7 @@ STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Ava kõi STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Sulge kõik STR_CONFIG_SETTING_RESET_ALL :{BLACK}Nulli kõik väärtused STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(seletus puudub) +STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{ORANGE}{STRING}{POP_COLOUR} STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Vaikeväärtus: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Seade liik: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE_CLIENT :Kliendiseade (ei salvestu koos mänguga; mõjutab kõiki mänge) @@ -1308,6 +1325,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Vasakul STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Keskel STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Paremal +STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}sekund{P 0 "" it} STR_CONFIG_SETTING_INFINITE_MONEY :Lõpmatu raha: {STRING} STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Võimaldab piiramatut kulutamist ja keelab ettevõtete pankrotid @@ -1352,7 +1370,7 @@ STR_CONFIG_SETTING_TRAIN_REVERSING :Keela rongide STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Kui on aktiveeritud, siis ei pööra rongid vahejaamades ringi isegi siis kui ringi pööramisel oleks teekond järgmisse sihtpunkti lühem STR_CONFIG_SETTING_DISASTERS :Katastroofid: {STRING} -STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Lülita sisse/välja katastroofid, mis aeg-ajalt hävitavad sõidukeid ja taristut +STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Vahelda katastroofe, mis mõnikord takistavad või hävitavad sõidukeid ja taristut STR_CONFIG_SETTING_CITY_APPROVAL :Kohaliku omavalitsuse suhtumine: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Vali kui suurt mõju tekitavad müra ning keskkonna muudatused ettevõtte mainele ja edasistele ehitustoimingutele asulas @@ -1508,6 +1526,8 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Taristuga kaasn STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Ettevõtte esialgne värv: {STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Vali ettevõttele esialgne värvus +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Alustava ettevõtte teine värv: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Vali alguse teine ettevõtte värv, kui kasutatav NewGRF seda toetab. STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aegumatud lennuväljad: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Selle seade sisse lülitamine jätab kõik lennujaamade tüübid avatuks lõpmata ajaks peale nende avanemist @@ -1525,19 +1545,28 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :Kõik sõidukid STR_CONFIG_SETTING_WARN_INCOME_LESS :Hoiata, kui sõiduk on miinuses: {STRING} ###length 2 STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Kui on aktiveeritud, siis teavitatakse mängijat sõidukitest mis ei ole viimase aasta jooksul suutnud kasumit teenida +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Kui aktiveeritud, saadetakse uudis, kui sõiduk ei ole ajavahemikus kasumit teeninud STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Sõidukid ei aegu: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kui on aktiveeritud, siis jäävad kõik sõidukite tüübid igavesti avatuks +STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Ajaarvamine: {STRING} +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Vali mängu ajaarvamise ühikud. Seda hiljem muuta ei saa.{}{}Kalendripõhine on traditsiooniline OpenTTD kogemus, kus aasta koosneb 12 kuust, ning igas kuus on 28-31 päeva.{}{}Seinakella-põhises ajas, veoste toodang ja raha põhinevad hoopis üheminutilistel järkudel, mis on umbes sama pikk, kui 30 päeva kalendripõhilises kuus. Need on jaotatud 12-minutilisteks ajavahemikeks, võrdne umbes kalendripõhise aastaga.{}{}Mõlemas on alati olemas traditsiooniline kalender, mida kasutatakse sõidukite esitluste kuupäevade, ehitiste ja muu taristu jaoks. ###length 2 +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalender +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Seinakell STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minuteid aastas: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Vali arv minuteid kalendriaastas. Vaikimisi 12 minutit. Valides 0 kalendriaeg ei muutu. Seade ei mõjuta mängu majandussimulatsiooni, ainult ajaarvamist. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Vali kalendriaasta pikkus minutites. Vaikimisi 12 minutit. Valides 0 kalendriaeg ei muutu. Seade ei mõjuta mängu majandussimulatsiooni, ainult ajaarvamist. STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (kalendriaeg külmutatud) +STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Skaleeri veosetoodangut linnades: {STRING} +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Skaleeri veosetoodangut linnades selle protsendiga. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Skaleeri tööstuse veosetoodangut: {STRING} +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skaleeri tööstuste veosetoodangut selle protsendiga. STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Vananenud sõidukite uuendamine: {STRING} @@ -1576,7 +1605,7 @@ STR_CONFIG_SETTING_LANDSCAPE :Maastik: {STRIN STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Maastikud määravad põhilised mängustsenaariumid erinevate veoste ja nõuetega asulate kasvamiseks. NewGRF ja GameScript abil saab siiski täpsemalt kontrollida STR_CONFIG_SETTING_LAND_GENERATOR :Maatekituse meetod: {STRING} -STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Originaalne generaator sõltub lähtegraafikast ja tekitab kindlaksmääratud maastikuvorme. TerraGenesis on Perlini müral põhinev generaator, mida saab täpsemalt seadistada +STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Originaalne generaator sõltub põhigraafika komplektist ja tekitab kindlaksmääratud maastikuvorme. TerraGenesis on Perlini müral põhinev generaator, mida saab täpsemalt seadistada ###length 2 STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Algupärane STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis @@ -1598,7 +1627,7 @@ STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Mõjutab umbkau STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Kõrbekatvus: {STRING} -STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Mõjuta umbkaudset kõrbe osakaalu troopilisel maastikul. Kõrb mõjutab ka tööstuste tekitamist. Kasutatakse vaid kaardi tekitamisel +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Mõjuta umbkaudset kõrbe osakaalu troopilisel maastikul. Kõrb mõjutab ka tööstuste tekitamist ja linnade kasvutingimusi. Kasutatakse vaid kaardi tekitamisel STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Maastiku järskus (ainult TerraGenesis) : {STRING} @@ -1630,6 +1659,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Vasakpoolne lii STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Parempoolne liiklus STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Kõrguskaardi pööre: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Vali, mis pidi kõrguskaardi pilti keeratakse, et mängumaailma mahutada ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Vastupäeva STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Päripäeva @@ -1958,6 +1988,7 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Määra aasta a STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Vaheta signaalide liike: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Muuda valitavaid signaaliliike, kui «Ctrl»+klõpsu abil muudetakse ehitatud signaali liiki ###length 2 +STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :Ainult praegune rühm STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Kõik nähtavad STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Näita signaali tüüpe: {STRING} @@ -2055,6 +2086,10 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Mitte ühtegi STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Algne linnade suuruskordaja: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Keskmine linna suurus võrreldes tavalise asulaga mängu alguses +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Uuenda jaotusgraafikut iga {STRING} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Aeg järjestikkuste ühendusgraafiku uuestiarvutamiste vahel. Iga uuestiarvutamine arvutab ühe graafikuosa plaane. See tähendab, et väärtus X selles seades ei tähenda, et tervet graafikut uuendatakse iga X sekund. Ainult ühte osa sellest. Mida lühem see on, seda rohkem kasutab arvutamine protessorit. Mida kauem see on, seda kauem algab teenuste jaotamine uutel marsruutidel. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Võta {STRING} jaotusgraafiku uuestiarvutamiseks +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Aeg iga ühendusgraafiku osa uuestiarvutamiseks. Kui uuestiarvutamine algab, tekitatakse lõim, mis võib joosta see arv sekundeid. Mida lühem, seda tõenäolisem, et lõim ei jõua õigeks ajaks valmis. Siis mäng peatub, kuni see on valmis ("viivitus"). Mida pikem see on, seda kauem läheb jaotamise uuendamiseks marsruutide muutmisel. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Reisijate jaotuse viis: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :Kui jaamast A läheb jaama B umbes sama hulk reisijaid, kui jaamast B jaama A, siis jaotus on «Sümeetriline». Kui mõlemas suunas võib liikuda ükskõik, kui palju resijaid, siis jaotus on «Asümeetriline». Kui reisijate liikumist ei jaotata, siis jaotus on «Väljas». @@ -2080,11 +2115,15 @@ STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Kui väärtus o STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Liikluskoormus, et otsida kõrgema läbilaskevõimega rada: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Kauba vedamisel ühest jaamast teise saab kasutada mitu rada. Kaubajaotusel arvestatakse läbilaskevõimet ja liikluskoormust. Kui liikluskoormus on suurem kui läbilaskevõime, suunatakse kaup kõigepealt kõrgema läbilaskevõimega radadele. Läbilaskevõime arvutamine ei ole täpne; antud seaded määravad liikluskoormuse millal kaup suunatakse järgmisele rajale. Ülekoormuse vältimiseks on soovitatav liikluskoormus alla 100%. -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Kiirusühikud: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Kiirusühikud (maal): {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Kiirusühikud (merel): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Liideses näidatakse kiirust valitud mõõdustikus STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Inglise mõõdustik (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Meetermõõdustik (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI-süsteem (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_DAYS :Mängu ühikud (ruutu/päev) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_SECS :Mängu ühikud (ruutu/sek) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :Sõlme STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Võimsusühikud: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Liideses näidatakse võimsust valitud mõõdustikus @@ -2134,14 +2173,17 @@ STR_CONFIG_SETTING_ACCOUNTING :Arveldamine STR_CONFIG_SETTING_VEHICLES :Sõidukid STR_CONFIG_SETTING_VEHICLES_PHYSICS :Füüsika STR_CONFIG_SETTING_VEHICLES_ROUTING :Marsruutimine +STR_CONFIG_SETTING_VEHICLES_ORDERS :Korraldused STR_CONFIG_SETTING_LIMITATIONS :Piirangud STR_CONFIG_SETTING_ACCIDENTS :Katastroofid / Õnnetused STR_CONFIG_SETTING_GENWORLD :Maailma tekitamine STR_CONFIG_SETTING_ENVIRONMENT :Keskkond +STR_CONFIG_SETTING_ENVIRONMENT_TIME :Aeg STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :Omavalitsus STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :Asulad STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Tööstused STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Kaubajaotus +STR_CONFIG_SETTING_ENVIRONMENT_TREES :Puud STR_CONFIG_SETTING_AI :Konkurendid STR_CONFIG_SETTING_AI_NPC :Arvuti STR_CONFIG_SETTING_NETWORK :Võrk @@ -2174,8 +2216,8 @@ STR_CONFIG_ERROR_INVALID_GRF_INCOMPATIBLE :Mitteühilduv s STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN :tundmatu STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_LEVEL :{WHITE}... tihendusaste «{STRING}» ei sobi STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}... mängu salvestamise vormingut «{STRING}» ei ole. Taastatakse «{STRING}» -STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... eiratakse lähtegraafikakogu «{STRING}»: ei leitud -STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... eiratakse lähtehelikogu «{STRING}»: ei leitud +STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... eiratakse põhigraafika komplekti «{STRING}»: ei leitud +STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... eiratakse põhihelide komplekti «{STRING}»: ei leitud STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... eiratakse lähtemuusikakogu «{STRING}»: ei leitud STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Vahemälu on täis STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Pildipuhvri (ingl k «spritecache») suurendamine {BYTES} võrra ebaõnnestus. Pildipuhvri uus suurus on {BYTES}. Seetõttu on OpenTTD nüüd aeglasem. 32 bpp graafika keelamine ja suurendusastme ülempiirangu vähendamine piirab vahemälu tarbimist @@ -2183,6 +2225,7 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Pildipuh # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Videoseadete viga... STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... ei leitud ühilduvat GPU-d. Riistvarakiirendus väljalülitatud +STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... Mäng seiskus graafikadraiveri pärast. Riistvarakiirendus lülitati välja # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -2196,6 +2239,7 @@ STR_INTRO_MULTIPLAYER :{BLACK}Mitmikm STR_INTRO_GAME_OPTIONS :{BLACK}Liidese seadistus STR_INTRO_HIGHSCORE :{BLACK}Edetabel +STR_INTRO_HELP :{BLACK}Abi & kasutusjuhendid STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Seaded STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF-i seadistus STR_INTRO_ONLINE_CONTENT :{BLACK}Aineste allalaadimine @@ -2217,14 +2261,15 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Vali 'm STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Ava liidese seadistamine STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Ava edetabel +STR_INTRO_TOOLTIP_HELP :{BLACK}Saa ligipääs dokumentatsioonile ja veebiressursidele STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Ava seaded STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Ava NewGRF-i seadistamine STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Otsi allalaadimiseks uusi ja uuendatud aineseid -STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Näita TI seadeid +STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Ava TI-seaded STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Näita GameSript'i seadeid STR_INTRO_TOOLTIP_QUIT :{BLACK}Välju 'OpenTTD'st -STR_INTRO_BASESET :{BLACK}Hetkel valitud lähtegraafikakogust puudub {NUM} sprite{P "" 'i}. Kontrolli, kas lähtekogule on uuendusi. +STR_INTRO_BASESET :{BLACK}Hetkel valitud põhigraafika komplektist puudub {NUM} sprite{P "" 'i}. Kontrolli, kas lähtekogule on uuendusi. STR_INTRO_TRANSLATION :{BLACK}Puudub {NUM} tõlge{P "" t}. Aita teha OpenTTD paremaks, panusta tõlkimisega. Rohkem teavet leiad «readme.txt» failist. # Quit window @@ -2263,6 +2308,7 @@ STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Muuda ka STR_CHEAT_CHANGE_DATE :{LTBLUE}Muuda kuupäeva: {ORANGE} {DATE_SHORT} STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Muuda jooksvat aastaarvu STR_CHEAT_SETUP_PROD :{LTBLUE}Tootmisväärtuste muutmine: {ORANGE}{STRING} +STR_CHEAT_STATION_RATING :{LTBLUE}Fikseeri 100% jaamahinnang: {ORANGE}{STRING} # Livery window STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Värvivalik @@ -2272,9 +2318,17 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Näita r STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Näita mootorsõidukite värvistikke STR_LIVERY_SHIP_TOOLTIP :{BLACK}Näita laevavärvistikke STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Näita õhusõidukite värvistikke +STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Näita rongirühmade värve +STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Näita sõidukirühmade värve +STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Näita laevarühmade värve +STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Näita õhusõidukirühmade värve STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Vali põhivärv värvistikule. Ctrl+Klikk valib selle värvi tervele värvistikule STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Vali teine värv valitud värvistikule. Ctrl+Klõps valib selle värvi tervele värvistikule STR_LIVERY_PANEL_TOOLTIP :{BLACK}Vali muudetav värvivalik - või mitu Ctrl+klõps abil. Klõpsa kastil, et muuta värvivaliku kasutust +STR_LIVERY_TRAIN_GROUP_EMPTY :Rongirühmi ei ole seadistatud +STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Sõidukirühmi ei ole seadistatud +STR_LIVERY_SHIP_GROUP_EMPTY :Laevarühmi ei ole seadistatud +STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Õhusõidukite rühmi ei ole seadistatud ###length 23 STR_LIVERY_DEFAULT :Firmavärv @@ -2500,6 +2554,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Loo uus STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Tema oled sina STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Tema on mängu korraldaja STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} klient{P "" i} - {NUM}/{NUM} ettevõt{P e teid} +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}Hetkel ühendatud klientide arv, ettevõtete arv ja ettevõtete arvu ülempiir, mida serveriadministraator lubab # Matches ConnectionType ###length 5 @@ -2527,9 +2582,11 @@ STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Jah, ain STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}jah, ära küsi uuesti STR_NETWORK_ASK_SURVEY_CAPTION :Osaleda automaatses uuringus? +STR_NETWORK_ASK_SURVEY_TEXT :Kas sooviksid osaleda automaatses uuringus?{}OpenTTD saadab uuringu mängust lahkumisel.{}Sa saad seda igal ajal "mängu seadistustes" muuta. STR_NETWORK_ASK_SURVEY_PREVIEW :Vaata uuringutulemust STR_NETWORK_ASK_SURVEY_LINK :Uuringust ja privaatsusest STR_NETWORK_ASK_SURVEY_NO :Ei +STR_NETWORK_ASK_SURVEY_YES :Ja STR_NETWORK_SPECTATORS :Vaatlejad @@ -2693,14 +2750,14 @@ STR_CONTENT_NO_ZLIB :{WHITE}OpenTTD STR_CONTENT_NO_ZLIB_SUB :{WHITE}... aineste allalaadimine pole võimalik! # Order of these is important! -STR_CONTENT_TYPE_BASE_GRAPHICS :Lähtegraafika +STR_CONTENT_TYPE_BASE_GRAPHICS :Põhigraafika STR_CONTENT_TYPE_NEWGRF :NewGRF STR_CONTENT_TYPE_AI :AI STR_CONTENT_TYPE_AI_LIBRARY :AI teek STR_CONTENT_TYPE_SCENARIO :Stsenaarium STR_CONTENT_TYPE_HEIGHTMAP :Kõrguskaart -STR_CONTENT_TYPE_BASE_SOUNDS :Lähtehelid -STR_CONTENT_TYPE_BASE_MUSIC :Lähtemuusika +STR_CONTENT_TYPE_BASE_SOUNDS :Põhihelid +STR_CONTENT_TYPE_BASE_MUSIC :Põhimuusika STR_CONTENT_TYPE_GAME_SCRIPT :Mängu skript STR_CONTENT_TYPE_GS_LIBRARY :GS teek @@ -2736,6 +2793,7 @@ STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Vaheta l STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Vaheta sildade läbipaistvust. Ctrl+klõps lukustab STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Vaheta läbipaistvust rajatistel, nagu majakad ja antennid. Ctrl+klõps lukustab STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Õhuliinide läbipaistvuse vahetamine. Ctrl+klõps lukustab +STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Vahelda laadimise ja kulu/tulu teksti läbipaistvust. Ctrl+klõps lukustab STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Muuda esemed nähtamatuks, mitte läbipaistvaks # Linkgraph legend window @@ -2760,7 +2818,7 @@ STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Keskmine sõi STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Mõjupiirkonna näitamine STR_STATION_BUILD_COVERAGE_OFF :{BLACK}Väljas STR_STATION_BUILD_COVERAGE_ON :{BLACK}Sees -STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Lülita välja jaama mõjupiirkonna näitamine +STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Lülita välja jaama mõjupiirkonna esiletõstmine STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Lülita sisse jaama mõjupiirkonna näitamine STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Võtab vastu: {GOLD}{CARGO_LIST} STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Tarnib: {GOLD}{CARGO_LIST} @@ -2791,7 +2849,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Ehita ra STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Ehita rööbastee signaale. Ctrl valib semaforide ja fooride vahel{}Hiirega lohistades paigaldatakse foore sirgel teelõigul. Ctrl paigaldab foorid kuni järgmise jaamani{}Ctrl+klõps avab foori valikuakna. Shift valib ehitamise/hinna kuvamise režiimi STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Ehita raudteesild. Shift valib ehitamise/hinna kuvamise režiimi STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Ehita rongitunnel. Shift valib ehitamise/hinna kuvamise režiimi -STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Vaheta rongitee, signaalide, meldepunktide ja jaamade ehitamise ja lammutamise vahel. Ctrl-klahviga eemaldatakse meldepunktid ja jaamad. +STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Vahelda rongitee, signaalide, meldepunktide ja jaamade ehitamist ja lammutamist. Ctrl-klõps eemaldab meldepunktid ja jaamad. STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Muuda/uuenda rööpaliiki. Shift valib ehitamise/hinna kuvamise režiimi STR_RAIL_NAME_RAILROAD :Raudtee @@ -2821,12 +2879,15 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Ehita ja STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Vali näidatav jaamajärk STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Vali näidatav jaamaliik -STR_STATION_CLASS_DFLT :Esialgne jaam +STR_STATION_CLASS_DFLT :Vaikimisi +STR_STATION_CLASS_DFLT_STATION :Vaikimisi jaam +STR_STATION_CLASS_DFLT_ROADSTOP :Vaikimisi peatus STR_STATION_CLASS_WAYP :Meldepunktid +STR_STATION_CLASS_WAYP_WAYPOINT :Vaikimisi punkt # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Signaali valik -STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Lülita sisse keerukate signaalitüüpide näitamine +STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Vahelda täiustatud signaalitüüpide näitamist STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Läbisõidusignaal (semafor){}Signaale läheb tarvis vältimaks kokkupõrkeid enam kui ühe rongiga rööbasteedel STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Sissesõidusignaal (semafor){}Roheline, kuni vähemalt üks väljasõidusignaal on roheline. Muudel juhtudel näitab punast STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Väljasõidusignaal (semafor){}Käitub samamoodi, nagu läbisõidusignaal, kuid läheb vaja et sissesõidu- ja mitmik-hoiatussignaalid näitaksid õiget värvi @@ -2875,7 +2936,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Ehita bu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Ehita reisitrammijaam. Ctrl võimaldab jaamasid ühendada. Shift valib ehitamise/hinna kuvamise režiimi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Ehita veokite laadimisplats. Ctrl võimaldab jaamasid ühendada. Shift valib ehitamise/hinna kuvamise režiimi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Ehita kaubatrammijaam. Ctrl võimaldab jaamasid ühendada. Shift valib ehitamise/hinna kuvamise režiimi -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Lülita ühesuunalised teed sisse/välja +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Aktiveeri/deaktiveeri ühesuunalised teed STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Ehita sild. Shift valib ehitamise/hinna kuvamise režiimi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Ehita trammisild. Shift valib ehitamise/hinna kuvamise režiimi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Ehita tunnel. Shift valib ehitamise/hinna kuvamise režiimi @@ -3304,6 +3365,7 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Vähenda STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Maapinna tüüp: STR_MAPGEN_SEA_LEVEL :{BLACK}Merepinna tase: +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Vali meretase STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Jõgesid: STR_MAPGEN_SMOOTHNESS :{BLACK}Laugus: STR_MAPGEN_VARIETY :{BLACK}Iseärasuste jaotus: @@ -3356,6 +3418,7 @@ STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Kõrgusk STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Kõrguskaardi nimi: STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}Kõrguskaardi pildifaili nimi STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Suurus: +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}Kõrguskaardi lähtepildi suurus. Parima tulemuse saab, kui iga külg kattub mõne OpenTTD-s oleva kaardikülje pikkusega, nagu 256, 512, 1024, jne. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Soovitud kõrgpunkt @@ -3370,6 +3433,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Tasane m STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Tekita tasane maa STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Suvaline maa STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Lameda maa kõrgus: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Vali maapinna kõrgus merepinnast STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Lameda maa kõrguse langetamine ühe võrra STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Lameda maa kõrguse tõstmine ühe võrra @@ -3420,8 +3484,8 @@ STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Nimekiri STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Vali parameetrid STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}Näita parameetreid -STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Vaheta paletti -STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Vaheta valitud NewGRF-i paletti.{}Tee seda, kui NewGRF-i graafika paistab mängus roosa. +STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Vahelda paletti +STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Vahelda valitud NewGRF-i paletti.{}Tee seda, kui NewGRF-i graafika paistab mängus roosa. STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Rakenda muudatused STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Otsi internetist vajalike aineseid @@ -3456,6 +3520,7 @@ STR_SAVE_PRESET_SAVE :{BLACK}Salvesta STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Salvesta eelseadistus praegusele valitud nimele # NewGRF parameters window +STR_BASEGRF_PARAMETERS_CAPTION :{WHITE}Muuda põhigraafika komplekti parameetreid STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Muuda NewGRF parameetreid STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Sulge STR_NEWGRF_PARAMETERS_RESET :{BLACK}Nulli @@ -3583,7 +3648,7 @@ STR_NEWGRF_SCAN_ARCHIVES :Arhiivide otsim # Sign list window STR_SIGN_LIST_CAPTION :{WHITE}Siltide register - {COMMA} silt{P "" i} STR_SIGN_LIST_MATCH_CASE :{BLACK}Tõstutundlik -STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Lülita sisse/välja tõstutundlikkuse kasutamine siltide filtreerimisel +STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Vahelda tõstutundlikkust siltide filtreerimisel otsinguteksti järgi # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Sildi muutmine @@ -3606,6 +3671,7 @@ STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Linn) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Rahvaarv: {ORANGE}{COMMA}{BLACK} Ehitisi: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} eelmisel kuul: {ORANGE}{COMMA}{BLACK} Kuni: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}{CARGO_LIST} eelmisel minutil: {ORANGE}{COMMA}{BLACK} kuni: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Asula kasvuks nõutud veosed: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} vajalik STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} on talvel vajalik @@ -3710,6 +3776,8 @@ STR_SUBSIDIES_NONE :{ORANGE}Mitte STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Juba toetatavad veoteenused: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} kohast {STRING} kohta {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Vajuta pakkumisele, et keskendada vaade tööstusele/asustusele. Ctrl+klõps avab uue vaate ettevõtte/asustuse asukohas +STR_SUBSIDIES_OFFERED_EXPIRY_DATE :enne {DATE_SHORT} +STR_SUBSIDIES_OFFERED_EXPIRY_TIME :{UNITS_MONTHS_OR_MINUTES} jooksul STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :kuni {DATE_SHORT} STR_SUBSIDIES_SUBSIDISED_EXPIRY_TIME :{UNITS_MONTHS_OR_MINUTES} jäänud @@ -3738,6 +3806,7 @@ STR_STATION_LIST_CARGO_FILTER_ALL_AND_NO_RATING :Kõik veoseliig STR_STATION_LIST_CARGO_FILTER_MULTIPLE :Mitu kaubaliiki STR_STATION_LIST_CARGO_FILTER_NO_CARGO_TYPES :Ilma kaubaliikideta STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :Ainult ilma kaubahinnanguta +STR_STATION_LIST_CARGO_FILTER_SELECT_ALL :Vali kõik ja ilma hinnanguta STR_STATION_LIST_CARGO_FILTER_NO_RATING :Ilma kaubahinnanguta STR_STATION_LIST_CARGO_FILTER_EXPAND :Näita rohkem... @@ -3817,6 +3886,8 @@ STR_EDIT_WAYPOINT_NAME :{WHITE}Muuda me # Finances window STR_FINANCES_CAPTION :{WHITE}{COMPANY} rahavoogude aruanne {BLACK}{COMPANY_NUM} STR_FINANCES_YEAR :{WHITE}{NUM} +STR_FINANCES_YEAR_CAPTION :{WHITE}Aasta +STR_FINANCES_PERIOD_CAPTION :{WHITE}Ajavahemik ###length 3 STR_FINANCES_REVENUE_TITLE :{WHITE}Tulu @@ -3852,9 +3923,9 @@ STR_FINANCES_MAX_LOAN :{WHITE}Laenulim STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG} STR_FINANCES_BORROW_BUTTON :{BLACK}Laena {CURRENCY_LONG} -STR_FINANCES_BORROW_TOOLTIP :{BLACK}Laena raha +STR_FINANCES_BORROW_TOOLTIP :{BLACK}Suurenda laenu. Ctrl+klõps laenab nii palju, kui võimalik STR_FINANCES_REPAY_BUTTON :{BLACK}Tagasimakse {CURRENCY_LONG} -STR_FINANCES_REPAY_TOOLTIP :{BLACK}Maksa laen osaliselt tagasi +STR_FINANCES_REPAY_TOOLTIP :{BLACK}Maksa osa laenu tagasi. Ctrl+klõps maksab tagasi nii palju, kui võimalik STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Taristu # Company view @@ -3905,6 +3976,7 @@ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Presidendi nimi STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Sisesta saadetav rahasumma STR_BUY_COMPANY_MESSAGE :{WHITE}Otsime ettevõtet, kes võtaks meie firma üle.{}{}Kas soovite osta ettevõtte {COMPANY} {CURRENCY_LONG} eest? +STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Vaenulikus ettevõtte {COMPANY} ülevõtmiseks ostad sa kõik varad, maksad tagasi kõik laenud, ning tasud kahe aasta tulud.{}{}Kogusumma on hinnanguliselt {CURRENCY_LONG}.{}{}Kas tahad vaenulikku ülevõtmist jätkata? # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE} {COMPANY} Taristu @@ -3938,6 +4010,7 @@ STR_INDUSTRY_DIRECTORY_FILTER_NONE :Puudub # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Eelmise kuu toodang: +STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Toodang eelmisel minutil: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% veetud) STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vaate keskendamine tööstusele STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tootlikkuse tase: {YELLOW}{COMMA}% @@ -3977,7 +4050,9 @@ STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Halda re STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Saada juhised kõikidele selles nimekirjas olevatele veovahenditele STR_VEHICLE_LIST_REPLACE_VEHICLES :Asenda veovahendeid STR_VEHICLE_LIST_SEND_FOR_SERVICING :Saada hooldusesse +STR_VEHICLE_LIST_CREATE_GROUP :Loo rühm STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Selle aasta kasum: {CURRENCY_LONG} (eelneval: {CURRENCY_LONG}) +STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{TINY_FONT}{BLACK}Selle ajavahemiku kasum: {CURRENCY_LONG} (viimase ajavahemiku: {CURRENCY_LONG}) STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} @@ -4104,7 +4179,7 @@ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Osta val STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valitud õhusõiduk. Shift+klõpsuga kuvatakse eeldatav ostuhind ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja ümberseadista valitud rööbassõiduk. Shift+klõps näitab eeldatava maksumuse ilma ostu sooritamata +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja ümberseadista valitud rööbassõiduk. Hoia all shift-klahvi, et näidata ainult hinnangulist maksumust STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja ümberseadista valitud maanteesõiduk. Shift+klõps näitab eeldatava maksumuse ilma ostu sooritamata STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja ümberseadista valitud laev. Shift+klõps näitab eeldatava maksumuse ilma ostu sooritamata STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja ümberseadista valitud õhusõiduk. Shift+klõps näitab eeldatava maksumuse ilma ostu sooritamata @@ -4116,10 +4191,10 @@ STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Ümberni STR_BUY_VEHICLE_AIRCRAFT_RENAME_BUTTON :{BLACK}Ümbernimeta ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Ümbernimeta rööbassõiduki liik -STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Ümbernimeta maanteesõiduki liik -STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Ümbernimeta laeva liik -STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Ümbernimeta õhusõiduki liik +STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Nimeta rööbassõiduki liik ümber +STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Nimeta maanteesõiduki liik ümber +STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Nimeta laeva liik ümber +STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Nimeta õhusõiduki liik ümber ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON :{BLACK}Peida @@ -4134,16 +4209,16 @@ STR_BUY_VEHICLE_SHIP_SHOW_TOGGLE_BUTTON :{BLACK}Näita STR_BUY_VEHICLE_AIRCRAFT_SHOW_TOGGLE_BUTTON :{BLACK}Näita ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Sätesta rongitüübi peitmine/kuvamine -STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Sätesta sõidukitüübi peitmine/kuvamine -STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Sätesta laevatüübi peitmine/kuvamine +STR_BUY_VEHICLE_TRAIN_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Vahelda rongitüübi peitmist/näitamist +STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Vahelda sõidukitüübi peitmist/näitamist +STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Vahelda laevatüübi peitmist/näitamist STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Vahelda õhusõiduki liigi peitmist/näitamist ###length VEHICLE_TYPES STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}Ümbernimeta rööbassõiduki liik STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE}Ümbernimeta maanteesõiduki liik STR_QUERY_RENAME_SHIP_TYPE_CAPTION :{WHITE}Ümbernimeta laeva liik -STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Ümbernimeta õhusõiduki liik +STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Nimeta õhusõiduki liik ümber # Depot window STR_DEPOT_CAPTION :{WHITE}{DEPOT} @@ -4201,7 +4276,7 @@ STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Klooni ###length VEHICLE_TYPES STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Ostetakse samasugune rong koos kõikide vagunitega. Vajuta sellele nupule, ning seejärel rongile depoo sees või väljas. «Ctrl»+klõps jagab korraldusi. «Shift»+klõps näitab eeldatavat ostuhinda STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Ostetakse samasugune mootorsõiduk. Vajuta sellele nupule, ning seejärel mootorsõidukil depoos või sellest väljas. «Ctrl»+klõps jagab korraldusi. «Shift»+klõps näitab eeldatavat ostuhinda -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Ostetakse samasugune laev. Vajuta sellele nupule, ning seejärel laevale laevaremonditehase sees või väljas. «Ctrl»+klõps jagab korraldusi. «Shift»+klõps näitab eeldatavat ostuhinda +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Ostetakse samasugune laev. Vajuta sellele nupule, ning seejärel laevale laevaremonditehase sees või väljas. «Ctrl»+klõps jagab korraldusi. Hoia all shift-klahvi, et näidata ainult hinnangulist maksumust STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Ostetakse samasugune õhusõiduk. Vajuta sellele nupule, ning seejärel õhusõidukile angaari sees või väljas. «Ctrl»+klõps jagab korraldusi. «Shift»+klõps näitab eeldatavat ostuhinda ###length VEHICLE_TYPES @@ -4246,10 +4321,14 @@ STR_ENGINE_PREVIEW_TRAM_VEHICLE :tramm STR_ENGINE_PREVIEW_AIRCRAFT :õhusõiduki STR_ENGINE_PREVIEW_SHIP :laeva +STR_ENGINE_PREVIEW_TEXT3 :{BLACK}{STRING}{}{5:STRING}{}{STRING} +STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING}{}{STRING}{}{STRING}{}{STRING} STR_ENGINE_PREVIEW_COST_WEIGHT :Hind: {CURRENCY_LONG} Kaal: {WEIGHT_SHORT} STR_ENGINE_PREVIEW_COST_MAX_SPEED :Hind: {CURRENCY_LONG} Tippkiirus: {VELOCITY} STR_ENGINE_PREVIEW_SPEED_POWER :Tippkiirus: {VELOCITY} Võimsus: {POWER} STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Tippkiirus: {VELOCITY} Võimsus: {POWER} Veojõud: {FORCE} +STR_ENGINE_PREVIEW_TYPE :Õhusõiduki liik: {STRING} +STR_ENGINE_PREVIEW_TYPE_RANGE :Õhusõiduki liik: {STRING} Lennuulatus: {COMMA} ruutu STR_ENGINE_PREVIEW_RUNCOST_YEAR :Jooksvad kulud: {CURRENCY_LONG}/aasta STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Jooksvad kulud: {CURRENCY_LONG}/periood STR_ENGINE_PREVIEW_CAPACITY :Mahutavus: {CARGO_LONG} @@ -4359,6 +4438,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Valitud # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Veose ümberlaadimine STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Lahkub +STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Ootab hajutamist STR_VEHICLE_STATUS_CRASHED :{RED}Kokkupõrge! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Rike STR_VEHICLE_STATUS_STOPPED :{RED}Peatatud @@ -4367,16 +4447,17 @@ STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Vool puudu STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Vaba raja ootamine STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Liiga pikk vahemaa järgmise sihtpunktini -STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}Siht: {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Sihitu, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Suundub {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Suundub {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Järelevaatus: {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Suundub jaama {0:STATION} +STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Sihitu +STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Suundub punkti {0:WAYPOINT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Suundub depoosse {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Hooldus depoos {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Hajutamine ja hooldus depoos {0:DEPOT} -STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}Ei leita teed jaama {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}Ei leita teed sihtkohta {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}Ei leita teed sihtkohta {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}Ei leia teed sihtkohta {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - Ei leia teed jaama {0:STATION} +STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Ei leie teed punkti {0:WAYPOINT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Ei leie teed depoosse {0:DEPOT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Ei leia teed depoosse {0:DEPOT} # Vehicle stopped/started animations ###length 2 @@ -4399,6 +4480,7 @@ STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Nimeta STR_VEHICLE_INFO_AGE :{COMMA} aasta{P "" t} ({COMMA}) STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} aasta{P "" t} ({COMMA}) STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Vanus: {LTBLUE}{STRING}{BLACK} Käituskulud: {LTBLUE}{CURRENCY_LONG}/a +STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Vanus: {LTBLUE}{STRING}{BLACK} Käituskulud: {LTBLUE}{CURRENCY_LONG}/ajavahemik STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Tippkiirus: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Tippkiirus: {LTBLUE}{VELOCITY} {BLACK}Õhusõiduki liik: {LTBLUE}{STRING} @@ -4421,12 +4503,21 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kandevõ STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Ülekantud tulu: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Hooldusvälp: {LTBLUE}{COMMA}päeva{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Hooldusvälp: {LTBLUE}{COMMA}{NBSP}minutit{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Hooldusvälp: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Viimane hooldus: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Viimane hooldus: {LTBLUE}{NUM} minutit tagasi +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Suurenda hooldusvälpa 10 päeva võrra. Ctrl+klõps suurendab hooldusvälpa 5 päeva võrra +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Suurenda hooldusvälpa 5 minuti võrra. Ctrl+klõps suurendab hooldusvälpa 1 minuti võrra +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Suurenda hooldusvälpa 10 protsendi võrra. Ctrl+klõps suurendab hooldusvälpa 5 protsendi võrra +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Vähenda hooldusvälpa 10 päeva võrra. Ctrl+klõps vähendab hooldusvälpa 5 päeva võrra +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Vähenda hooldusvälpa 5 minuti võrra. Ctrl+klõps vähendab hooldusvälpa 1 minuti võrra +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Vähenda hooldusvälpa 10 protsendi võrra. Ctrl+klõps vähendab hooldusvälpa 5 protsendi võrra STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Muuda hooldusvälba liiki STR_VEHICLE_DETAILS_DEFAULT :Esialgne +STR_VEHICLE_DETAILS_DAYS :Päeva +STR_VEHICLE_DETAILS_MINUTES :Minutit STR_VEHICLE_DETAILS_PERCENT :Protsendid ###length VEHICLE_TYPES @@ -4529,9 +4620,13 @@ STR_ORDER_DROP_REFIT_AUTO_ANY :Võimalikud kau STR_ORDER_DROP_GO_ALWAYS_DEPOT :Alati STR_ORDER_DROP_SERVICE_DEPOT :Vajadusel STR_ORDER_DROP_HALT_DEPOT :Peatu +STR_ORDER_DROP_UNBUNCH :Hajuta # Depot action tooltips, one per vehicle type ###length VEHICLE_TYPES +STR_ORDER_TRAIN_DEPOT_ACTION_TOOLTIP :{BLACK}Vali tegevus selles depoos +STR_ORDER_ROAD_DEPOT_ACTION_TOOLTIP :{BLACK}Vali tegevus selles depoos +STR_ORDER_SHIP_DEPOT_ACTION_TOOLTIP :{BLACK}Vali tegevus selles depoos STR_ORDER_HANGAR_ACTION_TOOLTIP :{BLACK}Vali tegevus, mida selles angaaris teha ###next-name-looks-similar @@ -4602,6 +4697,7 @@ STR_ORDER_REFIT_ORDER :(Ümberseadista STR_ORDER_REFIT_STOP_ORDER :(Ümberseadista: {STRING}, peatu) STR_ORDER_STOP_ORDER :(Peatu) +STR_ORDER_WAIT_TO_UNBUNCH :(ootab hajutamist) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Ei saa jaama kasutada){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4683,6 +4779,7 @@ STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}See graa STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}See graafik algab {COMMA}. sekundi pärast STR_TIMETABLE_START :{BLACK}Alusta graafikut +STR_TIMETABLE_START_TOOLTIP :{BLACK}Vali, millal see graafik algab. Ctrl+klõps hajutab võrdselt kõikide sõidukite alustamise nende suhtelise järjestuse põhjal, kui korraldus on täielikult ajastatud STR_TIMETABLE_START_SECONDS_QUERY :Sekundeid kuni graafik algab @@ -4690,16 +4787,16 @@ STR_TIMETABLE_CHANGE_TIME :{BLACK}Muuda ae STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Muuda märgitud korraldusele määratud aega. Ctrl+klõps seab aja kõigile korraldustele STR_TIMETABLE_CLEAR_TIME :{BLACK}Tühista aeg -STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Tühista korralduse täitmiseks määratud aeg. Ctrl+klõps tühistab kõik korraldustele määratud ajad +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Tühista korralduse täitmiseks määratud aeg. Ctrl+klõps, et tühistada kõik korraldustele määratud ajad STR_TIMETABLE_CHANGE_SPEED :{BLACK}Muuda kiiruspiirangut STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Muuda märgitud korralduse kiiruspiirangut. Ctrl+klõps seab kiiruspiirangu kõigile korraldustele STR_TIMETABLE_CLEAR_SPEED :{BLACK}Kustuta kiiruspiirang -STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Eemalda märgitud korralduse kiiruspiirang. Ctrl+klõps tühistab kõik korraldustele määratud kiiruspiirangud +STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Eemalda märgitud korralduse kiiruspiirang. Ctrl+klõps, et tühistada kõik korraldustele määratud kiiruspiirangud STR_TIMETABLE_RESET_LATENESS :{BLACK}Nulli hilinemisarvesti -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Nulli hilinemisarvesti, nii et sõiduk oleks graafikus +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Nulli hilinemisarvesti, nii et sõiduk oleks graafikus. Ctrl+klõps nullib terve rühma, nii et viimane sõiduk on õigeaegne ja kõik teised on varajased STR_TIMETABLE_AUTOFILL :{BLACK}Isetäituv STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Kasuta liiniplaani täitmiseks järgmise sõidu andmeid. Ctrl+klõps proovib säilitab ooteajad @@ -4810,16 +4907,25 @@ STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STR # Textfile window +STR_TEXTFILE_JUMPLIST :{WHITE}Sisukord +STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}Mine kiirelt näidatud faili jaotisse selle loendi kaudu +STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING} +STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Mine navigeerimisajaloos tagasi +STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Mine navigeerimisajaloos jälle edasi STR_TEXTFILE_WRAP_TEXT :{WHITE}Tekstiridade murdmine STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Murrab tekstirida, et lugeda vaadet liigutamata -STR_TEXTFILE_VIEW_README :{BLACK}Vaata abi +STR_TEXTFILE_VIEW_README :{BLACK}Readme +STR_TEXTFILE_VIEW_README_TOOLTIP :Vaata selle sisu readme'd STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Muudatuste logi +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Vaata selle sisu muudatuste ajalugu STR_TEXTFILE_VIEW_LICENCE :{BLACK}Litsents +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Vaata selle sisu litsentsi ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} {STRING} abi. STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} muudatuste logi {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} litsents {STRING} STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Uuringutulemuse eelvaade +STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}OpenTTD dokument '{STRING}' # Vehicle loading indicators @@ -5064,6 +5170,11 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Ei leia STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Vale depootüüp # Depot unbunching related errors +STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... võib omada ainult ühte hajutuskorraldust +STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... täislaadimise korraldust ei saa kasutada, kui sõidukil on hajutuskorraldus +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... täislaadimise korraldusega sõidukit ei saa hajutada +STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... tinglikke korraldusi ei saa kasutada, kui sõidukil on hajutuskorraldus +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... tingliku korraldusega sõidukit ei saa hajutada # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} on pärast asendamist liiga pikk @@ -5268,6 +5379,8 @@ STR_ERROR_NO_AIRPORT :{WHITE}Ei ole STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Ei ole ühtegi peatust, mis on ühilduva teeliigiga STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Ei ole ühtegi peatust, mis on ühilduva trammiliigiga STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Ei ole ühtegi peatust, mis sobiks liigendsõidukitele.{}Liigendsõiduk nõuab platsi asemel läbisõidupeatust +STR_ERROR_AIRPORT_NO_PLANES :{WHITE}See lennuk ei saa maanduda sellel kopteriplatsil +STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}See helikopter ei saa maanduda selles lennujaamas STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Ei ole ühtegi rongitee meldepunkti STR_ERROR_NO_BUOY :{WHITE}Ei ole ühtegi poid @@ -5275,6 +5388,8 @@ STR_ERROR_NO_BUOY :{WHITE}Ei ole STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Sõidukile ei saa graafikut määrata... STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Sõidukid saavad ainult peatustes oodata STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}See sõiduk ei peatu selles jaamas +STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... graafik on puudulik +STR_ERROR_TIMETABLE_NOT_STARTED :{WHITE}... graafik pole veel alustatud # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... liiga palju silte @@ -5720,6 +5835,7 @@ STR_UNKNOWN_STATION :tundmatu jaam STR_DEFAULT_SIGN_NAME :Silt STR_COMPANY_SOMEONE :keegi +STR_SAVEGAME_DURATION_REALTIME :{NUM}t {NUM}m STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING} STR_SAVEGAME_NAME_SPECTATOR :Vaatleja, {1:STRING} @@ -5753,19 +5869,27 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}mln +STR_CURRENCY_SHORT_GIGA :{NBSP}mld +STR_CURRENCY_SHORT_TERA :{NBSP}tn 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} STR_JUST_DATE_LONG :{DATE_LONG} STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} +STR_JUST_STRING1 :{STRING} +STR_JUST_STRING2 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 762c065784..f113d32b4f 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -378,9 +378,22 @@ STR_COLOUR_WHITE :Bela STR_COLOUR_RANDOM :Nasumična ###length 17 +STR_COLOUR_SECONDARY_DARK_BLUE :Tamno plava +STR_COLOUR_SECONDARY_PALE_GREEN :Bledo zelena +STR_COLOUR_SECONDARY_SECONDARY_PINK :Ružičasta +STR_COLOUR_SECONDARY_YELLOW :Žuta +STR_COLOUR_SECONDARY_RED :Crvena +STR_COLOUR_SECONDARY_LIGHT_BLUE :Svetlo plava STR_COLOUR_SECONDARY_GREEN :Zelena +STR_COLOUR_SECONDARY_DARK_GREEN :Tamno zelena +STR_COLOUR_SECONDARY_BLUE :Plava +STR_COLOUR_SECONDARY_CREAM :Krem +STR_COLOUR_SECONDARY_MAUVE :Lavanda +STR_COLOUR_SECONDARY_PURPLE :Ljubičasta STR_COLOUR_SECONDARY_ORANGE :Narandžasta STR_COLOUR_SECONDARY_BROWN :Braon +STR_COLOUR_SECONDARY_GREY :Siva +STR_COLOUR_SECONDARY_WHITE :Bela STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Identično primarnom @@ -505,7 +518,9 @@ STR_SORT_BY_TYPE :Vrsti STR_SORT_BY_TRANSPORTED :Prevezeno STR_SORT_BY_NUMBER :Broju STR_SORT_BY_PROFIT_LAST_YEAR :Zaradi prošle godine +STR_SORT_BY_PROFIT_LAST_PERIOD :Profit proteklog perioda STR_SORT_BY_PROFIT_THIS_YEAR :Zaradi ove godine +STR_SORT_BY_PROFIT_THIS_PERIOD :Profit trenutnog perioda STR_SORT_BY_AGE :Starosti STR_SORT_BY_RELIABILITY :Pouzdanosti STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Ukupnoj nosivosti po vrsti tereta @@ -692,7 +707,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Obriši sve por # About menu STR_ABOUT_MENU_LAND_BLOCK_INFO :Podaci o zemljištu -STR_ABOUT_MENU_HELP :Pomoć & priručnici +STR_ABOUT_MENU_HELP :Pomoć i priručnici STR_ABOUT_MENU_TOGGLE_CONSOLE :Uključi/isključi konzolu STR_ABOUT_MENU_AI_DEBUG :Korekcija VI / skripte igre STR_ABOUT_MENU_SCREENSHOT :Sačuvaj sliku @@ -701,6 +716,7 @@ STR_ABOUT_MENU_ABOUT_OPENTTD :O OpenTTD-u STR_ABOUT_MENU_SPRITE_ALIGNER :Poravnavanje sprajta STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Uključi/isključi granične linije STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Uključi/Isključi bojenje nesređenih blokova +STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Uključi/isključi okvire prozorčića ###length 31 STR_DAY_NUMBER_1ST :1. @@ -827,6 +843,8 @@ STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Zajam: STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Ukupno: ###next-name-looks-similar +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}Broj vozila koja su ostvarila profit prošle godine. Ovo uključuje drumska vozila, vozove, brodove i letelice +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Broj vozila koja su ostvarila profit u proteklom periodu. Ovo uključuje drumska vozila, vozove, brodove i letelice STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Broj nedavno opsluženih stanica. Posebno se broji svaki deo stanice (npr. železničko, autobusko stajalište ili aerodrom) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Zarađen novac u tromesečju sa najmanjom zaradom u proteklih 12 tromesečja STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Zarađen novac u tromesečju sa najvećom zaradom u proteklih 12 tromesečja @@ -1076,12 +1094,20 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G "" STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Otvori grupni prozor fokusiran na grupu vozila +STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}{STATION} više ne prihvata: {CARGO_LIST} STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Ponuda subvencije istekla:{}{}Prevoz {STRING.gen} iz {STRING} u {STRING} se više neće stimulisati STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subvencija povučena:{}{}Usluga prevoza {STRING.gen} između stanica {STRING} i {STRING} više nije u opticaju +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Ponuda subvencije:{}{}Prvi {STRING} od {STRING} do {STRING} stiče pravo na subvenciju lokalnih vlasti u trajanju od {UNITS_YEARS_OR_MINUTES}! ###length 4 +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subvencija odobrena preduzeću {STRING}!{}{}{STRING} od {STRING} do {STRING} će biti plaćena 50% više {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subvencija odobrena preduzeću {STRING}!{}{}{STRING} od {STRING} do {STRING} će biti plaćena dvostruko {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subvencija odobrena preduzeću {STRING}!{}{}{STRING} od {STRING} do {STRING} će biti plaćena trostruko {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subvencija odobrena preduzeću {STRING}!{}{}{STRING} od {STRING} do {STRING} će biti plaćena četvorostruko {UNITS_YEARS_OR_MINUTES}! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Prevoznički monopol! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLACK}Lokalna vlast {TOWN} je potpisala ugovor sa {STRING} za 12 meseci isključivih prava prevoza! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}Lokalna vlast {TOWN} je potpisala ugovor sa {STRING} za 12 minuta isključivih prava prevoza! # Extra view window STR_EXTRA_VIEWPORT_TITLE :{WHITE}Pogled{COMMA} @@ -1093,12 +1119,24 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Kopiraj # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Opcije +STR_GAME_OPTIONS_TAB_GENERAL :Opšte +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Odabir opštih podešavanja STR_GAME_OPTIONS_TAB_GRAPHICS :Grrafika +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Odabir grafičkih podešavanja +STR_GAME_OPTIONS_TAB_SOUND :Zvuk +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Odabir podešavanja zvuka i muzike +STR_GAME_OPTIONS_TAB_SOCIAL :Društveno +STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}Odabir društvenih podešavanja STR_GAME_OPTIONS_VOLUME :Jačina zvuka STR_GAME_OPTIONS_SFX_VOLUME :Zvučni efekti +STR_GAME_OPTIONS_MUSIC_VOLUME :Muzika STR_GAME_OPTIONS_VOLUME_0 :0% +STR_GAME_OPTIONS_VOLUME_25 :25% +STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valuta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Izbor valute @@ -1148,6 +1186,7 @@ STR_GAME_OPTIONS_CURRENCY_HKD :Hongkonški dol STR_GAME_OPTIONS_CURRENCY_INR :Indijska rupija STR_GAME_OPTIONS_CURRENCY_IDR :Indonezijska rupija STR_GAME_OPTIONS_CURRENCY_MYR :Malezijski ringit +STR_GAME_OPTIONS_CURRENCY_LVL :Letonski lat STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Auto čuvanje pozicije STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Izbor vremenskog intervala između dve automatski sačuvane pozicije @@ -1189,6 +1228,10 @@ STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Označi STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Povećanje okvira STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Označi ovde da veličina okvira povećava sa veličinom prozora +STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Koristi tradicionalni font +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Označi ovde ako više voliš tradicionalni font fiksirane veličine. +STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias fontova +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Označi ovde za anti-alias fontova promenljive veličine STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1196,7 +1239,13 @@ 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_LINK_TOOLTIP :{BLACK}Ovo otvara pretraživač sa više informacija o automatskim anketama +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Automatizovana anketa +STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Učestvuj u automatizovanoj anketi +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Kada je uključeno, OpenTTD će poslati rezultate ankete prilikom napuštanja igre +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}O anketi i privatnosti +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Ovo otvara pretraživač sa više informacija o automatizovanim anketama +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Pregledaj rezultate anketa +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Pogledaj rezultate ankete za trenutnu igru STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafike @@ -1217,8 +1266,15 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Osnovni STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Odaberi željeni skup osnovne muzike STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Dodatni podaci o osnovnom skupu muzike +STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(nema instaliranih dodataka za integraciju sa drušvenim platformama) +STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :{BLACK}Platforma: +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Stanje dodatka: +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_FAILED :{RED}Neuspešno pokretanje +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_PLATFORM_NOT_RUNNING :{ORANGE}{STRING} nije u funkciji +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :{RED}Duplirani dodatak +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Neispravan potpis STR_BASESET_STATUS :{STRING} {RED}({NUM} fajl{P '' a ovi} nedostaj{P e e u}/{P je su su} korumpiran{P '' a i} @@ -1386,9 +1442,10 @@ STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}se STR_CONFIG_SETTING_INFINITE_MONEY :Neograničen novac: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Najveći zajam na početku: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Najveći iznos koji preduzeće može da pozajmi (ne uzimajući u obzir inflaciju) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Najveći iznos koji preduzeće može da pozajmi (ne uzimajući u obzir inflaciju). Ako se odabere "Bez pozajmice", novac neće biti dostupan osim kroz skriptu igre ili kroz uključivanje podešavanja za neograničen novac. STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Bez pozajmice STR_CONFIG_SETTING_INTEREST_RATE :Kamatna stopa: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Kamatna stopa na zajam; ako je omogućena, kontroliše inflaciju @@ -1408,7 +1465,9 @@ STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Podešava kolik STR_CONFIG_SETTING_SUBSIDY_DURATION :Trajanje subvencije: {STRING} ###length 2 STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Odredi broj godina trajanja subvencije +STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT_PERIODS :Odredi broj perioda za koje će se subvencija odobravati +STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{UNITS_YEARS_OR_PERIODS} ###setting-zero-is-special STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Bez subvencija @@ -1534,7 +1593,8 @@ STR_CONFIG_SETTING_BRIBE_HELPTEXT :Dozvoljava pred STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Dozvoljena kupovina ekskluzivnih prava prevoza: {STRING} ###length 2 -STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Ako preduzeće kupi ekskluzivna prava prevoza u naselju, protivničke stanice neće primati nikakav teret ni putnike dvanaest meseci +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Ako preduzeće kupi isključiva prava prevoza u naselju, protivničke stanice (putničke i teretne) neće primati nikakav teret ni putnike dvanaest meseci +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT_MINUTES :Ako preduzeće kupi isključiva prava prevoza u naselju, protivničke stanice (putničke i teretne) neće primati nikakav teret ni putnike dvanaest minuta STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Dozvoljeno finansiranje zgrada: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Dozvoljava preduzećima da naselju daju novac za gradnju novih kuća @@ -1593,11 +1653,23 @@ STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Ako je omoguće STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Vozila nikad ne zastarevaju: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Ako je omogućeno, svi modeli vozila ostaju zauvek dostupni (posle njihovog predstavljanja) +STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Merenje vremena: {STRING} +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Odabir jedinica za merenje vremena igre. Ovo podešavanje ne može biti promenjeno tokom igre.{}{}Kalendarsko praćenje je tradicionalno merenje u OpenTTD-u, gde se godina sastoji od 12 meseci, koji imaju između 28 i 31 dan.{}{}Kod vremena određenog zidnim satom, proračun proizvodnje dobara i finansija se zasniva na uvećanjima od jednog minuta, što odgovara trajanju jednog meseca od 30 dana u kalendarskom modu. Ovi meseci se grupišu u periode od 12 minuta, što odgovara godini u kalendarskom modu.{}{}U oba moda postoji klasičan kalendar, koji se koristi za datume dostupnosti vozila, kuća i ostale infrastrukture. ###length 2 +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalendar +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Zidni sat +STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minuta po godini: {STRING} +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Odabir broja minuta u kalendarskoj godini. Početna vrednost je 12 minuta. Podešavanjem vrednosti na 0 zaustavlja se promena vremena. Ovo podešavanje ne utiče na ekonomske simulacije igre, a dostupna je samo u modu praćenja vremena uz pomoć časovnika. ###setting-zero-is-special +STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (kalendarsko vreme je zaustavljeno) +STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Skaliranje proizvodnje tereta: {STRING} +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Skaliraj proizvodnju tereta gradova prema ovom procentu. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Skaliranje proizvidnje tereta fabrika: {STRING} +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skaliraj proizvodnju tereta fabrika prema ovom procentu. +STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatska zamena kada vozilo ostari: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Kada je omogućeno, vozilo blizu kraja života će se automatski zameniti kada su ispunjeni uslovi obnavljanja @@ -1689,6 +1761,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Levom stranom STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Desnom stranom STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Orijentacija elevacione karte: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Odaberi kako će se visinska mapa rotirati da bi se uklopila u svet igre ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Nalevo STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Nadesno @@ -1781,6 +1854,9 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Nikakvo STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Zatvori prozor pomoću desnog klika: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Zatvara prozor tako što klikne desnim klikom unutar nje. Onemogućava dodir sa desnim tasterom miša! ###length 3 +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_NO :Ne +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES :Da +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :Da, osim pridenutih STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Koristiti {STRING} oblik datuma u nazivima sačuvanih igara STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Format datuma u imenima fajlova sačuvanih igara @@ -2129,11 +2205,14 @@ STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Postavljanje ov STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Zasićenje kratkih puteva pre korišćenja puteva velikih kapaciteta: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Često postoji više puteva izmeđe dve stanice. Cargodist će prvo popuniti najkraći put, nakon toga koristiti drugi najkraći put dok se ne popuni itd. Popunjenost se određuje procenom nosivosti i planirane upotrebe. Jednom kad se popune svi putevi i ako i dalje postoji potreba, pretrpati će sve puteve preferirajući one sa visokim kapacitetom. Ipak, algoritam najčešće neće proceniti kapacitet tačno. Ova postavka omogućava da podešavanje do kojeg postotka će kraći put biti popunjen u prvom prolazu pre nego se počne popunjavati sledeći put. Podešavanjem na vrednost manje od 100% izbegavaju se pretrpane stanice u slučaju previsoko procenjenog kapaciteta. -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Mere brzine: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Mere brzine (tlo): {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Mere brzine (pomorski): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Kada brzina bude pokazana u interfejsu, pokaži u željenoj meri STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperijalne mere (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metričke mere (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_DAYS :Jedinice igre (pločica/dan) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_SECS :Jedinice igre (pločica/sek) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :Čvorovi STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Mere za snagu vozila: {STRING} @@ -2249,6 +2328,7 @@ STR_INTRO_MULTIPLAYER :{BLACK}Mrežna STR_INTRO_GAME_OPTIONS :{BLACK}Opcije STR_INTRO_HIGHSCORE :{BLACK}Tabela najboljih rezultata +STR_INTRO_HELP :{BLACK}Pomoć i priručnici STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Podešavanja STR_INTRO_NEWGRF_SETTINGS :{BLACK}Podešavanja NewGRF STR_INTRO_ONLINE_CONTENT :{BLACK}Proveri dodatke na mreži @@ -2268,13 +2348,14 @@ STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Izbor su STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Izbor suptropskog klimatskog pojasa STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Izbor zemlje igračaka -STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Prikazuje opcije igre -STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Prikazuje tabelu najboljih rezultata -STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Prikazuje podešavanje -STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Prikazuje podešavanja NewGRF +STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Prikaži opcije igre +STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Prikaži tabelu najboljih rezultata +STR_INTRO_TOOLTIP_HELP :{BLACK}Pristupi dokumentaciji i resursima na internetu +STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Otvori podešavanja +STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Prikaži podešavanja NewGRF STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Pregled novih i ažuriranih dodatka za preuzimanje -STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Prikazuje podešavanja VI -STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Prikazuje podešavanja skripte +STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Otvori podešavanja VI +STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Otvori podešavanja skripte STR_INTRO_TOOLTIP_QUIT :{BLACK}Napušta 'OpenTTD' STR_INTRO_BASESET :{BLACK}Trenutno odabranom skupu osnovne grafike nedostaje {NUM} sprajt{P "" "ova" "ova"}. Proveri da li postoje izmene za ovaj skup. @@ -2292,9 +2373,17 @@ STR_ABANDON_GAME_QUERY :{YELLOW}Da li z STR_ABANDON_SCENARIO_QUERY :{YELLOW}Da li zaista želiš da napustiš ovaj scenario? # Help window +STR_HELP_WINDOW_CAPTION :{WHITE}Pomoć i priručnici +STR_HELP_WINDOW_WEBSITES :{BLACK}Sajtovi STR_HELP_WINDOW_DOCUMENTS :{BLACK}Dokumenti +STR_HELP_WINDOW_README :{BLACK}Uputstvo +STR_HELP_WINDOW_CHANGELOG :{BLACK}Dnevnik promena STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Poznati Bagovi STR_HELP_WINDOW_LICENSE :{BLACK}Licenca +STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD +STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Priručnik / Wiki +STR_HELP_WINDOW_BUGTRACKER :{BLACK}Prijavi problem +STR_HELP_WINDOW_COMMUNITY :{BLACK}Zajednica # Cheat window STR_CHEATS :{WHITE}Varanja @@ -2317,10 +2406,14 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Prikaži STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Prikaži šeme boja drumskih vozila STR_LIVERY_SHIP_TOOLTIP :{BLACK}Prikaži šeme boja brodova STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Prikaži šeme boja letelica +STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Prikaži boje grupa vozova +STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Prikaži boje grupa drumskih vozila STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Prikaži boje grupa brodova +STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Prikaži boje grupa letelica STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Izaberi osnovnu boju za označenu kategoriju. Ctrl+klik će izabrati ovu boju za sve kategorije STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Izaberi dodatnu boju za označenu kategoriju. Ctrl+klik će izabrati ovu boju za sve kategorije STR_LIVERY_PANEL_TOOLTIP :{BLACK}Označi šemu boja za izmenu, ili više njih koristeći Ctrl+klik. Klikom na kutijicu aktivira se upotreba date šeme +STR_LIVERY_TRAIN_GROUP_EMPTY :Nema podešenih grupa vozova STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Nijedna grupa letelica nije formirana ###length 23 @@ -2427,6 +2520,9 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Veličin STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Veličina terena u igri{}Klikom će se poređati po veličini STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Datum STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Trenutni datum u igri +STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}č {NUM}m +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}Trajanje igre +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}Odigrano vreme dok{}igra nije bila pauzirana STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Jezik, verzija servera, itd. STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Klikom na igru sa spiska vrši se njen odabir @@ -2442,6 +2538,7 @@ STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Adresa STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Kod pozivnice: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Početni datum: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Trenutni datum: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Trajanje igre: {WHITE}{NUM}č {NUM}m STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Skripta igre: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Zaštićeno šifrom! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERVER JE VAN MREŽE @@ -2568,9 +2665,12 @@ STR_NETWORK_ASK_RELAY_NO :{BLACK}Ne STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Da, jednom STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Da, ne pitaj ponovo -STR_NETWORK_ASK_SURVEY_TEXT :Da li želiš da učestvuješ u automatskoj anketi?{}OpenTTD će slati anketu kada izlaziš iz igre.{}Možeš promentiti ovo podešavanje u bilo kom trenutku pod "Opcijama igre". +STR_NETWORK_ASK_SURVEY_CAPTION :Učestvuj u automatizovanoj anketi? +STR_NETWORK_ASK_SURVEY_TEXT :Da li želiš da učestvuješ u automatizovana anketi?{}OpenTTD će slati anketu kada izlaziš iz igre.{}Možeš promentiti ovo podešavanje u bilo kom trenutku pod "Opcijama igre". STR_NETWORK_ASK_SURVEY_PREVIEW :Pregledaj rezultate ankete STR_NETWORK_ASK_SURVEY_LINK :O anketi i privatnosti +STR_NETWORK_ASK_SURVEY_NO :Ne +STR_NETWORK_ASK_SURVEY_YES :Da STR_NETWORK_SPECTATORS :Posmatrači @@ -2701,13 +2801,13 @@ STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Obeleži STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Obeležava sve preuzete dodatke koje imaju novija izdanja za preuzimanje STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}Poništi odabir STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Otkaži preuzimanje svih dodataka -STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Pretraži eksterne web stranice +STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Pretraži spoljne sajtove STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Traženi sadržaj nije dostupan u OpenTTD servisu za sadržaje za web stranice koje nisu pridružene u OpenTTD STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Napuštaš OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Odredbe i uslovi za preuzimanje sadržaja sa spoljnih sajtova varira.{}Moraćeš da pogledaš spoljašnje sajtove za uputstva u vezi instalacije sadržaja u OpenTTD.{}Želiš li da nastaviš? STR_CONTENT_FILTER_TITLE :{BLACK}Filter po oznaci/nazivu: -STR_CONTENT_OPEN_URL :{BLACK}Idi na Web lokaciju -STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Ovaj sadržaj nalazi se na Web lokaciji +STR_CONTENT_OPEN_URL :{BLACK}Poseti sajt +STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Ovaj sadržaj nalazi se na sajtu STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Preuzmi STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Započinje preuzimanje odabranih dodataka STR_CONTENT_TOTAL_DOWNLOAD_SIZE :{SILVER}Ukupna količina za preuzimanje: {WHITE}{BYTES} @@ -2889,6 +2989,8 @@ STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Izbor dr STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Izbor mosta - gradnja se potvrđuje klikom na željeni most 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_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_BRIDGE_NAME_SUSPENSION_STEEL :Viseći, čelični STR_BRIDGE_NAME_GIRDER_STEEL :Gredni, čelični STR_BRIDGE_NAME_CANTILEVER_STEEL :Obešeni, čelični @@ -3504,6 +3606,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Provera STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} kod {HEX} STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Objekat STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Vrsta železnice +STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Vrsta puta STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF promenljiva 60+x parametar (heksadecimalno) @@ -3538,6 +3641,8 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Upozorenje: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Greška: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Kobno: {SILVER}{STRING} +STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}NewGRF "{STRING}" je prijavio fatalnu grešku:{}{STRING} +STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF "{STRING}" je prijavio grešku:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} neće raditi sa TTDPatch verzijom prema prijavi OpenTTD-a STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} je za {2:STRING} verziju TTD-a STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} je napravljen za korišćenje sa {2:STRING} @@ -3682,6 +3787,8 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Ulaganje u veliku reklamnu kampanju će doneti preduzeću više putnika i robe iz ovog naselja.{}Privremeno povećava ocenu stanica u velikom prečniku oko centra naselja tokom trajanja kampanje.{}{POP_COLOUR}Trošak: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Otkrivanje spomenika preduzeća.{}Trajno povećava ocenu stanica u naselju tokom trajanja kampanje.{}{POP_COLOUR}Trošak: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW} Finansiranje izgradnje novih objekata u naselju.{}Privremeno povećava brzinu rasta u ovom naselju.{}{POP_COLOUR}Trošak: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Kupi isključiva prava prevoza u gradu tokom sledećih 12 meseci.{}Lokalna vlast neće dozvoliti upotrebu putničkih i teretnih stanica tvojih suparnika. Uspešno podmićivanje od strane suparnika poništava ovaj ugovor.{}{POP_COLOUR}Trošak: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Kupi isključiva prava prevoza u gradu tokom sledećih 12 minuta.{}Lokalna vlast neće dozvoliti upotrebu putničkih i teretnih stanica tvojih suparnika. Uspešno podmićivanje od strane suparnika poništava ovaj ugovor.{}{POP_COLOUR}Trošak: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Davanje mita lokalnoj vlasti kako bi porasla ocena vašeg preduzeća, uz rizik velike štete ukoliko se otkrije.{}{POP_COLOUR}Trošak: {CURRENCY_LONG} # Goal window @@ -3728,9 +3835,15 @@ STR_GOAL_QUESTION_BUTTON_CLOSE :Zatvori # Subsidies window STR_SUBSIDIES_CAPTION :{WHITE}Subvencije STR_SUBSIDIES_OFFERED_TITLE :{BLACK}Subvencije u toku (u vezi preuzimanja navedenog tereta): +STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING} od {STRING} do {STRING}{YELLOW} ({STRING}) STR_SUBSIDIES_NONE :{ORANGE}- Prazno - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Odobrene subvencije: +STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} od {STRING} do {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikom na uslugu prebacuje glavni pogled na lokaciju fabrike/naselja. Ctrl+klik otvara novi pogled na to mesto +STR_SUBSIDIES_OFFERED_EXPIRY_DATE :pre {DATE_SHORT} +STR_SUBSIDIES_OFFERED_EXPIRY_TIME :unutar {UNITS_MONTHS_OR_MINUTES} +STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :do {DATE_SHORT} +STR_SUBSIDIES_SUBSIDISED_EXPIRY_TIME :{UNITS_MONTHS_OR_MINUTES} preostaje # Story book window STR_STORY_BOOK_CAPTION :{WHITE}Priča {COMPANY} @@ -3753,6 +3866,12 @@ STR_STATION_LIST_STATION :{YELLOW}{STATIO STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- Prazno - STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Odaberi sve objekte +STR_STATION_LIST_CARGO_FILTER_ALL_AND_NO_RATING :Sve vrste tereta i bez ocene +STR_STATION_LIST_CARGO_FILTER_MULTIPLE :Više vrsta tereta +STR_STATION_LIST_CARGO_FILTER_NO_CARGO_TYPES :Bez vrste tereta +STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :Samo bez ocene tereta +STR_STATION_LIST_CARGO_FILTER_NO_RATING :Bez ocene tereta +STR_STATION_LIST_CARGO_FILTER_EXPAND :Prikaži više... # Station view window STR_STATION_VIEW_CAPTION :{WHITE}{STATION} {STATION_FEATURES} @@ -3916,6 +4035,7 @@ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Ime vlasnika STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Unesi iznos novca koji želiš da daš STR_BUY_COMPANY_MESSAGE :{WHITE}U potrazi smo za preduzećem koje bi preuzelo naše.{}{}Da li želiš da kupiš {COMPANY} za {CURRENCY_LONG}? +STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Prilikom nasilnog preuzimanja {COMPANY} kupuješ svu imovinu, otplaćuješ sve dugove i isplaćuješ profit za dve godine.{}{}Ukupan iznos je procenjen na {CURRENCY_LONG}.{}{}Da li želiš da nastaviš sa nasilnim preuzimanjem? # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastruktura preduzeća {COMPANY} @@ -3928,6 +4048,8 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanali STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stanice: STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Pločica sa stanicom STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Aerodromi +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR :{WHITE}{CURRENCY_LONG}/godina +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD :{WHITE}{CURRENCY_LONG}/period # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Fabrike @@ -4030,7 +4152,9 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Ukloni sva vozi STR_GROUP_RENAME_CAPTION :{BLACK}Preimenuj grupu STR_GROUP_PROFIT_THIS_YEAR :Zarada ove godine: +STR_GROUP_PROFIT_THIS_PERIOD :Profit trenutnog perioda: STR_GROUP_PROFIT_LAST_YEAR :Zarada prošle godine: +STR_GROUP_PROFIT_LAST_PERIOD :Profit proteklog perioda: STR_GROUP_OCCUPANCY :Trenutna upotreba: STR_GROUP_OCCUPANCY_VALUE :{NUM}% @@ -4427,6 +4551,8 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Težina: STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Ovogodišnja zarada: {LTBLUE}{CURRENCY_LONG} (prošlogodišnja: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Ovogodišnja zarada: {LTBLUE}{CURRENCY_LONG} (prošlogodišnja: {CURRENCY_LONG}) {BLACK}Najlošiji učinak: {LTBLUE}{POWER_TO_WEIGHT} +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Profit trenutnog perioda: {LTBLUE}{CURRENCY_LONG} (protekli period: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Profit trenutnog perioda: {LTBLUE}{CURRENCY_LONG} (protekli period: {CURRENCY_LONG}) {BLACK}Min. performanse: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Pouzdanost: {LTBLUE}{COMMA}% {BLACK}Kvarova od poslednjeg servisa: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Kupljen: {LTBLUE}{NUM}{BLACK} Vrednost: {LTBLUE}{CURRENCY_LONG} @@ -4437,6 +4563,9 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Nosivost STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Zarada od transfera: {LTBLUE}{CURRENCY_LONG} +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Povećava interval servisiranja za 10 dana. Ctrl+klik povećava interval servisiranja za 5 dana +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Povećava interval servisiranja za 5 minuta. Ctrl+klik povećava interval servisiranja za 1 minut +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Povećava interval servisiranja za 10 procenata. Ctrl+klik povećava interval servisiranja za 5 procenata STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Promeni tip intervala za servis STR_VEHICLE_DETAILS_DEFAULT :Podrazumevano @@ -4545,6 +4674,8 @@ STR_ORDER_DROP_HALT_DEPOT :Zaustavljanje # Depot action tooltips, one per vehicle type ###length VEHICLE_TYPES +STR_ORDER_ROAD_DEPOT_ACTION_TOOLTIP :{BLACK}Odabira akcije koja će se dogoditi u depou +STR_ORDER_HANGAR_ACTION_TOOLTIP :{BLACK}Odabira akcije koja će se dogoditi u hangaru ###next-name-looks-similar STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Skok na osnovu podatka o vozilu @@ -4693,7 +4824,9 @@ STR_TIMETABLE_STATUS_EARLY :{BLACK}Vozilo t STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Ovaj raspored još nije počeo STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Ovaj red vožnje će započeti za {COMMA} sekund{P u e e} +STR_TIMETABLE_START :{BLACK}Početak rasporeda +STR_TIMETABLE_START_SECONDS_QUERY :Broj sekundi do početka rasporeda STR_TIMETABLE_CHANGE_TIME :{BLACK}Promena vremena STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Promena količine vremena za koje će obeležena naredba trajati. Ctrl+klik podešava vreme za sve naredbe @@ -4717,6 +4850,9 @@ STR_TIMETABLE_EXPECTED :{BLACK}Očekiva STR_TIMETABLE_SCHEDULED :{BLACK}Po planu STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Prebacivanje između prikaza očekivanog i po planu +STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} sek STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :D: {COLOUR}{COMMA} sek @@ -4749,7 +4885,7 @@ STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Prikazuj STR_AI_GAME_SCRIPT :{BLACK}Skripta igre STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Pregled dnevnika skripte igre -STR_ERROR_AI_NO_AI_FOUND :Nije pronađena nijedna prikladna VI.{}Učitana zamena neće raditi ništa.{}Možete preuzeti nekoliko VI preko sistema za preuzimanje dodataka +STR_ERROR_AI_NO_AI_FOUND :Nije pronađena nijedna odgovarajuća VI.{}Učitana je zamena koja neće raditi ništa.{}Možete preuzeti nekoliko VI preko sistema za preuzimanje dodataka STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Jedna od pokrenutih skripti je prestala da radi. Molimo za prijavu greške autoru skripte sa slikom prozora za korigovanje VI / skripte STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Prozor za korigovanje VI / skripte je dostupan samo na serveru @@ -4802,10 +4938,14 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Slika ek STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Slika umanjene mape # Script Parameters -STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parametri VI +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametri +STR_AI_SETTINGS_CAPTION_AI :AI +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Skripta igre STR_AI_SETTINGS_CLOSE :{BLACK}Zatvori STR_AI_SETTINGS_RESET :{BLACK}Poništi STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} +STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] +STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window @@ -4815,13 +4955,13 @@ STR_TEXTFILE_WRAP_TEXT :{WHITE}Prelomit STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK} Prelomiti tekst prozora tako da stane bez potrebe skrolovanja STR_TEXTFILE_VIEW_README :{BLACK}Uputstvo STR_TEXTFILE_VIEW_README_TOOLTIP :Prikaži uputstvo za ovaj sadržaj -STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Izmene +STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Dnevnik promena STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Prikaži dnevnik promena za ovaj sadržaj STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licenca STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Prikaži licencu za ovaj sadržaj ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} uputstvo za {STRING} -STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} izmene od {STRING} +STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} promena od {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} licenca od {STRING} STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}OpenTTD dokument '{STRING}' @@ -5268,6 +5408,10 @@ STR_ERROR_NO_RAIL_STATION :{WHITE}Ne posto STR_ERROR_NO_BUS_STATION :{WHITE}Nema autobuske stanice STR_ERROR_NO_DOCK :{WHITE}Ne postoji pristanište STR_ERROR_NO_AIRPORT :{WHITE}Ne postoji aerodrom/heliodrom +STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Ne postoje stanice sa odgovarajućim tipom puta +STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Ne postoje stanice sa odgovarajućim tipom tramvajske železnice +STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Ne postoje odgovarajuće stanice za zglobna drumska vozila.{}Zglobnim drumskim vozilima su neophodne stanice kroz koje se prolazi +STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Ovaj avion ne može sleteti na ovaj heliodrom STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Ne postoji železničko čvorište STR_ERROR_NO_BUOY :{WHITE}Ne postoji bova @@ -5275,6 +5419,8 @@ STR_ERROR_NO_BUOY :{WHITE}Ne posto STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Raspored se ne može dodeliti vozilu... STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vozila mogu čekati samo na stanicama STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Ovo vozilo ne staje na tu stanicu +STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... raspored nije kompletan +STR_ERROR_TIMETABLE_NOT_STARTED :{WHITE}... raspored nije započet # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... ima previše znakova @@ -5753,8 +5899,13 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}hilj. +STR_CURRENCY_SHORT_MEGA :{NBSP}mil. +STR_CURRENCY_SHORT_GIGA :{NBSP}mlrd. +STR_CURRENCY_SHORT_TERA :{NBSP}tril. 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} @@ -5767,6 +5918,8 @@ STR_JUST_DATE_SHORT :{DATE_SHORT} STR_JUST_DATE_LONG :{DATE_LONG} STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} +STR_JUST_STRING1 :{STRING} +STR_JUST_STRING2 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 86944c02bf..95fcfefccb 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -256,9 +256,9 @@ STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}米 # Time units used in string control characters -STR_UNITS_DAYS :{COMMA}{NBSP} 日 -STR_UNITS_SECONDS :{COMMA}{NBSP} 秒 -STR_UNITS_TICKS :{COMMA}{NBSP} 刻 +STR_UNITS_DAYS :{COMMA}{NBSP}日 +STR_UNITS_SECONDS :{COMMA}{NBSP}秒 +STR_UNITS_TICKS :{COMMA}{NBSP}刻 STR_UNITS_MONTHS :{NUM}{NBSP}个月 STR_UNITS_MINUTES :{NUM}{NBSP}分 @@ -3563,7 +3563,7 @@ STR_NEWGRF_BROKEN :{WHITE}NewGRF ' STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}{1:ENGINE}机车车厢的状态没在车库内发生变动 STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}当车辆不在车库中时,这将改变 '{1:ENGINE}' 的车辆长度. STR_NEWGRF_BROKEN_CAPACITY :{WHITE}它会在 '{1:ENGINE}' 在机厂外或不在接受改装时改変其运载能力 -STR_BROKEN_VEHICLE_LENGTH :{WHITE} '{1:COMPANY}' 公司的列车 '{0:VEHICLE}' 长度无效。这可能是 NewGRF 导致。游戏可能会失去同步或崩溃。 +STR_BROKEN_VEHICLE_LENGTH :{WHITE}{1:COMPANY} 所拥有的列车 {0:VEHICLE} 长度无效。这个错误可能是由 NewGRF 导致的。游戏可能会无法同步或崩溃。 STR_NEWGRF_BUGGY :{WHITE}NewGRF '{STRING}' 的信息不正确 STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}购买'{1:ENGINE}' 后,将造成货物/运费的参数与购买列表不符,这将有可能造成自动更新/购买不成功。 @@ -3613,7 +3613,7 @@ STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (都市) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}人口:{ORANGE}{COMMA}{BLACK} 房屋:{ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} 上月:{ORANGE}{COMMA}{BLACK} 最大:{ORANGE}{COMMA} -STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}{CARGO_LIST} 最后分钟:{ORANGE}{COMMA}{BLACK} 最大:{ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}上分钟产出的{CARGO_LIST}:{ORANGE}{COMMA}{BLACK}最大产量:{ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}城镇发展所必需的货物: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{RED} 需要: {ORANGE}{STRING} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} 冬季的需求 @@ -3964,7 +3964,7 @@ STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRI STR_INDUSTRY_VIEW_REQUIRES :{BLACK}需要: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRING}{BLACK}{3:STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} 等待中{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}:{CARGO_SHORT}在库存中{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}改变产量 STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}修改产量 (百分比, 最高 800%) diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 3f3934b3a6..e55b251bad 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -610,7 +610,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Gráfica STR_GRAPH_INCOME_CAPTION :{WHITE}Gráfica de Ingresos STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Unidades de carga entregadas STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Nivel de desempeño de empresas (máximo=1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Gráfica del Valor de la Empresa +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Gráfica de Valor de la Empresa STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Últimos 72 minutos diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 03513bbae8..d8174f2b7e 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -381,6 +381,7 @@ STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP} # Time units used in string control characters +STR_UNITS_MINUTES :{NUM}{NBSP}хвилин{P а и ""} # Common window strings @@ -1027,6 +1028,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Відт STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Відкрити вікно групи з центром на групах транспорту +STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION} тепер приймає: {CARGO_LIST} 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} @@ -1214,6 +1216,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Змен STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Збільшити кількість своєї валюти за 1 фунт (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Встановити обмінний курс своєї валюти до 1 фунта (£) +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Встановити роздільник для своєї валюти STR_CURRENCY_PREFIX :{LTBLUE}Префікс: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Встановити префікс для своєї валюти @@ -2011,8 +2014,9 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Автомат STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Налаштування року впровадження світлофорів замість семафорів. До цього року будуть встановлюватись лише семафори. STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Сигнали, доступні при циклічному переборі: {STRING} -STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Налаштування типу сигналів, що доступні при зміні типу за допомогою Ctrl+клац мишею +STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Налаштування типу сигналів, що доступні при циклічному переборі в панелі будівництва сигналів за допомогою Ctrl+клац мишею ###length 2 +STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :Тільки поточна група STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :всі видимі STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Показувати типи сигналів: {STRING} @@ -2446,6 +2450,7 @@ STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Дата STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Поточна дата STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}год {NUM}хв STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}Тривалість гри +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}Тривалість гри{}без паузи STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Мова, версія сервера, та інше. STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Натисніть на гру із списку, щоб вибрати її @@ -3353,6 +3358,7 @@ STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :BLACK}Обер STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Назви міст: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Виберіть стиль назв міст STR_MAPGEN_DATE :{BLACK}Дата: +STR_MAPGEN_DATE_TOOLTIP :{BLACK}Обрати початкову дату STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Кількість виробництв: STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :BLACK}Оберіть щільність виробництв або випадкову кількість STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Найвища гора: @@ -3373,6 +3379,7 @@ STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Ріки STR_MAPGEN_SMOOTHNESS :{BLACK}Гладкість: STR_MAPGEN_VARIETY :{BLACK}Розподіл різноманітності: STR_MAPGEN_GENERATE :{WHITE}Генерувати +STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Створити світ для гри в OpenTTD! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Налаштування NewGRF STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Показати налаштування NewGRF STR_MAPGEN_AI_SETTINGS :{BLACK}Налаштування ШІ @@ -4832,7 +4839,7 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Вік STR_AI_CONFIG_CAPTION_AI :{WHITE}Налаштування ШІ STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Налаштування ігрового скрипту STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Ігровий скрипт, який буде завантажено в наступній грі -STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}АІ, які будуть завантажені в наступній грі +STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}ШІ, які будуть завантажені в наступній грі STR_AI_CONFIG_HUMAN_PLAYER :Гравець-людина STR_AI_CONFIG_RANDOM_AI :Випадковий ШІ STR_AI_CONFIG_NONE :(нема) @@ -4892,7 +4899,8 @@ STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STR # Textfile window STR_TEXTFILE_JUMPLIST :{WHITE}Зміст STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING} -STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Повернутися до історії навігації +STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Крок назад в історії навігації +STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Крок вперед в історії навігації STR_TEXTFILE_WRAP_TEXT :{WHITE}Розмістити текст STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Розмістити текст у вікні без необхідності прокрутки STR_TEXTFILE_VIEW_README :{BLACK}Інструкція From f180262aee5d6c59c4d60c5573155731d3e2fcbf Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 2 Mar 2024 20:45:30 +0000 Subject: [PATCH 041/695] Fix #12154: Incorrect calendar day lengths with minutes per year setting (#12158) --- src/timer/timer_game_calendar.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/timer/timer_game_calendar.cpp b/src/timer/timer_game_calendar.cpp index 3b7bc870a8..30f938464c 100644 --- a/src/timer/timer_game_calendar.cpp +++ b/src/timer/timer_game_calendar.cpp @@ -105,10 +105,13 @@ bool TimerManager::Elapsed([[maybe_unused]] TimerGameCalendar /* If we are using a non-default calendar progression speed, we need to check the sub_date_fract before updating date_fract. */ if (_settings_game.economy.minutes_per_calendar_year != CalendarTime::DEF_MINUTES_PER_YEAR) { - TimerGameCalendar::sub_date_fract++; + TimerGameCalendar::sub_date_fract += Ticks::DAY_TICKS; /* Check if we are ready to increment date_fract */ - if (TimerGameCalendar::sub_date_fract < (Ticks::DAY_TICKS * _settings_game.economy.minutes_per_calendar_year) / CalendarTime::DEF_MINUTES_PER_YEAR) return false; + const uint16_t threshold = (_settings_game.economy.minutes_per_calendar_year * Ticks::DAY_TICKS) / CalendarTime::DEF_MINUTES_PER_YEAR; + if (TimerGameCalendar::sub_date_fract < threshold) return false; + + TimerGameCalendar::sub_date_fract = std::min(TimerGameCalendar::sub_date_fract - threshold, Ticks::DAY_TICKS - 1); } TimerGameCalendar::date_fract++; From c5afc9173c526160e34f076b097c8ef4bfc2c42d Mon Sep 17 00:00:00 2001 From: Kuhnovic <68320206+Kuhnovic@users.noreply.github.com> Date: Sat, 2 Mar 2024 21:45:54 +0100 Subject: [PATCH 042/695] Fix #12176: Ships are circling in one place (#12181) --- src/pathfinder/yapf/yapf_ship.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp index d1b3daa708..9ad64163f8 100644 --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -259,10 +259,19 @@ public: * caching the full path the ship can get stuck in a loop. */ const WaterRegionPatchDesc end_water_patch = GetWaterRegionPatchInfo(node->GetTile()); const WaterRegionPatchDesc start_water_patch = GetWaterRegionPatchInfo(tile); + assert(start_water_patch == high_level_path.front()); while (node->m_parent) { const WaterRegionPatchDesc node_water_patch = GetWaterRegionPatchInfo(node->GetTile()); - if (node_water_patch == start_water_patch || (!is_intermediate_destination && node_water_patch != end_water_patch)) { + + const bool node_water_patch_on_high_level_path = std::find(high_level_path.begin(), high_level_path.end(), node_water_patch) != high_level_path.end(); + const bool add_full_path = !is_intermediate_destination && node_water_patch != end_water_patch; + + /* The cached path must always lead to a region patch that's on the high level path. + * This is what can happen when that's not the case https://github.com/OpenTTD/OpenTTD/issues/12176. */ + if (add_full_path || !node_water_patch_on_high_level_path || node_water_patch == start_water_patch) { path_cache.push_front(node->GetTrackdir()); + } else { + path_cache.clear(); } node = node->m_parent; } From 278c3a7db1532419af3ba83775cc40389f363909 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 2 Mar 2024 13:49:54 +0000 Subject: [PATCH 043/695] Codechange: Use reference instead of copy of NewGRF speclist item. --- src/newgrf_roadstop.cpp | 14 +++++++------- src/newgrf_station.cpp | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/newgrf_roadstop.cpp b/src/newgrf_roadstop.cpp index 81e10a0b7b..425865adae 100644 --- a/src/newgrf_roadstop.cpp +++ b/src/newgrf_roadstop.cpp @@ -153,8 +153,8 @@ uint32_t RoadStopScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint if (type == this->type) SetBit(res, 20); if (IsCustomRoadStopSpecIndex(nearby_tile)) { - const RoadStopSpecList ssl = BaseStation::GetByTile(nearby_tile)->roadstop_speclist[GetCustomRoadStopSpecIndex(nearby_tile)]; - res |= 1 << (ssl.grfid != grfid ? 9 : 8) | ClampTo(ssl.localidx); + const auto &sm = BaseStation::GetByTile(nearby_tile)->roadstop_speclist[GetCustomRoadStopSpecIndex(nearby_tile)]; + res |= 1 << (sm.grfid != grfid ? 9 : 8) | ClampTo(sm.localidx); } return res; } @@ -167,8 +167,8 @@ uint32_t RoadStopScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint if (!IsRoadStopTile(nearby_tile)) return 0xFFFFFFFF; if (!IsCustomRoadStopSpecIndex(nearby_tile)) return 0; - const RoadStopSpecList ssl = BaseStation::GetByTile(nearby_tile)->roadstop_speclist[GetCustomRoadStopSpecIndex(nearby_tile)]; - return ssl.grfid; + const auto &sm = BaseStation::GetByTile(nearby_tile)->roadstop_speclist[GetCustomRoadStopSpecIndex(nearby_tile)]; + return sm.grfid; } /* 16 bit road stop ID of nearby tiles */ @@ -180,9 +180,9 @@ uint32_t RoadStopScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint uint32_t grfid = this->st->roadstop_speclist[GetCustomRoadStopSpecIndex(this->tile)].grfid; - const RoadStopSpecList ssl = BaseStation::GetByTile(nearby_tile)->roadstop_speclist[GetCustomRoadStopSpecIndex(nearby_tile)]; - if (ssl.grfid == grfid) { - return ssl.localidx; + const auto &sm = BaseStation::GetByTile(nearby_tile)->roadstop_speclist[GetCustomRoadStopSpecIndex(nearby_tile)]; + if (sm.grfid == grfid) { + return sm.localidx; } return 0xFFFE; diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index b556c66ded..50509dd9ca 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -360,8 +360,8 @@ TownScopeResolver *StationResolverObject::GetTown() uint32_t res = GB(GetStationGfx(nearby_tile), 1, 2) << 12 | !!perpendicular << 11 | !!same_station << 10; if (IsCustomStationSpecIndex(nearby_tile)) { - const StationSpecList ssl = BaseStation::GetByTile(nearby_tile)->speclist[GetCustomStationSpecIndex(nearby_tile)]; - res |= 1 << (ssl.grfid != grfid ? 9 : 8) | ClampTo(ssl.localidx); + const auto &sm = BaseStation::GetByTile(nearby_tile)->speclist[GetCustomStationSpecIndex(nearby_tile)]; + res |= 1 << (sm.grfid != grfid ? 9 : 8) | ClampTo(sm.localidx); } return res; } @@ -372,8 +372,8 @@ TownScopeResolver *StationResolverObject::GetTown() if (!HasStationTileRail(nearby_tile)) return 0xFFFFFFFF; if (!IsCustomStationSpecIndex(nearby_tile)) return 0; - const StationSpecList ssl = BaseStation::GetByTile(nearby_tile)->speclist[GetCustomStationSpecIndex(nearby_tile)]; - return ssl.grfid; + const auto &sm = BaseStation::GetByTile(nearby_tile)->speclist[GetCustomStationSpecIndex(nearby_tile)]; + return sm.grfid; } case 0x6B: { // 16 bit Station ID of nearby tiles @@ -384,9 +384,9 @@ TownScopeResolver *StationResolverObject::GetTown() uint32_t grfid = this->st->speclist[GetCustomStationSpecIndex(this->tile)].grfid; - const StationSpecList ssl = BaseStation::GetByTile(nearby_tile)->speclist[GetCustomStationSpecIndex(nearby_tile)]; - if (ssl.grfid == grfid) { - return ssl.localidx; + const auto &sm = BaseStation::GetByTile(nearby_tile)->speclist[GetCustomStationSpecIndex(nearby_tile)]; + if (sm.grfid == grfid) { + return sm.localidx; } return 0xFFFE; From 41b3314d768e74a0bbb193fb5fdedee7eca49019 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 2 Mar 2024 13:49:55 +0000 Subject: [PATCH 044/695] Codechange: Replace separate Station/RoadStopSpecList with template struct. Reduces duplication and simplifies reuse. Additionally naming an item that is used in a list as a ...List was pretty weird. --- src/base_station_base.h | 19 +++++++------------ src/saveload/station_sl.cpp | 12 ++++++------ 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/base_station_base.h b/src/base_station_base.h index 82b6c967b2..4a676361ab 100644 --- a/src/base_station_base.h +++ b/src/base_station_base.h @@ -19,16 +19,11 @@ typedef Pool StationPool; extern StationPool _station_pool; -struct StationSpecList { - const StationSpec *spec; - uint32_t grfid; ///< GRF ID of this custom station - uint16_t localidx; ///< Station ID within GRF of station -}; - -struct RoadStopSpecList { - const RoadStopSpec *spec; - uint32_t grfid; ///< GRF ID of this custom road stop - uint16_t localidx; ///< Station ID within GRF of road stop +template +struct SpecMapping { + const T *spec; ///< Custom spec. + uint32_t grfid; ///< GRF ID of this custom spec. + uint16_t localidx; ///< Local ID within GRF of this custom spec. }; struct RoadStopTileData { @@ -74,8 +69,8 @@ struct BaseStation : StationPool::PoolItem<&_station_pool> { Owner owner; ///< The owner of this station StationFacility facilities; ///< The facilities that this station has - std::vector speclist; ///< List of rail station specs of this station. - std::vector roadstop_speclist; ///< List of road stop specs of this station + std::vector> speclist; ///< List of rail station specs of this station. + std::vector> roadstop_speclist; ///< List of road stop specs of this station TimerGameCalendar::Date build_date; ///< Date of construction diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index 50227920dc..ee86e5523e 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -205,9 +205,9 @@ static void SwapPackets(GoodsEntry *ge) class SlStationSpecList : public DefaultSaveLoadHandler { public: inline static const SaveLoad description[] = { - SLE_CONDVAR(StationSpecList, grfid, SLE_UINT32, SLV_27, SL_MAX_VERSION), - SLE_CONDVAR(StationSpecList, localidx, SLE_FILE_U8 | SLE_VAR_U16, SLV_27, SLV_EXTEND_ENTITY_MAPPING), - SLE_CONDVAR(StationSpecList, localidx, SLE_UINT16, SLV_EXTEND_ENTITY_MAPPING, SL_MAX_VERSION), + SLE_CONDVAR(SpecMapping, grfid, SLE_UINT32, SLV_27, SL_MAX_VERSION), + SLE_CONDVAR(SpecMapping, localidx, SLE_FILE_U8 | SLE_VAR_U16, SLV_27, SLV_EXTEND_ENTITY_MAPPING), + SLE_CONDVAR(SpecMapping, localidx, SLE_UINT16, SLV_EXTEND_ENTITY_MAPPING, SL_MAX_VERSION), }; inline const static SaveLoadCompatTable compat_description = _station_spec_list_sl_compat; @@ -237,9 +237,9 @@ uint8_t SlStationSpecList::last_num_specs; class SlRoadStopSpecList : public DefaultSaveLoadHandler { public: inline static const SaveLoad description[] = { - SLE_VAR(RoadStopSpecList, grfid, SLE_UINT32), - SLE_CONDVAR(RoadStopSpecList, localidx, SLE_FILE_U8 | SLE_VAR_U16, SLV_27, SLV_EXTEND_ENTITY_MAPPING), - SLE_CONDVAR(RoadStopSpecList, localidx, SLE_UINT16, SLV_EXTEND_ENTITY_MAPPING, SL_MAX_VERSION), + SLE_VAR(SpecMapping, grfid, SLE_UINT32), + SLE_CONDVAR(SpecMapping, localidx, SLE_FILE_U8 | SLE_VAR_U16, SLV_27, SLV_EXTEND_ENTITY_MAPPING), + SLE_CONDVAR(SpecMapping, localidx, SLE_UINT16, SLV_EXTEND_ENTITY_MAPPING, SL_MAX_VERSION), }; inline const static SaveLoadCompatTable compat_description = _station_road_stop_spec_list_sl_compat; From cff48c0f6312bbd9c9ac6f240654f5fba8336799 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 2 Mar 2024 13:49:55 +0000 Subject: [PATCH 045/695] Codechange: Templatise SlStationSpecList to reduce duplication. SlStationSpecList now handles both StationSpec and RoadStopSpec, and replaces indexed array access with range-for and reserve/emplace_back pattern. --- src/base_station_base.h | 10 ++++++ src/saveload/station_sl.cpp | 70 +++++++++++++------------------------ 2 files changed, 34 insertions(+), 46 deletions(-) diff --git a/src/base_station_base.h b/src/base_station_base.h index 4a676361ab..91f1ec127e 100644 --- a/src/base_station_base.h +++ b/src/base_station_base.h @@ -305,4 +305,14 @@ struct SpecializedStation : public BaseStation { static Pool::IterateWrapper Iterate(size_t from = 0) { return Pool::IterateWrapper(from); } }; +/** + * Get spec mapping list for each supported custom spec type. + * @tparam T Spec type. + * @param bst Station of custom spec list. + * @return Speclist of custom spec type. + */ +template std::vector> &GetStationSpecList(BaseStation *bst); +template <> inline std::vector> &GetStationSpecList(BaseStation *bst) { return bst->speclist; } +template <> inline std::vector> &GetStationSpecList(BaseStation *bst) { return bst->roadstop_speclist; } + #endif /* BASE_STATION_BASE_H */ diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index ee86e5523e..3de5125fb8 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -202,65 +202,43 @@ static void SwapPackets(GoodsEntry *ge) } } -class SlStationSpecList : public DefaultSaveLoadHandler { +template +class SlStationSpecList : public DefaultSaveLoadHandler, BaseStation> { public: inline static const SaveLoad description[] = { - SLE_CONDVAR(SpecMapping, grfid, SLE_UINT32, SLV_27, SL_MAX_VERSION), - SLE_CONDVAR(SpecMapping, localidx, SLE_FILE_U8 | SLE_VAR_U16, SLV_27, SLV_EXTEND_ENTITY_MAPPING), - SLE_CONDVAR(SpecMapping, localidx, SLE_UINT16, SLV_EXTEND_ENTITY_MAPPING, SL_MAX_VERSION), + SLE_CONDVAR(SpecMapping, grfid, SLE_UINT32, SLV_27, SL_MAX_VERSION), + SLE_CONDVAR(SpecMapping, localidx, SLE_FILE_U8 | SLE_VAR_U16, SLV_27, SLV_EXTEND_ENTITY_MAPPING), + SLE_CONDVAR(SpecMapping, localidx, SLE_UINT16, SLV_EXTEND_ENTITY_MAPPING, SL_MAX_VERSION), }; inline const static SaveLoadCompatTable compat_description = _station_spec_list_sl_compat; - static uint8_t last_num_specs; ///< Number of specs of the last loaded station. + static inline uint8_t last_num_specs; ///< Number of specs of the last loaded station. void Save(BaseStation *bst) const override { - SlSetStructListLength(bst->speclist.size()); - for (uint i = 0; i < bst->speclist.size(); i++) { - SlObject(&bst->speclist[i], this->GetDescription()); + auto &speclist = GetStationSpecList(bst); + SlSetStructListLength(speclist.size()); + for (auto &sm : speclist) { + SlObject(&sm, this->GetDescription()); } } void Load(BaseStation *bst) const override { - uint8_t num_specs = IsSavegameVersionBefore(SLV_SAVELOAD_LIST_LENGTH) ? last_num_specs : (uint8_t)SlGetStructListLength(UINT8_MAX); + size_t num_specs = IsSavegameVersionBefore(SLV_SAVELOAD_LIST_LENGTH) ? last_num_specs : SlGetStructListLength(UINT8_MAX); - bst->speclist.resize(num_specs); - for (uint i = 0; i < num_specs; i++) { - SlObject(&bst->speclist[i], this->GetLoadDescription()); + auto &speclist = GetStationSpecList(bst); + speclist.reserve(num_specs); + for (size_t index = 0; index < num_specs; ++index) { + auto &sm = speclist.emplace_back(); + SlObject(&sm, this->GetLoadDescription()); } } }; -uint8_t SlStationSpecList::last_num_specs; - -class SlRoadStopSpecList : public DefaultSaveLoadHandler { -public: - inline static const SaveLoad description[] = { - SLE_VAR(SpecMapping, grfid, SLE_UINT32), - SLE_CONDVAR(SpecMapping, localidx, SLE_FILE_U8 | SLE_VAR_U16, SLV_27, SLV_EXTEND_ENTITY_MAPPING), - SLE_CONDVAR(SpecMapping, localidx, SLE_UINT16, SLV_EXTEND_ENTITY_MAPPING, SL_MAX_VERSION), - }; - inline const static SaveLoadCompatTable compat_description = _station_road_stop_spec_list_sl_compat; - - void Save(BaseStation *bst) const override - { - SlSetStructListLength(bst->roadstop_speclist.size()); - for (uint i = 0; i < bst->roadstop_speclist.size(); i++) { - SlObject(&bst->roadstop_speclist[i], this->GetDescription()); - } - } - - void Load(BaseStation *bst) const override - { - uint8_t num_specs = (uint8_t)SlGetStructListLength(UINT8_MAX); - - bst->roadstop_speclist.resize(num_specs); - for (uint i = 0; i < num_specs; i++) { - SlObject(&bst->roadstop_speclist[i], this->GetLoadDescription()); - } - } -}; +/* Instantiate SlStationSpecList classes. */ +template class SlStationSpecList; +template class SlStationSpecList; class SlStationCargo : public DefaultSaveLoadHandler { public: @@ -514,12 +492,12 @@ static const SaveLoad _old_station_desc[] = { /* Used by newstations for graphic variations */ SLE_CONDVAR(Station, random_bits, SLE_UINT16, SLV_27, SL_MAX_VERSION), SLE_CONDVAR(Station, waiting_triggers, SLE_UINT8, SLV_27, SL_MAX_VERSION), - SLEG_CONDVAR("num_specs", SlStationSpecList::last_num_specs, SLE_UINT8, SLV_27, SL_MAX_VERSION), + SLEG_CONDVAR("num_specs", SlStationSpecList::last_num_specs, SLE_UINT8, SLV_27, SL_MAX_VERSION), SLE_CONDREFLIST(Station, loading_vehicles, REF_VEHICLE, SLV_57, SL_MAX_VERSION), SLEG_STRUCTLIST("goods", SlStationGoods), - SLEG_CONDSTRUCTLIST("speclist", SlStationSpecList, SLV_27, SL_MAX_VERSION), + SLEG_CONDSTRUCTLIST("speclist", SlStationSpecList, SLV_27, SL_MAX_VERSION), }; struct STNSChunkHandler : ChunkHandler { @@ -601,7 +579,7 @@ public: /* Used by newstations for graphic variations */ SLE_VAR(BaseStation, random_bits, SLE_UINT16), SLE_VAR(BaseStation, waiting_triggers, SLE_UINT8), - SLEG_CONDVAR("num_specs", SlStationSpecList::last_num_specs, SLE_UINT8, SL_MIN_VERSION, SLV_SAVELOAD_LIST_LENGTH), + SLEG_CONDVAR("num_specs", SlStationSpecList::last_num_specs, SLE_UINT8, SL_MIN_VERSION, SLV_SAVELOAD_LIST_LENGTH), }; inline const static SaveLoadCompatTable compat_description = _station_base_sl_compat; @@ -718,8 +696,8 @@ static const SaveLoad _station_desc[] = { SLE_SAVEBYTE(BaseStation, facilities), SLEG_STRUCT("normal", SlStationNormal), SLEG_STRUCT("waypoint", SlStationWaypoint), - SLEG_CONDSTRUCTLIST("speclist", SlStationSpecList, SLV_27, SL_MAX_VERSION), - SLEG_CONDSTRUCTLIST("roadstopspeclist", SlRoadStopSpecList, SLV_NEWGRF_ROAD_STOPS, SL_MAX_VERSION), + SLEG_CONDSTRUCTLIST("speclist", SlStationSpecList, SLV_27, SL_MAX_VERSION), + SLEG_CONDSTRUCTLIST("roadstopspeclist", SlStationSpecList, SLV_NEWGRF_ROAD_STOPS, SL_MAX_VERSION), }; struct STNNChunkHandler : ChunkHandler { From b2ca6e1ac8216d0cacb1e44c8e08856cc8755f59 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 3 Mar 2024 09:31:04 +0000 Subject: [PATCH 046/695] Codefix: Remove no-longer used ship special-case. (#12192) This special-case has not been triggered since multi-tile docks were introduced. --- src/pathfinder/yapf/yapf.h | 3 +-- src/pathfinder/yapf/yapf_ship.cpp | 18 +++--------------- src/ship_cmd.cpp | 2 +- 3 files changed, 5 insertions(+), 18 deletions(-) diff --git a/src/pathfinder/yapf/yapf.h b/src/pathfinder/yapf/yapf.h index 80b6c4ca54..ca7b4f02c9 100644 --- a/src/pathfinder/yapf/yapf.h +++ b/src/pathfinder/yapf/yapf.h @@ -22,11 +22,10 @@ * @param v the ship that needs to find a path * @param tile the tile to find the path from (should be next tile the ship is about to enter) * @param enterdir diagonal direction which the ship will enter this new tile from - * @param tracks available tracks on the new tile (to choose from) * @param path_found [out] Whether a path has been found (true) or has been guessed (false) * @return the best trackdir for next turn or INVALID_TRACK if the path could not be found */ -Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, ShipPathCache &path_cache); +Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, bool &path_found, ShipPathCache &path_cache); /** * Returns true if it is better to reverse the ship before leaving depot using YAPF. diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp index 9ad64163f8..bf07e2c448 100644 --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -203,20 +203,8 @@ public: return result; } - static Trackdir ChooseShipTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, ShipPathCache &path_cache) + static Trackdir ChooseShipTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, bool &path_found, ShipPathCache &path_cache) { - /* Handle special case - when next tile is destination tile. */ - if (tile == v->dest_tile) { - /* Convert tracks to trackdirs */ - TrackdirBits trackdirs = TrackBitsToTrackdirBits(tracks); - /* Limit to trackdirs reachable from enterdir. */ - trackdirs &= DiagdirReachesTrackdirs(enterdir); - - /* use vehicle's current direction if that's possible, otherwise use first usable one. */ - Trackdir veh_dir = v->GetVehicleTrackdir(); - return (HasTrackdir(trackdirs, veh_dir)) ? veh_dir : (Trackdir)FindFirstBit(trackdirs); - } - /* Move back to the old tile/trackdir (where ship is coming from). */ const TileIndex src_tile = TileAddByDiagDir(tile, ReverseDiagDir(enterdir)); const Trackdir trackdir = v->GetVehicleTrackdir(); @@ -445,9 +433,9 @@ struct CYapfShip : CYapfTpath); break; + case VPF_YAPF: track = YapfShipChooseTrack(v, tile, enterdir, path_found, v->path); break; default: NOT_REACHED(); } } From 8172e252732559a862400b248ed6579531b97acd Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 3 Mar 2024 16:41:02 +0000 Subject: [PATCH 047/695] Codechange: Use range-for when iterating station speclists. (#12212) This replaces indexed access. --- src/newgrf_roadstop.cpp | 10 ++++------ src/newgrf_station.cpp | 10 ++++------ src/saveload/station_sl.cpp | 14 ++++++-------- 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/src/newgrf_roadstop.cpp b/src/newgrf_roadstop.cpp index 425865adae..5192e6546c 100644 --- a/src/newgrf_roadstop.cpp +++ b/src/newgrf_roadstop.cpp @@ -612,11 +612,9 @@ void RoadStopUpdateCachedTriggers(BaseStation *st) /* Combine animation trigger bitmask for all road stop specs * of this station. */ - for (uint i = 0; i < st->roadstop_speclist.size(); i++) { - const RoadStopSpec *ss = st->roadstop_speclist[i].spec; - if (ss != nullptr) { - st->cached_roadstop_anim_triggers |= ss->animation.triggers; - st->cached_roadstop_cargo_triggers |= ss->cargo_triggers; - } + for (const auto &sm : GetStationSpecList(st)) { + if (sm.spec == nullptr) continue; + st->cached_roadstop_anim_triggers |= sm.spec->animation.triggers; + st->cached_roadstop_cargo_triggers |= sm.spec->cargo_triggers; } } diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index 50509dd9ca..abc6c636a7 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -1002,12 +1002,10 @@ void StationUpdateCachedTriggers(BaseStation *st) /* Combine animation trigger bitmask for all station specs * of this station. */ - for (uint i = 0; i < st->speclist.size(); i++) { - const StationSpec *ss = st->speclist[i].spec; - if (ss != nullptr) { - st->cached_anim_triggers |= ss->animation.triggers; - st->cached_cargo_triggers |= ss->cargo_triggers; - } + for (const auto &sm : GetStationSpecList(st)) { + if (sm.spec == nullptr) continue; + st->cached_anim_triggers |= sm.spec->animation.triggers; + st->cached_cargo_triggers |= sm.spec->cargo_triggers; } } diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index 3de5125fb8..35d9b7e81a 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -112,15 +112,13 @@ void AfterLoadStations() { /* Update the speclists of all stations to point to the currently loaded custom stations. */ for (BaseStation *st : BaseStation::Iterate()) { - for (uint i = 0; i < st->speclist.size(); i++) { - if (st->speclist[i].grfid == 0) continue; - - st->speclist[i].spec = StationClass::GetByGrf(st->speclist[i].grfid, st->speclist[i].localidx, nullptr); + for (auto &sm : GetStationSpecList(st)) { + if (sm.grfid == 0) continue; + sm.spec = StationClass::GetByGrf(sm.grfid, sm.localidx, nullptr); } - for (uint i = 0; i < st->roadstop_speclist.size(); i++) { - if (st->roadstop_speclist[i].grfid == 0) continue; - - st->roadstop_speclist[i].spec = RoadStopClass::GetByGrf(st->roadstop_speclist[i].grfid, st->roadstop_speclist[i].localidx, nullptr); + for (auto &sm : GetStationSpecList(st)) { + if (sm.grfid == 0) continue; + sm.spec = RoadStopClass::GetByGrf(sm.grfid, sm.localidx, nullptr); } if (Station::IsExpected(st)) { From 626ee4ab4184068a9779813295a9dace14c3cc82 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 3 Mar 2024 18:34:58 +0000 Subject: [PATCH 048/695] Update: Translations from eints chinese (simplified): 6 changes by WenSimEHRP serbian: 16 changes by nkrs ukrainian: 1 change by StepanIvasyn portuguese (brazilian): 234 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 468 +++++++++++++++--------------- src/lang/serbian.txt | 18 +- src/lang/simplified_chinese.txt | 12 +- src/lang/ukrainian.txt | 2 +- 4 files changed, 257 insertions(+), 243 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 3c40089e35..5d59a13494 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -129,37 +129,37 @@ STR_QUANTITY_N_A :N/D # Two letter abbreviation of cargo name STR_ABBREV_NOTHING : -STR_ABBREV_PASSENGERS :PA +STR_ABBREV_PASSENGERS :PS STR_ABBREV_COAL :CV -STR_ABBREV_MAIL :CO -STR_ABBREV_OIL :PE -STR_ABBREV_LIVESTOCK :GA +STR_ABBREV_MAIL :CR +STR_ABBREV_OIL :PT +STR_ABBREV_LIVESTOCK :GD STR_ABBREV_GOODS :BN -STR_ABBREV_GRAIN :CE -STR_ABBREV_WOOD :MA +STR_ABBREV_GRAIN :CR +STR_ABBREV_WOOD :MD STR_ABBREV_IRON_ORE :MF STR_ABBREV_STEEL :AÇ STR_ABBREV_VALUABLES :OV STR_ABBREV_COPPER_ORE :MC -STR_ABBREV_MAIZE :MI +STR_ABBREV_MAIZE :ML STR_ABBREV_FRUIT :FT STR_ABBREV_DIAMONDS :DM STR_ABBREV_FOOD :AL STR_ABBREV_PAPER :PP STR_ABBREV_GOLD :OU STR_ABBREV_WATER :AG -STR_ABBREV_WHEAT :TG -STR_ABBREV_RUBBER :BO -STR_ABBREV_SUGAR :AÇ +STR_ABBREV_WHEAT :TR +STR_ABBREV_RUBBER :BR +STR_ABBREV_SUGAR :AR STR_ABBREV_TOYS :BR STR_ABBREV_SWEETS :DO STR_ABBREV_COLA :CO STR_ABBREV_CANDYFLOSS :AD STR_ABBREV_BUBBLES :BO -STR_ABBREV_TOFFEE :CL +STR_ABBREV_TOFFEE :CM STR_ABBREV_BATTERIES :PI STR_ABBREV_PLASTIC :PL -STR_ABBREV_FIZZY_DRINKS :RE +STR_ABBREV_FIZZY_DRINKS :RF STR_ABBREV_ALL :TUDO # 'Mode' of transport for cargoes @@ -270,12 +270,12 @@ STR_UNITS_PERIODS :{NUM}{NBSP}per # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtro: STR_LIST_FILTER_OSKTITLE :{BLACK}Digitar uma ou mais palavras-chave para procurar na lista -STR_LIST_FILTER_TOOLTIP :{BLACK}Digite uma ou mais palavras-chave para procurar na lista +STR_LIST_FILTER_TOOLTIP :{BLACK}Digitar uma ou mais palavras-chave para procurar na lista -STR_TOOLTIP_GROUP_ORDER :{BLACK}Selecionar ordem de agrupamento -STR_TOOLTIP_SORT_ORDER :{BLACK}Selecionar ordenação (descendente/ascendente) -STR_TOOLTIP_SORT_CRITERIA :{BLACK}Selecionar critério de ordenação -STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Selecionar o critério de procura +STR_TOOLTIP_GROUP_ORDER :{BLACK}Escolher a ordem de agrupamento +STR_TOOLTIP_SORT_ORDER :{BLACK}Escolher a ordenação (descendente/ascendente) +STR_TOOLTIP_SORT_CRITERIA :{BLACK}Escolher o critério de ordenação +STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Escolher o critério de procura STR_BUTTON_SORT_BY :{BLACK}Ordenar por STR_BUTTON_CATCHMENT :{BLACK}Cobertura STR_TOOLTIP_CATCHMENT :{BLACK}Mostrar/Ocultar a área de cobertura @@ -290,7 +290,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Clique e STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Alternar entre janela grande/pequena STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de rolagem - desloca a lista para cima/baixo STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de rolagem - desloca a lista para a esquerda/direita -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolir construções etc. em um quadrado do terreno. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolir construções etc. em um quadrado do terreno. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado # Show engines button ###length VEHICLE_TYPES @@ -308,7 +308,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Ativando # Query window STR_BUTTON_DEFAULT :{BLACK}Padrão STR_BUTTON_CANCEL :{BLACK}Cancelar -STR_BUTTON_OK :{BLACK}Confirmar +STR_BUTTON_OK :{BLACK}OK STR_WARNING_PASSWORD_SECURITY :{YELLOW}Aviso: os administradores do servidor podem ler qualquer texto inserido aqui. # On screen keyboard window @@ -331,7 +331,7 @@ STR_SORT_BY_PRODUCTION :Produção STR_SORT_BY_TYPE :Tipo STR_SORT_BY_TRANSPORTED :Transportado STR_SORT_BY_NUMBER :Número -STR_SORT_BY_PROFIT_LAST_YEAR :Lucro no ano passado +STR_SORT_BY_PROFIT_LAST_YEAR :Lucro do último ano STR_SORT_BY_PROFIT_LAST_PERIOD :Lucro no último período STR_SORT_BY_PROFIT_THIS_YEAR :Lucro neste ano STR_SORT_BY_PROFIT_THIS_PERIOD :Lucro neste período @@ -361,11 +361,11 @@ STR_SORT_BY_RANGE :Autonomia STR_SORT_BY_POPULATION :População STR_SORT_BY_RATING :Classificação STR_SORT_BY_NUM_VEHICLES :Número de veículos -STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Lucro total no ano passado +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Lucro total no último ano STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD :Lucro total no último período STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Lucro total neste ano STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Lucro total neste período -STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Lucro médio no ano passado +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Lucro médio no último ano STR_SORT_BY_AVERAGE_PROFIT_LAST_PERIOD :Lucro médio no último período STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Lucro médio neste ano STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Lucro médio neste período @@ -381,7 +381,7 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Abrir a # Tooltips for the main toolbar ###length 31 STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausar jogo -STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Acelerar o jogo +STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Avançar rapidamente no jogo STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opções e configurações STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Salvar, abrir ou abandonar jogo, sair do OpenTTD STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Abrir mapa, nova visualização, fluxo de cargas ou lista de sinais @@ -404,7 +404,7 @@ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Afastar STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir infraestrutura ferroviária STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Construir infraestrutura rodoviária STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Construir infraestrutura para bondes -STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Construir infraestrutura de hidrovias +STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Construir infraestrutura hidroviária STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Construir aeroportos STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Abrir menu de paisagismo, menu de árvores ou colocar uma placa STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Abrir janela de som/música @@ -418,16 +418,16 @@ STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Editor de Cenário STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Mover a data inicial 1 ano para trás STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Mover a data inicial 1 ano para frente -STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Clique para inserir o ano de início +STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Clique para digitar o ano de início STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Abrir mapa, visualização extra, lista de sinais, lista de localidades ou de indústrias STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Abrir menu de paisagismo ou gerar um novo mundo STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Construir ou gerar localidades STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Construir ou gerar indústrias STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Construir infraestrutura rodoviária STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construir infraestrutura de bondes -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árvores. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árvores. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Colocar placa -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objeto. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objeto. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado # Scenario editor file menu ###length 7 @@ -673,7 +673,7 @@ STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}Lucro do STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}Lucro do veículo com a menor receita (somente veículos com mais de dois períodos são considerados) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Quantia de dinheiro obtida no trimestre com o menor lucro dos últimos 12 trimestres STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Quantia de dinheiro obtida no trimestre com o maior lucro dos últimos 12 trimestres -STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Unidades de carga entregue nos últimos quatro trimestres +STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Unidades de carga entregues nos últimos quatro trimestres STR_PERFORMANCE_DETAIL_CARGO_TOOLTIP :{BLACK}Número de tipos de carga entregues no último trimestre STR_PERFORMANCE_DETAIL_MONEY_TOOLTIP :{BLACK}Quantia de dinheiro que esta empresa tem no banco STR_PERFORMANCE_DETAIL_LOAN_TOOLTIP :{BLACK}A quantia de dinheiro que esta empresa tomou por empréstimo @@ -721,7 +721,7 @@ STR_PLAYLIST_CLEAR :{TINY_FONT}{BLA STR_PLAYLIST_CHANGE_SET :{BLACK}Mudar conjunto STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Apagar o programa atual (somente Personalizado 1 ou Personalizado 2) STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Mudar a seleção musical para outro conjunto instalado -STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Clique na faixa de música para a adicionar ao programa atual (somente Personalizado 1 ou Personalizado 2) +STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Clique na faixa de música para adicionar ao programa atual (somente Personalizado 1 ou Personalizado 2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Clique na faixa de música para remover do programa atual (somente Personalizado 1 ou Personalizado 2) # Highscore window @@ -758,9 +758,9 @@ STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Mostrar STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Mostrar rotas de transporte no mapa STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Mostrar vegetação no mapa STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Mostrar proprietários dos terrenos no mapa -STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Clique em um tipo de indústria para mostrar/ocultar a indústria. Ctrl+Clique desabilita todos os tipos exceto a selecionada. Ctrl+Clique novamente para habilitar todos os tipos de indústrias -STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Clique em uma empresa para mostrar/ocultar suas propriedades. Ctrl+Clique desabilita todas as empresas exceto a selecionada. Ctrl+Clique novamente para habilitar todas as empresas -STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Clique em uma carga para mostrar/ocultar suas propriedades. Ctrl+Clique desabilita todas as cargas exceto a selecionada. Ctrl+Clique novamente para habilitar todas as cargas +STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Clique em um tipo de indústria para mostrar/ocultar a indústria. Ctrl+Clique para desabilitar todos os tipos, exceto o selecionado. Ctrl+Clique novamente para habilitar todos os tipos de indústrias +STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Clique em uma empresa para mostrar/ocultar suas propriedades. Ctrl+Clique para desabilitar todas as empresas, exceto a selecionada. Ctrl+Clique novamente para habilitar todas as empresas +STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Clique em uma carga para mostrar/ocultar suas propriedades. Ctrl+Clique para desabilitar todas as cargas, exceto a selecionada. Ctrl+Clique novamente para habilitar todas as cargas STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Estradas STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Ferrovias @@ -822,7 +822,7 @@ STR_STATUSBAR_INFINITE_MONEY :{WHITE}(dinheir # News message history STR_MESSAGE_HISTORY :{WHITE}Histórico de Mensagens -STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Uma lista das mensagens de notícias recentes +STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Uma lista das mensagens com notícias recentes STR_MESSAGE_NEWS_FORMAT :{STRING} - {STRING} STR_NEWS_MESSAGE_CAPTION :{WHITE}Mensagem @@ -867,9 +867,9 @@ STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FON STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Nov{G o a} {STRING} em construção perto de {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Nov{G o a} {STRING} sendo plantada perto de {TOWN}! -STR_NEWS_INDUSTRY_CLOSURE_GENERAL :{BIG_FONT}{BLACK}{STRING} anuncia o encerramento iminente! -STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS :{BIG_FONT}{BLACK}Problemas de abastecimento levam {STRING} a anunciar o encerramento iminente! -STR_NEWS_INDUSTRY_CLOSURE_LACK_OF_TREES :{BIG_FONT}{BLACK}Falta de árvores nas proximidades faz {STRING} anunciar o encerramento iminente! +STR_NEWS_INDUSTRY_CLOSURE_GENERAL :{BIG_FONT}{BLACK}{STRING} anuncia o fechamento iminente! +STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS :{BIG_FONT}{BLACK}Problemas de abastecimento levam {STRING} a anunciar o fechamento iminente! +STR_NEWS_INDUSTRY_CLOSURE_LACK_OF_TREES :{BIG_FONT}{BLACK}Falta de árvores nas proximidades faz {STRING} anunciar o fechamento iminente! STR_NEWS_EURO_INTRODUCTION :{BIG_FONT}{BLACK}União Monetária Europeia!{}{}O Euro é introduzido como moeda única para as operações diárias em seu país! STR_NEWS_BEGIN_OF_RECESSION :{BIG_FONT}{BLACK}Recessão Mundial!{}{}Especialistas financeiros temem o pior com a economia em queda! @@ -930,7 +930,7 @@ STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLAC STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Tráfego caótico em {TOWN}!{}{}Programa de reconstrução de estradas financiado por {STRING} provoca 6 meses de sofrimento aos motoristas! STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}Tráfego caótico em {TOWN}!{}{}Programa de reconstrução de estradas financiado por {STRING} provoca 6 minutos de sofrimento aos motoristas! -STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Monopólio dos transportes! +STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Monopólio de transporte! STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLACK}A autoridade local de {TOWN} assinou um contrato com {STRING} por 12 meses de direitos exclusivos de transporte! STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}A autoridade local de {TOWN} assinou um contrato com {STRING} por 12 minutos de direitos exclusivos de transporte! @@ -969,8 +969,8 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Seleçã STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) ###length 43 -STR_GAME_OPTIONS_CURRENCY_GBP :Libras Britânicas -STR_GAME_OPTIONS_CURRENCY_USD :Dólares Norte Americanos +STR_GAME_OPTIONS_CURRENCY_GBP :Libra Britânica +STR_GAME_OPTIONS_CURRENCY_USD :Dólar Norte Americano STR_GAME_OPTIONS_CURRENCY_EUR :Euro STR_GAME_OPTIONS_CURRENCY_JPY :Iene Japonês STR_GAME_OPTIONS_CURRENCY_ATS :Xelim Austríaco @@ -986,10 +986,10 @@ STR_GAME_OPTIONS_CURRENCY_GRD :Dracma Grego STR_GAME_OPTIONS_CURRENCY_HUF :Forint Húngaro STR_GAME_OPTIONS_CURRENCY_ISK :Coroa Islandesa STR_GAME_OPTIONS_CURRENCY_ITL :Lira Italiana -STR_GAME_OPTIONS_CURRENCY_NLG :Guilda Holandesa +STR_GAME_OPTIONS_CURRENCY_NLG :Florim Holandês STR_GAME_OPTIONS_CURRENCY_NOK :Coroa Norueguesa STR_GAME_OPTIONS_CURRENCY_PLN :Złoty Polonês -STR_GAME_OPTIONS_CURRENCY_RON :Lei Romeno +STR_GAME_OPTIONS_CURRENCY_RON :Leu Romeno STR_GAME_OPTIONS_CURRENCY_RUR :Rublo Russo STR_GAME_OPTIONS_CURRENCY_SIT :Tolar Esloveno STR_GAME_OPTIONS_CURRENCY_SEK :Coroa Sueca @@ -1009,12 +1009,12 @@ STR_GAME_OPTIONS_CURRENCY_NTD :Novo Dólar Tai STR_GAME_OPTIONS_CURRENCY_CNY :Renminbi Chinês STR_GAME_OPTIONS_CURRENCY_HKD :Dólar de Hong Kong STR_GAME_OPTIONS_CURRENCY_INR :Rúpia Indiana -STR_GAME_OPTIONS_CURRENCY_IDR :Rupia Indonésia -STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit Malaio +STR_GAME_OPTIONS_CURRENCY_IDR :Rupia da Indonésia +STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit da Malásia STR_GAME_OPTIONS_CURRENCY_LVL :Lats da Letônia STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Salvar automaticamente -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Selecionar o intervalo entre jogos salvos automaticamente +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Escolher o intervalo entre jogos salvos automaticamente # Autosave dropdown ###length 5 @@ -1025,14 +1025,14 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES :A cada 60 minut STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :A cada 120 minutos STR_GAME_OPTIONS_LANGUAGE :{BLACK}Idioma -STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Selecionar o idioma da interface do jogo +STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Escolher o idioma da interface do jogo STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% concluído) STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Tela cheia STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Marque esta caixa para jogar o OpenTTD em modo de tela cheia STR_GAME_OPTIONS_RESOLUTION :{BLACK}Resolução da tela -STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Selecionar a resolução da tela que será usada +STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Escolher a resolução da tela que será usada STR_GAME_OPTIONS_RESOLUTION_OTHER :outra STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} @@ -1046,7 +1046,7 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque e STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}"Driver" atual: {STRING} STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Tamanho da interface -STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Arraste o controle deslizante para definir o tamanho da interface. Ctrl+Arrastar para um ajuste contínuo +STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Arraste o controle deslizante para definir o tamanho da interface. Ctrl+Arraste para um ajuste contínuo STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Detetar automaticamente o tamanho STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Marque esta caixa para detetar automaticamente o tamanho da interface @@ -1075,23 +1075,23 @@ STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Mostrar STR_GAME_OPTIONS_GRAPHICS :{BLACK}Gráficos STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Taxa de atualização da tela -STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Selecionar qual taxa de atualização da tela será usada +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Escolher qual taxa de atualização da tela será usada STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Taxas de atualização superiores a 60Hz podem interferir no desempenho. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos base -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecionar qual conjunto de gráficos base usar (não pode ser alterado no jogo, só a partir do menu principal) -STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Informações adicionais sobre o conjunto de gráficos base +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Escolher qual conjunto de gráficos base usar (não pode ser alterado no jogo, só a partir do menu principal) +STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Informação adicional sobre sobre o conjunto de gráficos base STR_GAME_OPTIONS_BASE_SFX :{BLACK}Conjunto de sons base -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Selecionar qual conjunto de sons base usar (não pode ser alterado no jogo, só a partir do menu principal) -STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Informações sobre o conjunto de sons base +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Escolher qual conjunto de sons base usar (não pode ser alterado no jogo, só a partir do menu principal) +STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Informação adicional sobre sobre o conjunto de sons base STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Conjunto de músicas base -STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selecionar qual conjunto de músicas base usar +STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Escolher qual conjunto de músicas base usar STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Informação adicional sobre o conjunto de músicas base -STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(não exitem plugins para integrar com as plataformas sociais instaladas) +STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(não existem plugins instalados para integrar com as plataformas sociais) STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{BLACK}{STRING} ({STRING}) STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :{BLACK}Plataforma: @@ -1146,19 +1146,19 @@ STR_NUM_HIGH :Alto STR_NUM_CUSTOM :Personalizado STR_NUM_CUSTOM_NUMBER :Personalizado ({NUM}) -STR_VARIETY_NONE :Nenhum -STR_VARIETY_VERY_LOW :Muito Baixo -STR_VARIETY_LOW :Baixo -STR_VARIETY_MEDIUM :Médio -STR_VARIETY_HIGH :Alto -STR_VARIETY_VERY_HIGH :Muito Alto +STR_VARIETY_NONE :Nenhuma +STR_VARIETY_VERY_LOW :Muito Baixa +STR_VARIETY_LOW :Baixa +STR_VARIETY_MEDIUM :Média +STR_VARIETY_HIGH :Alta +STR_VARIETY_VERY_HIGH :Muito Alta ###length 5 -STR_AI_SPEED_VERY_SLOW :Muito Lento -STR_AI_SPEED_SLOW :Lento -STR_AI_SPEED_MEDIUM :Médio -STR_AI_SPEED_FAST :Rápido -STR_AI_SPEED_VERY_FAST :Muito Rápido +STR_AI_SPEED_VERY_SLOW :Muito Lenta +STR_AI_SPEED_SLOW :Lenta +STR_AI_SPEED_MEDIUM :Média +STR_AI_SPEED_FAST :Rápida +STR_AI_SPEED_VERY_FAST :Muito Rápida ###length 6 STR_SEA_LEVEL_VERY_LOW :Muito Baixo @@ -1189,7 +1189,7 @@ STR_SUBSIDY_X4 :x4 STR_CLIMATE_TEMPERATE_LANDSCAPE :Clima temperado STR_CLIMATE_SUB_ARCTIC_LANDSCAPE :Clima subárctico STR_CLIMATE_SUB_TROPICAL_LANDSCAPE :Clima subtropical -STR_CLIMATE_TOYLAND_LANDSCAPE :Paisagem Terra dos Brinquedos +STR_CLIMATE_TOYLAND_LANDSCAPE :Terra dos Brinquedos ###length 7 STR_TERRAIN_TYPE_VERY_FLAT :Muito Plano @@ -1218,13 +1218,13 @@ STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(sem explicaç STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{ORANGE}{STRING}{POP_COLOUR} STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor padrão: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipo de configuração: {ORANGE}{STRING} -STR_CONFIG_SETTING_TYPE_CLIENT :Configuração de cliente (não é armazenada em jogos salvos; afeta todos os jogos) -STR_CONFIG_SETTING_TYPE_GAME_MENU :Configuração do jogo (armazenado no jogo salvo; afeta somente novos jogos) -STR_CONFIG_SETTING_TYPE_GAME_INGAME :Configuração do jogo (armazenado no jogo salvo; afeta somente o jogo atual) +STR_CONFIG_SETTING_TYPE_CLIENT :Configuração do cliente (não é armazenada em jogos salvos; afeta todos os jogos) +STR_CONFIG_SETTING_TYPE_GAME_MENU :Configuração do jogo (armazenada no jogo salvo; afeta somente novos jogos) +STR_CONFIG_SETTING_TYPE_GAME_INGAME :Configuração do jogo (armazenada no jogo salvo; afeta somente o jogo atual) STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Configuração da empresa (armazenada no jogo salvo; afeta somente novos jogos) STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Configuração da empresa (armazenada no jogo salvo; afeta somente a empresa atual) STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Cuidado! -STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Esta ação irá restaurar todas as configurações do jogo para os seus valores padrão.{}Tem certeza de que deseja continuar? +STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Esta ação irá restaurar todas as configurações do jogo para os seus valores padrão.{}Você quer mesmo fazer a restauração? STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoria: STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo: @@ -1293,7 +1293,7 @@ STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Quebra de veíc STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Controla a frequência com a qual veículos com manutenção inadequada podem quebrar STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Multiplicador de subsídios: {STRING} -STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Define quando é pago por conexões subsidiadas +STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Define quanto é pago por conexões subsidiadas STR_CONFIG_SETTING_SUBSIDY_DURATION :Duração do subsídio: {STRING} ###length 2 @@ -1332,8 +1332,8 @@ STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permite paisagi STR_CONFIG_SETTING_CATCHMENT :Permitir áreas de abrangência com dimensões mais realistas: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Usa área de abrangência de tamanhos diferentes para diferentes tipos de estações e aeroportos -STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Estações de empresas podem servir indústrias com estações neutras anexadas: {STRING} -STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Quando ativado, indústrias com estações incluídas (como as Petrolíferas) podem ser servidas por estações da empresa construídas nas proximidades. Quando desativado, essas indústrias só podem ser servidas pela sua própria estação. Qualquer estação da empresa nas redondezas não poderá servir a indústria e a estação incluída não poderá atender outra senão a própria indústria +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Estações de empresas podem servir indústrias com estações neutras próprias: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Quando ativado, indústrias com estações próprias (como as Petrolíferas) podem ser servidas por estações da empresa construídas nas proximidades. Quando desativado, essas indústrias só podem ser servidas pela sua própria estação. Qualquer estação da empresa nas redondezas não poderá servir a indústria e a estação própria não poderá atender outra senão a própria indústria STR_CONFIG_SETTING_EXTRADYNAMITE :Permitir a remoção de mais estradas, pontes e túneis das cidades: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Torna mais fácil remover edifícios e infraestruturas das localidades @@ -1346,10 +1346,10 @@ STR_CONFIG_SETTING_SMOKE_AMOUNT :Quantidade de f STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Define a quantidade de fumaça ou fagulhas emitidas pelos veículos STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Modelo de aceleração dos trens: {STRING} -STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Selecionar o modelo físico para a aceleração dos trens. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do trem, tais como comprimento e força de tração +STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Escolher o modelo físico para a aceleração dos trens. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do trem, tais como comprimento e força de tração STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Modelo de aceleração dos veículos: {STRING} -STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Selecionar o modelo físico para a aceleração dos veículos rodoviários. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do veículo, por exemplo a força de tração +STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Escolher o modelo físico para a aceleração dos veículos rodoviários. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do veículo, por exemplo a força de tração STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :Inclinação do terreno para trens: {STRING} STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Inclinação de um quadrado inclinado para um trem. Valores grandes tornam mais difícil para um trem subir uma colina @@ -1445,7 +1445,7 @@ STR_CONFIG_SETTING_FREIGHT_TRAINS :Multiplicador d STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Define o impacto do transporte de carga nos trens. Um valor grande torna o transporte de carga mais difícil para os trens, especialmente em inclinações STR_CONFIG_SETTING_PLANE_SPEED :Fator de velocidade de aviões: {STRING} -STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Define a velocidade relativa dos aviões em comparação com outros tipos de veículos, para reduzir o valor da receita do transporte por aeronave +STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Define a velocidade relativa dos aviões em comparação com outros tipos de veículos, para diminuir o valor da receita do transporte por aeronave STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Número de acidentes de aeronaves: {STRING} @@ -1495,7 +1495,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Veículos nunca STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Quando ativado, todos os modelos de veículos permanecerão disponíveis para sempre após a sua introdução STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Unidades de tempo: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecionar as unidades de tempo para o jogo. Isto não pode ser alterado posteriormente.{}{}O modo clássico no OpenTTD é baseado em um calendário, em que um ano é composto de 12 meses e cada mês tem 28-31 dias.{}{}No tempo baseado no relógio de parede, a produção de carga e as finanças são baseadas em incrementos de um minuto, que tem aproximadamente a mesma duração de um mês de 30 dias no modo baseado em calendário. Esses incrementos são agrupados em períodos de 12 minutos, equivalentes a um ano no modo baseado em calendário.{}{}Nos dois modos, há sempre um calendário clássico, que é usado para datas de introdução de veículos, casas e outras infraestruturas. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Escolher as unidades de tempo para o jogo. Isto não pode ser alterado posteriormente.{}{}O modo clássico no OpenTTD é baseado em um calendário, em que um ano é composto de 12 meses e cada mês tem 28-31 dias.{}{}No tempo baseado no relógio de parede, a produção de carga e as finanças são baseadas em incrementos de um minuto, que tem aproximadamente a mesma duração de um mês de 30 dias no modo baseado em calendário. Esses incrementos são agrupados em períodos de 12 minutos, equivalentes a um ano no modo baseado em calendário.{}{}Nos dois modos, há sempre um calendário clássico, que é usado para datas de introdução de veículos, casas e outras infraestruturas. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendário STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Relógio de parede @@ -1549,7 +1549,7 @@ STR_CONFIG_SETTING_LANDSCAPE :Clima: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os climas definem a jogabilidade básica com diferentes cargas e requerimentos para o crescimento das localidades. NewGRFs e Scripts de Jogo permitem um controle mais fino STR_CONFIG_SETTING_LAND_GENERATOR :Gerador de Terreno: {STRING} -STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :O gerador original depende do conjunto gráfico base e produz formas de terreno pré-definidas. TerraGenesis é um gerador baseado no algoritmo de ruído de Perlin com definições mais refinadas +STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :O gerador 'Original' depende do conjunto gráfico base e produz formas de terreno pré-definidas. 'TerraGenesis' é um gerador baseado no algoritmo de ruído de Perlin com definições mais refinadas ###length 2 STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis @@ -1646,7 +1646,7 @@ STR_CONFIG_SETTING_SCROLLMODE_RMB :Mover mapa com STR_CONFIG_SETTING_SCROLLMODE_LMB :Move mapa com Botão Esquerdo Mouse STR_CONFIG_SETTING_SMOOTH_SCROLLING :Suavizar deslocamento da visualização: {STRING} -STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla como a visualização principal se move para uma localização específica ao clicar no minimapa ou quando é dado um comando para ir até um objeto específico no mapa. Se ativado, a visualização principal se move suavemente, se desativado a visualização salta diretamente para o ponto escolhido +STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla como a visualização principal se move para uma localização específica ao clicar no minimapa ou quando é dado um comando para ir até um objeto específico no mapa. Se ativado, a visualização se move suavemente, se desativado a visualização salta diretamente para o ponto escolhido STR_CONFIG_SETTING_MEASURE_TOOLTIP :Mostrar medidas quando usar as ferramentas de construção: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Mostrar distâncias em quadrados e diferenças de altura quando Clicar+Arrastar nas ações de construção @@ -1672,22 +1672,22 @@ STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Mover o mapa STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Desligado STR_CONFIG_SETTING_OSK_ACTIVATION :Teclado virtual: {STRING} -STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Selecionar o método para mostrar o teclado virtual para inserir texto em caixas de diálogo usando o cursor. Isto é útil para dispositivos pequenos que não possuem teclados +STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Escolher o método para mostrar o teclado virtual para inserir texto em caixas de diálogo usando o cursor. Isto é útil para dispositivos pequenos que não possuem teclados ###length 4 STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :Desativado -STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Clique duplo +STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Duplo clique STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Clique simples (quando em foco) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Clique simples (imediatamente) STR_CONFIG_SETTING_USE_RELAY_SERVICE :Usar serviço de retransmissão: {STRING} -STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Se durante a criação da conexão o servidor falhar, pode-se usar um serviço de retransmissão para criar a conexão. "Nunca" não permite isso, "perguntar" irá perguntar antes, "permitir" vai permitir sem perguntar +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Se durante a criação da conexão o servidor falhar, pode-se usar um serviço de retransmissão para criar a conexão. "Nunca" não permite isso, "Perguntar" irá perguntar antes, "Permitir" vai permitir sem perguntar ###length 3 STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Nunca STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Perguntar STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Permitir STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulação de clique com botão direito: {STRING} -STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Selecionar o método para emular os cliques do botão direito do mouse +STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Escolher o método para emular os cliques do botão direito do mouse ###length 3 STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+Clique STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+Clique @@ -1711,7 +1711,7 @@ STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Pausar automati STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Quando ativado, o jogo irá pausar automaticamente quando um novo jogo começar, permitindo o estudo detalhado do mapa STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Durante uma pausa permitir: {STRING} -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Selecionar quais ações podem ser executadas com o jogo pausado +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Escolher quais ações podem ser executadas com o jogo pausado ###length 4 STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Nenhuma ação STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Todas as ações exceto construção @@ -1722,10 +1722,10 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Usar grupos na STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ativar a utilização de listas avançadas de veículos para o agrupamento de veículos STR_CONFIG_SETTING_LOADING_INDICATORS :Usar indicadores de carga: {STRING} -STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Selecionar se os indicadores de carga são mostrados acima dos veículos enquanto carregam ou descarregam +STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Escolher se os indicadores de carga são mostrados acima dos veículos enquanto carregam ou descarregam STR_CONFIG_SETTING_TIMETABLE_MODE :Unidades de tempo para horários: {STRING} -STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Selecionar as unidades de tempo usadas nos horários dos veículos +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Escolher as unidades de tempo usadas nos horários dos veículos ###length 3 STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Dias STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Segundos @@ -1818,7 +1818,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite que com STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes antes de scripts serem suspensos: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Número máximo de passos computacionais que um script pode executar em um turno STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Utilização máxima de memória por script: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Quantidade de memória que um script pode usar antes dele ser encerrado automaticamente. Para mapas maiores pode ser necessário aumentar este valor. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Quantidade de memória que um script pode usar antes dele ser terminado automaticamente. Para mapas maiores pode ser necessário aumentar este valor. STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Intervalos de manutenção são em porcentagem: {STRING} @@ -1924,13 +1924,13 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Quando arrastar STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Define a distância na qual os sinais serão construídos em uma linha até o próximo obstáculo (sinal, junção), quando colocar sinais arrastando STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} quadrado{P 0 "" s} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Quando arrastar, manter distância fixa entre os sinais: {STRING} -STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Selecionar o comportamento da colocação de sinais ao usar Ctrl+Arrastar. Se desativado, sinais são colocados ao redor de túneis ou pontes para evitar seções longas sem sinais. Se ativado, sinais são colocados a cada N quadrados, facilitando o alinhamento de sinais em linhas paralelas +STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Escolher o comportamento da colocação de sinais ao usar Ctrl+Arrastar. Se desativado, sinais são colocados ao redor de túneis ou pontes para evitar seções longas sem sinais. Se ativado, sinais são colocados a cada N quadrados, facilitando o alinhamento de sinais em linhas paralelas STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Usar automaticamente semáforos antes de: {STRING} -STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Definir o ano em que os sinais elétricos serão usados nas ferrovias. Antes deste ano, sinais não-elétricos serão usados (eles possuem a mesma funcionalidade, mas aspecto diferente) +STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Definir o ano em que os sinais elétricos serão usados nas ferrovias. Antes deste ano, sinais não-elétricos serão usados (eles têm a mesma funcionalidade, mas aparência diferente) STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Alternar entre tipos de sinais: {STRING} -STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Selecionar os tipos de sinal a serem alternados quando usar Ctrl+Clique em um sinal construído com a ferramenta de sinais +STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Escolher quais os tipos de sinal serão alternados quando usar Ctrl+Clique em um sinal construído com a ferramenta de sinais ###length 2 STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :Somente grupo atual STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Todos visíveis @@ -1984,7 +1984,7 @@ STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Posição horiz STR_CONFIG_SETTING_STATUSBAR_POS :Posição da barra de status: {STRING} STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT :Posição horizontal da barra de status na parte inferior da tela STR_CONFIG_SETTING_SNAP_RADIUS :Distância para alinhamento de janelas: {STRING} -STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Distância entre janelas para que a janela que está sendo movida se alinhe automaticamente às janelas mais próximas +STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Distância mínima entre janelas para que a janela que está sendo movida se alinhe automaticamente às janelas mais próximas STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} pixel{P 0 "" s} ###setting-zero-is-special STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Desativado @@ -2191,17 +2191,17 @@ STR_INTRO_AI_SETTINGS :{BLACK}Configur STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Configurações de Script de Jogo STR_INTRO_QUIT :{BLACK}Sair -STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Iniciar um novo jogo. Ctrl+Clique salta a configuração do mapa +STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Iniciar um novo jogo. Ctrl+Clique para saltar a configuração do mapa STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Abrir um jogo salvo STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Iniciar um novo jogo, usando um mapa topográfico como terreno STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Iniciar um novo jogo, usando um cenário personalizado STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Criar um cenário de jogo personalizado STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Iniciar um jogo multijogador -STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Selecionar paisagem 'clima temperado' -STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Selecionar paisagem 'clima subártico' -STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Selecionar paisagem 'clima subtropical' -STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Selecionar paisagem 'Terra dos brinquedos' +STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Escolher paisagem 'clima temperado' +STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Escolher paisagem 'clima subártico' +STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Escolher paisagem 'clima subtropical' +STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Escolher paisagem 'Terra dos brinquedos' STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Abrir opções de jogo STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Abrir tabela de classificações @@ -2218,14 +2218,14 @@ STR_INTRO_TRANSLATION :{BLACK}Faltam { # Quit window STR_QUIT_CAPTION :{WHITE}Sair -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Tem certeza de que deseja sair do OpenTTD? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Você quer mesmo sair do OpenTTD? STR_QUIT_YES :{BLACK}Sim STR_QUIT_NO :{BLACK}Não # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abandonar jogo -STR_ABANDON_GAME_QUERY :{YELLOW}Tem certeza de que deseja abandonar este jogo? -STR_ABANDON_SCENARIO_QUERY :{YELLOW}Tem certeza de que deseja abandonar este cenário? +STR_ABANDON_GAME_QUERY :{YELLOW}Você quer mesmo abandonar este jogo? +STR_ABANDON_SCENARIO_QUERY :{YELLOW}Você quer mesmo abandonar este cenário? # Help window STR_HELP_WINDOW_CAPTION :{WHITE}Ajuda & Manuais @@ -2266,9 +2266,9 @@ STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Mostrar STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Mostrar cores dos grupos de veículos rodoviários STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Mostrar cores dos grupos de embarcações STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Mostrar cores dos grupos de aeronaves -STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Escolher a cor principal para o esquema selecionado. Ctrl+Clique define esta cor para todos os esquemas -STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Escolher a cor secundária para o esquema selecionado. Ctrl+Clique define esta cor para todos os esquemas -STR_LIVERY_PANEL_TOOLTIP :{BLACK}Selecionar o esquema de cores a alterar ou esquemas múltiplos utilizando Ctrl+Clique. Clique na opção para usar o esquema de cores +STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Escolher a cor principal para o esquema selecionado. Ctrl+Clique para definir esta cor para todos os esquemas +STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Escolher a cor secundária para o esquema selecionado. Ctrl+Clique para definir esta cor para todos os esquemas +STR_LIVERY_PANEL_TOOLTIP :{BLACK}Escolher o esquema de cores a alterar ou esquemas múltiplos utilizando Ctrl+Clique. Clique na opção para usar o esquema de cores STR_LIVERY_TRAIN_GROUP_EMPTY :Não há grupos de trens configurados STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Não há grupos de veículos configurados STR_LIVERY_SHIP_GROUP_EMPTY :Não há grupos de embarcações configurados @@ -2306,9 +2306,9 @@ STR_FACE_OK_TOOLTIP :{BLACK}Aceitar STR_FACE_RANDOM :{BLACK}Seleção aleatória STR_FACE_MALE_BUTTON :{BLACK}Masculino -STR_FACE_MALE_TOOLTIP :{BLACK}Selecionar faces masculinas +STR_FACE_MALE_TOOLTIP :{BLACK}Escolher faces masculinas STR_FACE_FEMALE_BUTTON :{BLACK}Feminino -STR_FACE_FEMALE_TOOLTIP :{BLACK}Selecionar faces femininas +STR_FACE_FEMALE_TOOLTIP :{BLACK}Escolher faces femininas STR_FACE_NEW_FACE_BUTTON :{BLACK}Nova Face STR_FACE_NEW_FACE_TOOLTIP :{BLACK}Gerar nova face aleatoriamente STR_FACE_ADVANCED :{BLACK}Avançado @@ -2419,8 +2419,8 @@ STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adiciona STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Iniciar servidor STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Iniciar um servidor próprio -STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Digite o seu nome -STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Digite o endereço de servidor ou código de convite +STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Digitar o seu nome +STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Digitar o endereço de servidor ou código de convite # Start new multiplayer server STR_NETWORK_START_SERVER_CAPTION :{WHITE}Iniciar novo jogo multijogador @@ -2513,10 +2513,10 @@ STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Excluir STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Desbloquear com senha STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Ação administrativa -STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Tem certeza de que deseja expulsar o jogador '{STRING}'? -STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Tem certeza de que deseja banir o jogador '{STRING}'? -STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Tem certeza de que deseja excluir a empresa '{COMPANY}'? -STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Tem certeza de que deseja apagar a senha da empresa '{COMPANY}'? +STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Você quer mesmo expulsar o jogador '{STRING}'? +STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Você quer mesmo banir o jogador '{STRING}'? +STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Você quer mesmo excluir a empresa '{COMPANY}'? +STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Você quer mesmo apagar a senha da empresa '{COMPANY}'? STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Usar retransmissão? STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Erro ao estabelecer uma conexão entre você e o servidor.'{STRING}'Você gostaria de retransmitir essa sessão via '{STRING}'? @@ -2559,7 +2559,7 @@ STR_NETWORK_CHAT_CLIENT :[Privado] {STRI STR_NETWORK_CHAT_TO_CLIENT :[Privado] Para {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_ALL :[Todos] {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_EXTERNAL :[{3:STRING}] {0:STRING}: {WHITE}{1:STRING} -STR_NETWORK_CHAT_OSKTITLE :{BLACK}Digite a mensagem para conversar na rede +STR_NETWORK_CHAT_OSKTITLE :{BLACK}Digitar a mensagem para conversar na rede # Network messages STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Não foram encontradas interfaces de rede ou o jogo foi compilado sem ENABLE_NETWORK @@ -2784,8 +2784,8 @@ STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construção de STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Construção de Monotrilho STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Construção de MagLev -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir ferrovia. Ctrl+Clique remove a ferrovia. Pressione também Shift para apenas mostrar o custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construir ferrovia usando o modo Autotrilho. Ctrl+Clique remove seção da ferrovia. Pressione também Shift para apenas mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir ferrovia. Ctrl+Clique para remover a ferrovia. Pressione também Shift para apenas mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construir ferrovia usando o modo Autotrilho. Ctrl+Clique para remover seção da ferrovia. Pressione também Shift para apenas mostrar o custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construir depósito ferroviário (para compra e manutenção de trens). Pressione também Shift para apenas mostrar o custo estimado STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Construir ponto de controle na ferrovia. Ctrl+Clique para selecionar outro ponto de controle e unir com este. Pressione também Shift para apenas mostrar o custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Construir estação ferroviária. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado @@ -2802,25 +2802,25 @@ STR_RAIL_NAME_MAGLEV :Maglev # Rail depot construction window STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Orientação do Depósito Ferroviário -STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Selecionar a orientação do depósito ferroviário +STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Escolher a orientação do depósito ferroviário # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Ponto de controle -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Selecionar tipo de ponto de controle +STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Escolher tipo de ponto de controle # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Seleção de Estação Ferroviária STR_STATION_BUILD_ORIENTATION :{BLACK}Orientação -STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}Selecionar orientação da estação ferroviária +STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}Escolher a orientação da estação ferroviária STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Número de linhas -STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Selecionar o número de plataformas da estação ferroviária +STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Escolher o número de plataformas da estação ferroviária STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Comprimento da plataforma -STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Selecionar o comprimento da estação ferroviária +STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Escolher o comprimento da estação ferroviária STR_STATION_BUILD_DRAG_DROP :{BLACK}Arrastar & Soltar STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construir estação usando arrastar & soltar -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Selecionar uma classe de estação para mostrar -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Selecionar o tipo de estação para construir +STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Escolher uma classe de estação para mostrar +STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Escolher o tipo de estação para construir STR_STATION_CLASS_DFLT :Padrão STR_STATION_CLASS_DFLT_STATION :Estação padrão @@ -2843,7 +2843,7 @@ STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Sinal de STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Sinal Combinado (elétrico){}O sinal combinado funciona simultaneamente como um sinal de entrada e de saída. Isto permite construir ramificações complexas de pré-sinais. STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Sinal de Caminho (elétrico){}Um sinal de caminho que permite mais de um trem entrar em uma seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Sinais de caminho padrões podem ser passados no sentido contrário STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Sinal de Sentido Único (elétrico){}Um sinal de caminho que permite mais de um trem entrar em uma seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Os sinais de sentido único não podem ser passados no sentido contrário -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Converter sinal{}Clique em um sinal existente para convertê-lo para o tipo e variante de sinal selecionado. Ctrl+Clique muda a variante existente. Shift+Clique mostra o custo estimado de conversão +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Converter sinal{}Clique em um sinal existente para convertê-lo para o tipo e variante de sinal selecionado. Ctrl+Clique para mudar a variante existente. Shift+Clique para mostrar o custo estimado de conversão STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distância entre os sinais quando arrastar STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Diminuir a distância entre os sinais quando arrastar STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Aumentar a distância entre os sinais quando arrastar @@ -2851,7 +2851,7 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Aumentar # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Selecionar Ponte Ferroviária STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Selecionar Ponte Rodoviária -STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Seleção de ponte - Clique na ponte desejada para construir +STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Seleção de ponte - Clique na ponte de sua preferência para construí-la 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} @@ -2869,10 +2869,10 @@ STR_BRIDGE_TUBULAR_SILICON :Tubular, Silíc # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Construção de estradas STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Construção de Linhas de Bonde -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Construir seção de estrada. Ctrl+Clique remove seção da estrada. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Construir seção de linha de bonde. Ctrl+Clique remove seção da linha. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Construir estrada usando o modo Autoestrada. Ctrl+Clique remove seção da estrada. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Construir linha de bonde usando o modo Autotrilho. Ctrl+Clique remove seção da linha. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Construir seção de estrada. Ctrl+Clique para remover seção da estrada. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Construir seção de linha de bonde. Ctrl+Clique para remover seção da linha. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Construir estrada usando o modo Autoestrada. Ctrl+Clique para remover seção da estrada. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Construir linha de bonde usando o modo Autotrilho. Ctrl+Clique para remover seção da linha. Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construir depósito rodoviário (para compra e manutenção de veículos). Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construir depósito de bondes (para compra e manutenção de bondes). Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Construir estação de ônibus. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado @@ -2894,19 +2894,19 @@ STR_ROAD_NAME_TRAM :Bonde # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Orientação do Depósito Rodoviário -STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Selecionar a orientação do depósito rodoviário +STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Escolher a orientação do depósito rodoviário STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Orientação do Depósito de Bondes -STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Selecionar a orientação do depósito de bondes +STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Escolher a orientação do depósito de bondes # Road vehicle station construction window STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Orientação da Estação de Ônibus -STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Selecionar a orientação da estação de ônibus +STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Escolher a orientação da estação de ônibus STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Orientação da Estação de Caminhões -STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Selecionar orientação da estação de caminhões +STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Escolher a orientação da estação de caminhões STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Orientação da Estação de Bondes de Passageiros -STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Selecionar orientação da estação de bondes de passageiros +STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Escolher a orientação da estação de bondes de passageiros STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Orientação da Estação de Bondes de Carga -STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Selecionar orientação da estação de bondes de carga +STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Escolher a orientação da estação de bondes de carga # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Construção de Hidrovias @@ -2922,7 +2922,7 @@ STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Colocar # Ship depot construction window STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Orientação do Depósito de Embarcações -STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP :{BLACK}Selecionar orientação do depósito de embarcações +STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP :{BLACK}Escolher a orientação do depósito de embarcações # Dock construction window STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Doca @@ -2933,7 +2933,7 @@ STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Construi # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Seleção de Aeroporto -STR_STATION_BUILD_AIRPORT_TOOLTIP :{BLACK}Selecionar tamanho/tipo de aeroporto +STR_STATION_BUILD_AIRPORT_TOOLTIP :{BLACK}Escolher tamanho/tipo de aeroporto STR_STATION_BUILD_AIRPORT_CLASS_LABEL :{BLACK}Classe do aeroporto STR_STATION_BUILD_AIRPORT_LAYOUT_NAME :{BLACK}Disposição {NUM} @@ -2956,15 +2956,15 @@ STR_STATION_BUILD_NOISE :{BLACK}Ruído g # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Paisagismo -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Abaixar um canto do terreno. Clique+Arraste para abaixar o primeiro canto selecionado e nivelar a área selecionada à nova altura do canto. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Abaixar um canto do terreno. Clique+Arraste para abaixar o primeiro canto selecionado e nivelar a área selecionada à nova altura do canto. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Elevar um canto do terreno. Clique+Arraste para elevar o primeiro canto selecionado e nivelar a área selecionada à nova altura do canto. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Nivelar uma área do terreno à altura do primeiro canto selecionado. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar terreno para uso futuro. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Nivelar uma área do terreno à altura do primeiro canto selecionado. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar terreno para uso futuro. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Seleção de Objeto -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Selecionar objeto para construir. Ctrl+Clique+Arrastar seleciona a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Selecionar classe do objeto para construir +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Escolher objeto para construir. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado +STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Escolher a classe do objeto para construir STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Pré-visualização do objeto STR_OBJECT_BUILD_SIZE :{BLACK}Tamanho: {GOLD}{NUM} x {NUM} quadrados @@ -2988,7 +2988,7 @@ STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantar # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Geração de Terreno STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Colocar áreas rochosas no terreno -STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Definir área de deserto.{}Ctrl+Clique remove a área de deserto +STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Definir área de deserto.{}Ctrl+Clique para remover a área de deserto STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Aumentar área do terreno para abaixar/levantar STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Diminuir área do terreno para abaixar/levantar STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Gerar terreno aleatório @@ -2997,7 +2997,7 @@ STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Restaura STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Remover todas as propriedades das empresas do mapa STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Restaurar Paisagem -STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Tem certeza de que deseja remover todas as propriedades das empresas? +STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Você quer mesmo remover todas as propriedades das empresas? # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Geração de Localidades @@ -3011,8 +3011,8 @@ STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Expandir STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Fazer com que todas as localidades cresçam ligeiramente STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nome da localidade: -STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Digite o nome da localidade -STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Clique para inserir o nome da localidade +STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Digitar o nome da localidade +STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Clique para digitar o nome da localidade STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Nome aleatório STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Gerar novo nome aleatório @@ -3021,7 +3021,7 @@ STR_FOUND_TOWN_INITIAL_SIZE_SMALL_BUTTON :{BLACK}Pequeno STR_FOUND_TOWN_INITIAL_SIZE_MEDIUM_BUTTON :{BLACK}Médio STR_FOUND_TOWN_INITIAL_SIZE_LARGE_BUTTON :{BLACK}Grande STR_FOUND_TOWN_SIZE_RANDOM :{BLACK}Aleatório -STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Selecionar o tamanho da localidade +STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Escolher o tamanho da localidade STR_FOUND_TOWN_CITY :{BLACK}Cidade STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Cidades crescem mais depressa do que as localidades normais{}Dependendo das configurações, elas são maiores quando fundadas @@ -3039,7 +3039,7 @@ STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Escolher STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Criar indústrias aleatórias STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Preencher o mapa com indústrias colocadas aleatoriamente STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Criar indústrias aleatórias -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Tem certeza de que deseja criar muitas indústrias aleatoriamente? +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Você quer mesmo criar muitas indústrias aleatórias? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Custo: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Prospectar STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Construir @@ -3047,7 +3047,7 @@ STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Fundar STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Remover todas as indústrias STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Remover todas as indústrias que existem atualmente no mapa STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Remover todas as indústrias -STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Tem certeza de que deseja remover todas as indústrias? +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Você quer mesmo remover todas as indústrias? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Cadeia Industrial - {STRING} @@ -3062,13 +3062,13 @@ STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Mostrar STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Ligar ao minimapa STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Selecionar também as indústrias mostradas no minimapa STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}Selecionar carga -STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}Selecionar a carga que você deseja mostrar +STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}Escolher a carga que você deseja mostrar STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}Selecionar indústria -STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Selecionar a indústria que você deseja mostrar +STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Escolher a indústria que você deseja mostrar # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Informações do Terreno -STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Centralizar visualização na localização do quadrado. Ctrl+Clique abre uma nova visualização na localização do quadrado. +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização do quadrado. Ctrl+Clique para abrir uma nova visualização na localização do quadrado. STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Custo para limpar: {LTBLUE}N/D STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Custo para limpar: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Receita após limpar: {LTBLUE}{CURRENCY_LONG} @@ -3275,25 +3275,25 @@ STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtro: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Substituir Arquivo -STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Tem certeza de que deseja substituir o arquivo existente? +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Você quer mesmo substituir o arquivo existente? STR_SAVELOAD_DIRECTORY :{STRING} (Diretório) STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Diretório raiz) -STR_SAVELOAD_OSKTITLE :{BLACK}Digite um nome para o jogo que será gravado +STR_SAVELOAD_OSKTITLE :{BLACK}Digitar um nome para o jogo que será gravado # World generation STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Geração de Mapas STR_MAPGEN_MAPSIZE :{BLACK}Dimensões do mapa: -STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Selecionar o tamanho do mapa em quadrados. O número de quadrados disponíveis será um pouco menor +STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Escolher o tamanho do mapa em quadrados. O número de quadrados disponíveis será um pouco menor STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Núm. de localidades: -STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Selecionar a densidade de localidades ou um número personalizado +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Escolher a densidade de localidades ou um número personalizado STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Nomes das localidades: -STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Selecionar o estilo dos nomes das localidades +STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Escolher o estilo dos nomes das localidades STR_MAPGEN_DATE :{BLACK}Data: -STR_MAPGEN_DATE_TOOLTIP :{BLACK}Selecionar a data inicial +STR_MAPGEN_DATE_TOOLTIP :{BLACK}Escolher a data inicial STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Núm. de indústrias: -STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Selecionar a densidade de indústrias ou um número personalizado +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Escolher a densidade de indústrias ou um número personalizado STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Pico mais alto: STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Escolher o pico mais alto que o jogo tentará criar, medido em elevação acima do nível do mar STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Aumentar de uma unidade a altura máxima do pico mais alto no mapa @@ -3308,7 +3308,7 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Diminuir STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Tipo de terreno: STR_MAPGEN_SEA_LEVEL :{BLACK}Nível do mar: -STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Selecionar o nível do mar +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Escolher o nível do mar STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rios: STR_MAPGEN_SMOOTHNESS :{BLACK}Regularidade: STR_MAPGEN_VARIETY :{BLACK}Distribuição de variedade: @@ -3455,7 +3455,7 @@ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Incompatí # NewGRF save preset window STR_SAVE_PRESET_CAPTION :{WHITE}Salvar predefinição STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lista de predefinições disponíveis, selecione uma para copiá-la como nome para a gravação abaixo -STR_SAVE_PRESET_TITLE :{BLACK}Digite um nome para a predefinição +STR_SAVE_PRESET_TITLE :{BLACK}Digitar um nome para a predefinição STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Nome que está selecionado para a gravação da predefinição STR_SAVE_PRESET_CANCEL :{BLACK}Cancelar STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Não alterar a predefinição @@ -3493,7 +3493,7 @@ STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Ir para STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Sprite anterior STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Ir para o sprite normal anterior, pulando quaisquer sprites falsos/recoloridos/tipo de letra e retornar do primeiro sprite ao último STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representação do sprite atualmente selecionado. O alinhamento é ignorado ao desenhar este sprite -STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move o sprite, alterando os deslocamentos X e Y. Ctrl+Clique move o sprite 8 unidades por vez +STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move o sprite, alterando os deslocamentos X e Y. Ctrl+Clique para mover o sprite 8 unidades por vez ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Deslocamento centralizado @@ -3541,7 +3541,7 @@ STR_NEWGRF_ERROR_INDPROD_CALLBACK :Chamada de prod # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Cuidado! -STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Você está prestes a efetuar modificações em um jogo em andamento. Isto pode fazer o OpenTTD terminar abruptamente ou travar o jogo. Não envie relatórios de erros sobre estas questões.{}Tem certeza de que realmente deseja continuar? +STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Você está prestes a fazer alterações em um jogo em execução. Isso pode travar o OpenTTD ou interromper o estado do jogo. Não envie relatórios de erros sobre estas questões.{}Você quer mesmo fazer as alterações? STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Não é possível adicionar arquivo: ID do GRF duplicado STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Arquivo correspondente não encontrado (GRF compatível carregado) @@ -3595,18 +3595,18 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Ativar c # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Editar texto da placa -STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Centralizar visualização na localização da placa. Ctrl+Clique abre uma nova visualização na localização da placa +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização da placa. Ctrl+Clique para abrir uma nova visualização na localização da placa STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Ir para a próxima placa STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Ir para a placa anterior -STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Digite um nome para a placa +STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Digitar um nome para a placa # Town directory window STR_TOWN_DIRECTORY_CAPTION :{WHITE}Localidades STR_TOWN_DIRECTORY_NONE :{ORANGE}- Nenhum - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Cidade){BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Nomes das localidades - Clique no nome para centralizar a visualização na cidade. Ctrl+Clique abre uma nova visualização na localização da localidade +STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Nomes das localidades - Clique no nome para centralizar visualização principal na cidade. Ctrl+Clique para abrir uma nova visualização na localização da localidade STR_TOWN_POPULATION :{BLACK}População mundial: {COMMA} # Town view window @@ -3625,7 +3625,7 @@ STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Localida STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Localidade cresce a cada {ORANGE}{UNITS_DAYS_OR_SECONDS} (financiada) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Localidade {RED}não{BLACK} está crescendo STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Limite de ruído na localidade: {ORANGE}{COMMA}{BLACK} máx: {ORANGE}{COMMA} -STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centralizar visualização na localização da localidade. Ctrl+Clique abre uma nova visualização na localização da localidade +STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização da localidade. Ctrl+Clique para abrir uma nova visualização na localização da localidade STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Autoridade Local STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Mostrar informações sobre a autoridade local STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Alterar o nome da localidade @@ -3682,7 +3682,7 @@ STR_GOALS_TEXT :{ORANGE}{STRING STR_GOALS_NONE :{ORANGE}- Nenhum - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique no objetivo para centralizar a visualização na indústria/localidade/quadrado. Ctrl+Clique abre uma nova visualização na localização da indústria/localidade/quadrado +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique no objetivo para centralizar visualização principal na indústria/localidade/quadrado. Ctrl+Clique para abrir uma nova visualização na localização da indústria/localidade/quadrado # Goal question window STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Pergunta @@ -3693,7 +3693,7 @@ STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Erro # Goal Question button list ###length 18 STR_GOAL_QUESTION_BUTTON_CANCEL :Cancelar -STR_GOAL_QUESTION_BUTTON_OK :Confirmar +STR_GOAL_QUESTION_BUTTON_OK :OK STR_GOAL_QUESTION_BUTTON_NO :Não STR_GOAL_QUESTION_BUTTON_YES :Sim STR_GOAL_QUESTION_BUTTON_DECLINE :Recusar @@ -3718,7 +3718,7 @@ STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_NONE :{ORANGE}- Nenhum - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Serviços já subsidiados: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} de {STRING} para {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) -STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique em um serviço para centralizar a visualização em uma indústria/localidade. Ctrl+Clique abre uma nova visualização na localização da indústria/localidade +STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique em um serviço para centralizar visualização principal em uma indústria/localidade. Ctrl+Clique para abrir uma nova visualização na localização da indústria/localidade STR_SUBSIDIES_OFFERED_EXPIRY_DATE :até {DATE_SHORT} STR_SUBSIDIES_OFFERED_EXPIRY_TIME :durante {UNITS_MONTHS_OR_MINUTES} STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :até {DATE_SHORT} @@ -3738,7 +3738,7 @@ STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Ir para STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Referência de objetivo inválida # Station list window -STR_STATION_LIST_TOOLTIP :{BLACK}Nomes das estações - Clique no nome para centralizar a visualização na estação. Ctrl+Clique abre uma nova visualização na localização da estação +STR_STATION_LIST_TOOLTIP :{BLACK}Nomes das estações - Clique no nome para centralizar visualização principal na estação. Ctrl+Clique para abrir uma nova visualização na localização da estação STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Ctrl+Clique para selecionar vários itens STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} Estaç{P ão ões} STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} @@ -3804,7 +3804,7 @@ STR_CARGO_RATING_VERY_GOOD :Muito Bom STR_CARGO_RATING_EXCELLENT :Excelente STR_CARGO_RATING_OUTSTANDING :Excepcional -STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Centralizar visualização na localização da estação. Ctrl+Clique abre uma nova visualização na localização da estação +STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização da estação. Ctrl+Clique para abrir uma nova visualização na localização da estação STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Alterar o nome da estação STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Mostrar todos os trens que têm esta estação na sua programação @@ -3819,9 +3819,9 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Impedir # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} -STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centralizar visualização na localização do ponto de controle. Ctrl+Clique abre uma nova visualização na localização do ponto de controle +STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização do ponto de controle. Ctrl+Clique para abrir uma nova visualização na localização do ponto de controle STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Alterar o nome do ponto de controle -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centralizar visualização na localização da boia. Ctrl+Clique abre uma nova visualização na localização da boia +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização da boia. Ctrl+Clique para abrir uma nova visualização na localização da boia STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Alterar o nome da boia STR_EDIT_WAYPOINT_NAME :{WHITE}Editar nome do ponto de controle @@ -3906,7 +3906,7 @@ STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Aquisiç STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Fazer a aquisição hostil desta empresa STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nova Face -STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Selecionar nova face para o presidente +STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Escolher nova face para o presidente STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Esquema de Cores STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Alterar pintura dos veículos da empresa STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Nome da Empresa @@ -3916,7 +3916,7 @@ STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Alterar STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nome da Empresa STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nome do Presidente -STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Digite a quantia de dinheiro que você deseja dar +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Digitar a quantia de dinheiro que você quer dar STR_BUY_COMPANY_MESSAGE :{WHITE}Estamos à procura de uma empresa de transportes para comprar a nossa empresa.{}{}Você deseja comprar {COMPANY} por {CURRENCY_LONG}? STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Na aquisição hostil de {COMPANY} você irá adquirir todos os ativos, liquidar todos os empréstimos e pagar o valor de 2 anos de lucros.{}{}O total estimado é de {CURRENCY_LONG}.{}{}Você deseja continuar esta aquisição hostil? @@ -3944,7 +3944,7 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} e mais {NUM} ... -STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nomes de indústrias - Clique no nome para centralizar a visualização na indústria. Ctrl+Clique abre uma nova visualização na localização da indústria +STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nomes de indústrias - Clique no nome para centralizar visualização principal na indústria. Ctrl+Clique para abrir uma nova visualização na localização da indústria STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Carga aceita: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Carga produzida: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Todos os tipos de carga @@ -3955,7 +3955,7 @@ STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTR STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produção no mês passado: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produção no último minuto: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado) -STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centralizar visualização na localização da indústria. Ctrl+Clique abre uma nova visualização na localização da indústria +STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização da indústria. Ctrl+Clique para abrir uma nova visualização na localização da indústria STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nível de produção: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A indústria anunciou fechamento iminente! @@ -4033,7 +4033,7 @@ STR_GROUP_LIVERY_TOOLTIP :{BLACK}Alterar STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clique para excluir esse grupo da substituição automática global. Ctrl+Clique para também excluir os subgrupos. STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Excluir grupo -STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Tem certeza de que deseja excluir esse grupo e seus descendentes? +STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Você quer mesmo excluir este grupo e seus descendentes? STR_GROUP_ADD_SHARED_VEHICLE :Adicionar veículos compartilhados STR_GROUP_REMOVE_ALL_VEHICLES :Remover todos os veículos @@ -4217,16 +4217,16 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Clonar E STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Clonar Aeronave ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Comprar uma cópia de um trem incluindo todos os vagões. Clique nesse botão e depois em um trem que estiver dentro ou fora de um depósito. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Comprar uma cópia de um veículo rodoviário. Clique nesse botão e depois em um veículo que estiver dentro ou fora de um depósito. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Comprar uma cópia de uma embarcação. Clique nesse botão e depois em uma embarcação que estiver dentro ou fora de um depósito. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Comprar uma cópia de uma aeronave. Clique nesse botão e depois em uma aeronave que estiver dentro ou fora de um hangar. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Comprar uma cópia de um trem incluindo todos os vagões. Clique neste botão e depois em um trem que estiver dentro ou fora de um depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Comprar uma cópia de um veículo rodoviário. Clique neste botão e depois em um veículo que estiver dentro ou fora de um depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Comprar uma cópia de uma embarcação. Clique neste botão e depois em uma embarcação que estiver dentro ou fora de um depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Comprar uma cópia de uma aeronave. Clique neste botão e depois em uma aeronave que estiver dentro ou fora de um hangar. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centralizar visualização na localização do depósito ferroviário. Ctrl+Clique abre uma nova visualização na localização do depósito ferroviário -STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centralizar visualização na localização do depósito rodoviário. Ctrl+Clique abre uma nova visualização na localização do depósito de veículos -STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centralizar visualização na localização do depósito de embarcações. Ctrl+Clique abre uma nova visualização na localização do depósito -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centralizar visualização na localização do hangar. Ctrl+Clique abre uma nova visualização na localização do hangar +STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização do depósito ferroviário. Ctrl+Clique para abrir uma nova visualização na localização do depósito ferroviário +STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização do depósito rodoviário. Ctrl+Clique para abrir uma nova visualização na localização do depósito de veículos +STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização do depósito de embarcações. Ctrl+Clique para abrir uma nova visualização na localização do depósito +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização do hangar. Ctrl+Clique para abrir uma nova visualização na localização do hangar ###length VEHICLE_TYPES STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Obter uma lista de todos os trens com este depósito em suas ordens @@ -4291,8 +4291,8 @@ STR_REPLACE_VEHICLE_ROAD_VEHICLE :Veículo rodovi STR_REPLACE_VEHICLE_SHIP :Embarcação STR_REPLACE_VEHICLE_AIRCRAFT :Aeronave -STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Selecionar o tipo de locomotiva para substituir -STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Selecionar o novo tipo de locomotiva que será usada para substituir a que foi selecionada à esquerda +STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Escolher o tipo de locomotiva para substituir +STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Escolher o novo tipo de locomotiva que será usada para substituir a que foi selecionada à esquerda STR_REPLACE_VEHICLES_START :{BLACK}Iniciar Substituição de Veículos STR_REPLACE_VEHICLES_NOW :Substituir todos os veículos agora @@ -4311,8 +4311,8 @@ STR_REPLACE_ALL_RAILTYPE :Todos os veícu STR_REPLACE_ALL_ROADTYPE :Todos os veículos rodoviários ###length 2 -STR_REPLACE_HELP_RAILTYPE :{BLACK}Selecionar o tipo de ferrovia para o qual deseja efetuar a substituição das locomotivas -STR_REPLACE_HELP_ROADTYPE :{BLACK}Selecionar o tipo de estrada para o qual você deseja substituir os veículos +STR_REPLACE_HELP_RAILTYPE :{BLACK}Escolher o tipo de ferrovia para o qual deseja efetuar a substituição das locomotivas +STR_REPLACE_HELP_ROADTYPE :{BLACK}Escolher o tipo de estrada para o qual você deseja substituir os veículos ###next-name-looks-similar STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Mostrar qual locomotiva substituirá a que está selecionada à esquerda, se alguma foi selecionada @@ -4332,10 +4332,10 @@ STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl+ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Centralizar visualização na localização do trem. Clique duplo para seguir o trem na visualização principal. Ctrl+Clique abre uma nova visualização na localização do trem -STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Centralizar visualização na localização do veículo. Clique duplo para seguir o veículo na visualização principal. Ctrl+Clique abre uma nova visualização na localização do veículo -STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Centralizar visualização na localização da embarcação. Clique duplo para seguir a embarcação na visualização principal. Ctrl+Clique abre uma nova visualização na localização da embarcação -STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Centralizar visualização na localização da aeronave. Clique duplo para seguir a aeronave na visualização principal. Ctrl+Clique abre uma nova visualização na localização da aeronave +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização do trem. Duplo clique para seguir o trem na visualização principal. Ctrl+Clique para abrir uma nova visualização na localização do trem +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização do veículo. Duplo clique para seguir o veículo na visualização principal. Ctrl+Clique para abrir uma nova visualização na localização do veículo +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização da embarcação. Duplo clique para seguir a embarcação na visualização principal. Ctrl+Clique para abrir uma nova visualização na localização da embarcação +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização da aeronave. Duplo clique para seguir a aeronave na visualização principal. Ctrl+Clique para abrir uma nova visualização na localização da aeronave ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar trem para o depósito. Ctrl+Clique para fazer apenas manutenção @@ -4344,15 +4344,15 @@ STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar e STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar aeronave para o hangar. Ctrl+Clique para fazer apenas manutenção ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Comprar uma cópia do trem incluindo todos os vagões. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Comprar uma cópia do veículo. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Comprar uma cópia da embarcação. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Comprar uma cópia da aeronave. Ctrl+Clique compartilha as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Comprar uma cópia do trem incluindo todos os vagões. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Comprar uma cópia do veículo. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Comprar uma cópia da embarcação. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Comprar uma cópia da aeronave. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Forçar o trem a prosseguir sem aguardar o sinal de liberação STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Inverter a direção do trem STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Forçar o veículo a dar a volta -STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Centralizar visualização no destino da ordem. Ctrl+Clique abre uma nova visualização na localização do destino da ordem +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal no destino da ordem. Ctrl+Clique para abrir uma nova visualização na localização do destino da ordem ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Adaptar trem para transportar um tipo de carga diferente @@ -4361,10 +4361,10 @@ STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Adaptar STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Adaptar aeronave para transportar um tipo de carga diferente ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Mostrar ordens do trem. Ctrl+Clique mostra a tabela de horários do trem -STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Mostrar ordens do veículo. Ctrl+Clique mostra a tabela de horários do veículo -STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Mostrar ordens da embarcação. Ctrl+Clique mostra a tabela de horários da embarcação -STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Mostrar ordens da aeronave. Ctrl+Clique mostra a tabela de horários da aeronave +STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Mostrar ordens do trem. Ctrl+Clique para mostrar a tabela de horários do trem +STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Mostrar ordens do veículo. Ctrl+Clique para mostrar a tabela de horários do veículo +STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Mostrar ordens da embarcação. Ctrl+Clique para mostrar a tabela de horários da embarcação +STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Mostrar ordens da aeronave. Ctrl+Clique para mostrar a tabela de horários da aeronave ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Mostrar detalhes do trem @@ -4425,13 +4425,13 @@ STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} an STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Idade: {LTBLUE}{STRING}{BLACK} Custo de Operação: {LTBLUE}{CURRENCY_LONG}/ano STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Idade: {LTBLUE}{STRING}{BLACK} Custo de Operação: {LTBLUE}{CURRENCY_LONG}/período -STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Velocidade máx: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Velocidade máx.: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Velocidade máx.: {LTBLUE}{VELOCITY} {BLACK}Tipo de aeronave: {LTBLUE}{STRING} STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Velocidade máx.: {LTBLUE}{VELOCITY} {BLACK}Tipo de aeronave: {LTBLUE}{STRING} {BLACK}Autonomia: {LTBLUE}{COMMA} quadrados STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Velocidade máx: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Velocidade máx: {LTBLUE}{VELOCITY} {BLACK}Força de Tração máx.: {LTBLUE}{FORCE} -STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucro neste ano: {LTBLUE}{CURRENCY_LONG} (ano passado: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucro neste ano: {LTBLUE}{CURRENCY_LONG} (último ano: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Lucro neste ano: {LTBLUE}{CURRENCY_LONG} (último ano: {CURRENCY_LONG}) {BLACK}Desempenho mín.: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Lucro neste período: {LTBLUE}{CURRENCY_LONG} (último período: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Lucro neste período: {LTBLUE}{CURRENCY_LONG} (último período: {CURRENCY_LONG}) {BLACK}Desempenho mín.: {LTBLUE}{POWER_TO_WEIGHT} @@ -4450,12 +4450,12 @@ STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Interval STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Intervalo de manutenção: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Última manutenção: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Última manutenção: {LTBLUE}{NUM} minuto{P "" s} atrás -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Aumentar o intervalo de manutenção em 10 dias. Ctrl+Clique aumenta o intervalo de manutenção em 5 dias -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Aumentar o intervalo de manutenção em 5 minutos. Ctrl+Clique aumenta o intervalo de manutenção em 1 minuto -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Aumentar o intervalo de manutenção em 10 por cento. Ctrl+Clique aumenta o intervalo de manutenção em 5 por cento -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Diminuir o intervalo de manutenção em 10 dias. Ctrl+Clique diminui o intervalo de manutenção em 5 dias -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Diminuir o intervalo de manutenção em 5 minutos. Ctrl+Clique diminui o intervalo de manutenção em 1 minuto -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Diminuir o intervalo de manutenção em 10 por cento. Ctrl+Clique diminui o intervalo de manutenção em 5 por cento +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Aumentar o intervalo de manutenção em 10 dias. Ctrl+Clique para aumentar o intervalo de manutenção em 5 dias +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Aumentar o intervalo de manutenção em 5 minutos. Ctrl+Clique para aumentar o intervalo de manutenção em 1 minuto +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Aumentar o intervalo de manutenção em 10 por cento. Ctrl+Clique para aumentar o intervalo de manutenção em 5 por cento +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Diminuir o intervalo de manutenção em 10 dias. Ctrl+Clique para diminuir o intervalo de manutenção em 5 dias +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Diminuir o intervalo de manutenção em 5 minutos. Ctrl+Clique para diminuir o intervalo de manutenção em 1 minuto +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Diminuir o intervalo de manutenção em 10 por cento. Ctrl+Clique para diminuir o intervalo de manutenção em 5 por cento STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Alterar o tipo de intervalo entre manutenções STR_VEHICLE_DETAILS_DEFAULT :Padrão @@ -4499,13 +4499,13 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nova cap STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}{}{BLACK}Receita com a adaptação: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Custo de adaptação: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Receita com a adaptação: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Selecionar os veículos para adaptar. Clique+Arraste para selecionar vários veículos. Clique em um espaço vazio para selecionar todo o veículo. Ctrl+Clique para selecionar um veículo e a sequência restante +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Escolher os veículos para adaptar. Clique+Arraste para selecionar vários veículos. Clique em um espaço vazio para selecionar todo o veículo. Ctrl+Clique para selecionar um veículo e a sequência restante ###length VEHICLE_TYPES -STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Selecionar tipo de carga para o trem transportar -STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Selecionar tipo de carga para o veículo transportar -STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}Selecionar tipo de carga para a embarcação transportar -STR_REFIT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Selecionar tipo de carga para a aeronave transportar +STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Escolher tipo de carga para o trem transportar +STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Escolher tipo de carga para o veículo transportar +STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}Escolher tipo de carga para a embarcação transportar +STR_REFIT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Escolher tipo de carga para a aeronave transportar ###length VEHICLE_TYPES STR_REFIT_TRAIN_REFIT_BUTTON :{BLACK}Adaptar trem @@ -4524,7 +4524,7 @@ STR_ORDERS_CAPTION :{WHITE}{VEHICLE STR_ORDERS_TIMETABLE_VIEW :{BLACK}Horários STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Mudar para a visualização de horários -STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de ordens - Clique em uma ordem para selecioná-la. Ctrl+Clique mostra o destino da ordem +STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de ordens - Clique em uma ordem para selecioná-la. Ctrl+Clique para mostrar o destino da ordem STR_ORDER_INDEX :{COMMA}:{NBSP} STR_ORDER_TEXT :{STRING} {STRING} {STRING} {STRING} @@ -4554,9 +4554,9 @@ STR_ORDER_DROP_NO_UNLOADING :Não descarrega STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Alterar o modo de descarregar da ordem selecionada STR_ORDER_REFIT :{BLACK}Adaptar -STR_ORDER_REFIT_TOOLTIP :{BLACK}Selecionar para qual tipo de carga adaptar nesta ordem. Ctrl+Clique remove a instrução de adaptação +STR_ORDER_REFIT_TOOLTIP :{BLACK}Escolher para qual tipo de carga adaptar nesta ordem. Ctrl+Clique para remover a instrução de adaptação STR_ORDER_REFIT_AUTO :{BLACK}Adaptar na estação -STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Selecionar para qual tipo de carga adaptar nesta ordem. Ctrl+Clique remove a instrução de adaptação. Adaptações em estações serão executadas somente se o veículo permitir +STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Escolher para qual tipo de carga adaptar nesta ordem. Ctrl+Clique para remover a instrução de adaptação. Adaptações em estações serão executadas somente se o veículo permitir STR_ORDER_DROP_REFIT_AUTO :Carga fixa STR_ORDER_DROP_REFIT_AUTO_ANY :Carga disponível @@ -4567,10 +4567,10 @@ STR_ORDER_DROP_UNBUNCH :Desagrupar # Depot action tooltips, one per vehicle type ###length VEHICLE_TYPES -STR_ORDER_TRAIN_DEPOT_ACTION_TOOLTIP :{BLACK}Selecionar qual ação executar neste depósito -STR_ORDER_ROAD_DEPOT_ACTION_TOOLTIP :{BLACK}Selecionar qual ação executar neste depósito -STR_ORDER_SHIP_DEPOT_ACTION_TOOLTIP :{BLACK}Selecionar qual ação executar nesse depósito -STR_ORDER_HANGAR_ACTION_TOOLTIP :{BLACK}Selecionar qual ação executar neste hangar +STR_ORDER_TRAIN_DEPOT_ACTION_TOOLTIP :{BLACK}Escolher qual ação executar neste depósito +STR_ORDER_ROAD_DEPOT_ACTION_TOOLTIP :{BLACK}Escolher qual ação executar neste depósito +STR_ORDER_SHIP_DEPOT_ACTION_TOOLTIP :{BLACK}Escolher qual ação executar nesse depósito +STR_ORDER_HANGAR_ACTION_TOOLTIP :{BLACK}Escolher qual ação executar neste hangar ###next-name-looks-similar STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Dados do veículo para basear o salto de ordem @@ -4598,10 +4598,10 @@ STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :é verdadeiro STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :é falso STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}O valor para comparar com os dados do veículo -STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Digite um valor para comparar +STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Digitar um valor para comparar STR_ORDERS_SKIP_BUTTON :{BLACK}Saltar -STR_ORDERS_SKIP_TOOLTIP :{BLACK}Saltar a ordem atual e iniciar a próxima. Ctrl+Clique salta até a ordem selecionada +STR_ORDERS_SKIP_TOOLTIP :{BLACK}Saltar a ordem atual e iniciar a próxima. Ctrl+Clique para saltar até a ordem selecionada STR_ORDERS_DELETE_BUTTON :{BLACK}Remover STR_ORDERS_DELETE_TOOLTIP :{BLACK}Remover a ordem selecionada @@ -4722,24 +4722,24 @@ STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Este hor STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Este horário irá iniciar em {COMMA} segundos STR_TIMETABLE_START :{BLACK}Iniciar Horário -STR_TIMETABLE_START_TOOLTIP :{BLACK}Selecionar quando este horário começa. Ctrl+Clique distribui igualmente a partida de todos os veículos que compartilham esta ordem com base em suas ordens relativas, se a ordem estiver totalmente programada +STR_TIMETABLE_START_TOOLTIP :{BLACK}Escolher quando este horário começa. Ctrl+Clique para distribuir uniformemente a partida de todos os veículos que compartilham esta ordem com base em suas ordens relativas, se a ordem estiver totalmente programada STR_TIMETABLE_START_SECONDS_QUERY :Segundos até o horário iniciar STR_TIMETABLE_CHANGE_TIME :{BLACK}Modificar Tempo -STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Alterar o período de tempo que a ordem selecionada deve durar. Ctrl+Clique define o tempo para todas as ordens +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Alterar o período de tempo que a ordem selecionada deve durar. Ctrl+Clique para definir o tempo para todas as ordens STR_TIMETABLE_CLEAR_TIME :{BLACK}Apagar Tempo -STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Apagar o período de tempo da ordem selecionada. Ctrl+Clique apaga o tempo de todas as ordens +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Apagar o período de tempo da ordem selecionada. Ctrl+Clique para apagar o tempo de todas as ordens STR_TIMETABLE_CHANGE_SPEED :{BLACK}Modificar limite de velocidade -STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Alterar a velocidade máxima de viagem da ordem selecionada. Ctrl+Clique define a velocidade para todas as ordens +STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Alterar a velocidade máxima de viagem da ordem selecionada. Ctrl+Clique para definir a velocidade para todas as ordens STR_TIMETABLE_CLEAR_SPEED :{BLACK}Remover limite de velocidade -STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Apagar a velocidade máxima de viagem da ordem selecionada. Ctrl+Clique apaga as velocidades para todas as ordens +STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Apagar a velocidade máxima de viagem da ordem selecionada. Ctrl+Clique para apagar as velocidades de todas as ordens STR_TIMETABLE_RESET_LATENESS :{BLACK}Reiniciar o Contador de Atrasos -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reiniciar o contador de atrasos, assim o veículo ficará no horário. Ctrl+Clique reinicia todo o grupo, de modo que o veículo mais atrasado ficará pontual e todos os outros estarão antecipados +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reiniciar o contador de atrasos, assim o veículo ficará no horário. Ctrl+Clique para reiniciar todo o grupo, de modo que o veículo mais atrasado ficará pontual e todos os outros estarão antecipados STR_TIMETABLE_AUTOFILL :{BLACK}Preencher automaticamente STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Preencher o horário automaticamente com os valores da próxima viagem. Ctrl+Clique para tentar manter os tempos de espera @@ -4758,9 +4758,9 @@ STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :D: {COLOUR}{COM STR_DATE_CAPTION :{WHITE}Definir data STR_DATE_SET_DATE :{BLACK}Definir data STR_DATE_SET_DATE_TOOLTIP :{BLACK}Usar a data selecionada como data de início para o horário -STR_DATE_DAY_TOOLTIP :{BLACK}Selecionar dia -STR_DATE_MONTH_TOOLTIP :{BLACK}Selecionar mês -STR_DATE_YEAR_TOOLTIP :{BLACK}Selecionar ano +STR_DATE_DAY_TOOLTIP :{BLACK}Escolher dia +STR_DATE_MONTH_TOOLTIP :{BLACK}Escolher mês +STR_DATE_YEAR_TOOLTIP :{BLACK}Escolher ano # AI debug window @@ -4810,7 +4810,7 @@ STR_AI_CONFIG_AI :{SILVER}IA's STR_AI_CONFIG_CHANGE_AI :{BLACK}Selecionar IA STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Selecionar Script de Jogo -STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Carregar outro script. Ctrl+Clique mostra todas as versões disponíveis +STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Carregar outro script. Ctrl+Clique para mostrar todas as versões disponíveis STR_AI_CONFIG_CONFIGURE :{BLACK}Configurar STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configurar os parâmetros do Script @@ -4818,7 +4818,7 @@ STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configur STR_AI_LIST_CAPTION :{WHITE}Disponíveis {STRING} STR_AI_LIST_CAPTION_AI :IA's STR_AI_LIST_CAPTION_GAMESCRIPT :Scripts de jogo -STR_AI_LIST_TOOLTIP :{BLACK}Clique para selecionar um script +STR_AI_LIST_TOOLTIP :{BLACK}Clique para escolher um script STR_AI_LIST_AUTHOR :{LTBLUE}Autor: {ORANGE}{STRING} STR_AI_LIST_VERSION :{LTBLUE}Versão: {ORANGE}{NUM} diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index f113d32b4f..c8f6b7faf9 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1095,6 +1095,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G "" STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Otvori grupni prozor fokusiran na grupu vozila STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}{STATION} više ne prihvata: {CARGO_LIST} +STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION} sada prihvata: {CARGO_LIST} STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Ponuda subvencije istekla:{}{}Prevoz {STRING.gen} iz {STRING} u {STRING} se više neće stimulisati STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subvencija povučena:{}{}Usluga prevoza {STRING.gen} između stanica {STRING} i {STRING} više nije u opticaju @@ -1632,6 +1633,7 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Ako je omoguće STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Početna boja preduzeća: {STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Izaberi početnu boju za preduzeće +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Odabir početne sekundarne boje preduzeća, ako se koristi NewGRF koji to podržava. STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Nezastarevanje aerodroma: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Omogućavanje ovog podešavanja čini svaki tip aerodroma zauvek pristupan nakon njegovog uvođenja @@ -1922,6 +1924,7 @@ STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Reprodukuj zvu ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR :Kraj godine: {STRING} +STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Kraj perioda: {STRING} ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Reprodukuj zvučne efekte prilikom ispisa rezultata poslovanja preduzeća na kraju svake godine @@ -3746,6 +3749,8 @@ STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} dostavljeno STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (potrebno) STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (dostavljeno) +STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Naselje raste {ORANGE}{UNITS_DAYS_OR_SECONDS} +STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Naselje raste {ORANGE}{UNITS_DAYS_OR_SECONDS} (sponzorisano) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Naselje se {RED}ne{BLACK} razvija STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Nivo buke u naselju: {ORANGE}{COMMA}{BLACK} najviše: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Prebacuje glavni pogled na lokaciju naselja. Ctrl+klik otvara novi pogled na lokaciju naselja @@ -4108,7 +4113,11 @@ STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Upravlja STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Pošalji naredbu svim vozilima na ovoj listi STR_VEHICLE_LIST_REPLACE_VEHICLES :Obnovi vozila STR_VEHICLE_LIST_SEND_FOR_SERVICING :Pošalji na servis +STR_VEHICLE_LIST_CREATE_GROUP :Napravi grupu STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Ovogodišnja zarada: {CURRENCY_LONG} (prošle godine: {CURRENCY_LONG}) +STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{TINY_FONT}{BLACK}Profit trenutnog perioda: {CURRENCY_LONG} (prethodni period: {CURRENCY_LONG}) +STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] +STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Pošalji u depo STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Pošalji u depo @@ -4563,11 +4572,14 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Nosivost STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Zarada od transfera: {LTBLUE}{CURRENCY_LONG} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Interval servisiranja: {LTBLUE}{COMMA}dana{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Interval servisiranja: {LTBLUE}{COMMA}{NBSP}minut{P "" a a}{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Interval servisiranja: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Povećava interval servisiranja za 10 dana. Ctrl+klik povećava interval servisiranja za 5 dana STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Povećava interval servisiranja za 5 minuta. Ctrl+klik povećava interval servisiranja za 1 minut STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Povećava interval servisiranja za 10 procenata. Ctrl+klik povećava interval servisiranja za 5 procenata -STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Promeni tip intervala za servis +STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Promeni tip intervala servisiranja STR_VEHICLE_DETAILS_DEFAULT :Podrazumevano STR_VEHICLE_DETAILS_PERCENT :Procenat @@ -4897,6 +4909,7 @@ STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Veštač STR_AI_CONFIG_HUMAN_PLAYER :Ljudsko biće STR_AI_CONFIG_RANDOM_AI :Proizvoljna VI STR_AI_CONFIG_NONE :(nijedna) +STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM} STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Najveći broj suparnika: {ORANGE}{COMMA} STR_AI_CONFIG_MOVE_UP :{BLACK}Pomeri naviše @@ -5362,7 +5375,7 @@ STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Brod se STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Letelica se ne može prodati... STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Previše je vozila u igri -STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Servisni interval nije moguće promeniti... +STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Interval servisiranja nije moguće promeniti... STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... vozilo je uništeno @@ -5412,6 +5425,7 @@ STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Ne posto STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Ne postoje stanice sa odgovarajućim tipom tramvajske železnice STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Ne postoje odgovarajuće stanice za zglobna drumska vozila.{}Zglobnim drumskim vozilima su neophodne stanice kroz koje se prolazi STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Ovaj avion ne može sleteti na ovaj heliodrom +STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Ovaj helikopter ne može sleteti na ovaj aerodrom STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Ne postoji železničko čvorište STR_ERROR_NO_BUOY :{WHITE}Ne postoji bova diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 95fcfefccb..880713b9f2 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -2823,7 +2823,7 @@ STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}选择 STR_STATION_CLASS_DFLT :默认 STR_STATION_CLASS_DFLT_STATION :默认车站 -STR_STATION_CLASS_DFLT_ROADSTOP :默认道路站点 +STR_STATION_CLASS_DFLT_ROADSTOP :默认车站 STR_STATION_CLASS_WAYP :路标 STR_STATION_CLASS_WAYP_WAYPOINT :默认路点 @@ -3613,7 +3613,7 @@ STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (都市) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}人口:{ORANGE}{COMMA}{BLACK} 房屋:{ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} 上月:{ORANGE}{COMMA}{BLACK} 最大:{ORANGE}{COMMA} -STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}上分钟产出的{CARGO_LIST}:{ORANGE}{COMMA}{BLACK}最大产量:{ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}上分钟产出的{WHITE}{CARGO_LIST}{BLACK}:{ORANGE}{COMMA}{NBSP}{BLACK}最大产量:{ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}城镇发展所必需的货物: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{RED} 需要: {ORANGE}{STRING} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} 冬季的需求 @@ -3622,7 +3622,7 @@ STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}已运 STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (已运输) STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}城镇每 {ORANGE}{UNITS_DAYS_OR_SECONDS}{BLACK}{NBSP}成长一次 STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}城镇每 {ORANGE}{UNITS_DAYS_OR_SECONDS}{BLACK}{NBSP}成长一次(正接受资助) -STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK} 城镇发展正在 {RED}停滞 {BLACK}! +STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}城镇发展已{RED}停滞 STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}当前城镇噪音: {ORANGE}{COMMA}{BLACK} 最大: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}将屏幕中心移动到城镇的位置。按住 键点选会在新视点中显示目标位置。 STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}地方政府 @@ -3716,7 +3716,7 @@ STR_SUBSIDIES_OFFERED_TITLE :{BLACK}尚未 STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}将{STRING}从{STRING}运至{STRING}{YELLOW} ({STRING}) STR_SUBSIDIES_NONE :{ORANGE}没有 STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}已经中标的项目: -STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}将 {STRING} 从 {STRING} 运送到 {STRING}{YELLOW} ({COMPANY}{YELLOW},截止日期为 {STRING}) +STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}将 {STRING} 从 {STRING} 运送到 {STRING}{YELLOW} ({COMPANY}{YELLOW},{STRING}) STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}将屏幕中心移动到当前工业或城镇的位置。按住 键点选会在新视点中显示目标位置。 STR_SUBSIDIES_OFFERED_EXPIRY_DATE :在 {DATE_SHORT} 之前 STR_SUBSIDIES_OFFERED_EXPIRY_TIME :剩余时间:{UNITS_MONTHS_OR_MINUTES} @@ -3768,7 +3768,7 @@ STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}评价 STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}显示车站评价 STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MONTH :{BLACK}每月供应数量与本地评价: STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MINUTE :{BLACK}每分钟供应量与本地评价: -STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) +STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING}({COMMA}%) STR_STATION_VIEW_GROUP :{BLACK}群组方式 STR_STATION_VIEW_WAITING_STATION :车站名:等候中 @@ -3964,7 +3964,7 @@ STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRI STR_INDUSTRY_VIEW_REQUIRES :{BLACK}需要: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRING}{BLACK}{3:STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}:{CARGO_SHORT}在库存中{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}:库存 {CARGO_SHORT} {STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}改变产量 STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}修改产量 (百分比, 最高 800%) diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index d8174f2b7e..19df0380ef 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -4657,7 +4657,7 @@ 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_TOOLTIP :{BLACK}Перестати використовути спільні накази. Ctrl+клац мишою видаляє всі накази для цього транспорту +STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Припинити використовути спільні накази. Ctrl+клац мишою видаляє всі накази для цього транспорту STR_ORDERS_GO_TO_BUTTON :{BLACK}Прямувати STR_ORDER_GO_TO_NEAREST_DEPOT :Прямувати до найближчого депо From 0fd576bfbc1abb5c2ef831dfeff3948f38d7b830 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 4 Mar 2024 18:35:39 +0000 Subject: [PATCH 049/695] Update: Translations from eints chinese (simplified): 2 changes by WenSimEHRP russian: 1 change by Ln-Wolf ukrainian: 9 changes by StepanIvasyn portuguese (brazilian): 66 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 132 +++++++++++++++--------------- src/lang/russian.txt | 2 +- src/lang/simplified_chinese.txt | 4 +- src/lang/ukrainian.txt | 9 ++ 4 files changed, 78 insertions(+), 69 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 5d59a13494..4c5be3237c 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -381,9 +381,9 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Abrir a # Tooltips for the main toolbar ###length 31 STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausar jogo -STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Avançar rapidamente no jogo +STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Avanço rápido do jogo STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opções e configurações -STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Salvar, abrir ou abandonar jogo, sair do OpenTTD +STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Salvar, abrir ou abandonar jogo, sair do programa STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Abrir mapa, nova visualização, fluxo de cargas ou lista de sinais STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Abrir lista de localidades ou encontrar localidade STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Abrir lista de subsídios @@ -531,7 +531,7 @@ STR_ABOUT_MENU_TOGGLE_CONSOLE :Mostrar/Ocultar STR_ABOUT_MENU_AI_DEBUG :Depuração de IA/Script de jogo STR_ABOUT_MENU_SCREENSHOT :Captura de tela STR_ABOUT_MENU_SHOW_FRAMERATE :Mostrar taxa de quadros -STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre 'OpenTTD' +STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre o 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Alinhador de sprites STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Mostrar/Ocultar as caixas delimitadoras STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Ativar/Desativar a coloração dos blocos sujos @@ -1043,7 +1043,7 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}A config STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para ativar v-sync na tela. Se modificada, esta configuração terá efeito somente após reiniciar o jogo. Funciona somente com aceleração de hardware habilitada -STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}"Driver" atual: {STRING} +STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Controlador atual: {STRING} STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Tamanho da interface STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Arraste o controle deslizante para definir o tamanho da interface. Ctrl+Arraste para um ajuste contínuo @@ -1346,10 +1346,10 @@ STR_CONFIG_SETTING_SMOKE_AMOUNT :Quantidade de f STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Define a quantidade de fumaça ou fagulhas emitidas pelos veículos STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Modelo de aceleração dos trens: {STRING} -STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Escolher o modelo físico para a aceleração dos trens. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do trem, tais como comprimento e força de tração +STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Escolher o modelo físico para a aceleração dos trens. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do trem, tais como 'comprimento' e 'força de tração' STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Modelo de aceleração dos veículos: {STRING} -STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Escolher o modelo físico para a aceleração dos veículos rodoviários. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do veículo, por exemplo a força de tração +STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Escolher o modelo físico para a aceleração dos veículos rodoviários. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do veículo, por exemplo a 'força de tração' STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :Inclinação do terreno para trens: {STRING} STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Inclinação de um quadrado inclinado para um trem. Valores grandes tornam mais difícil para um trem subir uma colina @@ -1387,7 +1387,7 @@ STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Área plana ao STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Quantidade de terreno plano à volta de uma indústria. Isto garante que um espaço vazio permanecerá disponível em torno da indústria para a construção de linhas, etc. STR_CONFIG_SETTING_MULTIPINDTOWN :Permitir várias indústrias semelhantes por localidade: {STRING} -STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normalmente, localidades não aceitam mais de uma indústria de cada tipo. Com esta configuração, será possível existir várias indústrias do mesmo tipo na mesma localidade +STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normalmente, uma localidade não aceita mais de uma indústria de cada tipo. Esta configuração permitirá várias indústrias, do mesmo tipo, na mesma localidade STR_CONFIG_SETTING_SIGNALSIDE :Mostrar sinais: {STRING} STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Escolher em que lado da via colocar sinais @@ -1401,8 +1401,8 @@ STR_CONFIG_SETTING_SHOWFINANCES :Mostrar janela STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Mostrar janela de finanças no fim do período: {STRING} ###length 2 -STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Se ativado, a janela de finanças é aberta no fim de cada ano, permitindo uma inspeção fácil do estado financeiro da empresa -STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Se ativado, a janela de finanças é aberta no fim de cada período, permitindo uma inspeção fácil do estado financeiro da empresa +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Se ativado, a janela de finanças é exibida no fim de cada ano, permitindo uma inspeção fácil do estado financeiro da empresa +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Se ativado, a janela de finanças é exibida no fim de cada período, permitindo uma inspeção fácil do estado financeiro da empresa STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Novas ordens são 'sem parar' por padrão: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalmente, um veículo irá parar em cada estação por onde passa. Ativando esta configuração, o veículo passará por todas as estações na sua rota, sem parar, até o destino final. Esta opção define somente um modo padrão para novas ordens. Ordens individuais podem ser definidas explicitamente para qualquer um dos dois comportamentos @@ -1436,7 +1436,7 @@ STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permitir financ STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Permite que empresas doem dinheiro às localidades para custear novas casas STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Permitir financiar a reconstrução de estradas locais:{STRING} -STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Permitir que empresas doem dinheiro às localidades para reconstrução de estradas para sabotar os serviços rodoviários na localidade +STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Permitir que empresas doem dinheiro às localidades para reconstrução de estradas e, com isso, sabotar os serviços rodoviários na localidade STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Permitir enviar dinheiro para outras empresas: {STRING} STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Permite a transferências de dinheiro entre empresas em modo multijogador @@ -1486,7 +1486,7 @@ STR_CONFIG_SETTING_ORDER_REVIEW_OFF :Não STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :Sim, mas excluir veículos parados STR_CONFIG_SETTING_ORDER_REVIEW_ON :De todos os veículos -STR_CONFIG_SETTING_WARN_INCOME_LESS :Avisar se a receita de um veículo é negativa: {STRING} +STR_CONFIG_SETTING_WARN_INCOME_LESS :Avisar se o rendimento de um veículo está negativo: {STRING} ###length 2 STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Quando ativado, uma mensagem é enviada quando um veículo não gerou lucro durante um ano STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Quando ativado, uma mensagem é enviada quando um veículo não gerou qualquer lucro durante um período @@ -1508,9 +1508,9 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (tempo de calendário congelado) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Escalar a produção de carga da localidade: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Escalar a produção de carga das localidades nesta porcentagem. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Ajustar a produção de carga das localidades nesta porcentagem. STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Escalar a produção de carga da indústria: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Escalar a produção de carga das indústrias nesta porcentagem. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Ajustar a produção de carga das indústrias nesta porcentagem. STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Renovar automaticamente um veículo quando ele ficar velho: {STRING} @@ -1546,7 +1546,7 @@ STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as carg STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Se ativado, a carga transportável pelo veículo aparecerá acima dele nas listas de veículos STR_CONFIG_SETTING_LANDSCAPE :Clima: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os climas definem a jogabilidade básica com diferentes cargas e requerimentos para o crescimento das localidades. NewGRFs e Scripts de Jogo permitem um controle mais fino +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os climas definem a jogabilidade básica com diferentes cargas e requerimentos para o crescimento das localidades. NewGRF's e Scripts de Jogo permitem um controle mais fino STR_CONFIG_SETTING_LAND_GENERATOR :Gerador de Terreno: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :O gerador 'Original' depende do conjunto gráfico base e produz formas de terreno pré-definidas. 'TerraGenesis' é um gerador baseado no algoritmo de ruído de Perlin com definições mais refinadas @@ -1675,7 +1675,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION :Teclado virtual STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Escolher o método para mostrar o teclado virtual para inserir texto em caixas de diálogo usando o cursor. Isto é útil para dispositivos pequenos que não possuem teclados ###length 4 STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :Desativado -STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Duplo clique +STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Clique duplo STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Clique simples (quando em foco) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Clique simples (imediatamente) @@ -2040,7 +2040,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" si STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modo de distribuição para correspondências: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simétrico" significa que aproximadamente a mesma quantidade de correspondência será enviada de uma estação A para uma estação B, assim como de B para A. "Assimétrica" significa que quantidades arbitrárias de correspondência podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática de correspondências. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Modo de distribuição para a classe de carga BLINDADA: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe de carga BLINDADA contém objetos de valor em clima temperado, diamantes em clima subtropical ou ouro em clima subártico. NewGRFs podem modificar isso. "Simétrica" significa que aproximadamente a mesma quantidade dessa carga será enviada de uma estação A para uma estação B, assim como de B para A. "Assimétrica" significa que quantidades arbitrárias dessa carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática para aquela carga. Recomenda-se definir isso como assimétrico ou manual ao jogar subártico ou subtropical, pois os bancos só recebem carga nesses climas. Para temperado, você também pode escolher simétrico, pois os bancos enviarão objetos de valor de volta ao banco de origem. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe de carga BLINDADA contém objetos de valor em clima temperado, diamantes em clima subtropical ou ouro em clima subártico. NewGRF's podem modificar isso. "Simétrica" significa que aproximadamente a mesma quantidade dessa carga será enviada de uma estação A para uma estação B, assim como de B para A. "Assimétrica" significa que quantidades arbitrárias dessa carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática para aquela carga. Recomenda-se definir isso como assimétrico ou manual ao jogar subártico ou subtropical, pois os bancos só recebem carga nesses climas. Para temperado, você também pode escolher simétrico, pois os bancos enviarão objetos de valor de volta ao banco de origem. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Modo de distribuição para outras classes de carga: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Assimétrico" significa que quantidades arbitrárias de carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática dessas cargas. ###length 3 @@ -2121,7 +2121,7 @@ STR_CONFIG_SETTING_VEHICLES_ORDERS :Ordens STR_CONFIG_SETTING_LIMITATIONS :Limitações STR_CONFIG_SETTING_ACCIDENTS :Desastres / Acidentes STR_CONFIG_SETTING_GENWORLD :Geração de Mundo -STR_CONFIG_SETTING_ENVIRONMENT :Meio Ambiente +STR_CONFIG_SETTING_ENVIRONMENT :Ambiente STR_CONFIG_SETTING_ENVIRONMENT_TIME :Tempo STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :Autoridades STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :Localidades @@ -2198,10 +2198,10 @@ STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Iniciar STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Criar um cenário de jogo personalizado STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Iniciar um jogo multijogador -STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Escolher paisagem 'clima temperado' -STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Escolher paisagem 'clima subártico' -STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Escolher paisagem 'clima subtropical' -STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Escolher paisagem 'Terra dos brinquedos' +STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Selecionar paisagem 'clima temperado' +STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Selecionar paisagem 'clima subártico' +STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Selecionar paisagem 'clima subtropical' +STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Selecionar paisagem 'Terra dos brinquedos' STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Abrir opções de jogo STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Abrir tabela de classificações @@ -2268,7 +2268,7 @@ STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Mostrar STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Mostrar cores dos grupos de aeronaves STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Escolher a cor principal para o esquema selecionado. Ctrl+Clique para definir esta cor para todos os esquemas STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Escolher a cor secundária para o esquema selecionado. Ctrl+Clique para definir esta cor para todos os esquemas -STR_LIVERY_PANEL_TOOLTIP :{BLACK}Escolher o esquema de cores a alterar ou esquemas múltiplos utilizando Ctrl+Clique. Clique na opção para usar o esquema de cores +STR_LIVERY_PANEL_TOOLTIP :{BLACK}Selecionar o esquema de cores a alterar ou esquemas múltiplos utilizando Ctrl+Clique. Clique na opção para usar o esquema de cores STR_LIVERY_TRAIN_GROUP_EMPTY :Não há grupos de trens configurados STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Não há grupos de veículos configurados STR_LIVERY_SHIP_GROUP_EMPTY :Não há grupos de embarcações configurados @@ -2276,7 +2276,7 @@ STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Não há grupos ###length 23 STR_LIVERY_DEFAULT :Pintura Padrão -STR_LIVERY_STEAM :Máquina a Vapor +STR_LIVERY_STEAM :Locomotiva a Vapor STR_LIVERY_DIESEL :Locomotiva Diesel STR_LIVERY_ELECTRIC :Locomotiva Elétrica STR_LIVERY_MONORAIL :Locomotiva Monotrilho @@ -2679,7 +2679,7 @@ STR_CONTENT_DETAIL_SUBTITLE_AUTOSELECTED :{SILVER}Esta de STR_CONTENT_DETAIL_SUBTITLE_ALREADY_HERE :{SILVER}Você já tem isto STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER}Esse conteúdo é desconhecido e não pode ser baixado pelo OpenTTD -STR_CONTENT_DETAIL_UPDATE :{SILVER}Isto é uma substituição para um {STRING} existente +STR_CONTENT_DETAIL_UPDATE :{SILVER}Isto é uma atualização para {STRING} STR_CONTENT_DETAIL_NAME :{SILVER}Nome: {WHITE}{STRING} STR_CONTENT_DETAIL_VERSION :{SILVER}Versão: {WHITE}{STRING} STR_CONTENT_DETAIL_DESCRIPTION :{SILVER}Descrição: {WHITE}{STRING} @@ -2718,7 +2718,7 @@ STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... arqu STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}Falha na descompactação do arquivo STR_MISSING_GRAPHICS_SET_CAPTION :{WHITE}Gráficos não instalados -STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD precisa de gráficos para funcionar, mas nenhum foi encontrado. Você permite ao OpenTTD fazer o download e instalar esses gráficos? +STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD precisa de gráficos para funcionar, mas nenhum foi encontrado. Você permite que o OpenTTD faça o download e instale esses gráficos? STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Sim, obter os gráficos pela rede STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Não, sair do OpenTTD @@ -2941,7 +2941,7 @@ STR_AIRPORT_SMALL :Pequeno STR_AIRPORT_CITY :Cidade STR_AIRPORT_METRO :Metropolitano STR_AIRPORT_INTERNATIONAL :Internacional -STR_AIRPORT_COMMUTER :Transbordo +STR_AIRPORT_COMMUTER :Regional STR_AIRPORT_INTERCONTINENTAL :Intercontinental STR_AIRPORT_HELIPORT :Heliporto STR_AIRPORT_HELIDEPOT :Hangar para Helicópteros @@ -3026,7 +3026,7 @@ STR_FOUND_TOWN_CITY :{BLACK}Cidade STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Cidades crescem mais depressa do que as localidades normais{}Dependendo das configurações, elas são maiores quando fundadas STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Disposição de estradas na localidade: -STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Selecionar disposição das estradas utilizada para esta localidade +STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Selecionar disposição das estradas utilizada nesta localidade STR_FOUND_TOWN_SELECT_LAYOUT_ORIGINAL :{BLACK}Original STR_FOUND_TOWN_SELECT_LAYOUT_BETTER_ROADS :{BLACK}Estradas melhores STR_FOUND_TOWN_SELECT_LAYOUT_2X2_GRID :{BLACK}Grade 2x2 @@ -3217,16 +3217,16 @@ STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COM STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ###length 15 -STR_FRAMERATE_GAMELOOP :{BLACK}Total no Loop do jogo: +STR_FRAMERATE_GAMELOOP :{BLACK}Total no ciclo de jogo: STR_FRAMERATE_GL_ECONOMY :{BLACK} Movimentação de carga: STR_FRAMERATE_GL_TRAINS :{BLACK} Tiques de trem: -STR_FRAMERATE_GL_ROADVEHS :{BLACK} Tiques de veículo rodoviário: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Tiques de veículo: STR_FRAMERATE_GL_SHIPS :{BLACK} Tiques de embarcação: STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Tiques de aeronave: STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Tiques do mundo: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Atraso na rede de conexões: -STR_FRAMERATE_DRAWING :{BLACK}Renderização de gráficos: -STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Visualizações do mundo: +STR_FRAMERATE_DRAWING :{BLACK}Renderização gráfica: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Visualizações de mundo: STR_FRAMERATE_VIDEO :{BLACK}Saída de video: STR_FRAMERATE_SOUND :{BLACK}Mixagem de áudio: STR_FRAMERATE_ALLSCRIPTS :{BLACK} SJ/IA total: @@ -3234,7 +3234,7 @@ STR_FRAMERATE_GAMESCRIPT :{BLACK} Scrip STR_FRAMERATE_AI :{BLACK} IA {NUM} {STRING} ###length 15 -STR_FRAMETIME_CAPTION_GAMELOOP :Loop do jogo +STR_FRAMETIME_CAPTION_GAMELOOP :Ciclo de jogo STR_FRAMETIME_CAPTION_GL_ECONOMY :Movimentação de carga STR_FRAMETIME_CAPTION_GL_TRAINS :Tiques de trem STR_FRAMETIME_CAPTION_GL_ROADVEHS :Tiques de veículo @@ -3242,7 +3242,7 @@ STR_FRAMETIME_CAPTION_GL_SHIPS :Tiques de embar STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Tiques de aeronave STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Tiques do mundo STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Atraso na rede de conexões -STR_FRAMETIME_CAPTION_DRAWING :Renderizações de gráficos +STR_FRAMETIME_CAPTION_DRAWING :Renderização gráfica STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Renderização de visualizações STR_FRAMETIME_CAPTION_VIDEO :Saída de vídeo STR_FRAMETIME_CAPTION_SOUND :Mixagem de áudio @@ -3505,8 +3505,8 @@ STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Restaura STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Restaurar os deslocamentos relativos atuais STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}Deslocamento X: {NUM}, Deslocamento Y: {NUM} (Absoluto) STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}Deslocamento X: {NUM}, Deslocamento Y: {NUM} (Relativo) -STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Escolher sprite -STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Escolher um sprite de qualquer lugar na tela +STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Selecionar sprite +STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Selecionar um sprite de qualquer lugar na tela STR_SPRITE_ALIGNER_GOTO_CAPTION :{WHITE}Ir para o sprite @@ -3525,7 +3525,7 @@ STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} deve STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} deve ser carregado depois de {2:STRING} STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} requer OpenTTD versão {2:STRING} ou superior STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :o arquivo GRF que foi desenvolvido para traduzir -STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Foram carregados NewGRFs demais +STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Foram carregados NewGRF's demais STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Carregar {1:STRING} como NewGRF estático com {2:STRING} pode causar erro de sincronização STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Sprite inesperado (sprite {3:NUM}) STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Propriedade Action 0 desconhecida {4:HEX} (sprite {3:NUM}) @@ -3545,12 +3545,12 @@ STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Você e STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Não é possível adicionar arquivo: ID do GRF duplicado STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Arquivo correspondente não encontrado (GRF compatível carregado) -STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Não é possível adicionar arquivo: limite de NewGRFs atingido +STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Não é possível adicionar arquivo: limite de NewGRF's atingido STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}GRF's compatíveis foram carregados para os arquivos que faltam STR_NEWGRF_DISABLED_WARNING :{WHITE}Arquivos GRF ausentes foram desativados STR_NEWGRF_UNPAUSE_WARNING_TITLE :{YELLOW}Arquivos GRF em falta -STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Sair da pausa pode travar o OpenTTD. Não envie relatórios de erros sobre travamentos subsequentes.{}Você realmente deseja sair da pausa? +STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Sair da pausa pode travar o OpenTTD. Não envie relatórios de erros sobre travamentos subsequentes.{}Você quer mesmo continuar o jogo? # NewGRF status STR_NEWGRF_LIST_NONE :Nenhum @@ -3564,7 +3564,7 @@ STR_NEWGRF_BROKEN :{WHITE}O compor STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}O estado do vagão motorizado mudou para '{1:ENGINE}' quando estiver fora do depósito STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}O comprimento do veículo mudou para '{1:ENGINE}' quando estiver fora do depósito STR_NEWGRF_BROKEN_CAPACITY :{WHITE}A capacidade do veículo mudou para '{1:ENGINE}' quando estiver fora do depósito ou em adaptação -STR_BROKEN_VEHICLE_LENGTH :{WHITE}O trem '{VEHICLE}' pertencente a '{COMPANY}' tem um comprimento inválido, possivelmente devido à problemas com NewGRFs. Podem ocorrer erros de sincronização ou travamento do jogo +STR_BROKEN_VEHICLE_LENGTH :{WHITE}O trem '{VEHICLE}' pertencente a '{COMPANY}' tem um comprimento inválido, possivelmente devido à problemas com NewGRF's. Podem ocorrer erros de sincronização ou travamento do jogo STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' fornece informação incorreta STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}A informação de carga/adaptação para '{1:ENGINE}' é diferente da lista de compra depois da construção. Isto pode fazer a renovação/substituição automática falhar se adaptar corretamente @@ -3583,9 +3583,9 @@ STR_NEWGRF_INVALID_INDUSTRYTYPE : # NewGRF scanning window -STR_NEWGRF_SCAN_CAPTION :{WHITE}Analisando NewGRFs -STR_NEWGRF_SCAN_MESSAGE :{BLACK}Analisando NewGRFs. Dependendo da quantidade isso pode demorar... -STR_NEWGRF_SCAN_STATUS :{BLACK}{NUM} NewGRF{P "" s} analisado{P "" s} de {NUM} NewGRF{P "" s} estimado{P "" s} +STR_NEWGRF_SCAN_CAPTION :{WHITE}Procurando NewGRF's +STR_NEWGRF_SCAN_MESSAGE :{BLACK}Procurando NewGRF's. Dependendo da quantidade isto pode demorar... +STR_NEWGRF_SCAN_STATUS :{BLACK}{NUM} NewGRF{P "" s} procurado{P "" s} de {NUM} NewGRF{P "" s} estimado{P "" s} STR_NEWGRF_SCAN_ARCHIVES :Procurando por arquivos # Sign list window @@ -3808,7 +3808,7 @@ STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Centrali STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Alterar o nome da estação STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Mostrar todos os trens que têm esta estação na sua programação -STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Mostrar todos os veículos rodoviários que têm esta estação na sua programação +STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Mostrar todos os veículos que têm esta estação na sua programação STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Mostrar todas as aeronaves que têm esta estação na sua programação STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Mostrar todas as embarcações que têm esta estação na sua programação @@ -3879,7 +3879,7 @@ STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inaugura STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Esquema de Cores: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Veículos: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} tre{P m ns} -STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} veículo{P "" s} rodoviário{P "" s} +STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} veículo{P "" s} rodov. STR_COMPANY_VIEW_AIRCRAFT :{WHITE}{COMMA} aeronave{P "" s} STR_COMPANY_VIEW_SHIPS :{WHITE}{COMMA} embarcaç{P ão ões} STR_COMPANY_VIEW_VEHICLES_NONE :{WHITE}Nenhum @@ -3952,7 +3952,7 @@ STR_INDUSTRY_DIRECTORY_FILTER_NONE :Nenhum # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} -STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produção no mês passado: +STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produção no último mês: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produção no último minuto: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado) STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização da indústria. Ctrl+Clique para abrir uma nova visualização na localização da indústria @@ -4030,7 +4030,7 @@ STR_GROUP_CREATE_TOOLTIP :{BLACK}Clique p STR_GROUP_DELETE_TOOLTIP :{BLACK}Excluir o grupo selecionado STR_GROUP_RENAME_TOOLTIP :{BLACK}Alterar o nome do grupo selecionado STR_GROUP_LIVERY_TOOLTIP :{BLACK}Alterar a pintura do grupo selecionado -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clique para excluir esse grupo da substituição automática global. Ctrl+Clique para também excluir os subgrupos. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clique para proteger este grupo da substituição automática global. Ctrl+Clique para também proteger os subgrupos. STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Excluir grupo STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Você quer mesmo excluir este grupo e seus descendentes? @@ -4075,7 +4075,7 @@ STR_PURCHASE_INFO_RUNNINGCOST_PERIOD :{BLACK}Custo de STR_PURCHASE_INFO_CAPACITY :{BLACK}Capacidade: {GOLD}{CARGO_LONG} {STRING} STR_PURCHASE_INFO_REFITTABLE :(adaptável) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Desenvolvido: {GOLD}{NUM}{BLACK} Vida útil: {GOLD}{COMMA} ano{P "" s} -STR_PURCHASE_INFO_RELIABILITY :{BLACK}Confiabilidade Máx.: {GOLD}{COMMA}% +STR_PURCHASE_INFO_RELIABILITY :{BLACK}Confiabilidade máx.: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Custo: {GOLD}{CURRENCY_LONG} STR_PURCHASE_INFO_COST_REFIT :{BLACK}Custo: {GOLD}{CURRENCY_LONG}{BLACK} (Custo de Adaptação: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Peso: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) @@ -4088,7 +4088,7 @@ STR_PURCHASE_INFO_ALL_TYPES :Todos os tipos STR_PURCHASE_INFO_NONE :Nenhuma STR_PURCHASE_INFO_ENGINES_ONLY :Somente locomotivas STR_PURCHASE_INFO_ALL_BUT :Todas menos {CARGO_LIST} -STR_PURCHASE_INFO_MAX_TE :{BLACK}Força de Tração Máx. : {GOLD}{FORCE} +STR_PURCHASE_INFO_MAX_TE :{BLACK}Força de Tração máx.: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Autonomia: {GOLD}{COMMA} quadrados STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Tipo de aeronave: {GOLD}{STRING} @@ -4098,10 +4098,10 @@ STR_CARGO_TYPE_FILTER_FREIGHT :Carga STR_CARGO_TYPE_FILTER_NONE :Nenhum ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista de seleção de trens. Clique em um trem para informações. Ctrl+Clique para mostrar/ocultar este tipo de veículo -STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Lista de seleção de veículos rodoviários. Clique em um veículo para informações. Ctrl+Clique para mostrar/ocultar este tipo de veículo -STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Lista de seleção de embarcações. Clique em uma embarcação para informações. Ctrl+Clique para mostrar/ocultar este tipo de embarcação -STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lista de seleção de aeronaves. Clique em uma aeronave para informações. Ctrl+Clique para mostrar/ocultar este tipo de aeronave +STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista de seleção de veículo ferroviário. Clique em um veículo para informações. Ctrl+Clique para mostrar/ocultar este tipo de veículo +STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Lista de seleção de veículo rodoviário. Clique em um veículo para informações. Ctrl+Clique para mostrar/ocultar este tipo de veículo +STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Lista de seleção de embarcação. Clique em uma embarcação para informações. Ctrl+Clique para mostrar/ocultar este tipo de embarcação +STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lista de seleção de aeronave. Clique em uma aeronave para informações. Ctrl+Clique para mostrar/ocultar este tipo de aeronave ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Comprar Veículo @@ -4175,7 +4175,7 @@ STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} ve STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Trens - arraste o veículo com o botão esquerdo do mouse para acrescentar/retirar do trem. Clique com o botão direito para informações. Ctrl+Clique para aplicar uma das funções à sequência restante +STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Trens - arraste o veículo com o botão esquerdo do mouse para acrescentar/retirar do trem. Clique com o botão direito para informações. Ctrl+Clique para aplicar uma das funções à cadeia seguinte STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Veículos - Clique com o botão direito em um veículo para informações STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Embarcações - Clique com o botão direito em uma embarcação para informações STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Aeronaves - Clique com o botão direito em uma aeronave para informações @@ -4224,7 +4224,7 @@ STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Comprar ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização do depósito ferroviário. Ctrl+Clique para abrir uma nova visualização na localização do depósito ferroviário -STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização do depósito rodoviário. Ctrl+Clique para abrir uma nova visualização na localização do depósito de veículos +STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização do depósito rodoviário. Ctrl+Clique para abrir uma nova visualização na localização do depósito rodoviário STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização do depósito de embarcações. Ctrl+Clique para abrir uma nova visualização na localização do depósito STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização do hangar. Ctrl+Clique para abrir uma nova visualização na localização do hangar @@ -4332,10 +4332,10 @@ STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl+ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização do trem. Duplo clique para seguir o trem na visualização principal. Ctrl+Clique para abrir uma nova visualização na localização do trem -STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização do veículo. Duplo clique para seguir o veículo na visualização principal. Ctrl+Clique para abrir uma nova visualização na localização do veículo -STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização da embarcação. Duplo clique para seguir a embarcação na visualização principal. Ctrl+Clique para abrir uma nova visualização na localização da embarcação -STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização da aeronave. Duplo clique para seguir a aeronave na visualização principal. Ctrl+Clique para abrir uma nova visualização na localização da aeronave +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização do trem. Clique duplo para seguir o trem na visualização principal. Ctrl+Clique para abrir uma nova visualização na localização do trem +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização do veículo. Clique duplo para seguir o veículo na visualização principal. Ctrl+Clique para abrir uma nova visualização na localização do veículo +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização da embarcação. Clique duplo para seguir a embarcação na visualização principal. Ctrl+Clique para abrir uma nova visualização na localização da embarcação +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização da aeronave. Clique duplo para seguir a aeronave na visualização principal. Ctrl+Clique para abrir uma nova visualização na localização da aeronave ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar trem para o depósito. Ctrl+Clique para fazer apenas manutenção @@ -4344,7 +4344,7 @@ STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar e STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar aeronave para o hangar. Ctrl+Clique para fazer apenas manutenção ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Comprar uma cópia do trem incluindo todos os vagões. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Comprar uma cópia do trem, incluindo todos os vagões. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Comprar uma cópia do veículo. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Comprar uma cópia da embarcação. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Comprar uma cópia da aeronave. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado @@ -4499,7 +4499,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nova cap STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}{}{BLACK}Receita com a adaptação: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Custo de adaptação: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Receita com a adaptação: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Escolher os veículos para adaptar. Clique+Arraste para selecionar vários veículos. Clique em um espaço vazio para selecionar todo o veículo. Ctrl+Clique para selecionar um veículo e a sequência restante +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Selecionar os veículos para adaptar. Clique+Arraste para selecionar vários veículos. Clique em um espaço vazio para selecionar todo o veículo. Ctrl+Clique para selecionar um veículo e a sequência restante ###length VEHICLE_TYPES STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Escolher tipo de carga para o trem transportar @@ -4536,7 +4536,7 @@ STR_ORDER_NON_STOP :{BLACK}Sem para STR_ORDER_GO_TO :Ir para STR_ORDER_GO_NON_STOP_TO :Ir, sem parar, para STR_ORDER_GO_VIA :Ir via -STR_ORDER_GO_NON_STOP_VIA :Ir sem parar via +STR_ORDER_GO_NON_STOP_VIA :Ir, sem parar, via STR_ORDER_TOOLTIP_NON_STOP :{BLACK}Alterar o modo de parada da ordem selecionada STR_ORDER_TOGGLE_FULL_LOAD :{BLACK}Carga completa de qualquer carga @@ -4714,9 +4714,9 @@ STR_TIMETABLE_AND_TRAVEL_FOR :e viajar por {S STR_TIMETABLE_TOTAL_TIME :{BLACK}Este horário levará {STRING} para completar STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Este horário levará pelo menos {STRING} para completar (nem tudo está programado) -STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Este veículo está atualmente circulando pontualmente -STR_TIMETABLE_STATUS_LATE :{BLACK}Este veículo está atualmente circulando {STRING} atrasado -STR_TIMETABLE_STATUS_EARLY :{BLACK}Este veículo está atualmente circulando {STRING} adiantado +STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Atualmente este veículo está circulando pontualmente +STR_TIMETABLE_STATUS_LATE :{BLACK}Atualmente este veículo está circulando {STRING} atrasado +STR_TIMETABLE_STATUS_EARLY :{BLACK}Atualmente este veículo está circulando {STRING} adiantado STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Este horário ainda não começou STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Este horário irá iniciar em {STRING} STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Este horário irá iniciar em {COMMA} segundos @@ -4739,7 +4739,7 @@ STR_TIMETABLE_CLEAR_SPEED :{BLACK}Remover STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Apagar a velocidade máxima de viagem da ordem selecionada. Ctrl+Clique para apagar as velocidades de todas as ordens STR_TIMETABLE_RESET_LATENESS :{BLACK}Reiniciar o Contador de Atrasos -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reiniciar o contador de atrasos, assim o veículo ficará no horário. Ctrl+Clique para reiniciar todo o grupo, de modo que o veículo mais atrasado ficará pontual e todos os outros estarão antecipados +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reiniciar o contador de atrasos para o veículo ficar pontual. Ctrl+Clique para reiniciar todo o grupo e fazer o veículo mais atrasado ficar pontual e todos os outros ficarem adiantados STR_TIMETABLE_AUTOFILL :{BLACK}Preencher automaticamente STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Preencher o horário automaticamente com os valores da próxima viagem. Ctrl+Clique para tentar manter os tempos de espera @@ -4818,7 +4818,7 @@ STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configur STR_AI_LIST_CAPTION :{WHITE}Disponíveis {STRING} STR_AI_LIST_CAPTION_AI :IA's STR_AI_LIST_CAPTION_GAMESCRIPT :Scripts de jogo -STR_AI_LIST_TOOLTIP :{BLACK}Clique para escolher um script +STR_AI_LIST_TOOLTIP :{BLACK}Clique para selecionar um script STR_AI_LIST_AUTHOR :{LTBLUE}Autor: {ORANGE}{STRING} STR_AI_LIST_VERSION :{LTBLUE}Versão: {ORANGE}{NUM} diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 95e39773a1..5c75198128 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1469,7 +1469,7 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Включен STR_CONFIG_SETTING_CITY_APPROVAL :Отношение городской администрации к компаниям: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Выберите уровень влияния шума и загрязнения окружающей среды компаниями на их рейтинг в городах и возможность дальнейшего строительства в городах -STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Максимальная высота объектов на карте: {STRING} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Ограничение высоты ландшафта: {STRING} STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Установить максимальное значение высоты гор на карте. «(Автовыбор)» подберёт приемлемое значение после создания ландшафта. STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} ###setting-zero-is-special diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 880713b9f2..1b178c548f 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -4843,8 +4843,8 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :游戏脚本 STR_AI_SETTINGS_CLOSE :{BLACK}关闭 STR_AI_SETTINGS_RESET :{BLACK}重设 STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}:{ORANGE}[{STRING},{STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING},{STRING}] +STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}:{ORANGE}[{STRING}, {STRING}] +STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 19df0380ef..fb9068f0b4 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -381,6 +381,7 @@ STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP} # Time units used in string control characters +STR_UNITS_MONTHS :{NUM}{NBSP}місяц{P ь я ів} STR_UNITS_MINUTES :{NUM}{NBSP}хвилин{P а и ""} @@ -1039,6 +1040,8 @@ STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLAC STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Компанія {STRING} отримала субсидію!{}{}Перевезення {STRING.r} з {STRING} до {STRING} принесе втричі більше прибутків впродовж {UNITS_YEARS_OR_MINUTES}! STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Компанія {STRING} отримала субсидію!{}{}Перевезення {STRING.r} з {STRING} до {STRING} принесе вчетверо більше прибутків впродовж {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Дорожній хаос у місті {TOWN}!{}{}Програма реконструкції міських доріг, яку профінансувала компанія {STRING}, спричинила 6 місяців страждань для автомобілістів! +STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}Дорожній хаос у місті {TOWN}!{}{}Програма реконструкції міських доріг, яку профінансувала компанія {STRING}, спричинила 6 хвилин страждань для автомобілістів! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Транспортна монополія! STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLACK}Влада міста {TOWN} підписала з компанією {STRING} договір про ексклюзивні транспортні права на 1 рік! STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}Влада міста {TOWN} підписала з компанією {STRING} договір про ексклюзивні транспортні права на 12 хвилин! @@ -1059,6 +1062,7 @@ STR_GAME_OPTIONS_TAB_GRAPHICS :Графіка STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Виберіть налаштування графіки STR_GAME_OPTIONS_TAB_SOUND :Звук STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Виберіть налаштування звуку та музики +STR_GAME_OPTIONS_TAB_SOCIAL :Соціальні платформи STR_GAME_OPTIONS_VOLUME :Гучність STR_GAME_OPTIONS_SFX_VOLUME :Звукові ефекти @@ -1172,6 +1176,7 @@ STR_GAME_OPTIONS_GUI_SCALE_4X :4x STR_GAME_OPTIONS_GUI_SCALE_5X :5x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Автоматизований збір даних +STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Участь в автоматизованому зборі даних STR_GAME_OPTIONS_GRAPHICS :{BLACK}Графіка @@ -1368,6 +1373,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :правору STR_CONFIG_SETTING_INFINITE_MONEY :Нескінченні гроші: {STRING} +STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Дозволяє необмежені витрати і вимикає банкрутство компаній STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максимальна сума позики: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максимальна сума позики для компанії (без урахування інфляції) @@ -3812,6 +3818,7 @@ STR_STATION_LIST_CARGO_FILTER_ALL_AND_NO_RATING :Всі типи STR_STATION_LIST_CARGO_FILTER_MULTIPLE :Кілька типів вантажів STR_STATION_LIST_CARGO_FILTER_NO_CARGO_TYPES :Жодного типу вантажів STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :тільки без рейтингу вантажів +STR_STATION_LIST_CARGO_FILTER_SELECT_ALL :Обрати усі без рейтингу STR_STATION_LIST_CARGO_FILTER_NO_RATING :жодного рейтингу вантажів STR_STATION_LIST_CARGO_FILTER_EXPAND :Показати ще... @@ -4012,6 +4019,7 @@ STR_INDUSTRY_DIRECTORY_FILTER_NONE :Нема # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Вироблено за місяць: +STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Вироблено за минулу хвилину: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% перевезено) STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Показати підприємство у центрі екрану. Ctrl+клац мишею відкриє нове вікно з видом на підприємство STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Обсяг виробництва: {YELLOW}{COMMA}% @@ -5369,6 +5377,7 @@ STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Не м STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Транспорт може чекати тільки на станціях STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Цей транспорт не зупиняється на цій станції. STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... розклад незавершений +STR_ERROR_TIMETABLE_NOT_STARTED :{WHITE}... розклад ще не почався # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... дуже багато позначень From 845b894fd8f5b1d1b5702722282110b521471c18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Tue, 5 Mar 2024 12:41:04 +0100 Subject: [PATCH 050/695] Remove: [Script] random_deviation from setting description table (#12221) --- src/ai/ai.hpp | 3 +- src/ai/ai_core.cpp | 5 ++-- src/game/game.hpp | 3 +- src/game/game_core.cpp | 3 +- src/game/game_gui.cpp | 46 +++++------------------------ src/lang/english.txt | 2 -- src/saveload/afterload.cpp | 4 +-- src/script/api/ai_changelog.hpp | 1 + src/script/api/game_changelog.hpp | 1 + src/script/api/script_info_docs.hpp | 6 ---- src/script/script_config.cpp | 9 ------ src/script/script_config.hpp | 6 ---- src/script/script_gui.cpp | 46 +++++------------------------ src/script/script_info.cpp | 30 ++----------------- 14 files changed, 28 insertions(+), 137 deletions(-) diff --git a/src/ai/ai.hpp b/src/ai/ai.hpp index 9a33be9446..5750ae6c53 100644 --- a/src/ai/ai.hpp +++ b/src/ai/ai.hpp @@ -27,9 +27,8 @@ public: /** * Start a new AI company. * @param company At which slot the AI company should start. - * @param deviate Whether to apply random deviation to the configured AI. */ - static void StartNew(CompanyID company, bool deviate = true); + static void StartNew(CompanyID company); /** * Called every game-tick to let AIs do something. diff --git a/src/ai/ai_core.cpp b/src/ai/ai_core.cpp index 1e8336fd22..660a6e138f 100644 --- a/src/ai/ai_core.cpp +++ b/src/ai/ai_core.cpp @@ -33,7 +33,7 @@ return !_networking || (_network_server && _settings_game.ai.ai_in_multiplayer); } -/* static */ void AI::StartNew(CompanyID company, bool deviate) +/* static */ void AI::StartNew(CompanyID company) { assert(Company::IsValidID(company)); @@ -56,7 +56,6 @@ /* Load default data and store the name in the settings */ config->Change(info->GetName(), -1, false); } - if (deviate) config->AddRandomDeviation(company); config->AnchorUnchangeableSettings(); c->ai_info = info; @@ -221,7 +220,7 @@ * killing the offending AI we start a random other one in it's place, just * like what would happen if the AI was missing during loading. */ AI::Stop(c); - AI::StartNew(c, false); + AI::StartNew(c); } } else if (Company::IsValidAiID(c)) { /* Update the reference in the Company struct. */ diff --git a/src/game/game.hpp b/src/game/game.hpp index 7ec438e88e..c3664cd696 100644 --- a/src/game/game.hpp +++ b/src/game/game.hpp @@ -31,9 +31,8 @@ public: /** * Start up a new GameScript. - * @param deviate Whether to apply random deviation to the configured GameScript. */ - static void StartNew(bool deviate = true); + static void StartNew(); /** * Uninitialize the Game system. diff --git a/src/game/game_core.cpp b/src/game/game_core.cpp index ad3558c0e1..c7763429ff 100644 --- a/src/game/game_core.cpp +++ b/src/game/game_core.cpp @@ -69,7 +69,7 @@ } } -/* static */ void Game::StartNew(bool deviate) +/* static */ void Game::StartNew() { if (Game::instance != nullptr) return; @@ -83,7 +83,6 @@ GameInfo *info = config->GetInfo(); if (info == nullptr) return; - if (deviate) config->AddRandomDeviation(OWNER_DEITY); config->AnchorUnchangeableSettings(); Backup cur_company(_current_company, FILE_LINE); diff --git a/src/game/game_gui.cpp b/src/game/game_gui.cpp index 879428c0c4..a63100edb6 100644 --- a/src/game/game_gui.cpp +++ b/src/game/game_gui.cpp @@ -199,18 +199,10 @@ struct GSConfigWindow : public Window { TextColour colour; uint idx = 0; if (config_item.description.empty()) { - if (Game::GetInstance() == nullptr && config_item.random_deviation != 0) { - str = STR_AI_SETTINGS_JUST_DEVIATION; - } else { - str = STR_JUST_STRING1; - } + str = STR_JUST_STRING1; colour = TC_ORANGE; } else { - if (Game::GetInstance() == nullptr && config_item.random_deviation != 0) { - str = STR_AI_SETTINGS_SETTING_DEVIATION; - } else { - str = STR_AI_SETTINGS_SETTING; - } + str = STR_AI_SETTINGS_SETTING; colour = TC_LIGHT_BLUE; SetDParamStr(idx++, config_item.description); } @@ -225,35 +217,13 @@ struct GSConfigWindow : public Window { DrawArrowButtons(br.left, y + button_y_offset, COLOUR_YELLOW, (this->clicked_button == i) ? 1 + (this->clicked_increase != rtl) : 0, editable && current_value > config_item.min_value, editable && current_value < config_item.max_value); } - if (Game::GetInstance() != nullptr || config_item.random_deviation == 0) { - auto config_iterator = config_item.labels.find(current_value); - if (config_iterator != config_item.labels.end()) { - SetDParam(idx++, STR_JUST_RAW_STRING); - SetDParamStr(idx++, config_iterator->second); - } else { - SetDParam(idx++, STR_JUST_INT); - SetDParam(idx++, current_value); - } + auto config_iterator = config_item.labels.find(current_value); + if (config_iterator != config_item.labels.end()) { + SetDParam(idx++, STR_JUST_RAW_STRING); + SetDParamStr(idx++, config_iterator->second); } else { - int min_deviated = std::max(config_item.min_value, current_value - config_item.random_deviation); - auto config_iterator = config_item.labels.find(min_deviated); - if (config_iterator != config_item.labels.end()) { - SetDParam(idx++, STR_JUST_RAW_STRING); - SetDParamStr(idx++, config_iterator->second); - } else { - SetDParam(idx++, STR_JUST_INT); - SetDParam(idx++, min_deviated); - } - - int max_deviated = std::min(config_item.max_value, current_value + config_item.random_deviation); - config_iterator = config_item.labels.find(max_deviated); - if (config_iterator != config_item.labels.end()) { - SetDParam(idx++, STR_JUST_RAW_STRING); - SetDParamStr(idx++, config_iterator->second); - } else { - SetDParam(idx++, STR_JUST_INT); - SetDParam(idx++, max_deviated); - } + SetDParam(idx++, STR_JUST_INT); + SetDParam(idx++, current_value); } } diff --git a/src/lang/english.txt b/src/lang/english.txt index a640d34a9a..7df8bf847e 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -4843,8 +4843,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script STR_AI_SETTINGS_CLOSE :{BLACK}Close STR_AI_SETTINGS_RESET :{BLACK}Reset STR_AI_SETTINGS_SETTING :{RAW_STRING}: {ORANGE}{STRING1} -STR_AI_SETTINGS_SETTING_DEVIATION :{RAW_STRING}: {ORANGE}[{STRING1}, {STRING1}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING1}, {STRING1}] # Textfile window diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 7fca426964..a16269aa6f 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -547,11 +547,11 @@ static void StartScripts() /* Start the AIs. */ for (const Company *c : Company::Iterate()) { - if (Company::IsValidAiID(c->index)) AI::StartNew(c->index, false); + if (Company::IsValidAiID(c->index)) AI::StartNew(c->index); } /* Start the GameScript. */ - Game::StartNew(false); + Game::StartNew(); ShowScriptDebugWindowIfScriptError(); } diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index ee5084569a..e6b524a857 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -29,6 +29,7 @@ * API removals: * \li AIError::ERR_PRECONDITION_TOO_MANY_PARAMETERS, that error is never returned anymore. * \li AIInfo::CONFIG_RANDOM, no longer used. + * \li AIInfo::AddSettings random_deviation is no longer used. * * Other changes: * \li AIGroupList accepts an optional filter function diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index d992a66a15..8ebf05310c 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -95,6 +95,7 @@ * API removals: * \li GSError::ERR_PRECONDITION_TOO_MANY_PARAMETERS, that error is never returned anymore. * \li GSInfo::CONFIG_RANDOM, no longer used. + * \li GSInfo::AddSettings random_deviation is no longer used. * * Other changes: * \li GSGroupList accepts an optional filter function diff --git a/src/script/api/script_info_docs.hpp b/src/script/api/script_info_docs.hpp index 8278f39f19..b0b32ffc95 100644 --- a/src/script/api/script_info_docs.hpp +++ b/src/script/api/script_info_docs.hpp @@ -224,12 +224,6 @@ public: * clamped in the range [MIN(int32_t), MAX(int32_t)] (inclusive). * - default_value The default value. Required. The value will be * clamped in the range [MIN(int32_t), MAX(int32_t)] (inclusive). - * - random_deviation If this property has a nonzero value, then the - * actual value of the setting in game will be randomised in the range - * [user_configured_value - random_deviation, user_configured_value + random_deviation] (inclusive). - * random_deviation sign is ignored and the value is clamped in the range [0, MAX(int32_t)] (inclusive). - * The randomisation will happen just before the Script start. - * Not allowed if the CONFIG_BOOLEAN flag is set, otherwise optional. * - step_size The increase/decrease of the value every time the user * clicks one of the up/down arrow buttons. Optional, default is 1. * - flags Bitmask of some flags, see ScriptConfigFlags. Required. diff --git a/src/script/script_config.cpp b/src/script/script_config.cpp index e0fad59664..9900675786 100644 --- a/src/script/script_config.cpp +++ b/src/script/script_config.cpp @@ -123,15 +123,6 @@ void ScriptConfig::ResetEditableSettings(bool yet_to_start) } } -void ScriptConfig::AddRandomDeviation(CompanyID owner) -{ - for (const auto &item : *this->GetConfigList()) { - if (item.random_deviation != 0) { - this->SetSetting(item.name, ScriptObject::GetRandomizer(owner).Next(item.random_deviation * 2 + 1) - item.random_deviation + this->GetSetting(item.name)); - } - } -} - bool ScriptConfig::HasScript() const { return this->info != nullptr; diff --git a/src/script/script_config.hpp b/src/script/script_config.hpp index 9ccc276051..ef74f08c38 100644 --- a/src/script/script_config.hpp +++ b/src/script/script_config.hpp @@ -35,7 +35,6 @@ struct ScriptConfigItem { int min_value = 0; ///< The minimal value this configuration setting can have. int max_value = 1; ///< The maximal value this configuration setting can have. int default_value = 0; ///< The default value of this configuration setting. - int random_deviation = 0; ///< The maximum random deviation from the default value. int step_size = 1; ///< The step size in the gui. ScriptConfigFlags flags = SCRIPTCONFIG_NONE; ///< Flags for the configuration setting. LabelMapping labels; ///< Text labels for the integer values. @@ -132,11 +131,6 @@ public: */ void ResetEditableSettings(bool yet_to_start); - /** - * Randomize all settings the Script requested to be randomized. - */ - void AddRandomDeviation(CompanyID owner); - /** * Is this config attached to an Script? In other words, is there a Script * that is assigned to this slot. diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp index 85c593466e..33f17715e0 100644 --- a/src/script/script_gui.cpp +++ b/src/script/script_gui.cpp @@ -377,18 +377,10 @@ struct ScriptSettingsWindow : public Window { TextColour colour; uint idx = 0; if (config_item.description.empty()) { - if (this->slot != OWNER_DEITY && !Company::IsValidID(this->slot) && config_item.random_deviation != 0) { - str = STR_AI_SETTINGS_JUST_DEVIATION; - } else { - str = STR_JUST_STRING1; - } + str = STR_JUST_STRING1; colour = TC_ORANGE; } else { - if (this->slot != OWNER_DEITY && !Company::IsValidID(this->slot) && config_item.random_deviation != 0) { - str = STR_AI_SETTINGS_SETTING_DEVIATION; - } else { - str = STR_AI_SETTINGS_SETTING; - } + str = STR_AI_SETTINGS_SETTING; colour = TC_LIGHT_BLUE; SetDParamStr(idx++, config_item.description); } @@ -403,35 +395,13 @@ struct ScriptSettingsWindow : public Window { DrawArrowButtons(br.left, y + button_y_offset, COLOUR_YELLOW, (this->clicked_button == i) ? 1 + (this->clicked_increase != rtl) : 0, editable && current_value > config_item.min_value, editable && current_value < config_item.max_value); } - if (this->slot == OWNER_DEITY || Company::IsValidID(this->slot) || config_item.random_deviation == 0) { - auto config_iterator = config_item.labels.find(current_value); - if (config_iterator != config_item.labels.end()) { - SetDParam(idx++, STR_JUST_RAW_STRING); - SetDParamStr(idx++, config_iterator->second); - } else { - SetDParam(idx++, STR_JUST_INT); - SetDParam(idx++, current_value); - } + auto config_iterator = config_item.labels.find(current_value); + if (config_iterator != config_item.labels.end()) { + SetDParam(idx++, STR_JUST_RAW_STRING); + SetDParamStr(idx++, config_iterator->second); } else { - int min_deviated = std::max(config_item.min_value, current_value - config_item.random_deviation); - auto config_iterator = config_item.labels.find(min_deviated); - if (config_iterator != config_item.labels.end()) { - SetDParam(idx++, STR_JUST_RAW_STRING); - SetDParamStr(idx++, config_iterator->second); - } else { - SetDParam(idx++, STR_JUST_INT); - SetDParam(idx++, min_deviated); - } - - int max_deviated = std::min(config_item.max_value, current_value + config_item.random_deviation); - config_iterator = config_item.labels.find(max_deviated); - if (config_iterator != config_item.labels.end()) { - SetDParam(idx++, STR_JUST_RAW_STRING); - SetDParamStr(idx++, config_iterator->second); - } else { - SetDParam(idx++, STR_JUST_INT); - SetDParam(idx++, max_deviated); - } + SetDParam(idx++, STR_JUST_INT); + SetDParam(idx++, current_value); } } diff --git a/src/script/script_info.cpp b/src/script/script_info.cpp index ee2c31ff5a..3c732f6ecc 100644 --- a/src/script/script_info.cpp +++ b/src/script/script_info.cpp @@ -87,9 +87,7 @@ SQInteger ScriptInfo::AddSetting(HSQUIRRELVM vm) ScriptConfigItem config; uint items = 0; - int easy_value = INT32_MIN; int medium_value = INT32_MIN; - int hard_value = INT32_MIN; /* Read the table, and find all properties we care about */ sq_pushnull(vm); @@ -124,9 +122,7 @@ SQInteger ScriptInfo::AddSetting(HSQUIRRELVM vm) config.max_value = ClampTo(res); items |= 0x008; } else if (key == "easy_value") { - SQInteger res; - if (SQ_FAILED(sq_getinteger(vm, -1, &res))) return SQ_ERROR; - easy_value = ClampTo(res); + // No longer parsed. items |= 0x010; } else if (key == "medium_value") { SQInteger res; @@ -134,9 +130,7 @@ SQInteger ScriptInfo::AddSetting(HSQUIRRELVM vm) medium_value = ClampTo(res); items |= 0x020; } else if (key == "hard_value") { - SQInteger res; - if (SQ_FAILED(sq_getinteger(vm, -1, &res))) return SQ_ERROR; - hard_value = ClampTo(res); + // No longer parsed. items |= 0x040; } else if (key == "custom_value") { // No longer parsed. @@ -146,10 +140,7 @@ SQInteger ScriptInfo::AddSetting(HSQUIRRELVM vm) config.default_value = ClampTo(res); items |= 0x080; } else if (key == "random_deviation") { - SQInteger res; - if (SQ_FAILED(sq_getinteger(vm, -1, &res))) return SQ_ERROR; - config.random_deviation = ClampTo(abs(res)); - items |= 0x200; + // No longer parsed. } else if (key == "step_size") { SQInteger res; if (SQ_FAILED(sq_getinteger(vm, -1, &res))) return SQ_ERROR; @@ -179,27 +170,12 @@ SQInteger ScriptInfo::AddSetting(HSQUIRRELVM vm) } config.default_value = medium_value; - /* If not boolean and no random deviation set, calculate it based on easy/hard difference. */ - if ((config.flags & SCRIPTCONFIG_BOOLEAN) == 0 && (items & 0x200) == 0) { - config.random_deviation = abs(hard_value - easy_value) / 2; - items |= 0x200; - } items |= 0x080; } else { /* For compatibility, also act like the default sets the easy/medium/hard. */ items |= 0x010 | 0x020 | 0x040; } - /* Don't allow both random_deviation and SCRIPTCONFIG_BOOLEAN to - * be set for the same config item. */ - if ((items & 0x200) != 0 && (config.flags & SCRIPTCONFIG_BOOLEAN) != 0) { - this->engine->ThrowError("setting both random_deviation and CONFIG_BOOLEAN is not allowed"); - return SQ_ERROR; - } - - /* Reset the bit for random_deviation as it's optional. */ - items &= ~0x200; - /* Make sure all properties are defined */ uint mask = (config.flags & SCRIPTCONFIG_BOOLEAN) ? 0x1F3 : 0x1FF; if (items != mask) { From bc3bd642b9bf04db65a534f51a1df5d611ccf00b Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 5 Mar 2024 18:30:25 +0000 Subject: [PATCH 051/695] Fix: Relocate main toolbar and statusbar before other windows. (#12218) When repositioning all windows, the main toolbar and statusbar need to already be in position to ensure that window captions are visible. --- src/window.cpp | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index 314bc9a72c..50455202c1 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -3436,6 +3436,18 @@ void RelocateAllWindows(int neww, int newh) { CloseWindowByClass(WC_DROPDOWN_MENU); + /* Reposition toolbar then status bar before other all windows. */ + if (Window *wt = FindWindowById(WC_MAIN_TOOLBAR, 0); wt != nullptr) { + ResizeWindow(wt, std::min(neww, _toolbar_width) - wt->width, 0, false); + wt->left = PositionMainToolbar(wt); + } + + if (Window *ws = FindWindowById(WC_STATUS_BAR, 0); ws != nullptr) { + ResizeWindow(ws, std::min(neww, _toolbar_width) - ws->width, 0, false); + ws->top = newh - ws->height; + ws->left = PositionStatusbar(ws); + } + for (Window *w : Window::Iterate()) { int left, top; /* XXX - this probably needs something more sane. For example specifying @@ -3447,24 +3459,14 @@ void RelocateAllWindows(int neww, int newh) continue; case WC_MAIN_TOOLBAR: - ResizeWindow(w, std::min(neww, _toolbar_width) - w->width, 0, false); - - top = w->top; - left = PositionMainToolbar(w); // changes toolbar orientation - break; + case WC_STATUS_BAR: + continue; case WC_NEWS_WINDOW: top = newh - w->height; left = PositionNewsMessage(w); break; - case WC_STATUS_BAR: - ResizeWindow(w, std::min(neww, _toolbar_width) - w->width, 0, false); - - top = newh - w->height; - left = PositionStatusbar(w); - break; - case WC_SEND_NETWORK_MSG: ResizeWindow(w, std::min(neww, _toolbar_width) - w->width, 0, false); From 00b442d6f9f3ad27ebdaef2e7ccba208a1664f9c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 5 Mar 2024 18:31:04 +0000 Subject: [PATCH 052/695] Fix: Maximum permitted sound volume from NewGRF is 128. (#12222) --- src/newgrf.cpp | 6 +++--- src/sound_type.h | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 97d9878335..cebf81ce34 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -3153,7 +3153,7 @@ static ChangeInfoResult SoundEffectChangeInfo(uint sid, int numinfo, int prop, B switch (prop) { case 0x08: // Relative volume - sound->volume = buf->ReadByte(); + sound->volume = Clamp(buf->ReadByte(), 0, SOUND_EFFECT_MAX_VOLUME); break; case 0x09: // Priority @@ -7857,7 +7857,7 @@ static void ImportGRFSound(SoundEntry *sound) *sound = *GetSound(file->sound_offset + sound_id); /* Reset volume and priority, which TTDPatch doesn't copy */ - sound->volume = 128; + sound->volume = SOUND_EFFECT_MAX_VOLUME; sound->priority = 0; } @@ -7869,7 +7869,7 @@ static void ImportGRFSound(SoundEntry *sound) static void LoadGRFSound(size_t offs, SoundEntry *sound) { /* Set default volume and priority */ - sound->volume = 0x80; + sound->volume = SOUND_EFFECT_MAX_VOLUME; sound->priority = 0; if (offs != SIZE_MAX) { diff --git a/src/sound_type.h b/src/sound_type.h index adc1438e6b..7113da9947 100644 --- a/src/sound_type.h +++ b/src/sound_type.h @@ -119,4 +119,6 @@ typedef uint16_t SoundID; static const SoundID INVALID_SOUND = 0xFFFF; +static const uint8_t SOUND_EFFECT_MAX_VOLUME = 128; + #endif /* SOUND_TYPE_H */ From 2d48829999db0d647f9c0f47de7867b535d2d514 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 5 Mar 2024 18:33:58 +0000 Subject: [PATCH 053/695] Codechange: Scan station catchment tiles when removing station from nearby towns/industries. (#12129) Avoid iterating all towns and industries when updating station catchment, and scan a limited portion of the map instead. This provides a modest performance benefit when many towns/industries exist. --- src/station.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/station.cpp b/src/station.cpp index be1ec24d80..f1afaec134 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -424,12 +424,24 @@ void Station::RemoveIndustryToDeliver(Industry *ind) /** - * Remove this station from the nearby stations lists of all towns and industries. + * Remove this station from the nearby stations lists of nearby towns and industries. */ void Station::RemoveFromAllNearbyLists() { - for (Town *t : Town::Iterate()) { t->stations_near.erase(this); } - for (Industry *i : Industry::Iterate()) { i->stations_near.erase(this); } + std::set towns; + std::set industries; + + for (const auto &tile : this->catchment_tiles) { + TileType type = GetTileType(tile); + if (type == MP_HOUSE) { + towns.insert(GetTownIndex(tile)); + } else if (type == MP_INDUSTRY) { + industries.insert(GetIndustryIndex(tile)); + } + } + + for (const TownID &townid : towns) { Town::Get(townid)->stations_near.erase(this); } + for (const IndustryID &industryid : industries) { Industry::Get(industryid)->stations_near.erase(this); } } /** From 1a2b54498b86921b9aaa48b93f0e600f319a21a7 Mon Sep 17 00:00:00 2001 From: Kuhnovic <68320206+Kuhnovic@users.noreply.github.com> Date: Tue, 5 Mar 2024 21:32:29 +0100 Subject: [PATCH 054/695] Change: Show tile index as decimal number in land info window (#12104) --- src/lang/english.txt | 3 ++- src/misc_gui.cpp | 11 ++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 7df8bf847e..d9a7f812bb 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -3078,7 +3078,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Tramway STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Railway owner: {LTBLUE}{STRING1} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Local authority: {LTBLUE}{STRING1} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :None -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordinates: {LTBLUE}{NUM} x {NUM} x {NUM} ({RAW_STRING}) +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordinates: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Tile index: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Built/renovated: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Station class: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Station type: {LTBLUE}{STRING} diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index ef33c153df..12061e6736 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -118,7 +118,7 @@ public: #else # define LANDINFOD_LEVEL 1 #endif - Debug(misc, LANDINFOD_LEVEL, "TILE: 0x{:x} ({},{})", (TileIndex)tile, TileX(tile), TileY(tile)); + Debug(misc, LANDINFOD_LEVEL, "TILE: {0} (0x{0:x}) ({1},{2})", (TileIndex)tile, TileX(tile), TileY(tile)); Debug(misc, LANDINFOD_LEVEL, "type = 0x{:x}", tile.type()); Debug(misc, LANDINFOD_LEVEL, "height = 0x{:x}", tile.height()); Debug(misc, LANDINFOD_LEVEL, "m1 = 0x{:x}", tile.m1()); @@ -209,15 +209,16 @@ public: this->landinfo_data.push_back(GetString(str)); /* Location */ - std::stringstream tile_ss; - tile_ss << "0x" << std::setfill('0') << std::setw(4) << std::hex << std::uppercase << tile.base(); // 0x%.4X - SetDParam(0, TileX(tile)); SetDParam(1, TileY(tile)); SetDParam(2, GetTileZ(tile)); - SetDParamStr(3, tile_ss.str()); this->landinfo_data.push_back(GetString(STR_LAND_AREA_INFORMATION_LANDINFO_COORDS)); + /* Tile index */ + SetDParam(0, tile); + SetDParam(1, tile); + this->landinfo_data.push_back(GetString(STR_LAND_AREA_INFORMATION_LANDINFO_INDEX)); + /* Local authority */ SetDParam(0, STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE); if (t != nullptr) { From 634b67bf13a7046bc389bc94d1cbdd1b9c54d6b1 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 6 Mar 2024 04:40:32 +0000 Subject: [PATCH 055/695] Update: Translations from eints estonian: 66 changes by siimsoni greek: 41 changes by gh658804 ukrainian: 6 changes by StepanIvasyn slovak: 30 changes by palsoft333 portuguese (brazilian): 41 changes by pasantoro --- src/lang/afrikaans.txt | 1 - src/lang/arabic_egypt.txt | 1 - src/lang/basque.txt | 1 - src/lang/belarusian.txt | 3 - src/lang/brazilian_portuguese.txt | 85 +++++++++---------- src/lang/bulgarian.txt | 3 - src/lang/catalan.txt | 3 - src/lang/croatian.txt | 1 - src/lang/czech.txt | 3 - src/lang/danish.txt | 3 - src/lang/dutch.txt | 3 - src/lang/english_AU.txt | 3 - src/lang/english_US.txt | 3 - src/lang/esperanto.txt | 2 - src/lang/estonian.txt | 135 +++++++++++++++--------------- src/lang/faroese.txt | 1 - src/lang/finnish.txt | 3 - src/lang/french.txt | 3 - src/lang/gaelic.txt | 1 - src/lang/galician.txt | 3 - src/lang/german.txt | 3 - src/lang/greek.txt | 46 ++++++++-- src/lang/hebrew.txt | 1 - src/lang/hungarian.txt | 3 - src/lang/icelandic.txt | 1 - src/lang/indonesian.txt | 3 - src/lang/irish.txt | 1 - src/lang/italian.txt | 3 - src/lang/japanese.txt | 1 - src/lang/korean.txt | 3 - src/lang/latin.txt | 1 - src/lang/latvian.txt | 3 - src/lang/lithuanian.txt | 1 - src/lang/luxembourgish.txt | 3 - src/lang/malay.txt | 1 - src/lang/norwegian_bokmal.txt | 1 - src/lang/norwegian_nynorsk.txt | 1 - src/lang/persian.txt | 1 - src/lang/polish.txt | 3 - src/lang/portuguese.txt | 3 - src/lang/romanian.txt | 3 - src/lang/russian.txt | 3 - src/lang/serbian.txt | 3 - src/lang/simplified_chinese.txt | 3 - src/lang/slovak.txt | 32 ++++++- src/lang/slovenian.txt | 1 - src/lang/spanish.txt | 3 - src/lang/spanish_MX.txt | 1 - src/lang/swedish.txt | 3 - src/lang/tamil.txt | 3 - src/lang/thai.txt | 1 - src/lang/traditional_chinese.txt | 1 - src/lang/turkish.txt | 3 - src/lang/ukrainian.txt | 9 +- src/lang/vietnamese.txt | 3 - src/lang/welsh.txt | 1 - 56 files changed, 184 insertions(+), 233 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 2490b8d382..fa696f8459 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -2651,7 +2651,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Tremweg STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Spoorweg eienaar: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Plaaslike raad: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Geen -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koördinate: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Gebou: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stasie klas: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stasie tiepe: {LTBLUE}{STRING} diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index ca2952976a..39c1d25117 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -2526,7 +2526,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}مالك STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}مالك سكة الحديد: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}السلطة المحلية: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :فارغ -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}الأحداثيات: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}بني: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK} فئة المحطة: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}نوع المحطة: {LTBLUE}{STRING} diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 4a51da72f6..c667adb531 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -2525,7 +2525,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Tranbia STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Trenbidearen jabea: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Udaletxea {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ezer ez -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordenadak: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Eraikia: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Geltoki mota: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Geltoki mota: {LTBLUE}{STRING} diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 4c4c67bb50..76b763716e 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -3412,7 +3412,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Улад STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Уладальнiк чыгункi: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Мясцовая адміністрацыя: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Няма -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Каардынаты: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Пабудавана/абноўлена: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Кляса станцыі: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Тып станцыi: {LTBLUE}{STRING} @@ -5199,8 +5198,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :гульнёв STR_AI_SETTINGS_CLOSE :{BLACK}Закрыць STR_AI_SETTINGS_RESET :{BLACK}Ськід STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 4c5be3237c..cde87b3dfa 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -290,7 +290,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Clique e STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Alternar entre janela grande/pequena STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de rolagem - desloca a lista para cima/baixo STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de rolagem - desloca a lista para a esquerda/direita -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolir construções etc. em um quadrado do terreno. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolir construções, etc. em um quadrado do terreno. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado # Show engines button ###length VEHICLE_TYPES @@ -331,7 +331,7 @@ STR_SORT_BY_PRODUCTION :Produção STR_SORT_BY_TYPE :Tipo STR_SORT_BY_TRANSPORTED :Transportado STR_SORT_BY_NUMBER :Número -STR_SORT_BY_PROFIT_LAST_YEAR :Lucro do último ano +STR_SORT_BY_PROFIT_LAST_YEAR :Lucro no último ano STR_SORT_BY_PROFIT_LAST_PERIOD :Lucro no último período STR_SORT_BY_PROFIT_THIS_YEAR :Lucro neste ano STR_SORT_BY_PROFIT_THIS_PERIOD :Lucro neste período @@ -349,7 +349,7 @@ STR_SORT_BY_WAITING_TOTAL :Carga total agu STR_SORT_BY_WAITING_AVAILABLE :Carga disponível aguardando STR_SORT_BY_RATING_MAX :Maior índice de carga STR_SORT_BY_RATING_MIN :Menor índice de carga -STR_SORT_BY_ENGINE_ID :ID da Locomotiva (ordem clássica) +STR_SORT_BY_ENGINE_ID :Locomotiva ID(ordem clássica) STR_SORT_BY_COST :Custo STR_SORT_BY_POWER :Potência STR_SORT_BY_TRACTIVE_EFFORT :Força de tração @@ -384,7 +384,7 @@ STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausar j STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Avanço rápido do jogo STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opções e configurações STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Salvar, abrir ou abandonar jogo, sair do programa -STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Abrir mapa, nova visualização, fluxo de cargas ou lista de sinais +STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Abrir mapa, visualização extra, fluxo de cargas ou lista de placas STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Abrir lista de localidades ou encontrar localidade STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Abrir lista de subsídios STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Abrir lista de estações da empresa @@ -419,12 +419,12 @@ STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Editor STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Mover a data inicial 1 ano para trás STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Mover a data inicial 1 ano para frente STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Clique para digitar o ano de início -STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Abrir mapa, visualização extra, lista de sinais, lista de localidades ou de indústrias +STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Abrir mapa, visualização extra, lista de placas, de localidades ou de indústrias STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Abrir menu de paisagismo ou gerar um novo mundo STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Construir ou gerar localidades STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Construir ou gerar indústrias STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Construir infraestrutura rodoviária -STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construir infraestrutura de bondes +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construir infraestrutura para bondes STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árvores. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Colocar placa STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objeto. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado @@ -446,7 +446,7 @@ STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Configurações STR_SETTINGS_MENU_AI_SETTINGS :Configurações de IA STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Configurações de Script de Jogo STR_SETTINGS_MENU_NEWGRF_SETTINGS :Configurações de NewGRF -STR_SETTINGS_MENU_SANDBOX_OPTIONS :Opções de "jogar sujo" +STR_SETTINGS_MENU_SANDBOX_OPTIONS :Opções das trapaças STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Opções de transparência STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Mostrar nomes de localidades STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Mostrar nomes de estações @@ -466,7 +466,7 @@ STR_FILE_MENU_EXIT :Sair # Map menu STR_MAP_MENU_MAP_OF_WORLD :Mapa do mundo -STR_MAP_MENU_EXTRA_VIEWPORT :Janela de visualização extra +STR_MAP_MENU_EXTRA_VIEWPORT :Visualização extra STR_MAP_MENU_LINGRAPH_LEGEND :Legenda do fluxo de carga STR_MAP_MENU_SIGN_LIST :Lista de placas @@ -502,7 +502,7 @@ STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Construção de STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construção de MagLev # Road construction menu -STR_ROAD_MENU_ROAD_CONSTRUCTION :Construção de estradas +STR_ROAD_MENU_ROAD_CONSTRUCTION :Construção de estrada STR_ROAD_MENU_TRAM_CONSTRUCTION :Construção de linhas de bonde # Waterways construction menu @@ -668,9 +668,9 @@ STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Total: STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}Número de veículos que geraram lucro no último ano. Isso inclui veículos rodoviários, trens, embarcações e aeronaves STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Número de veículos que geraram lucro no último período. Isso inclui veículos rodoviários, trens, embarcações e aeronaves -STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Número de estações recentemente atendidas. Estações de trem, paradas de ônibus, aeroportos, etc. são contados individualmente, mesmo que pertençam à mesma estação -STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}Lucro do veículo com a menor receita (somente veículos com mais de dois anos são considerados) -STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}Lucro do veículo com a menor receita (somente veículos com mais de dois períodos são considerados) +STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Número de estações atendidas recentemente. Estações de trem, paradas de ônibus, aeroportos, etc. são contados separadamente, mesmo que pertençam à mesma estação +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}Lucro do veículo com o menor rendimento (apenas veículos com mais de dois anos são considerados) +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}Lucro do veículo com o menor rendimento (apenas veículos com mais de dois períodos são considerados) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Quantia de dinheiro obtida no trimestre com o menor lucro dos últimos 12 trimestres STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Quantia de dinheiro obtida no trimestre com o maior lucro dos últimos 12 trimestres STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Unidades de carga entregues nos últimos quatro trimestres @@ -698,8 +698,8 @@ STR_MUSIC_TRACK :{TINY_FONT}{BLA STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Título STR_MUSIC_SHUFFLE :{TINY_FONT}{BLACK}Aleatório STR_MUSIC_PROGRAM :{TINY_FONT}{BLACK}Programa -STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Passar para a faixa anterior na seleção -STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Passar para a próxima faixa na seleção +STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Passar para a faixa anterior da seleção +STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Passar para a próxima faixa da seleção STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Parar a reprodução de música STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Iniciar a reprodução de música STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Arraste os controles deslizantes para definir o volume de músicas e efeitos sonoros @@ -1665,7 +1665,7 @@ STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :Velocidade da r STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Controla a sensibilidade da roda do mouse na rolagem STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING :Função da roda do mouse: {STRING} -STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING_HELPTEXT :Ativa o rolamento com rodas de mouse bidimensionais +STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING_HELPTEXT :Ativar o rolamento com rodas de mouse bidimensionais ###length 3 STR_CONFIG_SETTING_SCROLLWHEEL_ZOOM :Ampliar mapa STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Mover o mapa @@ -1737,7 +1737,7 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Mostrar os hor STR_CONFIG_SETTING_QUICKGOTO :Criação rápida de ordens de veículos: {STRING} STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Pré-selecionar o cursor 'Ir Para' ao abrir a janela de ordens -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Tipo padrão de ferrovia (ao criar ou abrir jogo): {STRING} +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Tipo de trilho padrão (ao criar novo ou abrir jogo): {STRING} STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Tipo de trilhos a ser selecionado ao carregar/iniciar um jogo. 'Primeiro disponível' seleciona o tipo de trilho mais antigo. 'Último disponível' seleciona o tipo mais novo de trilho e 'Mais utilizado' seleciona o tipo que é mais usado atualmente ###length 3 STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Primeiro disponível @@ -1803,13 +1803,13 @@ STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT :Número máximo STR_CONFIG_SETTING_AI_BUILDS_TRAINS :Desativar trens para o computador: {STRING} STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT :Quando ativada, esta configuração não permite a construção de trens por um competidor controlado por IA -STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :Desativar veículos rodoviários para o computador: {STRING} +STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :Desativar veículos para o computador: {STRING} STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :Quando ativada, esta configuração não permite a construção de veículos rodoviários por um competidor controlado por IA STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :Desativar aeronaves para o computador: {STRING} STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Quando ativada, esta configuração não permite a construção de aeronaves por um competidor controlado por IA -STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desativar embarcação para o computador: {STRING} +STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desativar embarcações para o computador: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Quando ativada, esta configuração não permite a construção de embarcações por um competidor controlado por IA STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permitir IA's em multijogador: {STRING} @@ -2031,7 +2031,7 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador d STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamanho médio das cidades em relação às localidades normais no início do jogo STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Atualizar a distribuição a cada {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo entre recálculos subsequentes da rede de conexões. Cada recálculo atualiza os planos para um componente da rede. Isso significa que um valor X para esta configuração não significa que toda a rede será atualizada a cada X segundos. Somente algum componente será atualizado. Quanto menor o tempo definido, mais tempo de CPU será necessário para calculá-lo. Quanto maior o valor definido, mais tempo será necessário até que a distribuição de carga inicie nas novas rotas. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo entre recálculos subsequentes da rede de conexões. Cada recálculo atualiza os planos para um componente da rede. Isso significa que um valor X para esta configuração não significa que toda a rede será atualizada a cada X segundos. Somente algum componente será atualizado. Quanto menor o tempo definido, mais tempo de CPU será necessário para calculá-lo. Quanto maior o valor definido, mais tempo será necessário até que a distribuição de carga inicie nas novas rotas. STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Usar {STRING} para recalcular a distribuição STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo gasto para cada recálculo de um componente da rede de conexões. Quando um recálculo é iniciado, uma tarefa é gerada e pode ser executada por esse número de segundos. Quanto menor for esse valor, maior a chance de que a tarefa não seja concluída quando deveria. Então o jogo para até que ela seja completada, causando um atraso. Quanto maior for esse valor, mais tempo será necessário para a distribuição ser atualizada quando as rotas mudam. @@ -2169,7 +2169,7 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Falha ao # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Erro nas configurações de vídeo... STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... nenhuma GPU compatível encontrada. Aceleração de hardware desativada -STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... O driver gráfico (GPU) interrompeu o jogo. Aceleração por hardware desativada +STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... O driver gráfico (GPU) travou o jogo. Aceleração por hardware desativada # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -2241,7 +2241,7 @@ STR_HELP_WINDOW_BUGTRACKER :{BLACK}Relatar STR_HELP_WINDOW_COMMUNITY :{BLACK}Comunidade # Cheat window -STR_CHEATS :{WHITE}Opções de "Jogar Sujo" +STR_CHEATS :{WHITE}Trapaças STR_CHEAT_MONEY :{LTBLUE}Aumentar dinheiro em {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Jogando como empresa: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Escavadeira mágica (remove indústrias, objetos estáticos): {ORANGE}{STRING} @@ -3079,7 +3079,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propriet STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Proprietário da ferrovia: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autoridade local: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Nenhum -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordenadas: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Construído/renovado: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Classe da estação: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de estação: {LTBLUE}{STRING} @@ -3133,7 +3132,7 @@ STR_LAI_ROAD_DESCRIPTION_ROAD :Estrada STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Estrada iluminada STR_LAI_ROAD_DESCRIPTION_TREE_LINED_ROAD :Estrada arborizada STR_LAI_ROAD_DESCRIPTION_ROAD_VEHICLE_DEPOT :Depósito rodoviário -STR_LAI_ROAD_DESCRIPTION_ROAD_RAIL_LEVEL_CROSSING :Passagem de nível em estrada/linha +STR_LAI_ROAD_DESCRIPTION_ROAD_RAIL_LEVEL_CROSSING :Passagem de nível em estrada/trilho STR_LAI_ROAD_DESCRIPTION_TRAMWAY :Linha de bonde # Houses come directly from their building names @@ -3662,7 +3661,7 @@ STR_LOCAL_AUTHORITY_ACTION_BRIBE :Subornar a auto STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma campanha publicitária pequena local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na avaliação da estação em um raio pequeno ao redor do centro da localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma campanha publicitária média local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na avaliação da estação em um raio médio ao redor do centro da cidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma campanha publicitária grande local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na avaliação da estação em um raio grande ao redor do centro da localidade{}{POP_COLOUR}Custo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Financiar a reconstrução da rede urbana de estradas.{}Provoca uma perturbação considerável no tráfego por até 6 meses.{}{POP_COLOUR}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Financiar a reconstrução da rede urbana de estradas.{}Provoca uma perturbação considerável no tráfego por até 6 meses.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}Financiar a reconstrução da rede urbana de estradas.{}Provoca uma perturbação considerável no tráfego por até 6 minutos.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Construir uma estátua em homenagem à sua empresa.{}Produz um aumento permanente na classificação da estação nesta cidade..{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Financiar a construção de novos edifícios na localidade.{}Produz um aumento temporário no crescimento desta localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} @@ -3879,7 +3878,7 @@ STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inaugura STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Esquema de Cores: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Veículos: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} tre{P m ns} -STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} veículo{P "" s} rodov. +STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} veículo{P "" s} STR_COMPANY_VIEW_AIRCRAFT :{WHITE}{COMMA} aeronave{P "" s} STR_COMPANY_VIEW_SHIPS :{WHITE}{COMMA} embarcaç{P ão ões} STR_COMPANY_VIEW_VEHICLES_NONE :{WHITE}Nenhum @@ -3979,7 +3978,7 @@ STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} ###length VEHICLE_TYPES STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Trens - Clique em um trem para informações -STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Veículos rodoviários - Clique em um veículo para informações +STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Veículos - Clique em um veículo para informações STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Embarcações - Clique em uma embarcação para informações STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Aeronaves - Clique em uma aeronave para informações @@ -4271,7 +4270,7 @@ STR_ENGINE_PREVIEW_COST_MAX_SPEED :Custo: {CURRENC STR_ENGINE_PREVIEW_SPEED_POWER :Velocidade: {VELOCITY} Potência: {POWER} STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Velocidade: {VELOCITY} Potência: {POWER} Força de Tração máx.: {FORCE} STR_ENGINE_PREVIEW_TYPE :Tipo da aeronave: {STRING} -STR_ENGINE_PREVIEW_TYPE_RANGE :Tipo de aeronave: {STRING} Autonomia: {COMMA} quadrados +STR_ENGINE_PREVIEW_TYPE_RANGE :Tipo de aeronave: {STRING} Autonomia: {COMMA} tiles STR_ENGINE_PREVIEW_RUNCOST_YEAR :Custo de Operação: {CURRENCY_LONG}/ano STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Custo de Operação: {CURRENCY_LONG}/período STR_ENGINE_PREVIEW_CAPACITY :Capacidade: {CARGO_LONG} @@ -4287,7 +4286,7 @@ STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP :{BLACK}Coluna c ###length VEHICLE_TYPES STR_REPLACE_VEHICLE_TRAIN :Trem -STR_REPLACE_VEHICLE_ROAD_VEHICLE :Veículo rodoviário +STR_REPLACE_VEHICLE_ROAD_VEHICLE :Veículo rodov. STR_REPLACE_VEHICLE_SHIP :Embarcação STR_REPLACE_VEHICLE_AIRCRAFT :Aeronave @@ -4316,12 +4315,12 @@ STR_REPLACE_HELP_ROADTYPE :{BLACK}Escolher ###next-name-looks-similar STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Mostrar qual locomotiva substituirá a que está selecionada à esquerda, se alguma foi selecionada -STR_REPLACE_RAIL_VEHICLES :Trens +STR_REPLACE_RAIL_VEHICLES :Veículos Ferroviários STR_REPLACE_ELRAIL_VEHICLES :Locomotivas Elétricas STR_REPLACE_MONORAIL_VEHICLES :Monotrilhos STR_REPLACE_MAGLEV_VEHICLES :Maglevs -STR_REPLACE_ROAD_VEHICLES :Veículos rodoviários +STR_REPLACE_ROAD_VEHICLES :Veículos Rodoviários STR_REPLACE_TRAM_VEHICLES :Bondes STR_REPLACE_REMOVE_WAGON :{BLACK}Remoção de vagões ({STRING}): {ORANGE}{STRING} @@ -4504,7 +4503,7 @@ STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Selecion ###length VEHICLE_TYPES STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Escolher tipo de carga para o trem transportar STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Escolher tipo de carga para o veículo transportar -STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}Escolher tipo de carga para a embarcação transportar +STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}Escolher tipo de carga para a embarcação transportar STR_REFIT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Escolher tipo de carga para a aeronave transportar ###length VEHICLE_TYPES @@ -4844,8 +4843,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de Jogo STR_AI_SETTINGS_CLOSE :{BLACK}Fechar STR_AI_SETTINGS_RESET :{BLACK}Restaurar STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window @@ -4977,7 +4974,7 @@ STR_ERROR_EXCAVATION_WOULD_DAMAGE :{WHITE}A escava STR_ERROR_ALREADY_AT_SEA_LEVEL :{WHITE}... já está ao nível do mar STR_ERROR_TOO_HIGH :{WHITE}... muito alto STR_ERROR_ALREADY_LEVELLED :{WHITE}... já está plano -STR_ERROR_BRIDGE_TOO_HIGH_AFTER_LOWER_LAND :{WHITE}Depois disso, a ponte sobre ela ficaria muito alta. +STR_ERROR_BRIDGE_TOO_HIGH_AFTER_LOWER_LAND :{WHITE}Depois disso, a ponte sobre ela ficaria muito alta # Company related errors STR_ERROR_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Não é possível alterar o nome da empresa... @@ -5003,7 +5000,7 @@ STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... muit STR_ERROR_TOO_MANY_TOWNS :{WHITE}... há localidades demais STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... não existe mais espaço no mapa STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Trabalhos na estrada sendo realizados -STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Não é possível remover esta localidade...{}Uma estação ou depósito refere-se à localidade ou não é possível remover um quadrado pertencente à mesma +STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Não é possível remover esta localidade...{}Uma estação ou depósito refere-se à localidade ou não é possível remover um quadrado que pertence à mesma STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... não há local adequado para uma estátua no centro desta localidade # Industry related errors @@ -5029,7 +5026,7 @@ STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... só STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}O financiamento falhou em prospectar devido ao azar; tente novamente STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Não havia locais adequados para prospectar por esta indústria STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Não havia locais adequados para indústrias de '{STRING}' -STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Alterar os parâmetros de geração do mapa para obter um mapa melhor +STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Modificar os parâmetros de geração do mapa para obter um mapa melhor # Station construction related errors STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Não é possível construir estação ferroviária aqui... @@ -5040,7 +5037,7 @@ STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Não é STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Não é possível construir doca aqui... STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Não é possível construir aeroporto aqui... -STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Unir mais de uma estação/local de carga existente +STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Adjacente a mais de uma estação/local de carga existente STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... estação muito extensa STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Há estações/locais de carga demais STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Há partes de estação ferroviária demais @@ -5073,7 +5070,7 @@ STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}É neces STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}É necessário demolir o aeroporto primeiro # Waypoint related errors -STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Unir mais de um ponto de controle existente +STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Adjacente a mais de um ponto de controle existente STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Muito perto de outro ponto de controle STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Não é possível construir ponto de controle de trem aqui... @@ -5102,7 +5099,7 @@ STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Trens po STR_ERROR_TRAIN_TOO_LONG :{WHITE}Trem muito longo STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Não é possível inverter a direção do veículo... STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}... composto por múltiplas unidades -STR_ERROR_INCOMPATIBLE_RAIL_TYPES :Tipo de ferrovia incompatível +STR_ERROR_INCOMPATIBLE_RAIL_TYPES :Tipos de trilhos incompatíveis STR_ERROR_CAN_T_MOVE_VEHICLE :{WHITE}Não é possível mover veículo... STR_ERROR_REAR_ENGINE_FOLLOW_FRONT :{WHITE}A locomotiva traseira sempre seguirá a sua equivalente dianteira @@ -5119,7 +5116,7 @@ STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... não STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... não é possível desagrupar um veículo com uma ordem condicional # Autoreplace related errors -STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} é muito longo depois da substituição +STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} fica muito longo depois da substituição STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Regras de substituição automática/renovação não foram aplicadas STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(limite de dinheiro) STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}O novo veículo não pode transportar {STRING} @@ -5180,7 +5177,7 @@ STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}É neces STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Não é possível iniciar e terminar no mesmo ponto STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Extremidades da ponte não estão no mesmo nível STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}A ponte é muito baixa para este terreno -STR_ERROR_BRIDGE_TOO_HIGH_FOR_TERRAIN :{WHITE}A ponte é muito alta para este terreno. +STR_ERROR_BRIDGE_TOO_HIGH_FOR_TERRAIN :{WHITE}A ponte é muito alta para este terreno STR_ERROR_START_AND_END_MUST_BE_IN :{WHITE}Início e final devem estar alinhados STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}... os extremos da ponte devem estar sobre a terra STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... ponte muito longa @@ -5223,7 +5220,7 @@ STR_ERROR_SHIP_IN_THE_WAY :{WHITE}Embarca STR_ERROR_AIRCRAFT_IN_THE_WAY :{WHITE}Aeronave no caminho ###length VEHICLE_TYPES -STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}Trem não está disponível +STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}Veículo não está disponível STR_ERROR_ROAD_VEHICLE_NOT_AVAILABLE :{WHITE}Veículo não está disponível STR_ERROR_SHIP_NOT_AVAILABLE :{WHITE}Embarcação não está disponível STR_ERROR_AIRCRAFT_NOT_AVAILABLE :{WHITE}Aeronave não está disponível @@ -5318,8 +5315,8 @@ STR_ERROR_NO_BUS_STATION :{WHITE}Não exi STR_ERROR_NO_TRUCK_STATION :{WHITE}Não existe uma estação de caminhões STR_ERROR_NO_DOCK :{WHITE}Não existe uma doca STR_ERROR_NO_AIRPORT :{WHITE}Não existe um aeroporto/heliporto -STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Não existem paradas com tipo de estrada compatível -STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Não existem paradas com tipo de bonde compatível +STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Não existem paradas com um tipo de estrada compatível +STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Não existem paradas com um tipo de bonde compatível STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Não existem paradas adequadas para veículos rodoviários articulados.{}Os veículos rodoviários articulados precisam parar em estações de passagem e não em estações padrão STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Este avião não pode pousar neste heliporto STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Este helicóptero não pode pousar neste aeroporto diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 1aaefc7c94..83da8ed31f 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -2723,7 +2723,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Собс STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Собственик на железопътната линия: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Община: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Нищо -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Координати: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Построен: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Клас на станцията: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Тип на станцията: {LTBLUE}{STRING} @@ -4247,8 +4246,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Игрови с STR_AI_SETTINGS_CLOSE :{BLACK}Затвори STR_AI_SETTINGS_RESET :{BLACK}Рестартиране STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 2b5d834a2b..7a7e496544 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -3079,7 +3079,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propieta STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Propietari del rail: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autoritat local: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Cap -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordenades: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Construït/renovat: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Classe d'estació: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipus d'estació: {LTBLUE}{STRING} @@ -4844,8 +4843,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de la pa STR_AI_SETTINGS_CLOSE :{BLACK}Tanca STR_AI_SETTINGS_RESET :{BLACK}Restableix STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 269aef5767..fe004d930d 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -2796,7 +2796,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Vlasnik STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Vlasnik željeznice: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Područna nadležnost: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Nijedan/Nitko/Ništa -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinate: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Izgrađeno: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Klasa postaje: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Vrsta postaje: {LTBLUE}{STRING} diff --git a/src/lang/czech.txt b/src/lang/czech.txt index efbaef3647..a87cf8b136 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -3169,7 +3169,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Majitel STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Majitel tratě: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Místní správa: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Nic -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Souřadnice: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Postaveno/obnoveno: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Třída stanice: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Druh stanice: {LTBLUE}{STRING} @@ -4937,8 +4936,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Herní skript STR_AI_SETTINGS_CLOSE :{BLACK}Zavřít STR_AI_SETTINGS_RESET :{BLACK}Obnovit nastavení STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 6fae2956cb..0e5709e83d 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -3078,7 +3078,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Ejer af STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Ejer af jernbane: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Lokal myndighed: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ingen -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinater: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Bygget/renoveret: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stationsklasse: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stationstype: {LTBLUE}{STRING} @@ -4843,8 +4842,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spil Script STR_AI_SETTINGS_CLOSE :{BLACK}Luk STR_AI_SETTINGS_RESET :{BLACK}Nulstil STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 1eb1581f8a..996ae5ad3d 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -3078,7 +3078,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Eigenaar STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Eigenaar van spoorweg: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Gemeente: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Geen -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coördinaten: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Bouwjaar/opknapjaar: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stationsklasse: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stationstype: {LTBLUE}{STRING} @@ -4843,8 +4842,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spelscript STR_AI_SETTINGS_CLOSE :{BLACK}Sluiten STR_AI_SETTINGS_RESET :{BLACK}Terugstellen STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 6c0b8f11c4..70d323610c 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -3078,7 +3078,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Tramway STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Railway owner: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Local authority: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :None -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordinates: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Built/renovated: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Station class: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Station type: {LTBLUE}{STRING} @@ -4843,8 +4842,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script STR_AI_SETTINGS_CLOSE :{BLACK}Close STR_AI_SETTINGS_RESET :{BLACK}Reset STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index ca604684c2..fc2809b3bc 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -3078,7 +3078,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Streetca STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Railroad owner: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Local authority: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :None -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Co-ordinates: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Built/renovated: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Station class: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Station type: {LTBLUE}{STRING} @@ -4843,8 +4842,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script STR_AI_SETTINGS_CLOSE :{BLACK}Close STR_AI_SETTINGS_RESET :{BLACK}Reset STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index d14554bc88..c4ffdd133c 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -2935,7 +2935,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Posedant STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Posedanto de fervojo: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Lokaj estroj: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Neniu -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Troviĝo: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Kreite: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stacioklaso: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Staciotipo: {LTBLUE}{STRING} @@ -4564,7 +4563,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Ludoskripto STR_AI_SETTINGS_CLOSE :{BLACK}Fermi STR_AI_SETTINGS_RESET :{BLACK}Reŝargo STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index bec5d35f33..27bcf2f451 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -440,31 +440,31 @@ STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Mängu p STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Kiirenda mängu STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Seadistus STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Mängu salvestamine/jätkamine, mängust lahkumine, väljumine -STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Ava kaart, vaateaken või siltide loend -STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Ava asustuste register +STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Ava kaart, uus vaateaken, kaubavood või siltide loend +STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Ava asustuste register või asuta asustus STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Ava toetuste loend -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Avab ettevõtte jaamade registri +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Ava ettevõtte jaamaregister STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Ava ettevõtte rahavoogude aruanne STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Ava ettevõtte ülevaade -STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Näita juturaamatut +STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Ava juturaamat STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Ava eesmärgiloend STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Ava ettevõtte graafikud ja kaubamaksumuste määrad STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Ava ettevõtete edetabel STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Uue tööstuse rajamise rahastamine või tööstuste registri avamine -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Ava ettevõtte rongide register. Jaotus- ja sõidukiregistrit vahetatakse Ctrl+klõpsu abil -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Ava ettevõtte mootorsõidukite register. Jaotus- ja sõidukiregistrit vahetatakse Ctrl+klõpsu abil -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Ava ettevõtte laevade register. Jaotus- ja sõidukiregistrit vahetatakse Ctrl+klõpsu abil -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Ava ettevõtte õhusõidukite register. Jaotus- ja sõidukiregistrit vahetatakse Ctrl+klõpsu abil -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Suurenda vaadet -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Vähenda vaadet +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Ava ettevõtte rongiregister. Ctrl+klõps avab või peidab sõidukide jaod, vastupidiselt valitud seadele +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Ava ettevõtte mootorsõidukiregister. Ctrl+klõps avab või peidab sõidukide jaod, vastupidiselt valitud seadele +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Ava ettevõtte laevaregister. Ctrl+klõps avab või peidab sõidukide jaod, vastupidiselt valitud seadele +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Ava ettevõtte õhusõidukiregister. Ctrl+klõps avab või peidab sõidukide jaod, vastupidiselt valitud seadele +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Suurenda sisse +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Suurenda väłja STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Ehita raudteetaristut STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Ehita maanteetaristut STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Ehita trammiteetaristut STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Ehita veeteetaristut STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Ehita lennuväli -STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Ava riba maastikutarvikutega, millega saab maad tõsta/langetada, puid istutada, jne. -STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Näita heli/muusika akent -STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Näita viimast teadet, ava teadete seadistus +STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Ava maastikukujunduse menüü, puude menüü või paigalda silt +STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Ava heli/muusika aken +STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Ava viimane sõnum/uudis, sõnumite ajalugu või kustuta kõik sõnumid STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Maa-ala andmed, konsool, skriptide debug, ekraanitõmmised, OpenTTDst STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Vaheta tarvikuribad @@ -1139,12 +1139,12 @@ STR_GAME_OPTIONS_BASE_GRF :{BLACK}Põhigra STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Vali kasutatav põhigraafika komplekt (mängus ei saa muuta, ainult peamenüüst) STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Lisateave põhigraafika komplekti kohta -STR_GAME_OPTIONS_BASE_SFX :{BLACK}Lähtehelikogu +STR_GAME_OPTIONS_BASE_SFX :{BLACK}Põhihelide komplekt STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Vali põhihelide komplekt (mängus ei saa muuta, ainult peamenüüst) -STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Lisateave lähtehelikogu kohta +STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Lisateave põhihelide komplekti kohta STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Põhimuusika komplekt -STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Valib kasutatava lähtemuusikakogu +STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Valib kasutatava põhimuusika komplekti STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Rohkem teavet põhimuusika komplekti kohta STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(puuduvad pistikprogrammid sotsiaalplatvormidega integreerumiseks) @@ -1331,10 +1331,10 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Lõpmatu raha: STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Võimaldab piiramatut kulutamist ja keelab ettevõtete pankrotid STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Stardilaenu ülempiirang: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Suurim summa, mida ettevõte saab laenata (arvestamata inflatsiooni) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Suurim summa, mida ettevõte saab laenata (arvestamata inflatsiooni). Kui on määratud "laenudeta", ei ole raha võimalik saada, kui seda GameScript ei anna, või ei ole "lõpmatu raha" seadistus. STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Laenudeta {RED}GameScript peab andma esmase rahastuse +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Laenudeta STR_CONFIG_SETTING_INTEREST_RATE :Intressimäär: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Laenu intressimäär; ühtlasi juhib inflatsiooni, kui inflatsioon on aktiveeritud @@ -1620,7 +1620,7 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maksimaalne kau STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Naftatöötlemistehased ehitatakse ainult kaardi piirile, see on rannikul saartega mängitaval kaardil. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Lumepiiri kõrgus: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Määra, millisel kõrgusel algab lähisarktiline maastik. Lumi mõjutab ka tööstuste tekitamist ja asulate kasvuvajadusi. Saab muuta ainult stsenaariumiredaktoris, muidu arvutatakse «lumekatvusega». +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Vali, kui kõrgel algab lähisarktilisel maastikul lumi. Lumi mõjutab ka tööstuste tekitamist ja asulate kasvuvajadusi. Saab muuta ainult stsenaariumiredaktoris, muidu arvutatakse «lumekatvusega». STR_CONFIG_SETTING_SNOW_COVERAGE :Lumekatvus: {STRING} STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Mõjutab umbkaudset lume osakaalu lähisartikilisel maastikul. Lumi mõjutab ka tööstuste tekitamist ja asulate kasvuvajadusi. Kasutatakse vaid kaardi tekitamisel. Vahetult merepiiri kohal on maa alati lumevaba @@ -1878,7 +1878,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Kui palju vahem STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Hooldusvälp protsentides: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Vali kas sõiduki hooldus käivitub vastavalt ajale mis on möödunud viimasest hooldusest või kui sõiduki usaldusväärsus langeb allapoole lubatud piiri sõiduki maksimaalsest usaldusväärsuse protsendist +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Kui on aktiveeritud, püüavad sõidukid käia hoolduses, kui nende vastupidavus langeb määratud protsendini suurimast vastupidavusest.{}{}Näiteks, kui sõiduki suurim vastupidavus on 90% ja hooldusvälp on 20%, püüab sõiduk käia hoolduses 72% vastupidavuse juures. STR_CONFIG_SETTING_SERVINT_TRAINS :Rongide esialgne hooldusvälp: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Määrab uute rööbassõidukite hooldusvälba, kui sõidukile eraldi hooldusvälpa ei määrata @@ -1888,7 +1888,7 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Õhusõidukite STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Määrab uute õhusõidukite hooldusvälba, kui sõidukile eraldi hooldusvälpa ei määrata STR_CONFIG_SETTING_SERVINT_SHIPS :Laevade hooldusvälba vaikeväärtus: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Määrab uute laevade hooldusvälba, kui sõidukile eraldi hooldusvälpa ei määrata -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA} päev{P 0 "" a}/% +STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Päev{P 0 "" a}/Minut{P 0 "" it}/% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Väljas @@ -2218,7 +2218,7 @@ STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_LEVEL :{WHITE}... tihe STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}... mängu salvestamise vormingut «{STRING}» ei ole. Taastatakse «{STRING}» STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... eiratakse põhigraafika komplekti «{STRING}»: ei leitud STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... eiratakse põhihelide komplekti «{STRING}»: ei leitud -STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... eiratakse lähtemuusikakogu «{STRING}»: ei leitud +STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... eiratakse põhimuusika komplekti «{STRING}»: ei leitud STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Vahemälu on täis STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Pildipuhvri (ingl k «spritecache») suurendamine {BYTES} võrra ebaõnnestus. Pildipuhvri uus suurus on {BYTES}. Seetõttu on OpenTTD nüüd aeglasem. 32 bpp graafika keelamine ja suurendusastme ülempiirangu vähendamine piirab vahemälu tarbimist @@ -2259,17 +2259,17 @@ STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Vali 'l STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Vali 'lähistroopiline' maastik STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Vali 'mänguasjamaa' maastik -STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Ava liidese seadistamine +STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Ava liidese seadus STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Ava edetabel STR_INTRO_TOOLTIP_HELP :{BLACK}Saa ligipääs dokumentatsioonile ja veebiressursidele STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Ava seaded -STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Ava NewGRF-i seadistamine +STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Ava NewGRF-i seadistus STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Otsi allalaadimiseks uusi ja uuendatud aineseid STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Ava TI-seaded -STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Näita GameSript'i seadeid +STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Ava GameScript'i seaded STR_INTRO_TOOLTIP_QUIT :{BLACK}Välju 'OpenTTD'st -STR_INTRO_BASESET :{BLACK}Hetkel valitud põhigraafika komplektist puudub {NUM} sprite{P "" 'i}. Kontrolli, kas lähtekogule on uuendusi. +STR_INTRO_BASESET :{BLACK}Hetkel valitud põhigraafika komplektist puudub {NUM} sprite{P "" 'i}. Kontrolli, kas põhikomplektile on uuendusi. STR_INTRO_TRANSLATION :{BLACK}Puudub {NUM} tõlge{P "" t}. Aita teha OpenTTD paremaks, panusta tõlkimisega. Rohkem teavet leiad «readme.txt» failist. # Quit window @@ -2313,17 +2313,17 @@ STR_CHEAT_STATION_RATING :{LTBLUE}Fikseer # Livery window STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Värvivalik -STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Näita üldiseid värvistikke -STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Näita rongide värvistikke -STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Näita mootorsõidukite värvistikke -STR_LIVERY_SHIP_TOOLTIP :{BLACK}Näita laevavärvistikke -STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Näita õhusõidukite värvistikke +STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Näita üldiseid värvikavu +STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Näita rongide värvikavu +STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Näita mootorsõidukite värvikavu +STR_LIVERY_SHIP_TOOLTIP :{BLACK}Näita laevade värvikavu +STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Näita õhusõidukite värvikavu STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Näita rongirühmade värve STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Näita sõidukirühmade värve STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Näita laevarühmade värve STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Näita õhusõidukirühmade värve -STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Vali põhivärv värvistikule. Ctrl+Klikk valib selle värvi tervele värvistikule -STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Vali teine värv valitud värvistikule. Ctrl+Klõps valib selle värvi tervele värvistikule +STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Vali põhivärv värvikavale. Ctrl+Kklõps määrab selle värvi igale värvikavale +STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Vali teine värv valitud värvikavale. Ctrl+klõps määrab selle värvi igale värvikavale STR_LIVERY_PANEL_TOOLTIP :{BLACK}Vali muudetav värvivalik - või mitu Ctrl+klõps abil. Klõpsa kastil, et muuta värvivaliku kasutust STR_LIVERY_TRAIN_GROUP_EMPTY :Rongirühmi ei ole seadistatud STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Sõidukirühmi ei ole seadistatud @@ -2331,7 +2331,7 @@ STR_LIVERY_SHIP_GROUP_EMPTY :Laevarühmi ei STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Õhusõidukite rühmi ei ole seadistatud ###length 23 -STR_LIVERY_DEFAULT :Firmavärv +STR_LIVERY_DEFAULT :Vaikimisi värvikava STR_LIVERY_STEAM :Aurumootorvedur STR_LIVERY_DIESEL :Diiselmootorvedur STR_LIVERY_ELECTRIC :Elektrimootorvedur @@ -2841,14 +2841,14 @@ STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Elektriraudtee STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Monorelsi ehitamine STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Magnethõljuktee ehitamine -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Ehita raudteed. Ctrl vahetab ehitamise eemaldamise vastu. Shift valib ehitamise/hinna kuvamise režiimi -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Rööbaste ehitamine kasutades Autotram režiimi. Ctrl valib rööbaste ehitamise/eemaldamise. Shift valib ehitamise/hinna kuvamise režiimi -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Ehita rongidepoo (rongide ehitamiseks ja hoolduseks). Shift valib ehitamise/hinna kuvamise režiimi +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Ehita raudteed. Ctrl vahetab ehitamise eemaldamise vastu. Lisaks hoia all Shift-klahvi, et vaid näidata eeldatavat hinda +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Rööbaste ehitamine kasutades Autotram režiimi. Ctrl+klõps kõrvaldab rööbastee. Lisaks hoia all Shift-klahvi, et vaid näidata eeldatavat hinda +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Ehita rongidepoo (rongide ehitamiseks ja hoolduseks). Lisaks hoia all Shift-klahvi, et vaid näidata eeldatavat hinda STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Muuda rööpad meldepunktiks. Ctrl võimaldab meldepunkte ühendada. Shift valib ehitamise/hinna kuvamise režiimi -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Ehita raudteejaam. Ctrl võimaldab jaamasid ühendada. Shift valib ehitamise/hinna kuvamise režiimi -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Ehita rööbastee signaale. Ctrl valib semaforide ja fooride vahel{}Hiirega lohistades paigaldatakse foore sirgel teelõigul. Ctrl paigaldab foorid kuni järgmise jaamani{}Ctrl+klõps avab foori valikuakna. Shift valib ehitamise/hinna kuvamise režiimi -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Ehita raudteesild. Shift valib ehitamise/hinna kuvamise režiimi -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Ehita rongitunnel. Shift valib ehitamise/hinna kuvamise režiimi +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Ehita raudteejaam. Ctrl+klõps, et valida kokkuliitmiseks teine jaam. Lisaks hoia all Shift-klahvi, et vaid näidata eeldatavat hinda +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Ehita rööbasteele signaal. Ctrl+klõps ehitab signaaliliike vahelduvalt{}Ctrl+lohistus täidab väljavalitud rööpavahemiku valitud vahedega signaalidega. Ctrl+klõps+lohistus täidab signaalidega kuni järgmise ristumiskohani, jaamani, või signaalini. Lisaks hoia all Shift-klahvi, et vaid näidata eeldatavat hinda +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Ehita raudteesild. Lisaks hoia all Shift-klahvi, et vaid näidata eeldatavat hinda +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Ehita rongitunnel. Lisaks hoia all Shift-klahvi, et vaid näidata eeldatavat hinda STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Vahelda rongitee, signaalide, meldepunktide ja jaamade ehitamist ja lammutamist. Ctrl-klõps eemaldab meldepunktid ja jaamad. STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Muuda/uuenda rööpaliiki. Shift valib ehitamise/hinna kuvamise režiimi @@ -2900,7 +2900,7 @@ STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Väljas STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Kombineeritud signaal (elektriline){}Kombineeritud signaal toimib nii sisse-, kui ka väljasõidusignaalina. See võimaldab laialiulatuvaid eelsignaalide harusid ehitada STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Täiustatud signaal (elektriline){}Kui rongide tee kahe signaali vahel kordagi ei ristu, siis täiustatud signaalidega saab signaalivahedesse siseneda korraga mitu rongi. Täiustatud signaalidest saab tagant mööduda STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Ühesuunaline täiustatud signaal (elektriline){}Kui rongide tee kahe signaali vahel kordagi ei ristu, siis täiustatud signaalidega saab signaalivahedesse siseneda korraga mitu rongi. Ühesuunalistest täiustatud signaalidest ei saa tagant mööduda -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Signaalide teisendamine{}Kui see on valitud, siis olemasoleval signaalil klõpsates teisendatakse see määratud signaalitüübiks ja -variandiks. Samal ajal Ctrl klahvi all hoides lülitutakse olemasoleva variandi vahel. Shift+klõps näitab teisendamise eeldatavat maksumust +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Signaalide teisendamine{}Klõpsa olemasolevas signaalil, et teisendada see väljavalitud signaaliliigiks ja -variandiks. Ctrl+klõps vaheldab olemasolevat varianti. Shift+klõps näitab teisenduse eeldatavat maksumust STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Signaalide paigalduskaugus STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Kahanda signaalide paigaldustihedust STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Suurenda signaalide paigaldustihedust @@ -2937,7 +2937,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Ehita re STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Ehita veokite laadimisplats. Ctrl võimaldab jaamasid ühendada. Shift valib ehitamise/hinna kuvamise režiimi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Ehita kaubatrammijaam. Ctrl võimaldab jaamasid ühendada. Shift valib ehitamise/hinna kuvamise režiimi STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Aktiveeri/deaktiveeri ühesuunalised teed -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Ehita sild. Shift valib ehitamise/hinna kuvamise režiimi +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Ehita sild. Lisaks hoia all Shift-klahvi, et vaid näidata eeldatavat hinda STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Ehita trammisild. Shift valib ehitamise/hinna kuvamise režiimi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Ehita tunnel. Shift valib ehitamise/hinna kuvamise režiimi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Ehita trammitunnel. Shift valib ehitamise/hinna kuvamise režiimi @@ -2968,14 +2968,14 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Vali kau # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Veeteede ehitamine STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Veeteed -STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Ehita kanaleid. Shift valib ehitamise/hinna kuvamise režiimi -STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Lüüsi ehitamine. Shift valib ehitamise/hinna kuvamise režiimi -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Ehita laevaremonditehas (laevade ehitamiseks ja hoolduseks). Shift valib ehitamise/hinna kuvamise režiimi -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Ehita laevadokk. Ctrl võimaldab jaamu ühendada. Shift valib ehitamise/hinna kuvamise režiimi +STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Ehita kanaleid. Lisaks hoia all Shift-klahvi, et vaid näidata eeldatavat hinda +STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Lüüsi ehitamine. Lisaks hoia all Shift-klahvi, et vaid näidata eeldatavat hinda +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Ehita laevaremonditehas (laevade ehitamiseks ja hoolduseks). Lisaks hoia all Shift-klahvi, et vaid näidata eeldatavat hinda +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Ehita laevadokk. Ctrl+klõps, et valida liitmiseks teine jaam. Lisaks hoia all Shift-klahvi, et vaid näidata eeldatavat hinda STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Paigalda poi, mis on kasutatav teemärgisena. Shift valib ehitamise/hinna kuvamise režiimi -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Ehita veesild. Shift valib ehitamise/hinna kuvamise režiimi -STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Määratle veealad.{}Ehita kanal. Veekõrgusel Ctrl-klahvi all hoidmine ujutab ümbruskonna üle -STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Jõgede paigutamine. Ctrl valib ala põiki +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Ehita veesild. Lisaks hoia all Shift-klahvi, et vaid näidata eeldatavat hinda +STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Ehita kanal. Ctrl+klõps merepinnal, et ujutada üle mereveega +STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Paigalda jõgesid. Ctrl+klõps valib põigiti # Ship depot construction window STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Laevaremonditehase suund @@ -3020,7 +3020,7 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Maa ostm # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objekti valik -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vali ehitatav objekt. Ctrl valib ala diagonaaliti. Shift valib ehitamise/hinna kuvamise režiimi vahel +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vali ehitatav objekt. Ctrl+klõps+lohistus valib ala diagonaaliti. Lisaks hoia all Shift-klahvi, et vaid näidata eeldatavat hinda STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Vali ehitatava objekti järk STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Objekti eelvaade STR_OBJECT_BUILD_SIZE :{BLACK}Suurus: {GOLD}{NUM} x {NUM} ruutu @@ -3091,7 +3091,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}3x3 ruud STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Suvaline # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Uue tööstuse rahastamine +STR_FUND_INDUSTRY_CAPTION :{WHITE}Tööstuse rahastamine STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Vali siit nimistust sobiv tööstus STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Tekita suvalised tööstused STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Katab kaardi suvaliselt paigutatud tööstustega @@ -3107,8 +3107,8 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Kõrvald STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Kas oled kindel, et sa tahad kõrvaldada kõik tööstused? # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Tööstuse {STRING} tööstusahel -STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Kauba {STRING} tööstusahel +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Tööstusahel - {STRING} +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Kaubaahel - {STRING} STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Tootvad tööstused STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Vastuvõtvad tööstused STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Majad @@ -3136,7 +3136,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Trammite STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Raudtee omanik: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Kohalik omavalitsus: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :puudub -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinaadid: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Ehitatud: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Jaama järk: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Jaama liik: {LTBLUE}{STRING} @@ -3739,7 +3738,7 @@ STR_GOALS_TEXT :{ORANGE}{STRING STR_GOALS_NONE :{ORANGE}- Mitte ühtegi - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klõpsa eesmärgil, et liigutada vaateaken tööstuse/asula/ruudu asukohale. Ctrl+klõps avab uue vaateakna tööstuse/asula/ruudu asukohas +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klõpsa eesmärgil, et liigutada vaateaken tööstuse/asula/ruudu asukohale. Ctrl+klõps, et avada uus vaateaken tööstuse/asula/ruudu kohal # Goal question window STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Küsimus @@ -3878,7 +3877,7 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Keela õ STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Keskenda vaade teemärgisel. Ctrl+klõps avab teemärgisel uue vaate STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Muuda meldepunkti nime -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Keskenda vaade poile. Ctrl+klõps avab poil uue vaate +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Keskenda vaade poi kohale. Ctrl+klõps avab poi kohal uue vaateakna STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Muuda poi nime STR_EDIT_WAYPOINT_NAME :{WHITE}Muuda meldepunkti nime @@ -4012,7 +4011,7 @@ STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTR STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Eelmise kuu toodang: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Toodang eelmisel minutil: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% veetud) -STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vaate keskendamine tööstusele +STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vaate keskendamine tööstusele. Ctrl+klõps avab uue vaateakna tööstuse kohal STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tootlikkuse tase: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Tööstus teatab kohesest sulgemisest! @@ -4086,7 +4085,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Jagu - j STR_GROUP_CREATE_TOOLTIP :{BLACK}Klõpsa jao loomiseks STR_GROUP_DELETE_TOOLTIP :{BLACK}Eemalda valitud jagu STR_GROUP_RENAME_TOOLTIP :{BLACK}Ümbernimeta valitud jagu -STR_GROUP_LIVERY_TOOLTIP :{BLACK}Muuda valitud jao värvistikku +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Muuda valitud jao värvikava STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klõpsa, et kaitsta seda jagu globaalse automaatasenduse eest. Ctrl+klõps kaitsmaks ka alamkategooriaid. STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Kõrvalda jagu @@ -4182,7 +4181,7 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Osta val STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja ümberseadista valitud rööbassõiduk. Hoia all shift-klahvi, et näidata ainult hinnangulist maksumust STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja ümberseadista valitud maanteesõiduk. Shift+klõps näitab eeldatava maksumuse ilma ostu sooritamata STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja ümberseadista valitud laev. Shift+klõps näitab eeldatava maksumuse ilma ostu sooritamata -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja ümberseadista valitud õhusõiduk. Shift+klõps näitab eeldatava maksumuse ilma ostu sooritamata +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja ümberseadista valitud õhusõiduk. Lisaks hoia all Shift-klahvi, et vaid näidata eeldatavat hinda ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Ümbernimeta @@ -4395,16 +4394,16 @@ STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Keskenda STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Keskenda vaade õhusõiduki asukohale.Topeltklõps jälitab õhusõidukit põhivaates. Ctrl+klõps avab õhusõiduki asukohas uue vaate. ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Saada rong depoosse -STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Saada sõiduk garaaži. Ctrl+klõps, et ainult teenindada -STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Saada laev angaari. Ctrl+klõps ainult teenindab +STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Saada rong depoosse. Ctrl+klõps ainult hooldab +STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Saada sõiduk garaaži. Ctrl+klõps ainult hooldab +STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Saada laev angaari. Ctrl+klõps, et ainult teenindada STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Saada õhusõiduk angaari. Ctrl + klõps ainult hooldab ###length VEHICLE_TYPES STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Ostab samasuguse rongi koos kõikide vagunitega. «Ctrl»+klõps jagab korraldusi. «Shift»+klõps näitab eeldatavat ostuhinda -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Ostab samasuguse maanteesõiduki. «Ctrl»+klõps jagab korraldusi. «Shift»+klõps näitab eeldatavat ostuhinda +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Ostab samasuguse maanteesõiduki. «Ctrl»+klõps jagab korraldusi. Lisaks hoia all Shift-klahvi, et vaid näidata eeldatavat hinda STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Ostab samasuguse laeva. Vajuta sellele nuppule, ning seejärel laevale laevaremonditehase sees või väljas. «Ctrl»+klõps jagab korraldusi. «Shift»+klõps näitab eeldatavat ostuhinda -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Ostab samasuguse õhusõiduki. Ctrl+klõpsuga jagatakse sihtpunkte. Shift+klõpsuga kuvatakse eeldatav ostuhind +STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Ostab samasuguse õhusõiduki. Ctrl+klõpsuga jagatakse sihtpunkte. Lisaks hoia all Shift-klahvi, et vaid näidata eeldatavat hinda STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Sunni rongi signaale eirama STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Pööra rong ümber @@ -4836,9 +4835,9 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Tõstutu STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Vaheldab tõstutundlikkust, kui AI debug-sõnumeid võrreldakse peatamiskirjega STR_AI_DEBUG_CONTINUE :{BLACK}Jätka STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Lõpeta paus ja jätka AI-d -STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Vaata selle AI debug-väljundit +STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Vaata selle AI debug-väljundit. Ctrl+klõps avab uues aknas STR_AI_GAME_SCRIPT :{BLACK}GameScript -STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Kontrolli GameScripti logi +STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Kontrolli GameScripti logi. Ctrl+klõps avab uues aknas STR_ERROR_AI_NO_AI_FOUND :Laadimiseks sobivat AI-d ei leitud.{}See AI on makett, ning ei tee midagi.{}AI-sid alla saab laadida kasutades 'aineste allalaadimise' süsteemi. STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Üks skriptidest jooksis kokku. Palun teatada sellest skripti autorit koos ekraanipildiga AI/GamesScripti debugimise aknast @@ -4902,8 +4901,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :GameScript STR_AI_SETTINGS_CLOSE :{BLACK}Sulge STR_AI_SETTINGS_RESET :{BLACK}Nulli STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index a655a31665..447cd1cb69 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -2365,7 +2365,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Sporvogn STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Jarnbreyta eigari: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Mynduleikar á staðnum: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Eingin -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinatar: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Bygt: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Støð klassi: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Støð slag: {LTBLUE}{STRING} diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 155f81af04..190d949928 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -3078,7 +3078,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Raitioti STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Rautatien omistaja: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Kunta: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ei mitään -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinaatit: {LTBLUE}{NUM}×{NUM}×{NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Rakennettu/peruskorjattu: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Aseman luokka: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Aseman tyyppi: {LTBLUE}{STRING} @@ -4843,8 +4842,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Peliskripti STR_AI_SETTINGS_CLOSE :{BLACK}Sulje STR_AI_SETTINGS_RESET :{BLACK}Palauta STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/french.txt b/src/lang/french.txt index 0dbaf25d3a..6d2185e70c 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -3079,7 +3079,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Proprié STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Propriétaire des rails{NBSP}: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Municipalité{NBSP}: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Aucune -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordonnées{NBSP}: {LTBLUE}{NUM} × {NUM} × {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Construit/rénové le{NBSP}: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Type de station{NBSP}: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Type de station{NBSP}: {LTBLUE}{STRING} @@ -4844,8 +4843,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :du script de je STR_AI_SETTINGS_CLOSE :{BLACK}Fermer STR_AI_SETTINGS_RESET :{BLACK}Réinitialiser STR_AI_SETTINGS_SETTING :{STRING}{NBSP}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}{NBSP}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 299cc438ad..82b55becb7 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -2837,7 +2837,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Seilbhea STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Seilbheadair na rathaid-iarainn: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Ùghdarras ionadail: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Chan eil gin -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Ionad: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Air a thogail: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Seòrsa an stèisein: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Seòrsa an stèisein: {LTBLUE}{STRING} diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 8e17c98f66..45139c01ec 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -3077,7 +3077,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propieta STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Propietario da vía ferroviaria: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autoridade local: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ningunha -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordenadas: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Construído/anovado: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Clase de estación: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de estación: {LTBLUE}{STRING} @@ -4842,8 +4841,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script do xogo STR_AI_SETTINGS_CLOSE :{BLACK}Pechar STR_AI_SETTINGS_RESET :{BLACK}Restablecer STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/german.txt b/src/lang/german.txt index 3a2457df67..6f168022ad 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -3079,7 +3079,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Straßen STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Gleiseigentümer: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Gehört zur Gemeinde: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Keine -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinaten: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Errichtet/renoviert am: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stationsklasse: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stationstyp: {LTBLUE}{STRING} @@ -4844,8 +4843,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spielskript STR_AI_SETTINGS_CLOSE :{BLACK}Schließen STR_AI_SETTINGS_RESET :{BLACK}Zurücksetzen STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/greek.txt b/src/lang/greek.txt index e5590b5dc1..2f765169fb 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -869,6 +869,7 @@ STR_STATUSBAR_AUTOSAVE :{RED}ΑΥΤΟΜ STR_STATUSBAR_SAVING_GAME :{RED}* * ΑΠΟΘΗΚΕΥΣΗ ΠΑΙΧΝΙΔΙΟΥ * * STR_STATUSBAR_SPECTATOR :{WHITE}(θεατής) +STR_STATUSBAR_INFINITE_MONEY :{WHITE}(άπειρα χρήματα) # News message history STR_MESSAGE_HISTORY :{WHITE}Ιστορικό Μηνυμάτων @@ -981,6 +982,8 @@ 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_SOUND :Ήχος @@ -1068,6 +1071,10 @@ STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Τσεκ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Κλίση κλίμακας STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Τσεκάρετε αυτό το κουτί για να αλλάζει μέγεθος το περίγραμμα με βάση το μέγεθος της διεπαφής +STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Χρήση παραδοσιακής γραμματοσειράς +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Επιλέξτε αυτό το κουτάκι εάν προτιμάτε να χρησιμοποιήσετε την παραδοσιακή γραμματοσειρά σταθερού μεγέθους. +STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Γραμματοσειρά με εξομάλυνση εμφάνισης +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Τσεκάρετε αυτό το κουτάκι για γραμματοσειρά με εξομάλυνση εμφάνισης. STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1283,6 +1290,7 @@ STR_CONFIG_SETTING_SUBSIDY_DURATION :Διάρκει ###length 2 STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Ορίστε τον αριθμό των ετών για τα οποία θα ισχύει η επιδότηση +STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{UNITS_YEARS_OR_PERIODS} ###setting-zero-is-special STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Χωρίς επιχορηγήσεις @@ -1655,6 +1663,9 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Απενεργ STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Κλείσιμο παραθύρου με δεξί-κλικ: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Κλείνει το παράθυρο με δεξί πάτημα μέσα του. Απενεργοποιεί την ανάδυση επεξηγήσεων με το δεξί κουμπί! ###length 3 +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_NO :Όχι +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES :Ναι +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :Ναι, εκτός από το καρφιτσωμένο STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Χρήση της {STRING} ημερολογιακής μορφής στα ονόματα αποθηκευμένων παιχνιδιών STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Μορφή της ημερομηνίας στα αρχεία αποθήκευσης παιχνιδιών @@ -2001,11 +2012,15 @@ STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Θέτοντα STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Κορεσμός σύντομων οδών πριν τη χρήση οδών μεγάλης χωρητικότητας: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Συχνά υπάρχουν πολλαπλές οδοί μεατξύ δύο σταθμών. Η διανομή φορτίων θα κορέσει την πιο σύντομη οδό πρώτα, και μετέπειτα θα χρησιμοποιήσει τη δεύτερ συντομότερη οδό μέχρι αυτή να κορεστεί και τα λοιπά. Ο κορεσμός εξαρτάται από μια εκτίμηση της χωρητικότητας και ενδεχόμενης χρήσης. Όταν έχει κορεστεί όλες οι οδοί, θα υπερφορτώσει όλες τισ οδούς, προτιμώντας αυτές με μεγάλη χωρητικότητα. Τις περισσότερες φορές όμως ο αλγόριθμος δεν εκτιμά σωστά την χωριτικότητα. Αυτή η ρύθμιση επιτρέπει τον προσδιορισμό μέχρι ποιό ποσοστό μια σύντομοτερη οδός πρέπει να κορεστεί τη πρώτη φορά πριν διαλέξει μια μακρύτερη. Θέστε τη σε λιγότερο απο το 100% για την αποφυγή υπερφορτωμένων σταθμών σε περίπτωση υπερεκτιμημένης χωρητικότητας. -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Μονάδες μέτρησης ταχύτητας: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Μονάδες μέτρησης ταχύτητας (ξηράς): {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Μονάδες ταχύτητας (ναυτικές): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Όποτε εμφανίζεται μια ταχύτητα στη διεπαφή χρήστη, να εμφανίζεται στην επιλεγμένη μονάδα STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Αυτοκρατορικό (μίλια/ώρα) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Μετρικό (χλμ/ώρα) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_DAYS :Μονάδες παιχνιδιού (πλακάκια/ημέρα) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_SECS :Μονάδες παιχνιδιού (πλακάκια/δευτερόλεπτο) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :Κόμβοι STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Μονάδες ισχύος οχημάτων: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Όποτε εμφανίζεται η ισχύς ενός οχήματος στη διεπαφή χρήστη, να εμφανίζεται στην επιλεγμένη μονάδα @@ -2104,6 +2119,7 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Η κα # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Πρόβλημα με τις ρυθμίσεις βίντεο... STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... δεν βρέθηκε συμβατή GPU. Η επιτάχυνση υλικού έχει απενεργοποιηθεί +STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... Το πρόγραμμα οδήγησης της κάρτας γραφικών προκάλεσε πρόβλημα στο παιχνίδι. Η επιτάχυνση υλικού απενεργοποιήθηκε # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -2404,6 +2420,8 @@ 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 α ες} +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}Ο αριθμός των συνδεδεμένων πελατών, ο αριθμός των εταιρειών και ο μέγιστος αριθμός εταιρειών που επιτρέπεται από τον διαχειριστή του διακομιστή # Matches ConnectionType ###length 5 @@ -2430,6 +2448,12 @@ 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_TEXT :Θα θέλατε να συμμετάσχετε στην αυτοματοποιημένη έρευνα;{}Το OpenTTD θα μεταδώσει μια έρευνα όταν αποχωρείτε από ένα παιχνίδι.{}Μπορείτε να το αλλάξετε ανά πάσα στιγμή στις "Επιλογές παιχνιδιού". +STR_NETWORK_ASK_SURVEY_PREVIEW :Προεπισκόπηση αποτελέσματος έρευνας +STR_NETWORK_ASK_SURVEY_LINK :Πληροφορίες για την αυτοματοποιημένη έρευνα και ιδιωτικότητα +STR_NETWORK_ASK_SURVEY_NO :Όχι +STR_NETWORK_ASK_SURVEY_YES :Ναι STR_NETWORK_SPECTATORS :Θεατές @@ -2652,6 +2676,7 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA # Linkgraph tooltip STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} προς μεταφορά πίσω ({COMMA}% της χωρητικότητας) +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Μέσος χρόνος ταξιδιού: {UNITS_DAYS_OR_SECONDS} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Κάλυψη περιοχής @@ -2966,7 +2991,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Ιδιο STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Ιδιοκτήτης του σιδηροδρόμου: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Τοπική αρχή: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Καμιά -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Συντεταγμένες: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Κατασκευή: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Κατηγορία σταθμού: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Τύπος σταθμού: {LTBLUE}{STRING} @@ -3389,8 +3413,10 @@ 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} είναι για την έκδοση {STRING} του TTD +STR_NEWGRF_ERROR_DOS_OR_WINDOWS :Το {1:STRING} είναι για την έκδοση {2:STRING} του TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} είναι σχεδιασμένο να δουλέψει με το {STRING} STR_NEWGRF_ERROR_INVALID_PARAMETER :Λάθος παράμετρος για το {1:STRING}: παράμετρος {STRING} ({NUM}) STR_NEWGRF_ERROR_LOAD_BEFORE :Το {1:STRING} πρέπει να φορτωθεί πριν από το {2:STRING} @@ -3579,9 +3605,11 @@ STR_GOAL_QUESTION_BUTTON_CLOSE :Κλείσιμ # Subsidies window STR_SUBSIDIES_CAPTION :{WHITE}Χρηματοδοτήσεις STR_SUBSIDIES_OFFERED_TITLE :{BLACK}Τρέχουσες χρηματοδοτήσεις για ανάληψη υπηρεσιών: +STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING} από {STRING} προς {STRING}{YELLOW} ({STRING}) STR_SUBSIDIES_NONE :{ORANGE}- Καμία - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Υπηρεσίες που έχουν χρηματοδοτηθεί: STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Πατήστε στην υπηρεσία για κεντράρισμα στην βιομηχανία/πόλη. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία της βιομηχανίας/πόλης +STR_SUBSIDIES_OFFERED_EXPIRY_DATE :ανά {DATE_SHORT} # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Βιβλίο Ιστορίας @@ -4106,6 +4134,11 @@ STR_ENGINE_PREVIEW_AIRCRAFT.geniki :αεροσκά STR_ENGINE_PREVIEW_SHIP :{G=n}πλοίου STR_ENGINE_PREVIEW_SHIP.geniki :πλοίου +STR_ENGINE_PREVIEW_COST_WEIGHT :Κόστος: {CURRENCY_LONG} Βάρος: {WEIGHT_SHORT} +STR_ENGINE_PREVIEW_COST_MAX_SPEED :Κόστος: {CURRENCY_LONG} Μεγ. Ταχύτητα: {VELOCITY} +STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Τρέχον κόστος: {CURRENCY_LONG}/περίοδο +STR_ENGINE_PREVIEW_CAPACITY :Χωρητικότητα: {CARGO_LONG} +STR_ENGINE_PREVIEW_CAPACITY_2 :Χωρητικότητα: {CARGO_LONG}, {CARGO_LONG} # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Αντικατάσταση {STRING} - {STRING} @@ -4270,6 +4303,9 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Χωρη STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Έσοδα μεταφοράς: {LTBLUE}{CURRENCY_LONG} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Διάστημα μεταξύ επισκευών: {LTBLUE}{COMMA}{NBSP}ημέρες{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Διάστημα μεταξύ επισκευών: {LTBLUE}{COMMA}{NBSP}λεπτά{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Διάστημα επισκευών: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Αλλάξτε τον τύπο διαστήματος επισκευών STR_VEHICLE_DETAILS_DEFAULT :Προκαθορισμένο @@ -4338,6 +4374,7 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Αλλα STR_ORDERS_LIST_TOOLTIP :{BLACK}Λίστα εντολών - πατήστε σε μια εντολή για να την επιλέξετε. Με Ctrl+Κλικ γίνεται μετακίνηση στον προορισμό της οδηγίας STR_ORDER_INDEX :{COMMA}:{NBSP} +STR_ORDER_TEXT :{STRING} {STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Τέλος Εντολών - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Τέλος Μοιρασμένων Οδηγιών - - @@ -4638,8 +4675,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Σενάριο STR_AI_SETTINGS_CLOSE :{BLACK}Κλείσιμο STR_AI_SETTINGS_RESET :{BLACK}Επαναφορά STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window @@ -5545,6 +5580,7 @@ STR_UNKNOWN_STATION :άγνωστο STR_DEFAULT_SIGN_NAME :Πινακίδα STR_COMPANY_SOMEONE :κάποιος +STR_SAVEGAME_DURATION_REALTIME :{NUM}ω {NUM}λ STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING} STR_SAVEGAME_NAME_SPECTATOR :Θεατής, {1:STRING} diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 5b3d7b6dc4..bf1a229d93 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -2716,7 +2716,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}:בעל STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}בעלי מסילת הרכבת: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{LTBLUE}{STRING}{BLACK} :רשות מקומית STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :אין -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}קואורדינטות: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{LTBLUE}{DATE_LONG}{BLACK} : תאריך בניה STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}{LTBLUE}{STRING}: אופי התחנה STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK} {LTBLUE}{STRING}: סוג התחנה diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 2f41c6c330..7ae6971895 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -3142,7 +3142,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}A villam STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}A vasúti pálya tulajdonosa: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Helyi önkormányzat: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Nincs -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordináták: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Épült/felújítva: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Állomás osztálya: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Állomás típusa: {LTBLUE}{STRING} @@ -4907,8 +4906,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Játékszkript STR_AI_SETTINGS_CLOSE :{BLACK}Bezárás STR_AI_SETTINGS_RESET :{BLACK}Visszaállítás STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 320ebcb1a9..3001fc11cf 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -2473,7 +2473,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Eigandi STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Eigandi járnbrautarspors: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Bæjaryfirvöld: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Enginn -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Hnit: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Byggt: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Tegund stöðvar: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tegund stöðvar: {LTBLUE}{STRING} diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index b02ccd0747..2b15fa0e1f 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -3009,7 +3009,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Pemilik STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Pemilik Rel Kereta: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Pemkot setempat: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Kosong -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinat: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Dibuat: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Kelas Stasiun: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipe Stasiun: {LTBLUE}{STRING} @@ -4705,8 +4704,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Skrip Permainan STR_AI_SETTINGS_CLOSE :{BLACK}Tutup STR_AI_SETTINGS_RESET :{BLACK}Reset STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 46091c3ca0..970642cc08 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -2822,7 +2822,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Úinéir STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Úinéir an iarnróid: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Údarás áitiúil: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ceann ar bith -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Comhordanáidí: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Tógtha: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Aicme an stáisiúin: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Cineál stáisiúin: {LTBLUE}{STRING} diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 3bca21c938..541b8e2838 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -3119,7 +3119,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propriet STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Proprietario ferrovia: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autorità locale: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Nessuna -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordinate: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Costruito/Rinnovato il: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Tipo stazione: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo stazione: {LTBLUE}{STRING} @@ -4884,8 +4883,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script di gioco STR_AI_SETTINGS_CLOSE :{BLACK}Chiudi STR_AI_SETTINGS_RESET :{BLACK}Reimposta STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index a130c5061e..a266e0948d 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -2902,7 +2902,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}軌道 STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}線路所有者: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}所属街域: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :なし -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}座標: {LTBLUE}{NUM}x{NUM}x{NUM}({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}建設年: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}駅の種類: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}駅の種類: {LTBLUE}{STRING} diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 4a2705ee2e..d24aa80232 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -3079,7 +3079,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}전찻 STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}철도 소유주: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}지역 당국: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :없음 -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}좌표: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}건설날짜: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}역 분류: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}역 종류: {LTBLUE}{STRING} @@ -4844,8 +4843,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :게임 스크 STR_AI_SETTINGS_CLOSE :{BLACK}닫기 STR_AI_SETTINGS_RESET :{BLACK}초기화 STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 40c09de3aa..b3da6ebc9a 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -2833,7 +2833,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Possesso STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Possessor ferriviae: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Auctoritas vicinalis: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Nulla -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordinatae: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Dies struendi: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Classis stationis: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Typus stationis: {LTBLUE}{STRING} diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 13651b8555..e27f13b638 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -3083,7 +3083,6 @@ STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Dzelzce STR_LAND_AREA_INFORMATION_RAIL_OWNER.kas :{BLACK}Dzelzceļa īpašniece: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Pašvaldība: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Neviena -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinātes: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Buvēts/atjaunots: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stacijas klase: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stacijas tips: {LTBLUE}{STRING} @@ -4854,8 +4853,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spēles skripts STR_AI_SETTINGS_CLOSE :{BLACK}Aizvērt STR_AI_SETTINGS_RESET :{BLACK}Atiestatīt STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index f72620059a..0202d7d7b8 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -3041,7 +3041,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Tramvaja STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Geležinkelio savininkas: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Vietos valdžia: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Nėra -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinatės: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Pastatytas: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stotelės rūšis: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stotelės tipas: {LTBLUE}{STRING} diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index b71baf6c02..65baa1222e 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -3078,7 +3078,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Tramschi STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Schinnebesëtzer: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Gemeng: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Keng -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinaten: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Gebaut/renovéiert: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Statiounsklass: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Statiounstyp: {LTBLUE}{STRING} @@ -4843,8 +4842,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spill-Script STR_AI_SETTINGS_CLOSE :{BLACK}Zoumaachen STR_AI_SETTINGS_RESET :{BLACK}Reset STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 390c949740..5b87842e6d 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -2368,7 +2368,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Pemilik STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Pemilik landasan keretapi: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Pihak berkuasa: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Tiada -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinat: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Dibina: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Kelas stesen: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Jenis stesen: {LTBLUE}{STRING} diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index f6b7b5a793..2b12b28ad6 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -2848,7 +2848,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Eier av STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Eier av jernbanespor: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Bystyret: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ingen -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinater: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Bygget: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stasjonstype: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stasjonstype: {LTBLUE}{STRING} diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 63be836b0d..33d116b0e5 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -2537,7 +2537,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Trikkesp STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Jernbaneskjene-eigar: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Bystyret: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ingen -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinatar: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Byggd: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stasjonsklasse: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stasjontype: {LTBLUE}{STRING} diff --git a/src/lang/persian.txt b/src/lang/persian.txt index e09d2942a1..0d273a6159 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -2341,7 +2341,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}مالک STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}مالک ریل راه آهن: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}فرماندار محلی: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :هیچکدام -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}مختصات: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}ساخته شده در: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}کلاس ایستگاه: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}نوع ایستگاه: {LTBLUE}{STRING} diff --git a/src/lang/polish.txt b/src/lang/polish.txt index ec5efcbf8a..0c885597a9 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3458,7 +3458,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Właści STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Właściciel linii kolejowej: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Lokalne władze: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Brak -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Współrzędne: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Zbudowano/odnowiono: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Rodzaj stacji: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Typ stacji: {LTBLUE}{STRING} @@ -5229,8 +5228,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script STR_AI_SETTINGS_CLOSE :{BLACK}Zamknij STR_AI_SETTINGS_RESET :{BLACK}Resetuj STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index ae9c5c9030..6e74d4e9c2 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -3079,7 +3079,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Dono da STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Dono da linha férrea: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autoridade local: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Nenhum -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordenadas: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Construído/renovado: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Tipo de estação: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de estação: {LTBLUE}{STRING} @@ -4844,8 +4843,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de Jogo STR_AI_SETTINGS_CLOSE :{BLACK}Fechar STR_AI_SETTINGS_RESET :{BLACK}Repor STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index f12ea93783..7d8eb8e41d 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -3076,7 +3076,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propriet STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Proprietar al căii ferate: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autoritatea locală: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Niciuna -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordonate: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Construit/renovat: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Clasa stației: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tip stație: {LTBLUE}{STRING} @@ -4841,8 +4840,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de joc STR_AI_SETTINGS_CLOSE :{BLACK}Închide STR_AI_SETTINGS_RESET :{BLACK}Resetează STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 5c75198128..96595c7823 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -3253,7 +3253,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Влад STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Владелец ж/д пути: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Администрация: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Нет -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Координаты: {LTBLUE}{NUM} × {NUM} × {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Построено/обновлено: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Класс станции: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Тип станции: {LTBLUE}{STRING} @@ -5030,8 +5029,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :игровых STR_AI_SETTINGS_CLOSE :{BLACK}Закрыть STR_AI_SETTINGS_RESET :{BLACK}Сброс STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index c8f6b7faf9..de7b981f10 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -3217,7 +3217,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Vlasnik STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Vlasnik železničke pruge: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Lokalna vlast: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Nema -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinate: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Sagrađeno: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Klasa stanice: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Vrsta stanice: {LTBLUE}{STRING} @@ -4957,8 +4956,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Skripta igre STR_AI_SETTINGS_CLOSE :{BLACK}Zatvori STR_AI_SETTINGS_RESET :{BLACK}Poništi STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 1b178c548f..0bd6d9d2c9 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -3078,7 +3078,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}有轨 STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}铁路归属:{LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}地方政府:{LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :没有 -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}坐标: {LTBLUE}{NUM} × {NUM} × {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}建造/翻新于:{LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}车站分类: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}车站类型: {LTBLUE}{STRING} @@ -4843,8 +4842,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :游戏脚本 STR_AI_SETTINGS_CLOSE :{BLACK}关闭 STR_AI_SETTINGS_RESET :{BLACK}重设 STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}:{ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index db791016cd..bbb6c4b273 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -317,8 +317,13 @@ STR_UNITS_HEIGHT_METRIC :{DECIMAL} m STR_UNITS_HEIGHT_SI :{DECIMAL} m # Time units used in string control characters +STR_UNITS_DAYS :{COMMA}{NBSP}{P deň dni dní} +STR_UNITS_SECONDS :{COMMA}{NBSP}sek{P 0 "unda" "undy" "únd"} +STR_UNITS_MONTHS :{NUM}{NBSP}mesiac{P "" "e" "ov"} +STR_UNITS_MINUTES :{NUM}{NBSP}{P minúta minút minút} +STR_UNITS_PERIODS :{NUM}{NBSP}{P obdobie obdobia období} # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filter: @@ -971,8 +976,13 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Nastavi STR_GAME_OPTIONS_CAPTION :{WHITE}Možnosti hry STR_GAME_OPTIONS_TAB_GENERAL :Všeobecné +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Vyberte všeobecné nastavenia STR_GAME_OPTIONS_TAB_GRAPHICS :Grafika +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Vyberte nastavenia grafiky STR_GAME_OPTIONS_TAB_SOUND :Zvuk +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Vyberte nastavenia zvuku a hudby +STR_GAME_OPTIONS_TAB_SOCIAL :Sociálne +STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}Vyberte nastavenia sociálnej integrácie STR_GAME_OPTIONS_VOLUME :Hlasitosť STR_GAME_OPTIONS_SFX_VOLUME :Zvukové efekty @@ -1102,8 +1112,15 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Základn STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Výber sady hudby, ktorá má byť použitá STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Dodatočné informácie o základnej sade hudby +STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(žiadne nainštalované doplnky na integráciu so sociálnymi platformami) +STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :Platforma: +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Stav pluginu: +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_FAILED :{RED}Nepodarilo sa inicializovať +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_PLATFORM_NOT_RUNNING :{ORANGE}{STRING} nebeží +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :{RED}Duplicitný doplnok +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Neplatný podpis STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Nepodarilo sa načítať zoznam podporovaných rozlíšení @@ -1391,9 +1408,11 @@ STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Vpravo ###length 2 STR_CONFIG_SETTING_SHOWFINANCES :Zobraziť rozpočet na konci roku: {STRING} +STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Zobraziť rozpočet na konci obdobia: {STRING} ###length 2 STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Ak zapnuté, okno s financiami sa ukáže na konci každého roku a umožňuje tak rýchly náhľad na stav financií spoločnosti. +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Ak zapnuté, okno s financiami sa ukáže na konci každého obdobia a umožňuje tak rýchly náhľad na stav financií spoločnosti. STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Nové príkazy sú štandardne 'nonstop': {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normálne, vlak vždy zastaví v každej stanici cez ktorú prechádza. Povolením tohoto nastavenia, vlak bude pokračovať cez všetky stanice ktoré má v ceste až do svojej cieľovej stanice. Uvedomte si to, že toto nastavenie definuje "pôvodné" nastavenie LEN pre nové trasy. Samostatne zadávané cesty môžu byť nastavené aj inak. @@ -1799,6 +1818,8 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :vypnuté STR_CONFIG_SETTING_NOSERVICE :Vypnúť servisy, ak sú vypnuté poruchy: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Ak je zapnuté, vozidlá nebudú servisované ak sú vypnuté poruchy. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Pokuta za rýchlosť nakládky pre vlaky, ktoré sú dlhšie ako stanica: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Keď je táto možnosť povolená, vlaky, ktoré sú pre stanicu príliš dlhé, nakladajú pomalšie ako vlak, ktorý sa do stanice zmestí. Toto nastavenie neovplyvňuje hľadanie cesty. STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Obmedzenie rýchlosti pre vagóny: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Ak je zapnuté, použijú sa tiež rýchlostné obmedzenia pre vagóny na obmedzenie celkovej rýchlosti vlakov. @@ -2303,6 +2324,9 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Veľkos STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Veľkosť mapy v hre{}Klikni pre triedenie podľa rozlohy STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Dátum STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Aktuálny dátum +STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}h {NUM}m +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}Hrací čas +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}Hrací čas, keď hra{}nebola pozastavená STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Jazyk, verzia serveru, atd. STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Vyberte hru zo zoznamu @@ -2318,6 +2342,7 @@ STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Adresa STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Kód pozvánky: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Počiatočný dátum: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Aktuálny dátum: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Hrací čas: {WHITE}{NUM}h {NUM}m STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Herný skript: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Heslo: STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERVER JE OFFLINE @@ -2678,6 +2703,8 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Nezvýra STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Zobraziť oblasť pokrytia stavanej plochy STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Prijíma: {GOLD}{CARGO_LIST} STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Dodáva: {GOLD}{CARGO_LIST} +STR_STATION_BUILD_INFRASTRUCTURE_COST_YEAR :{BLACK}Výdavky na údržbu: {GOLD}{CURRENCY_SHORT}/year +STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}Výdavky na údržbu: {GOLD}{CURRENCY_SHORT}/period # Join station window STR_JOIN_STATION_CAPTION :{WHITE}Spojiť stanicu @@ -2988,7 +3015,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Vlastní STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Vlastník železnice: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Miestna správa: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Neznáme -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Súradnice: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Postavené: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Trieda stanice: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Typ stanice: {LTBLUE}{STRING} @@ -3907,7 +3933,9 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Odstrániť vš STR_GROUP_RENAME_CAPTION :{BLACK}Premenovať skupinu STR_GROUP_PROFIT_THIS_YEAR :Zisk v tomto roku: +STR_GROUP_PROFIT_THIS_PERIOD :Zisk za toto obdobie: STR_GROUP_PROFIT_LAST_YEAR :Zisk v minulom roku: +STR_GROUP_PROFIT_LAST_PERIOD :Zisk za posledné obdobie: STR_GROUP_OCCUPANCY :Súčasné využitie: STR_GROUP_OCCUPANCY_VALUE :{NUM}% @@ -4243,7 +4271,7 @@ STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}Smeruje STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Bez určenia, {VELOCITY} STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Smeruje do {WAYPOINT}, {VELOCITY} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Smeruje do {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Servis v {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Servis v {0:DEPOT} STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}Nedokáže sa dostať do {STATION}, {VELOCITY} STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}Nedokáže sa dostať do {WAYPOINT}, {VELOCITY} diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index f8c88f8f92..608f5fc458 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -2773,7 +2773,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Lastnik STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Lastnik železnice: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Lokalna oblast: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Brez -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinate: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Zgrajeno: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Razred postaje: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Vrsta postaje: {LTBLUE}{STRING} diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index e55b251bad..3f4c6c00b0 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -3079,7 +3079,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propieta STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Propietario del ferrocarril: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autoridad local: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ninguna -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordenadas: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Construido/renovado: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Clase de estación: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de estación: {LTBLUE}{STRING} @@ -4844,8 +4843,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de juego STR_AI_SETTINGS_CLOSE :{BLACK}Cerrar STR_AI_SETTINGS_RESET :{BLACK}Reiniciar STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index b689918406..8140cf8520 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2999,7 +2999,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propieta STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Propietario del ferrocarril: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Ayuntamiento: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ninguno -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordenadas: {LTBLUE}{NUM}×{NUM}×{NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Construido: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Clase de estación: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de estación: {LTBLUE}{STRING} diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index e8be900ac5..a47b9a495c 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -3078,7 +3078,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Spårvä STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Järnvägens ägare: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Lokala myndigheter: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ingen -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinater: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Byggd/renoverad: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stationsklass: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stationstyp: {LTBLUE}{STRING} @@ -4843,8 +4842,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spelskript STR_AI_SETTINGS_CLOSE :{BLACK}Stäng STR_AI_SETTINGS_RESET :{BLACK}Återställ STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 411091bb9a..fbbd956a09 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -2797,7 +2797,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}ட் STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}இரயில்வே உரிமையாளர்: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}நகராட்சி: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :ஒன்றுமில்லை -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}அச்சுத் தூரங்கள்: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}கட்டப்பட்டது/புதுப்பிக்கப்பட்டது: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}நிலையத்தின் பிரிவு: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}நிலையத்தின் வகை: {LTBLUE}{STRING} @@ -4422,8 +4421,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :விளைய STR_AI_SETTINGS_CLOSE :{BLACK}மூடு STR_AI_SETTINGS_RESET :{BLACK}முன்னிருந்தமாதிரி மாற்று STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/thai.txt b/src/lang/thai.txt index bc4ec29aae..b0da5ed04f 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -2670,7 +2670,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}ผู STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}ผู้ครอบครองทางรถไฟ: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}ขึ้นตรงกับผู้ดูแลในท้องถิ่น: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :ไม่มี -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}ตำแหน่ง: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}สร้างเมื่อ: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}ประเภทของสถานี: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}รูปแบบของสถานี: {LTBLUE}{STRING} diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index ff65d6e4d7..ac75db1024 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -2943,7 +2943,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}電車 STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}鐵路所有者:{LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}地方政府:{LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :無 -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}座標:{LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}建於:{LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}車站風格:{LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}車站種類:{LTBLUE}{STRING} diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 5a68161693..262f9668d7 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -3077,7 +3077,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Tramvay STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Demiryolu sahibi: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Belediyesi: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Hiçbiri -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinatlar: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}İnşa/yenileme tarihi: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}İstasyon sınıfı: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}İstasyon türü: {LTBLUE}{STRING} @@ -4842,8 +4841,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Oyun Betiği STR_AI_SETTINGS_CLOSE :{BLACK}Kapat STR_AI_SETTINGS_RESET :{BLACK}Yeniden başlat STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index fb9068f0b4..8246e7543e 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -2342,12 +2342,14 @@ STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Пока STR_LIVERY_SHIP_TOOLTIP :{BLACK}Показати фарбування кораблів STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Показати фарбування авіації STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Показати кольори груп поїздів +STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Показати кольори груп дорожнього транспорту STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Показати кольори груп кораблів STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Показати кольори груп повітряних апаратів STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Оберіть основний колір для обраної схеми. Ctrl+клац мишею встановить обраний колір для всіх схем STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Оберіть другорядний колір для обраної схеми. Ctrl+клац мишею встановить обраний колір для всіх схем STR_LIVERY_PANEL_TOOLTIP :{BLACK}Оберіть кольорову схему для зміни, чи декілька з Ctrl+клац мишею. Клацніть на прямокутнику, щоб ввімкнути/вимкнути використання схем STR_LIVERY_TRAIN_GROUP_EMPTY :Кольори груп поїздів відсутні +STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Не налаштовано груп дорожнього транспорту STR_LIVERY_SHIP_GROUP_EMPTY :Групи корабілв не налаштовано ###length 23 @@ -3152,7 +3154,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Влас STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Власник залізниці: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Місцева влада: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Немає -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Координати: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Рік випуску: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Клас станції: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Тип станції: {LTBLUE}{STRING} @@ -4495,6 +4496,7 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Вага STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Дохід цього року: {LTBLUE}{CURRENCY_LONG} (торік: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Дохід цього року: {LTBLUE}{CURRENCY_LONG} (минулого року: {CURRENCY_LONG}) {BLACK}Найгірше: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Прибуток цього періоду: {LTBLUE}{CURRENCY_LONG} (минулого періоду: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Прибуток цього періоду: {LTBLUE}{CURRENCY_LONG} (минулого періоду: {CURRENCY_LONG}) {BLACK}Питома потужність: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Надійність: {LTBLUE}{COMMA}% {BLACK}Аварії після останнього техогляду: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Побудований: {LTBLUE}{NUM}{BLACK} Вартість: {LTBLUE}{CURRENCY_LONG} @@ -4900,8 +4902,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Ігровий STR_AI_SETTINGS_CLOSE :{BLACK}Закрити STR_AI_SETTINGS_RESET :{BLACK}Скидання STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window @@ -4912,8 +4912,11 @@ STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Крок STR_TEXTFILE_WRAP_TEXT :{WHITE}Розмістити текст STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Розмістити текст у вікні без необхідності прокрутки STR_TEXTFILE_VIEW_README :{BLACK}Інструкція +STR_TEXTFILE_VIEW_README_TOOLTIP :Показати довідку вмісту STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Зміни +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Показати зміни вмісту STR_TEXTFILE_VIEW_LICENCE :{BLACK}Ліцензія +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Показати ліцензію вмісту ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}Документація до {STRING} {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Зміни в {STRING} {STRING} diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 6fb8118435..1930df83a9 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -3076,7 +3076,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Chủ đ STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Chủ đường ray: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Thuộc về địa phương: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Không -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Toạ độ: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Xây/tân trang ngày: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Loại ga,bến: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Kiểu ga,bến: {LTBLUE}{STRING} @@ -4841,8 +4840,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script STR_AI_SETTINGS_CLOSE :{BLACK}Đóng STR_AI_SETTINGS_RESET :{BLACK}Thiết Lập Lại STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] -STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index a04f058b5f..23c218239f 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -2830,7 +2830,6 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Perchenn STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Perchennog rheilffordd: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Awdurdod Lleol: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Dim -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Cyfeirnodau: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Adeiladwyd/adnewyddwyd: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Dosbarth gorsaf: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Math gorsaf: {LTBLUE}{STRING} From ef40c5e24047ddce36068813f909f551725c0186 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Wed, 6 Mar 2024 21:16:07 +0100 Subject: [PATCH 056/695] Fix #12225, 977aba7: [Script] Missing AI:ResetConfig support for running AI config (#12226) --- src/ai/ai_core.cpp | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/ai/ai_core.cpp b/src/ai/ai_core.cpp index 660a6e138f..d1cc955395 100644 --- a/src/ai/ai_core.cpp +++ b/src/ai/ai_core.cpp @@ -214,25 +214,30 @@ if (!_settings_game.ai_config[c]->ResetInfo(true)) { Debug(script, 0, "After a reload, the AI by the name '{}' was no longer found, and removed from the list.", _settings_game.ai_config[c]->GetName()); _settings_game.ai_config[c]->Change(std::nullopt); - if (Company::IsValidAiID(c)) { - /* The code belonging to an already running AI was deleted. We can only do - * one thing here to keep everything sane and that is kill the AI. After - * killing the offending AI we start a random other one in it's place, just - * like what would happen if the AI was missing during loading. */ - AI::Stop(c); - AI::StartNew(c); - } - } else if (Company::IsValidAiID(c)) { - /* Update the reference in the Company struct. */ - Company::Get(c)->ai_info = _settings_game.ai_config[c]->GetInfo(); } } + if (_settings_newgame.ai_config[c] != nullptr && _settings_newgame.ai_config[c]->HasScript()) { if (!_settings_newgame.ai_config[c]->ResetInfo(false)) { Debug(script, 0, "After a reload, the AI by the name '{}' was no longer found, and removed from the list.", _settings_newgame.ai_config[c]->GetName()); _settings_newgame.ai_config[c]->Change(std::nullopt); } } + + if (Company::IsValidAiID(c) && Company::Get(c)->ai_config != nullptr) { + AIConfig *config = Company::Get(c)->ai_config.get(); + if (!config->ResetInfo(true)) { + /* The code belonging to an already running AI was deleted. We can only do + * one thing here to keep everything sane and that is kill the AI. After + * killing the offending AI we start a random other one in it's place, just + * like what would happen if the AI was missing during loading. */ + AI::Stop(c); + AI::StartNew(c); + } else { + /* Update the reference in the Company struct. */ + Company::Get(c)->ai_info = config->GetInfo(); + } + } } } From 8fb26612c0dadfa28fd8ee33cb2ec3d34ffa5d0a Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 7 Mar 2024 04:40:51 +0000 Subject: [PATCH 057/695] Update: Translations from eints english (au): 2 changes by krysclarke vietnamese: 1 change by KhoiCanDev estonian: 4 changes by RM87 russian: 8 changes by Ln-Wolf ukrainian: 27 changes by StepanIvasyn slovak: 34 changes by palsoft333 tamil: 41 changes by Aswn spanish: 4 changes by MontyMontana portuguese (brazilian): 72 changes by pasantoro polish: 3 changes by pAter-exe --- src/lang/brazilian_portuguese.txt | 142 +++++++++++++++--------------- src/lang/english_AU.txt | 2 + src/lang/estonian.txt | 8 +- src/lang/polish.txt | 4 +- src/lang/russian.txt | 14 +-- src/lang/slovak.txt | 34 +++++++ src/lang/spanish.txt | 6 +- src/lang/tamil.txt | 70 +++++++++------ src/lang/ukrainian.txt | 39 +++++--- src/lang/vietnamese.txt | 1 + 10 files changed, 196 insertions(+), 124 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index cde87b3dfa..d45b3f0646 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -503,7 +503,7 @@ STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construção de # Road construction menu STR_ROAD_MENU_ROAD_CONSTRUCTION :Construção de estrada -STR_ROAD_MENU_TRAM_CONSTRUCTION :Construção de linhas de bonde +STR_ROAD_MENU_TRAM_CONSTRUCTION :Construção de linha de bonde # Waterways construction menu STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construção de hidrovias @@ -1036,12 +1036,12 @@ STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Escolher STR_GAME_OPTIONS_RESOLUTION_OTHER :outra STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} -STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Aceleração de hardware -STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Marque esta caixa para permitir que o OpenTTD tente usar aceleração de hardware. Se modificada, esta configuração terá efeito somente após reiniciar o jogo +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Aceleração por hardware +STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Marque esta caixa para permitir que o OpenTTD tente usar aceleração por hardware. Se modificada, esta configuração terá efeito somente após reiniciar o jogo STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}A configuração terá efeito somente após reiniciar o jogo STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync -STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para ativar v-sync na tela. Se modificada, esta configuração terá efeito somente após reiniciar o jogo. Funciona somente com aceleração de hardware habilitada +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para ativar v-sync na tela. Se modificada, esta configuração terá efeito somente após reiniciar o jogo. Funciona somente com aceleração por hardware ativada STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Controlador atual: {STRING} @@ -1206,7 +1206,7 @@ STR_CITY_APPROVAL_TOLERANT :Tolerante STR_CITY_APPROVAL_HOSTILE :Hostil STR_CITY_APPROVAL_PERMISSIVE :Permissivo (sem efeito nas ações da empresa) -STR_WARNING_NO_SUITABLE_AI :{WHITE}Não existem IA's disponíveis...{}Você pode obter várias IA's usando o sistema de 'Conteúdo Online' +STR_WARNING_NO_SUITABLE_AI :{WHITE}Não existem IAs disponíveis...{}Você pode obter várias IAs usando o sistema de 'Conteúdo Online' # Settings tree window STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Configurações @@ -1287,7 +1287,7 @@ STR_CONFIG_SETTING_RUNNING_COSTS :Custos de Opera STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Configurar nível de manutenção e custos operacionais de veículos e infraestrutura STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Velocidade de construção: {STRING} -STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Limitar a quantidade ações de construção para IA's +STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Limitar a quantidade ações de construção para IAs STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Quebra de veículos: {STRING} STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Controla a frequência com a qual veículos com manutenção inadequada podem quebrar @@ -1314,7 +1314,7 @@ STR_CONFIG_SETTING_TRAIN_REVERSING :Desabilitar rev STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Se ativado, os trens não podem inverter a direção em estações não-terminais, mesmo se existir um caminho mais curto para o próximo destino com a inversão STR_CONFIG_SETTING_DISASTERS :Desastres: {STRING} -STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Ativa desastres que podem, ocasionalmente, bloquear ou destruir veículos ou infraestrutura +STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Ativar desastres que podem, ocasionalmente, bloquear ou destruir veículos ou infraestrutura STR_CONFIG_SETTING_CITY_APPROVAL :Atitude da autoridade local: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Define de que forma o ruído sonoro e os danos ambientais causados pelas empresas afetam a sua classificação na localidade e as futuras ações de construção na localidade @@ -1359,13 +1359,13 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Inclinação do STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Inclinação de um quadrado inclinado para um veículo rodoviário. Valores grandes tornam mais difícil para um veículo subir uma colina STR_CONFIG_SETTING_FORBID_90_DEG :Proibir trens de fazer curvas de 90 graus: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas em 90 graus ocorrem quando uma via horizontal é seguida imediatamente por outra vertical em um quadrado adjacente, fazendo com que o trem vire 90 graus quando passa de um quadrado para o próximo, ao invés dos habituais 45 graus para as outras combinações de vias. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas de 90 graus ocorrem quando uma pista horizontal é seguida diretamente por outra vertical em um quadrado adjacente, fazendo com que o trem vire 90 graus quando passa de um quadrado para o próximo, ao invés dos habituais 45 graus para outras combinações de pistas. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permitir a união de estações não adjacentes: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite acrescentar partes a uma estação sem tocar diretamente nas partes já existentes, usando Ctrl+Clique enquanto coloca as novas partes STR_CONFIG_SETTING_INFLATION :Inflação: {STRING} -STR_CONFIG_SETTING_INFLATION_HELPTEXT :Permitir inflação na economia, na qual os custos aumentam ligeiramente mais depressa do que as receitas +STR_CONFIG_SETTING_INFLATION_HELPTEXT :Permitir inflação na economia, na qual os custos aumentam ligeiramente mais rápido do que os pagamentos STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Comprimento máximo de pontes: {STRING} STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Comprimento máximo para construção de pontes @@ -1404,7 +1404,7 @@ STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Mostrar janela STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Se ativado, a janela de finanças é exibida no fim de cada ano, permitindo uma inspeção fácil do estado financeiro da empresa STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Se ativado, a janela de finanças é exibida no fim de cada período, permitindo uma inspeção fácil do estado financeiro da empresa -STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Novas ordens são 'sem parar' por padrão: {STRING} +STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Novas ordens, por padrão, são 'sem parar' : {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalmente, um veículo irá parar em cada estação por onde passa. Ativando esta configuração, o veículo passará por todas as estações na sua rota, sem parar, até o destino final. Esta opção define somente um modo padrão para novas ordens. Ordens individuais podem ser definidas explicitamente para qualquer um dos dois comportamentos STR_CONFIG_SETTING_STOP_LOCATION :Novas ordens de trem, por padrão, têm parada no {STRING} da plataforma @@ -1455,7 +1455,7 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Nenhum STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reduzido STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal -STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Permitir passagens de nível com estradas ou trilhos dos concorrentes: {STRING} +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Permitir passagens de nível em estradas ou trilhos dos concorrentes: {STRING} STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Permitir a construção de passagens de nível nas estradas ou trilhos que pertencem aos concorrentes STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permitir estações de passagem nas estradas das localidades: {STRING} @@ -1495,13 +1495,13 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Veículos nunca STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Quando ativado, todos os modelos de veículos permanecerão disponíveis para sempre após a sua introdução STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Unidades de tempo: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Escolher as unidades de tempo para o jogo. Isto não pode ser alterado posteriormente.{}{}O modo clássico no OpenTTD é baseado em um calendário, em que um ano é composto de 12 meses e cada mês tem 28-31 dias.{}{}No tempo baseado no relógio de parede, a produção de carga e as finanças são baseadas em incrementos de um minuto, que tem aproximadamente a mesma duração de um mês de 30 dias no modo baseado em calendário. Esses incrementos são agrupados em períodos de 12 minutos, equivalentes a um ano no modo baseado em calendário.{}{}Nos dois modos, há sempre um calendário clássico, que é usado para datas de introdução de veículos, casas e outras infraestruturas. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Escolher as unidades de tempo para o jogo. Isto não pode ser alterado posteriormente.{}{}O modo clássico no OpenTTD é baseado em um calendário, em que um ano é composto de 12 meses e cada mês tem 28-31 dias.{}{}No tempo baseado em relógio de parede, a produção de carga e as finanças são baseadas em incrementos de um minuto, que tem aproximadamente a mesma duração de um mês de 30 dias no modo baseado em calendário. Esses incrementos são agrupados em períodos de 12 minutos, equivalentes a um ano no modo baseado em calendário.{}{}Nos dois modos, há sempre um calendário clássico, que é usado para datas de introdução de veículos, casas e outras infraestruturas. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendário STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Relógio de parede STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutos por ano: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Escolher o número de minutos para o ano do calendário. O padrão é 12 minutos. Defina como 0 para o tempo do calendário não mudar. Essa configuração não afeta a simulação econômica do jogo e só está disponível quando o tempo é baseado no relógio de parede. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Escolher o número de minutos para o ano do calendário. O padrão é 12 minutos. Defina como 0 para o tempo do calendário não mudar. Essa configuração não afeta a simulação econômica do jogo e só está disponível quando o tempo é baseado em relógio de parede. STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special @@ -1546,7 +1546,7 @@ STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as carg STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Se ativado, a carga transportável pelo veículo aparecerá acima dele nas listas de veículos STR_CONFIG_SETTING_LANDSCAPE :Clima: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os climas definem a jogabilidade básica com diferentes cargas e requerimentos para o crescimento das localidades. NewGRF's e Scripts de Jogo permitem um controle mais fino +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os climas definem a jogabilidade básica com diferentes cargas e requerimentos para o crescimento das localidades. NewGRFs e Scripts de Jogo permitem um controle mais fino STR_CONFIG_SETTING_LAND_GENERATOR :Gerador de Terreno: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :O gerador 'Original' depende do conjunto gráfico base e produz formas de terreno pré-definidas. 'TerraGenesis' é um gerador baseado no algoritmo de ruído de Perlin com definições mais refinadas @@ -1643,7 +1643,7 @@ STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Comportamento a STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Mover visualização com Botão Direito Mouse, posição do mouse travada STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Mover mapa com Botão Direito Mouse, posição do mouse travada STR_CONFIG_SETTING_SCROLLMODE_RMB :Mover mapa com Botão Direito Mouse -STR_CONFIG_SETTING_SCROLLMODE_LMB :Move mapa com Botão Esquerdo Mouse +STR_CONFIG_SETTING_SCROLLMODE_LMB :Mover mapa com Botão Esquerdo Mouse STR_CONFIG_SETTING_SMOOTH_SCROLLING :Suavizar deslocamento da visualização: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla como a visualização principal se move para uma localização específica ao clicar no minimapa ou quando é dado um comando para ir até um objeto específico no mapa. Se ativado, a visualização se move suavemente, se desativado a visualização salta diretamente para o ponto escolhido @@ -1654,7 +1654,7 @@ STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Mostrar distân STR_CONFIG_SETTING_LIVERIES :Mostrar pinturas específicas do tipo de veículo: {STRING} STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Controla a utilização de pinturas específicas por tipo de veículo (em vez de pinturas por empresa) ###length 3 -STR_CONFIG_SETTING_LIVERIES_NONE :Nenhum +STR_CONFIG_SETTING_LIVERIES_NONE :Nenhuma STR_CONFIG_SETTING_LIVERIES_OWN :Própria empresa STR_CONFIG_SETTING_LIVERIES_ALL :Todas as empresas @@ -1714,8 +1714,8 @@ STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Durante uma pau STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Escolher quais ações podem ser executadas com o jogo pausado ###length 4 STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Nenhuma ação -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Todas as ações exceto construção -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Todas as ações exceto modificações de terreno +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Todas as ações, exceto construção +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Todas as ações, exceto modificações de terreno STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Todas as ações STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Usar grupos na lista de veículos: {STRING} @@ -1812,7 +1812,7 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Quando ativada, STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desativar embarcações para o computador: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Quando ativada, esta configuração não permite a construção de embarcações por um competidor controlado por IA -STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permitir IA's em multijogador: {STRING} +STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permitir IAs em multijogador: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite que competidores controlados por IA participem de jogos multijogador STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes antes de scripts serem suspensos: {STRING} @@ -2040,7 +2040,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" si STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modo de distribuição para correspondências: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simétrico" significa que aproximadamente a mesma quantidade de correspondência será enviada de uma estação A para uma estação B, assim como de B para A. "Assimétrica" significa que quantidades arbitrárias de correspondência podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática de correspondências. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Modo de distribuição para a classe de carga BLINDADA: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe de carga BLINDADA contém objetos de valor em clima temperado, diamantes em clima subtropical ou ouro em clima subártico. NewGRF's podem modificar isso. "Simétrica" significa que aproximadamente a mesma quantidade dessa carga será enviada de uma estação A para uma estação B, assim como de B para A. "Assimétrica" significa que quantidades arbitrárias dessa carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática para aquela carga. Recomenda-se definir isso como assimétrico ou manual ao jogar subártico ou subtropical, pois os bancos só recebem carga nesses climas. Para temperado, você também pode escolher simétrico, pois os bancos enviarão objetos de valor de volta ao banco de origem. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe de carga BLINDADA contém objetos de valor em clima temperado, diamantes em clima subtropical ou ouro em clima subártico. NewGRFs podem modificar isso. "Simétrica" significa que aproximadamente a mesma quantidade dessa carga será enviada de uma estação A para uma estação B, assim como de B para A. "Assimétrica" significa que quantidades arbitrárias dessa carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática para aquela carga. Recomenda-se definir isso como assimétrico ou manual ao jogar subártico ou subtropical, pois os bancos só recebem carga nesses climas. Para temperado, você também pode escolher simétrico, pois os bancos enviarão objetos de valor de volta ao banco de origem. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Modo de distribuição para outras classes de carga: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Assimétrico" significa que quantidades arbitrárias de carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática dessas cargas. ###length 3 @@ -2164,11 +2164,11 @@ STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... igno STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ignorando conjunto de Sons Base '{STRING}': não encontrado STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ignorando conjunto de Músicas Base '{STRING}': não encontrado STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Memória insuficiente -STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Falha ao alocar {BYTES} de memória para sprites. A reserva de memória para sprites foi reduzida para {BYTES}. Isto irá reduzir o desempenho do OpenTTD. Para diminuir os requisitos de memória você pode desabilitar gráficos de 32bpp e/ou diminuir os níveis de ampliação das visualizações +STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Falha ao alocar {BYTES} de memória para sprites. A memória reservada para sprites foi reduzida para {BYTES}. Isto irá reduzir o desempenho do OpenTTD. Para diminuir os requisitos de memória você pode desabilitar gráficos de 32bpp e/ou diminuir os níveis de ampliação das visualizações # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Erro nas configurações de vídeo... -STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... nenhuma GPU compatível encontrada. Aceleração de hardware desativada +STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... nenhuma GPU compatível encontrada. Aceleração por hardware desativada STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... O driver gráfico (GPU) travou o jogo. Aceleração por hardware desativada # Intro window @@ -2186,7 +2186,7 @@ STR_INTRO_HIGHSCORE :{BLACK}Tabela d STR_INTRO_HELP :{BLACK}Ajuda & Manuais STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Configurações STR_INTRO_NEWGRF_SETTINGS :{BLACK}Configurações de NewGRF -STR_INTRO_ONLINE_CONTENT :{BLACK}Verificar conteúdo online +STR_INTRO_ONLINE_CONTENT :{BLACK}Verificar Conteúdo Online STR_INTRO_AI_SETTINGS :{BLACK}Configurações de IA STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Configurações de Script de Jogo STR_INTRO_QUIT :{BLACK}Sair @@ -2268,7 +2268,7 @@ STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Mostrar STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Mostrar cores dos grupos de aeronaves STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Escolher a cor principal para o esquema selecionado. Ctrl+Clique para definir esta cor para todos os esquemas STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Escolher a cor secundária para o esquema selecionado. Ctrl+Clique para definir esta cor para todos os esquemas -STR_LIVERY_PANEL_TOOLTIP :{BLACK}Selecionar o esquema de cores a alterar ou esquemas múltiplos utilizando Ctrl+Clique. Clique na opção para usar o esquema de cores +STR_LIVERY_PANEL_TOOLTIP :{BLACK}Selecionar o esquema de cores a alterar, ou esquemas múltiplos,- utilizando Ctrl+Clique. Clique na caixa para usar o esquema de cores STR_LIVERY_TRAIN_GROUP_EMPTY :Não há grupos de trens configurados STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Não há grupos de veículos configurados STR_LIVERY_SHIP_GROUP_EMPTY :Não há grupos de embarcações configurados @@ -2321,7 +2321,7 @@ STR_FACE_LOAD_DONE :{WHITE}Sua face STR_FACE_FACECODE :{BLACK}Número da face do jogador STR_FACE_FACECODE_TOOLTIP :{BLACK}Ver e/ou definir o número de face do presidente da empresa STR_FACE_FACECODE_CAPTION :{WHITE}Ver e/ou definir número de face do presidente -STR_FACE_FACECODE_SET :{WHITE}Um novo código numérico de face foi definido +STR_FACE_FACECODE_SET :{WHITE}Novo código de número de face foi definido STR_FACE_FACECODE_ERR :{WHITE}Não foi possível alterar o número de face do presidente - deve ser um número entre 0 e 4,294,967,295! STR_FACE_SAVE :{BLACK}Salvar STR_FACE_SAVE_TOOLTIP :{BLACK}Salvar face favorita @@ -2451,7 +2451,7 @@ STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES} ###length 8 STR_NETWORK_CONNECTING_1 :{BLACK}(1/6) Conectando... STR_NETWORK_CONNECTING_2 :{BLACK}(2/6) Autorizando... -STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) Esperando... +STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) Aguardando... STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) Obtendo mapa... STR_NETWORK_CONNECTING_5 :{BLACK}(5/6) Processando dados... STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Registrando... @@ -2571,7 +2571,7 @@ STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Não foi STR_NETWORK_ERROR_SERVER_START :{WHITE}Não foi possível iniciar o servidor STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Ocorreu um erro de protocolo e a conexão foi encerrada STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Seu nome de jogador não foi definido. O nome pode ser definido no topo da janela de Multijogador -STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Seu nome de servidor não foi definido. O nome pode ser definido no topo da janela de Multijogador +STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}O nome do seu servidor não foi definido. O nome pode ser definido no topo da janela de Multijogador STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}A versão deste cliente é incompatível com a versão do servidor STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Senha incorreta STR_NETWORK_ERROR_SERVER_FULL :{WHITE}O servidor está cheio @@ -2696,13 +2696,13 @@ STR_CONTENT_NO_ZLIB_SUB :{WHITE}... não STR_CONTENT_TYPE_BASE_GRAPHICS :Gráficos base STR_CONTENT_TYPE_NEWGRF :NewGRF STR_CONTENT_TYPE_AI :IA -STR_CONTENT_TYPE_AI_LIBRARY :Biblioteca de IA's +STR_CONTENT_TYPE_AI_LIBRARY :Biblioteca de IA STR_CONTENT_TYPE_SCENARIO :Cenário STR_CONTENT_TYPE_HEIGHTMAP :Mapa topográfico STR_CONTENT_TYPE_BASE_SOUNDS :Sons base STR_CONTENT_TYPE_BASE_MUSIC :Músicas base STR_CONTENT_TYPE_GAME_SCRIPT :Script de jogo -STR_CONTENT_TYPE_GS_LIBRARY :Biblioteca de GS's +STR_CONTENT_TYPE_GS_LIBRARY :Biblioteca de GS # Content downloading progress window STR_CONTENT_DOWNLOAD_TITLE :{WHITE}Baixando conteúdo... @@ -2728,15 +2728,15 @@ STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Sair do # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Opções de Transparência -STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Ativar transparência dos sinais. Ctrl+Clique para travar -STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Ativar transparência das árvores. Ctrl+Clique para travar -STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Ativar transparência das casas. Ctrl+Clique para travar -STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Ativar transparência das indústrias. Ctrl+Clique para travar -STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Ativar transparência das construções como estações, depósitos e pontos de controle. Ctrl+Clique para travar -STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Ativar transparência das pontes. Ctrl+Clique para travar -STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Ativar transparência para estruturas como faróis e antenas. Ctrl+Clique para travar -STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Ativar transparência para catenária. Ctrl+Clique para travar -STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Ativar transparência do texto de carregamento e custo/receita. Ctrl+Clique para travar +STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Ativar/Desativar transparência das placas. Ctrl+Clique para travar +STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Ativar/Desativar transparência das árvores. Ctrl+Clique para travar +STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Ativar/Desativar transparência das casas. Ctrl+Clique para travar +STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Ativar/Desativar transparência das indústrias. Ctrl+Clique para travar +STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Ativar/Desativar transparência das construções como estações, depósitos e pontos de controle. Ctrl+Clique para travar +STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Ativar/Desativar transparência das pontes. Ctrl+Clique para travar +STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Ativar/Desativar transparência das estruturas como faróis e antenas. Ctrl+Clique para travar +STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Ativar/Desativar transparência da catenária. Ctrl+Clique para travar +STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Ativar/Desativar transparência dos textos de carregamento e custo/receita. Ctrl+Clique para travar STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Definir objetos como invisíveis ao invés de transparentes # Linkgraph legend window @@ -2833,13 +2833,13 @@ STR_BUILD_SIGNAL_CAPTION :{WHITE}Seleçã STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Mostrar/Ocultar tipos de sinais avançados STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Sinal de Bloqueio (semáforo){}Este é o tipo mais básico de sinal, permitindo que somente um trem esteja na mesma seção ao mesmo tempo STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Sinal de Entrada (semáforo){}Permanece verde enquanto existir um ou mais sinais de saída verdes na seção seguinte da linha. Caso contrário, ficará vermelho -STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Sinal de Saída (semáforo){}Funciona da mesma forma que o sinal de bloqueio, mas é necessário para ativar a cor correta nos pré-sinais de entrada e combinado. +STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Sinal de Saída (semáforo){}Funciona do mesmo modo que o sinal de bloqueio, mas é necessário para ativar a cor correta nos pré-sinais de entrada e combinado. STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Sinal Combinado (semáforo){}O sinal combinado funciona simultaneamente como um sinal de entrada e de saída. Isto permite a construção de ramificações complexas de pré-sinais. STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Sinal de Caminho (semáforo){}Um sinal de caminho que permite mais de um trem entrar em uma seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Sinais de caminho padrões podem ser passados no sentido contrário STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Sinal de Sentido Único(semáforo){}Um sinal de caminho que permite mais de um trem entrar em uma seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Os sinais de sentido único não podem ser passados no sentido contrário STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Sinal de Bloqueio (elétrico){}Este é o tipo mais básico de sinal, permitindo que somente um trem esteja na mesma seção ao mesmo tempo STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Sinal de Entrada (elétrico){}Permanece verde enquanto existir um ou mais sinais de saída verdes na seção seguinte da linha. Caso contrário, ficará vermelho. -STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Sinal de Saída (elétrico){}Funciona da mesma forma que o sinal de bloqueio, mas é necessário para ativar a cor correta nos pré-sinais de entrada e combinado. +STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Sinal de Saída (elétrico){}Funciona do mesmo modo que o sinal de bloqueio, mas é necessário para ativar a cor correta nos pré-sinais de entrada e combinado. STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Sinal Combinado (elétrico){}O sinal combinado funciona simultaneamente como um sinal de entrada e de saída. Isto permite construir ramificações complexas de pré-sinais. STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Sinal de Caminho (elétrico){}Um sinal de caminho que permite mais de um trem entrar em uma seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Sinais de caminho padrões podem ser passados no sentido contrário STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Sinal de Sentido Único (elétrico){}Um sinal de caminho que permite mais de um trem entrar em uma seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Os sinais de sentido único não podem ser passados no sentido contrário @@ -2884,7 +2884,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Construi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Construir ponte para bondes. Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Construir túnel rodoviário. Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Construir túnel para bondes. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Construir/Remover estradas +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Construir/Remover estrada STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Construir/Remover linhas de bonde STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Converter/Atualizar o tipo de estrada. Pressione também Shift para apenas mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Converter/Atualizar o tipo de bonde. Pressione também Shift para apenas mostrar o custo estimado @@ -3079,6 +3079,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propriet STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Proprietário da ferrovia: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autoridade local: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Nenhum +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordenadas: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Índice do quadrado: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Construído/renovado: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Classe da estação: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de estação: {LTBLUE}{STRING} @@ -3139,7 +3141,7 @@ STR_LAI_ROAD_DESCRIPTION_TRAMWAY :Linha de bonde STR_LAI_TOWN_INDUSTRY_DESCRIPTION_UNDER_CONSTRUCTION :{STRING} (em construção) STR_LAI_TREE_NAME_TREES :Árvores -STR_LAI_TREE_NAME_RAINFOREST :Floresta Tropical +STR_LAI_TREE_NAME_RAINFOREST :Floresta tropical STR_LAI_TREE_NAME_CACTUS_PLANTS :Plantas de cactos STR_LAI_STATION_DESCRIPTION_RAILROAD_STATION :Estação ferroviária @@ -3426,8 +3428,8 @@ STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Uma list STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Definir parâmetros STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}Mostrar parâmetros -STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Alternar paleta -STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Ativar/Desativar a paleta de NewGRF selecionado.{}Faça isso quando os gráficos deste NewGRF ficarem cor de rosa no jogo +STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Ativar/Desativar paleta +STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Ativar/Desativar a paleta do NewGRF selecionado.{}Faça isso quando os gráficos deste NewGRF ficarem cor de rosa no jogo STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Aplicar modificações STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Procurar conteúdo que falta online @@ -3524,7 +3526,7 @@ STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} deve STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} deve ser carregado depois de {2:STRING} STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} requer OpenTTD versão {2:STRING} ou superior STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :o arquivo GRF que foi desenvolvido para traduzir -STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Foram carregados NewGRF's demais +STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Foram carregados NewGRFs demais STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Carregar {1:STRING} como NewGRF estático com {2:STRING} pode causar erro de sincronização STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Sprite inesperado (sprite {3:NUM}) STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Propriedade Action 0 desconhecida {4:HEX} (sprite {3:NUM}) @@ -3544,9 +3546,9 @@ STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Você e STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Não é possível adicionar arquivo: ID do GRF duplicado STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Arquivo correspondente não encontrado (GRF compatível carregado) -STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Não é possível adicionar arquivo: limite de NewGRF's atingido +STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Não é possível adicionar arquivo: limite de NewGRFs atingido -STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}GRF's compatíveis foram carregados para os arquivos que faltam +STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}GRFs compatíveis foram carregados para os arquivos que faltam STR_NEWGRF_DISABLED_WARNING :{WHITE}Arquivos GRF ausentes foram desativados STR_NEWGRF_UNPAUSE_WARNING_TITLE :{YELLOW}Arquivos GRF em falta STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Sair da pausa pode travar o OpenTTD. Não envie relatórios de erros sobre travamentos subsequentes.{}Você quer mesmo continuar o jogo? @@ -3559,11 +3561,11 @@ STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}Foram e STR_NEWGRF_LIST_MISSING :{RED}Arquivos em falta # NewGRF 'it's broken' warnings -STR_NEWGRF_BROKEN :{WHITE}O comportamento de NewGRF '{0:STRING}' pode causar erros de sincronização e/ou travamentos +STR_NEWGRF_BROKEN :{WHITE}O comportamento do NewGRF '{0:STRING}' pode causar erros de sincronização e/ou travamentos STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}O estado do vagão motorizado mudou para '{1:ENGINE}' quando estiver fora do depósito STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}O comprimento do veículo mudou para '{1:ENGINE}' quando estiver fora do depósito STR_NEWGRF_BROKEN_CAPACITY :{WHITE}A capacidade do veículo mudou para '{1:ENGINE}' quando estiver fora do depósito ou em adaptação -STR_BROKEN_VEHICLE_LENGTH :{WHITE}O trem '{VEHICLE}' pertencente a '{COMPANY}' tem um comprimento inválido, possivelmente devido à problemas com NewGRF's. Podem ocorrer erros de sincronização ou travamento do jogo +STR_BROKEN_VEHICLE_LENGTH :{WHITE}O trem '{VEHICLE}' pertencente a '{COMPANY}' tem um comprimento inválido, possivelmente devido à problemas com NewGRFs. Podem ocorrer erros de sincronização ou travamento do jogo STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' fornece informação incorreta STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}A informação de carga/adaptação para '{1:ENGINE}' é diferente da lista de compra depois da construção. Isto pode fazer a renovação/substituição automática falhar se adaptar corretamente @@ -3582,15 +3584,15 @@ STR_NEWGRF_INVALID_INDUSTRYTYPE : # NewGRF scanning window -STR_NEWGRF_SCAN_CAPTION :{WHITE}Procurando NewGRF's -STR_NEWGRF_SCAN_MESSAGE :{BLACK}Procurando NewGRF's. Dependendo da quantidade isto pode demorar... +STR_NEWGRF_SCAN_CAPTION :{WHITE}Procurando NewGRFs +STR_NEWGRF_SCAN_MESSAGE :{BLACK}Procurando NewGRFs. Dependendo da quantidade isto pode demorar... STR_NEWGRF_SCAN_STATUS :{BLACK}{NUM} NewGRF{P "" s} procurado{P "" s} de {NUM} NewGRF{P "" s} estimado{P "" s} STR_NEWGRF_SCAN_ARCHIVES :Procurando por arquivos # Sign list window STR_SIGN_LIST_CAPTION :{WHITE}Lista de Placas - {COMMA} Placa{P "" s} STR_SIGN_LIST_MATCH_CASE :{BLACK}Diferenciar maiúsculas/minúsculas -STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Ativar correspondência de maiúsculas/minúsculas na comparação dos nomes com a sequência fornecida +STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Ativar/Desativar correspondência de maiúsculas/minúsculas na comparação dos nomes com a sequência fornecida # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Editar texto da placa @@ -4775,14 +4777,14 @@ STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Parar em STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Parar em STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Quando uma mensagem de registro da IA for igual a esta sequência, o jogo é pausado STR_AI_DEBUG_MATCH_CASE :{BLACK}Diferenciar maiúsculas/minúsculas -STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Ativar correspondência de maiúsculas/minúsculas na comparação das mensagens de registro da IA com a sequência de parada +STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Ativar/Desativar correspondência de maiúsculas/minúsculas na comparação das mensagens de registro da IA com a sequência de parada STR_AI_DEBUG_CONTINUE :{BLACK}Continuar STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Sair da pausa e continuar a IA STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Mostrar saída de depuração desta IA. Ctrl+Clique para abrir em uma nova janela STR_AI_GAME_SCRIPT :{BLACK}Script de jogo STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Verificar o registro do Script de Jogo. Ctrl+Clique para abrir em uma nova janela -STR_ERROR_AI_NO_AI_FOUND :Não foi encontrada IA adequada para carregar.{}Esta IA é um pacote vazio e não fará nada.{}Você pode obter várias IA's usando o sistema de 'Conteúdo Online' +STR_ERROR_AI_NO_AI_FOUND :Não foi encontrada IA adequada para carregar.{}Esta IA é um pacote vazio e não fará nada.{}Você pode obter várias IAs usando o sistema de 'Conteúdo Online' STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Um dos scripts em execução travou. Favor relatar isto ao autor do script com uma captura de tela da Janela de Depuração de IA/Script de Jogo STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}A janela de Depuração de IA/Script de Jogo está disponível somente para o servidor @@ -4790,7 +4792,7 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}A janel STR_AI_CONFIG_CAPTION_AI :{WHITE}Configurações de IA STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Configurações de Script de Jogo STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Script de Jogo que será carregado no próximo jogo -STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}IA's que serão carregadas no próximo jogo +STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}IAs que serão carregadas no próximo jogo STR_AI_CONFIG_HUMAN_PLAYER :Jogador humano STR_AI_CONFIG_RANDOM_AI :IA aleatória STR_AI_CONFIG_NONE :(nenhum) @@ -4805,7 +4807,7 @@ STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Mover a STR_AI_CONFIG_GAMESCRIPT :{SILVER}Script de Jogo STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Parâmetros -STR_AI_CONFIG_AI :{SILVER}IA's +STR_AI_CONFIG_AI :{SILVER}IAs STR_AI_CONFIG_CHANGE_AI :{BLACK}Selecionar IA STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Selecionar Script de Jogo @@ -4815,7 +4817,7 @@ STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configur # Available AIs window STR_AI_LIST_CAPTION :{WHITE}Disponíveis {STRING} -STR_AI_LIST_CAPTION_AI :IA's +STR_AI_LIST_CAPTION_AI :IAs STR_AI_LIST_CAPTION_GAMESCRIPT :Scripts de jogo STR_AI_LIST_TOOLTIP :{BLACK}Clique para selecionar um script @@ -5612,9 +5614,9 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_MAIL_TRUCK :Caminhão de Co STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_OIL_TANKER :Caminhão de Petróleo Witcombe STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_OIL_TANKER :Caminhão de Petróleo Foster STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_OIL_TANKER :Caminhão de Petróleo Perry -STR_VEHICLE_NAME_ROAD_VEHICLE_TALBOTT_LIVESTOCK_VAN :Furgão de Gado Talbott -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_LIVESTOCK_VAN :Furgão de Gado Uhl -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_LIVESTOCK_VAN :Furgão de Gado Foster +STR_VEHICLE_NAME_ROAD_VEHICLE_TALBOTT_LIVESTOCK_VAN :Caminhão de Gado Talbott +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_LIVESTOCK_VAN :Caminhão de Gado Uhl +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_LIVESTOCK_VAN :Caminhão de Gado Foster STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_GOODS_TRUCK :Caminhão de Bens Balogh STR_VEHICLE_NAME_ROAD_VEHICLE_CRAIGHEAD_GOODS_TRUCK :Caminhão de Bens Craighead STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GOODS_TRUCK :Caminhão de Bens Goss @@ -5633,9 +5635,9 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_STEEL_TRUCK :Caminhão de A STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_ARMORED_TRUCK :Caminhão Blindado Balogh STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_ARMORED_TRUCK :Caminhão Blindado Uhl STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_ARMORED_TRUCK :Caminhão Blindado Foster -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_FOOD_VAN :Furgão de Alimentos Foster -STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_FOOD_VAN :Furgão de Alimentos Perry -STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_FOOD_VAN :Furgão de Alimentos Chippy +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_FOOD_VAN :Caminhão de Alimentos Foster +STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_FOOD_VAN :Caminhão de Alimentos Perry +STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_FOOD_VAN :Caminhão de Alimentos Chippy STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_PAPER_TRUCK :Caminhão de Papel Uhl STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_PAPER_TRUCK :Caminhão de Papel Balogh STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_PAPER_TRUCK :Caminhão de Papel MPS @@ -5663,9 +5665,9 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COTTON_CANDY_TRUCK :Caminhão de Al STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOFFEE_TRUCK :Caminhão de Caramelo MightyMover STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOFFEE_TRUCK :Caminhão de Caramelo Powernaught STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOFFEE_TRUCK :Caminhão de Caramelo Wizzowow -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOY_VAN :Furgão de Brinquedos MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOY_VAN :Furgão de Brinquedos Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOY_VAN :Furgão de Brinquedos Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOY_VAN :Caminhão de Brinquedos MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOY_VAN :Caminhão de Brinquedos Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOY_VAN :Caminhão de Brinquedos Wizzowow STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_CANDY_TRUCK :Caminhão de Doces MightyMover STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_CANDY_TRUCK :Caminhão de Doces Powernaught STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_CANDY_TRUCK :Caminhão de Doces Wizzowow @@ -5685,11 +5687,11 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BUBBLE_TRUCK :Caminhão de Bo ###length 11 STR_VEHICLE_NAME_SHIP_MPS_OIL_TANKER :Navio Petroleiro MPS STR_VEHICLE_NAME_SHIP_CS_INC_OIL_TANKER :Navio Petroleiro CS-Inc. -STR_VEHICLE_NAME_SHIP_MPS_PASSENGER_FERRY :Balsa de Passageiros MPS -STR_VEHICLE_NAME_SHIP_FFP_PASSENGER_FERRY :Balsa de Passageiros FFP +STR_VEHICLE_NAME_SHIP_MPS_PASSENGER_FERRY :Navio de Passageiros MPS +STR_VEHICLE_NAME_SHIP_FFP_PASSENGER_FERRY :Navio de Passageiros FFP STR_VEHICLE_NAME_SHIP_BAKEWELL_300_HOVERCRAFT :Hovercraft Bakewell 300 -STR_VEHICLE_NAME_SHIP_CHUGGER_CHUG_PASSENGER :Balsa de Passageiros Chugger-Chug -STR_VEHICLE_NAME_SHIP_SHIVERSHAKE_PASSENGER_FERRY :Balsa de Passageiros Shivershake +STR_VEHICLE_NAME_SHIP_CHUGGER_CHUG_PASSENGER :Navio de Passageiros Chugger-Chug +STR_VEHICLE_NAME_SHIP_SHIVERSHAKE_PASSENGER_FERRY :Navio de Passageiros Shivershake STR_VEHICLE_NAME_SHIP_YATE_CARGO_SHIP :Navio Cargueiro Yate STR_VEHICLE_NAME_SHIP_BAKEWELL_CARGO_SHIP :Navio Cargueiro Bakewell STR_VEHICLE_NAME_SHIP_MIGHTYMOVER_CARGO_SHIP :Navio Cargueiro MightyMover diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 70d323610c..a33687e1a0 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -3078,6 +3078,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Tramway STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Railway owner: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Local authority: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :None +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordinates: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Tile index: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Built/renovated: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Station class: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Station type: {LTBLUE}{STRING} diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 27bcf2f451..049828aaed 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -439,7 +439,7 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Ava korr STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Mängu paus STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Kiirenda mängu STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Seadistus -STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Mängu salvestamine/jätkamine, mängust lahkumine, väljumine +STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Mängu salvestamine/jätkamine, mängust lahkumine, programmist väljumine STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Ava kaart, uus vaateaken, kaubavood või siltide loend STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Ava asustuste register või asuta asustus STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Ava toetuste loend @@ -476,9 +476,9 @@ STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Alguse l STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Alguse liigutamine 1 aasta võrra edasi STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Alustamise aasta valikuks klõpsi siin STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Ava kaart, asustuste register -STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Maastiku tekitamine +STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Ava maastikukujunduse menüü või genereeri uus maailm STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Asustuste tekitamine -STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Tööstuste tekitamine +STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Tööstuste ehitamine või tekitamine STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Maanteede ehitamine STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Trammiteede ehitamine STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Istuta puid. Ctrl valib piirkonna diagonaalselt. Shift valib ehitamise/hinna kuvamise režiimi vahel @@ -4282,7 +4282,7 @@ STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Ostetaks STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Keskenda põhivaade rongidepoo kohale STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Vii vaade garaažile. Ctrl+klõps avab garaažil uue vaate. STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Vii pea vaade paadikuuri juurde -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Vii vaade angaarile +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Vii vaade angaarile. Ctrl+klõps avab angaari kohal uue vaateakna ###length VEHICLE_TYPES STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Koosta nimekiri kõikidest rongidest, mille korralduste hulgas on see depoo diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 0c885597a9..4bec8991b6 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3458,6 +3458,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Właści STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Właściciel linii kolejowej: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Lokalne władze: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Brak +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Współrzędne: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Indeks pola: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Zbudowano/odnowiono: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Rodzaj stacji: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Typ stacji: {LTBLUE}{STRING} @@ -5113,7 +5115,7 @@ STR_TIMETABLE_START_SECONDS_QUERY :Sekundy do uruc STR_TIMETABLE_CHANGE_TIME :{BLACK}Zmień czas STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Ustal ilość czasu, jaką powinno zająć zaznaczone polecenie. Użyj Ctrl, aby ustalić taki czas dla wszystkich poleceń -STR_TIMETABLE_CLEAR_TIME :{BLACK}Usuń czas +STR_TIMETABLE_CLEAR_TIME :{BLACK}Wyczyść czas STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Wyczyść podany czas w zaznaczonym poleceniu. Użyj Ctrl, aby wyczyścić czasy we wszystkich poleceniach STR_TIMETABLE_CHANGE_SPEED :{BLACK}Zmień limit prędkości diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 96595c7823..a591be3671 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1760,8 +1760,8 @@ STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :По часов STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :Уровень высоты для карт с плоским рельефом: {STRING} ###length 2 -STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}Одна или несколько клеток в северном углу не пусты -STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}Одна или несколько клеток берега без воды +STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}Как минимум одно поле в северном углу карты не пустое +STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}Как минимум одно поле у края карты - суша STR_CONFIG_SETTING_STATION_SPREAD :Максимальный размер станции: {STRING} STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Максимальный размер области, которую может занимать станция или её составные части.{}Имейте в виду, что большие значения замедляют игру. @@ -2072,7 +2072,7 @@ STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Процент STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :При перетаскивании ставить сигналы каждые: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Настройка периодичности расстановки сигналов методом перетаскивания. Сигналы будут устанавливаться до первого встреченного препятствия (пересечения или другого сигнала). -STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} клет{P ку ки ок} +STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} пол{P е я ей} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Равномерная расстановка сигналов при перетаскивании: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Настройка расстановки сигналов с помощью Ctrl+перетаскивания. Если равномерная расстановка отключена, то сигналы дополнительно ставятся перед мостами, туннелями и после них. Если включена, то сигналы ставятся ровно на каждой N-й клетке. @@ -3253,6 +3253,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Влад STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Владелец ж/д пути: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Администрация: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Нет +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Координаты: {LTBLUE}{NUM} × {NUM} × {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Номер поля: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Построено/обновлено: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Класс станции: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Тип станции: {LTBLUE}{STRING} @@ -4060,8 +4062,8 @@ STR_COMPANY_VIEW_COMPANY_VALUE :{GOLD}Стои STR_COMPANY_VIEW_INFRASTRUCTURE :{GOLD}Инфраструктура: STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA} ж/д участ{P ок ка ков} STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} дорожны{P й х х} участ{P ок ка ков} -STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} водны{P й х х} участ{P ок ка ков} -STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} участ{P ок ка ков} занято станциями +STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} водн{P ое ых ых} пол{P е я ей} +STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} пол{P е я ей} занято станциями STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} аэропорт{P "" а ов} STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Нет @@ -4100,7 +4102,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Ж/д у STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Сигналы STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Дорожные участки: STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Трамвайные участки: -STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Водные участки: +STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Водные поля: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Каналы STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Станции: STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Площадь станций diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index bbb6c4b273..2eca86d2da 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -276,6 +276,8 @@ STR_COLOUR_SECONDARY_WHITE :Biela STR_UNITS_VELOCITY_IMPERIAL :{DECIMAL} mph STR_UNITS_VELOCITY_METRIC :{DECIMAL} km/h STR_UNITS_VELOCITY_SI :{DECIMAL} m/s +STR_UNITS_VELOCITY_GAMEUNITS_DAY :{DECIMAL}{NBSP}políčok/deň +STR_UNITS_VELOCITY_GAMEUNITS_SEC :{DECIMAL}{NBSP}políčok/sek STR_UNITS_VELOCITY_KNOTS :{DECIMAL}{NBSP}uzlov STR_UNITS_POWER_IMPERIAL :{DECIMAL}hp @@ -946,6 +948,8 @@ STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} je veľmi zastaralé a urgentne potrebuje výmenu STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} nemôže nájsť cestu k pokračovaniu STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} sa stratil{G 0 "" "a" "o"} +STR_NEWS_VEHICLE_UNPROFITABLE_YEAR :{WHITE}{VEHICLE} zisk za posledný rok bol {CURRENCY_LONG} +STR_NEWS_VEHICLE_UNPROFITABLE_PERIOD :{WHITE}{VEHICLE} zisk za posledné obdobie bol {CURRENCY_LONG} STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} sa nemôže dostať do ďalšej stanice, pretože tá je príliš ďaleko STR_NEWS_ORDER_REFIT_FAILED :{WHITE}Príkaz zmeňiť tovar po zlyhaní zastavil {VEHICLE} @@ -1083,6 +1087,10 @@ STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Začiark STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Mierkové úkosy STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Začiarknutím tohto políčka zmeníte úkosy podľa veľkosti rozhrania +STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Použite tradičné sprite písmo +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Začiarknite toto políčko, ak uprednostňujete použitie tradičného písma sprite s pevnou veľkosťou. +STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Vyhladzovacie písma +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Začiarknite toto políčko, ak chcete vyhladiť písma s meniteľnou veľkosťou. STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1122,6 +1130,7 @@ STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_PLATFORM_NOT_RUNNING :{ORANGE}{STRING STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :{RED}Duplicitný doplnok STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Neplatný podpis +STR_BASESET_STATUS :{STRING} {RED}({NUM} chýbajúc{P i e e}/poškoden{P ý é é} súbor{P "" y y}) STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Nepodarilo sa načítať zoznam podporovaných rozlíšení STR_ERROR_FULLSCREEN_FAILED :{WHITE}Zobrazovanie na celú obrazovku zlyhalo @@ -1435,6 +1444,7 @@ STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Každý pohľad STR_CONFIG_SETTING_BRIBE :Umožniť podplácanie miestnej správy: {STRING} ###length 2 STR_CONFIG_SETTING_BRIBE_HELPTEXT :Povolí podplácanie miestnej samosprávy. Ak podplácanie zistí inšpektor, spoločnosť nebude môcť podplácať v danom meste počas nasledujúcich 6 mesiacov. +STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :Umožnite firmám pokúsiť sa podplatiť miestny mestský úrad. Ak si úplatok všimne kontrolór, firma nebude môcť v meste konať šesť minút STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Povoliť zakúpenie exkluzívnych dopravných práv: {STRING} ###length 2 @@ -1685,6 +1695,9 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Žiadna STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Zatvoriť okno kliknutím pravým tlačidlom: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Zatvorí okno kliknutím pravým tlačidlom do vnútra. Prestane ukazovať nápovedu pri kliknutí pravým tlačidlom! ###length 3 +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_NO :Nie +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES :Áno +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :Áno, okrem zamknutých STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Použiť {STRING} formát dátumu v názve uloženej hry STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Formát dátumu v názvoch uložených hier @@ -2138,6 +2151,7 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Pridelen # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Chyba v nastavení videa... STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... nenašlo sa kompatibilné GPU. Hardvérové zrýchlenie vypnuté +STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... Hra spadla kvôli ovládaču GPU. Hardvérová akcelerácia je vypnutá # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -2194,6 +2208,17 @@ STR_ABANDON_GAME_QUERY :{YELLOW}Ste si STR_ABANDON_SCENARIO_QUERY :{YELLOW}Ste si istý, že chcete opustiť tento scenár? # Help window +STR_HELP_WINDOW_CAPTION :{WHITE}Nápoveda a manuály +STR_HELP_WINDOW_WEBSITES :{BLACK}Webstránky +STR_HELP_WINDOW_DOCUMENTS :{BLACK}Dokumenty +STR_HELP_WINDOW_README :{BLACK}Čítajma +STR_HELP_WINDOW_CHANGELOG :{BLACK}Log zmien +STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Známe chyby +STR_HELP_WINDOW_LICENSE :{BLACK}Licencia +STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD +STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Manuál / Wiki +STR_HELP_WINDOW_BUGTRACKER :{BLACK}Nahlásiť chybu +STR_HELP_WINDOW_COMMUNITY :{BLACK}Komunita # Cheat window STR_CHEATS :{WHITE}Cheaty @@ -3225,8 +3250,10 @@ STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Počet m STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Názvy miest: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Výber štýlu názvov miest STR_MAPGEN_DATE :{BLACK}Rok: +STR_MAPGEN_DATE_TOOLTIP :{BLACK}Vyberte dátum začiatku STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Počet priemyslu: STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Najvyšší vrchol: +STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Vyberte najvyšší vrchol, ktorý sa hra pokúsi vytvoriť, meraný v nadmorskej výške STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Zvýšiť maximálnu výšku najvyššieho vrchola na mape o jeden STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Znížiť maximálnu výšku najvyššieho vrchola na mape o jeden STR_MAPGEN_SNOW_COVERAGE :{BLACK}Pokrytie snehom: @@ -3243,6 +3270,7 @@ STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rieky: STR_MAPGEN_SMOOTHNESS :{BLACK}Členitosť: STR_MAPGEN_VARIETY :{BLACK}Rozmanitosť distribúcie: STR_MAPGEN_GENERATE :{WHITE}Generovať +STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Vytvorte si svet a hrajte OpenTTD! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Nastavenia NewGRF STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Zobraziť nastavenia NewGRF STR_MAPGEN_AI_SETTINGS :{BLACK}Nastavenia AI @@ -3275,6 +3303,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Katalánske # Strings for map borders at game generation STR_MAPGEN_BORDER_TYPE :{BLACK}Okraje mapy: +STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Vyberte si hranice herného sveta STR_MAPGEN_NORTHWEST :{BLACK}Severo-západ STR_MAPGEN_NORTHEAST :{BLACK}Severo-východ STR_MAPGEN_SOUTHEAST :{BLACK}Juho-východ @@ -3287,7 +3316,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manuáln STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Orientácia výškovej mapy: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Názov výškovej mapy: +STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}Názov obrazového súboru s výškovou mapou STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Veľkosť: +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}Veľkosť zdrojového obrázka výškovej mapy. Aby ste dosiahli čo najlepšie výsledky, každý okraj by mal zodpovedať dostupnej dĺžke okraja mapy v OpenTTD, ako napríklad 256, 512, 1024 atď. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Cieľová výška vrcholu @@ -3655,6 +3686,7 @@ STR_STATION_LIST_STATION :{YELLOW}{STATIO STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- Žiadne - STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Označiť všetky možnosti +STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :Iba hodnotenie bez nákladu # Station view window STR_STATION_VIEW_CAPTION :{WHITE}{STATION} {STATION_FEATURES} @@ -4318,6 +4350,8 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kapacita STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Transfer kredity: {LTBLUE}{CURRENCY_LONG} +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Zníži servisný interval o 10 dní. Ctrl+klik skráti servisný interval o 5 dní +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Zníži servisný interval o 5 minút. Ctrl+klik skráti servisný interval o 1 minútu STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Zmeniť typ servisného intervalu STR_VEHICLE_DETAILS_DEFAULT :Štandardné diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 3f4c6c00b0..8375043568 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1026,7 +1026,7 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :Cada 120 minuto STR_GAME_OPTIONS_LANGUAGE :{BLACK}Idioma STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Selecciona el idioma a emplear en interfaz del juego -STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% completo) +STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% completado) STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Pantalla completa STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Marca esta casilla para jugar OpenTTD a pantalla completa @@ -2272,7 +2272,7 @@ STR_LIVERY_PANEL_TOOLTIP :{BLACK}Seleccio STR_LIVERY_TRAIN_GROUP_EMPTY :No se han definido grupos de trenes STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :No se han definido grupos de vehículos de carretera STR_LIVERY_SHIP_GROUP_EMPTY :No se han definido grupos de barcos -STR_LIVERY_AIRCRAFT_GROUP_EMPTY :No se han establecido grupos de aeronaves +STR_LIVERY_AIRCRAFT_GROUP_EMPTY :No se han definido grupos de aeronaves ###length 23 STR_LIVERY_DEFAULT :Color por Defecto @@ -3079,6 +3079,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propieta STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Propietario del ferrocarril: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autoridad local: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ninguna +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordenadas: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Índice de la casilla: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Construido/renovado: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Clase de estación: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de estación: {LTBLUE}{STRING} diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index fbbd956a09..c56f0498af 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -379,18 +379,18 @@ STR_GOTO_ORDER_VIEW :{BLACK}கட ###length 31 STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}இடை நிறுத்து STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}அதி வேகமாக விளையாடு -STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}விருப்பத் தேர்வு +STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}விருப்பத்தேர்வுகள் மற்றும் அமைப்புகள் STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}விளையாட்டை சேமி,கைவிடு, வெளியேறு STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}வரைபடத்தை காட்டு -STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}நகர புத்தகம் காண்பி +STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}நகரங்களின் பட்டியலை காட்டு அல்லது புதிய நகரத்தினை நிறுவு STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}மானியங்களைக் காட்டு STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}நிறுவனத்தின் நிலையங்களின் பட்டியலை காண்பி STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}நிறுவனத்தின் நிதி நிலைமையை காட்டு STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}நிறுவனத்தின் விவரங்களை காட்டு STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}கதை புத்தகத்தினைக் காட்டு -STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}குறிக்கோள் பட்டியலைக் காட்டு -STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}வரைபடம் காண்பி -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}நிறுவங்களின் பட்டியலை காட்டு +STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}குறிக்கோள் பட்டியலைத் திற +STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}நிறுவன வரைபடங்களைத் திற. மேலும் சரக்கு விலைப்பட்டியலைக் காட்டு +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}நிறுவங்களின் பட்டியலைத் திற STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}ஓர் தொழிற்சாலையை கட்டு அல்லது தொழிற்சாலைகளின் பட்டியலை காட்டு STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}நிறுவனத்தின் இரயில்களைக் காட்டு. Ctrl+Click அழுத்தினால் குழு/வாகனங்களின் பட்டியல் தெரியும் STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}நிறுவனத்தின் சாலை வாகனங்களைக் காட்டு. Ctrl+Click அழுத்தினால் குழு/வாகனங்களின் பட்டியல் தெரியும் @@ -606,7 +606,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}தொ STR_GRAPH_INCOME_CAPTION :{WHITE}வருமான வரைபடம் STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}பரிமாற்றம் செய்யப்பட்ட சரக்குப்பெட்டிகள் STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}கம்பெனி செயல்வரம்பு (அதிகபட்ச செயல்வரம்பு=1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}கம்பெனி மதிப்பீடுகள் +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}நிறுவன மதிப்பீடு வரைபடம் STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}கடந்த 72 நிமிடங்கள் @@ -662,6 +662,7 @@ STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}மொ ###next-name-looks-similar STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}கடந்த 12 காலாண்டுகளில் மிகக் குறைந்த லாபத்துடன் காலாண்டில் செய்யப்பட்ட பணத்தின் அளவு +STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}கடந்த 12 காலாண்டுகளில் அதிகபட்ச லாபத்துடன் காலாண்டில் செய்யப்பட்ட பணத்தின் அளவினைக் காட்டு STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}கடந்த நான்கு காலாண்டுகளில் சேர்க்கப்பட்ட சரக்கு பெட்டிகள் STR_PERFORMANCE_DETAIL_CARGO_TOOLTIP :{BLACK}கடந்த காலாண்டில் கையாளப்பட்ட சரக்கு வகைகள் STR_PERFORMANCE_DETAIL_MONEY_TOOLTIP :{BLACK}இந்த நிறுவனம் வங்கியில் வைத்திருக்கும் பணம் @@ -1080,6 +1081,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}உங STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}உங்கள் நாணய மதிப்பினை ஒரு பவுண்டு (£) அளவு அதிகரிக்கவும் STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}உங்களது நாணயத்தின் நாணயமாற்று விகிதத்தை ஒரு பவுண்டாக (£) அமைக்கவும் +STR_CURRENCY_SEPARATOR :{LTBLUE}பிரிப்பான்: {ORANGE}{STRING} STR_CURRENCY_PREFIX :{LTBLUE}முன் ஒட்டு: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}உங்கள் நாணயத்தின் முன் ஒட்டத்தினை அமையுங்கள் @@ -1093,7 +1095,7 @@ STR_CURRENCY_DECREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}யூ STR_CURRENCY_INCREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}யூரோவிற்கு தாமதமாக மாறுங்கள் STR_CURRENCY_PREVIEW :{LTBLUE}முன்னோட்டம்: {ORANGE}{CURRENCY_LONG} -STR_CURRENCY_CUSTOM_CURRENCY_PREVIEW_TOOLTIP :{BLACK}10000 பவுண்டு (£) உங்க்ள் நாணயத்தில் +STR_CURRENCY_CUSTOM_CURRENCY_PREVIEW_TOOLTIP :{BLACK}உங்கள் நாணயத்தில் 10000 பவுண்டு (£) STR_CURRENCY_CHANGE_PARAMETER :{BLACK}பயனரால் மாற்றப்பட்ட பண குணாதிசயங்களை மாற்று STR_NONE :ஒன்றுமில்லை @@ -1504,7 +1506,7 @@ STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}வி STR_CONFIG_SETTING_STATION_SPREAD :அதிக. நிலைய விரிப்பு: {STRING} STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :ஒரு நிலையத்தின் அதிகபட்ச பரப்பளவு. உயர் மதிப்புகள் விளையாட்டை மெதுவாக்கும் என்பதினை நினைவில் கொள்க -STR_CONFIG_SETTING_SERVICEATHELIPAD :ஹெலிகாப்ப்டர்களை தானாக சரிபார்ர்க்கவும்: {STRING} +STR_CONFIG_SETTING_SERVICEATHELIPAD :ஹெலிகாப்ப்டர்களைத் தானாக சரிபார்க்கவும்: {STRING} STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :சிறுபடத்தில் பயன்படுத்திய நில நிறம்: {STRING} @@ -1603,6 +1605,7 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :எதிர் STR_CONFIG_SETTING_QUICKGOTO :வாகன கட்டளைகளை விரிவாக உருவாக்கவும்: {STRING} +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :இயல்புநிலை இரயில் வகை (புதிய ஆட்ட துவக்கம்/பழைய ஆட்டத்தின் ஏற்றம்): {STRING} ###length 3 STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :முதலில் கிடைக்கும் STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :கடைசியில் கிடைக்கும் @@ -1719,8 +1722,10 @@ STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE_HELPTEXT :தொழிற STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES :பொருளாதார மாற்றங்கள்: {STRING} STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES_HELPTEXT :உலக பொருளாதார மாற்றங்களைப் பற்றி செய்தித்தாளினைக் காட்டு +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY :நிறுவனத்தால் வழங்கப்படும் தொழிற்சாலைகளின் உற்பத்தி நிலை மாற்றங்கள் : {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :நிறுவனத்தால் வழங்கப்படும் தொழில்களின் உற்பத்தி நிலை மாறும்போது செய்தித்தாளைக் காட்டவும் +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER :எதிர்-நிறுவனத்தால் வழங்கப்படும் தொழிற்சாலைகளின் உற்பத்தி நிலை மாற்றங்கள் : {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :மற்ற தொழிற்சாலைகளின் உற்பத்தி மாற்றங்கள்: {STRING} @@ -2000,11 +2005,11 @@ STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}'உப STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}'மிதவெப்பமண்டல' நிலப்பரப்புப் பாணியைத் தேர்ந்தெடுக்கவும் STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}'பொம்மைநில' நிலப்பரப்புப் பாணியைத் தேர்ந்தெடுக்கவும் -STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}ஆட்டம் அமைப்புகளைக் காட்டு -STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}புள்ளிகள் பட்டியலினைக் காட்டவும் +STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}ஆட்ட அமைப்புகளைத் திற +STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}புள்ளிகள் பட்டியலினைத் திற STR_INTRO_TOOLTIP_HELP :{BLACK}ஆவணங்கள் மற்றும் இணைய ஆதாரங்களுக்கான அணுகலைப் பெறுங்கள் STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}அமைப்புகளைத் திற -STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}NewGRF அமைப்புகளைக் காட்டு +STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}NewGRF அமைப்புகளைத் திற STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}பதிவிறக்கம் செய்ய புதிய மற்றும் புதுப்பிக்கப்பட்ட உள்ளடக்கத்தை பார்க்கவும் STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}AI அமைப்புகளைத் திற STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}விளையாட்டு ஸ்கிரிப்ட் அமைப்புகளைத் திற @@ -2068,7 +2073,7 @@ STR_LIVERY_SHIP_GROUP_EMPTY :கப்பல STR_LIVERY_AIRCRAFT_GROUP_EMPTY :விமானக் குழுக்கள் எதுவும் அமைக்கப்படவில்லை ###length 23 -STR_LIVERY_DEFAULT :Standard Livery +STR_LIVERY_DEFAULT :இயல்பிருப்பு Livery STR_LIVERY_STEAM :புகை பொறி STR_LIVERY_DIESEL :டீசல் பொறி STR_LIVERY_ELECTRIC :மின்சார பொறி @@ -2416,6 +2421,7 @@ STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}சர STR_NETWORK_MESSAGE_KICKED :*** {STRING} வெளியேற்றப்பட்டார். காரணம்: ({STRING}) STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}சர்வர் பதிவு தோல்வி +STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}உங்கள் சேவையகத்தை மற்றவர்கள் அணுக இயலாது # Content downloading window STR_CONTENT_TITLE :{WHITE}கோப்புகள் பதிவிறக்கம் செய்யப்படுகின்றன @@ -2756,7 +2762,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}3x3 க STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}ஏதொவொறு # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}புதிய தொழிற்சாலையினை நிறுவு +STR_FUND_INDUSTRY_CAPTION :{WHITE}புதிய தொழிற்சாலையினை நிறுவுதல் STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}இந்தப் பட்டியலிருந்து பொருத்தமான தொழிற்சாலை ஒன்றினை தேர்ந்தெடு STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}மாறுபட்ட தொழிற்சாலைகளை உருவாக்குக STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}மாறுபட்ட தொழிற்சாலைகளை உருவாக்குக @@ -2797,6 +2803,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}ட் STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}இரயில்வே உரிமையாளர்: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}நகராட்சி: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :ஒன்றுமில்லை +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}அச்சுத் தூரங்கள்: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}வட்ட எண்: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}கட்டப்பட்டது/புதுப்பிக்கப்பட்டது: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}நிலையத்தின் பிரிவு: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}நிலையத்தின் வகை: {LTBLUE}{STRING} @@ -3200,11 +3208,11 @@ STR_NEWGRF_ERROR_MSG_ERROR :{RED}பிழ STR_NEWGRF_ERROR_MSG_FATAL :{RED}மரணம்: {SILVER}{STRING} STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}"{STRING}" NewGRF மரணமான பிழை ஏற்பட்டுள்ளது:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :OpenTTDஆல் தெரிவித்த TTDPatch விருத்துடன் {1:STRING} செயல்படாது -STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} ஆனது {STRING} TTD பதிப்பிற்காகவே +STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} ஆனது {2:STRING} TTD பதிப்பிற்காகவே STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} ஆனது {STRING} உடன் இணைந்து பயன்படுத்த வடிவமைக்கப்பட்டுள்ளது -STR_NEWGRF_ERROR_INVALID_PARAMETER :செல்லாத குணாதிசயம் {1:STRING} இன்: குணாதிசயம் {STRING} ({NUM}) -STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} ஆனது {STRING} இற்கு முன்னால் ஏற்றப்பட வேண்டும் -STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} ஆனது {STRING} இற்கு பின்னால் ஏற்றப்பட வேண்டும் +STR_NEWGRF_ERROR_INVALID_PARAMETER :செல்லாத குணாதிசயம் {1:STRING} இன்: குணாதிசயம் {2:STRING} ({3:NUM}) +STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} ஆனது {2:STRING} இற்கு முன்னால் ஏற்றப்பட வேண்டும் +STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} ஆனது {2:STRING} இற்கு பின்னால் ஏற்றப்பட வேண்டும் STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} இற்கு OpenTTD பதிப்பு {STRING} இற்கு அதிகமான பதிப்பு தேவைப்படுகிறது STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF கோப்பு மொழிபெயர்க்க வடிமைக்கப்பட்டது STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :அளவிற்கு அதிகமான NewGRF கள் ஏற்றப்பட்டுள்ளன @@ -3993,21 +4001,21 @@ STR_VEHICLE_STATUS_LEAVING :{LTBLUE}வி STR_VEHICLE_STATUS_CRASHED :{RED}மோதியது! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}பழுதானது STR_VEHICLE_STATUS_STOPPED :{RED}நின்றுவிட்டது -STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}நிறுத்தப்படுகின்றது, {VELOCITY} +STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}{VELOCITY} - நிறுத்தப்படுகின்றது STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}திறன் இல்லை STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}வழிக்காக காத்துக்கொண்டிருக்கிறது STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}செல்லுமிடம் நெடுந்தொலைவிலுள்ளது -STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{STATION} இற்கு செல்கிறது, {VELOCITY} -STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}எந்த கட்டளைகளும் இல்லை, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE} {WAYPOINT}-இற்கு செல்கிறது, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE} {DEPOT}-இற்கு செல்கிறது, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE} {DEPOT}-இல் சர்வீஸ் செய்ய செல்கிறது, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - {0:STATION}-இற்கு செல்கிறது +STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - எந்த கட்டளைகளும் இல்லை +STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - {0:WAYPOINT}-இற்கு செல்கிறது +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - {0:DEPOT}-இற்கு செல்கிறது +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - {0:DEPOT}-இல் பழுதுபார்க்க செல்கிறது -STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{STATION} நிலையத்தினை அடைய முடியவில்லை, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{WAYPOINT}-இனை அடைய முடியவில்லை, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{DEPOT}-இனை அடைய முடியாது , {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{DEPOT} இனை அடைய முடியவில்லை, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - {0:STATION}-இனை அடைய முடியவில்லை +STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - {0:WAYPOINT}-இனை அடைய முடியவில்லை +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{1:VELOCITY} - {0:DEPOT}-இனை அடைய முடியாது +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - {0:DEPOT}-இனை அடைய முடியவில்லை # Vehicle stopped/started animations ###length 2 @@ -4180,9 +4188,9 @@ STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}கொ STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :இதற்கு சமம் STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :இதற்கு சமம் இல்லை STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :இது குறைவு. இதற்கு -STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :இது சமம் அல்லது குறைவு. இதற்கு +STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :இதற்கு இது சமம் அல்லது குறைவு STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :இது அதிகம். இதற்கு -STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :இது சமம் அல்லது அதிகம். இதற்கு +STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :இதற்கு இது சமம் அல்லது அதிகம் STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :உண்மை STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :பொய் @@ -5371,6 +5379,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}m +STR_CURRENCY_SHORT_GIGA :{NBSP}பில்லியன் +STR_CURRENCY_SHORT_TERA :{NBSP}tn STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 8246e7543e..c6d8be08f7 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -783,6 +783,8 @@ STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Кред STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Підсумок: ###next-name-looks-similar +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}Кількість транспортних засобів, які були прибутковими минулого року (дорожній транспорт, потяги, кораблі, літаки). +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Кількість транспортних засобів, які були прибутковими минулого періоду (дорожній транспорт, потяги, кораблі, літаки). STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Кількість нещодавно обслуговуваних частин станцій. Кожна частина станції (залізнична станція, автобусна зупинка, аеропорт) враховується окремо, навіть якщо вони об'єднані в одну станцію STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Найменший квартальний прибуток за останні 12 кварталів STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Найбільший квартальний прибуток за останні 12 кварталів @@ -1177,6 +1179,7 @@ STR_GAME_OPTIONS_GUI_SCALE_5X :5x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Автоматизований збір даних STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Участь в автоматизованому зборі даних +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Попередній перегляд геологічної розвідки STR_GAME_OPTIONS_GRAPHICS :{BLACK}Графіка @@ -2310,12 +2313,14 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Ви д # Help window STR_HELP_WINDOW_CAPTION :Допомога й довідка +STR_HELP_WINDOW_WEBSITES :{BLACK}Вебсайти STR_HELP_WINDOW_DOCUMENTS :{BLACK}Документація STR_HELP_WINDOW_README :{BLACK}Інструкція STR_HELP_WINDOW_CHANGELOG :{BLACK}Зміни STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Відомі збої STR_HELP_WINDOW_LICENSE :{BLACK}Ліцензія STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD +STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Довідка / Вікі STR_HELP_WINDOW_BUGTRACKER :{BLACK}Повідомити про помилку STR_HELP_WINDOW_COMMUNITY :{BLACK}Спільнота @@ -2734,12 +2739,12 @@ STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Вибр STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Позначити весь вміст, що є оновленням існуючого, для завантаження STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}Зняти позначки STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Не завантажувати нічого -STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Шукати на сторонніх веб-сайтах -STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Шукати додатки, недоступні на серверах OpenTTD на сторонніх веб-сайтах +STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Шукати на сторонніх вебсайтах +STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Шукати додатки, недоступні на серверах OpenTTD на сторонніх вебсайтах STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Ви виходите з OpenTTD! -STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Умови використання додатків з зовнішніх веб-сайтів можуть відрізнятися.{}Інструкції по встановленню даних додатків у OpenTTD шукайте на відповідних веб-сайтах.{}Продовжити? +STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Умови використання додатків з зовнішніх вебсайтів можуть відрізнятися.{}Інструкції по встановленню даних додатків у OpenTTD шукайте на відповідних вебсайтах.{}Продовжити? STR_CONTENT_FILTER_TITLE :{BLACK}Фільтр за назвою: -STR_CONTENT_OPEN_URL :{BLACK}Відвідати вебсайт +STR_CONTENT_OPEN_URL :{BLACK}Вебсайт STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Відвітати вебсайт цього контенту STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Завантажити STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Почати завантаження обраного вмісту @@ -3154,7 +3159,9 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Влас STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Власник залізниці: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Місцева влада: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Немає -STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Рік випуску: {LTBLUE}{DATE_LONG} +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Координати: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Координати клітинки: {LTBLUE}{NUM} ({HEX}) +STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Рік випуску чи оновлення: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Клас станції: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Тип станції: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Клас аеропорта: {LTBLUE}{STRING} @@ -3535,6 +3542,7 @@ STR_SAVE_PRESET_SAVE :{BLACK}Збер STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Зберегти шаблон для поточного обраного імені # NewGRF parameters window +STR_BASEGRF_PARAMETERS_CAPTION :{WHITE}Змінити параметри базового набору графіки STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Змінити параметри NewGRF STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Закрити STR_NEWGRF_PARAMETERS_RESET :{BLACK}Очистити @@ -3972,6 +3980,8 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Дета STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Переглянути детальну інформацію про інфраструктуру STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Дати грошей STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Дати грошей цій компанії +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Агресивне захоплення +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Агресивно захопити компанію STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Нове обличчя STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Вибрати нове обличчя керівника @@ -4059,15 +4069,16 @@ STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Доступн STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Редагувати список STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Дати завдання всьому транспорту зі списку STR_VEHICLE_LIST_REPLACE_VEHICLES :Оновлення -STR_VEHICLE_LIST_SEND_FOR_SERVICING :Відправити на техогляд +STR_VEHICLE_LIST_SEND_FOR_SERVICING :Направити на техогляд +STR_VEHICLE_LIST_CREATE_GROUP :Створити групу STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Прибуток цього року: {CURRENCY_LONG} (торік: {CURRENCY_LONG}) STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{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 :Відправити в гараж -STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Відправити до депо +STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Направити до депо +STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Направити в гараж +STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Направити до депо STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Направити в ангар STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Натисніть для зупинки всіх авто, що у списку @@ -4107,7 +4118,9 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Позбути STR_GROUP_RENAME_CAPTION :{BLACK}Перейменувати групу STR_GROUP_PROFIT_THIS_YEAR :Прибуток цього року: +STR_GROUP_PROFIT_THIS_PERIOD :Прибуток цього періоду: STR_GROUP_PROFIT_LAST_YEAR :Прибуток минулого року: +STR_GROUP_PROFIT_LAST_PERIOD :Прибуток минулого періоду: STR_GROUP_OCCUPANCY :Використання: STR_GROUP_OCCUPANCY_VALUE :{NUM}% @@ -4457,7 +4470,7 @@ STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}Пря STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Без завдань, {VELOCITY} STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Прямує до {WAYPOINT}, {VELOCITY} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Прямує до {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Техогляд у {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Техогляд у {0:DEPOT} STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}Неможливо досягти {STATION}, {VELOCITY} STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}Неможливо досягти {WAYPOINT}, {VELOCITY} @@ -4784,6 +4797,7 @@ STR_TIMETABLE_STATUS_START_IN_SECONDS.d :{BLACK}Цей STR_TIMETABLE_START :{BLACK}Початок розкладу +STR_TIMETABLE_START_SECONDS_QUERY :Секунд до початку розкладу STR_TIMETABLE_CHANGE_TIME :{BLACK}Змінити час STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Змінити час, впродовж якого має виконуватись наказ. Ctrl+клац змінить час в усіх завданнях @@ -5058,7 +5072,7 @@ STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... на STR_ERROR_TOO_MANY_TOWNS :{WHITE}... забагато міст STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... на карті немає вільного місця STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Дорога ремонтується -STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Не можна видалити це місто...{}Станція або депо, що відносяться до міста або знаходяться на землі у власності міста, не можуть бути видалені +STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Не можна видалити це місто...{}Станція або депо, що належать місту або перебувають на землі у власності міста, не можуть бути видалені STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... немає придатного місця для статуї в центрі цього міста # Industry related errors @@ -5297,7 +5311,7 @@ STR_ERROR_CAN_T_STOP_START_SHIP :{WHITE}Немо STR_ERROR_CAN_T_STOP_START_AIRCRAFT :{WHITE}Неможливо зупинити літак... ###length VEHICLE_TYPES -STR_ERROR_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Неможливо відправити поїзд в депо... +STR_ERROR_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Неможливо направити поїзд в депо... STR_ERROR_CAN_T_SEND_ROAD_VEHICLE_TO_DEPOT :{WHITE}Неможливо направити авто в депо... STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Неможливо направити корабель в депо... STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR :{WHITE}Неможливо направити літак до ангару... @@ -5863,6 +5877,7 @@ STR_UNKNOWN_STATION :невідом STR_DEFAULT_SIGN_NAME :Позначка STR_COMPANY_SOMEONE :дехто +STR_SAVEGAME_DURATION_REALTIME :{NUM}год {NUM}хв STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING} STR_SAVEGAME_NAME_SPECTATOR :Спостерігач, {1:STRING} diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 1930df83a9..6bcb8daeae 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -3076,6 +3076,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Chủ đ STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Chủ đường ray: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Thuộc về địa phương: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Không +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Toạ độ: {LTBLUE}{NUM} x {NUM} x {NUM} STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Xây/tân trang ngày: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Loại ga,bến: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Kiểu ga,bến: {LTBLUE}{STRING} From 25aeb1c5a536219d07bf1e7a75fcacccd0f35249 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 7 Mar 2024 23:19:59 +0000 Subject: [PATCH 058/695] Change: Use same audio buffer size (and config parameter) for all sound drivers. (#12227) Windows drivers used a default buffer size of 8192 instead of 1024, which results in a considerable 186ms latency. --- src/sound/win32_s.cpp | 2 +- src/sound/xaudio2_s.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sound/win32_s.cpp b/src/sound/win32_s.cpp index f50346e88c..6cd72b3a2e 100644 --- a/src/sound/win32_s.cpp +++ b/src/sound/win32_s.cpp @@ -70,7 +70,7 @@ const char *SoundDriver_Win32::Start(const StringList &parm) wfex.nAvgBytesPerSec = wfex.nSamplesPerSec * wfex.nBlockAlign; /* Limit buffer size to prevent overflows. */ - _bufsize = GetDriverParamInt(parm, "bufsize", 8192); + _bufsize = GetDriverParamInt(parm, "samples", 1024); _bufsize = std::min(_bufsize, UINT16_MAX); try { diff --git a/src/sound/xaudio2_s.cpp b/src/sound/xaudio2_s.cpp index b4d08c4900..365cf46367 100644 --- a/src/sound/xaudio2_s.cpp +++ b/src/sound/xaudio2_s.cpp @@ -205,7 +205,7 @@ const char *SoundDriver_XAudio2::Start(const StringList &parm) wfex.nAvgBytesPerSec = wfex.nSamplesPerSec * wfex.nBlockAlign; // Limit buffer size to prevent overflows - int bufsize = GetDriverParamInt(parm, "bufsize", 8192); + int bufsize = GetDriverParamInt(parm, "samples", 1024); bufsize = std::min(bufsize, UINT16_MAX); _voice_context = new StreamingVoiceContext(bufsize * 4); From 216905ce1f98836fa562a0db96b571121c68db17 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 8 Mar 2024 04:40:35 +0000 Subject: [PATCH 059/695] Update: Translations from eints chinese (simplified): 2 changes by WenSimEHRP luxembourgish: 2 changes by phreeze83 hungarian: 2 changes by PstasDev german: 2 changes by Wuzzy2 ukrainian: 10 changes by StepanIvasyn slovak: 197 changes by ApplePie420 catalan: 2 changes by J0anJosep portuguese (brazilian): 35 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 70 +++++----- src/lang/catalan.txt | 2 + src/lang/german.txt | 2 + src/lang/hungarian.txt | 2 + src/lang/luxembourgish.txt | 2 + src/lang/simplified_chinese.txt | 2 + src/lang/slovak.txt | 215 +++++++++++++++++++++++++++--- src/lang/ukrainian.txt | 14 +- 8 files changed, 252 insertions(+), 57 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index d45b3f0646..91ee88ca64 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1564,7 +1564,7 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distância máx STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limite de distância entre a borda do mapa e o local de construção de refinarias e plataformas de petróleo. Em mapas de ilhas isso garante que elas fiquem perto da costa. Em mapas com mais de 256 quadrados esse valor é aumentado. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altura da linha de neve: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Escolher a que altura a neve começa na paisagem subártica. A neve também afeta a geração de indústrias e os requisitos de crescimento das localidades. Pode ser modificado somente no Editor de Cenário ou então é calculado usando a "cobertura de neve" +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Escolher a que altura a neve começa na paisagem subártica. A neve também afeta a geração de indústrias e os requisitos de crescimento das localidades. Só pode ser modificado no Editor de Cenário ou então é calculado usando a "cobertura de neve" STR_CONFIG_SETTING_SNOW_COVERAGE :Cobertura de neve: {STRING} STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de neve na paisagem subártica. A neve também afeta a geração das indústrias e os requisitos para crescimento das localidades. Usado somente durante a geração do mapa. O nível do mar e as suas encostas nunca têm neve. @@ -1651,8 +1651,8 @@ STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla como a STR_CONFIG_SETTING_MEASURE_TOOLTIP :Mostrar medidas quando usar as ferramentas de construção: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Mostrar distâncias em quadrados e diferenças de altura quando Clicar+Arrastar nas ações de construção -STR_CONFIG_SETTING_LIVERIES :Mostrar pinturas específicas do tipo de veículo: {STRING} -STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Controla a utilização de pinturas específicas por tipo de veículo (em vez de pinturas por empresa) +STR_CONFIG_SETTING_LIVERIES :Mostrar cores específicas do tipo de veículo: {STRING} +STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Controla a utilização de cores específicas, por tipo de veículo, para os veículos(em vez de cores por empresa) ###length 3 STR_CONFIG_SETTING_LIVERIES_NONE :Nenhuma STR_CONFIG_SETTING_LIVERIES_OWN :Própria empresa @@ -2268,14 +2268,14 @@ STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Mostrar STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Mostrar cores dos grupos de aeronaves STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Escolher a cor principal para o esquema selecionado. Ctrl+Clique para definir esta cor para todos os esquemas STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Escolher a cor secundária para o esquema selecionado. Ctrl+Clique para definir esta cor para todos os esquemas -STR_LIVERY_PANEL_TOOLTIP :{BLACK}Selecionar o esquema de cores a alterar, ou esquemas múltiplos,- utilizando Ctrl+Clique. Clique na caixa para usar o esquema de cores +STR_LIVERY_PANEL_TOOLTIP :{BLACK}Selecionar um esquema de cores para alterar ou vários esquemas com Ctrl+Clique. Clique na caixa para usar o esquema de cores STR_LIVERY_TRAIN_GROUP_EMPTY :Não há grupos de trens configurados STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Não há grupos de veículos configurados STR_LIVERY_SHIP_GROUP_EMPTY :Não há grupos de embarcações configurados STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Não há grupos de aeronaves configurados ###length 23 -STR_LIVERY_DEFAULT :Pintura Padrão +STR_LIVERY_DEFAULT :Cor Padrão STR_LIVERY_STEAM :Locomotiva a Vapor STR_LIVERY_DIESEL :Locomotiva Diesel STR_LIVERY_ELECTRIC :Locomotiva Elétrica @@ -3562,12 +3562,12 @@ STR_NEWGRF_LIST_MISSING :{RED}Arquivos e # NewGRF 'it's broken' warnings STR_NEWGRF_BROKEN :{WHITE}O comportamento do NewGRF '{0:STRING}' pode causar erros de sincronização e/ou travamentos -STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}O estado do vagão motorizado mudou para '{1:ENGINE}' quando estiver fora do depósito -STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}O comprimento do veículo mudou para '{1:ENGINE}' quando estiver fora do depósito -STR_NEWGRF_BROKEN_CAPACITY :{WHITE}A capacidade do veículo mudou para '{1:ENGINE}' quando estiver fora do depósito ou em adaptação +STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Ele alterou o estado do vagão motorizado '{1:ENGINE}' quando não estava em um depósito +STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Ele alterou o comprimento do veículo '{1:ENGINE}' quando não estava em um depósito +STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Ele alterou a capacidade do veículo '{1:ENGINE}' quando não estava em um depósito ou em adaptação STR_BROKEN_VEHICLE_LENGTH :{WHITE}O trem '{VEHICLE}' pertencente a '{COMPANY}' tem um comprimento inválido, possivelmente devido à problemas com NewGRFs. Podem ocorrer erros de sincronização ou travamento do jogo -STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' fornece informação incorreta +STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' produz informação incorreta STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}A informação de carga/adaptação para '{1:ENGINE}' é diferente da lista de compra depois da construção. Isto pode fazer a renovação/substituição automática falhar se adaptar corretamente STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' causou um loop infinito na chamada de produção STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Chamada {1:HEX} devolveu resultado desconhecido/inválido {2:HEX} @@ -3620,7 +3620,7 @@ STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Carga ne STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} é necessário STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} é necessário no inverno STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} entregue -STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (ainda necessário) +STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (ainda é necessário) STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (entregue) STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Localidade cresce a cada {ORANGE}{UNITS_DAYS_OR_SECONDS} STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Localidade cresce a cada {ORANGE}{UNITS_DAYS_OR_SECONDS} (financiada) @@ -3656,7 +3656,7 @@ STR_LOCAL_AUTHORITY_ACTION_LARGE_ADVERTISING_CAMPAIGN :Campanha public STR_LOCAL_AUTHORITY_ACTION_ROAD_RECONSTRUCTION :Financiar a reconstrução das estradas locais STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :Construir estátua do proprietário da empresa STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Financiar novos edifícios -STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Comprar direitos exclusivos de transportes +STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Comprar direitos exclusivos de transporte STR_LOCAL_AUTHORITY_ACTION_BRIBE :Subornar a autoridade local ###next-name-looks-similar @@ -3665,7 +3665,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma campanha publicitária grande local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na avaliação da estação em um raio grande ao redor do centro da localidade{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Financiar a reconstrução da rede urbana de estradas.{}Provoca uma perturbação considerável no tráfego por até 6 meses.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}Financiar a reconstrução da rede urbana de estradas.{}Provoca uma perturbação considerável no tráfego por até 6 minutos.{}{POP_COLOUR}Custo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Construir uma estátua em homenagem à sua empresa.{}Produz um aumento permanente na classificação da estação nesta cidade..{}{POP_COLOUR}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Construir uma estátua em homenagem à sua empresa.{}Produz um aumento permanente na classificação da estação nesta localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Financiar a construção de novos edifícios na localidade.{}Produz um aumento temporário no crescimento desta localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Comprar os direitos exclusivos de transporte na localidade por 12 meses.{}A autoridade local não permitirá que passageiros e cargas usem as estações dos concorrentes. Um suborno bem sucedido feito por um concorrente irá cancelar este contrato.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Comprar os direitos exclusivos de transporte na localidade por 12 minutos.{}A autoridade local não permitirá que passageiros e cargas usem as estações dos concorrentes. Um suborno bem sucedido feito por um concorrente irá cancelar este contrato.{}{POP_COLOUR}Custo: {CURRENCY_LONG} @@ -3721,7 +3721,7 @@ STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Serviço STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} de {STRING} para {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique em um serviço para centralizar visualização principal em uma indústria/localidade. Ctrl+Clique para abrir uma nova visualização na localização da indústria/localidade STR_SUBSIDIES_OFFERED_EXPIRY_DATE :até {DATE_SHORT} -STR_SUBSIDIES_OFFERED_EXPIRY_TIME :durante {UNITS_MONTHS_OR_MINUTES} +STR_SUBSIDIES_OFFERED_EXPIRY_TIME :por {UNITS_MONTHS_OR_MINUTES} STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :até {DATE_SHORT} STR_SUBSIDIES_SUBSIDISED_EXPIRY_TIME :{UNITS_MONTHS_OR_MINUTES} restante{P "" s} @@ -3749,7 +3749,7 @@ STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Selecion STR_STATION_LIST_CARGO_FILTER_ALL_AND_NO_RATING :Todos os tipos de carga e sem classificação STR_STATION_LIST_CARGO_FILTER_MULTIPLE :Vários tipos de carga STR_STATION_LIST_CARGO_FILTER_NO_CARGO_TYPES :Sem tipos de carga -STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :Somente sem classificação de carga +STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :Apenas sem classificação de carga STR_STATION_LIST_CARGO_FILTER_SELECT_ALL :Selecionar tudo e sem classificação STR_STATION_LIST_CARGO_FILTER_NO_RATING :Sem classificação de carga STR_STATION_LIST_CARGO_FILTER_EXPAND :Mostrar mais... @@ -3760,8 +3760,8 @@ STR_STATION_VIEW_WAITING_CARGO :{WHITE}{CARGO_L STR_STATION_VIEW_RESERVED :{YELLOW}({CARGO_SHORT} reservado para carregamento) STR_STATION_VIEW_ACCEPTS_BUTTON :{BLACK}Aceitas -STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Mostrar lista de cargas aceitas -STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Aceita: {WHITE}{CARGO_LIST} +STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Mostrar lista de cargas que são aceitas +STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Aceitas: {WHITE}{CARGO_LIST} STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Esta estação tem direitos exclusivos de transporte nesta localidade. STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} adquiriu direitos exclusivos de transporte nesta localidade. @@ -3780,7 +3780,7 @@ STR_STATION_VIEW_PLANNED_AMOUNT :Quantidade: Pla STR_STATION_VIEW_FROM :{YELLOW}{CARGO_SHORT} de {STATION} STR_STATION_VIEW_VIA :{YELLOW}{CARGO_SHORT} via {STATION} STR_STATION_VIEW_TO :{YELLOW}{CARGO_SHORT} para {STATION} -STR_STATION_VIEW_FROM_ANY :{RED}{CARGO_SHORT} de estação desconhecida +STR_STATION_VIEW_FROM_ANY :{RED}{CARGO_SHORT} de qualquer estação STR_STATION_VIEW_TO_ANY :{RED}{CARGO_SHORT} para qualquer estação STR_STATION_VIEW_VIA_ANY :{RED}{CARGO_SHORT} via qualquer estação STR_STATION_VIEW_FROM_HERE :{GREEN}{CARGO_SHORT} desta estação @@ -3825,7 +3825,7 @@ STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Alterar STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização da boia. Ctrl+Clique para abrir uma nova visualização na localização da boia STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Alterar o nome da boia -STR_EDIT_WAYPOINT_NAME :{WHITE}Editar nome do ponto de controle +STR_EDIT_WAYPOINT_NAME :{WHITE}Editar o nome do ponto de controle # Finances window STR_FINANCES_CAPTION :{WHITE}Finanças de {COMPANY} {BLACK}{COMPANY_NUM} @@ -3876,7 +3876,7 @@ STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Infraest STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY} {BLACK}{COMPANY_NUM} STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Presidente) -STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inauguração: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inaugurado: {WHITE}{NUM} STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Esquema de Cores: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Veículos: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} tre{P m ns} @@ -3909,11 +3909,11 @@ STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Fazer a STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nova Face STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Escolher nova face para o presidente STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Esquema de Cores -STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Alterar pintura dos veículos da empresa +STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Alterar a cor dos veículos da empresa STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Nome da Empresa -STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}Alterar nome da empresa +STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}Alterar o nome da empresa STR_COMPANY_VIEW_PRESIDENT_NAME_BUTTON :{BLACK}Nome do Presidente -STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Alterar nome do presidente +STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Alterar o nome do presidente STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nome da Empresa STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nome do Presidente @@ -4030,7 +4030,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - STR_GROUP_CREATE_TOOLTIP :{BLACK}Clique para criar um grupo STR_GROUP_DELETE_TOOLTIP :{BLACK}Excluir o grupo selecionado STR_GROUP_RENAME_TOOLTIP :{BLACK}Alterar o nome do grupo selecionado -STR_GROUP_LIVERY_TOOLTIP :{BLACK}Alterar a pintura do grupo selecionado +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Alterar a cor do grupo selecionado STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clique para proteger este grupo da substituição automática global. Ctrl+Clique para também proteger os subgrupos. STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Excluir grupo @@ -4088,7 +4088,7 @@ STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Adaptáv STR_PURCHASE_INFO_ALL_TYPES :Todos os tipos de carga STR_PURCHASE_INFO_NONE :Nenhuma STR_PURCHASE_INFO_ENGINES_ONLY :Somente locomotivas -STR_PURCHASE_INFO_ALL_BUT :Todas menos {CARGO_LIST} +STR_PURCHASE_INFO_ALL_BUT :Todas, exceto {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Força de Tração máx.: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Autonomia: {GOLD}{COMMA} quadrados STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Tipo de aeronave: {GOLD}{STRING} @@ -4120,7 +4120,7 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar o veículo ferroviário selecionado. Pressione também Shift para apenas mostrar o custo estimado STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar o veículo rodoviário selecionado. Pressione também Shift para apenas mostrar o custo estimado STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar a embarcação selecionada. Pressione também Shift para apenas mostrar o custo estimado -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar aeronave selecionada. Pressione também Shift para apenas mostrar o custo estimado +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar a aeronave selecionada. Pressione também Shift para apenas mostrar o custo estimado ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e adaptar o veículo ferroviário selecionado. Pressione também Shift para apenas mostrar o custo estimado @@ -4218,10 +4218,10 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Clonar E STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Clonar Aeronave ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Comprar uma cópia de um trem incluindo todos os vagões. Clique neste botão e depois em um trem que estiver dentro ou fora de um depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Comprar uma cópia de um veículo rodoviário. Clique neste botão e depois em um veículo que estiver dentro ou fora de um depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Comprar uma cópia de uma embarcação. Clique neste botão e depois em uma embarcação que estiver dentro ou fora de um depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Comprar uma cópia de uma aeronave. Clique neste botão e depois em uma aeronave que estiver dentro ou fora de um hangar. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Comprar uma cópia de um trem incluindo todos os vagões. Clique neste botão e depois em um trem que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Comprar uma cópia de um veículo rodoviário. Clique neste botão e depois em um veículo que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Comprar uma cópia de uma embarcação. Clique neste botão e depois em uma embarcação que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Comprar uma cópia de uma aeronave. Clique neste botão e depois em uma aeronave que está dentro ou fora do hangar. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização do depósito ferroviário. Ctrl+Clique para abrir uma nova visualização na localização do depósito ferroviário @@ -4297,7 +4297,7 @@ STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Escolher STR_REPLACE_VEHICLES_START :{BLACK}Iniciar Substituição de Veículos STR_REPLACE_VEHICLES_NOW :Substituir todos os veículos agora -STR_REPLACE_VEHICLES_WHEN_OLD :Substituir somente veículos velhos +STR_REPLACE_VEHICLES_WHEN_OLD :Substituir apenas veículos velhos STR_REPLACE_HELP_START_BUTTON :{BLACK}Pressione para iniciar a substituição do tipo de locomotiva selecionada à esquerda com o tipo de locomotiva selecionada à direita STR_REPLACE_NOT_REPLACING :{BLACK}Não substituindo STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Nenhum veículo selecionado @@ -4326,7 +4326,7 @@ STR_REPLACE_ROAD_VEHICLES :Veículos Rodov STR_REPLACE_TRAM_VEHICLES :Bondes STR_REPLACE_REMOVE_WAGON :{BLACK}Remoção de vagões ({STRING}): {ORANGE}{STRING} -STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}A substituição automática irá manter o trem com o mesmo comprimento removendo vagões (começando pela frente), se a substituição da locomotiva aumentar o comprimento do trem +STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Forçar a substituição automática a manter o trem com o mesmo comprimento removendo vagões (começando pela frente), se a substituição da locomotiva aumentar o comprimento do trem STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl+Clique para também aplicar aos subgrupos # Vehicle view @@ -4786,7 +4786,7 @@ STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Verifica STR_ERROR_AI_NO_AI_FOUND :Não foi encontrada IA adequada para carregar.{}Esta IA é um pacote vazio e não fará nada.{}Você pode obter várias IAs usando o sistema de 'Conteúdo Online' STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Um dos scripts em execução travou. Favor relatar isto ao autor do script com uma captura de tela da Janela de Depuração de IA/Script de Jogo -STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}A janela de Depuração de IA/Script de Jogo está disponível somente para o servidor +STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}A janela de Depuração de IA/Script de Jogo está disponível apenas para o servidor # AI configuration window STR_AI_CONFIG_CAPTION_AI :{WHITE}Configurações de IA @@ -5097,7 +5097,7 @@ STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... deve STR_ERROR_SHIP_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... deve estar parado em um depósito STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}... deve estar parado em um hangar -STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Trens podem ser modificados somente quando estão parados em um depósito +STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Trens só podem ser modificados quando estão parados em um depósito STR_ERROR_TRAIN_TOO_LONG :{WHITE}Trem muito longo STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Não é possível inverter a direção do veículo... STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}... composto por múltiplas unidades @@ -5111,7 +5111,7 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Não é STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Tipo de depósito errado # Depot unbunching related errors -STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... pode ter somente uma ordem de desagrupar +STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... só pode ter uma ordem de desagrupar STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... não é possível usar ordens de carga completa quando o veículo tem uma ordem de desagrupar STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... não é possível desagrupar um veículo com uma ordem de carga completa STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... não é possível usar ordens condicionais quando um veículo tem uma ordem de desagrupar @@ -5327,7 +5327,7 @@ STR_ERROR_NO_BUOY :{WHITE}Não exi # Timetable related errors STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Não é possível programar veículo... -STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Veículos podem aguardar somente em estações +STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Veículos só podem aguardar em estações STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Este veículo não para nesta estação STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... horário incompleto STR_ERROR_TIMETABLE_NOT_STARTED :{WHITE}... o horário ainda não começou diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 7a7e496544..9368171a94 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -3079,6 +3079,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propieta STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Propietari del rail: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autoritat local: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Cap +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordenades: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Índex de casella: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Construït/renovat: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Classe d'estació: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipus d'estació: {LTBLUE}{STRING} diff --git a/src/lang/german.txt b/src/lang/german.txt index 6f168022ad..3b01a95bf6 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -3079,6 +3079,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Straßen STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Gleiseigentümer: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Gehört zur Gemeinde: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Keine +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinaten: {LTBLUE}{NUM} × {NUM} × {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Kachelindex: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Errichtet/renoviert am: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stationsklasse: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stationstyp: {LTBLUE}{STRING} diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 7ae6971895..7b9df5503e 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -3142,6 +3142,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}A villam STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}A vasúti pálya tulajdonosa: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Helyi önkormányzat: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Nincs +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordináták: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Mező index: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Épült/felújítva: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Állomás osztálya: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Állomás típusa: {LTBLUE}{STRING} diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 65baa1222e..a7412f40c0 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -3078,6 +3078,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Tramschi STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Schinnebesëtzer: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Gemeng: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Keng +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinaten: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Feldindex: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Gebaut/renovéiert: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Statiounsklass: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Statiounstyp: {LTBLUE}{STRING} diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 0bd6d9d2c9..6af099ca69 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -3078,6 +3078,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}有轨 STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}铁路归属:{LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}地方政府:{LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :没有 +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}坐标:{LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}格编号:{LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}建造/翻新于:{LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}车站分类: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}车站类型: {LTBLUE}{STRING} diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 2eca86d2da..9c90e722a7 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -321,10 +321,12 @@ STR_UNITS_HEIGHT_SI :{DECIMAL} m # Time units used in string control characters STR_UNITS_DAYS :{COMMA}{NBSP}{P deň dni dní} STR_UNITS_SECONDS :{COMMA}{NBSP}sek{P 0 "unda" "undy" "únd"} +STR_UNITS_TICKS :{COMMA}{NBSP}tik{P "" y ov} STR_UNITS_MONTHS :{NUM}{NBSP}mesiac{P "" "e" "ov"} STR_UNITS_MINUTES :{NUM}{NBSP}{P minúta minút minút} +STR_UNITS_YEARS :{NUM}{NBSP}roky{P "" y ov} STR_UNITS_PERIODS :{NUM}{NBSP}{P obdobie obdobia období} # Common window strings @@ -392,7 +394,9 @@ STR_SORT_BY_TYPE :Typ STR_SORT_BY_TRANSPORTED :Prepravené STR_SORT_BY_NUMBER :Číslo STR_SORT_BY_PROFIT_LAST_YEAR :Zisk v minulom roku +STR_SORT_BY_PROFIT_LAST_PERIOD :Zisk v minulom období STR_SORT_BY_PROFIT_THIS_YEAR :Zisk v tomto roku +STR_SORT_BY_PROFIT_THIS_PERIOD :Zisk v tomto období STR_SORT_BY_AGE :Vek STR_SORT_BY_RELIABILITY :Spoľahlivosť STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Kapacita podľa typu nákladu @@ -420,9 +424,13 @@ STR_SORT_BY_POPULATION :Populácia STR_SORT_BY_RATING :Hodnotenie STR_SORT_BY_NUM_VEHICLES :Počet vozidiel STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Celkový zisk v minulom roku +STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD :Celkový zisk v minulom období STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Celkový zisk v tomto roku +STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Celkový zisk v tomto období STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Priemerný zisk v minulom roku +STR_SORT_BY_AVERAGE_PROFIT_LAST_PERIOD :Priemerný zisk v minulom období STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Priemerný zisk v tomto roku +STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Priemerný zisk v tomto období # Group by options for vehicle list STR_GROUP_BY_NONE :Žiadne @@ -579,6 +587,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Vymazať všetk # About menu STR_ABOUT_MENU_LAND_BLOCK_INFO :Informácie o pozemku +STR_ABOUT_MENU_HELP :Nápoveda a manuály STR_ABOUT_MENU_TOGGLE_CONSOLE :Zobraziť / skryť konzolu STR_ABOUT_MENU_AI_DEBUG :Ladenie AI/skriptu STR_ABOUT_MENU_SCREENSHOT :Snímka obrazovky @@ -587,6 +596,7 @@ STR_ABOUT_MENU_ABOUT_OPENTTD :O hre 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite zarovnávač STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Prepnúť okrajové boxy STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Prepnutie zafarbenia blokov hliny +STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Prepnúť kontúry widgetov ###length 31 STR_DAY_NUMBER_1ST :1. @@ -663,8 +673,11 @@ STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Graf pre STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Graf hodnotenia výkonu (najvyššie hodnotenie je 1000) STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Graf hodnoty spoločnosti +STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Posledných 72 minút STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Ceny prepravy +STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Dní v preprave +STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Sekúnd v preprave STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Platba za prepravu 10 jednotiek (alebo 10 000 litrov) nákladu cez 20 políčok STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Povoliť všetky STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Zakázať všetky @@ -713,7 +726,11 @@ STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Úver: STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Spolu: ###next-name-looks-similar +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}Počet vozidiel, ktoré vykazovali zisk v poslednom roku. Tieto vozidlá zahrňujú cestné vozidlá, vlaky, lode a lietadlá +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Počet vozidiel, ktoré vykazovali zisk v poslednom období. Tieto vozidlá zahrňujú cestné vozidlá, vlaky, lode a lietadlá STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Počet nedávno obsluhovaných staníc. Železničné stanice, autobusové zastávky, letiská a pod. sa počítajú oddelene aj keď patria do rovnakej stanice +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}Zisk vozidla s najnižším príjmom (len vozidlá staršie ako 2 roky sú zahrnuté) +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}Zisk vozidla s najnižším príjmom (len vozidlá staršie ako 2 obdobia sú zahrnuté) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Množstvo peňazí zarobených v kvartáli s najmenším ziskom v posledných 12 kvartáloch STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Množstvo peňazí zarobených v kvartáli s najväčším ziskom v posledných 12 kvartáloch STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Počet jednotiek nákladu prepravených v posledných štyroch kvartáloch @@ -864,6 +881,7 @@ STR_STATUSBAR_AUTOSAVE :{RED}AUTOULOŽE STR_STATUSBAR_SAVING_GAME :{RED}* * HRA SA UKLADÁ * * STR_STATUSBAR_SPECTATOR :{WHITE}(sledujúci) +STR_STATUSBAR_INFINITE_MONEY :{WHITE}(neobmedzené financie) # News message history STR_MESSAGE_HISTORY :{WHITE}Archív správ @@ -961,13 +979,18 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G " STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Otvoriť okno skupiny zamerané na skupinu vozidla +STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}{STATION} už neprjíma: {CARGO_LIST} STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION} teraz prijíma: {CARGO_LIST} STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Ponuka dotácie skončila:{}{}Preprava {STRING.g} z {STRING} do {STRING} už nebude dotovaná STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Dotácie stiahnuté:{}{}Preprava {STRING.g} z {STRING} do {STRING} už nie je dotovaná ###length 4 +STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Dopravný chaos v {TOWN}!{}{}Kompletná rekonštrukcie ciest zaplatená {STRING} prináša 6 mesiacov utrpenia všetkým vodičom! +STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}Dopravný chaos v {TOWN}!{}{}Kompletná rekonštrukcie ciest zaplatená {STRING} prináša 6 minút utrpenia všetkým vodičom! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Prepravné monopoly! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLACK}Autorita mesta {TOWN} podpísala kontrakt s {STRING} pre exkluzívne transportné práva na 12 mesiacov! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}Autorita mesta {TOWN} podpísala kontrakt s {STRING} pre exkluzívne transportné práva na 12 minút! # Extra view window STR_EXTRA_VIEWPORT_TITLE :{WHITE}Pohľad {COMMA} @@ -1100,6 +1123,11 @@ STR_GAME_OPTIONS_GUI_SCALE_5X :5x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Automatizovaný prieskum STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Zúčastniť sa automatizovaného prieskumu +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Ak je zapnuté, OpenTTD odošle výsledky prieskumu pri ukončení hry +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}O prieskume a súkromí +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Otvorí prehliadač s viacero informáciami o automatickom prieskume +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Náhľad výsledkov prieskumu +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Zobraziť výsledky prieskumu aktuálnej hry STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafika @@ -1122,12 +1150,16 @@ STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Dodatoč STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(žiadne nainštalované doplnky na integráciu so sociálnymi platformami) +STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{BLACK}{STRING} ({STRING}) STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :Platforma: STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Stav pluginu: +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_RUNNING :{GREEN}Beží STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_FAILED :{RED}Nepodarilo sa inicializovať STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_PLATFORM_NOT_RUNNING :{ORANGE}{STRING} nebeží +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNLOADED :{RED}Vyložený STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :{RED}Duplicitný doplnok +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNSUPPORTED_API :{RED}Nepodporovaná verzia STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Neplatný podpis STR_BASESET_STATUS :{STRING} {RED}({NUM} chýbajúc{P i e e}/poškoden{P ý é é} súbor{P "" y y}) @@ -1143,6 +1175,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Znížen STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Zvýšenie hodnoty vašej meny oproti jednej libre (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Nastaviť kurz pre vašu menu oproti libre (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Oddeľovač: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Nastaviť oddeľovač pre vašu menu STR_CURRENCY_PREFIX :{LTBLUE}Predpona: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Nastavit prefix pre vašu menu @@ -1294,6 +1328,8 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :vpravo STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}sek{P 0 "unda" "undy" "únd"} +STR_CONFIG_SETTING_INFINITE_MONEY :Neobmedzené financie: {STRING} +STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Umožniť neobmedzené míňanie peňazí, a vypnúť bankrupciu spoločností STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximálny počiatočný úver: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximálna množstvo peňazí ktoré si môže spoločnosť požičať (bez inflácie) @@ -1319,7 +1355,9 @@ STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Zvoľte ako ve STR_CONFIG_SETTING_SUBSIDY_DURATION :Trvanie dotácie: {STRING} ###length 2 STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Počet rokov, na ktoré sa udelí dotácia +STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT_PERIODS :Nastaviť počet období na ktoré sa udelí dotácia +STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{UNITS_YEARS_OR_PERIODS} ###setting-zero-is-special STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Žiadne ponúknuté dotácie @@ -1448,7 +1486,8 @@ STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :Umožnite firm STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Povoliť zakúpenie exkluzívnych dopravných práv: {STRING} ###length 2 -STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Ak si spoločnosť zakúpi exkluzívne prepravné práva od mesta, stanice protihráčov (pasažieri a náklad) nebudú prijímať žiaden náklad po celý rok ! +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Ak si spoločnosť zakúpi exkluzívne prepravné práva od mesta, stanice protihráčov (pasažieri a náklad) nebudú prijímať žiaden náklad po dobu 12 mesiacov ! +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT_MINUTES :Ak si spoločnosť zakúpi exkluzívne prepravné práva od mesta, stanice protihráčov (pasažieri a náklad) nebudú prijímať žiaden náklad po dobu 12 minút ! STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Povoliť financovanie stavieb: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Povoliť spoločnostiam finančne prispievať na rozvoj mesta a budovanie nových domov. @@ -1473,6 +1512,8 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Žiadne STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Obmedzené STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normálny +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Povoliť výstavbu križovatiek na cestách či koľajniciach vlastnených protihráčom: {STRING} +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Povoliť výstavbu križovatiek na cestách či koľajniciach vlastnených protihráčom STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Povoliť prejazdné zastávky na mestských cestách: {STRING} STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Povoliť budovanie "prejazdných" nakládok a zastávok na cestách vlastnených mestom @@ -1486,6 +1527,8 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Ak je zapnuté, STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Predvolená farba novej spoločnosti: {STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Zvoľte začiatočnú farbu pre spoločnosť +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Počiatočná sekundárna farba spoločnosti: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Zvoľte počiatočnú sekundárnu farbu spoločnosti, pokiaľ používate NewGRF ktorý to umožňuje. STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Letiská nikdy neexiprujú: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Povoluje zachovať vsetky typy letísk navzdy. @@ -1502,16 +1545,30 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :U všetkých vo STR_CONFIG_SETTING_WARN_INCOME_LESS :Varovať ak je vozidlo stratové: {STRING} ###length 2 -STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Ak je zapnuté, zobrazí sa správa ak vozidlo nevykázalo žiaden zisk za predošlý rok. +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Ak je zapnuté, zobrazí sa správa ak vozidlo nevykázalo žiaden zisk za predošlý kalendárny rok. +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Ak je zapnuté, zobrazí sa správa ak vozidlo nevykázalo žiaden zisk za predošlé obdobie. STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Nikdy neprestať s výrobou starých vozidiel: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Ak je zapnuté, všetky vozidlá zostanú k dispozícii navždy. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Časovač: {STRING} +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Zvoliť jednotky pre časovač. Toto nieje možné neskôr zmeniť.{}{}Kalendárový základ je klasický OpenTTD mód, kde rok má 12 mesiacov, a každý mesiac 28-31 dní.{}{}V hodinovom móde, produkcia tovaru a financie sú založené na minútových krokoch, čo je zhruba tak dlho, ako trvá 30 dní v kalendárovom móde. Zoskupené sú po 12 minútových obdobiach, čo je ekvivalent jedného roka v kalendárovom móde.{}{}V oboch módoch je klasický kalendár, ktorý je použitý na predstavenie nových vozidiel, domov, a inej infraštruktúry. ###length 2 +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalendár +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Hodiny +STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minút za rok: {STRING} +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Zvoľte počet minút za jeden kalendárny rok. Predvolená hodnota je 12. Nastavte 0, aby sa kalendárne obdobie nemenilo. Toto nastavenie neovlivňuje simuláciu ekonómie, a je dostupná len v hodinovom móde. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special +STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (čas kalendáru pozastavený) +STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Škála produkcie tovaru mestom: {STRING} +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Škála produkcie tovaru mestami o toľkoto percent +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Škála produkcie tovaru priemyslom: {STRING} +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Škála produkcie tovaru priemyslom o toľkoto percent +STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatická obnova dopravných prostriedkov, keď sú staré: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Ak je zapnuté, vozidlá blížiace sa ku koncu svojej životnosti budú automaticky vymenené ak sú splnené podmienky na výmenu. @@ -1723,7 +1780,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Povolí použit STR_CONFIG_SETTING_LOADING_INDICATORS :Zobraziť ukazovatele nakladania/vykladania: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Zvoľte či indikátory nakladania/vykladania budú zobrazené nad vozidlom. +STR_CONFIG_SETTING_TIMETABLE_MODE :Jednotka času pre cestovné poriadky: {STRING} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Zvoľte jednotky času použité v cestovných poriadkoch ###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Dní +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Sekundy +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Tiknutia STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Zobraziť príchody a odchody v cestovných poriadkoch: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Zobrazí predpokladané časy príchodov a odchodov v časových rozpisoch. @@ -1761,9 +1823,11 @@ STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Prehrať zvuk p ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR :Koniec roka: {STRING} +STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Koniec obdobia: {STRING} ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Prehrať zvuk na konci roku pri zobrazení zhrnutia výkonu spoločnosti počas roka v porovnaní s minulým rokom +STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Prehrať zvuk na konci každého obdobia, ktorý oznámy výkon spoločnosti počas tohoto obdobia oproti minulému obdobiu STR_CONFIG_SETTING_SOUND_CONFIRM :Výstavba: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Prehrať zvuk pri úspešnej výstavbe alebo pri iných akciách @@ -1922,8 +1986,9 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Automaticky sta STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Zvoľte rok od ktorého sa budú používať elekrické návestidlá na tratiach. Pred týmto rokom sa budú používať mechanické návestidlá (funkcionalita je ale stále rovnaká, iba vzhľad je rozličný) STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Prepínanie medzi typmi návestidiel: {STRING} -STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Výber návestidiel použitých v zámene pomocou Ctrl+kliku na návestidlo počas umiestňovania návestidiel +STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Výber návestidiel použitých v zámene pomocou Ctrl+Kliku na návestidlo počas umiestňovania návestidiel ###length 2 +STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :Len táto skupina STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Všetky viditeľné STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Zobraziť typy návestidiel: {STRING} @@ -2021,6 +2086,10 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :žiadne STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Násobok počiatočnej veľkosti mesta: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Priemerná veľkosť veľkomiest v porovnaní k mestám na začiatku hry. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Aktualizovať spojovací graf každých {STRING} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Čas medzi po sebe idúcimi prepočítavaniami spojovacieho grafu. Každé prepočítanie vypočíta trasu pre jednu komponentu grafu. To znamená, že hodnota X tohoto nastavenia neobnoví celý graf, len niektoré jeho časti. Čím menšia táto hodnota, tým viac procesorového času je potreba na jeho vypočítanie. Čím je hodnota vyššia, tým dlhšie bude trvať začiatok distrubúcie tovaru na nových trasách. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Využiť {STRING} na prepočítanie distribučného grafu +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Čas potrebný na prepočítanie komponentov spojovacieho grafu. Keď započne prepočítavanie, vytvorí sa nové vlákno ktorému je umožnené existovať po túto dobu. Čím je hodnota nižšia, tým je väčšia pravdepodobnosť, že vlákno nedobehne kedy má. Hra sa pozastaví ("lag") pokial vlákno nedobehne. Čím je hodnota vyššia, tým dlhšie bude trvať grafu sa aktualizovať v prípade, že sa trasy zmenia. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Druh distribúcie pre cestujúcich: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symetricky" znamená, že približne rovnaké množstvo pasažierov bude cestovať zo stanice A do stanice B ako z B do A. "Asymetricky" znamená, že v oboch smeroch môže cestovať ľubovoľné množstvo pasažierov. "Manuálne" znamená, že sa pre pasažierov nevykoná automatická distribúcia. @@ -2052,6 +2121,8 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Vždy, keď sa STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperiálne (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrické (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_DAYS :Herné jednotky (políčka/deň) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_SECS :Herné jednotky (políčka/sekunda) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :Uzle STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Jednotky výkonu vozidiel: {STRING} @@ -2106,10 +2177,12 @@ STR_CONFIG_SETTING_LIMITATIONS :Obmedzenia STR_CONFIG_SETTING_ACCIDENTS :Katastrofy / Nehody STR_CONFIG_SETTING_GENWORLD :Generovanie sveta STR_CONFIG_SETTING_ENVIRONMENT :Prostredie +STR_CONFIG_SETTING_ENVIRONMENT_TIME :Čas STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :Miestne správy STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :Mestá STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Priemysel STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Distribúcia nákladu +STR_CONFIG_SETTING_ENVIRONMENT_TREES :Stromy STR_CONFIG_SETTING_AI :Konkurenti STR_CONFIG_SETTING_AI_NPC :Počítačový hráči STR_CONFIG_SETTING_NETWORK :Sieť @@ -2165,6 +2238,7 @@ STR_INTRO_MULTIPLAYER :{BLACK}Viacero STR_INTRO_GAME_OPTIONS :{BLACK}Možnosti hry STR_INTRO_HIGHSCORE :{BLACK}Najvyššie skóre +STR_INTRO_HELP :{BLACK}Nápoveda a manuály STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Nastavenia STR_INTRO_NEWGRF_SETTINGS :{BLACK}Nastavenia NewGRF STR_INTRO_ONLINE_CONTENT :{BLACK}Skontrolovať online obsah @@ -2184,13 +2258,14 @@ STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Vybrať STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Vybrať subtropickú krajinu STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Vybrať krajinu hračiek -STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Zobraziť možnosti hry -STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Zobraziť tabuľku hráčov s najvyšším skóre -STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Zobraziť nastavenia -STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Zobraziť nastavenia NewGRF +STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Otvoriť možnosti hry +STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Otvoriť tabuľku hráčov s najvyšším skóre +STR_INTRO_TOOLTIP_HELP :{BLACK}Získajte prístup k dokumentácií a on-line zdrojom +STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Otvoriť nastavenia +STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Otvoriť nastavenia NewGRF STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Skontrolovať nový a aktualizovaný obsah pre stiahnutie -STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Zobraziť AI nastavenia -STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Zobraz nastavenia skriptu +STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Otvoriť nastavenia AI +STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Otvoriť nastavenia skriptu STR_INTRO_TOOLTIP_QUIT :{BLACK}Ukončiť 'OpenTTD' STR_INTRO_BASESET :{BLACK}Vo vybranej základnej sade grafiky chýba {NUM} prv{P ok ky kov}. Prosím skontrolujte aktualizácie sady grafiky. @@ -2241,9 +2316,15 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Zobrazi STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Zobraziť farebné schémy pre cestné vozidlá STR_LIVERY_SHIP_TOOLTIP :{BLACK}Zobraziť farebné schémy pre lode STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Zobraziť farebné schémy pre lietadlá +STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Zobraziť farby skupín vlakov +STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Zobraziť farby skupín cestných vozidiel +STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Zobraziť farby skupín lodí STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Vyber primárnu farbu pre vybranú schému. Ctrl + klik nastaví túto farbu pre každú schému STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Vyber sekundárnu farbu pre vybranú schému. Ctrl + klik nastaví túto farbu pre každý schému STR_LIVERY_PANEL_TOOLTIP :{BLACK}Vyber farebnú schému, ktorá sa má meniť (CTRL+klik pre viacero schém). Zaškrtávacie pole prepína používanie schémy +STR_LIVERY_TRAIN_GROUP_EMPTY :Niesú nastavené žiadne skupiny vlakov +STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Nieje vytvorená žiadna skupina cestných vozidiel +STR_LIVERY_SHIP_GROUP_EMPTY :Žiadne skupiny lodí niesú nastavené ###length 23 STR_LIVERY_DEFAULT :Štandardná schéma @@ -2495,6 +2576,10 @@ STR_NETWORK_ASK_RELAY_NO :{BLACK}Nie STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Áno, tentokrát STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Áno, znova sa nepýtať +STR_NETWORK_ASK_SURVEY_CAPTION :Zúčastniť sa automatizovaného prieskumu? +STR_NETWORK_ASK_SURVEY_TEXT :Chceli by ste sa zúčastniť automatického prieskumu?{}OpenTTD bude zdieľať prieskum keď ukončite hru.{}Toto nastavenie môžete kedykoľvek zmeniť v nastavení "Nastavenia Hry" +STR_NETWORK_ASK_SURVEY_PREVIEW :Náhľad výsledkov prieskumu +STR_NETWORK_ASK_SURVEY_LINK :O prieskume a súkromí STR_NETWORK_ASK_SURVEY_NO :Nie STR_NETWORK_ASK_SURVEY_YES :Áno @@ -2718,7 +2803,10 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}preťažené # Linkgraph tooltip +STR_LINKGRAPH_STATS_TOOLTIP_MONTH :{BLACK}{CARGO_LONG} bude prepravených za mesiac z {STATION} do {STATION} ({COMMA}% celkovej kapacity){STRING} +STR_LINKGRAPH_STATS_TOOLTIP_MINUTE :{BLACK}{CARGO_LONG} bude prepravených za minútu z {STATION} do {STATION} ({COMMA}% celkovej kapacity){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} na prepravu naspäť ({COMMA}% kapacity) +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Priemerný čas cesty: {UNITS_DAYS_OR_SECONDS} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Ukázať oblasť pokrytia @@ -2787,7 +2875,9 @@ STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Vyberte STR_STATION_CLASS_DFLT :Pôvodná STR_STATION_CLASS_DFLT_STATION :Predvolená stanica +STR_STATION_CLASS_DFLT_ROADSTOP :Predvolená zastávka STR_STATION_CLASS_WAYP :Smerové body +STR_STATION_CLASS_WAYP_WAYPOINT :Predvolený bod # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Výber návestidla @@ -3029,7 +3119,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Vyber pr # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Informácie o pozemku -STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu políčka. Ctrl+klik otvorí nové okno s pohľadom na políčko +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu políčka. Ctrl+Klik otvorí nové okno s pohľadom na políčko STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Náklady na odstránenie: {LTBLUE}N/A STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Náklady na odstránenie: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Zisk pri odstránení: {LTBLUE}{CURRENCY_LONG} @@ -3040,7 +3130,9 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Vlastní STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Vlastník železnice: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Miestna správa: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Neznáme -STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Postavené: {LTBLUE}{DATE_LONG} +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Súradnice: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Index políčka: {LTBLUE}{NUM} ({HEX}) +STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Postavené/opravené: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Trieda stanice: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Typ stanice: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Trieda letiska: {LTBLUE}{STRING} @@ -3247,11 +3339,13 @@ STR_MAPGEN_MAPSIZE :{BLACK}Veľkos STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Výber veľkosti mapy v políčkach. Počet dostupných políčok bude o trochu nižší STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Počet miest: +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Zvoľte hustotu miest, alebo zadajte vlastné číslo STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Názvy miest: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Výber štýlu názvov miest STR_MAPGEN_DATE :{BLACK}Rok: STR_MAPGEN_DATE_TOOLTIP :{BLACK}Vyberte dátum začiatku STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Počet priemyslu: +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Zvoľte hustotu priemyslu, alebo zadajte vlastné číslo STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Najvyšší vrchol: STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Vyberte najvyšší vrchol, ktorý sa hra pokúsi vytvoriť, meraný v nadmorskej výške STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Zvýšiť maximálnu výšku najvyššieho vrchola na mape o jeden @@ -3333,6 +3427,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Rovná k STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Generovať rovnú krajinu STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Náhodná krajina STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Výška rovnej krajiny: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Vyberte výšku zeme nad hladinou mora STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Znizit vysku rovnej krajiny o jedno STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Zvýšiť výšku rovnej krajiny o jedno @@ -3435,6 +3530,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Skontrol STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} na {HEX} STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Objekt STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Typ koľají +STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Typ cesty STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variabilný 60+x parameter (hexadecimálne) @@ -3568,6 +3664,7 @@ STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Veľkomesto) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Obyvateľstvo: {ORANGE}{COMMA}{BLACK} Domov: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} minulý mesiac: {ORANGE}{COMMA}{BLACK} najviac: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}{CARGO_LIST} poslednú minútu: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Tovar potrebný k rozrastu mesta: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} potrebný STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} potrebné v zime @@ -3613,8 +3710,12 @@ STR_LOCAL_AUTHORITY_ACTION_BRIBE :Podplatiť mies STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Spustiť malú reklamnú kampaň, ktorá priláka viac cestujúcich a nákladu k vašej spoločnosti.{}Zabezpečí dočasné zvýšenie hodnotenia staníc v malom okruhu okolo centra mesta.{}{POP_COLOUR}Cena: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Spustiť strednú reklamnú kampaň, ktorá priláka viac cestujúcich a nákladu k vašej spoločnosti.{}Zabezpečí dočasné zvýšenie hodnotenia staníc v stredne veľkom okruhu okolo centra mesta.{}{POP_COLOUR}Cena: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Spustiť veľkú reklamnú kampaň, ktorá priláka viac cestujúcich a nákladu k vašej spoločnosti.{}Zabezpečí dočasné zvýšenie hodnotenia staníc vo veľkom okruhu okolo centra mesta.{}{POP_COLOUR}Cena: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Financovať rekonštrukciu cestnej infraštruktúry.{}Spôsobí znateľné narušenie chodu poremávky po dobu 6 mesiacov.{}{POP_COLOUR}Cena: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}Financovať rekonštrukciu cestnej infraštruktúry.{}Spôsobí znateľné narušenie chodu poremávky po dobu 6 minút.{}{POP_COLOUR}Cena: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Postaviť sochu na počesť vašej spoločnosti.{}Zabezpečí trvalé zvýšenie hodnotenia staníc v tomto meste.{}{POP_COLOUR}Cena: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Financovať výstavbu nových budov v meste.{}Zabezpečí dočasné zrýchlenie rastu tohto mesta.{}{POP_COLOUR}Cena: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Zakúpiť exkluzívne prepravné práva na 12 mesiacov.{}Autority tohot mesta neumožnia cestujúcim a priemyslu využívať prepravné stanice protihráčov. Úspešné podplatenie od protihráča tento kontrakt zruší.{}{POP_COLOUR}Cena: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Zakúpiž exkluzívne prepravné práva na 12 minút.{}Autority tohot mesta neumožnia cestujúcim a priemyslu využívať prepravné stanice protihráčov. Úspešné podplatenie od protihráča tento kontrakt zruší.{}{POP_COLOUR}Cena: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Podplatiť miestnu správu pre zvýšenie hodnotenia vašej spoločnosti a zrušiť exkluzívne prepravné práva konkurenta, s rizikom prísneho trestu pri odhalení.{}{POP_COLOUR}Cena: {CURRENCY_LONG} # Goal window @@ -3661,9 +3762,15 @@ STR_GOAL_QUESTION_BUTTON_CLOSE :Zavrieť # Subsidies window STR_SUBSIDIES_CAPTION :{WHITE}Dotácie STR_SUBSIDIES_OFFERED_TITLE :{BLACK}Ponúknuté dotácie: +STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING} z {STRING} do {STRING}{YELLOW} ({STRING}) STR_SUBSIDIES_NONE :{ORANGE}Žiadne STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}V súčasnosti poskytované dotácie: +STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} z {STRING} do {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Kliknúť na trasu pre centrovanie pohľadu na továreň/mesto +STR_SUBSIDIES_OFFERED_EXPIRY_DATE :do {DATE_SHORT} +STR_SUBSIDIES_OFFERED_EXPIRY_TIME :do {UNITS_MONTHS_OR_MINUTES} +STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :do {DATE_SHORT} +STR_SUBSIDIES_SUBSIDISED_EXPIRY_TIME :Zostáva {UNITS_MONTHS_OR_MINUTES} # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Kniha príbehov @@ -3686,7 +3793,10 @@ STR_STATION_LIST_STATION :{YELLOW}{STATIO STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- Žiadne - STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Označiť všetky možnosti +STR_STATION_LIST_CARGO_FILTER_ALL_AND_NO_RATING :Všetky druhy nákladu a žiadne hodnotenia +STR_STATION_LIST_CARGO_FILTER_NO_CARGO_TYPES :Žiaden typ nákladu STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :Iba hodnotenie bez nákladu +STR_STATION_LIST_CARGO_FILTER_NO_RATING :Žiadne hodnotenie tovaru # Station view window STR_STATION_VIEW_CAPTION :{WHITE}{STATION} {STATION_FEATURES} @@ -3702,6 +3812,8 @@ STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :Spoločnosť {Y STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Hodnotenie STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Zobraziť hodnotenia stanice +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MONTH :{BLACK}Dodávka za mesiac a miestne hodnotenie: +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MINUTE :{BLACK}Dodávka za minútu a miestne hodnotenie: STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) STR_STATION_VIEW_GROUP :{BLACK}Zoskupiť podľa @@ -3762,6 +3874,8 @@ STR_EDIT_WAYPOINT_NAME :{WHITE}Upraviť # Finances window STR_FINANCES_CAPTION :{WHITE}Financie spoločnosti {COMPANY} {BLACK}{COMPANY_NUM} STR_FINANCES_YEAR :{WHITE}{NUM} +STR_FINANCES_YEAR_CAPTION :{WHITE}Rok +STR_FINANCES_PERIOD_CAPTION :{WHITE}Obdobie ###length 3 STR_FINANCES_REVENUE_TITLE :{WHITE}Výnosy @@ -3797,9 +3911,9 @@ STR_FINANCES_MAX_LOAN :{WHITE}Maximál STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG} STR_FINANCES_BORROW_BUTTON :{BLACK}Požičať {CURRENCY_LONG} -STR_FINANCES_BORROW_TOOLTIP :{BLACK}Zvýšiť veľkosť úveru. Crtl+klik požičia koľko sa dá +STR_FINANCES_BORROW_TOOLTIP :{BLACK}Zvýšiť veľkosť úveru. Crtl+Klik požičia koľko sa dá STR_FINANCES_REPAY_BUTTON :{BLACK}Splatiť {CURRENCY_LONG} -STR_FINANCES_REPAY_TOOLTIP :{BLACK}Splatiť časť úveru. Ctrl+klik splatí koľko sa dá +STR_FINANCES_REPAY_TOOLTIP :{BLACK}Splatiť časť úveru. Ctrl+Klik splatí koľko sa dá STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Infraštruktúra # Company view @@ -3833,6 +3947,8 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detaily STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Zobraziť podrobné políčka infraštruktúry STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Dať peniaze STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Presunúť peniaze do tejto spoločnosti +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Nevraživé pravzatie +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Nevraživé pravzatie tejto spoločnosti STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nová tvár STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Vybrať novú tvár prezidenta @@ -3860,6 +3976,8 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Vodné k STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stanice: STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Políčka staníc STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Letiská +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR :{WHITE}{CURRENCY_LONG}/rok +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD :{WHITE}{CURRENCY_LONG}/obdobie # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Priemysel @@ -3879,6 +3997,7 @@ STR_INDUSTRY_DIRECTORY_FILTER_NONE :Žiadne # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produkcia minulý mesiac: +STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produkcia za poslednú minútu: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% prepraven{P é é ých}) STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu priemyslu. Ctrl+klik otvorí nové okno s pohľadom na priemysel STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Úroveň produkcie: {YELLOW}{COMMA}% @@ -3920,6 +4039,7 @@ STR_VEHICLE_LIST_REPLACE_VEHICLES :Vymeniť vozidl STR_VEHICLE_LIST_SEND_FOR_SERVICING :Vykonať servis STR_VEHICLE_LIST_CREATE_GROUP :Vytvoriť skupinu STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Zisk tento rok: {CURRENCY_LONG} (minulý rok: {CURRENCY_LONG}) +STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{TINY_FONT}{BLACK}Zisk za toto obdobie: {CURRENCY_LONG} (minulé obdobie: {CURRENCY_LONG}) STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} @@ -3994,6 +4114,8 @@ STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Rýchlos STR_PURCHASE_INFO_SPEED :{BLACK}Rýchlosť: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Rýchlosť na oceáne: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Rýchlosť na kanále/rieke: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_RUNNINGCOST_YEAR :{BLACK}Prevádzkové náklady: {GOLD}{CURRENCY_LONG}/rok +STR_PURCHASE_INFO_RUNNINGCOST_PERIOD :{BLACK}Prevádzkové náklady: {GOLD}{CURRENCY_LONG}/obdobie STR_PURCHASE_INFO_CAPACITY :{BLACK}Kapacita: {GOLD}{CARGO_LONG} {STRING} STR_PURCHASE_INFO_REFITTABLE :(možná prestavba) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Vyrobené: {GOLD}{NUM}{BLACK} Životnosť: {GOLD}{COMMA} rok{P "" y ov} @@ -4186,6 +4308,18 @@ STR_ENGINE_PREVIEW_TRAM_VEHICLE :{G=z}električk STR_ENGINE_PREVIEW_AIRCRAFT :{G=s}lietadlo STR_ENGINE_PREVIEW_SHIP :{G=z}loď +STR_ENGINE_PREVIEW_TEXT3 :{BLACK}{STRING}{}{5:STRING}{}{STRING} +STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING}{}{STRING}{}{STRING}{}{STRING} +STR_ENGINE_PREVIEW_COST_WEIGHT :Cena: {CURRENCY_LONG} Váha: {WEIGHT_SHORT} +STR_ENGINE_PREVIEW_COST_MAX_SPEED :Cena: {CURRENCY_LONG} Max. Rýchlosť: {VELOCITY} +STR_ENGINE_PREVIEW_SPEED_POWER :Rýchlosť: {VELOCITY} Výkon: {POWER} +STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Rýchlosť: {VELOCITY} Výkon: {POWER} Max. T.E.: {FORCE} +STR_ENGINE_PREVIEW_TYPE :Typ lietadla: {STRING} +STR_ENGINE_PREVIEW_TYPE_RANGE :Typ lietadla: {STRING} Dolet: {COMMA} políčok +STR_ENGINE_PREVIEW_RUNCOST_YEAR :Prevádzkové náklady: {CURRENCY_LONG}/rok +STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Prevádzkové náklady: {CURRENCY_LONG}/obdobie +STR_ENGINE_PREVIEW_CAPACITY :Kapacita: {CARGO_LONG} +STR_ENGINE_PREVIEW_CAPACITY_2 :Kapacita: {CARGO_LONG}, {CARGO_LONG} # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Výmena {STRING} - {STRING} @@ -4299,11 +4433,12 @@ STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Nie je pr STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Čakám na uvoľnenie trate STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}K ďalšej destinácii je to príliš ďaleko -STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}Smeruje do {STATION}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Smeruje do {0:STATION} STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Bez určenia, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Smeruje do {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Smeruje do {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Smeruje do {0:WAYPOINT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Smeruje do {0:DEPOT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Servis v {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Rozbaliť a poslať do servisu v {0:DEPOT} STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}Nedokáže sa dostať do {STATION}, {VELOCITY} STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}Nedokáže sa dostať do {WAYPOINT}, {VELOCITY} @@ -4340,6 +4475,8 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Hmotnos STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Zisk v tomto roku: {LTBLUE}{CURRENCY_LONG} (minulý rok: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Zisk v tomto roku: {LTBLUE}{CURRENCY_LONG} (minulý rok: {CURRENCY_LONG}) {BLACK}Min. výkon: {LTBLUE}{POWER_TO_WEIGHT} +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Zisk za toto obdobie: {LTBLUE}{CURRENCY_LONG} (minulé obdobie: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Zisk za toto obdobie: {LTBLUE}{CURRENCY_LONG} (miunlé obdobie: {CURRENCY_LONG}) {BLACK}Min. výkon: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Spoľahlivosť: {LTBLUE}{COMMA}% {BLACK}Poruchy od posledného servisu: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Vyrobený: {LTBLUE}{NUM}{BLACK} Cena: {LTBLUE}{CURRENCY_LONG} @@ -4350,11 +4487,18 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kapacita STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Transfer kredity: {LTBLUE}{CURRENCY_LONG} +STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Posledný servis: {LTBLUE}{DATE_LONG} +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Posledný servis: pred {LTBLUE}{NUM} minútami +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Zvýši servisný interval o 10 dní. Ctrl+klik zvýši servisný interval o 5 dní +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Zvýši servisný interval o 5 minút. Ctrl+klik zvýši servisný interval o 1 minútu +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Zvýši servisný interval o 10 percent. Ctrl+klik zvýši servisný interval o 5 percent STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Zníži servisný interval o 10 dní. Ctrl+klik skráti servisný interval o 5 dní STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Zníži servisný interval o 5 minút. Ctrl+klik skráti servisný interval o 1 minútu +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Zníži servisný interval o 10 percent. Ctrl+klik skráti servisný interval o 5 percent STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Zmeniť typ servisného intervalu STR_VEHICLE_DETAILS_DEFAULT :Štandardné +STR_VEHICLE_DETAILS_DAYS :Dní STR_VEHICLE_DETAILS_PERCENT :Percentáž ###length VEHICLE_TYPES @@ -4459,6 +4603,8 @@ STR_ORDER_DROP_HALT_DEPOT :Zastav # Depot action tooltips, one per vehicle type ###length VEHICLE_TYPES +STR_ORDER_SHIP_DEPOT_ACTION_TOOLTIP :{BLACK}Zvoľte akciu, ktorá sa vykoná v tomto depe +STR_ORDER_HANGAR_ACTION_TOOLTIP :{BLACK}Zvoľte akciu, ktorá sa vykoná v tomto hangári ###next-name-looks-similar STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Údaje vozidla na základe ktorých sa vykoná skok @@ -4528,6 +4674,7 @@ STR_ORDER_REFIT_ORDER :(Prestavba na { STR_ORDER_REFIT_STOP_ORDER :(Prestavba na {STRING} a zastav) STR_ORDER_STOP_ORDER :(Zastav) +STR_ORDER_WAIT_TO_UNBUNCH :(počkať na rozdelenie) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Nemožno použiť stanicu){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4605,8 +4752,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Toto voz STR_TIMETABLE_STATUS_LATE :{BLACK}Toto vozidlo mešká {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Toto vozidlo ide {STRING} skôr STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Tento cestovný poriadok ešte nezačal +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Tento cestovný poriadok začne v {STRING} +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Tento cestovný poriadok začne za {COMMA} sekúnd +STR_TIMETABLE_START :{BLACK}Začať cestovný poriadok +STR_TIMETABLE_START_TOOLTIP :{BLACK}Vyberte, kedy sa má začať cestovný poriadok. Ctrl+Klik rovnomerne rozdelí začiatky všetkých vozidiel, ktoré zdielajú tento poriadok, na základe ich relatívneho poradia +STR_TIMETABLE_START_SECONDS_QUERY :Počet sekúnd do začiatku cestovného poriadku STR_TIMETABLE_CHANGE_TIME :{BLACK}Zmeniť čas STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Zmeniť dĺžku trvania označeného príkazu. Ctrl+klik nastaví čas pre všetky príkazy @@ -4630,6 +4782,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Očakáv STR_TIMETABLE_SCHEDULED :{BLACK}Plánované STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Prepnúť medzi očakávaným a plánovaným +STR_TIMETABLE_ARRIVAL_DATE :P: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :O: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :P: {COLOUR}{COMMA} sek +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :O: {COLOUR}{COMMA} sek # Date window (for timetable) @@ -4675,6 +4831,7 @@ STR_AI_CONFIG_RANDOM_AI :Náhodná AI STR_AI_CONFIG_NONE :(žiadne) STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM} STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Maximálny počet konkurentov: {ORANGE}{COMMA} +STR_AI_CONFIG_COMPETITORS_INTERVAL :{LTBLUE}Interval medzi začiatkami súperov: {ORANGE}{COMMA} minút{P a y ""} STR_AI_CONFIG_MOVE_UP :{BLACK}Posunúť vyššie STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Posunúť vyššie vybrané AI v zozname @@ -4724,15 +4881,25 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN # Textfile window +STR_TEXTFILE_JUMPLIST :{WHITE}Obsah +STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}Skočiť do sekcie v zobrazenom súbore pomocou tohoto zoznamu +STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING} +STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Späť v histórií navigácie +STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Vrátiť sa vpred v histórií navigácie STR_TEXTFILE_WRAP_TEXT :{WHITE}Zalamovať text STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Zalamovať text v okne tak, aby ho nebolo nutné posúvať -STR_TEXTFILE_VIEW_README :{BLACK}Zobraziť readme +STR_TEXTFILE_VIEW_README :{BLACK}Readme +STR_TEXTFILE_VIEW_README_TOOLTIP :Zobraziť readme tohoto obsahu STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Log zmien +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Zobraziť zoznam zmien tohoto obsahu STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licencia +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Zobraziť licenciu tohoto obsahu ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} "čítajma" {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} log zmien {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} licencia {STRING} +STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Náhľad výsledkov prieskumu +STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}OpenTTD dokument '{STRING}' # Vehicle loading indicators @@ -4760,7 +4927,7 @@ STR_MESSAGE_ESTIMATED_COST :{WHITE}Odhadova STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Odhadovaný zisk: {CURRENCY_LONG} # Saveload messages -STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ukladanie hry este bezi,{}pockajte prosim na dokoncenie! +STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ukladanie hry ešte beží,{}počkajte prosím na dokončenie! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatické ukladanie zlyhalo STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Zariadenie je nečitateľné STR_ERROR_GAME_SAVE_FAILED :{WHITE}Uloženie hry zlyhalo{}{STRING} @@ -4977,6 +5144,11 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Nemožno STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Nesprávny typ depa # Depot unbunching related errors +STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... môže mať len jeden zdieľaný príkaz +STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... nemôžeš použiť príkaz k plnému naloženiu pokial má vozidlo zdielaný príkaz +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... nemôžeš rozplánovať vozidlá s príkazmi na plné naloženie +STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... nemôžeš použiť podmienený príkaz pokial má vozidlo zdielaný príkaz +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... nemôžeš rozplánovať vozidlá s podmieneným príkazom # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} je dlho po výmene @@ -5190,6 +5362,8 @@ STR_ERROR_NO_BUOY :{WHITE}Nenašla STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Vozidlu nie je možné zadať cestovný poriadok ... STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vozidlá možu cakat len v staniciach. STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Toto vozidlo nezastavuje v tejto stanici. +STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... cestovný poriadok nieje dokončený +STR_ERROR_TIMETABLE_NOT_STARTED :{WHITE}... cestovný poriadok ešte nezačal # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... príliš veľa popisov @@ -5635,6 +5809,7 @@ STR_UNKNOWN_STATION :neznáma stanic STR_DEFAULT_SIGN_NAME :Popis STR_COMPANY_SOMEONE :niekto +STR_SAVEGAME_DURATION_REALTIME :{NUM}h {NUM}m STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING} STR_SAVEGAME_NAME_SPECTATOR :Pozorovateľ, {1:STRING} @@ -5669,6 +5844,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}tis +STR_CURRENCY_SHORT_MEGA :{NBSP}mil +STR_CURRENCY_SHORT_GIGA :{NBSP}bil +STR_CURRENCY_SHORT_TERA :{NBSP}tril STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index c6d8be08f7..3703b742de 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1031,6 +1031,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Відт STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Відкрити вікно групи з центром на групах транспорту +STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}{STATION} більше не приймає: {CARGO_LIST} STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION} тепер приймає: {CARGO_LIST} STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Субсидія більше не пропонується:{}{}Перевезення {STRING.r} з {STRING} до {STRING} @@ -2288,13 +2289,14 @@ STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Вибр STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Вибрати 'тропічний' ландшафт STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Вибрати 'іграшковий' ландшафт -STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Показати налаштування гри -STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Показати таблицю рекордів +STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Відкрити налаштування гри +STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Відкрити таблицю рекордів +STR_INTRO_TOOLTIP_HELP :{BLACK}Отримати доступ до довідки й мережевих ресурсів STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Показати налаштування -STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Показати налаштування NewGRF +STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Відкрити налаштування NewGRF STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Перевірити доступний для завантаження додатковий контент STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Показати налаштування ШІ -STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Показати налаштування ігрового скрипту +STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Відкрити налаштування ігрового скрипту STR_INTRO_TOOLTIP_QUIT :{BLACK}Вийти з OpenTTD STR_INTRO_BASESET :{BLACK}В обраному наборі базової графіки немає {NUM} спрайт{P а ів ів}. Будь ласка, оновіть набір графіки. @@ -2906,7 +2908,9 @@ STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Вибе STR_STATION_CLASS_DFLT :Звичайна STR_STATION_CLASS_DFLT_STATION :Звичайна станція +STR_STATION_CLASS_DFLT_ROADSTOP :Звичайна зупинка STR_STATION_CLASS_WAYP :Пункт +STR_STATION_CLASS_WAYP_WAYPOINT :Звичайна точка маршруту # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Вибір сигналів @@ -3693,6 +3697,7 @@ STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (місто) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Населення: {ORANGE}{COMMA}{BLACK} Будинки: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} минулого місяця: {ORANGE}{COMMA}{BLACK} макс: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}{CARGO_LIST} минулої хвилини: {ORANGE}{COMMA}{BLACK} найбільше: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Вантаж, потрібний для зростання міста: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} потрібно STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} потрібно взимку @@ -4822,6 +4827,7 @@ STR_TIMETABLE_SCHEDULED :{BLACK}Приз STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Перемкнути очікуване на заплановане STR_TIMETABLE_ARRIVAL_DATE :В: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :В: {COLOUR}{DATE_TINY} STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :В: {COLOUR}{COMMA} сек STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :П: {COLOUR}{COMMA} сек From 30e1a61c043371b8fcfaecbe80320716ee362014 Mon Sep 17 00:00:00 2001 From: Kuhnovic <68320206+Kuhnovic@users.noreply.github.com> Date: Fri, 8 Mar 2024 14:23:33 +0100 Subject: [PATCH 060/695] Fix: YAPF doesn't check destination for start nodes (#12217) --- src/pathfinder/yapf/yapf_base.hpp | 50 +++++++++++-------------------- 1 file changed, 17 insertions(+), 33 deletions(-) diff --git a/src/pathfinder/yapf/yapf_base.hpp b/src/pathfinder/yapf/yapf_base.hpp index 07d90cf939..88c875d842 100644 --- a/src/pathfinder/yapf/yapf_base.hpp +++ b/src/pathfinder/yapf/yapf_base.hpp @@ -113,45 +113,39 @@ public: m_veh = v; Yapf().PfSetStartupNodes(); - bool bDestFound = true; for (;;) { m_num_steps++; - Node *n = m_nodes.GetBestOpenNode(); - if (n == nullptr) { + Node *best_open_node = m_nodes.GetBestOpenNode(); + if (best_open_node == nullptr) break; + + if (Yapf().PfDetectDestination(*best_open_node)) { + m_pBestDestNode = best_open_node; break; } - /* if the best open node was worse than the best path found, we can finish */ - if (m_pBestDestNode != nullptr && m_pBestDestNode->GetCost() < n->GetCostEstimate()) { - break; - } + Yapf().PfFollowNode(*best_open_node); + if (m_max_search_nodes != 0 && m_nodes.ClosedCount() >= m_max_search_nodes) break; - Yapf().PfFollowNode(*n); - if (m_max_search_nodes == 0 || m_nodes.ClosedCount() < m_max_search_nodes) { - m_nodes.PopOpenNode(n->GetKey()); - m_nodes.InsertClosedNode(*n); - } else { - bDestFound = false; - break; - } + m_nodes.PopOpenNode(best_open_node->GetKey()); + m_nodes.InsertClosedNode(*best_open_node); } - bDestFound &= (m_pBestDestNode != nullptr); + const bool destination_found = (m_pBestDestNode != nullptr); if (_debug_yapf_level >= 3) { - UnitID veh_idx = (m_veh != nullptr) ? m_veh->unitnumber : 0; - char ttc = Yapf().TransportTypeChar(); - float cache_hit_ratio = (m_stats_cache_hits == 0) ? 0.0f : ((float)m_stats_cache_hits / (float)(m_stats_cache_hits + m_stats_cost_calcs) * 100.0f); - int cost = bDestFound ? m_pBestDestNode->m_cost : -1; - int dist = bDestFound ? m_pBestDestNode->m_estimate - m_pBestDestNode->m_cost : -1; + const UnitID veh_idx = (m_veh != nullptr) ? m_veh->unitnumber : 0; + const char ttc = Yapf().TransportTypeChar(); + const float cache_hit_ratio = (m_stats_cache_hits == 0) ? 0.0f : ((float)m_stats_cache_hits / (float)(m_stats_cache_hits + m_stats_cost_calcs) * 100.0f); + const int cost = destination_found ? m_pBestDestNode->m_cost : -1; + const int dist = destination_found ? m_pBestDestNode->m_estimate - m_pBestDestNode->m_cost : -1; Debug(yapf, 3, "[YAPF{}]{}{:4d} - {} rounds - {} open - {} closed - CHR {:4.1f}% - C {} D {}", - ttc, bDestFound ? '-' : '!', veh_idx, m_num_steps, m_nodes.OpenCount(), m_nodes.ClosedCount(), cache_hit_ratio, cost, dist + ttc, destination_found ? '-' : '!', veh_idx, m_num_steps, m_nodes.OpenCount(), m_nodes.ClosedCount(), cache_hit_ratio, cost, dist ); } - return bDestFound; + return destination_found; } /** @@ -242,16 +236,6 @@ public: /* have the cost or estimate callbacks marked this node as invalid? */ if (!bValid) return; - /* detect the destination */ - bool bDestination = Yapf().PfDetectDestination(n); - if (bDestination) { - if (m_pBestDestNode == nullptr || n < *m_pBestDestNode) { - m_pBestDestNode = &n; - } - m_nodes.FoundBestNode(n); - return; - } - /* The new node can be set as the best intermediate node only once we're * certain it will be finalized by being inserted into the open list. */ bool set_intermediate = m_max_search_nodes > 0 && (m_pBestIntermediateNode == nullptr || (m_pBestIntermediateNode->GetCostEstimate() - m_pBestIntermediateNode->GetCost()) > (n.GetCostEstimate() - n.GetCost())); From a9de766fa6734ed4ce07a18062182169077c73f9 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 8 Mar 2024 13:23:48 +0000 Subject: [PATCH 061/695] Fix: Train running sounds should only be produced for engine parts. (#12229) --- src/vehicle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 5083a79037..24daa84e96 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1034,7 +1034,7 @@ void CallVehicleTicks() /* Check vehicle type specifics */ switch (v->type) { case VEH_TRAIN: - if (Train::From(v)->IsWagon()) continue; + if (!Train::From(v)->IsEngine()) continue; break; case VEH_ROAD: From 63b9284a7ec9c20e158ac5e7f41a4a81d8fae2e8 Mon Sep 17 00:00:00 2001 From: jcteotonio <68153577+jcteotonio@users.noreply.github.com> Date: Fri, 8 Mar 2024 13:25:01 +0000 Subject: [PATCH 062/695] Add: Portuguese Escudo currency (#12108) --- src/currency.cpp | 1 + src/currency.h | 1 + src/lang/english.txt | 3 ++- src/table/settings/locale_settings.ini | 2 +- 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/currency.cpp b/src/currency.cpp index 323d302582..bdf4598786 100644 --- a/src/currency.cpp +++ b/src/currency.cpp @@ -70,6 +70,7 @@ static const CurrencySpec origin_currency_specs[CURRENCY_END] = { { 19, "", CF_NOEURO, "Rp", "", "IDR", 0, STR_GAME_OPTIONS_CURRENCY_IDR }, ///< Indonesian Rupiah { 5, "", CF_NOEURO, "RM", "", "MYR", 0, STR_GAME_OPTIONS_CURRENCY_MYR }, ///< Malaysian Ringgit { 1, "", 2014, "", NBSP "Ls", "LVL", 1, STR_GAME_OPTIONS_CURRENCY_LVL }, ///< latvian lats + { 400, "", 2002, "", "$00", "PTE", 1, STR_GAME_OPTIONS_CURRENCY_PTE }, ///< portuguese escudo }; /** Array of currencies used by the system */ diff --git a/src/currency.h b/src/currency.h index 490f3efd01..be8793c749 100644 --- a/src/currency.h +++ b/src/currency.h @@ -67,6 +67,7 @@ enum Currencies { CURRENCY_IDR, ///< Indonesian Rupiah CURRENCY_MYR, ///< Malaysian Ringgit CURRENCY_LVL, ///< Latvian Lats + CURRENCY_PTE, ///< Portuguese Escudo CURRENCY_END, ///< always the last item }; diff --git a/src/lang/english.txt b/src/lang/english.txt index d9a7f812bb..59343bda49 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -967,7 +967,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Currency STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({RAW_STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :British Pound STR_GAME_OPTIONS_CURRENCY_USD :American Dollar STR_GAME_OPTIONS_CURRENCY_EUR :Euro @@ -1011,6 +1011,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Indian Rupee STR_GAME_OPTIONS_CURRENCY_IDR :Indonesian Rupiah STR_GAME_OPTIONS_CURRENCY_MYR :Malaysian Ringgit STR_GAME_OPTIONS_CURRENCY_LVL :Latvian Lats +STR_GAME_OPTIONS_CURRENCY_PTE :Portuguese Escudo STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Autosave STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Select interval between automatic game saves diff --git a/src/table/settings/locale_settings.ini b/src/table/settings/locale_settings.ini index b0e88f3451..7d23f4c7ae 100644 --- a/src/table/settings/locale_settings.ini +++ b/src/table/settings/locale_settings.ini @@ -12,7 +12,7 @@ static void SettingsValueVelocityUnit(const IntSettingDesc &sd, uint first_param uint8_t _old_units; ///< Old units from old savegames -static constexpr std::initializer_list _locale_currencies{"GBP", "USD", "EUR", "JPY", "ATS", "BEF", "CHF", "CZK", "DEM", "DKK", "ESP", "FIM", "FRF", "GRD", "HUF", "ISK", "ITL", "NLG", "NOK", "PLN", "RON", "RUR", "SIT", "SEK", "TRY", "SKK", "BRL", "EEK", "LTL", "KRW", "ZAR", "custom", "GEL", "IRR", "RUB", "MXN", "NTD", "CNY", "HKD", "INR", "IDR", "MYR", "LVL"}; +static constexpr std::initializer_list _locale_currencies{"GBP", "USD", "EUR", "JPY", "ATS", "BEF", "CHF", "CZK", "DEM", "DKK", "ESP", "FIM", "FRF", "GRD", "HUF", "ISK", "ITL", "NLG", "NOK", "PLN", "RON", "RUR", "SIT", "SEK", "TRY", "SKK", "BRL", "EEK", "LTL", "KRW", "ZAR", "custom", "GEL", "IRR", "RUB", "MXN", "NTD", "CNY", "HKD", "INR", "IDR", "MYR", "LVL", "PTE"}; static constexpr std::initializer_list _locale_units{"imperial", "metric", "si", "gameunits", "knots"}; static_assert(_locale_currencies.size() == CURRENCY_END); From aef8a345b25e57c4614260d0962a356095c9b2fa Mon Sep 17 00:00:00 2001 From: rubidium42 Date: Fri, 8 Mar 2024 14:26:14 +0100 Subject: [PATCH 063/695] Codefix #12162, 3105d0b: Textbuf::Assign read beyond std::string_view (#12177) --- src/textbuf.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/textbuf.cpp b/src/textbuf.cpp index 2cffc81aeb..60b839e326 100644 --- a/src/textbuf.cpp +++ b/src/textbuf.cpp @@ -413,9 +413,11 @@ void Textbuf::Assign(StringID string) */ void Textbuf::Assign(const std::string_view text) { - const char *last_of = &this->buf[this->max_bytes - 1]; - strecpy(this->buf, text.data(), last_of); - StrMakeValidInPlace(this->buf, last_of, SVS_NONE); + size_t bytes = std::min(this->max_bytes - 1, text.size()); + memcpy(this->buf, text.data(), bytes); + this->buf[bytes] = '\0'; + + StrMakeValidInPlace(this->buf, &this->buf[bytes], SVS_NONE); /* Make sure the name isn't too long for the text buffer in the number of * characters (not bytes). max_chars also counts the '\0' characters. */ From b8b80cb42e907ca57abed04f311ff73bbd2482c9 Mon Sep 17 00:00:00 2001 From: merni-ns <66267867+merni-ns@users.noreply.github.com> Date: Fri, 8 Mar 2024 18:59:04 +0530 Subject: [PATCH 064/695] Fix #12134: Use correct error messages if clearing drive-through road stops fails (#12139) --- src/station_cmd.cpp | 49 +++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index ef8e6bc7e2..c63b0531e2 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -4433,29 +4433,37 @@ static void ChangeTileOwner_Station(TileIndex tile, Owner old_owner, Owner new_o * Check if a drive-through road stop tile can be cleared. * Road stops built on town-owned roads check the conditions * that would allow clearing of the original road. - * @param tile road stop tile to check - * @param flags command flags - * @return true if the road can be cleared + * @param tile The road stop tile to check. + * @param flags Command flags. + * @return A succeeded command if the road can be removed, a failed command with the relevant error message otherwise. */ -static bool CanRemoveRoadWithStop(TileIndex tile, DoCommandFlag flags) +static CommandCost CanRemoveRoadWithStop(TileIndex tile, DoCommandFlag flags) { - /* Yeah... water can always remove stops, right? */ - if (_current_company == OWNER_WATER) return true; + /* Water flooding can always clear road stops. */ + if (_current_company == OWNER_WATER) return CommandCost(); + + CommandCost ret; if (GetRoadTypeTram(tile) != INVALID_ROADTYPE) { Owner tram_owner = GetRoadOwner(tile, RTT_TRAM); - if (tram_owner != OWNER_NONE && CheckOwnership(tram_owner).Failed()) return false; - } - if (GetRoadTypeRoad(tile) != INVALID_ROADTYPE) { - Owner road_owner = GetRoadOwner(tile, RTT_ROAD); - if (road_owner != OWNER_TOWN) { - if (road_owner != OWNER_NONE && CheckOwnership(road_owner).Failed()) return false; - } else { - if (CheckAllowRemoveRoad(tile, GetAnyRoadBits(tile, RTT_ROAD), OWNER_TOWN, RTT_ROAD, flags).Failed()) return false; + if (tram_owner != OWNER_NONE) { + ret = CheckOwnership(tram_owner); + if (ret.Failed()) return ret; } } - return true; + if (GetRoadTypeRoad(tile) != INVALID_ROADTYPE) { + Owner road_owner = GetRoadOwner(tile, RTT_ROAD); + if (road_owner == OWNER_TOWN) { + ret = CheckAllowRemoveRoad(tile, GetAnyRoadBits(tile, RTT_ROAD), OWNER_TOWN, RTT_ROAD, flags); + if (ret.Failed()) return ret; + } else if (road_owner != OWNER_NONE) { + ret = CheckOwnership(road_owner); + if (ret.Failed()) return ret; + } + } + + return CommandCost(); } /** @@ -4486,14 +4494,11 @@ CommandCost ClearTile_Station(TileIndex tile, DoCommandFlag flags) case STATION_RAIL: return RemoveRailStation(tile, flags); case STATION_WAYPOINT: return RemoveRailWaypoint(tile, flags); case STATION_AIRPORT: return RemoveAirport(tile, flags); - case STATION_TRUCK: - if (IsDriveThroughStopTile(tile) && !CanRemoveRoadWithStop(tile, flags)) { - return_cmd_error(STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST); - } - return RemoveRoadStop(tile, flags); + case STATION_TRUCK: [[fallthrough]]; case STATION_BUS: - if (IsDriveThroughStopTile(tile) && !CanRemoveRoadWithStop(tile, flags)) { - return_cmd_error(STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST); + if (IsDriveThroughStopTile(tile)) { + CommandCost remove_road = CanRemoveRoadWithStop(tile, flags); + if (remove_road.Failed()) return remove_road; } return RemoveRoadStop(tile, flags); case STATION_BUOY: return RemoveBuoy(tile, flags); From ab52f7eecfa27ab5e612d5cd30d515bb7ca601a7 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Mon, 19 Feb 2024 22:21:06 +0000 Subject: [PATCH 065/695] Fix ccb4c37: Aircraft could route to hangars outside their range when stopping at them --- src/aircraft_cmd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 7ad284b5b7..78260edb9b 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -134,7 +134,7 @@ static StationID FindNearestHangar(const Aircraft *v) const Station *next_dest = nullptr; if (max_range != 0) { if (v->current_order.IsType(OT_GOTO_STATION) || - (v->current_order.IsType(OT_GOTO_DEPOT) && v->current_order.GetDepotActionType() != ODATFB_NEAREST_DEPOT)) { + (v->current_order.IsType(OT_GOTO_DEPOT) && (v->current_order.GetDepotActionType() & ODATFB_NEAREST_DEPOT) == 0)) { last_dest = Station::GetIfValid(v->last_station_visited); next_dest = Station::GetIfValid(v->current_order.GetDestination()); } else { From 0c432bdc4de81f0c9fe8199fa23ab171d91b689c Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Mon, 19 Feb 2024 18:34:55 +0000 Subject: [PATCH 066/695] Fix 3947453: GetNextDecisionNode ignored go to nearest depot when combined with stop at depot --- src/order_cmd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index 62c9e55040..ce09ce93b9 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -392,7 +392,7 @@ const Order *OrderList::GetNextDecisionNode(const Order *next, uint hops) const } if (next->IsType(OT_GOTO_DEPOT)) { - if (next->GetDepotActionType() == ODATFB_HALT) return nullptr; + if ((next->GetDepotActionType() & ODATFB_HALT) != 0) return nullptr; if (next->IsRefit()) return next; } From 5806c2aba4601e5880738184f09ac68a0f5ff6aa Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Fri, 8 Mar 2024 10:19:50 -0500 Subject: [PATCH 067/695] Fix #12203: When unbunching at a depot, don't overlook implicit orders (#12220) --- src/vehicle.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 24daa84e96..9ca49be6ad 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -2445,8 +2445,8 @@ bool Vehicle::HasUnbunchingOrder() const static bool PreviousOrderIsUnbunching(const Vehicle *v) { /* If we are headed for the first order, we must wrap around back to the last order. */ - bool is_first_order = (v->GetOrder(v->cur_real_order_index) == v->GetFirstOrder()); - Order *previous_order = (is_first_order) ? v->GetLastOrder() : v->GetOrder(v->cur_real_order_index - 1); + bool is_first_order = (v->GetOrder(v->cur_implicit_order_index) == v->GetFirstOrder()); + Order *previous_order = (is_first_order) ? v->GetLastOrder() : v->GetOrder(v->cur_implicit_order_index - 1); if (previous_order == nullptr || !previous_order->IsType(OT_GOTO_DEPOT)) return false; return (previous_order->GetDepotActionType() & ODATFB_UNBUNCH) != 0; From 8dda387f821b6ce8a46db4203d03acb4036b9679 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Fri, 8 Mar 2024 12:12:41 +0100 Subject: [PATCH 068/695] Codechange: Use std::tuple for slope functions with two return values --- src/bridge_map.cpp | 3 +-- src/clear_cmd.cpp | 3 +-- src/dock_gui.cpp | 4 ++-- src/landscape.cpp | 29 ++++++++++------------------- src/landscape.h | 13 +++++-------- src/newgrf_commons.cpp | 3 +-- src/object_cmd.cpp | 7 +++---- src/rail_cmd.cpp | 9 +++------ src/road.cpp | 2 +- src/road_cmd.cpp | 8 +++----- src/script/api/script_tile.cpp | 3 +-- src/script/api/script_tunnel.cpp | 5 ++--- src/station_cmd.cpp | 6 ++---- src/tile_map.cpp | 25 ++++++++++--------------- src/tile_map.h | 24 ++++++++++++++++-------- src/town_cmd.cpp | 2 +- src/tree_cmd.cpp | 3 +-- src/tunnelbridge_cmd.cpp | 19 +++++++------------ src/viewport.cpp | 4 ++-- src/void_cmd.cpp | 3 +-- src/water_cmd.cpp | 17 ++++++----------- 21 files changed, 79 insertions(+), 113 deletions(-) diff --git a/src/bridge_map.cpp b/src/bridge_map.cpp index eb28673867..3c2e40552d 100644 --- a/src/bridge_map.cpp +++ b/src/bridge_map.cpp @@ -69,8 +69,7 @@ TileIndex GetOtherBridgeEnd(TileIndex tile) */ int GetBridgeHeight(TileIndex t) { - int h; - Slope tileh = GetTileSlope(t, &h); + auto [tileh, h] = GetTileSlopeZ(t); Foundation f = GetBridgeFoundation(tileh, DiagDirToAxis(GetTunnelBridgeDirection(t))); /* one height level extra for the ramp */ diff --git a/src/clear_cmd.cpp b/src/clear_cmd.cpp index 9831764b31..4df61805e3 100644 --- a/src/clear_cmd.cpp +++ b/src/clear_cmd.cpp @@ -129,8 +129,7 @@ static void DrawTile_Clear(TileInfo *ti) static int GetSlopePixelZ_Clear(TileIndex tile, uint x, uint y, bool) { - int z; - Slope tileh = GetTilePixelSlope(tile, &z); + auto [tileh, z] = GetTilePixelSlope(tile); return z + GetPartialPixelZ(x & 0xF, y & 0xF, tileh); } diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp index 76a778622a..f43c1ae7ba 100644 --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -67,8 +67,8 @@ void CcPlaySound_CONSTRUCTION_WATER(Commands, const CommandCost &result, TileInd */ static TileIndex GetOtherAqueductEnd(TileIndex tile_from, TileIndex *tile_to = nullptr) { - int z; - DiagDirection dir = GetInclinedSlopeDirection(GetTileSlope(tile_from, &z)); + auto [slope, z] = GetTileSlopeZ(tile_from); + DiagDirection dir = GetInclinedSlopeDirection(slope); /* If the direction isn't right, just return the next tile so the command * complains about the wrong slope instead of the ends not matching up. diff --git a/src/landscape.cpp b/src/landscape.cpp index 43dacf8a35..f5383884fb 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -373,28 +373,24 @@ void GetSlopePixelZOnEdge(Slope tileh, DiagDirection edge, int *z1, int *z2) * If a tile does not have a foundation, the function returns the same as GetTileSlope. * * @param tile The tile of interest. - * @param z returns the z of the foundation slope. (Can be nullptr, if not needed) - * @return The slope on top of the foundation. + * @return The slope on top of the foundation and the z of the foundation slope. */ -Slope GetFoundationSlope(TileIndex tile, int *z) +std::tuple GetFoundationSlope(TileIndex tile) { - Slope tileh = GetTileSlope(tile, z); + auto [tileh, z] = GetTileSlopeZ(tile); Foundation f = _tile_type_procs[GetTileType(tile)]->get_foundation_proc(tile, tileh); - uint z_inc = ApplyFoundationToSlope(f, &tileh); - if (z != nullptr) *z += z_inc; - return tileh; + z += ApplyFoundationToSlope(f, &tileh); + return {tileh, z}; } bool HasFoundationNW(TileIndex tile, Slope slope_here, uint z_here) { - int z; - int z_W_here = z_here; int z_N_here = z_here; GetSlopePixelZOnEdge(slope_here, DIAGDIR_NW, &z_W_here, &z_N_here); - Slope slope = GetFoundationPixelSlope(TILE_ADDXY(tile, 0, -1), &z); + auto [slope, z] = GetFoundationPixelSlope(TILE_ADDXY(tile, 0, -1)); int z_W = z; int z_N = z; GetSlopePixelZOnEdge(slope, DIAGDIR_SE, &z_W, &z_N); @@ -405,13 +401,11 @@ bool HasFoundationNW(TileIndex tile, Slope slope_here, uint z_here) bool HasFoundationNE(TileIndex tile, Slope slope_here, uint z_here) { - int z; - int z_E_here = z_here; int z_N_here = z_here; GetSlopePixelZOnEdge(slope_here, DIAGDIR_NE, &z_E_here, &z_N_here); - Slope slope = GetFoundationPixelSlope(TILE_ADDXY(tile, -1, 0), &z); + auto [slope, z] = GetFoundationPixelSlope(TILE_ADDXY(tile, -1, 0)); int z_E = z; int z_N = z; GetSlopePixelZOnEdge(slope, DIAGDIR_SW, &z_E, &z_N); @@ -432,8 +426,7 @@ void DrawFoundation(TileInfo *ti, Foundation f) assert(f != FOUNDATION_STEEP_BOTH); uint sprite_block = 0; - int z; - Slope slope = GetFoundationPixelSlope(ti->tile, &z); + auto [slope, z] = GetFoundationPixelSlope(ti->tile); /* Select the needed block of foundations sprites * Block 0: Walls at NW and NE edge @@ -1194,10 +1187,8 @@ static bool FlowsDown(TileIndex begin, TileIndex end) { assert(DistanceManhattan(begin, end) == 1); - int heightBegin; - int heightEnd; - Slope slopeBegin = GetTileSlope(begin, &heightBegin); - Slope slopeEnd = GetTileSlope(end, &heightEnd); + auto [slopeBegin, heightBegin] = GetTileSlopeZ(begin); + auto [slopeEnd, heightEnd] = GetTileSlopeZ(end); return heightEnd <= heightBegin && /* Slope either is inclined or flat; rivers don't support other slopes. */ diff --git a/src/landscape.h b/src/landscape.h index 249dcc9efa..96a5c6a331 100644 --- a/src/landscape.h +++ b/src/landscape.h @@ -34,7 +34,7 @@ byte LowestSnowLine(); void ClearSnowLine(); int GetSlopeZInCorner(Slope tileh, Corner corner); -Slope GetFoundationSlope(TileIndex tile, int *z = nullptr); +std::tuple GetFoundationSlope(TileIndex tile); uint GetPartialPixelZ(int x, int y, Slope corners); int GetSlopePixelZ(int x, int y, bool ground_vehicle = false); @@ -60,15 +60,12 @@ inline int GetSlopePixelZInCorner(Slope tileh, Corner corner) * If a tile does not have a foundation, the function returns the same as GetTilePixelSlope. * * @param tile The tile of interest. - * @param z returns the z of the foundation slope. (Can be nullptr, if not needed) - * @return The slope on top of the foundation. + * @return The slope on top of the foundation and the z of the foundation. */ -inline Slope GetFoundationPixelSlope(TileIndex tile, int *z) +inline std::tuple GetFoundationPixelSlope(TileIndex tile) { - assert(z != nullptr); - Slope s = GetFoundationSlope(tile, z); - *z *= TILE_HEIGHT; - return s; + auto [s, z] = GetFoundationSlope(tile); + return {s, z * TILE_HEIGHT}; } /** diff --git a/src/newgrf_commons.cpp b/src/newgrf_commons.cpp index cf83224830..7804c08e30 100644 --- a/src/newgrf_commons.cpp +++ b/src/newgrf_commons.cpp @@ -433,8 +433,7 @@ uint32_t GetNearbyTileInformation(TileIndex tile, bool grf_version8) /* Fake tile type for trees on shore */ if (IsTileType(tile, MP_TREES) && GetTreeGround(tile) == TREE_GROUND_SHORE) tile_type = MP_WATER; - int z; - Slope tileh = GetTilePixelSlope(tile, &z); + auto [tileh, z] = GetTilePixelSlope(tile); /* Return 0 if the tile is a land tile */ byte terrain_type = (HasTileWaterClass(tile) ? (GetWaterClass(tile) + 1) & 3 : 0) << 5 | GetTerrainType(tile) << 2 | (tile_type == MP_WATER ? 1 : 0) << 1; if (grf_version8) z /= TILE_HEIGHT; diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp index 3e2654a853..5ead59bd8a 100644 --- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -267,8 +267,8 @@ CommandCost CmdBuildObject(DoCommandFlag flags, TileIndex tile, ObjectType type, } /* So, now the surface is checked... check the slope of said surface. */ - int allowed_z; - if (GetTileSlope(tile, &allowed_z) != SLOPE_FLAT) allowed_z++; + auto [slope, allowed_z] = GetTileSlopeZ(tile); + if (slope != SLOPE_FLAT) allowed_z++; for (TileIndex t : ta) { uint16_t callback = CALLBACK_FAILED; @@ -492,8 +492,7 @@ static void DrawTile_Object(TileInfo *ti) static int GetSlopePixelZ_Object(TileIndex tile, uint x, uint y, bool) { if (IsObjectType(tile, OBJECT_OWNED_LAND)) { - int z; - Slope tileh = GetTilePixelSlope(tile, &z); + auto [tileh, z] = GetTilePixelSlope(tile); return z + GetPartialPixelZ(x & 0xF, y & 0xF, tileh); } else { diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 89329ea6d0..ac6130dadb 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -2580,8 +2580,7 @@ void DrawTrainDepotSprite(int x, int y, int dir, RailType railtype) static int GetSlopePixelZ_Track(TileIndex tile, uint x, uint y, bool) { if (IsPlainRail(tile)) { - int z; - Slope tileh = GetTilePixelSlope(tile, &z); + auto [tileh, z] = GetTilePixelSlope(tile); if (tileh == SLOPE_FLAT) return z; z += ApplyPixelFoundationToSlope(GetRailFoundation(tileh, GetTrackBits(tile)), &tileh); @@ -2608,8 +2607,7 @@ static void TileLoop_Track(TileIndex tile) switch (_settings_game.game_creation.landscape) { case LT_ARCTIC: { - int z; - Slope slope = GetTileSlope(tile, &z); + auto [slope, z] = GetTileSlopeZ(tile); bool half = false; /* for non-flat track, use lower part of track @@ -3052,8 +3050,7 @@ static Vehicle *EnsureNoShipProc(Vehicle *v, void *) static CommandCost TerraformTile_Track(TileIndex tile, DoCommandFlag flags, int z_new, Slope tileh_new) { - int z_old; - Slope tileh_old = GetTileSlope(tile, &z_old); + auto [tileh_old, z_old] = GetTileSlopeZ(tile); if (IsPlainRail(tile)) { TrackBits rail_bits = GetTrackBits(tile); /* Is there flat water on the lower halftile that must be cleared expensively? */ diff --git a/src/road.cpp b/src/road.cpp index d3de25d44f..248533c4fd 100644 --- a/src/road.cpp +++ b/src/road.cpp @@ -35,7 +35,7 @@ static bool IsPossibleCrossing(const TileIndex tile, Axis ax) return (IsTileType(tile, MP_RAILWAY) && GetRailTileType(tile) == RAIL_TILE_NORMAL && GetTrackBits(tile) == (ax == AXIS_X ? TRACK_BIT_Y : TRACK_BIT_X) && - GetFoundationSlope(tile) == SLOPE_FLAT); + std::get<0>(GetFoundationSlope(tile)) == SLOPE_FLAT); } /** diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index c2501a1d12..608010ea91 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -1926,8 +1926,7 @@ static int GetSlopePixelZ_Road(TileIndex tile, uint x, uint y, bool) { if (IsNormalRoad(tile)) { - int z; - Slope tileh = GetTilePixelSlope(tile, &z); + auto [tileh, z] = GetTilePixelSlope(tile); if (tileh == SLOPE_FLAT) return z; Foundation f = GetRoadFoundation(tileh, GetAllRoadBits(tile)); @@ -1999,7 +1998,7 @@ static void TileLoop_Road(TileIndex tile) if (t->road_build_months != 0 && (DistanceManhattan(t->xy, tile) < 8 || grp != HZB_TOWN_EDGE) && IsNormalRoad(tile) && !HasAtMostOneBit(GetAllRoadBits(tile))) { - if (GetFoundationSlope(tile) == SLOPE_FLAT && EnsureNoVehicleOnGround(tile).Succeeded() && Chance16(1, 40)) { + if (std::get<0>(GetFoundationSlope(tile)) == SLOPE_FLAT && EnsureNoVehicleOnGround(tile).Succeeded() && Chance16(1, 40)) { StartRoadWorks(tile); if (_settings_client.sound.ambient) SndPlayTileFx(SND_21_ROAD_WORKS, tile); @@ -2343,8 +2342,7 @@ static CommandCost TerraformTile_Road(TileIndex tile, DoCommandFlag flags, int z if (CheckRoadSlope(tileh_new, &bits_copy, ROAD_NONE, ROAD_NONE).Succeeded()) { /* CheckRoadSlope() sometimes changes the road_bits, if it does not agree with them. */ if (bits == bits_copy) { - int z_old; - Slope tileh_old = GetTileSlope(tile, &z_old); + auto [tileh_old, z_old] = GetTileSlopeZ(tile); /* Get the slope on top of the foundation */ z_old += ApplyFoundationToSlope(GetRoadFoundation(tileh_old, bits), &tileh_old); diff --git a/src/script/api/script_tile.cpp b/src/script/api/script_tile.cpp index f292bfd647..508ca201a7 100644 --- a/src/script/api/script_tile.cpp +++ b/src/script/api/script_tile.cpp @@ -199,8 +199,7 @@ { if (!::IsValidTile(tile) || !::IsValidCorner((::Corner)corner)) return -1; - int z; - ::Slope slope = ::GetTileSlope(tile, &z); + auto [slope, z] = ::GetTileSlopeZ(tile); return (z + ::GetSlopeZInCorner(slope, (::Corner)corner)); } diff --git a/src/script/api/script_tunnel.cpp b/src/script/api/script_tunnel.cpp index 1ae9f2d78f..ed7680593c 100644 --- a/src/script/api/script_tunnel.cpp +++ b/src/script/api/script_tunnel.cpp @@ -31,8 +31,7 @@ /* If it's a tunnel already, take the easy way out! */ if (IsTunnelTile(tile)) return ::GetOtherTunnelEnd(tile); - int start_z; - Slope start_tileh = ::GetTileSlope(tile, &start_z); + auto [start_tileh, start_z] = ::GetTileSlopeZ(tile); DiagDirection direction = ::GetInclinedSlopeDirection(start_tileh); if (direction == INVALID_DIAGDIR) return INVALID_TILE; @@ -42,7 +41,7 @@ tile += delta; if (!::IsValidTile(tile)) return INVALID_TILE; - ::GetTileSlope(tile, &end_z); + std::tie(std::ignore, end_z) = ::GetTileSlopeZ(tile); } while (start_z != end_z); return tile; diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index c63b0531e2..9ffb2630a8 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -805,8 +805,7 @@ CommandCost CheckBuildableTile(TileIndex tile, uint invalid_dirs, int &allowed_z CommandCost ret = EnsureNoVehicleOnGround(tile); if (ret.Failed()) return ret; - int z; - Slope tileh = GetTileSlope(tile, &z); + auto [tileh, z] = GetTileSlopeZ(tile); /* Prohibit building if * 1) The tile is "steep" (i.e. stretches two height levels). @@ -3031,8 +3030,7 @@ static void DrawTile_Station(TileInfo *ti) /* Station has custom foundations. * Check whether the foundation continues beyond the tile's upper sides. */ uint edge_info = 0; - int z; - Slope slope = GetFoundationPixelSlope(ti->tile, &z); + auto [slope, z] = GetFoundationPixelSlope(ti->tile); if (!HasFoundationNW(ti->tile, slope, z)) SetBit(edge_info, 0); if (!HasFoundationNE(ti->tile, slope, z)) SetBit(edge_info, 1); SpriteID image = GetCustomStationFoundationRelocation(statspec, st, ti->tile, tile_layout, edge_info); diff --git a/src/tile_map.cpp b/src/tile_map.cpp index 09a95385b4..54cfc8ebd2 100644 --- a/src/tile_map.cpp +++ b/src/tile_map.cpp @@ -18,10 +18,9 @@ * @param hwest The height at the western corner in the same unit as TileHeight. * @param heast The height at the eastern corner in the same unit as TileHeight. * @param hsouth The height at the southern corner in the same unit as TileHeight. - * @param[out] h The lowest height of the four corners. - * @return The slope. + * @return The slope and the lowest height of the four corners. */ -static Slope GetTileSlopeGivenHeight(int hnorth, int hwest, int heast, int hsouth, int *h) +static std::tuple GetTileSlopeGivenHeight(int hnorth, int hwest, int heast, int hsouth) { /* Due to the fact that tiles must connect with each other without leaving gaps, the * biggest difference in height between any corner and 'min' is between 0, 1, or 2. @@ -32,8 +31,6 @@ static Slope GetTileSlopeGivenHeight(int hnorth, int hwest, int heast, int hsout int hmines = std::min(heast, hsouth); int hmin = std::min(hminnw, hmines); - if (h != nullptr) *h = hmin; - int hmaxnw = std::max(hnorth, hwest); int hmaxes = std::max(heast, hsouth); int hmax = std::max(hmaxnw, hmaxes); @@ -47,16 +44,15 @@ static Slope GetTileSlopeGivenHeight(int hnorth, int hwest, int heast, int hsout if (hmax - hmin == 2) r |= SLOPE_STEEP; - return r; + return {r, hmin}; } /** * Return the slope of a given tile inside the map. * @param tile Tile to compute slope of - * @param h If not \c nullptr, pointer to storage of z height - * @return Slope of the tile, except for the HALFTILE part + * @return Slope of the tile, except for the HALFTILE part, and the z height */ -Slope GetTileSlope(TileIndex tile, int *h) +std::tuple GetTileSlopeZ(TileIndex tile) { uint x1 = TileX(tile); uint y1 = TileY(tile); @@ -68,7 +64,7 @@ Slope GetTileSlope(TileIndex tile, int *h) int heast = TileHeight(TileXY(x1, y2)); // Height of the East corner. int hsouth = TileHeight(TileXY(x2, y2)); // Height of the South corner. - return GetTileSlopeGivenHeight(hnorth, hwest, heast, hsouth, h); + return GetTileSlopeGivenHeight(hnorth, hwest, heast, hsouth); } /** @@ -77,18 +73,17 @@ Slope GetTileSlope(TileIndex tile, int *h) * @param x X coordinate of the tile to compute slope of, may be outside the map. * @param y Y coordinate of the tile to compute slope of, may be outside the map. * @param h If not \c nullptr, pointer to storage of z height. - * @return Slope of the tile, except for the HALFTILE part. + * @return Slope of the tile, except for the HALFTILE part, and the z height of the tile. */ -Slope GetTilePixelSlopeOutsideMap(int x, int y, int *h) +std::tuple GetTilePixelSlopeOutsideMap(int x, int y) { int hnorth = TileHeightOutsideMap(x, y); // N corner. int hwest = TileHeightOutsideMap(x + 1, y); // W corner. int heast = TileHeightOutsideMap(x, y + 1); // E corner. int hsouth = TileHeightOutsideMap(x + 1, y + 1); // S corner. - Slope s = GetTileSlopeGivenHeight(hnorth, hwest, heast, hsouth, h); - if (h != nullptr) *h *= TILE_HEIGHT; - return s; + auto [slope, h] = GetTileSlopeGivenHeight(hnorth, hwest, heast, hsouth); + return {slope, h * TILE_HEIGHT}; } /** diff --git a/src/tile_map.h b/src/tile_map.h index 6ec6609e6b..a4bd524b2f 100644 --- a/src/tile_map.h +++ b/src/tile_map.h @@ -265,26 +265,34 @@ inline void SetAnimationFrame(Tile t, byte frame) t.m7() = frame; } -Slope GetTileSlope(TileIndex tile, int *h = nullptr); +std::tuple GetTileSlopeZ(TileIndex tile); int GetTileZ(TileIndex tile); int GetTileMaxZ(TileIndex tile); bool IsTileFlat(TileIndex tile, int *h = nullptr); /** - * Return the slope of a given tile + * Return the slope of a given tile inside the map. * @param tile Tile to compute slope of - * @param h If not \c nullptr, pointer to storage of z height * @return Slope of the tile, except for the HALFTILE part */ -inline Slope GetTilePixelSlope(TileIndex tile, int *h) +inline Slope GetTileSlope(TileIndex tile) { - Slope s = GetTileSlope(tile, h); - if (h != nullptr) *h *= TILE_HEIGHT; - return s; + return std::get<0>(GetTileSlopeZ(tile)); } -Slope GetTilePixelSlopeOutsideMap(int x, int y, int *h); +/** + * Return the slope of a given tile + * @param tile Tile to compute slope of + * @return Slope of the tile, except for the HALFTILE part, and the z height. + */ +inline std::tuple GetTilePixelSlope(TileIndex tile) +{ + auto [s, h] = GetTileSlopeZ(tile); + return {s, h * TILE_HEIGHT}; +} + +std::tuple GetTilePixelSlopeOutsideMap(int x, int y); /** * Get bottom height of the tile diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index ffa3d746b3..d8d4009fd2 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -1003,7 +1003,7 @@ static bool IsRoadAllowedHere(Town *t, TileIndex tile, DiagDirection dir) } } - Slope cur_slope = _settings_game.construction.build_on_slopes ? GetFoundationSlope(tile) : GetTileSlope(tile); + Slope cur_slope = _settings_game.construction.build_on_slopes ? std::get<0>(GetFoundationSlope(tile)) : GetTileSlope(tile); bool ret = !IsNeighborRoadTile(tile, dir, t->layout == TL_ORIGINAL ? 1 : 2); if (cur_slope == SLOPE_FLAT) return ret; diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp index 0263f819fb..0c888c831b 100644 --- a/src/tree_cmd.cpp +++ b/src/tree_cmd.cpp @@ -588,8 +588,7 @@ static void DrawTile_Trees(TileInfo *ti) static int GetSlopePixelZ_Trees(TileIndex tile, uint x, uint y, bool) { - int z; - Slope tileh = GetTilePixelSlope(tile, &z); + auto [tileh, z] = GetTilePixelSlope(tile); return z + GetPartialPixelZ(x & 0xF, y & 0xF, tileh); } diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index a2e9d67f1c..d395396d6f 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -324,10 +324,8 @@ CommandCost CmdBuildBridge(DoCommandFlag flags, TileIndex tile_end, TileIndex ti } bridge_len += 2; // begin and end tiles/ramps - int z_start; - int z_end; - Slope tileh_start = GetTileSlope(tile_start, &z_start); - Slope tileh_end = GetTileSlope(tile_end, &z_end); + auto [tileh_start, z_start] = GetTileSlopeZ(tile_start); + auto [tileh_end, z_end] = GetTileSlopeZ(tile_end); bool pbs_reservation = false; CommandCost terraform_cost_north = CheckBridgeSlope(BRIDGE_PIECE_NORTH, direction, &tileh_start, &z_start); @@ -655,9 +653,7 @@ CommandCost CmdBuildTunnel(DoCommandFlag flags, TileIndex start_tile, TransportT } } - int start_z; - int end_z; - Slope start_tileh = GetTileSlope(start_tile, &start_z); + auto [start_tileh, start_z] = GetTileSlopeZ(start_tile); DiagDirection direction = GetInclinedSlopeDirection(start_tileh); if (direction == INVALID_DIAGDIR) return_cmd_error(STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL); @@ -690,10 +686,11 @@ CommandCost CmdBuildTunnel(DoCommandFlag flags, TileIndex start_tile, TransportT CommandCost cost(EXPENSES_CONSTRUCTION); Slope end_tileh; + int end_z; for (;;) { end_tile += delta; if (!IsValidTile(end_tile)) return_cmd_error(STR_ERROR_TUNNEL_THROUGH_MAP_BORDER); - end_tileh = GetTileSlope(end_tile, &end_z); + std::tie(end_tileh, end_z) = GetTileSlopeZ(end_tile); if (start_z == end_z) break; @@ -1666,8 +1663,7 @@ void DrawBridgeMiddle(const TileInfo *ti) static int GetSlopePixelZ_TunnelBridge(TileIndex tile, uint x, uint y, bool ground_vehicle) { - int z; - Slope tileh = GetTilePixelSlope(tile, &z); + auto [tileh, z] = GetTilePixelSlope(tile); x &= 0xF; y &= 0xF; @@ -2042,8 +2038,7 @@ static CommandCost TerraformTile_TunnelBridge(TileIndex tile, DoCommandFlag flag DiagDirection direction = GetTunnelBridgeDirection(tile); Axis axis = DiagDirToAxis(direction); CommandCost res; - int z_old; - Slope tileh_old = GetTileSlope(tile, &z_old); + auto [tileh_old, z_old] = GetTileSlopeZ(tile); /* Check if new slope is valid for bridges in general (so we can safely call GetBridgeFoundation()) */ if ((direction == DIAGDIR_NW) || (direction == DIAGDIR_NE)) { diff --git a/src/viewport.cpp b/src/viewport.cpp index cd5987e6c6..c035cc2a45 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1242,10 +1242,10 @@ static void ViewportAddLandscape() if (tile_type != MP_VOID) { /* We are inside the map => paint landscape. */ - _cur_ti.tileh = GetTilePixelSlope(_cur_ti.tile, &_cur_ti.z); + std::tie(_cur_ti.tileh, _cur_ti.z) = GetTilePixelSlope(_cur_ti.tile); } else { /* We are outside the map => paint black. */ - _cur_ti.tileh = GetTilePixelSlopeOutsideMap(tilecoord.x, tilecoord.y, &_cur_ti.z); + std::tie(_cur_ti.tileh, _cur_ti.z) = GetTilePixelSlopeOutsideMap(tilecoord.x, tilecoord.y); } int viewport_y = GetViewportY(tilecoord); diff --git a/src/void_cmd.cpp b/src/void_cmd.cpp index 81dc9ed6c2..5e35a1f883 100644 --- a/src/void_cmd.cpp +++ b/src/void_cmd.cpp @@ -29,8 +29,7 @@ static int GetSlopePixelZ_Void(TileIndex, uint x, uint y, bool) { /* This function may be called on tiles outside the map, don't assume * that 'tile' is a valid tile index. See GetSlopePixelZOutsideMap. */ - int z; - Slope tileh = GetTilePixelSlopeOutsideMap(x >> 4, y >> 4, &z); + auto [tileh, z] = GetTilePixelSlopeOutsideMap(x >> 4, y >> 4); return z + GetPartialPixelZ(x & 0xF, y & 0xF, tileh); } diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index d503bfcda4..7b3703ed77 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -210,8 +210,7 @@ void MakeWaterKeepingClass(TileIndex tile, Owner o) WaterClass wc = GetWaterClass(tile); /* Autoslope might turn an originally canal or river tile into land */ - int z; - Slope slope = GetTileSlope(tile, &z); + auto [slope, z] = GetTileSlopeZ(tile); if (slope != SLOPE_FLAT) { if (wc == WATER_CLASS_CANAL) { @@ -951,8 +950,7 @@ void DrawShipDepotSprite(int x, int y, Axis axis, DepotPart part) static int GetSlopePixelZ_Water(TileIndex tile, uint x, uint y, bool) { - int z; - Slope tileh = GetTilePixelSlope(tile, &z); + auto [tileh, z] = GetTilePixelSlope(tile); return z + GetPartialPixelZ(x & 0xF, y & 0xF, tileh); } @@ -1245,18 +1243,17 @@ void TileLoop_Water(TileIndex tile) /* TREE_GROUND_SHORE is the sign of a previous flood. */ if (IsTileType(dest, MP_TREES) && GetTreeGround(dest) == TREE_GROUND_SHORE) continue; - int z_dest; - Slope slope_dest = GetFoundationSlope(dest, &z_dest) & ~SLOPE_HALFTILE_MASK & ~SLOPE_STEEP; + auto [slope_dest, z_dest] = GetFoundationSlope(dest); if (z_dest > 0) continue; - if (!HasBit(_flood_from_dirs[slope_dest], ReverseDir(dir))) continue; + if (!HasBit(_flood_from_dirs[slope_dest & ~SLOPE_HALFTILE_MASK & ~SLOPE_STEEP], ReverseDir(dir))) continue; DoFloodTile(dest); } break; case FLOOD_DRYUP: { - Slope slope_here = GetFoundationSlope(tile) & ~SLOPE_HALFTILE_MASK & ~SLOPE_STEEP; + Slope slope_here = std::get<0>(GetFoundationSlope(tile)) & ~SLOPE_HALFTILE_MASK & ~SLOPE_STEEP; for (uint dir : SetBitIterator(_flood_from_dirs[slope_here])) { TileIndex dest = tile + TileOffsByDir((Direction)dir); if (dest >= Map::Size()) continue; @@ -1274,10 +1271,8 @@ void TileLoop_Water(TileIndex tile) void ConvertGroundTilesIntoWaterTiles() { - int z; - for (TileIndex tile = 0; tile < Map::Size(); ++tile) { - Slope slope = GetTileSlope(tile, &z); + auto [slope, z] = GetTileSlopeZ(tile); if (IsTileType(tile, MP_CLEAR) && z == 0) { /* Make both water for tiles at level 0 * and make shore, as that looks much better From 8b9f59d320a033f4d8e9731745d6bafb6a31efc5 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Fri, 8 Mar 2024 17:31:20 +0100 Subject: [PATCH 069/695] Codechange: Use references for non-optional in/out values of slope functions --- src/bridge_map.cpp | 2 +- src/elrail.cpp | 2 +- src/landscape.cpp | 50 ++++++++++++++++++++-------------------- src/landscape.h | 6 ++--- src/rail_cmd.cpp | 8 +++---- src/road_cmd.cpp | 6 ++--- src/station_cmd.cpp | 2 +- src/tunnelbridge_cmd.cpp | 28 +++++++++++----------- 8 files changed, 52 insertions(+), 52 deletions(-) diff --git a/src/bridge_map.cpp b/src/bridge_map.cpp index 3c2e40552d..f5825bf504 100644 --- a/src/bridge_map.cpp +++ b/src/bridge_map.cpp @@ -73,5 +73,5 @@ int GetBridgeHeight(TileIndex t) Foundation f = GetBridgeFoundation(tileh, DiagDirToAxis(GetTunnelBridgeDirection(t))); /* one height level extra for the ramp */ - return h + 1 + ApplyFoundationToSlope(f, &tileh); + return h + 1 + ApplyFoundationToSlope(f, tileh); } diff --git a/src/elrail.cpp b/src/elrail.cpp index 20fb2facce..82ab9c1c66 100644 --- a/src/elrail.cpp +++ b/src/elrail.cpp @@ -389,7 +389,7 @@ static void DrawRailCatenaryRailway(const TileInfo *ti) foundation = GetBridgeFoundation(tileh[TS_NEIGHBOUR], DiagDirToAxis(GetTunnelBridgeDirection(neighbour))); } - ApplyFoundationToSlope(foundation, &tileh[TS_NEIGHBOUR]); + ApplyFoundationToSlope(foundation, tileh[TS_NEIGHBOUR]); /* Half tile slopes coincide only with horizontal/vertical track. * Faking a flat slope results in the correct sprites on positions. */ diff --git a/src/landscape.cpp b/src/landscape.cpp index f5383884fb..0d1dbaedb8 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -163,44 +163,44 @@ Point InverseRemapCoords2(int x, int y, bool clamp_to_map, bool *clamped) * @param s The #Slope to modify. * @return Increment to the tile Z coordinate. */ -uint ApplyFoundationToSlope(Foundation f, Slope *s) +uint ApplyFoundationToSlope(Foundation f, Slope &s) { if (!IsFoundation(f)) return 0; if (IsLeveledFoundation(f)) { - uint dz = 1 + (IsSteepSlope(*s) ? 1 : 0); - *s = SLOPE_FLAT; + uint dz = 1 + (IsSteepSlope(s) ? 1 : 0); + s = SLOPE_FLAT; return dz; } if (f != FOUNDATION_STEEP_BOTH && IsNonContinuousFoundation(f)) { - *s = HalftileSlope(*s, GetHalftileFoundationCorner(f)); + s = HalftileSlope(s, GetHalftileFoundationCorner(f)); return 0; } if (IsSpecialRailFoundation(f)) { - *s = SlopeWithThreeCornersRaised(OppositeCorner(GetRailFoundationCorner(f))); + s = SlopeWithThreeCornersRaised(OppositeCorner(GetRailFoundationCorner(f))); return 0; } - uint dz = IsSteepSlope(*s) ? 1 : 0; - Corner highest_corner = GetHighestSlopeCorner(*s); + uint dz = IsSteepSlope(s) ? 1 : 0; + Corner highest_corner = GetHighestSlopeCorner(s); switch (f) { case FOUNDATION_INCLINED_X: - *s = (((highest_corner == CORNER_W) || (highest_corner == CORNER_S)) ? SLOPE_SW : SLOPE_NE); + s = (((highest_corner == CORNER_W) || (highest_corner == CORNER_S)) ? SLOPE_SW : SLOPE_NE); break; case FOUNDATION_INCLINED_Y: - *s = (((highest_corner == CORNER_S) || (highest_corner == CORNER_E)) ? SLOPE_SE : SLOPE_NW); + s = (((highest_corner == CORNER_S) || (highest_corner == CORNER_E)) ? SLOPE_SE : SLOPE_NW); break; case FOUNDATION_STEEP_LOWER: - *s = SlopeWithOneCornerRaised(highest_corner); + s = SlopeWithOneCornerRaised(highest_corner); break; case FOUNDATION_STEEP_BOTH: - *s = HalftileSlope(SlopeWithOneCornerRaised(highest_corner), highest_corner); + s = HalftileSlope(SlopeWithOneCornerRaised(highest_corner), highest_corner); break; default: NOT_REACHED(); @@ -347,7 +347,7 @@ int GetSlopeZInCorner(Slope tileh, Corner corner) * @param z1 Gets incremented by the height of the first corner of the edge. (near corner wrt. the camera) * @param z2 Gets incremented by the height of the second corner of the edge. (far corner wrt. the camera) */ -void GetSlopePixelZOnEdge(Slope tileh, DiagDirection edge, int *z1, int *z2) +void GetSlopePixelZOnEdge(Slope tileh, DiagDirection edge, int &z1, int &z2) { static const Slope corners[4][4] = { /* corner | steep slope @@ -359,13 +359,13 @@ void GetSlopePixelZOnEdge(Slope tileh, DiagDirection edge, int *z1, int *z2) }; int halftile_test = (IsHalftileSlope(tileh) ? SlopeWithOneCornerRaised(GetHalftileSlopeCorner(tileh)) : 0); - if (halftile_test == corners[edge][0]) *z2 += TILE_HEIGHT; // The slope is non-continuous in z2. z2 is on the upper side. - if (halftile_test == corners[edge][1]) *z1 += TILE_HEIGHT; // The slope is non-continuous in z1. z1 is on the upper side. + if (halftile_test == corners[edge][0]) z2 += TILE_HEIGHT; // The slope is non-continuous in z2. z2 is on the upper side. + if (halftile_test == corners[edge][1]) z1 += TILE_HEIGHT; // The slope is non-continuous in z1. z1 is on the upper side. - if ((tileh & corners[edge][0]) != 0) *z1 += TILE_HEIGHT; // z1 is raised - if ((tileh & corners[edge][1]) != 0) *z2 += TILE_HEIGHT; // z2 is raised - if (RemoveHalftileSlope(tileh) == corners[edge][2]) *z1 += TILE_HEIGHT; // z1 is highest corner of a steep slope - if (RemoveHalftileSlope(tileh) == corners[edge][3]) *z2 += TILE_HEIGHT; // z2 is highest corner of a steep slope + if ((tileh & corners[edge][0]) != 0) z1 += TILE_HEIGHT; // z1 is raised + if ((tileh & corners[edge][1]) != 0) z2 += TILE_HEIGHT; // z2 is raised + if (RemoveHalftileSlope(tileh) == corners[edge][2]) z1 += TILE_HEIGHT; // z1 is highest corner of a steep slope + if (RemoveHalftileSlope(tileh) == corners[edge][3]) z2 += TILE_HEIGHT; // z2 is highest corner of a steep slope } /** @@ -379,7 +379,7 @@ std::tuple GetFoundationSlope(TileIndex tile) { auto [tileh, z] = GetTileSlopeZ(tile); Foundation f = _tile_type_procs[GetTileType(tile)]->get_foundation_proc(tile, tileh); - z += ApplyFoundationToSlope(f, &tileh); + z += ApplyFoundationToSlope(f, tileh); return {tileh, z}; } @@ -388,12 +388,12 @@ bool HasFoundationNW(TileIndex tile, Slope slope_here, uint z_here) { int z_W_here = z_here; int z_N_here = z_here; - GetSlopePixelZOnEdge(slope_here, DIAGDIR_NW, &z_W_here, &z_N_here); + GetSlopePixelZOnEdge(slope_here, DIAGDIR_NW, z_W_here, z_N_here); auto [slope, z] = GetFoundationPixelSlope(TILE_ADDXY(tile, 0, -1)); int z_W = z; int z_N = z; - GetSlopePixelZOnEdge(slope, DIAGDIR_SE, &z_W, &z_N); + GetSlopePixelZOnEdge(slope, DIAGDIR_SE, z_W, z_N); return (z_N_here > z_N) || (z_W_here > z_W); } @@ -403,12 +403,12 @@ bool HasFoundationNE(TileIndex tile, Slope slope_here, uint z_here) { int z_E_here = z_here; int z_N_here = z_here; - GetSlopePixelZOnEdge(slope_here, DIAGDIR_NE, &z_E_here, &z_N_here); + GetSlopePixelZOnEdge(slope_here, DIAGDIR_NE, z_E_here, z_N_here); auto [slope, z] = GetFoundationPixelSlope(TILE_ADDXY(tile, -1, 0)); int z_E = z; int z_N = z; - GetSlopePixelZOnEdge(slope, DIAGDIR_SW, &z_E, &z_N); + GetSlopePixelZOnEdge(slope, DIAGDIR_SW, z_E, z_N); return (z_N_here > z_N) || (z_E_here > z_E); } @@ -451,7 +451,7 @@ void DrawFoundation(TileInfo *ti, Foundation f) } Corner highest_corner = GetHighestSlopeCorner(ti->tileh); - ti->z += ApplyPixelFoundationToSlope(f, &ti->tileh); + ti->z += ApplyPixelFoundationToSlope(f, ti->tileh); if (IsInclinedFoundation(f)) { /* inclined foundation */ @@ -519,7 +519,7 @@ void DrawFoundation(TileInfo *ti, Foundation f) ); OffsetGroundSprite(0, 0); } - ti->z += ApplyPixelFoundationToSlope(f, &ti->tileh); + ti->z += ApplyPixelFoundationToSlope(f, ti->tileh); } } diff --git a/src/landscape.h b/src/landscape.h index 96a5c6a331..0228e88c84 100644 --- a/src/landscape.h +++ b/src/landscape.h @@ -39,7 +39,7 @@ std::tuple GetFoundationSlope(TileIndex tile); uint GetPartialPixelZ(int x, int y, Slope corners); int GetSlopePixelZ(int x, int y, bool ground_vehicle = false); int GetSlopePixelZOutsideMap(int x, int y); -void GetSlopePixelZOnEdge(Slope tileh, DiagDirection edge, int *z1, int *z2); +void GetSlopePixelZOnEdge(Slope tileh, DiagDirection edge, int &z1, int &z2); /** * Determine the Z height of a corner relative to TileZ. @@ -114,7 +114,7 @@ inline Point InverseRemapCoords(int x, int y) Point InverseRemapCoords2(int x, int y, bool clamp_to_map = false, bool *clamped = nullptr); -uint ApplyFoundationToSlope(Foundation f, Slope *s); +uint ApplyFoundationToSlope(Foundation f, Slope &s); /** * Applies a foundation to a slope. * @@ -123,7 +123,7 @@ uint ApplyFoundationToSlope(Foundation f, Slope *s); * @param s The #Slope to modify. * @return Increment to the tile Z coordinate. */ -inline uint ApplyPixelFoundationToSlope(Foundation f, Slope *s) +inline uint ApplyPixelFoundationToSlope(Foundation f, Slope &s) { return ApplyFoundationToSlope(f, s) * TILE_HEIGHT; } diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index ac6130dadb..d03d8f830b 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -793,7 +793,7 @@ bool FloodHalftile(TileIndex t) } } else { /* Make shore on steep slopes and 'three-corners-raised'-slopes. */ - if (ApplyFoundationToSlope(GetRailFoundation(tileh, rail_bits), &tileh) == 0) { + if (ApplyFoundationToSlope(GetRailFoundation(tileh, rail_bits), tileh) == 0) { if (IsSteepSlope(tileh) || IsSlopeWithThreeCornersRaised(tileh)) { flooded = true; SetRailGroundType(t, RAIL_GROUND_WATER); @@ -2583,7 +2583,7 @@ static int GetSlopePixelZ_Track(TileIndex tile, uint x, uint y, bool) auto [tileh, z] = GetTilePixelSlope(tile); if (tileh == SLOPE_FLAT) return z; - z += ApplyPixelFoundationToSlope(GetRailFoundation(tileh, GetTrackBits(tile)), &tileh); + z += ApplyPixelFoundationToSlope(GetRailFoundation(tileh, GetTrackBits(tile)), tileh); return z + GetPartialPixelZ(x & 0xF, y & 0xF, tileh); } else { return GetTileMaxPixelZ(tile); @@ -3009,8 +3009,8 @@ static CommandCost TestAutoslopeOnRailTile(TileIndex tile, uint flags, int z_old if (CheckRailSlope(tileh_new, rail_bits, TRACK_BIT_NONE, tile).Failed()) return_cmd_error(STR_ERROR_MUST_REMOVE_RAILROAD_TRACK); /* Get the slopes on top of the foundations */ - z_old += ApplyFoundationToSlope(GetRailFoundation(tileh_old, rail_bits), &tileh_old); - z_new += ApplyFoundationToSlope(GetRailFoundation(tileh_new, rail_bits), &tileh_new); + z_old += ApplyFoundationToSlope(GetRailFoundation(tileh_old, rail_bits), tileh_old); + z_new += ApplyFoundationToSlope(GetRailFoundation(tileh_new, rail_bits), tileh_new); Corner track_corner; switch (rail_bits) { diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 608010ea91..c286ff178b 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -1930,7 +1930,7 @@ static int GetSlopePixelZ_Road(TileIndex tile, uint x, uint y, bool) if (tileh == SLOPE_FLAT) return z; Foundation f = GetRoadFoundation(tileh, GetAllRoadBits(tile)); - z += ApplyPixelFoundationToSlope(f, &tileh); + z += ApplyPixelFoundationToSlope(f, tileh); return z + GetPartialPixelZ(x & 0xF, y & 0xF, tileh); } else { return GetTileMaxPixelZ(tile); @@ -2345,8 +2345,8 @@ static CommandCost TerraformTile_Road(TileIndex tile, DoCommandFlag flags, int z auto [tileh_old, z_old] = GetTileSlopeZ(tile); /* Get the slope on top of the foundation */ - z_old += ApplyFoundationToSlope(GetRoadFoundation(tileh_old, bits), &tileh_old); - z_new += ApplyFoundationToSlope(GetRoadFoundation(tileh_new, bits), &tileh_new); + z_old += ApplyFoundationToSlope(GetRoadFoundation(tileh_old, bits), tileh_old); + z_new += ApplyFoundationToSlope(GetRoadFoundation(tileh_new, bits), tileh_new); /* The surface slope must not be changed */ if ((z_old == z_new) && (tileh_old == tileh_new)) return CommandCost(EXPENSES_CONSTRUCTION, _price[PR_BUILD_FOUNDATION]); diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 9ffb2630a8..0dfee76c83 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -3087,7 +3087,7 @@ static void DrawTile_Station(TileInfo *ti) } OffsetGroundSprite(0, -8); - ti->z += ApplyPixelFoundationToSlope(FOUNDATION_LEVELED, &ti->tileh); + ti->z += ApplyPixelFoundationToSlope(FOUNDATION_LEVELED, ti->tileh); } else { draw_default_foundation: DrawFoundation(ti, FOUNDATION_LEVELED); diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index d395396d6f..080dd6f68b 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -144,7 +144,7 @@ Foundation GetBridgeFoundation(Slope tileh, Axis axis) */ bool HasBridgeFlatRamp(Slope tileh, Axis axis) { - ApplyFoundationToSlope(GetBridgeFoundation(tileh, axis), &tileh); + ApplyFoundationToSlope(GetBridgeFoundation(tileh, axis), tileh); /* If the foundation slope is flat the bridge has a non-flat ramp and vice versa. */ return (tileh != SLOPE_FLAT); } @@ -170,12 +170,12 @@ static inline const PalSpriteID *GetBridgeSpriteTable(int index, BridgePieces ta * @param z TileZ corresponding to tileh, gets modified as well * @return Error or cost for bridge foundation */ -static CommandCost CheckBridgeSlope(BridgePieces bridge_piece, Axis axis, Slope *tileh, int *z) +static CommandCost CheckBridgeSlope(BridgePieces bridge_piece, Axis axis, Slope &tileh, int &z) { assert(bridge_piece == BRIDGE_PIECE_NORTH || bridge_piece == BRIDGE_PIECE_SOUTH); - Foundation f = GetBridgeFoundation(*tileh, axis); - *z += ApplyFoundationToSlope(f, tileh); + Foundation f = GetBridgeFoundation(tileh, axis); + z += ApplyFoundationToSlope(f, tileh); Slope valid_inclined; if (bridge_piece == BRIDGE_PIECE_NORTH) { @@ -183,7 +183,7 @@ static CommandCost CheckBridgeSlope(BridgePieces bridge_piece, Axis axis, Slope } else { valid_inclined = (axis == AXIS_X ? SLOPE_SW : SLOPE_SE); } - if ((*tileh != SLOPE_FLAT) && (*tileh != valid_inclined)) return CMD_ERROR; + if ((tileh != SLOPE_FLAT) && (tileh != valid_inclined)) return CMD_ERROR; if (f == FOUNDATION_NONE) return CommandCost(); @@ -328,8 +328,8 @@ CommandCost CmdBuildBridge(DoCommandFlag flags, TileIndex tile_end, TileIndex ti auto [tileh_end, z_end] = GetTileSlopeZ(tile_end); bool pbs_reservation = false; - CommandCost terraform_cost_north = CheckBridgeSlope(BRIDGE_PIECE_NORTH, direction, &tileh_start, &z_start); - CommandCost terraform_cost_south = CheckBridgeSlope(BRIDGE_PIECE_SOUTH, direction, &tileh_end, &z_end); + CommandCost terraform_cost_north = CheckBridgeSlope(BRIDGE_PIECE_NORTH, direction, tileh_start, z_start); + CommandCost terraform_cost_south = CheckBridgeSlope(BRIDGE_PIECE_SOUTH, direction, tileh_end, z_end); /* Aqueducts can't be built of flat land. */ if (transport_type == TRANSPORT_WATER && (tileh_start == SLOPE_FLAT || tileh_end == SLOPE_FLAT)) return_cmd_error(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION); @@ -1090,8 +1090,8 @@ static void DrawBridgePillars(const PalSpriteID *psid, const TileInfo *ti, Axis int z_back_north = ti->z; int z_front_south = ti->z; int z_back_south = ti->z; - GetSlopePixelZOnEdge(ti->tileh, south_dir, &z_front_south, &z_back_south); - GetSlopePixelZOnEdge(ti->tileh, ReverseDiagDir(south_dir), &z_front_north, &z_back_north); + GetSlopePixelZOnEdge(ti->tileh, south_dir, z_front_south, z_back_south); + GetSlopePixelZOnEdge(ti->tileh, ReverseDiagDir(south_dir), z_front_north, z_back_north); /* Shared height of pillars */ int z_front = std::max(z_front_north, z_front_south); @@ -1673,7 +1673,7 @@ static int GetSlopePixelZ_TunnelBridge(TileIndex tile, uint x, uint y, bool grou if (ground_vehicle) return z; } else { // IsBridge(tile) DiagDirection dir = GetTunnelBridgeDirection(tile); - z += ApplyPixelFoundationToSlope(GetBridgeFoundation(tileh, DiagDirToAxis(dir)), &tileh); + z += ApplyPixelFoundationToSlope(GetBridgeFoundation(tileh, DiagDirToAxis(dir)), tileh); /* On the bridge ramp? */ if (ground_vehicle) { @@ -2042,11 +2042,11 @@ static CommandCost TerraformTile_TunnelBridge(TileIndex tile, DoCommandFlag flag /* Check if new slope is valid for bridges in general (so we can safely call GetBridgeFoundation()) */ if ((direction == DIAGDIR_NW) || (direction == DIAGDIR_NE)) { - CheckBridgeSlope(BRIDGE_PIECE_SOUTH, axis, &tileh_old, &z_old); - res = CheckBridgeSlope(BRIDGE_PIECE_SOUTH, axis, &tileh_new, &z_new); + CheckBridgeSlope(BRIDGE_PIECE_SOUTH, axis, tileh_old, z_old); + res = CheckBridgeSlope(BRIDGE_PIECE_SOUTH, axis, tileh_new, z_new); } else { - CheckBridgeSlope(BRIDGE_PIECE_NORTH, axis, &tileh_old, &z_old); - res = CheckBridgeSlope(BRIDGE_PIECE_NORTH, axis, &tileh_new, &z_new); + CheckBridgeSlope(BRIDGE_PIECE_NORTH, axis, tileh_old, z_old); + res = CheckBridgeSlope(BRIDGE_PIECE_NORTH, axis, tileh_new, z_new); } /* Surface slope is valid and remains unchanged? */ From ab353f8ad57a7f5422f1bc832ac6259347e8e5a8 Mon Sep 17 00:00:00 2001 From: Kuhnovic <68320206+Kuhnovic@users.noreply.github.com> Date: Fri, 8 Mar 2024 18:31:58 +0100 Subject: [PATCH 070/695] Update: Developer credits (#12235) (#12235) --- CREDITS.md | 1 + src/misc_gui.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/CREDITS.md b/CREDITS.md index 5b1aa2219b..e8001f7e54 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -3,6 +3,7 @@ - Matthijs Kooijman (blathijs) - Pathfinder-guru, Debian port (since 0.3) - Christoph Elsenhans (frosch) - General coding (since 0.6) - Loïc Guilloux (glx) - General / Windows Expert (since 0.4.5) +- Koen Bussemaker (Kuhnovic) - General / Ship pathfinder (since 14) - Charles Pigott (LordAro) - General / Correctness police (since 1.9) - Michael Lutz (michi_cc) - General / Path based signals (since 0.7) - Niels Martin Hansen (nielsm) - Music system, general coding (since 1.9) diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 12061e6736..790419cdfe 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -412,6 +412,7 @@ static const char * const _credits[] = { " Matthijs Kooijman (blathijs) - Pathfinder-guru, Debian port (since 0.3)", " Christoph Elsenhans (frosch) - General coding (since 0.6)", " Lo\u00efc Guilloux (glx) - General / Windows Expert (since 0.4.5)", + " Koen Bussemaker (Kuhnovic) - General / Ship pathfinder (since 14)", " Charles Pigott (LordAro) - General / Correctness police (since 1.9)", " Michael Lutz (michi_cc) - Path based signals (since 0.7)", " Niels Martin Hansen (nielsm) - Music system, general coding (since 1.9)", From 08ff1ab93e53db2e59326c76a45a589f3379cb28 Mon Sep 17 00:00:00 2001 From: Kuhnovic <68320206+Kuhnovic@users.noreply.github.com> Date: Fri, 8 Mar 2024 23:46:13 +0100 Subject: [PATCH 071/695] Fix #12236: Ship pathfinder causes crash when ship is already at destination (#12238) --- src/pathfinder/yapf/yapf_ship.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp index bf07e2c448..8fe1701948 100644 --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -263,7 +263,10 @@ public: } node = node->m_parent; } - assert(!path_cache.empty()); + + /* A empty path means we are already at the destination. The pathfinder shouldn't have been called at all. + * Return a random reachable trackdir to hopefully nudge the ship out of this strange situation. */ + if (path_cache.empty()) return GetRandomFollowUpTrackdir(v, src_tile, trackdir, true); /* Take out the last trackdir as the result. */ const Trackdir result = path_cache.front(); From ce3d0097f648d23d5628c74d05b6f9abafbd33bc Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 9 Mar 2024 04:41:18 +0000 Subject: [PATCH 072/695] Update: Translations from eints chinese (simplified): 27 changes by WenSimEHRP korean: 2 changes by telk5093 greek: 42 changes by Xertoveizer indonesian: 32 changes by tsaqibfs slovak: 184 changes by ApplePie420 danish: 2 changes by bscargo latvian: 2 changes by lexuslatvia dutch: 2 changes by Afoklala portuguese: 16 changes by jcteotonio portuguese (brazilian): 77 changes by pasantoro --- src/lang/afrikaans.txt | 2 +- src/lang/arabic_egypt.txt | 2 +- src/lang/basque.txt | 2 +- src/lang/belarusian.txt | 2 +- src/lang/brazilian_portuguese.txt | 156 +++++++------- src/lang/bulgarian.txt | 2 +- src/lang/catalan.txt | 2 +- src/lang/chuvash.txt | 2 +- src/lang/croatian.txt | 2 +- src/lang/czech.txt | 2 +- src/lang/danish.txt | 4 +- src/lang/dutch.txt | 4 +- src/lang/english_AU.txt | 2 +- src/lang/english_US.txt | 2 +- src/lang/esperanto.txt | 2 +- src/lang/estonian.txt | 2 +- src/lang/faroese.txt | 2 +- src/lang/finnish.txt | 2 +- src/lang/french.txt | 2 +- src/lang/frisian.txt | 2 +- src/lang/gaelic.txt | 2 +- src/lang/galician.txt | 2 +- src/lang/german.txt | 2 +- src/lang/greek.txt | 44 +++- src/lang/hebrew.txt | 2 +- src/lang/hindi.txt | 2 +- src/lang/hungarian.txt | 2 +- src/lang/icelandic.txt | 2 +- src/lang/ido.txt | 2 +- src/lang/indonesian.txt | 34 ++- src/lang/irish.txt | 2 +- src/lang/italian.txt | 2 +- src/lang/japanese.txt | 2 +- src/lang/korean.txt | 4 +- src/lang/latin.txt | 2 +- src/lang/latvian.txt | 4 +- src/lang/lithuanian.txt | 2 +- src/lang/luxembourgish.txt | 2 +- src/lang/macedonian.txt | 2 +- src/lang/malay.txt | 2 +- src/lang/maltese.txt | 2 +- src/lang/marathi.txt | 2 +- src/lang/norwegian_bokmal.txt | 2 +- src/lang/norwegian_nynorsk.txt | 2 +- src/lang/persian.txt | 2 +- src/lang/polish.txt | 2 +- src/lang/portuguese.txt | 32 +-- src/lang/romanian.txt | 2 +- src/lang/russian.txt | 2 +- src/lang/simplified_chinese.txt | 56 ++--- src/lang/slovak.txt | 336 ++++++++++++++++-------------- src/lang/slovenian.txt | 2 +- src/lang/spanish.txt | 2 +- src/lang/spanish_MX.txt | 2 +- src/lang/swedish.txt | 2 +- src/lang/tamil.txt | 2 +- src/lang/thai.txt | 2 +- src/lang/turkish.txt | 2 +- src/lang/urdu.txt | 2 +- src/lang/vietnamese.txt | 2 +- src/lang/welsh.txt | 2 +- 61 files changed, 447 insertions(+), 329 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index fa696f8459..6dfc2ef2a4 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -869,7 +869,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Geldeenh STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Geld eendheid keuse -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Britse Pond STR_GAME_OPTIONS_CURRENCY_USD :Amerikaanse Dollar STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 39c1d25117..ecb87db871 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -884,7 +884,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}اختي STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :جنية STR_GAME_OPTIONS_CURRENCY_USD :دولار STR_GAME_OPTIONS_CURRENCY_EUR :يورو diff --git a/src/lang/basque.txt b/src/lang/basque.txt index c667adb531..623a5da581 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -845,7 +845,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Diru uni STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Diru unitatearen aukeraketa -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Libra STR_GAME_OPTIONS_CURRENCY_USD :Dolar Amerikarrak STR_GAME_OPTIONS_CURRENCY_EUR :Euroa diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 76b763716e..a3bc2cbaf6 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -1281,7 +1281,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Выба STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Брытанскі фунт STR_GAME_OPTIONS_CURRENCY_USD :Даляр ЗША STR_GAME_OPTIONS_CURRENCY_EUR :Эўра diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 91ee88ca64..4e27f5c41d 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -395,10 +395,10 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Abrir li STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Abrir gráficos da empresa e receitas por carga STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Abrir tabela de classificação das empresas STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Abrir lista de indústrias, cadeia industrial ou financiar a construção de uma nova indústria -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Abrir lista de trens da empresa. Ctrl+Clique para mostrar ou ocultar os grupos de veículos, em oposição à configuração escolhida -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Abrir lista de veículos da empresa. Ctrl+Clique para mostrar ou ocultar os grupos de veículos, em oposição à configuração escolhida -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Abrir lista de embarcações da empresa. Ctrl+Clique para mostrar ou ocultar os grupos de veículos, em oposição à configuração escolhida -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Abrir lista de aeronaves da empresa. Ctrl+Clique para mostrar ou ocultar os grupos de veículos, em oposição à configuração escolhida +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Abrir lista de trens da empresa. Ctrl+Clique para mostrar ou ocultar grupos de veículos, oposto da configuração escolhida +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Abrir lista de veículos da empresa. Ctrl+Clique para mostrar ou ocultar grupos de veículos, oposto da configuração escolhida +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Abrir lista de embarcações da empresa. Ctrl+Clique para mostrar ou ocultar grupos de veículos, oposto da configuração escolhida +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Abrir lista de aeronaves da empresa. Ctrl+Clique para mostrar ou ocultar grupos de veículos, oposto da configuração escolhida STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Aproximar a visão STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Afastar a visão STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir infraestrutura ferroviária @@ -719,10 +719,10 @@ STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLA STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programa - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Apagar STR_PLAYLIST_CHANGE_SET :{BLACK}Mudar conjunto -STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Apagar o programa atual (somente Personalizado 1 ou Personalizado 2) +STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Apagar o programa atual (apenas Personalizado 1 ou Personalizado 2) STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Mudar a seleção musical para outro conjunto instalado -STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Clique na faixa de música para adicionar ao programa atual (somente Personalizado 1 ou Personalizado 2) -STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Clique na faixa de música para remover do programa atual (somente Personalizado 1 ou Personalizado 2) +STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Clique na faixa de música para adicionar ao programa atual (apenas Personalizado 1 ou Personalizado 2) +STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Clique na faixa de música para remover do programa atual (apenas Personalizado 1 ou Personalizado 2) # Highscore window STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Melhores empresas @@ -968,7 +968,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Seleçã STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Libra Britânica STR_GAME_OPTIONS_CURRENCY_USD :Dólar Norte Americano STR_GAME_OPTIONS_CURRENCY_EUR :Euro @@ -1037,11 +1037,11 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :outra STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Aceleração por hardware -STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Marque esta caixa para permitir que o OpenTTD tente usar aceleração por hardware. Se modificada, esta configuração terá efeito somente após reiniciar o jogo -STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}A configuração terá efeito somente após reiniciar o jogo +STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Marque esta caixa para permitir que o OpenTTD tente usar aceleração por hardware. Se modificada, esta configuração só terá efeito após reiniciar o jogo +STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}A configuração só terá efeito após reiniciar o jogo STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync -STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para ativar v-sync na tela. Se modificada, esta configuração terá efeito somente após reiniciar o jogo. Funciona somente com aceleração por hardware ativada +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para ativar v-sync na tela. Se modificada, esta configuração só terá efeito após reiniciar o jogo. Funciona somente com aceleração por hardware ativada STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Controlador atual: {STRING} @@ -1219,10 +1219,10 @@ STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{O STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor padrão: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipo de configuração: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE_CLIENT :Configuração do cliente (não é armazenada em jogos salvos; afeta todos os jogos) -STR_CONFIG_SETTING_TYPE_GAME_MENU :Configuração do jogo (armazenada no jogo salvo; afeta somente novos jogos) -STR_CONFIG_SETTING_TYPE_GAME_INGAME :Configuração do jogo (armazenada no jogo salvo; afeta somente o jogo atual) -STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Configuração da empresa (armazenada no jogo salvo; afeta somente novos jogos) -STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Configuração da empresa (armazenada no jogo salvo; afeta somente a empresa atual) +STR_CONFIG_SETTING_TYPE_GAME_MENU :Configuração do jogo (armazenada no jogo salvo; só afeta novos jogos) +STR_CONFIG_SETTING_TYPE_GAME_INGAME :Configuração do jogo (armazenada no jogo salvo; só afeta o jogo atual) +STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Configuração da empresa (armazenada no jogo salvo; só afeta novos jogos) +STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Configuração da empresa (armazenada no jogo salvo; só afeta a empresa atual) STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Cuidado! STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Esta ação irá restaurar todas as configurações do jogo para os seus valores padrão.{}Você quer mesmo fazer a restauração? @@ -1238,10 +1238,10 @@ STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Configurações STR_CONFIG_SETTING_TYPE_DROPDOWN_HELPTEXT :{BLACK}Restringe a lista abaixo a determinados tipos STR_CONFIG_SETTING_TYPE_DROPDOWN_ALL :Todos os tipos de configuração STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Configuração do cliente (não armazenada no jogo salvo; afeta todos os jogos) -STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Configurações do jogo (armazenadas no jogo salvo; afeta somente novos jogos) -STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Configurações do jogo (armazenadas no jogo salvo; afeta somente o jogo atual) -STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Configurações da empresa (armazenadas no jogo salvo; afeta somente novos jogos) -STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Configurações da empresa (armazenadas no jogo salvo; afeta somente a empresa atual) +STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Configurações do jogo (armazenadas no jogo salvo; só afeta novos jogos) +STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Configurações do jogo (armazenadas no jogo salvo; só afeta o jogo atual) +STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Configurações da empresa (armazenadas no jogo salvo; só afeta novos jogos) +STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Configurações da empresa (armazenadas no jogo salvo; só afeta a empresa atual) STR_CONFIG_SETTINGS_NONE :{WHITE}- Nenhum - ###length 3 @@ -1384,7 +1384,7 @@ STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :Como as outras STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Prospecção STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Área plana ao redor de indústrias: {STRING} -STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Quantidade de terreno plano à volta de uma indústria. Isto garante que um espaço vazio permanecerá disponível em torno da indústria para a construção de linhas, etc. +STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Quantidade de terreno plano em volta de uma indústria. Isto garante que um espaço vazio permanecerá disponível em torno da indústria para a construção de linhas, etc. STR_CONFIG_SETTING_MULTIPINDTOWN :Permitir várias indústrias semelhantes por localidade: {STRING} STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normalmente, uma localidade não aceita mais de uma indústria de cada tipo. Esta configuração permitirá várias indústrias, do mesmo tipo, na mesma localidade @@ -1405,10 +1405,10 @@ STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Se ativado, a j STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Se ativado, a janela de finanças é exibida no fim de cada período, permitindo uma inspeção fácil do estado financeiro da empresa STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Novas ordens, por padrão, são 'sem parar' : {STRING} -STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalmente, um veículo irá parar em cada estação por onde passa. Ativando esta configuração, o veículo passará por todas as estações na sua rota, sem parar, até o destino final. Esta opção define somente um modo padrão para novas ordens. Ordens individuais podem ser definidas explicitamente para qualquer um dos dois comportamentos +STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalmente, um veículo irá parar em cada estação por onde passa. Ativando esta configuração, o veículo passará por todas as estações na sua rota, sem parar, até o destino final. Esta opção só define um modo padrão para novas ordens. Ordens individuais podem ser definidas explicitamente para qualquer um dos dois comportamentos STR_CONFIG_SETTING_STOP_LOCATION :Novas ordens de trem, por padrão, têm parada no {STRING} da plataforma -STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Local padrão onde um trem irá parar na plataforma. No 'início' significa próximo à entrada, 'meio' significa no meio da plataforma e 'final' significa parar na saída da plataforma. Esta opção define somente um padrão para as novas ordens. Ordens individuais podem ter o local de parada definido clicando no texto da ordem +STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Local padrão onde um trem irá parar na plataforma. No 'início' significa próximo à entrada, 'meio' significa no meio da plataforma e 'final' significa parar na saída da plataforma. Esta opção só define um padrão para as novas ordens. Ordens individuais podem ter o local de parada definido clicando no texto da ordem ###length 3 STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :início STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :meio @@ -1418,7 +1418,7 @@ STR_CONFIG_SETTING_AUTOSCROLL :Mover a janela STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Quando ativado, as visualizações começarão a se mover quando o mouse se aproximar das bordas da janela ###length 4 STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Desativado -STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Visualização principal, somente em tela cheia +STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Visualização principal, apenas em tela cheia STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Visualização principal STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Todas as visualizações @@ -1541,7 +1541,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Espessura das l STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Espessura da linha nos gráficos. Linhas finas são mais precisas, enquanto linhas grossas são mais fáceis de distinguir STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostrar o nome do NewGRF na janela de comprar veículos: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Adiciona uma linha à janela de aquisição de veículos, mostrando a qual NewGRF pertence o veículo selecionado. +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Adiciona uma linha na janela de aquisição de veículos, mostrando a qual NewGRF pertence o veículo selecionado. STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as cargas que os veículos podem transportar nas janelas de listagem {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Se ativado, a carga transportável pelo veículo aparecerá acima dele nas listas de veículos @@ -1567,7 +1567,7 @@ STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altura da linha STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Escolher a que altura a neve começa na paisagem subártica. A neve também afeta a geração de indústrias e os requisitos de crescimento das localidades. Só pode ser modificado no Editor de Cenário ou então é calculado usando a "cobertura de neve" STR_CONFIG_SETTING_SNOW_COVERAGE :Cobertura de neve: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de neve na paisagem subártica. A neve também afeta a geração das indústrias e os requisitos para crescimento das localidades. Usado somente durante a geração do mapa. O nível do mar e as suas encostas nunca têm neve. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de neve na paisagem subártica. A neve também afeta a geração das indústrias e os requisitos para crescimento das localidades. Usado apenas durante a geração do mapa. O nível do mar e as suas encostas nunca têm neve. STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Cobertura do deserto: {STRING} @@ -1848,10 +1848,10 @@ STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Quando ativado, STR_CONFIG_SETTING_DISABLE_ELRAILS :Desativar ferrovias elétricas: {STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Quando ativada, esta configuração desativa a necessidade de eletrificar os trilhos para que locomotivas elétricas possam utilizá-los -STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Chegada do primeiro veículo à estação do jogador: {STRING} +STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Chegada do primeiro veículo na estação do jogador: {STRING} STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Mostrar um jornal quando o primeiro veículo chegar a uma estação nova do jogador -STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Chegada do primeiro veículo à estação de um concorrente: {STRING} +STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Chegada do primeiro veículo na estação de um concorrente: {STRING} STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Mostrar um jornal quando o primeiro veículo chegar a uma estação nova de um concorrente STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Acidentes / desastres: {STRING} @@ -2031,7 +2031,7 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador d STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamanho médio das cidades em relação às localidades normais no início do jogo STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Atualizar a distribuição a cada {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo entre recálculos subsequentes da rede de conexões. Cada recálculo atualiza os planos para um componente da rede. Isso significa que um valor X para esta configuração não significa que toda a rede será atualizada a cada X segundos. Somente algum componente será atualizado. Quanto menor o tempo definido, mais tempo de CPU será necessário para calculá-lo. Quanto maior o valor definido, mais tempo será necessário até que a distribuição de carga inicie nas novas rotas. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo entre recálculos subsequentes da rede de conexões. Cada recálculo atualiza os planos para um componente da rede. Isso significa que um valor X para esta configuração não significa que toda a rede será atualizada a cada X segundos. Apenas algum componente será atualizado. Quanto menor o tempo definido, mais tempo de CPU será necessário para calculá-lo. Quanto maior o valor definido, mais tempo será necessário até que a distribuição de carga inicie nas novas rotas. STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Usar {STRING} para recalcular a distribuição STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo gasto para cada recálculo de um componente da rede de conexões. Quando um recálculo é iniciado, uma tarefa é gerada e pode ser executada por esse número de segundos. Quanto menor for esse valor, maior a chance de que a tarefa não seja concluída quando deveria. Então o jogo para até que ela seja completada, causando um atraso. Quanto maior for esse valor, mais tempo será necessário para a distribuição ser atualizada quando as rotas mudam. @@ -2214,7 +2214,7 @@ STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Abrir co STR_INTRO_TOOLTIP_QUIT :{BLACK}Sair do 'OpenTTD' STR_INTRO_BASESET :{BLACK}Faltam {NUM} sprite{P "" s} no conjunto de gráficos base selecionado. Por favor, verifique se existem atualizações para o conjunto. -STR_INTRO_TRANSLATION :{BLACK}Faltam {NUM} string{P "" s} nesta tradução. Por favor, ajude a melhorar o OpenTTD inscrevendo-se como tradutor. Veja o arquivo readme.txt para mais detalhes. +STR_INTRO_TRANSLATION :{BLACK}Faltam {NUM} frase{P "" s} nesta tradução. Por favor, ajude a melhorar o OpenTTD inscrevendo-se como tradutor. Veja o arquivo readme.txt para mais detalhes. # Quit window STR_QUIT_CAPTION :{WHITE}Sair @@ -2415,7 +2415,7 @@ STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Procurar STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Procurar na LAN STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Procurar por servidores na rede local STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Adicionar servidor -STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adicionar um servidor à lista. Pode ser um endereço de servidor ou um código de convite +STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adicionar um servidor na lista. Pode ser um endereço de servidor ou um código de convite STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Iniciar servidor STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Iniciar um servidor próprio @@ -2728,15 +2728,15 @@ STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Sair do # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Opções de Transparência -STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Ativar/Desativar transparência das placas. Ctrl+Clique para travar -STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Ativar/Desativar transparência das árvores. Ctrl+Clique para travar -STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Ativar/Desativar transparência das casas. Ctrl+Clique para travar -STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Ativar/Desativar transparência das indústrias. Ctrl+Clique para travar -STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Ativar/Desativar transparência das construções como estações, depósitos e pontos de controle. Ctrl+Clique para travar -STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Ativar/Desativar transparência das pontes. Ctrl+Clique para travar -STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Ativar/Desativar transparência das estruturas como faróis e antenas. Ctrl+Clique para travar -STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Ativar/Desativar transparência da catenária. Ctrl+Clique para travar -STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Ativar/Desativar transparência dos textos de carregamento e custo/receita. Ctrl+Clique para travar +STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Ativar/Desativar transparência para placas. Ctrl+Clique para travar +STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Ativar/Desativar transparência para árvores. Ctrl+Clique para travar +STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Ativar/Desativar transparência para casas. Ctrl+Clique para travar +STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Ativar/Desativar transparência para indústrias. Ctrl+Clique para travar +STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Ativar/Desativar transparência para construções como estações, depósitos e pontos de controle. Ctrl+Clique para travar +STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Ativar/Desativar transparência para pontes. Ctrl+Clique para travar +STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Ativar/Desativar transparência para estruturas como faróis e antenas. Ctrl+Clique para travar +STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Ativar/Desativar transparência para catenária. Ctrl+Clique para travar +STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Ativar/Desativar transparência para textos de carregamento e custo/receita. Ctrl+Clique para travar STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Definir objetos como invisíveis ao invés de transparentes # Linkgraph legend window @@ -2831,13 +2831,13 @@ STR_STATION_CLASS_WAYP_WAYPOINT :Ponto de contro # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Seleção de Sinais STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Mostrar/Ocultar tipos de sinais avançados -STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Sinal de Bloqueio (semáforo){}Este é o tipo mais básico de sinal, permitindo que somente um trem esteja na mesma seção ao mesmo tempo +STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Sinal de Bloqueio (semáforo){}Este é o tipo mais básico de sinal e permite que apenas um trem esteja na mesma seção ao mesmo tempo STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Sinal de Entrada (semáforo){}Permanece verde enquanto existir um ou mais sinais de saída verdes na seção seguinte da linha. Caso contrário, ficará vermelho STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Sinal de Saída (semáforo){}Funciona do mesmo modo que o sinal de bloqueio, mas é necessário para ativar a cor correta nos pré-sinais de entrada e combinado. STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Sinal Combinado (semáforo){}O sinal combinado funciona simultaneamente como um sinal de entrada e de saída. Isto permite a construção de ramificações complexas de pré-sinais. STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Sinal de Caminho (semáforo){}Um sinal de caminho que permite mais de um trem entrar em uma seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Sinais de caminho padrões podem ser passados no sentido contrário STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Sinal de Sentido Único(semáforo){}Um sinal de caminho que permite mais de um trem entrar em uma seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Os sinais de sentido único não podem ser passados no sentido contrário -STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Sinal de Bloqueio (elétrico){}Este é o tipo mais básico de sinal, permitindo que somente um trem esteja na mesma seção ao mesmo tempo +STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Sinal de Bloqueio (elétrico){}Este é o tipo mais básico de sinal e permite que apenas um trem esteja na mesma seção ao mesmo tempo STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Sinal de Entrada (elétrico){}Permanece verde enquanto existir um ou mais sinais de saída verdes na seção seguinte da linha. Caso contrário, ficará vermelho. STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Sinal de Saída (elétrico){}Funciona do mesmo modo que o sinal de bloqueio, mas é necessário para ativar a cor correta nos pré-sinais de entrada e combinado. STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Sinal Combinado (elétrico){}O sinal combinado funciona simultaneamente como um sinal de entrada e de saída. Isto permite construir ramificações complexas de pré-sinais. @@ -3565,7 +3565,7 @@ STR_NEWGRF_BROKEN :{WHITE}O compor STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Ele alterou o estado do vagão motorizado '{1:ENGINE}' quando não estava em um depósito STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Ele alterou o comprimento do veículo '{1:ENGINE}' quando não estava em um depósito STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Ele alterou a capacidade do veículo '{1:ENGINE}' quando não estava em um depósito ou em adaptação -STR_BROKEN_VEHICLE_LENGTH :{WHITE}O trem '{VEHICLE}' pertencente a '{COMPANY}' tem um comprimento inválido, possivelmente devido à problemas com NewGRFs. Podem ocorrer erros de sincronização ou travamento do jogo +STR_BROKEN_VEHICLE_LENGTH :{WHITE}O trem '{VEHICLE}' pertencente a '{COMPANY}' tem um comprimento inválido, possivelmente devido a problemas com NewGRFs. Podem ocorrer erros de sincronização ou travamento do jogo STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' produz informação incorreta STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}A informação de carga/adaptação para '{1:ENGINE}' é diferente da lista de compra depois da construção. Isto pode fazer a renovação/substituição automática falhar se adaptar corretamente @@ -3592,7 +3592,7 @@ STR_NEWGRF_SCAN_ARCHIVES :Procurando por # Sign list window STR_SIGN_LIST_CAPTION :{WHITE}Lista de Placas - {COMMA} Placa{P "" s} STR_SIGN_LIST_MATCH_CASE :{BLACK}Diferenciar maiúsculas/minúsculas -STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Ativar/Desativar correspondência de maiúsculas/minúsculas na comparação dos nomes com a sequência fornecida +STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Ativar/Desativar correspondência de maiúsculas/minúsculas quando comparar os nomes das placas com os caracteres fornecidos # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Editar texto da placa @@ -3919,7 +3919,7 @@ STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nome da Empresa STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nome do Presidente STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Digitar a quantia de dinheiro que você quer dar -STR_BUY_COMPANY_MESSAGE :{WHITE}Estamos à procura de uma empresa de transportes para comprar a nossa empresa.{}{}Você deseja comprar {COMPANY} por {CURRENCY_LONG}? +STR_BUY_COMPANY_MESSAGE :{WHITE}Estamos procurando uma empresa de transportes para comprar a nossa empresa.{}{}Você deseja comprar {COMPANY} por {CURRENCY_LONG}? STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Na aquisição hostil de {COMPANY} você irá adquirir todos os ativos, liquidar todos os empréstimos e pagar o valor de 2 anos de lucros.{}{}O total estimado é de {CURRENCY_LONG}.{}{}Você deseja continuar esta aquisição hostil? # Company infrastructure window @@ -4272,7 +4272,7 @@ STR_ENGINE_PREVIEW_COST_MAX_SPEED :Custo: {CURRENC STR_ENGINE_PREVIEW_SPEED_POWER :Velocidade: {VELOCITY} Potência: {POWER} STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Velocidade: {VELOCITY} Potência: {POWER} Força de Tração máx.: {FORCE} STR_ENGINE_PREVIEW_TYPE :Tipo da aeronave: {STRING} -STR_ENGINE_PREVIEW_TYPE_RANGE :Tipo de aeronave: {STRING} Autonomia: {COMMA} tiles +STR_ENGINE_PREVIEW_TYPE_RANGE :Tipo de aeronave: {STRING} Autonomia: {COMMA} quadrados STR_ENGINE_PREVIEW_RUNCOST_YEAR :Custo de Operação: {CURRENCY_LONG}/ano STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Custo de Operação: {CURRENCY_LONG}/período STR_ENGINE_PREVIEW_CAPACITY :Capacidade: {CARGO_LONG} @@ -4288,7 +4288,7 @@ STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP :{BLACK}Coluna c ###length VEHICLE_TYPES STR_REPLACE_VEHICLE_TRAIN :Trem -STR_REPLACE_VEHICLE_ROAD_VEHICLE :Veículo rodov. +STR_REPLACE_VEHICLE_ROAD_VEHICLE :Veículo STR_REPLACE_VEHICLE_SHIP :Embarcação STR_REPLACE_VEHICLE_AIRCRAFT :Aeronave @@ -4500,7 +4500,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nova cap STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}{}{BLACK}Receita com a adaptação: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Custo de adaptação: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Receita com a adaptação: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Selecionar os veículos para adaptar. Clique+Arraste para selecionar vários veículos. Clique em um espaço vazio para selecionar todo o veículo. Ctrl+Clique para selecionar um veículo e a sequência restante +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Selecionar os veículos para adaptar. Clique+Arraste para selecionar vários veículos. Clique em um espaço vazio para selecionar todo o veículo. Ctrl+Clique para selecionar um veículo e a cadeia seguinte ###length VEHICLE_TYPES STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Escolher tipo de carga para o trem transportar @@ -4562,7 +4562,7 @@ STR_ORDER_DROP_REFIT_AUTO :Carga fixa STR_ORDER_DROP_REFIT_AUTO_ANY :Carga disponível STR_ORDER_DROP_GO_ALWAYS_DEPOT :Ir sempre -STR_ORDER_DROP_SERVICE_DEPOT :Manutenção se necessária +STR_ORDER_DROP_SERVICE_DEPOT :Manutenção, se necessária STR_ORDER_DROP_HALT_DEPOT :Parar STR_ORDER_DROP_UNBUNCH :Desagrupar @@ -4617,7 +4617,7 @@ STR_ORDER_CONDITIONAL :Saltar ordem co STR_ORDER_SHARE :Compartilhar ordens STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Inserir uma nova ordem antes da ordem selecionada ou adicionar no final da lista. Ctrl+Clique em uma estação para 'carga completa de qualquer carga', em um ponto de controle para inverter a configuração padrão 'sem parar' ou em um depósito para 'desagrupar'. Clique em outro veículo para copiar suas ordens ou Ctrl+Clique para compartilhar as ordens. Uma ordem de depósito desativa a manutenção automática do veículo -STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Mostrar todos os veículos que compartilham essa programação +STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Mostrar todos os veículos que compartilham esta programação # String parts to build the order string STR_ORDER_GO_TO_WAYPOINT :Ir via {WAYPOINT} @@ -4665,17 +4665,17 @@ STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Não descarreg STR_ORDER_NO_UNLOAD_NO_LOAD :(Não descarregar e não carregar) STR_ORDER_AUTO_REFIT :(Adaptar para {STRING}) -STR_ORDER_FULL_LOAD_REFIT :(Carga completa com adaptação para {STRING}) -STR_ORDER_FULL_LOAD_ANY_REFIT :(Carga completa de qualquer carga com adaptação para {STRING}) -STR_ORDER_UNLOAD_REFIT :(Descarregar e pegar carga com adaptação para {STRING}) -STR_ORDER_UNLOAD_FULL_LOAD_REFIT :(Descarregar e aguardar por carga completa com adaptação para {STRING}) -STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :(Descarregar e aguardar por qualquer carga completa com adaptação para {STRING}) -STR_ORDER_TRANSFER_REFIT :(Transferir e pegar carga com adaptação para {STRING}) -STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Transferir e aguardar por carga completa com adaptação para {STRING}) -STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Transferir e aguardar por qualquer carga completa com adaptação para {STRING}) -STR_ORDER_NO_UNLOAD_REFIT :(Não descarregar e pegar carga com adaptação para {STRING}) -STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(Não descarregar e aguardar por carga completa com adaptação para {STRING}) -STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Não descarregar e aguardar por qualquer carga completa com adaptação para {STRING}) +STR_ORDER_FULL_LOAD_REFIT :(Carga completa, com adaptação para {STRING}) +STR_ORDER_FULL_LOAD_ANY_REFIT :(Carga completa de qualquer carga, com adaptação para {STRING}) +STR_ORDER_UNLOAD_REFIT :(Descarregar e pegar carga, com adaptação para {STRING}) +STR_ORDER_UNLOAD_FULL_LOAD_REFIT :(Descarregar e aguardar por carga completa, com adaptação para {STRING}) +STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :(Descarregar e aguardar por qualquer carga completa, com adaptação para {STRING}) +STR_ORDER_TRANSFER_REFIT :(Transferir e pegar carga, com adaptação para {STRING}) +STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Transferir e aguardar por carga completa, com adaptação para {STRING}) +STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Transferir e aguardar por qualquer carga completa, com adaptação para {STRING}) +STR_ORDER_NO_UNLOAD_REFIT :(Não descarregar e pegar carga, com adaptação para {STRING}) +STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(Não descarregar e aguardar por carga completa, com adaptação para {STRING}) +STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Não descarregar e aguardar por qualquer carga completa, com adaptação para {STRING}) STR_ORDER_AUTO_REFIT_ANY :carga disponível @@ -4712,8 +4712,8 @@ STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(viajar por {ST STR_TIMETABLE_STAY_FOR :e aguardar por {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :e viajar por {STRING} -STR_TIMETABLE_TOTAL_TIME :{BLACK}Este horário levará {STRING} para completar -STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Este horário levará pelo menos {STRING} para completar (nem tudo está programado) +STR_TIMETABLE_TOTAL_TIME :{BLACK}Este horário levará {STRING} para ser concluído +STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Este horário levará pelo menos {STRING} para ser concluído (nem tudo está programado) STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Atualmente este veículo está circulando pontualmente STR_TIMETABLE_STATUS_LATE :{BLACK}Atualmente este veículo está circulando {STRING} atrasado @@ -4737,10 +4737,10 @@ STR_TIMETABLE_CHANGE_SPEED :{BLACK}Modifica STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Alterar a velocidade máxima de viagem da ordem selecionada. Ctrl+Clique para definir a velocidade para todas as ordens STR_TIMETABLE_CLEAR_SPEED :{BLACK}Remover limite de velocidade -STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Apagar a velocidade máxima de viagem da ordem selecionada. Ctrl+Clique para apagar as velocidades de todas as ordens +STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Apagar a velocidade máxima de viagem da ordem selecionada. Ctrl+Clique para apagar a velocidade de todas as ordens STR_TIMETABLE_RESET_LATENESS :{BLACK}Reiniciar o Contador de Atrasos -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reiniciar o contador de atrasos para o veículo ficar pontual. Ctrl+Clique para reiniciar todo o grupo e fazer o veículo mais atrasado ficar pontual e todos os outros ficarem adiantados +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reiniciar o contador de atrasos para o veículo ficar pontual. Ctrl+Clique para reiniciar todo o grupo e, com isso, fazer o veículo mais atrasado ficar no horário e todos os outros ficarem adiantados STR_TIMETABLE_AUTOFILL :{BLACK}Preencher automaticamente STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Preencher o horário automaticamente com os valores da próxima viagem. Ctrl+Clique para tentar manter os tempos de espera @@ -4772,21 +4772,21 @@ STR_AI_DEBUG_SETTINGS :{BLACK}Configur STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Alterar as configurações do script STR_AI_DEBUG_RELOAD :{BLACK}Recarregar IA STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Interromper a IA, recarregar o script e reiniciar a IA -STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Ativar/Desativar pausa quando uma mensagem de registro da IA corresponder à sequência de pausa +STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Ativar/Desativar interrupção quando uma mensagem de registro da IA corresponder aos caracteres de parada STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Parar em: STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Parar em -STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Quando uma mensagem de registro da IA for igual a esta sequência, o jogo é pausado +STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Quando uma mensagem de registro da IA for igual a estes caracteres, o jogo é pausado STR_AI_DEBUG_MATCH_CASE :{BLACK}Diferenciar maiúsculas/minúsculas -STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Ativar/Desativar correspondência de maiúsculas/minúsculas na comparação das mensagens de registro da IA com a sequência de parada +STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Ativar/Desativar correspondência de maiúsculas/minúsculas quando comparar as mensagens de registro da IA com os caracteres de parada STR_AI_DEBUG_CONTINUE :{BLACK}Continuar STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Sair da pausa e continuar a IA STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Mostrar saída de depuração desta IA. Ctrl+Clique para abrir em uma nova janela STR_AI_GAME_SCRIPT :{BLACK}Script de jogo STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Verificar o registro do Script de Jogo. Ctrl+Clique para abrir em uma nova janela -STR_ERROR_AI_NO_AI_FOUND :Não foi encontrada IA adequada para carregar.{}Esta IA é um pacote vazio e não fará nada.{}Você pode obter várias IAs usando o sistema de 'Conteúdo Online' +STR_ERROR_AI_NO_AI_FOUND :Não foi encontrada nenhuma IA adequada para carregar.{}Esta IA é um pacote vazio e não fará nada.{}Você pode obter várias IAs usando o sistema de 'Conteúdo Online' STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Um dos scripts em execução travou. Favor relatar isto ao autor do script com uma captura de tela da Janela de Depuração de IA/Script de Jogo -STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}A janela de Depuração de IA/Script de Jogo está disponível apenas para o servidor +STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}A janela de Depuração de IA/Script de Jogo só está disponível para o servidor # AI configuration window STR_AI_CONFIG_CAPTION_AI :{WHITE}Configurações de IA @@ -5001,7 +5001,7 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... muit STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... muito perto de outra localidade STR_ERROR_TOO_MANY_TOWNS :{WHITE}... há localidades demais STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... não existe mais espaço no mapa -STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Trabalhos na estrada sendo realizados +STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Trabalhos sendo realizados na estrada STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Não é possível remover esta localidade...{}Uma estação ou depósito refere-se à localidade ou não é possível remover um quadrado que pertence à mesma STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... não há local adequado para uma estátua no centro desta localidade @@ -5021,7 +5021,7 @@ STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... só STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... só pode ser construído perto do centro da localidade STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... só pode ser construído em áreas baixas STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... só pode ser colocado perto das bordas do mapa -STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... a floresta só pode ser plantada acima da linha de neve +STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... floresta só pode ser plantada acima da linha de neve STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... só pode ser construído acima da linha da neve STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... só pode ser construído abaixo da linha da neve @@ -5044,7 +5044,7 @@ STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... esta STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Há estações/locais de carga demais STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Há partes de estação ferroviária demais STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Há paradas de ônibus demais -STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Há estações de caminhão demais +STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Há estações de caminhões demais STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Muito perto de outra doca STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Muito perto de outro aeroporto STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Não é possível renomear a estação... @@ -5060,7 +5060,7 @@ STR_ERROR_CAN_T_REMOVE_BUS_STATION :{WHITE}Não é STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Não é possível remover estação de caminhões... STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Não é possível remover estação de bondes de passageiros... STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Não é possível remover estação de bondes de carga... -STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}É necessário remover o ponto de parada rodoviário primeiro +STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}É necessário remover o ponto de parada rodoviária primeiro STR_ERROR_THERE_IS_NO_STATION :{WHITE}...não há estação aqui STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}É necessário demolir a estação ferroviária primeiro @@ -5187,7 +5187,7 @@ STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :{WHITE}Ponte te # Tunnel related errors STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Não é possível construir túnel aqui... -STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}O local é inadequado para a entrada do túnel +STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}O local não é adequado para a entrada do túnel STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}É necessário demolir o túnel primeiro STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Há outro túnel no caminho STR_ERROR_TUNNEL_THROUGH_MAP_BORDER :{WHITE}O túnel terminaria fora do mapa @@ -5270,7 +5270,7 @@ STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Não é STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Não é possível vender aeronave... STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Há veículos demais no jogo -STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Não é possível alterar o intervalo manutenção... +STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Não é possível alterar o intervalo de manutenção... STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... o veículo está destruído @@ -5300,8 +5300,8 @@ STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Não é STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Não é possível saltar a ordem atual... STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Não é possível saltar a ordem selecionada... STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... veiculo não pode ir a todas as estações -STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... veiculo não pode ir à essa estação -STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... um veículo compartilhando esta ordem não pode ir à essa estação +STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... veiculo não pode ir a essa estação +STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... um veículo compartilhando esta ordem não pode ir a essa estação STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... nem todos os veículos possuem as mesmas ordens STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... nem todos os veículos estão compartilhando ordens @@ -5388,7 +5388,7 @@ STR_TOWN_BUILDING_NAME_CINEMA_1 :Cinema STR_TOWN_BUILDING_NAME_SHOPPING_MALL_1 :Centro comercial STR_TOWN_BUILDING_NAME_IGLOO_1 :Iglu STR_TOWN_BUILDING_NAME_TEPEES_1 :Tendas -STR_TOWN_BUILDING_NAME_TEAPOT_HOUSE_1 :Casa-bule +STR_TOWN_BUILDING_NAME_TEAPOT_HOUSE_1 :Casa-Bule STR_TOWN_BUILDING_NAME_PIGGY_BANK_1 :Cofrinho ##id 0x4800 diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 83da8ed31f..39d3ccb9a2 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -882,7 +882,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Избо STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Британска лира STR_GAME_OPTIONS_CURRENCY_USD :Американски долар STR_GAME_OPTIONS_CURRENCY_EUR :Евро diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 9368171a94..da72c4950f 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -968,7 +968,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selecci STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Lliura esterlina STR_GAME_OPTIONS_CURRENCY_USD :Dòlar americà STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index 112ae79fb9..a894b4fd55 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -459,7 +459,7 @@ STR_NEWS_MESSAGE_CAPTION :{WHITE}Пӗлт -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_RUR :Вырӑсла тенкӗ STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Хӑй управ diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index fe004d930d..832119df26 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -968,7 +968,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Novčane STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Izbor novčanih jedinica -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Funte STR_GAME_OPTIONS_CURRENCY_USD :Američki Dolar STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/czech.txt b/src/lang/czech.txt index a87cf8b136..38ded0e973 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1054,7 +1054,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Výběr STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Libra STR_GAME_OPTIONS_CURRENCY_USD :Dolar STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 0e5709e83d..43cd3d351e 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -967,7 +967,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valg af STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Britiske Pund STR_GAME_OPTIONS_CURRENCY_USD :Amerikanske dollars STR_GAME_OPTIONS_CURRENCY_EUR :Euro @@ -3078,6 +3078,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Ejer af STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Ejer af jernbane: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Lokal myndighed: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ingen +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinater: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Flise indeks: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Bygget/renoveret: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stationsklasse: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stationstype: {LTBLUE}{STRING} diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 996ae5ad3d..2edebe6c26 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -967,7 +967,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valuta k STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Britse Pond STR_GAME_OPTIONS_CURRENCY_USD :Dollar STR_GAME_OPTIONS_CURRENCY_EUR :Euro @@ -3078,6 +3078,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Eigenaar STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Eigenaar van spoorweg: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Gemeente: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Geen +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coördinaten: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Tegelindex: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Bouwjaar/opknapjaar: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stationsklasse: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stationstype: {LTBLUE}{STRING} diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index a33687e1a0..043086a6c5 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -967,7 +967,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Currency STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :British Pound STR_GAME_OPTIONS_CURRENCY_USD :American Dollar STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index fc2809b3bc..b142dd7c67 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -967,7 +967,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Currency STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :British Pound STR_GAME_OPTIONS_CURRENCY_USD :American Dollar STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index c4ffdd133c..60633e6d57 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -991,7 +991,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Monunuoj STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Elekto de monunuoj -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Brita Pundo STR_GAME_OPTIONS_CURRENCY_USD :Usona Dolaro STR_GAME_OPTIONS_CURRENCY_EUR :Eŭro diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 049828aaed..27a9885bbe 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1024,7 +1024,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valuuta STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Suurbritannia nael STR_GAME_OPTIONS_CURRENCY_USD :USA dollar STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 447cd1cb69..3a2cf44873 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -825,7 +825,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Gjaldsoy STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Úrval av gjaldsoyra eindum -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Bretsk Pund STR_GAME_OPTIONS_CURRENCY_USD :Dollarar STR_GAME_OPTIONS_CURRENCY_EUR :Evrir diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 190d949928..3ab28c1a17 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -967,7 +967,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Rahayksi STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Englannin punta STR_GAME_OPTIONS_CURRENCY_USD :Yhdysvaltain dollari STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/french.txt b/src/lang/french.txt index 6d2185e70c..50fdefe428 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -968,7 +968,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Sélecti STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Livre STR_GAME_OPTIONS_CURRENCY_USD :Dollar STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index b5f91b8a7e..99adc3b497 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -857,7 +857,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Muntienh STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Muntienheidseleksje -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Britske Pûn STR_GAME_OPTIONS_CURRENCY_USD :Amerikaanske Dollars STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 82b55becb7..c579931255 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1058,7 +1058,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Aonadan STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Tagh aonadan airgeadra -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Not Breatannach STR_GAME_OPTIONS_CURRENCY_USD :Dolar Aimeireaganach STR_GAME_OPTIONS_CURRENCY_EUR :Eòro diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 45139c01ec..c5082b125e 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -968,7 +968,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selecci STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Libra esterlina STR_GAME_OPTIONS_CURRENCY_USD :Dólar americano STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/german.txt b/src/lang/german.txt index 3b01a95bf6..fc775f7008 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -968,7 +968,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Währung STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Britische Pfund STR_GAME_OPTIONS_CURRENCY_USD :US-Dollar STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 2f765169fb..cf2d3459b2 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -252,11 +252,19 @@ STR_COLOUR_RANDOM :Τυχαία ###length 17 STR_COLOUR_SECONDARY_DARK_BLUE :Σκούρο Μπλε +STR_COLOUR_SECONDARY_PALE_GREEN :Ανοικτό Πράσινο +STR_COLOUR_SECONDARY_RED :Κόκκινο +STR_COLOUR_SECONDARY_LIGHT_BLUE :Γαλάζιο STR_COLOUR_SECONDARY_GREEN :Πράσινο STR_COLOUR_SECONDARY_DARK_GREEN :Σκούρο Πράσινο STR_COLOUR_SECONDARY_BLUE :Μπλε STR_COLOUR_SECONDARY_CREAM :Κρεμ +STR_COLOUR_SECONDARY_MAUVE :Μωβ +STR_COLOUR_SECONDARY_PURPLE :Πορφυρό μωβ +STR_COLOUR_SECONDARY_ORANGE :Πορτοκαλί STR_COLOUR_SECONDARY_BROWN :Καφέ +STR_COLOUR_SECONDARY_GREY :Γκρι +STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Ίδιο με το πρωταρχικό # Units used in OpenTTD @@ -398,7 +406,9 @@ STR_SORT_BY_POPULATION :Πληθυσμ STR_SORT_BY_RATING :Εκτίμηση STR_SORT_BY_NUM_VEHICLES :Αριθμός οχημάτων STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Συνολικό κέρδος προηγούμενου έτους +STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD :Συνολικό κέρδος προηγούμενου έτους STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Συνολικό κέρδος τρέχοντος έτους +STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Συνολικό κέρδος τρέχοντος έτους STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Μέσο κέρδος τελευταίου έτους STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Μέσος όρος κέρδους τρέχοντος έτους @@ -991,7 +1001,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Νομι STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Επιλογή νομισματικών μονάδων -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Στερλίνα Ηνωμένου Βασιλείου STR_GAME_OPTIONS_CURRENCY_USD :Δολλάριο Η.Π.Α. STR_GAME_OPTIONS_CURRENCY_EUR :Ευρώ @@ -1041,6 +1051,10 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Επιλ # Autosave dropdown ###length 5 STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Ανενεργό +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_10_MINUTES :Ανά 10 λεπτά +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_30_MINUTES :Ανά 30 λεπτά +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES :Ανά 60 λεπτά +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :Ανά 120 λεπτά STR_GAME_OPTIONS_LANGUAGE :{BLACK}Γλώσσα STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Επιλογή της γλώσσας του παιχνιδιού @@ -1082,6 +1096,13 @@ 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_PARTICIPATE_SURVEY :{BLACK}Συμμετοχή σε αυτοματοποιημένη έρευνα +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Όταν είναι ενεργοποιημένο, το OpenTTD θα μεταδίδει μια έρευνα κατά την έξοδο παιχνιδιού +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}Πληροφορίες για την αυτοματοποιημένη έρευνα και ιδιωτικότητα +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Αυτό ανοίγει ένα πρόγραμμα περιήγησης/browser με περισσότερες πληροφορίες σχετικά με την αυτοματοποιημένη έρευνα +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Προεπισκόπηση αποτελέσματος έρευνας +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Εμφάνιση του αποτελέσματος της έρευνας του τρέχοντος παιχνιδιού STR_GAME_OPTIONS_GRAPHICS :{BLACK}Γραφικά @@ -1475,11 +1496,14 @@ STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Όταν είν STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Τα οχήματα δεν λήγουν ποτέ: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Όταν είναι ενεργοποιημένη, όλα τα μοντέλα οχημάτων παραμένουν διαθέσιμα για πάντα μετά την παρουσίασή τους +STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Χρονομέτρηση: {STRING} ###length 2 +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Ημερολόγιο ###setting-zero-is-special +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Κλιμακώστε την παραγωγή φορτίου των πόλεων κατά αυτό το ποσοστό. STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Αυτόματη ανανέωση όταν ένα όχημα παλιώνει: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Όταν είναι ενεργοποιημένη, τα οχήματα που πλησιάζουν το τέλος της ζωής τους αντικαθίσταται αυτόματα όταν πληρούνται οι προϋποθέσεις αντικατάστασής του @@ -2176,6 +2200,16 @@ STR_ABANDON_GAME_QUERY :{YELLOW}Είσ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Είστε σίγουροι ότι θέλετε να εγκαταλείψετε το σενάριο; # Help window +STR_HELP_WINDOW_CAPTION :{WHITE}Βοήθεια και εγχειρίδια +STR_HELP_WINDOW_DOCUMENTS :{BLACK}Έγγραφα +STR_HELP_WINDOW_README :{BLACK}Εμφάνιση readme +STR_HELP_WINDOW_CHANGELOG :{BLACK}Ιστορικό αλλαγών +STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Γνωστά σφάλματα/bugs +STR_HELP_WINDOW_LICENSE :{BLACK}Άδεια +STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD +STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Εγχειρίδιο / Wiki +STR_HELP_WINDOW_BUGTRACKER :{BLACK}Αναφορά σφάλματος/bug +STR_HELP_WINDOW_COMMUNITY :{BLACK}Κοινότητα # Cheat window STR_CHEATS :{WHITE}Απατεωνιές @@ -2660,6 +2694,7 @@ STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Εναλ STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για γέφυρες. Ctrl+Κλικ για να την κλειδώσετε STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για κτίρια όπως φάρους και κεραίες. Ctrl+Κλικ για να την κλειδώσετε STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για τις συνδέσεις. Ctrl+Κλικ για να την κλειδώσετε +STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για φόρτωση και κείμενο κόστους/εσόδων. Ctrl+Click για να την κλειδώσετε STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Επιλέξτε τα αντικείμενα που θα είναι αόρατα αντί για διάφανα # Linkgraph legend window @@ -2686,6 +2721,8 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Μη ε STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Εμφάνιση κάλυψης του προτεινόμενου τόπου STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Δέχεται: {GOLD}{CARGO_LIST} STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Προμηθεύει : {GOLD}{CARGO_LIST} +STR_STATION_BUILD_INFRASTRUCTURE_COST_YEAR :{BLACK}Κόστος συντήρησης: {GOLD}{CURRENCY_SHORT}/έτος +STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}Κόστος συντήρησης: {GOLD}{CURRENCY_SHORT}/περίοδο # Join station window STR_JOIN_STATION_CAPTION :{WHITE}Συνένωση σταθμού @@ -3219,6 +3256,7 @@ STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Ποτά STR_MAPGEN_SMOOTHNESS :{BLACK}Ομαλότητα: STR_MAPGEN_VARIETY :{BLACK}Διανομή ποικιλομορφίας: STR_MAPGEN_GENERATE :{WHITE}Δημιουργία +STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Δημιουργήστε τον κόσμο και παίξτε OpenTTD! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Ρυθμίσεις NewGRF STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Εμφάνιση ρυθμίσεων NewGRF STR_MAPGEN_AI_SETTINGS :{BLACK}Ρυθμίσεις AI @@ -3251,6 +3289,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Καταλαν # Strings for map borders at game generation STR_MAPGEN_BORDER_TYPE :{BLACK}Άκρες χάρτη: +STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Επιλέξτε τα όρια του κόσμου του παιχνιδιού STR_MAPGEN_NORTHWEST :{BLACK}Βορειοδυτικά STR_MAPGEN_NORTHEAST :{BLACK}Βορειοανατολικά STR_MAPGEN_SOUTHEAST :{BLACK}Νοτιοανατολικά @@ -4306,6 +4345,8 @@ STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Έσοδ STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Διάστημα μεταξύ επισκευών: {LTBLUE}{COMMA}{NBSP}ημέρες{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Διάστημα μεταξύ επισκευών: {LTBLUE}{COMMA}{NBSP}λεπτά{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Διάστημα επισκευών: {LTBLUE}{COMMA}%{BLACK} {STRING} +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :Μειώστε το διάστημα μεταξύ των σέρβις κατά 10 ημέρες. Ctrl+Click για να μειώσετε το διάστημα συντήρησης κατά 5 ημέρες +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :Μειώστε το διάστημα μεταξύ των σέρβις κατά 5 λεπτά. Ctrl+Click για να μειώσετε το διάστημα συντήρησης κατά 1 λεπτό STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Αλλάξτε τον τύπο διαστήματος επισκευών STR_VEHICLE_DETAILS_DEFAULT :Προκαθορισμένο @@ -4585,6 +4626,7 @@ STR_TIMETABLE_EXPECTED :{BLACK}Αναμ STR_TIMETABLE_SCHEDULED :{BLACK}Προγραμματισμένη STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Εναλλαγή μεταξύ αναμενόμενης και προγραμματισμένης +STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY} # Date window (for timetable) diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index bf1a229d93..d43a62efbd 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -876,7 +876,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}מטבע STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}בחירת מטבע -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :לירה שטרלינג STR_GAME_OPTIONS_CURRENCY_USD :דולר אמריקאי STR_GAME_OPTIONS_CURRENCY_EUR :יורו diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index ffa56608e0..bbb0a4c6ff 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -327,7 +327,7 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}इस -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_FIM :फिनलैंड मार्का STR_GAME_OPTIONS_CURRENCY_ISK :आइसलैंडिक क्रोना STR_GAME_OPTIONS_CURRENCY_HKD :हाँग काँग डॉलर diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 7b9df5503e..99162f2193 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1031,7 +1031,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}A haszn STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Angol Font STR_GAME_OPTIONS_CURRENCY_USD :Amerikai Dollár STR_GAME_OPTIONS_CURRENCY_EUR :Euró diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 3001fc11cf..179333a8a2 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -824,7 +824,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Gjaldmi STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Val á gjaldmiðli -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Sterlingspund STR_GAME_OPTIONS_CURRENCY_USD :Bandaríkjadalur STR_GAME_OPTIONS_CURRENCY_EUR :Evra diff --git a/src/lang/ido.txt b/src/lang/ido.txt index b229f9bbd5..4b1ec30266 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -464,7 +464,7 @@ STR_GAME_OPTIONS_CAPTION :{WHITE}Ludo Sel -###length 43 +###length 44 # Autosave dropdown diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 2b15fa0e1f..b6477b02ac 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -656,6 +656,8 @@ STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Hutang: STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Total: ###next-name-looks-similar +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}Jumlah kendaraan yang menghasilkan keuntungan tahun lalu. Ini termasuk kendaraan jalan raya, kereta api, kapal laut dan pesawat terbang +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Jumlah kendaraan yang menghasilkan keuntungan pada periode terakhir. Ini termasuk kendaraan jalan raya, kereta api, kapal laut dan pesawat terbang STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Jumlah bagian dari stasiun yang diperbaiki baru-baru ini. Setiap bagian dari stasiun (misal: stasiun kereta, terminal bus, bandara) dihitung, meskipun mereka dihubungkan menjadi satu kesatuan stasiun STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Banyaknya uang yang dihasilkan dalam satu kuartal dengan keuntungan terendah pada 12 kuartal terakhir STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Banyaknya uang tunai yang dihasilkan dalam satu kuartal dengan keuntungan tertinggi pada 12 kuartal terakhir @@ -944,7 +946,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Pilih ma STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Poundsterling STR_GAME_OPTIONS_CURRENCY_USD :Dollar STR_GAME_OPTIONS_CURRENCY_EUR :Euro @@ -1391,6 +1393,7 @@ STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Semua viewport STR_CONFIG_SETTING_BRIBE :Ijinkan kolusi pada penguasa setempat: {STRING} ###length 2 STR_CONFIG_SETTING_BRIBE_HELPTEXT :Membolehkan perusahaan untuk menyuap pemerintah kota. Jika tertangkap, perusahaan tidak bisa berinteraksi dengan kota selama 6 bulan +STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :Membolehkan perusahaan untuk menyuap pemerintah kota. Jika tertangkap, perusahaan tidak bisa berinteraksi dengan kota selama 6 menit STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Ijinkan pembelian hak ekslusif pengelolaan transportasi: {STRING} ###length 2 @@ -1680,7 +1683,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Mengaktifkan pe STR_CONFIG_SETTING_LOADING_INDICATORS :Tampilkan indikator pengangkutan: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Pilih apakah petunjuk beban ditayangkan di atas kendaran yang sedang mengisi atau menurunkan beban +STR_CONFIG_SETTING_TIMETABLE_MODE :Satuan waktu untuk jadwal: {STRING} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Pilih satuan waktu yang digunakan untuk jadwal kendaraan ###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Hari +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Detik +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Titik STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Tampilkan keberangkatan dan kedatangan pada jadwal: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Tampilkan waktu diantisipasi kedatangan dan keberangkatan di jadwal @@ -2208,9 +2216,13 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Tampilka STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Tampilkan skema warna kendaraan STR_LIVERY_SHIP_TOOLTIP :{BLACK}Tampilkan skema warna kapal STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Tampilkan skema warna pesawat +STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Tampilkan warna grup kereta +STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Tampilkan warna grup kapal STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Pilih warna utama untuk skema terpilih, Ctrl+Klik akan mengatur warna ini di semua skema STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Pilih warna kedua untuk skema terpilih. Ctrl+Klik akan mengatur warna ini di semua skema STR_LIVERY_PANEL_TOOLTIP :{BLACK}Pilih skema warna untuk diganti, atau banyak skema dengan CTRL+klik. Klik pada kotak untuk berganti dari skema warna yang digunakan +STR_LIVERY_TRAIN_GROUP_EMPTY :Tidak ada grup kereta yang dibentuk +STR_LIVERY_SHIP_GROUP_EMPTY :Tidak ada grup kapal yang dibentuk ###length 23 STR_LIVERY_DEFAULT :Warna Standar @@ -2316,6 +2328,9 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Ukuran p STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Ukuran Peta dari permainan{}Klik untuk diurutkan berdasarkan area STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Tanggal STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Tanggal sekarang +STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}j {NUM}m +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}Waktu bermain +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}Waktu dimainkan saat{}permainan tidak dijeda STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Bahasa, versi server, dll. STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Klik untuk memilih sesi permainan dari daftar @@ -2331,6 +2346,7 @@ STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Alamat STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Kode undangan: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Tgl mulai: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Tgl sekarang: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Waktu bermain: {WHITE}{NUM}j {NUM}m STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Skrip Permainan: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Terproteksi dengan kata kunci! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERVER OFFLINE @@ -3009,6 +3025,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Pemilik STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Pemilik Rel Kereta: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Pemkot setempat: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Kosong +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinat: {LTBLUE}{NUM} x {NUM} x {NUM} STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Dibuat: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Kelas Stasiun: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipe Stasiun: {LTBLUE}{STRING} @@ -3284,6 +3301,7 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manual STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotasi Heightmap: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nama Peta Heightmap: STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Luas: +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}Ukuran sumber gambar heightmap. Untuk hasil terbaik, setiap tepi harus sesuai dengan panjang tepi peta yang tersedia di OpenTTD, seperti 256, 512, 1024, dll. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Target ketinggian puncak @@ -3637,6 +3655,8 @@ STR_SUBSIDIES_NONE :{ORANGE}- Tidak STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Jasa transportasi bersubsidi: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} dari {STRING} ke {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik pada layanan untuk mengarahkan pandangan utama pada industri/kota. Ctrl+Click akan membuka viewport baru pada lokasi industri/kota +STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :hingga {DATE_SHORT} +STR_SUBSIDIES_SUBSIDISED_EXPIRY_TIME :tersisa {UNITS_MONTHS_OR_MINUTES} # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Buku Cerita @@ -4161,6 +4181,14 @@ STR_ENGINE_PREVIEW_TRAM_VEHICLE :kendaraan jalan STR_ENGINE_PREVIEW_AIRCRAFT :pesawat STR_ENGINE_PREVIEW_SHIP :kapal +STR_ENGINE_PREVIEW_COST_WEIGHT :Biaya: {CURRENCY_LONG} Berat: {WEIGHT_SHORT} +STR_ENGINE_PREVIEW_COST_MAX_SPEED :Biaya: {CURRENCY_LONG} Kecepatan maks.: {VELOCITY} +STR_ENGINE_PREVIEW_SPEED_POWER :Kecepatan: {VELOCITY} Daya: {POWER} +STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Kecepatan: {VELOCITY} Daya: {POWER} Maks. T.E.: {FORCE} +STR_ENGINE_PREVIEW_RUNCOST_YEAR :Biaya operasional: {CURRENCY_LONG}/tahun +STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Biaya operasional: {CURRENCY_LONG}/periode +STR_ENGINE_PREVIEW_CAPACITY :Kapasitas: {CARGO_LONG} +STR_ENGINE_PREVIEW_CAPACITY_2 :Kapasitas: {CARGO_LONG}, {CARGO_LONG} # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Ganti {STRING} - {STRING} @@ -4329,12 +4357,16 @@ STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Nilai Tr STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Perbaikan interval: {LTBLUE}{COMMA}{NBSP}hari{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Jangka waktu perbaikan: {LTBLUE}{COMMA} %{BLACK} {STRING} +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Tingkatkan jangka waktu servis sebanyak 10 hari. Ctrl+Klik untuk menambah sebanyak 5 hari +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Tingkatkan jangka waktu servis sebanyak 5 menit. Ctrl+Click untuk menambah sebanyak 1 menit +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Tingkatkan jangka waktu servis sebanyak 10 persen. Ctrl+Click untuk menambah sebanyak 5 persen STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Kurangi jangka waktu servis sebanyak 10 hari. Ctrl+Click untuk mengurangi sebanyak 5 hari STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Kurangi jangka waktu servis sebanyak 5 menit. Ctrl+Click untuk mengurangi sebanyak 1 menit STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Kurangi jangka waktu servis sebanyak 10 persen. Ctrl+Click untuk mengurangi sebanyak 5 persen STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Ubah jenis interval perbaikan STR_VEHICLE_DETAILS_DEFAULT :Standar +STR_VEHICLE_DETAILS_DAYS :Hari STR_VEHICLE_DETAILS_PERCENT :Persentase ###length VEHICLE_TYPES diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 970642cc08..225345e1c5 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -880,7 +880,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Aonaid a STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Aonaid airgeadra a roghnú -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Punt na Breataine STR_GAME_OPTIONS_CURRENCY_USD :Dollar Mheiriceá STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 541b8e2838..c9516cf79a 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -969,7 +969,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selezion STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Sterlina britannica STR_GAME_OPTIONS_CURRENCY_USD :Dollaro americano STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index a266e0948d..7e308f8b10 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -906,7 +906,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}通貨 STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}通貨単位の選択 -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :英ポンド STR_GAME_OPTIONS_CURRENCY_USD :米ドル STR_GAME_OPTIONS_CURRENCY_EUR :欧州連合・ユーロ diff --git a/src/lang/korean.txt b/src/lang/korean.txt index d24aa80232..b9712a6911 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -968,7 +968,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}화폐 STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :영국 파운드 STR_GAME_OPTIONS_CURRENCY_USD :미국 달러 STR_GAME_OPTIONS_CURRENCY_EUR :유로 @@ -3079,6 +3079,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}전찻 STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}철도 소유주: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}지역 당국: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :없음 +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}좌표: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}칸 인덱스: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}건설날짜: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}역 분류: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}역 종류: {LTBLUE}{STRING} diff --git a/src/lang/latin.txt b/src/lang/latin.txt index b3da6ebc9a..92c47b87ae 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1049,7 +1049,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unitates STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Electio unitatum nummi -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Libra Britannica STR_GAME_OPTIONS_CURRENCY_USD :Dollarium CFA STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index e27f13b638..981f490c33 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -969,7 +969,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Naudas v STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Lielbritānijas sterliņu mārciņas STR_GAME_OPTIONS_CURRENCY_USD :ASV dolāri STR_GAME_OPTIONS_CURRENCY_EUR :Eiro @@ -3083,6 +3083,8 @@ STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Dzelzce STR_LAND_AREA_INFORMATION_RAIL_OWNER.kas :{BLACK}Dzelzceļa īpašniece: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Pašvaldība: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Neviena +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinātes: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Lauciņa rādītājs: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Buvēts/atjaunots: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stacijas klase: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stacijas tips: {LTBLUE}{STRING} diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 0202d7d7b8..b362a60834 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1091,7 +1091,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valiuta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valiutos pasirinkimas -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Svarai sterlingų STR_GAME_OPTIONS_CURRENCY_USD :Amerikos Doleris STR_GAME_OPTIONS_CURRENCY_EUR :Eurai diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index a7412f40c0..f00b751abb 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -967,7 +967,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Währung STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Pond STR_GAME_OPTIONS_CURRENCY_USD :Dollar STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index 34310c245c..637ddfa540 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -762,7 +762,7 @@ STR_GAME_OPTIONS_CAPTION :{WHITE}Опци -###length 43 +###length 44 # Autosave dropdown diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 5b87842e6d..a5d391f1b2 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -829,7 +829,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unit kew STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Pilihan unit kewangan -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Paun British STR_GAME_OPTIONS_CURRENCY_USD :Dolar Amerika STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index 044b9c049a..986f8e4d1b 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -398,7 +398,7 @@ STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE -###length 43 +###length 44 # Autosave dropdown diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index 88f4c54703..5477d99f17 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -670,7 +670,7 @@ STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLAC -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :पौंड STR_GAME_OPTIONS_CURRENCY_USD :डोल्लर STR_GAME_OPTIONS_CURRENCY_EUR :युरो diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 2b12b28ad6..875eaf503a 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -885,7 +885,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valutaen STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Velg valutaenhet som skal brukes -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Britisk pund STR_GAME_OPTIONS_CURRENCY_USD :Amerikansk dollar STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 33d116b0e5..2ce907387b 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -855,7 +855,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valutaei STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Vel valutaeining -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Pund STR_GAME_OPTIONS_CURRENCY_USD :Dollar STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 0d273a6159..6802fa2dd3 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -845,7 +845,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}واحد STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}انتخب واحد پول -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :پوند STR_GAME_OPTIONS_CURRENCY_USD :دلار STR_GAME_OPTIONS_CURRENCY_EUR :یورو diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 4bec8991b6..a4b23e843a 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1347,7 +1347,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Wybór w STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Funt brytyjski STR_GAME_OPTIONS_CURRENCY_USD :Dolar amerykański STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 6e74d4e9c2..f5b2cc021c 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -968,7 +968,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selecç STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Libra Britânica STR_GAME_OPTIONS_CURRENCY_USD :Dólar dos E.U.A. STR_GAME_OPTIONS_CURRENCY_EUR :Euro @@ -1340,7 +1340,7 @@ STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Facilitar a rem STR_CONFIG_SETTING_TRAIN_LENGTH :Tamanho máximo de comboios: {STRING} STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Assignar o tamanho máximo dos comboios -STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} quadrado{P 0 "" s} +STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} mosaico{P 0 "" s} STR_CONFIG_SETTING_SMOKE_AMOUNT :Quantidade de fumo/faíscas de veículos: {STRING} STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Assignar quanto fumo ou quantas faíscas são emitidas pelos veículos @@ -1352,14 +1352,14 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Tipo de acelera STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Escolha o modelo de física para a aceleração de veículos de estrada. O modelo "original" penaliza as inclinações para todos os veículos. O modelo "realista" penaliza as curvas e inclinações tendo em conta várias propriedades do motor, tais como o esforço de tração STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :Ângulo de inclinação para comboios: {STRING} -STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Ângulo de inclinação de um quadrado para um comboio. Valores mais elevados tornam a subida mais difícil +STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Ângulo de inclinação de um mosaico para um comboio. Valores mais elevados tornam a subida mais difícil STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Ângulo de inclínação para veículos rodoviários: {STRING} -STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Declive de um quadrado inclinado para um veiculo de estrada. Valores mais altos tornam mais difícil de subir. +STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Declive de um mosaico inclinado para um veiculo de estrada. Valores mais altos tornam mais difícil de subir. STR_CONFIG_SETTING_FORBID_90_DEG :Proibir comboios fazer curvas de 90º: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas de 90 graus ocorrem quando uma pista horizontal é directamente seguida por outra vertical num quadrado adjacente, fazendo com que o combóio vire 90 graus quando atravessa a fronteira dos quadrados, ao invés dos habituais 45 graus para outras combinações de pistas. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas de 90 graus ocorrem quando uma pista horizontal é diretamente seguida por outra vertical num mosaico adjacente, fazendo com que o comboio vire 90 graus quando atravessa a fronteira dos mosaicos, ao invés dos habituais 45 graus para outras combinações de pistas. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permitir juntar estações não adjacentes: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite acrescentar partes a uma estação sem tocar diretamente nas partes já existentes, fazendo Ctrl+Clique enquanto coloca as novas partes @@ -1649,7 +1649,7 @@ STR_CONFIG_SETTING_SMOOTH_SCROLLING :Suavizar desloc STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla como a vista principal navega para uma posição específica ao clicar no mapa pequeno ou ao dar um comando para navegar para um objeto específico no mapa. Se ativo, a vista principal navega suavemente, se inativo a vista salta diretamente para o destino. STR_CONFIG_SETTING_MEASURE_TOOLTIP :Mostrar medidas nas várias ferramentas de construção: {STRING} -STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Mostrar distâncias em quadrados e diferenças de altura enquanto arrasta o rato durante tarefas de construção +STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Mostrar distâncias em mosaicos e diferenças de altura enquanto arrasta o rato durante tarefas de construção STR_CONFIG_SETTING_LIVERIES :Mostrar estampagens da empresa: {STRING} STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Controla a utilização de decorações específicas por tipo de veículo (em vez de decorações por empresa) @@ -1922,7 +1922,7 @@ STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percentagem da STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Ao arrastar, colocar sinais a cada: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Define a distância a que os sinais serão construídos num carril até ao próximo obstáculo (sinal, junção), se os sinais são arrastados -STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} quadrado{P 0 "" s} +STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} mosaico{P 0 "" s} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Ao arrastar, manter distância fixa entre sinais: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Selecionar o comportamento da colocação de sinais ao Ctrl+Arrastar os sinais. Se desativado, os sinais são colocados à volta de túneis ou pontes para evitar longos trajetos sem sinais. Se ativo, os sinais são colocados a cada N mosaicos, facilitando o alinhamento de sinais em linhas paralelas @@ -2966,14 +2966,14 @@ STR_OBJECT_BUILD_CAPTION :{WHITE}Selecç STR_OBJECT_BUILD_TOOLTIP :{BLACK}Selecionar objeto para construir. Ctrl+Clique+Arrastar para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Selecionar a classe do objecto a construir STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Pré-visualização do objecto -STR_OBJECT_BUILD_SIZE :{BLACK}Tamanho: {GOLD}{NUM} x {NUM} quadrados +STR_OBJECT_BUILD_SIZE :{BLACK}Tamanho: {GOLD}{NUM} x {NUM} mosaicos STR_OBJECT_CLASS_LTHS :Faróis STR_OBJECT_CLASS_TRNS :Transmissores # Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Árvores -STR_PLANT_TREE_TOOLTIP :{BLACK}Escolha um tipo de árvore para plantar. Se o quadrado já tiver uma árvore, serão adicionadas mais árvores de difrentes tipos independentemente do tipo selecionado +STR_PLANT_TREE_TOOLTIP :{BLACK}Escolha um tipo de árvore para plantar. Se o mosaico já tiver uma árvore, serão adicionadas mais árvores de difrentes tipos independentemente do tipo selecionado STR_TREES_RANDOM_TYPE :{BLACK}Árvores de tipo aleatório STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plantar árvores de tipo aleatório. Ctrl+Clique+Arrastar para selecionar a área na diagonal. Pressione também Shift para apenas mostrar o custo estimado STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Plantar aleatoriamente @@ -3079,12 +3079,14 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Dono da STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Dono da linha férrea: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autoridade local: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Nenhum +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordenadas: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Índice do mosaico: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Construído/renovado: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Tipo de estação: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de estação: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Tipo de aeroporto: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_NAME :{BLACK}Nome do aeroporto: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nome do quadrado do aeroporto: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nome do mosaico do aeroporto: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Carga aceite: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) @@ -3886,8 +3888,8 @@ STR_COMPANY_VIEW_COMPANY_VALUE :{GOLD}Valor da STR_COMPANY_VIEW_INFRASTRUCTURE :{GOLD}Infraestrutura: STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA} {P "secção" "secções" } de caminho-de-ferro STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} {P "secção" "secções"} de estrada -STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} mosaico{P "" s} de água -STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} bloco{P "" s} de estação +STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} mosaico{P "" s} com água +STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} mosaico{P "" s} de estação STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} aeroporto{P "" s} STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Nenhum @@ -3926,7 +3928,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Secções STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Sinais STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Secções de estrada: STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Secções de elétricos: -STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Mosaicos de água: +STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Mosaicos com água: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canais STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Estações: STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Mosaicos de estações @@ -4088,7 +4090,7 @@ STR_PURCHASE_INFO_NONE :Nenhum STR_PURCHASE_INFO_ENGINES_ONLY :Apenas locomotivas STR_PURCHASE_INFO_ALL_BUT :Todas menos {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Máx. Força de Tracção: {GOLD}{FORCE} -STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Alcance: {GOLD}{COMMA} quadrados +STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Alcance: {GOLD}{COMMA} mosaicos STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Tipo de aeronave: {GOLD}{STRING} ###length 3 @@ -4954,7 +4956,7 @@ STR_ERROR_ALREADY_BUILT :{WHITE}... já STR_ERROR_OWNED_BY :{WHITE}... propriedade de {STRING} STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... a área é propriedade de outra empresa STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... atingido o limite para terraformação -STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... atingido o limite para limpeza de quadrados +STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... limite para limpeza de mosaicos atingido STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... limite de plantação de árvores alcançado STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}Nome deve ser único STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{1:STRING} no caminho diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 7d8eb8e41d..9b04d671eb 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -967,7 +967,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Alege un STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Liră sterlină STR_GAME_OPTIONS_CURRENCY_USD :Dolar american STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/russian.txt b/src/lang/russian.txt index a591be3671..cf98c89848 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1112,7 +1112,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Смен STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Английский фунт STR_GAME_OPTIONS_CURRENCY_USD :Доллар США STR_GAME_OPTIONS_CURRENCY_EUR :Евро diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 6af099ca69..c982e25420 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -967,7 +967,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}货币 STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :英镑 STR_GAME_OPTIONS_CURRENCY_USD :美元 STR_GAME_OPTIONS_CURRENCY_EUR :欧元 @@ -1844,8 +1844,8 @@ STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :启用站台长 STR_CONFIG_SETTING_WAGONSPEEDLIMITS :列车车厢速度限制:{STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :启用时,列车的最高速度将取决于车厢的速度上限。 -STR_CONFIG_SETTING_DISABLE_ELRAILS :禁用电气化铁路:{STRING} -STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :“打开”本选项时禁止电气化铁路的使用 +STR_CONFIG_SETTING_DISABLE_ELRAILS :停用电气化铁路:{STRING} +STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :启用时允许电力机车在普通轨道上运行而无需铺设电气化轨道。 STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :玩家车站的剪彩仪式: {STRING} STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :当玩家设立的车站首次有载具停靠时显示讯息。 @@ -1916,8 +1916,8 @@ STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :原版 STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :平滑 STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :冻结 -STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :转运系统中支付的利润百分比 {STRING} -STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :设定在转运系统中支付给前一环节的收入百分比, 从而对收入有更多的控制权 +STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :联运账面收入百分比:{STRING} +STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :设定在多程联运时,载具换班时前一程载具所占总收入的百分比。此选项允许更有效地控制收入。 STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :当拖动时,放置信号灯每隔:{STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :设置以拖动的方式建设时,自动放置信号灯时的间距,将以该间距放置信号灯,直到碰到障碍(信号灯,分支) @@ -2753,7 +2753,7 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA # Linkgraph tooltip STR_LINKGRAPH_STATS_TOOLTIP_MONTH :{BLACK}每月有 {CARGO_LONG} 需从 {STATION} 运至 {STATION} (运载能力的 {COMMA}%){STRING} STR_LINKGRAPH_STATS_TOOLTIP_MINUTE :{BLACK}每分钟有 {CARGO_LONG} 需从 {STATION} 运至 {STATION} (运载能力的 {COMMA}%){STRING} -STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}有{CARGO_LONG}要运回(运载能力的{COMMA}%) +STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}有{CARGO_LONG}要运回(运载能力的 {COMMA}%) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}平均行驶时间: {UNITS_DAYS_OR_SECONDS} # Base for station construction window(s) @@ -3523,7 +3523,7 @@ STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} 应 STR_NEWGRF_ERROR_INVALID_PARAMETER :{1:STRING} 参数错误:参数 {2:STRING} ({3:NUM}) STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} 必须在 {2:STRING} 之前加载。 STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} 必须在 {2:STRING} 后加载。 -STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} 需要OpenTTD {2:STRING} 或更高版本 +STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} 需要 OpenTTD {2:STRING} 或更高版本 STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF 被设计为可平移 STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :加载的NewGRF太多 STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :载入 {1:STRING} 为静态 NewGRF 时载入 {2:STRING} 可能造成同步错误 @@ -3573,14 +3573,14 @@ STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}回调 STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' 返回了错误的货物类型。位于产品回调函数 {2:HEX} 处 # 'User removed essential NewGRFs'-placeholders for stuff without specs -STR_NEWGRF_INVALID_CARGO : +STR_NEWGRF_INVALID_CARGO :<无效货物> STR_NEWGRF_INVALID_CARGO_ABBREV :?? -STR_NEWGRF_INVALID_CARGO_QUANTITY :{COMMA} of -STR_NEWGRF_INVALID_ENGINE : -STR_NEWGRF_INVALID_INDUSTRYTYPE : +STR_NEWGRF_INVALID_CARGO_QUANTITY :{COMMA} / <无效货物> +STR_NEWGRF_INVALID_ENGINE :<无效载具型号> +STR_NEWGRF_INVALID_INDUSTRYTYPE :<无效工业> # Placeholders for other invalid stuff, e.g. vehicles that have gone (Game Script). -STR_INVALID_VEHICLE :<不明载具> +STR_INVALID_VEHICLE :<无效载具> # NewGRF scanning window STR_NEWGRF_SCAN_CAPTION :{WHITE}正在扫描 NewGRF @@ -3613,7 +3613,7 @@ STR_TOWN_POPULATION :{BLACK}地图 STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (都市) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}人口:{ORANGE}{COMMA}{BLACK} 房屋:{ORANGE}{COMMA} -STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} 上月:{ORANGE}{COMMA}{BLACK} 最大:{ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}上月产出的{WHITE}{CARGO_LIST}{BLACK}:{ORANGE}{COMMA}{BLACK} 最大产量:{ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}上分钟产出的{WHITE}{CARGO_LIST}{BLACK}:{ORANGE}{COMMA}{NBSP}{BLACK}最大产量:{ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}城镇发展所必需的货物: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{RED} 需要: {ORANGE}{STRING} @@ -3621,8 +3621,8 @@ STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}已运输 {GREEN} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}已运输:{CARGO_TINY} /{RED}总需求: {CARGO_LONG} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (已运输) -STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}城镇每 {ORANGE}{UNITS_DAYS_OR_SECONDS}{BLACK}{NBSP}成长一次 -STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}城镇每 {ORANGE}{UNITS_DAYS_OR_SECONDS}{BLACK}{NBSP}成长一次(正接受资助) +STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}城镇每 {ORANGE}{UNITS_DAYS_OR_SECONDS}{BLACK}成长一次 +STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}城镇每 {ORANGE}{UNITS_DAYS_OR_SECONDS}{BLACK}成长一次(正接受资助) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}城镇发展已{RED}停滞 STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}当前城镇噪音: {ORANGE}{COMMA}{BLACK} 最大: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}将屏幕中心移动到城镇的位置。按住 键点选会在新视点中显示目标位置。 @@ -3938,12 +3938,12 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}工业设施 STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- 没有 - -STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% 已运输){BLACK} +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW}({COMMA}% 已运输){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} -STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING},{STRING},{STRING}以及其余 {NUM} 个…… +STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}、{STRING}、{STRING}……(尚有 {NUM} 个未显示) STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}工业名称 - 点选名称以将屏幕中心移动到当前工业的位置。按住 键点选会在新视点中显示工业位置。 STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}接受的货物:{SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}产出的货物:{SILVER}{STRING} @@ -3954,21 +3954,21 @@ STR_INDUSTRY_DIRECTORY_FILTER_NONE :无 STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}上月产量: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}上分钟产量: -STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% 已运输) +STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK}({COMMA}% 已运输) STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到当前工业的位置。按住 键点选会在新视点中显示工业位置。 STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}生产等级: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}此工业已经宣布即刻停业倒闭! -STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}需要: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}需要:{YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}产出:{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :,{STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}需要: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}:库存 {CARGO_SHORT} {STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}改变产量 -STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}修改产量 (百分比, 最高 800%) +STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}修改产量(百分比,最高为 800%) # Vehicle lists ###length VEHICLE_TYPES @@ -4081,7 +4081,7 @@ STR_PURCHASE_INFO_COST_REFIT :{BLACK}售价: STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}重量:{GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}售价:{GOLD}{CURRENCY_LONG}{BLACK} 速度:{GOLD}{VELOCITY} 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_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_ALL_TYPES :所有类型 @@ -4443,7 +4443,7 @@ STR_VEHICLE_INFO_CAPACITY :{BLACK}运载 STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}运载能力:{LTBLUE}{0:CARGO_LONG}{3:STRING} (x{4:NUM}) STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}运载能力:{LTBLUE}{CARGO_LONG}, {CARGO_LONG}{STRING} -STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}转运成本: {LTBLUE}{CURRENCY_LONG} +STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}联运账面收入:{LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}每 {LTBLUE}{COMMA}{NBSP}天进行维护{BLACK} 上次维护日期:{LTBLUE}{STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}维修间隔:{LTBLUE}{COMMA}{NBSP}分钟{BLACK} {STRING} @@ -4884,11 +4884,11 @@ STR_INCOME_FLOAT_COST :{RED}支出:{ STR_INCOME_FLOAT_INCOME_SMALL :{TINY_FONT}{GREEN}收入:{CURRENCY_LONG} STR_INCOME_FLOAT_INCOME :{GREEN}收入:{CURRENCY_LONG} STR_FEEDER_TINY :{TINY_FONT}{YELLOW}中转:{CURRENCY_LONG} -STR_FEEDER :{YELLOW}中转:{CURRENCY_LONG} -STR_FEEDER_INCOME_TINY :{TINY_FONT}{YELLOW}联运: {CURRENCY_LONG}{WHITE} / {GREEN}收入: {CURRENCY_LONG} -STR_FEEDER_INCOME :{YELLOW}联运: {CURRENCY_LONG}{WHITE} / {GREEN}收入: {CURRENCY_LONG} -STR_FEEDER_COST_TINY :{TINY_FONT}{YELLOW}联运: {CURRENCY_LONG}{WHITE} / {RED}支付: {CURRENCY_LONG} -STR_FEEDER_COST :{YELLOW}联运: {CURRENCY_LONG}{WHITE} / {RED}支付: {CURRENCY_LONG} +STR_FEEDER :{YELLOW}联运:{CURRENCY_LONG} +STR_FEEDER_INCOME_TINY :{TINY_FONT}{YELLOW}联运:{CURRENCY_LONG}{WHITE} / {GREEN}收入:{CURRENCY_LONG} +STR_FEEDER_INCOME :{YELLOW}联运:{CURRENCY_LONG}{WHITE} / {GREEN}收入:{CURRENCY_LONG} +STR_FEEDER_COST_TINY :{TINY_FONT}{YELLOW}联运:{CURRENCY_LONG}{WHITE} / {RED}支出:{CURRENCY_LONG} +STR_FEEDER_COST :{YELLOW}联运:{CURRENCY_LONG}{WHITE} / {RED}支出:{CURRENCY_LONG} STR_MESSAGE_ESTIMATED_COST :{WHITE}预计费用:{CURRENCY_LONG} STR_MESSAGE_ESTIMATED_INCOME :{WHITE}预计收入:{CURRENCY_LONG} diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 9c90e722a7..147bd899bf 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -270,6 +270,7 @@ STR_COLOUR_SECONDARY_ORANGE :Oranžová STR_COLOUR_SECONDARY_BROWN :Hnedá STR_COLOUR_SECONDARY_GREY :Šedá STR_COLOUR_SECONDARY_WHITE :Biela +STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Rovnaká ako primárna # Units used in OpenTTD @@ -352,7 +353,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Uchop a STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Prepnúť veľkosť okna STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Navigačná lišta - posúva zoznam hore/dole STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Posuvná lišta - posúva zoznam doľava/doprava -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolovať budovy atď. na rovný terén. Ctrl označí oblasť diagonálne. Shift zobrazí odhadovanú cenu +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolovať budovy atď. na rovný terén. Ctrl+Klik+Ťah myšou označí oblasť diagonálne. Shift zobrazí odhadovanú cenu # Show engines button ###length VEHICLE_TYPES @@ -446,32 +447,32 @@ STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pozastav STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Zrýchliť priebeh hry STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Možnosti a nastavenia STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Uložiť, načítať alebo opustiť hru, ukončiť program -STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Zobraziť mapu, extra výrez, tok nákladu alebo zoznam značiek -STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Zobraziť zoznam miest -STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Zobraziť dotácie -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Zoznam staníc spoločnosti -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Finančné informácie o spoločnosti -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Informácie o spoločnosti -STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Zobraziť knihu príbehov -STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Zobraziť zoznam cieľov -STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Zobrazte firemné grafy a sadzby platieb za náklad -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Hodnotenie spoločností -STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Preskúmať odvetvia alebo zafinancovať výstavbu nového odvetvia -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Zoznam vlakov spoločnosti. Ctrl+klik prepína zoznam skupín/vozidiel -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Zoznam cestných vozidiel spoločnosti. Ctrl+klik prepína zoznam skupín/vozidiel -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Zoznam lodí spoločnosti. Ctrl+klik prepína zoznam skupín/vozidiel -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Zoznam lietadiel spoločnosti. Ctrl+klik prepína zoznam skupín/vozidiel -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Priblížiť pohľad -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Oddialiť pohľad -STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Výstavba železnice -STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Výstavba ciest -STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Výstavba električkových tratí +STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Otvoriť mapu, extra výrez, tok nákladu alebo zoznam značiek +STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Otvoriť zoznam miest, alebo založiť nové mesto +STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Otvoriť zoznam dotácí +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Otvoriť zoznam staníc spoločnosti +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Otvoriť finančné informácie o spoločnosti +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Otvoriť informácie o spoločnosti +STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Otvoriť knihu príbehov +STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Otvoriť zoznam cieľov +STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Otvoriť firemné grafy a sadzby platieb za náklad +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Otvoriť hodnotenia spoločností +STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Preskúmať odvetvia priemyslu alebo zafinancovať výstavbu nového priemyslu +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Otvoriť zoznam vlakov spoločnosti. Ctrl+Klik zobrazí alebo skryje skupiny vlakov +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Otvoriť zoznam cestných vozidiel spoločnosti. Ctrl+Klik zobrazí alebo skryje skupiny vozidiel +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Otvoriť zoznam lodí spoločnosti. Ctrl+Klik zobrazí alebo skryje skupiny lodí +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Otvoriť zoznam lietadiel spoločnosti. Ctrl+Klik zobrazí alebo skryje skupiny vozidiel +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Priblížiť +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Oddialiť +STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Výstavba železničnej infraštruktúry +STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Výstavba cestnej infraštruktúry +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Výstavba električkovej infraštruktúry STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Výstavba vodných ciest STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Výstavba letísk -STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Otvoriť panel nástrojov pre úpravy terénu, výsadbu stromov, a pod. -STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Zobraziť okno zvuku a hudby -STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Zobraziť poslednú správu/novinku, históriu správ alebo vymazať všetky správy -STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Informácie o pozemku, snímka obrazovky, o OpenTTD a nástrojoch pre vývojárov +STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Otvoriť panel nástrojov pre úpravy terénu, výsadbu stromov, alebo pokladanie značiek +STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Otvoriť okno zvuku a hudby +STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Otvoriť poslednú správu/novinku, históriu správ alebo vymazať všetky správy +STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Otvoriť informácie o pozemku, menu snímkov obrazovky, o OpenTTD a nástroje pre vývojárov STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Prepnúť panely nástrojov # Extra tooltips for the scenario editor toolbar @@ -481,15 +482,15 @@ STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Editor STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Posunúť začiatok o rok dozadu STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Posunúť začiatok o rok dopredu STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Kliknúť pre zadanie počiatočného roku -STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Zobraziť mapu, zoznam miest -STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Generovanie krajiny -STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Generovanie miest -STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Generovanie priemyslu -STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Stavba cesty -STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Výstavba električkovej trate -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Sadiť stromy. Ctrl označí oblasť diagonálne. Shift zobrazí odhadovanú cenu +STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Zobraziť mapu, extra výrez, zoznam miest, priemyslu a značiek +STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Otvoriť menu pre úpravu terénu alebo vytváranie nového sveta +STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Postaviť alebo generovať mestá +STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Postaviť alebo generovať priemysel +STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Výstavba cestnej infraštruktúry +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Výstavba električkovej infraštruktúry +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Sadiť stromy. Ctrl+Klik+Ťah myšou označí oblasť diagonálne. Shift zobrazí odhadovanú cenu STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Umiestniť popis -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Umiestniť objekt. Ctrl označí oblasť diagonálne. Shift zobrazí odhadovanú cenu +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Umiestniť objekt. Ctrl+Klik+Ťah myšou označí oblasť diagonálne. Shift zobrazí odhadovanú cenu # Scenario editor file menu ###length 7 @@ -508,6 +509,7 @@ STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Nastavenia STR_SETTINGS_MENU_AI_SETTINGS :Nastavenia AI STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Nastavenia skriptu STR_SETTINGS_MENU_NEWGRF_SETTINGS :Nastavenia NewGRF +STR_SETTINGS_MENU_SANDBOX_OPTIONS :Možnosti sandboxu STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Nastavenia priehľadnosti STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Zobraziť názvy miest STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Zobraziť názvy staníc @@ -695,6 +697,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Kliknú # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Hodnotenie spoločností STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' +STR_COMPANY_LEAGUE_COMPANY_RANK :{YELLOW}#{NUM} STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Inžinier STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Manažér dopravy STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Koordinátor dopravy @@ -785,6 +788,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Kliknú STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Kliknite na hudobnú stopu pre jej odstránenie z programu (len Vlastný1 alebo Vlastný2) # Highscore window +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Najlepšie spoločnosti STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Obchodník STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN.g :Obchodníci @@ -984,7 +988,12 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Ponuka dotácie skončila:{}{}Preprava {STRING.g} z {STRING} do {STRING} už nebude dotovaná STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Dotácie stiahnuté:{}{}Preprava {STRING.g} z {STRING} do {STRING} už nie je dotovaná +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Ponuka dotácie:{}{}Prvá preprava {STRING.g} z {STRING} do {STRING} bude dotovaná miestnou správou po dobu {UNITS_YEARS_OR_MINUTES}! ###length 4 +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Dotácia udelená spoločnosti {STRING}!{}{}{STRING} z {STRING} do {STRING} bude o 50% výnosnejšia po dobu {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Dotácia udelená spoločnosti {STRING}!{}{}{STRING} z {STRING} do {STRING} bude 2x výnosnejšia po dobu {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Dotácia udelená spoločnosti {STRING}!{}{}{STRING} z {STRING} do {STRING} bude 3x výnosnejšia po dobu {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Dotácia udelená spoločnosti {STRING}!{}{}{STRING} z {STRING} do {STRING} bude 4x výnosnejšia po dobu {UNITS_YEARS_OR_MINUTES}! STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Dopravný chaos v {TOWN}!{}{}Kompletná rekonštrukcie ciest zaplatená {STRING} prináša 6 mesiacov utrpenia všetkým vodičom! STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}Dopravný chaos v {TOWN}!{}{}Kompletná rekonštrukcie ciest zaplatená {STRING} prináša 6 minút utrpenia všetkým vodičom! @@ -1026,7 +1035,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Výber m STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Libra šterlingov STR_GAME_OPTIONS_CURRENCY_USD :Americký dolár STR_GAME_OPTIONS_CURRENCY_EUR :Euro @@ -1069,6 +1078,7 @@ STR_GAME_OPTIONS_CURRENCY_HKD :Hongkongský do STR_GAME_OPTIONS_CURRENCY_INR :Indická rupia STR_GAME_OPTIONS_CURRENCY_IDR :Indonézska rupia STR_GAME_OPTIONS_CURRENCY_MYR :Malajzijský ringgit +STR_GAME_OPTIONS_CURRENCY_LVL :Lotyšské Laty STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Automatické ukladanie STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Výber intervalu automatického ukladania @@ -1332,10 +1342,10 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Neobmedzené fi STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Umožniť neobmedzené míňanie peňazí, a vypnúť bankrupciu spoločností STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximálny počiatočný úver: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximálna množstvo peňazí ktoré si môže spoločnosť požičať (bez inflácie) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximálna množstvo peňazí ktoré si môže spoločnosť požičať (bez inflácie). Ak je nastavené na "Žiaden úver", žiadne peniaze nebudú dostupné, iba v prípade že ich dodáva herný skript, alebo sú nastavené neobmedzené financie. STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Žiadny úver {RED}Vyžaduje Herný skript na poskytnutie počiatočných prostriedkov +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Žiadny úver STR_CONFIG_SETTING_INTEREST_RATE :Úroková sadzba: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Úroková sadzba úveru; kontroluje infláciu ak je povolená @@ -1365,7 +1375,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Cena stavby: {S STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Zvoľte úroveň cien výstavby a nákupov STR_CONFIG_SETTING_RECESSIONS :Recesie: {STRING} -STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Ak je povolené, každých pár rokov sa môže vyskytnúť recesia. Počas recesie je všetká produkcia znatelne nižšia (po skončení recesie sa produkcia vráti na normálnu úroveň) +STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Ak je povolené, recesia sa môže periodicky opakovať. Počas recesie je všetká produkcia znatelne nižšia (po skončení recesie sa produkcia vráti na normálnu úroveň) STR_CONFIG_SETTING_TRAIN_REVERSING :Zakázať otáčanie vlakov v staniciach: {STRING} STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Ak je povolené vlaky sa nebudú otáčať v staniciach, ktoré niesu na konci trate, aj keby sa im tým skrátila cesta do ďalšieho cieľa @@ -1419,7 +1429,7 @@ STR_CONFIG_SETTING_FORBID_90_DEG :Zakázať vlako STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 stupňové zákruty vznikajú keď sa spojí horizontálna a vertikálna dráha. Týmto vznikne potreba vlaku "otočiť sa" o 90 stupňov pri prechode touto zákrutou namiesto 45 stupňovího prejazdu ako pri ostatných kombináciách trate. Toto isté platí aj pre lode. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Povoliť spájať stanice nepriamo hraničiace: {STRING} -STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Povoľuje pridanie časti stanice bez priamej manipulácie s existujúcimi časťami. Použite Ctrl+Click na položenie novej časti. +STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Povoľuje pridanie časti stanice bez priamej manipulácie s existujúcimi časťami. Použite Ctrl+Klik na položenie novej časti. STR_CONFIG_SETTING_INFLATION :Inflácia: {STRING} STR_CONFIG_SETTING_INFLATION_HELPTEXT :Povoluje infláciu v ekonomike, kedy náklady stúpaju rýchlejšie ako platby za prepravy. @@ -1612,7 +1622,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Pôvodný STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Typ terénu: {STRING} -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Len TerraGenesis) Hornatosť krajiny +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Zvoľte výšku hôr a kopcov STR_CONFIG_SETTING_INDUSTRY_DENSITY :Hustota priemyslu: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Nastavte, koľko má byť vygenerovaného priemyslu a aká úroveň by mala byť zachovaná v priebehu hry @@ -1621,18 +1631,18 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximálna vzdi STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Rafinérie ropy sú vybudované len na okrajoch mapy, tzn na pobreží pri ostrovných mapách STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Úroveň hranice snehu: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Určuje v akej výške začína sneh v subarktickej krajine. Sneh tiež ovplyvňuje generáciu priemyslu a požiadavky rastu mesta. Môže byť upravené iba cez Editor scenára, alebo je vypočítane cez "pokrytie snehom" +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Zvoľte, v akej výške začína sneh v subarktickej krajine. Sneh tiež ovplyvňuje generáciu priemyslu a požiadavky rastu mesta. Môže byť upravené iba cez Editor scenára, alebo je vypočítane cez "pokrytie snehom" STR_CONFIG_SETTING_SNOW_COVERAGE :Pokrytie snehom: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Ovláda približnú zasneženú rozlohu v subpolárnej krajine. Sneh taktiež ovlyvňuje generáciu priemyslu a požiadavky rastu mesta. Používa sa iba pri vytváraní krajiny. Pevnina tesne nad výškou mora je vždy bez snehu +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Zvoľte približnú zasneženú rozlohu v subpolárnej krajine. Sneh taktiež ovlyvňuje generáciu priemyslu a požiadavky rastu mesta. Používa sa iba pri vytváraní krajiny. Pevnina tesne nad výškou mora a vo výške mora je vždy bez snehu STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Pokrytie púšťou: {STRING} -STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Ovláda približnú rozlohu púšte v subtropickej krajine. Púšť taktiež ovlyvňuje generáciu priemyslu. Používa sa iba pri vytváraní krajiny +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Zvoľte približnú rozlohu púšte v subtropickej krajine. Púšť taktiež ovlyvňuje generáciu priemyslu. Používa sa iba pri vytváraní krajiny STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Členitosť terénu : {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Len TerraGenesis) Vyberte hustotu kopcov: Rovinaté krajiny majú menej, viac pozdĺžných kopcov. Hornaté krajiny majú veľa kopcov, ktoré sa môžu opakovať +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Vyberte tvar a hustotu kopcov. Rovinaté krajiny majú menej, viac pozdĺžných kopcov. Hornaté krajiny majú veľa menších kopcov ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Veľmi rovný STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Rovný @@ -1640,7 +1650,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Členitý STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Veľmi členitý STR_CONFIG_SETTING_VARIETY :Rozmanitosť distribúcie: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :(len TerraGenesis) Skontrolujte či mapa obsahuje oba terény aj horský aj nížinný. Pretože to robí mapy rovinatejšie, ostatné nastavenia by mali byť zvolené ako hornatý +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Zvoliť, či mapa obsahuje oba terény aj horský aj nížinný. Čím väčšia rozmanitosť, tým väčšie budú rozdiely v prevýšeniach medzi rovinami a horami. STR_CONFIG_SETTING_RIVER_AMOUNT :Množstvo riek: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Vyberte koľko riek sa má generovať @@ -1660,6 +1670,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Jazdia naľavo STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Jazdia napravo STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Orientácia výškovej mapy: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Zvoľte, ktorým smerom je výšková mapa otočená, aby zapadla do herného sveta ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Proti smeru hodinových ručičiek STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :V smere hodinových ručičiek @@ -1694,7 +1705,7 @@ STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :Sivá až červ STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Odtiene šedej STR_CONFIG_SETTING_SCROLLMODE :Správanie pohľadu pri posúvaní myšou: {STRING} -STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Reakcia na posúvanie (scrollovanie) na mape +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Správanie pri posúvaní mapy. Nastavenie "uzamknutá pozícia myši" nefunguje na všetkých systémoch, ako sú webové verzie, dotykové displeje, Linuxové distribúcie s Waylandom a iné ###length 4 STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Pohyb pohľadu s pravým tlačidlom myši, poloha myši uzamknutá STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Pohyb mapy s pravým tlačidlom myši, poloha myši uzamknutá @@ -1878,7 +1889,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Koľko pamäte STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Servisné intervaly v percentách: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Zvoľte či servisovanie vozidiel bude podliehať času od posledného servisu, alebo poklesom percenta návratnosti z celkovej maximálnej návratnosti. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Ak je zapnuté, vozidlá sa budú pokúšať navštíviť servis ak ich spoľahlivosť klesne pod nastavenú hodnotu percent maximálnej spoľahlivosti.{}{}Napríklad, ak je maximálna spoľahlivosť 90% a servisný interval je 20%, vozidlo sa pokúsi ísť do servisu keď dosiahne 72%. STR_CONFIG_SETTING_SERVINT_TRAINS :Predvolený interval servisu pre vlaky: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Nastav predvolený interval pre nové vlaky. Ak nie je nastavený podrobnejší interval. @@ -1888,7 +1899,7 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Predvolený int STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Nastav predvolený interval pre nové lietadlá. Ak nie je nastavený podrobnejší interval. STR_CONFIG_SETTING_SERVINT_SHIPS :Predvolený interval servisu pre lode: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Nastav predvolený interval pre nové lode. Ak nie je nastavený podrobnejší interval. -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA} deň/% +STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}D{P eň ni ní}/min{P utu uty út}/% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :vypnuté @@ -2011,8 +2022,8 @@ STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Povolí mestám STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Mestá umožňujú stavbu železničných priecestí: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Povolením nastavenia sa umožní mestám stavať železničné priecestia -STR_CONFIG_SETTING_NOISE_LEVEL :Povoliť mestom určené hlukové limity pre letiská: {STRING} -STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Ak je nastavenie vypnuté, potom môžu byť dve letiská v jednom meste. Ak je nastavenie zapnuté, počet letísk je obmedzený prijateľnou hlučnosťou, ktorá závisí od počtu obyvateľov a veľkosti letiska a jeho vzdialenosti od mesta +STR_CONFIG_SETTING_NOISE_LEVEL :Obmedziť plánovanie letiska na základe úrovne hluku: {STRING} +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Povolí mestám zakázať výstavbu letiska na základe ich maximálnej povolenej úrovne hluku, ktorá závisí na počte obyvateľov, veľkosti letiska a vzdialenosti od mesta. Ak ej toto nastavenie vypnuté, mestá dovoľujú maximálne 2 letiská, pokiaľ vzťah s mestom nieje nastavený na "Zhovievavý" STR_CONFIG_SETTING_TOWN_FOUNDING :Zakladanie nových miest počas hry: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Povolením nastavenia umožní hráčom zakladať nové mestá na mape. @@ -2173,6 +2184,7 @@ STR_CONFIG_SETTING_ACCOUNTING :Účtovníctvo STR_CONFIG_SETTING_VEHICLES :Vozidlá STR_CONFIG_SETTING_VEHICLES_PHYSICS :Fyzika STR_CONFIG_SETTING_VEHICLES_ROUTING :Smerovanie +STR_CONFIG_SETTING_VEHICLES_ORDERS :Príkazy STR_CONFIG_SETTING_LIMITATIONS :Obmedzenia STR_CONFIG_SETTING_ACCIDENTS :Katastrofy / Nehody STR_CONFIG_SETTING_GENWORLD :Generovanie sveta @@ -2296,7 +2308,7 @@ STR_HELP_WINDOW_BUGTRACKER :{BLACK}Nahlási STR_HELP_WINDOW_COMMUNITY :{BLACK}Komunita # Cheat window -STR_CHEATS :{WHITE}Cheaty +STR_CHEATS :{WHITE}Možnosti sandboxu STR_CHEAT_MONEY :{LTBLUE}Zvýšiť hotovosť o {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Hrať za spoločnosť: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magický buldozér (odstráni priemysel a nehnuteľnosti): {ORANGE}{STRING} @@ -2307,6 +2319,7 @@ STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Zmeniť STR_CHEAT_CHANGE_DATE :{LTBLUE}Zmeniť dátum: {ORANGE} {DATE_SHORT} STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Zmeniť súčasný rok STR_CHEAT_SETUP_PROD :{LTBLUE}Povoliť zmenu objemu výroby: {ORANGE}{STRING} +STR_CHEAT_STATION_RATING :{LTBLUE}Nastaviť hodnotenie staníc na 100%: {ORANGE}{STRING} # Livery window STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Farebná schéma @@ -2319,15 +2332,17 @@ STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Zobrazi STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Zobraziť farby skupín vlakov STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Zobraziť farby skupín cestných vozidiel STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Zobraziť farby skupín lodí -STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Vyber primárnu farbu pre vybranú schému. Ctrl + klik nastaví túto farbu pre každú schému -STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Vyber sekundárnu farbu pre vybranú schému. Ctrl + klik nastaví túto farbu pre každý schému +STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Zobraziť farby skupín lietadiel +STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Vyber primárnu farbu pre vybranú schému. Ctrl+Klik nastaví túto farbu pre každú schému +STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Vyber sekundárnu farbu pre vybranú schému. Ctrl+Klik nastaví túto farbu pre každú schému STR_LIVERY_PANEL_TOOLTIP :{BLACK}Vyber farebnú schému, ktorá sa má meniť (CTRL+klik pre viacero schém). Zaškrtávacie pole prepína používanie schémy STR_LIVERY_TRAIN_GROUP_EMPTY :Niesú nastavené žiadne skupiny vlakov STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Nieje vytvorená žiadna skupina cestných vozidiel STR_LIVERY_SHIP_GROUP_EMPTY :Žiadne skupiny lodí niesú nastavené +STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Niesú nastavené žiadne skupiny lietadiel ###length 23 -STR_LIVERY_DEFAULT :Štandardná schéma +STR_LIVERY_DEFAULT :Predvolená schéma STR_LIVERY_STEAM :Parný rušeň STR_LIVERY_DIESEL :Dieselový rušeň STR_LIVERY_ELECTRIC :Elektrický rušeň @@ -2482,7 +2497,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Názov h STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Nastaviť heslo STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Zabezpeč hru heslom, ak nechceš povoliť verejný prístup -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Viditeľnosť +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Viditeľnosť: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Aby ostatní hráči videli tento server v zozname verejných servrov STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" i ov} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximálny počet klientov: @@ -2717,7 +2732,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK} Hľadan STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Opúšťate OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Pravidlá a podmienky pre sťahovanie obsahu z externých webových stránok sa líšia.{}Musíte sa obrátiť na externé webové stránky pre inštrukcie, ako inštalovať obsah do OpenTTD.{}Chcete pokračovať? STR_CONTENT_FILTER_TITLE :{BLACK}Tag/meno filtra: -STR_CONTENT_OPEN_URL :{BLACK}Navštív webstránku +STR_CONTENT_OPEN_URL :{BLACK}Webstránka STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Choď na webstránku pre ďalší obsah STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Sťahovanie STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Začať sťahovanie ozačeného obsahu @@ -2788,6 +2803,7 @@ STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Prepnú STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Prepnúť priehľadnosť mostov. Ctrl+klik uzamkne nastavenie STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Prepnúť priehľadnosť objektov ako sú majáky a vysielače. Ctrl+klik uzamkne nastavenie STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Prepnúť priehľadnosť trakčného vedenia. Ctrl+klik uzamkne nastavenie +STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Prepnúť priehladnosť textu doby nakladania/príjmu. Ctrl+Klik toto nastavenie uzamkne STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Nastaviť objekty neviditeľné namiesto priehľadných # Linkgraph legend window @@ -2835,15 +2851,15 @@ STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Výstavba elekt STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Výstavba jednokoľajky (Monorail) STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Výstavba magnetickej dráhy (Maglev) -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Postaviť železničnú trať. Ctrl odstráni časť trate. Shift zobrazí odhadovanú cenu -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Postaviť železničnú trať v automatickom režime. Ctrl odstráni časť trate. Shift zobrazí odhadovanú cenu +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Postaviť železničnú trať. Ctrl+Klik odstráni časť trate. Shift zobrazí odhadovanú cenu +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Postaviť železničnú trať v automatickom režime. Ctrl+Klik odstráni časť trate. Shift zobrazí odhadovanú cenu STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Postaviť vlakové depo (na nákup a opravu vlakov). Shift zobrazí odhadovanú cenu -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Umiestniť smerový bod. Ctrl umožní spájanie smerových bodov. Shift zobrazí odhadovanú cenu -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Postaviť železničnú stanicu. Ctrl umožní spájanie staníc. Shift zobrazí odhadovanú cenu -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Umiestniť železničné návestidlá. Ctrl prepína mechanické/svetelné návestidlá{}Ťahanie umiestní návestidlá na rovnom úseku trate. Ctrl umiestní návestidlá až po najbližšiu križovatku alebo návestidlo{}Ctrl+klik prepína otvorenie okna na výber návestidla. Shift zobrazí odhadovanú cenu +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Umiestniť smerový bod. Ctrl+Klik umožní spájanie smerových bodov. Shift zobrazí odhadovanú cenu +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Postaviť železničnú stanicu. Ctrl+Klik umožní spájanie staníc. Shift zobrazí odhadovanú cenu +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Umiestniť železničné návestidlá. Ctrl+Klik prepína mechanické/svetelné návestidlá{}Ťahanie umiestní návestidlá na rovnom úseku trate. Ctrl umiestní návestidlá až po najbližšiu križovatku alebo návestidlo{}Ctrl+Klik prepína otvorenie okna na výber návestidla. Shift zobrazí odhadovanú cenu STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Postaviť železničný most. Shift zobrazí odhadovanú cenu STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Postaviť železničný tunel. Shift zobrazí odhadovanú cenu -STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Prepnúť na odstránenie železničnej trate, návestidiel, smerových bodov a staníc. Ctrl odstráni aj koľaj smerového bodu a stanice +STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Prepnúť na odstránenie železničnej trate, návestidiel, smerových bodov a staníc. Ctrl+Klik odstráni aj koľaj smerového bodu a stanice STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Konvertovať/vylepšiť typ železnice. Shift zobrazí odhadovanú cenu STR_RAIL_NAME_RAILROAD :Železnica @@ -2894,7 +2910,7 @@ STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Výstupn STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Kombinované návestidlo (elektrické){}Funguje zároveň ako vstupné aj výstupné návestidlo. Tým umožňuje budovať veľké "stromové" hierarchie návestidiel STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Trasové návestidlo (elektrické){}Trasové návestidlo povolí viac vlakov v jednom úseku súčasne, ak má vlak voľnú trasu, ktorú si rezervuje. Bežné trasové návestidla môžu vlaky prechádzať aj opačným smerom STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Jednosmerné trasové návestidlo (elektrické){}Trasové návestidlo povolí viac vlakov v jednom úseku súčasne, ak má vlak voľnú trasu, ktorú si rezervuje. Jednosmerné trasové návestidla môžu vlaky prechádzať iba z prednej strany -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Zameniť návestidlo{}Po vybratí, kliknutím na existujúce návestidlo dochádza k zámene na vybraný typ a variantu návestidla. Ctrl+klik prepne existujúcu variantu. Shift+klik zobrazí odhadovanú cenu zámeny +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Zameniť návestidlo{}Kliknutím na existujúce návestidlo dochádza k zámene na vybraný typ a variantu návestidla. Ctrl+Klik prepne existujúcu variantu. Shift+Klik zobrazí odhadovanú cenu zámeny STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Hustota návestidiel pri stavbe ťahaním STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Znížiť hustotu návestidiel STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Zvýšit hustotu návestidiel @@ -2920,16 +2936,16 @@ STR_BRIDGE_TUBULAR_SILICON :Krytý plastov # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Výstavba ciest STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Výstavba električkových tratí -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Postaviť časť cesty. Ctrl odstráni časť cesty. Shift zobrazí odhadovanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Postaviť časť električkovej trate. Ctrl odstráni časť trate. Shift zobrazí odhadovanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Postaviť časť cesty v automatickom režime. Ctrl odstráni časť cesty. Shift zobrazí odhadovanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Postaviť časť električkovej trate v automatickom režime. Ctrl odstráni časť trate. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Postaviť časť cesty. Ctrl+Klik odstráni časť cesty. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Postaviť časť električkovej trate. Ctrl+Klik odstráni časť trate. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Postaviť časť cesty v automatickom režime. Ctrl+Klik odstráni časť cesty. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Postaviť časť električkovej trate v automatickom režime. Ctrl+Klik odstráni časť trate. Shift zobrazí odhadovanú cenu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Postaviť automobilovú garáž (na výrobu a opravu vozidiel). Shift zobrazí odhadovanú cenu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Postaviť električkovú garáž (na výrobu a opravu vozidiel). Shift zobrazí odhadovanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Postaviť autobusovú zastávku. Ctrl umožní spájanie staníc. Shift zobrazí odhadovanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Postaviť električkovú zastávku. Ctrl umožní spájanie staníc. Shift zobrazí odhadovanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Postaviť vykládku. Ctrl umožní spájanie staníc. Shift zobrazí odhadovanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Postaviť električkovú vykládku. Ctrl umožní spájanie staníc. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Postaviť autobusovú zastávku. Ctrl+Klik umožní spájanie staníc. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Postaviť električkovú zastávku. Ctrl+Klik umožní spájanie staníc. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Postaviť vykládku. Ctrl+Klik umožní spájanie staníc. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Postaviť električkovú vykládku. Ctrl+Klik umožní spájanie staníc. Shift zobrazí odhadovanú cenu STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Prepnúť na stavbu jednosmernej cesty STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Postaviť cestný most. Shift zobrazí odhadovanú cenu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Postaviť električkový most. Shift zobrazí odhadovanú cenu @@ -2965,11 +2981,11 @@ STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Vodné c STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Postaviť časť vodného kanálu. Shift zobrazí odhadovanú cenu STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Postaviť stavidlá. Shift zobrazí odhadovanú cenu STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Postaviť lodenicu (na výrobu a opravu lodí). Shift zobrazí odhadovanú cenu -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Postaviť prístav. Ctrl umožní spájanie staníc. Shift zobrazí odhadovanú cenu +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Postaviť prístav. Ctrl+Klik umožní spájanie staníc. Shift zobrazí odhadovanú cenu STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Umiestniť bóju na vyznačenie trasy. Shift zobrazí odhadovanú cenu STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Postaviť akvadukt. Shift zobrazí odhadovanú cenu -STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Definovať oblasť vody.{}Vytvorí vodný kanál, pri stlačení CTRL na úrovni mora zaplaví okolie -STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Umiestniť rieku. Ctrl označí oblasť diagonálne +STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Definovať oblasť vody. Ctrl+Klik na úrovni mora zaplaví okolie +STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Umiestniť rieku. Ctrl+Klik označí oblasť diagonálne # Ship depot construction window STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Orientácia lodenice @@ -2980,7 +2996,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Prístav # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Výstavba letísk -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Postaviť letisko. Ctrl umožní spájanie staníc. Shift zobrazí odhadovanú cenu +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Postaviť letisko. Ctrl+Klik umožní spájanie staníc. Shift zobrazí odhadovanú cenu # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Výber letiska @@ -3007,14 +3023,14 @@ STR_STATION_BUILD_NOISE :{BLACK}Vytvára # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Úprava terénu -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Znížiť roh políčka. Ťahaním znížite prvý vybraný roh a vyrovnáte celú vybranú oblasť na novú výšku. Ctrl označí oblasť diagonálne. Shift zobrazí odhadovanú cenu -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Zvýšiť roh políčka. Ťahaním zvýšite prvý vybraný roh a vyrovnáte celú vybranú oblasť na novú výšku. Ctrl označí oblasť diagonálne. Shift zobrazí odhadovanú cenu -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Vyrovnať výšku terénu podľa vybraného rohu. Ctrl označí oblasť diagonálne. Shift zobrazí odhadovanú cenu -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Zakúpiť pozemok pre budúce použitie. Ctrl označí oblasť diagonálne. Shift zobrazí odhadovanú cenu +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Znížiť roh políčka. Ctrl+Ťah myšou znížite prvý vybraný roh a vyrovnáte celú vybranú oblasť na novú výšku. Ctrl+Klik+Ťah označí oblasť diagonálne. Shift zobrazí odhadovanú cenu +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Zvýšiť roh políčka. Klik+Ťah myšou zvýšite prvý vybraný roh a vyrovnáte celú vybranú oblasť na novú výšku. Ctrl+Klik+Ťah myšou označí oblasť diagonálne. Shift zobrazí odhadovanú cenu +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Vyrovnať výšku terénu podľa vybraného rohu. Ctrl+Klik+Ťah myšou označí oblasť diagonálne. Shift zobrazí odhadovanú cenu +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Zakúpiť pozemok pre budúce použitie. Ctrl+Klik+Ťah myšou označí oblasť diagonálne. Shift zobrazí odhadovanú cenu # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Výber objektu -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vyberte objekt na vybudovanie. Ctrl označí oblasť diagonálne. Shift zobrazí odhadovanú cenu +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vyberte objekt na vybudovanie. Ctrl+Klik+Ťah myšou označí oblasť diagonálne. Shift zobrazí odhadovanú cenu STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Vyberte triedu objektu na vybudovanie STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Náhľad objektu STR_OBJECT_BUILD_SIZE :{BLACK}Rozmery: {GOLD}{NUM} x {NUM} políčok @@ -3026,7 +3042,7 @@ STR_OBJECT_CLASS_TRNS :Vysielače STR_PLANT_TREE_CAPTION :{WHITE}Stromy STR_PLANT_TREE_TOOLTIP :{BLACK}Vybrať druh stromu na sadenie. Ak sa už strom na políčku nachádza, pridá sa viac stromov zmiešaných druhov nezávisle od vybraného druhu STR_TREES_RANDOM_TYPE :{BLACK}Náhodný druh stromov -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Umiestniť stromy náhodného druhu. Ctrl označí oblasť diagonálne. Shift zobrazí odhadovanú cenu +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Umiestniť stromy náhodného druhu. Ctrl+Klik+Ťah myšou označí oblasť diagonálne. Shift zobrazí odhadovanú cenu STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Náhodné stromy STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Zasadiť stromy náhodne po celej krajine STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normálne @@ -3039,7 +3055,7 @@ STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Sadiť v # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Generovanie územia STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Umiestniť náhodne skaly -STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Vytvoriť oblasť púšte.{}Držaním Ctrl ju odstránite +STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Vytvoriť oblasť púšte.{}Ctrl+Klik ju odstránite STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Pre zvýšenie/zníženie oblasti je potrebné zväčšiť územie STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Pre zvýšenie/zníženie oblasti je potrebné zmenšiť územie STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Vygenerovať náhodné územie @@ -3053,7 +3069,7 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Ste si i # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Vytvorenie mesta STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Nové mesto -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Založiť nové mesto. Shift+klik zobrazí odhadovanú cenu +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Založiť nové mesto. Shift zobrazí odhadovanú cenu STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Nahodné mesto STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Postaviť mesto na náhodnej pozícii STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Veľa náhodných miest @@ -3360,17 +3376,18 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Zníži STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Typ terénu: STR_MAPGEN_SEA_LEVEL :{BLACK}Rozloha mora: +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Zvoľte výšku hladiny mora STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rieky: STR_MAPGEN_SMOOTHNESS :{BLACK}Členitosť: STR_MAPGEN_VARIETY :{BLACK}Rozmanitosť distribúcie: STR_MAPGEN_GENERATE :{WHITE}Generovať STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Vytvorte si svet a hrajte OpenTTD! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Nastavenia NewGRF -STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Zobraziť nastavenia NewGRF +STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Otvoriť nastavenia NewGRF STR_MAPGEN_AI_SETTINGS :{BLACK}Nastavenia AI -STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Zobraziť AI nastavenia +STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Otvoriť nastavenia AI STR_MAPGEN_GS_SETTINGS :{BLACK}Nastavenia skriptu -STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Zobraz nastavenia skriptu +STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Otvoriť nastavenia skriptu ###length 21 STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Anglické (pôvodné) @@ -3514,6 +3531,7 @@ STR_SAVE_PRESET_SAVE :{BLACK}Uložiť STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Uložiť predvoľby do práve vybraného názvu # NewGRF parameters window +STR_BASEGRF_PARAMETERS_CAPTION :{WHITE}Zmeniť parametre základnej grafiky STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Zmeniť NewGRF parametre STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Zatvoriť STR_NEWGRF_PARAMETERS_RESET :{BLACK}Resetovať @@ -3645,7 +3663,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Brať/ne # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Upraviť text popisu -STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu popisu. Ctrl+klik otvorí nové okno s pohľadom na popis +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu popisu. Ctrl+Klik otvorí nové okno s pohľadom na značku STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Prejsť na ďalší popis STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Prejsť na predchádzajúci popis @@ -3656,7 +3674,7 @@ STR_TOWN_DIRECTORY_CAPTION :{WHITE}Mestá STR_TOWN_DIRECTORY_NONE :{ORANGE}- Žiadne - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Veľkomesto){BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Názvy miest - kliknite na názov pre pohľad na mesto. Ctrl+klik otvorí nové okno s pohľadom na mesto +STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Názvy miest - kliknite na názov pre pohľad na mesto. Ctrl+Klik otvorí nové okno s pohľadom na mesto STR_TOWN_POPULATION :{BLACK}Svetová populácia: {COMMA} # Town view window @@ -3671,9 +3689,11 @@ STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} doručené STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (stále potrebné) STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (doručené) +STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Mesto rastie každ{P 0 ý é ých} {ORANGE}{UNITS_DAYS_OR_SECONDS} +STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Mesto rastie každých {ORANGE}{UNITS_DAYS_OR_SECONDS} (dotované) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Mesto {RED}nerastie{BLACK} STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Hlukový limit v meste: {ORANGE}{COMMA}{BLACK} max.: {ORANGE}{COMMA} -STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu mesta. Ctrl+klik otvorí nové okno s pohľadom na mesto +STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu mesta. Ctrl+Klik otvorí nové okno s pohľadom na mesto STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Miestna správa STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Zobraziť informácie o miestnej správe STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Zmeniť názov mesta @@ -3730,7 +3750,7 @@ STR_GOALS_TEXT :{ORANGE}{STRING STR_GOALS_NONE :{ORANGE}- Nič - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikni pre vycentrovanie pohľadu na priemysel/mesto/políčko. Ctrl+klik otvorí nové okno s pohľadom na priemysel/mesto/políčko +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikni pre vycentrovanie pohľadu na priemysel/mesto/políčko. Ctrl+Klik otvorí nové okno s pohľadom na priemysel/mesto/políčko # Goal question window STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Otázka @@ -3766,7 +3786,7 @@ STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_NONE :{ORANGE}Žiadne STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}V súčasnosti poskytované dotácie: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} z {STRING} do {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) -STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Kliknúť na trasu pre centrovanie pohľadu na továreň/mesto +STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Kliknúť na trasu pre centrovanie pohľadu na továreň/mesto. Ctrl+Klik otvorí nové okno s pohľadom na továreň/mesto STR_SUBSIDIES_OFFERED_EXPIRY_DATE :do {DATE_SHORT} STR_SUBSIDIES_OFFERED_EXPIRY_TIME :do {UNITS_MONTHS_OR_MINUTES} STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :do {DATE_SHORT} @@ -3786,17 +3806,20 @@ STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Ísť na STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Neplatný odkaz na cieľ # Station list window -STR_STATION_LIST_TOOLTIP :{BLACK}Názvy staníc - klikni pre pohľad na polohu stanice. Ctrl+klik presunie pohľad na stanicu -STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Podržte CTRL pre výber viacerých položiek +STR_STATION_LIST_TOOLTIP :{BLACK}Názvy staníc - klikni pre pohľad na polohu stanice. Ctrl+Klik otvorí nové okno s pohľadom na stanicu +STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Ctrl+Klik pre výber viacerých položiek STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} Stanic{P a e ""} STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- Žiadne - STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Označiť všetky možnosti STR_STATION_LIST_CARGO_FILTER_ALL_AND_NO_RATING :Všetky druhy nákladu a žiadne hodnotenia +STR_STATION_LIST_CARGO_FILTER_MULTIPLE :Viacero druhov nákladu STR_STATION_LIST_CARGO_FILTER_NO_CARGO_TYPES :Žiaden typ nákladu STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :Iba hodnotenie bez nákladu +STR_STATION_LIST_CARGO_FILTER_SELECT_ALL :Vybrať všetky a bez hodnotenia STR_STATION_LIST_CARGO_FILTER_NO_RATING :Žiadne hodnotenie tovaru +STR_STATION_LIST_CARGO_FILTER_EXPAND :Zobraziť viac... # Station view window STR_STATION_VIEW_CAPTION :{WHITE}{STATION} {STATION_FEATURES} @@ -3849,7 +3872,7 @@ STR_CARGO_RATING_VERY_GOOD :Veľmi dobré STR_CARGO_RATING_EXCELLENT :Výborné STR_CARGO_RATING_OUTSTANDING :Perfektné -STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu stanice. Ctrl+klik otvorí nové okno s pohľadom na stanicu +STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu stanice. Ctrl+Klik otvorí nové okno s pohľadom na stanicu STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Zmeniť názov stanice STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Zobraziť všetky vlaky, ktoré majú túto stanicu v cestovnom poriadku @@ -3864,9 +3887,9 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Zakáž # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} -STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu smerového bodu. Ctrl+klik otvorí nové okno s pohľadom na smerový bod +STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu smerového bodu. Ctrl+Klik otvorí nové okno s pohľadom na smerový bod STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Zmeniť meno smerového bodu -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu bóje. Ctrl+klik otvorí nové okno s pohľadom na bóju +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu bóje. Ctrl+Klik otvorí nové okno s pohľadom na bóju STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Zmeniť meno bóje STR_EDIT_WAYPOINT_NAME :{WHITE}Upraviť názvy smerových bodov @@ -3942,13 +3965,13 @@ STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Postavi STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Pozrieť sídlo STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Pozrieť sídlo spoločnosti STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Premiestniť sídlo -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Sídlo spoločnosti je možné premiestniť za 1% hodnoty spoločnosti. Shift+klik zobrazí odhadovanú cenu +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Sídlo spoločnosti je možné premiestniť za 1% hodnoty spoločnosti. Shift zobrazí odhadovanú cenu STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detaily STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Zobraziť podrobné políčka infraštruktúry STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Dať peniaze STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Presunúť peniaze do tejto spoločnosti -STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Nevraživé pravzatie -STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Nevraživé pravzatie tejto spoločnosti +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Násilné pravziatie +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Násilné pravziatie tejto spoločnosti STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nová tvár STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Vybrať novú tvár prezidenta @@ -3964,6 +3987,7 @@ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Meno prezidenta STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Zadajte množstvo peňazí, ktoré chcete dať spoločnosti STR_BUY_COMPANY_MESSAGE :{WHITE}Hľadáme záujemcu o kúpu našej spoločnosti{}{}Chcete kúpiť našu spoločnosť {COMPANY} za {CURRENCY_LONG}? +STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}V násilnom prevziatí spoločnosti {COMPANY} odkúpite všetky jej aktíva, splatíte dlhy, a zaplatíte sumu vo výške zisku 2 rokov.{}{}Táto cena je zhruba {CURRENCY_LONG}.{}{}Chete pokračovať v tomto násilnom prevzatí? # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY} - Infraštruktúra @@ -3988,7 +4012,7 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} a {NUM} ďalšie... -STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Názvy priemyslu - klikni na meno pre vycentrovanie pohľadu na priemysel. Ctrl+klik otvorí nové okno s pohľadom na priemysel +STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Názvy priemyslu - klikni na meno pre vycentrovanie pohľadu na priemysel. Ctrl+Klik otvorí nové okno s pohľadom na priemysel STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Prijímaný náklad: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Produkovaný náklad: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Všetky druhy nákladu @@ -3999,7 +4023,7 @@ STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTR STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produkcia minulý mesiac: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produkcia za poslednú minútu: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% prepraven{P é é ých}) -STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu priemyslu. Ctrl+klik otvorí nové okno s pohľadom na priemysel +STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu priemyslu. Ctrl+Klik otvorí nové okno s pohľadom na priemysel STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Úroveň produkcie: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Priemysel oznámil blížiace sa uzatvorenie! @@ -4142,10 +4166,10 @@ STR_CARGO_TYPE_FILTER_FREIGHT :Nákladné STR_CARGO_TYPE_FILTER_NONE :Žiadne ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Výber vlakov. Pre získanie informácií klikni na vlak. CTRL+klik prepne skrytie typu vlaku. -STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Výber cestných vozidiel. Pre získanie informácií klikni na vozidlo. CTRL+klik prepne skrytie typu vozidla. -STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Zoznam lodí. Pre získanie informácií klikni na loď. CTRL+klik prepnie skrytie typu lode. -STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Zoznam lietadiel. Pre získanie informácií klikni na lietadlo. CTRL+klik prepnie skrytie typu lietadla. +STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Výber vlakov. Pre získanie informácií klikni na vlak. Ctrl+Klik zobrazí/skryje tento typ vlaku +STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Výber cestných vozidiel. Pre získanie informácií klikni na vozidlo. Ctrl+Klik zobrazí/skryje tento typ vozidla +STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Zoznam lodí. Pre získanie informácií klikni na loď. Ctrl+Klik zobrazí/skryje tento typ lode +STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Zoznam lietadiel. Pre získanie informácií klikni na lietadlo. Ctrl+Klik zobrazí/skryje tento typ lietadla ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Kúpiť vlak @@ -4160,16 +4184,16 @@ STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kúpiť STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kúpiť a prestavať lietadlo ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybraný vlak. Shift+klik zobrazí odhadovanú cenu bez nákupu -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybrané vozidlo. Shift+klik zobrazí odhadovanú cenu bez nákupu -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybranú loď. Shift+klik zobrazí odhadovanú cenu bez nákupu -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybrané lietadlo. Shift+klik zobrazí odhadovanú cenu bez nákupu +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybraný vlak. Shift zobrazí odhadovanú cenu bez nákupu +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybrané vozidlo. Shift zobrazí odhadovanú cenu +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybranú loď. Shift zobrazí odhadovanú cenu bez nákupu +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybrané lietadlo. Shift zobrazí odhadovanú cenu bez nákupu ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybraný vlak. Shift+klik zobrazí odhadovanú cenu bez nákupu -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybrané vozidlo. Shift+klik zobrazí odhadovanú cenu bez nákupu -STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybranú loď. Shift+klik zobrazí odhadovanú cenu bez nákupu -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybrané lietadlo. Shift+klik zobrazí odhadovanú cenu bez nákupu +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybraný vlak. Shift zobrazí odhadovanú cenu bez nákupu +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybrané vozidlo. Shift zobrazí odhadovanú cenu bez nákupu +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybranú loď. Shift zobrazí odhadovanú cenu nákupu +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybrané lietadlo. Shift+Klik zobrazí odhadovanú cenu bez nákupu ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Premenovať @@ -4219,7 +4243,7 @@ STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} vo STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Vlaky - ťahaj ľavým kliknutím pre pridanie/odoberanie vozidiel, pravým kliknutím sa zobrazia informácie o vozidle. Ctrl+pravé kliknutie zobrazí celkové informácie +STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Vlaky - ťahaj ľavým kliknutím pre pridanie/odoberanie vozidiel, pravým kliknutím sa zobrazia informácie o vozidle. Podržte Ctrl pre aplikovanie oboch funkcií na reťaz STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Vozidlá - pravým kliknutím na vozidlo sa zobrazia informácie STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Lode - pravým kliknutím na loď sa zobrazia informácie STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lietadlá - pravým kliknutím na lietadlo sa zobrazia informácie @@ -4261,16 +4285,16 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Klonova STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Klonovať lietadlo ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Zakúpiť kópiu vlaku vrátane vagónov. Kliknite na toto tlačidlo a potom na vlak v depe alebo mimo neho. Ctrl+klik bude zdieľať príkazy. Shift+klik zobrazí odhadovanú cenu -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Zakúpiť kópiu cestného vozidla. Kliknite na toto tlačidlo a potom na vozidlo v garáži alebo mimo nej. Ctrl+klik bude zdieľať príkazy. Shift+klik zobrazí odhadovanú cenu -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Zakúpiť kópiu lode. Kliknite na toto tlačidlo a potom na loď v lodenici alebo mimo nej. Ctrl+klik bude zdieľať príkazy. Shift+klik zobrazí odhadovanú cenu -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Zakúpiť kópiu lietadla. Kliknite na toto tlačidlo a potom na lietadlo v hangári alebo mimo neho. Ctrl+klik bude zdieľať príkazy. Shift+klik zobrazí odhadovanú cenu +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Zakúpiť kópiu vlaku vrátane vagónov. Kliknite na toto tlačidlo a potom na vlak v depe alebo mimo neho. Ctrl+Klik bude zdieľať príkazy. Shift zobrazí odhadovanú cenu +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Zakúpiť kópiu cestného vozidla. Kliknite na toto tlačidlo a potom na vozidlo v garáži alebo mimo nej. Ctrl+Klik bude zdieľať príkazy. Shift zobrazí odhadovanú cenu +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Zakúpiť kópiu lode. Kliknite na toto tlačidlo a potom na loď v lodenici alebo mimo nej. Ctrl+Klik bude zdieľať príkazy. Shift zobrazí odhadovanú cenu +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Zakúpiť kópiu lietadla. Kliknite na toto tlačidlo a potom na lietadlo v hangári alebo mimo neho. Ctrl+Klik bude zdieľať príkazy. Shift zobrazí odhadovanú cenu ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu depa. Ctrl+klik otvorí nové okno s pohľadom na depo -STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu garáže. Ctrl+klik otvorí nové okno s pohľadom na garáž -STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu lodenice. Ctrl+klik otvorí nové okno s pohľadom na lodenicu -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu hangáru. Ctrl+klik otvorí nové okno s pohľadom na hangár +STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu depa. Ctrl+Klik otvorí nové okno s pohľadom na depo +STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu garáže. Ctrl+Klik otvorí nové okno s pohľadom na garáž +STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu lodenice. Ctrl+Klik otvorí nové okno s pohľadom na lodenicu +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu hangáru. Ctrl+Klik otvorí nové okno s pohľadom na hangár ###length VEHICLE_TYPES STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Zobraziť zoznam všetkých vlakov, ktoré majú toto depo v zozname príkazov @@ -4376,27 +4400,27 @@ STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl+ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu vlaku. Dvojité kliknutie bude sledovať vlak v hlavnom pohľade. Ctrl+klik otvorí nové okno s pohľadom na vlak -STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu vozidla. Dvojité kliknutie bude sledovať vozidlo v hlavnom pohľade. Ctrl+klik otvorí nové okno s pohľadom na vozidlo -STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu lode. Dvojité kliknutie bude sledovať loď v hlavnom pohľade. Ctrl+klik otvorí nové okno s pohľadom na loď -STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu lietadla. Dvojité kliknutie bude sledovať lietadlo v hlavnom pohľade. Ctrl+klik otvorí nové okno s pohľadom na lietadlo +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu vlaku. Dvojité kliknutie bude sledovať vlak v hlavnom pohľade. Ctrl+Klik otvorí nové okno s pohľadom na vlak +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu vozidla. Dvojité kliknutie bude sledovať vozidlo v hlavnom pohľade. Ctrl+Klik otvorí nové okno s pohľadom na vozidlo +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu lode. Dvojité kliknutie bude sledovať loď v hlavnom pohľade. Ctrl+Klik otvorí nové okno s pohľadom na loď +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu lietadla. Dvojité kliknutie bude sledovať lietadlo v hlavnom pohľade. Ctrl+Klik otvorí nové okno s pohľadom na lietadlo ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslať vlak do depa. Ctrl+klik iba servis -STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslať vozidlo do garáže. Ctrl+klik iba servis. -STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslať loď do lodenice. Ctrl+klik iba servis -STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslať lietadlo do hangáru. Ctrl+klik iba servis +STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslať vlak do depa. Ctrl+Klik iba servis +STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslať vozidlo do garáže. Ctrl+Klik iba servis. +STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslať loď do lodenice. Ctrl+Klik iba servis +STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslať lietadlo do hangáru. Ctrl+Klik iba servis ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Zakúpiť kópiu vlaku vrátane vagónov. Ctrl+klik bude zdieľať príkazy. Shift+klik zobrazí odhadovanú cenu -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Zakúpiť kópiu cestného vozidla. Ctrl+klik bude zdieľať príkazy. Shift+klik zobrazí odhadovanú cenu -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Zakúpiť kópiu lode. Ctrl+klik bude zdieľať príkazy. Shift+klik zobrazí odhadovanú cenu -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Zakúpiť kópiu lietadla. Ctrl+klik bude zdieľať príkazy. Shift+klik zobrazí odhadovanú cenu +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Zakúpiť kópiu vlaku vrátane vagónov. Ctrl+Klik bude zdieľať príkazy. Shift zobrazí odhadovanú cenu +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Zakúpiť kópiu cestného vozidla. Ctrl+Klik bude zdieľať príkazy. Shift zobrazí odhadovanú cenu +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Zakúpiť kópiu lode. Ctrl+Klik bude zdieľať príkazy. Shift zobrazí odhadovanú cenu +STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Zakúpiť kópiu lietadla. Ctrl+Klik bude zdieľať príkazy. Shift zobrazí odhadovanú cenu STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Prinútiť vlak pokračovať cez návestidlo bez čakania na zelenú STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Otočiť vlak naopak STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Prinútiť vozidlo otočiť sa naopak -STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na cieľovú pozíciu. Ctrl+klik otvorí nové okno s pohľadom na cieľ +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na cieľovú pozíciu. Ctrl+Klik otvorí nové okno s pohľadom na cieľ ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Prestavať vlak na iný druh nákladu @@ -4425,25 +4449,26 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Činnos # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Nakladá / Vykladá STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Opúšta +STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Čakám na rozloženie STR_VEHICLE_STATUS_CRASHED :{RED}Zničené! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Pokazený STR_VEHICLE_STATUS_STOPPED :{RED}Zastavené -STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Zastavuje, {VELOCITY} +STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}{VELOCITY} - Zastavuje STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Nie je prúd STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Čakám na uvoľnenie trate STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}K ďalšej destinácii je to príliš ďaleko STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Smeruje do {0:STATION} -STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Bez určenia, {VELOCITY} +STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Bez určenia STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Smeruje do {0:WAYPOINT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Smeruje do {0:DEPOT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Servis v {0:DEPOT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Rozbaliť a poslať do servisu v {0:DEPOT} -STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}Nedokáže sa dostať do {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}Nedokáže sa dostať do {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}Nedokáže sa dostať do {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}Nedokáže sa dostať do {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - Nedokáže sa dostať do {0:STATION} +STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Nedokáže sa dostať do {0:WAYPOINT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Nedokáže sa dostať do {0:DEPOT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Nedokáže sa dostať do {0:DEPOT} # Vehicle stopped/started animations ###length 2 @@ -4466,6 +4491,7 @@ STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Pomenova STR_VEHICLE_INFO_AGE :{COMMA} rok{P "" y ov} ({COMMA}) STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} rok{P "" y ov} ({COMMA}) STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Vek: {LTBLUE}{STRING}{BLACK} Prevádzkové náklady: {LTBLUE}{CURRENCY_LONG}/rok +STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Vek: {LTBLUE}{STRING}{BLACK} Prevádzkové náklady: {LTBLUE}{CURRENCY_LONG}/obdobie STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Max. rýchlosť: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Rýchlosť: {LTBLUE}{VELOCITY} {BLACK}Typ lietadla: {LTBLUE}{STRING} @@ -4487,6 +4513,9 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kapacita STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Transfer kredity: {LTBLUE}{CURRENCY_LONG} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Servisný interval: {LTBLUE}{COMMA}{NBSP}dní{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Servisný interval: {LTBLUE}{COMMA}{NBSP}minút{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Servisný interval: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Posledný servis: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Posledný servis: pred {LTBLUE}{NUM} minútami STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Zvýši servisný interval o 10 dní. Ctrl+klik zvýši servisný interval o 5 dní @@ -4499,6 +4528,7 @@ STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Zníži STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Zmeniť typ servisného intervalu STR_VEHICLE_DETAILS_DEFAULT :Štandardné STR_VEHICLE_DETAILS_DAYS :Dní +STR_VEHICLE_DETAILS_MINUTES :Minúty STR_VEHICLE_DETAILS_PERCENT :Percentáž ###length VEHICLE_TYPES @@ -4537,7 +4567,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nová ka STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Nová kapacita: {GOLD}{CARGO_LONG}{}{BLACK}Príjem z prestavby: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Nová kapacita: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Cena prestavby: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Nová kapacita: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Príjem z prestavby: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Vyber vozidlo k prestavbe. Ťah myšou umožní vybrať viacej vozidiel. Kliknutie do voľného mista vybere celé vozidlo. Ctrl+Klik vyberie vozidlo a následujúci reťaz +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Vyber vozidlo k prestavbe. Klik+Ťah myšou umožní vybrať viacej vozidiel. Kliknutie do voľného mista vybere celé vozidlo. Ctrl+Klik vyberie vozidlo a následujúci reťaz ###length VEHICLE_TYPES STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Vybrať typ prepravovaného nákladu @@ -4562,8 +4592,9 @@ STR_ORDERS_CAPTION :{WHITE}{VEHICLE STR_ORDERS_TIMETABLE_VIEW :{BLACK}Cestovný poriadok STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Prepnút na zobrazenie cestovného poriadku -STR_ORDERS_LIST_TOOLTIP :{BLACK}Zoznam príkazov - kliknúť na príkaz pre označenie. Ctrl+klik presunie pohľad na cieľ príkazu +STR_ORDERS_LIST_TOOLTIP :{BLACK}Zoznam príkazov - kliknúť na príkaz pre označenie. Ctrl+Klik presunie pohľad na cieľ príkazu STR_ORDER_INDEX :{COMMA}:{NBSP} +STR_ORDER_TEXT :{STRING} {STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Koniec príkazov - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Koniec zdieľaných príkazov - - @@ -4600,9 +4631,12 @@ STR_ORDER_DROP_REFIT_AUTO_ANY :Dostupný nákl STR_ORDER_DROP_GO_ALWAYS_DEPOT :Vždy choď STR_ORDER_DROP_SERVICE_DEPOT :Servis, ak je potrebný STR_ORDER_DROP_HALT_DEPOT :Zastav +STR_ORDER_DROP_UNBUNCH :Rozdeliť # Depot action tooltips, one per vehicle type ###length VEHICLE_TYPES +STR_ORDER_TRAIN_DEPOT_ACTION_TOOLTIP :{BLACK}Zvoľte akciu, ktorá sa má vykonať v tomto depe +STR_ORDER_ROAD_DEPOT_ACTION_TOOLTIP :{BLACK}Zvoľte akciu, ktorá sa vykoná v tomto depe STR_ORDER_SHIP_DEPOT_ACTION_TOOLTIP :{BLACK}Zvoľte akciu, ktorá sa vykoná v tomto depe STR_ORDER_HANGAR_ACTION_TOOLTIP :{BLACK}Zvoľte akciu, ktorá sa vykoná v tomto hangári ###next-name-looks-similar @@ -4635,13 +4669,13 @@ STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}Hodnota, STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Zadajte hodnotu, s ktorou sa má porovnať STR_ORDERS_SKIP_BUTTON :{BLACK}Preskočiť -STR_ORDERS_SKIP_TOOLTIP :{BLACK}Preskočiť aktuálny príkaz a začať ďalší. Ctrl+klik pre skok na označený príkaz +STR_ORDERS_SKIP_TOOLTIP :{BLACK}Preskočiť aktuálny príkaz a začať ďalší. Ctrl+Klik pre skok na označený príkaz STR_ORDERS_DELETE_BUTTON :{BLACK}Vymazať STR_ORDERS_DELETE_TOOLTIP :{BLACK}Vymazať označený príkaz STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Vymazať všetky príkazy STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Prestať zdieľať -STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Prestať zdieľať zoznam príkazov. Ctrl+klik naviac zmaže všetky príkazy tohoto vozidla +STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Prestať zdieľať zoznam príkazov. Ctrl+Klik naviac zmaže všetky príkazy tohoto vozidla STR_ORDERS_GO_TO_BUTTON :{BLACK}Choď do STR_ORDER_GO_TO_NEAREST_DEPOT :Choď do najbližšieho depa @@ -4761,19 +4795,19 @@ STR_TIMETABLE_START_TOOLTIP :{BLACK}Vyberte, STR_TIMETABLE_START_SECONDS_QUERY :Počet sekúnd do začiatku cestovného poriadku STR_TIMETABLE_CHANGE_TIME :{BLACK}Zmeniť čas -STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Zmeniť dĺžku trvania označeného príkazu. Ctrl+klik nastaví čas pre všetky príkazy +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Zmeniť dĺžku trvania označeného príkazu. Ctrl+Klik nastaví čas pre všetky príkazy STR_TIMETABLE_CLEAR_TIME :{BLACK}Odstrániť čas -STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Odstrániť dĺžku trvania označeného príkazu. Ctrl+klik vymaže čas pre všetky príkazy +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Odstrániť dĺžku trvania označeného príkazu. Ctrl+Klik vymaže čas pre všetky príkazy STR_TIMETABLE_CHANGE_SPEED :{BLACK}Zmeniť maximálnu rýchlosť -STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Zmeniť maximálnu rýchlosť označeného príkazu. Ctrl+klik nastaví rýchlosť pre všetky príkazy +STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Zmeniť maximálnu rýchlosť označeného príkazu. Ctrl+Klik nastaví rýchlosť pre všetky príkazy STR_TIMETABLE_CLEAR_SPEED :{BLACK}Odstrániť rýchlostné obmedzenie -STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Odstrániť obmedzenie maximánej rýchlosti označeného príkazu. Ctrl+klik vymaže rýchlosť pre všetky príkazy +STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Odstrániť obmedzenie maximánej rýchlosti označeného príkazu. Ctrl+Klik vymaže rýchlosť pre všetky príkazy STR_TIMETABLE_RESET_LATENESS :{BLACK}Reset meškania -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Vynulovať počítadlo meškania, takže vozidlo pôjde presne. Ctrl+klik vynuluje celú skupinu, takže posledné vozidlo bude bez meškania a ostatné prídu skôr +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Vynulovať počítadlo meškania, takže vozidlo pôjde presne. Ctrl+Klik vynuluje celú skupinu, takže posledné vozidlo bude bez meškania a ostatné prídu skôr STR_TIMETABLE_AUTOFILL :{BLACK}Automaticky vyplniť STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Vyplniť časový plán automaticky s hodnotami z nasledujúcej trasy. Ctrl+klik - pokúsiť sa udržať čakacie doby @@ -4813,9 +4847,9 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Porovná STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Prepnúť porovnávanie denníka AI znovu po príkaze na pozastavenie STR_AI_DEBUG_CONTINUE :{BLACK}Pokračovať STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Odpauzovať a povoliť AI -STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Ukázať ladiaci výpis tejto UI +STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Ukázať ladiaci výpis tejto AI. Ctrl+Klik ho otvorí v novom okne STR_AI_GAME_SCRIPT :{BLACK}Skript -STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Pozri log skriptu +STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Pozri log skriptu. Ctrl+Klik ho otvorí v novom okne STR_ERROR_AI_NO_AI_FOUND :Nebolo nájdená žiadne použitelné AI.{}Toto AI je hlúpe a nebude nič robiť.{}Môžete si stiahnúť niekoľko AI cez 'Online Obsah' systém. STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Jeden z bežiacich skriptov spadol. Prosím nahláste to autorovi a priložte screenshot Debugovacej obrazovky. diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 608f5fc458..eb56bc720b 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1009,7 +1009,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valute STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Izbira valut -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Funt STR_GAME_OPTIONS_CURRENCY_USD :Dolar STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 8375043568..bf29d89cdd 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -968,7 +968,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Seleccio STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Libra británica STR_GAME_OPTIONS_CURRENCY_USD :Dólar estadounidense STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 8140cf8520..58e27b0e37 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -938,7 +938,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Divisa STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Elegir divisa -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Libra británica STR_GAME_OPTIONS_CURRENCY_USD :Dólar estadounidense STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index a47b9a495c..a563197053 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -967,7 +967,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Välj va STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Brittiskt pund STR_GAME_OPTIONS_CURRENCY_USD :Amerikansk dollar STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index c56f0498af..c3f1be4026 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -937,7 +937,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}நா STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :பிரித்தானிய பவுண்டு STR_GAME_OPTIONS_CURRENCY_USD :அமெரிக்கன் டாலர் STR_GAME_OPTIONS_CURRENCY_EUR :யுரோ diff --git a/src/lang/thai.txt b/src/lang/thai.txt index b0da5ed04f..7e59b31d3d 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -863,7 +863,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}หน STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}การเลือกสกุลเงิน -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :ปอนด์สเตอร์ลิง STR_GAME_OPTIONS_CURRENCY_USD :ดอลลาร์สหรัฐ STR_GAME_OPTIONS_CURRENCY_EUR :ยูโร diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 262f9668d7..d18fb16a2c 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -968,7 +968,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Para bir STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Sterlin STR_GAME_OPTIONS_CURRENCY_USD :Amerikan Doları STR_GAME_OPTIONS_CURRENCY_EUR :Avro diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index e4a7f4edf9..679571b7a2 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -823,7 +823,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}کرنس STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}کرنسی کی اکائی اختیار کریں -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :برطانوی پاونڈ STR_GAME_OPTIONS_CURRENCY_USD :امریکی ڈالر STR_GAME_OPTIONS_CURRENCY_EUR :یورو diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 6bcb8daeae..723d5e8206 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -967,7 +967,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Lựa ch STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Bảng Anh STR_GAME_OPTIONS_CURRENCY_USD :Đô-la Mỹ STR_GAME_OPTIONS_CURRENCY_EUR :Euro diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 23c218239f..c438a52983 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -906,7 +906,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Dewis un STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Punnoedd Prydeinig STR_GAME_OPTIONS_CURRENCY_USD :Doler America STR_GAME_OPTIONS_CURRENCY_EUR :Ewro From ae27ce12a755fb9685d96a237f5ef636e8318b69 Mon Sep 17 00:00:00 2001 From: glx22 Date: Thu, 29 Feb 2024 01:15:06 +0100 Subject: [PATCH 073/695] Fix 0858377: [Script] Don't output parameters more than once --- src/script/api/script_text.cpp | 26 +++++++++++++++----------- src/script/api/script_text.hpp | 3 ++- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/script/api/script_text.cpp b/src/script/api/script_text.cpp index 272302154f..83869e1216 100644 --- a/src/script/api/script_text.cpp +++ b/src/script/api/script_text.cpp @@ -166,7 +166,7 @@ std::string ScriptText::GetEncodedText() std::string result; auto output = std::back_inserter(result); this->_FillParamList(params, seen_texts); - this->_GetEncodedText(output, param_count, params); + this->_GetEncodedText(output, param_count, params, true); if (param_count > SCRIPT_TEXT_MAX_PARAMETERS) throw Script_FatalError(fmt::format("{}: Too many parameters", GetGameStringName(this->string))); return result; } @@ -191,16 +191,22 @@ void ScriptText::ParamCheck::Encode(std::back_insert_iterator &outp if (this->used) return; if (std::holds_alternative(*this->param)) fmt::format_to(output, ":\"{}\"", std::get(*this->param)); if (std::holds_alternative(*this->param)) fmt::format_to(output, ":{:X}", std::get(*this->param)); - if (std::holds_alternative(*this->param)) fmt::format_to(output, ":{:X}", this->owner); + if (std::holds_alternative(*this->param)) { + fmt::format_to(output, ":"); + Utf8Encode(output, SCC_ENCODED); + fmt::format_to(output, "{:X}", std::get(*this->param)->string); + } this->used = true; } -void ScriptText::_GetEncodedText(std::back_insert_iterator &output, int ¶m_count, ParamSpan args) +void ScriptText::_GetEncodedText(std::back_insert_iterator &output, int ¶m_count, ParamSpan args, bool first) { const std::string &name = GetGameStringName(this->string); - Utf8Encode(output, SCC_ENCODED); - fmt::format_to(output, "{:X}", this->string); + if (first) { + Utf8Encode(output, SCC_ENCODED); + fmt::format_to(output, "{:X}", this->string); + } const StringParams ¶ms = GetGameStringParams(this->string); @@ -221,23 +227,21 @@ void ScriptText::_GetEncodedText(std::back_insert_iterator &output, case StringParam::RAW_STRING: { ParamCheck &p = *get_next_arg(); - if (!std::holds_alternative(*p.param)) ScriptLog::Error(fmt::format("{}({}): {{{}}} expects a raw string", name, param_count + 1, cur_param.cmd)); p.Encode(output); + if (!std::holds_alternative(*p.param)) ScriptLog::Error(fmt::format("{}({}): {{{}}} expects a raw string", name, param_count + 1, cur_param.cmd)); break; } case StringParam::STRING: { ParamCheck &p = *get_next_arg(); + p.Encode(output); if (!std::holds_alternative(*p.param)){ ScriptLog::Error(fmt::format("{}({}): {{{}}} expects a GSText", name, param_count + 1, cur_param.cmd)); - p.Encode(output); break; } int count = 0; - fmt::format_to(output, ":"); ScriptTextRef &ref = std::get(*p.param); - ref->_GetEncodedText(output, count, args.subspan(idx)); - p.used = true; + ref->_GetEncodedText(output, count, args.subspan(idx), false); if (++count != cur_param.consumes) { ScriptLog::Error(fmt::format("{}({}): {{{}}} expects {} to be consumed, but {} consumes {}", name, param_count + 1, cur_param.cmd, cur_param.consumes - 1, GetGameStringName(ref->string), count - 1)); /* Fill missing params if needed. */ @@ -250,8 +254,8 @@ void ScriptText::_GetEncodedText(std::back_insert_iterator &output, default: for (int i = 0; i < cur_param.consumes; i++) { ParamCheck &p = *get_next_arg(); - if (!std::holds_alternative(*p.param)) ScriptLog::Error(fmt::format("{}({}): {{{}}} expects an integer", name, param_count + i + 1, cur_param.cmd)); p.Encode(output); + if (!std::holds_alternative(*p.param)) ScriptLog::Error(fmt::format("{}({}): {{{}}} expects an integer", name, param_count + i + 1, cur_param.cmd)); } } diff --git a/src/script/api/script_text.hpp b/src/script/api/script_text.hpp index e3c9ec6a2f..1b86f8f54b 100644 --- a/src/script/api/script_text.hpp +++ b/src/script/api/script_text.hpp @@ -165,8 +165,9 @@ private: * @param output The output to write the encoded text to. * @param param_count The number of parameters that are consumed by the string. * @param args The parameters to be consumed. + * @param first Whether it's the first call in the recursion. */ - void _GetEncodedText(std::back_insert_iterator &output, int ¶m_count, ParamSpan args); + void _GetEncodedText(std::back_insert_iterator &output, int ¶m_count, ParamSpan args, bool first); /** * Set a parameter, where the value is the first item on the stack. From 3a71f363937a6cdd65183aecd26638eb7316380b Mon Sep 17 00:00:00 2001 From: glx22 Date: Fri, 1 Mar 2024 19:10:35 +0100 Subject: [PATCH 074/695] Change: [Script] Match FormatString behaviour more closely --- src/script/api/script_text.cpp | 88 +++++++++++++++++++++------------- src/script/api/script_text.hpp | 5 +- 2 files changed, 57 insertions(+), 36 deletions(-) diff --git a/src/script/api/script_text.cpp b/src/script/api/script_text.cpp index 83869e1216..cff3d4dfd3 100644 --- a/src/script/api/script_text.cpp +++ b/src/script/api/script_text.cpp @@ -184,10 +184,19 @@ void ScriptText::_FillParamList(ParamList ¶ms, ScriptTextList &seen_texts) } seen_texts.pop_back(); + + /* Fill with dummy parameters to match FormatString() behaviour. */ + if (seen_texts.empty()) { + static Param dummy = 0; + int nb_extra = SCRIPT_TEXT_MAX_PARAMETERS - (int)params.size(); + for (int i = 0; i < nb_extra; i++) + params.emplace_back(-1, i, &dummy); + } } -void ScriptText::ParamCheck::Encode(std::back_insert_iterator &output) +void ScriptText::ParamCheck::Encode(std::back_insert_iterator &output, const char *cmd) { + if (this->cmd == nullptr) this->cmd = cmd; if (this->used) return; if (std::holds_alternative(*this->param)) fmt::format_to(output, ":\"{}\"", std::get(*this->param)); if (std::holds_alternative(*this->param)) fmt::format_to(output, ":{:X}", std::get(*this->param)); @@ -220,46 +229,57 @@ void ScriptText::_GetEncodedText(std::back_insert_iterator &output, auto skip_args = [&](size_t nb) { idx += nb; }; for (const StringParam &cur_param : params) { - switch (cur_param.type) { - case StringParam::UNUSED: - skip_args(cur_param.consumes); - break; + try { + switch (cur_param.type) { + case StringParam::UNUSED: + skip_args(cur_param.consumes); + break; - case StringParam::RAW_STRING: { - ParamCheck &p = *get_next_arg(); - p.Encode(output); - if (!std::holds_alternative(*p.param)) ScriptLog::Error(fmt::format("{}({}): {{{}}} expects a raw string", name, param_count + 1, cur_param.cmd)); - break; - } - - case StringParam::STRING: { - ParamCheck &p = *get_next_arg(); - p.Encode(output); - if (!std::holds_alternative(*p.param)){ - ScriptLog::Error(fmt::format("{}({}): {{{}}} expects a GSText", name, param_count + 1, cur_param.cmd)); + case StringParam::RAW_STRING: + { + ParamCheck &p = *get_next_arg(); + p.Encode(output, cur_param.cmd); + if (p.cmd != cur_param.cmd) throw 1; + if (!std::holds_alternative(*p.param)) ScriptLog::Error(fmt::format("{}({}): {{{}}} expects a raw string", name, param_count + 1, cur_param.cmd)); break; } - int count = 0; - ScriptTextRef &ref = std::get(*p.param); - ref->_GetEncodedText(output, count, args.subspan(idx), false); - if (++count != cur_param.consumes) { - ScriptLog::Error(fmt::format("{}({}): {{{}}} expects {} to be consumed, but {} consumes {}", name, param_count + 1, cur_param.cmd, cur_param.consumes - 1, GetGameStringName(ref->string), count - 1)); - /* Fill missing params if needed. */ - for (int i = count; i < cur_param.consumes; i++) fmt::format_to(output, ":0"); + + case StringParam::STRING: + { + ParamCheck &p = *get_next_arg(); + p.Encode(output, cur_param.cmd); + if (p.cmd != cur_param.cmd) throw 1; + if (!std::holds_alternative(*p.param)) { + ScriptLog::Error(fmt::format("{}({}): {{{}}} expects a GSText", name, param_count + 1, cur_param.cmd)); + param_count++; + continue; + } + int count = 0; + ScriptTextRef &ref = std::get(*p.param); + ref->_GetEncodedText(output, count, args.subspan(idx), false); + if (++count != cur_param.consumes) { + ScriptLog::Warning(fmt::format("{}({}): {{{}}} expects {} to be consumed, but {} consumes {}", name, param_count + 1, cur_param.cmd, cur_param.consumes - 1, GetGameStringName(ref->string), count - 1)); + /* Fill missing params if needed. */ + for (int i = count; i < cur_param.consumes; i++) fmt::format_to(output, ":0"); + } + skip_args(cur_param.consumes - 1); + break; } - skip_args(cur_param.consumes - 1); - break; + + default: + for (int i = 0; i < cur_param.consumes; i++) { + ParamCheck &p = *get_next_arg(); + p.Encode(output, i == 0 ? cur_param.cmd : nullptr); + if (i == 0 && p.cmd != cur_param.cmd) throw 1; + if (!std::holds_alternative(*p.param)) ScriptLog::Error(fmt::format("{}({}): {{{}}} expects an integer", name, param_count + i + 1, cur_param.cmd)); + } } - default: - for (int i = 0; i < cur_param.consumes; i++) { - ParamCheck &p = *get_next_arg(); - p.Encode(output); - if (!std::holds_alternative(*p.param)) ScriptLog::Error(fmt::format("{}({}): {{{}}} expects an integer", name, param_count + i + 1, cur_param.cmd)); - } + param_count += cur_param.consumes; + } catch (int nb) { + param_count += nb; + ScriptLog::Warning(fmt::format("{}({}): Invalid parameter", name, param_count)); } - - param_count += cur_param.consumes; } } diff --git a/src/script/api/script_text.hpp b/src/script/api/script_text.hpp index 1b86f8f54b..dc9f1c1513 100644 --- a/src/script/api/script_text.hpp +++ b/src/script/api/script_text.hpp @@ -137,10 +137,11 @@ private: int idx; Param *param; bool used; + const char *cmd; - ParamCheck(StringID owner, int idx, Param *param) : owner(owner), idx(idx), param(param), used(false) {} + ParamCheck(StringID owner, int idx, Param *param) : owner(owner), idx(idx), param(param), used(false), cmd(nullptr) {} - void Encode(std::back_insert_iterator &output); + void Encode(std::back_insert_iterator &output, const char *cmd); }; using ParamList = std::vector; From 6e0f58f70088021be2a3a911d0a04d8ab0ed7db1 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 9 Mar 2024 12:42:09 +0100 Subject: [PATCH 075/695] Codechange: [CI] use "cargo install --locked" to use pinned dependency versions (#12243) Normally "cargo install" will use the latest dependencies, but this causes an issue with "dump_syms". Use "--locked" makes sure we use the dependency versions as indicated by "dump_syms", instead of the latest version. --- .github/workflows/release-linux.yml | 2 +- .github/workflows/release-macos.yml | 2 +- .github/workflows/release-windows.yml | 2 +- docs/symbol_server.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release-linux.yml b/.github/workflows/release-linux.yml index d3e0ea776c..c5ce597f4c 100644 --- a/.github/workflows/release-linux.yml +++ b/.github/workflows/release-linux.yml @@ -124,7 +124,7 @@ jobs: ) echo "::group::Install breakpad dependencies" - cargo install dump_syms + cargo install --locked dump_syms echo "::endgroup::" - name: Install GCC problem matcher diff --git a/.github/workflows/release-macos.yml b/.github/workflows/release-macos.yml index 6e673f2d8b..d579f721f2 100644 --- a/.github/workflows/release-macos.yml +++ b/.github/workflows/release-macos.yml @@ -52,7 +52,7 @@ jobs: echo "::endgroup::" echo "::group::Install breakpad dependencies" - cargo install dump_syms + cargo install --locked dump_syms echo "::endgroup::" - name: Install GCC problem matcher diff --git a/.github/workflows/release-windows.yml b/.github/workflows/release-windows.yml index 5b5f6cd1d4..1d4beb2fed 100644 --- a/.github/workflows/release-windows.yml +++ b/.github/workflows/release-windows.yml @@ -61,7 +61,7 @@ jobs: echo "::endgroup::" echo "::group::Install breakpad dependencies" - cargo install dump_syms + cargo install --locked dump_syms echo "::endgroup::" - name: Install MSVC problem matcher diff --git a/docs/symbol_server.md b/docs/symbol_server.md index c1c522a1b6..82d29d04cf 100644 --- a/docs/symbol_server.md +++ b/docs/symbol_server.md @@ -19,7 +19,7 @@ Now simply open up the `crash.dmp`, and start debugging. The best tool to use is `minidump-stackwalk` as published in the Rust's cargo index: ```bash -cargo install minidump-stackwalk +cargo install --locked minidump-stackwalk ``` For how to install Rust, please see [here](https://doc.rust-lang.org/cargo/getting-started/installation.html). From ab315d0dc9f2e2ceed85b3f57a0bc23133fc833b Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Sat, 9 Mar 2024 08:28:05 -0500 Subject: [PATCH 076/695] Fix #12118: When adding an unbunching order, properly check for unsafe conditions (#12136) --- src/order_cmd.cpp | 21 ++++++++++++++------- src/order_gui.cpp | 26 +++++++++++++++++++++----- src/vehicle.cpp | 24 ++++++++++++++++++++++++ src/vehicle_base.h | 2 ++ 4 files changed, 61 insertions(+), 12 deletions(-) diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index ce09ce93b9..ccedb8e31d 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -819,7 +819,16 @@ CommandCost CmdInsertOrder(DoCommandFlag flags, VehicleID veh, VehicleOrderID se if (new_order.GetNonStopType() != ONSF_STOP_EVERYWHERE && !v->IsGroundVehicle()) return CMD_ERROR; if (new_order.GetDepotOrderType() & ~(ODTFB_PART_OF_ORDERS | ((new_order.GetDepotOrderType() & ODTFB_PART_OF_ORDERS) != 0 ? ODTFB_SERVICE : 0))) return CMD_ERROR; if (new_order.GetDepotActionType() & ~(ODATFB_HALT | ODATFB_NEAREST_DEPOT | ODATFB_UNBUNCH)) return CMD_ERROR; - if ((new_order.GetDepotOrderType() & ODTFB_SERVICE) && (new_order.GetDepotActionType() & ODATFB_HALT)) return CMD_ERROR; + + /* Vehicles cannot have a "service if needed" order that also has a depot action. */ + if ((new_order.GetDepotOrderType() & ODTFB_SERVICE) && (new_order.GetDepotActionType() & (ODATFB_HALT | ODATFB_UNBUNCH))) return CMD_ERROR; + + /* Check if we're allowed to have a new unbunching order. */ + if ((new_order.GetDepotActionType() & ODATFB_UNBUNCH)) { + if (v->HasFullLoadOrder()) return CommandCost(STR_ERROR_CAN_T_ADD_ORDER, STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD); + if (v->HasUnbunchingOrder()) return CommandCost(STR_ERROR_CAN_T_ADD_ORDER, STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED); + if (v->HasConditionalOrder()) return CommandCost(STR_ERROR_CAN_T_ADD_ORDER, STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL); + } break; } @@ -1304,12 +1313,10 @@ CommandCost CmdModifyOrder(DoCommandFlag flags, VehicleID veh, VehicleOrderID se if (data == DA_UNBUNCH) { /* Only one unbunching order is allowed in a vehicle's orders. If this order already has an unbunching action, no error is needed. */ if (v->HasUnbunchingOrder() && !(order->GetDepotActionType() & ODATFB_UNBUNCH)) return_cmd_error(STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED); - for (Order *o : v->Orders()) { - /* We don't allow unbunching if the vehicle has a conditional order. */ - if (o->IsType(OT_CONDITIONAL)) return_cmd_error(STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL); - /* We don't allow unbunching if the vehicle has a full load order. */ - if (o->IsType(OT_GOTO_STATION) && o->GetLoadType() & (OLFB_FULL_LOAD | OLF_FULL_LOAD_ANY)) return_cmd_error(STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD); - } + /* We don't allow unbunching if the vehicle has a conditional order. */ + if (v->HasConditionalOrder()) return_cmd_error(STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL); + /* We don't allow unbunching if the vehicle has a full load order. */ + if (v->HasFullLoadOrder()) return_cmd_error(STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD); } break; diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 8c8e16dfa9..02765ceece 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -399,16 +399,32 @@ static Order GetOrderCmdFromTile(const Vehicle *v, TileIndex tile) (_settings_client.gui.new_nonstop && v->IsGroundVehicle()) ? ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS : ONSF_STOP_EVERYWHERE); if (_ctrl_pressed) { - /* Don't allow a new unbunching order if we already have one. */ - if (v->HasUnbunchingOrder()) { + /* Check to see if we are allowed to make this an unbunching order. */ + bool failed = false; + if (v->HasFullLoadOrder()) { + /* We don't allow unbunching if the vehicle has a full load order. */ + ShowErrorMessage(STR_ERROR_CAN_T_INSERT_NEW_ORDER, STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD, WL_ERROR); + failed = true; + } else if (v->HasUnbunchingOrder()) { + /* Don't allow a new unbunching order if we already have one. */ ShowErrorMessage(STR_ERROR_CAN_T_INSERT_NEW_ORDER, STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED, WL_ERROR); - /* Return an empty order to bail out. */ + failed = true; + } else if (v->HasConditionalOrder()) { + /* We don't allow unbunching if the vehicle has a conditional order. */ + ShowErrorMessage(STR_ERROR_CAN_T_INSERT_NEW_ORDER, STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL, WL_ERROR); + failed = true; + } + + /* Return an empty order to bail out. */ + if (failed) { order.Free(); return order; - } else { - order.SetDepotActionType(ODATFB_UNBUNCH); } + + /* Now we are allowed to set the action type. */ + order.SetDepotActionType(ODATFB_UNBUNCH); } + return order; } diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 9ca49be6ad..2a03d75301 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -2426,6 +2426,30 @@ void Vehicle::HandleLoading(bool mode) this->IncrementImplicitOrderIndex(); } +/** + * Check if the current vehicle has a full load order. + * @return true Iff this vehicle has a full load order. + */ +bool Vehicle::HasFullLoadOrder() const +{ + for (Order *o : this->Orders()) { + if (o->IsType(OT_GOTO_STATION) && o->GetLoadType() & (OLFB_FULL_LOAD | OLF_FULL_LOAD_ANY)) return true; + } + return false; +} + +/** + * Check if the current vehicle has a conditional order. + * @return true Iff this vehicle has a conditional order. + */ +bool Vehicle::HasConditionalOrder() const +{ + for (Order *o : this->Orders()) { + if (o->IsType(OT_CONDITIONAL)) return true; + } + return false; +} + /** * Check if the current vehicle has an unbunching order. * @return true Iff this vehicle has an unbunching order. diff --git a/src/vehicle_base.h b/src/vehicle_base.h index 073a356c79..947e6f86a0 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -819,6 +819,8 @@ public: inline void SetServiceIntervalIsPercent(bool on) { SB(this->vehicle_flags, VF_SERVINT_IS_PERCENT, 1, on); } + bool HasFullLoadOrder() const; + bool HasConditionalOrder() const; bool HasUnbunchingOrder() const; void LeaveUnbunchingDepot(); bool IsWaitingForUnbunching() const; From 04ce1c08ae63abd4a394584cf4b254cde4bc0270 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 9 Mar 2024 15:01:18 +0100 Subject: [PATCH 077/695] Codechange: [CI] manually install vcpkg for all targets (#12241) From macos-14, vcpkg is no longer installed on the runner-image. It stands to reason that this will also roll out to new images for other OSes. To be pre-emptive about it, start using our own cloned vcpkg for all targets. --- .github/workflows/ci-build.yml | 23 +++++++++++++++++++---- .github/workflows/release-macos.yml | 9 +++++++-- .github/workflows/release-windows.yml | 9 +++++++-- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 2183044d93..964c6b3dee 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -116,6 +116,11 @@ jobs: core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite') + - name: Install vcpkg + run: | + git clone https://github.com/microsoft/vcpkg + ./vcpkg/bootstrap-vcpkg.sh -disableMetrics + - name: Install dependencies run: | echo "::group::Update apt" @@ -142,7 +147,7 @@ jobs: # We only use breakpad from vcpkg, as its CMake files # are a bit special. So the Ubuntu's variant doesn't work. - vcpkg install breakpad + ./vcpkg/vcpkg install breakpad echo "::endgroup::" env: @@ -172,7 +177,7 @@ jobs: cd build echo "::group::CMake" - cmake .. -DCMAKE_TOOLCHAIN_FILE=/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake ${{ matrix.extra-cmake-parameters }} + cmake .. -DCMAKE_TOOLCHAIN_FILE=${GITHUB_WORKSPACE}/vcpkg/scripts/buildsystems/vcpkg.cmake ${{ matrix.extra-cmake-parameters }} echo "::endgroup::" echo "::group::Build" @@ -219,6 +224,11 @@ jobs: core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite') + - name: Install vcpkg + run: | + git clone https://github.com/microsoft/vcpkg + ./vcpkg/bootstrap-vcpkg.sh -disableMetrics + - name: Install OpenGFX run: | mkdir -p ~/Documents/OpenTTD/baseset @@ -246,7 +256,7 @@ jobs: cmake .. \ -DCMAKE_OSX_ARCHITECTURES=${{ matrix.full_arch }} \ -DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-osx \ - -DCMAKE_TOOLCHAIN_FILE=/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake \ + -DCMAKE_TOOLCHAIN_FILE=${GITHUB_WORKSPACE}/vcpkg/scripts/buildsystems/vcpkg.cmake \ # EOF echo "::endgroup::" @@ -283,6 +293,11 @@ jobs: core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite') + - name: Install vcpkg + run: | + git clone https://github.com/microsoft/vcpkg + .\vcpkg\bootstrap-vcpkg.bat -disableMetrics + - name: Install OpenGFX shell: bash run: | @@ -319,7 +334,7 @@ jobs: cmake .. \ -GNinja \ -DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-windows-static \ - -DCMAKE_TOOLCHAIN_FILE="c:\vcpkg\scripts\buildsystems\vcpkg.cmake" \ + -DCMAKE_TOOLCHAIN_FILE="${GITHUB_WORKSPACE}\vcpkg\scripts\buildsystems\vcpkg.cmake" \ # EOF echo "::endgroup::" diff --git a/.github/workflows/release-macos.yml b/.github/workflows/release-macos.yml index d579f721f2..2f6aa8ebdf 100644 --- a/.github/workflows/release-macos.yml +++ b/.github/workflows/release-macos.yml @@ -40,6 +40,11 @@ jobs: core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite') + - name: Install vcpkg + run: | + git clone https://github.com/microsoft/vcpkg + ./vcpkg/bootstrap-vcpkg.sh -disableMetrics + - name: Install dependencies env: HOMEBREW_NO_AUTO_UPDATE: 1 @@ -94,7 +99,7 @@ jobs: cmake ${GITHUB_WORKSPACE} \ -DCMAKE_OSX_ARCHITECTURES=arm64 \ -DVCPKG_TARGET_TRIPLET=arm64-osx \ - -DCMAKE_TOOLCHAIN_FILE=/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake \ + -DCMAKE_TOOLCHAIN_FILE=${GITHUB_WORKSPACE}/vcpkg/scripts/buildsystems/vcpkg.cmake \ -DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DOPTION_SURVEY_KEY=${{ inputs.survey_key }} \ @@ -115,7 +120,7 @@ jobs: cmake ${GITHUB_WORKSPACE} \ -DCMAKE_OSX_ARCHITECTURES=x86_64 \ -DVCPKG_TARGET_TRIPLET=x64-osx \ - -DCMAKE_TOOLCHAIN_FILE=/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake \ + -DCMAKE_TOOLCHAIN_FILE=${GITHUB_WORKSPACE}/vcpkg/scripts/buildsystems/vcpkg.cmake \ -DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DOPTION_SURVEY_KEY=${{ inputs.survey_key }} \ diff --git a/.github/workflows/release-windows.yml b/.github/workflows/release-windows.yml index 1d4beb2fed..93dfce6498 100644 --- a/.github/workflows/release-windows.yml +++ b/.github/workflows/release-windows.yml @@ -53,6 +53,11 @@ jobs: core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite') + - name: Install vcpkg + run: | + git clone https://github.com/microsoft/vcpkg + .\vcpkg\bootstrap-vcpkg.bat -disableMetrics + - name: Install dependencies shell: bash run: | @@ -121,7 +126,7 @@ jobs: cmake ${GITHUB_WORKSPACE} \ -GNinja \ -DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-windows-static \ - -DCMAKE_TOOLCHAIN_FILE="c:\vcpkg\scripts\buildsystems\vcpkg.cmake" \ + -DCMAKE_TOOLCHAIN_FILE="${GITHUB_WORKSPACE}\vcpkg\scripts\buildsystems\vcpkg.cmake" \ -DOPTION_USE_NSIS=ON \ -DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ @@ -147,7 +152,7 @@ jobs: cmake ${GITHUB_WORKSPACE} \ -GNinja \ -DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-windows-static \ - -DCMAKE_TOOLCHAIN_FILE="c:\vcpkg\scripts\buildsystems\vcpkg.cmake" \ + -DCMAKE_TOOLCHAIN_FILE="${GITHUB_WORKSPACE}\vcpkg\scripts\buildsystems\vcpkg.cmake" \ -DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DOPTION_SURVEY_KEY=${{ inputs.survey_key }} \ From 32b0fb9f6ebe5f607550d4d35ce112b2e1c7442e Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Sat, 9 Mar 2024 09:38:52 -0500 Subject: [PATCH 078/695] Fix #12010: Use economy timer for vehicle stats minimum age, not calendar (#12142) --- src/aircraft_cmd.cpp | 1 + src/economy.cpp | 2 +- src/group_cmd.cpp | 4 ++-- src/roadveh_cmd.cpp | 1 + src/saveload/saveload.h | 3 ++- src/saveload/vehicle_sl.cpp | 8 ++++++++ src/ship_cmd.cpp | 2 ++ src/train_cmd.cpp | 2 ++ src/vehicle.cpp | 19 ++++++++++++++----- src/vehicle_base.h | 3 ++- src/vehicle_func.h | 4 +++- src/vehicle_gui.cpp | 2 +- src/vehicle_gui_base.h | 6 +++--- 13 files changed, 42 insertions(+), 15 deletions(-) diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 78260edb9b..14a7eceeda 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -456,6 +456,7 @@ void Aircraft::OnNewCalendarDay() void Aircraft::OnNewEconomyDay() { if (!this->IsNormalAircraft()) return; + EconomyAgeVehicle(this); if ((++this->day_counter & 7) == 0) DecreaseVehicleValue(this); diff --git a/src/economy.cpp b/src/economy.cpp index cd739cde88..27d43e1d63 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -215,7 +215,7 @@ int UpdateCompanyRatingAndValue(Company *c, bool update) if (v->owner != owner) continue; if (IsCompanyBuildableVehicleType(v->type) && v->IsPrimaryVehicle()) { if (v->profit_last_year > 0) num++; // For the vehicle score only count profitable vehicles - if (v->age > 730) { + if (v->economy_age > VEHICLE_PROFIT_MIN_AGE) { /* Find the vehicle with the lowest amount of profit */ if (min_profit_first || min_profit > v->profit_last_year) { min_profit = v->profit_last_year; diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index bc379e3212..e7a49dd570 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -142,7 +142,7 @@ uint16_t GroupStatistics::GetNumEngines(EngineID engine) const stats.num_vehicle += delta; stats.profit_last_year += v->GetDisplayProfitLastYear() * delta; - if (v->age > VEHICLE_PROFIT_MIN_AGE) { + if (v->economy_age > VEHICLE_PROFIT_MIN_AGE) { stats_all.num_vehicle_min_age += delta; stats_all.profit_last_year_min_age += v->GetDisplayProfitLastYear() * delta; stats.num_vehicle_min_age += delta; @@ -209,7 +209,7 @@ uint16_t GroupStatistics::GetNumEngines(EngineID engine) const for (const Vehicle *v : Vehicle::Iterate()) { if (v->IsPrimaryVehicle()) { GroupStatistics::AddProfitLastYear(v); - if (v->age > VEHICLE_PROFIT_MIN_AGE) GroupStatistics::VehicleReachedMinAge(v); + if (v->economy_age > VEHICLE_PROFIT_MIN_AGE) GroupStatistics::VehicleReachedMinAge(v); } } } diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 6aace6b3e9..6674425845 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -1728,6 +1728,7 @@ void RoadVehicle::OnNewCalendarDay() void RoadVehicle::OnNewEconomyDay() { if (!this->IsFrontEngine()) return; + EconomyAgeVehicle(this); if ((++this->day_counter & 7) == 0) DecreaseVehicleValue(this); if (this->blocked_ctr == 0) CheckVehicleBreakdown(this); diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 9b072bd6a5..d270d10827 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -376,7 +376,8 @@ enum SaveLoadVersion : uint16_t { SLV_MAX_LOAN_FOR_COMPANY, ///< 330 PR#11224 Separate max loan for each company. SLV_DEPOT_UNBUNCHING, ///< 331 PR#11945 Allow unbunching shared order vehicles at a depot. SLV_AI_LOCAL_CONFIG, ///< 332 PR#12003 Config of running AI is stored inside Company. - SLV_SCRIPT_RANDOMIZER, ///< 333 PR#12063 v14.0 Save script randomizers. + SLV_SCRIPT_RANDOMIZER, ///< 333 PR#12063 v14.0-RC1 Save script randomizers. + SLV_VEHICLE_ECONOMY_AGE, ///< 334 PR#12141 v14.0 Add vehicle age in economy year, for profit stats minimum age SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 38b602c50c..302af3c517 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -398,6 +398,13 @@ void AfterLoadVehicles(bool part_of_load) v->timetable_start = GetStartTickFromDate(v->timetable_start); } } + + if (IsSavegameVersionBefore(SLV_VEHICLE_ECONOMY_AGE)) { + /* Set vehicle economy age based on calendar age. */ + for (Vehicle *v : Vehicle::Iterate()) { + v->economy_age = v->age.base(); + } + } } CheckValidVehicles(); @@ -718,6 +725,7 @@ public: SLE_CONDVAR(Vehicle, age, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31), SLE_CONDVAR(Vehicle, age, SLE_INT32, SLV_31, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, economy_age, SLE_INT32, SLV_VEHICLE_ECONOMY_AGE, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, max_age, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31), SLE_CONDVAR(Vehicle, max_age, SLE_INT32, SLV_31, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, date_of_last_service, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31), diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index b9b6b8a4f0..b19520d954 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -266,6 +266,8 @@ void Ship::OnNewCalendarDay() /** Economy day handler. */ void Ship::OnNewEconomyDay() { + EconomyAgeVehicle(this); + if ((++this->day_counter & 7) == 0) { DecreaseVehicleValue(this); } diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 1189607161..7de169d526 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -4186,6 +4186,8 @@ void Train::OnNewCalendarDay() /** Economy day handler. */ void Train::OnNewEconomyDay() { + EconomyAgeVehicle(this); + if ((++this->day_counter & 7) == 0) DecreaseVehicleValue(this); if (this->IsFrontEngine()) { diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 2a03d75301..bdf76efa6c 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1418,16 +1418,25 @@ bool Vehicle::HandleBreakdown() } } +/** + * Update economy age of a vehicle. + * @param v Vehicle to update. + */ +void EconomyAgeVehicle(Vehicle *v) +{ + if (v->economy_age < EconomyTime::MAX_DATE) { + v->economy_age++; + if (v->IsPrimaryVehicle() && v->economy_age == VEHICLE_PROFIT_MIN_AGE + 1) GroupStatistics::VehicleReachedMinAge(v); + } +} + /** * Update age of a vehicle. * @param v Vehicle to update. */ void AgeVehicle(Vehicle *v) { - if (v->age < CalendarTime::MAX_DATE) { - v->age++; - if (v->IsPrimaryVehicle() && v->age == VEHICLE_PROFIT_MIN_AGE + 1) GroupStatistics::VehicleReachedMinAge(v); - } + if (v->age < CalendarTime::MAX_DATE) v->age++; if (!v->IsPrimaryVehicle() && (v->type != VEH_TRAIN || !Train::From(v)->IsEngine())) return; @@ -2990,7 +2999,7 @@ static IntervalTimer _economy_vehicles_yearly({TimerGameEconom if (v->IsPrimaryVehicle()) { /* show warning if vehicle is not generating enough income last 2 years (corresponds to a red icon in the vehicle list) */ Money profit = v->GetDisplayProfitThisYear(); - if (v->age >= 730 && profit < 0) { + if (v->economy_age >= VEHICLE_PROFIT_MIN_AGE && profit < 0) { if (_settings_client.gui.vehicle_income_warn && v->owner == _local_company) { SetDParam(0, v->index); SetDParam(1, profit); diff --git a/src/vehicle_base.h b/src/vehicle_base.h index 947e6f86a0..8ffd0701bd 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -285,7 +285,8 @@ public: /* Related to age and service time */ TimerGameCalendar::Year build_year; ///< Year the vehicle has been built. - TimerGameCalendar::Date age; ///< Age in days + TimerGameCalendar::Date age; ///< Age in calendar days. + TimerGameEconomy::Date economy_age; ///< Age in economy days. TimerGameCalendar::Date max_age; ///< Maximum age TimerGameEconomy::Date date_of_last_service; ///< Last economy date the vehicle had a service at a depot. TimerGameCalendar::Date date_of_last_service_newgrf; ///< Last calendar date the vehicle had a service at a depot, unchanged by the date cheat to protect against unsafe NewGRF behavior. diff --git a/src/vehicle_func.h b/src/vehicle_func.h index e426391b7d..add2d48e16 100644 --- a/src/vehicle_func.h +++ b/src/vehicle_func.h @@ -12,6 +12,7 @@ #include "gfx_type.h" #include "direction_type.h" +#include "timer/timer_game_economy.h" #include "command_type.h" #include "vehicle_type.h" #include "engine_type.h" @@ -24,7 +25,7 @@ #define IS_CUSTOM_FIRSTHEAD_SPRITE(x) (x == 0xFD) #define IS_CUSTOM_SECONDHEAD_SPRITE(x) (x == 0xFE) -static const int VEHICLE_PROFIT_MIN_AGE = CalendarTime::DAYS_IN_YEAR * 2; ///< Only vehicles older than this have a meaningful profit. +static const TimerGameEconomy::Date VEHICLE_PROFIT_MIN_AGE = CalendarTime::DAYS_IN_YEAR * 2; ///< Only vehicles older than this have a meaningful profit. static const Money VEHICLE_PROFIT_THRESHOLD = 10000; ///< Threshold for a vehicle to be considered making good profit. /** @@ -61,6 +62,7 @@ CommandCost TunnelBridgeIsFree(TileIndex tile, TileIndex endtile, const Vehicle void DecreaseVehicleValue(Vehicle *v); void CheckVehicleBreakdown(Vehicle *v); +void EconomyAgeVehicle(Vehicle *v); void AgeVehicle(Vehicle *v); void RunVehicleCalendarDayProc(); void VehicleEnteredDepotThisTick(Vehicle *v); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 7f8a28fa35..7c12256061 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -486,7 +486,7 @@ void DepotSortList(VehicleList *list) } /** draw the vehicle profit button in the vehicle list window. */ -static void DrawVehicleProfitButton(TimerGameCalendar::Date age, Money display_profit_last_year, uint num_vehicles, int x, int y) +static void DrawVehicleProfitButton(TimerGameEconomy::Date age, Money display_profit_last_year, uint num_vehicles, int x, int y) { SpriteID spr; diff --git a/src/vehicle_gui_base.h b/src/vehicle_gui_base.h index 6eac9aa0d3..9815d01529 100644 --- a/src/vehicle_gui_base.h +++ b/src/vehicle_gui_base.h @@ -53,12 +53,12 @@ struct GUIVehicleGroup { }); } - TimerGameCalendar::Date GetOldestVehicleAge() const + TimerGameEconomy::Date GetOldestVehicleAge() const { const Vehicle *oldest = *std::max_element(this->vehicles_begin, this->vehicles_end, [](const Vehicle *v_a, const Vehicle *v_b) { - return v_a->age < v_b->age; + return v_a->economy_age < v_b->economy_age; }); - return oldest->age; + return oldest->economy_age; } }; From ebd258b404e96da17efb64370bd1e23b987a81ea Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 9 Mar 2024 15:41:34 +0100 Subject: [PATCH 079/695] Change: [CI] switch MacOS to the macos-14 runner (#12237) This runner contains a newer XCode, with better C++20 support. --- .github/workflows/ci-build.yml | 2 +- .github/workflows/release-macos.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 964c6b3dee..5d5304b76d 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -208,7 +208,7 @@ jobs: name: Mac OS (${{ matrix.arch }}) - runs-on: macos-latest + runs-on: macos-14 env: MACOSX_DEPLOYMENT_TARGET: 10.13 diff --git a/.github/workflows/release-macos.yml b/.github/workflows/release-macos.yml index 2f6aa8ebdf..38170e1a6a 100644 --- a/.github/workflows/release-macos.yml +++ b/.github/workflows/release-macos.yml @@ -12,7 +12,7 @@ jobs: macos: name: MacOS - runs-on: macos-latest + runs-on: macos-14 env: MACOSX_DEPLOYMENT_TARGET: 10.13 From e0e0d5f8fb7e92e5a3dfc766c3aab14a293a74b6 Mon Sep 17 00:00:00 2001 From: rubidium42 Date: Sat, 9 Mar 2024 13:49:14 +0100 Subject: [PATCH 080/695] Revert #11606: Don't auto-build past tunnelbridge ends This reverts commit 59f6c199bf6546369640eb3f71f1a53525204f45. --- src/rail_cmd.cpp | 34 ++++++++-------------- src/road_cmd.cpp | 76 ++++++++++++++++++++++-------------------------- 2 files changed, 47 insertions(+), 63 deletions(-) diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index d03d8f830b..21480eb1af 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -886,32 +886,22 @@ static CommandCost CmdRailTrackHelper(DoCommandFlag flags, TileIndex tile, TileI if (ret.Failed()) return ret; bool had_success = false; - bool under_tunnelbridge = false; CommandCost last_error = CMD_ERROR; for (;;) { - /* Don't try to place rail between tunnelbridge ends */ - if (IsTileType(tile, MP_TUNNELBRIDGE)) { - under_tunnelbridge = !under_tunnelbridge; - } else if (!under_tunnelbridge) { - if (remove) { - ret = Command::Do(flags, tile, TrackdirToTrack(trackdir)); - } else { - ret = Command::Do(flags, tile, railtype, TrackdirToTrack(trackdir), auto_remove_signals); + ret = remove ? Command::Do(flags, tile, TrackdirToTrack(trackdir)) : Command::Do(flags, tile, railtype, TrackdirToTrack(trackdir), auto_remove_signals); + + if (ret.Failed()) { + last_error = ret; + if (last_error.GetErrorMessage() != STR_ERROR_ALREADY_BUILT && !remove) { + if (fail_on_obstacle) return last_error; + if (had_success) break; // Keep going if we haven't constructed any rail yet, skipping the start of the drag } - if (ret.Failed()) { - last_error = ret; - if (last_error.GetErrorMessage() != STR_ERROR_ALREADY_BUILT && !remove) { - if (fail_on_obstacle) return last_error; - if (had_success) break; // Keep going if we haven't constructed any rail yet, skipping the start of the drag - } - - /* Ownership errors are more important. */ - if (last_error.GetErrorMessage() == STR_ERROR_OWNED_BY && remove) break; - } else { - had_success = true; - total_cost.AddCost(ret); - } + /* Ownership errors are more important. */ + if (last_error.GetErrorMessage() == STR_ERROR_OWNED_BY && remove) break; + } else { + had_success = true; + total_cost.AddCost(ret); } if (tile == end_tile) break; diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index c286ff178b..3144fa1c47 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -1007,55 +1007,49 @@ CommandCost CmdBuildLongRoad(DoCommandFlag flags, TileIndex end_tile, TileIndex bool had_bridge = false; bool had_tunnel = false; bool had_success = false; - bool under_tunnelbridge = false; /* Start tile is the first tile clicked by the user. */ for (;;) { - /* Don't try to place road between tunnelbridge ends */ - if (IsTileType(tile, MP_TUNNELBRIDGE)) { - under_tunnelbridge = !under_tunnelbridge; - } else if (!under_tunnelbridge) { - RoadBits bits = AxisToRoadBits(axis); + RoadBits bits = AxisToRoadBits(axis); - /* Determine which road parts should be built. */ - if (!is_ai && start_tile != end_tile) { - /* Only build the first and last roadbit if they can connect to something. */ - if (tile == end_tile && !CanConnectToRoad(tile, rt, dir)) { - bits = DiagDirToRoadBits(ReverseDiagDir(dir)); - } else if (tile == start_tile && !CanConnectToRoad(tile, rt, ReverseDiagDir(dir))) { - bits = DiagDirToRoadBits(dir); - } - } else { - /* Road parts only have to be built at the start tile or at the end tile. */ - if (tile == end_tile && !end_half) bits &= DiagDirToRoadBits(ReverseDiagDir(dir)); - if (tile == start_tile && start_half) bits &= DiagDirToRoadBits(dir); + /* Determine which road parts should be built. */ + if (!is_ai && start_tile != end_tile) { + /* Only build the first and last roadbit if they can connect to something. */ + if (tile == end_tile && !CanConnectToRoad(tile, rt, dir)) { + bits = DiagDirToRoadBits(ReverseDiagDir(dir)); + } else if (tile == start_tile && !CanConnectToRoad(tile, rt, ReverseDiagDir(dir))) { + bits = DiagDirToRoadBits(dir); } + } else { + /* Road parts only have to be built at the start tile or at the end tile. */ + if (tile == end_tile && !end_half) bits &= DiagDirToRoadBits(ReverseDiagDir(dir)); + if (tile == start_tile && start_half) bits &= DiagDirToRoadBits(dir); + } - CommandCost ret = Command::Do(flags, tile, bits, rt, drd, 0); - if (ret.Failed()) { - last_error = ret; - if (last_error.GetErrorMessage() != STR_ERROR_ALREADY_BUILT) { - if (is_ai) return last_error; - if (had_success) break; // Keep going if we haven't constructed any road yet, skipping the start of the drag + CommandCost ret = Command::Do(flags, tile, bits, rt, drd, 0); + if (ret.Failed()) { + last_error = ret; + if (last_error.GetErrorMessage() != STR_ERROR_ALREADY_BUILT) { + if (is_ai) return last_error; + if (had_success) break; // Keep going if we haven't constructed any road yet, skipping the start of the drag + } + } else { + had_success = true; + /* Only pay for the upgrade on one side of the bridges and tunnels */ + if (IsTileType(tile, MP_TUNNELBRIDGE)) { + if (IsBridge(tile)) { + if (!had_bridge || GetTunnelBridgeDirection(tile) == dir) { + cost.AddCost(ret); + } + had_bridge = true; + } else { // IsTunnel(tile) + if (!had_tunnel || GetTunnelBridgeDirection(tile) == dir) { + cost.AddCost(ret); + } + had_tunnel = true; } } else { - had_success = true; - /* Only pay for the upgrade on one side of the bridges and tunnels */ - if (IsTileType(tile, MP_TUNNELBRIDGE)) { - if (IsBridge(tile)) { - if (!had_bridge || GetTunnelBridgeDirection(tile) == dir) { - cost.AddCost(ret); - } - had_bridge = true; - } else { // IsTunnel(tile) - if (!had_tunnel || GetTunnelBridgeDirection(tile) == dir) { - cost.AddCost(ret); - } - had_tunnel = true; - } - } else { - cost.AddCost(ret); - } + cost.AddCost(ret); } } From 82430a1086b92341ec914f3bd6a260ab74c8b3c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Sat, 9 Mar 2024 17:33:44 +0100 Subject: [PATCH 081/695] Fix ab315d0: Don't show "insert order" errors in the console (#12245) --- src/order_gui.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 02765ceece..9a8461370d 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -403,15 +403,15 @@ static Order GetOrderCmdFromTile(const Vehicle *v, TileIndex tile) bool failed = false; if (v->HasFullLoadOrder()) { /* We don't allow unbunching if the vehicle has a full load order. */ - ShowErrorMessage(STR_ERROR_CAN_T_INSERT_NEW_ORDER, STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD, WL_ERROR); + ShowErrorMessage(STR_ERROR_CAN_T_INSERT_NEW_ORDER, STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD, WL_INFO); failed = true; } else if (v->HasUnbunchingOrder()) { /* Don't allow a new unbunching order if we already have one. */ - ShowErrorMessage(STR_ERROR_CAN_T_INSERT_NEW_ORDER, STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED, WL_ERROR); + ShowErrorMessage(STR_ERROR_CAN_T_INSERT_NEW_ORDER, STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED, WL_INFO); failed = true; } else if (v->HasConditionalOrder()) { /* We don't allow unbunching if the vehicle has a conditional order. */ - ShowErrorMessage(STR_ERROR_CAN_T_INSERT_NEW_ORDER, STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL, WL_ERROR); + ShowErrorMessage(STR_ERROR_CAN_T_INSERT_NEW_ORDER, STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL, WL_INFO); failed = true; } From de8a840db55a6768162c59ebce680d6ef7bfa641 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 9 Mar 2024 17:01:39 +0000 Subject: [PATCH 082/695] Codefix: Fully initialise `MidiFile::DataBlock` to avoid gcc warning. (#12240) --- src/music/midifile.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/music/midifile.hpp b/src/music/midifile.hpp index c66094315e..430d95bc08 100644 --- a/src/music/midifile.hpp +++ b/src/music/midifile.hpp @@ -17,8 +17,8 @@ struct MusicSongInfo; struct MidiFile { struct DataBlock { - uint32_t ticktime; ///< tick number since start of file this block should be triggered at - uint32_t realtime; ///< real-time (microseconds) since start of file this block should be triggered at + uint32_t ticktime; ///< tick number since start of file this block should be triggered at + uint32_t realtime = 0; ///< real-time (microseconds) since start of file this block should be triggered at std::vector data; ///< raw midi data contained in block DataBlock(uint32_t _ticktime = 0) : ticktime(_ticktime) { } }; From 55a328c586b69bc4e6b042547dabc2d6a8ad295b Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 9 Mar 2024 17:13:17 +0000 Subject: [PATCH 083/695] Codechange: Replace type-punning with `std::bit_cast` in squirrel. (#12224) --- cmake/CompileFlags.cmake | 6 ------ src/3rdparty/squirrel/squirrel/sqcompiler.cpp | 5 ++--- .../squirrel/squirrel/sqfuncstate.cpp | 19 ++++++++++--------- src/3rdparty/squirrel/squirrel/sqvm.cpp | 8 ++++---- 4 files changed, 16 insertions(+), 22 deletions(-) diff --git a/cmake/CompileFlags.cmake b/cmake/CompileFlags.cmake index a85a915c3b..8da4be8bab 100644 --- a/cmake/CompileFlags.cmake +++ b/cmake/CompileFlags.cmake @@ -74,12 +74,6 @@ macro(compile_flags) # We use 'ABCD' multichar for SaveLoad chunks identifiers -Wno-multichar - - # Compilers complains about that we break strict-aliasing. - # On most places we don't see how to fix it, and it doesn't - # break anything. So disable strict-aliasing to make the - # compiler all happy. - -fno-strict-aliasing ) # Ninja processes the output so the output from the compiler diff --git a/src/3rdparty/squirrel/squirrel/sqcompiler.cpp b/src/3rdparty/squirrel/squirrel/sqcompiler.cpp index 6f67796839..560edfc66b 100644 --- a/src/3rdparty/squirrel/squirrel/sqcompiler.cpp +++ b/src/3rdparty/squirrel/squirrel/sqcompiler.cpp @@ -650,8 +650,7 @@ public: _fs->AddInstruction(_OP_LOADINT, _exst._deref,_integer(constval)); } else if(ctype == OT_FLOAT && sizeof(SQFloat) == sizeof(SQInt32)) { - SQFloat f = _float(constval); - _fs->AddInstruction(_OP_LOADFLOAT, _exst._deref,*((SQInt32 *)&f)); + _fs->AddInstruction(_OP_LOADFLOAT, _exst._deref, std::bit_cast(_float(constval))); } else { _fs->AddInstruction(_OP_LOAD, _exst._deref, _fs->GetConstant(constval)); @@ -697,7 +696,7 @@ public: break; case TK_FLOAT: if(sizeof(SQFloat) == sizeof(SQInt32)) { - _fs->AddInstruction(_OP_LOADFLOAT, _fs->PushTarget(),*((SQInt32 *)&_lex._fvalue)); + _fs->AddInstruction(_OP_LOADFLOAT, _fs->PushTarget(), std::bit_cast(_lex._fvalue)); } else { _fs->AddInstruction(_OP_LOAD, _fs->PushTarget(), _fs->GetNumericConstant(_lex._fvalue)); diff --git a/src/3rdparty/squirrel/squirrel/sqfuncstate.cpp b/src/3rdparty/squirrel/squirrel/sqfuncstate.cpp index e6e64ba81a..54744292a9 100644 --- a/src/3rdparty/squirrel/squirrel/sqfuncstate.cpp +++ b/src/3rdparty/squirrel/squirrel/sqfuncstate.cpp @@ -199,7 +199,7 @@ void SQFuncState::Dump(SQFunctionProto *func) } } else if(inst.op==_OP_LOADFLOAT) { - printf("[%03d] %15s %d %f %d %d\n",n,g_InstrDesc[inst.op].name,inst._arg0,*((SQFloat*)&inst._arg1),inst._arg2,inst._arg3); + printf("[%03d] %15s %d %f %d %d\n",n,g_InstrDesc[inst.op].name,inst._arg0,std::bit_cast(inst._arg1),inst._arg2,inst._arg3); } else if(inst.op==_OP_ARITH){ printf("[%03d] %15s %d %d %d %c\n",n,g_InstrDesc[inst.op].name,inst._arg0,inst._arg1,inst._arg2,inst._arg3); @@ -242,19 +242,20 @@ SQInteger SQFuncState::GetConstant(const SQObject &cons) void SQFuncState::SetIntructionParams(SQInteger pos,SQInteger arg0,SQInteger arg1,SQInteger arg2,SQInteger arg3) { - _instructions[pos]._arg0=(unsigned char)*((SQUnsignedInteger *)&arg0); - _instructions[pos]._arg1=(SQInt32)*((SQUnsignedInteger *)&arg1); - _instructions[pos]._arg2=(unsigned char)*((SQUnsignedInteger *)&arg2); - _instructions[pos]._arg3=(unsigned char)*((SQUnsignedInteger *)&arg3); + _instructions[pos]._arg0 = (unsigned char)std::bit_cast(arg0); + _instructions[pos]._arg1 = (SQInt32)std::bit_cast(arg1); + _instructions[pos]._arg2 = (unsigned char)std::bit_cast(arg2); + _instructions[pos]._arg3 = (unsigned char)std::bit_cast(arg3); } void SQFuncState::SetIntructionParam(SQInteger pos,SQInteger arg,SQInteger val) { switch(arg){ - case 0:_instructions[pos]._arg0=(unsigned char)*((SQUnsignedInteger *)&val);break; - case 1:case 4:_instructions[pos]._arg1=(SQInt32)*((SQUnsignedInteger *)&val);break; - case 2:_instructions[pos]._arg2=(unsigned char)*((SQUnsignedInteger *)&val);break; - case 3:_instructions[pos]._arg3=(unsigned char)*((SQUnsignedInteger *)&val);break; + case 0: _instructions[pos]._arg0 = (unsigned char)std::bit_cast(val); break; + case 1: + case 4: _instructions[pos]._arg1 = (SQInt32)std::bit_cast(val); break; + case 2: _instructions[pos]._arg2 = (unsigned char)std::bit_cast(val); break; + case 3: _instructions[pos]._arg3 = (unsigned char)std::bit_cast(val); break; }; } diff --git a/src/3rdparty/squirrel/squirrel/sqvm.cpp b/src/3rdparty/squirrel/squirrel/sqvm.cpp index 02dbc1625d..52a4dfe85c 100644 --- a/src/3rdparty/squirrel/squirrel/sqvm.cpp +++ b/src/3rdparty/squirrel/squirrel/sqvm.cpp @@ -51,7 +51,7 @@ bool SQVM::BW_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,con case BW_XOR: res = i1 ^ i2; break; case BW_SHIFTL: res = i1 << i2; break; case BW_SHIFTR: res = i1 >> i2; break; - case BW_USHIFTR:res = (SQInteger)(*((SQUnsignedInteger*)&i1) >> i2); break; + case BW_USHIFTR:res = (SQInteger)(std::bit_cast(i1) >> i2); break; default: { Raise_Error("internal vm error bitwise op failed"); return false; } } } @@ -472,10 +472,10 @@ bool SQVM::DerefInc(SQInteger op,SQObjectPtr &target, SQObjectPtr &self, SQObjec #define arg0 (_i_._arg0) #define arg1 (_i_._arg1) -#define sarg1 (*(const_cast(&_i_._arg1))) +#define sarg1 (std::bit_cast(_i_._arg1)) #define arg2 (_i_._arg2) #define arg3 (_i_._arg3) -#define sarg3 ((SQInteger)*((const signed char *)&_i_._arg3)) +#define sarg3 ((SQInteger)std::bit_cast(_i_._arg3)) SQRESULT SQVM::Suspend() { @@ -764,7 +764,7 @@ exception_restore: continue; case _OP_LOAD: TARGET = ci->_literals[arg1]; continue; case _OP_LOADINT: TARGET = (SQInteger)arg1; continue; - case _OP_LOADFLOAT: TARGET = *((const SQFloat *)&arg1); continue; + case _OP_LOADFLOAT: TARGET = std::bit_cast(arg1); continue; case _OP_DLOAD: TARGET = ci->_literals[arg1]; STK(arg2) = ci->_literals[arg3];continue; case _OP_TAILCALL: temp_reg = STK(arg1); From 738624ded405ca1103df1c0468d71e7eb17374ca Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 10 Mar 2024 04:40:37 +0000 Subject: [PATCH 084/695] Update: Translations from eints english (au): 1 change by krysclarke norwegian (bokmal): 545 changes by eriksorngard chinese (traditional): 75 changes by wpi3 galician: 24 changes by pvillaverde chinese (simplified): 1 change by WenSimEHRP russian: 1 change by Ln-Wolf finnish: 4 changes by hpiirai ukrainian: 16 changes by StepanIvasyn catalan: 1 change by J0anJosep danish: 1 change by bscargo french: 3 changes by ottdfevr portuguese: 1 change by azulcosta esperanto: 203 changes by legoscia portuguese (brazilian): 21 changes by pasantoro polish: 1 change by pAter-exe --- src/lang/brazilian_portuguese.txt | 41 +- src/lang/catalan.txt | 1 + src/lang/danish.txt | 1 + src/lang/english_AU.txt | 1 + src/lang/esperanto.txt | 275 ++++++++---- src/lang/finnish.txt | 5 +- src/lang/french.txt | 3 + src/lang/galician.txt | 39 +- src/lang/norwegian_bokmal.txt | 679 ++++++++++++++++++++++++------ src/lang/polish.txt | 1 + src/lang/portuguese.txt | 1 + src/lang/russian.txt | 1 + src/lang/serbian.txt | 2 +- src/lang/simplified_chinese.txt | 1 + src/lang/traditional_chinese.txt | 84 +++- src/lang/ukrainian.txt | 18 +- 16 files changed, 901 insertions(+), 252 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 4e27f5c41d..626a7389bd 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1012,6 +1012,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Rúpia Indiana STR_GAME_OPTIONS_CURRENCY_IDR :Rupia da Indonésia STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit da Malásia STR_GAME_OPTIONS_CURRENCY_LVL :Lats da Letônia +STR_GAME_OPTIONS_CURRENCY_PTE :Escudo Português STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Salvar automaticamente STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Escolher o intervalo entre jogos salvos automaticamente @@ -1250,8 +1251,8 @@ STR_CONFIG_SETTING_TYPE_HIDES :{BLACK}Mostrar STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Mostrar todos os resultados da pesquisa por configuração{}{SILVER}Categoria {BLACK}para {WHITE}{STRING} {BLACK}e {SILVER}Tipo {BLACK}para {WHITE}Todos os tipos de configuração ###length 3 -STR_CONFIG_SETTING_OFF :Desligado -STR_CONFIG_SETTING_ON :Ligado +STR_CONFIG_SETTING_OFF :Desativado +STR_CONFIG_SETTING_ON :Ativado STR_CONFIG_SETTING_DISABLED :Desativado ###length 3 @@ -1529,7 +1530,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Duração da me STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duração da visualização de mensagens de erro em uma janela vermelha. Algumas mensagens de erro (crítico) não são fechadas automaticamente após este tempo, mas precisam ser fechadas manualmente STR_CONFIG_SETTING_HOVER_DELAY :Mostrar textos de ajuda: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Atraso após o qual os textos de ajuda são mostrados quando o cursor ficar sobre algum elemento da interface. Alternativamente, os textos de ajuda podem ser mostrados com o botão direito do mouse quando este valor está definido como 0 +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tempo que o cursor deve ficar sobre algum elemento da interface para que os textos de ajuda sejam mostrados. Alternativamente, os textos de ajuda podem ser mostrados com o botão direito do mouse quando este valor está definido como 0 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Manter o cursor por {COMMA} milissegundo{P 0 "" s} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Botão direito @@ -1542,7 +1543,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Espessura da li STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostrar o nome do NewGRF na janela de comprar veículos: {STRING} STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Adiciona uma linha na janela de aquisição de veículos, mostrando a qual NewGRF pertence o veículo selecionado. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as cargas que os veículos podem transportar nas janelas de listagem {STRING} +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as cargas que os veículos podem transportar nas janelas de listagem: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Se ativado, a carga transportável pelo veículo aparecerá acima dele nas listas de veículos STR_CONFIG_SETTING_LANDSCAPE :Clima: {STRING} @@ -1646,13 +1647,13 @@ STR_CONFIG_SETTING_SCROLLMODE_RMB :Mover mapa com STR_CONFIG_SETTING_SCROLLMODE_LMB :Mover mapa com Botão Esquerdo Mouse STR_CONFIG_SETTING_SMOOTH_SCROLLING :Suavizar deslocamento da visualização: {STRING} -STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla como a visualização principal se move para uma localização específica ao clicar no minimapa ou quando é dado um comando para ir até um objeto específico no mapa. Se ativado, a visualização se move suavemente, se desativado a visualização salta diretamente para o ponto escolhido +STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla como a visualização principal se move para uma localização específica ao clicar no minimapa ou quando é dado um comando para ir até um objeto específico no mapa. Se ativado, a visualização se move suavemente. Se desativado, a visualização salta diretamente para o destino escolhido STR_CONFIG_SETTING_MEASURE_TOOLTIP :Mostrar medidas quando usar as ferramentas de construção: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Mostrar distâncias em quadrados e diferenças de altura quando Clicar+Arrastar nas ações de construção STR_CONFIG_SETTING_LIVERIES :Mostrar cores específicas do tipo de veículo: {STRING} -STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Controla a utilização de cores específicas, por tipo de veículo, para os veículos(em vez de cores por empresa) +STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Controla a utilização de cores específicas, por tipo de veículo, para os veículos (em vez de cores por empresa) ###length 3 STR_CONFIG_SETTING_LIVERIES_NONE :Nenhuma STR_CONFIG_SETTING_LIVERIES_OWN :Própria empresa @@ -1694,7 +1695,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+Clique STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Desligado STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Fechar janela com botão direito do mouse: {STRING} -STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Fecha uma janela ao clicar com o botão direito do mouse nela. Desativa os textos de ajuda (dicas) com o botão direito! +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Fechar uma janela ao clicar com o botão direito do mouse sobre ela. Desativa os textos de ajuda (dicas) com o botão direito! ###length 3 STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_NO :Não STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES :Sim @@ -1760,21 +1761,21 @@ STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% da veloc STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Sem limite (o máximo que o seu computador suporta) STR_CONFIG_SETTING_SOUND_TICKER :Notícias: {STRING} -STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Reproduzir efeito sonoro para mensagens com notícias resumidas +STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Reproduzir som para mensagens com notícias resumidas STR_CONFIG_SETTING_SOUND_NEWS :Jornal: {STRING} -STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Reproduzir efeito sonoro ao mostrar um jornal +STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Reproduzir som ao mostrar um jornal ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR :Fim do ano: {STRING} STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Fim do período: {STRING} ###length 2 -STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Reproduzir um som no fim do ano e apresentar o desempenho da empresa neste ano em comparação com o desempenho no ano anterior -STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Reproduzir um som no fim do período e apresentar o desempenho da empresa neste período em comparação com o desempenho no período anterior +STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Reproduzir som no fim do ano e apresentar o desempenho da empresa neste ano comparado com o desempenho no ano anterior +STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Reproduzir som no fim do período e apresentar o desempenho da empresa neste período comparado com o desempenho no período anterior STR_CONFIG_SETTING_SOUND_CONFIRM :Construção: {STRING} -STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Reproduzir efeito sonoro para construções ou outras ações bem sucedidas +STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Reproduzir som para construções ou outras ações bem sucedidas STR_CONFIG_SETTING_SOUND_CLICK :Cliques de botões: {STRING} STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :Reproduzir um bip quando botões são clicados @@ -1930,7 +1931,7 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Usar automatica STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Definir o ano em que os sinais elétricos serão usados nas ferrovias. Antes deste ano, sinais não-elétricos serão usados (eles têm a mesma funcionalidade, mas aparência diferente) STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Alternar entre tipos de sinais: {STRING} -STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Escolher quais os tipos de sinal serão alternados quando usar Ctrl+Clique em um sinal construído com a ferramenta de sinais +STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Escolher quais os tipos de sinais serão alternados quando usar Ctrl+Clique em um sinal construído com a ferramenta de sinais ###length 2 STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :Somente grupo atual STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Todos visíveis @@ -1989,14 +1990,14 @@ STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} pixel{P ###setting-zero-is-special STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Desativado STR_CONFIG_SETTING_SOFT_LIMIT :Número máximo de janelas não fixadas: {STRING} -STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Número de janelas não fixadas abertas antes que as janelas antigas sejam automaticamente fechadas, liberando espaço para novas janelas +STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Número de janelas, não fixadas, abertas antes que as janelas antigas sejam automaticamente fechadas, liberando espaço para novas janelas STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} ###setting-zero-is-special STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :desativado STR_CONFIG_SETTING_ZOOM_MIN :Nível máximo de ampliação: {STRING} STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Nível máximo de ampliação para visualizações. Níveis de ampliação muito grandes aumentam os requisitos de memória -STR_CONFIG_SETTING_ZOOM_MAX :Nível máximo de redução da visualização: {STRING} +STR_CONFIG_SETTING_ZOOM_MAX :Nível máximo de redução: {STRING} STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Nível máximo de redução para visualizações. Níveis de redução muito grandes podem causar atrasos quando utilizados ###length 6 STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x @@ -2656,10 +2657,10 @@ STR_CONTENT_NAME_CAPTION_TOOLTIP :{BLACK}Nome do STR_CONTENT_MATRIX_TOOLTIP :{BLACK}Clique em uma linha para ver os detalhes{}Clique na caixa de seleção para marcar e fazer o download STR_CONTENT_SELECT_ALL_CAPTION :{BLACK}Selecionar tudo STR_CONTENT_SELECT_ALL_CAPTION_TOOLTIP :{BLACK}Marcar todo o conteúdo para ser baixado -STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Selecionar upgrades -STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Marcar para baixar todo o conteúdo que seja atualização para o conteúdo existente +STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Selecionar atualizações +STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Marcar para baixar todo conteúdo que seja atualização para um conteúdo existente STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}Desmarcar tudo -STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Marcar todo o conteúdo para não ser baixado +STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Desmarcar todo o conteúdo selecionado STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Procurar em sites externos STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Procurar conteúdo, que não está disponível no servidor de conteúdo do OpenTTD, em sites não associados ao OpenTTD STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Você está saindo do OpenTTD! @@ -4863,8 +4864,8 @@ STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licença STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Ver a licença para este conteúdo ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}Leia-me {STRING} de {STRING} -STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Registro de modificações {STRING} de {STRING} -STR_TEXTFILE_LICENCE_CAPTION :{WHITE}Licença {STRING} de {STRING} +STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Registro de modificações em {STRING} de {STRING} +STR_TEXTFILE_LICENCE_CAPTION :{WHITE}Licença de {STRING} de {STRING} STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Pré-visualização do resultado da pesquisa STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}Documento '{STRING}' OpenTTD diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index da72c4950f..8ddf51ca2f 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1012,6 +1012,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Rúpia índia STR_GAME_OPTIONS_CURRENCY_IDR :Rupia indonèsia STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit STR_GAME_OPTIONS_CURRENCY_LVL :Lats letó +STR_GAME_OPTIONS_CURRENCY_PTE :Escut portuguès STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Desa automàticament STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Selecciona l'interval de desada automàtica de la partida diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 43cd3d351e..e7f68c0daf 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1011,6 +1011,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Indisk rupi STR_GAME_OPTIONS_CURRENCY_IDR :Indonesisk Rupiah STR_GAME_OPTIONS_CURRENCY_MYR :Malaysisk Ringgit STR_GAME_OPTIONS_CURRENCY_LVL :lettiske lats +STR_GAME_OPTIONS_CURRENCY_PTE :Portugisiske Escudo STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Automatisk gemning STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Vælg interval imellem automatisk gemning diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 043086a6c5..4138e45bfc 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1011,6 +1011,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Indian Rupee STR_GAME_OPTIONS_CURRENCY_IDR :Indonesian Rupiah STR_GAME_OPTIONS_CURRENCY_MYR :Malaysian Ringgit STR_GAME_OPTIONS_CURRENCY_LVL :Latvian Lats +STR_GAME_OPTIONS_CURRENCY_PTE :Portuguese Escudo STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Autosave STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Select interval between automatic game saves diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 60633e6d57..8e603ab83f 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -268,6 +268,20 @@ STR_COLOUR_WHITE :Blanka STR_COLOUR_RANDOM :Hazarda ###length 17 +STR_COLOUR_SECONDARY_DARK_BLUE :Malhelblua +STR_COLOUR_SECONDARY_PALE_GREEN :Palverda +STR_COLOUR_SECONDARY_RED :Ruĝa +STR_COLOUR_SECONDARY_LIGHT_BLUE :Helblua +STR_COLOUR_SECONDARY_GREEN :Verda +STR_COLOUR_SECONDARY_DARK_GREEN :Malhelverda +STR_COLOUR_SECONDARY_BLUE :Blua +STR_COLOUR_SECONDARY_CREAM :Kremkolora +STR_COLOUR_SECONDARY_MAUVE :Malva +STR_COLOUR_SECONDARY_PURPLE :Purpura +STR_COLOUR_SECONDARY_ORANGE :Oranĝa +STR_COLOUR_SECONDARY_BROWN :Bruna +STR_COLOUR_SECONDARY_GREY :Griza +STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Same kiel ĉefa # Units used in OpenTTD @@ -392,7 +406,9 @@ STR_SORT_BY_TYPE :Tipo STR_SORT_BY_TRANSPORTED :Transportiĝis STR_SORT_BY_NUMBER :Numero STR_SORT_BY_PROFIT_LAST_YEAR :Gajno lastjara +STR_SORT_BY_PROFIT_LAST_PERIOD :Profito pasintperiode STR_SORT_BY_PROFIT_THIS_YEAR :Gajno ĉi-jara +STR_SORT_BY_PROFIT_THIS_PERIOD :Profito ĉi-periode STR_SORT_BY_AGE :Aĝo STR_SORT_BY_RELIABILITY :Fidebleco STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Tuta kapablo por ĉiu ŝarĝtipo @@ -420,9 +436,13 @@ 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_LAST_PERIOD :Ensuma profito pasintperiode STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Ensuma profito ĉi-jare +STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Ensuma profito ĉi-periode STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Averaĝa profito pasintjare +STR_SORT_BY_AVERAGE_PROFIT_LAST_PERIOD :Averaĝa profito pasintperiode STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Averaĝa profito ĉi-jare +STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Averaĝa profito ĉi-periode # Group by options for vehicle list STR_GROUP_BY_NONE :Neniu @@ -438,14 +458,14 @@ STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Agordoj STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Konservu ludon, foriru ludo, forlasi STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Montru mapon, ekstran vidujon, fluon de ŝarĝoj aŭ liston de ŝildoj STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Montru urbaron -STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Montru subvenciojn +STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Malfermu liston de subvencioj STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Montri stacidomoliston de la kompanio. -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Montru kompaniajn financajn informojn -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Montru ĝeneralajn kompaniajn informojn +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Malfermu kompaniajn financajn informojn +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Malfermu ĝeneralajn kompaniajn informojn STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Montru rakontolibron -STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Montru celoj-liston -STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Montru grafikojn -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Montru kompanian tabelon +STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Malfermu liston de celoj +STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Malfermu kompaniajn diagramojn kaj kargajn tarifojn +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Malfermu kompanian rangotabelon STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Pagu konstruadon de nova industrio aŭ listigu ĉiujn industriojn STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Montri vagonarliston de la kompanio. Stir+Klak baskulas la grupo/veturilo-liston. STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Montristratveturiloliston de la kompanio. Stir+Klak baskulas la grupo/veturilo-liston. @@ -453,10 +473,10 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Montri STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Montri aviadiloliston de la kompanio. Stir+Klak baskulas la grupo/veturilo-liston. STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Zomu vidon STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Malzomu vidon -STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Konstrui trakon -STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Konstruu stratojn -STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Konstruu tramvojojn -STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Konstruu havenojn +STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Konstrui fervojan infrastrukturon +STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Konstruu stratan infrastrukturon +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Konstruu traman infrastrukturon +STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Konstruu akvotransportan infrastrukturon STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Konstruu flughavenojn STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Malfermu la landaspektan ilbreton por (mal)altigi landon, planti arbojn ktp. STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Montru fenestron de sono/muziko @@ -471,15 +491,15 @@ STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Scenark STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Movu la komencdaton 1 jaron posten STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Movu la komencdaton 1 jaron antaŭen STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Klaku por enigi komencjaron -STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Montru mapon, urbaron +STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Malfermu mapon, ekstran vidujon, liston de ŝildoj, aŭ katalogon de urboj aŭ industriejoj STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Landaspekta generado STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Urba generado STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industria generado -STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Vojkonstruado +STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Konstruu stratan infrastrukturon STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Konstruado de tramvojo STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantu arbojn. «Shift» aktivigita konstruado/montrante kosto takso STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Metu signon -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Loku objekton. «Shift» aktivigita konstruado/montrante kosto takso +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Metu objekton. Ctrl+klak+tiru por elekti areon diagonale. Ankaŭ premu Shift por nur montri kostotakson # Scenario editor file menu ###length 7 @@ -658,8 +678,9 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Gajna Gr STR_GRAPH_INCOME_CAPTION :{WHITE}Enspeza Grafiko STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Kiom da ŝarĝo liveriĝis STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Kompania rendimento (maksimumo=1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Kompaniaj valoroj +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Diagramo de kompania valoro +STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Pasintaj 72 minutoj STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Ŝarĝpagaj Tarifoj STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Pago por liveri 10 unuojn (aŭ 10,000 litrojn) da ŝarĝo trans 20 kvadratoj @@ -690,7 +711,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :Potenculo STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Plejpotenculo # Performance detail window -STR_PERFORMANCE_DETAIL :{WHITE}Detala rendimento +STR_PERFORMANCE_DETAIL :{WHITE}Detala rendimentpritakso STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detaloj STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) @@ -710,7 +731,11 @@ STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Prunto: STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Entute: ###next-name-looks-similar +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}Nombro de veturiloj kiuj donis profiton pasintjare. Tio inkluzivas stratveturilojn, trajnojn, ŝipojn kaj aviadilojn +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Nombro de veturiloj kiuj donis profiton pasintperiode. Tio inkluzivas stratveturilojn, trajnojn, ŝipojn kaj aviadilojn 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_YEARS :{BLACK}La profito de la veturilo kun la plej malalta enspezo (estas konsiderataj nur veturiloj kies aĝo superas du jarojn) +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}La profito de la veturilo kun la plej malalta enspezo (estas konsiderataj nur veturiloj kies aĝo superas du periodojn) 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 kvaronjaro el la lastaj 12 kvaronjaroj STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Ŝarĝunuoj liveritaj dum la pasintaj 4 kvaronjaroj @@ -810,7 +835,7 @@ STR_SMALLMAP_LEGENDA_AIRCRAFT :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_TRANSPORT_ROUTES :{TINY_FONT}{BLACK}Transportstratoj STR_SMALLMAP_LEGENDA_FOREST :{TINY_FONT}{BLACK}Arbaro STR_SMALLMAP_LEGENDA_RAILROAD_STATION :{TINY_FONT}{BLACK}Fervoja Stacidomo -STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Ŝarĝaŭta Ŝarĝejo +STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Ŝarĝaŭta stacio STR_SMALLMAP_LEGENDA_BUS_STATION :{TINY_FONT}{BLACK}Busstacio STR_SMALLMAP_LEGENDA_AIRPORT_HELIPORT :{TINY_FONT}{BLACK}Flughaveno/Helikopterejo STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLACK}Haveno @@ -854,6 +879,7 @@ STR_STATUSBAR_AUTOSAVE :{RED}AŬTOMATA STR_STATUSBAR_SAVING_GAME :{RED}* * KONSERVAS LUDON * * STR_STATUSBAR_SPECTATOR :{WHITE}(spektanto) +STR_STATUSBAR_INFINITE_MONEY :{WHITE}(senfina mono) # News message history STR_MESSAGE_HISTORY :{WHITE}Mesaĝa historio @@ -948,6 +974,7 @@ STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nova {STRING} nun haveblas! - {ENGINE} +STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION} nun akceptas: {CARGO_LIST.n} STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Subvencia oferto ne plu validas:{}{}Transportado de {STRING} de {STRING} al {STRING} ne estos subvenciata. STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subvencio retiriĝis:{}{}Servo de {STRING} de {STRING} al {STRING} ne plu estas subvenciata. @@ -990,6 +1017,7 @@ STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Monunuoj STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Elekto de monunuoj +STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) ###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Brita Pundo @@ -1034,6 +1062,8 @@ STR_GAME_OPTIONS_CURRENCY_HKD :Honkonga dolaro STR_GAME_OPTIONS_CURRENCY_INR :Barata rupio STR_GAME_OPTIONS_CURRENCY_IDR :Indonezia rupio STR_GAME_OPTIONS_CURRENCY_MYR :Malajzia ringito +STR_GAME_OPTIONS_CURRENCY_LVL :Latvaj Latoj +STR_GAME_OPTIONS_CURRENCY_PTE :Portugalaj Eskudoj STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Aŭtomata konservado STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Elektu intervalon inter aŭtomataj konservadoj de la ludo @@ -1068,8 +1098,13 @@ STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Nuna pel STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Interfacgrandeco STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Aŭtomate rekonu grandecon +STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Ŝaltu ĉi tiun kvadrateton por aŭtomate detekti grandecon de la interfaco +STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Uzu tradician bildetan tiparon +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Ŝaltu ĉi tiun kvadrateton se vi preferas uzi la tradician fiksgrandecan bildetan tiparon. +STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Glatigu tiparojn +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Ŝaltu ĉi tiun kvadrateton por glatigi aligrandigeblajn tiparojn STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1081,6 +1116,7 @@ STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Aŭtomat STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Partopreni aŭtomatan sondadon STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Kiam tiu ĉi agordo estas aktiva, OpenTTD sendos sondaĵon je forlaso de ludo STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}Pri sondado kaj privateco +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Tio ĉi malfermos retumilon kun pli da informoj pri la aŭtomata sondado STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Antaŭmontru sondaĵrezulton STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Montru la sondaĵrezulton de la kuranta ludo @@ -1092,11 +1128,11 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Aktualigoftecoj pli altaj ol 60Hz povas kaŭzi malrapidiĝon. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Baza grafikaro -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selektu la uzendan bazgrafikaron +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selektu la uzotan bazan grafikaron (ne eblas ŝanĝi ene de la ludo, nur de la ĉefa menuo) STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Aldonaj informoj pri la baza grafikaro STR_GAME_OPTIONS_BASE_SFX :{BLACK}Baza sonaro -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Elektu la uzendan sonaron +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Elektu la uzotan bazan sonaron (ne eblas ŝanĝi ene de la ludo, nur de la ĉefa menuo) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Aldonaj informoj pri la baza sonaro STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Baza muzikaro. @@ -1104,7 +1140,10 @@ STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Elekti b STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Pluaj informoj pri la baza muzikaro. +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Stato de la kromprogramo: +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :{RED}Duplikata kromprogramo +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Malvalida subskribo STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Ne eblis akiri liston de subtenataj distingivoj @@ -1202,13 +1241,13 @@ STR_TERRAIN_TYPE_CUSTOM_VALUE :Specifa alteco STR_CITY_APPROVAL_LENIENT :Indulgema STR_CITY_APPROVAL_TOLERANT :Tolerante STR_CITY_APPROVAL_HOSTILE :Malamikema -STR_CITY_APPROVAL_PERMISSIVE :Permeseme (ne efikas al la agoj de la kompanio) +STR_CITY_APPROVAL_PERMISSIVE :Permesema (ne efikas al la agoj de la kompanio) STR_WARNING_NO_SUITABLE_AI :{WHITE}Neniu taŭga AI estas disponebla...{}Kelkaj AI-oj estas elŝuteblaj per la sistemo 'Enreta Enhavo'. # Settings tree window STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Agordoj -STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtroteksto: +STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrilo: 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 @@ -1269,12 +1308,14 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centre STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Dekstre +STR_CONFIG_SETTING_INFINITE_MONEY :Senfina mono: {STRING} +STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Permesu senliman elspezadon kaj malŝaltu bankroton de kompanioj STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimuma komenca prunto: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimuma monsumo kiun kompanio povas prunti (sen enkalkulado de inflacio) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimuma monsumo kiun kompanio povas prunti (sen enkalkulado de inflacio). Se "Sen prunto" estas elektita, neniom da mono estos havebla krom se ludoskripto provizas monon aŭ la agordo "Senfina mono" estas elektita. STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sen prunto {RED}Bezonatas ludoskripto por provizi komencan financadon +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sen prunto STR_CONFIG_SETTING_INTEREST_RATE :Rentumtarifoj: {STRING} @@ -1311,6 +1352,7 @@ STR_CONFIG_SETTING_DISASTERS :Katastrofoj: {S STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Ŝaltu akcidentojn kiuj de temp' al tempo povas bloki veturilojn aŭ infrastrukturon STR_CONFIG_SETTING_CITY_APPROVAL :Sinteno de lokaj estraroj: {STRING} +STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Elektu kiugrade bruo kaj poluado de kompanioj influas la urban takson kaj pluajn konstruajn agojn en la urbo STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Limo de mapalteco: {STRING} STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} @@ -1372,10 +1414,10 @@ STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :kiel aliaj indu STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :esploradon STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Ebena areo ĉirkaŭ fabrikoj: {STRING} -STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Kvanto de ebena spaco ĉirkaŭ fabriko. Tio certigas ke restos spaco ĉirkaŭ fabriko por konstrui fervojojn ktp +STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Kvanto de ebena spaco ĉirkaŭ industriejo. Tio certigas ke restos spaco ĉirkaŭ industriejo por konstrui fervojojn ktp STR_CONFIG_SETTING_MULTIPINDTOWN :Permesu pliajn similajn industriojn en la sama urbo: {STRING} -STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normale, urbo ne volas pli ol unu fabrikon de ĉiu tipo. Kun tiu ĉi agordo, ĝi permesos plurajn fabrikojn de la sama tipo en la sama urbo +STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normale, urbo ne volas pli ol unu industriejo de ĉiu tipo. Kun tiu ĉi agordo, ĝi permesos plurajn industriejojn de la sama tipo en la sama urbo STR_CONFIG_SETTING_SIGNALSIDE :Montru signaloj: {STRING} STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Elektu je kiu flanko de la reloj meti semaforojn @@ -1410,10 +1452,12 @@ STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Ĉiu vidujo STR_CONFIG_SETTING_BRIBE :Permesu subaĉeti la lokajn estrojn: {STRING} ###length 2 STR_CONFIG_SETTING_BRIBE_HELPTEXT :Permesu al kompanioj provi subaĉeti lokajn estrojn. Se inspektoro rimarkas la subaĉeton, la kompanio dum ses monatoj ne povos agi en la urbo +STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :Permesu al kompanioj provi subaĉeti lokajn estrojn. Se inspektoro rimarkas la subaĉeton, la kompanio dum ses minutoj ne povos agi en la urbo STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Permesu aĉeti ekskluzivajn transportrajtojn: {STRING} ###length 2 -STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Se kompanio aĉetas ekskluzivajn transportrajtojn en urbo, stacioj de konkurantoj (pasaĝeraj kaj kargaj) ne ricevos ŝarĝojn dum tuta jaro +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Se kompanio aĉetas ekskluzivajn transportrajtojn en urbo, stacioj de konkurantoj (pasaĝeraj kaj kargaj) ne ricevos ŝarĝojn dum 12 monatoj +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT_MINUTES :Se kompanio aĉetas ekskluzivajn transportrajtojn en urbo, stacioj de konkurantoj (pasaĝeraj kaj kargaj) ne ricevos ŝarĝojn dum 12 minutoj STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permesi financi konstruaĵojn: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Permesu ke kompanioj donu monon al urboj por financi novajn domojn @@ -1438,7 +1482,7 @@ STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :reduktita STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :normala -STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permesu trairajn bushaltejojn sur urboposedataj stratoj: {STRING} +STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permesu trairajn bushaltejojn sur stratoj posedataj de urboj: {STRING} STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Permesu konstrui trairajn strathaltejojn sur stratoj posedataj de urboj STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Permesu trairajn strathaltejojn sur stratoj posedataj de konkurantoj: {STRING} STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Permesu konstrui trairajn strathaltejojn sur stratoj posedataj de konkurantoj @@ -1466,7 +1510,8 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :de ĉiuj veturi STR_CONFIG_SETTING_WARN_INCOME_LESS :Avertu se gajno de veturilo negativas: {STRING} ###length 2 -STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Kiam tiu ĉi agordo estas aktiva, aperas anonco kiam iu veturilo ne faris profiton dum kalendara jaro +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Kiam tiu ĉi agordo estas aktiva, aperas anonco kiam iu veturilo ne faris profiton dum jaro +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Kiam tiu ĉi agordo estas aktiva, aperas anonco kiam iu veturilo ne faris profiton dum periodo STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Veturiloj neniam eluziĝas: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Se tiu ĉi agordo estas aktiva, ĉiuj modeloj de veturiloj restos aĉeteblaj por ĉiam post ekhaveblo @@ -1477,6 +1522,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalendaro ###setting-zero-is-special +STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Aŭtomate anstataŭu veturilon se malnoviĝas: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Se tiu ĉi agordo estas aktiva, veturilo kiu alproksimiĝas al la fino de sia vivdaŭro estos aŭtomate anstataŭigita kiam la renovigkondiĉoj estas plenumitaj @@ -1517,7 +1563,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Terentipo: {STRING} -STR_CONFIG_SETTING_INDUSTRY_DENSITY :Denseco de fabrikoj: {STRING} +STR_CONFIG_SETTING_INDUSTRY_DENSITY :Denseco de industriejoj: {STRING} 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} @@ -1526,11 +1572,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_HELPTEXT :Elektu la proksimuman kvanton de neĝo en la arktikeca landaspekto. Neĝo ankaŭ influas generadon de industriejoj kaj kondiĉojn por kreskado de urboj. Nur uzata dum mapgenerado. Marnivelaj kaj marbordaj kaheloj neniam havas neĝon. STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Dezerta kovro: {STRING} -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_HELPTEXT :Elektu la proksimuman kvanton de dezerto en la tropikeca landaspekto. Dezertoj ankaŭ influas generadon de industriejoj kaj kondiĉojn por kreskado de urboj. Nur uzata dum mapgenerado STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Nereguleco de tereno: {STRING} @@ -1647,6 +1693,9 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Ne STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Fermu fenestron per dekstra klako: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Fermas fenestron per dekstra klako ene de ĝi. Malebligas ŝpruchelpilon je dekstra klako! ###length 3 +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_NO :Ne +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES :Jes +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :Jes, krom gluecaj STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Uzu la {STRING.n} datformon por nomoj de konservludoj. STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Dataranĝo en dosiernomoj de konservitaj ludoj @@ -1674,7 +1723,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ebligu uzadon d STR_CONFIG_SETTING_LOADING_INDICATORS :Uzu ŝarg-indikilojn: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Elektu ĉu ŝarĝ-indikiloj estas montrataj sub ŝarĝataj aŭ malŝarĝataj veturiloj +STR_CONFIG_SETTING_TIMETABLE_MODE :Tempunuoj por horaroj: {STRING} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Elektu tempunuojn uzotajn por horaroj de veturiloj ###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Tagoj +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Sekundoj +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Tempopulsoj STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Montru alvenojn kaj forirojn sur horaroj: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Montru antaŭvidatajn alven- kaj forir-tempojn en horaroj @@ -1710,9 +1764,11 @@ STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Ludu sonon je m ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR :Fine de la jaro: {STRING} +STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Fino de periodo: {STRING} ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Ludu sonon je la fino de jaro resumantan la rendimenton de la kompanio dum la jaro kompare al la antaŭa jaro +STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Ludu sonon je la fino de jaro resumantan la rendimenton de la kompanio dum la periodo kompare al la antaŭa periodo STR_CONFIG_SETTING_SOUND_CONFIRM :Konstruado: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Ludu sonon je sukcesa plenumo de konstruado aŭ aliaj agoj @@ -1771,7 +1827,7 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Defaŭlta prise STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Elektu la defaŭltan priservintervalon por novaj aviadiloj, se ne estas eksplicite agordita priservintervalo por la veturilo STR_CONFIG_SETTING_SERVINT_SHIPS :Defaŭlta priservintervalo por ŝipoj: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Elektu la defaŭltan priservintervalon por novaj ŝipoj, se ne estas eksplicite agordita priservintervalo por la veturilo -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}tago{P 0 "" j}/% +STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}tago{P 0 "" j}/minuto{P 0 "" j}/% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Malaktiva @@ -1847,7 +1903,7 @@ STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Neniam STR_CONFIG_SETTING_ECONOMY_TYPE :Tipo de ekonomio: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :En glata ekonomio, produktadkvantoj ŝanĝiĝas pli ofte, kaj je malpli multe. En frostigita ekonomio, ne ŝanĝiĝas produktadkvantoj kaj ne fermiĝas fabrikoj. Tiu ĉi agordo povas esti senefika se iu NewGRF provizas tipojn de fabrikoj. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :En glata ekonomio, produktadkvantoj ŝanĝiĝas pli ofte, kaj je malpli multe. En frostigita ekonomio, ne ŝanĝiĝas produktadkvantoj kaj ne fermiĝas industriejoj. Tiu ĉi agordo povas esti senefika se iu NewGRF provizas tipojn de industriejoj. ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Originala STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Glata @@ -1886,8 +1942,8 @@ STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Permesu ke urbo STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Urboj rajtas konstrui traknivelajn pasejojn: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Kiam tiu ĉi agordo estas aktiva, urboj rajtas konstrui traknivelajn pasejojn -STR_CONFIG_SETTING_NOISE_LEVEL :Permesu urbe kontrolatan laŭtecon por flughavenoj: {STRING} -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_NOISE_LEVEL :Limigu lokigon de flughavenoj surbaze de brunivelo: {STRING} +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Permesu ke urboj bloku konstruadon de flughavenoj surbaze de ilia bruo-toleremo, kiu dependas de la loĝantaro kaj de la grandeco kaj distanco de la flughaveno. Kiam tiu ĉi agordo estas malaktiva, urboj permesas nur du flughavenojn krom se la sinteno de lokaj estraroj estas agordita al "Permesema" 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 @@ -1903,6 +1959,7 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kvadrata (origi STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineara STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Dumluda metado de arboj: {STRING} +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Regu la hazardan aperadon de arboj dum la ludo. Tio povas influi al industriejoj kiuj dependas je arbokreskado, ekzemple segejoj ###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 @@ -1955,8 +2012,9 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Neniom STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Komenca urbgrandeca multobligo: {STRING} 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_LINKGRAPH_RECALC_INTERVAL :Ĝisdatigu la distribuan grafeon ĉiujn {STRING.n} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo inter sinsekvaj rekalkuloj de la liga grafeo. Ĉiu rekalkulo kalkulas planoj por unu komponento de la grafeo. Tio signifas ke meti valoron X por tiu ĉi agordo ne signifas ke la tuta grafeo estos ĝisdatigita ĉiujn X sekundojn. Nur iu komponento estos. Ju pli mallongan tempon vi elektas, des pli da procesora tempo bezonatas por la kalkulado. Ju pli longan tempon vi elektas, des pli longe daŭros ĝis kiam komenciĝos distribuado de kargoj en novaj itineroj. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Uzu {STRING.n} 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. @@ -1987,6 +2045,8 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Kiam ajn montri STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Angla-usona sistemo (mejloj hore) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metra (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI-unuoj (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_DAYS :Enludaj unuoj (kaheloj/tago) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_SECS :Enludaj unuoj (kaheloj/tago) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :Knotoj STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Unuoj de veturila povumo: {STRING} @@ -2116,7 +2176,7 @@ STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Elektu ' STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Elektu 'ludlandan' landstilon STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Montri ludajn agordojn -STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Montru altpoentara tabelo +STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Malfermu altpoentaran tabelon STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Montru agordojn STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Montri NewGRF-agordojn STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Serĉi pri nova kaj ĝisdatigita enhavo por elŝuti @@ -2139,9 +2199,18 @@ STR_ABANDON_GAME_QUERY :{YELLOW}Ĉu vi STR_ABANDON_SCENARIO_QUERY :{YELLOW}Ĉu vi certas ke vi volas forlasi ĉi tiun scenaron? # Help window +STR_HELP_WINDOW_CAPTION :{WHITE}Helpo & manlibroj +STR_HELP_WINDOW_DOCUMENTS :{BLACK}Dokumentoj +STR_HELP_WINDOW_CHANGELOG :{BLACK}Ŝanĝarĥivo +STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Konataj cimoj +STR_HELP_WINDOW_LICENSE :{BLACK}Permesilo +STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD +STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Manlibro / Vikio +STR_HELP_WINDOW_BUGTRACKER :{BLACK}Raportu cimon +STR_HELP_WINDOW_COMMUNITY :{BLACK}Komunumo # Cheat window -STR_CHEATS :{WHITE}Filudaĵoj +STR_CHEATS :{WHITE}Sablujaj agordoj STR_CHEAT_MONEY :{LTBLUE}Altigu monkvanton per {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Ludanta kiel kompanio: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magia forigilo (forviŝu industriojn, nemovebla objektoj): {ORANGE}{STRING} @@ -2161,6 +2230,8 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Montru v STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Montru stratveturilajn kolorskemojn STR_LIVERY_SHIP_TOOLTIP :{BLACK}Montru ŝipkolorajn skemojn STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Montru aviadilajn kolorskemojn +STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Montru kolorojn de stratveturilaj grupoj +STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Montru kolorojn de aviadilaj grupoj STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Elektu la unuan koloron por la elektita skemo. Ctrl+klaki aktivigos tiu koloron je ĉiu skemoj STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Elektu la duan koloron por la elektita skemo. Ctrl+klaki aktivigos tiu koloron je ĉiu skemoj STR_LIVERY_PANEL_TOOLTIP :{BLACK}Elektu la kolorskemon ŝanĝendan, aŭ plurajn per CTRL+click. Alklaku kvadraton por uzi/ne uzi skemon @@ -2269,6 +2340,7 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Mapgrand STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Mapgrandeco de la ludo{}Klaku por ordigi laŭ areo STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Dato STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Aktuala dato +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}Ludotempo STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Lingvo, servila versio ktp. STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Alklaku ludon el la listo por elekti ĝin @@ -2284,6 +2356,7 @@ STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Adreso STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Invitokodo: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Komenca dato: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Nuna dato: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Ludotempo: {WHITE}{NUM}h {NUM}m STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Ludoskripto: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Protektata per pasvorto! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERVILO NE SURRETAS @@ -2317,7 +2390,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}La ludno STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Agordu pasvorton STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protektu vian ludon per pasvorto por ne publike atingebligi ĝin -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Videbleco +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Videbleco: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Ĉu aliuloj povas vidi vian servilon en la publika listo STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} kliento{P "" j} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Klienta maksimumo: @@ -2358,6 +2431,8 @@ STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Enretaj STR_NETWORK_CLIENT_LIST_SERVER :{BLACK}Servilo STR_NETWORK_CLIENT_LIST_SERVER_NAME :{BLACK}Nomo STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP :{BLACK}Nomo de la servilo ĉe kiu vi ludas +STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Ŝanĝu la nomon de via servilo +STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Nomo de la servilo STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Videbleco STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Ĉu aliuloj povas vidi vian servilon en la publika listo STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Invitkodo @@ -2393,6 +2468,7 @@ 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_KICK :{YELLOW}Ĉu vi certas ke vi volas forĵeti la ludantoj '{STRING}'? STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Ĉu vi certas ke vi volas forbari la ludanton '{STRING}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Ĉu vi certas ke vi volas forigi la kompanion '{COMPANY}'? @@ -2537,7 +2613,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK} Serĉu STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Vi forlase OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}La uzokondiĉoj por elŝuti enhavon de eksteraj retejoj estas variaj.{}Vi devas kontroli ĉe la eksteraj retejoj por trovi informojn pri kiel instali la enhavon al OpenTTD.{}Ĉu vi volas daŭrigi? STR_CONTENT_FILTER_TITLE :{BLACK}Etikeda/noma filtro: -STR_CONTENT_OPEN_URL :{BLACK}Vizitu la retejon +STR_CONTENT_OPEN_URL :{BLACK}Retejo STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Vizitu la retejon de tiu ĉi enhavo STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Elŝuti STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Komencu elŝuti la elektitan enhavon. @@ -2622,6 +2698,8 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}superŝutata # Linkgraph tooltip +STR_LINKGRAPH_STATS_TOOLTIP_MONTH :{BLACK}{CARGO_LONG} transportendas ĉiumonate de {STATION} al {STATION} ({COMMA}% de la kapacito){STRING} +STR_LINKGRAPH_STATS_TOOLTIP_MINUTE :{BLACK}{CARGO_LONG} transportendas ĉiuminute de {STATION} al {STATION} ({COMMA}% de la kapacito){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} transportenda reen ({COMMA}% de la kapacito) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Meznombra veturtempo: {UNITS_DAYS_OR_SECONDS} @@ -2729,13 +2807,14 @@ STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Vojkonst STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Konstruado de tramvojoj STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Konstruu vojeron. Ctrl baskuligas inter konstrui/mal-konstrui vojeron. La majuskliga klavo baskuligas inter konstrui/(kosto)taksi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Konstruu tramvojan sekcion. Stir-klavo ŝaltas konstruadon/forigon por tramvojkonstruado. Majuskliga klavo ŝaltas konstruadon/montradon de kostotakso -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Konstruu vojan sekcion per la Aŭtomata voj-reĝimo. Stir-klavo ŝaltas konstruadon/forigon por vojkonstruado. Majuskliga klavo ŝaltas konstruadon/montradon de kostotakso +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Konstruu vojan sekcion per la Aŭtomata voj-reĝimo. Ctrl+klaku por forigi vojsekcion. Ankaŭ premu Shift por nur montri kostotakson +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Konstruu tramvojan sekcion per la Aŭtomata tramvoj-reĝimo. Ctrl+klaku por forigi tramvojsekcion. Ankaŭ premu Shift por nur montri kostotakson STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Konstrui stratveturilan garaĝon (por konstrui kaj prizorgi veturilojn). Baskulu inter konstrui/(kosto)taksi per maljuskliga klavo STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Konstrui tramveturilan garaĝon (por konstrui kaj prizorgi veturilojn). Baskulu inter konstrui/(kosto)taksi per maljuskliga klavo -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Konstrui bushaltejon. Premu Ctrl-klavo por ligi haltejojn. Baskulu inter konstrui/(kosto)taksi per maljuskliga klavo +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Konstruu bushaltejon. Ctrl+klaku por elekti alian stacion por ligi. Ankaŭ premu Shift por nur montri kostotakson STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Konstrui pasaĝerotraman stacion. Premu Ctrl-klavo por ligi staciojn. Baskulu inter konstrui/(kosto)taksi per maljuskliga klavo STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Konstrui kamionan ŝarĝejon. Premu Ctrl-klavon por ligi ŝarĝejojn. Baskulu inter konstrui/(kosto)taksi per maljuskliga klavo -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Konstrui frajttraman stacion. Premu Ctrl-klavon por ligi staciojn. Baskulu inter konstrui/(kosto)taksi per maljuskliga klavo +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Konstrui kargotraman stacion. Ctrl+klaku por elekti alian stacion por ligi. Ankaŭ premu Shift por nur montri kostotakson STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Aktivigi/Malaktivigi unudirektajn stratojn STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Konstruu vojponton. Baskulu inter konstrui/(kosto)taksi per maljuskliga klavo STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Konstrui tramponton. Baskulu inter konstrui/(kosto)taksi per maljuskliga klavo @@ -2860,7 +2939,7 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Ĉu vi c # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Urba Generado STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Nova Urbo -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Fondi novan urbon. Maljuskliga klavo+klaki nur montrigas taksitan koston +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Fondu novan urbon. Ankaŭ premu Shift por nur montri kostotakson STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Hazarda Urbo STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Fondi urbon en hazarda loko STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Multaj hazardaj urboj @@ -2892,7 +2971,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}3x3 krad STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Hazarde # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Fondu novan industrion +STR_FUND_INDUSTRY_CAPTION :{WHITE}Fondado de industriejoj STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Elektu la taŭgan industrion de ĉi tiu listo STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Kreu hazardajn fabrikojn STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Kovru la mapon per hazarde metitajn industriojn @@ -2935,6 +3014,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Posedant STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Posedanto de fervojo: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Lokaj estroj: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Neniu +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Troviĝo: {LTBLUE}{NUM} x {NUM} x {NUM} STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Kreite: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stacioklaso: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Staciotipo: {LTBLUE}{STRING} @@ -3001,7 +3081,7 @@ STR_LAI_TREE_NAME_CACTUS_PLANTS :Kaktusoj STR_LAI_STATION_DESCRIPTION_RAILROAD_STATION :Stacidomo STR_LAI_STATION_DESCRIPTION_AIRCRAFT_HANGAR :Aviadila hangaro STR_LAI_STATION_DESCRIPTION_AIRPORT :Flughaveno -STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Ŝarĝejo +STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Ŝarĝaŭta stacio STR_LAI_STATION_DESCRIPTION_BUS_STATION :Bushaltejo STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :Haveno STR_LAI_STATION_DESCRIPTION_BUOY :Buo @@ -3145,6 +3225,7 @@ STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Urbonomo STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Elektu stilon de urbonomoj STR_MAPGEN_DATE :{BLACK}Dato: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Kiom da industrioj: +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Elektu densecon de industriejoj, aŭ specifan nombron STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Plej alta pinto: STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Pliigu la maksimuman altecon de la plej alta pinto sur la mapo je unu STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Malpliigu la maksimuman altecon de la plej alta pinto sur la mapo je unu @@ -3158,6 +3239,7 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Malpliig STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Terentipo: STR_MAPGEN_SEA_LEVEL :{BLACK}Marnivelo: +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Elektu marnivelon STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Riveroj: STR_MAPGEN_SMOOTHNESS :{BLACK}Reguleco: STR_MAPGEN_VARIETY :{BLACK}Diverseca distribuo: @@ -3165,6 +3247,7 @@ STR_MAPGEN_GENERATE :{WHITE}Generu STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Agordoj de NewGRF STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Montru NewGRF-agordojn STR_MAPGEN_AI_SETTINGS :{BLACK}AI-agordoj +STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Malfermu AI-agordojn STR_MAPGEN_GS_SETTINGS :{BLACK}Ludoskriptaj agordoj STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Montru ludoskriptajn agordojn @@ -3193,6 +3276,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Katalune # Strings for map borders at game generation STR_MAPGEN_BORDER_TYPE :{BLACK}Maprandoj: +STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Elektu randojn de la ludmondo STR_MAPGEN_NORTHWEST :{BLACK}Nordokcidenta STR_MAPGEN_NORTHEAST :{BLACK}Nordorienta STR_MAPGEN_SOUTHEAST :{BLACK}Sudorienta @@ -3201,7 +3285,7 @@ STR_MAPGEN_BORDER_FREEFORM :{BLACK}Liberman STR_MAPGEN_BORDER_WATER :{BLACK}Akvo STR_MAPGEN_BORDER_RANDOM :{BLACK}Hazarde STR_MAPGEN_BORDER_RANDOMIZE :{BLACK}Hazarde -STR_MAPGEN_BORDER_MANUAL :{BLACK}Manlibro +STR_MAPGEN_BORDER_MANUAL :{BLACK}Permane STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Mapa turniĝo: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Mapa nomo: @@ -3315,6 +3399,7 @@ STR_NEWGRF_INSPECT_PARENT_BUTTON :{BLACK}Magistro STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} je {HEX} STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Objekto STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Tipo de relo +STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Vojtipo # Sprite aligner window @@ -3362,7 +3447,7 @@ STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Malvalida/nekon # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Atentu! -STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Vi ŝanĝos kurantan ludon. Tio povas kraŝigi la ludon OpenTTD aŭ povas rompi ludstaton. Ne fajlu cim-raportojn pri iaj posteuloj.{}Ĉu vi nepre certas, ke vi volas fari tion? +STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Vi ŝanĝos kurantan ludon. Tio povas paneigi OpenTTD aŭ rompi la ludstaton. Ne sendu cim-raportojn pri tiaj problemoj.{}Ĉu vi tute certas, ke vi volas fari tion? STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Dosiero ne aldoneblas: duobla GRF ID STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Ne troviĝis apartena dosiero (ŝarĝis taŭgan GRF) @@ -3387,6 +3472,7 @@ STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Ĝi ŝan STR_BROKEN_VEHICLE_LENGTH :{WHITE}La vagonaro '{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_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' kaŭzis senfinan iteracion en la revokfunkcio por produktado STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}'Revoko' {1:HEX} revenis nekonatan/malvalidan rezulton {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs @@ -3484,6 +3570,10 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{Y # Goal window STR_GOALS_CAPTION :{WHITE}Celoj de {COMPANY} +STR_GOALS_SPECTATOR_CAPTION :{WHITE}Tutmondaj celoj +STR_GOALS_SPECTATOR :Tutmondaj celoj +STR_GOALS_GLOBAL_BUTTON :{BLACK}Tutmonde +STR_GOALS_GLOBAL_BUTTON_HELPTEXT :{BLACK}Montru tutmondajn celojn STR_GOALS_COMPANY_BUTTON :{BLACK}Kompanio STR_GOALS_COMPANY_BUTTON.n :{BLACK}Kompanion STR_GOALS_COMPANY_BUTTON_HELPTEXT :{BLACK}Montru celojn de la kompanio @@ -3491,6 +3581,7 @@ STR_GOALS_TEXT :{ORANGE}{STRING STR_GOALS_NONE :{ORANGE}- Nenia - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klaku la celon por centri la ĉefvidon ĉe la industrio/urbo/kahelo. Ctrl+Klak por malfermi novan vidujon ĉe la loko de la industrio/urbo/kahelo # Goal question window STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Informoj @@ -3500,13 +3591,16 @@ STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Eraro # Goal Question button list ###length 18 STR_GOAL_QUESTION_BUTTON_CANCEL :Nuligi +STR_GOAL_QUESTION_BUTTON_OK :Bone STR_GOAL_QUESTION_BUTTON_NO :Ne STR_GOAL_QUESTION_BUTTON_YES :Jes STR_GOAL_QUESTION_BUTTON_DECLINE :Malakcepti STR_GOAL_QUESTION_BUTTON_ACCEPT :Akceptu STR_GOAL_QUESTION_BUTTON_IGNORE :Ignoru +STR_GOAL_QUESTION_BUTTON_RETRY :Reprovu STR_GOAL_QUESTION_BUTTON_PREVIOUS :Antaŭa STR_GOAL_QUESTION_BUTTON_NEXT :Sekva +STR_GOAL_QUESTION_BUTTON_GO :Ek STR_GOAL_QUESTION_BUTTON_CONTINUE :Daŭrigu STR_GOAL_QUESTION_BUTTON_RESTART :Restartigu STR_GOAL_QUESTION_BUTTON_POSTPONE :Prokrasti @@ -3520,6 +3614,8 @@ STR_SUBSIDIES_NONE :{ORANGE}- Neniu STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Servoj subvenciataj: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} de {STRING} al {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klaku servon por centri vidpunkto ĉe la industrio/urbo. Ctrl+Klak por malfermi novan vidujon ĉe la loko +STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :ĝis {DATE_SHORT} +STR_SUBSIDIES_SUBSIDISED_EXPIRY_TIME :{UNITS_MONTHS_OR_MINUTES} restas # Story book window STR_STORY_BOOK_TITLE :{YELLOW}{STRING} @@ -3539,6 +3635,8 @@ STR_STATION_LIST_STATION :{YELLOW}{STATIO STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- Neniu - STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Elektu ĉiujn konstruaĵojn +STR_STATION_LIST_CARGO_FILTER_NO_CARGO_TYPES :Neniaj ŝarĝoj +STR_STATION_LIST_CARGO_FILTER_NO_RATING :Sen ŝarĝotakso # Station view window STR_STATION_VIEW_CAPTION :{WHITE}{STATION} {STATION_FEATURES} @@ -3606,7 +3704,7 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Malperme STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centri ĉefvidon ĉe la vojpunkto. Stir+Klak por malfermi novan vidujon ĉe la loko. STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Ŝanĝi nomon de vojpunkto. -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centri ĉefvidon ĉe la buo. Stir+Klak por malfermi novan vidujon ĉe la bua loko. +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centri ĉefvidon ĉe la buo. Ctrl+Klak por malfermi novan vidujon ĉe la bua loko. STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Ŝanĝi nomon de la buo. STR_EDIT_WAYPOINT_NAME :{WHITE}Ŝanĝu vojpunktonomon @@ -3614,6 +3712,8 @@ STR_EDIT_WAYPOINT_NAME :{WHITE}Ŝanĝu # Finances window STR_FINANCES_CAPTION :{WHITE}Financoj de {COMPANY} {BLACK}{COMPANY_NUM} STR_FINANCES_YEAR :{WHITE}{NUM} +STR_FINANCES_YEAR_CAPTION :{WHITE}Jaro +STR_FINANCES_PERIOD_CAPTION :{WHITE}Periodo ###length 3 STR_FINANCES_REVENUE_TITLE :{WHITE}Enspezo @@ -3721,11 +3821,13 @@ STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industri STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Neniu - STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% transportiĝis){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} +STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} kaj {NUM} pliaj... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industrionomoj - klaku nomon por centri vidon ĉe la industrio. Ctrl+Klak por malfermi novan vidujon ĉe la loko STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Ŝarĝo akceptata: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Produktata kargo: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Ĉiaj ŝarĝoj STR_INDUSTRY_DIRECTORY_FILTER_NONE :Neniu @@ -3743,6 +3845,7 @@ STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION.n :, {STRING.n}{ST STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Bezonas: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} atendas{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}Ŝanĝu produktadon (multoble de 8, ĝis 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Ŝanĝu produktan nivelon (procento, limigo je 800%) @@ -3769,15 +3872,15 @@ STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Haveblaj Aviadi STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Manaĝu liston STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Sendu instrukciojn al ĉiuj veturiloj en la listo STR_VEHICLE_LIST_REPLACE_VEHICLES :Anstataŭu veturilojn -STR_VEHICLE_LIST_SEND_FOR_SERVICING :Sendu por Prizorgo +STR_VEHICLE_LIST_SEND_FOR_SERVICING :Sendu por prizorgo STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Gajno ĉi-jare: {CURRENCY_LONG} (pasintjare: {CURRENCY_LONG}) STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} -STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Sendu al Garaĝo -STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Sendu al Garaĝo -STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Sendi al Garaĝo -STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Sendu al Hangaro +STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Sendu al garaĝo +STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Sendu al garaĝo +STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Sendu al garaĝo +STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Sendu al hangaro STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Alklaku por haltigi ĉiujn veturilojn en la listo STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Alklaku por starti ĉiujn veturilojn en la listo @@ -3870,7 +3973,7 @@ STR_CARGO_TYPE_FILTER_NONE :Neniaj STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Vagonara elektolisto - alklaku veturilon por informoj STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Stratveturilelektan liston - alklaku veturilon por informoj STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Ŝipelekta listo - alklaku ŝipon por informoj -STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Aviadilelekta listo - alklaku aviadilon por informoj +STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Aviadilelekta listo. Alklaku aviadilon por informoj. Ctrl+klak por montri/kaŝi tiun ĉi aviadiltipon ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Aĉeti Veturilon @@ -3888,7 +3991,7 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Aĉetu k STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Aĉeti la emfazitan vagonaron. Montri taksitaj kostoj sen aĉeti per maljuskliga klavo + Klaki STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Aĉeti la emfazitan stratveturilon. Montri taksitaj kostoj sen aĉeti per maljuskliga klavo + Klaki STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Aĉeti la emfazitan ŝipon. Montri taksitaj kostoj sen aĉeti per maljuskliga klavo + Klaki -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Aĉeti la emfazitan aviadilon. Montri taksitaj kostoj sen aĉeti per maljuskliga klavo + Klaki +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Aĉetu la emfazitan aviadilon. Ankaŭ premu Shift por nur montri la taksitan koston ###length VEHICLE_TYPES @@ -3985,13 +4088,13 @@ STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Klonu av STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Aĉeti kopion de vagonaro kun ĉiuj vagonoj. Klaku ĉi tiun butonon kaj poste vagonaron en aŭ ekster la garaĝo. Ctrl+Klak kunhavigas la itineron. Maljuskliga klavo+klaku montras taksatan koston sen aĉeti STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Aĉeti kopion de stratveturilo. Klaku ĉi tiun butonon kaj poste veturilon en aŭ ekster la garaĝo. Ctrl+Klak kunhavigas la itineron. Maljuskliga klavo+klaku montras taksatan koston sen aĉeti STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Aĉeti kopion de ŝipo. Klaku ĉi tiun butonon kaj poste ŝipon en aŭ ekster garaĝo. Ctrl+Klak kunhavigas la itineron. Maljuskliga klavo+klaku montras taksatan koston sen aĉeti -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Aĉeti kopion de la aviadilo. Klaku ĉi tiun butonon kaj poste aviadilon en aŭ ekster la hangaro. Ctrl+Klak kunhavigas la ordonojn. Maljuskliga klavo+klaku montras taksatan koston sen aĉeti +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Aĉetu kopion de aviadilo. Klaku ĉi tiun butonon kaj poste aviadilon en aŭ ekster la hangaro. Ctrl+Klak kunhavigas la ordonojn. Ankaŭ premu Shift por nur montri kostotakson ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centri ĉefvidon ĉe la vagonartenejo. Stir+Klak por malfermi novan vidujon ĉe la vagonartenejo loko. STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centri ĉefvidon ĉe la stratveturilan garaĝon. Stir+Klak por malfermi novan vidujon ĉe la garaĝa loko. STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centri ĉefvidon ĉe la ŝipgaraĝon. Stir+Klak por malfermi novan vidujon ĉe la ŝipgaraĝa loko. -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centri ĉefvidon ĉe la hangaro. Stir+Klak por malfermi novan vidujon ĉe la hangara lokon. +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centru ĉefvidon ĉe la loko de la hangaro. Ctrl+Klak por malfermi novan vidujon ĉe la loko de la hangaro ###length VEHICLE_TYPES STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Akiri liston da ĉiuj vagonaroj kun ĉi tiu garaĝo en siaj itineroj @@ -4031,6 +4134,13 @@ STR_ENGINE_PREVIEW_TRAM_VEHICLE.n :tramvojan vetur STR_ENGINE_PREVIEW_AIRCRAFT :aviadilo STR_ENGINE_PREVIEW_SHIP :ŝipo +STR_ENGINE_PREVIEW_COST_WEIGHT :Kosto: {CURRENCY_LONG} Pezo: {WEIGHT_SHORT} +STR_ENGINE_PREVIEW_COST_MAX_SPEED :Kosto: {CURRENCY_LONG} Maksimuma rapideco: {VELOCITY} +STR_ENGINE_PREVIEW_SPEED_POWER :Rapideco: {VELOCITY} Povo: {POWER} +STR_ENGINE_PREVIEW_RUNCOST_YEAR :Irkosto: {CURRENCY_LONG}/jaro +STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Irkosto: {CURRENCY_LONG}/periodo +STR_ENGINE_PREVIEW_CAPACITY :Kapacito: {CARGO_LONG} +STR_ENGINE_PREVIEW_CAPACITY_2 :Kapacito: {CARGO_LONG}, {CARGO_LONG} # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Anstataŭu {STRING.n} - {STRING} @@ -4144,16 +4254,16 @@ STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Senforte STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Atendas haveblan padon STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}La sekva celo estas tro for -STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}Irante al {STATION}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Iras al {0:STATION} STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Neniu ordono, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Irante al {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Irante al {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Iras al {0:WAYPOINT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Iras al {0:DEPOT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Prizorgo en {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}Ne povas atingi {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}Ne povas atingi {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}Ne povas atingi {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}Ne povas atingi {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - Ne povas atingi {0:STATION} +STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Ne povas atingi {0:WAYPOINT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Ne povas atingi {0:DEPOT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Ne povas atingi {0:DEPOT} # Vehicle stopped/started animations ###length 2 @@ -4197,6 +4307,12 @@ STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Transiga STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Prizorga intertempo: {LTBLUE}{COMMA}{NBSP}tagoj{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Prizorga intertempo: {LTBLUE}{COMMA}%{BLACK} {STRING} +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Pliigu prizorgan intertempon je 10 tagoj. Ctrl+klak por pliigi prizorgan intertempon je 5 tagoj +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Pliigu prizorgan intertempon je 5 minutoj. Ctrl+klak por pliigi prizorgan intertempon je 1 minuto +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Pliigu prizorgan intertempon je 10 procentoj. Ctrl+klak por pliigi prizorgan intertempon je 5 procentoj +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Malpliigu prizorgan intertempon je 10 tagoj. Ctrl+klak por malpliigi prizorgan intertempon je 5 tagoj +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Malpliigu prizorgan intertempon je 5 minutoj. Ctrl+klak por malpliigi prizorgan intertempon je 1 minuto +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Malpliigu prizorgan intertempon je 10 procentoj. Ctrl+klak por malpliigi prizorgan intertempon je 5 procentoj STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Ŝanĝi la tipo de servon intervalon STR_VEHICLE_DETAILS_DEFAULT :Defaŭlto @@ -4305,6 +4421,7 @@ STR_ORDER_DROP_HALT_DEPOT :Haltu. # Depot action tooltips, one per vehicle type ###length VEHICLE_TYPES +STR_ORDER_HANGAR_ACTION_TOOLTIP :{BLACK}Elektu agon por fari ĉe tiu ĉi hangaro ###next-name-looks-similar @@ -4324,12 +4441,13 @@ STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Kiel kom STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :egalas al STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :ne egalas al STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :estas malpli ol -STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :estas malpli aŭ egalas al +STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :estas malpli ol aŭ egalas al STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :estas pli ol -STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :estas pli aŭ egalas al +STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :estas pli ol aŭ egalas al STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :estas vera STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :estas falsa +STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}La valoro al kiu kompari la datumojn de la veturilo STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Enigi valoron por kompari STR_ORDERS_SKIP_BUTTON :{BLACK}Plusaltu @@ -4449,6 +4567,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Ĉi tiu STR_TIMETABLE_STATUS_LATE :{BLACK}Ĉi tiu veturilo nun malfruas je {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Ĉi tiu veturilo nun fruas je {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Ĉi tiu horaro ankoraŭ ne komenciĝas. +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Tiu ĉi horaro komenciĝos je {STRING} +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Tiu ĉi horaro komenciĝos post {COMMA} sekundoj @@ -4474,6 +4594,7 @@ STR_TIMETABLE_EXPECTED :{BLACK}Atendite STR_TIMETABLE_SCHEDULED :{BLACK}Planite STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Ŝalti inter atendite kaj planite +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} sek # Date window (for timetable) @@ -4500,9 +4621,9 @@ STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Kiam iu STR_AI_DEBUG_MATCH_CASE :{BLACK}Parigu kazon STR_AI_DEBUG_CONTINUE :{BLACK}Daŭrigu STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Malpaŭzu kaj daŭrigi la AI -STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Vidu forigeraran eligon de ĉiu tio AI +STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Vidu forigeraran eligon de ĉiu tio AI. Ctrl+klak por malfermi en nova fenestro STR_AI_GAME_SCRIPT :{BLACK}Ludoskripto -STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Kontrolu la ludoskriptan protokolon +STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Kontrolu la ludoskriptan protokolon. Ctrl+klak por malfermi en nova fenestro STR_ERROR_AI_NO_AI_FOUND :Neniu taŭga AI estas ŝarĝebla.{}Tiu ĉi AI estas lokokupa AI kiu nenion faros.{}Vi povas elŝuti pliajn AIojn per la 'Enreta Enhavo'-sistemo STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Unu el la rulantaj skriptoj paneis. Bonvolu raporti tion ĉi al la aŭtoro de la skripto kun ekrankapto de la fenestro 'AI/Ludoskripta Sencimigo' @@ -4566,16 +4687,21 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN # Textfile window +STR_TEXTFILE_JUMPLIST :{WHITE}Enhavtabelo +STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING} STR_TEXTFILE_WRAP_TEXT :{WHITE}Faldi tekstoliniojn STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Faldu tekstoliniojn en la fenestro por ke ĉio estu videbla sen rulumado STR_TEXTFILE_VIEW_README :{BLACK}Vidi legumin STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Ŝanĝarĥivo +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Montru la ŝanĝarĥivon de tiu ĉi enhavo STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licenco +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Montru la permesilon de tiu ĉi enhavo ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} legumin de {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING}-a ŝanĝarĥivo de {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING}-a licenco de {STRING} STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Antaŭmontro de sondaĵrezulto +STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}OpenTTD-dokumento '{STRING}' # Vehicle loading indicators @@ -5095,7 +5221,7 @@ STR_INDUSTRY_NAME_SAWMILL :Segejo STR_INDUSTRY_NAME_FOREST :Arbaro STR_INDUSTRY_NAME_OIL_REFINERY :Oleproduktejo STR_INDUSTRY_NAME_OIL_RIG :Oleplatformo -STR_INDUSTRY_NAME_FACTORY :Farejo +STR_INDUSTRY_NAME_FACTORY :Fabriko STR_INDUSTRY_NAME_PRINTING_WORKS :Printejo STR_INDUSTRY_NAME_STEEL_MILL :Ŝtalejo STR_INDUSTRY_NAME_FARM :Farmbieno @@ -5112,9 +5238,10 @@ STR_INDUSTRY_NAME_FRUIT_PLANTATION :Fruktkulturejo STR_INDUSTRY_NAME_RUBBER_PLANTATION :Kaŭĉukkulturejo STR_INDUSTRY_NAME_WATER_SUPPLY :Akvofonto STR_INDUSTRY_NAME_WATER_TOWER :Akvoturo -STR_INDUSTRY_NAME_FACTORY_2 :Farejo +STR_INDUSTRY_NAME_FACTORY_2 :Fabriko STR_INDUSTRY_NAME_FARM_2 :Farmbieno -STR_INDUSTRY_NAME_LUMBER_MILL :Lignejo +STR_INDUSTRY_NAME_LUMBER_MILL :Segejo +STR_INDUSTRY_NAME_LUMBER_MILL.n :Segejon STR_INDUSTRY_NAME_COTTON_CANDY_FOREST :Sukerŝpinaĵaro STR_INDUSTRY_NAME_CANDY_FACTORY :Dolĉaĵfarejo STR_INDUSTRY_NAME_BATTERY_FARM :Bateribieno @@ -5473,6 +5600,7 @@ STR_UNKNOWN_STATION :nekonata stacio STR_DEFAULT_SIGN_NAME :Ŝildo STR_COMPANY_SOMEONE :iu +STR_SAVEGAME_DURATION_REALTIME :{NUM}h {NUM}m STR_SAVEGAME_NAME_DEFAULT :{COMPANY} je {STRING} STR_SAVEGAME_NAME_SPECTATOR :Spektanto, {1:STRING} @@ -5506,6 +5634,9 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}mil +STR_CURRENCY_SHORT_MEGA :{NBSP}mln +STR_CURRENCY_SHORT_GIGA :{NBSP}mld STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 3ab28c1a17..8d1a3a72dd 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1011,6 +1011,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Intian rupia STR_GAME_OPTIONS_CURRENCY_IDR :Indonesian rupia STR_GAME_OPTIONS_CURRENCY_MYR :Malesian ringgit STR_GAME_OPTIONS_CURRENCY_LVL :Latvian lati +STR_GAME_OPTIONS_CURRENCY_PTE :Portugalin escudo STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Automaattitallennus STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Valitse aikaväli automaattisille pelitallennuksille @@ -1494,7 +1495,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Kulkuneuvot eiv STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Mikäli käytössä, kaikki kulkuneuvot ovat saatavilla ikuisesti niiden julkistamisen jälkeen STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Ajanlasku: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Valitse pelin aikayksiköt. Tätä ei voi muuttaa myöhemmin.{}{}Kalenteripohjainen on klassinen OpenTTD-kokemus, jossa vuosi koostuu 12 kuukaudesta ja jokaisessa kuukaudessa on 28–31 päivää.{}{}Seinäkellopohjaisessa ajassa sen sijaan kulkuneuvojen liikkuminen, rahdin tuotanto ja talous perustuvat yhden minuutin askeliin, mikä on suunnilleen yhtä pitkä aika kuin 30 päivän kuukausi kalenteripohjaisessa tilassa. Nämä on ryhmitelty 12 minuutin jaksoihin, jotka vastaavat vuotta kalenteripohjaisessa tilassa.{}{}Kummassakin tilassa on aina myös klassinen kalenteri, jota käytetään kulkuneuvojen sekä talojen ja muun infrastruktuurin käyttöönottoajankohtiin. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Valitse pelin aikayksiköt. Tätä ei voi muuttaa myöhemmin.{}{}Kalenteripohjainen on klassinen OpenTTD-kokemus, jossa vuosi koostuu 12 kuukaudesta ja jokaisessa kuukaudessa on 28–31 päivää.{}{}Seinäkellopohjaisessa ajassa sen sijaan rahdin tuotanto ja talous perustuvat yhden minuutin askeliin, mikä on suunnilleen yhtä pitkä aika kuin 30 päivän kuukausi kalenteripohjaisessa tilassa. Nämä on ryhmitelty 12 minuutin jaksoihin, jotka vastaavat vuotta kalenteripohjaisessa tilassa.{}{}Kummassakin tilassa on aina myös klassinen kalenteri, jota käytetään kulkuneuvojen sekä talojen ja muun infrastruktuurin käyttöönottoajankohtiin. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalenteri STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Seinäkello @@ -3078,6 +3079,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Raitioti STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Rautatien omistaja: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Kunta: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ei mitään +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinaatit: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Ruudun indeksi: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Rakennettu/peruskorjattu: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Aseman luokka: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Aseman tyyppi: {LTBLUE}{STRING} diff --git a/src/lang/french.txt b/src/lang/french.txt index 50fdefe428..3e695c041a 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1012,6 +1012,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Roupie indienne STR_GAME_OPTIONS_CURRENCY_IDR :Roupie indonésienne STR_GAME_OPTIONS_CURRENCY_MYR :Malaysian Ringgit STR_GAME_OPTIONS_CURRENCY_LVL :Lats letton +STR_GAME_OPTIONS_CURRENCY_PTE :Escudo portugais STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Sauvegarde automatique STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Sélectionner l'intervalle de temps entre les sauvegardes automatiques @@ -3079,6 +3080,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Proprié STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Propriétaire des rails{NBSP}: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Municipalité{NBSP}: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Aucune +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordonnées{NBSP}: {LTBLUE}{NUM} × {NUM} × {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Index de tuile : {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Construit/rénové le{NBSP}: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Type de station{NBSP}: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Type de station{NBSP}: {LTBLUE}{STRING} diff --git a/src/lang/galician.txt b/src/lang/galician.txt index c5082b125e..55de166b87 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1012,6 +1012,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Rupia India STR_GAME_OPTIONS_CURRENCY_IDR :Rupia Indonesia STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit malaio STR_GAME_OPTIONS_CURRENCY_LVL :Lats letón +STR_GAME_OPTIONS_CURRENCY_PTE :Escudo portugués STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Autogravado STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Selecciona o intervalo entre autogravados @@ -1118,6 +1119,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Disminu STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Incrementa-la cantidade da túa moeda por unha Libra esterlina (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{G=n}{BLACK}Configura-lo cambio da túa moeda por unha Libra esterlina (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Separador: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Configurar o separador da túa moeda STR_CURRENCY_PREFIX :{LTBLUE}Prefixo: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Configura-lo prefixo para a túa moeda @@ -1273,10 +1276,10 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Cartos infinito STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Permite o gasto ilimitado e desactiva a bancarrota das compañías STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Crédito máximo inicial: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Cantidade máxima de cartos que unha compañía pode pedir (sen ter en conta a inflación) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Cantidade máxima de cartos que unha compañía pode pedir (sen ter en conta a inflación). Se se configura "Sen prestamo", non haberá cartos dispoñibles a non ser que os proporcione un script de xogo ou a configuración de "cartos infinitos". STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Non hai empréstitos. {RED}Require dun script do xogo para ter fondos iniciais +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sen empréstitos. STR_CONFIG_SETTING_INTEREST_RATE :Taxa de interés: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :A taxa de interés do préstamo; controla tamén a inflación, se está activada @@ -1493,7 +1496,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Os vehículos n STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Cando se activa, tódolos modelos de vehículos seguen a estar dispoñíbeis para sempre dende a súa aparición STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Cronometraxe: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecciona as unidades de cronometraxe do xogo. Isto non se pode mudar despois.{}{}A experiencia clásica de OpenTTD é basada en calendario, cun ano que consite de 12 meses e cada mes ten 28-31 días.{}{}No tempo baseado no reloxo, o movemento dos vehículos, producción de mercadorías e as finanzas baseanse en minutos, sendo o que dura aproximadamente un mes de 30 días no modo de Calendario. Estes agrúpanse en períodos de 12 minutos, equivalente o ano no modo de Calendario.{}{}En ambos modos hai sempre un calendario clásico, que se utiliza para a data de introdución de vehículos, casas e outras infraestruturas. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecciona as unidades de cronometraxe do xogo. Isto non se pode mudar despois.{}{}A experiencia clásica de OpenTTD é basada en calendario, cun ano que consite de 12 meses e cada mes ten 28-31 días.{}{}No tempo baseado no reloxo, a producción de mercadorías e as finanzas baseanse en minutos, sendo o que dura aproximadamente un mes de 30 días no modo de Calendario. Estes agrúpanse en períodos de 12 minutos, equivalente o ano no modo de Calendario.{}{}En ambos modos hai sempre un calendario clásico, que se utiliza para a data de introdución de vehículos, casas e outras infraestruturas. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendario STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Reloxo @@ -3077,6 +3080,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propieta STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Propietario da vía ferroviaria: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autoridade local: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ningunha +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordeadas: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Índice de cadro: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Construído/anovado: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Clase de estación: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de estación: {LTBLUE}{STRING} @@ -4382,22 +4387,22 @@ STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Esperan STR_VEHICLE_STATUS_CRASHED :{RED}Estrelado! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Avariado STR_VEHICLE_STATUS_STOPPED :{RED}Parado -STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Parando, {VELOCITY} +STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}{VELOCITY} - Parando STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Sen enerxía STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Esperando camiño libre STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Demasiado lonxe do próximo destino -STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}Dirixíndose a {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Sen ordes, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Dirixíndose a {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Dirixíndose a {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Servizo en {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}Desamontoarse e ir o servizo en {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Dirixíndose a {0:STATION} +STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Sen ordes +STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Dirixíndose a {0:WAYPOINT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Dirixíndose a {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Servizo en {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Desamontoarse e ir o servizo en {0:DEPOT} -STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}Non pode chegar a {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}Non pode chegar a {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}Non pode chegar a {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}Non pode chegar a {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - Non pode chegar a {0:STATION} +STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Non pode chegar a {0:WAYPOINT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Non pode chegar a {0:DEPOT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Non pode chegar a {0:DEPOT} # Vehicle stopped/started animations ###length 2 @@ -4611,7 +4616,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Ir ó depósito STR_ORDER_GO_TO_NEAREST_HANGAR :Ir ó hangar máis cercano STR_ORDER_CONDITIONAL :Salto de orde condicional STR_ORDER_SHARE :Comparte as ordes -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Engadir unha nova orde antes da seleccionada ou engadi-la ao final da lista. Ctrl+Clic sobre estacións ordea “Cargar completamente calquera carga”, sobre puntos de ruta ordea sen paradas e sobre depósitos ordea mantemento. Clic noutro vehículo copia as ordes e Ctr+clic as comparte. Unha orde de depósito desactiva o mantemento automático do vehículo +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Engadir unha nova orde antes da seleccionada ou engadi-la ao final da lista. Ctrl+Clic sobre estacións ordea “Cargar completamente calquera carga”, sobre puntos de ruta para invertir a opción "sen paradas por defecto" ou sobre depósitos para "desamontoar". Clic noutro vehículo copia as ordes e Ctr+clic as comparte. Unha orde de depósito desactiva o mantemento automático do vehículo STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Mostrar tódolos vehículos que comparten esta planificación @@ -5806,6 +5811,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}m +STR_CURRENCY_SHORT_GIGA :{NBSP}bn +STR_CURRENCY_SHORT_TERA :{NBSP}tn STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 875eaf503a..945360b052 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -192,18 +192,46 @@ STR_COLOUR_WHITE :Hvit STR_COLOUR_RANDOM :Tilfeldig ###length 17 +STR_COLOUR_SECONDARY_DARK_BLUE :Mørkeblå +STR_COLOUR_SECONDARY_PALE_GREEN :Lysegrønn +STR_COLOUR_SECONDARY_SECONDARY_PINK :Rosa +STR_COLOUR_SECONDARY_YELLOW :Gul +STR_COLOUR_SECONDARY_RED :Rød +STR_COLOUR_SECONDARY_LIGHT_BLUE :Lyseblå +STR_COLOUR_SECONDARY_GREEN :Grønn +STR_COLOUR_SECONDARY_DARK_GREEN :Mørkegrønn +STR_COLOUR_SECONDARY_BLUE :Blå +STR_COLOUR_SECONDARY_CREAM :Kremgul +STR_COLOUR_SECONDARY_MAUVE :Rødlilla +STR_COLOUR_SECONDARY_PURPLE :Lilla +STR_COLOUR_SECONDARY_ORANGE :Oransje +STR_COLOUR_SECONDARY_BROWN :Brun +STR_COLOUR_SECONDARY_GREY :Grå +STR_COLOUR_SECONDARY_WHITE :Hvit +STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Samme som primær # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{DECIMAL}{NBSP}mi/t STR_UNITS_VELOCITY_METRIC :{DECIMAL}{NBSP}km/t STR_UNITS_VELOCITY_SI :{DECIMAL}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS_DAY :{DECIMAL}{NBSP}ruter/dag +STR_UNITS_VELOCITY_GAMEUNITS_SEC :{DECIMAL}{NBSP}ruter/sek +STR_UNITS_VELOCITY_KNOTS :{DECIMAL}{NBSP}knop STR_UNITS_POWER_IMPERIAL :{DECIMAL}{NBSP}hk STR_UNITS_POWER_METRIC :{DECIMAL}{NBSP}hk STR_UNITS_POWER_SI :{DECIMAL}{NBSP}kW +STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hk/t +STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hk/t +STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}hk/Mg +STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hk/t +STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hk/t +STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}hk/Mg STR_UNITS_POWER_SI_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}kW/t +STR_UNITS_POWER_SI_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}kW/t +STR_UNITS_POWER_SI_TO_WEIGHT_SI :{DECIMAL}{NBSP}W/kg STR_UNITS_WEIGHT_SHORT_IMPERIAL :{DECIMAL}{NBSP}t STR_UNITS_WEIGHT_SHORT_METRIC :{DECIMAL}{NBSP}t @@ -230,13 +258,20 @@ STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m # Time units used in string control characters +STR_UNITS_DAYS :{COMMA}{NBSP}dag{P "" er} +STR_UNITS_SECONDS :{COMMA}{NBSP}sekund{P "" er} +STR_UNITS_TICKS :{COMMA}{NBSP}tikk +STR_UNITS_MONTHS :{NUM}{NBSP}måned{P "" er} +STR_UNITS_MINUTES :{NUM}{NBSP}minutt{P "" er} +STR_UNITS_YEARS :{NUM}{NBSP}år +STR_UNITS_PERIODS :{NUM}{NBSP}period{P "" er} # Common window strings -STR_LIST_FILTER_TITLE :{BLACK}Filterstreng: -STR_LIST_FILTER_OSKTITLE :{BLACK}Skriv inn søkefilter -STR_LIST_FILTER_TOOLTIP :{BLACK}Skriv inn et søkeord for å filtrere listen med +STR_LIST_FILTER_TITLE :{BLACK}Filter: +STR_LIST_FILTER_OSKTITLE :{BLACK}Skriv inn ett eller flere nøkkelord for å søkeord for å filtrere listen med +STR_LIST_FILTER_TOOLTIP :{BLACK}Skriv inn ett eller flere nøkkelord for å søkeord for å filtrere listen med STR_TOOLTIP_GROUP_ORDER :{BLACK}Velg grupperings-rekkefølge STR_TOOLTIP_SORT_ORDER :{BLACK}Velg sorteringsrekkefølge (synkende/stigende) @@ -298,7 +333,9 @@ STR_SORT_BY_TYPE :Type STR_SORT_BY_TRANSPORTED :Transportert STR_SORT_BY_NUMBER :Nummer STR_SORT_BY_PROFIT_LAST_YEAR :Fortjeneste i fjor +STR_SORT_BY_PROFIT_LAST_PERIOD :Fortjeneste forrige periode STR_SORT_BY_PROFIT_THIS_YEAR :Fortjeneste i år +STR_SORT_BY_PROFIT_THIS_PERIOD :Fortjeneste denne periode STR_SORT_BY_AGE :Alder STR_SORT_BY_RELIABILITY :Pålitelighet STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Total kapasitet per varetype @@ -326,9 +363,13 @@ STR_SORT_BY_POPULATION :Folketall STR_SORT_BY_RATING :Rangering STR_SORT_BY_NUM_VEHICLES :Antall kjøretøy STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Total profitt i fjor -STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Total profitt i år +STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD :Total fortjeneste forrige periode +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Total fortjeneste i år +STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Total fortjeneste denne perioden STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Gjennomsnittlig profitt i fjor +STR_SORT_BY_AVERAGE_PROFIT_LAST_PERIOD :Gjennomsnittlig fortjeneste forrige periode STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Gjennomsnittlig profitt i år +STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Gjennomsnittlig fortjeneste denne periode # Group by options for vehicle list STR_GROUP_BY_NONE :Ingen @@ -343,22 +384,22 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Åpne or STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Sett spillet på pause STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Dobbel hastighet på spillet STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Innstillinger -STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Lagre, avbryt spillet, avslutt OpenTTD -STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Vis kart, ekstra tilleggsvindu eller skiltliste -STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Vis byoversikt -STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Vis subsidier -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Vis liste over firmaets stasjoner -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Vis firmaenes økonomiske data -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Vis firmaenes generelle data -STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Vise historiebok -STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Vise målliste -STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Vis grafer -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Vis firmarangeringstabell -STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Finansier bygging av ny industri eller vis liste over industrier -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Vis gruppe- og kjøretøyliste over firmaets tog. Ctrl+klikk viser kun kjøretøyliste -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Vis gruppe- og kjøretøyliste over firmaets lastebiler/busser. Ctrl+klikk viser kun kjøretøyliste -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Vis gruppe- og kjøretøyliste over firmaets skip. Ctrl+klikk viser kun kjøretøyliste -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Vis gruppe- og kjøretøyliste over firmaets luftfartøy. Ctrl+klikk viser kun kjøretøyliste +STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Lagre, last eller avbryt spillet, avslutt program +STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Åpne kart, ekstra tilleggsvindu, vareflyt eller skiltliste +STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Åpne bykatalog eller grunnlegg by +STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Åpne subsidieliste +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Åpne liste over selskapets stasjoner +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Åpne selskapets økonomiske informasjon +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Åpne generell selskapsinformasjon +STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Åpne historiebok +STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Åpne målliste +STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Åpne selskapsgrafer og satser for varebetaling +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Åpne selskapsrangeringstabell +STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Åpne industrikatalog, industrikjede, eller finansier bygging av ny industri +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Åpne liste over selskapets tog. Ctrl+klikk for å vise eller skjule farkostgrupper, motsatt av valgt innstilling +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Åpne liste over selskapets kjøretøy. Ctrl+klikk for å vise eller skjule farkostgrupper, motsatt av valgt innstilling +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :Åpne liste over selskapets skip. Ctrl+klikk for å vise eller skjule farkostgrupper, motsatt av valgt innstilling +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Åpne liste over selskapets luftfartøy. Ctrl+klikk for å vise eller skjule farkostgrupper, motsatt av valgt innstilling STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Zoom inn STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Zoom ut STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Bygg jernbanespor @@ -379,15 +420,15 @@ STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Rediger STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Flytt startdatoen tilbake ett år STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Flytt startdatoen frem ett år STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Klikk her for å taste inn startåret -STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Vis kart og byoversikt -STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Landskapsgenerering +STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Åpne kart, ekstra tillegssvindu, tegnliste, eller by- eller industrikatalog +STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Åpne landskapsmeny eller generer en ny verden STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Bygenerering -STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industrigenerering -STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Veibygging +STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Bygg eller generer industrier +STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Bygg veiinfrastruktur STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Bygg trikkespor -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant trær. Shift slår av/på kostnadsestimat +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant trær. Ctrl+klikk+dra for å velge arealet diagonalt. Trykk også Shift for å bare vise kostnadsestimat STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Plasser skilt -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Plasser objekt. Shift slår av/på kostnadsestimat +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Plasser objekt. Ctrl+klikk+dra for å velge arealet diagonalt. Trykk også Shift for å bare vise kostnadsestimat # Scenario editor file menu ###length 7 @@ -403,8 +444,10 @@ STR_SCENEDIT_FILE_MENU_QUIT :Avslutt ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Spillinnstillinger STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Innstillinger -STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Innstillinger for spill-skript +STR_SETTINGS_MENU_AI_SETTINGS :KI-innstilinger +STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Innstillinger for Game Script STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-innstillinger +STR_SETTINGS_MENU_SANDBOX_OPTIONS :Sandkasseinnstillinger STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Instillinger for gjennomsiktighet STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Vis bynavn STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Vis stasjonsnavn @@ -484,6 +527,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Slett alle meld # About menu STR_ABOUT_MENU_LAND_BLOCK_INFO :Informasjon om landområde +STR_ABOUT_MENU_HELP :Hjelp og manualer STR_ABOUT_MENU_TOGGLE_CONSOLE :Vis/skjul konsoll STR_ABOUT_MENU_AI_DEBUG :AI/Spillskript-feilsøking STR_ABOUT_MENU_SCREENSHOT :Skjermbilde @@ -492,6 +536,7 @@ STR_ABOUT_MENU_ABOUT_OPENTTD :Om 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Spriteforskyver STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Vis/skjul markeringsramme STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Veksle mellom farger på skitne blokker +STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Vis/skjul modulomriss ###length 31 STR_DAY_NUMBER_1ST :1. @@ -568,8 +613,11 @@ STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Vareenhe STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Prestasjonsvurdering av firma (maks poeng=1000) STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Firmaverdier +STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Siste 72 minutter STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Varetakster +STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Dager underveis +STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Sekunder underveis STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Betaling for levering av ti vareenheter (eller 10,000 liter) over en avstand på 20 ruter STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Vis alle STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Skjul alle @@ -587,6 +635,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Klikk he # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Firmarangering STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' +STR_COMPANY_LEAGUE_COMPANY_RANK :{YELLOW}#{NUM} STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Ingeniør STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Trafikkleder STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Transportkoordinator @@ -618,7 +667,11 @@ STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Lån: STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Totalt: ###next-name-looks-similar +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}Antall farkoster som gikk med overskudd forrige år. Dette inkluderer kjøretøy, tog, skip og luftfartøy. +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Antall farkoster som gikk med overskudd forrige periode. Dette inkluderer kjøretøy, tog, skip og luftfartøy. STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Antall nylig betjente stasjonsdeler. Hver del av en stasjon (f.eks. togstasjon, bussholdeplass, flyplass) er medregnet, selv om de er tilkoblet en stasjon. +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}Inntekten til fartøyet med lavest inntekt (bare fartøy eldre enn to år er tatt med) +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}Inntekten til fartøyet med lavest inntekt (bare fartøy eldre enn to perioder er tatt med) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Inntekt i det kvartalet med minst fortjeneste de siste 12 kvartalene STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Inntekt i det kvartalet med størst fortjeneste de siste 12 kvartalene STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Vareenheter levert de siste fire kvartalene. @@ -673,6 +726,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klikk p STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klikk på et musikkspor for å fjerne det fra nåværende program (Gjelder bare egendefinert 1 og 2) # Highscore window +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Beste selskaper STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Forretningsmann STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Entreprenør @@ -765,6 +819,7 @@ STR_STATUSBAR_AUTOSAVE :{RED}AUTOLAGRIN STR_STATUSBAR_SAVING_GAME :{RED}* * LAGRER SPILL * * STR_STATUSBAR_SPECTATOR :{WHITE}(spectator) +STR_STATUSBAR_INFINITE_MONEY :{WHITE}(uendelig med penger) # News message history STR_MESSAGE_HISTORY :{WHITE}Meldingshistorikk @@ -849,6 +904,8 @@ STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} er veldig gammel, og bør byttes ut snarest STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} kan ikke finne en rute å fortsette på. STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} har kjørt seg vill +STR_NEWS_VEHICLE_UNPROFITABLE_YEAR :{WHITE}{VEHICLE}s fortjeneste forrige år var {CURRENCY_LONG} +STR_NEWS_VEHICLE_UNPROFITABLE_PERIOD :{WHITE}{VEHICLE}s fortjeneste forrige periode var {CURRENCY_LONG} STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} kan ikke kjøre til neste destinasjon fordi den er utenfor rekkevidde STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} stoppet fordi ombyggingsordre feilet @@ -860,12 +917,23 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ny{G "" STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Vis gruppe- og kjøretøyliste basert på kjøretøyets gruppe +STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}{STATION} aksepter ikke lengre: {CARGO_LIST} +STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION} aksepterer nå: {CARGO_LIST} STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Subsidietilbud har gått ut:{}{}{STRING} fra {STRING} til {STRING} vil ikke subsidieres. STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidie er trukket tilbake:{}{}Transport av {STRING} fra {STRING} til {STRING} subsidieres ikke lenger. +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subsidietilbud:{}{}Første transport av {STRING} fra {STRING} til {STRING} vil subsidieres av bystyret i {UNITS_YEARS_OR_MINUTES}! ###length 4 +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subsidie gitt til {STRING}!{}{}{STRING} fra {STRING} til {STRING} vil gi 50% ekstra betaling neste {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subsidie gitt til {STRING}!{}{}Transport av {STRING} fra {STRING} til {STRING} vil gi dobbel betaling det neste {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subsidie gitt til {STRING}!{}{}Transport av {STRING} fra {STRING} til {STRING} vil gi trippel betaling neste {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subsidie gitt til {STRING}!{}{}Transport av {STRING} fra {STRING} til {STRING} vil gi firedobbel betaling neste {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Trafikkaos i {TOWN}!{}{}Veibyggingsprogram finansiert av {STRING} fører til 6 måneder med elendighet for sjåfører! +STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}Trafikkaos i {TOWN}!{}{}Veibyggingsprogram finansiert av {STRING} fører til 6 minutter med elendighet for sjåfører! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transport monopol! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLACK}Lokale myndigheter i {TOWN} signerer kontrakt med {STRING} om 12 måneder med eksklusive transportrettigheter! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}Lokale myndigheter i {TOWN} signerer kontrakt med {STRING} om 12 minutter med eksklusive transportrettigheter! # Extra view window STR_EXTRA_VIEWPORT_TITLE :{WHITE}Tilleggsvindu {COMMA} @@ -877,13 +945,29 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}flytt pl # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Spillinnstillinger +STR_GAME_OPTIONS_TAB_GENERAL :Generelt +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Velg generelle innstillinger +STR_GAME_OPTIONS_TAB_GRAPHICS :Grafikk +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Velg grafikkinnstillinger +STR_GAME_OPTIONS_TAB_SOUND :Lyd +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Velg lyd- og musikkinnstillinger +STR_GAME_OPTIONS_TAB_SOCIAL :Sosial +STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}Velg sosiale integrasjonsinnstillinger +STR_GAME_OPTIONS_VOLUME :Volum STR_GAME_OPTIONS_SFX_VOLUME :Lydeffekter +STR_GAME_OPTIONS_MUSIC_VOLUME :Musikk +STR_GAME_OPTIONS_VOLUME_0 :0% +STR_GAME_OPTIONS_VOLUME_25 :25% +STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valutaenhet STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Velg valutaenhet som skal brukes +STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) ###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Britisk pund @@ -905,7 +989,7 @@ STR_GAME_OPTIONS_CURRENCY_ISK :Islandsk krone STR_GAME_OPTIONS_CURRENCY_ITL :Italiensk lire STR_GAME_OPTIONS_CURRENCY_NLG :Hollandsk guilder STR_GAME_OPTIONS_CURRENCY_NOK :Norsk krone -STR_GAME_OPTIONS_CURRENCY_PLN :Polsk złoty +STR_GAME_OPTIONS_CURRENCY_PLN :Polske złoty STR_GAME_OPTIONS_CURRENCY_RON :Rumensk leu STR_GAME_OPTIONS_CURRENCY_RUR :Russisk rubel STR_GAME_OPTIONS_CURRENCY_SIT :Slovensk tolar @@ -925,9 +1009,11 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Meksikansk peso STR_GAME_OPTIONS_CURRENCY_NTD :Ny Taiwan Dollar STR_GAME_OPTIONS_CURRENCY_CNY :Chinese Renminbi STR_GAME_OPTIONS_CURRENCY_HKD :Hong Kong Dollar -STR_GAME_OPTIONS_CURRENCY_INR :Indisk rupi (INR) +STR_GAME_OPTIONS_CURRENCY_INR :Indiske rupi STR_GAME_OPTIONS_CURRENCY_IDR :Indonesisk Rupi STR_GAME_OPTIONS_CURRENCY_MYR :Malaysisk Ringgit +STR_GAME_OPTIONS_CURRENCY_LVL :Latviske lats +STR_GAME_OPTIONS_CURRENCY_PTE :Portugisiske escudo STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Automatisk lagring STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Velg intervall for automatisk lagring @@ -935,6 +1021,10 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Velg int # Autosave dropdown ###length 5 STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Av +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_10_MINUTES :Hvert 10. minutt +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_30_MINUTES :Hvert 30. minutt +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES :Hvert 60. minutt +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :Hvert 120. minutt STR_GAME_OPTIONS_LANGUAGE :{BLACK}Språk STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Velg språk som skal brukes @@ -955,14 +1045,34 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Innstill STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Merk av i denne boksen for å v-synkronisere skjermen. Endring av innstillinger krever omstart av spillet. Fungerer bare med maskinvareakselerasjon aktivert +STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Aktiv driver: {STRING} +STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Grensesnittstørrelse +STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Dra for å endre grensesnittstørrelse. Ctrl+dra for kontinuerlig justering +STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Autodetekter størrelse +STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Kryss av denne knappen for å detektere grensesnittstørrelsen automatisk +STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Skaler faser +STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Kryss av denne knappen for å skalere faser med størrelsen på grensesnittet +STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Bruk tradisjonell sprite-skrift +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Kryss av denne knappen hvis du foretrekker den tradisjonelle sprite-skriften med fast størrelse. +STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Kantutjevning av skrift +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Kryss av denne knappen for å kantutjevne skalerbar skrift +STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x 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}Automatisert undersøkelse +STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Delta i automatisert undersøkelse +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Når aktivert, OpenTTD vi sende en undersøkelse når spillet forlates +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}Om undersøkelser og personvern +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Dette åpner en nettleser med mer informasjon om den automatiserte undersøkelsen +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Forhåndsvis undersøkelsesresultater +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Vis undersøkelsesresultatene fra det pågående spillet STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafikk @@ -972,20 +1082,32 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Oppdateringsfrekvens høyere enn 60Hz kan påvirke ytelsen. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Grafikksett -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Velg grafikksett som skal brukes +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Velg grafikksett som skal brukes (kan ikke endres inne i spillet, kun fra hovedmenyen) STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Tilleggsinformasjon om grafikksettet STR_GAME_OPTIONS_BASE_SFX :{BLACK}Lydsett -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Velg lydsett som skal brukes +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Velg lydsett som skal brukes (kan ikke endres inne i spillet, bare fra hovedmenyen) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Tilleggsinformasjon om lydsettet STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Musikksett STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Velg musikksett som skal brukes STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Ytterligere informasjon om det originale musikksettet +STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(ingen tillegg for integrere med sosiale plattformer er installert) +STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{BLACK}{STRING} ({STRING}) +STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :{BLACK}Plattform: +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Status for tilleggsmodul: +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_RUNNING :{GREEN}Kjører +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_FAILED :{RED}Kunne ikke initialisere +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_PLATFORM_NOT_RUNNING :{ORANGE}{STRING} kjører ikke +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNLOADED :{RED}Ikke lastet +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :{RED}Doblet tilleggsmodul +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNSUPPORTED_API :{RED}Ikke støttet versjon +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Ugyldig signatur +STR_BASESET_STATUS :{STRING} {RED}({NUM} manglende/korrupt{P "" e} fil{P "" er}) STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Mislyktes med å hente en liste over støttede oppløsninger STR_ERROR_FULLSCREEN_FAILED :{WHITE}Fullskjermmodus mislyktes @@ -998,6 +1120,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Reduser STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Øk valutaen din i forhold til ett pund (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Still inn valutakursen din i forhold til ett pund (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Skille: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Velg skille for din valuta STR_CURRENCY_PREFIX :{LTBLUE}Prefiks: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Velg prefiks for din valuta @@ -1079,9 +1203,10 @@ STR_TERRAIN_TYPE_CUSTOM :Egendefinert h STR_TERRAIN_TYPE_CUSTOM_VALUE :Egendefinert høyde ({NUM}) ###length 4 +STR_CITY_APPROVAL_LENIENT :Mild STR_CITY_APPROVAL_TOLERANT :Tolerant STR_CITY_APPROVAL_HOSTILE :Fiendtlig -STR_CITY_APPROVAL_PERMISSIVE :Ettergivende +STR_CITY_APPROVAL_PERMISSIVE :Tillatende (ingen betydning for selskapets handlinger) STR_WARNING_NO_SUITABLE_AI :{WHITE}Ingen egnet AI tilgjengelig...{}Du kan laste ned flere AIer fra nettet med spillets nedlastingssystem. @@ -1092,6 +1217,7 @@ STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Vis alle STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Skjul alle STR_CONFIG_SETTING_RESET_ALL :{BLACK}Tilbakestill alle verdier STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(ingen forklaring tilgjengelig) +STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{ORANGE}{STRING}{POP_COLOUR} STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Standard verdi: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Instillings type: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE_CLIENT :Klient innstilling (ikke lagret i lagringsfilene, påvirker alle spill) @@ -1145,11 +1271,16 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Venstre STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Midtstilt STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Høyre +STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}sekund{P 0 "" er} +STR_CONFIG_SETTING_INFINITE_MONEY :Uendelig med penger: {STRING} +STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Tillat uendelig pengebruk og ikke la selskaper gå konkurs STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimalt innledende lån: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Det maksimale beløp et selskap kan låne (uten å ta inflasjon i betraktning) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Det maksimale beløp et selskap kan låne (uten å ta inflasjon i betraktning). Hvis satt til "Ingen lån", vil ingen penger være tilgjengelig hvis ikke anskaffet av et Game Script eller innstillingen "Uendelig med penger". +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Ingen lån STR_CONFIG_SETTING_INTEREST_RATE :Lånerente: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lånerente; kontrollerer også inflasjonen, hvis aktivert @@ -1169,7 +1300,9 @@ STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Angi hvor mye s STR_CONFIG_SETTING_SUBSIDY_DURATION :Subsidiens varighet: {STRING} ###length 2 STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Angi antall år som subsidiet tildeles for +STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT_PERIODS :Angi antall perioder som subsidiet tildeles for +STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{UNITS_YEARS_OR_PERIODS} ###setting-zero-is-special STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Ingen subsidier @@ -1185,8 +1318,8 @@ STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Hvis aktivert, STR_CONFIG_SETTING_DISASTERS :Katastrofer: {STRING} STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Aktiver/inaktiver katastrofer som tidvis kan blokkere eller ødelegge kjøretøy og infrastruktur -STR_CONFIG_SETTING_CITY_APPROVAL :Bystyrets holdning til restrukturering av området: {STRING} -STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Velg hvor mye støy og miljøskader forårsaket av selskaper påvirker deres anseelse i byen og muligheter for ytterligere utbygging i nærområdet +STR_CONFIG_SETTING_CITY_APPROVAL :Lokale myndigheters holdning: {STRING} +STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Velg hvor mye støy og miljøskader forårsaket av selskaper påvirker deres anseelse i byen og muligheter for ytterligere utbygging i byen STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Karthøydegrense: {STRING} STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Still inn maksimal høyde på kartterrenget. Med "(auto)" vil en god verdi bli valgt etter terrenggenerering @@ -1267,9 +1400,11 @@ STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Til høyre ###length 2 STR_CONFIG_SETTING_SHOWFINANCES :Vis regnskap ved nyttår: {STRING} +STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Vis finansvindu ved slutten av perioden:{STRING} ###length 2 STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Hvis aktivert, spretter økonomivinduet opp på slutten av hvert år for å muliggjør en enkel inspeksjon av selskapets økonomiske status +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Hvis aktivert, spretter økonomivinduet opp på slutten av hvert periode for å muliggjør en enkel inspeksjon av selskapets økonomiske status STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Nye ordre er 'direkte' som standard: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalt vil et kjøretøy stoppe på alle stasjoner det passerer. Ved å aktivere denne innstillingen, vil det kjøre gjennom alle stasjoner på vei til sin endelige destinasjon uten å stoppe. Merk at denne innstillingen bare definerer en standardverdi for nye ordre. Individuelle ordre kan uansett settes til begge atferder @@ -1289,14 +1424,16 @@ STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Hovedvindu, bar STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Hovedvindu STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :alle tilleggsvindu -STR_CONFIG_SETTING_BRIBE :Tillat bestikkelser av bystyret: {STRING} +STR_CONFIG_SETTING_BRIBE :Tillat bestikkelser av lokale myndigheter: {STRING} ###length 2 STR_CONFIG_SETTING_BRIBE_HELPTEXT :Tillat firmaer å prøve å bestikke de lokale myndighetene i byen. Hvis bestikkelsen blir oppdaget av en inspektør, vil selskapet ikke være i stand til å gjøre forretninger i byen de neste seks månedene STR_CONFIG_SETTING_BRIBE_HELPTEXT.small :firma +STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :Tillat selskaper å prøve å bestikke de lokale myndighetene i byen. Hvis bestikkelsen blir oppdaget av en inspektør, vil selskapet ikke kunne gjøre forretninger i byen de neste seks minuttene STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Tillat kjøp av eksklusive transportrettigheter: {STRING} ###length 2 -STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Om et firma kjøper eksklusive transportrettigheter for en by, vil ikke motstandernes stasjoner motta varer eller passasjorer på ett år. +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Om et firma kjøper eksklusive transportrettigheter for en by, vil ikke motstandernes stasjoner motta varer eller passasjorer på tolv måneder +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT_MINUTES :Hvis et firma kjøper eksklusive transportrettigheter for en by, vil ikke motstandernes stasjoner (passasjerer og varer) motta noen varer i tolv minutter STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Tillat finansiering av bygninger: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Tillat firmaer å gi penger til byer til bygging av nye bygninger @@ -1321,6 +1458,8 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ingen* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Redusert STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normalt +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Tillat krysning i plan med veier og jernbaner eid av konkurrenter: {STRING} +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Tillat krysning i plan med veier og jernbaner eid av konkurrenter STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Tillat stoppesteder med gjennomkjøring på by-eide veier: {STRING} STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Tillat bygging av stoppesteder med gjennomkjøring på by-eide veier @@ -1331,10 +1470,11 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Det er i STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Vedlikehold av infrastruktur: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Når aktivert, medfører infrastruktur vedlikeholdskostnader. Kostnadene vokser over-proporsjonalt med nettverkets størrelse, og påvirker dermed større selskaper mer enn de små -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Startifarge for firmaet: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Velg startfarge for firmaet +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Startfarge for selskapet: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Velg startfarge for selskapet STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Oppstarsselskapets sekundære farge:{STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Velg sekundær startfarge for selskapet, hvis en NewGRF som tillater det er i bruk. STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Flyplasser utgår aldri: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Aktivering av denne innstillingen gjør at hver type flyplass forblir tilgjengelig for alltid etter at sin introduksjon @@ -1351,16 +1491,30 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :Alle kjøretøy STR_CONFIG_SETTING_WARN_INCOME_LESS :Advar hvis inntekten til et kjøretøy er negativ: {STRING} ###length 2 -STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Når aktivert, vil en nyhetsmelding vises når et kjøretøy ikke har tjent penger i løpet av ett kalenderår +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Når aktivert, vil en nyhetsmelding vises når et kjøretøy ikke har tjent penger i løpet av ett år +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Når aktivert, vil en nyhetsmelding vises når et kjøretøy ikke har tjent penger i løpet av en periode STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Kjøretøy utgår aldri: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Når aktivert, vil alle kjøretøysmodeller være tilgjengelig for alltid etter de introduseres +STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Tidtagning: {STRING} +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Velg enhet for tidtagning i spillet. Dette kan ikke endres seinere.{}{}Kalenderbasert er den klassiske OpenTTD-opplevelsen, med et år bestående av 12 måneder, hvor hver måned har 28-31 dager.{}{}Med veggurbasert tid, er vareproduksjon og økonomi i stedet basert på ett-minutts skritt, som er omtrent så lang tid som en 30-dags måned tar i kalenderbasert modus. Disse er gruppert i 12-minutters periode, tilsvarende et år i kalenderbasert modus.{}{}I begge moduser er det alltid en klassisk kalender, som brukes til introduksjonsdatoer for farkoster, hus og annen infrakstruktur. ###length 2 +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalender +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Veggur +STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutter per år: {STRING} +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Velg antall minutter i et kalenderår. Standard er 12 minutter. Sett til 0 for å hindre kalendertiden fra å endre seg. Denne innstillingen påvirker ikke økonomisimuleringen i spillet, og er kun tilgjengelig med veggur-tidtaking. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special +STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (frosset kalendertid) +STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Skaler en bys vareproduksjon: {STRING} +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Skaler vareproduksjonen i byer med denne prosenten: +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Skaler en industris vareproduksjon: {STRING} +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skaler vareproduksjonen til industrier med denne prosenten: +STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autoforny kjøretøy når det blir gammelt: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Når aktivert, blir et kjøretøy som nærmer seg slutten av sin levetid automatisk erstattet når betingelsene for fornyelse er oppfylt @@ -1391,6 +1545,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Linjebredde i g STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Vis NewGRF's navn i kjøretøysbyggevinduet: {STRING} STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Legg til en linje i bygg kjøretøy vinduet, som viser hvilken NewGRF det valgte kjøretøyet kommer fra. +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Vis varene kjøretøyene kan frakte i listevinduene {STRING} +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Hvis aktivert vil kjøretøyets last vises over i kjøretøylisten STR_CONFIG_SETTING_LANDSCAPE :Landskap: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landskap definerer grunnleggende spill-scenarier med forskjellige laster og byers vekstkrav. NewGRF og spill-skript tillater imidlertid finere kontroll @@ -1450,6 +1606,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Venstrekjøring STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Høyrekjøring STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Høydekartrotering: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Velg hvilken vei høydekartet er rotert for å passe inn i spillverdenen ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Mot klokka STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Med klokka @@ -1475,7 +1632,13 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Grønn STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Mørkegrønn STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Fiolett +STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Farger for vareflyt: {STRING} +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Velg farge for vareflyt. ###length 4 +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Grønn til rød (original) +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Grønn til blå +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :Grå til rød +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Gråtoner STR_CONFIG_SETTING_SCROLLMODE :Rulleoppførsel for vindu: {STRING} STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Oppførsel ved rulling av kart @@ -1536,7 +1699,9 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Av STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Lukk vinduet med høyreklikk: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Lukker et vindu ved å høyreklikke i det. Deaktiverer verktøytipset med høyreklikk! ###length 3 +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_NO :Nei STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES :Ja +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :Ja, unntatt klebrige STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Bruk {STRING} datoformat i navn på lagrede spill. STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Datoformat i lagrede spills filnavn @@ -1562,8 +1727,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Aktiver bruk av STR_CONFIG_SETTING_LOADING_INDICATORS :Bruk lastingsindikatorer: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Velg hvorvidt lasteindikatorer vises over kjøretøy som lastes eller losses +STR_CONFIG_SETTING_TIMETABLE_MODE :Tidsenhet for rutetabeller: {STRING} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Velg tidsenhet for rutetabeller ###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Dager STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Sekunder +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Tikk STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Vis ankomst og avgang i rutetabeller: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Vise forventede ankomst- og avgangstider i rutetabeller @@ -1601,9 +1770,11 @@ STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Spille av lyd v ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR :Utgangen av år: {STRING} +STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Slutt på periode: {STRING} ###length 2 -STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Spille av lydeffekt ved utgangen av et år som oppsummerer selskapets resultater i løpet av året i forhold til året før +STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Spill av lydeffekt ved utgangen av et år som oppsummerer selskapets resultater i løpet av året i forhold til året før +STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Spill av lydeffekt ved utgangen av en periode som oppsummerer selskapets resultater i løpet av perioden i forhold til forrige periode STR_CONFIG_SETTING_SOUND_CONFIRM :Konstruksjon: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Spille av lydeffekt ved fullførte konstruksjoner eller andre tiltak @@ -1671,6 +1842,8 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Deaktivert STR_CONFIG_SETTING_NOSERVICE :Deaktiver vedlikehold når havarier er slått av: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Når aktivert, vil kjøretøy ikke bli vedlikeholdt hvis de ikke kan bryte sammen +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Lastehastighet reduseres for tog som er lengre enn stasjonen:{STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Når aktivert vil tog som er for lange for stasjonen laste saktere enn tog som passer til stasjonen. Denne innstillingen påvirker ikke rutesøking. STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Aktiver fartsgrenser for vogner: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Når aktivert, brukes også fartsgrenser til vogner for å avgjøre den maksimale hastigheten til et tog @@ -1762,6 +1935,7 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Angi året når STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Bla gjennom signaltyper: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Velg hvilke signaltyper å gå gjennom når Ctrl+klikke på et bygd signal med signalverktøyet ###length 2 +STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :Kun gjeldende gruppe STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Alle synlige STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Vis signaltyper: {STRING} @@ -1860,6 +2034,9 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Innledende byst STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Gjennomsnittsstørrelse på (stor)byer i forhold til vanlige byer ved begynnelsen av spillet STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Oppdater distribusjonsgraf hvert {STRING} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tid mellom hver rekalkulering av lenkegrafen. Hver rekalkulering kalkulerer planene for en komponent på grafen. Dette betyr at verdi X for denne innstillingen ikke innebærer at hele grafen vil bli oppdatert hvert X sekund. Kun noen komponenter vil. Jo kortere du setter den, jo mer CPU-tid vil være nødvendig for å kalkulere den. Jo lenger du setter den, jo lenger vil det ta før varedistribusjonen kommer i gang på nye ruter. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Ta {STRING} for rekalkulering av distribusjonsgraf +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tid for hver rekalkulering av en komponent i lenkegrafen. Når en rekalkulering starter, opprettes en tråd som får kjøre et oppgitte antallet sekunder. Jo kortere du setter den, jo mer sannsynlig er det at tråden ikke er ferdig når den skal. Da stopper spille til det er ("lag"). Jo lenger du setter den, jo lenger tar det før distribusjonen blir oppdatert når ruter endres. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distribusjonsmodus for passasjerer: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"symmetrisk" betyr at omtrent like mange passasjerer vil reise fra stasjon A til stasjon B som omvendt (fra B til A). "asymmetrisk" betyr at et vilkårlig antall passasjerer vil reise i begge retninger. "manuelt" betyr at det ikke vil forekomme automatisk distribusjon for passasjerene @@ -1885,11 +2062,15 @@ STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Ved å sette de STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Metning av korte stier før man anvender rommelige stier: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Ofte er det flere stier mellom to gitte stasjoner. Varedistribusjons-algoritmen vil mette den korteste strekning først. Deretter vil den bruke den neste korteste veien inntil den er mettet, og så videre. Metning bestemmes ut fra en vurdering av kapasitet og planlagt bruk. Når den har mettet alle veier, vil den, hvis det fortsatt er etterspørsel, overbelaste alle veier, og foretrekke de med høy kapasitet. Algoritmen vil imidlertid ikke estimere kapasitet nøyaktig, mesteparten av tiden. Med denne innstillingen kan du angi opptil hvilken prosentandel en kortere sti må være metter før man velger en en lengre (ledig) sti. Sett denne til mindre enn 100% for å unngå overfylte stasjoner i tilfeller hvor kapasiteten overvurderes. -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Hastighetsenheter: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Hastighetsenheter (land): {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Hastighetsenheter (nautisk): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Når en hastighet vises i brukergrensesnittet, vise det i de valgte enheter STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Det britiske imperiets enhetssystem (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrisk (km/t) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_DAYS :Spillenheter (ruter/dag) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_SECS :Spillenheter (ruter/sek) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :Knop STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Kjøretøys effektenheter: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Når et kjøretøys effekt er vist i brukergrensesnittet, vise det i de valgte enheter @@ -1939,6 +2120,7 @@ STR_CONFIG_SETTING_ACCOUNTING :Regnskap STR_CONFIG_SETTING_VEHICLES :Kjøretøy STR_CONFIG_SETTING_VEHICLES_PHYSICS :Fysikk STR_CONFIG_SETTING_VEHICLES_ROUTING :Ruting +STR_CONFIG_SETTING_VEHICLES_ORDERS :Ordre STR_CONFIG_SETTING_LIMITATIONS :Begrensninger STR_CONFIG_SETTING_ACCIDENTS :Katastrofer / Ulykker STR_CONFIG_SETTING_GENWORLD :Verdensgenerering @@ -1948,6 +2130,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :Myndigheter STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :Byer STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Industrier STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Gods-distribusjon +STR_CONFIG_SETTING_ENVIRONMENT_TREES :Trær STR_CONFIG_SETTING_AI :Motstandere STR_CONFIG_SETTING_AI_NPC :Datamaskinstyrte spillere STR_CONFIG_SETTING_NETWORK :Nettverk @@ -1989,6 +2172,7 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Tildelin # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Feil med skjerminstillingene... STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... ingen kompatibel GPU funnet. Maskinvareakselerasjon deaktivert +STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... GPU-driveren krasjet spille. Maskinvareakselerasjon deaktivert # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -2002,10 +2186,12 @@ STR_INTRO_MULTIPLAYER :{BLACK}Flerspil STR_INTRO_GAME_OPTIONS :{BLACK}Spillinnstillinger STR_INTRO_HIGHSCORE :{BLACK}Tavle med høyeste poengsummer +STR_INTRO_HELP :{BLACK}Hjelp og manualer STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Innstillinger STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF-innstillinger STR_INTRO_ONLINE_CONTENT :{BLACK}Se etter innhold på nettet STR_INTRO_AI_SETTINGS :{BLACK}AI innstillinger +STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Game Script-innstillinger STR_INTRO_QUIT :{BLACK}Avslutt STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Start et nytt spill. Ctrl+klikk hopper over kartkonfigurering @@ -2020,12 +2206,14 @@ STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Velg sub STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Velg subtropisk miljø STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Velg leketøyland -STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Vis spillinnstillinger -STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Vise tavle over høyeste poengsummer -STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Vis innstillinger -STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Vis NewGRF-instillinger +STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Åpne spillinnstillinger +STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Åpne tabell med høyeste poengsummer +STR_INTRO_TOOLTIP_HELP :{BLACK}Få tilgang til dokumentasjon og ressurser på nettet +STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Åpne innstillinger +STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Åpne NewGRF-instillinger STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Se etter nytt og oppdatert innhold for nedlasting -STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Vis KI innstillinger +STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Åpne KI-innstillinger +STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Åpne Game Script-innstillinger STR_INTRO_TOOLTIP_QUIT :{BLACK}Avslutt 'OpenTTD' STR_INTRO_BASESET :{BLACK}Det valgte innebygde grafikksettet mangler {NUM} sprite{P "" r}. Se etter oppdateringer for settet. @@ -2043,9 +2231,20 @@ STR_ABANDON_GAME_QUERY :{YELLOW}Er du s STR_ABANDON_SCENARIO_QUERY :{YELLOW}Er du sikker på at du vil forlate dette scenariet? # Help window +STR_HELP_WINDOW_CAPTION :{WHITE}Hjelp og manualer +STR_HELP_WINDOW_WEBSITES :{BLACK}Nettsider +STR_HELP_WINDOW_DOCUMENTS :{BLACK}Dokumenter +STR_HELP_WINDOW_README :{BLACK}Hjelpefil +STR_HELP_WINDOW_CHANGELOG :{BLACK}Endringslogg +STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Kjente feil +STR_HELP_WINDOW_LICENSE :{BLACK}Lisens +STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD +STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Manual / Wiki +STR_HELP_WINDOW_BUGTRACKER :{BLACK}Rapporter en feil +STR_HELP_WINDOW_COMMUNITY :{BLACK}Fellesskap # Cheat window -STR_CHEATS :{WHITE}Juksekoder +STR_CHEATS :{WHITE}Sandkasseinnstillinger STR_CHEAT_MONEY :{LTBLUE}Øk pengebeholdningen med {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spiller som firma: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magisk bulldoser (fjern industrier, uflyttbare objekter): {ORANGE}{STRING} @@ -2056,6 +2255,7 @@ STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Rediger STR_CHEAT_CHANGE_DATE :{LTBLUE}Endre dato: {ORANGE} {DATE_SHORT} STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Endre nåværende år STR_CHEAT_SETUP_PROD :{LTBLUE}Tillat endring av produksjonsmengder: {ORANGE}{STRING} +STR_CHEAT_STATION_RATING :{LTBLUE}Lås stasjonsvurdering til 100%: {ORANGE}{STRING} # Livery window STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Firmafarge @@ -2065,9 +2265,17 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vis togf STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Vis kjøretøyfargetemaer STR_LIVERY_SHIP_TOOLTIP :{BLACK}Vis skipsfargetemaer STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Vis luftfartøyfargetemaer +STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Vis farger i toggrupper +STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Vis fargene til kjøretøygrupper +STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Vis fargene til skipsgrupper +STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Vis fargene til flygrupper STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Velg primærfarge for valgte tema. Ctrl+Klikk vil bruke denne fargen på alt STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Velg sekundærfarge for valgte tema. Ctrl+Klikk kommer til å bruke denne fargen for alle temaene. STR_LIVERY_PANEL_TOOLTIP :{BLACK}Velg fargetemaet du ønsker å endre, eller flere fargetemaer med Ctrl+klikk. Klikk på boksen for å vise bruken av fargetemaene +STR_LIVERY_TRAIN_GROUP_EMPTY :Ingen toggrupper satt opp +STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Ingen kjøretøygrupper er satt opp +STR_LIVERY_SHIP_GROUP_EMPTY :Ingen skipsgrupper er satt opp +STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Ingen flygupper er satt opp ###length 23 STR_LIVERY_DEFAULT :Standardfarger @@ -2173,6 +2381,9 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Kartstø STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Kartstørrelsen på spillet{}Klikk for å sortere på område STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Dato STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Gjeldende dato +STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}t {NUM}m +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}Spilletid +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}Tid spilt mens{}spillet ikke var pauset STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Språk, tjenerversjon, osv. STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Klikk på et spill i listen for å velge det @@ -2188,6 +2399,7 @@ STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Tjenera STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Invitasjonskode: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Startdato: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Nettverksdato: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Spilletid: {WHITE}{NUM}t {NUM}m STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Spillskript: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Passordbeskyttet! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}TJENEREN ER FRAKOBLET @@ -2288,6 +2500,8 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nytt firma) STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Opprett et nytt firma og bli med i det STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Dette er deg STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Dette er verten for spillet +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} klient{P "" er} / {NUM}{NUM} selskap{P et er} +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}Antall tilkoblede klienter for øyeblikket, antall selskaper og største antall selskaper tillatt av administrator # Matches ConnectionType ###length 5 @@ -2314,6 +2528,12 @@ STR_NETWORK_ASK_RELAY_NO :{BLACK}Nei STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Ja, denne STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Ja, ikke spør igjen +STR_NETWORK_ASK_SURVEY_CAPTION :Delta i automatisert undersøkelse? +STR_NETWORK_ASK_SURVEY_TEXT :Ønsker du å delta i den automatiserte undersøkelsen?{}OpenTTD vil overføre en undersøkelse når et spill forlates.{}Du kan endre dette når som helst under "Spillinnstillinger". +STR_NETWORK_ASK_SURVEY_PREVIEW :Forhåndsvis undersøkelsesresultater +STR_NETWORK_ASK_SURVEY_LINK :Om undersøkelser og personvern +STR_NETWORK_ASK_SURVEY_NO :Nei +STR_NETWORK_ASK_SURVEY_YES :Ja STR_NETWORK_SPECTATORS :Tilskuere @@ -2449,7 +2669,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK} Søk et STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Du forlater OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE} Vilkårene for nedlasting av innhold fra eksterne nettsider kan variere.{}Du må henvende deg til de eksterne nettstedene for instruksjoner om hvordan du installerer innholdet i OpenTTD.{}Vil du fortsette? STR_CONTENT_FILTER_TITLE :{BLACK}Merke/Navnefilter: -STR_CONTENT_OPEN_URL :{BLACK}Besøk hjemmeside +STR_CONTENT_OPEN_URL :{BLACK}Nettside STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Besøk hjemmesiden for dette innholdet STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Last ned STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Start nedlastningen av det merkede innholdet @@ -2520,6 +2740,7 @@ STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Gjennoms STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Gjennomsiktige broer. Ctrl+klikk for å låse STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Gjennomsiktige bygg som fyrtårn og antenner. Ctrl+klikk for å låse STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Gjennomsiktige kontaktledninger. Ctrl+klikk for å låse +STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Gjennomsiktig tekst for lasting, kostnad og inntekt. Ctrl+klikk for å låse STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Gjør objekter usynlige i stedet for gjennomsiktige # Linkgraph legend window @@ -2535,6 +2756,10 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}overbelastet # Linkgraph tooltip +STR_LINKGRAPH_STATS_TOOLTIP_MONTH :{BLACK}{CARGO_LONG} å transportere per måned fra {STATION} til {STATION} ({COMMA}% av kapasitet){STRING} +STR_LINKGRAPH_STATS_TOOLTIP_MINUTE :{BLACK}{CARGO_LONG} å transportere per minutt fra {STATION} til {STATION} ({COMMA}% av kapasitet){STRING} +STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} å transportere tilbake ({COMMA}% av kapasitet) +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Gjennomsnittlig reisetid: {UNITS_DAYS_OR_SECONDS} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Markering av dekningsområde @@ -2544,6 +2769,8 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Ikke mar STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Marker dekningsområdet til den foreslåtte plasseringen STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Godtar: {GOLD}{CARGO_LIST} STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Tilbyr: {GOLD}{CARGO_LIST} +STR_STATION_BUILD_INFRASTRUCTURE_COST_YEAR :{BLACK}Vedlikeholdskostnader: {GOLD}{CURRENCY_SHORT}/år +STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}Vedlikeholdskostnader: {GOLD}{CURRENCY_SHORT}/periode # Join station window STR_JOIN_STATION_CAPTION :{WHITE}Slå sammen stasjoner @@ -2562,12 +2789,12 @@ STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Bygg monorail STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Bygg maglev STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Bygg jernbanespor. Ctrl veksler mellom å bygge/fjerne. Shift slår av/på kostnadsestimat -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Bygg jernbane ved hjelp av autobanemodusen. Ctrl veksler mellom å bygge/fjerne. Shift slår av og på kostnadsestimat +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Bygg jernbanespor ved hjelp av autobanemodusen. Ctrl+klikk for å fjerne jernbanespor. Trykk også Shift for å vise kun kostnadsestimat STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Bygg togstall (trengs for å kjøpe og vedlikeholde tog). Shift slår av/på kostnadsestimat STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Gjør om jernbane til kontrollpunkt. Ctrl slår sammen kontrollpunkt. Shift slår av/på kostnadsestimat -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Bygg jernbanestasjon. Ctrl slår sammen stasjoner. Shift slår av/på kostnadsestimat +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Bygg jernbanestasjon. Ctrl+klikk for å velge en annen stasjon å slå sammen med. Trykk også Shift for å vise kun kostnadsestimat STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Bygg jernbanesignaler. Ctrl veksler mellom vingesignaler/lyssignaler{}Hold og dra for å bygge signaler langs en rett jernbanestrekning. Ctrl bygger signaler til det neste krysset eller signalet. Ctrl+klikk viser/skjuler signalvalgsvinduet. Shift bytter mellom bygging/vising av kostnadsestimat -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Bygg jernbanebro. Shift slår av/på kostnadsestimat +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Bygg jernbanebro. Trykk også Shift for å vise kun kostnadsestimat STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Bygg jernbanetunnel. Shift slår av/på kostnadsestimat STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Veksle mellom bygging/fjerning av jernbanespor, signaler, kontrollpunkt og stasjoner. Hold inne Ctrl for i tillegg å fjerne jernbanespor fra kontrollpunkt og stasjoner STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Konverter/oppgrader jernbanetypen. Shift slår av/på kostnadsestimat @@ -2599,8 +2826,11 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg en STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Velg en stasjonstype å vise STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Velg stasjonstypen du vil bygge -STR_STATION_CLASS_DFLT :Standard stasjon +STR_STATION_CLASS_DFLT :Standard +STR_STATION_CLASS_DFLT_STATION :Standard stasjon +STR_STATION_CLASS_DFLT_ROADSTOP :Standard veistans STR_STATION_CLASS_WAYP :Kontrollpunkter +STR_STATION_CLASS_WAYP_WAYPOINT :Standard veipunkt # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Signalvalg @@ -2626,6 +2856,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Øk sign STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Velg jernbanebrotype STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Velg veibrotype STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Brovalg - klikk på broen du vil ha for å bygge den. +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_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_BRIDGE_NAME_SUSPENSION_STEEL :Hengebro, stål STR_BRIDGE_NAME_GIRDER_STEEL :Bjelker, stål STR_BRIDGE_NAME_CANTILEVER_STEEL :Frittbærende, stål @@ -2639,21 +2873,21 @@ STR_BRIDGE_TUBULAR_SILICON :Hvelv, Silisium # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Bygg vei STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Bygg trikkespor -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Bygg vei. Ctrl veksler mellom å bygge/fjerne. Shift slår av/på kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Bygg trikkestasjon. Ctrl veksler mellom å bygge/fjerne. Shift slår av/på kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Bygg veiseksjon ved bruk av autoveimodusen. Ctrl veksler mellom å bygge/fjerne. Shift slår av/på kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Bygg trikkespor ved bruk av autotrikkespormodusen. Ctrl veksler mellom å bygge/fjerne. Shift slår av/på kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Bygg garasje (nødvendig for kjøp og vedlikehold av kjøretøy). Shift slår av/på kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Bygg vei. Ctrl+klikk for å fjerne vei. Trykk også Shift for å vise kun kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Bygg trikkespor. Ctrl+klikk for å fjerne trikkespor. Trykk også Shift for å vise kun kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Bygg vei ved bruk av autoveimodusen. Ctrl+klikk for å fjerne vei. Trykk også Shift for å vise kun kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Bygg trikkespor ved bruk av autotrikkespormodusen. Ctrl+klikk for å fjerne trikkespor. Trykk også Shift for å vise kun kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Bygg garasje (for kjøp og vedlikehold av kjøretøy). Trykk også Shift for å vise kun kostnadsestimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Bygg trikkestall (nødvendig for kjøp og vedlikehold av trikker). Shift slår av/på kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Bygg bussholdeplass. Ctrl slår sammen stasjoner. Shift slår av/på kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Bygg bussholdeplass. Ctrl+klikk for å velge en annen holdeplass å slå sammen med. Trykk også Shift for å vise kun kostnadsestimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Bygg trikkestasjon for passasjerer. Ctrl slår sammen stasjoner. Shift slår av/på kostnadsestimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Bygg lasteterminal. Ctrl slår sammen stasjoner. Shift slår av/på kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Bygg trikkestasjon for varer. Ctrl slår sammen stasjoner. Shift slår av/på kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Bygg trikkestopp for varer. Ctrl+klikk for å velge en annen stasjon å slå sammen med. Trykk også Shift for å vise kun kostnadsestimat STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Skru av/på enveiskjørte veier -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Bygg veibro. Shift slår av/på kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Bygg trikkesporbro. Shift slår av/på kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Bygg veitunnel. Shift slår av/på kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Bygg trikkesportunnel. Shift slår av/på kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Bygg veibro. Trykk også Shift for å vise kun kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Bygg trikkesporbro. Trykk også Shift for å vise kun kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Bygg veitunnel. Trykk også Shift for å vise kun kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Bygg trikkesportunnel. Trykk også Shift for å vise kun kostnadsestimat STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Veksle mellom bygging/fjerning for veibygging STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Veksle mellom bygging/fjerning for trikkesporkonstruksjon STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Konverter/oppgrader veitypen. Shift slår av/på kostnadsestimat @@ -2681,14 +2915,14 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Velg var # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Bygg vannveier STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Vannveier -STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Bygg kanaler. Shift slår av/på kostnadsestimat -STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Bygg sluser. Shift slår av/på kostnadsestimat -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Bygg skipsdokk (nødvendig for kjøp og vedlikehold av skip). Shift slår av/på kostnadsestimat -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Bygg havn. Ctrl slår sammen stasjoner. Shift slår av/på kostnadsestimat +STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Bygg kanaler. Trykk også Shift for å vise kun kostnadsestimat +STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Bygg sluser. Trykk også Shift for å vise kun kostnadsestimat +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Bygg skipsdokk (for kjøp og vedlikehold av skip). Trykk også Shift for å vise kun kostnadsestimat +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Bygg havn. Ctrl+klikk for å velge en annen havn å slå sammen med. Trykk også Shift for å vise kun kostnadsestimat STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Plasser en bøye, som kan brukes til å danne kontrollpunkter. Shift slår av/på kostnadsestimat -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Bygg akvedukt. Shift slår av/på kostnadsestimat -STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Definer vannområde.{}Lag en kanal, unntatt hvis Ctrl holdes nede på havnivå, hvorpå området rundt vil fylles istedenfor -STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Plasser elver. Ctrl velger området diagonalt +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Bygg akvedukt. Trykk også Shift for å vise kun kostnadsestimat +STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Bygg kanal. Ctrl+klikk på havnivå for å oversvømme med sjøvann i stedet +STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Plasser elver. Ctrl+klikk for å velge diagonalt # Ship depot construction window STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Skipsdokkens retning @@ -2699,7 +2933,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Havn # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Flyplasser -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Bygg flyplass. Ctrl slår sammen stasjoner. Shift slår av/på kostnadsestimat +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Bygg flyplass. Ctrl+klikk for å velge en annen flyplass å slå sammen med. Trykk også Shift for å vise kun kostnadsestimat # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Velg flyplasstype @@ -2733,7 +2967,7 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Kjøp la # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objektvalg -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Velg objekt å bygge. Shift slår av/på kostnadsestimat +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Velg objekt å bygge. Ctrl+klikk+dra for å velge arealet diagonalt. Trykk også Shift for å vise kun kostnadsestimat STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Velg objektstype du vil bygge STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Forhåndsvisning av objektet STR_OBJECT_BUILD_SIZE :{BLACK}Størrelse: {GOLD}{NUM} x {NUM} ruter @@ -2745,7 +2979,7 @@ STR_OBJECT_CLASS_TRNS :Radiosendere STR_PLANT_TREE_CAPTION :{WHITE}Trær STR_PLANT_TREE_TOOLTIP :{BLACK}Velg typen tre som skal plantes. Hvis feltet allerede har et tre, vil dette plante flere typer trær uavhengig av den valgte typen STR_TREES_RANDOM_TYPE :{BLACK}Trær av tilfeldig type -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plasser trær av tilfeldig type. Shift slår av/på kostnadsestimat +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plasser trær av tilfeldig type. Ctrl+klikk+dra for å velge areal diagonalt. Trykk også Shift for å vise kun kostnadsestimat STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Tilfeldige trær STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plasser trær tilfeldig i landskapet STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal @@ -2758,7 +2992,7 @@ STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plant st # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Landskapsgenerering STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Plasser steinete felt i landskapet -STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Definer ørkenområde.{}Hold inne Ctrl for å fjerne det +STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Definer ørkenområde.{}Ctrl+klikk for å fjerne ørkenområde STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Øk størrelse av landareal for heving/senking STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Reduser størrelse av landareal for heving/senking STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Generer tilfeldig landskap @@ -2778,6 +3012,7 @@ STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Grunnleg STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Mange tilfeldige byer STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Dekk kartet med tilfeldig plasserte byer STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Vis alle byer +STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}La alle byer vokse litt STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Navn på by: STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Skriv inn navn på by @@ -2810,7 +3045,7 @@ STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Dekk kar STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Opprett tilfeldig industrier STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Er du sikker på at du vil lage mange tilfeldige industrier? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Koster: {YELLOW}{CURRENCY_LONG} -STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Prospekt +STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Utvikle STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Bygg STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Finansier STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Fjern alle industrier @@ -2819,8 +3054,8 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Fjern al STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Er du sikker på at du vil fjerne alle industriene? # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industrikjede for {STRING} -STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Industrikjede for {STRING} +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industrikjede - {STRING} +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Varekjede - {STRING} STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Produserende industrier STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Aksepterende industrier STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Hus @@ -2837,7 +3072,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Velg ind # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Informasjon om landområde -STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Sentrer hovedvinduet på lokasjon. Ctrl+Klikk åpner et nytt tilleggsvindu på lokasjonen +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Sentrer hovedvinduet på lokasjon. Ctrl+Klikk for å åpne et nytt tilleggsvindu på rutelokasjonen STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Ryddingskostnad: {LTBLUE}Ikke tilgjengelig STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Ryddingskostnad: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Utbytte når ryddet: {LTBLUE}{CURRENCY_LONG} @@ -2848,7 +3083,9 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Eier av STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Eier av jernbanespor: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Bystyret: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ingen -STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Bygget: {LTBLUE}{DATE_LONG} +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinater: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Ruteindex: {LTBLUE}{NUM} ({HEX}) +STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Bygget/renovert: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stasjonstype: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stasjonstype: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Flyplasstype: {LTBLUE}{STRING} @@ -3055,11 +3292,15 @@ STR_MAPGEN_MAPSIZE :{BLACK}Kartstø STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Velg størrelsen på kartet i ruter. Antall tilgjengelige ruter vil være litt mindre STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Antall byer: +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Velg tettheten av byer, eller et fritt tall STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Bynavn: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Velg nasjonalitet på bynavn STR_MAPGEN_DATE :{BLACK}Dato: +STR_MAPGEN_DATE_TOOLTIP :{BLACK}Velg startdato STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Antall industrier: +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Velg tettheten av industrier, eller et fritt tall STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Høyeste fjelltopp: +STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Velg den høyeste toppen spillet vil forsøke å opprette, målt i høyde over havnivå STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Øk den maksimale høyden på den høyeste fjelltoppen på kartet med en STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Reduser den maksimale høyden på den høyeste fjelltoppen med en STR_MAPGEN_SNOW_COVERAGE :{BLACK}Snødekning @@ -3072,10 +3313,18 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Reduser STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Terrengtype: STR_MAPGEN_SEA_LEVEL :{BLACK}Havnivå: +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Velg havnivået STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Elver: STR_MAPGEN_SMOOTHNESS :{BLACK}Jevnhet: STR_MAPGEN_VARIETY :{BLACK}Variasjonsspredning: STR_MAPGEN_GENERATE :{WHITE}Generer +STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Opprett verdenen og spill OpenTTD! +STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF-innstillinger +STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Åpne NewGRF-innstillinger +STR_MAPGEN_AI_SETTINGS :{BLACK}KI-innstillinger +STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Åpne KI-innstillinger +STR_MAPGEN_GS_SETTINGS :{BLACK}Game Script-innstillinger +STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Åpne Game Script-innstillinger ###length 21 STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Engelsk (Original) @@ -3102,6 +3351,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Katalansk # Strings for map borders at game generation STR_MAPGEN_BORDER_TYPE :{BLACK}Kartkanter: +STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Velg spillverdenens grenser STR_MAPGEN_NORTHWEST :{BLACK}Nordvest STR_MAPGEN_NORTHEAST :{BLACK}Nordøst STR_MAPGEN_SOUTHEAST :{BLACK}Sørøst @@ -3114,7 +3364,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manuell STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Høydekartrotering: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Høydekartnavn: +STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}Navnet til høydekartfilen STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Størrelse: +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}Størrelsen på høydekartet. For beste resultat, bør hver kant stemme med en tilgjengelig lengde for kartkanter i OpenTTD, som 256, 512, 1024, osv. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Valgt fjelltopphøyde @@ -3129,6 +3381,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Flatt la STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Generer et flatt landskap STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Tilfeldig landskap STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Høyde på flatt land: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Velg høyden til landet over havnivå STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Flytt høyden på flatt land ett nivå ned STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Flytt høyden på flatt land ett nivå opp @@ -3215,6 +3468,7 @@ STR_SAVE_PRESET_SAVE :{BLACK}Lagre STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Lagre forhåndsinnstillingen med det valgte navnet # NewGRF parameters window +STR_BASEGRF_PARAMETERS_CAPTION :{WHITE}Endre grunnleggende grafikkparametre STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Endre NewGRF-parametre STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Lukk STR_NEWGRF_PARAMETERS_RESET :{BLACK}Tilbakestill @@ -3231,6 +3485,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Inspiser STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} ved {HEX} STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Objekt STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Jernbanetype +STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Veitype STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF-variabel 60+x parameter (heksadesimal) @@ -3246,6 +3501,8 @@ STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Forhånd STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Flytt på ikonet for å endre X- og Y-forskyvningene. Ctrl+klikk for å flytte ikonet åtte enheter om gangen ###length 2 +STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Offset sentrert +STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sentrert sprite STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Trådkors @@ -3263,13 +3520,15 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Advarsel: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Feil: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{STRING} +STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}NewGRF-en "{STRING}" har returnert en fatal feil:{}{STRING} +STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF-en "{STRING}" har returnert en feil:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} virker ikke med TTDPatch-versjonen som er rapportert av OpenTTD -STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} er for versjon {STRING} av TTD +STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} er for versjon {2:STRING} av TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} er laget for bruk med {STRING} -STR_NEWGRF_ERROR_INVALID_PARAMETER :Ugyldig parameter for {1:STRING}: parameter {STRING} ({NUM}) -STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} må lastes inn før {STRING}. -STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} må lastes inn etter {STRING}. -STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} krever OpenTTD versjon {STRING} eller nyere +STR_NEWGRF_ERROR_INVALID_PARAMETER :Ugyldig parameter for {1:STRING}: parameter {2:STRING} ({3:NUM}) +STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} må lastes inn før {2:STRING}. +STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} må lastes inn etter {2:STRING}. +STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} krever OpenTTD versjon {2:STRING} eller nyere STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF-filen den var laget for å oversette STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :For mange NewGRF-er er innlastet STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Å laste inn {1:STRING} som statisk NewGRF med {STRING} kan forårsake synkroniseringsfeil @@ -3360,16 +3619,19 @@ STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Storby) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Innbyggertall: {ORANGE}{COMMA}{BLACK} Antall hus: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} siste måned: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}{CARGO_LIST} forrige minutt: {ORANGE}{COMMA}{BLACK} maks: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Varebehov for byvekst: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} påkrevd STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} nødvendig om vinteren STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} levert STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (fortsatt nødvendig) STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (levert) +STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Byen vokser hver {ORANGE}{UNITS_DAYS_OR_SECONDS} +STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Byen vokser hver {ORANGE}{UNITS_DAYS_OR_SECONDS} (finansiert) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Byen vokser {RED}ikke{BLACK} STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Flystøy: {ORANGE}{COMMA}{BLACK} støygrense: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Gå til by. Ctrl+klikk åpner et nytt tilleggsvindu over byen -STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Bystyre +STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Lokale myndigheter STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Vis informasjon om bystyret STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Endre navn på byen @@ -3405,8 +3667,12 @@ STR_LOCAL_AUTHORITY_ACTION_BRIBE :Bestikk bystyre STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Start en liten lokal reklamekampanje for å tiltrekke deg flere passasjerer og mer varer til dine transporttjenester.{}Gir en midlertidig økning til stasjonsvurderingen i en liten radius rundt bysentrum.{}Kostnad: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Start en middels stor lokal reklamekampanje for å tiltrekke deg flere passasjerer og mer varer til dine transporttjenester.{}Gir en midlertidig økning til stasjonsvurderingen i en liten radius rundt bysentrum.{}Kostnad: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Start en stor lokal reklamekampanje for å tiltrekke deg flere passasjerer og mer varer til dine transporttjenester.{}Gir et midlertidig økning til stasjonsvurderingen i stor radius rundt bysentrum.{}Kostnad: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Finansier urbant veibyggingsprogram.{}Gir betydelige forstyrrelser i veitrafikken i opptil 6 måneder.{}{POP_COLOUR}Kostnad: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}Finansier urbant veibyggingsprogram.{}Gir betydelige forstyrrelser i veitrafikken i opptil 6 minutter.{}{POP_COLOUR}Kostnad: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Bygg en statue for å ære firmaet.{}Gir en permanent økning i stasjonens rangering i denne byen.{}Kostnad: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Finansier byggingen av nye kommersielle bygninger i byen.{}Gir en midlertidig økning for veksten i denne byen.{}Kostnad: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Kjøp eksklusive transportrettigheter i byen for 12 måneder.{}Byens myndigheter vil ikke la passasjerer og varer bruke dine konkurrenters stasjoner. En vellykket bestikkelse fra en konkurrent vil bryte denne kontrakten.{}{POP_COLOUR}Kostnad: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Kjøp eksklusive transportrettigheter i byen for 12 minutter.{}Byens myndigheter vil ikke la passasjerer og varer bruke dine konkurrenters stasjoner. En vellykket bestikkelse fra en konkurrent vil bryte denne kontrakten.{}{POP_COLOUR}Kostnad: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Du kan bestikke bystyret for å forbedre vurderingen av firmaet ditt, men du risikerer å bli bøtelagt hvis du blir oppdaget.{}Kostnad: {CURRENCY_LONG} # Goal window @@ -3453,9 +3719,15 @@ STR_GOAL_QUESTION_BUTTON_CLOSE :Lukk # Subsidies window STR_SUBSIDIES_CAPTION :{WHITE}Subsidier STR_SUBSIDIES_OFFERED_TITLE :{BLACK}Subsidietilbud: +STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING} fra {STRING} til {STRING}{YELLOW} ({STRING}) STR_SUBSIDIES_NONE :{ORANGE}- Ingen - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Tjenester som allerede subsidieres: +STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} fra {STRING} til {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikk for å gå til industri/by. Ctrl+klikk åpner et nytt tilleggsvindu over industrien/byen +STR_SUBSIDIES_OFFERED_EXPIRY_DATE :innen {DATE_SHORT} +STR_SUBSIDIES_OFFERED_EXPIRY_TIME :i løpet av {UNITS_MONTHS_OR_MINUTES} +STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :til {DATE_SHORT} +STR_SUBSIDIES_SUBSIDISED_EXPIRY_TIME :{UNITS_MONTHS_OR_MINUTES} gjenstår # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Historiebok @@ -3478,6 +3750,13 @@ STR_STATION_LIST_STATION :{YELLOW}{STATIO STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- Ingen - STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Velg alle anlegg +STR_STATION_LIST_CARGO_FILTER_ALL_AND_NO_RATING :Alle varetyper og ingen vurdering +STR_STATION_LIST_CARGO_FILTER_MULTIPLE :Flere varetyper +STR_STATION_LIST_CARGO_FILTER_NO_CARGO_TYPES :Ingen varetyper +STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :Bare ingen varevurdering +STR_STATION_LIST_CARGO_FILTER_SELECT_ALL :Velg alle og ingen vurdering +STR_STATION_LIST_CARGO_FILTER_NO_RATING :Ingen varevurdering +STR_STATION_LIST_CARGO_FILTER_EXPAND :Vis mer... # Station view window STR_STATION_VIEW_CAPTION :{WHITE}{STATION} {STATION_FEATURES} @@ -3493,6 +3772,8 @@ STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPAN STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Vurderinger STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Vis stasjonsvurdering +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MONTH :{BLACK}Tilførsel per måned og lokal vurdering: +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MINUTE :{BLACK}Tilførsel per minutt og lokal vurdering: STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) STR_STATION_VIEW_GROUP :{BLACK}Gruppér etter @@ -3545,7 +3826,7 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Hindre f STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Gå til kontrollpunkt. Ctrl+klikk åpner et nytt tilleggsvindu over kontrollpunktet STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Endre kontrollpunktets navn -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Midtjuster hovedvinduet på bøyens lokalisasjon. Ctrl+Klikk åpner et nytt tilleggsvindu over bøyens lokalisasjon +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Sentrer hovedvinduet på bøyens lokasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på bøyens lokasjon STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Endre navn på bøye STR_EDIT_WAYPOINT_NAME :{WHITE}Endre navn på kontrollpunkt @@ -3553,30 +3834,46 @@ STR_EDIT_WAYPOINT_NAME :{WHITE}Endre na # Finances window STR_FINANCES_CAPTION :{WHITE}{COMPANY}s regnskap{BLACK}{COMPANY_NUM} STR_FINANCES_YEAR :{WHITE}{NUM} +STR_FINANCES_YEAR_CAPTION :{WHITE}År +STR_FINANCES_PERIOD_CAPTION :{WHITE}Periode ###length 3 +STR_FINANCES_REVENUE_TITLE :{WHITE}Omsetning +STR_FINANCES_OPERATING_EXPENSES_TITLE :{WHITE}Driftskostnader +STR_FINANCES_CAPITAL_EXPENSES_TITLE :{WHITE}Kapitalkostnader ###length 13 STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Konstruksjon STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Nye kjøretøy -STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Driftskostnader for tog -STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Driftskostnader for kjøretøy -STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Driftskostnader for luftfartøy -STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Driftskostnader for skip +STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Tog +STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Kjøretøy +STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Luftfartøy +STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Skip +STR_FINANCES_SECTION_INFRASTRUCTURE :{GOLD}Infrastruktur +STR_FINANCES_SECTION_TRAIN_REVENUE :{GOLD}Tog +STR_FINANCES_SECTION_ROAD_VEHICLE_REVENUE :{GOLD}Kjøretøy +STR_FINANCES_SECTION_AIRCRAFT_REVENUE :{GOLD}Luftfartøy +STR_FINANCES_SECTION_SHIP_REVENUE :{GOLD}Skip STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Renter STR_FINANCES_SECTION_OTHER :{GOLD}Annet -STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG} -STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG} +STR_FINANCES_TOTAL_CAPTION :{WHITE}Totalt +STR_FINANCES_NEGATIVE_INCOME :-{CURRENCY_LONG} +STR_FINANCES_ZERO_INCOME :{CURRENCY_LONG} +STR_FINANCES_POSITIVE_INCOME :+{CURRENCY_LONG} +STR_FINANCES_PROFIT :{WHITE}Profitt STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Saldo +STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Egne midler STR_FINANCES_LOAN_TITLE :{WHITE}Lån +STR_FINANCES_INTEREST_RATE :{WHITE}Lånerenter: {BLACK}{NUM}% STR_FINANCES_MAX_LOAN :{WHITE}Maks lån: {BLACK}{CURRENCY_LONG} STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} +STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG} STR_FINANCES_BORROW_BUTTON :{BLACK}Lån ({CURRENCY_LONG}) -STR_FINANCES_BORROW_TOOLTIP :{BLACK}Øk størrelsen på lånet. Ctrl+klikk tar opp maks lån +STR_FINANCES_BORROW_TOOLTIP :{BLACK}Øk størrelsen på lånet. Ctrl+klikk for å låne så mye som mulig STR_FINANCES_REPAY_BUTTON :{BLACK}Betal tilbake ({CURRENCY_LONG}) -STR_FINANCES_REPAY_TOOLTIP :{BLACK}Betal tilbake en del av lånet. Ctrl+klikk betaler ned så mye som mulig. +STR_FINANCES_REPAY_TOOLTIP :{BLACK}Betal tilbake en del av lånet. Ctrl+klikk fo å betale ned så mye som mulig STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Infrastruktur # Company view @@ -3584,7 +3881,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Sjef) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Grunnlagt: {WHITE}{NUM} -STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Firmafarge: +STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Selskapsfarge: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Kjøretøy: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} tog STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} kjøretøy @@ -3610,12 +3907,13 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detaljer STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Vis detaljert infrastrukturtelling STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Gi penger STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Gi penger til dette firmaet +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Fientlig overtakelse STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Gjør en fiendtlig overtagelse av dette selskapet STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nytt ansikt STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Velg nytt ansikt på sjefen -STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Firmafarge -STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Endre firmafarge +STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Selskapsfarge +STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Endre selskapsfarge STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Firmanavn STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}Endre firmanavn STR_COMPANY_VIEW_PRESIDENT_NAME_BUTTON :{BLACK}Sjefens navn @@ -3626,6 +3924,7 @@ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Sjefens navn STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Skriv inn hvor mye penger du vil gi STR_BUY_COMPANY_MESSAGE :{WHITE}Vi ser etter et transportfirma som er villig til å overta oss.{}{}Vil du kjøpe {COMPANY} for {CURRENCY_LONG}? +STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}I en fiendtlig overtakelse av {COMPANY} vil du kjøpe alle eiendelen, betale ned alle lån, og betale to års utbytte.{}{}Totalt estimert til {CURRENCY_LONG}.{}{}Ønsker du å fortsette denne fiendtlige overtakelsen? # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastrukturen til {COMPANY} @@ -3638,6 +3937,8 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanaler STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stasjoner: STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Stasjonsruter STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Flyplasser +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR :{WHITE}{CURRENCY_LONG}/år +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD :{WHITE}{CURRENCY_LONG}/periode # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrier @@ -3657,6 +3958,7 @@ STR_INDUSTRY_DIRECTORY_FILTER_NONE :Ingen # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produksjon forrige måned: +STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produksjon forrige minutt: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% transportert) STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Gå til industri. Ctrl+klikk åpner et nytt tilleggsvindu over industrien STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksjonsnivå: {YELLOW}{COMMA}% @@ -3667,7 +3969,7 @@ STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produser STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Krever: -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} venter{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}Endre produksjon (multiplum av 8, opptil 2040) @@ -3696,7 +3998,11 @@ STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Administ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Send instruksjoner til alle kjøretøy i denne listen STR_VEHICLE_LIST_REPLACE_VEHICLES :Bytt ut kjøretøy STR_VEHICLE_LIST_SEND_FOR_SERVICING :Send til vedlikehold +STR_VEHICLE_LIST_CREATE_GROUP :Lag gruppe STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Fortjeneste i år: {CURRENCY_LONG} (i fjor: {CURRENCY_LONG}) +STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{TINY_FONT}{BLACK}Profitt denne perioden: {CURRENCY_LONG} (forrige periode: {CURRENCY_LONG}) +STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] +STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Send til togstallen STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Send til garasjen @@ -3728,7 +4034,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupper STR_GROUP_CREATE_TOOLTIP :{BLACK}Klikk for å opprette en gruppe STR_GROUP_DELETE_TOOLTIP :{BLACK}Fjern den valgte gruppen STR_GROUP_RENAME_TOOLTIP :{BLACK}Gi nytt navn på den valgte gruppen -STR_GROUP_LIVERY_TOOLTIP :{BLACK}Endre firmafarger for valgt gruppe +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Endre design for den valgte gruppen STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klikk for å beskytte denne gruppen fra global autoerstatning. Ctrl+klikk for å også beskytte undergrupper STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Slette gruppe @@ -3739,8 +4045,10 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Fjern alle kjø STR_GROUP_RENAME_CAPTION :{BLACK}Endre navn på gruppe -STR_GROUP_PROFIT_THIS_YEAR :Profitt i år: -STR_GROUP_PROFIT_LAST_YEAR :Profitt i fjor: +STR_GROUP_PROFIT_THIS_YEAR :Fortjeneste i år: +STR_GROUP_PROFIT_THIS_PERIOD :Profitt denne periode: +STR_GROUP_PROFIT_LAST_YEAR :Fortjeneste i fjor: +STR_GROUP_PROFIT_LAST_PERIOD :Fortjeneste forrige periode: STR_GROUP_OCCUPANCY :Gjeldende bruk: STR_GROUP_OCCUPANCY_VALUE :{NUM} % @@ -3767,6 +4075,8 @@ STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Hastighe STR_PURCHASE_INFO_SPEED :{BLACK}Hastighet: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Hastighet på havet: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Hastighet på kanal/elv: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_RUNNINGCOST_YEAR :{BLACK}Driftskostnader: {GOLD}{CURRENCY_LONG}/år +STR_PURCHASE_INFO_RUNNINGCOST_PERIOD :{BLACK}Driftskostnader: {GOLD}{CURRENCY_LONG}/periode STR_PURCHASE_INFO_CAPACITY :{BLACK}Kapasitet: {GOLD}{CARGO_LONG} {STRING} STR_PURCHASE_INFO_REFITTABLE :(ombyggbart) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Designet: {GOLD}{NUM}{BLACK} Levetid: {GOLD}{COMMA} år @@ -3789,6 +4099,8 @@ STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Flytype: ###length 3 STR_CARGO_TYPE_FILTER_ALL :Alle cargo typer +STR_CARGO_TYPE_FILTER_FREIGHT :Frakt +STR_CARGO_TYPE_FILTER_NONE :Ingen ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Liste over tog/vogner - klikk på tog/vogn for mer informasjon. Ctrl+klikk for å skjule/vise denne typen @@ -3918,7 +4230,7 @@ STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Dette vi ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Midtjuster hovedvinduet på togstallens lokalisasjon. Ctrl+Klikk åpner et nytt tilleggsvindu over togstallens lokalisasjon STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Midtjuster hovedvinduet på vegkjøretøyets garasje lokalisasjon. Dobbelklikk for å følge kjøretøyet i hovedvinduet. Ctrl+Klikk åpner et nytt tilleggsvindu over vegkjøretøyets garasje lokalisasjon -STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Midtjuster hovedvinduet på skipsdokken lokalisasjon. Ctrl+Klikk åpner et nytt tilleggsvindu over skipsdokkens lokalisasjon +STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Midtjuster hovedvinduet på skipsdokkens lokasjon. Dobbelklikk for å følge skipet i hovedvinduet. Ctrl+klikk åpner et nytt tilleggsvindu over skipsdokkens lokasjon STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Midtjuster hovedvinduet på hangar lokalisasjon. Ctrl+Klikk åpner et nytt tilleggsvindu over hangarens lokalisasjon ###length VEHICLE_TYPES @@ -3957,6 +4269,18 @@ STR_ENGINE_PREVIEW_TRAM_VEHICLE :trikkekjøretø STR_ENGINE_PREVIEW_AIRCRAFT :{G=neuter}luftfartøy STR_ENGINE_PREVIEW_SHIP :{G=neuter}skip +STR_ENGINE_PREVIEW_TEXT3 :{BLACK}{STRING}{}{5:STRING}{}{STRING} +STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING}{}{STRING}{}{STRING}{}{STRING} +STR_ENGINE_PREVIEW_COST_WEIGHT :Kostnad: {CURRENCY_LONG} Vekt: {WEIGHT_SHORT} +STR_ENGINE_PREVIEW_COST_MAX_SPEED :Kostnad: {CURRENCY_LONG} Topphastighet: {VELOCITY} +STR_ENGINE_PREVIEW_SPEED_POWER :Hastighet: {VELOCITY} Kraft: {POWER} +STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Hastighet: {VELOCITY} Kraft: {POWER} Maks. TK.: {FORCE} +STR_ENGINE_PREVIEW_TYPE :Flytype: {STRING} +STR_ENGINE_PREVIEW_TYPE_RANGE :Flytype: {STRING} Rekkevidde: {COMMA} ruter +STR_ENGINE_PREVIEW_RUNCOST_YEAR :Running Cost: {CURRENCY_LONG}/år +STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Driftskostnader: {CURRENCY_LONG}/periode +STR_ENGINE_PREVIEW_CAPACITY :Kapasitet: {CARGO_LONG} +STR_ENGINE_PREVIEW_CAPACITY_2 :Kapasitet: {CARGO_LONG}, {CARGO_LONG} # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Erstatte {STRING} - {STRING} @@ -4016,13 +4340,13 @@ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Midtjuster hovedvinduet på togets lokalisasjon. Dobbelklikk for å følge toget i hovedvinduet. Ctrl+Klikk åpner et nytt tilleggsvindu over togets lokalisasjon STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Midtjuster hovedvinduet på kjøretøyets lokalisasjon. Dobbelklikk for å følge kjøretøyet i hovedvinduet. Ctrl+Klikk åpner et nytt tilleggsvindu over kjøretøyets lokalisasjon STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Midtjuster hovedvinduet på skipets lokalisasjon. Dobbelklikk for å følge skipet i hovedvinduet. Ctrl+Klikk åpner et nytt tilleggsvindu over skipets lokalisasjon -STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Midtjuster hovedvinduet på flyets lokalisasjon. Dobbelklikk for å følge flyet i hovedvinduet. Ctrl+Klikk åpner et nytt tilleggsvindu over flyets lokalisasjon +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Midtjuster hovedvinduet på flyets lokasjon. Dobbelklikk for å følge flyet i hovedvinduet. Ctrl+klikk åpner et nytt tilleggsvindu over flyet lokasjon ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send toget til en togstall. Ctrl+klikk for kun å utføre vedlikehold -STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send kjøretøyet til en garasje. Ctrl+klikk for kun å utføre vedlikehold -STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send skipet til en skipsdokk. Ctrl+klikk for kun å utføre vedlikehold -STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send luftfartøyet til en hangar. Ctrl+klikk for kun å utføre vedlikehold +STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send toget til en togstall. Ctrl+klikk for kun vedlikehold +STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send kjøretøyet til en garasje. Ctrl+klikk for kun vedlikehold +STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send skipet til en skipsdokk. Ctrl+klikk for kun vedlikehold +STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send luftfartøyet til en hangar. Ctrl+klikk for kun vedlikehold ###length VEHICLE_TYPES STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Dette vil skape en kopi av toget, inkludert alle vognene. Ctrl+klikk vil sørge for delte ordre. Shift+klikk viser estimert kostnad @@ -4062,24 +4386,26 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Valgt lu # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Laster / Losser STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Forlater +STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Venter på å dele STR_VEHICLE_STATUS_CRASHED :{RED}Krasjet! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Havarert STR_VEHICLE_STATUS_STOPPED :{RED}Stoppet -STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Stopper, {VELOCITY} +STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}{VELOCITY} - Stopper STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Ingen strøm STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Venter på ledig rute STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}For langt til neste destinasjon -STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}På vei til {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Ingen ordre, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Har kurs mot {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}På vei til {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Vedlikehold ved {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - På vei til {0:STATION} +STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Ingen ordre +STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Har kurs mot {0:WAYPOINT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - På vei til {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} Vedlikehold ved {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Del og vedlikehold ved {0:DEPOT} -STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}Kan ikke nå {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}Kan ikke nå {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}Kan ikke nå {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}Kan ikke nå {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - Kan ikke nå {0:STATION} +STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Kan ikke nå {0:WAYPOINT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Kan ikke nå {0:DEPOT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Kan ikke nå {0:DEPOT} # Vehicle stopped/started animations ###length 2 @@ -4101,7 +4427,8 @@ STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Navngi l STR_VEHICLE_INFO_AGE :{COMMA} år ({COMMA}) STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} år ({COMMA}) -STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Alder: {LTBLUE}{STRING}{BLACK} Driftskostnader: {LTBLUE}{CURRENCY_LONG}/år +STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Alder: {LTBLUE}{STRING}{BLACK} Driftskostnader: {LTBLUE}{CURRENCY_LONG}/år +STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Alder: {LTBLUE}{STRING}{BLACK} Driftskostnader: {LTBLUE}{CURRENCY_LONG}/periode STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Topphastighet: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Topphastighet: {LTBLUE}{VELOCITY} {BLACK}Flytype: {LTBLUE}{STRING} @@ -4110,6 +4437,9 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Vekt: {L STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Vekt: {LTBLUE}{WEIGHT_SHORT} {BLACK}Kraft: {LTBLUE}{POWER}{BLACK} Topphastighet: {LTBLUE}{VELOCITY} {BLACK}Maks trekkraft: {LTBLUE}{FORCE} STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Fortjeneste i år: {LTBLUE}{CURRENCY_LONG} (i fjor: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Fortjeneste dette år: {LTBLUE}{CURRENCY_LONG} (forrige år: {CURRENCY_LONG}) {BLACK}Min. ytelse: {LTBLUE}{POWER_TO_WEIGHT} +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Profitt denne perioden: {LTBLUE}{CURRENCY_LONG} (forrige periode: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Profitt denne perioden: {LTBLUE}{CURRENCY_LONG} (forrige periode: {CURRENCY_LONG}) {BLACK}Minste ytelse: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Pålitelighet: {LTBLUE}{COMMA}{NBSP}% {BLACK}Havarier siden siste vedlikehold: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY_LONG} @@ -4120,9 +4450,22 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kapasite STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Overføringskreditt: {LTBLUE}{CURRENCY_LONG} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Vedlikeholdsintervall: {LTBLUE}{COMMA}{NBSP}dager{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Vedlikeholdsintervall: {LTBLUE}{COMMA}{NBSP}minutter{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Vedlikeholdsintervall: {LTBLUE}{COMMA}{NBSP}%{BLACK} {STRING} +STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Forrige vedlikehold: {LTBLUE}{DATE_LONG} +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Forrige vedlikehold: {LTBLUE}{NUM} minutter siden +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Øk vedlikeholdsintervall med 10 dager. Ctrl+klikk for å øke vedlikeholdsintervall med 5 dager +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Reduser vedlikeholdsintervall med 5 minutter. Ctrl+klikk for å øke vedlikeholdsintervall med 1 minutt +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Øk vedlikeholdsintervall med 10 prosent. Ctrl+klikk for å øke vedlikeholdsintervall med 5 prosent +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Reduser vedlikeholdsintervall med 10 dager. Ctrl+klikk for å redusere vedlikeholdsintervall med 5 dager +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Reduser vedlikeholdsintervall med 5 minutt. Ctrl+klikk for å redusere vedlikeholdsintervall med 1 minutt +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Reduser vedlikeholdsintervall med 10 prosent. Ctrl+klikk for å redusere vedlikeholdsintervall med 5 prosent STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Enhet for vedlikeholdsintervall STR_VEHICLE_DETAILS_DEFAULT :Standard +STR_VEHICLE_DETAILS_DAYS :Dager +STR_VEHICLE_DETAILS_MINUTES :Minutter STR_VEHICLE_DETAILS_PERCENT :Prosentandel ###length VEHICLE_TYPES @@ -4136,8 +4479,8 @@ STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE :{LTBLUE}{ENGINE STR_VEHICLE_DETAILS_TRAIN_WAGON_VALUE :{LTBLUE}{ENGINE}{BLACK} Verdi: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_TEXT :{BLACK}Total varekapasitet på dette toget: -STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY :{LTBLUE}- {CARGO_LONG} ({CARGO_SHORT}) -STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_MULT :{LTBLUE}- {CARGO_LONG} ({CARGO_SHORT}) (x{NUM}) +STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY :{LTBLUE}{CARGO_LONG} ({CARGO_SHORT}) +STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_MULT :{LTBLUE}{CARGO_LONG} ({CARGO_SHORT}) (x{NUM}) STR_VEHICLE_DETAILS_CARGO_EMPTY :{LTBLUE}Tom STR_VEHICLE_DETAILS_CARGO_FROM :{LTBLUE}{CARGO_LONG} fra {STATION} @@ -4188,6 +4531,7 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Skift ti STR_ORDERS_LIST_TOOLTIP :{BLACK}Ordreliste - klikk på en ordre for å markere den. Ctrl+klikk viser ordrens endestasjon STR_ORDER_INDEX :{COMMA}:{NBSP} +STR_ORDER_TEXT :{STRING} {STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Slutt på ordre - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Slutt på delte ordre - - @@ -4224,9 +4568,14 @@ STR_ORDER_DROP_REFIT_AUTO_ANY :Tilgjengelig va STR_ORDER_DROP_GO_ALWAYS_DEPOT :Alltid gå STR_ORDER_DROP_SERVICE_DEPOT :Vedlikehold ved behov STR_ORDER_DROP_HALT_DEPOT :Stopp +STR_ORDER_DROP_UNBUNCH :Del # Depot action tooltips, one per vehicle type ###length VEHICLE_TYPES +STR_ORDER_TRAIN_DEPOT_ACTION_TOOLTIP :{BLACK}Velg hvilken handling å foreta i denne togstallen +STR_ORDER_ROAD_DEPOT_ACTION_TOOLTIP :{BLACK}Velg hvilken handling å foreta i denne garasjen +STR_ORDER_SHIP_DEPOT_ACTION_TOOLTIP :{BLACK}Velg hvilken handling å foreta i denne skipsdokken +STR_ORDER_HANGAR_ACTION_TOOLTIP :{BLACK}Velg hvilken handling å foreta i denne hangaren ###next-name-looks-similar STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Kjøretøydata å basere hopp på @@ -4296,6 +4645,7 @@ STR_ORDER_REFIT_ORDER :(Bygg om til {S STR_ORDER_REFIT_STOP_ORDER :(Bygg om til {STRING} og stopp) STR_ORDER_STOP_ORDER :(Stopp) +STR_ORDER_WAIT_TO_UNBUNCH :(vent på å dele) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Kan ikke bruke stasjon){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4373,31 +4723,40 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Dette kj STR_TIMETABLE_STATUS_LATE :{BLACK}Dette kjøretøyet er {STRING} for sent ute STR_TIMETABLE_STATUS_EARLY :{BLACK}Dette kjøretøyet er {STRING} for tidlig ute STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Denne rutetabellen har ikke blitt startet ennå +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Denne rutetabellen vill starte {STRING} +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Denne rutetabellen vil starte om {COMMA} sekunder +STR_TIMETABLE_START :{BLACK}Start rutetabell +STR_TIMETABLE_START_TOOLTIP :{BLACK}Velg når denne rutetabellen starter. Ctrl+klikk for å distribuere start av alle farkoster som deler denne ordren basert på deres innbyrdes rekkefølge jevnt, hvis ordren er fullstendig beskrevet i rutetabellen +STR_TIMETABLE_START_SECONDS_QUERY :Sekunder til rutetabellen starter STR_TIMETABLE_CHANGE_TIME :{BLACK}Endre tid -STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Endre varigheten for den merkede ordren +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Endre hvor lang tid den merkede ordren skal ta. Ctrl+klikk for å sette tiden for alle ordre STR_TIMETABLE_CLEAR_TIME :{BLACK}Nullstill tid -STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Fjern varigheten for den merkede ordren +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Fjern varigheten for den merkede ordren. Ctrl+klikk for å fjerne varigheten for alle ordre STR_TIMETABLE_CHANGE_SPEED :{BLACK}Endre fartsgrense -STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Endre maks reisehastighet for den merkede ordren +STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Endre største reisehastighet for den merkede ordren. Ctrl+klikk for å sette hastigheten for alle ordre STR_TIMETABLE_CLEAR_SPEED :{BLACK}Fjern fartsgrense -STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Fjern maks reisehastighet for den merkede ordren +STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Fjern største reisehastighet for den merkede ordren. Ctrl+klikk for å fjerne hastigheten for alle ordre STR_TIMETABLE_RESET_LATENESS :{BLACK}Nullstill senhetsteller -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Nullstill senhetstelleren slik at kjøretøyet ankommer i tide +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Nullstill senhetstelleren slik at farkosten ankommer i tide. Ctrl+klikk for å nullstille hele gruppen så den siste farkosten ankommer i tid og alle andre vil være tidlig ute STR_TIMETABLE_AUTOFILL :{BLACK}Fyll automatisk -STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fyll ut rutetabellen automatisk med verdiene fra neste tur (Ctrl+klikk for å prøve å beholde ventetider) +STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fyll ut rutetabellen automatisk med verdiene fra neste tur Ctrl+klikk for å prøve å beholde ventetider STR_TIMETABLE_EXPECTED :{BLACK}Ventet STR_TIMETABLE_SCHEDULED :{BLACK}Planlagt STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Veksle mellom forventet og planlagt +STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} sek +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :D: {COLOUR}{COMMA} sek # Date window (for timetable) @@ -4425,21 +4784,25 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Skriftfo STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Veksle mellom skriftformgjenkjennelse ved sammenligning av AI-loggbeskjeder mot bruddstrengen STR_AI_DEBUG_CONTINUE :{BLACK}Fortsett STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Slå av pause og fortsett AIen -STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Vis feilsøkingsresultater fra denne AIen +STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Vis feilsøkningsresultater fra denne KI-en. Ctrl+klikk for å åpne i et nytt vindu STR_AI_GAME_SCRIPT :{BLACK}Spillskript -STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Sjekk spillskriptloggen +STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Sjekk "Game Script"-loggen. Ctrl+klikk for å åpne i et nytt vindu -STR_ERROR_AI_NO_AI_FOUND :Ingen passende AI ble funnet.{}Denne AIen er en plassholder og vil ikke gjøre noe.{}Du kan laste ned flere AIer fra nettet med spillets nedlastingssystem. +STR_ERROR_AI_NO_AI_FOUND :Fant ingen passende KI.{}Denne KI-en er en plassholder og vil ikke gjøre noe.{}Du kan laste ned flere KI-er via spillets system for nedlastning av innhold. STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Et skript krasjet. Vennligst rapporter dette til skript-forfatteren med et skjermbilde av AI/Spillskript feilsøkingsvinduet STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI/Spillskript-feilsøkingsvindu er kun tilgjengelig for tjeneren # AI configuration window +STR_AI_CONFIG_CAPTION_AI :{WHITE}KI-innstillinger +STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Game Script-innstillinger STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Spillskriptet som vil bli lastet i neste spill STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AI-ene som vil bli lastet i neste spill STR_AI_CONFIG_HUMAN_PLAYER :Menneskelig spiller STR_AI_CONFIG_RANDOM_AI :Tilfeldig AI STR_AI_CONFIG_NONE :(ingen) +STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM} STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Maks antall motstandere: {ORANGE}{COMMA} +STR_AI_CONFIG_COMPETITORS_INTERVAL :{LTBLUE}Intervall mellom start av konkurrenter: {ORANGE}{COMMA} minutt{P "" er} STR_AI_CONFIG_MOVE_UP :{BLACK}Flytt opp STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Flytt valgte AI oppover i listen @@ -4447,11 +4810,12 @@ STR_AI_CONFIG_MOVE_DOWN :{BLACK}Flytt ne STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Flytt valgte AI nedover i listen STR_AI_CONFIG_GAMESCRIPT :{SILVER}Spillskript +STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Parametre STR_AI_CONFIG_AI :{SILVER}AI-er -STR_AI_CONFIG_CHANGE_AI :AI -STR_AI_CONFIG_CHANGE_GAMESCRIPT :Spillskript -STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Last enda et skript +STR_AI_CONFIG_CHANGE_AI :{BLACK}Velg KI +STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Velg Game Script +STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Last enda et skript. Ctrl+klikk for å vise alle tilgjengelige versjoner STR_AI_CONFIG_CONFIGURE :{BLACK}Konfigurer STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Konfigurer skriptparametrene @@ -4479,22 +4843,34 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Høydeka STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Oversiktskart skjermbilde # Script Parameters +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametre STR_AI_SETTINGS_CAPTION_AI :AI +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script STR_AI_SETTINGS_CLOSE :{BLACK}Lukk STR_AI_SETTINGS_RESET :{BLACK}Tilbakestill STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} # Textfile window +STR_TEXTFILE_JUMPLIST :{WHITE}Innholdsfortegnelse +STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}Hopp raskt til en seksjon i den viste filen med denne listen +STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING} +STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Gå tilbake i navigasjonshistorikken +STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Gå fremover igjen i navigasjonshistorikken STR_TEXTFILE_WRAP_TEXT :{WHITE}Bryt teksten STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Bryt teksten i vinduet så alt passer uten å måtte skrolle -STR_TEXTFILE_VIEW_README :{BLACK}Se på hjelpefilen +STR_TEXTFILE_VIEW_README :{BLACK}Hjelpefil +STR_TEXTFILE_VIEW_README_TOOLTIP :Vis hjelpefil for dette innholdet STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Endringslogg +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Vis endringslogg for dette innholdet STR_TEXTFILE_VIEW_LICENCE :{BLACK}Lisens +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Vis lisensen for dette innholdet ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} hjelpefil til {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} endringslogg til {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} lisens til {STRING} +STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Forhåndsvis undersøkelsesresultater +STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}OpenTTD-dokument '{STRING}' # Vehicle loading indicators @@ -4638,6 +5014,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... for STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Kan ikke generere industrier... STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Kan ikke bygge {STRING} her... STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Kan ikke bygge denne typen industri her... +STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Kan ikke utvikle industri... STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... for nærme en annen industri STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... må grunnlegge en by først STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}...{NBSP}kun én tillates per by @@ -4652,6 +5029,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... skog STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... kan kun bygges over snøgrensen STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... kan kun bygges under snøgrensen +STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}Finansieringen mislyktes på grunn av uflaks; prøv igjen +STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Det var ingen passende steder å utvikle denne industrien STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Det var ingen egnede steder for '{STRING}' bransjer STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Endre parametrene for kart-generering for å få et bedre kart @@ -4736,6 +5115,11 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Kan ikke STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Feil type garasje/stall/hangar/dokk # Depot unbunching related errors +STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... kan bare ha én deleordre +STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... kan ikke bruke full last-ordre når farkost har en deleordre +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... kan ikke dele et kjøretøy med en full last-ordre +STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... kan ikke bruke ordre med betingelser når farkost har en deleordre +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... kan ikke dele et kjøretøy med en betinget ordre # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} er for langt etter utskiftning @@ -4821,6 +5205,7 @@ STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Objekt e STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... firmaets hovedkontor er i veien STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Kan ikke kjøpe dette landområdet... STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... du eier det allerede! +STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}... nådd grense for byggetiltak # Group related errors STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Kan ikke opprette gruppe... @@ -4893,6 +5278,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Kan ikke STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}...{NBSP}kjøretøy er ødelagt +STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... alle kjøretøy er ikke identiske STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Ingen kjøretøyer vil være tilgjengelig i det hele tatt STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Endre din NewGRF konfigurasjon @@ -4920,6 +5306,8 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Kan ikke STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... kjøretøyet kan ikke nå alle stasjoner STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... kjøretøyet kan ikke gå til den stasjonen STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... et kjøretøy som deler denne ordren kan ikke gå til den stasjonen +STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... ikke alle kjøretøyene har like ordre +STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... Alle farkoster deler ikke ordre STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Kan ikke dele ordreliste... STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Kan ikke stoppe deling av ordreliste... @@ -4928,11 +5316,25 @@ STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}...{NBSP STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... luftfartøy har ikke stor nok rekkevidde # Extra messages which go on the third line of errors, explaining why orders failed +STR_ERROR_NO_RAIL_STATION :{WHITE}Det finnes ingen jernbanestasjon +STR_ERROR_NO_BUS_STATION :{WHITE}Det finnes ingen busstasjon +STR_ERROR_NO_TRUCK_STATION :{WHITE}Det finnes ingen lasteterminal +STR_ERROR_NO_DOCK :{WHITE}Det finnes ingen havn +STR_ERROR_NO_AIRPORT :{WHITE}Det finnes ingen lufthavn +STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Det er ingen holdeplasser med en kompatibel veitype +STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Det er ingen holdeplasser med en kompatibel trikketype +STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Det er ingen holdeplasser som egner seg for leddede kjøretøy{}Leddede kjøretøy krever holdeplasser med gjennomkjøring +STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Dette flyet kan ikke lande på denne helikopterplassen +STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Dette helikopteret kan ikke lande på denne flyplassen +STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Det finnes ingen jernbaneveipunkt +STR_ERROR_NO_BUOY :{WHITE}Det finnes ingen bøye # Timetable related errors STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Kan ikke gi kjøretøyet rutetabell... STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Kjøretøy kan bare vente på stasjoner STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Dette kjøretøyet stopper ikke på denne stasjonen. +STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... rutetabell er ufullstendig +STR_ERROR_TIMETABLE_NOT_STARTED :{WHITE}... rutetabellen har ikke startet ennå # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... for mange skilt @@ -5378,6 +5780,7 @@ STR_UNKNOWN_STATION :ukjent stasjon STR_DEFAULT_SIGN_NAME :Skilt STR_COMPANY_SOMEONE :noen +STR_SAVEGAME_DURATION_REALTIME :{NUM}t {NUM}m STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING} STR_SAVEGAME_NAME_SPECTATOR :Tilskuer, {1:STRING} @@ -5411,19 +5814,27 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}mill +STR_CURRENCY_SHORT_GIGA :{NBSP}mrd +STR_CURRENCY_SHORT_TERA :{NBSP}bn 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} STR_JUST_DATE_LONG :{DATE_LONG} STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} +STR_JUST_STRING1 :{STRING} +STR_JUST_STRING2 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/polish.txt b/src/lang/polish.txt index a4b23e843a..f02052db39 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1391,6 +1391,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Rupia Indyjska STR_GAME_OPTIONS_CURRENCY_IDR :Rupia Indonezyjska STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit malezyjski STR_GAME_OPTIONS_CURRENCY_LVL :Łat łotewski +STR_GAME_OPTIONS_CURRENCY_PTE :Escudo portugalskie STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Autozapis STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Częstotliwość automatycznego zapisu stanu gry diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index f5b2cc021c..5988e5a729 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1012,6 +1012,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Rupia Indiana STR_GAME_OPTIONS_CURRENCY_IDR :Rupia Indonésia STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit da Malásia STR_GAME_OPTIONS_CURRENCY_LVL :Lats da Letónia +STR_GAME_OPTIONS_CURRENCY_PTE :Escudo Português STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Guardar automaticamente STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Seleccionar o intervalo para guardar automático diff --git a/src/lang/russian.txt b/src/lang/russian.txt index cf98c89848..7912ea9ad1 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1156,6 +1156,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Индийск STR_GAME_OPTIONS_CURRENCY_IDR :Индонезийская рупия STR_GAME_OPTIONS_CURRENCY_MYR :Малайзийский ринггит STR_GAME_OPTIONS_CURRENCY_LVL :Латвийский лат +STR_GAME_OPTIONS_CURRENCY_PTE :Португальский эскудо STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Автосохранение STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Интервал автосохранения игры diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index de7b981f10..4fe54e4c1c 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1144,7 +1144,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Izbor va STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Britanska funta STR_GAME_OPTIONS_CURRENCY_USD :Dolar STR_GAME_OPTIONS_CURRENCY_EUR :Evro diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index c982e25420..c5d886e0dc 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1011,6 +1011,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :印度卢布 STR_GAME_OPTIONS_CURRENCY_IDR :印尼盾 STR_GAME_OPTIONS_CURRENCY_MYR :马来西亚林吉特 STR_GAME_OPTIONS_CURRENCY_LVL :拉脱维亚拉特 +STR_GAME_OPTIONS_CURRENCY_PTE :葡萄牙埃斯库多 STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}自动保存 STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}选择自动保存的周期 diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index ac75db1024..9fd72d21ac 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -213,6 +213,8 @@ STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :與主色調相 STR_UNITS_VELOCITY_IMPERIAL :{DECIMAL}{NBSP}英里/小時 STR_UNITS_VELOCITY_METRIC :{DECIMAL}{NBSP}公里/小時 STR_UNITS_VELOCITY_SI :{DECIMAL}{NBSP}米/秒 +STR_UNITS_VELOCITY_GAMEUNITS_DAY :{DECIMAL}{NBSP}格/日 +STR_UNITS_VELOCITY_GAMEUNITS_SEC :{DECIMAL}{NBSP}格/秒 STR_UNITS_VELOCITY_KNOTS :{DECIMAL}{NBSP}節 STR_UNITS_POWER_IMPERIAL :{DECIMAL}{NBSP}匹 @@ -254,8 +256,15 @@ STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}公尺 # Time units used in string control characters +STR_UNITS_DAYS :{COMMA}{NBSP}日 +STR_UNITS_SECONDS :{COMMA}{NBSP}秒 +STR_UNITS_TICKS :{COMMA}{NBSP}刻 +STR_UNITS_MONTHS :{NUM}{NBSP}個月 +STR_UNITS_MINUTES :{NUM}{NBSP}分 +STR_UNITS_YEARS :{NUM}{NBSP}年 +STR_UNITS_PERIODS :{NUM}{NBSP}個週期 # Common window strings STR_LIST_FILTER_TITLE :{BLACK}篩選: @@ -350,9 +359,13 @@ STR_SORT_BY_POPULATION :人口 STR_SORT_BY_RATING :評價 STR_SORT_BY_NUM_VEHICLES :車輛數量 STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :去年總盈利 +STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD :上期總盈利 STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :今年總盈利 +STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :本期總盈利 STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :去年平均盈利 +STR_SORT_BY_AVERAGE_PROFIT_LAST_PERIOD :上期平均盈利 STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :今年平均盈利 +STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :本期平均盈利 # Group by options for vehicle list STR_GROUP_BY_NONE :無 @@ -613,6 +626,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}點選 # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}公司排行榜 STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' +STR_COMPANY_LEAGUE_COMPANY_RANK :{YELLOW}#{NUM} STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :維修技工 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :交通管制員 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :運輸管理師 @@ -791,6 +805,7 @@ STR_STATUSBAR_AUTOSAVE :{RED}自動儲 STR_STATUSBAR_SAVING_GAME :{RED}* * 遊戲儲存中 * * STR_STATUSBAR_SPECTATOR :{WHITE}旁觀者 +STR_STATUSBAR_INFINITE_MONEY :{WHITE}(無限) # News message history STR_MESSAGE_HISTORY :{WHITE}訊息記錄 @@ -908,6 +923,9 @@ STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}選擇 STR_GAME_OPTIONS_TAB_GRAPHICS :圖形集 STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}選擇圖形設定 STR_GAME_OPTIONS_TAB_SOUND :音效 +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}選擇音效及音樂設定 +STR_GAME_OPTIONS_TAB_SOCIAL :社交 +STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}選擇社交插件設定 STR_GAME_OPTIONS_VOLUME :音量 STR_GAME_OPTIONS_SFX_VOLUME :音效 @@ -924,7 +942,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}選擇 STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :英鎊 STR_GAME_OPTIONS_CURRENCY_USD :美元 STR_GAME_OPTIONS_CURRENCY_EUR :歐元 @@ -1008,6 +1026,10 @@ STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}勾選 STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}縮放邊框 STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}勾選此方框以令邊框隨界面大小而縮放 +STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}使用傳統點陣式字體 +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}勾選此方框以使用固定大小的傳統點陣式字體。 +STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}反鋸齒字體 +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}勾選此方框以使用反鋸齒字體。 STR_GAME_OPTIONS_GUI_SCALE_1X :1倍 STR_GAME_OPTIONS_GUI_SCALE_2X :2倍 @@ -1204,6 +1226,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :靠右 STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}秒 +STR_CONFIG_SETTING_INFINITE_MONEY :無限資金: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :最大貸款額:{STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :公司最多可借多少錢(此設定的值排除了通貨膨脹因素)。 @@ -1421,6 +1444,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :如啟用此選 ###setting-zero-is-special +STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :車輛達到使用年限時自動更新:{STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :如啟用此選項,所有在符合替換條件時進入維修設施的車輛會被替換。 @@ -1631,7 +1655,10 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :啟用可以為 STR_CONFIG_SETTING_LOADING_INDICATORS :使用裝載進度指示:{STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :選擇是否在車輛裝卸的時候顯示裝載狀況。 +STR_CONFIG_SETTING_TIMETABLE_MODE :時刻表使用的時間單位:{STRING} ###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :日 +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :秒 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :顯示時刻表排定的到離時間:{STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :在時刻表上顯示預料的到站、出發時間。 @@ -2013,10 +2040,12 @@ STR_CONFIG_SETTING_LIMITATIONS :遊戲限制 STR_CONFIG_SETTING_ACCIDENTS :災難/事故 STR_CONFIG_SETTING_GENWORLD :地圖的產生 STR_CONFIG_SETTING_ENVIRONMENT :環境 +STR_CONFIG_SETTING_ENVIRONMENT_TIME :時間 STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :地方政府 STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :市鎮 STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :工業 STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :貨物分配 +STR_CONFIG_SETTING_ENVIRONMENT_TREES :樹木 STR_CONFIG_SETTING_AI :競爭對手 STR_CONFIG_SETTING_AI_NPC :電腦玩家 STR_CONFIG_SETTING_NETWORK :網路 @@ -2147,9 +2176,11 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}顯示 STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}顯示車輛配色 STR_LIVERY_SHIP_TOOLTIP :{BLACK}顯示船舶配色 STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}顯示飛機配色 +STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}顯示列車群組的配色 STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}選擇所選配色的主色調。如按住 Ctrl 鍵點選色調,則所有配色皆採用此顏色為主色調 STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}選擇所選配色的副色調。如按住 Ctrl 掣點選色調,則所有配色皆採用此顏色為副色調 STR_LIVERY_PANEL_TOOLTIP :{BLACK}選擇要修改的配色,按住 CTRL 可同時選擇多種配色,勾選方框可切換是否使用配色 +STR_LIVERY_TRAIN_GROUP_EMPTY :未有設置任何列車群組 ###length 23 STR_LIVERY_DEFAULT :標準配色 @@ -2255,6 +2286,7 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}地圖 STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}遊戲的地圖大小{}點選可以依大小排序 STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}日期 STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}目前日期 +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}遊戲經過時間 STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}語言、伺服器版本等 STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}點選清單内的遊戲即可選擇 @@ -2270,6 +2302,7 @@ STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}伺服 STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}邀請碼:{WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}開始日期:{WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}目前日期:{WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}遊戲經過時間: {WHITE}{NUM}小時 {NUM}分鐘 STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}遊戲腳本:{WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}受密碼保護! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}伺服器離線 @@ -2687,8 +2720,9 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}以拖 STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}選擇要顯示的車站種類 STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}選擇要興建的車站種類 -STR_STATION_CLASS_DFLT :預設車站 +STR_STATION_CLASS_DFLT :預設 STR_STATION_CLASS_DFLT_STATION :預設車站 +STR_STATION_CLASS_DFLT_ROADSTOP :預設車站 STR_STATION_CLASS_WAYP :號誌站 STR_STATION_CLASS_WAYP_WAYPOINT :預設號誌站 @@ -2943,7 +2977,9 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}電車 STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}鐵路所有者:{LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}地方政府:{LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :無 -STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}建於:{LTBLUE}{DATE_LONG} +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}座標:{LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}格編號:{LTBLUE}{NUM} ({HEX}) +STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}建造或翻新於:{LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}車站風格:{LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}車站種類:{LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}機場等級:{LTBLUE}{STRING} @@ -3561,7 +3597,10 @@ STR_SUBSIDIES_CAPTION :{WHITE}補助 STR_SUBSIDIES_OFFERED_TITLE :{BLACK}提供補助的運輸服務: STR_SUBSIDIES_NONE :{ORANGE}- 無 - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}已獲補助的服務: +STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}將 {STRING} 從 {STRING} 運到 {STRING}{YELLOW} ({COMPANY}{YELLOW},{STRING}) STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}點選運送服務可將工業/市鎮置於畫面中央。 按住 Ctrl 點選可於工業/市鎮位置開啟新視窗視野 +STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :直到{DATE_SHORT} +STR_SUBSIDIES_SUBSIDISED_EXPIRY_TIME :剩餘{UNITS_MONTHS_OR_MINUTES} # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY}的歷史紀錄 @@ -3659,6 +3698,8 @@ STR_EDIT_WAYPOINT_NAME :{WHITE}編輯 # Finances window STR_FINANCES_CAPTION :{WHITE}{COMPANY} 財務狀況 {BLACK}{COMPANY_NUM} STR_FINANCES_YEAR :{WHITE}{NUM} +STR_FINANCES_YEAR_CAPTION :{WHITE}年份 +STR_FINANCES_PERIOD_CAPTION :{WHITE}週期 ###length 3 STR_FINANCES_REVENUE_TITLE :{WHITE}收入 @@ -3694,9 +3735,9 @@ STR_FINANCES_MAX_LOAN :{WHITE}貸款 STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG} STR_FINANCES_BORROW_BUTTON :{BLACK}貸款 {CURRENCY_LONG} -STR_FINANCES_BORROW_TOOLTIP :{BLACK}增加貸款。 按住 Ctrl 點選可貸款最大額度 +STR_FINANCES_BORROW_TOOLTIP :{BLACK}增加貸款。按住 Ctrl 以貸款最大額度 STR_FINANCES_REPAY_BUTTON :{BLACK}償還 {CURRENCY_LONG} -STR_FINANCES_REPAY_TOOLTIP :{BLACK}償還貸款。 按住 Ctrl 點選可償還最大額度 +STR_FINANCES_REPAY_TOOLTIP :{BLACK}償還貸款。按住 Ctrl 以償還最大額度 STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}基礎建設 # Company view @@ -3758,6 +3799,8 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}運河 STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}車站: STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}車站設施 STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}機場 +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR :{WHITE}{CURRENCY_LONG}/年 +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD :{WHITE}{CURRENCY_LONG}/週期 # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}工業 @@ -3818,6 +3861,7 @@ STR_VEHICLE_LIST_REPLACE_VEHICLES :替換車輛 STR_VEHICLE_LIST_SEND_FOR_SERVICING :送去維護 STR_VEHICLE_LIST_CREATE_GROUP :建立群組 STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}今年盈利:{CURRENCY_LONG} (去年盈利:{CURRENCY_LONG}) +STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{TINY_FONT}{BLACK}本期盈利:{CURRENCY_LONG}(上期:{CURRENCY_LONG}) STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :送到機廠 STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :送到車廠 @@ -3861,7 +3905,9 @@ STR_GROUP_REMOVE_ALL_VEHICLES :移去所有車 STR_GROUP_RENAME_CAPTION :{BLACK}重新命名群組 STR_GROUP_PROFIT_THIS_YEAR :今年盈利: +STR_GROUP_PROFIT_THIS_PERIOD :本期盈利: STR_GROUP_PROFIT_LAST_YEAR :去年盈利: +STR_GROUP_PROFIT_LAST_PERIOD :上期盈利: STR_GROUP_OCCUPANCY :目前使用率: STR_GROUP_OCCUPANCY_VALUE :{NUM}% @@ -3888,6 +3934,8 @@ STR_PURCHASE_INFO_SPEED_POWER :{BLACK}速度 STR_PURCHASE_INFO_SPEED :{BLACK}速度:{GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}海上速度:{GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}運河/河道上速度:{GOLD}{VELOCITY} +STR_PURCHASE_INFO_RUNNINGCOST_YEAR :{BLACK}營運成本:{GOLD}{CURRENCY_LONG}/年 +STR_PURCHASE_INFO_RUNNINGCOST_PERIOD :{BLACK}營運成本:{GOLD}{CURRENCY_LONG}/週期 STR_PURCHASE_INFO_CAPACITY :{BLACK}容量:{GOLD}{CARGO_LONG} {STRING} STR_PURCHASE_INFO_REFITTABLE :(可改裝) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}設計年份:{GOLD}{NUM}{BLACK} 使用年限:{GOLD}{COMMA} 年 @@ -3971,7 +4019,7 @@ STR_BUY_VEHICLE_AIRCRAFT_SHOW_TOGGLE_BUTTON :{BLACK}顯示 STR_BUY_VEHICLE_TRAIN_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}切換是否顯示列車類型 STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}切換是否顯示車輛類型 STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}切換是否顯示船舶類型 -STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}切換是否顯示飛機類型 +STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}切換是否顯示飛機種類 ###length VEHICLE_TYPES STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}重新命名列車種類 @@ -4080,6 +4128,18 @@ STR_ENGINE_PREVIEW_TRAM_VEHICLE :電車車輛 STR_ENGINE_PREVIEW_AIRCRAFT :飛機 STR_ENGINE_PREVIEW_SHIP :船舶 +STR_ENGINE_PREVIEW_TEXT3 :{BLACK}{STRING}{}{5:STRING}{}{STRING} +STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING}{}{STRING}{}{STRING}{}{STRING} +STR_ENGINE_PREVIEW_COST_WEIGHT :費用:{CURRENCY_LONG} 重量:{WEIGHT_SHORT} +STR_ENGINE_PREVIEW_COST_MAX_SPEED :費用:{CURRENCY_LONG} 最高速度:{VELOCITY} +STR_ENGINE_PREVIEW_SPEED_POWER :速度:{VELOCITY} 功率:{POWER} +STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :速度:{VELOCITY} 功率:{POWER} 最大牽引力:{FORCE} +STR_ENGINE_PREVIEW_TYPE :飛機種類:{STRING} +STR_ENGINE_PREVIEW_TYPE_RANGE :飛機種類:{STRING} 距離:{COMMA} 格 +STR_ENGINE_PREVIEW_RUNCOST_YEAR :營運成本:{CURRENCY_LONG}/年 +STR_ENGINE_PREVIEW_RUNCOST_PERIOD :營運成本:{CURRENCY_LONG}/週期 +STR_ENGINE_PREVIEW_CAPACITY :容量:{CARGO_LONG} +STR_ENGINE_PREVIEW_CAPACITY_2 :容量:{CARGO_LONG}、{CARGO_LONG} # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}替換 {STRING} - {STRING} @@ -4227,7 +4287,7 @@ STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}年齡:{LTBLUE}{STRING}{BLACK} 營運成本:每年{LTBLUE}{CURRENCY_LONG} STR_VEHICLE_INFO_MAX_SPEED :{BLACK}最高速度:{LTBLUE}{VELOCITY} -STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}最大速度:{LTBLUE}{VELOCITY} {BLACK}飛機型號:{LTBLUE}{STRING} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}最高速度:{LTBLUE}{VELOCITY} {BLACK}飛機型號:{LTBLUE}{STRING} STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}最高速度:{LTBLUE}{VELOCITY} {BLACK}飛機型號:{LTBLUE}{STRING} {BLACK}距離:{LTBLUE}{COMMA}格 STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}載重:{LTBLUE}{WEIGHT_SHORT} {BLACK}功率:{LTBLUE}{POWER}{BLACK} 最高速度:{LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}載重:{LTBLUE}{WEIGHT_SHORT} {BLACK}功率:{LTBLUE}{POWER}{BLACK} 最高速度:{LTBLUE}{VELOCITY} {BLACK}最大牽引力:{LTBLUE}{FORCE} @@ -4351,6 +4411,7 @@ STR_ORDER_DROP_HALT_DEPOT :停留 # Depot action tooltips, one per vehicle type ###length VEHICLE_TYPES +STR_ORDER_SHIP_DEPOT_ACTION_TOOLTIP :{BLACK}選擇船塢動作 ###next-name-looks-similar STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}跳躍指令依據 @@ -4497,7 +4558,9 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}此車 STR_TIMETABLE_STATUS_LATE :{BLACK}此車輛目前比表定時間遲 {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}此車輛目前比表定時間早 {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}此時刻表尚未實施 +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}本時刻表將會在{COMMA}秒後開始 +STR_TIMETABLE_START :{BLACK}開始時刻表 STR_TIMETABLE_CHANGE_TIME :{BLACK}修改時刻 @@ -4522,6 +4585,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}實際 STR_TIMETABLE_SCHEDULED :{BLACK}表定時間 STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}切換顯示 (根據實際情況的) 預期時間 或 表定時間 +STR_TIMETABLE_ARRIVAL_DATE :到:{COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :開:{COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :到:{COLOUR}{COMMA} 秒 +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :開:{COLOUR}{COMMA} 秒 # Date window (for timetable) @@ -4567,6 +4634,7 @@ STR_AI_CONFIG_RANDOM_AI :隨機 AI STR_AI_CONFIG_NONE :(無) STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM} STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}競爭對手數目上限:{ORANGE}{COMMA} +STR_AI_CONFIG_COMPETITORS_INTERVAL :{LTBLUE}競爭對手建立公司間隔:{ORANGE}{COMMA}分鐘 STR_AI_CONFIG_MOVE_UP :{BLACK}向上移 STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}向上移動所選的 AI @@ -4579,7 +4647,7 @@ STR_AI_CONFIG_AI :{SILVER}AI STR_AI_CONFIG_CHANGE_AI :{BLACK}選擇 AI STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}選擇遊戲腳本 -STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}載入另一腳本 +STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}載入另一腳本。按住 Ctrl 可顯示所有可用版本。 STR_AI_CONFIG_CONFIGURE :{BLACK}組態設定 STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}設定腳本的參數 diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 3703b742de..cbb98e2cc3 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -380,10 +380,24 @@ STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}м # Time units used in string control characters +STR_UNITS_DAYS :{COMMA}{NBSP}день +STR_UNITS_DAYS.z :{COMMA}{NBSP}днів +STR_UNITS_SECONDS :{COMMA}{NBSP}секунда +STR_UNITS_SECONDS.d :{COMMA}{NBSP}секунди +STR_UNITS_SECONDS.z :{COMMA}{NBSP}секунд +STR_UNITS_TICKS :{COMMA}{NBSP}цок +STR_UNITS_TICKS.d :{COMMA}{NBSP}цоки +STR_UNITS_TICKS.z :{COMMA}{NBSP}цоків STR_UNITS_MONTHS :{NUM}{NBSP}місяц{P ь я ів} STR_UNITS_MINUTES :{NUM}{NBSP}хвилин{P а и ""} +STR_UNITS_YEARS :{NUM}{NBSP}рік +STR_UNITS_YEARS.d :{NUM}{NBSP}роки +STR_UNITS_YEARS.z :{NUM}{NBSP}ріків +STR_UNITS_PERIODS :{NUM}{NBSP}період +STR_UNITS_PERIODS.d :{NUM}{NBSP}періоди +STR_UNITS_PERIODS.z :{NUM}{NBSP}періодів # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Фільтр: @@ -1082,7 +1096,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Вибе STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) -###length 43 +###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Британський фунт STR_GAME_OPTIONS_CURRENCY_USD :Американський долар STR_GAME_OPTIONS_CURRENCY_EUR :Євро @@ -1597,6 +1611,7 @@ STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :При вклю STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Транспортні засоби не застарівають: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :При включенні будь-яка модель транспортного засобу буде доступна для придбання безстроково після її впровадження. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Дотримання розкладу: {STRING} ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Календар @@ -2609,6 +2624,7 @@ STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Так, STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Так, більше не питати STR_NETWORK_ASK_SURVEY_CAPTION :Дозволити автоматизований збір даних? +STR_NETWORK_ASK_SURVEY_LINK :Про збір даних і приватність STR_NETWORK_ASK_SURVEY_NO :Ні STR_NETWORK_ASK_SURVEY_YES :Так From 381dee2e01e53fe451588e21b04d416091edbe71 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 10 Mar 2024 09:33:47 +0100 Subject: [PATCH 085/695] Codechange: [CI] switch to arm64 for MacOS builds (#12242) This creates more variety in our CI builds, increasing the odds of us finding issues. --- .github/workflows/ci-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 5d5304b76d..4dd4b4b08e 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -203,8 +203,8 @@ jobs: fail-fast: false matrix: include: - - arch: x64 - full_arch: x86_64 + - arch: arm64 + full_arch: arm64 name: Mac OS (${{ matrix.arch }}) From bab5a8a78713299a4ea6be0ac6b94830c031fd57 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Wed, 17 Jan 2024 03:33:23 +0100 Subject: [PATCH 086/695] Codechange: use std::source_location over __FILE__ and __LINE__ for Backup --- src/ai/ai_core.cpp | 16 ++++++++-------- src/aircraft_cmd.cpp | 6 +++--- src/command_func.h | 2 +- src/company_cmd.cpp | 2 +- src/core/backup_type.hpp | 15 ++++++--------- src/debug.h | 3 --- src/disaster_vehicle.cpp | 4 ++-- src/economy.cpp | 12 ++++++------ src/game/game_core.cpp | 10 +++++----- src/genworld.cpp | 2 +- src/gfx.cpp | 2 +- src/industry_cmd.cpp | 14 +++++++------- src/industry_gui.cpp | 6 +++--- src/misc_cmd.cpp | 2 +- src/network/network_client.cpp | 2 +- src/openttd.cpp | 2 +- src/rail_cmd.cpp | 2 +- src/roadveh_cmd.cpp | 2 +- src/saveload/afterload.cpp | 2 +- src/stdafx.h | 1 + src/terraform_cmd.cpp | 2 +- src/terraform_gui.cpp | 4 ++-- src/town_cmd.cpp | 12 ++++++------ src/town_gui.cpp | 2 +- src/vehicle.cpp | 4 ++-- src/water_cmd.cpp | 4 ++-- 26 files changed, 65 insertions(+), 70 deletions(-) diff --git a/src/ai/ai_core.cpp b/src/ai/ai_core.cpp index d1cc955395..c62f05f929 100644 --- a/src/ai/ai_core.cpp +++ b/src/ai/ai_core.cpp @@ -40,7 +40,7 @@ /* Clients shouldn't start AIs */ if (_networking && !_network_server) return; - Backup cur_company(_current_company, company, FILE_LINE); + Backup cur_company(_current_company, company); Company *c = Company::Get(company); AIConfig *config = c->ai_config.get(); @@ -81,7 +81,7 @@ assert(_settings_game.difficulty.competitor_speed <= 4); if ((AI::frame_counter & ((1 << (4 - _settings_game.difficulty.competitor_speed)) - 1)) != 0) return; - Backup cur_company(_current_company, FILE_LINE); + Backup cur_company(_current_company); for (const Company *c : Company::Iterate()) { if (c->is_ai) { PerformanceMeasurer framerate((PerformanceElement)(PFE_AI0 + c->index)); @@ -109,7 +109,7 @@ if (_networking && !_network_server) return; PerformanceMeasurer::SetInactive((PerformanceElement)(PFE_AI0 + company)); - Backup cur_company(_current_company, company, FILE_LINE); + Backup cur_company(_current_company, company); Company *c = Company::Get(company); delete c->ai_instance; @@ -129,7 +129,7 @@ * for the server owner to unpause the script again. */ if (_network_dedicated) return; - Backup cur_company(_current_company, company, FILE_LINE); + Backup cur_company(_current_company, company); Company::Get(company)->ai_instance->Pause(); cur_company.Restore(); @@ -137,7 +137,7 @@ /* static */ void AI::Unpause(CompanyID company) { - Backup cur_company(_current_company, company, FILE_LINE); + Backup cur_company(_current_company, company); Company::Get(company)->ai_instance->Unpause(); cur_company.Restore(); @@ -145,7 +145,7 @@ /* static */ bool AI::IsPaused(CompanyID company) { - Backup cur_company(_current_company, company, FILE_LINE); + Backup cur_company(_current_company, company); bool paused = Company::Get(company)->ai_instance->IsPaused(); cur_company.Restore(); @@ -259,7 +259,7 @@ } /* Queue the event */ - Backup cur_company(_current_company, company, FILE_LINE); + Backup cur_company(_current_company, company); Company::Get(_current_company)->ai_instance->InsertEvent(event); cur_company.Restore(); @@ -293,7 +293,7 @@ /* When doing emergency saving, an AI can be not fully initialised. */ if (c->ai_instance != nullptr) { - Backup cur_company(_current_company, company, FILE_LINE); + Backup cur_company(_current_company, company); c->ai_instance->Save(); cur_company.Restore(); return; diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 14a7eceeda..ba1e8fbfa8 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -1285,7 +1285,7 @@ void HandleMissingAircraftOrders(Aircraft *v) */ const Station *st = GetTargetAirportIfValid(v); if (st == nullptr) { - Backup cur_company(_current_company, v->owner, FILE_LINE); + Backup cur_company(_current_company, v->owner); CommandCost ret = Command::Do(DC_EXEC, v->index, DepotCommand::None, {}); cur_company.Restore(); @@ -1651,7 +1651,7 @@ static void AircraftEventHandler_HeliTakeOff(Aircraft *v, const AirportFTAClass /* Send the helicopter to a hangar if needed for replacement */ if (v->NeedsAutomaticServicing()) { - Backup cur_company(_current_company, v->owner, FILE_LINE); + Backup cur_company(_current_company, v->owner); Command::Do(DC_EXEC, v->index, DepotCommand::Service | DepotCommand::LocateHangar, {}); cur_company.Restore(); } @@ -1702,7 +1702,7 @@ static void AircraftEventHandler_Landing(Aircraft *v, const AirportFTAClass *) /* check if the aircraft needs to be replaced or renewed and send it to a hangar if needed */ if (v->NeedsAutomaticServicing()) { - Backup cur_company(_current_company, v->owner, FILE_LINE); + Backup cur_company(_current_company, v->owner); Command::Do(DC_EXEC, v->index, DepotCommand::Service, {}); cur_company.Restore(); } diff --git a/src/command_func.h b/src/command_func.h index f0da57c65e..ddf68aaf11 100644 --- a/src/command_func.h +++ b/src/command_func.h @@ -372,7 +372,7 @@ protected: assert(AllClientIdsSet(args, std::index_sequence_for{})); } - Backup cur_company(_current_company, FILE_LINE); + Backup cur_company(_current_company); if (!InternalExecutePrepTest(cmd_flags, tile, cur_company)) { cur_company.Trash(); return MakeResult(CMD_ERROR); diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index d6844c58e9..6c936d7138 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -1255,7 +1255,7 @@ CommandCost CmdGiveMoney(DoCommandFlag flags, Money money, CompanyID dest_compan if (flags & DC_EXEC) { /* Add money to company */ - Backup cur_company(_current_company, dest_company, FILE_LINE); + Backup cur_company(_current_company, dest_company); SubtractMoneyFromCompany(CommandCost(EXPENSES_OTHER, -amount.GetCost())); cur_company.Restore(); diff --git a/src/core/backup_type.hpp b/src/core/backup_type.hpp index 62e6d31329..b6b5de558d 100644 --- a/src/core/backup_type.hpp +++ b/src/core/backup_type.hpp @@ -22,20 +22,18 @@ struct Backup { /** * Backup variable. * @param original Variable to backup. - * @param file Filename for debug output. Use FILE_LINE macro. - * @param line Linenumber for debug output. Use FILE_LINE macro. + * @param location Source location for debug output. */ - Backup(T &original, const char * const file, const int line) : original(original), valid(true), original_value(original), file(file), line(line) {} + Backup(T &original, const std::source_location location = std::source_location::current()) : original(original), valid(true), original_value(original), location(location) {} /** * Backup variable and switch to new value. * @param original Variable to backup. * @param new_value New value for variable. - * @param file Filename for debug output. Use FILE_LINE macro. - * @param line Linenumber for debug output. Use FILE_LINE macro. + * @param location Source location for debug output. */ template - Backup(T &original, const U &new_value, const char * const file, const int line) : original(original), valid(true), original_value(original), file(file), line(line) + Backup(T &original, const U &new_value, const std::source_location location = std::source_location::current()) : original(original), valid(true), original_value(original), location(location) { /* Note: We use a separate typename U, so type conversions are handled by assignment operator. */ original = new_value; @@ -51,7 +49,7 @@ struct Backup { { /* We cannot assert here, as missing restoration is 'normal' when exceptions are thrown. * Exceptions are especially used to abort world generation. */ - Debug(misc, 0, "{}:{}: Backed-up value was not restored!", this->file, this->line); + Debug(misc, 0, "{}:{}: Backed-up value was not restored!", this->location.file_name(), this->location.line()); this->Restore(); } } @@ -140,8 +138,7 @@ private: bool valid; T original_value; - const char * const file; - const int line; + const std::source_location location; }; /** diff --git a/src/debug.h b/src/debug.h index fbd39683c6..de91c21e39 100644 --- a/src/debug.h +++ b/src/debug.h @@ -60,9 +60,6 @@ void DumpDebugFacilityNames(std::back_insert_iterator &output_itera void SetDebugString(const char *s, void (*error_func)(const std::string &)); std::string GetDebugString(); -/* Shorter form for passing filename and linenumber */ -#define FILE_LINE __FILE__, __LINE__ - /** TicToc profiling. * Usage: * static TicToc::State state("A name", 1); diff --git a/src/disaster_vehicle.cpp b/src/disaster_vehicle.cpp index 60b93eaf11..833226eab7 100644 --- a/src/disaster_vehicle.cpp +++ b/src/disaster_vehicle.cpp @@ -63,7 +63,7 @@ static void DisasterClearSquare(TileIndex tile) switch (GetTileType(tile)) { case MP_RAILWAY: if (Company::IsHumanID(GetTileOwner(tile)) && !IsRailDepot(tile)) { - Backup cur_company(_current_company, OWNER_WATER, FILE_LINE); + Backup cur_company(_current_company, OWNER_WATER); Command::Do(DC_EXEC, tile); cur_company.Restore(); @@ -73,7 +73,7 @@ static void DisasterClearSquare(TileIndex tile) break; case MP_HOUSE: { - Backup cur_company(_current_company, OWNER_NONE, FILE_LINE); + Backup cur_company(_current_company, OWNER_NONE); Command::Do(DC_EXEC, tile); cur_company.Restore(); break; diff --git a/src/economy.cpp b/src/economy.cpp index 27d43e1d63..3a3755fa6e 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -336,14 +336,14 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) /* We need to set _current_company to old_owner before we try to move * the client. This is needed as it needs to know whether "you" really * are the current local company. */ - Backup cur_company(_current_company, old_owner, FILE_LINE); + Backup cur_company(_current_company, old_owner); /* In all cases, make spectators of clients connected to that company */ if (_networking) NetworkClientsToSpectators(old_owner); if (old_owner == _local_company) { /* Single player cheated to AI company. * There are no spectators in singleplayer mode, so we must pick some other company. */ assert(!_networking); - Backup cur_company2(_current_company, FILE_LINE); + Backup cur_company2(_current_company); for (const Company *c : Company::Iterate()) { if (c->index != old_owner) { SetLocalCompany(c->index); @@ -661,7 +661,7 @@ static void CompaniesGenStatistics() CompanyCheckBankrupt(c); } - Backup cur_company(_current_company, FILE_LINE); + Backup cur_company(_current_company); /* Pay Infrastructure Maintenance, if enabled */ if (_settings_game.economy.infrastructure_maintenance) { @@ -824,7 +824,7 @@ void RecomputePrices() /** Let all companies pay the monthly interest on their loan. */ static void CompaniesPayInterest() { - Backup cur_company(_current_company, FILE_LINE); + Backup cur_company(_current_company); for (const Company *c : Company::Iterate()) { cur_company.Change(c->index); @@ -1205,7 +1205,7 @@ CargoPayment::~CargoPayment() if (this->visual_profit == 0 && this->visual_transfer == 0) return; - Backup cur_company(_current_company, this->front->owner, FILE_LINE); + Backup cur_company(_current_company, this->front->owner); SubtractMoneyFromCompany(CommandCost(this->front->GetExpenseType(true), -this->route_profit)); this->front->profit_this_year += (this->visual_profit + this->visual_transfer) << 8; @@ -1496,7 +1496,7 @@ static void HandleStationRefit(Vehicle *v, CargoArray &consist_capleft, Station Vehicle *v_start = v->GetFirstEnginePart(); if (!IterateVehicleParts(v_start, IsEmptyAction())) return; - Backup cur_company(_current_company, v->owner, FILE_LINE); + Backup cur_company(_current_company, v->owner); CargoTypes refit_mask = v->GetEngine()->info.refit_mask; diff --git a/src/game/game_core.cpp b/src/game/game_core.cpp index c7763429ff..a5cdb2575b 100644 --- a/src/game/game_core.cpp +++ b/src/game/game_core.cpp @@ -43,7 +43,7 @@ Game::frame_counter++; - Backup cur_company(_current_company, FILE_LINE); + Backup cur_company(_current_company); cur_company.Change(OWNER_DEITY); Game::instance->GameLoop(); cur_company.Restore(); @@ -85,7 +85,7 @@ config->AnchorUnchangeableSettings(); - Backup cur_company(_current_company, FILE_LINE); + Backup cur_company(_current_company); cur_company.Change(OWNER_DEITY); Game::info = info; @@ -101,7 +101,7 @@ /* static */ void Game::Uninitialize(bool keepConfig) { - Backup cur_company(_current_company, FILE_LINE); + Backup cur_company(_current_company); delete Game::instance; Game::instance = nullptr; @@ -161,7 +161,7 @@ } /* Queue the event */ - Backup cur_company(_current_company, OWNER_DEITY, FILE_LINE); + Backup cur_company(_current_company, OWNER_DEITY); Game::instance->InsertEvent(event); cur_company.Restore(); @@ -211,7 +211,7 @@ /* static */ void Game::Save() { if (Game::instance != nullptr && (!_networking || _network_server)) { - Backup cur_company(_current_company, OWNER_DEITY, FILE_LINE); + Backup cur_company(_current_company, OWNER_DEITY); Game::instance->Save(); cur_company.Restore(); } else { diff --git a/src/genworld.cpp b/src/genworld.cpp index b657273f95..d6b8de88ff 100644 --- a/src/genworld.cpp +++ b/src/genworld.cpp @@ -86,7 +86,7 @@ static void CleanupGeneration() static void _GenerateWorld() { /* Make sure everything is done via OWNER_NONE. */ - Backup _cur_company(_current_company, OWNER_NONE, FILE_LINE); + Backup _cur_company(_current_company, OWNER_NONE); try { _generating_world = true; diff --git a/src/gfx.cpp b/src/gfx.cpp index 4d6f5a0602..4601d444da 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -1196,7 +1196,7 @@ std::unique_ptr DrawSpriteToRgbaBuffer(SpriteID spriteId, ZoomLevel } /* Temporarily disable screen animations while blitting - This prevents 40bpp_anim from writing to the animation buffer. */ - Backup disable_anim(_screen_disable_anim, true, FILE_LINE); + Backup disable_anim(_screen_disable_anim, true); GfxBlitter<1, true>(sprite, 0, 0, BM_NORMAL, nullptr, real_sprite, zoom, &dpi); disable_anim.Restore(); diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 0264e6cbd0..635d609e30 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1105,7 +1105,7 @@ static bool SearchLumberMillTrees(TileIndex tile, void *) if (IsTileType(tile, MP_TREES) && GetTreeGrowth(tile) > 2) { ///< 3 and up means all fully grown trees /* found a tree */ - Backup cur_company(_current_company, OWNER_NONE, FILE_LINE); + Backup cur_company(_current_company, OWNER_NONE); _industry_sound_ctr = 1; _industry_sound_tile = tile; @@ -1500,7 +1500,7 @@ static CommandCost CheckIfIndustryTilesAreFree(TileIndex tile, const IndustryTil } /* Clear the tiles as OWNER_TOWN to not affect town rating, and to not clear protected buildings */ - Backup cur_company(_current_company, OWNER_TOWN, FILE_LINE); + Backup cur_company(_current_company, OWNER_TOWN); ret = Command::Do(DC_NONE, cur_tile); cur_company.Restore(); @@ -1642,7 +1642,7 @@ static bool CheckIfCanLevelIndustryPlatform(TileIndex tile, DoCommandFlag flags, /* _current_company is OWNER_NONE for randomly generated industries and in editor, or the company who funded or prospected the industry. * Perform terraforming as OWNER_TOWN to disable autoslope and town ratings. */ - Backup cur_company(_current_company, OWNER_TOWN, FILE_LINE); + Backup cur_company(_current_company, OWNER_TOWN); for (TileIndex tile_walk : ta) { uint curh = TileHeight(tile_walk); @@ -2081,7 +2081,7 @@ CommandCost CmdBuildIndustry(DoCommandFlag flags, TileIndex tile, IndustryType i if (prospect_success) { /* Prospected industries are build as OWNER_TOWN to not e.g. be build on owned land of the founder */ IndustryAvailabilityCallType calltype = _current_company == OWNER_DEITY ? IACT_RANDOMCREATION : IACT_PROSPECTCREATION; - Backup cur_company(_current_company, OWNER_TOWN, FILE_LINE); + Backup cur_company(_current_company, OWNER_TOWN); for (int i = 0; i < 5000; i++) { /* We should not have more than one Random() in a function call * because parameter evaluation order is not guaranteed in the c++ standard @@ -2383,7 +2383,7 @@ static Industry *PlaceIndustry(IndustryType type, IndustryAvailabilityCallType c */ static void PlaceInitialIndustry(IndustryType type, bool try_hard) { - Backup cur_company(_current_company, OWNER_NONE, FILE_LINE); + Backup cur_company(_current_company, OWNER_NONE); IncreaseGeneratingWorldProgress(GWP_INDUSTRY); PlaceIndustry(type, IACT_MAPGENERATION, try_hard); @@ -3023,7 +3023,7 @@ static IntervalTimer _economy_industries_daily({TimerGameEcono return; // Nothing to do? get out } - Backup cur_company(_current_company, OWNER_NONE, FILE_LINE); + Backup cur_company(_current_company, OWNER_NONE); /* perform the required industry changes for the day */ @@ -3051,7 +3051,7 @@ static IntervalTimer _economy_industries_daily({TimerGameEcono static IntervalTimer _economy_industries_monthly({TimerGameEconomy::MONTH, TimerGameEconomy::Priority::INDUSTRY}, [](auto) { - Backup cur_company(_current_company, OWNER_NONE, FILE_LINE); + Backup cur_company(_current_company, OWNER_NONE); _industry_builder.EconomyMonthlyLoop(); diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 03b279edfa..097e63cc40 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -603,7 +603,7 @@ public: if (Town::GetNumItems() == 0) { ShowErrorMessage(STR_ERROR_CAN_T_GENERATE_INDUSTRIES, STR_ERROR_MUST_FOUND_TOWN_FIRST, WL_INFO); } else { - Backup old_generating_world(_generating_world, true, FILE_LINE); + Backup old_generating_world(_generating_world, true); BasePersistentStorageArray::SwitchMode(PSM_ENTER_GAMELOOP); GenerateIndustries(); BasePersistentStorageArray::SwitchMode(PSM_LEAVE_GAMELOOP); @@ -707,8 +707,8 @@ public: return; } - Backup cur_company(_current_company, OWNER_NONE, FILE_LINE); - Backup old_generating_world(_generating_world, true, FILE_LINE); + Backup cur_company(_current_company, OWNER_NONE); + Backup old_generating_world(_generating_world, true); _ignore_restrictions = true; Command::Post(STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY, &CcBuildIndustry, tile, this->selected_type, layout_index, false, seed); diff --git a/src/misc_cmd.cpp b/src/misc_cmd.cpp index d1d79f024b..04cc7e8f96 100644 --- a/src/misc_cmd.cpp +++ b/src/misc_cmd.cpp @@ -241,7 +241,7 @@ CommandCost CmdChangeBankBalance(DoCommandFlag flags, TileIndex tile, Money delt if (flags & DC_EXEC) { /* Change company bank balance of company. */ - Backup cur_company(_current_company, company, FILE_LINE); + Backup cur_company(_current_company, company); SubtractMoneyFromCompany(CommandCost(expenses_type, -delta)); cur_company.Restore(); diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index db49083974..a9a4706768 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -1284,7 +1284,7 @@ void NetworkClientRequestMove(CompanyID company_id, const std::string &pass) */ void NetworkClientsToSpectators(CompanyID cid) { - Backup cur_company(_current_company, FILE_LINE); + Backup cur_company(_current_company); /* If our company is changing owner, go to spectators */ if (cid == _local_company) SetLocalCompany(COMPANY_SPECTATOR); diff --git a/src/openttd.cpp b/src/openttd.cpp index 94c9b6e748..207ff37b41 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1475,7 +1475,7 @@ void StateGameLoop() /* All these actions has to be done from OWNER_NONE * for multiplayer compatibility */ - Backup cur_company(_current_company, OWNER_NONE, FILE_LINE); + Backup cur_company(_current_company, OWNER_NONE); BasePersistentStorageArray::SwitchMode(PSM_ENTER_GAMELOOP); AnimateAnimatedTiles(); diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 21480eb1af..fdf1c1f0e1 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -774,7 +774,7 @@ bool FloodHalftile(TileIndex t) TrackBits to_remove = lower_track & rail_bits; if (to_remove != 0) { - Backup cur_company(_current_company, OWNER_WATER, FILE_LINE); + Backup cur_company(_current_company, OWNER_WATER); flooded = Command::Do(DC_EXEC, t, FindFirstTrack(to_remove)).Succeeded(); cur_company.Restore(); if (!flooded) return flooded; // not yet floodable diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 6674425845..32150cc714 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -1135,7 +1135,7 @@ static Trackdir FollowPreviousRoadVehicle(const RoadVehicle *v, const RoadVehicl static bool CanBuildTramTrackOnTile(CompanyID c, TileIndex t, RoadType rt, RoadBits r) { /* The 'current' company is not necessarily the owner of the vehicle. */ - Backup cur_company(_current_company, c, FILE_LINE); + Backup cur_company(_current_company, c); CommandCost ret = Command::Do(DC_NO_WATER, t, r, rt, DRD_NONE, 0); diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index a16269aa6f..810e48befe 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -1857,7 +1857,7 @@ bool AfterLoadGame() if (IsBuoyTile(t) || IsDriveThroughStopTile(t) || IsTileType(t, MP_WATER)) { Owner o = GetTileOwner(t); if (o < MAX_COMPANIES && !Company::IsValidID(o)) { - Backup cur_company(_current_company, o, FILE_LINE); + Backup cur_company(_current_company, o); ChangeTileOwner(t, o, INVALID_OWNER); cur_company.Restore(); } diff --git a/src/stdafx.h b/src/stdafx.h index 5fc27f4dcc..3051047555 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -71,6 +71,7 @@ #include #include #include +#include #include #include #include diff --git a/src/terraform_cmd.cpp b/src/terraform_cmd.cpp index b7b2da67e9..00c7ef0681 100644 --- a/src/terraform_cmd.cpp +++ b/src/terraform_cmd.cpp @@ -268,7 +268,7 @@ std::tuple CmdTerraformLand(DoCommandFlag flags, bool indirectly_cleared = coa != nullptr && coa->first_tile != t; /* Check tiletype-specific things, and add extra-cost */ - Backup old_generating_world(_generating_world, FILE_LINE); + Backup old_generating_world(_generating_world); if (_game_mode == GM_EDITOR) old_generating_world.Change(true); // used to create green terraformed land DoCommandFlag tile_flags = flags | DC_AUTO | DC_FORCE_CLEAR_TILE; if (pass == 0) { diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp index 0fe5e2b053..164eb4c224 100644 --- a/src/terraform_gui.cpp +++ b/src/terraform_gui.cpp @@ -59,7 +59,7 @@ static void GenerateDesertArea(TileIndex end, TileIndex start) { if (_game_mode != GM_EDITOR) return; - Backup old_generating_world(_generating_world, true, FILE_LINE); + Backup old_generating_world(_generating_world, true); TileArea ta(start, end); for (TileIndex tile : ta) { @@ -507,7 +507,7 @@ static void ResetLandscapeConfirmationCallback(Window *, bool confirmed) if (confirmed) { /* Set generating_world to true to get instant-green grass after removing * company property. */ - Backup old_generating_world(_generating_world, true, FILE_LINE); + Backup old_generating_world(_generating_world, true); /* Delete all companies */ for (Company *c : Company::Iterate()) { diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index d8d4009fd2..909fb7fc52 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -662,7 +662,7 @@ static void TileLoop_Town(TileIndex tile) } } - Backup cur_company(_current_company, OWNER_TOWN, FILE_LINE); + Backup cur_company(_current_company, OWNER_TOWN); if ((hs->building_flags & BUILDING_HAS_1_TILE) && HasBit(t->flags, TOWN_IS_GROWING) && @@ -1821,7 +1821,7 @@ static bool GrowTown(Town *t) }; /* Current "company" is a town */ - Backup cur_company(_current_company, OWNER_TOWN, FILE_LINE); + Backup cur_company(_current_company, OWNER_TOWN); TileIndex tile = t->xy; // The tile we are working with ATM @@ -2108,7 +2108,7 @@ std::tuple CmdFoundTown(DoCommandFlag flags, TileInd return { CommandCost(EXPENSES_OTHER), cost.GetCost(), INVALID_TOWN }; } - Backup old_generating_world(_generating_world, true, FILE_LINE); + Backup old_generating_world(_generating_world, true); UpdateNearestTownForRoadTiles(true); Town *t; if (random_location) { @@ -2303,7 +2303,7 @@ static Town *CreateRandomTown(uint attempts, uint32_t townnameparts, TownSize si * placement is so bad it couldn't grow at all */ if (t->cache.population > 0) return t; - Backup cur_company(_current_company, OWNER_TOWN, FILE_LINE); + Backup cur_company(_current_company, OWNER_TOWN); [[maybe_unused]] CommandCost rc = Command::Do(DC_EXEC, t->index); cur_company.Restore(); assert(rc.Succeeded()); @@ -3250,7 +3250,7 @@ static CommandCost TownActionRoadRebuild(Town *t, DoCommandFlag flags) */ static bool CheckClearTile(TileIndex tile) { - Backup cur_company(_current_company, OWNER_NONE, FILE_LINE); + Backup cur_company(_current_company, OWNER_NONE); CommandCost r = Command::Do(DC_NONE, tile); cur_company.Restore(); return r.Succeeded(); @@ -3322,7 +3322,7 @@ static CommandCost TownActionBuildStatue(Town *t, DoCommandFlag flags) if (!CircularTileSearch(&tile, 9, SearchTileForStatue, &statue_data)) return_cmd_error(STR_ERROR_STATUE_NO_SUITABLE_PLACE); if (flags & DC_EXEC) { - Backup cur_company(_current_company, OWNER_NONE, FILE_LINE); + Backup cur_company(_current_company, OWNER_NONE); Command::Do(DC_EXEC, statue_data.best_position); cur_company.Restore(); BuildObject(OBJECT_STATUE, statue_data.best_position, _current_company, t); diff --git a/src/town_gui.cpp b/src/town_gui.cpp index e82ed1eb2d..3a46990641 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -1236,7 +1236,7 @@ public: break; case WID_TF_MANY_RANDOM_TOWNS: { - Backup old_generating_world(_generating_world, true, FILE_LINE); + Backup old_generating_world(_generating_world, true); UpdateNearestTownForRoadTiles(true); if (!GenerateTowns(this->town_layout)) { ShowErrorMessage(STR_ERROR_CAN_T_GENERATE_TOWN, STR_ERROR_NO_SPACE_FOR_TOWN, WL_INFO); diff --git a/src/vehicle.cpp b/src/vehicle.cpp index bdf76efa6c..ca5780140d 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1065,7 +1065,7 @@ void CallVehicleTicks() } } - Backup cur_company(_current_company, FILE_LINE); + Backup cur_company(_current_company); for (auto &it : _vehicles_to_autoreplace) { Vehicle *v = it.first; /* Autoreplace needs the current company set as the vehicle owner */ @@ -1618,7 +1618,7 @@ void VehicleEnterDepot(Vehicle *v) } if (v->current_order.IsRefit()) { - Backup cur_company(_current_company, v->owner, FILE_LINE); + Backup cur_company(_current_company, v->owner); CommandCost cost = std::get<0>(Command::Do(DC_EXEC, v->index, v->current_order.GetRefitCargo(), 0xFF, false, false, 0)); cur_company.Restore(); diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index 7b3703ed77..f6f9e5837a 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -1120,7 +1120,7 @@ void DoFloodTile(TileIndex target) bool flooded = false; // Will be set to true if something is changed. - Backup cur_company(_current_company, OWNER_WATER, FILE_LINE); + Backup cur_company(_current_company, OWNER_WATER); Slope tileh = GetTileSlope(target); if (tileh != SLOPE_FLAT) { @@ -1183,7 +1183,7 @@ void DoFloodTile(TileIndex target) */ static void DoDryUp(TileIndex tile) { - Backup cur_company(_current_company, OWNER_WATER, FILE_LINE); + Backup cur_company(_current_company, OWNER_WATER); switch (GetTileType(tile)) { case MP_RAILWAY: From e4b3f3f495e4cac8b838a74b13a0aec989a9415c Mon Sep 17 00:00:00 2001 From: Rubidium Date: Wed, 17 Jan 2024 03:53:10 +0100 Subject: [PATCH 087/695] Codechange: use std::source_location over __FILE__ and __LINE__ for NOT_REACHED --- src/error.cpp | 8 ++++---- src/stdafx.h | 7 +++---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/error.cpp b/src/error.cpp index a1cba7d02e..cd56785942 100644 --- a/src/error.cpp +++ b/src/error.cpp @@ -10,12 +10,12 @@ #include "stdafx.h" #include "error_func.h" -[[noreturn]] void NotReachedError(int line, const char *file) +[[noreturn]] void NOT_REACHED(const std::source_location location) { - FatalError("NOT_REACHED triggered at line {} of {}", line, file); + FatalError("NOT_REACHED triggered at line {} of {}", location.line(), location.file_name()); } -[[noreturn]] void AssertFailedError(int line, const char *file, const char *expression) +[[noreturn]] void AssertFailedError(const char *expression, const std::source_location location) { - FatalError("Assertion failed at line {} of {}: {}", line, file, expression); + FatalError("Assertion failed at line {} of {}: {}", location.line(), location.file_name(), expression); } diff --git a/src/stdafx.h b/src/stdafx.h index 3051047555..e486f04db0 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -349,14 +349,13 @@ static_assert(SIZE_MAX >= UINT32_MAX); /* For the FMT library we only want to use the headers, not link to some library. */ #define FMT_HEADER_ONLY -[[noreturn]] void NotReachedError(int line, const char *file); -[[noreturn]] void AssertFailedError(int line, const char *file, const char *expression); -#define NOT_REACHED() NotReachedError(__LINE__, __FILE__) +[[noreturn]] void NOT_REACHED(const std::source_location location = std::source_location::current()); +[[noreturn]] void AssertFailedError(const char *expression, const std::source_location location = std::source_location::current()); /* For non-debug builds with assertions enabled use the special assertion handler. */ #if defined(NDEBUG) && defined(WITH_ASSERT) # undef assert -# define assert(expression) do { if (!(expression)) [[unlikely]] AssertFailedError(__LINE__, __FILE__, #expression); } while (false) +# define assert(expression) do { if (!(expression)) [[unlikely]] AssertFailedError(#expression); } while (false) #endif /* Define JSON_ASSERT, which is used by nlohmann-json. Otherwise the header-file From 86cb184eb4401b2cd77fa2404cac8dcec6b9a7cf Mon Sep 17 00:00:00 2001 From: Rubidium Date: Wed, 17 Jan 2024 04:17:02 +0100 Subject: [PATCH 088/695] Codechange: use std::source_location over __FILE__ and __LINE__ for WindowDesc --- src/ai/ai_gui.cpp | 2 +- src/airport_gui.cpp | 4 ++-- src/autoreplace_gui.cpp | 6 +++--- src/bootstrap_gui.cpp | 8 ++++---- src/bridge_gui.cpp | 2 +- src/build_vehicle_gui.cpp | 2 +- src/cheat_gui.cpp | 2 +- src/company_gui.cpp | 12 ++++++------ src/console_gui.cpp | 2 +- src/date_gui.cpp | 2 +- src/depot_gui.cpp | 8 ++++---- src/dock_gui.cpp | 8 ++++---- src/engine_gui.cpp | 2 +- src/error_gui.cpp | 4 ++-- src/fios_gui.cpp | 6 +++--- src/framerate_gui.cpp | 4 ++-- src/game/game_gui.cpp | 2 +- src/genworld_gui.cpp | 8 ++++---- src/goal_gui.cpp | 6 +----- src/graph_gui.cpp | 16 ++++++++-------- src/group_gui.cpp | 4 ++-- src/help_gui.cpp | 2 +- src/highscore_gui.cpp | 4 ++-- src/industry_gui.cpp | 8 ++++---- src/intro_gui.cpp | 2 +- src/league_gui.cpp | 4 ++-- src/linkgraph/linkgraph_gui.cpp | 2 +- src/main_gui.cpp | 2 +- src/misc_gui.cpp | 10 +++++----- src/music_gui.cpp | 4 ++-- src/network/network_chat_gui.cpp | 2 +- src/network/network_content_gui.cpp | 4 ++-- src/network/network_gui.cpp | 14 +++++++------- src/newgrf_debug_gui.cpp | 6 +++--- src/newgrf_gui.cpp | 8 ++++---- src/news_gui.cpp | 12 ++++++------ src/object_gui.cpp | 2 +- src/order_gui.cpp | 6 +++--- src/osk_gui.cpp | 2 +- src/rail_gui.cpp | 10 +++++----- src/road_gui.cpp | 14 +++++++------- src/screenshot_gui.cpp | 2 +- src/script/script_gui.cpp | 6 +++--- src/settings_gui.cpp | 6 +++--- src/signs_gui.cpp | 4 ++-- src/smallmap_gui.cpp | 2 +- src/station_gui.cpp | 6 +++--- src/statusbar_gui.cpp | 2 +- src/story_gui.cpp | 4 ++-- src/subsidy_gui.cpp | 2 +- src/terraform_gui.cpp | 4 ++-- src/tests/test_window_desc.cpp | 6 +++--- src/textfile_gui.cpp | 2 +- src/timetable_gui.cpp | 2 +- src/toolbar_gui.cpp | 4 ++-- src/town_gui.cpp | 10 +++++----- src/transparency_gui.cpp | 2 +- src/tree_gui.cpp | 2 +- src/vehicle_gui.cpp | 14 +++++++------- src/viewport_gui.cpp | 2 +- src/waypoint_gui.cpp | 2 +- src/widgets/dropdown.cpp | 2 +- src/window.cpp | 8 ++++---- src/window_gui.h | 13 +++++++------ 64 files changed, 166 insertions(+), 169 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 0cd83ea8b3..68c0e3d2e5 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -82,7 +82,7 @@ static constexpr NWidgetPart _nested_ai_config_widgets[] = { }; /** Window definition for the configure AI window. */ -static WindowDesc _ai_config_desc(__FILE__, __LINE__, +static WindowDesc _ai_config_desc( WDP_CENTER, nullptr, 0, 0, WC_GAME_OPTIONS, WC_NONE, 0, diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index aa2069c425..ef80d44a9b 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -207,7 +207,7 @@ static constexpr NWidgetPart _nested_air_toolbar_widgets[] = { EndContainer(), }; -static WindowDesc _air_toolbar_desc(__FILE__, __LINE__, +static WindowDesc _air_toolbar_desc( WDP_ALIGN_TOOLBAR, "toolbar_air", 0, 0, WC_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, @@ -618,7 +618,7 @@ static constexpr NWidgetPart _nested_build_airport_widgets[] = { EndContainer(), }; -static WindowDesc _build_airport_desc(__FILE__, __LINE__, +static WindowDesc _build_airport_desc( WDP_AUTO, nullptr, 0, 0, WC_BUILD_STATION, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 5072dbb4ae..c494f24126 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -787,7 +787,7 @@ static constexpr NWidgetPart _nested_replace_rail_vehicle_widgets[] = { EndContainer(), }; -static WindowDesc _replace_rail_vehicle_desc(__FILE__, __LINE__, +static WindowDesc _replace_rail_vehicle_desc( WDP_AUTO, "replace_vehicle_train", 500, 140, WC_REPLACE_VEHICLE, WC_NONE, WDF_CONSTRUCTION, @@ -845,7 +845,7 @@ static constexpr NWidgetPart _nested_replace_road_vehicle_widgets[] = { EndContainer(), }; -static WindowDesc _replace_road_vehicle_desc(__FILE__, __LINE__, +static WindowDesc _replace_road_vehicle_desc( WDP_AUTO, "replace_vehicle_road", 500, 140, WC_REPLACE_VEHICLE, WC_NONE, WDF_CONSTRUCTION, @@ -899,7 +899,7 @@ static constexpr NWidgetPart _nested_replace_vehicle_widgets[] = { EndContainer(), }; -static WindowDesc _replace_vehicle_desc(__FILE__, __LINE__, +static WindowDesc _replace_vehicle_desc( WDP_AUTO, "replace_vehicle", 456, 118, WC_REPLACE_VEHICLE, WC_NONE, WDF_CONSTRUCTION, diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index 657c4faa17..3487998615 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -40,7 +40,7 @@ static constexpr NWidgetPart _background_widgets[] = { /** * Window description for the background window to prevent smearing. */ -static WindowDesc _background_desc(__FILE__, __LINE__, +static WindowDesc _background_desc( WDP_MANUAL, nullptr, 0, 0, WC_BOOTSTRAP, WC_NONE, WDF_NO_CLOSE, @@ -76,7 +76,7 @@ static constexpr NWidgetPart _nested_bootstrap_errmsg_widgets[] = { }; /** Window description for the error window. */ -static WindowDesc _bootstrap_errmsg_desc(__FILE__, __LINE__, +static WindowDesc _bootstrap_errmsg_desc( WDP_CENTER, nullptr, 0, 0, WC_BOOTSTRAP, WC_NONE, WDF_MODAL | WDF_NO_CLOSE, @@ -133,7 +133,7 @@ static constexpr NWidgetPart _nested_bootstrap_download_status_window_widgets[] }; /** Window description for the download window */ -static WindowDesc _bootstrap_download_status_window_desc(__FILE__, __LINE__, +static WindowDesc _bootstrap_download_status_window_desc( WDP_CENTER, nullptr, 0, 0, WC_NETWORK_STATUS_WINDOW, WC_NONE, WDF_MODAL | WDF_NO_CLOSE, @@ -185,7 +185,7 @@ static constexpr NWidgetPart _bootstrap_query_widgets[] = { }; /** The window description for the query. */ -static WindowDesc _bootstrap_query_desc(__FILE__, __LINE__, +static WindowDesc _bootstrap_query_desc( WDP_CENTER, nullptr, 0, 0, WC_CONFIRM_POPUP_QUERY, WC_NONE, WDF_NO_CLOSE, diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index 15eea9a0d0..90aa8580d7 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -341,7 +341,7 @@ static constexpr NWidgetPart _nested_build_bridge_widgets[] = { }; /** Window definition for the rail bridge selection window. */ -static WindowDesc _build_bridge_desc(__FILE__, __LINE__, +static WindowDesc _build_bridge_desc( WDP_AUTO, "build_bridge", 200, 114, WC_BUILD_BRIDGE, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 11211a2ae9..7d07f65882 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1896,7 +1896,7 @@ struct BuildVehicleWindow : Window { }}; }; -static WindowDesc _build_vehicle_desc(__FILE__, __LINE__, +static WindowDesc _build_vehicle_desc( WDP_AUTO, "build_vehicle", 240, 268, WC_BUILD_VEHICLE, WC_NONE, WDF_CONSTRUCTION, diff --git a/src/cheat_gui.cpp b/src/cheat_gui.cpp index 0a1f7fbeee..394e7c5223 100644 --- a/src/cheat_gui.cpp +++ b/src/cheat_gui.cpp @@ -426,7 +426,7 @@ struct CheatWindow : Window { }; /** Window description of the cheats GUI. */ -static WindowDesc _cheats_desc(__FILE__, __LINE__, +static WindowDesc _cheats_desc( WDP_AUTO, "cheats", 0, 0, WC_CHEATS, WC_NONE, 0, diff --git a/src/company_gui.cpp b/src/company_gui.cpp index f15e66ce7c..9c05f513b8 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -529,7 +529,7 @@ struct CompanyFinancesWindow : Window { /** First conservative estimate of the maximum amount of money */ Money CompanyFinancesWindow::max_money = INT32_MAX; -static WindowDesc _company_finances_desc(__FILE__, __LINE__, +static WindowDesc _company_finances_desc( WDP_AUTO, "company_finances", 0, 0, WC_FINANCES, WC_NONE, 0, @@ -1139,7 +1139,7 @@ static constexpr NWidgetPart _nested_select_company_livery_widgets[] = { EndContainer(), }; -static WindowDesc _select_company_livery_desc(__FILE__, __LINE__, +static WindowDesc _select_company_livery_desc( WDP_AUTO, "company_color_scheme", 0, 0, WC_COMPANY_COLOUR, WC_NONE, 0, @@ -1764,7 +1764,7 @@ public: }; /** Company manager face selection window description */ -static WindowDesc _select_company_manager_face_desc(__FILE__, __LINE__, +static WindowDesc _select_company_manager_face_desc( WDP_AUTO, nullptr, 0, 0, WC_COMPANY_MANAGER_FACE, WC_NONE, WDF_CONSTRUCTION, @@ -2141,7 +2141,7 @@ struct CompanyInfrastructureWindow : Window } }; -static WindowDesc _company_infrastructure_desc(__FILE__, __LINE__, +static WindowDesc _company_infrastructure_desc( WDP_AUTO, "company_infrastructure", 0, 0, WC_COMPANY_INFRASTRUCTURE, WC_NONE, 0, @@ -2629,7 +2629,7 @@ struct CompanyWindow : Window } }; -static WindowDesc _company_desc(__FILE__, __LINE__, +static WindowDesc _company_desc( WDP_AUTO, "company", 0, 0, WC_COMPANY, WC_NONE, 0, @@ -2763,7 +2763,7 @@ static constexpr NWidgetPart _nested_buy_company_widgets[] = { EndContainer(), }; -static WindowDesc _buy_company_desc(__FILE__, __LINE__, +static WindowDesc _buy_company_desc( WDP_AUTO, nullptr, 0, 0, WC_BUY_COMPANY, WC_NONE, WDF_CONSTRUCTION, diff --git a/src/console_gui.cpp b/src/console_gui.cpp index 4d4d642976..2fd8b221ef 100644 --- a/src/console_gui.cpp +++ b/src/console_gui.cpp @@ -102,7 +102,7 @@ static constexpr NWidgetPart _nested_console_window_widgets[] = { NWidget(WWT_EMPTY, INVALID_COLOUR, WID_C_BACKGROUND), SetResize(1, 1), }; -static WindowDesc _console_window_desc(__FILE__, __LINE__, +static WindowDesc _console_window_desc( WDP_MANUAL, nullptr, 0, 0, WC_CONSOLE, WC_NONE, 0, diff --git a/src/date_gui.cpp b/src/date_gui.cpp index abbe8ad784..20a6718aeb 100644 --- a/src/date_gui.cpp +++ b/src/date_gui.cpp @@ -195,7 +195,7 @@ static constexpr NWidgetPart _nested_set_date_widgets[] = { }; /** Description of the date setting window. */ -static WindowDesc _set_date_desc(__FILE__, __LINE__, +static WindowDesc _set_date_desc( WDP_CENTER, nullptr, 0, 0, WC_SET_DATE, WC_NONE, 0, diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index c96ae80748..a630bf26e4 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -85,28 +85,28 @@ static constexpr NWidgetPart _nested_train_depot_widgets[] = { EndContainer(), }; -static WindowDesc _train_depot_desc(__FILE__, __LINE__, +static WindowDesc _train_depot_desc( WDP_AUTO, "depot_train", 362, 123, WC_VEHICLE_DEPOT, WC_NONE, 0, std::begin(_nested_train_depot_widgets), std::end(_nested_train_depot_widgets) ); -static WindowDesc _road_depot_desc(__FILE__, __LINE__, +static WindowDesc _road_depot_desc( WDP_AUTO, "depot_roadveh", 316, 97, WC_VEHICLE_DEPOT, WC_NONE, 0, std::begin(_nested_train_depot_widgets), std::end(_nested_train_depot_widgets) ); -static WindowDesc _ship_depot_desc(__FILE__, __LINE__, +static WindowDesc _ship_depot_desc( WDP_AUTO, "depot_ship", 306, 99, WC_VEHICLE_DEPOT, WC_NONE, 0, std::begin(_nested_train_depot_widgets), std::end(_nested_train_depot_widgets) ); -static WindowDesc _aircraft_depot_desc(__FILE__, __LINE__, +static WindowDesc _aircraft_depot_desc( WDP_AUTO, "depot_aircraft", 332, 99, WC_VEHICLE_DEPOT, WC_NONE, 0, diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp index f43c1ae7ba..39518a2303 100644 --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -344,7 +344,7 @@ static constexpr NWidgetPart _nested_build_docks_toolbar_widgets[] = { EndContainer(), }; -static WindowDesc _build_docks_toolbar_desc(__FILE__, __LINE__, +static WindowDesc _build_docks_toolbar_desc( WDP_ALIGN_TOOLBAR, "toolbar_water", 0, 0, WC_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, @@ -388,7 +388,7 @@ static constexpr NWidgetPart _nested_build_docks_scen_toolbar_widgets[] = { }; /** Window definition for the build docks in scenario editor window. */ -static WindowDesc _build_docks_scen_toolbar_desc(__FILE__, __LINE__, +static WindowDesc _build_docks_scen_toolbar_desc( WDP_AUTO, "toolbar_water_scen", 0, 0, WC_SCEN_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, @@ -498,7 +498,7 @@ static constexpr NWidgetPart _nested_build_dock_station_widgets[] = { EndContainer(), }; -static WindowDesc _build_dock_station_desc(__FILE__, __LINE__, +static WindowDesc _build_dock_station_desc( WDP_AUTO, nullptr, 0, 0, WC_BUILD_STATION, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, @@ -593,7 +593,7 @@ static constexpr NWidgetPart _nested_build_docks_depot_widgets[] = { EndContainer(), }; -static WindowDesc _build_docks_depot_desc(__FILE__, __LINE__, +static WindowDesc _build_docks_depot_desc( WDP_AUTO, nullptr, 0, 0, WC_BUILD_DEPOT, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp index 4742e6e234..a6423be3a7 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -144,7 +144,7 @@ struct EnginePreviewWindow : Window { } }; -static WindowDesc _engine_preview_desc(__FILE__, __LINE__, +static WindowDesc _engine_preview_desc( WDP_CENTER, nullptr, 0, 0, WC_ENGINE_PREVIEW, WC_NONE, WDF_CONSTRUCTION, diff --git a/src/error_gui.cpp b/src/error_gui.cpp index b1cb2b0fe9..812e04cefa 100644 --- a/src/error_gui.cpp +++ b/src/error_gui.cpp @@ -43,7 +43,7 @@ static constexpr NWidgetPart _nested_errmsg_widgets[] = { EndContainer(), }; -static WindowDesc _errmsg_desc(__FILE__, __LINE__, +static WindowDesc _errmsg_desc( WDP_MANUAL, nullptr, 0, 0, WC_ERRMSG, WC_NONE, 0, @@ -63,7 +63,7 @@ static constexpr NWidgetPart _nested_errmsg_face_widgets[] = { EndContainer(), }; -static WindowDesc _errmsg_face_desc(__FILE__, __LINE__, +static WindowDesc _errmsg_face_desc( WDP_MANUAL, nullptr, 0, 0, WC_ERRMSG, WC_NONE, 0, diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index a6ec99bf81..f02b1b8edd 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -883,7 +883,7 @@ public: }; /** Load game/scenario */ -static WindowDesc _load_dialog_desc(__FILE__, __LINE__, +static WindowDesc _load_dialog_desc( WDP_CENTER, "load_game", 500, 294, WC_SAVELOAD, WC_NONE, 0, @@ -891,7 +891,7 @@ static WindowDesc _load_dialog_desc(__FILE__, __LINE__, ); /** Load heightmap */ -static WindowDesc _load_heightmap_dialog_desc(__FILE__, __LINE__, +static WindowDesc _load_heightmap_dialog_desc( WDP_CENTER, "load_heightmap", 257, 320, WC_SAVELOAD, WC_NONE, 0, @@ -899,7 +899,7 @@ static WindowDesc _load_heightmap_dialog_desc(__FILE__, __LINE__, ); /** Save game/scenario */ -static WindowDesc _save_dialog_desc(__FILE__, __LINE__, +static WindowDesc _save_dialog_desc( WDP_CENTER, "save_game", 500, 294, WC_SAVELOAD, WC_NONE, 0, diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index 114d5c2d89..6ffacd73bd 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -726,7 +726,7 @@ struct FramerateWindow : Window { } }; -static WindowDesc _framerate_display_desc(__FILE__, __LINE__, +static WindowDesc _framerate_display_desc( WDP_AUTO, "framerate_display", 0, 0, WC_FRAMERATE_DISPLAY, WC_NONE, 0, @@ -1017,7 +1017,7 @@ struct FrametimeGraphWindow : Window { } }; -static WindowDesc _frametime_graph_window_desc(__FILE__, __LINE__, +static WindowDesc _frametime_graph_window_desc( WDP_AUTO, "frametime_graph", 140, 90, WC_FRAMETIME_GRAPH, WC_NONE, 0, diff --git a/src/game/game_gui.cpp b/src/game/game_gui.cpp index a63100edb6..22f94ef055 100644 --- a/src/game/game_gui.cpp +++ b/src/game/game_gui.cpp @@ -73,7 +73,7 @@ static constexpr NWidgetPart _nested_gs_config_widgets[] = { }; /** Window definition for the configure GS window. */ -static WindowDesc _gs_config_desc(__FILE__, __LINE__, +static WindowDesc _gs_config_desc( WDP_CENTER, "settings_gs_config", 500, 350, WC_GAME_OPTIONS, WC_NONE, 0, diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index c895640756..6f5876a00b 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -1003,14 +1003,14 @@ struct GenerateLandscapeWindow : public Window { } }; -static WindowDesc _generate_landscape_desc(__FILE__, __LINE__, +static WindowDesc _generate_landscape_desc( WDP_CENTER, nullptr, 0, 0, WC_GENERATE_LANDSCAPE, WC_NONE, 0, std::begin(_nested_generate_landscape_widgets), std::end(_nested_generate_landscape_widgets) ); -static WindowDesc _heightmap_load_desc(__FILE__, __LINE__, +static WindowDesc _heightmap_load_desc( WDP_CENTER, nullptr, 0, 0, WC_GENERATE_LANDSCAPE, WC_NONE, 0, @@ -1313,7 +1313,7 @@ static constexpr NWidgetPart _nested_create_scenario_widgets[] = { EndContainer(), }; -static WindowDesc _create_scenario_desc(__FILE__, __LINE__, +static WindowDesc _create_scenario_desc( WDP_CENTER, nullptr, 0, 0, WC_GENERATE_LANDSCAPE, WC_NONE, 0, @@ -1339,7 +1339,7 @@ static constexpr NWidgetPart _nested_generate_progress_widgets[] = { }; -static WindowDesc _generate_progress_desc(__FILE__, __LINE__, +static WindowDesc _generate_progress_desc( WDP_CENTER, nullptr, 0, 0, WC_MODAL_PROGRESS, WC_NONE, 0, diff --git a/src/goal_gui.cpp b/src/goal_gui.cpp index d8be74d358..4e2334b9ef 100644 --- a/src/goal_gui.cpp +++ b/src/goal_gui.cpp @@ -302,7 +302,7 @@ static constexpr NWidgetPart _nested_goals_list_widgets[] = { EndContainer(), }; -static WindowDesc _goals_list_desc(__FILE__, __LINE__, +static WindowDesc _goals_list_desc( WDP_AUTO, "list_goals", 500, 127, WC_GOALS_LIST, WC_NONE, 0, @@ -447,28 +447,24 @@ static constexpr auto _nested_goal_question_widgets_error = NestedGoalWidgets static WindowDesc _goal_question_list_desc[] = { { - __FILE__, __LINE__, WDP_CENTER, nullptr, 0, 0, WC_GOAL_QUESTION, WC_NONE, WDF_CONSTRUCTION, std::begin(_nested_goal_question_widgets_question), std::end(_nested_goal_question_widgets_question), }, { - __FILE__, __LINE__, WDP_CENTER, nullptr, 0, 0, WC_GOAL_QUESTION, WC_NONE, WDF_CONSTRUCTION, std::begin(_nested_goal_question_widgets_info), std::end(_nested_goal_question_widgets_info), }, { - __FILE__, __LINE__, WDP_CENTER, nullptr, 0, 0, WC_GOAL_QUESTION, WC_NONE, WDF_CONSTRUCTION, std::begin(_nested_goal_question_widgets_warning), std::end(_nested_goal_question_widgets_warning), }, { - __FILE__, __LINE__, WDP_CENTER, nullptr, 0, 0, WC_GOAL_QUESTION, WC_NONE, WDF_CONSTRUCTION, diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index d1112c5eea..345a6af3fb 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -142,7 +142,7 @@ static constexpr NWidgetPart _nested_graph_legend_widgets[] = { EndContainer(), }; -static WindowDesc _graph_legend_desc(__FILE__, __LINE__, +static WindowDesc _graph_legend_desc( WDP_AUTO, "graph_legend", 0, 0, WC_GRAPH_LEGEND, WC_NONE, 0, @@ -692,7 +692,7 @@ static constexpr NWidgetPart _nested_operating_profit_widgets[] = { EndContainer(), }; -static WindowDesc _operating_profit_desc(__FILE__, __LINE__, +static WindowDesc _operating_profit_desc( WDP_AUTO, "graph_operating_profit", 0, 0, WC_OPERATING_PROFIT, WC_NONE, 0, @@ -751,7 +751,7 @@ static constexpr NWidgetPart _nested_income_graph_widgets[] = { EndContainer(), }; -static WindowDesc _income_graph_desc(__FILE__, __LINE__, +static WindowDesc _income_graph_desc( WDP_AUTO, "graph_income", 0, 0, WC_INCOME_GRAPH, WC_NONE, 0, @@ -808,7 +808,7 @@ static constexpr NWidgetPart _nested_delivered_cargo_graph_widgets[] = { EndContainer(), }; -static WindowDesc _delivered_cargo_graph_desc(__FILE__, __LINE__, +static WindowDesc _delivered_cargo_graph_desc( WDP_AUTO, "graph_delivered_cargo", 0, 0, WC_DELIVERED_CARGO, WC_NONE, 0, @@ -872,7 +872,7 @@ static constexpr NWidgetPart _nested_performance_history_widgets[] = { EndContainer(), }; -static WindowDesc _performance_history_desc(__FILE__, __LINE__, +static WindowDesc _performance_history_desc( WDP_AUTO, "graph_performance", 0, 0, WC_PERFORMANCE_HISTORY, WC_NONE, 0, @@ -929,7 +929,7 @@ static constexpr NWidgetPart _nested_company_value_graph_widgets[] = { EndContainer(), }; -static WindowDesc _company_value_graph_desc(__FILE__, __LINE__, +static WindowDesc _company_value_graph_desc( WDP_AUTO, "graph_company_value", 0, 0, WC_COMPANY_VALUE, WC_NONE, 0, @@ -1167,7 +1167,7 @@ static constexpr NWidgetPart _nested_cargo_payment_rates_widgets[] = { EndContainer(), }; -static WindowDesc _cargo_payment_rates_desc(__FILE__, __LINE__, +static WindowDesc _cargo_payment_rates_desc( WDP_AUTO, "graph_cargo_payment_rates", 0, 0, WC_PAYMENT_RATES, WC_NONE, 0, @@ -1460,7 +1460,7 @@ static constexpr NWidgetPart _nested_performance_rating_detail_widgets[] = { NWidgetFunction(MakePerformanceDetailPanels), }; -static WindowDesc _performance_rating_detail_desc(__FILE__, __LINE__, +static WindowDesc _performance_rating_detail_desc( WDP_AUTO, "league_details", 0, 0, WC_PERFORMANCE_DETAIL, WC_NONE, 0, diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 00520c7ed8..5083da047a 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -1100,14 +1100,14 @@ public: }; -static WindowDesc _other_group_desc(__FILE__, __LINE__, +static WindowDesc _other_group_desc( WDP_AUTO, "list_groups", 460, 246, WC_INVALID, WC_NONE, 0, std::begin(_nested_group_widgets), std::end(_nested_group_widgets) ); -static WindowDesc _train_group_desc(__FILE__, __LINE__, +static WindowDesc _train_group_desc( WDP_AUTO, "list_groups_train", 525, 246, WC_TRAINS_LIST, WC_NONE, 0, diff --git a/src/help_gui.cpp b/src/help_gui.cpp index 8345430ed8..8012a880a1 100644 --- a/src/help_gui.cpp +++ b/src/help_gui.cpp @@ -193,7 +193,7 @@ static constexpr NWidgetPart _nested_helpwin_widgets[] = { EndContainer(), }; -static WindowDesc _helpwin_desc(__FILE__, __LINE__, +static WindowDesc _helpwin_desc( WDP_CENTER, nullptr, 0, 0, WC_HELPWIN, WC_NONE, 0, diff --git a/src/highscore_gui.cpp b/src/highscore_gui.cpp index 2198b191bc..3cd70d1712 100644 --- a/src/highscore_gui.cpp +++ b/src/highscore_gui.cpp @@ -214,14 +214,14 @@ static constexpr NWidgetPart _nested_highscore_widgets[] = { NWidget(WWT_PANEL, COLOUR_BROWN, WID_H_BACKGROUND), SetResize(1, 1), EndContainer(), }; -static WindowDesc _highscore_desc(__FILE__, __LINE__, +static WindowDesc _highscore_desc( WDP_MANUAL, nullptr, 0, 0, WC_HIGHSCORE, WC_NONE, 0, std::begin(_nested_highscore_widgets), std::end(_nested_highscore_widgets) ); -static WindowDesc _endgame_desc(__FILE__, __LINE__, +static WindowDesc _endgame_desc( WDP_MANUAL, nullptr, 0, 0, WC_ENDSCREEN, WC_NONE, 0, diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 097e63cc40..a8e5b3bfee 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -292,7 +292,7 @@ static constexpr NWidgetPart _nested_build_industry_widgets[] = { }; /** Window definition of the dynamic place industries gui */ -static WindowDesc _build_industry_desc(__FILE__, __LINE__, +static WindowDesc _build_industry_desc( WDP_AUTO, "build_industry", 170, 212, WC_BUILD_INDUSTRY, WC_NONE, WDF_CONSTRUCTION, @@ -1216,7 +1216,7 @@ static constexpr NWidgetPart _nested_industry_view_widgets[] = { }; /** Window definition of the view industry gui */ -static WindowDesc _industry_view_desc(__FILE__, __LINE__, +static WindowDesc _industry_view_desc( WDP_AUTO, "view_industry", 260, 120, WC_INDUSTRY_VIEW, WC_NONE, 0, @@ -1920,7 +1920,7 @@ CargoID IndustryDirectoryWindow::produced_cargo_filter = CargoFilterCriteria::CF /** Window definition of the industry directory gui */ -static WindowDesc _industry_directory_desc(__FILE__, __LINE__, +static WindowDesc _industry_directory_desc( WDP_AUTO, "list_industries", 428, 190, WC_INDUSTRY_DIRECTORY, WC_NONE, 0, @@ -1959,7 +1959,7 @@ static constexpr NWidgetPart _nested_industry_cargoes_widgets[] = { }; /** Window description for the industry cargoes window. */ -static WindowDesc _industry_cargoes_desc(__FILE__, __LINE__, +static WindowDesc _industry_cargoes_desc( WDP_AUTO, "industry_cargoes", 300, 210, WC_INDUSTRY_CARGOES, WC_NONE, 0, diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index 2ffe2d4097..94399b47f8 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -456,7 +456,7 @@ static constexpr NWidgetPart _nested_select_game_widgets[] = { EndContainer(), }; -static WindowDesc _select_game_desc(__FILE__, __LINE__, +static WindowDesc _select_game_desc( WDP_CENTER, nullptr, 0, 0, WC_SELECT_GAME, WC_NONE, WDF_NO_CLOSE, diff --git a/src/league_gui.cpp b/src/league_gui.cpp index 696d0fe14c..2e0e6ee9d0 100644 --- a/src/league_gui.cpp +++ b/src/league_gui.cpp @@ -199,7 +199,7 @@ static constexpr NWidgetPart _nested_performance_league_widgets[] = { EndContainer(), }; -static WindowDesc _performance_league_desc(__FILE__, __LINE__, +static WindowDesc _performance_league_desc( WDP_AUTO, "performance_league", 0, 0, WC_COMPANY_LEAGUE, WC_NONE, 0, @@ -434,7 +434,7 @@ static constexpr NWidgetPart _nested_script_league_widgets[] = { EndContainer(), }; -static WindowDesc _script_league_desc(__FILE__, __LINE__, +static WindowDesc _script_league_desc( WDP_AUTO, "script_league", 0, 0, WC_COMPANY_LEAGUE, WC_NONE, 0, diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index 24cfb92098..7f9c944c4e 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -536,7 +536,7 @@ static constexpr NWidgetPart _nested_linkgraph_legend_widgets[] = { static_assert(WID_LGL_SATURATION_LAST - WID_LGL_SATURATION_FIRST == lengthof(LinkGraphOverlay::LINK_COLOURS[0]) - 1); -static WindowDesc _linkgraph_legend_desc(__FILE__, __LINE__, +static WindowDesc _linkgraph_legend_desc( WDP_AUTO, "toolbar_linkgraph", 0, 0, WC_LINKGRAPH_LEGEND, WC_NONE, 0, diff --git a/src/main_gui.cpp b/src/main_gui.cpp index a413cd3594..2784e04cda 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -513,7 +513,7 @@ struct MainWindow : Window }}; }; -static WindowDesc _main_window_desc(__FILE__, __LINE__, +static WindowDesc _main_window_desc( WDP_MANUAL, nullptr, 0, 0, WC_MAIN_WINDOW, WC_NONE, WDF_NO_CLOSE, diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 790419cdfe..27a16d4452 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -59,7 +59,7 @@ static constexpr NWidgetPart _nested_land_info_widgets[] = { NWidget(WWT_PANEL, COLOUR_GREY, WID_LI_BACKGROUND), EndContainer(), }; -static WindowDesc _land_info_desc(__FILE__, __LINE__, +static WindowDesc _land_info_desc( WDP_AUTO, nullptr, 0, 0, WC_LAND_INFO, WC_NONE, 0, @@ -397,7 +397,7 @@ static constexpr NWidgetPart _nested_about_widgets[] = { EndContainer(), }; -static WindowDesc _about_desc(__FILE__, __LINE__, +static WindowDesc _about_desc( WDP_CENTER, nullptr, 0, 0, WC_GAME_OPTIONS, WC_NONE, 0, @@ -656,7 +656,7 @@ static constexpr NWidgetPart _nested_tooltips_widgets[] = { NWidget(WWT_EMPTY, INVALID_COLOUR, WID_TT_BACKGROUND), }; -static WindowDesc _tool_tips_desc(__FILE__, __LINE__, +static WindowDesc _tool_tips_desc( WDP_MANUAL, nullptr, 0, 0, // Coordinates and sizes are not used, WC_TOOLTIPS, WC_NONE, WDF_NO_FOCUS | WDF_NO_CLOSE, @@ -1069,7 +1069,7 @@ static constexpr NWidgetPart _nested_query_string_widgets[] = { EndContainer(), }; -static WindowDesc _query_string_desc(__FILE__, __LINE__, +static WindowDesc _query_string_desc( WDP_CENTER, nullptr, 0, 0, WC_QUERY_STRING, WC_NONE, 0, @@ -1212,7 +1212,7 @@ static constexpr NWidgetPart _nested_query_widgets[] = { EndContainer(), }; -static WindowDesc _query_desc(__FILE__, __LINE__, +static WindowDesc _query_desc( WDP_CENTER, nullptr, 0, 0, WC_CONFIRM_POPUP_QUERY, WC_NONE, WDF_MODAL, diff --git a/src/music_gui.cpp b/src/music_gui.cpp index 728ba73c5c..8ed2e0749a 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -667,7 +667,7 @@ static constexpr NWidgetPart _nested_music_track_selection_widgets[] = { EndContainer(), }; -static WindowDesc _music_track_selection_desc(__FILE__, __LINE__, +static WindowDesc _music_track_selection_desc( WDP_AUTO, nullptr, 0, 0, WC_MUSIC_TRACK_SELECTION, WC_NONE, 0, @@ -926,7 +926,7 @@ static constexpr NWidgetPart _nested_music_window_widgets[] = { EndContainer(), }; -static WindowDesc _music_window_desc(__FILE__, __LINE__, +static WindowDesc _music_window_desc( WDP_AUTO, "music", 0, 0, WC_MUSIC_WINDOW, WC_NONE, 0, diff --git a/src/network/network_chat_gui.cpp b/src/network/network_chat_gui.cpp index ece8f5e88a..1b83f67f76 100644 --- a/src/network/network_chat_gui.cpp +++ b/src/network/network_chat_gui.cpp @@ -506,7 +506,7 @@ static constexpr NWidgetPart _nested_chat_window_widgets[] = { }; /** The description of the chat window. */ -static WindowDesc _chat_window_desc(__FILE__, __LINE__, +static WindowDesc _chat_window_desc( WDP_MANUAL, nullptr, 0, 0, WC_SEND_NETWORK_MSG, WC_NONE, 0, diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 479be14e51..2a37224498 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -94,7 +94,7 @@ static constexpr NWidgetPart _nested_network_content_download_status_window_widg }; /** Window description for the download window */ -static WindowDesc _network_content_download_status_window_desc(__FILE__, __LINE__, +static WindowDesc _network_content_download_status_window_desc( WDP_CENTER, nullptr, 0, 0, WC_NETWORK_STATUS_WINDOW, WC_NONE, WDF_MODAL, @@ -1113,7 +1113,7 @@ static constexpr NWidgetPart _nested_network_content_list_widgets[] = { }; /** Window description of the content list */ -static WindowDesc _network_content_list_desc(__FILE__, __LINE__, +static WindowDesc _network_content_list_desc( WDP_CENTER, "list_content", 630, 460, WC_NETWORK_WINDOW, WC_NONE, 0, diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 89cc53879e..4c21dec535 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -955,7 +955,7 @@ static constexpr NWidgetPart _nested_network_game_widgets[] = { EndContainer(), }; -static WindowDesc _network_game_window_desc(__FILE__, __LINE__, +static WindowDesc _network_game_window_desc( WDP_CENTER, "list_servers", 1000, 730, WC_NETWORK_WINDOW, WC_NONE, 0, @@ -1222,7 +1222,7 @@ static constexpr NWidgetPart _nested_network_start_server_window_widgets[] = { EndContainer(), }; -static WindowDesc _network_start_server_window_desc(__FILE__, __LINE__, +static WindowDesc _network_start_server_window_desc( WDP_CENTER, nullptr, 0, 0, WC_NETWORK_WINDOW, WC_NONE, 0, @@ -1301,7 +1301,7 @@ static constexpr NWidgetPart _nested_client_list_widgets[] = { EndContainer(), }; -static WindowDesc _client_list_desc(__FILE__, __LINE__, +static WindowDesc _client_list_desc( WDP_AUTO, "list_clients", 220, 300, WC_CLIENT_LIST, WC_NONE, 0, @@ -2223,7 +2223,7 @@ static constexpr NWidgetPart _nested_network_join_status_window_widgets[] = { EndContainer(), }; -static WindowDesc _network_join_status_window_desc(__FILE__, __LINE__, +static WindowDesc _network_join_status_window_desc( WDP_CENTER, nullptr, 0, 0, WC_NETWORK_STATUS_WINDOW, WC_NONE, WDF_MODAL, @@ -2345,7 +2345,7 @@ static constexpr NWidgetPart _nested_network_company_password_window_widgets[] = EndContainer(), }; -static WindowDesc _network_company_password_window_desc(__FILE__, __LINE__, +static WindowDesc _network_company_password_window_desc( WDP_AUTO, nullptr, 0, 0, WC_COMPANY_PASSWORD_WINDOW, WC_NONE, 0, @@ -2454,7 +2454,7 @@ static constexpr NWidgetPart _nested_network_ask_relay_widgets[] = { EndContainer(), }; -static WindowDesc _network_ask_relay_desc(__FILE__, __LINE__, +static WindowDesc _network_ask_relay_desc( WDP_CENTER, nullptr, 0, 0, WC_NETWORK_ASK_RELAY, WC_NONE, WDF_MODAL, @@ -2552,7 +2552,7 @@ static constexpr NWidgetPart _nested_network_ask_survey_widgets[] = { EndContainer(), }; -static WindowDesc _network_ask_survey_desc(__FILE__, __LINE__, +static WindowDesc _network_ask_survey_desc( WDP_CENTER, nullptr, 0, 0, WC_NETWORK_ASK_SURVEY, WC_NONE, WDF_MODAL, diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index e200515e26..4ccc79e0e1 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -679,14 +679,14 @@ static constexpr NWidgetPart _nested_newgrf_inspect_widgets[] = { EndContainer(), }; -static WindowDesc _newgrf_inspect_chain_desc(__FILE__, __LINE__, +static WindowDesc _newgrf_inspect_chain_desc( WDP_AUTO, "newgrf_inspect_chain", 400, 300, WC_NEWGRF_INSPECT, WC_NONE, 0, std::begin(_nested_newgrf_inspect_chain_widgets), std::end(_nested_newgrf_inspect_chain_widgets) ); -static WindowDesc _newgrf_inspect_desc(__FILE__, __LINE__, +static WindowDesc _newgrf_inspect_desc( WDP_AUTO, "newgrf_inspect", 400, 300, WC_NEWGRF_INSPECT, WC_NONE, 0, @@ -1163,7 +1163,7 @@ static constexpr NWidgetPart _nested_sprite_aligner_widgets[] = { EndContainer(), }; -static WindowDesc _sprite_aligner_desc(__FILE__, __LINE__, +static WindowDesc _sprite_aligner_desc( WDP_AUTO, "sprite_aligner", 400, 300, WC_SPRITE_ALIGNER, WC_NONE, 0, diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index bcfe6810c3..695cad546a 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -541,7 +541,7 @@ static constexpr NWidgetPart _nested_newgrf_parameter_widgets[] = { }; /** Window definition for the change grf parameters window */ -static WindowDesc _newgrf_parameters_desc(__FILE__, __LINE__, +static WindowDesc _newgrf_parameters_desc( WDP_CENTER, "settings_newgrf_config", 500, 208, WC_GRF_PARAMETERS, WC_NONE, 0, @@ -1967,7 +1967,7 @@ static constexpr NWidgetPart _nested_newgrf_widgets[] = { }; /* Window definition of the manage newgrfs window */ -static WindowDesc _newgrf_desc(__FILE__, __LINE__, +static WindowDesc _newgrf_desc( WDP_CENTER, "settings_newgrf", 300, 263, WC_GAME_OPTIONS, WC_NONE, 0, @@ -2051,7 +2051,7 @@ static constexpr NWidgetPart _nested_save_preset_widgets[] = { }; /** Window description of the preset save window. */ -static WindowDesc _save_preset_desc(__FILE__, __LINE__, +static WindowDesc _save_preset_desc( WDP_CENTER, "save_preset", 140, 110, WC_SAVE_PRESET, WC_GAME_OPTIONS, WDF_MODAL, @@ -2196,7 +2196,7 @@ static constexpr NWidgetPart _nested_scan_progress_widgets[] = { }; /** Description of the widgets and other settings of the window. */ -static WindowDesc _scan_progress_desc(__FILE__, __LINE__, +static WindowDesc _scan_progress_desc( WDP_CENTER, nullptr, 0, 0, WC_MODAL_PROGRESS, WC_NONE, 0, diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 01479f1872..f84676080c 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -96,7 +96,7 @@ static constexpr NWidgetPart _nested_normal_news_widgets[] = { EndContainer(), }; -static WindowDesc _normal_news_desc(__FILE__, __LINE__, +static WindowDesc _normal_news_desc( WDP_MANUAL, nullptr, 0, 0, WC_NEWS_WINDOW, WC_NONE, 0, @@ -123,7 +123,7 @@ static constexpr NWidgetPart _nested_vehicle_news_widgets[] = { EndContainer(), }; -static WindowDesc _vehicle_news_desc(__FILE__, __LINE__, +static WindowDesc _vehicle_news_desc( WDP_MANUAL, nullptr, 0, 0, WC_NEWS_WINDOW, WC_NONE, 0, @@ -151,7 +151,7 @@ static constexpr NWidgetPart _nested_company_news_widgets[] = { EndContainer(), }; -static WindowDesc _company_news_desc(__FILE__, __LINE__, +static WindowDesc _company_news_desc( WDP_MANUAL, nullptr, 0, 0, WC_NEWS_WINDOW, WC_NONE, 0, @@ -174,7 +174,7 @@ static constexpr NWidgetPart _nested_thin_news_widgets[] = { EndContainer(), }; -static WindowDesc _thin_news_desc(__FILE__, __LINE__, +static WindowDesc _thin_news_desc( WDP_MANUAL, nullptr, 0, 0, WC_NEWS_WINDOW, WC_NONE, 0, @@ -200,7 +200,7 @@ static constexpr NWidgetPart _nested_small_news_widgets[] = { EndContainer(), }; -static WindowDesc _small_news_desc(__FILE__, __LINE__, +static WindowDesc _small_news_desc( WDP_MANUAL, nullptr, 0, 0, WC_NEWS_WINDOW, WC_NONE, 0, @@ -1228,7 +1228,7 @@ static constexpr NWidgetPart _nested_message_history[] = { EndContainer(), }; -static WindowDesc _message_history_desc(__FILE__, __LINE__, +static WindowDesc _message_history_desc( WDP_AUTO, "list_news", 400, 140, WC_MESSAGE_HISTORY, WC_NONE, 0, diff --git a/src/object_gui.cpp b/src/object_gui.cpp index 6e911359aa..8d1880723a 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -711,7 +711,7 @@ static constexpr NWidgetPart _nested_build_object_widgets[] = { EndContainer(), }; -static WindowDesc _build_object_desc(__FILE__, __LINE__, +static WindowDesc _build_object_desc( WDP_AUTO, "build_object", 0, 0, WC_BUILD_OBJECT, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 9a8461370d..b52edc4067 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -1686,7 +1686,7 @@ static constexpr NWidgetPart _nested_orders_train_widgets[] = { EndContainer(), }; -static WindowDesc _orders_train_desc(__FILE__, __LINE__, +static WindowDesc _orders_train_desc( WDP_AUTO, "view_vehicle_orders_train", 384, 100, WC_VEHICLE_ORDERS, WC_VEHICLE_VIEW, WDF_CONSTRUCTION, @@ -1759,7 +1759,7 @@ static constexpr NWidgetPart _nested_orders_widgets[] = { EndContainer(), }; -static WindowDesc _orders_desc(__FILE__, __LINE__, +static WindowDesc _orders_desc( WDP_AUTO, "view_vehicle_orders", 384, 100, WC_VEHICLE_ORDERS, WC_VEHICLE_VIEW, WDF_CONSTRUCTION, @@ -1786,7 +1786,7 @@ static constexpr NWidgetPart _nested_other_orders_widgets[] = { EndContainer(), }; -static WindowDesc _other_orders_desc(__FILE__, __LINE__, +static WindowDesc _other_orders_desc( WDP_AUTO, "view_vehicle_orders_competitor", 384, 86, WC_VEHICLE_ORDERS, WC_VEHICLE_VIEW, WDF_CONSTRUCTION, diff --git a/src/osk_gui.cpp b/src/osk_gui.cpp index 00d311ff24..a6e16bff75 100644 --- a/src/osk_gui.cpp +++ b/src/osk_gui.cpp @@ -333,7 +333,7 @@ static constexpr NWidgetPart _nested_osk_widgets[] = { EndContainer(), }; -static WindowDesc _osk_desc(__FILE__, __LINE__, +static WindowDesc _osk_desc( WDP_CENTER, nullptr, 0, 0, WC_OSK, WC_NONE, 0, diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 74779ebf74..bc107ccfeb 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -891,7 +891,7 @@ static constexpr NWidgetPart _nested_build_rail_widgets[] = { EndContainer(), }; -static WindowDesc _build_rail_desc(__FILE__, __LINE__, +static WindowDesc _build_rail_desc( WDP_ALIGN_TOOLBAR, "toolbar_rail", 0, 0, WC_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, @@ -1671,7 +1671,7 @@ static constexpr NWidgetPart _nested_station_builder_widgets[] = { }; /** High level window description of the station-build window (default & newGRF) */ -static WindowDesc _station_builder_desc(__FILE__, __LINE__, +static WindowDesc _station_builder_desc( WDP_AUTO, "build_station_rail", 350, 0, WC_BUILD_STATION, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, @@ -1931,7 +1931,7 @@ static constexpr NWidgetPart _nested_signal_builder_widgets[] = { }; /** Signal selection window description */ -static WindowDesc _signal_builder_desc(__FILE__, __LINE__, +static WindowDesc _signal_builder_desc( WDP_AUTO, nullptr, 0, 0, WC_BUILD_SIGNAL, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, @@ -2012,7 +2012,7 @@ static constexpr NWidgetPart _nested_build_depot_widgets[] = { EndContainer(), }; -static WindowDesc _build_depot_desc(__FILE__, __LINE__, +static WindowDesc _build_depot_desc( WDP_AUTO, nullptr, 0, 0, WC_BUILD_DEPOT, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, @@ -2241,7 +2241,7 @@ static constexpr NWidgetPart _nested_build_waypoint_widgets[] = { EndContainer(), }; -static WindowDesc _build_waypoint_desc(__FILE__, __LINE__, +static WindowDesc _build_waypoint_desc( WDP_AUTO, "build_waypoint", 0, 0, WC_BUILD_WAYPOINT, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, diff --git a/src/road_gui.cpp b/src/road_gui.cpp index d8cf2bf004..766a3434c4 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -851,7 +851,7 @@ static constexpr NWidgetPart _nested_build_road_widgets[] = { EndContainer(), }; -static WindowDesc _build_road_desc(__FILE__, __LINE__, +static WindowDesc _build_road_desc( WDP_ALIGN_TOOLBAR, "toolbar_road", 0, 0, WC_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, @@ -892,7 +892,7 @@ static constexpr NWidgetPart _nested_build_tramway_widgets[] = { EndContainer(), }; -static WindowDesc _build_tramway_desc(__FILE__, __LINE__, +static WindowDesc _build_tramway_desc( WDP_ALIGN_TOOLBAR, "toolbar_tramway", 0, 0, WC_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, @@ -947,7 +947,7 @@ static constexpr NWidgetPart _nested_build_road_scen_widgets[] = { EndContainer(), }; -static WindowDesc _build_road_scen_desc(__FILE__, __LINE__, +static WindowDesc _build_road_scen_desc( WDP_AUTO, "toolbar_road_scen", 0, 0, WC_SCEN_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, @@ -982,7 +982,7 @@ static constexpr NWidgetPart _nested_build_tramway_scen_widgets[] = { EndContainer(), }; -static WindowDesc _build_tramway_scen_desc(__FILE__, __LINE__, +static WindowDesc _build_tramway_scen_desc( WDP_AUTO, "toolbar_tram_scen", 0, 0, WC_SCEN_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, @@ -1079,7 +1079,7 @@ static constexpr NWidgetPart _nested_build_road_depot_widgets[] = { EndContainer(), }; -static WindowDesc _build_road_depot_desc(__FILE__, __LINE__, +static WindowDesc _build_road_depot_desc( WDP_AUTO, nullptr, 0, 0, WC_BUILD_DEPOT, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, @@ -1701,7 +1701,7 @@ static constexpr NWidgetPart _nested_road_station_picker_widgets[] = { EndContainer(), }; -static WindowDesc _road_station_picker_desc(__FILE__, __LINE__, +static WindowDesc _road_station_picker_desc( WDP_AUTO, "build_station_road", 0, 0, WC_BUS_STATION, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, @@ -1779,7 +1779,7 @@ static constexpr NWidgetPart _nested_tram_station_picker_widgets[] = { EndContainer(), }; -static WindowDesc _tram_station_picker_desc(__FILE__, __LINE__, +static WindowDesc _tram_station_picker_desc( WDP_AUTO, "build_station_tram", 0, 0, WC_BUS_STATION, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, diff --git a/src/screenshot_gui.cpp b/src/screenshot_gui.cpp index 268f4dec0c..8a91dc7eb3 100644 --- a/src/screenshot_gui.cpp +++ b/src/screenshot_gui.cpp @@ -60,7 +60,7 @@ static constexpr NWidgetPart _nested_screenshot[] = { EndContainer(), }; -static WindowDesc _screenshot_window_desc(__FILE__, __LINE__, +static WindowDesc _screenshot_window_desc( WDP_AUTO, "take_a_screenshot", 200, 100, WC_SCREENSHOT, WC_NONE, 0, diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp index 33f17715e0..40ac7e3cfd 100644 --- a/src/script/script_gui.cpp +++ b/src/script/script_gui.cpp @@ -261,7 +261,7 @@ static constexpr NWidgetPart _nested_script_list_widgets[] = { }; /** Window definition for the ai list window. */ -static WindowDesc _script_list_desc(__FILE__, __LINE__, +static WindowDesc _script_list_desc( WDP_CENTER, "settings_script_list", 200, 234, WC_SCRIPT_LIST, WC_NONE, 0, @@ -606,7 +606,7 @@ static constexpr NWidgetPart _nested_script_settings_widgets[] = { }; /** Window definition for the Script settings window. */ -static WindowDesc _script_settings_desc(__FILE__, __LINE__, +static WindowDesc _script_settings_desc( WDP_CENTER, "settings_script", 500, 208, WC_SCRIPT_SETTINGS, WC_NONE, 0, @@ -1288,7 +1288,7 @@ EndContainer(), }; /** Window definition for the Script debug window. */ -static WindowDesc _script_debug_desc(__FILE__, __LINE__, +static WindowDesc _script_debug_desc( WDP_AUTO, "script_debug", 600, 450, WC_SCRIPT_DEBUG, WC_NONE, 0, diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 6eb44c6c1a..80a6f1056f 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1173,7 +1173,7 @@ static constexpr NWidgetPart _nested_game_options_widgets[] = { EndContainer(), }; -static WindowDesc _game_options_desc(__FILE__, __LINE__, +static WindowDesc _game_options_desc( WDP_CENTER, nullptr, 0, 0, WC_GAME_OPTIONS, WC_NONE, 0, @@ -2883,7 +2883,7 @@ static constexpr NWidgetPart _nested_settings_selection_widgets[] = { EndContainer(), }; -static WindowDesc _settings_selection_desc(__FILE__, __LINE__, +static WindowDesc _settings_selection_desc( WDP_CENTER, "settings", 510, 450, WC_GAME_OPTIONS, WC_NONE, 0, @@ -3191,7 +3191,7 @@ static constexpr NWidgetPart _nested_cust_currency_widgets[] = { EndContainer(), }; -static WindowDesc _cust_currency_desc(__FILE__, __LINE__, +static WindowDesc _cust_currency_desc( WDP_CENTER, nullptr, 0, 0, WC_CUSTOM_CURRENCY, WC_NONE, 0, diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index 579548d86c..fd327eb020 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -383,7 +383,7 @@ static constexpr NWidgetPart _nested_sign_list_widgets[] = { EndContainer(), }; -static WindowDesc _sign_list_desc(__FILE__, __LINE__, +static WindowDesc _sign_list_desc( WDP_AUTO, "list_signs", 358, 138, WC_SIGN_LIST, WC_NONE, 0, @@ -549,7 +549,7 @@ static constexpr NWidgetPart _nested_query_sign_edit_widgets[] = { EndContainer(), }; -static WindowDesc _query_sign_edit_desc(__FILE__, __LINE__, +static WindowDesc _query_sign_edit_desc( WDP_CENTER, nullptr, 0, 0, WC_QUERY_STRING, WC_NONE, WDF_CONSTRUCTION, diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 6544f42a9e..83afc1516d 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -1981,7 +1981,7 @@ static constexpr NWidgetPart _nested_smallmap_widgets[] = { EndContainer(), }; -static WindowDesc _smallmap_desc(__FILE__, __LINE__, +static WindowDesc _smallmap_desc( WDP_AUTO, "smallmap", 484, 314, WC_SMALLMAP, WC_NONE, 0, diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 5f08c816ce..8fb5389802 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -762,7 +762,7 @@ static constexpr NWidgetPart _nested_company_stations_widgets[] = { EndContainer(), }; -static WindowDesc _company_stations_desc(__FILE__, __LINE__, +static WindowDesc _company_stations_desc( WDP_AUTO, "list_stations", 358, 162, WC_STATION_LIST, WC_NONE, 0, @@ -2130,7 +2130,7 @@ const StringID StationViewWindow::_group_names[] = { INVALID_STRING_ID }; -static WindowDesc _station_view_desc(__FILE__, __LINE__, +static WindowDesc _station_view_desc( WDP_AUTO, "view_station", 249, 117, WC_STATION_VIEW, WC_NONE, 0, @@ -2388,7 +2388,7 @@ struct SelectStationWindow : Window { } }; -static WindowDesc _select_station_desc(__FILE__, __LINE__, +static WindowDesc _select_station_desc( WDP_AUTO, "build_station_join", 200, 180, WC_SELECT_STATION, WC_NONE, WDF_CONSTRUCTION, diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp index 19db459763..7229ffd803 100644 --- a/src/statusbar_gui.cpp +++ b/src/statusbar_gui.cpp @@ -228,7 +228,7 @@ static constexpr NWidgetPart _nested_main_status_widgets[] = { EndContainer(), }; -static WindowDesc _main_status_desc(__FILE__, __LINE__, +static WindowDesc _main_status_desc( WDP_MANUAL, nullptr, 0, 0, WC_STATUS_BAR, WC_NONE, WDF_NO_FOCUS | WDF_NO_CLOSE, diff --git a/src/story_gui.cpp b/src/story_gui.cpp index 5324aaad41..05d6bc44cc 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -968,14 +968,14 @@ static constexpr NWidgetPart _nested_story_book_widgets[] = { EndContainer(), }; -static WindowDesc _story_book_desc(__FILE__, __LINE__, +static WindowDesc _story_book_desc( WDP_AUTO, "view_story", 400, 300, WC_STORY_BOOK, WC_NONE, 0, std::begin(_nested_story_book_widgets), std::end(_nested_story_book_widgets) ); -static WindowDesc _story_book_gs_desc(__FILE__, __LINE__, +static WindowDesc _story_book_gs_desc( WDP_CENTER, "view_story_gs", 400, 300, WC_STORY_BOOK, WC_NONE, 0, diff --git a/src/subsidy_gui.cpp b/src/subsidy_gui.cpp index f0ca0dc260..f43226d5f4 100644 --- a/src/subsidy_gui.cpp +++ b/src/subsidy_gui.cpp @@ -267,7 +267,7 @@ static constexpr NWidgetPart _nested_subsidies_list_widgets[] = { EndContainer(), }; -static WindowDesc _subsidies_list_desc(__FILE__, __LINE__, +static WindowDesc _subsidies_list_desc( WDP_AUTO, "list_subsidies", 500, 127, WC_SUBSIDIES_LIST, WC_NONE, 0, diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp index 164eb4c224..61751ec06a 100644 --- a/src/terraform_gui.cpp +++ b/src/terraform_gui.cpp @@ -351,7 +351,7 @@ static constexpr NWidgetPart _nested_terraform_widgets[] = { EndContainer(), }; -static WindowDesc _terraform_desc(__FILE__, __LINE__, +static WindowDesc _terraform_desc( WDP_MANUAL, "toolbar_landscape", 0, 0, WC_SCEN_LAND_GEN, WC_NONE, WDF_CONSTRUCTION, @@ -735,7 +735,7 @@ struct ScenarioEditorLandscapeGenerationWindow : Window { }, TerraformToolbarEditorGlobalHotkeys}; }; -static WindowDesc _scen_edit_land_gen_desc(__FILE__, __LINE__, +static WindowDesc _scen_edit_land_gen_desc( WDP_AUTO, "toolbar_landscape_scen", 0, 0, WC_SCEN_LAND_GEN, WC_NONE, WDF_CONSTRUCTION, diff --git a/src/tests/test_window_desc.cpp b/src/tests/test_window_desc.cpp index 3cd8406666..85d2f6ebd8 100644 --- a/src/tests/test_window_desc.cpp +++ b/src/tests/test_window_desc.cpp @@ -50,7 +50,7 @@ TEST_CASE("WindowDesc - ini_key validity") bool has_inikey = window_desc->ini_key != nullptr; bool has_widget = std::any_of(window_desc->nwid_begin, window_desc->nwid_end, [](const NWidgetPart &part) { return part.type == WWT_DEFSIZEBOX || part.type == WWT_STICKYBOX; }); - INFO(fmt::format("{}:{}", window_desc->file, window_desc->line)); + INFO(fmt::format("{}:{}", window_desc->source_location.file_name(), window_desc->source_location.line())); CAPTURE(has_inikey); CAPTURE(has_widget); @@ -78,7 +78,7 @@ TEST_CASE("WindowDesc - NWidgetParts properly closed") { const WindowDesc *window_desc = GENERATE(from_range(std::begin(*_window_descs), std::end(*_window_descs))); - INFO(fmt::format("{}:{}", window_desc->file, window_desc->line)); + INFO(fmt::format("{}:{}", window_desc->source_location.file_name(), window_desc->source_location.line())); CHECK(IsNWidgetTreeClosed(window_desc->nwid_begin, window_desc->nwid_end)); } @@ -87,7 +87,7 @@ TEST_CASE_METHOD(WindowDescTestsFixture, "WindowDesc - NWidgetPart validity") { const WindowDesc *window_desc = GENERATE(from_range(std::begin(*_window_descs), std::end(*_window_descs))); - INFO(fmt::format("{}:{}", window_desc->file, window_desc->line)); + INFO(fmt::format("{}:{}", window_desc->source_location.file_name(), window_desc->source_location.line())); NWidgetStacked *shade_select = nullptr; std::unique_ptr root = nullptr; diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index c07133f248..018c1c4f3e 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -74,7 +74,7 @@ static constexpr NWidgetPart _nested_textfile_widgets[] = { }; /** Window definition for the textfile window */ -static WindowDesc _textfile_desc(__FILE__, __LINE__, +static WindowDesc _textfile_desc( WDP_CENTER, "textfile", 630, 460, WC_TEXTFILE, WC_NONE, 0, diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index a7e700f536..5f4f99758d 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -852,7 +852,7 @@ static constexpr NWidgetPart _nested_timetable_widgets[] = { EndContainer(), }; -static WindowDesc _timetable_desc(__FILE__, __LINE__, +static WindowDesc _timetable_desc( WDP_AUTO, "view_vehicle_timetable", 400, 130, WC_VEHICLE_TIMETABLE, WC_VEHICLE_VIEW, WDF_CONSTRUCTION, diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index ec54fb1c07..c45db8a0b6 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -2196,7 +2196,7 @@ static constexpr NWidgetPart _nested_toolbar_normal_widgets[] = { NWidgetFunction(MakeMainToolbar), }; -static WindowDesc _toolb_normal_desc(__FILE__, __LINE__, +static WindowDesc _toolb_normal_desc( WDP_MANUAL, nullptr, 0, 0, WC_MAIN_TOOLBAR, WC_NONE, WDF_NO_FOCUS | WDF_NO_CLOSE, @@ -2536,7 +2536,7 @@ static constexpr NWidgetPart _nested_toolb_scen_widgets[] = { NWidgetFunction(MakeScenarioToolbar), }; -static WindowDesc _toolb_scen_desc(__FILE__, __LINE__, +static WindowDesc _toolb_scen_desc( WDP_MANUAL, nullptr, 0, 0, WC_MAIN_TOOLBAR, WC_NONE, WDF_NO_FOCUS | WDF_NO_CLOSE, diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 3a46990641..dbe65e3742 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -339,7 +339,7 @@ public: } }; -static WindowDesc _town_authority_desc(__FILE__, __LINE__, +static WindowDesc _town_authority_desc( WDP_AUTO, "view_town_authority", 317, 222, WC_TOWN_AUTHORITY, WC_NONE, 0, @@ -633,7 +633,7 @@ static constexpr NWidgetPart _nested_town_game_view_widgets[] = { EndContainer(), }; -static WindowDesc _town_game_view_desc(__FILE__, __LINE__, +static WindowDesc _town_game_view_desc( WDP_AUTO, "view_town", 260, TownViewWindow::WID_TV_HEIGHT_NORMAL, WC_TOWN_VIEW, WC_NONE, 0, @@ -664,7 +664,7 @@ static constexpr NWidgetPart _nested_town_editor_view_widgets[] = { EndContainer(), }; -static WindowDesc _town_editor_view_desc(__FILE__, __LINE__, +static WindowDesc _town_editor_view_desc( WDP_AUTO, "view_town_scen", 260, TownViewWindow::WID_TV_HEIGHT_NORMAL, WC_TOWN_VIEW, WC_NONE, 0, @@ -1060,7 +1060,7 @@ GUITownList::SortFunction * const TownDirectoryWindow::sorter_funcs[] = { &TownRatingSorter, }; -static WindowDesc _town_directory_desc(__FILE__, __LINE__, +static WindowDesc _town_directory_desc( WDP_AUTO, "list_towns", 208, 202, WC_TOWN_DIRECTORY, WC_NONE, 0, @@ -1294,7 +1294,7 @@ public: } }; -static WindowDesc _found_town_desc(__FILE__, __LINE__, +static WindowDesc _found_town_desc( WDP_AUTO, "build_town", 160, 162, WC_FOUND_TOWN, WC_NONE, WDF_CONSTRUCTION, diff --git a/src/transparency_gui.cpp b/src/transparency_gui.cpp index d0379ad801..ec437ebe2a 100644 --- a/src/transparency_gui.cpp +++ b/src/transparency_gui.cpp @@ -148,7 +148,7 @@ static constexpr NWidgetPart _nested_transparency_widgets[] = { EndContainer(), }; -static WindowDesc _transparency_desc(__FILE__, __LINE__, +static WindowDesc _transparency_desc( WDP_MANUAL, "toolbar_transparency", 0, 0, WC_TRANSPARENCY_TOOLBAR, WC_NONE, 0, diff --git a/src/tree_gui.cpp b/src/tree_gui.cpp index 4a91853289..c0202513b6 100644 --- a/src/tree_gui.cpp +++ b/src/tree_gui.cpp @@ -313,7 +313,7 @@ static constexpr NWidgetPart _nested_build_trees_widgets[] = { EndContainer(), }; -static WindowDesc _build_trees_desc(__FILE__, __LINE__, +static WindowDesc _build_trees_desc( WDP_AUTO, "build_tree", 0, 0, WC_BUILD_TREES, WC_NONE, WDF_CONSTRUCTION, diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 7c12256061..6ed05fc076 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -1271,7 +1271,7 @@ static constexpr NWidgetPart _nested_vehicle_refit_widgets[] = { EndContainer(), }; -static WindowDesc _vehicle_refit_desc(__FILE__, __LINE__, +static WindowDesc _vehicle_refit_desc( WDP_AUTO, "view_vehicle_refit", 240, 174, WC_VEHICLE_REFIT, WC_VEHICLE_VIEW, WDF_CONSTRUCTION, @@ -2200,14 +2200,14 @@ public: } }; -static WindowDesc _vehicle_list_other_desc(__FILE__, __LINE__, +static WindowDesc _vehicle_list_other_desc( WDP_AUTO, "list_vehicles", 260, 246, WC_INVALID, WC_NONE, 0, std::begin(_nested_vehicle_list), std::end(_nested_vehicle_list) ); -static WindowDesc _vehicle_list_train_desc(__FILE__, __LINE__, +static WindowDesc _vehicle_list_train_desc( WDP_AUTO, "list_vehicles_train", 325, 246, WC_TRAINS_LIST, WC_NONE, 0, @@ -2766,7 +2766,7 @@ struct VehicleDetailsWindow : Window { }; /** Vehicle details window descriptor. */ -static WindowDesc _train_vehicle_details_desc(__FILE__, __LINE__, +static WindowDesc _train_vehicle_details_desc( WDP_AUTO, "view_vehicle_details_train", 405, 178, WC_VEHICLE_DETAILS, WC_VEHICLE_VIEW, 0, @@ -2774,7 +2774,7 @@ static WindowDesc _train_vehicle_details_desc(__FILE__, __LINE__, ); /** Vehicle details window descriptor for other vehicles than a train. */ -static WindowDesc _nontrain_vehicle_details_desc(__FILE__, __LINE__, +static WindowDesc _nontrain_vehicle_details_desc( WDP_AUTO, "view_vehicle_details", 405, 113, WC_VEHICLE_DETAILS, WC_VEHICLE_VIEW, 0, @@ -3373,7 +3373,7 @@ public: }; /** Vehicle view window descriptor for all vehicles but trains. */ -static WindowDesc _vehicle_view_desc(__FILE__, __LINE__, +static WindowDesc _vehicle_view_desc( WDP_AUTO, "view_vehicle", 250, 116, WC_VEHICLE_VIEW, WC_NONE, 0, @@ -3385,7 +3385,7 @@ static WindowDesc _vehicle_view_desc(__FILE__, __LINE__, * Vehicle view window descriptor for trains. Only minimum_height and * default_height are different for train view. */ -static WindowDesc _train_view_desc(__FILE__, __LINE__, +static WindowDesc _train_view_desc( WDP_AUTO, "view_vehicle_train", 250, 134, WC_VEHICLE_VIEW, WC_NONE, 0, diff --git a/src/viewport_gui.cpp b/src/viewport_gui.cpp index c2c55240ee..e872191975 100644 --- a/src/viewport_gui.cpp +++ b/src/viewport_gui.cpp @@ -142,7 +142,7 @@ public: } }; -static WindowDesc _extra_viewport_desc(__FILE__, __LINE__, +static WindowDesc _extra_viewport_desc( WDP_AUTO, "extra_viewport", 300, 268, WC_EXTRA_VIEWPORT, WC_NONE, 0, diff --git a/src/waypoint_gui.cpp b/src/waypoint_gui.cpp index 725f8f91d8..9e6fcdf0f9 100644 --- a/src/waypoint_gui.cpp +++ b/src/waypoint_gui.cpp @@ -183,7 +183,7 @@ static constexpr NWidgetPart _nested_waypoint_view_widgets[] = { }; /** The description of the waypoint view. */ -static WindowDesc _waypoint_view_desc(__FILE__, __LINE__, +static WindowDesc _waypoint_view_desc( WDP_AUTO, "view_waypoint", 260, 118, WC_WAYPOINT_VIEW, WC_NONE, 0, diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp index b6a39596fc..ee8649fcb4 100644 --- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -31,7 +31,7 @@ static constexpr NWidgetPart _nested_dropdown_menu_widgets[] = { EndContainer(), }; -static WindowDesc _dropdown_desc(__FILE__, __LINE__, +static WindowDesc _dropdown_desc( WDP_MANUAL, nullptr, 0, 0, WC_DROPDOWN_MENU, WC_NONE, WDF_NO_FOCUS, diff --git a/src/window.cpp b/src/window.cpp index 50455202c1..c1f39418d7 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -102,11 +102,11 @@ std::vector *_window_descs = nullptr; std::string _windows_file; /** Window description constructor. */ -WindowDesc::WindowDesc(const char * const file, const int line, WindowPosition def_pos, const char *ini_key, int16_t def_width_trad, int16_t def_height_trad, +WindowDesc::WindowDesc(WindowPosition def_pos, const char *ini_key, int16_t def_width_trad, int16_t def_height_trad, WindowClass window_class, WindowClass parent_class, uint32_t flags, - const NWidgetPart *nwid_begin, const NWidgetPart *nwid_end, HotkeyList *hotkeys) : - file(file), - line(line), + const NWidgetPart *nwid_begin, const NWidgetPart *nwid_end, HotkeyList *hotkeys, + const std::source_location location) : + source_location(location), default_pos(def_pos), cls(window_class), parent_cls(parent_class), diff --git a/src/window_gui.h b/src/window_gui.h index 54c75cbedc..3f6b15104f 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -152,14 +152,14 @@ struct HotkeyList; */ struct WindowDesc : ZeroedMemoryAllocator { - WindowDesc(const char * const file, const int line, WindowPosition default_pos, const char *ini_key, int16_t def_width_trad, int16_t def_height_trad, + WindowDesc(WindowPosition default_pos, const char *ini_key, int16_t def_width_trad, int16_t def_height_trad, WindowClass window_class, WindowClass parent_class, uint32_t flags, - const NWidgetPart *nwid_begin, const NWidgetPart *nwid_end, HotkeyList *hotkeys = nullptr); + const NWidgetPart *nwid_begin, const NWidgetPart *nwid_end, HotkeyList *hotkeys = nullptr, + const std::source_location location = std::source_location::current()); ~WindowDesc(); - const char * const file; ///< Source file of this definition - const int line; ///< Source line of this definition + const std::source_location source_location; ///< Source location of this definition WindowPosition default_pos; ///< Preferred position of the window. @see WindowPosition() WindowClass cls; ///< Class of the window, @see WindowClass. WindowClass parent_cls; ///< Class of the parent window. @see WindowClass @@ -184,10 +184,11 @@ private: int16_t default_height_trad; ///< Preferred initial height of the window (pixels at 1x zoom). /** - * Dummy private copy constructor to prevent compilers from + * Delete copy constructor to prevent compilers from * copying the structure, which fails due to _window_descs. */ - WindowDesc(const WindowDesc &other); + WindowDesc(const WindowDesc &) = delete; + WindowDesc& operator=(const WindowDesc &) = delete; }; /** From 9c95fbdb078f27d6d279a55de1801f32fe075f1f Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 10 Mar 2024 13:26:07 +0100 Subject: [PATCH 089/695] Remove: official support for MSVC 2019 (#12254) --- .github/workflows/ci-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 4dd4b4b08e..953efe7bca 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -274,7 +274,7 @@ jobs: strategy: fail-fast: false matrix: - os: [windows-latest, windows-2019] + os: [windows-latest] arch: [x86, x64] name: Windows (${{ matrix.os }} / ${{ matrix.arch }}) From cca9dcdd57af21e07daa1b060c0233c9ed7c6998 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 10 Mar 2024 14:22:15 +0100 Subject: [PATCH 090/695] Codechange: [DorpsGek] announce failures in nightlies to IRC / Discord (#12256) --- .dorpsgek.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.dorpsgek.yml b/.dorpsgek.yml index 4b09738b87..bbd2b9780a 100644 --- a/.dorpsgek.yml +++ b/.dorpsgek.yml @@ -14,3 +14,6 @@ notifications: pull-request: issue: tag-created: + workflow-run: + only: + - .github/workflows/release.yml From 005892bfdbc997b6eee5b53d08997f7aad1bff5a Mon Sep 17 00:00:00 2001 From: Kuhnovic <68320206+Kuhnovic@users.noreply.github.com> Date: Sun, 10 Mar 2024 15:37:56 +0100 Subject: [PATCH 091/695] Fix #12250: YAPF Trivial rail pathfinding crashes due to #12217 (#12258) --- src/pathfinder/yapf/yapf_rail.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/pathfinder/yapf/yapf_rail.cpp b/src/pathfinder/yapf/yapf_rail.cpp index 94ec48f127..2d4c44429a 100644 --- a/src/pathfinder/yapf/yapf_rail.cpp +++ b/src/pathfinder/yapf/yapf_rail.cpp @@ -446,6 +446,11 @@ public: this->FindSafePositionOnNode(pPrev); } + + /* If the best PF node has no parent, then there is no (valid) best next trackdir to return. + * This occurs when the PF is called while the train is already at its destination. */ + if (pPrev == nullptr) return INVALID_TRACKDIR; + /* return trackdir from the best origin node (one of start nodes) */ Node &best_next_node = *pPrev; next_trackdir = best_next_node.GetTrackdir(); From df461b03296834060265dcffd1ef8588a33cfe36 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Wed, 17 Jan 2024 04:06:51 +0100 Subject: [PATCH 092/695] Codechange: simplify TileAdd by using simple asserts --- src/map.cpp | 35 ++++++++--------------------------- src/map_func.h | 5 ++--- 2 files changed, 10 insertions(+), 30 deletions(-) diff --git a/src/map.cpp b/src/map.cpp index 91d02b3f9d..0308640bf0 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -17,11 +17,6 @@ #include "safeguards.h" -#if defined(_MSC_VER) -/* Why the hell is that not in all MSVC headers?? */ -extern "C" _CRTIMP void __cdecl _assert(void *, void *, unsigned); -#endif - /* static */ uint Map::log_x; ///< 2^_map_log_x == _map_size_x /* static */ uint Map::log_y; ///< 2^_map_log_y == _map_size_y /* static */ uint Map::size_x; ///< Size of the map along the X @@ -69,32 +64,18 @@ extern "C" _CRTIMP void __cdecl _assert(void *, void *, unsigned); #ifdef _DEBUG -TileIndex TileAdd(TileIndex tile, TileIndexDiff add, - const char *exp, const char *file, int line) +TileIndex TileAdd(TileIndex tile, TileIndexDiff offset) { - int dx; - int dy; - uint x; - uint y; - - dx = add & Map::MaxX(); + int dx = offset & Map::MaxX(); if (dx >= (int)Map::SizeX() / 2) dx -= Map::SizeX(); - dy = (add - dx) / (int)Map::SizeX(); + int dy = (offset - dx) / (int)Map::SizeX(); - x = TileX(tile) + dx; - y = TileY(tile) + dy; + uint32_t x = TileX(tile) + dx; + uint32_t y = TileY(tile) + dy; - if (x >= Map::SizeX() || y >= Map::SizeY()) { - std::string message = fmt::format("TILE_ADD({}) when adding 0x{:04X} and 0x{:04X} failed", - exp, tile, add); -#if !defined(_MSC_VER) - fmt::print(stderr, "{}:{} {}\n", file, line, message); -#else - _assert(message.data(), (char*)file, line); -#endif - } - - assert(TileXY(x, y) == Map::WrapToMap(tile + add)); + assert(x < Map::SizeX()); + assert(y < Map::SizeY()); + assert(TileXY(x, y) == Map::WrapToMap(tile + offset)); return TileXY(x, y); } diff --git a/src/map_func.h b/src/map_func.h index 14d65db690..1684f0fd57 100644 --- a/src/map_func.h +++ b/src/map_func.h @@ -465,9 +465,8 @@ inline TileIndexDiff ToTileIndexDiff(TileIndexDiffC tidc) */ # define TILE_ADD(x, y) ((x) + (y)) #else - extern TileIndex TileAdd(TileIndex tile, TileIndexDiff add, - const char *exp, const char *file, int line); -# define TILE_ADD(x, y) (TileAdd((x), (y), #x " + " #y, __FILE__, __LINE__)) + extern TileIndex TileAdd(TileIndex tile, TileIndexDiff offset); +# define TILE_ADD(x, y) (TileAdd((x), (y)) #endif /** From 27eadc13ec7a50dfffd50f7ef2a03b6dae8fdeec Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 10 Mar 2024 14:51:08 +0100 Subject: [PATCH 093/695] Codechange: rename TILE_ADD(XY) to TileAdd(XY) --- src/clear_cmd.cpp | 8 ++++---- src/dock_gui.cpp | 4 ++-- src/industry_cmd.cpp | 4 ++-- src/landscape.cpp | 4 ++-- src/map_func.h | 9 ++++----- src/newgrf_canal.cpp | 16 ++++++++-------- src/newgrf_house.cpp | 18 +++++++++--------- src/newgrf_station.cpp | 2 +- src/pathfinder/follow_track.hpp | 2 +- src/pathfinder/npf/npf.cpp | 2 +- src/pathfinder/yapf/yapf_rail.cpp | 4 ++-- src/pbs.cpp | 2 +- src/road_cmd.cpp | 8 ++++---- src/saveload/afterload.cpp | 10 +++++----- src/screenshot.cpp | 2 +- src/ship_cmd.cpp | 4 ++-- src/station.cpp | 4 ++-- src/station_gui.cpp | 2 +- src/tilearea_type.h | 2 +- src/town_cmd.cpp | 20 ++++++++++---------- src/viewport.cpp | 12 ++++++------ src/water_cmd.cpp | 16 ++++++++-------- 22 files changed, 77 insertions(+), 78 deletions(-) diff --git a/src/clear_cmd.cpp b/src/clear_cmd.cpp index 4df61805e3..3a325f8dac 100644 --- a/src/clear_cmd.cpp +++ b/src/clear_cmd.cpp @@ -144,25 +144,25 @@ static void UpdateFences(TileIndex tile) assert(IsTileType(tile, MP_CLEAR) && IsClearGround(tile, CLEAR_FIELDS)); bool dirty = false; - bool neighbour = (IsTileType(TILE_ADDXY(tile, 1, 0), MP_CLEAR) && IsClearGround(TILE_ADDXY(tile, 1, 0), CLEAR_FIELDS)); + bool neighbour = (IsTileType(TileAddXY(tile, 1, 0), MP_CLEAR) && IsClearGround(TileAddXY(tile, 1, 0), CLEAR_FIELDS)); if (!neighbour && GetFence(tile, DIAGDIR_SW) == 0) { SetFence(tile, DIAGDIR_SW, 3); dirty = true; } - neighbour = (IsTileType(TILE_ADDXY(tile, 0, 1), MP_CLEAR) && IsClearGround(TILE_ADDXY(tile, 0, 1), CLEAR_FIELDS)); + neighbour = (IsTileType(TileAddXY(tile, 0, 1), MP_CLEAR) && IsClearGround(TileAddXY(tile, 0, 1), CLEAR_FIELDS)); if (!neighbour && GetFence(tile, DIAGDIR_SE) == 0) { SetFence(tile, DIAGDIR_SE, 3); dirty = true; } - neighbour = (IsTileType(TILE_ADDXY(tile, -1, 0), MP_CLEAR) && IsClearGround(TILE_ADDXY(tile, -1, 0), CLEAR_FIELDS)); + neighbour = (IsTileType(TileAddXY(tile, -1, 0), MP_CLEAR) && IsClearGround(TileAddXY(tile, -1, 0), CLEAR_FIELDS)); if (!neighbour && GetFence(tile, DIAGDIR_NE) == 0) { SetFence(tile, DIAGDIR_NE, 3); dirty = true; } - neighbour = (IsTileType(TILE_ADDXY(tile, 0, -1), MP_CLEAR) && IsClearGround(TILE_ADDXY(tile, 0, -1), CLEAR_FIELDS)); + neighbour = (IsTileType(TileAddXY(tile, 0, -1), MP_CLEAR) && IsClearGround(TileAddXY(tile, 0, -1), CLEAR_FIELDS)); if (!neighbour && GetFence(tile, DIAGDIR_NW) == 0) { SetFence(tile, DIAGDIR_NW, 3); dirty = true; diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp index 39518a2303..e0d500fdf8 100644 --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -74,7 +74,7 @@ static TileIndex GetOtherAqueductEnd(TileIndex tile_from, TileIndex *tile_to = n * complains about the wrong slope instead of the ends not matching up. * Make sure the coordinate is always a valid tile within the map, so we * don't go "off" the map. That would cause the wrong error message. */ - if (!IsValidDiagDirection(dir)) return TILE_ADDXY(tile_from, TileX(tile_from) > 2 ? -1 : 1, 0); + if (!IsValidDiagDirection(dir)) return TileAddXY(tile_from, TileX(tile_from) > 2 ? -1 : 1, 0); /* Direction the aqueduct is built to. */ TileIndexDiff offset = TileOffsByDiagDir(ReverseDiagDir(dir)); @@ -83,7 +83,7 @@ static TileIndex GetOtherAqueductEnd(TileIndex tile_from, TileIndex *tile_to = n TileIndex endtile = tile_from; for (int length = 0; IsValidTile(endtile) && TileX(endtile) != 0 && TileY(endtile) != 0; length++) { - endtile = TILE_ADD(endtile, offset); + endtile = TileAdd(endtile, offset); if (length > max_length) break; diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 635d609e30..4db8004a22 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1307,7 +1307,7 @@ static CommandCost CheckNewIndustry_OilRefinery(TileIndex tile) { if (_game_mode == GM_EDITOR) return CommandCost(); - if (CheckScaledDistanceFromEdge(TILE_ADDXY(tile, 1, 1), _settings_game.game_creation.oil_refinery_limit)) return CommandCost(); + if (CheckScaledDistanceFromEdge(TileAddXY(tile, 1, 1), _settings_game.game_creation.oil_refinery_limit)) return CommandCost(); return_cmd_error(STR_ERROR_CAN_ONLY_BE_POSITIONED); } @@ -1324,7 +1324,7 @@ static CommandCost CheckNewIndustry_OilRig(TileIndex tile) if (_game_mode == GM_EDITOR && _ignore_restrictions) return CommandCost(); if (TileHeight(tile) == 0 && - CheckScaledDistanceFromEdge(TILE_ADDXY(tile, 1, 1), _settings_game.game_creation.oil_refinery_limit)) return CommandCost(); + CheckScaledDistanceFromEdge(TileAddXY(tile, 1, 1), _settings_game.game_creation.oil_refinery_limit)) return CommandCost(); return_cmd_error(STR_ERROR_CAN_ONLY_BE_POSITIONED); } diff --git a/src/landscape.cpp b/src/landscape.cpp index 0d1dbaedb8..85aa03d6d6 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -390,7 +390,7 @@ bool HasFoundationNW(TileIndex tile, Slope slope_here, uint z_here) int z_N_here = z_here; GetSlopePixelZOnEdge(slope_here, DIAGDIR_NW, z_W_here, z_N_here); - auto [slope, z] = GetFoundationPixelSlope(TILE_ADDXY(tile, 0, -1)); + auto [slope, z] = GetFoundationPixelSlope(TileAddXY(tile, 0, -1)); int z_W = z; int z_N = z; GetSlopePixelZOnEdge(slope, DIAGDIR_SE, z_W, z_N); @@ -405,7 +405,7 @@ bool HasFoundationNE(TileIndex tile, Slope slope_here, uint z_here) int z_N_here = z_here; GetSlopePixelZOnEdge(slope_here, DIAGDIR_NE, z_E_here, z_N_here); - auto [slope, z] = GetFoundationPixelSlope(TILE_ADDXY(tile, -1, 0)); + auto [slope, z] = GetFoundationPixelSlope(TileAddXY(tile, -1, 0)); int z_E = z; int z_N = z; GetSlopePixelZOnEdge(slope, DIAGDIR_SW, z_E, z_N); diff --git a/src/map_func.h b/src/map_func.h index 1684f0fd57..736727c7a6 100644 --- a/src/map_func.h +++ b/src/map_func.h @@ -463,10 +463,9 @@ inline TileIndexDiff ToTileIndexDiff(TileIndexDiffC tidc) * @param y Another tile to add * @return The resulting tile(index) */ -# define TILE_ADD(x, y) ((x) + (y)) +# define TileAdd(x, y) ((x) + (y)) #else extern TileIndex TileAdd(TileIndex tile, TileIndexDiff offset); -# define TILE_ADD(x, y) (TileAdd((x), (y)) #endif /** @@ -476,7 +475,7 @@ inline TileIndexDiff ToTileIndexDiff(TileIndexDiffC tidc) * @param x The x offset to add to the tile * @param y The y offset to add to the tile */ -#define TILE_ADDXY(tile, x, y) TILE_ADD(tile, TileDiffXY(x, y)) +#define TileAddXY(tile, x, y) TileAdd(tile, TileDiffXY(x, y)) TileIndex TileAddWrap(TileIndex tile, int addx, int addy); @@ -590,7 +589,7 @@ inline TileIndexDiff TileOffsByDir(Direction dir) */ inline TileIndex TileAddByDir(TileIndex tile, Direction dir) { - return TILE_ADD(tile, TileOffsByDir(dir)); + return TileAdd(tile, TileOffsByDir(dir)); } /** @@ -602,7 +601,7 @@ inline TileIndex TileAddByDir(TileIndex tile, Direction dir) */ inline TileIndex TileAddByDiagDir(TileIndex tile, DiagDirection dir) { - return TILE_ADD(tile, TileOffsByDiagDir(dir)); + return TileAdd(tile, TileOffsByDiagDir(dir)); } /** diff --git a/src/newgrf_canal.cpp b/src/newgrf_canal.cpp index 23be82a76a..1c307bb671 100644 --- a/src/newgrf_canal.cpp +++ b/src/newgrf_canal.cpp @@ -85,14 +85,14 @@ struct CanalResolverObject : public ResolverObject { */ case 0x82: { uint32_t connectivity = - (!IsWateredTile(TILE_ADDXY(tile, -1, 0), DIR_SW) << 0) // NE - + (!IsWateredTile(TILE_ADDXY(tile, 0, 1), DIR_NW) << 1) // SE - + (!IsWateredTile(TILE_ADDXY(tile, 1, 0), DIR_NE) << 2) // SW - + (!IsWateredTile(TILE_ADDXY(tile, 0, -1), DIR_SE) << 3) // NW - + (!IsWateredTile(TILE_ADDXY(tile, -1, 1), DIR_W) << 4) // E - + (!IsWateredTile(TILE_ADDXY(tile, 1, 1), DIR_N) << 5) // S - + (!IsWateredTile(TILE_ADDXY(tile, 1, -1), DIR_E) << 6) // W - + (!IsWateredTile(TILE_ADDXY(tile, -1, -1), DIR_S) << 7); // N + (!IsWateredTile(TileAddXY(tile, -1, 0), DIR_SW) << 0) // NE + + (!IsWateredTile(TileAddXY(tile, 0, 1), DIR_NW) << 1) // SE + + (!IsWateredTile(TileAddXY(tile, 1, 0), DIR_NE) << 2) // SW + + (!IsWateredTile(TileAddXY(tile, 0, -1), DIR_SE) << 3) // NW + + (!IsWateredTile(TileAddXY(tile, -1, 1), DIR_W) << 4) // E + + (!IsWateredTile(TileAddXY(tile, 1, 1), DIR_N) << 5) // S + + (!IsWateredTile(TileAddXY(tile, 1, -1), DIR_E) << 6) // W + + (!IsWateredTile(TileAddXY(tile, -1, -1), DIR_S) << 7); // N return connectivity; } diff --git a/src/newgrf_house.cpp b/src/newgrf_house.cpp index 6175920ca5..c56c62d5e6 100644 --- a/src/newgrf_house.cpp +++ b/src/newgrf_house.cpp @@ -558,9 +558,9 @@ bool NewHouseTileLoop(TileIndex tile) uint16_t random = GB(Random(), 0, 16); if (hs->building_flags & BUILDING_HAS_1_TILE) AnimationControl(tile, random); - if (hs->building_flags & BUILDING_2_TILES_Y) AnimationControl(TILE_ADDXY(tile, 0, 1), random); - if (hs->building_flags & BUILDING_2_TILES_X) AnimationControl(TILE_ADDXY(tile, 1, 0), random); - if (hs->building_flags & BUILDING_HAS_4_TILES) AnimationControl(TILE_ADDXY(tile, 1, 1), random); + if (hs->building_flags & BUILDING_2_TILES_Y) AnimationControl(TileAddXY(tile, 0, 1), random); + if (hs->building_flags & BUILDING_2_TILES_X) AnimationControl(TileAddXY(tile, 1, 0), random); + if (hs->building_flags & BUILDING_HAS_4_TILES) AnimationControl(TileAddXY(tile, 1, 1), random); } else { AnimationControl(tile, 0); } @@ -620,9 +620,9 @@ static void DoTriggerHouse(TileIndex tile, HouseTrigger trigger, byte base_rando break; } /* Random value of first tile already set. */ - if (hs->building_flags & BUILDING_2_TILES_Y) DoTriggerHouse(TILE_ADDXY(tile, 0, 1), trigger, random_bits, false); - if (hs->building_flags & BUILDING_2_TILES_X) DoTriggerHouse(TILE_ADDXY(tile, 1, 0), trigger, random_bits, false); - if (hs->building_flags & BUILDING_HAS_4_TILES) DoTriggerHouse(TILE_ADDXY(tile, 1, 1), trigger, random_bits, false); + if (hs->building_flags & BUILDING_2_TILES_Y) DoTriggerHouse(TileAddXY(tile, 0, 1), trigger, random_bits, false); + if (hs->building_flags & BUILDING_2_TILES_X) DoTriggerHouse(TileAddXY(tile, 1, 0), trigger, random_bits, false); + if (hs->building_flags & BUILDING_HAS_4_TILES) DoTriggerHouse(TileAddXY(tile, 1, 1), trigger, random_bits, false); break; } } @@ -670,8 +670,8 @@ void WatchedCargoCallback(TileIndex tile, CargoTypes trigger_cargoes) hs = HouseSpec::Get(id); DoWatchedCargoCallback(north, tile, trigger_cargoes, r); - if (hs->building_flags & BUILDING_2_TILES_Y) DoWatchedCargoCallback(TILE_ADDXY(north, 0, 1), tile, trigger_cargoes, r); - if (hs->building_flags & BUILDING_2_TILES_X) DoWatchedCargoCallback(TILE_ADDXY(north, 1, 0), tile, trigger_cargoes, r); - if (hs->building_flags & BUILDING_HAS_4_TILES) DoWatchedCargoCallback(TILE_ADDXY(north, 1, 1), tile, trigger_cargoes, r); + if (hs->building_flags & BUILDING_2_TILES_Y) DoWatchedCargoCallback(TileAddXY(north, 0, 1), tile, trigger_cargoes, r); + if (hs->building_flags & BUILDING_2_TILES_X) DoWatchedCargoCallback(TileAddXY(north, 1, 0), tile, trigger_cargoes, r); + if (hs->building_flags & BUILDING_HAS_4_TILES) DoWatchedCargoCallback(TileAddXY(north, 1, 1), tile, trigger_cargoes, r); } diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index abc6c636a7..616c1ad799 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -148,7 +148,7 @@ static TileIndex FindRailStationEnd(TileIndex tile, TileIndexDiff delta, bool ch if (check_axis) orig_axis = GetRailStationAxis(tile); for (;;) { - TileIndex new_tile = TILE_ADD(tile, delta); + TileIndex new_tile = TileAdd(tile, delta); if (!IsTileType(new_tile, MP_STATION) || GetStationIndex(new_tile) != sid) break; if (!HasStationRail(new_tile)) break; diff --git a/src/pathfinder/follow_track.hpp b/src/pathfinder/follow_track.hpp index 3cdb3625b5..513d3ab0c7 100644 --- a/src/pathfinder/follow_track.hpp +++ b/src/pathfinder/follow_track.hpp @@ -376,7 +376,7 @@ protected: /* move to the platform end */ TileIndexDiff diff = TileOffsByDiagDir(m_exitdir); diff *= m_tiles_skipped; - m_new_tile = TILE_ADD(m_new_tile, diff); + m_new_tile = TileAdd(m_new_tile, diff); return true; } diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp index 7bc47c9c56..33d5927991 100644 --- a/src/pathfinder/npf/npf.cpp +++ b/src/pathfinder/npf/npf.cpp @@ -658,7 +658,7 @@ static void NPFSaveTargetData(AyStar *as, OpenListNode *current) if (IsRailStationTile(target->node.tile)) { DiagDirection dir = TrackdirToExitdir(target->node.direction); uint len = Station::GetByTile(target->node.tile)->GetPlatformLength(target->node.tile, dir); - TileIndex end_tile = TILE_ADD(target->node.tile, (len - 1) * TileOffsByDiagDir(dir)); + TileIndex end_tile = TileAdd(target->node.tile, (len - 1) * TileOffsByDiagDir(dir)); /* Update only end tile, trackdir of a station stays the same. */ ftd->node.tile = end_tile; diff --git a/src/pathfinder/yapf/yapf_rail.cpp b/src/pathfinder/yapf/yapf_rail.cpp index 2d4c44429a..e024cee323 100644 --- a/src/pathfinder/yapf/yapf_rail.cpp +++ b/src/pathfinder/yapf/yapf_rail.cpp @@ -77,7 +77,7 @@ private: if (HasStationReservation(tile)) return false; SetRailStationReservation(tile, true); MarkTileDirtyByTile(tile); - tile = TILE_ADD(tile, diff); + tile = TileAdd(tile, diff); } while (IsCompatibleTrainStationTile(tile, start) && tile != m_origin_tile); TriggerStationRandomisation(nullptr, start, SRT_PATH_RESERVATION); @@ -114,7 +114,7 @@ private: TileIndexDiff diff = TileOffsByDiagDir(TrackdirToExitdir(ReverseTrackdir(td))); while ((tile != m_res_fail_tile || td != m_res_fail_td) && IsCompatibleTrainStationTile(tile, start)) { SetRailStationReservation(tile, false); - tile = TILE_ADD(tile, diff); + tile = TileAdd(tile, diff); } } else if (tile != m_res_fail_tile || td != m_res_fail_td) { UnreserveRailTrack(tile, TrackdirToTrack(td)); diff --git a/src/pbs.cpp b/src/pbs.cpp index df3a5cf339..363404330c 100644 --- a/src/pbs.cpp +++ b/src/pbs.cpp @@ -65,7 +65,7 @@ void SetRailStationPlatformReservation(TileIndex start, DiagDirection dir, bool do { SetRailStationReservation(tile, b); MarkTileDirtyByTile(tile); - tile = TILE_ADD(tile, diff); + tile = TileAdd(tile, diff); } while (IsCompatibleTrainStationTile(tile, start)); } diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 3144fa1c47..8fd98d6703 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -292,10 +292,10 @@ CommandCost CheckAllowRemoveRoad(TileIndex tile, RoadBits remove, Owner owner, R /* Get a bitmask of which neighbouring roads has a tile */ RoadBits n = ROAD_NONE; RoadBits present = GetAnyRoadBits(tile, rtt); - if ((present & ROAD_NE) && (GetAnyRoadBits(TILE_ADDXY(tile, -1, 0), rtt) & ROAD_SW)) n |= ROAD_NE; - if ((present & ROAD_SE) && (GetAnyRoadBits(TILE_ADDXY(tile, 0, 1), rtt) & ROAD_NW)) n |= ROAD_SE; - if ((present & ROAD_SW) && (GetAnyRoadBits(TILE_ADDXY(tile, 1, 0), rtt) & ROAD_NE)) n |= ROAD_SW; - if ((present & ROAD_NW) && (GetAnyRoadBits(TILE_ADDXY(tile, 0, -1), rtt) & ROAD_SE)) n |= ROAD_NW; + if ((present & ROAD_NE) && (GetAnyRoadBits(TileAddXY(tile, -1, 0), rtt) & ROAD_SW)) n |= ROAD_NE; + if ((present & ROAD_SE) && (GetAnyRoadBits(TileAddXY(tile, 0, 1), rtt) & ROAD_NW)) n |= ROAD_SE; + if ((present & ROAD_SW) && (GetAnyRoadBits(TileAddXY(tile, 1, 0), rtt) & ROAD_NE)) n |= ROAD_SW; + if ((present & ROAD_NW) && (GetAnyRoadBits(TileAddXY(tile, 0, -1), rtt) & ROAD_SE)) n |= ROAD_NW; int rating_decrease = RATING_ROAD_DOWN_STEP_EDGE; /* If 0 or 1 bits are set in n, or if no bits that match the bits to remove, diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 810e48befe..a28d61eb6c 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -957,7 +957,7 @@ bool AfterLoadGame() * an oil rig which got shut down, but not completely removed from * the map */ - TileIndex t1 = TILE_ADDXY(t, 0, 1); + TileIndex t1 = TileAddXY(t, 0, 1); if (!IsTileType(t1, MP_INDUSTRY) || GetIndustryGfx(t1) != GFX_OILRIG_1) { DeleteOilRig(t); } @@ -2804,12 +2804,12 @@ bool AfterLoadGame() if (!IsTileType(t, MP_CLEAR) && !IsTileType(t, MP_TREES)) continue; if (IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_FIELDS)) continue; uint fence = GB(t.m4(), 5, 3); - if (fence != 0 && IsTileType(TILE_ADDXY(t, 1, 0), MP_CLEAR) && IsClearGround(TILE_ADDXY(t, 1, 0), CLEAR_FIELDS)) { - SetFence(TILE_ADDXY(t, 1, 0), DIAGDIR_NE, fence); + if (fence != 0 && IsTileType(TileAddXY(t, 1, 0), MP_CLEAR) && IsClearGround(TileAddXY(t, 1, 0), CLEAR_FIELDS)) { + SetFence(TileAddXY(t, 1, 0), DIAGDIR_NE, fence); } fence = GB(t.m4(), 2, 3); - if (fence != 0 && IsTileType(TILE_ADDXY(t, 0, 1), MP_CLEAR) && IsClearGround(TILE_ADDXY(t, 0, 1), CLEAR_FIELDS)) { - SetFence(TILE_ADDXY(t, 0, 1), DIAGDIR_NW, fence); + if (fence != 0 && IsTileType(TileAddXY(t, 0, 1), MP_CLEAR) && IsClearGround(TileAddXY(t, 0, 1), CLEAR_FIELDS)) { + SetFence(TileAddXY(t, 0, 1), DIAGDIR_NW, fence); } SB(t.m4(), 2, 3, 0); SB(t.m4(), 5, 3, 0); diff --git a/src/screenshot.cpp b/src/screenshot.cpp index b57e484bfe..3fa8681021 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -825,7 +825,7 @@ static void HeightmapCallback(void *, void *buffer, uint y, uint, uint n) *buf = 256 * TileHeight(ti) / (1 + _heightmap_highest_peak); buf++; if (x == 0) break; - ti = TILE_ADDXY(ti, -1, 0); + ti = TileAddXY(ti, -1, 0); } y++; n--; diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index b19520d954..e5e404649a 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -410,9 +410,9 @@ static bool CheckShipLeaveDepot(Ship *v) Axis axis = GetShipDepotAxis(tile); DiagDirection north_dir = ReverseDiagDir(AxisToDiagDir(axis)); - TileIndex north_neighbour = TILE_ADD(tile, TileOffsByDiagDir(north_dir)); + TileIndex north_neighbour = TileAdd(tile, TileOffsByDiagDir(north_dir)); DiagDirection south_dir = AxisToDiagDir(axis); - TileIndex south_neighbour = TILE_ADD(tile, 2 * TileOffsByDiagDir(south_dir)); + TileIndex south_neighbour = TileAdd(tile, 2 * TileOffsByDiagDir(south_dir)); TrackBits north_tracks = DiagdirReachesTracks(north_dir) & GetTileShipTrackStatus(north_neighbour); TrackBits south_tracks = DiagdirReachesTracks(south_dir) & GetTileShipTrackStatus(south_neighbour); diff --git a/src/station.cpp b/src/station.cpp index f1afaec134..242de9fb50 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -613,7 +613,7 @@ CommandCost StationRect::BeforeAddRect(TileIndex tile, int w, int h, StationRect if (mode == ADD_FORCE || (w <= _settings_game.station.station_spread && h <= _settings_game.station.station_spread)) { /* Important when the old rect is completely inside the new rect, resp. the old one was empty. */ CommandCost ret = this->BeforeAddTile(tile, mode); - if (ret.Succeeded()) ret = this->BeforeAddTile(TILE_ADDXY(tile, w - 1, h - 1), mode); + if (ret.Succeeded()) ret = this->BeforeAddTile(TileAddXY(tile, w - 1, h - 1), mode); return ret; } return CommandCost(); @@ -694,7 +694,7 @@ bool StationRect::AfterRemoveRect(BaseStation *st, TileArea ta) assert(this->PtInExtendedRect(TileX(ta.tile) + ta.w - 1, TileY(ta.tile) + ta.h - 1)); bool empty = this->AfterRemoveTile(st, ta.tile); - if (ta.w != 1 || ta.h != 1) empty = empty || this->AfterRemoveTile(st, TILE_ADDXY(ta.tile, ta.w - 1, ta.h - 1)); + if (ta.w != 1 || ta.h != 1) empty = empty || this->AfterRemoveTile(st, TileAddXY(ta.tile, ta.w - 1, ta.h - 1)); return empty; } diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 8fb5389802..6926fa15f5 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -2223,7 +2223,7 @@ static const T *FindStationsNearby(TileArea ta, bool distant_join) for (const BaseStation *st : BaseStation::Iterate()) { if (T::IsExpected(st) && !st->IsInUse() && st->owner == _local_company) { /* Include only within station spread (yes, it is strictly less than) */ - if (std::max(DistanceMax(ta.tile, st->xy), DistanceMax(TILE_ADDXY(ta.tile, ta.w - 1, ta.h - 1), st->xy)) < _settings_game.station.station_spread) { + if (std::max(DistanceMax(ta.tile, st->xy), DistanceMax(TileAddXY(ta.tile, ta.w - 1, ta.h - 1), st->xy)) < _settings_game.station.station_spread) { _deleted_stations_nearby.push_back({st->xy, st->index}); /* Add the station when it's within where we're going to build */ diff --git a/src/tilearea_type.h b/src/tilearea_type.h index 1cd29ec1bb..99048c403d 100644 --- a/src/tilearea_type.h +++ b/src/tilearea_type.h @@ -58,7 +58,7 @@ struct OrthogonalTileArea { */ TileIndex GetCenterTile() const { - return TILE_ADDXY(this->tile, this->w / 2, this->h / 2); + return TileAddXY(this->tile, this->w / 2, this->h / 2); } OrthogonalTileIterator begin() const; diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 909fb7fc52..d69335f857 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -514,10 +514,10 @@ static void AdvanceSingleHouseConstruction(TileIndex tile) static void AdvanceHouseConstruction(TileIndex tile) { uint flags = HouseSpec::Get(GetHouseType(tile))->building_flags; - if (flags & BUILDING_HAS_1_TILE) AdvanceSingleHouseConstruction(TILE_ADDXY(tile, 0, 0)); - if (flags & BUILDING_2_TILES_Y) AdvanceSingleHouseConstruction(TILE_ADDXY(tile, 0, 1)); - if (flags & BUILDING_2_TILES_X) AdvanceSingleHouseConstruction(TILE_ADDXY(tile, 1, 0)); - if (flags & BUILDING_HAS_4_TILES) AdvanceSingleHouseConstruction(TILE_ADDXY(tile, 1, 1)); + if (flags & BUILDING_HAS_1_TILE) AdvanceSingleHouseConstruction(TileAddXY(tile, 0, 0)); + if (flags & BUILDING_2_TILES_Y) AdvanceSingleHouseConstruction(TileAddXY(tile, 0, 1)); + if (flags & BUILDING_2_TILES_X) AdvanceSingleHouseConstruction(TileAddXY(tile, 1, 0)); + if (flags & BUILDING_HAS_4_TILES) AdvanceSingleHouseConstruction(TileAddXY(tile, 1, 1)); } /** @@ -686,11 +686,11 @@ static void TileLoop_Town(TileIndex tile) int y = Clamp(grid_pos.y, 0, 1); if (hs->building_flags & TILE_SIZE_2x2) { - tile = TILE_ADDXY(tile, x, y); + tile = TileAddXY(tile, x, y); } else if (hs->building_flags & TILE_SIZE_1x2) { - tile = TILE_ADDXY(tile, 0, y); + tile = TileAddXY(tile, 0, y); } else if (hs->building_flags & TILE_SIZE_2x1) { - tile = TILE_ADDXY(tile, x, 0); + tile = TileAddXY(tile, x, 0); } } @@ -971,7 +971,7 @@ static bool IsNeighborRoadTile(TileIndex tile, const DiagDirection dir, uint dis /* Test for roadbit parallel to dir and facing towards the middle axis */ if (IsValidTile(tile + cur) && - GetTownRoadBits(TILE_ADD(tile, cur)) & DiagDirToRoadBits((pos & 2) ? dir : ReverseDiagDir(dir))) return true; + GetTownRoadBits(TileAdd(tile, cur)) & DiagDirToRoadBits((pos & 2) ? dir : ReverseDiagDir(dir))) return true; } return false; } @@ -1833,7 +1833,7 @@ static bool GrowTown(Town *t) cur_company.Restore(); return success; } - tile = TILE_ADD(tile, ToTileIndexDiff(*ptr)); + tile = TileAdd(tile, ToTileIndexDiff(*ptr)); } /* No road available, try to build a random road block by @@ -1850,7 +1850,7 @@ static bool GrowTown(Town *t) return true; } } - tile = TILE_ADD(tile, ToTileIndexDiff(*ptr)); + tile = TileAdd(tile, ToTileIndexDiff(*ptr)); } } diff --git a/src/viewport.cpp b/src/viewport.cpp index c035cc2a45..2b2e5611db 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -2893,8 +2893,8 @@ static int CalcHeightdiff(HighLightStyle style, uint distance, TileIndex start_t /* In the case of an area we can determine whether we were dragging south or * east by checking the X-coordinates of the tiles */ byte style_t = (byte)(TileX(end_tile) > TileX(start_tile)); - start_tile = TILE_ADD(start_tile, ToTileIndexDiff(heightdiff_area_by_dir[style_t])); - end_tile = TILE_ADD(end_tile, ToTileIndexDiff(heightdiff_area_by_dir[2 + style_t])); + start_tile = TileAdd(start_tile, ToTileIndexDiff(heightdiff_area_by_dir[style_t])); + end_tile = TileAdd(end_tile, ToTileIndexDiff(heightdiff_area_by_dir[2 + style_t])); [[fallthrough]]; } @@ -2928,16 +2928,16 @@ static int CalcHeightdiff(HighLightStyle style, uint distance, TileIndex start_t /* Use lookup table for start-tile based on HighLightStyle direction */ byte style_t = style * 2; assert(style_t < lengthof(heightdiff_line_by_dir) - 13); - h0 = TileHeight(TILE_ADD(start_tile, ToTileIndexDiff(heightdiff_line_by_dir[style_t]))); - uint ht = TileHeight(TILE_ADD(start_tile, ToTileIndexDiff(heightdiff_line_by_dir[style_t + 1]))); + h0 = TileHeight(TileAdd(start_tile, ToTileIndexDiff(heightdiff_line_by_dir[style_t]))); + uint ht = TileHeight(TileAdd(start_tile, ToTileIndexDiff(heightdiff_line_by_dir[style_t + 1]))); h0 = std::max(h0, ht); /* Use lookup table for end-tile based on HighLightStyle direction * flip around side (lower/upper, left/right) based on distance */ if (distance == 0) style_t = flip_style_direction[style] * 2; assert(style_t < lengthof(heightdiff_line_by_dir) - 13); - h1 = TileHeight(TILE_ADD(end_tile, ToTileIndexDiff(heightdiff_line_by_dir[12 + style_t]))); - ht = TileHeight(TILE_ADD(end_tile, ToTileIndexDiff(heightdiff_line_by_dir[12 + style_t + 1]))); + h1 = TileHeight(TileAdd(end_tile, ToTileIndexDiff(heightdiff_line_by_dir[12 + style_t]))); + ht = TileHeight(TileAdd(end_tile, ToTileIndexDiff(heightdiff_line_by_dir[12 + style_t + 1]))); h1 = std::max(h1, ht); break; } diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index f6f9e5837a..249dfb9ac2 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -722,10 +722,10 @@ static void DrawWaterEdges(bool canal, uint offset, TileIndex tile) uint wa; /* determine the edges around with water. */ - wa = IsWateredTile(TILE_ADDXY(tile, -1, 0), DIR_SW) << 0; - wa += IsWateredTile(TILE_ADDXY(tile, 0, 1), DIR_NW) << 1; - wa += IsWateredTile(TILE_ADDXY(tile, 1, 0), DIR_NE) << 2; - wa += IsWateredTile(TILE_ADDXY(tile, 0, -1), DIR_SE) << 3; + wa = IsWateredTile(TileAddXY(tile, -1, 0), DIR_SW) << 0; + wa += IsWateredTile(TileAddXY(tile, 0, 1), DIR_NW) << 1; + wa += IsWateredTile(TileAddXY(tile, 1, 0), DIR_NE) << 2; + wa += IsWateredTile(TileAddXY(tile, 0, -1), DIR_SE) << 3; if (!(wa & 1)) DrawWaterSprite(base, offset, feature, tile); if (!(wa & 2)) DrawWaterSprite(base, offset + 1, feature, tile); @@ -735,25 +735,25 @@ static void DrawWaterEdges(bool canal, uint offset, TileIndex tile) /* right corner */ switch (wa & 0x03) { case 0: DrawWaterSprite(base, offset + 4, feature, tile); break; - case 3: if (!IsWateredTile(TILE_ADDXY(tile, -1, 1), DIR_W)) DrawWaterSprite(base, offset + 8, feature, tile); break; + case 3: if (!IsWateredTile(TileAddXY(tile, -1, 1), DIR_W)) DrawWaterSprite(base, offset + 8, feature, tile); break; } /* bottom corner */ switch (wa & 0x06) { case 0: DrawWaterSprite(base, offset + 5, feature, tile); break; - case 6: if (!IsWateredTile(TILE_ADDXY(tile, 1, 1), DIR_N)) DrawWaterSprite(base, offset + 9, feature, tile); break; + case 6: if (!IsWateredTile(TileAddXY(tile, 1, 1), DIR_N)) DrawWaterSprite(base, offset + 9, feature, tile); break; } /* left corner */ switch (wa & 0x0C) { case 0: DrawWaterSprite(base, offset + 6, feature, tile); break; - case 12: if (!IsWateredTile(TILE_ADDXY(tile, 1, -1), DIR_E)) DrawWaterSprite(base, offset + 10, feature, tile); break; + case 12: if (!IsWateredTile(TileAddXY(tile, 1, -1), DIR_E)) DrawWaterSprite(base, offset + 10, feature, tile); break; } /* upper corner */ switch (wa & 0x09) { case 0: DrawWaterSprite(base, offset + 7, feature, tile); break; - case 9: if (!IsWateredTile(TILE_ADDXY(tile, -1, -1), DIR_S)) DrawWaterSprite(base, offset + 11, feature, tile); break; + case 9: if (!IsWateredTile(TileAddXY(tile, -1, -1), DIR_S)) DrawWaterSprite(base, offset + 11, feature, tile); break; } } From ecf534522c76212df268585174c1cc17442aa45b Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 10 Mar 2024 14:54:25 +0100 Subject: [PATCH 094/695] Codechange: replace macro with function for TileAdd(XY) --- src/map_func.h | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/map_func.h b/src/map_func.h index 736727c7a6..948165df0d 100644 --- a/src/map_func.h +++ b/src/map_func.h @@ -455,27 +455,31 @@ inline TileIndexDiff ToTileIndexDiff(TileIndexDiffC tidc) } +/** + * Adds a given offset to a tile. + * + * @param tile The tile to add an offset to. + * @param offset The offset to add. + * @return The resulting tile. + */ #ifndef _DEBUG - /** - * Adds two tiles together. - * - * @param x One tile - * @param y Another tile to add - * @return The resulting tile(index) - */ -# define TileAdd(x, y) ((x) + (y)) + constexpr TileIndex TileAdd(TileIndex tile, TileIndexDiff offset) { return tile + offset; } #else - extern TileIndex TileAdd(TileIndex tile, TileIndexDiff offset); + TileIndex TileAdd(TileIndex tile, TileIndexDiff offset); #endif /** * Adds a given offset to a tile. * - * @param tile The tile to add an offset on it - * @param x The x offset to add to the tile - * @param y The y offset to add to the tile + * @param tile The tile to add an offset to. + * @param x The x offset to add to the tile. + * @param y The y offset to add to the tile. + * @return The resulting tile. */ -#define TileAddXY(tile, x, y) TileAdd(tile, TileDiffXY(x, y)) +inline TileIndex TileAddXY(TileIndex tile, int x, int y) +{ + return TileAdd(tile, TileDiffXY(x, y)); +} TileIndex TileAddWrap(TileIndex tile, int addx, int addy); From 649c1cf14ccfbceed1efabe5a8aad7e3c63ba504 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 10 Mar 2024 14:53:41 +0000 Subject: [PATCH 095/695] Fix: Off-by-one in EnsureVisibleCaption. (#12261) An off-by-one in EnsureVisibleCaption causes the minimum visible caption height to be 13 scaled pixels and 1 unscaled pixel. At 1x interface scale, this 'happens' to be the complete height of a caption, but at other interface scales it is not. Instead of using a scaled fixed value, correct the off-by-one and just use the window's actual caption height instead. --- src/window.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index c1f39418d7..b12d9e11a1 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1927,9 +1927,6 @@ static void HandleMouseOver() } } -/** The minimum number of pixels of the title bar must be visible in both the X or Y direction */ -static const int MIN_VISIBLE_TITLE_BAR = 13; - /** Direction for moving the window. */ enum PreventHideDirection { PHD_UP, ///< Above v is a safe position. @@ -1941,7 +1938,7 @@ enum PreventHideDirection { * If needed, move the window base coordinates to keep it visible. * @param nx Base horizontal coordinate of the rectangle. * @param ny Base vertical coordinate of the rectangle. - * @param rect Rectangle that must stay visible for #MIN_VISIBLE_TITLE_BAR pixels (horizontally, vertically, or both) + * @param rect Rectangle that must stay visible (horizontally, vertically, or both) * @param v Window lying in front of the rectangle. * @param px Previous horizontal base coordinate. * @param dir If no room horizontally, move the rectangle to the indicated position. @@ -1950,10 +1947,10 @@ static void PreventHiding(int *nx, int *ny, const Rect &rect, const Window *v, i { if (v == nullptr) return; - const int min_visible = ScaleGUITrad(MIN_VISIBLE_TITLE_BAR); + const int min_visible = rect.Height(); - int v_bottom = v->top + v->height; - int v_right = v->left + v->width; + int v_bottom = v->top + v->height - 1; + int v_right = v->left + v->width - 1; int safe_y = (dir == PHD_UP) ? (v->top - min_visible - rect.top) : (v_bottom + min_visible - rect.bottom); // Compute safe vertical position. if (*ny + rect.top <= v->top - min_visible) return; // Above v is enough space @@ -1989,12 +1986,11 @@ static void PreventHiding(int *nx, int *ny, const Rect &rect, const Window *v, i static void EnsureVisibleCaption(Window *w, int nx, int ny) { /* Search for the title bar rectangle. */ - Rect caption_rect; const NWidgetBase *caption = w->nested_root->GetWidgetOfType(WWT_CAPTION); if (caption != nullptr) { - caption_rect = caption->GetCurrentRect(); + const Rect caption_rect = caption->GetCurrentRect(); - const int min_visible = ScaleGUITrad(MIN_VISIBLE_TITLE_BAR); + const int min_visible = caption_rect.Height(); /* Make sure the window doesn't leave the screen */ nx = Clamp(nx, min_visible - caption_rect.right, _screen.width - min_visible - caption_rect.left); From 2f0fe22d6340ed5add780bc19d2e24c67c4ff4fe Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 10 Mar 2024 16:00:17 +0100 Subject: [PATCH 096/695] Fix #12255: inconsistent punctuation in English --- src/lang/english.txt | 90 ++++++++++++++++++++++---------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 59343bda49..6832c13636 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1054,9 +1054,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Scale be STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Check this box to scale bevels by interface size STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Use traditional sprite font -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Check this box if you prefer to use the traditional fixed-size sprite font. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Check this box if you prefer to use the traditional fixed-size sprite font STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias fonts -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Check this box to anti-alias resizable fonts. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Check this box to anti-alias resizable fonts STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1275,7 +1275,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Infinite money: STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Allow unlimited spending and disable bankruptcy of companies STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximum initial loan: {STRING2} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account). If set to "No loan", no money will be available unless provided by a Game Script or the "Infinite money" setting. +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account). If set to "No loan", no money will be available unless provided by a Game Script or the "Infinite money" setting STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :No loan @@ -1359,7 +1359,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Slope steepness STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Steepness of a sloped tile for a road vehicle. Higher values make it more difficult to climb a hill STR_CONFIG_SETTING_FORBID_90_DEG :Forbid trains from making 90° turns: {STRING2} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 degree turns occur when a horizontal track is directly followed by a vertical track piece on the adjacent tile, thus making the train turn by 90 degree when traversing the tile edge instead of the usual 45 degrees for other track combinations. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 degree turns occur when a horizontal track is directly followed by a vertical track piece on the adjacent tile, thus making the train turn by 90 degree when traversing the tile edge instead of the usual 45 degrees for other track combinations STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Allow to join stations not directly adjacent: {STRING2} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Allow adding parts to a station without directly touching the existing parts, by Ctrl+Clicking while placing the new parts @@ -1471,7 +1471,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Starting compan STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Choose starting colour for the company STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Starting company secondary colour: {STRING2} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Choose starting secondary colour for the company, if using a NewGRF that enables it. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Choose starting secondary colour for the company, if using a NewGRF that enables it STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Airports never expire: {STRING2} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Enabling this setting makes each airport type stay available forever after its introduction @@ -1495,22 +1495,22 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Vehicles never STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :When enabled, all vehicle models remain available forever after their introduction STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Timekeeping: {STRING2} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Select the timekeeping units of the game. This cannot be changed later.{}{}Calendar-based is the classic OpenTTD experience, with a year consisting of 12 months, and each month having 28-31 days.{}{}In Wallclock-based time, cargo production and financials are instead based on one-minute increments, which is about as long as a 30 day month takes in Calendar-based mode. These are grouped into 12-minute periods, equivalent to a year in Calendar-based mode.{}{}In either mode there is always a classic calendar, which is used for introduction dates of vehicles, houses, and other infrastructure. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Select the timekeeping units of the game. This cannot be changed later.{}{}Calendar-based is the classic OpenTTD experience, with a year consisting of 12 months, and each month having 28-31 days.{}{}In Wallclock-based time, cargo production and financials are instead based on one-minute increments, which is about as long as a 30 day month takes in Calendar-based mode. These are grouped into 12-minute periods, equivalent to a year in Calendar-based mode.{}{}In either mode there is always a classic calendar, which is used for introduction dates of vehicles, houses, and other infrastructure ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendar STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Wallclock STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutes per year: {STRING2} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Choose the number of minutes in a calendar year. The default is 12 minutes. Set to 0 to stop calendar time from changing. This setting does not affect the economic simulation of the game, and is only available when using wallclock timekeeping. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Choose the number of minutes in a calendar year. The default is 12 minutes. Set to 0 to stop calendar time from changing. This setting does not affect the economic simulation of the game, and is only available when using wallclock timekeeping STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (calendar time frozen) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Scale town cargo production: {STRING2} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Scale the cargo production of towns by this percentage. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Scale the cargo production of towns by this percentage STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Scale industry cargo production: {STRING2} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Scale the cargo production of industries by this percentage. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Scale the cargo production of industries by this percentage STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autorenew vehicle when it gets old: {STRING2} @@ -1529,7 +1529,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Duration of err STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duration for displaying error messages in a red window. Note that some (critical) error messages are not closed automatically after this time, but must be closed manually STR_CONFIG_SETTING_HOVER_DELAY :Show tooltips: {STRING2} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Delay before tooltips are displayed when hovering the mouse over some interface element. Alternatively tooltips are bound to the right mouse button when this value is set to 0. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Delay before tooltips are displayed when hovering the mouse over some interface element. Alternatively tooltips are bound to the right mouse button when this value is set to 0 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Hover for {COMMA} millisecond{P 0 "" s} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Right click @@ -1541,8 +1541,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Thickness of li STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Width of the line in the graphs. A thin line is more precisely readable, a thicker line is easier to see and colours are easier to distinguish STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Show the NewGRF's name in the build vehicle window: {STRING2} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Add a line to the build vehicle window, showing which NewGRF the selected vehicle comes from. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Show the cargoes the vehicles can carry in the list windows {STRING2} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Add a line to the build vehicle window, showing which NewGRF the selected vehicle comes from +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Show the cargoes the vehicles can carry in the list windows: {STRING2} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :If enabled, the vehicle's transportable load will appear above it in the vehicle lists STR_CONFIG_SETTING_LANDSCAPE :Landscape: {STRING2} @@ -1561,13 +1561,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industry densit STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Set how many industries should be generated and what level should be maintained during the game STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximum distance from edge for Oil industries: {STRING2} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limit for how far from the map border oil refineries and oil rigs can be constructed. On island maps this ensures they are near the coast. On maps larger than 256 tiles, this value is scaled up. +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limit for how far from the map border oil refineries and oil rigs can be constructed. On island maps this ensures they are near the coast. On maps larger than 256 tiles, this value is scaled up STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snow line height: {STRING2} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Choose at what height snow starts in sub-arctic landscape. Snow also affects industry generation and town growth requirements. Can only be modified via Scenario Editor or is otherwise calculated via "snow coverage" STR_CONFIG_SETTING_SNOW_COVERAGE :Snow coverage: {STRING2} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Choose the approximate amount of snow on the sub-arctic landscape. Snow also affects industry generation and town growth requirements. Only used during map generation. Sea level and coast tiles never have snow. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Choose the approximate amount of snow on the sub-arctic landscape. Snow also affects industry generation and town growth requirements. Only used during map generation. Sea level and coast tiles never have snow STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Desert coverage: {STRING2} @@ -1575,7 +1575,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Choose the appr STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Roughness of terrain: {STRING2} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Choose the shape and number of hills. Smooth landscapes have fewer, wider hills, while rough landscapes have more, smaller hills. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Choose the shape and number of hills. Smooth landscapes have fewer, wider hills, while rough landscapes have more, smaller hills ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Very Smooth STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Smooth @@ -1583,7 +1583,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Rough STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Very Rough STR_CONFIG_SETTING_VARIETY :Variety distribution: {STRING2} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Choose if the map contains both mountains and flat areas. The higher the variety, the more differences in elevation between mountainous and flat areas. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Choose if the map contains both mountains and flat areas. The higher the variety, the more differences in elevation between mountainous and flat areas STR_CONFIG_SETTING_RIVER_AMOUNT :River amount: {STRING2} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Choose how many rivers to generate @@ -1630,7 +1630,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Dark green STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violet STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Cargo flow overlay colours: {STRING2} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Set the colour scheme used for the cargo flow overlay. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Set the colour scheme used for the cargo flow overlay ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Green to red (original) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Green to blue @@ -1751,10 +1751,10 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Keep building t STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Keep the building tools for bridges, tunnels, etc. open after use STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatically remove signals during rail construction: {STRING2} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatically remove signals during rail construction if the signals are in the way. Note that this can potentially lead to train crashes. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatically remove signals during rail construction if the signals are in the way. Note that this can potentially lead to train crashes STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Fast forward speed limit: {STRING2} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limit on how fast the game goes when fast forward is enabled. 0 = no limit (as fast as your computer allows). Values below 100% slow the game down. The upper-limit depends on the specification of your computer and can vary depending on the game. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limit on how fast the game goes when fast forward is enabled. 0 = no limit (as fast as your computer allows). Values below 100% slow the game down. The upper-limit depends on the specification of your computer and can vary depending on the game STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normal game speed ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :No limit (as fast as your computer allows) @@ -1818,11 +1818,11 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Allow AI comput STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes before scripts are suspended: {STRING2} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximum number of computation steps that a script can take in one turn STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Max memory usage per script: {STRING2} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :How much memory a single script may consume before it's forcibly terminated. This may need to be increased for large maps. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :How much memory a single script may consume before it's forcibly terminated. This may need to be increased for large maps STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Service intervals are in percents: {STRING2} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :When enabled, vehicles try to service when their reliability drops by a given percentage of the maximum reliability.{}{}For example, if a vehicle's maximum reliability is 90% and the service interval is 20%, the vehicle will try to service when it reaches 72% reliability. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :When enabled, vehicles try to service when their reliability drops by a given percentage of the maximum reliability.{}{}For example, if a vehicle's maximum reliability is 90% and the service interval is 20%, the vehicle will try to service when it reaches 72% reliability STR_CONFIG_SETTING_SERVINT_TRAINS :Default service interval for trains: {STRING2} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Set the default service interval for new rail vehicles, if no explicit service interval is set for the vehicle @@ -1840,7 +1840,7 @@ STR_CONFIG_SETTING_NOSERVICE :Disable servici STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :When enabled, vehicles do not get serviced if they cannot break down STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Loading speed penalty for trains that are longer than the station: {STRING2} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :When enabled, trains which are too long for the station load more slowly than a train which fits the station. This setting does not affect pathfinding. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :When enabled, trains which are too long for the station load more slowly than a train which fits the station. This setting does not affect pathfinding STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Enable wagon speed limits: {STRING2} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :When enabled, also use speed limits of wagons for deciding the maximum speed of a train @@ -1905,13 +1905,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Year that the n STR_CONFIG_SETTING_STARTING_YEAR :Starting year: {STRING2} STR_CONFIG_SETTING_ENDING_YEAR :Scoring end year: {STRING2} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Year the game ends for scoring purposes. At the end of this year, the company's score is recorded and the high-score screen is displayed, but the players can continue playing after that.{}If this is before the starting year, the high-score screen is never displayed. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Year the game ends for scoring purposes. At the end of this year, the company's score is recorded and the high-score screen is displayed, but the players can continue playing after that.{}If this is before the starting year, the high-score screen is never displayed STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Never STR_CONFIG_SETTING_ECONOMY_TYPE :Economy type: {STRING2} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Smooth economy makes production changes more often, and in smaller steps. Frozen economy stops production changes and industry closures. This setting may have no effect if industry types are provided by a NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Smooth economy makes production changes more often, and in smaller steps. Frozen economy stops production changes and industry closures. This setting may have no effect if industry types are provided by a NewGRF ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Smooth @@ -1966,7 +1966,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Allowed STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Allowed, custom town layout STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Town cargo generation: {STRING2} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :How much cargo is produced by houses in towns, relative to the overall population of the town.{}Quadratic growth: A town twice the size generates four times as many passengers.{}Linear growth: A town twice the size generates twice the amount of passengers. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :How much cargo is produced by houses in towns, relative to the overall population of the town.{}Quadratic growth: A town twice the size generates four times as many passengers.{}Linear growth: A town twice the size generates twice the amount of passengers ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadratic (original) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear @@ -2007,7 +2007,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Highest resolution sprites to use: {STRING2} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limit the maximum resolution to use for sprites. Limiting sprite resolution will avoid using high resolution graphics even when available. This can help keep the game appearance unified when using a mix of GRF files with and without high resolution graphics. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limit the maximum resolution to use for sprites. Limiting sprite resolution will avoid using high resolution graphics even when available. This can help keep the game appearance unified when using a mix of GRF files with and without high resolution graphics ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2031,33 +2031,33 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Initial city si STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Average size of cities relative to normal towns at start of the game STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Update distribution graph every {STRING2} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Time between subsequent recalculations of the link graph. Each recalculation calculates the plans for one component of the graph. That means that a value X for this setting does not mean the whole graph will be updated every X seconds. Only some component will. The shorter you set it the more CPU time will be necessary to calculate it. The longer you set it the longer it will take until the cargo distribution starts on new routes. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Time between subsequent recalculations of the link graph. Each recalculation calculates the plans for one component of the graph. That means that a value X for this setting does not mean the whole graph will be updated every X seconds. Only some component will. The shorter you set it the more CPU time will be necessary to calculate it. The longer you set it the longer it will take until the cargo distribution starts on new routes STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Take {STRING2} for recalculation of distribution graph -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Time taken for each recalculation of a link graph component. When a recalculation is started, a thread is spawned which is allowed to run for this number of seconds. The shorter you set this the more likely it is that the thread is not finished when it's supposed to. Then the game stops until it is ("lag"). The longer you set it the longer it takes for the distribution to be updated when routes change. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Time taken for each recalculation of a link graph component. When a recalculation is started, a thread is spawned which is allowed to run for this number of seconds. The shorter you set this the more likely it is that the thread is not finished when it's supposed to. Then the game stops until it is ("lag"). The longer you set it the longer it takes for the distribution to be updated when routes change STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distribution mode for passengers: {STRING2} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetric" means that roughly the same number of passengers will go from a station A to a station B as from B to A. "Asymmetric" means that arbitrary numbers of passengers can go in either direction. "Manual" means that no automatic distribution will take place for passengers. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetric" means that roughly the same number of passengers will go from a station A to a station B as from B to A. "Asymmetric" means that arbitrary numbers of passengers can go in either direction. "Manual" means that no automatic distribution will take place for passengers STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distribution mode for mail: {STRING2} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetric" means that roughly the same amount of mail will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of mail can be sent in either direction. "Manual" means that no automatic distribution will take place for mail. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetric" means that roughly the same amount of mail will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of mail can be sent in either direction. "Manual" means that no automatic distribution will take place for mail STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distribution mode for the ARMOURED cargo class: {STRING2} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :The ARMOURED cargo class contains valuables in the temperate, diamonds in the subtropical, or gold in the subarctic climate. NewGRFs may change that. "Symmetric" means that roughly the same amount of that cargo will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of that cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for that cargo. It is recommended to set this to asymmetric or manual when playing subarctic or subtropic, as banks only receive cargo in these climates. For temperate you can also choose symmetric as banks will send valuables back to the origin bank. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :The ARMOURED cargo class contains valuables in the temperate, diamonds in the subtropical, or gold in the subarctic climate. NewGRFs may change that. "Symmetric" means that roughly the same amount of that cargo will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of that cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for that cargo. It is recommended to set this to asymmetric or manual when playing subarctic or subtropic, as banks only receive cargo in these climates. For temperate you can also choose symmetric as banks will send valuables back to the origin bank STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distribution mode for other cargo classes: {STRING2} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetric" means that arbitrary amounts of cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for those cargoes. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetric" means that arbitrary amounts of cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for those cargoes ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetric STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :symmetric STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Distribution accuracy: {STRING2} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :The higher you set this the more CPU time the calculation of the link graph will take. If it takes too long you may notice lag. If you set it to a low value, however, the distribution will be inaccurate, and you may notice cargo not being sent to the places you expect it to go. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :The higher you set this the more CPU time the calculation of the link graph will take. If it takes too long you may notice lag. If you set it to a low value, however, the distribution will be inaccurate, and you may notice cargo not being sent to the places you expect it to go STR_CONFIG_SETTING_DEMAND_DISTANCE :Effect of distance on demands: {STRING2} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :If you set this to a value higher than 0, the distance between the origin station A of some cargo and a possible destination B will have an effect on the amount of cargo sent from A to B. The further away B is from A the less cargo will be sent. The higher you set it, the less cargo will be sent to far away stations and the more cargo will be sent to near stations. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :If you set this to a value higher than 0, the distance between the origin station A of some cargo and a possible destination B will have an effect on the amount of cargo sent from A to B. The further away B is from A the less cargo will be sent. The higher you set it, the less cargo will be sent to far away stations and the more cargo will be sent to near stations STR_CONFIG_SETTING_DEMAND_SIZE :Amount of returning cargo for symmetric mode: {STRING2} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Setting this to less than 100% makes the symmetric distribution behave more like the asymmetric one. Less cargo will be forcibly sent back if a certain amount is sent to a station. If you set it to 0% the symmetric distribution behaves just like the asymmetric one. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Setting this to less than 100% makes the symmetric distribution behave more like the asymmetric one. Less cargo will be forcibly sent back if a certain amount is sent to a station. If you set it to 0% the symmetric distribution behaves just like the asymmetric one STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturation of short paths before using high-capacity paths: {STRING2} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequently there are multiple paths between two given stations. Cargodist will saturate the shortest path first, then use the second shortest path until that is saturated and so on. Saturation is determined by an estimation of capacity and planned usage. Once it has saturated all paths, if there is still demand left, it will overload all paths, prefering the ones with high capacity. Most of the time the algorithm will not estimate the capacity accurately, though. This setting allows you to specify up to which percentage a shorter path must be saturated in the first pass before choosing the next longer one. Set it to less than 100% to avoid overcrowded stations in case of overestimated capacity. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequently there are multiple paths between two given stations. Cargodist will saturate the shortest path first, then use the second shortest path until that is saturated and so on. Saturation is determined by an estimation of capacity and planned usage. Once it has saturated all paths, if there is still demand left, it will overload all paths, prefering the ones with high capacity. Most of the time the algorithm will not estimate the capacity accurately, though. This setting allows you to specify up to which percentage a shorter path must be saturated in the first pass before choosing the next longer one. Set it to less than 100% to avoid overcrowded stations in case of overestimated capacity STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Speed units (land): {STRING2} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Speed units (nautical): {STRING2} @@ -2979,11 +2979,11 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Place tr STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Random Trees STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plant trees randomly throughout the landscape STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plant single trees by dragging over the landscape. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plant single trees by dragging over the landscape STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Grove -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plant small forests by dragging over the landscape. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plant small forests by dragging over the landscape STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Forest -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plant large forests by dragging over the landscape. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plant large forests by dragging over the landscape # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Land Generation @@ -3198,11 +3198,11 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Frame Rate STR_FRAMERATE_CAPTION_SMALL :{STRING2}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulation rate: {STRING2} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Number of game ticks simulated per second. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Number of game ticks simulated per second STR_FRAMERATE_RATE_BLITTER :{BLACK}Graphics frame rate: {STRING2} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Number of video frames rendered per second. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Number of video frames rendered per second STR_FRAMERATE_SPEED_FACTOR :{BLACK}Current game speed factor: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}How fast the game is currently running, compared to the expected speed at normal simulation rate. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}How fast the game is currently running, compared to the expected speed at normal simulation rate STR_FRAMERATE_CURRENT :{WHITE}Current STR_FRAMERATE_AVERAGE :{WHITE}Average STR_FRAMERATE_MEMORYUSE :{WHITE}Memory @@ -3731,7 +3731,7 @@ STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Global S STR_STORY_BOOK_SPECTATOR :Global Story Book STR_STORY_BOOK_TITLE :{YELLOW}{RAW_STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Page {NUM} -STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Jump to a specific page by selecting it in this drop down list. +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Jump to a specific page by selecting it in this drop down list STR_STORY_BOOK_PREV_PAGE :{BLACK}Previous STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Go to previous page STR_STORY_BOOK_NEXT_PAGE :{BLACK}Next @@ -4026,12 +4026,12 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Ungrouped aircr STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groups - click on a group to list all vehicles of this group. Drag and drop groups to arrange hierarchy. +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groups - click on a group to list all vehicles of this group. Drag and drop groups to arrange hierarchy STR_GROUP_CREATE_TOOLTIP :{BLACK}Click to create a group STR_GROUP_DELETE_TOOLTIP :{BLACK}Delete the selected group STR_GROUP_RENAME_TOOLTIP :{BLACK}Rename the selected group STR_GROUP_LIVERY_TOOLTIP :{BLACK}Change livery of the selected group -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Click to protect this group from global autoreplace. Ctrl+Click to also protect sub-groups. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Click to protect this group from global autoreplace. Ctrl+Click to also protect sub-groups STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Delete Group STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Are you sure you want to delete this group and any descendants? From 8b60fc3d354cf855864ea537df19fe0b8406ee2c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 10 Mar 2024 17:15:34 +0000 Subject: [PATCH 097/695] Codechange: Use vector for waypoint layout. (#12264) This replaces manual new/delete of byte array, and matches how it is used for station layouts. --- src/waypoint_cmd.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/waypoint_cmd.cpp b/src/waypoint_cmd.cpp index 38165a62c8..31ee1f496d 100644 --- a/src/waypoint_cmd.cpp +++ b/src/waypoint_cmd.cpp @@ -258,13 +258,10 @@ CommandCost CmdBuildRailWaypoint(DoCommandFlag flags, TileIndex start_tile, Axis wp->UpdateVirtCoord(); const StationSpec *spec = StationClass::Get(spec_class)->GetSpec(spec_index); - byte *layout_ptr = new byte[count]; - if (spec == nullptr) { - /* The layout must be 0 for the 'normal' waypoints by design. */ - memset(layout_ptr, 0, count); - } else { - /* But for NewGRF waypoints we like to have their style. */ - GetStationLayout(layout_ptr, count, 1, spec); + std::vector layout(count); + if (spec != nullptr) { + /* For NewGRF waypoints we like to have their style. */ + GetStationLayout(layout.data(), count, 1, spec); } byte map_spec_index = AllocateSpecToStation(spec, wp, true); @@ -276,7 +273,7 @@ CommandCost CmdBuildRailWaypoint(DoCommandFlag flags, TileIndex start_tile, Axis bool reserved = IsTileType(tile, MP_RAILWAY) ? HasBit(GetRailReservationTrackBits(tile), AxisToTrack(axis)) : HasStationReservation(tile); - MakeRailWaypoint(tile, wp->owner, wp->index, axis, layout_ptr[i], GetRailType(tile)); + MakeRailWaypoint(tile, wp->owner, wp->index, axis, layout[i], GetRailType(tile)); SetCustomStationSpecIndex(tile, map_spec_index); /* Should be the same as layout but axis component could be wrong... */ @@ -297,7 +294,6 @@ CommandCost CmdBuildRailWaypoint(DoCommandFlag flags, TileIndex start_tile, Axis YapfNotifyTrackLayoutChange(tile, AxisToTrack(axis)); } DirtyCompanyInfrastructureWindows(wp->owner); - delete[] layout_ptr; } return cost; From 95a8fab339a5199340b0b0dfab93f03ffe3babc8 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 11 Mar 2024 04:42:14 +0000 Subject: [PATCH 098/695] Update: Translations from eints swedish: 7 changes by joeax910 norwegian (bokmal): 242 changes by eriksorngard welsh: 609 changes by Ansbaradigeidfran english (us): 3 changes by 2TallTyler chinese (simplified): 1 change by WenSimEHRP ukrainian: 21 changes by StepanIvasyn latvian: 1 change by lexuslatvia dutch: 1 change by Jaws3rd esperanto: 53 changes by legoscia portuguese (brazilian): 19 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 38 +- src/lang/dutch.txt | 1 + src/lang/english_US.txt | 3 + src/lang/esperanto.txt | 66 ++- src/lang/latvian.txt | 1 + src/lang/norwegian_bokmal.txt | 484 +++++++++--------- src/lang/simplified_chinese.txt | 2 +- src/lang/swedish.txt | 11 +- src/lang/ukrainian.txt | 30 +- src/lang/welsh.txt | 806 ++++++++++++++++++++++-------- 10 files changed, 957 insertions(+), 485 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 626a7389bd..d055559c00 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -28,7 +28,7 @@ STR_JUST_NOTHING :Nada STR_CARGO_PLURAL_NOTHING : STR_CARGO_PLURAL_PASSENGERS :Passageiros STR_CARGO_PLURAL_COAL :Carvão -STR_CARGO_PLURAL_MAIL :Correspondências +STR_CARGO_PLURAL_MAIL :Correio STR_CARGO_PLURAL_OIL :Petróleo STR_CARGO_PLURAL_LIVESTOCK :Gado STR_CARGO_PLURAL_GOODS :Bens @@ -62,7 +62,7 @@ STR_CARGO_PLURAL_FIZZY_DRINKS :Refrigerantes STR_CARGO_SINGULAR_NOTHING : STR_CARGO_SINGULAR_PASSENGER :Passageiro STR_CARGO_SINGULAR_COAL :Carvão -STR_CARGO_SINGULAR_MAIL :Correspondência +STR_CARGO_SINGULAR_MAIL :Correio STR_CARGO_SINGULAR_OIL :Petróleo STR_CARGO_SINGULAR_LIVESTOCK :Gado STR_CARGO_SINGULAR_GOODS :Bens @@ -96,7 +96,7 @@ STR_CARGO_SINGULAR_FIZZY_DRINK :Refrigerante STR_QUANTITY_NOTHING : STR_QUANTITY_PASSENGERS :{COMMA}{NBSP}passageiro{P "" s} STR_QUANTITY_COAL :{WEIGHT_LONG} de carvão -STR_QUANTITY_MAIL :{COMMA}{NBSP}saco{P "" s} de correspondência +STR_QUANTITY_MAIL :{COMMA}{NBSP}saco{P "" s} de correio STR_QUANTITY_OIL :{VOLUME_LONG} de petróleo STR_QUANTITY_LIVESTOCK :{COMMA}{NBSP}cabeça{P "" s} de gado STR_QUANTITY_GOODS :{COMMA}{NBSP}caixa{P "" s} de bens @@ -1033,7 +1033,7 @@ STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Tela che STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Marque esta caixa para jogar o OpenTTD em modo de tela cheia STR_GAME_OPTIONS_RESOLUTION :{BLACK}Resolução da tela -STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Escolher a resolução da tela que será usada +STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Selecione uma resolução de tela para usar STR_GAME_OPTIONS_RESOLUTION_OTHER :outra STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} @@ -1076,20 +1076,20 @@ STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Mostrar STR_GAME_OPTIONS_GRAPHICS :{BLACK}Gráficos STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Taxa de atualização da tela -STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Escolher qual taxa de atualização da tela será usada +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Selecione uma taxa de atualização de tela para usar STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Taxas de atualização superiores a 60Hz podem interferir no desempenho. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos base -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Escolher qual conjunto de gráficos base usar (não pode ser alterado no jogo, só a partir do menu principal) +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecione um conjunto de gráficos base para usar (não pode ser alterado no jogo, só a partir do menu principal) STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Informação adicional sobre sobre o conjunto de gráficos base STR_GAME_OPTIONS_BASE_SFX :{BLACK}Conjunto de sons base -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Escolher qual conjunto de sons base usar (não pode ser alterado no jogo, só a partir do menu principal) +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Selecione um conjunto de sons base para usar (não pode ser alterado no jogo, só a partir do menu principal) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Informação adicional sobre sobre o conjunto de sons base STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Conjunto de músicas base -STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Escolher qual conjunto de músicas base usar +STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selecione um conjunto de músicas base para usar STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Informação adicional sobre o conjunto de músicas base STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(não existem plugins instalados para integrar com as plataformas sociais) @@ -1202,10 +1202,10 @@ STR_TERRAIN_TYPE_CUSTOM :Altura personal STR_TERRAIN_TYPE_CUSTOM_VALUE :Altura personalizada ({NUM}) ###length 4 -STR_CITY_APPROVAL_LENIENT :Brando +STR_CITY_APPROVAL_LENIENT :Leniente STR_CITY_APPROVAL_TOLERANT :Tolerante STR_CITY_APPROVAL_HOSTILE :Hostil -STR_CITY_APPROVAL_PERMISSIVE :Permissivo (sem efeito nas ações da empresa) +STR_CITY_APPROVAL_PERMISSIVE :Permissiva (sem efeito nas ações da empresa) STR_WARNING_NO_SUITABLE_AI :{WHITE}Não existem IAs disponíveis...{}Você pode obter várias IAs usando o sistema de 'Conteúdo Online' @@ -1256,7 +1256,7 @@ STR_CONFIG_SETTING_ON :Ativado STR_CONFIG_SETTING_DISABLED :Desativado ###length 3 -STR_CONFIG_SETTING_COMPANIES_OFF :Desligado +STR_CONFIG_SETTING_COMPANIES_OFF :Desativado STR_CONFIG_SETTING_COMPANIES_OWN :Própria empresa STR_CONFIG_SETTING_COMPANIES_ALL :Todas as empresas @@ -1670,7 +1670,7 @@ STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING_HELPTEXT :Ativar o rolame ###length 3 STR_CONFIG_SETTING_SCROLLWHEEL_ZOOM :Ampliar mapa STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Mover o mapa -STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Desligado +STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Desativado STR_CONFIG_SETTING_OSK_ACTIVATION :Teclado virtual: {STRING} STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Escolher o método para mostrar o teclado virtual para inserir texto em caixas de diálogo usando o cursor. Isto é útil para dispositivos pequenos que não possuem teclados @@ -1692,7 +1692,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Escolher o mét ###length 3 STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+Clique STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+Clique -STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Desligado +STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Desativado STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Fechar janela com botão direito do mouse: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Fechar uma janela ao clicar com o botão direito do mouse sobre ela. Desativa os textos de ajuda (dicas) com o botão direito! @@ -1859,9 +1859,9 @@ STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Acidentes / des STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Mostrar um jornal quando ocorrem acidentes ou desastres STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :Acidentes de veículos dos concorrentes: {STRING} -STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :Mostrar um jornal sobre veículos acidentados para os concorrentes +STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :Mostrar um jornal sobre veículos acidentados dos concorrentes -STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Informações da empresa: {STRING} +STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Informações de empresa: {STRING} STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Mostrar um jornal quando uma nova empresa é criada ou quando empresas estão à beira da falência STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN :Abertura de indústrias: {STRING} @@ -1897,7 +1897,7 @@ STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Mostrar um jorn STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION :Informações gerais: {STRING} STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION_HELPTEXT :Mostrar um jornal sobre eventos gerais, como a compra de direitos de exclusividade ou financiamento para a reconstrução de estradas ###length 3 -STR_CONFIG_SETTING_NEWS_MESSAGES_OFF :Desligado +STR_CONFIG_SETTING_NEWS_MESSAGES_OFF :Desativado STR_CONFIG_SETTING_NEWS_MESSAGES_SUMMARY :Resumo STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Completo @@ -2038,8 +2038,8 @@ STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo gasto par STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribuição para passageiros: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" significa que aproximadamente o mesmo número de passageiros irá de uma estação A para uma estação B, assim como de B para A. "Assimétrico" significa que um número arbitrário de passageiros pode ir em qualquer direção. "Manual" significa que não haverá distribuição automática dos passageiros. -STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modo de distribuição para correspondências: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simétrico" significa que aproximadamente a mesma quantidade de correspondência será enviada de uma estação A para uma estação B, assim como de B para A. "Assimétrica" significa que quantidades arbitrárias de correspondência podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática de correspondências. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modo de distribuição para correio: {STRING} +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simétrico" significa que aproximadamente a mesma quantidade de correio será enviada de uma estação A para uma estação B, assim como de B para A. "Assimétrica" significa que quantidades arbitrárias de correio podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática para correio. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Modo de distribuição para a classe de carga BLINDADA: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe de carga BLINDADA contém objetos de valor em clima temperado, diamantes em clima subtropical ou ouro em clima subártico. NewGRFs podem modificar isso. "Simétrica" significa que aproximadamente a mesma quantidade dessa carga será enviada de uma estação A para uma estação B, assim como de B para A. "Assimétrica" significa que quantidades arbitrárias dessa carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática para aquela carga. Recomenda-se definir isso como assimétrico ou manual ao jogar subártico ou subtropical, pois os bancos só recebem carga nesses climas. Para temperado, você também pode escolher simétrico, pois os bancos enviarão objetos de valor de volta ao banco de origem. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Modo de distribuição para outras classes de carga: {STRING} @@ -2050,7 +2050,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :assimétrico STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simétrico STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Precisão da distribuição: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Quanto maior for esse valor, mais tempo de CPU será necessário para calcular a rede de conexões. Se levar muito tempo muito você poderá notar atrasos. Entretanto, se o valor for muito pequeno, a distribuição será imprecisa e você irá perceber que cargas não estão sendo enviadas para os locais esperados. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Quanto maior for esse valor, mais tempo de CPU será necessário para calcular a rede de conexões. Se demorar muito, você poderá notar um atraso. Entretanto, se o valor for muito pequeno, a distribuição será imprecisa e você irá perceber que cargas não estão sendo enviadas para os locais esperados. STR_CONFIG_SETTING_DEMAND_DISTANCE :Efeito da distância na demanda: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Se for definido um valor maior que 0, a distância entre a estação de origem A de alguma carga e um possível destino B terá um efeito na quantidade de carga transportada de A até B. Quanto mais distante B estiver de A, menos carga será enviada. Quanto maior o valor definido, menos carga será transportada para estações distantes e mais carga será enviada para estações mais próximas. diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 2edebe6c26..97abd76252 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1011,6 +1011,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Indiase rupee STR_GAME_OPTIONS_CURRENCY_IDR :Indonesische roepia STR_GAME_OPTIONS_CURRENCY_MYR :Maleisische Ringgit STR_GAME_OPTIONS_CURRENCY_LVL :Letse lats +STR_GAME_OPTIONS_CURRENCY_PTE :Portugese Escudo STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Automatisch opslaan STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Tijdsduur kiezen tussen automatisch opgeslagen spellen diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index b142dd7c67..9081a8781a 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1011,6 +1011,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Indian Rupee STR_GAME_OPTIONS_CURRENCY_IDR :Indonesian Rupiah STR_GAME_OPTIONS_CURRENCY_MYR :Malaysian Ringgit STR_GAME_OPTIONS_CURRENCY_LVL :Latvian Lats +STR_GAME_OPTIONS_CURRENCY_PTE :Portuguese Escudo STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Autosave STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Select interval between automatic game saves @@ -3078,6 +3079,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Streetca STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Railroad owner: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Local authority: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :None +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordinates: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Tile index: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Built/renovated: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Station class: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Station type: {LTBLUE}{STRING} diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 8e603ab83f..3954ffda51 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -288,6 +288,10 @@ STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Same kiel ĉefa STR_UNITS_VELOCITY_IMPERIAL :{DECIMAL}{NBSP}mph STR_UNITS_VELOCITY_METRIC :{DECIMAL}{NBSP}km/h STR_UNITS_VELOCITY_SI :{DECIMAL}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS_DAY :{DECIMAL}{NBSP}kaheloj/tago +STR_UNITS_VELOCITY_GAMEUNITS_DAY.n :{DECIMAL}{NBSP}kahelojn/tago +STR_UNITS_VELOCITY_GAMEUNITS_SEC :{DECIMAL}{NBSP}kaheloj/sek +STR_UNITS_VELOCITY_GAMEUNITS_SEC.n :{DECIMAL}{NBSP}kahelojn/sek STR_UNITS_VELOCITY_KNOTS :{DECIMAL}{NBSP}knotoj STR_UNITS_POWER_IMPERIAL :{DECIMAL}{NBSP}ĉp @@ -335,11 +339,15 @@ STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP} # Time units used in string control characters STR_UNITS_DAYS :{COMMA}{NBSP}tago{P "" j} STR_UNITS_SECONDS :{COMMA}{NBSP}sekundo{P "" j} +STR_UNITS_TICKS :{COMMA}{NBSP}tempopulso{P "" j} +STR_UNITS_TICKS.n :{COMMA}{NBSP}tempopulso{P "" j}n STR_UNITS_MONTHS :{NUM}{NBSP}monato{P "" j} STR_UNITS_MINUTES :{NUM}{NBSP}minuto{P "" j} STR_UNITS_YEARS :{NUM}{NBSP}jaro{P "" j} +STR_UNITS_PERIODS :{NUM}{NBSP}periodo{P "" j} +STR_UNITS_PERIODS.n :{NUM}{NBSP}periodo{P "" j}n # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtroteksto: @@ -471,8 +479,8 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Montri v STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Montristratveturiloliston de la kompanio. Stir+Klak baskulas la grupo/veturilo-liston. STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Montri ŝipoliston de la kompanio. Stir+Klak baskulas la grupo/veturilo-liston. STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Montri aviadiloliston de la kompanio. Stir+Klak baskulas la grupo/veturilo-liston. -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Zomu vidon -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Malzomu vidon +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Zomu +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Malzomu STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Konstrui fervojan infrastrukturon STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Konstruu stratan infrastrukturon STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Konstruu traman infrastrukturon @@ -964,10 +972,12 @@ STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} tro malnoviĝis kaj postulas anstataŭiĝon STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} ne povas trovi padon por daŭrigi. STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} estas perdita +STR_NEWS_VEHICLE_UNPROFITABLE_YEAR :{WHITE}La profito de {VEHICLE} dum la pasinta jaro estis {CURRENCY_LONG} +STR_NEWS_VEHICLE_UNPROFITABLE_PERIOD :{WHITE}La profito de {VEHICLE} dum la pasinta periodo estis {CURRENCY_LONG} STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} ne povas iri ĝis la sekva celpunkto ĉar ĝi estas ekster la atingebla distanco STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} haltis ĉar komanda transformo fiaskis -STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Aŭtorenovigo fiaskis ĉe {VEHICLE}{}{STRING} +STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Aŭtomata renovigo fiaskis ĉe {VEHICLE}{}{STRING} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}Nova {STRING} nun haveblas! STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} @@ -978,12 +988,12 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Subvencia oferto ne plu validas:{}{}Transportado de {STRING} de {STRING} al {STRING} ne estos subvenciata. STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subvencio retiriĝis:{}{}Servo de {STRING} de {STRING} al {STRING} ne plu estas subvenciata. -STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subvencia proponiĝas:{}{}Unua {STRING} de {STRING} al {STRING} ricevos {UNITS_YEARS_OR_MINUTES} subvencion de la lokaj estroj! +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subvencio proponiĝas:{}{}Unua {STRING} de {STRING} al {STRING} ricevos dum {UNITS_YEARS_OR_MINUTES} subvencion de la lokaj estroj! ###length 4 STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subvencion gajnis {STRING}!{}{}{STRING} de {STRING} al {STRING} pagiĝos kun aldono je 50% dum la sekvontaj {UNITS_YEARS_OR_MINUTES}! STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subvencion gajnis {STRING}!{}{}{STRING} de {STRING} al {STRING} pagiĝos duoble dum la sekvontaj {UNITS_YEARS_OR_MINUTES}! STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subvencion gajnis {STRING}!{}{}{STRING} de {STRING} al {STRING} pagiĝos trioble dum la sekvontaj {UNITS_YEARS_OR_MINUTES}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Suvencion gajnis {STRING}!{}{}{STRING} de {STRING} al {STRING} pagiĝos kvaroble dum la sekvontaj {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subvencion gajnis {STRING}!{}{}{STRING} de {STRING} al {STRING} pagiĝos kvaroble dum la sekvontaj {UNITS_YEARS_OR_MINUTES}! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transporta monopolo! @@ -1379,9 +1389,10 @@ STR_CONFIG_SETTING_SMOKE_AMOUNT :Kvanto da lokom STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Agordu kiom da fumo aŭ fajreroj eligas veturiloj STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Modelo de vagonarakcelado: {STRING} +STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Elektu fizikan modelon por trajna akcelado. La "originala" modelo malfaciligas deklivojn egale por ĉiuj veturiloj. La "realisma" modelo malfaciligas deklivojn kaj kurbojn depende de diversaj ecoj de la vagonkonsisto, ekzemple longeco kaj trakcia forto STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Modelo de stratveturilakcelado: {STRING} -STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Elektu fizikan modelon por startveturila akcelado. La "originala" modelo malfaciligas deklivojn egale por ĉiuj veturiloj. La "realisma" modelo malfaciligas deklivojn depende de diversaj ecoj de la motoro, ekzemple "trakcia forto". +STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Elektu fizikan modelon por stratveturila akcelado. La "originala" modelo malfaciligas deklivojn egale por ĉiuj veturiloj. La "realisma" modelo malfaciligas deklivojn depende de diversaj ecoj de la motoro, ekzemple "trakcia forto". STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :Deklivkruteco por vagonaroj: {STRING} STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Kruteco de dekliva kahelo por vagonaro. Kun pli alta valoro estas pli malfacile supreniri altaĵon @@ -1516,8 +1527,11 @@ STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Kiam tiu ĉi ag STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Veturiloj neniam eluziĝas: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Se tiu ĉi agordo estas aktiva, ĉiuj modeloj de veturiloj restos aĉeteblaj por ĉiam post ekhaveblo +STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Tempomezuro: {STRING} +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Elektu tempomezurajn unuoj por la ludo. Ne eblas ŝanĝi tion ĉi poste.{}{}Kalendar-bazita estas la klasika OpenTTD-sperto, kun jaro konsistanta el 12 monatoj, kaj ĉiu monato havas 28-31 tagojn.{}{}En Murhorloĝ-bazita tempo, kargoproduktado kaj financoj anstataŭe baziĝas je unu-minutaj eroj, kiuj proksimume same longe daŭras kiel 30-taga monato en Kalendar-bazita reĝimo. Tiuj ĉi eroj grupiĝas en 12-minutajn periodojn, ekvivalentajn al jaro en Kalendar-bazita reĝimo.{}{}En ambaŭ reĝimoj ĉiam ekzistas klasika kalendaro, uzata por datoj de havebliĝo de veturiloj, domoj, kaj alia infrastrukturo. ###length 2 -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalendaro +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalendara +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Murhorloĝa ###setting-zero-is-special @@ -2111,6 +2125,7 @@ STR_CONFIG_SETTING_NETWORK :Reto STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Padtrovilo por vagonaroj: {STRING} STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Padtrovilo por stratveturiloj: {STRING} +STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Padtrovilo uzota por stratveturiloj STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Padtrovilo por ŝipoj: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Aŭtomata dorsflankante ĉe signaloj: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permesu al vagonaro turniĝi ĉe semaforo, se ĝi jam atendis dum longa tempo @@ -2231,6 +2246,7 @@ STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Montru s STR_LIVERY_SHIP_TOOLTIP :{BLACK}Montru ŝipkolorajn skemojn STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Montru aviadilajn kolorskemojn STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Montru kolorojn de stratveturilaj grupoj +STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Montru kolorojn de ŝipaj grupoj STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Montru kolorojn de aviadilaj grupoj STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Elektu la unuan koloron por la elektita skemo. Ctrl+klaki aktivigos tiu koloron je ĉiu skemoj STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Elektu la duan koloron por la elektita skemo. Ctrl+klaki aktivigos tiu koloron je ĉiu skemoj @@ -3614,6 +3630,8 @@ STR_SUBSIDIES_NONE :{ORANGE}- Neniu STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Servoj subvenciataj: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} de {STRING} al {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klaku servon por centri vidpunkto ĉe la industrio/urbo. Ctrl+Klak por malfermi novan vidujon ĉe la loko +STR_SUBSIDIES_OFFERED_EXPIRY_DATE :ĝis {DATE_SHORT} +STR_SUBSIDIES_OFFERED_EXPIRY_TIME :ene de {UNITS_MONTHS_OR_MINUTES} STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :ĝis {DATE_SHORT} STR_SUBSIDIES_SUBSIDISED_EXPIRY_TIME :{UNITS_MONTHS_OR_MINUTES} restas @@ -3815,6 +3833,8 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanaloj STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stacioj: STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Staciaj kaheloj STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Flughavenoj +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR :{WHITE}{CURRENCY_LONG}/jaro +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD :{WHITE}{CURRENCY_LONG}/periodo # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrioj @@ -3874,6 +3894,7 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Sendu in STR_VEHICLE_LIST_REPLACE_VEHICLES :Anstataŭu veturilojn STR_VEHICLE_LIST_SEND_FOR_SERVICING :Sendu por prizorgo STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Gajno ĉi-jare: {CURRENCY_LONG} (pasintjare: {CURRENCY_LONG}) +STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{TINY_FONT}{BLACK}Profito ĉi-periode: {CURRENCY_LONG} (pasintperiode: {CURRENCY_LONG}) STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} @@ -3917,7 +3938,9 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Forigi ĉiujn v STR_GROUP_RENAME_CAPTION :{BLACK}Alinomi grupon STR_GROUP_PROFIT_THIS_YEAR :Ĉi-jara profito: +STR_GROUP_PROFIT_THIS_PERIOD :Profito ĉi-periode: STR_GROUP_PROFIT_LAST_YEAR :Pasintjara profito: +STR_GROUP_PROFIT_LAST_PERIOD :Profito pasintperiode: STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window @@ -3971,8 +3994,8 @@ STR_CARGO_TYPE_FILTER_NONE :Neniaj ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Vagonara elektolisto - alklaku veturilon por informoj -STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Stratveturilelektan liston - alklaku veturilon por informoj -STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Ŝipelekta listo - alklaku ŝipon por informoj +STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Stratveturila elektolisto. Alklaku veturilon por informoj. Ctrl+klak por montri/kaŝi tiun ĉi veturiltipon +STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Ŝipa elektolisto. Alklaku ŝipon por informoj. Ctrl+klak por montri/kaŝi tiun ĉi ŝipotipon STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Aviadilelekta listo. Alklaku aviadilon por informoj. Ctrl+klak por montri/kaŝi tiun ĉi aviadiltipon ###length VEHICLE_TYPES @@ -3988,12 +4011,15 @@ STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Aĉetu k STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Aĉetu kaj readaptu la aviadilon ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Aĉeti la emfazitan vagonaron. Montri taksitaj kostoj sen aĉeti per maljuskliga klavo + Klaki -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Aĉeti la emfazitan stratveturilon. Montri taksitaj kostoj sen aĉeti per maljuskliga klavo + Klaki -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Aĉeti la emfazitan ŝipon. Montri taksitaj kostoj sen aĉeti per maljuskliga klavo + Klaki +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Aĉetu la emfazitan vagonaron. Ankaŭ premu Shift por nur montri kostotakson +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Aĉetu la emfazitan stratveturilon. Ankaŭ premu Shift por nur montri kostotakson +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Aĉetu la emfazitan ŝipon. Ankaŭ premu Shift por nur montri kostotakson STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Aĉetu la emfazitan aviadilon. Ankaŭ premu Shift por nur montri la taksitan koston ###length VEHICLE_TYPES +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Aĉetu kaj readaptu la emfazitan relveturilon. Ankaŭ premu Shift por nur montri kostotakson +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Aĉetu kaj readaptu la emfazitan stratveturilon. Ankaŭ premu Shift por nur montri kostotakson +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Aĉetu kaj readaptu la emfazitan ŝipon. Ankaŭ premu Shift por nur montri kostotakson ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Alinomi @@ -4137,6 +4163,7 @@ STR_ENGINE_PREVIEW_SHIP :ŝipo STR_ENGINE_PREVIEW_COST_WEIGHT :Kosto: {CURRENCY_LONG} Pezo: {WEIGHT_SHORT} STR_ENGINE_PREVIEW_COST_MAX_SPEED :Kosto: {CURRENCY_LONG} Maksimuma rapideco: {VELOCITY} STR_ENGINE_PREVIEW_SPEED_POWER :Rapideco: {VELOCITY} Povo: {POWER} +STR_ENGINE_PREVIEW_TYPE :Tipo de aviadilo: {STRING} STR_ENGINE_PREVIEW_RUNCOST_YEAR :Irkosto: {CURRENCY_LONG}/jaro STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Irkosto: {CURRENCY_LONG}/periodo STR_ENGINE_PREVIEW_CAPACITY :Kapacito: {CARGO_LONG} @@ -4286,6 +4313,7 @@ STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Nomu avi STR_VEHICLE_INFO_AGE :{COMMA} jaro{P "" j} ({COMMA}) STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} jaro{P "" j} ({COMMA}) STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Aĝo: {LTBLUE}{STRING}{BLACK} Irkosto: {LTBLUE}{CURRENCY_LONG}/jaro +STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Aĝo: {LTBLUE}{STRING}{BLACK} Irkosto: {LTBLUE}{CURRENCY_LONG}/periodo STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Maks. rapido: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Maks. rapideco: {LTBLUE}{VELOCITY} {BLACK}Tipo de aviadilo: {LTBLUE}{STRING} @@ -4295,6 +4323,8 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Pezo: {L STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profito ĉijare: {LTBLUE}{CURRENCY_LONG} (lastjare: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Profito ĉi-jare: {LTBLUE}{CURRENCY_LONG} (pasintjare: {CURRENCY_LONG}) {BLACK}Min. rendimento: {LTBLUE}{POWER_TO_WEIGHT} +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Profito ĉi-periode: {LTBLUE}{CURRENCY_LONG} (pasintperiode: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Profito ĉi-periode: {LTBLUE}{CURRENCY_LONG} (pasintperiode: {CURRENCY_LONG}) {BLACK}Min. rendimento: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Fidindo: {LTBLUE}{COMMA}% {BLACK}Paneoj ekde lasta servo: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Konstruita: {LTBLUE}{NUM}{BLACK} Valoro: {LTBLUE}{CURRENCY_LONG} @@ -4306,7 +4336,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Enhaveco STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Transigaj Kreditoj: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Prizorga intertempo: {LTBLUE}{COMMA}{NBSP}tagoj{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Prizorga intertempo: {LTBLUE}{COMMA}{NBSP}minutoj{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Prizorga intertempo: {LTBLUE}{COMMA}%{BLACK} {STRING} +STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Lasta prizorgo: {LTBLUE}{DATE_LONG} +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Lasta prizorgo: antaŭ {LTBLUE}{NUM} minutoj STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Pliigu prizorgan intertempon je 10 tagoj. Ctrl+klak por pliigi prizorgan intertempon je 5 tagoj STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Pliigu prizorgan intertempon je 5 minutoj. Ctrl+klak por pliigi prizorgan intertempon je 1 minuto STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Pliigu prizorgan intertempon je 10 procentoj. Ctrl+klak por pliigi prizorgan intertempon je 5 procentoj @@ -4316,6 +4349,8 @@ STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Malpliig STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Ŝanĝi la tipo de servon intervalon STR_VEHICLE_DETAILS_DEFAULT :Defaŭlto +STR_VEHICLE_DETAILS_DAYS :Tagoj +STR_VEHICLE_DETAILS_MINUTES :Minutoj STR_VEHICLE_DETAILS_PERCENT :Procentaĵo ###length VEHICLE_TYPES @@ -4570,7 +4605,9 @@ STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Ĉi tiu STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Tiu ĉi horaro komenciĝos je {STRING} STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Tiu ĉi horaro komenciĝos post {COMMA} sekundoj +STR_TIMETABLE_START :{BLACK}Komencu horaron +STR_TIMETABLE_START_SECONDS_QUERY :Sekundoj ĝis kiam komenciĝos la horaro STR_TIMETABLE_CHANGE_TIME :{BLACK}Ŝanĝu tempon STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Ŝanĝu kiom da tempo devus postuli la markita ordono. Stir+Klak ŝanĝas la tempon por ĉiuj ordonoj @@ -4594,7 +4631,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Atendite STR_TIMETABLE_SCHEDULED :{BLACK}Planite STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Ŝalti inter atendite kaj planite +STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :E: {COLOUR}{DATE_TINY} STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} sek +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :E: {COLOUR}{COMMA} sek # Date window (for timetable) @@ -4947,7 +4987,7 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Malĝusta gara # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} tro longas post anstataŭado -STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Neniuj aŭtoanstataŭo/renovigo reguloj aplikitaj. +STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Neniuj reguloj pri aŭtomata anstataŭigo/renovigo aplikiĝas STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(monlimo) STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}La nova veturilo ne povas porti {STRING.n} STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}La nova veturilo ne povas plenumi readapton en la {NUM}a ordono diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 981f490c33..49f2bc92d4 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1013,6 +1013,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Indijas rūpija STR_GAME_OPTIONS_CURRENCY_IDR :Indonēzijas rūpija STR_GAME_OPTIONS_CURRENCY_MYR :Malaizijas Ringits STR_GAME_OPTIONS_CURRENCY_LVL :Latvijas lati +STR_GAME_OPTIONS_CURRENCY_PTE :Portugāles eskudo STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Automātiskā saglabāšana STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Izvēlēties spēles automātiskās saglabāšanas starplaikus diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 945360b052..5af2273f46 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -269,7 +269,7 @@ STR_UNITS_YEARS :{NUM}{NBSP}år STR_UNITS_PERIODS :{NUM}{NBSP}period{P "" er} # Common window strings -STR_LIST_FILTER_TITLE :{BLACK}Filter: +STR_LIST_FILTER_TITLE :{BLACK}Filtrer: STR_LIST_FILTER_OSKTITLE :{BLACK}Skriv inn ett eller flere nøkkelord for å søkeord for å filtrere listen med STR_LIST_FILTER_TOOLTIP :{BLACK}Skriv inn ett eller flere nøkkelord for å søkeord for å filtrere listen med @@ -402,15 +402,15 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :Åpne liste ove STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Åpne liste over selskapets luftfartøy. Ctrl+klikk for å vise eller skjule farkostgrupper, motsatt av valgt innstilling STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Zoom inn STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Zoom ut -STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Bygg jernbanespor -STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Bygg veier -STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Bygg trikkespor -STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Bygg havner +STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Bygg jernbaneinfrastruktur +STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Bygg veiinfrastruktur +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Bygg trikkeinfrastruktur +STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Bygg havneinfrastruktur STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Bygg flyplasser -STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Åpne landskapsverktøylinjen for å heve/senke land, plante trær, osv. -STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Vis lyd-/musikkinnstillinger -STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Vis siste melding/nyhet, vis meldingsinnstillinger -STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Informasjon om landområde, konsoll, skriptfeilsøking, skjermbilder, om OpenTTD +STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Åpne landskapsmenyen, tremenyen eller plassere et skilt +STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Åpne lyd-/musikkinnstillinger +STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Åpne siste melding/nyhet, meldingshistorikk eller slette alle meldinger +STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Åpne informasjon om landområde, skjermbildemeny, om OpenTTD, eller utviklerverktøy STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Skift verktøylinjer # Extra tooltips for the scenario editor toolbar @@ -422,13 +422,13 @@ STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Flytt st STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Klikk her for å taste inn startåret STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Åpne kart, ekstra tillegssvindu, tegnliste, eller by- eller industrikatalog STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Åpne landskapsmeny eller generer en ny verden -STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Bygenerering +STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Bygg eller generer byer STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Bygg eller generer industrier STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Bygg veiinfrastruktur -STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Bygg trikkespor -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant trær. Ctrl+klikk+dra for å velge arealet diagonalt. Trykk også Shift for å bare vise kostnadsestimat +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Bygg trikkeinfrastruktur +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant trær. Ctrl+klikk+dra for å velge arealet diagonalt. Trykk også Shift for å kun vise kostnadsestimat STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Plasser skilt -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Plasser objekt. Ctrl+klikk+dra for å velge arealet diagonalt. Trykk også Shift for å bare vise kostnadsestimat +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Plasser objekt. Ctrl+klikk+dra for å velge arealet diagonalt. Trykk også Shift for å kun vise kostnadsestimat # Scenario editor file menu ###length 7 @@ -453,7 +453,7 @@ STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Vis bynavn STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Vis stasjonsnavn STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Vis kontrollpunkt STR_SETTINGS_MENU_SIGNS_DISPLAYED :Vis skilt -STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Vis motstanderskilt og -navn +STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Vis konkurrenters skilt og navn STR_SETTINGS_MENU_FULL_ANIMATION :Fullstending animasjon STR_SETTINGS_MENU_FULL_DETAIL :Maks detaljer STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Gjennomsiktige bygninger @@ -483,7 +483,7 @@ STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Graf over fortj STR_GRAPH_MENU_INCOME_GRAPH :Graf over Inntekter STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Graf over leverte varer STR_GRAPH_MENU_PERFORMANCE_HISTORY_GRAPH :Graf over prestasjonhistorikk -STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Graf over firmaverdi +STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Graf over selskapsverdi STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Varetakster # Company league menu @@ -529,9 +529,9 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Slett alle meld STR_ABOUT_MENU_LAND_BLOCK_INFO :Informasjon om landområde STR_ABOUT_MENU_HELP :Hjelp og manualer STR_ABOUT_MENU_TOGGLE_CONSOLE :Vis/skjul konsoll -STR_ABOUT_MENU_AI_DEBUG :AI/Spillskript-feilsøking +STR_ABOUT_MENU_AI_DEBUG :KI/Game Script-feilsøking STR_ABOUT_MENU_SCREENSHOT :Skjermbilde -STR_ABOUT_MENU_SHOW_FRAMERATE :Vis bildehastighet +STR_ABOUT_MENU_SHOW_FRAMERATE :Vis oppdateringsrate STR_ABOUT_MENU_ABOUT_OPENTTD :Om 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Spriteforskyver STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Vis/skjul markeringsramme @@ -611,7 +611,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Fortjene STR_GRAPH_INCOME_CAPTION :{WHITE}Inntektsgraf STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Vareenheter levert STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Prestasjonsvurdering av firma (maks poeng=1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Firmaverdier +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Graf over selskapsverdi STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Siste 72 minutter @@ -647,7 +647,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :President STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Finansfyrste # Performance detail window -STR_PERFORMANCE_DETAIL :{WHITE}Detaljert prestasjonsrating +STR_PERFORMANCE_DETAIL :{WHITE}Detaljert prestasjonrating STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detaljer STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) @@ -775,7 +775,7 @@ STR_SMALLMAP_LEGENDA_AIRCRAFT :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_TRANSPORT_ROUTES :{TINY_FONT}{BLACK}Transportruter STR_SMALLMAP_LEGENDA_FOREST :{TINY_FONT}{BLACK}Skog STR_SMALLMAP_LEGENDA_RAILROAD_STATION :{TINY_FONT}{BLACK}Jernbanestasjon -STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Lasteterminal +STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Godsterminal STR_SMALLMAP_LEGENDA_BUS_STATION :{TINY_FONT}{BLACK}Busstasjon STR_SMALLMAP_LEGENDA_AIRPORT_HELIPORT :{TINY_FONT}{BLACK}Flyplass/Helikopterplass STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLACK}Havn @@ -859,7 +859,7 @@ STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLAC STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} har blitt nedlagt av kreditorene og alle aktiva har blitt solgt! STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Nytt transportfirma opprettet! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} starter opp i nærheten av {TOWN}! -STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} har blitt kjøpt opp av {STRING}! +STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} har blitt kjøpt opp av {STRING} for et ukjent beløp! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Sjef) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} sponset grunnleggelsen av den nye byen {TOWN}! @@ -922,7 +922,7 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Subsidietilbud har gått ut:{}{}{STRING} fra {STRING} til {STRING} vil ikke subsidieres. STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidie er trukket tilbake:{}{}Transport av {STRING} fra {STRING} til {STRING} subsidieres ikke lenger. -STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subsidietilbud:{}{}Første transport av {STRING} fra {STRING} til {STRING} vil subsidieres av bystyret i {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subsidietilbud:{}{}Første transport av {STRING} fra {STRING} til {STRING} vil subsidieres av lokale myndigheter i {UNITS_YEARS_OR_MINUTES}! ###length 4 STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subsidie gitt til {STRING}!{}{}{STRING} fra {STRING} til {STRING} vil gi 50% ekstra betaling neste {UNITS_YEARS_OR_MINUTES}! STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subsidie gitt til {STRING}!{}{}Transport av {STRING} fra {STRING} til {STRING} vil gi dobbel betaling det neste {UNITS_YEARS_OR_MINUTES}! @@ -1208,11 +1208,11 @@ STR_CITY_APPROVAL_TOLERANT :Tolerant STR_CITY_APPROVAL_HOSTILE :Fiendtlig STR_CITY_APPROVAL_PERMISSIVE :Tillatende (ingen betydning for selskapets handlinger) -STR_WARNING_NO_SUITABLE_AI :{WHITE}Ingen egnet AI tilgjengelig...{}Du kan laste ned flere AIer fra nettet med spillets nedlastingssystem. +STR_WARNING_NO_SUITABLE_AI :{WHITE}Ingen egnet KI tilgjengelig...{}Du kan laste ned flere KI-er fra nettet med spillets nedlastingssystem. # Settings tree window STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Innstillinger -STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrer streng: +STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrer: STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Vis alle STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Skjul alle STR_CONFIG_SETTING_RESET_ALL :{BLACK}Tilbakestill alle verdier @@ -1310,7 +1310,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Byggekostnader: STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Still kostnadsnivå for bygging og kjøp STR_CONFIG_SETTING_RECESSIONS :Resesjoner: {STRING} -STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Hvis aktivert, resesjoner kan forekomme med noen års mellomrom. Under en lavkonjunktur vil all produksjon være betydelig lavere (den returnerer til tidligere nivå når resesjonen er over) +STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Hvis aktivert, lavkonjunkturer kan forekomme innimellom. Under en lavkonjunktur vil all produksjon være betydelig lavere (den returnerer til tidligere nivå når lavkonjunktur er over) STR_CONFIG_SETTING_TRAIN_REVERSING :Forby reversering av tog i stasjoner: {STRING} STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Hvis aktivert, vil ikke toget rygge i ikke-terminus stationer, selv om det er en kortere vei til deres neste stasjon ved å rygge @@ -1335,7 +1335,7 @@ STR_CONFIG_SETTING_CATCHMENT :Mer realistisk STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Ha oppsamlingsområder i forskjellige størrelser for forskjellige typer stasjoner og lufthavner STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Firmaets stasjoner kan betjene industrier med tilknyttede nøytrale stasjoner: {STRING} -STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Hvis aktivert, vil industrier med egne stasjoner (slik som oljerigger) også kunne betjenes av firma-stasjoner bygget i nærheten. Hvis deaktivert, vil disse industriene bare kunne betjenes av sine egne stasjoner. Nærliggende firma-stasjoner vil ikke kunne betjene dem, heller ikke vil den egne stasjonen betjene noe annet enn den tilhørende industrien. +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Hvis aktivert, vil industrier med tilknyttede stasjoner (slik som oljerigger) også kunne betjenes av selskapseide stasjoner bygget i nærheten. Hvis deaktivert, vil disse industriene bare kunne betjenes av sine tilknyttede stasjoner. Nærliggende selskapsstasjoner vil ikke kunne betjene dem, heller ikke vil den tilknyttede stasjonen betjene noe annet enn industrien STR_CONFIG_SETTING_EXTRADYNAMITE :Tillat fjerning av flere veier, broer osv. eid av byene: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Gjør det enklere å fjerne infrastruktur og bygninger som tilhører byer @@ -1364,7 +1364,7 @@ STR_CONFIG_SETTING_FORBID_90_DEG :Forby tog å gj STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90-graders svinger oppstår når et horisontalt spor etterfølges av et vertikalt spor på tilstøtende kartelement, som medfører at toget må svinge 90 grader når det krysser kartelementet, i stedet for de vanlige 45 grader for andre spor-kombinasjoner. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Tillat sammenslåing av stasjoner som ikke ligger inntil hverandre: {STRING} -STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Gjør det mulig å legge til deler til en stasjon uten at de er direkte ved siden av hverandre. Bruk Ctrl+klikk for å bygge slike stasjoner. +STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Gjør det mulig å legge til deler til en stasjon uten at de er direkte ved siden av hverandre, ved å Ctrl+klikke når nye deler plasseres STR_CONFIG_SETTING_INFLATION :Inflasjon: {STRING} STR_CONFIG_SETTING_INFLATION_HELPTEXT :Aktiver inflasjon i økonomien, der kostnader stiger litt raskere enn betalinger @@ -1399,8 +1399,8 @@ STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :På kjøre-side STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Til høyre ###length 2 -STR_CONFIG_SETTING_SHOWFINANCES :Vis regnskap ved nyttår: {STRING} -STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Vis finansvindu ved slutten av perioden:{STRING} +STR_CONFIG_SETTING_SHOWFINANCES :Vis økonomivinduet ved nyttår: {STRING} +STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Vis økonomivinduet ved slutten av perioden: {STRING} ###length 2 STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Hvis aktivert, spretter økonomivinduet opp på slutten av hvert år for å muliggjør en enkel inspeksjon av selskapets økonomiske status @@ -1409,15 +1409,15 @@ STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Hvis aktivert, STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Nye ordre er 'direkte' som standard: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalt vil et kjøretøy stoppe på alle stasjoner det passerer. Ved å aktivere denne innstillingen, vil det kjøre gjennom alle stasjoner på vei til sin endelige destinasjon uten å stoppe. Merk at denne innstillingen bare definerer en standardverdi for nye ordre. Individuelle ordre kan uansett settes til begge atferder -STR_CONFIG_SETTING_STOP_LOCATION :Nye togordre stopper som standard ved {STRING} av plattformen -STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Plass hvor toget vil stoppe på plattformen som standard. Valget 'near end' betyr nær inngangspunktet og 'far end' betyr langt unna inngangspunktet. Merk at denne innstillingen bare definerer en standardverdi for nye ordre. Individuelle ordre kan uansett settes til begge atferder +STR_CONFIG_SETTING_STOP_LOCATION :Nye togordre stopper som standard ved {STRING} av perrongen +STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Plass hvor toget vil stoppe på perrongen som standard. Valget 'nærenden' betyr nær inngangspunktet, 'midten' betyr midt på perrongen og 'bortenden' betyr langt unna inngangspunktet. Merk at denne innstillingen bare definerer en standardverdi for nye ordre. Individuelle ordre kan velge hvor de skal stoppe ved å klikke på ordreteksten ###length 3 STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :nærenden STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :midten STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :bortenden -STR_CONFIG_SETTING_AUTOSCROLL :Flytt på bildet hvis pilen er nær ytterkantene av skjermen: {STRING} -STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Når aktivert, vil synsfeltet begynne å rulle når musen er nær kanten av vinduet +STR_CONFIG_SETTING_AUTOSCROLL :Panorer hvis pilen er nær ytterkantene av skjermen: {STRING} +STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Når aktivert, vil synsfeltet begynne å panorere når musen er nær kanten av vinduet ###length 4 STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Deaktivert STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Hovedvindu, bare fullskjerm @@ -1461,9 +1461,9 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normalt STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Tillat krysning i plan med veier og jernbaner eid av konkurrenter: {STRING} STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Tillat krysning i plan med veier og jernbaner eid av konkurrenter -STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Tillat stoppesteder med gjennomkjøring på by-eide veier: {STRING} -STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Tillat bygging av stoppesteder med gjennomkjøring på by-eide veier -STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Tillat stoppesteder med gjennomkjøring på motstander-eide veier: {STRING} +STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Tillat stoppesteder med gjennomkjøring på veier eid av byer: {STRING} +STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Tillat bygging av stoppesteder med gjennomkjøring på veier eid av byer +STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Tillat stoppesteder med gjennomkjøring på veier eid av konkurrenter: {STRING} STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Tillat bygging av gjennomkjørbare lastestasjoner på veier eid av andre selskaper STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Det er ikke mulig å endre denne innstillingen når det allerede finnes kjøretøy. @@ -1516,17 +1516,17 @@ STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Skaler en indus STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skaler vareproduksjonen til industrier med denne prosenten: STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% -STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autoforny kjøretøy når det blir gammelt: {STRING} -STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Når aktivert, blir et kjøretøy som nærmer seg slutten av sin levetid automatisk erstattet når betingelsene for fornyelse er oppfylt +STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Forny farkost automatisk når den blir gammel: {STRING} +STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Når aktivert, blir en farkost som nærmer seg slutten av sin levetid automatisk erstattet når betingelsene for fornyelse er oppfylt -STR_CONFIG_SETTING_AUTORENEW_MONTHS :Autoforny kjøretøy når det er {STRING} maks alder -STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Relativ alder når kjøretøy burde bli vurdert autofornyet +STR_CONFIG_SETTING_AUTORENEW_MONTHS :Forny farkost automatisk når den er {STRING} maks alder +STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Relativ alder når en farkost bør bli vurdert fornyet automatisk ###length 2 STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} måned{P 0 "" er} før STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} måned{P 0 "" er} etter STR_CONFIG_SETTING_AUTORENEW_MONEY :Minimum formue for autofornyelse av kjøretøy: {STRING} -STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minste pengemengde som må være igjen i banken for å vurdere automatisk fornying av kjøretøy +STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minste mengde penger som må være igjen i banken for å vurdere automatisk fornying av farkoster STR_CONFIG_SETTING_ERRMSG_DURATION :Varighet av feilmelding: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Varighet for visning av feilmeldinger i et rødt vindu. Vær oppmerksom på at noen (kritiske) feilmeldinger ikke lukkes automatisk etter dette tidspunktet, men må lukkes manuelt @@ -1558,7 +1558,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Orginal STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Terrengtype: {STRING} -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(TerraGenesis bare) Hvor kupert landskapet er +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Velg høyden til bakker og fjell i landskapet STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industritetthet: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Angi hvor mange næringer som skal genereres og hvilket nivå som skal opprettholdes i løpet av spillet @@ -1567,18 +1567,18 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maks avstand fr STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Olje rafinerier er bare bygd nær kartets kanter, det er ved kysten på øy kart STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snøgrense: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Kontroller på hvilken høyde snøen begynner i sub-arktiske landskap. Snø påvirker også industrigenerering og byers vekstkrav +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Velg på hvilken høyde snøen begynner i subarktisk landskap. Snø påvirker også industrigenerering og byers vekstkrav. Kan kun endres i scenarie-redigering og er ellers beregnet fra "snødekning" STR_CONFIG_SETTING_SNOW_COVERAGE :Snødekning: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Kontrollerer den omtrentlige mengden snø i det subarktiske landskapet. Snø påvirker også industriproduksjon og byvekstkrav. Brukes bare under kartgenerering. Land rett over havet er alltid uten snø +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Kontrollerer den omtrentlige mengden snø i det subarktiske landskapet. Snø påvirker også industriproduksjon og krav til byvekst. Brukes bare under kartgenerering. Ruter på havnivå og kystruter har aldri snø STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Ørkendekning: {STRING} -STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Kontroller den omtrentlige mengden ørken i det tropiske landskapet. Ørkener påvirker også industrigenerering. Brukes bare ved kartgenerering +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Velg den omtrentlige mengden ørken i det tropiske landskapet. Ørken påvirker også industrigenerering og vilkår for byvekst. Brukes bare ved kartgenerering STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Grad av ujevnhet i terreng: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis bare) Velg frekvensen av åser: Glatte landskap har færre og mer utbredte åser. Røffe landskap har mange åser, som kan fremstå repeterende +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Velg formen på og antallet åser. Slette landskap har færre, brede åser, mens røffe landskap har mange, mindre åser ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Veldig jevnt STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Jevnt @@ -1586,7 +1586,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Ulendt STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Veldig ulendt STR_CONFIG_SETTING_VARIETY :Variasjonsspredning: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :(TerraGenesis bare) Kontrollere om kartet inneholder både fjellrike og flate områder. Siden dette bare gjør kartet flatere, bør andre innstillinger settes til fjellrik +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Velg om kartet inneholder både fjellrike og flate områder. Jo høyere variasjon, dess større forskjeller i høyde mellom fjellrike og flate områder. STR_CONFIG_SETTING_RIVER_AMOUNT :Elvemengde: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Velg hvor mange elver som genereres @@ -1640,16 +1640,16 @@ STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Grønn til blå STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :Grå til rød STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Gråtoner -STR_CONFIG_SETTING_SCROLLMODE :Rulleoppførsel for vindu: {STRING} -STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Oppførsel ved rulling av kart +STR_CONFIG_SETTING_SCROLLMODE :Panoreringsoppførsel for synsfelt: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Oppførsel ved panorering av kart. Alternativene med "museposisjon låst" virker ikke på alle systemer, som web-baserte versjoner, touchskjermer, Linux med Wayland, og andre ###length 4 STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Flytt synsfelt med høyre museknapp, museposisjon låst -STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Rull kartet med høyre museknapp, museposisjon låst -STR_CONFIG_SETTING_SCROLLMODE_RMB :Rull kartet med høyre museknapp -STR_CONFIG_SETTING_SCROLLMODE_LMB :Rull kartet med venstre museknapp +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Panorer kartet med høyre museknapp, museposisjon låst +STR_CONFIG_SETTING_SCROLLMODE_RMB :Panorer kartet med høyre museknapp +STR_CONFIG_SETTING_SCROLLMODE_LMB :Panorer kartet med venstre museknapp -STR_CONFIG_SETTING_SMOOTH_SCROLLING :Myk rulling: {STRING} -STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Velge hvordan synsfeltet ruller til en bestemt posisjon når du klikker på det lille kartet, eller ved utstedelse av en kommando for å gå til et bestemt objekt på kartet. Hvis aktivert, ruller synsfeltet jevnt, og hvis deaktivert hopper det direkte til det valgte punktet +STR_CONFIG_SETTING_SMOOTH_SCROLLING :Myk panorering av synsfelt: {STRING} +STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Velge hvordan synsfeltet panorerer til en bestemt posisjon når du klikker på det lille kartet, eller ved utstedelse av en kommando for å gå til et bestemt objekt på kartet. Hvis aktivert, panorerer synsfeltet jevnt, og hvis deaktivert hopper det direkte til det valgte punktet STR_CONFIG_SETTING_MEASURE_TOOLTIP :Vis målingsverktøy ved bruk av byggingsverktøy: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Vise avstander mellom kartelementer samt høydeforskjeller når du drar linjer ved byggevirksomhet @@ -1665,13 +1665,13 @@ STR_CONFIG_SETTING_PREFER_TEAMCHAT :Foretrekk lagsa STR_CONFIG_SETTING_PREFER_TEAMCHAT_HELPTEXT :Bytte bindingen av firmaets interne og offentlige kommunikasjon til , henholdsvis STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :Rullehjulets hastighet på kartet: {STRING} -STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Kontroller sensitiviteten til rulling med muse-hjulet +STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Kontroller følsomheten til panorering med musehjulet STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING :Rullehjulets funksjon: {STRING} -STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING_HELPTEXT :Tillat rulling med todimensjonale musehjul +STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING_HELPTEXT :Tillat panorering med todimensjonale musehjul ###length 3 STR_CONFIG_SETTING_SCROLLWHEEL_ZOOM :Zoom kartet -STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Rull kartet +STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Panorer kartet STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Av STR_CONFIG_SETTING_OSK_ACTIVATION :Skjermtastatur: {STRING} @@ -1815,7 +1815,7 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Aktivering av d STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Hindre datamaskinen i å bygge skip: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Aktivering av denne innstillingen gjør bygging av skip umulig for en datamaskin-spiller -STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Tillat AI-er i flerspiller: {STRING} +STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Tillat KI-er i flerspiller: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Tillat datamaskin-spillere å delta i flerspiller-spill STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes før skript er avbrutt: {STRING} @@ -1825,17 +1825,17 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Hvor mye minne STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Vedlikeholdsintervaller er i prosent: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Velge om vedlikehold av kjøretøyer utløses av tiden som er forløpt fra siste gjennomførte vedlikehold, eller av at pålitelighet dropper under en bestemt prosent av maksimal pålitelighet +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Når aktivert, farkoster forsøker å få utført vedlikehold når påliteligheten faller med en gitt prosent fra maksimal pålitelighet.{}{}For eksempel, hvis en farkosts maksimale pålitelighet er 90% og vedlikeholdsintervallet er 20%, vil farkosten forsøke å få utført vedlikehold når den når 72% pålitelighet.Velge om vedlikehold av kjøretøyer utløses av tiden som er forløpt fra siste gjennomførte vedlikehold, eller av at pålitelighet dropper under en bestemt prosent av maksimal pålitelighet STR_CONFIG_SETTING_SERVINT_TRAINS :Standard vedlikeholdsintervall for tog: {STRING} -STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Angi standard vedlikeholdsintervall for nye skinnegående kjøretøy, hvis det ikke er satt noe serviceintervall for kjøretøyet +STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Angi standard vedlikeholdsintervall for nytt jernbanemateriell, hvis det ikke er satt noe vedlikeholdsintervall for materiellet STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Standard vedlikeholdsintervall for veikjøretøy: {STRING} STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Angi standard vedlikeholdsintervall for nye veikjøretøy, hvis det ikke er satt noe vedlikeholdsintervall for kjøretøyet STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Standard vedlikeholdsintervall for fly: {STRING} STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Angi standard vedlikeholdsintervall for nye fly, hvis det ikke er angitt noe vedlikeholdsintervall for flyet STR_CONFIG_SETTING_SERVINT_SHIPS :Standard vedlikeholdsintervall for skip: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Angi standard vedlikeholdsintervall for nye skip, hvis det ikke er angitt noe vedlikeholdsintervall for fartøyet -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}dag{P 0 "" er}/% +STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Dag{P 0 "" er}/Minutt{P 0 "" er}/% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Deaktivert @@ -1954,12 +1954,12 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3x3 Rutenett STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Tilfeldig STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Byer kan bygge veier: {STRING} -STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Tillat byer å bygge veier for å vokse. Deaktiver for å forhindre bystyrer å bygge veier på egenhånd +STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Tillat byer å bygge veier for å vokse. Deaktiver for å hindre lokale myndigheter i å bygge veier på egenhånd STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Byer har lov å bygge planoverganger: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Ved å aktivere denne innstillingen, tillates byer å bygge planoverganger -STR_CONFIG_SETTING_NOISE_LEVEL :Tillat bykontrollert støynivå for flyplasser: {STRING} -STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Når denne innstillingen er deaktivert, kan det være to flyplasser i hver by. Når denne innstillingen er aktivert, blir antall flyplasser i en by bestemt av graden av støytoleranse i byen. Graden avhenger av innbyggertall, flyplasstørrelse og avstand +STR_CONFIG_SETTING_NOISE_LEVEL :Begrens plassering av flyplasser basert på støynivå: {STRING} +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :La byer blokkere flyplasskonstruksjon basert på støygrenser, som er basert på byens innbyggertall og flyplassens størrelse og avstand. His denne innstillingen er deaktivert, vil byer kun tillate to flyplasser hvis ikke lokale myndigheters holdning er "Tillatende". STR_CONFIG_SETTING_TOWN_FOUNDING :Grunnlegging av byer i spillet: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Ved å aktivere denne innstillingen tillates spillere å grunnlegge nye byer i spillet @@ -2039,13 +2039,13 @@ STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Ta {STRING} for STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tid for hver rekalkulering av en komponent i lenkegrafen. Når en rekalkulering starter, opprettes en tråd som får kjøre et oppgitte antallet sekunder. Jo kortere du setter den, jo mer sannsynlig er det at tråden ikke er ferdig når den skal. Da stopper spille til det er ("lag"). Jo lenger du setter den, jo lenger tar det før distribusjonen blir oppdatert når ruter endres. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distribusjonsmodus for passasjerer: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"symmetrisk" betyr at omtrent like mange passasjerer vil reise fra stasjon A til stasjon B som omvendt (fra B til A). "asymmetrisk" betyr at et vilkårlig antall passasjerer vil reise i begge retninger. "manuelt" betyr at det ikke vil forekomme automatisk distribusjon for passasjerene +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetrisk" betyr at omtrent like mange passasjerer vil reise fra stasjon A til stasjon B som fra B til A. "Asymmetrisk" betyr at et vilkårlig antall passasjerer kan reise i begge retninger. "Manuell" betyr at ingen automatisk distribusjon vil forekomme for passasjerer. STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distribusjonsmodus for post: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"symmetrisk" betyr at omrent samme mengde post vil bli sent fra stasjon A til stasjon B som omvendt (fra B til A). "asymmetrisk" betyr at vilkårlige mengder post kan bli sendt i begge retninger. "manuelt" betyr at ingen automatisk distribusjon vil forekomme for post. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetrisk" betyr at omtrent samme mengde post vil bli sent fra stasjon A til stasjon B som fra B til A. "Asymmetrisk" betyr at vilkårlige mengder post kan bli sendt i begge retninger. "Manuell" betyr at ingen automatisk distribusjon vil forekomme for post. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distribusjonsmodus for den pansrede gods-klassen: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Den PANSREDE godsklassen inneholder verdisaker i det tempererte klimaet, diamanter i det subtropiske, og gull i det subarktiske. NewGRF-er kan endre på dette. "symmetrisk" betyr at omtrent like mye gods vil bli sendt fra stasjon A til stasjon B som omvendt (fra B til A). "asymmetrisk" betyr at vilkårlige mengder gods kan sendes i begge retninger. "manuelt" betyr at ingen automatisk distribusjon vil forekomme for lasten. Det anbefales å sette denne til asymmetrisk eller manuell når du spiller subarktisk, siden banker ikke vil sende noe gull tilbake til gullgruver. For temperert og subtropisk klima kan du også velge symmetrisk, da banker fint kan velge å sende verdisaker tilbake til opprinnelig bank. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Den PANSREDE vareklassen inneholder verdisaker i det tempererte klimaet, diamanter i det subtropiske, og gull i det subarktiske. NewGRF-er kan endre på dette. "Symmetrisk" betyr at omtrent like mye varer vil bli sendt fra stasjon A til stasjon B som fra B til A. "Asymmetrisk" betyr at vilkårlige mengder varer kan sendes i begge retninger. "Manuell" betyr at ingen automatisk distribusjon vil forekomme for varene. Det anbefales å sette denne til asymmetrisk eller manuell når du spiller subarktisk eller subtropisk, siden banker kun mottar varer i disse klimaene. For temperert klima kan du også velge symmetrisk, da banker fint kan sende verdisaker tilbake til opprinnelig bank. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distribusjonsmodus for andre godsklasser: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asymmetrisk" betyr at vilkårlige mengder gods kan sendes i begge retninger. "manuelt" betyr at ingen automatisk distribusjon av gods vil forekomme for disse godstypene. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetrisk" betyr at vilkårlige mengder varer kan sendes i begge retninger. "Manuell" betyr at ingen automatisk distribusjon vil forekomme for disse varene. ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetrisk @@ -2131,7 +2131,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :Byer STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Industrier STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Gods-distribusjon STR_CONFIG_SETTING_ENVIRONMENT_TREES :Trær -STR_CONFIG_SETTING_AI :Motstandere +STR_CONFIG_SETTING_AI :Konkurrenter STR_CONFIG_SETTING_AI_NPC :Datamaskinstyrte spillere STR_CONFIG_SETTING_NETWORK :Nettverk @@ -2269,8 +2269,8 @@ STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Vis farg STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Vis fargene til kjøretøygrupper STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Vis fargene til skipsgrupper STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Vis fargene til flygrupper -STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Velg primærfarge for valgte tema. Ctrl+Klikk vil bruke denne fargen på alt -STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Velg sekundærfarge for valgte tema. Ctrl+Klikk kommer til å bruke denne fargen for alle temaene. +STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Velg primærfarge for valgte tema. Ctrl+klikk for å bruke denne fargen på alt +STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Velg sekundærfarge for valgte tema. Ctrl+klikk for å bruke denne fargen på alt STR_LIVERY_PANEL_TOOLTIP :{BLACK}Velg fargetemaet du ønsker å endre, eller flere fargetemaer med Ctrl+klikk. Klikk på boksen for å vise bruken av fargetemaene STR_LIVERY_TRAIN_GROUP_EMPTY :Ingen toggrupper satt opp STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Ingen kjøretøygrupper er satt opp @@ -2278,7 +2278,7 @@ STR_LIVERY_SHIP_GROUP_EMPTY :Ingen skipsgrup STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Ingen flygupper er satt opp ###length 23 -STR_LIVERY_DEFAULT :Standardfarger +STR_LIVERY_DEFAULT :Standarddesign STR_LIVERY_STEAM :Damplokomotiv STR_LIVERY_DIESEL :Diesellokomotiv STR_LIVERY_ELECTRIC :Elektrisk lokomotiv @@ -2400,7 +2400,7 @@ STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Invitas STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Startdato: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Nettverksdato: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Spilletid: {WHITE}{NUM}t {NUM}m -STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Spillskript: {WHITE}{STRING} (v{NUM}) +STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Game Script: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Passordbeskyttet! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}TJENEREN ER FRAKOBLET STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}TJENEREN ER FULL @@ -2433,7 +2433,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Spillnav STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Sett passord STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beskytt ditt spill med et passord hvis du ikke vil at hvem som helst skal bli med på det -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Synlighet +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Synlighet: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Om andre mennesker kan se serveren din i den offentlige oppføringen STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" er} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maks antall klienter: @@ -2630,18 +2630,18 @@ STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Spillet fortset STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :ikke nok spillere STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :kobler til klienter STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manual -STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :spillskript +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :Game Script STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :venter for koblingsgraf oppdatering STR_NETWORK_MESSAGE_CLIENT_LEAVING :forlater STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} har blitt med i spillet -STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} har blitt med i spillet (Klient #{2:NUM}) -STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} har blitt med i firma nr. {2:NUM} +STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {0:STRING} har blitt med i spillet (Klient nr. {2:NUM}) +STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {0:STRING} har blitt med i selskap nr. {2:NUM} STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} har blitt med som tilskuer -STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} har startet et nytt firma (nr. {2:NUM}) -STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} har forlatt spillet ({2:STRING}) +STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {0:STRING} har startet et nytt selskap (nr. {2:NUM}) +STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {0:STRING} har forlatt spillet ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} har endret navnet sitt til {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} ga {2:CURRENCY_LONG} til ditt firma{1:STRING} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} ga {2:CURRENCY_LONG} til {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Tjeneren avsluttet spillet STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Tjeneren starter på nytt...{}Vennligst vent... STR_NETWORK_MESSAGE_KICKED :*** {STRING} ble kastet ut. Grunn: ({STRING}) @@ -2700,13 +2700,13 @@ STR_CONTENT_NO_ZLIB_SUB :{WHITE}...{NBSP STR_CONTENT_TYPE_BASE_GRAPHICS :Grafikk STR_CONTENT_TYPE_NEWGRF :NewGRF STR_CONTENT_TYPE_AI :AI -STR_CONTENT_TYPE_AI_LIBRARY :AI-bibliotek +STR_CONTENT_TYPE_AI_LIBRARY :KI-bibliotek STR_CONTENT_TYPE_SCENARIO :Scenario STR_CONTENT_TYPE_HEIGHTMAP :Høydekart STR_CONTENT_TYPE_BASE_SOUNDS :Lyder STR_CONTENT_TYPE_BASE_MUSIC :Musikk -STR_CONTENT_TYPE_GAME_SCRIPT :Spillskript -STR_CONTENT_TYPE_GS_LIBRARY :Spillskriptbibliotek +STR_CONTENT_TYPE_GAME_SCRIPT :Game Script +STR_CONTENT_TYPE_GS_LIBRARY :Game Script-bibliotek # Content downloading progress window STR_CONTENT_DOWNLOAD_TITLE :{WHITE}Laster ned innhold... @@ -2736,7 +2736,7 @@ STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Gjennoms STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Gjennomsiktige trær. Ctrl+klikk for å låse STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Gjennomsiktige hus. Ctrl+klikk for å låse STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Gjennomsiktige industrier. Ctrl+klikk for å låse -STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Gjennomsiktige stasjoner, garasjer, staller, hangarer, dokker og kontrollpunkt. Ctrl+klikk for å låse +STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Gjennomsiktige stasjoner, garasjer, togstaller, hangarer, dokker og veipunkt. Ctrl+klikk for å låse STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Gjennomsiktige broer. Ctrl+klikk for å låse STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Gjennomsiktige bygg som fyrtårn og antenner. Ctrl+klikk for å låse STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Gjennomsiktige kontaktledninger. Ctrl+klikk for å låse @@ -2788,16 +2788,16 @@ STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Bygg elektrisk STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Bygg monorail STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Bygg maglev -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Bygg jernbanespor. Ctrl veksler mellom å bygge/fjerne. Shift slår av/på kostnadsestimat -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Bygg jernbanespor ved hjelp av autobanemodusen. Ctrl+klikk for å fjerne jernbanespor. Trykk også Shift for å vise kun kostnadsestimat -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Bygg togstall (trengs for å kjøpe og vedlikeholde tog). Shift slår av/på kostnadsestimat -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Gjør om jernbane til kontrollpunkt. Ctrl slår sammen kontrollpunkt. Shift slår av/på kostnadsestimat -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Bygg jernbanestasjon. Ctrl+klikk for å velge en annen stasjon å slå sammen med. Trykk også Shift for å vise kun kostnadsestimat +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Bygg jernbanespor. Ctrl+klikk for å fjerne vei. Trykk også Shift for å kun vise kostnadsestimat +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Bygg jernbanespor ved hjelp av autobanemodusen. Ctrl+klikk for å fjerne jernbanespor. Trykk også Shift for å kun vise kostnadsestimat +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Bygg togstall (trengs for å kjøpe og vedlikeholde tog). Trykk også Shift for å vise kun kostnadsestimat +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Bygg veipunkt på jernbane. Ctrl+klikk for å velge et annet veipunkt å slå sammen med. Trykk også Shift for å kun vise kostnadsestimat +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Bygg jernbanestasjon. Ctrl+klikk for å velge en annen stasjon å slå sammen med. Trykk også Shift for å kun vise kostnadsestimat STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Bygg jernbanesignaler. Ctrl veksler mellom vingesignaler/lyssignaler{}Hold og dra for å bygge signaler langs en rett jernbanestrekning. Ctrl bygger signaler til det neste krysset eller signalet. Ctrl+klikk viser/skjuler signalvalgsvinduet. Shift bytter mellom bygging/vising av kostnadsestimat -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Bygg jernbanebro. Trykk også Shift for å vise kun kostnadsestimat -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Bygg jernbanetunnel. Shift slår av/på kostnadsestimat +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Bygg jernbanebro. Trykk også Shift for å kun vise kostnadsestimat +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Bygg jernbanetunnel. Trykk også Shift for å vise kun kostnadsestimat STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Veksle mellom bygging/fjerning av jernbanespor, signaler, kontrollpunkt og stasjoner. Hold inne Ctrl for i tillegg å fjerne jernbanespor fra kontrollpunkt og stasjoner -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Konverter/oppgrader jernbanetypen. Shift slår av/på kostnadsestimat +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Konverter/oppgrader type jernbane. Trykk også Shift for å kun vise kostnadsestimat STR_RAIL_NAME_RAILROAD :Jernbane STR_RAIL_NAME_ELRAIL :Elektrisk jernbane @@ -2818,7 +2818,7 @@ STR_STATION_BUILD_ORIENTATION :{BLACK}Retning STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}Velg jernbanestasjonens retning STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Antall spor STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Velg antall spor jernbanestasjonen skal ha -STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Plattformlengde +STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Perronglengde STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Velg hvor lang jernbanestasjonen skal være STR_STATION_BUILD_DRAG_DROP :{BLACK}Dra og slipp STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg en stasjon med dra og slipp @@ -2847,7 +2847,7 @@ STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Utgangss STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Kombinasjonssignal (lyssignal){}Kombinasjonssignalet fungerer både som inn- og utgangssignal. Dette gjør at du kan bygge store "grener" med forsignaler. STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Avanserte signal (lyssignal){}Et avansert signal tillater flere tog å kjøre samtidig på samme signalblokk, dersom togene kan reservere en rute til et trygt stoppested. Vanlige avanserte signaler kan passeres bakfra. STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Enveis avansert signal (lyssignal){}Et avansert signal tillater flere tog å kjøre samtidig på samme signalblokk, dersom togene kan reservere en rute til et trygt stoppested . Enveis avanserte signaler kan ikke passeres bakfra. -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Konverter signal{}Konverterer signaler til den valgte signaltypen. Ctrl+klikk vil endre eksisterende variant. Shift+klikk viser kostnadsestimat +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Konverter signal{}Klikk på et eksisterende signal for å konvertere det til valgt type og variant. Ctrl+klikk for å endre eksisterende variant. Shift+klikk viser kostnadsestimat STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Signaltetthet ved dra-og-slipp STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Senk signalavstand ved dra-og-slipp STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Øk signalavstand ved dra-og-slipp @@ -2873,25 +2873,25 @@ STR_BRIDGE_TUBULAR_SILICON :Hvelv, Silisium # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Bygg vei STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Bygg trikkespor -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Bygg vei. Ctrl+klikk for å fjerne vei. Trykk også Shift for å vise kun kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Bygg trikkespor. Ctrl+klikk for å fjerne trikkespor. Trykk også Shift for å vise kun kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Bygg vei ved bruk av autoveimodusen. Ctrl+klikk for å fjerne vei. Trykk også Shift for å vise kun kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Bygg trikkespor ved bruk av autotrikkespormodusen. Ctrl+klikk for å fjerne trikkespor. Trykk også Shift for å vise kun kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Bygg garasje (for kjøp og vedlikehold av kjøretøy). Trykk også Shift for å vise kun kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Bygg trikkestall (nødvendig for kjøp og vedlikehold av trikker). Shift slår av/på kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Bygg bussholdeplass. Ctrl+klikk for å velge en annen holdeplass å slå sammen med. Trykk også Shift for å vise kun kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Bygg trikkestasjon for passasjerer. Ctrl slår sammen stasjoner. Shift slår av/på kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Bygg lasteterminal. Ctrl slår sammen stasjoner. Shift slår av/på kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Bygg trikkestopp for varer. Ctrl+klikk for å velge en annen stasjon å slå sammen med. Trykk også Shift for å vise kun kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Bygg vei. Ctrl+klikk for å fjerne vei. Trykk også Shift for å kun vise kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Bygg trikkespor. Ctrl+klikk for å fjerne trikkespor. Trykk også Shift for å kun vise kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Bygg vei ved bruk av autoveimodusen. Ctrl+klikk for å fjerne vei. Trykk også Shift for å kun vise kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Bygg trikkespor ved bruk av autotrikkespormodusen. Ctrl+klikk for å fjerne trikkespor. Trykk også Shift for å kun vise kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Bygg garasje (for kjøp og vedlikehold av kjøretøy). Trykk også Shift for å kun vise kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Bygg trikkestall (nødvendig for kjøp og vedlikehold av trikker). Trykk også Shift for å kun vise kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Bygg bussholdeplass. Ctrl+klikk for å velge en annen holdeplass å slå sammen med. Trykk også Shift for å kun vise kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Bygg trikkestopp for passasjerer. Ctrl+klikk for å velge en annen stasjon å slå sammen med. Trykk også Shift for å kun vise kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Bygg godsterminal. Ctrl+klikk for å velge en annen terminal å slå sammen med. Trykk også Shift for å kun vise kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Bygg trikkestopp for varer. Ctrl+klikk for å velge en annen stasjon å slå sammen med. Trykk også Shift for å kun vise kostnadsestimat STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Skru av/på enveiskjørte veier -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Bygg veibro. Trykk også Shift for å vise kun kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Bygg trikkesporbro. Trykk også Shift for å vise kun kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Bygg veitunnel. Trykk også Shift for å vise kun kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Bygg trikkesportunnel. Trykk også Shift for å vise kun kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Bygg veibro. Trykk også Shift for å kun vise kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Bygg trikkesporbro. Trykk også Shift for å kun vise kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Bygg veitunnel. Trykk også Shift for å kun vise kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Bygg trikkesportunnel. Trykk også Shift for å kun vise kostnadsestimat STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Veksle mellom bygging/fjerning for veibygging STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Veksle mellom bygging/fjerning for trikkesporkonstruksjon -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Konverter/oppgrader veitypen. Shift slår av/på kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Konverter/oppgrader trikketypen. Shift slår av/på kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Konverter/oppgrader type vei. Trykk også Shift for å kun vise kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Konverter/oppgrader type trikk. Trykk også Shift for å kun vise kostnadsestimat STR_ROAD_NAME_ROAD :Vei STR_ROAD_NAME_TRAM :Trikkespor @@ -2905,22 +2905,22 @@ STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Velg tri # Road vehicle station construction window STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Bussterminalens retning STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Velg bussterminalens retning -STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Lasteterminalens retning -STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Velg lasteterminalens retning -STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Passasjertrikkestasjonens retning -STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Velg passasjertrikkestasjonens retning -STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Varetrikkestasjonens retning -STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Velg varetrikkestasjonens retning +STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Godsterminalens retning +STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Velg godsterminalens retning +STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Passasjertrikkestoppets retning +STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Velg passasjertrikkestoppets retning +STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Varetrikkestoppets retning +STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Velg varetrikkestoppets retning # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Bygg vannveier STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Vannveier -STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Bygg kanaler. Trykk også Shift for å vise kun kostnadsestimat -STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Bygg sluser. Trykk også Shift for å vise kun kostnadsestimat -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Bygg skipsdokk (for kjøp og vedlikehold av skip). Trykk også Shift for å vise kun kostnadsestimat -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Bygg havn. Ctrl+klikk for å velge en annen havn å slå sammen med. Trykk også Shift for å vise kun kostnadsestimat -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Plasser en bøye, som kan brukes til å danne kontrollpunkter. Shift slår av/på kostnadsestimat -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Bygg akvedukt. Trykk også Shift for å vise kun kostnadsestimat +STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Bygg kanaler. Trykk også Shift for å kun vise kostnadsestimat +STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Bygg sluser. Trykk også Shift for å kun vise kostnadsestimat +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Bygg skipsdokk (for kjøp og vedlikehold av skip). Trykk også Shift for å kun vise kostnadsestimat +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Bygg havn. Ctrl+klikk for å velge en annen havn å slå sammen med. Trykk også Shift for å kun vise kostnadsestimat +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Plasser en bøye som kan brukes som et veipunkt. Trykk også Shift for å kun vise kostnadsestimat +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Bygg akvedukt. Trykk også Shift for å kun vise kostnadsestimat STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Bygg kanal. Ctrl+klikk på havnivå for å oversvømme med sjøvann i stedet STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Plasser elver. Ctrl+klikk for å velge diagonalt @@ -2933,7 +2933,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Havn # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Flyplasser -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Bygg flyplass. Ctrl+klikk for å velge en annen flyplass å slå sammen med. Trykk også Shift for å vise kun kostnadsestimat +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Bygg flyplass. Ctrl+klikk for å velge en annen flyplass å slå sammen med. Trykk også Shift for å kun vise kostnadsestimat # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Velg flyplasstype @@ -2961,13 +2961,13 @@ STR_STATION_BUILD_NOISE :{BLACK}Støy ge # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Landskapsverktøy STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Senk et hjørne av et landområde. Dra for å senke det første valgte hjørnet, og jevne resten til samme høyde. Ctrl velger område diagonalt. Shift slår av/på kostnadsestimat -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Hev et hjørne av et landområde. Dra for å heve det første valgte hjørnet, og jevne resten til samme høyde. Ctrl velger område diagonalt. Shift slår av/på kostnadsestimat -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Jevn ut land til samme høyde som det første valgte hjørnet. Ctrl velger området diagonalt. Shift slår av/på kostnadsestimat -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Kjøp land for fremtidig bruk. Shift slår av/på kostnadsestimat +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Hev et hjørne av et landområde. Ctrl+dra for å heve det første valgte hjørnet, og jevne resten av området til samme høyde. Ctrl+klikk+dra for å velge området diagonalt. Trykk også Shift for å kun vise kostnadsestimat +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Jevn ut et landareal til samme høyde som det første valgte hjørnet. Ctrl+klikk+dra for å velge arealet diagonalt. Trykk også Shift for å kun vise kostnadsestimat +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Kjøp opp land for fremtidig bruk. Ctrl+klikk+dra for å velge arealet diagonalt. Trykk også Shift for å kun vise kostnadsestimat # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objektvalg -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Velg objekt å bygge. Ctrl+klikk+dra for å velge arealet diagonalt. Trykk også Shift for å vise kun kostnadsestimat +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Velg objekt å bygge. Ctrl+klikk+dra for å velge arealet diagonalt. Trykk også Shift for å kun vise kostnadsestimat STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Velg objektstype du vil bygge STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Forhåndsvisning av objektet STR_OBJECT_BUILD_SIZE :{BLACK}Størrelse: {GOLD}{NUM} x {NUM} ruter @@ -2979,7 +2979,7 @@ STR_OBJECT_CLASS_TRNS :Radiosendere STR_PLANT_TREE_CAPTION :{WHITE}Trær STR_PLANT_TREE_TOOLTIP :{BLACK}Velg typen tre som skal plantes. Hvis feltet allerede har et tre, vil dette plante flere typer trær uavhengig av den valgte typen STR_TREES_RANDOM_TYPE :{BLACK}Trær av tilfeldig type -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plasser trær av tilfeldig type. Ctrl+klikk+dra for å velge areal diagonalt. Trykk også Shift for å vise kun kostnadsestimat +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plasser trær av tilfeldig type. Ctrl+klikk+dra for å velge areal diagonalt. Trykk også Shift for å kun vise kostnadsestimat STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Tilfeldige trær STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plasser trær tilfeldig i landskapet STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal @@ -3006,7 +3006,7 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Er du si # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Bygenerering STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Ny by -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Grunnlegg en ny by. Shift+klikk viser kun beregnet kostnad +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Grunnlegg ny by. Trykk også Shift for å kun vise kostnadsestimat STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Tilfeldig by STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Grunnlegg en by på et tilfeldig sted STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Mange tilfeldige byer @@ -3038,7 +3038,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}3x3 rute STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Tilfeldig # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Finansier ny industri +STR_FUND_INDUSTRY_CAPTION :{WHITE}Industrifinansiering STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Velg passende industri fra listen STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Mange tilfeldige industrier STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Dekk kartet med tilfeldig plasserte industrier @@ -3061,7 +3061,7 @@ STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Aksepter STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Hus STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Klikk på industrien for å se dens leverandører og kunder STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Klikk på varen for å se dens leverandører og kunder -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Vis kjede +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Industrikjede STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Vis vareleverings- og vareaksepterende industrier STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Link til oversiktskart STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Velg de viste industriene på oversiktskartet i tillegg @@ -3081,7 +3081,7 @@ STR_LAND_AREA_INFORMATION_OWNER :{BLACK}Eier: {L STR_LAND_AREA_INFORMATION_ROAD_OWNER :{BLACK}Eier av vei: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Eier av trikkespor: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Eier av jernbanespor: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Bystyret: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Lokale myndigheter: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ingen STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinater: {LTBLUE}{NUM} x {NUM} x {NUM} STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Ruteindex: {LTBLUE}{NUM} ({HEX}) @@ -3151,7 +3151,7 @@ STR_LAI_TREE_NAME_CACTUS_PLANTS :Kaktusplanter STR_LAI_STATION_DESCRIPTION_RAILROAD_STATION :{G=masculine}Jernbanestasjon STR_LAI_STATION_DESCRIPTION_AIRCRAFT_HANGAR :{G=masculine}Hangar STR_LAI_STATION_DESCRIPTION_AIRPORT :{G=feminine}Lufthavn -STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :{G=masculine}Lasteterminal +STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :{G=masculine}Godsterminal STR_LAI_STATION_DESCRIPTION_BUS_STATION :{G=masculine}Bussterminal STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :{G=feminine}Havn STR_LAI_STATION_DESCRIPTION_BUOY :{G=feminine}Bøye @@ -3199,11 +3199,11 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD-teamet # Framerate display window -STR_FRAMERATE_CAPTION :{WHITE}Bildehastighet +STR_FRAMERATE_CAPTION :{WHITE}Oppdateringsrate STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simuleringshastighet: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Antall spill-tikk per sekund. -STR_FRAMERATE_RATE_BLITTER :{BLACK}Bildehastighet: {STRING} +STR_FRAMERATE_RATE_BLITTER :{BLACK}Oppdateringsrate: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Antall bilder tegnet per sekund. STR_FRAMERATE_SPEED_FACTOR :{BLACK}Gjeldende spillhastighetsfaktor: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hvor raskt spillet kjører i forhold til forventet hastighet ved normal simulering. @@ -3236,7 +3236,7 @@ STR_FRAMERATE_VIDEO :{BLACK}Video ou STR_FRAMERATE_SOUND :{BLACK}Lydmiksing: STR_FRAMERATE_ALLSCRIPTS :{BLACK} GS/AI total: STR_FRAMERATE_GAMESCRIPT :{BLACK} Game script: -STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING} +STR_FRAMERATE_AI :{BLACK} KI {NUM} {STRING} ###length 15 STR_FRAMETIME_CAPTION_GAMELOOP :Spill-løkke @@ -3278,7 +3278,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Spilldet STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Ingen informasjon tilgjengelig. STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} -STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtrer streng: +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtrer: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Overskriv fil STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Er du sikker på at du vil overskrive eksisterende fil? STR_SAVELOAD_DIRECTORY :{STRING} (Liste) @@ -3410,7 +3410,7 @@ STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Detaljer STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Aktive NewGRF-filer STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Inaktive NewGRF-filer STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}Velg forhåndsoppsett: -STR_NEWGRF_FILTER_TITLE :{ORANGE}Søkefilter: +STR_NEWGRF_FILTER_TITLE :{ORANGE}Filtrer: STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}Last inn valgte forhåndsoppsett STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}Lagre forhåndsoppsettet STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP :{BLACK}Lagre den nåværende listen som et forhåndsoppsett @@ -3524,14 +3524,14 @@ STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}NewGRF-e STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF-en "{STRING}" har returnert en feil:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} virker ikke med TTDPatch-versjonen som er rapportert av OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} er for versjon {2:STRING} av TTD -STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} er laget for bruk med {STRING} +STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} er laget for bruk med {2:STRING} STR_NEWGRF_ERROR_INVALID_PARAMETER :Ugyldig parameter for {1:STRING}: parameter {2:STRING} ({3:NUM}) STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} må lastes inn før {2:STRING}. STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} må lastes inn etter {2:STRING}. STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} krever OpenTTD versjon {2:STRING} eller nyere STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF-filen den var laget for å oversette STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :For mange NewGRF-er er innlastet -STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Å laste inn {1:STRING} som statisk NewGRF med {STRING} kan forårsake synkroniseringsfeil +STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Å laste inn {1:STRING} som statisk NewGRF med {2:STRING} kan forårsake synkroniseringsfeil STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Uventet sprite (figur {3:NUM}) STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Ukjent Handling 0 egenskap {4:HEX} (figur {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Forsøk på å bruke ugyldig ID (sprite {3:NUM}) @@ -3600,7 +3600,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Veksle m # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Skriv inn skilttekst -STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Midtjuster hovedvinduet på skiltets lokalisasjon. Ctrl+Klikk åpner et nytt tilleggsvindu over skiltets lokalisasjon +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Sentrer hovedvinduet på skiltets lokasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på skiltets lokasjon STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Gå til neste skilt STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Gå til forrige skilt @@ -3611,7 +3611,7 @@ STR_TOWN_DIRECTORY_CAPTION :{WHITE}Byer STR_TOWN_DIRECTORY_NONE :{ORANGE}- Ingen - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (By){BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Bynavn - klikk på navnet for å gå til byen. Ctrl+klikk åpner et nytt tilleggsvindu over byen +STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Bynavn - klikk på navnet for å gå til byen. Ctrl+klikk for å åpne et nytt tilleggsvindu over byen STR_TOWN_POPULATION :{BLACK}Verdensbefolkning: {COMMA} # Town view window @@ -3632,7 +3632,7 @@ STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Byen vok STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Flystøy: {ORANGE}{COMMA}{BLACK} støygrense: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Gå til by. Ctrl+klikk åpner et nytt tilleggsvindu over byen STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Lokale myndigheter -STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Vis informasjon om bystyret +STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Vis informasjon om lokale myndigheter STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Endre navn på byen STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Utvid @@ -3643,7 +3643,7 @@ STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}Slett de STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Endre bynavnet # Town local authority window -STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN}s bystyre +STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN}s lokale myndigheter STR_LOCAL_AUTHORITY_ZONE :{BLACK}Område STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Vis zonene innenfor de lokale myndigheters grenser STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Vurdering av transportfirma: @@ -3661,19 +3661,19 @@ STR_LOCAL_AUTHORITY_ACTION_ROAD_RECONSTRUCTION :Finansier ombyg STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :Bygg statue av firmaets grunnlegger STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Finansier nye bygninger STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Kjøp eksklusive transportrettigheter -STR_LOCAL_AUTHORITY_ACTION_BRIBE :Bestikk bystyret +STR_LOCAL_AUTHORITY_ACTION_BRIBE :Bestikk de lokale myndighetene ###next-name-looks-similar -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Start en liten lokal reklamekampanje for å tiltrekke deg flere passasjerer og mer varer til dine transporttjenester.{}Gir en midlertidig økning til stasjonsvurderingen i en liten radius rundt bysentrum.{}Kostnad: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Start en middels stor lokal reklamekampanje for å tiltrekke deg flere passasjerer og mer varer til dine transporttjenester.{}Gir en midlertidig økning til stasjonsvurderingen i en liten radius rundt bysentrum.{}Kostnad: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Start en stor lokal reklamekampanje for å tiltrekke deg flere passasjerer og mer varer til dine transporttjenester.{}Gir et midlertidig økning til stasjonsvurderingen i stor radius rundt bysentrum.{}Kostnad: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Start en lien lokal reklamekampanje for å tiltrekke deg flere passasjerer og mer varer til dine transporttjenester.{}Gir en midlertidig økning til stasjonsvurderingen i en liten radius rundt bysentrum.{}{POP_COLOUR}Kostnad: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Start en middels lokal reklamekampanje for å tiltrekke deg flere passasjerer og mer varer til dine transporttjenester.{}Gir en midlertidig økning til stasjonsvurderingen i en middels radius rundt bysentrum.{}{POP_COLOUR}Kostnad: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Start en stor lokal reklamekampanje for å tiltrekke deg flere passasjerer og mer varer til dine transporttjenester.{}Gir en midlertidig økning til stasjonsvurderingen i en stor radius rundt bysentrum.{}{POP_COLOUR}Kostnad: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Finansier urbant veibyggingsprogram.{}Gir betydelige forstyrrelser i veitrafikken i opptil 6 måneder.{}{POP_COLOUR}Kostnad: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}Finansier urbant veibyggingsprogram.{}Gir betydelige forstyrrelser i veitrafikken i opptil 6 minutter.{}{POP_COLOUR}Kostnad: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Bygg en statue for å ære firmaet.{}Gir en permanent økning i stasjonens rangering i denne byen.{}Kostnad: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Finansier byggingen av nye kommersielle bygninger i byen.{}Gir en midlertidig økning for veksten i denne byen.{}Kostnad: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Bygg en statue til ære for selskapet.{}Gir en permanent økning i stasjonsvurderingen i denne byen.{}{POP_COLOUR}Kostnad: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Finansier byggingen av nye kommersielle bygninger i byen.{}Gir en midlertidig økning av veksten i denne byen.{}{POP_COLOUR}Kostnad: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Kjøp eksklusive transportrettigheter i byen for 12 måneder.{}Byens myndigheter vil ikke la passasjerer og varer bruke dine konkurrenters stasjoner. En vellykket bestikkelse fra en konkurrent vil bryte denne kontrakten.{}{POP_COLOUR}Kostnad: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Kjøp eksklusive transportrettigheter i byen for 12 minutter.{}Byens myndigheter vil ikke la passasjerer og varer bruke dine konkurrenters stasjoner. En vellykket bestikkelse fra en konkurrent vil bryte denne kontrakten.{}{POP_COLOUR}Kostnad: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Du kan bestikke bystyret for å forbedre vurderingen av firmaet ditt, men du risikerer å bli bøtelagt hvis du blir oppdaget.{}Kostnad: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Du kan bestikke lokale myndigheter for å forbedre vurderingen din og stoppe en konkurrents eksklusive transportrettigheter, til risikoen av en betydelig straff hvis du blir tatt.{}{POP_COLOUR}Kostnad: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Målsetninger @@ -3744,7 +3744,7 @@ STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Ugyldig m # Station list window STR_STATION_LIST_TOOLTIP :{BLACK}Stasjonsnavn - klikk på navnet for å gå til stasjonen. Ctrl+klikk åpner et nytt tilleggsvindu over stasjonen. -STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Hold inne Ctrl for å velge flere +STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Ctrl+klikk for å velge flere elementer STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} stasjon{P "" er} STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} @@ -3817,14 +3817,14 @@ STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Vis alle STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Vis alle luftfartøy som har denne stasjonen på sin ruteplan STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Vis alle skip som har denne stasjonen på sin ruteplan -STR_STATION_VIEW_RENAME_STATION_CAPTION :Endre navnet til stasjon/lasteterminal +STR_STATION_VIEW_RENAME_STATION_CAPTION :Endre navnet til stasjon/godsterminal STR_STATION_VIEW_CLOSE_AIRPORT :{BLACK}Steng flyplass STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Hindre fly i å lande på denne flyplassen. # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} -STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Gå til kontrollpunkt. Ctrl+klikk åpner et nytt tilleggsvindu over kontrollpunktet +STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Sentrer hovedvinduet på veipunktets lokasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på veipunktets lokasjon STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Endre kontrollpunktets navn STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Sentrer hovedvinduet på bøyens lokasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på bøyens lokasjon STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Endre navn på bøye @@ -3897,12 +3897,12 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} flyplass{P "" er} STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Ingen -STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Bygg firmaets hovedkontor -STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Bygg firmaets hovedkontor +STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Bygg hovedkontor +STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Bygg selskapets hovedkontor STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Se firmaets hovedkontor STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Vis firmaets hovedkontor STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Flytt firmaets hovedkontor -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Gjenoppbygg (flytt) firmaets hovedkontor et annet sted til en kostnad av 1{NBSP}% av firmaverdien. Shift+klikk viser beregnet kostnad uten å flytte kontoret +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Flytt firmaets hovedkontor til et annet sted for en kostnad av 1% av verdien til selskapet. Trykk også Shift for å kun vise kostnadsestimat STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detaljer STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Vis detaljert infrastrukturtelling STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Gi penger @@ -4054,8 +4054,8 @@ STR_GROUP_OCCUPANCY_VALUE :{NUM} % # Build vehicle window ###length 4 -STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Nye tog/vogner for jernbane -STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Nye tog/vogner for elektrisk jernbane +STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Nytt jernbanemateriell +STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Nytt elektrisk jernbanemateriell STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Nye tog/vogner for monorail STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Nye tog/vogner for maglev @@ -4064,7 +4064,7 @@ STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Nye trikkekjør # Vehicle availability ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Nye tog/vogner +STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Nytt jernbanemateriell STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Nye veikjøretøy STR_BUY_VEHICLE_SHIP_CAPTION :Nye skip STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nye luftfartøy @@ -4103,10 +4103,10 @@ STR_CARGO_TYPE_FILTER_FREIGHT :Frakt STR_CARGO_TYPE_FILTER_NONE :Ingen ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Liste over tog/vogner - klikk på tog/vogn for mer informasjon. Ctrl+klikk for å skjule/vise denne typen -STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Liste over kjøretøy - klikk på kjøretøy for mer informasjon. Ctrl+klikk for å skjule/vise kjøretøytypen -STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Liste over skip - klikk på skip for mer informasjon. Ctrl+klikk for å skjule/vise skiptypen -STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Liste over luftfartøy - klikk på luftfartøy for mer informasjon. Ctrl+klikk for å skjule/vise luftfartøytypen +STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Liste over jernbanemateriell. Klikk på materiellet for mer informasjon. Ctrl+klikk for å vise eller skjule denne materielltypen +STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Liste over kjøretøy. Klikk på kjøretøyet for mer informasjon. Ctrl+klikk for å vise eller skjule denne kjøretøytypen +STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Liste over skip. Klikk på skipet for mer informasjon. Ctrl+klikk for å vise eller skjule denne skipstypen +STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Liste over luftfartøy. Klikk på luftfartøyet for mer informasjon. Ctrl+klikk for å vise eller skjule denne typen luftfartøy ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Kjøp tog/vogn @@ -4115,22 +4115,22 @@ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Kjøp sk STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Kjøp luftfartøy ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kjøp og bygg om kjøretøy +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kjøp og bygg om materiell STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kjøp og bygg om kjøretøy STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kjøp og bygg om skip STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kjøp og bygg om luftfartøy ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kjøp det merkede tog/vogn. Shift+klikk viser estimert kostnad -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Kjøp det merkede kjøretøy. Shift+klikk viser estimert kostnad -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Kjøp det merkede skip. Shift+klikk viser estimert kostnad -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Kjøp det merkede luftfartøy. Shift+klikk viser estimert kostnad +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kjøp det merkede jernbanemateriellet. Trykk også Shift for å kun vise kostnadsestimat +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Kjøp det merkede kjøretøyet. Trykk også Shift for å kun vise kostnadsestimat +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Kjøp det merkede skipet. Trykk også Shift for å kun vise kostnadsestimat +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Kjøp det merkede luftfartøyet. Trykk også Shift for å kun vise kostnadsestimat ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kjøp og bygg om merket tog/vogn. Shift+klikk viser anslått kostnad uten å kjøpe. -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kjøp og bygg om det merkede kjøretøyet. Shift+klikk viser anslått kostnad uten å kjøpe. -STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kjøp og bygg om det merkede skipet. Shift+klikk viser anslått kostnad uten å kjøpe. -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kjøp og bygg om det merkede luftfartøyet. Shift+klikk viser anslått kostnad uten å kjøpe. +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kjøp og bygg om det merkede jernbanemateriellet. Trykk også Shift for å kun vise kostnadsestimat +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kjøp og bygg om det merkede kjøretøyet. Trykk også Shift for å kun vise kostnadsestimat +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kjøp og bygg om det merkede skipet. Trykk også Shift for å kun vise kostnadsestimat +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kjøp og bygg om det merkede luftfartøyet. Trykk også Shift for å kun vise kostnadsestimat ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Endre navn @@ -4139,7 +4139,7 @@ STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Endre na STR_BUY_VEHICLE_AIRCRAFT_RENAME_BUTTON :{BLACK}Endre navn ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Gi nytt navn til tog-/vogntypen +STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Gi nytt navn til jernbanemateriellet STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Gi nytt navn til kjøretøytypen STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Gi nytt navn til skipstypen STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Gi nytt navn til luftfartøytypen @@ -4157,13 +4157,13 @@ STR_BUY_VEHICLE_SHIP_SHOW_TOGGLE_BUTTON :{BLACK}Vis STR_BUY_VEHICLE_AIRCRAFT_SHOW_TOGGLE_BUTTON :{BLACK}Vis ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Veksle mellom å skjule/vise typen av jernbanekjøretøy -STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Veksle mellom å skjule/vise kjøretøystypen -STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Veksle mellom å skjule/vise skipstypen -STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Bytte mellom å skjule/vise flytypen +STR_BUY_VEHICLE_TRAIN_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Veksle mellom å skjule/vise typen jernbanemateriell +STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Veksle mellom å skjule/vise type kjøretøy +STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Veksle mellom å skjule/vise type skip +STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Bytte mellom å skjule/vise type luftfartøy ###length VEHICLE_TYPES -STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}Gi tog/vogntype nytt navn +STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}Gi jernbanemateriell nytt navn STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE}Gi kjøretøytypen nytt navn STR_QUERY_RENAME_SHIP_TYPE_CAPTION :{WHITE}Gi skipstypen nytt navn STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Gi luftfartøytypen nytt navn @@ -4180,7 +4180,7 @@ STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} kj STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Tog - dra vogn/tog med venstreklikk for å legge til/fjerne fra tog, høyreklikk for mer informasjon. Hold inne Ctrl for å gjøre begge funksjonene gjeldende for hele togkjeden +STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Tog - dra jernbanemateriell med venstreklikk for å legge til/fjerne fra tog, høyreklikk for informasjon. Ctrl+klikk for å utføre begge funksjonene på hele toget STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Kjøretøy - høyreklikk på kjøretøy for mer informasjon STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Skip - høyreklikk på skip for mer informasjon STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Luftfartøy - høyreklikk på luftfartøy for mer informasjon @@ -4231,7 +4231,7 @@ STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Dette vi STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Midtjuster hovedvinduet på togstallens lokalisasjon. Ctrl+Klikk åpner et nytt tilleggsvindu over togstallens lokalisasjon STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Midtjuster hovedvinduet på vegkjøretøyets garasje lokalisasjon. Dobbelklikk for å følge kjøretøyet i hovedvinduet. Ctrl+Klikk åpner et nytt tilleggsvindu over vegkjøretøyets garasje lokalisasjon STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Midtjuster hovedvinduet på skipsdokkens lokasjon. Dobbelklikk for å følge skipet i hovedvinduet. Ctrl+klikk åpner et nytt tilleggsvindu over skipsdokkens lokasjon -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Midtjuster hovedvinduet på hangar lokalisasjon. Ctrl+Klikk åpner et nytt tilleggsvindu over hangarens lokalisasjon +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Sentrer hovedvinduet på hangarens lokasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på hangarens lokasjon ###length VEHICLE_TYPES STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Få en liste over alle tog med denne togstallen i sine ordre @@ -4312,7 +4312,7 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Klikk de STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Veksle mellom tog- og vognerstatningsvinduet STR_REPLACE_ENGINES :Lokomotiv STR_REPLACE_WAGONS :Vogner -STR_REPLACE_ALL_RAILTYPE :Alle jernbanekjøretøy +STR_REPLACE_ALL_RAILTYPE :Alt jernbanemateriell STR_REPLACE_ALL_ROADTYPE :Alle veikjøretøy ###length 2 @@ -4321,8 +4321,8 @@ STR_REPLACE_HELP_ROADTYPE :{BLACK}Velg vei ###next-name-looks-similar STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Viser hvilket lokomotiv som overtar for det valgte lokomotivet på venstresiden -STR_REPLACE_RAIL_VEHICLES :Jernbanekjøretøy -STR_REPLACE_ELRAIL_VEHICLES :Elektriske jernbanekjøretøy +STR_REPLACE_RAIL_VEHICLES :Jernbanemateriell +STR_REPLACE_ELRAIL_VEHICLES :Elektrisk jernbanemateriell STR_REPLACE_MONORAIL_VEHICLES :Monorail-kjøretøy STR_REPLACE_MAGLEV_VEHICLES :Maglev-kjøretøy @@ -4338,8 +4338,8 @@ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Midtjuster hovedvinduet på togets lokalisasjon. Dobbelklikk for å følge toget i hovedvinduet. Ctrl+Klikk åpner et nytt tilleggsvindu over togets lokalisasjon -STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Midtjuster hovedvinduet på kjøretøyets lokalisasjon. Dobbelklikk for å følge kjøretøyet i hovedvinduet. Ctrl+Klikk åpner et nytt tilleggsvindu over kjøretøyets lokalisasjon -STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Midtjuster hovedvinduet på skipets lokalisasjon. Dobbelklikk for å følge skipet i hovedvinduet. Ctrl+Klikk åpner et nytt tilleggsvindu over skipets lokalisasjon +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Sentrer hovedvinduet på kjøretøyets lokasjon. Dobbeltklikk for å følge skipet i hovedvinduet. Ctrl+klikk for å åpne et nytt tilleggsvindu på kjøretøyets lokasjon +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Sentrer hovedvinduet på skipets lokasjon. Dobbeltklikk for å følge skipet i hovedvinduet. Ctrl+klikk for å åpne et nytt tilleggsvindu på skipets lokasjon STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Midtjuster hovedvinduet på flyets lokasjon. Dobbelklikk for å følge flyet i hovedvinduet. Ctrl+klikk åpner et nytt tilleggsvindu over flyet lokasjon ###length VEHICLE_TYPES @@ -4350,9 +4350,9 @@ STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send luf ###length VEHICLE_TYPES STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Dette vil skape en kopi av toget, inkludert alle vognene. Ctrl+klikk vil sørge for delte ordre. Shift+klikk viser estimert kostnad -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Dette vil skape en kopi av kjøretøyet. Ctrl+klikk vil sørge for delte ordre +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Kjøp en kopi av kjøretøyet. Ctrl+klikk vil dele ordrene. Trykk også Shift for å vise kostnadsestimat STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Dette vil skape en kopi av skipet. Ctrl+klikk vil dele ordrene. Shift+klikk viser estimert kostnad -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Dette vil skape en kopi av luftfartøyet. Ctrl+klikk vil dele ordrene. Shift+klikk viser estimert kostnad +STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Kjøp en kopi av luftfartøyet. Ctrl+klikk vil dele ordrene. Trykk også Shift for å vise kostnadsestimat STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Tving toget til å fortsette uten å vente på klarsignal STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Snu togets kjøreretning @@ -4444,8 +4444,8 @@ STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Pålitel STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Kapasitet: {LTBLUE}Ingen{STRING} -STR_VEHICLE_INFO_CAPACITY :{BLACK}Kapasitet: {LTBLUE}{CARGO_LONG}{3:STRING} -STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Kapasitet: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM}) +STR_VEHICLE_INFO_CAPACITY :{BLACK}Kapasitet: {LTBLUE}{0:CARGO_LONG}{3:STRING} +STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Kapasitet: {LTBLUE}{0:CARGO_LONG}{3:STRING} (x{4:NUM}) STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kapasitet: {LTBLUE}{CARGO_LONG}, {CARGO_LONG}{STRING} STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Overføringskreditt: {LTBLUE}{CURRENCY_LONG} @@ -4501,9 +4501,9 @@ STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Kapasite STR_REFIT_CAPTION :{WHITE}{VEHICLE} (Bygg om) STR_REFIT_TITLE :{GOLD}Velg varetype: STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Ny kapasitet: {GOLD}{CARGO_LONG}{}{BLACK}Kostnad for ombygging: {RED}{CURRENCY_LONG} -STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Ny kapasitet: {GOLD}{CARGO_LONG}{}{BLACK}Intekt fra ombygning: {GREEN}{CURRENCY_LONG} +STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Ny kapasitet: {GOLD}{CARGO_LONG}{}{BLACK}Inntekt fra ombygning: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Ny kapasitet: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Kostnad for ombygging: {RED}{CURRENCY_LONG} -STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Ny kapasitet: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Intekt fra ombygning: {GREEN}{CURRENCY_LONG} +STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Ny kapasitet: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Inntekt fra ombygning: {GREEN}{CURRENCY_LONG} STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Velg kjøretøy for ombygging. Dra med musen for å velge flere kjøretøy. Klikk på et tomt område for å velge hele kjøretøyet. Ctrl+klikk vil velge et kjøretøy og den følgende kjeden ###length VEHICLE_TYPES @@ -4529,7 +4529,7 @@ STR_ORDERS_CAPTION :{WHITE}{VEHICLE STR_ORDERS_TIMETABLE_VIEW :{BLACK}Rutetabell STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Skift til rutetabellvisning -STR_ORDERS_LIST_TOOLTIP :{BLACK}Ordreliste - klikk på en ordre for å markere den. Ctrl+klikk viser ordrens endestasjon +STR_ORDERS_LIST_TOOLTIP :{BLACK}Ordreliste - klikk på en ordre for å markere den. Ctrl+klikk for å panorere til ordrens bestemmelsessted STR_ORDER_INDEX :{COMMA}:{NBSP} STR_ORDER_TEXT :{STRING} {STRING} {STRING} {STRING} @@ -4596,9 +4596,9 @@ STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Hvordan STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :er lik STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :er ikke lik STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :er mindre enn -STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :er mindre eller lik +STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :er mindre enn eller lik STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :er mer enn -STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :er mer eller lik +STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :er mer enn eller lik STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :er sant STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :er usant @@ -4606,13 +4606,13 @@ STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}Verdien STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Skriv inn verdi til å sammenligne mot STR_ORDERS_SKIP_BUTTON :{BLACK}Hopp over -STR_ORDERS_SKIP_TOOLTIP :{BLACK}Hopp over den nåværende ordren og begynn på neste. Ctrl+klikk hopper fram til valgte ordre +STR_ORDERS_SKIP_TOOLTIP :{BLACK}Hopp over den nåværende ordren og begynn på neste. Ctrl+klikk for å hoppe fram til valgte ordre STR_ORDERS_DELETE_BUTTON :{BLACK}Slett STR_ORDERS_DELETE_TOOLTIP :{BLACK}Slett den merkede ordren STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Slett alle ordre STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Stopp deling -STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Stopp deling av ordreliste. Ctrl+klikk vil slette alle ordrer for dette kjøretøyet +STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Stans deling av ordrelisten. Ctrl+klikk for å slette alle ordre for denne farkosten i tillegg STR_ORDERS_GO_TO_BUTTON :{BLACK}Kjør til STR_ORDER_GO_TO_NEAREST_DEPOT :Gå til nærmeste garasje/stall/hangar/dokk @@ -4769,49 +4769,49 @@ STR_DATE_YEAR_TOOLTIP :{BLACK}Velg år # AI debug window -STR_AI_DEBUG :{WHITE}AI/Spillskript-feilsøking +STR_AI_DEBUG :{WHITE}KI/Game Script-feilsøking STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM}) -STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Navnet til AIen +STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Navnet til KI-en STR_AI_DEBUG_SETTINGS :{BLACK}Innstillinger STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Endre skriptinnstillinger -STR_AI_DEBUG_RELOAD :{BLACK}Last inn AI på nytt -STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Slå av AI, last skript på nytt, og start AI på nytt -STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Tillat/nekt bryt når en AI-loggbeskjed tilsvarer brytstrengen +STR_AI_DEBUG_RELOAD :{BLACK}Last inn KI på nytt +STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Slå av KI, last skript på nytt, og start KI på nytt +STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Tillat/nekt bryt når en KI-loggbeskjed tilsvarer brytstrengen STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Bryt på: STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Bryt på -STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Når en AI-loggbeskjed tilsvarer denne strengen, settes spillet på pause. +STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Når en KI-loggbeskjed tilsvarer denne strengen, settes spillet på pause. STR_AI_DEBUG_MATCH_CASE :{BLACK}Skriftformgjenkjennelse -STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Veksle mellom skriftformgjenkjennelse ved sammenligning av AI-loggbeskjeder mot bruddstrengen +STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Veksle mellom skriftformgjenkjennelse ved sammenligning av KI-loggbeskjeder mot bruddstrengen STR_AI_DEBUG_CONTINUE :{BLACK}Fortsett -STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Slå av pause og fortsett AIen +STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Slå av pause og fortsett KI-en STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Vis feilsøkningsresultater fra denne KI-en. Ctrl+klikk for å åpne i et nytt vindu -STR_AI_GAME_SCRIPT :{BLACK}Spillskript +STR_AI_GAME_SCRIPT :{BLACK}Game Script STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Sjekk "Game Script"-loggen. Ctrl+klikk for å åpne i et nytt vindu STR_ERROR_AI_NO_AI_FOUND :Fant ingen passende KI.{}Denne KI-en er en plassholder og vil ikke gjøre noe.{}Du kan laste ned flere KI-er via spillets system for nedlastning av innhold. -STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Et skript krasjet. Vennligst rapporter dette til skript-forfatteren med et skjermbilde av AI/Spillskript feilsøkingsvinduet -STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI/Spillskript-feilsøkingsvindu er kun tilgjengelig for tjeneren +STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Et skript krasjet. Vennligst rapporter dette til skript-forfatteren med et skjermbilde av feilsøkingsvinduet for KI/Game Script +STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Feilsøkingsvindu for KI/Game Script er kun tilgjengelig for tjeneren # AI configuration window STR_AI_CONFIG_CAPTION_AI :{WHITE}KI-innstillinger STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Game Script-innstillinger -STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Spillskriptet som vil bli lastet i neste spill -STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AI-ene som vil bli lastet i neste spill +STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Game Script-et som vil bli lastet i neste spill +STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}KI-ene som vil bli lastet i neste spill STR_AI_CONFIG_HUMAN_PLAYER :Menneskelig spiller -STR_AI_CONFIG_RANDOM_AI :Tilfeldig AI +STR_AI_CONFIG_RANDOM_AI :Tilfeldig KI STR_AI_CONFIG_NONE :(ingen) STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM} -STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Maks antall motstandere: {ORANGE}{COMMA} +STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Største antall konkurrenter: {ORANGE}{COMMA} STR_AI_CONFIG_COMPETITORS_INTERVAL :{LTBLUE}Intervall mellom start av konkurrenter: {ORANGE}{COMMA} minutt{P "" er} STR_AI_CONFIG_MOVE_UP :{BLACK}Flytt opp -STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Flytt valgte AI oppover i listen +STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Flytt valgte KI oppover i listen STR_AI_CONFIG_MOVE_DOWN :{BLACK}Flytt ned -STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Flytt valgte AI nedover i listen +STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Flytt valgte KI nedover i listen -STR_AI_CONFIG_GAMESCRIPT :{SILVER}Spillskript +STR_AI_CONFIG_GAMESCRIPT :{SILVER}Game Script STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Parametre -STR_AI_CONFIG_AI :{SILVER}AI-er +STR_AI_CONFIG_AI :{SILVER}KI-er STR_AI_CONFIG_CHANGE_AI :{BLACK}Velg KI STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Velg Game Script @@ -4821,8 +4821,8 @@ STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Konfigur # Available AIs window STR_AI_LIST_CAPTION :{WHITE}Tilgjengelige {STRING} -STR_AI_LIST_CAPTION_AI :AI-er -STR_AI_LIST_CAPTION_GAMESCRIPT :Spillskript +STR_AI_LIST_CAPTION_AI :KI-er +STR_AI_LIST_CAPTION_GAMESCRIPT :Game Script STR_AI_LIST_TOOLTIP :{BLACK}Klikk for å velge et skript STR_AI_LIST_AUTHOR :{LTBLUE}Forfatter: {ORANGE}{STRING} @@ -4858,7 +4858,7 @@ STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING} STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Gå tilbake i navigasjonshistorikken STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Gå fremover igjen i navigasjonshistorikken STR_TEXTFILE_WRAP_TEXT :{WHITE}Bryt teksten -STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Bryt teksten i vinduet så alt passer uten å måtte skrolle +STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Bryt teksten i vinduet så alt passer uten å måtte rulle STR_TEXTFILE_VIEW_README :{BLACK}Hjelpefil STR_TEXTFILE_VIEW_README_TOOLTIP :Vis hjelpefil for dette innholdet STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Endringslogg @@ -4967,9 +4967,9 @@ STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{1:STRIN STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Ikke tillatt mens spillet er på pause # Local authority errors -STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}{TOWN}s bystyre nekter deg å gjøre dette. -STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}{TOWN}s bystyre tillater ikke flere flyplasser i denne byen -STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}{TOWN}s bystyre nekter deg byggetillatelse til flyplass her pga. støybekymringer +STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}{TOWN}s lokale myndigheter nekter å tillate dette +STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}{TOWN}s lokale myndigheter tillater ikke enda en flyplass i denne byen +STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}{TOWN}s lokale myndigheter nekter deg byggetillatelse til flyplass på grunn av støybekymringer STR_ERROR_BRIBE_FAILED :{WHITE}Bestikkelsen du forsøkte har blitt oppdaget av en regional etterforsker # Levelling errors @@ -5037,22 +5037,22 @@ STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Endre pa # Station construction related errors STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Kan ikke bygge jernbanestasjon her... STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Kan ikke bygge busstasjon... -STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Kan ikke bygge lasteterminal... -STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Kan ikke bygge trikkestasjon for passasjerer... -STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Kan ikke bygge trikkestasjon for varer... +STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Kan ikke bygge godsterminal... +STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Kan ikke bygge trikkestopp for passasjerer... +STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Kan ikke bygge trikkestopp for varer... STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Kan ikke bygge havn her... STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Kan ikke bygge lufthavn her... -STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Grenser til mer enn én eksisterende stasjon/lasteterminal +STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Grenser til mer enn én eksisterende stasjon/godsterminal STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}...{NBSP}stasjonen er spredd for mye -STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}For mange stasjoner/lasteterminaler +STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}For mange stasjoner/godsterminaler STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}For mange enkeltdeler på jernbanestasjonen STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}For mange bussholdeplasser -STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}For mange lasteterminaler +STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}For mange godsterminaler STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}For nærme enn annen havn STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}For nærme en annen flyplass STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Kan ikke endre stasjonens navn... -STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... denne veien er eid av en by +STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... veien er eid av en by STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... veien vender i feil retning STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... gjennomkjøringsstopper kan ikke ha hjørner STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... gjennomkjøringsstopper kan ikke ha kryss @@ -5061,17 +5061,17 @@ STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... gjen STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Kan ikke fjerne del av stasjonen... STR_ERROR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Må fjerne jernbanestasjon først STR_ERROR_CAN_T_REMOVE_BUS_STATION :{WHITE}Kan ikke fjerne busstasjonen... -STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Kan ikke fjerne lasteterminalen... -STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Kan ikke fjerne trikkestasjon for passasjerer... -STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Kan ikke fjerne trikkestasjon for varer... +STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Kan ikke fjerne godsterminalen... +STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Kan ikke fjerne trikkestopp for passasjerer... +STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Kan ikke fjerne trikkestopp for varer... STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Må fjerne stoppested først STR_ERROR_THERE_IS_NO_STATION :{WHITE}... det finnes ingen stasjon her STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}Må rive jernbanestasjon først STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Må rive bussterminal først -STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST :{WHITE}Må rive lasteterminal først -STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST :{WHITE}Må rive trikkestasjon for passasjerer først -STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST :{WHITE}Må rive trikkestasjon for varer først +STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST :{WHITE}Må rive godsterminal først +STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST :{WHITE}Må rive trikkestopp for passasjerer først +STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST :{WHITE}Må rive trikkestopp for varer først STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Må rive havn først STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Må rive flyplass først @@ -5226,7 +5226,7 @@ STR_ERROR_SHIP_IN_THE_WAY :{WHITE}Skip i v STR_ERROR_AIRCRAFT_IN_THE_WAY :{WHITE}Luftfartøy i veien ###length VEHICLE_TYPES -STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}Jernbanekjøretøyet er ikke tilgjengelig +STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}Jernbanemateriellet er ikke tilgjengelig STR_ERROR_ROAD_VEHICLE_NOT_AVAILABLE :{WHITE}Kjøretøyet er ikke tilgjengelig STR_ERROR_SHIP_NOT_AVAILABLE :{WHITE}Skipet er ikke tilgjengelig STR_ERROR_AIRCRAFT_NOT_AVAILABLE :{WHITE}Luftfartøyet er ikke tilgjengelig @@ -5250,25 +5250,25 @@ STR_ERROR_CAN_T_STOP_START_SHIP :{WHITE}Kan ikke STR_ERROR_CAN_T_STOP_START_AIRCRAFT :{WHITE}Kan ikke stoppe/starte luftfartøy... ###length VEHICLE_TYPES -STR_ERROR_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Kan ikke sende tog til togstall... +STR_ERROR_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Kan ikke sende tog til togstallen... STR_ERROR_CAN_T_SEND_ROAD_VEHICLE_TO_DEPOT :{WHITE}Kan ikke sende kjøretøy til garasjen... STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Kan ikke sende skip til skipsdokken... STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR :{WHITE}Kan ikke sende luftfartøy til hangar... ###length VEHICLE_TYPES -STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Kan ikke kjøpe jernbanekjøretøy... +STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Kan ikke kjøpe jernbanemateriell... STR_ERROR_CAN_T_BUY_ROAD_VEHICLE :{WHITE}Kan ikke kjøpe kjøretøy... STR_ERROR_CAN_T_BUY_SHIP :{WHITE}Kan ikke kjøpe skip... STR_ERROR_CAN_T_BUY_AIRCRAFT :{WHITE}Kan ikke kjøpe luftfartøy... ###length VEHICLE_TYPES -STR_ERROR_CAN_T_RENAME_TRAIN_TYPE :{WHITE}Kan ikke gi lokomotiv-/vogntypen nytt navn... +STR_ERROR_CAN_T_RENAME_TRAIN_TYPE :{WHITE}Kan ikke gi jernbanemateriellet nytt navn... STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Kan ikke gi kjøretøytypen nytt navn... STR_ERROR_CAN_T_RENAME_SHIP_TYPE :{WHITE}Kan ikke gi skipstypen nytt navn... STR_ERROR_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Kan ikke gi luftfartøytypen nytt navn... ###length VEHICLE_TYPES -STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}Kan ikke selge jernbanekjøretøy... +STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}Kan ikke selge jernbanemateriell... STR_ERROR_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Kan ikke selge kjøretøy... STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Kan ikke selge skip... STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Kan ikke selge luftfartøy... @@ -5312,13 +5312,13 @@ STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... Alle STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Kan ikke dele ordreliste... STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Kan ikke stoppe deling av ordreliste... STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}Kan ikke kopiere ordreliste... -STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}...{NBSP}for langt i fra forrige destinasjon +STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... for langt fra forrige bestemmelsessted STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... luftfartøy har ikke stor nok rekkevidde # Extra messages which go on the third line of errors, explaining why orders failed STR_ERROR_NO_RAIL_STATION :{WHITE}Det finnes ingen jernbanestasjon STR_ERROR_NO_BUS_STATION :{WHITE}Det finnes ingen busstasjon -STR_ERROR_NO_TRUCK_STATION :{WHITE}Det finnes ingen lasteterminal +STR_ERROR_NO_TRUCK_STATION :{WHITE}Det finnes ingen godsterminal STR_ERROR_NO_DOCK :{WHITE}Det finnes ingen havn STR_ERROR_NO_AIRPORT :{WHITE}Det finnes ingen lufthavn STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Det er ingen holdeplasser med en kompatibel veitype diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index c5d886e0dc..4a6c3493fc 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1698,7 +1698,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :使用在窗口 ###length 3 STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_NO :否 STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES :是 -STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :是(非粘滞) +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :是(除已固定的窗口外) STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :使用 {STRING} 形式的文件名存档 STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :游戏存档文件名中日期的格式 diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index a563197053..b57bf598d8 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1011,6 +1011,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Indisk rupie STR_GAME_OPTIONS_CURRENCY_IDR :Indonesisk rupie STR_GAME_OPTIONS_CURRENCY_MYR :Malaysisk ringgit STR_GAME_OPTIONS_CURRENCY_LVL :Lettiska Lats +STR_GAME_OPTIONS_CURRENCY_PTE :Portugisisk escudo STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Spara automatiskt STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Välj intervall mellan automatiskt sparande @@ -3078,6 +3079,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Spårvä STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Järnvägens ägare: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Lokala myndigheter: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ingen +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinater: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Rutindex: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Byggd/renoverad: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stationsklass: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stationstyp: {LTBLUE}{STRING} @@ -4336,10 +4339,10 @@ STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Centrera STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Centrera huvudvyn på flygfarkostens position. Dubbelklicka för att följa flygfarkosten i huvudvyn. Ctrl+Klick för att öppna en ny fönstervy över flygfarkostens position ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka tåg till depå. Ctrl+Klick för service endast -STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka fordon till depå. Ctrl+Klick för service endast -STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka skepp till depå. Ctrl+Klick för service endast -STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka flygfarkost till hangar. Ctrl+Klick för service endast +STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka tåg till depå. Ctrl+Klick för att endast serva +STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka fordon till depå. Ctrl+Klick för att endast serva +STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka skepp till depå. Ctrl+Klick för att endast serva +STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka flygfarkost till hangar. Ctrl+Klick för att endast serva ###length VEHICLE_TYPES STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Köp en kopia av tåget inklusive alla vagnar. Ctrl+Klick för att dela ordrar. Håll även in Shift för att endast visa uppskattad kostnad diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index cbb98e2cc3..560383e4d7 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -932,7 +932,7 @@ STR_SMALLMAP_ENABLE_ALL :{BLACK}Пока STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Показати рельєф STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Не показувати жодного виду підприємств на карті STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Показати всі види підприємств на карті -STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Вкл./відкл. карту висот +STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Увімкнути/вимкнути мапу висот STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Не показувати власність жодної компанії на карті STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Показати власність всіх компаній на карті STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Не показувати вантажі на карті @@ -1194,7 +1194,8 @@ STR_GAME_OPTIONS_GUI_SCALE_5X :5x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Автоматизований збір даних STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Участь в автоматизованому зборі даних -STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Попередній перегляд геологічної розвідки +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}Про збір даних і приватність +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Попередній перегляд збору даних STR_GAME_OPTIONS_GRAPHICS :{BLACK}Графіка @@ -1217,13 +1218,16 @@ STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Допо STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(не встановлено додатків для інтеграції з соціальними платформами) +STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{BLACK}{STRING} ({STRING}) STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :{BLACK}Платформа: STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Стан додатка: STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_RUNNING :{GREEN}Працює STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_FAILED :{RED}Не вдалося з'єднатися STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_PLATFORM_NOT_RUNNING :{ORANGE}{STRING} не працює +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNLOADED :{RED}Вивантажено STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :{RED}Подвоєння додатка +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNSUPPORTED_API :{RED}Версія не підтримується STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Неправильний підпис STR_BASESET_STATUS :{STRING} {RED}(відсутніх або зіпсованих файлів: {NUM}) @@ -1239,6 +1243,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Змен STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Збільшити кількість своєї валюти за 1 фунт (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Встановити обмінний курс своєї валюти до 1 фунта (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Роздільник: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Встановити роздільник для своєї валюти STR_CURRENCY_PREFIX :{LTBLUE}Префікс: {ORANGE}{STRING} @@ -1712,7 +1717,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Виберіт STR_CONFIG_SETTING_ROAD_SIDE_LEFT :лівосторонній рух STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :правосторонній рух -STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Поворот карти висот: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Поворот мапи висот: {STRING} ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :проти годинникової стрілки STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :за годинниковою стрілкою @@ -2220,6 +2225,7 @@ STR_CONFIG_SETTING_ACCOUNTING :Облік STR_CONFIG_SETTING_VEHICLES :Транспорт STR_CONFIG_SETTING_VEHICLES_PHYSICS :Фізика STR_CONFIG_SETTING_VEHICLES_ROUTING :Маршрути +STR_CONFIG_SETTING_VEHICLES_ORDERS :Накази STR_CONFIG_SETTING_LIMITATIONS :Обмеження STR_CONFIG_SETTING_ACCIDENTS :Катастрофи STR_CONFIG_SETTING_GENWORLD :Створення світу @@ -2279,12 +2285,13 @@ STR_INTRO_CAPTION :{WHITE}OpenTTD STR_INTRO_NEW_GAME :{BLACK}Нова гра STR_INTRO_LOAD_GAME :{BLACK}Завантажити гру STR_INTRO_PLAY_SCENARIO :{BLACK}Грати за сценарієм -STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Грати з картою висот +STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Грати з мапою висот STR_INTRO_SCENARIO_EDITOR :{BLACK}Редактор сценаріїв STR_INTRO_MULTIPLAYER :{BLACK}Мережева гра STR_INTRO_GAME_OPTIONS :{BLACK}Налаштування гри STR_INTRO_HIGHSCORE :{BLACK}Таблиця рекордів +STR_INTRO_HELP :{BLACK}Допомога й довідка STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Налаштування STR_INTRO_NEWGRF_SETTINGS :{BLACK}Налаштування NewGRF STR_INTRO_ONLINE_CONTENT :{BLACK}Додатковий контент @@ -2373,6 +2380,7 @@ STR_LIVERY_PANEL_TOOLTIP :{BLACK}Обер STR_LIVERY_TRAIN_GROUP_EMPTY :Кольори груп поїздів відсутні STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Не налаштовано груп дорожнього транспорту STR_LIVERY_SHIP_GROUP_EMPTY :Групи корабілв не налаштовано +STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Не налаштовано груп повітряного транспорту ###length 23 STR_LIVERY_DEFAULT :Стандартний колір @@ -2624,6 +2632,8 @@ STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Так, STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Так, більше не питати STR_NETWORK_ASK_SURVEY_CAPTION :Дозволити автоматизований збір даних? +STR_NETWORK_ASK_SURVEY_TEXT :Бажаєте долучитись до автоматичного збору даних?{}OpenTTD передаватиме дані при виході з гри.{}Це можна будь-коли змінити в "Налаштуваннях гри". +STR_NETWORK_ASK_SURVEY_PREVIEW :Попередній перегляд збору даних STR_NETWORK_ASK_SURVEY_LINK :Про збір даних і приватність STR_NETWORK_ASK_SURVEY_NO :Ні STR_NETWORK_ASK_SURVEY_YES :Так @@ -2795,7 +2805,7 @@ STR_CONTENT_TYPE_NEWGRF :NewGRF STR_CONTENT_TYPE_AI :AI STR_CONTENT_TYPE_AI_LIBRARY :Бібліотека ШІ STR_CONTENT_TYPE_SCENARIO :Сценарій -STR_CONTENT_TYPE_HEIGHTMAP :Карта висот +STR_CONTENT_TYPE_HEIGHTMAP :Мапа висот STR_CONTENT_TYPE_BASE_SOUNDS :Основні звуки STR_CONTENT_TYPE_BASE_MUSIC :Основна музика STR_CONTENT_TYPE_GAME_SCRIPT :Ігровий скрипт @@ -3385,7 +3395,7 @@ STR_SAVELOAD_OSKTITLE :{BLACK}Введ # World generation STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Створення світу STR_MAPGEN_MAPSIZE :{BLACK}Розмір карти: -STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Оберіть розмір карти в клітинках. Кількість доступних клітинок буде трохи меншою +STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Оберіть розмір мапи в клітинках. Кількість доступних клітинок буде трохи меншою STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Міста: STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :BLACK}Оберіть щільність міст або випадкову кількість @@ -3396,6 +3406,7 @@ STR_MAPGEN_DATE_TOOLTIP :{BLACK}Обра STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Кількість виробництв: STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :BLACK}Оберіть щільність виробництв або випадкову кількість STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Найвища гора: +STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Обрати найвищу гору відносно рівня моря, яку гра спробує створити. STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Збільшити на одиницю максимальну висоту найвищої гори на мапі STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Зменшити на одиницю максимальну висоту найвищої гори на мапі STR_MAPGEN_SNOW_COVERAGE :{BLACK}Покриття снігом: @@ -3458,9 +3469,10 @@ STR_MAPGEN_BORDER_RANDOMIZE :{BLACK}дові STR_MAPGEN_BORDER_MANUAL :{BLACK}вручну STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Поворот рельєфу -STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Назва рельєфу: -STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}Назва файлу мапи висот +STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Назва мапи висот: +STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}Назва образу мапи висот STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Розмір: +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}Розмір образу мапи висот. Найкращим буде розмір, однаковий з довжиною мапи в OpenTTD, тобто 256, 512, 1024, тощо. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Висота обраної гори @@ -4957,7 +4969,7 @@ STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Показат STR_TEXTFILE_README_CAPTION :{WHITE}Документація до {STRING} {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Зміни в {STRING} {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}Ліцензія до {STRING} {STRING} -STR_TEXTFILE_SURVEY_RESULT_CAPTION :{BLACK}Попередній перегляд геологічної розвідки +STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Попередній перегляд збору даних STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}документ OpenTTD '{STRING}' diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index c438a52983..3055f2a0bc 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -187,10 +187,13 @@ STR_COLOUR_ORANGE :Oren STR_COLOUR_BROWN :Brown STR_COLOUR_GREY :Llwyd STR_COLOUR_WHITE :Gwyn +STR_COLOUR_RANDOM :Ar hap ###length 17 STR_COLOUR_SECONDARY_DARK_BLUE :Glas Tywyll STR_COLOUR_SECONDARY_PALE_GREEN :Gwyrdd Golau +STR_COLOUR_SECONDARY_SECONDARY_PINK :Pinc +STR_COLOUR_SECONDARY_YELLOW :Melyn STR_COLOUR_SECONDARY_RED :Coch STR_COLOUR_SECONDARY_LIGHT_BLUE :Glas Golau STR_COLOUR_SECONDARY_GREEN :Gwyrdd @@ -202,6 +205,7 @@ STR_COLOUR_SECONDARY_PURPLE :Porffor STR_COLOUR_SECONDARY_ORANGE :Oren STR_COLOUR_SECONDARY_BROWN :Brown STR_COLOUR_SECONDARY_GREY :Llwyd +STR_COLOUR_SECONDARY_WHITE :Gwyn STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Fel y Lliw Cynradd @@ -209,16 +213,23 @@ STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Fel y Lliw Cynr STR_UNITS_VELOCITY_IMPERIAL :{DECIMAL}{NBSP}mph STR_UNITS_VELOCITY_METRIC :{DECIMAL}{NBSP}km/h STR_UNITS_VELOCITY_SI :{DECIMAL}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS_DAY :{DECIMAL}{NBSP}teil/diwrnod +STR_UNITS_VELOCITY_GAMEUNITS_SEC :{DECIMAL}{NBSP}teil/eiliad +STR_UNITS_VELOCITY_KNOTS :{DECIMAL}{NBSP}not STR_UNITS_POWER_IMPERIAL :{DECIMAL}{NBSP}hp STR_UNITS_POWER_METRIC :{DECIMAL}{NBSP}hp STR_UNITS_POWER_SI :{DECIMAL}{NBSP}kW +STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg +STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t +STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg STR_UNITS_POWER_SI_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}kW/t STR_UNITS_POWER_SI_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}kW/t +STR_UNITS_POWER_SI_TO_WEIGHT_SI :{DECIMAL}{NBSP}W/kg STR_UNITS_WEIGHT_SHORT_IMPERIAL :{DECIMAL}{NBSP}t STR_UNITS_WEIGHT_SHORT_METRIC :{DECIMAL}{NBSP}t @@ -245,8 +256,15 @@ STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m # Time units used in string control characters +STR_UNITS_DAYS :{COMMA}{NBSP}diwrnod{P "" ""} +STR_UNITS_SECONDS :{COMMA}{NBSP}eiliad{P "" ""} +STR_UNITS_TICKS :{COMMA}{NBSP}tic{P "" ""} +STR_UNITS_MONTHS :{NUM}{NBSP}mis{P "" ""} +STR_UNITS_MINUTES :{NUM}{NBSP}munud{P "" ""} +STR_UNITS_YEARS :{NUM}{NBSP}blwyddyn{P "" ""} +STR_UNITS_PERIODS :{NUM}{NBSP}cyfnod{P "" ""} # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Hidlydd: @@ -258,6 +276,8 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Dewiswch STR_TOOLTIP_SORT_CRITERIA :{BLACK}Dewiswch drefn trefnu STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Dewis criteria hidlydd STR_BUTTON_SORT_BY :{BLACK}Trefnu yn ôl +STR_BUTTON_CATCHMENT :{BLACK}Gorchudd +STR_TOOLTIP_CATCHMENT :Toglu dangos y map dylanwad STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Cau ffenestr STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Teitl ffenestr - llusgwch hwn i symud ffenestr @@ -269,7 +289,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Cliciwch STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Toglu maint ffenestri mawr/bach STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Bar sgrolio - sgrolio'r rhestr i fyny neu i lawr STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Bar sgrolio - sgrolio'r rhestr i'r chwith neu i'r dde -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Dymchwel adeiladau ayb. ar sgwâr o dir. Mae Ctrl yn dewis ardal deiagonal. Mae Shift yn toglo adeiladu/dangos amcangyfrif cost +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Dymchwel adeiladau ayyb. ar sgwâr o dir. Mae Ctrl, clicio a llusgo yn dewis yr ardal yn ddeiagonal. Mae Shift yn dangos amcangyfrif cost yn unig # Show engines button ###length VEHICLE_TYPES @@ -288,6 +308,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Drwy all STR_BUTTON_DEFAULT :{BLACK}Rhagosodiad STR_BUTTON_CANCEL :{BLACK}Diddymu STR_BUTTON_OK :{BLACK}Iawn +STR_WARNING_PASSWORD_SECURITY :{YELLOW}Rhybudd: Gall gweinyddwyr ddarllen unrhyw neges a roddir yma. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -310,7 +331,9 @@ STR_SORT_BY_TYPE :Math STR_SORT_BY_TRANSPORTED :Wedi'i gludo STR_SORT_BY_NUMBER :Rhif STR_SORT_BY_PROFIT_LAST_YEAR :Elw llynedd +STR_SORT_BY_PROFIT_LAST_PERIOD :Elw'r cyfnod diwethaf STR_SORT_BY_PROFIT_THIS_YEAR :Elw eleni +STR_SORT_BY_PROFIT_THIS_PERIOD :Elw y cyfnod yma STR_SORT_BY_AGE :Oed STR_SORT_BY_RELIABILITY :Dibynadwyedd STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Cyfanswm Gallu Cludo fesul y math o lwyth @@ -336,47 +359,56 @@ STR_SORT_BY_CARGO_CAPACITY :Gallu cludo llw STR_SORT_BY_RANGE :Maes teithio STR_SORT_BY_POPULATION :Poblogaeth STR_SORT_BY_RATING :Gradd +STR_SORT_BY_NUM_VEHICLES :Nifer cerbydau STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Cyfanswm elw llynedd +STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD :Cyfanswm elw y cyfnod diwethaf +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Cyfanswm elw eleni +STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Cyfanswm elw y cyfnod yma STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Elw cyfartalog y llynedd STR_SORT_BY_AVERAGE_PROFIT_LAST_PERIOD :Elw cyfartalog y cyfnod diwethaf STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Elw cyfartalog eleni STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Elw cyfartalog y cyfnod yma # Group by options for vehicle list +STR_GROUP_BY_NONE :Dim +STR_GROUP_BY_SHARED_ORDERS :Gorchmynion sydd wedi'u rhannu # Order button in shared orders vehicle list +STR_GOTO_ORDER_VIEW :{BLACK}Gorchmynion +STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Agor y ffenest gorchmynion # Tooltips for the main toolbar ###length 31 STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Oedi'r gêm STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Cyflymu'r gêm -STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Dewisiadau -STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Cadw'r gêm, gwaredu a'r gêm, gadael -STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Dangos map -STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Dangos cyfeiriadur trefi -STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Dangos Cymorthdaliadau -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Dangos rhestr o orsafoedd y cwmni -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Dangos gwybodaeth cyllid y cwmni -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Dangos gwybodaeth gyffredinol y cwmni -STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Dangos llyfr hanes -STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Dangos rhestr amcanion -STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Dangos graffiau -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Dangos tabl cynghrair cwmnïau -STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Ariannu adeiladu diwydiant newydd -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Dangos rhestr o drenau'r cwmni. Mae Ctrl+Clic yn toglo agor y rhestr grŵp/cerbyd -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Dangos rhestr o gerbydau ffordd y cwmni. Mae Ctrl+Clic yn toglo agor y rhestr grŵp/cerbyd -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :4. {BLACK}Dangos rhestr o longau'r cwmni. Mae Ctrl+Clic yn toglo agor y rhestr grŵp/cerbyd -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Dangos rhestr o awyrennau'r cwmni. Mae Ctrl+Clic yn toglo agor y rhestr grŵp/cerbyd -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Agosáu'r olygfa -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Pellhau'r olygfa -STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Adeiladu tan-adeiledd rheilffordd -STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Adeiladu Ffordd -STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Adeiladu Doc Llongau +STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Dewisiadau a gosodiadau +STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Cadw neu waredu a'r gêm, gadael y rhaglen +STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Agor map, porth golwg newydd, llif cargo neu rhestr arwyddion +STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Agor cyfeiriadur trefi neu sefydlu tref +STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Agor rhestr cymorthdaliadau +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Agor rhestr o orsafoedd y cwmni +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Agor gwybodaeth cyllid y cwmni +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Agor gwybodaeth cyffredinol y cwmni +STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Agor llyfr hanes +STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Agor rhestr amcanion +STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Agor graffiau cwmni a chyfraddau tâl llwythi +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Agor tabl cynghrair cwmnïau +STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Agor cyfeiriadur diwydiant, cadwyn diwydiant, neu ariannu adeiladu diwydiant newydd +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Agor rhestr o drenau'r cwmni. Ctrl+Clic i ddangos neu guddio cerbydau'r grŵp, yn groes i'r gosodiad a ddewiswyd +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Agor rhestr o gerbydau ffordd y cwmni. Ctrl+Clic i ddangos neu guddio cerbydau'r grŵp, yn groes i'r gosodiad a ddewiswyd +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Agor rhestr o longau'r cwmni. Ctrl+Clic i ddangos neu guddio cerbydau'r grŵp, yn groes i'r gosodiad a ddewiswyd +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Agor rhestr o awyrennau'r cwmni. Ctrl+Clic i ddangos neu guddio cerbydau'r grŵp, yn groes i'r gosodiad a ddewiswyd +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Agosáu +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Pellhau +STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Adeiladu tanadeiledd rheilffordd +STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Adeiladu tanadeiledd ffordd +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Adeiladu tanadeiledd tramffordd +STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Adeiladu tanadeiledd dŵr STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Adeiladu meysydd awyr -STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Agor y bar offer tirweddu er mwyn codi neu ostwng tir, plannu coed ayb. -STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Dangos y ffenestr Sain/Cerddoriaeth -STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Dangos Neges/Adroddiad newyddion ddiwethaf, Dangos Dewisiadau Negeseuon -STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Gwybodaeth ardal tir, dadnamu sgriptiau, lluniau sgrin, amdan OpenTTD +STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Agor y dewislen tirweddu, dewislen coed, neu osod arwydd +STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Agor y ffenestr sain/cerddoriaeth +STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Agor y neges/adroddiad newyddion ddiwethaf, hanes negeseuon neu ddileu pob neges +STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Agor gwybodaeth ardal tir, dewislen ciplun, credydau OpenTTD, neu offer datblygu STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Amnewid bariau offer # Extra tooltips for the scenario editor toolbar @@ -386,14 +418,15 @@ STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Golygyd STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Symud y dyddiad cychwyn yn ôl 1 blwyddyn STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Symud y dyddiad cychwyn ymlaen 2 flynedd STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Cliciwch i fewnbynnu'r flwyddyn dechreuol -STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Dangos map, cyfeiriadur trefi -STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Cynhyrchu tirwedd -STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Cynhyrchu trefi -STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Cynhyrchu Diwydiannau -STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Cynhyrchu Ffyrdd -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plannu coed. Mae Shift yn toglo adeiladu/amcangyfrif y gost +STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Agor map, porth golwg ychwanegol, rhestr arwyddion neu cyfeiriadur diwydiant +STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Agor y ddewislen tirweddu neu gynhyrchu byd newydd +STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Adeiladu neu gynhyrchu trefi +STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Adeiladu neu gynhyrchu diwydiannau +STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Adeiladu tanadeiledd ffordd +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Adeiladu tanadeiledd tramffordd +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plannu coed. Ctrl+Clic+Llusgo i ddewis yr ardal yn ddeiagonal. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Gosod arwydd -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Gosod. Mae Shift yn toglo adeiladu/dangos amcangyfrif o'r gost +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Gosod. Ctrl+Clic+Llusgo i ddewis yr ardal yn ddeiagonal. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig # Scenario editor file menu ###length 7 @@ -409,8 +442,10 @@ STR_SCENEDIT_FILE_MENU_QUIT :Gadael ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Dewisiadau Gêm STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Gosodiadau +STR_SETTINGS_MENU_AI_SETTINGS :Gosodiadau AI STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Gosodiadau sgript gêm STR_SETTINGS_MENU_NEWGRF_SETTINGS :Gosodiadau NewGRF +STR_SETTINGS_MENU_SANDBOX_OPTIONS :Dewisiadau bocs tywod STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Dewisiadau tryloywder STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Dangos enwau trefi STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Dangos enwau gorsafoedd @@ -431,7 +466,7 @@ STR_FILE_MENU_EXIT :Gadael # Map menu STR_MAP_MENU_MAP_OF_WORLD :Map o'r Byd STR_MAP_MENU_EXTRA_VIEWPORT :Ffenestr Olygfa Newydd -STR_MAP_MENU_LINGRAPH_LEGEND :Allwedd Llif Cargo +STR_MAP_MENU_LINGRAPH_LEGEND :Allwedd llif cargo STR_MAP_MENU_SIGN_LIST :Rhestr Arwyddion # Town menu @@ -446,12 +481,12 @@ STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Graff Elw Gweit STR_GRAPH_MENU_INCOME_GRAPH :Graff Incwm STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Graff Llwythi a Ddanfonwyd STR_GRAPH_MENU_PERFORMANCE_HISTORY_GRAPH :Graff Hanes Perfformiad -STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Graff Gwerth Cwmni +STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Graff gwerth cwmni STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Cyfraddau Tâl Llwythi # Company league menu STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Tabl Cynghrair Cwmnïau -STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Graddfa Fanwl Perfformiad +STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Graddio Perfformiad Manwl STR_GRAPH_MENU_HIGHSCORE :Tabl sgôr uchaf # Industry menu @@ -486,6 +521,7 @@ STR_TOOLBAR_SOUND_MUSIC :Sain/cerddoriae # Message menu STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Neges/Adroddiad newyddion ddiwethaf STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Hanes negeseuon +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Dileu pob neges # About menu STR_ABOUT_MENU_LAND_BLOCK_INFO :Gwybodaeth ardal tir @@ -573,10 +609,13 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Graff El STR_GRAPH_INCOME_CAPTION :{WHITE}Graff Incwm STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Llwythi wedi'u cludo (mewn unedau) STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Graddfeydd Perfformiad Cwmni (gradd uchaf=1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Gwerth Cwmnïau +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Graff Gwerth Cwmni +STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Y 72 munud diwethaf -STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Graddfeydd Tâl Llwythi +STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Cyfraddau Tâl Llwythi +STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Diwrnodau cludo +STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Eiliadau cludo STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Tâl am gludo llwyth o 10 uned (neu 10,000 litr) pellter o 20 sgwâr STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Galluogi popeth STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Analluogi popeth @@ -594,6 +633,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Cliciwch # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Tablau Cynghrair Cwmnïau STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' +STR_COMPANY_LEAGUE_COMPANY_RANK :{YELLOW}#{NUM} STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Peiriannydd STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Rheolwr Traffig STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Cydlynydd Cludiant @@ -605,7 +645,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :Llywydd STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Teicŵn # Performance detail window -STR_PERFORMANCE_DETAIL :{WHITE}Graddio perfformiad manwl +STR_PERFORMANCE_DETAIL :{WHITE}Graddio Perfformiad Manwl STR_PERFORMANCE_DETAIL_KEY :{BLACK}Allwedd STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) @@ -625,7 +665,11 @@ STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Benthyci STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Cyfanswm: ###next-name-looks-similar +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}Nifer y cerbydau a gynhyrchodd elw y llynedd. Mae hyn yn cynnwys cerbydau ffordd, trenau, llongau ac awyrennau +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Nifer y cerbydau a gynhyrchodd elw y cyfnod diwethaf. Mae hyn yn cynnwys cerbydau ffordd, trenau, llongau ac awyrennau STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Nifer y gorsafoedd gyda gwasanaeth diweddar. Mae gorsafoedd trenau, gorsafoedd bysiau a meysydd awyr yn cael eu cyfrif yn anibynnol hyd yn oed os ydynt wedi'u cysylltu i'r un gorsaf +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}Elw'r cerbyd gyda'r incwm lleiaf (dim ond gan ystyried cerbydau sy'n hŷn na deuflwydd) +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}Elw'r cerbyd gyda'r incwm lleiaf (dim ond gan ystyried cerbydau sy'n hŷn na dwy gyfnod) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Cyfanswm yr arian a enillwyd yn y chwarter gyda'r elw isaf o'r 12 chwarter ddiwethaf STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Cyfanswm yr arian a enillwyd yn y chwarter gyda'r elw uchaf o'r 12 chwarter ddiwethaf STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Cyfanswm yr unedau llwyth a gludwyd yn y 4 chwarter diwethaf @@ -668,16 +712,19 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Toglu cy STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Dangos y ffenestr dewis traciau cerddoriaeth # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Rhaglen Cerddoriaeth - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Indecs Traciau STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Rhaglen - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Clirio STR_PLAYLIST_CHANGE_SET :{BLACK}Newid set STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Clirio'r rhaglen gyfredol (Cyfaddas 1 neu Cyfaddas 2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Newid y dewis cerddoriaeth at set arall a osodwyd STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Cliciwch i ychwanegu trac cerddoriaeth i'r rhaglen gyfredol (Cyfaddas 1 Neu Cyfaddas 2 yn unig) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Cliciwch i dynnu trac cerddoriaeth o'r rhaglen gyfredol (Cyfaddas 1 Neu Cyfaddas 2 yn unig) # Highscore window +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Cwmnïau gorau STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Rheolwr Busnes STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Entrepreneur @@ -726,7 +773,7 @@ STR_SMALLMAP_LEGENDA_AIRCRAFT :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_TRANSPORT_ROUTES :{TINY_FONT}{BLACK}Llwybrau Cludiant STR_SMALLMAP_LEGENDA_FOREST :{TINY_FONT}{BLACK}Coedwig STR_SMALLMAP_LEGENDA_RAILROAD_STATION :{TINY_FONT}{BLACK}Gorsaf Reilffordd -STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Man Llwytho Lorïau +STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Gorsaf Lorïau STR_SMALLMAP_LEGENDA_BUS_STATION :{TINY_FONT}{BLACK}Gorsaf Fysiau STR_SMALLMAP_LEGENDA_AIRPORT_HELIPORT :{TINY_FONT}{BLACK}Maes Awyr/Hofrenfa STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLACK}Doc @@ -755,7 +802,7 @@ STR_SMALLMAP_ENABLE_ALL :{BLACK}Galluogi STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Dangos uchder STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Peidio â dangos unrhyw ddiwydiant ar y map STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Dangos pob diwydiant ar y map -STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Toglo dangos y map uchder +STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Toglu dangos y map uchder STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Peidio â dangos unrhyw eiddo cwmni ar y map STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Dangos eiddo pob cwmni ar y map STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Peidio â dangos cargo ar y map @@ -765,10 +812,12 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Dangos p STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Dangos y neges neu'r adroddiad newyddion ddiwethaf... STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * WEDI'I OEDI * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * WEDI'I OEDI (yn aros am ddiweddariad graff gyswllt) * * STR_STATUSBAR_AUTOSAVE :{RED}AWTOGADW STR_STATUSBAR_SAVING_GAME :{RED}* * CADW GÊM * * STR_STATUSBAR_SPECTATOR :{WHITE}(gwyliwr) +STR_STATUSBAR_INFINITE_MONEY :{WHITE}(arian di-derfyn) # News message history STR_MESSAGE_HISTORY :{WHITE}Hanes Negeseuon @@ -808,10 +857,11 @@ STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLAC STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}Mae {STRING} wedi cael ei gau gan ei gredydwyr a''u hasedau wedi'u gwerthu! STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Cwmni cludiant newydd wedi'i lansio! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}Mae {STRING} wedi cychwyn adeiladu ger {TOWN}! -STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}Mae {STRING} wedi cael ei brynu gan {STRING}! +STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}Mae {STRING} wedi cael ei brynu gan {STRING} am swm anhysbys! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Manager) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}Mae {STRING} wedi noddi sefydlu tref newydd {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Mae tref newydd o'r enw {TOWN} wedi ei hadeiladu! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}{STRING} newydd wrthi'n cael ei adeiladu wrth {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}{STRING} newydd wrthi'n cael ei phlannu wrth {TOWN}! @@ -863,7 +913,10 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Mae {STRING} newydd yn awr ar gael! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Agor y ffenest grŵp wedi'i ffocysu ar grŵp y cerbyd +STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}Nid yw {STATION} bellach yn derbyn: {CARGO_LIST} +STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}Mae {STATION} nawr yn derbyn: {CARGO_LIST} STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Cynnig cymhorthdal ar ben:{}{}Ni fydd cludo {STRING} o {STRING} i {STRING} yn derbyn cymhorthdal bellach STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Cymhorthdal wedi'i dynnu'n ôl:{}{}Ni fydd gwasanaeth {STRING} o {STRING} i {STRING} yn derbyn cymhorthdal bellach @@ -874,7 +927,11 @@ STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLAC STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Cymhorthdal wedi ei ddyfarnu i {STRING}!{}{}Bydd y gwasanaeth {STRING} o {STRING} i {STRING} yn talu teirgwaith yn fwy am {UNITS_YEARS_OR_MINUTES}! STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Cymhorthdal wedi ei ddyfarnu i {STRING}!{}{}Bydd y gwasanaeth {STRING} o {STRING} i {STRING} yn talu pedair gwaith yn fwy am {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Anhrefn traffig yn {TOWN}!{}{}Cynllun ailadeiladu ffyrdd a ariannwyd gan {STRING} yn dod a 6 mis o ddioddef i fodurwyr! +STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}Anhrefn traffig yn {TOWN}!{}{}Cynllun ailadeiladu ffyrdd a ariannwyd gan {STRING} yn dod a 6 munud o ddioddef i fodurwyr! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Monopoli cludiant! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLACK}Mae awdurdod lleol {TOWN} wedi arwyddo contract gyda {STRING} am 12 mis o hawliau cludiant cyfyngol! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}Mae awdurdod lleol {TOWN} wedi arwyddo contract gyda {STRING} am 12 munud o hawliau cludiant cyfyngol! # Extra view window STR_EXTRA_VIEWPORT_TITLE :{WHITE}Ffenestr Olygfa{COMMA} @@ -896,10 +953,14 @@ STR_GAME_OPTIONS_TAB_SOCIAL :Cymdeithasol STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}Dewis gosodiadau integreiddio cymdeithasol STR_GAME_OPTIONS_VOLUME :Lefel Sain +STR_GAME_OPTIONS_SFX_VOLUME :Effeithiau sŵn +STR_GAME_OPTIONS_MUSIC_VOLUME :Cerddoriaeth STR_GAME_OPTIONS_VOLUME_0 :0% STR_GAME_OPTIONS_VOLUME_25 :25% STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Uned Arian STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Dewis unedau arian @@ -950,6 +1011,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Rwpi India STR_GAME_OPTIONS_CURRENCY_IDR :Rupiah Indonesia STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit Malaysia STR_GAME_OPTIONS_CURRENCY_LVL :Lats Latfia +STR_GAME_OPTIONS_CURRENCY_PTE :Esgwdo Portiwgeaidd STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Awtogadw STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Dewiswch pa mor aml y dylid awtogadw gemau @@ -964,6 +1026,7 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :Bob 120 munud STR_GAME_OPTIONS_LANGUAGE :{BLACK}Iaith STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Dewiswch yr iaith rhyngwyneb i'w defnyddio +STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% wedi'i gwblhau) STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Sgrin Llawn STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Marciwch y blwch hwn i chwarae Open TTD gyda Sgrin Llawn @@ -974,13 +1037,21 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :arall STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Cyflymu caledwedd +STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Bydd ticio'r blwch yma yn caniatáu i OpenTTD geisio defnyddio cyflymiad caledwedd. Bydd newid i'r gosodiad ond yn digwydd wedi ailddechrau'r gêm STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Bydd y gosodiad ond yn cymryd effaith ar ôl ailddechrau'r gêm +STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Bydd ticio'r blwch yma yn defnyddio cydamseriad fertigol wrth lunio'r sgrin. Bydd newid i'r gosodiad ond yn digwydd wedi ailddechrau'r gêm +STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Gyriant presennol: {STRING} +STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Maint rhyngwyneb +STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Llusgwch y llithrwr i osod maint y rhyngwyneb. Daliwhc Ctrl i ganiatáu addasiad parhaol STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Awto-ganfod maint STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Marciwch y blwch hwn i ganfod maint y rhyngwyneb yn awtomatig +STR_GAME_OPTIONS_GUI_SCALE_BEVELS :Helaethu befelau +STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Marciwch y blwch hwn i helaethu befelau yn ôl maint y rhyngwyneb STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Defnyddio wynebfath corlun traddodiadol STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marciwch y blwch hwn os oes well gennych ddefnyddio y wynebfath corlun un-maint traddodiadol. @@ -993,7 +1064,13 @@ 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}Arolwg awtomatig +STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Cymryd rhan mewn arolwg awtomatig +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Pan y galluogir, bydd OpenTTD yn darlledu arolwg pan yn gadael gêm +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}Am yr arolwg a phreifatrwydd +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Mae hwn yn agor porwr gyda mwy o wybodaeth am yr arolwg awtomatig STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Rhagolwg o ganlyniad yr arolwg +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Dangos canlyniadau arolwg y gêm sy'n rhedeg STR_GAME_OPTIONS_GRAPHICS :{BLACK}Graffeg @@ -1003,11 +1080,11 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Gall amleddau uwch na 60Hz amharu perfformiad STR_GAME_OPTIONS_BASE_GRF :{BLACK}Set raffeg sylfaenol -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Dewiswch y set raffeg sylfaenol i'w defnyddio +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Dewiswch y set raffeg sylfaenol i'w defnyddio (ni ellir ei newid o fewn gêm, dim ond o'r brif ddewislen) STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Gwybodaeth ychwanegol am y set graffeg sylfaenol STR_GAME_OPTIONS_BASE_SFX :{BLACK}Set sain sylfaenol -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Dewisiwch y set sain sylfaenol i'w ddefnyddio +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Dewiswch y set sain sylfaenol i'w ddefnyddio (ni ellir ei newid o fewn gêm, dim ond o'r brif ddewislen) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Gwybodaeth bellach am y set sain sylfaenol STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Set cerddoriaeth sylfaenol @@ -1016,9 +1093,19 @@ STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Gwybodae STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(dim ategolion integreiddio gyda llwyfannau cymdeithasol wedi'u gosod) +STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{BLACK}{STRING} ({STRING}) +STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :{BLACK}Llwyfan: STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Stâd ategolyn: +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_RUNNING :{GREEN}Yn rhedeg +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_FAILED :{RED}Methwyd sefydlu +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_PLATFORM_NOT_RUNNING :{ORANGE}{STRING} ddim yn rhedeg +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNLOADED :{RED}Dadlwythwyd +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :{RED}Ategolyn dyblyg +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNSUPPORTED_API :{RED}Fersiwn anghydnaws +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Llofnod annilys +STR_BASESET_STATUS :{STRING} {RED}({NUM} ffeil{P "" ""} coll/llygredig) STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Methu nôl rhestr o cydraniadau cydnaws STR_ERROR_FULLSCREEN_FAILED :{WHITE}Methodd y modd sgrin llawn @@ -1031,11 +1118,13 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Llehad y STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Amlhau yr swm o eich arian cyfred am un Punt (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}newid y raddfa gyfnewid o eich arian cyfred i un Punt (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Gwahanydd: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Dewis y gwahanydd ar gyfer eich arian STR_CURRENCY_PREFIX :{LTBLUE}Rhagddodiad: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Dewis y rhagddodiad ar gyfer eich arian STR_CURRENCY_SUFFIX :{LTBLUE}Olddodiad: {ORANGE}{STRING} -STR_CURRENCY_SET_CUSTOM_CURRENCY_SUFFIX_TOOLTIP :{BLACK}Dewis yr ôl-lddodiad ar gyfer eich arian +STR_CURRENCY_SET_CUSTOM_CURRENCY_SUFFIX_TOOLTIP :{BLACK}Dewis yr ôl-ddodiad ar gyfer eich arian STR_CURRENCY_SWITCH_TO_EURO :{LTBLUE}Newid i'r Ewro: {ORANGE}{NUM} STR_CURRENCY_SWITCH_TO_EURO_NEVER :{LTBLUE}Newid i'r Ewro: {ORANGE}byth @@ -1108,8 +1197,11 @@ STR_TERRAIN_TYPE_FLAT :Gwastad STR_TERRAIN_TYPE_HILLY :Bryniog STR_TERRAIN_TYPE_MOUNTAINOUS :Mynyddig STR_TERRAIN_TYPE_ALPINIST :Mynyddwr +STR_TERRAIN_TYPE_CUSTOM :Uchder addasedig +STR_TERRAIN_TYPE_CUSTOM_VALUE :Uchder addasedig ({NUM}) ###length 4 +STR_CITY_APPROVAL_LENIENT :Hyblyg STR_CITY_APPROVAL_TOLERANT :Hapus STR_CITY_APPROVAL_HOSTILE :Gwrthwynebus STR_CITY_APPROVAL_PERMISSIVE :Bodlon (dim effaith ar weithredoedd cwmni) @@ -1121,7 +1213,9 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Gosodiad STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Hidlydd: STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Ehangu oll STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Cywasgu oll +STR_CONFIG_SETTING_RESET_ALL :{BLACK}Ailosod pob gwerth STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(dim esboniad ar gael) +STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{ORANGE}{STRING}{POP_COLOUR} STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Gwerth rhagosodedig: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Math o osodiad: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE_CLIENT :Gosodiad gwestai (ni gedwir yn y ffeiliau cadw; yn effeithio ar pob gêm) @@ -1129,6 +1223,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Gosodiad gêm ( STR_CONFIG_SETTING_TYPE_GAME_INGAME :Gosodiad gêm (cedwir yn y ffeil gadw; yn effeithio ar y gêm bresennol yn unig) STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Gosodiad cwmni (cedwir yn y ffeiliau cadw; yn effeithio ar gemau newydd yn unig) STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Gosodiad cwmni (cedwir yn y ffeil gadw; yn effeithio ar y cwmni presennol yn unig) +STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Rhybudd! +STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Bydd y weithred yma'n ailosod pob gosodiad gêm i'w gwerthoedd rhagosodedig.{}Ydych chi'n siwr eich bod am barhau? STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categori: STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Math: @@ -1173,13 +1269,16 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Chwith STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Canol STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :De +STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}eiliad{P 0 "" ""} STR_CONFIG_SETTING_INFINITE_MONEY :Arian di-derfyn: {STRING} STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Caniatáu gwario di-derfyn ac analluogi methdaledd cwmnïau STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Benthyciad agoriadol uchafsymol: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Y swm uchaf y gall cwmni fenthyca (heb ustyried chwyddiant) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Y swm uchaf y gall cwmni fenthyca (heb ystyried chwyddiant). Os y gosodir ar "dim benthyciad", ni fydd arian ar gael oni bai y caiff ei roi gan Sgript Gêm neu'r gosodiad "Arian di-derfyn". +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Dim benthyciad STR_CONFIG_SETTING_INTEREST_RATE :Cyfradd chwyddiant: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Cyfradd chwyddiant y benthyciad; hefyd chwyddiant yr economi os y galluogir @@ -1209,7 +1308,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Costau adeiladu STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Gosod lefel costau prynnu ac adeiladu STR_CONFIG_SETTING_RECESSIONS :Dirwasgiadau: {STRING} -STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Os y galluogir, gall dirwasgiadau ddigwydd ambell flwyddyn. Yn ystod dirwasgiad bydd lefelau gweithgynhyrchu'n is o lawer (gan ddychwelyd at y lefel gwreiddiol wedi diwedd y dirwasgiad) +STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Os y galluogir, gall dirwasgiadau ddigwydd yn ysbeidiol. Yn ystod dirwasgiad bydd lefelau gweithgynhyrchu'n is o lawer (gan ddychwelyd at y lefel gwreiddiol wedi diwedd y dirwasgiad) STR_CONFIG_SETTING_TRAIN_REVERSING :Rhwystro trenau rhag gwrthdroi mewn gorsafoedd: {STRING} STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Os y galluogir, ni fydd trenau yn gwrthdroi mewn gorsafoedd nad ydynt yn derfynfeydd, hyd yn oed os oes llwybr byrach i'w cyrchfan drwy wrthdroi @@ -1233,6 +1332,8 @@ STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Caniatáu tirff STR_CONFIG_SETTING_CATCHMENT :Caniatáu ardaloedd dalgylch mwy realistig eu maint: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Defnyddio dalgylchoedd o feintiau gwahanol ar gyfer gwahanol fathau o orsafoedd a meysydd awyr +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Gall gorsafoedd cwmni wasanaethu diwydiannau gyda gorsafoedd niwtral ynghlwm: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Pan y galluogir, bydd diwydiannau gyda gorsafoedd ynghlwm (fel Rigiau Olew) yn gallu caen eu gwasanaethu gan orsafoedd cwmni sydd gerllaw. Pan analluogir, dim ond yn y gorsafoedd ynghlwm y gellir gwasanaethu'r diwydiannau yma. Ni fydd gorsafoedd gerllaw yn gallu eu gweini, ac ni fydd y gorsaf ynghlwm yn gweini unrhyw beth ond y diwydiant yna STR_CONFIG_SETTING_EXTRADYNAMITE :Caniatáu chwalu mwy o ffyrdd, pontydd ayb. sy'n berthyn i drefi: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Hwyluso chwalu tanadeiledd ac adeiladau sy'n eiddo i drefi @@ -1261,7 +1362,7 @@ STR_CONFIG_SETTING_FORBID_90_DEG :Rhwystro trenau STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Tro 90 gradd yw pan fo trac llorweddol yn cael ei ddilyn yn syth gan drac fertigol at y teil cyfagos, gan wneud i'r trên droi 90 gradd wrth groesi ochr y teil yn hytrach na'r 45 gradd sydd i'w gael gyda chyfuniadau trac eraill. Mae hyn hefyd yn effeithio ar gylch troi llongau STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Caniatáu cyfuno gorsafoedd nad ydynt yn union gyfochrog: {STRING} -STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Caniatáu ychwanegu rhannau at orsaf heb gyffwrdd yn uniongyrchol a'r rhai sydd eisioes yn bodoli. +STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Caniatáu ychwanegu rhannau at orsaf heb gyffwrdd yn uniongyrchol a'r rhai sydd eisoes yn bodoli, trwy Ctrl+Clicio wrth osod y darnau newydd STR_CONFIG_SETTING_INFLATION :Chwyddiant: {STRING} STR_CONFIG_SETTING_INFLATION_HELPTEXT :Galluogi chwyddiant yn yr economi, lle y bydd costau'n codi ychydig yn gyflymach na thaliadau @@ -1307,7 +1408,7 @@ STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Gorchmynion new STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Fel rheol, bydd cerbyd yn aros wrth pob gorsaf yr aiff drwyddo. Bydd y gosodiad yma yn peri i'r cerbyd yrru'n syth drwy pob gorsaf ar ei ffordd at ei gyrchfan olaf heb aros. Sylwer fod y gosodiad yma'n diffinio rhagosodiad ar gyfer gorchmynion newydd. Gellir newid gorchmynion penodol at unrhyw ddull a fynnir STR_CONFIG_SETTING_STOP_LOCATION :Gorchmynion trenau newydd yn nodi aros ar y {STRING} o'r platfform fel rhagosodiad -STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Y man lle y daw trên at aros wrth blatfform fel rheol. Mae'r 'ochr agos' yn cyfeirio at y pen lle mae'r trên yn myned, 'canol' at ganol y platfform, ac 'ochr bell' yn bell o'r mynedfa. Sylwer fod y gosodiad yma'n diffinio rhagosodiad ar gyfer gorchmynion newydd. Gellir newid gorchmynion penodol at unrhyw ddull a fynnir +STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Y man lle y daw trên at aros wrth blatfform fel rheol. Mae'r 'ochr agos' yn cyfeirio at y pen lle mae'r trên yn myned, 'canol' at ganol y platfform, ac 'ochr bell' yn bell o'r fynedfa. Sylwer fod y gosodiad yma'n diffinio rhagosodiad ar gyfer gorchmynion newydd. Gellir gosod lleoliad aros gorchmynion penodol trwy glicio ar destun y gorchymyn ###length 3 STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :ochr agos STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :canol @@ -1324,6 +1425,7 @@ STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Pob ffenestr ol STR_CONFIG_SETTING_BRIBE :Caniatáu llwgrwobrwyo'r awdurdod lleol: {STRING} ###length 2 STR_CONFIG_SETTING_BRIBE_HELPTEXT :Caniatáu i gwmnïau geisio llwgrwobrwyo'r awdurdod lleol. Os bydd arolygydd yn sylwi ar yr ymgais ni gaiff y cwmni weithredu yn y dref am chwe mis +STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :Caniatáu i gwmnïau ceisio llwgrwobrwyo'r awdurdod lleol. Os bydd arolygydd yn sylwi ar yr ymgais ni gaiff y cwmni weithredu yn y dref am chwe munud STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Caniatáu prynu hawliau cludo cyfyngol: {STRING} ###length 2 @@ -1353,6 +1455,8 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Dim STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Llai STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Arferol +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Caniatáu croesfannau gyda ffyrdd neu gledrau sy'n berchen i gystadleuwyr: {STRING} +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Caniatáu adeiladu croesfannau ar ffyrdd neu gledrau sydd yn berchen i gystadleuwyr STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Caniatáu arosfannau gyrru-trwodd ar ffyrdd sy'n eiddo i drefi: {STRING} STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Caniatáu adeiladu arosfannau gyrru-trwodd ar ffyrdd sy'n eiddo i drefi @@ -1363,8 +1467,11 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Nid yw'n STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Cynnal a chadw tanadeiledd: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Pan fo wedi'i alluogi, mae tanadeiledd yn creu costau cynnal a chadw. Mae'r cost yn codi'n gyflymach na'i gyfradd gyda thŵf y rhwydwaith, gan effeithio'n fwy ar gwmniau mawr na rhai bychan +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Lliw dechreuol y cwmni: {STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Dewiswch liw dechreuol am y cwmni +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Ail liw dechreuol y cwmni: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Dewiswch ail liw dechreuol ar gyfer y cwmni, os yn defnyddio NewGRF sy'n ei alluogi. STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Maes awyr ddim yn dibennu: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Mae galluogi'r dewis yma'n peri i bob math o faes awyr aros ar gael am byth wedi ei gyflwyniad gyntaf @@ -1382,14 +1489,21 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :O bob cerbyd STR_CONFIG_SETTING_WARN_INCOME_LESS :Rhybuddio os yw cerbyd yn gwneud colled: {STRING} ###length 2 STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Pan fo wedi'i alluogi, fe yrrir neges newyddion pan fo cerbyd heb wneud elw yn ystod blwyddyn calendr +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Pan fo wedi'i alluogi, fe yrrir neges newyddion pan fo cerbyd heb wneud elw yn ystod cyfnod STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Nid yw cerbydau'n darfod: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Pan fo wedi'i alluogi, bydd bob math o gerbyd yn aros ar gael am byth wedi eu cyflwyniad gyntaf +STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Cadw amser: {STRING} +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Dewis unedau cadw amser y gêm. Ni ellir newid hyn yn ddiweddarach.{}{}Dull calendr yw'r profiad clasurol OpenTTD, gyda blwyddyn yn cynnwys 12 mis o 28-31 diwrnod.{}{}Yn y dull cloc wal, mae cynhyrchiant cargo a materion ariannol yn cael eu cyfrifo fesul munud, sef tua'r un amser a mis 30 diwrnod yn y modd calendr. Mae'r rhain yn cael eu grwpio i gyfnodau 12 munud, sydd gyfystyr â blwyddyn yn y modd calendr..{}{}Yn y naill modd neu'r llall, mae wastad calendr traddodiadol, sydd yn cael ei ddefnyddio ar gyfer dyddiadau cyflwyno cerbydau, tai a thanadeiledd arall. ###length 2 +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendr +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Cloc wal STR_CONFIG_SETTING_MINUTES_PER_YEAR :Munudau i bob blwyddyn: {STRING} +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Dewis y nifer o funudau mewn blwyddyn calendr. Y rhagosodiad yw 12 munud. Gosodwch at 0 i rwystro'r flwyddyn calendr rhag newid. Nid yw'r gosodiad yma'n effeithio ar efelychiad economaidd y gêm, ac mae ond ar gael pan yn defnyddio amseru cloc wal. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (amser calendr wedi'i rewi) @@ -1397,6 +1511,7 @@ STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Helaethu cynhyr STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Helaethu cynhyrchiant cargo trefi gyda'r canran yma. STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Helaethu cynhyrchiant cargo diwydiannau: {STRING} STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Helaethu cynhyrchiant cargo diwydiannau gyda'r canran yma. +STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Awtoadnewyddu cerbyd pan aiff yn hen: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Pan fo wedi'i alluogi, bydd cerbyd sy'n agos at ddiwedd ei oes yn cael ei ddisodli'n ddiofyn pan y caiff yr amodau adnewyddu eu cyflawni @@ -1425,6 +1540,10 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Dangos poblogae STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Trwch llinellau graff: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Lled y linell mewn graffiau. Bydd llinell fain yn fwy manwl, tra y bydd llinell trwchus yn haws i'w weld gyda lliwiau'n fwy amlwg +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Dangos enw'r NewGRF yn y ffenest adeiladu cerbyd: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Ychwanegu llinell i'r ffenestr adeiladu cerbyd, gan ddangos pa NewGRF mae'r cerbyd a ddewisir yn dod o. +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Dangos y llwythi y gall cerbydau eu cario yn y ffenestri rhestr {STRING} +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Os y galluogir, bydd llwyth cludadwy'r cerbyd yn dangos uwch ei ben yn y rhestrau cerbyd STR_CONFIG_SETTING_LANDSCAPE :Tirwedd: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Mae tirweddau'n diffinio senario sylfaenol gydag amryw fathau o gargo ac anghenion twf trefi. Mae NewGRF a Sgriptiau Gêm yn cynnig rheolaeth mannach, fodd bynnag @@ -1436,7 +1555,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Gwreiddiol STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Math tirwedd: {STRING} -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(TerraGenesis yn unig) Llyfnder y tirwedd +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Dewis uchder bryniau a mynyddoedd y tirwedd STR_CONFIG_SETTING_INDUSTRY_DENSITY :Dwysedd diwydiant: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Gosod faint o ddiwydiannau y dylid eu creu a pha lefel caiff eu cynnal drwy'r gêm @@ -1448,11 +1567,15 @@ STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Uchder Llinell STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Rheoli'r uchder y mae eira'n ymddangos mewn tirwedd is-arctig. Mae eira hefyd yn effeithio ar gynhyrchu diwydiannau a gofynion twf trefi. Dim ond yn y Golygydd Senario y gellir ei newid, neu fel arall caiff ei gyfrifo trwy "gorchudd eira" STR_CONFIG_SETTING_SNOW_COVERAGE :Gorchuddiad eira: {STRING} +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Dewis faint o eira ar gyfer y tirwedd is-arctig. Mae eira'n effeithio ar gynhyrchu diwydiannau a gofynion twf trefi. Dim ond yn cael ei ddefnyddio wrth greu map. Nid yw teiliau lefel môr ac arfordir byth o dan eira. STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% +STR_CONFIG_SETTING_DESERT_COVERAGE :Gorchudd anialwch: {STRING} +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Dewis faint o anialwch ar gyfer y tirwedd trofannol. Mae anialwch hefyd yn effeithio ar gynhyrchu diwydiant ac anghenion tyfiant trefi. Dim ond yn cael ei ddefnyddio wrth greu map +STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Garwder y tirwedd: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis yn unig) Dewis amlder bryniau: Mae gan tirwedd llyfn nifer isel o fryniau bylchedig. Mae gan dirwedd garw llawer o fryniau, a all edrych yn undonog +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Dewis siâp a nifer bryniau: Mae gan tirwedd llyfn nifer isel o fryniau llydan, tra fod gan dirwedd garw llawer o fryniau bychan ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Llyfn Iawn STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Llyfn @@ -1460,7 +1583,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Garw STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Garw Iawn STR_CONFIG_SETTING_VARIETY :Dosraniad amrywiaeth: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :(TerraGenesis yn unig) Rheoli a yw'r map yn cynnwys ardaloedd mynyddig a gwastad. Gan fod hyn yn gwneud y map yn fwy gwastad, dylid addasu gosodiadau eraill at mynyddig +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Rheoli a yw'r map yn cynnwys ardaloedd mynyddig a gwastad. Y mwyaf o amrywiaeth, y mwy o wahaniaeth uchder rhwng ardaloedd mynyddig a gwastad. STR_CONFIG_SETTING_RIVER_AMOUNT :Nifer afonydd: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Dewis sawl afon i'w creu @@ -1480,6 +1603,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Gyrru ar y chwi STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Gyrru ar y dde STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Tro Map Uchder: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Dewis pa ffordd mae'r darlun map uchder yn cael ei gylchdroi i ffitio byd y gêm ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Gwrthglocwedd STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Clocwedd @@ -1506,14 +1630,20 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Gwyrdd tywyll STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Fioled STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Gorliw llif cargo: {STRING} +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Gosod y cynllun lliw a ddefnyddir ar gyfer y gwedd llif cargo. ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Gwyrdd i goch (gwreiddiol) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Gwyrdd at las STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :Llwyd i goch STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Llwydliw +STR_CONFIG_SETTING_SCROLLMODE :Ymddygiad sgrolio'r prif ffenestr: {STRING} STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Ymddygiad tra'n sgrolio'r map. Nid yw'r opsiynau "lleoliad llygoden wedi'i gloi" yn gweithio ar bob system, fel fersiynau gwe, sgrin-gyffwrdd, Linux gyda Wayland, ac eraill ###length 4 +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Symud porth golwg gyda botwm dde'r llygoden, lleoliad llygoden wedi'i gloi +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Symud map gyda botwm dde'r llygoden, lleoliad y llygoden wedi'i gloi +STR_CONFIG_SETTING_SCROLLMODE_RMB :Symud map gyda botwm dde'r llygoden +STR_CONFIG_SETTING_SCROLLMODE_LMB :Symud map gyda botwm dde'r llygoden STR_CONFIG_SETTING_SMOOTH_SCROLLING :Sgrolio prif ffenestr llyfn: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Rheoli syt y mae'r prif olygfa'n sgrolio at leoliad penodol pan yn clicio ar y map bychan neu yn rhoi gorchymyn i sgrolio at wrthrych penodol @@ -1550,8 +1680,10 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Clic sengl (pan STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Clic sengl (ar unwaith) STR_CONFIG_SETTING_USE_RELAY_SERVICE :Defnyddio gwasanaeth relai: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Os yw creu cysylltiad at y gweinydd yn methu, gellid defnyddio gwasanaeth relái i greu cysylltiad. Mae "byth" yn gwahardd hyn, "gofyn" yn gofyn gyntaf, tra fo "caniatáu" yn ei ganiatáu heb ofyn ###length 3 STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Byth +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Gofyn STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Caniatáu STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Efelychu de-glicio: {STRING} @@ -1592,7 +1724,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Galluogi defnyd STR_CONFIG_SETTING_LOADING_INDICATORS :Dangos llwytho: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Dewis a fydd dangosyddion llwytho'n cael eu dangos uwch cerbydau sy'n llwytho neu dadlwytho +STR_CONFIG_SETTING_TIMETABLE_MODE :Unedau amser ar gyfer amserlenni: {STRING} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Dewis yr unedau amser a ddefnyddir ar gyfer amserlenni cerbydau ###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Diwrnodau +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Eiliadau +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Ticiau STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Dangos cyrraedd a gadael mewn amserlenni: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Dangos amseroedd cyrraedd a gadael rhagdybiedig mewn amserlenni @@ -1616,7 +1753,11 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Cadw'r offer ad STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Tynnu signalau'n ddiofyn wrth adeiladu rheilffordd: {STRING} STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Tynnu signalau'n ddiofyn wrth adeiladu rheilffordd os ydynt ar y ffordd. Sylwch y gall hyn arwain at ddamwain rheilffordd posibl. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Cyfyngiad cyflymu'r gêm: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Cyfyngu pa mor gyflym mae'r gêm yn mynd pan yn cyflymu'r gêm. Mae 0 yn golygu dim cyfyngiad (pa mor gyflym y gall eich cyfrifiadur fynd). Mae gwerthoedd o dan 100% yn arafu'r gêm i lawr. Mae'r terfyn uchaf yn dibynnu ar briodweddau'ch cyfrifiadur a gall amrywio yn ôl y gêm. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% cyflymder gêm arferol ###setting-zero-is-special +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Dim terfyn (mor gyflym ag y gall eich cyfrifiadur fynd) STR_CONFIG_SETTING_SOUND_TICKER :Stribyn newyddion: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Chwarae sŵn ar gyfer crynodiadau newyddion @@ -1626,9 +1767,11 @@ STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Chwarae sŵn ar ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR :Diwedd y flwyddyn: {STRING} +STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Diwedd cyfnod: {STRING} ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Chwarae sŵn ar ddiwedd blwyddyn i adlewyrchu perfformiad y cwmni am y flwyddyn o'i gymharu a'r llynedd +STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Chwarae sŵn ar ddiwedd cyfnod gan crynhoi perfformiad y cwmni yn ystod y cyfnod o gymharu efo'r cyfnod blaenorol STR_CONFIG_SETTING_SOUND_CONFIRM :Adeiladu: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Chwarae sŵn wrth adeiladu'n lwyddiannus neu ar weithredoedd eraill @@ -1674,6 +1817,9 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Caniatáu i chw STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Nifer y gweithredoedd cyn diarddel sgriptiau: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Uchafswm y nifer o gamau cyfrifo y gall sgript ei gymeryd mewn un tro +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Defnydd cof uchaf i bob sgript: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Faint o gof y gall sgript unigol ei ddefnyddio cyn y gaiff ei ddiffodd yn orfodol. Gall fod angen cynyddu hyn ar gyfer mapiau mawr. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Dangos y cyfnod rhwng gwasanaethau mewn canrannau: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Pan y galluogir, bydd cerbydau'n ceisio gwasanaeth pan fo'u dibynadwyedd yn disgyn canran penodol o'u dibynadwyedd uchafsymol.{}{}Er enghraifft, os yw dibynadwyedd uchafsymol cerbyd yn 90% a'r ystod gwasanaeth yn 20%, bydd y cerbyg yn ceisio gwasanaeth pan mae'r dibynadwyedd yn cyrraedd 72%.Dewis os y bydd gwasanaethu cerbydau'n digwydd yn ôl yr amser ers y gwasanaeth olaf, neu wrth i'w dibynadwyedd ddisgyn islaw ganran penodol o'r dibynadwyedd uchafsymol @@ -1686,13 +1832,15 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Ystod gwasanaet STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Gosod yr ystod gwasanaethu rhagosodedig ar gyfer awyrennau newydd, os na ddynodir ystod gwasanaethu penodol ar gyfer y cerbyd STR_CONFIG_SETTING_SERVINT_SHIPS :Ystod gwasanaethu rhagosodedig ar gyfer llongau: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Gosod yr ystod gwasanaethu rhagosodedig ar gyfer llongau newydd, os na ddynodir ystod gwasanaethu penodol ar gyfer y cerbyd -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}diwrnod/% +STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Diwrnod{P 0 "" ""}/Munud{P 0 "" ""}/% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Analluogwyd STR_CONFIG_SETTING_NOSERVICE :Analluogi gwasanaethau pan fydd torri i lawr wedi ei osod i Ddim: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Pan y galluogir, ni wasanaethir cerbydau os na allent dorri i lawr +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Cosb cyflymder llwytho ar gyfer trenau sy'n hirach na'r orsaf: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Pan y galluogir, bydd trenau sy'n rhy hir i'r orsaf yn llwytho'r arafach na thrên sydd yn ffitio'r orsaf. Nid yw'r gosodiad yma'n effeithio ar lwybro. STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Galluogi terfynau cyflymder wagenni: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Pan y galluogir, fe ddefnyddir terfynnau cyflymder pob cerbyd mewn trên pan yn cyfrifo ei gyflymder uchafsymol @@ -1709,6 +1857,8 @@ STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Dangos papur ne STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Damweiniau / trychinebau: {STRING} STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Dangos papur newydd pan fo damweiniau neu drychinebau'n digwydd +STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :Damweiniau cerbydau'r cystadleuaeth: {STRING} +STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :Dangos papur newydd am ddamweiniau cerbydau cystadleuwyr STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Gwybodaeth Cwmnïau: {STRING} STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Dangos papur newydd pan fo cwmni newydd yn dechrau, neu pan fo cwmnïau ar fin taro'r wal @@ -1755,10 +1905,17 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Y blwyddyn y ca STR_CONFIG_SETTING_STARTING_YEAR :Blwyddyn dechreuol: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Sgorio diwedd blwyddyn: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Y flwyddyn y bydd y gêm yn gorffen ar gyfer dibenion sgorio. Ar ddiwedd y flwyddyn yma, bydd sgôr y cwmni'n cael ei gofnodi a bydd y sgôr uchaf yn cael ei arddangos, ond gall y chwaraewyr barhau i chwarae wedi hynny.{}Os yr hyn cyn y blwyddyn dechrau, ni fydd y sgrin sgôr uchaf byth yn cael ei arddangos. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Byth +STR_CONFIG_SETTING_ECONOMY_TYPE :Math economi: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Mae economi llyfn yn gwneud newidiadau cynhyrchiant yn fwy aml, ac mewn camau llai. Mae economi rhewiedig yn atal newidiadau cynhyrchiant a chau diwydiannau. Efallai ni fydd effaith gan y gosodiadau yma os yw mathau diwydiant yn cael eu darparu gan NewGRF/. ###length 3 +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Gwreiddiol +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Llyfn +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Rhewiedig STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Canran elw y cymal i'w dalu mewn systemau trosglwyddo: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Y canran o elw a ddyfarnir i'r cymalau rhyngol mewn systemau trosglwyddo, gan rhoi fwy o reolaeth dros yr elw @@ -1775,11 +1932,13 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Gosod y flwyddy STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Cylchu trwy mathau signal: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Dewis pa fathau o signalau i gylchu drwyddynt pan yn Ctrl+clicio ar signal gyda'r offer signal ###length 2 +STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :Grŵp presennol yn unig STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Pob math gweledol STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Dangos mathau signal: {STRING} STR_CONFIG_SETTING_SIGNAL_GUI_MODE_HELPTEXT :Dewis pa fathau o signal sy'n cael eu dangos yn y bar offer signal ###length 2 +STR_CONFIG_SETTING_SIGNAL_GUI_MODE_PATH :Signalau llwybr yn unig STR_CONFIG_SETTING_SIGNAL_GUI_MODE_ALL_CYCLE_PATH :Pob signal STR_CONFIG_SETTING_TOWN_LAYOUT :Cynllun ffyrdd ar gyfer trefi newydd: {STRING} @@ -1796,8 +1955,8 @@ STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Caniatáu i dre STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Caniatáu i drefi adeiladau croesfannau rheilffordd: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Galluogwch y gosodiad yma i ganiatáu i drefi adeiladu croesfannau rheilffordd -STR_CONFIG_SETTING_NOISE_LEVEL :Caniatáu i drefi reoli lefel swn meysydd awyrenau: {STRING} -STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Os analluogir y gosodiad yma, gellir cael dau faes awyr ymhob tref. Os y galluogir, fe gyfyngir y nifer o feysydd awyr gan y lefel sŵn mae'r dref am dderbyn, sydd yn dibynnu ar y boblogaeth a maint a phellter y maes awyr +STR_CONFIG_SETTING_NOISE_LEVEL :Cyfyngu gosod meysydd awyr yn ôl lefel sŵn: {STRING} +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Caniatáu i drefi rhwystro adeiladu meysydd awyr yn ôl eu lefel sŵn derbyniol, sydd yn seiliedig ar boblogaeth y dref a maint a phellter y maes awyr. Os yw'r gosodiad yma wedi'i analluogi, bydd trefi ond yn caniatáu dau faes awyr os nad yw agwedd yr awdurdod lleol yn "Bodlon" STR_CONFIG_SETTING_TOWN_FOUNDING :Sefydlu trefi mewn gêm: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Mae galluogi'r gosodiad yma'n caniatáu i chwaraewyr sefydlu trefi newydd yn y gêm @@ -1815,6 +1974,10 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Llinol STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Gosod coed mewn gêm: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Rheoli ymddangosiad coed ar hap yn ystod y gêm. Gall hyn effeithio ar ddiwydiannau sy'n ddibynnol ar dyfiant coed, megis melinau coed ###length 4 +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Tyfu, ond peidio ymledu {RED}(yn torri'r felin goed) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Tyfu ond dim ond ymledu mewn coedwigoedd lâw +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Tyfu ac ymledu ymhobman +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Peidio tyfu, peidio ymledu {RED}(yn torri'r felin goed) STR_CONFIG_SETTING_TOOLBAR_POS :Safle'r prif far offer: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Lleoliad llorweddol y brif bar offer ar frig y sgrin @@ -1843,8 +2006,11 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Cydraniad uchaf o gorluniau i'w defnyddio: {STRING} +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Cyfyngu y cyfraniad uchaf a ddefnyddir ar gyfer corluniau. Bydd cyfyngu cydraniad corluniau yn osgoi defnyddio graffigau cydraniad uchel hyn yn oed pan font ar gael. Gall hyn helpu cadw ymddangosiad y gêm yn gyson pan yn defnyddio cymysgedd o ffeiliau GRF gyda a heb graffigau cydraniad uchel. ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x STR_CONFIG_SETTING_TOWN_GROWTH :Cyflymder twf tref: {STRING} @@ -1864,7 +2030,10 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Dim STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Lluosydd cychwynol maint dinas: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Maint cymhedrol dinasoedd o gymharu â threfi arferol ar ddechrau'r gêm -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Cymryd {STRING}{NBSP}eiliad ar gyfer ailgyfrifo'r graff dosraniad +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Diweddaru'r graff dosraniad bob {STRING} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Amser rhwng ailgyfrifiadau o'r graff cyswllt. Mae bob ailgyfrifiad yn cyfrifo'r cynlluniau ar gyfer un cydran o'r graff. Mae hyn yn golygu nad yw gwerth o X yn golygu y bydd y graff gyfan yn cael ei ddiweddaru bob X eiliad, dim ond rhyw gydran ohono. Po fyrraf y gwerth y mwyaf o amser prosesydd y bydd ei angen i'w gyfrifo. Yr hiraf y gwerth y mwyaf yr amser cyn y bydd dosbarthiad cargo yn dechrau ar lwybrau newydd. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Cymryd {STRING} eiliad ar gyfer ailgyfrifo'r graff dosraniad +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Amser a gymerir ar gyfer ailgyfrifo pob cydran o graff cyswllt. Pan fo ailgyfrifiad yn cael ei ddechrau, bydd edefyn yn cael ei ddechrau sy'n cael rhedeg am y nifer yma o eiliadau. Y byrraf yr amser y mwyaf tebygol na fydd yr edefyn wedi gorffen erbyn hyn. Yna bydd y gêm yn aros tan y bydd ("lag"). Yr hiraf yr amser y hiraf y bydd yn cymryd i ddiweddaru dosraniad pan fydd llwybrau'n newid. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Dull dosrannu ar gyfer teithwyr: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :Mae "cymesur" yn golygu y bydd tua'r un faint o deithwyr yn mynd o orsaf A i orsaf B ac yr aiff o B i A. Mae "anghymesur" yn golygu y gall niferoedd mympwyol fynd yn y naill cyfeiriad neu'r llall. Mae "â llaw" yn golygu ni fydd dosrannu diofyn yn digwydd ar gyfer teithwyr. @@ -1948,16 +2117,20 @@ STR_CONFIG_SETTING_ACCOUNTING :Cyfrifo STR_CONFIG_SETTING_VEHICLES :Cerbydau STR_CONFIG_SETTING_VEHICLES_PHYSICS :Ffiseg STR_CONFIG_SETTING_VEHICLES_ROUTING :Llwybro +STR_CONFIG_SETTING_VEHICLES_ORDERS :Gorchmynion STR_CONFIG_SETTING_LIMITATIONS :Cyfyngiadau STR_CONFIG_SETTING_ACCIDENTS :Trychinebau a Damweiniau STR_CONFIG_SETTING_GENWORLD :Cread byd STR_CONFIG_SETTING_ENVIRONMENT :Amgylchedd +STR_CONFIG_SETTING_ENVIRONMENT_TIME :Amser STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :Awdurdodau STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :Trefi STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Diwydiannau STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Dosraniad cargo +STR_CONFIG_SETTING_ENVIRONMENT_TREES :Coed STR_CONFIG_SETTING_AI :Cystadleuwyr STR_CONFIG_SETTING_AI_NPC :Chwaraewyr Cyfrifiadurol +STR_CONFIG_SETTING_NETWORK :Rhwydwaith STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Llwybrwr ar gyfer trenau: {STRING} STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Llwybrwr i'w ddefnyddio ar gyfer trenau @@ -1995,6 +2168,8 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Methwyd # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Gwall gyda'r gosodiadau fideo... +STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... dim caledwedd graffeg cydnaws wedi ei ddarganfod. Analluogwyd cyflymu caledwedd +STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... gyriant caledwedd graffig wedi chwalu'r gêm. Cyflymu caledwedd wedi;i analluogi # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -2028,13 +2203,13 @@ STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Dewis ti STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Dewis tirwedd trofannol STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Dewis tirwedd teganau -STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Dangos dewisiadau'r gêm -STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Dangos y tabl sgôr uchaf +STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Agor dewisiadau'r gêm +STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Agor y tabl sgôr uchaf STR_INTRO_TOOLTIP_HELP :{BLACK}Cael mynediad at ddogfenyddiaeth ac adnoddau ar-lein STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Agor gosodiadau -STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Dangos gosodiadau NewGRF +STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Agor gosodiadau NewGRF STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Gwirio am gynnwys newydd neu wedi'i ddiweddaru i'w lwytho i lawr -STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Agor Gosodiadau AI +STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Agor gosodiadau AI STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Agor gosodiadau sgript gêm STR_INTRO_TOOLTIP_QUIT :{BLACK}Gadael 'OpenTTD' @@ -2066,7 +2241,7 @@ STR_HELP_WINDOW_BUGTRACKER :{BLACK}Adrodd N STR_HELP_WINDOW_COMMUNITY :{BLACK}Cymuned # Cheat window -STR_CHEATS :{WHITE}Twyllo +STR_CHEATS :{WHITE}Dewisiadau Bocs Tywod STR_CHEAT_MONEY :{LTBLUE}Cynyddu arian {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Chwarae fel cwmni: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Tarw Dur Hud (chwalu diwydiannau, gwrthrychau nad oes modd eu chwalu): {ORANGE}{STRING} @@ -2077,6 +2252,7 @@ STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Golygu u STR_CHEAT_CHANGE_DATE :{LTBLUE}Newid dyddiad: {ORANGE}{DATE_SHORT} STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Newid y flwyddyn bresennol STR_CHEAT_SETUP_PROD :{LTBLUE}Galluogi newid graddfeydd cynhyrchu: {ORANGE}{STRING} +STR_CHEAT_STATION_RATING :{LTBLUE}Gosod graddfeydd gorsafoedd ar 100%: {ORANGE}{STRING} # Livery window STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Cynllun Lliw @@ -2086,16 +2262,20 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Dangos c STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Dangos cynllun lliw cerbydau ffordd STR_LIVERY_SHIP_TOOLTIP :{BLACK}Dangos cynllun lliw llongau STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Dangos cynllun lliw awyrennau +STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Dangos lliwiau grwpiau trenau STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Dangos lliw grwpiau cerbydau ffordd STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Dangos lliw grwpiau llongau -STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Dewiswch brif lliw y cynllun sydd wedi'i ddewis. Bydd Ctrl+Clic yn gosod y lliw yma ar gyfer pob cynllun -STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Dewiswch ail liw y cynllun sydd wedi'i ddewis. Bydd Ctrl+Clic yn gosod y lliw yma ar gyfer pob cynllun +STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Dangos lliwiau grwpiau awyrennau +STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Dewis brif lliw y cynllun sydd wedi'i ddewis. Ctrl+Clic i osod y lliw yma ar gyfer pob cynllun +STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Dewiswch ail liw y cynllun sydd wedi'i ddewis. Ctrl+Clic i osod y lliw yma ar gyfer pob cynllun STR_LIVERY_PANEL_TOOLTIP :{BLACK}Dewiswch gynllun lliw i'w newid, neu nifer o gynlluniau lliw trwy glicio ar CTRL+clic. Cliciwch ar y bocs i doglu defnydd y cynllun +STR_LIVERY_TRAIN_GROUP_EMPTY :Nid oes grwpiau trên wedi eu creu STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Nid oes grwpiau cerbyd ffordd wedi eu gosod STR_LIVERY_SHIP_GROUP_EMPTY :Nid oes grwpiau llong wedi eu gosod +STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Nid oes grwpiau awyrennau wedi eu creu ###length 23 -STR_LIVERY_DEFAULT :Lifrau cyffredin +STR_LIVERY_DEFAULT :Lifrau rhagosodiad STR_LIVERY_STEAM :Injan Stêm STR_LIVERY_DIESEL :Injan Ddiesel STR_LIVERY_ELECTRIC :Injan Drydan @@ -2179,6 +2359,9 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Newid te # Matches ServerGameType ###length 3 +STR_NETWORK_SERVER_VISIBILITY_LOCAL :Lleol +STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Cyhoeddus +STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :Gwahoddiad yn unig # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Amlchwaraewr @@ -2195,6 +2378,9 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Maint ma STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Maint map y gêm{}Cliciwch i drefnu'n ôl ardal STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Dyddiadau STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Dyddiad cyfredol +STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}awr {NUM}mun +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}Amser chwarae +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}Amser chwarae pan{}nad oed y gêm wedi'i oedi STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Iaith, fersiwn gweinydd, ayb. STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Cliciwch gêm o'r rhestr i'w ddewis @@ -2210,10 +2396,13 @@ STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Cyfeiri STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Cod gwahoddiad: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Dyddiad cychwyn: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Dyddiad presennol: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Amser chwarae: {WHITE}{NUM}awr {NUM}mun +STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Sgript Gêm: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Wedi'i Ddiogelu gan Gyfrinair! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}GWEINYDD ALL-LEIN STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}GWEINYDD LLAWN STR_NETWORK_SERVER_LIST_SERVER_BANNED :{SILVER}MAE'R GWEINYDD WEDI'CH RHWYSTRO CHI +STR_NETWORK_SERVER_LIST_SERVER_TOO_OLD :{SILVER}GWEINYDD YN RHY HEN STR_NETWORK_SERVER_LIST_VERSION_MISMATCH :{SILVER}FERSIWN ANGHYDNAWS STR_NETWORK_SERVER_LIST_GRF_MISMATCH :{SILVER}NEWGRF ANGHYDNAWS @@ -2221,14 +2410,17 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Ymuno â STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Adnewyddu'r gweinydd STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Adnewyddu'r wybodaeth am y gweinydd +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Chwilio'r wê STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Chwilio'r wê am weinyddion cyhoeddus +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Chwilio rhwydwaith lleol STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Chwilio'r rhwydwaith lleol am weinyddion STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Ychwanegu gweinydd -STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Ychwanegu gweinydd i'r rhestr a gaiff ei wirio bob tro am gemau sy'n rhedeg +STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Ychwanegu gweinydd i'r rhestr. Gall fod yn gyfeiriad gweinydd neu god gwahoddiad STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Dechrau gweinydd STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Dechrau eich gweinydd eich hun STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Rhowch eich enw +STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Rhowch gyfeiriad gweinydd neu god gwahoddiad # Start new multiplayer server STR_NETWORK_START_SERVER_CAPTION :{WHITE}Dechrau gêm newydd amlchwaraewr @@ -2238,6 +2430,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Bydd y g STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Gosod cyfrinair STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Diogelwch eich gêm â chyfrinair os nad ydych am i fynediad ato fod yn gyhoeddus +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Gwelededd: +STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}A yw pobl eraill yn gallu gweld eich gweinydd yn y rhestr gyhoeddus STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} gwestai STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Uchafswm nifer gwesteion: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Dewiswch uchafswm y gwesteion. Does dim rhaid llanw pob slot @@ -2270,22 +2464,40 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Mae'r gw STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Mae'r cwmni wedi'i ddiogelu. rhowch y cyfrinair. # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Rhestr Cleientiaid +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Chwaraewyr ar-lein +STR_NETWORK_COMPANY_LIST_SPECTATE :Gwylio # Network client list +STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Chwaraewyr Ar-lein STR_NETWORK_CLIENT_LIST_SERVER :{BLACK}Gweinydd STR_NETWORK_CLIENT_LIST_SERVER_NAME :{BLACK}Enw +STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP :{BLACK}Enw'r gweinydd rydych yn chwarae arno +STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Newid enw eich gweinydd +STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Enw'r gweinydd +STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Gwelededd +STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}A yw pobl eraill yn gallu gweld eich gweinydd yn y rhestr gyhoeddus +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}God gwahoddiad STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Cod gwahoddiad i bobl eraill ymuno a'r gweinydd yma STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}Math cysylltiad STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}A yw eich gweinydd y gallu cael ei gyrraedd gan eraill (a sut) +STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Chwaraewr STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Enw +STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Eich enw chwaraewr +STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Newid eich enw chwaraewr STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Eich enw chwaraewr -STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Gweithredoedd gweinyddol i'w perfformio ar gyfer y cleient yma +STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Gweithredoedd gweinyddol i'w perfformio ar gyfer y gwestai yma STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Gweithredoedd gweinyddol i'r gwneud ar gyfer y cwmni yma STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Ymuno a'r cwmni yma STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Gyrru neges i'r chwaraewr yma STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Gyrru neges i bob chwaraewr yn y cwmni yma STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Anfon neges i bob gwyliwr +STR_NETWORK_CLIENT_LIST_SPECTATORS :Gwylwyr +STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Cwmni newydd) +STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Creu cwmni newydd ac ymuno â hi +STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Dyma chi +STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Dyma gweinydd y gêm +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} gwestai{P "" ""} - {NUM}/{NUM} cwmni{P "" ""} +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}Nifer y gwesteion sydd wedi eu cysylltu, nifer y cwmnïau ac uchafswm nifer y cwmnïau a ganiateir gan y gweinydd # Matches ConnectionType ###length 5 @@ -2312,6 +2524,12 @@ STR_NETWORK_ASK_RELAY_NO :{BLACK}Na STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Ia, y tro yma STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Ia, paid a gofyn eto +STR_NETWORK_ASK_SURVEY_CAPTION :Cymryd rhan mewn arolwg awtomatig? +STR_NETWORK_ASK_SURVEY_TEXT :A hoffech gymryd rhan yn yr arolwg awtomatig?{}Bydd OpenTTD yn darlledu arolwg pan yn gadael y gêm.{}Gallwch newid y gosodiad unrhyw bryd o dan "Dewisiadau Gêm". +STR_NETWORK_ASK_SURVEY_PREVIEW :Rhagolwg o'r gwybodaeth arolwg +STR_NETWORK_ASK_SURVEY_LINK :Am yr arolwg a phreifatrwydd +STR_NETWORK_ASK_SURVEY_NO :Na +STR_NETWORK_ASK_SURVEY_YES :Ia STR_NETWORK_SPECTATORS :Gwylwyr @@ -2340,22 +2558,26 @@ STR_NETWORK_CHAT_TO_COMPANY :[Tîm] i {STRIN STR_NETWORK_CHAT_CLIENT :[Preifat] {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_TO_CLIENT :[Preifat] To {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_ALL :[Pawb] {STRING}: {WHITE}{STRING} +STR_NETWORK_CHAT_EXTERNAL :[{3:STRING}] {0:STRING}: {WHITE}{1:STRING} STR_NETWORK_CHAT_OSKTITLE :{BLACK}teipiwch destun ar gyfer sgwrs rwydwaith # Network messages STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Ni ddaethpwyd o hyd i ddyfeisiau rhwydwaith, neu ni chafodd y gêm ei chrynhoi gyda ENABLE_NETWORK -STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Ni atebodd y gweinydd y cais +STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Ni atebodd y gweinydd y cais neu cafodd ei wrthod STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Doedd dim modd cysylltu oherwydd nid oedd y NewGRF yn cyfateb STR_NETWORK_ERROR_DESYNC :{WHITE}Methodd y cydamseru rhwng y rhwydwaith a'r gêm STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Collwyd cysylltiad rhwydwaith y gêm STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Doedd dim modd llwytho'r gêm a gadwyd STR_NETWORK_ERROR_SERVER_START :{WHITE}Methwyd a chychwyn y gweinydd STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Caewyd y cyswllt oherwydd gwall protocol +STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Nid yw eich enw chwaraewr wedi ei osod. Gall yr enw gael ei osod ar frig y ffenestr Amlchwaraewr +STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Nid yw eich enw gweinyd wedi ei osod. Gall yr enw gael ei osod ar frig y ffenestr Amlchwaraewr STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Nid y fersiwn y gwestai yn cyfateb i fersiwn y gweinydd STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Cyfrinair anghywir STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Mae'r gweinydd yn llawn STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Rydych chi wedi'ch gwahardd o'r gweinydd hwn STR_NETWORK_ERROR_KICKED :{WHITE}Cafoch chi eich cicio o'r gêm +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Rheswm: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Ni chaniateir twyllo ar y gweinydd hwn STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Roeddech yn gyrru gormod o orchmynion i'r gweinydd STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Fe gymeroch ormod o amser i fewnbynnu'r cyfrinair @@ -2388,6 +2610,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :ni dderbyniwyd STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :goramseriad cyffredinol STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :goramseru wrth lawrlwytho'r map STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :goramseru wrth brosesu'r map +STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :enw gwestai annilys # Network related errors STR_NETWORK_SERVER_MESSAGE :*** {1:STRING} @@ -2398,6 +2621,7 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Gêm wedi'i oed STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Gêm wedi'i oedi o hyd ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Gêm wedi'i oedi o hyd ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Gêm wedi'i oedi o hyd ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Gêm wedi'i oedi o hyd ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Gêm yn rhedeg eto ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :nifer chwaraewyr STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :cysylltu gwesteion @@ -2407,17 +2631,21 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :yn aros am ddiw STR_NETWORK_MESSAGE_CLIENT_LEAVING :wrthi'n gadael STR_NETWORK_MESSAGE_CLIENT_JOINED :*** Mae {STRING} wedi ymuno â'r gêm -STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** Mae {STRING} wedi ymuno a'r gêm (Gwestai #{2:NUM}) -STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** Mae {STRING} wedi ymuno â chwmni #{2:NUM} +STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** Mae {0:STRING} wedi ymuno a'r gêm (Gwestai #{2:NUM}) +STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** Mae {0:STRING} wedi ymuno â chwmni #{2:NUM} STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** Mae {STRING} wedi ymuno â'r gwylwyr -STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** Mae {STRING} wedi dechrau cwmni newydd (#{2:NUM}) -STR_NETWORK_MESSAGE_CLIENT_LEFT :*** Mae {STRING} wedi gadael y gêm ({2:STRING}) -STR_NETWORK_MESSAGE_NAME_CHANGE :*** Mae {STRING} wedi newid ei (h)enw i {STRING} +STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** Mae {0:STRING} wedi dechrau cwmni newydd (#{2:NUM}) +STR_NETWORK_MESSAGE_CLIENT_LEFT :*** Mae {0:STRING} wedi gadael y gêm ({2:STRING}) +STR_NETWORK_MESSAGE_NAME_CHANGE :*** Mae {STRING} wedi newid eu henw i {STRING} STR_NETWORK_MESSAGE_GIVE_MONEY :*** Rhoddodd {0:STRING} {2:CURRENCY_LONG} i {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Fe gaewyd y sesiwn gan y gweinydd STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Mae'r gweinydd yn ailgychwyn...{}Arhoswch... STR_NETWORK_MESSAGE_KICKED :*** Mae {STRING} wedi cael cic gan y gweinydd. Rheswm: ({STRING}) +STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Methwyd cofrestru'r gweinydd +STR_NETWORK_ERROR_COORDINATOR_REUSE_OF_INVITE_CODE :{WHITE}Mae gweinydd arall gyda'r un cod gwahoddiad wedi cofrestru ei un. Yn newid at math gêm "lleol". +STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}Nid yw eich gweinydd yn caniatáu cysylltiadau o bell +STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Ni fydd chwaraewyr eraill yn gallu cysylltu a'ch gweinydd # Content downloading window STR_CONTENT_TITLE :{WHITE}Llawrlwytho cynnwys @@ -2437,7 +2665,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Nid yw c STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Rydych yn gadael OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Mae'r termau ac amodau ar gyfer llawrlwytho cynnwys o wefannau allanolyn amrywio.{}Bydd yn rhaid i chi gyfeirio at y gwefannau allanol ar gyfer cyfarwyddiadau a sut i lwytho'r cynnwys yn OpenTTD.{}A ydych am barhau? STR_CONTENT_FILTER_TITLE :{BLACK}Hidlydd enw/tag: -STR_CONTENT_OPEN_URL :{BLACK}Gwefan +STR_CONTENT_OPEN_URL :{BLACK}Mynd i'r wefan STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Llwytho'r gwefan ar gyfer y cynnwys yma STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Llwytho i lawr STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Dechrau lwytho'r cynnwys a ddewiswyd i lawr @@ -2485,7 +2713,7 @@ STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES} # Content downloading error messages STR_CONTENT_ERROR_COULD_NOT_CONNECT :{WHITE}Methwyd â chysylltu i'r gweinydd cynnwys... -STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD :{WHITE}Methodd y llwytho i lawr... +STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD :{WHITE}Methwyd llawrlwytho... STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... dim modd ysgrifennu'r ffeil STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}Doedd dim modd datgywasgu'r ffeil @@ -2494,6 +2722,9 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}Mae Open STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Ia, llawrlwytho'r graffigau STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Na, gadael OpenTTD +STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}Methwyd lawrlwytho +STR_MISSING_GRAPHICS_ERROR :{BLACK}Methwyd lawrlwytho graffigau.{}Llawrlwythwch graffigau â llaw. +STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Gadael OpenTTD # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Dewisiadau Tryloywder @@ -2505,6 +2736,7 @@ STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Toglu tr STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Toglu tryloywder ar gyfer pontydd. Ctrl+Clic i gloi STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Toglu tryloywder ar gyfer adeiledau fel goleudai ac antenau. Ctrl+Clic i gloi STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Toglu tryloywder ar gyfer gwifrau. Ctrl+Clic i gloi +STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Toglu tryloywder ar gyfer testun llwytho a cost/incwm. Mae Ctrl+Clic yn cloi STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Gosod gwrthrychau'n anweledig yn hytrach nac yn dryloyw # Linkgraph legend window @@ -2520,6 +2752,10 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}gorlwythiedig # Linkgraph tooltip +STR_LINKGRAPH_STATS_TOOLTIP_MONTH :{BLACK}{CARGO_LONG} i'w gludo bob mis o {STATION} i {STATION} ({COMMA}% o'r gallu cludo){STRING} +STR_LINKGRAPH_STATS_TOOLTIP_MINUTE :{BLACK}{CARGO_LONG} i'w gludo bob munud o {STATION} i {STATION} ({COMMA}% o'r gallu cludo){STRING} +STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} i'w gludo'n ôl ({COMMA}% o'r gallu cludo) +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Amser teithio cyfartalog: {UNITS_DAYS_OR_SECONDS} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Amlygu ardal ddylanwad @@ -2529,6 +2765,8 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Peidio a STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Amlygu'r ardal fydd yn cael ei ddylanwadu STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Derbyn: {GOLD}{CARGO_LIST} STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Deunydd crai yn weddill: {GOLD}{CARGO_LIST} +STR_STATION_BUILD_INFRASTRUCTURE_COST_YEAR :{BLACK}Cost cynnal: {GOLD}{CURRENCY_SHORT}/blwyddyn +STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}Cost cynnal: {GOLD}{CURRENCY_SHORT}/cyfnod # Join station window STR_JOIN_STATION_CAPTION :{WHITE}Uno gorsaf @@ -2549,13 +2787,13 @@ STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Adeiladu Maglef STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Adeiladu trac rheilffordd. Mae Ctrl+Clic yn toglo clirio'r rheilffordd. Mae Shift yn dangos amcangyfrif o'r gost yn unig STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Adeiladu trac gan defnyddio'r modd Awtoreilffordd. Mae Ctrl+Clic yn clirio rheilffordd. Mae Shift yn dangos amcangyfrif o'r gost yn unig STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Adeiladu depo trenau (ar gyfer adeiladu a rhoi gwasanaeth i drenau). Mae Shift yn dangos amcangyfrif o'r gost yn unig -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Newid rheilffordd yn bwynt llwybro. Mae Ctrl yn galluogi uno pwyntiau llwybro, tra fod Shift yn toglo adeiladu/dangos amcangyfrif o'r gost +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Newid rheilffordd yn bwynt llwybro. Ctrl+Clic i ddewis pwynt llwybro i'w uno. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Adeiladu gorsaf reilffordd. Mae Ctrl+Clic yn dewis gorsaf arall i uno. Mae Shift yn dangos amcangyfrif o'r gost yn unig STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Adeiladu signalau rheilffordd. Mae Ctrl+Clic yn adeiladu signalau arddull amgen{}Mae Clic+Llusgo'n llenwi'r trac a ddewisir gyda signalau gyda'r bylchau a ddewiswyd. Mae Ctrl+Clic+Llusgo yn llenwi signalau hyd y gyffordd, gorsaf neu signal nesaf. Mae Shift yn dangos amcangyfrif o'r gost yn unig STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Adeiladu pont reilffordd. Mae Shift dangos amcangyfrif o'r gost yn unig STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Adeiladu twnnel rheilffordd. Mae Shift yn dangos amcangyfrif o'r gost yn unig -STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Toglu adeiladu/tynnu ar gyfer traciau, signalau, a pwyntiau llwybro. Wrth ddal Ctrl, caiff cledrau pwyntiau llwybro a gorsafoedd eu tynnu hefyd -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Trosi/Diweddaru math y rheilffordd. Mae Shift yn toglo adeiladu/amcangyfrif y gost +STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Toglu adeiladu/tynnu ar gyfer traciau, signalau, a pwyntiau llwybro. Ctrl+Clic i dynnu pwyntiau llwybro a gorsafoedd hefyd +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Trosi/Diweddaru math y rheilffordd. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig STR_RAIL_NAME_RAILROAD :Rheilffordd STR_RAIL_NAME_ELRAIL :rheilffordd drydan @@ -2584,13 +2822,15 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Adeiladu STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Dewiswch y dosbarth o orsaf i'w dangos STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Dewiswch y math o orsaf i'w hadeiladu -STR_STATION_CLASS_DFLT :Gorsaf Ddiofyn +STR_STATION_CLASS_DFLT :Rhagosodiad STR_STATION_CLASS_DFLT_STATION :Gorsaf rhagosodedig +STR_STATION_CLASS_DFLT_ROADSTOP :Gorsaf ffordd rhagosodedig STR_STATION_CLASS_WAYP :Pwyntiau llwybro STR_STATION_CLASS_WAYP_WAYPOINT :Pwynt llwybro rhagosodedig # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Dewis Signal +STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Toglu dangos mathau signal uwch STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Signal Bloc (semaffor){}Dyma'r math mwyaf sylfaenol o signal, sy'n caniatáu un trên yn unig ymhob bloc ar unrhyw adeg STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Signal Mynediad (semaffor){}Gwyrdd cyhyd y bod un neu fwy o signalau gadael yn wyrdd yn yr ardal nesaf o drac. Dangosir coch fel arall STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Signal Gadael (semaffor){}Yn ymddwyn fel signal bloc, ond yn angenrheidiol ar gyfer gweithredu'r lliw cywir ar signalau mynediad a chyfun @@ -2603,7 +2843,7 @@ STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Signal G STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Signal Cyfun (trydan){}Mae'r signal cyfun yn gweithredu fel signal mynediad ac fel signal gadael. Mae hyn yn eich galluogi i adeiladu "coed" o ragsignalau STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Signal Llwybr (trydan){}Mae signal llwybr yn caniatáu i fwy nag un trên symud i mewn i floc signal ar yr un pryd, os oes modd i'r trên gofrestru llwybr clir at fan aros diogel. Gellir pasio signalau llwybro cyffredin o'r ochr gefn STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Signal Llwybr Unffordd (trydan){}Mae signal llwybr yn caniatáu i fwy nag un trên symud i mewn i floc signal ar yr un pryd, os oes modd i'r trên gofrestru llwybr clir at fan aros diogel. Ni ellir pasio signalau llwybro unffordd o'r ochr gefn -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Trosi Signal{}Pan fydd wedi'i ddewis, bydd clicio ar signal sy'n bodoli yn ei drosi i'r math ac amrywiad a ddewiswyd, Mae Shift+Clic yn dangos amcangyfrif o'r gost +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Trosi Signal{}Clicio ar signal sy'n bodoli i'w drosi i'r math ac amrywiad a ddewiswyd, Mae Shift+Clic yn dangos amcangyfrif o'r gost trosi STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Dwysedd llusgo signalau STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Cynyddu dwysedd llusgo signalau STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Cynyddu amlder y signalau wrth lusgo @@ -2612,6 +2852,9 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Cynyddu STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Dewiswch Bont Rheilffordd STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Dewiswch Bont Ffordd STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Dewis pont - cliciwch ar y eich dewis i'w hadeiladu +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_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_BRIDGE_NAME_SUSPENSION_STEEL :Crog, Dur STR_BRIDGE_NAME_GIRDER_STEEL :Hytrawst, Dur @@ -2627,20 +2870,20 @@ STR_BRIDGE_TUBULAR_SILICON :Tiwbaidd, Silic STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Adeiladu Ffyrdd STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Adeiladu Tramffordd STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Adeiladu darn o ffordd. Mae Ctrl+Clic yn toglo clirio'r ffordd. Mae Shift yn dangos amcangyfrif o'r gost yn unig -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Adeiladu darn tramffordd. Mae Ctrl yn toglo adeiladu/codi tramffordd, tra fo Shift yn toglo adeiladu/dangos amcangyfrif o'r gost +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Adeiladu darn tramffordd. Ctrl+Clicio i godi darn tramffordd. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Adeiladu darnau ffordd gan ddefnyddio'r modd Awtoffordd. Mae Ctrl yn toglo adeiladu/clirio ffordd, tra fo Shift yn toglo adeiladu/dangos amcangyfrif o'r gost yn unig STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Adeiladu darn tramffordd gan ddefnyddio'r modd Awtoffordd. Mae Ctrl yn clirio tramffordd. Pwyswch Shift hefyd i ddangos amcangyfrif o'r gost yn unig STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Adeiladu depo cerbydau ffordd (ar gyfer adeiladu a gwasanaethu cerbydau ffordd). Mae Shift yn dangos amcangyfrif o'r gost yn unig -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Adeiladu garej cerbyd tram (ar gyfer adeiladu a gwasanaethu cerbydau tram). Mae Shift yn toglo adeiladu/dangos amcangyfrif o'r gost +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Adeiladu depo cerbyd tram (ar gyfer prynu a gwasanaethu cerbydau ). Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Adeiladu gorsaf fysiau. Mae Ctrl+Clic yn dewis gorsaf arall i uno. Mae Shift yn dangos amcangyfrif o'r gost yn unig STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Adeiladu gorsaf tramiau teithwyr. Mae Ctrl+Clic yn dewis gorsaf arall i uno. Mae Shift yn dangos amcangyfrif o'r gost un unig STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Adeiladu bae llwytho lorïau. Mae Ctrl+Clic yn dewis gorsaf arall i uno. Mae Shift yn dangos amcangyfrif o'r gost yn unig STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Adeiladu gorsaf tramiau nwyddau. Mae Ctrl+Clic yn dewis gorsaf arall i uno. Mae Shift i ddangos amcangyfrif o'r gost yn unig STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Gweithredu/dadweithredu ffyrdd un-ffordd STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Adeiladu pont ffordd. Mae Shift yn dangos amcangyfrif o'r gost yn unig -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Adeiladu pont tramffordd. Mae Shift yn toglo adeiladu/amcangyfrif y gost +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Adeiladu pont tramffordd. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Adeiladu twnnel ffordd. Mae Shift yn dangos amcangyfrif o'r gost yn unig -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Adeiladu twnel tramffordd. Mae Shift yn toglo adeiladu/amcangyfrif y gost +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Adeiladu twnel tramffordd. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}toglu adeiladu/clirio ar gyfer adeiladu ffyrdd STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Toglu adeiladu/dileu ar gyfer adeiladu tramffordd STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Trosi/Uwchraddio'r math o ffordd. Pwyswch Shift hefyd i ddangos amcangyfrif o'r gost yn unig @@ -2668,14 +2911,14 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Dewiswch # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Adeiladu Camlesi STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Camlesi -STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Adeiladu camlesi. Mae Shift yn toglo adeiladu/dangos amcangyfrif o'r gost -STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Adeiladu lociau. Mae Shift yn toglo adeiladu/amcangyfrif y gost -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Adeiladu depo llongau (ar gyfer adeiladu a gwasanaethu llongau). Mae Shift yn toglo adeiladu/dangos amcangyfrif o'r gost -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Adeiladu doc llongau. Mae Ctrl yn galluogi uno gorsafoedd, tra fo Shift yn toglo adeiladu/dangos amcangyfrif o'r gost -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Gosod bwï a ellir ei ddefnyddio fel pwynt llwybro. Mae Shift yn toglo adeiladu/amcangyfrif y gost -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Adeiladu traphont. Mae Shift yn toglo adeiladu/amcangyfrif y gost -STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Pennu ardal dŵr.{}Creu camlas, oni bai fod Ctrl yn cael ei ddal i lawr ar lefel y môr, pan fydd yn boddi'r ardal o'i gwmpas -STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Creu afonydd +STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Adeiladu camlesi. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig +STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Adeiladu lociau. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Adeiladu depo llongau (ar gyfer adeiladu a gwasanaethu llongau). Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Adeiladu doc llongau. Ctrl+Clic i ddewis gorsaf arall i ymuno. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Gosod bwï a ellir ei ddefnyddio fel pwynt llwybro. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Adeiladu traphont. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig +STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Adeiladu camlas. Ctrl+Clic ar lefel y môr i'w foddi efo dŵr môr yn hytrach na chreu camlas +STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Creu afonydd. Ctrl+Clic i ddewis yn ddeiagonal # Ship depot construction window STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Cyfeiriad Depo Llong @@ -2713,14 +2956,14 @@ STR_STATION_BUILD_NOISE :{BLACK}Swn a gy # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Tirweddu -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Gostwng cornel o dir. Mae llusgo'n gostwng y gornel gyntaf a ddewisir ac yna'n lefelu'r ardal a ddewisir i uchder newydd y gornel. Mae Ctrl yn dewis ardal yn ddeiagonal, tra fo Shift yn toglo adeiladu/dangos amcangyfrif o'r gost -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Codi cornel o dir. Mae llusgo'n codi'r gornel gyntaf a ddewisir ac yna'n lefelu'r ardal a ddewisir i uchder newydd y gornel. Mae Ctrl yn dewis ardal yn ddeiagonal, tra fo Shift yn toglo adeiladu/dangos amcangyfrif o'r gost -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Gwastatáu ardal o dir i uchder y gornel gyntaf a ddewisir. Mae Ctrl yn dewis ardal yn ddeiagonal, tra fo Shift yn toglo adeiladu/dangos amcangyfrif o'r gost -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Prynu tir ar gyfer defnydd yn y dyfodol. Mae Ctrl yn dewis ardal yn ddeiagonal, tra fo Shift yn toglo adeiladu/amcangyfrif y gost +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Gostwng cornel o dir. Ctrl+Llusgo i ostwng y gornel gyntaf a ddewisir ac yna'n lefelu'r ardal a ddewisir i uchder newydd y gornel. Ctrl+Clic+Llusgo i ddewis ardal yn ddeiagonal. Hefyd Shift i ddangos amcangyfrif o'r gost yn unig +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Codi cornel o dir. Ctrl+Llusgo i godi'r gornel gyntaf a ddewisir ac yna'n lefelu'r ardal a ddewisir i uchder newydd y gornel. Ctrl+Clic+Llusgo i ddewis ardal yn ddeiagonal. Hefyd Shift i ddangos amcangyfrif o'r gost yn unig +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Gwastatáu ardal o dir i uchder y gornel gyntaf a ddewisir. Ctrl+Clic+Llusgo i ddewis ardal yn ddeiagonal. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Prynu tir ar gyfer defnydd yn y dyfodol. Ctrl+Clic+Llusgo i ddewis ardal yn ddeiagonal. Hefyd Shift i ddangos amcangyfrif o'r gost yn unig # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Dewis Gwrthrych -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Dewisiwch wrthrych i'w hadeiladu. Mae Shift yn toglo adeiladu/dangor amcangyfrif o'r gost +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Dewisiwch wrthrych i'w hadeiladu. Ctrl+Clic+Llusgo i dewis yr ardal yn ddeiagonal. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Dewisiwch dosbarth y gwrthrych i'w hadeiladu STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Rhagolwg o'r gwrthrych STR_OBJECT_BUILD_SIZE :{BLACK}Maint: {GOLD}{NUM} x {NUM} teil @@ -2732,7 +2975,7 @@ STR_OBJECT_CLASS_TRNS :Tyrrau Darlledu STR_PLANT_TREE_CAPTION :{WHITE}Coed STR_PLANT_TREE_TOOLTIP :{BLACK}Dewiswch y math o goeden i'w phlannu. Os oes coeden yno'n barod, bydd hyn yn plannu mwy o goed o fath ar hap STR_TREES_RANDOM_TYPE :{BLACK}Coed o fath ar hap -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Gosod coed o fath ar hap. Mae Shift yn toglo adeiladu/dangos amcangyfrif cost +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Gosod coed o fath ar hap. Ctrl+Clic+Llusgo i ddewis yr ardal yn ddeiagonal. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Coed ar hap STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plannu coed ar hap ar draws y tirwedd STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Arferol @@ -2745,7 +2988,7 @@ STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plannu c # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Cynhyrchu Tirwedd STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Gosod ardaloedd creigiog ar y tirwedd -STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Pennu ardal anialwch.{}Dal CTRL i gael gwared ohono +STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Pennu ardal anialwch.{}Ctrl+Clic i dynnu'r ardal anialwch STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Cynyddu'r arwynebedd tir i'w godi neu ostwng STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Lleihau'r arwynebedd tir i'w godi neu ostwng STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Cynhyrchu Tir ar Hap @@ -2759,11 +3002,13 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Ydych ch # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Cynhyrchu Trefi STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Tref Newydd -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Sefydlu tref newydd. Mae Shift+Clic yn dangos amcangyfrif o'r gost +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Sefydlu tref newydd. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Tref ar hap STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Sefydlu tref mewn safle ar hap STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Llawer o drefi ar hap STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Gorchuddio'r map gyda threfi wedi'i lleoli ar hap +STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Ehangu pob tref +STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Gwneud i bob tref dyfu ychydig STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Enw tref: STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Rhowch enw'r dref @@ -2789,7 +3034,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}Grid 3x3 STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Ar hap # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Ariannu diwydiant newydd +STR_FUND_INDUSTRY_CAPTION :{WHITE}Ariannu Diwydiant STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Dewiswch ddiwydiant o'r rhestr STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Creu diwydiannau ar hap STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Gorchuddio'r map gyda diwydiannau wedi'i lleoli ar hap @@ -2799,17 +3044,20 @@ STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Côst: { STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Mwynchwilio STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Adeiladu STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Ariannu +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Dileu pob diwydiant +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Dileu pob diwydiant sydd ar y map ar hyn o bryd +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Dileu pob diwydiant STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Ydych chi'n siŵr eich bod eisiau dileu pob diwydiant? # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Cadwyn ddiwydiant ar gyfer diwydiant {STRING} -STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Cadwyn ddiwydiant ar gyfer llwythi {STRING} +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Cadwyn Diwydiant - {STRING} +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Cadwyn llwythi - {STRING} STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Diwydiannau'n creu STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Diwydiannau'n derbyn STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Tai STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Cliciwch ar ddiwydiant i weld ei gyflenwyr a chwsmeriaid STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Cliciwch ar math llwyth i weld ei gyflenwyr a'i chwsmeriaid -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Dangos cadwyn +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Cadwyn Diwydiant STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Dangos diwydiannau sy'n cyflenwi a derbyn llwythi STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Cyfuno a'r map bychan STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Dewis y diwydiannau a ddangosir ar y map bychan hefyd @@ -2820,6 +3068,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Dewis y # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Gwybodath Ardal Tir +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Canoli brif olygfa ar leoliad y teil. Mae Ctrl+Clic yn agor ffenestr olygfa newydd ar leoliad y teil STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Cost i'w glirio: {LTBLUE}Amherthnasol STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Cost i'w glirio: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Elw o'i glirio: {LTBLUE}{CURRENCY_LONG} @@ -2830,6 +3079,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Perchenn STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Perchennog rheilffordd: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Awdurdod Lleol: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Dim +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Cyfeirnodau: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Indecs teil: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Adeiladwyd/adnewyddwyd: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Dosbarth gorsaf: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Math gorsaf: {LTBLUE}{STRING} @@ -2841,8 +3092,10 @@ STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Llwythi STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Math rheilffordd: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Math lôn: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Math tram: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Terfyn cyflymder rheilffordd: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Terfyn cyflymder ffordd: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Terfyn cyflymder tram: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Creigiau @@ -2894,7 +3147,7 @@ STR_LAI_TREE_NAME_CACTUS_PLANTS :Planhigion Cact STR_LAI_STATION_DESCRIPTION_RAILROAD_STATION :Gorsaf reilffordd STR_LAI_STATION_DESCRIPTION_AIRCRAFT_HANGAR :Awyrendy STR_LAI_STATION_DESCRIPTION_AIRPORT :Maes awyr -STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Ardal llwytho lorïau +STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Gorsaf lorïau STR_LAI_STATION_DESCRIPTION_BUS_STATION :Gorsaf fysiau STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :Doc llongau STR_LAI_STATION_DESCRIPTION_BUOY :Bwï @@ -3024,6 +3277,7 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: STR_SAVELOAD_FILTER_TITLE :{BLACK}Hidlydd: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Trosysgrifennu Ffeil STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Ydych chi'n siwr eich bod chi eisiau trosysgrifennu'r ffeil bresennol? +STR_SAVELOAD_DIRECTORY :{STRING} (Cyfeiriadur) STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Plygell rhiant) STR_SAVELOAD_OSKTITLE :{BLACK}Rhowch enw ar gyfer y gêm a gadwyd @@ -3034,24 +3288,39 @@ STR_MAPGEN_MAPSIZE :{BLACK}Maint Ma STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Dewis maint y map mewn teiliau. Bydd y nifer o deiliau sydd ara gael ychydig yn llai STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Nifer trefi: +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Dewis dwysedd y trefi, neu rif addasedig STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Enwau Trefi STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Dewis arddull yr enwau trefi STR_MAPGEN_DATE :{BLACK}Dyddiad: +STR_MAPGEN_DATE_TOOLTIP :{BLACK}Dewis dyddiad dechrau STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Nifer diwydiannau: +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :BLACK}Dewis dwysedd y diwydiannau, neu rif addasedig +STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Copa uchaf: +STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Dewis y copa uchaf y bydd y gêm yn ceisio ei greu, mesurwyd o lefel y môr +STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Cynyddu uchder uchafsymol y copa uchaf ar y map o un +STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Lleihau uchder uchafsymol y copa uchaf ar y map o un STR_MAPGEN_SNOW_COVERAGE :Gorchuddiad eira: +STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Cynyddu gorchudd eira o 10 y cant +STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Lleihau gorchudd eira o 10 y cant +STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_DESERT_COVERAGE :{BLACK}Gorchudd anialwch: STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}Cynyddu gorchudd anialwch o 10 y cant STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Lleihau gorchudd anialwch o 10 y cant STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Math Tirwedd: STR_MAPGEN_SEA_LEVEL :{BLACK}Lefel y Môr: +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Dewis lefel y môr STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Afonydd: STR_MAPGEN_SMOOTHNESS :{BLACK}Llyfnder: STR_MAPGEN_VARIETY :{BLACK}Dosbarthiad amrywiaeth: STR_MAPGEN_GENERATE :{WHITE}Cynhyrchu +STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Creu'r byd a dechrau OpenTTD! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Gosodiadau NewGRF -STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Dangos gosodiadau NewGRF +STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Agor gosodiadau NewGRF +STR_MAPGEN_AI_SETTINGS :{BLACK}Gosodiadau AI +STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Agor gosodiadau AI STR_MAPGEN_GS_SETTINGS :{BLACK}Gosodiadau sgript gêm +STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Agor gosodiadau sgript gêm ###length 21 STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Saesneg (Gwreiddiol) @@ -3078,6 +3347,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Catalanaidd # Strings for map borders at game generation STR_MAPGEN_BORDER_TYPE :{BLACK}Ymylon mapiau: +STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Dewis ffiniau byd y gêm STR_MAPGEN_NORTHWEST :{BLACK}Gog. Orllewin STR_MAPGEN_NORTHEAST :{BLACK}Gog. Ddwyrain STR_MAPGEN_SOUTHEAST :{BLACK}De Ddwyrain @@ -3090,9 +3360,13 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Â Llaw STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Cylchdro Map Uchder: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Enw'r Map Uchder +STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}Enw'r ffeil llun map uchder STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Maint: +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}Maint y llun ffynhonnell map uchder. Ar gyfer y canlyniadau gorau, dylai pob ymyl gyd-fynd â hyd ymyl map sydd ar gael yn OpenTTD, fel 256, 512, 1024 ayyb. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} +STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Uchder brig a ddymunir +STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Copa uchaf STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Gorchuddiad eira (mewn %) STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Gorchudd anialwch (mewn %) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Newid y flwyddyn gychwyn @@ -3103,6 +3377,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Tir Gwas STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Cynhyrchu Tir Gwastad STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Tir ar hap STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}uchder tir gwastad: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Dewis uchder y tir uwchben lefel y môr STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Symud uchder tir gwastad un yn uwch STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Symud uchder tir gwastad un yn is @@ -3131,7 +3406,7 @@ STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Gwybodae STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Ffeiliau NewGRF gweithredol STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Ffeiliau NewGRF anweithredol STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}Dewis rhagosodiad: -STR_NEWGRF_FILTER_TITLE :{ORANGE}Llinyn hidlo: +STR_NEWGRF_FILTER_TITLE :{ORANGE}Hidlydd: STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}Llwytho'r rhagosodiad a ddewiswyd STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}Cadw rhagosodiad STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP :{BLACK}Cadw'r rhestr gyfredol fel rhagosodiad @@ -3171,6 +3446,7 @@ STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Rhagosodiad (D) STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Gwaddol (W) STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Gwaddol (W) / 32 did y picsel STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Paramedrau: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Dim STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Dim gwybodaeth newydd ar gael STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Ni ddarganfuwyd ffeil sy'n cyfateb @@ -3188,6 +3464,7 @@ STR_SAVE_PRESET_SAVE :{BLACK}Cadw STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Cadw'r rhagosodiad i'r enw a ddewiswyd # NewGRF parameters window +STR_BASEGRF_PARAMETERS_CAPTION :{WHITE}Newid paramedrau graffeg sylfaenol STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Newid paramedrau NewGRF STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Cau STR_NEWGRF_PARAMETERS_RESET :{BLACK}Ailosod @@ -3204,6 +3481,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Arolygu' STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} yn {HEX} STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Gwrthrych STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Math rheilffordd +STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Math ffordd STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Paramedr newidyn NewGRF 60+x (hecsaddigidol) @@ -3219,7 +3497,10 @@ STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Cynrychi STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Symud y corlun, gan newid yr atredau X ac Y. Mae Ctrl+Clic yn symud y corlun wyth uned ar y tro ###length 2 +STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Canoli dodiad +STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Canol corlun +STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Croes STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Ailosod perthyniad STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Ailosod y dodiadau perthynol @@ -3236,16 +3517,17 @@ STR_NEWGRF_ERROR_MSG_WARNING :{RED}Rhybudd: { STR_NEWGRF_ERROR_MSG_ERROR :{RED}Gwall: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Angheuol: {SILVER}{STRING} STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Mae'r NewGRF "{STRING}" wedi dychwelyd gwall angheuol:{}{STRING} +STR_NEWGRF_ERROR_POPUP :{WHITE}Mae'r NewGRF "{STRING}" wedi dychwelyd gwall:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :Ni fydd {1:STRING} yn gweithio gyda'r fersiwn o TTDPatch yr adroddir gan OpenTTD -STR_NEWGRF_ERROR_DOS_OR_WINDOWS :Mae {1:STRING} ar gyfer y fersiwn {STRING} o TTD -STR_NEWGRF_ERROR_UNSET_SWITCH :Mae {1:STRING} wedi ei gynllunio i gael ei ddefnyddio gyda {STRING} -STR_NEWGRF_ERROR_INVALID_PARAMETER :Paramedr Annilys ar gyfer {1:STRING}: paramedr {STRING} ({NUM}) -STR_NEWGRF_ERROR_LOAD_BEFORE :Rhaid i {1:STRING} fod wedi ei lwytho cyn {STRING} -STR_NEWGRF_ERROR_LOAD_AFTER :Rhaid i {1:STRING} fod wedi ei lwytho ar ôl {STRING} -STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :Mae {1:STRING} angen OpenTTD fersiwn {STRING} neu'n well +STR_NEWGRF_ERROR_DOS_OR_WINDOWS :Mae {1:STRING} ar gyfer y fersiwn {2:STRING} o TTD +STR_NEWGRF_ERROR_UNSET_SWITCH :Mae {1:STRING} wedi ei gynllunio i gael ei ddefnyddio gyda {2:STRING} +STR_NEWGRF_ERROR_INVALID_PARAMETER :Paramedr Annilys ar gyfer {1:STRING}: paramedr {2:STRING} ({NUM}) +STR_NEWGRF_ERROR_LOAD_BEFORE :Rhaid i {1:STRING} fod wedi ei lwytho cyn {2:STRING} +STR_NEWGRF_ERROR_LOAD_AFTER :Rhaid i {1:STRING} fod wedi ei lwytho ar ôl {2:STRING} +STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :Mae {1:STRING} angen OpenTTD fersiwn {2:STRING} neu'n well STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :y ffeil GRF y gynllunio i gyfieithu STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Mae gormod o NewGRFau wedi'u llwytho -STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Gallai llwytho {1:STRING} fel NewGRF statig gyda {STRING} achosi dadsyncroneiddio +STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Gallai llwytho {1:STRING} fel NewGRF statig gyda {2:STRING} achosi dadsyncroneiddio STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Corlun annisgwyliedig (corlun {3:NUM}) STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Priodwedd Gweithred 0 anhysbys {4:HEX} (corlun {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Ceisio defnyddio ID annilys (corlun {3:NUM}) @@ -3324,13 +3606,16 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Rhowch e STR_TOWN_DIRECTORY_CAPTION :{WHITE}Trefi STR_TOWN_DIRECTORY_NONE :{ORANGE}- Dim - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Enwau trefi - cliciwch ar enw tref i ganoli'r brif olygfa ar y dref. Mae Ctrl+Clic yn agor ffenest golwg newydd ar leoliad y dref +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Dinas){BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Enwau trefi - cliciwch ar enw tref i ganoli'r brif olygfa ar y dref. Ctrl+Clic i agor ffenest golwg newydd ar leoliad y dref STR_TOWN_POPULATION :{BLACK}Poblogaeth y Byd: {COMMA} # Town view window STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Dinas) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Poblogaeth: {ORANGE}{COMMA}{BLACK} Tai: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} mis diwethaf: {ORANGE}{COMMA}{BLACK} mwyaf: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}{CARGO_LIST} munud olaf: {ORANGE}{COMMA}{BLACK} mwyaf: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Nwyddau angenrheidiol ar gyfer tyfiant y dref: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{RED}Angen {ORANGE}{STRING} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} ei angen yn y gaeaf @@ -3341,8 +3626,8 @@ STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Tref yn STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Tref yn tyfu bob {ORANGE}{UNITS_DAYS_OR_SECONDS} (wedi ei ariannu) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}{RED}Nid{BLACK} yw'r tref yn tyfu STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Uchafswm swn mewn trefi: {ORANGE}{COMMA}{BLACK} uchafswm: {ORANGE}{COMMA} -STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Canoli'r prif olygfa ar y dref. Mae Ctrl+Clic yn agor ffenest golwg newydd ar leoliad y dref -STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Awdurdod lleol +STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Canoli'r prif olygfa ar y dref. Ctrl+Clic i agor ffenest golwg newydd ar leoliad y dref +STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Awdurdod Lleol STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Dangos gwybodaeth am yr awdurdod lleol STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}newid enw'r dref @@ -3355,6 +3640,8 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Ailenwi Tref # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Awdurdod lleol {TOWN} +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Parth +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Dangos parth o fewn ffiniau awdurdod lleol STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Graddfeydd cwmnïau lleol: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY}{COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Gweithredoedd posib: @@ -3374,11 +3661,15 @@ STR_LOCAL_AUTHORITY_ACTION_BRIBE :Llwgrwobrwyo aw ###next-name-looks-similar STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Dechrau ymgyrch hysbyseb bach yn yr ardal, er mwyn denu mwy o deithwyr a llwythi i'ch gorsafoedd.{}Mae'n rhoi hwb dros-dro i sgôr gorsafoedd mewn radiws bach o amgylch canol y dref{}{POP_COLOUR}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Dechrau ymgyrch hysbyseb gymhedrol yn yr ardal, er mwyn denu mwy o deithwyr a llwythi i'ch gorsafoedd.{}Mae'n rhoi hwb dros-dro i sgôr gorsafoedd mewn radiw gymhedrol o amgylch canol y dref{}{POP_COLOUR}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Dechrau ymgyrch hysbyseb gymhedrol yn yr ardal, er mwyn denu mwy o deithwyr a llwythi i'ch gorsafoedd.{}Mae'n rhoi hwb dros-dro i sgôr gorsafoedd mewn radiws gymhedrol o amgylch canol y dref{}{POP_COLOUR}Cost: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Dechrau ymgyrch hysbyseb fawr yn yr ardal, er mwyn denu mwy o deithwyr a llwythi i'ch gorsafoedd.{}Mae'n rhoi hwb dros-dro i sgôr gorsafoedd mewn radiws mawr o amgylch canol y dref{}{POP_COLOUR}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Ariannu ail-adeiladu'r rhwydwaith ffordd drefol.{}Bydd yn achosi tarfu sylweddol i drafnidiaeth ffordd am hyd at 6 mis.{}{POP_COLOUR}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}Ariannu ail-adeiladu'r rhwydwaith ffordd drefol.{}Bydd yn achosi tarfu sylweddol i drafnidiaeth ffordd am hyd at 6 munud.{}{POP_COLOUR}Cost: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW} Adeiladu cerflun er clod eich cwmni.{}Mae'n rhoi heb parhaol i sgôr gorsagoeddyn y dref yma.{}{POP_COLOUR}Cost: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW} Ariannu adeiladu adeiladau masnachol newydd yn y dref.{}Mae'n rhoi heb dros-dro i tyfiant tref yn y dref yma.{}{POP_COLOUR}Côst: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Llwgrwobrwyo'r awdurdod lleol i wella'ch gradd, ond byddwch mewn perygl o dderbyn côsb sylweddol os cewch chi'ch dal.{}{POP_COLOUR}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Prynu hawliau cludiant cyfyngol mewn tref am 12 mis.{}Nid fydd awdurdodau'r dref yn caniatáu i deithwyr a chargo ddefnyddio gorsafoedd eich cystadleuwyr. Bydd llwgrwobr llwyddiannus yn diddymu'r gontract yma.{}{POP_COLOUR}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Prynu hawliau cludiant cyfyngol mewn tref am 12 munud.{}Nid fydd awdurdodau'r dref yn caniatáu i deithwyr a chargo ddefnyddio gorsafoedd eich cystadleuwyr. Bydd llwgrwobr llwyddiannus yn diddymu'r gontract yma.{}{POP_COLOUR}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Llwgrwobrwyo'r awdurdod lleol i wella'ch gradd a gorffen cyfnod hawliau cyfyngol cystadleuwr, gyda'r perygl o dderbyn cosb sylweddol os y cewch eich dal.{}{POP_COLOUR}Cost: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}Amcanion {COMPANY} @@ -3428,7 +3719,7 @@ STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_NONE :{ORANGE}- Dim - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Gwasanaethau sydd eisoes yn derbyn cymhorthdal: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} o {STRING} i {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) -STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Cliciwch ar y gwasanaeth i ganoli'r olygfa ar y diwydiant/tref. Mae Ctrl+Clic yn agor ffenest golwg newydd ar leoliad y diwydiant/tref +STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Cliciwch ar y gwasanaeth i ganoli'r olygfa ar y diwydiant/tref. Ctrl+Clic i agor ffenest golwg newydd ar leoliad y diwydiant/tref STR_SUBSIDIES_OFFERED_EXPIRY_DATE :erbyn {DATE_SHORT} STR_SUBSIDIES_OFFERED_EXPIRY_TIME :o fewn {UNITS_MONTHS_OR_MINUTES} STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :tan {DATE_SHORT} @@ -3437,6 +3728,7 @@ STR_SUBSIDIES_SUBSIDISED_EXPIRY_TIME :{UNITS_MONTHS_O # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Llyfr Hanes STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Llyfr Hanes Bydol +STR_STORY_BOOK_SPECTATOR :Llyfr Hanes Bydol STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Tudalen {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Neidio i dudalen benodol dwy ei ddewis o'r cwymplen yma. @@ -3447,14 +3739,20 @@ STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Mynd i'r STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Cyfeiriad amcan annilys # Station list window -STR_STATION_LIST_TOOLTIP :{BLACK}Enwau gorsafoedd - cliciwch ar enw i ganoli'r brif olygfa ar yr orsaf. Mae Ctrl+Clic yn agor ffenest golwg newydd ar leoliad yr orsaf -STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Daliwch CTRL i ddewis mwy nag un eitem +STR_STATION_LIST_TOOLTIP :{BLACK}Enwau gorsafoedd - cliciwch ar enw i ganoli'r brif olygfa ar yr orsaf. Ctrl+Clic i agor ffenest golwg newydd ar leoliad yr orsaf +STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Ctrl+Clic i ddewis mwy nag un eitem STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} Gorsaf STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- Dim - STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Dewis pob cyfleuster STR_STATION_LIST_CARGO_FILTER_ALL_AND_NO_RATING :Bob math cargo a dim graddfa +STR_STATION_LIST_CARGO_FILTER_MULTIPLE :Mathau cargo lluosog +STR_STATION_LIST_CARGO_FILTER_NO_CARGO_TYPES :Dim mathau cargo +STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :Dim ond dim safon cargo +STR_STATION_LIST_CARGO_FILTER_SELECT_ALL :Dewis pob a dim gradd +STR_STATION_LIST_CARGO_FILTER_NO_RATING :Dim safon cargo +STR_STATION_LIST_CARGO_FILTER_EXPAND :Dangos mwy... # Station view window STR_STATION_VIEW_CAPTION :{WHITE}{STATION} {STATION_FEATURES} @@ -3507,7 +3805,7 @@ STR_CARGO_RATING_VERY_GOOD :Da Iawn STR_CARGO_RATING_EXCELLENT :Gwych STR_CARGO_RATING_OUTSTANDING :Rhagorol -STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Canoli'r brif olygfa ar leoliad yr orsaf. Mae Ctrl+Clic yn agor ffenest golwg newydd ar leoliad yr orsaf +STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Canoli'r brif olygfa ar leoliad yr orsaf. Ctrl+Clic i agor ffenest golwg newydd ar leoliad yr orsaf STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Newid enw'r orsaf STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Dangos pob trên sydd â'r orsaf hon yn eu hamserlen @@ -3522,9 +3820,9 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Rhwystro # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} -STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Canoli'r brif olygfa ar leoliad y pwynt llwybro. Mae Ctrl+Clic yn agor ffenest olygfa newydd ar leoliad y pwynt llwybro +STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Canoli'r brif olygfa ar leoliad y pwynt llwybro. Ctrl+Clic i agor ffenest olygfa newydd ar leoliad y pwynt llwybro STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Newid enw pwynt llwybro -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Canoli'r brif olygfa ar leoliad y bwï. Mae Ctrl+Clic yn agor ffenestr olygfa newydd ar leoliad y bwï +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Canoli'r brif olygfa ar leoliad y bwï. Ctrl+Clic i agor ffenestr olygfa newydd ar leoliad y bwï STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Newid enw bwï STR_EDIT_WAYPOINT_NAME :{WHITE}Golygu enw pwynt llwybro @@ -3532,8 +3830,11 @@ STR_EDIT_WAYPOINT_NAME :{WHITE}Golygu e # Finances window STR_FINANCES_CAPTION :{WHITE}Cyllid {COMPANY}{BLACK}{COMPANY_NUM} STR_FINANCES_YEAR :{WHITE}{NUM} +STR_FINANCES_YEAR_CAPTION :{WHITE}Blwyddyn +STR_FINANCES_PERIOD_CAPTION :{WHITE}Cyfnod ###length 3 +STR_FINANCES_REVENUE_TITLE :{WHITE}Refeniw STR_FINANCES_OPERATING_EXPENSES_TITLE :{WHITE}Costau Gweithredol STR_FINANCES_CAPITAL_EXPENSES_TITLE :{WHITE}Costau Cyfalaf @@ -3547,22 +3848,28 @@ STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Awyrennau STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Llongau STR_FINANCES_SECTION_INFRASTRUCTURE :{GOLD}Tanadeiledd STR_FINANCES_SECTION_TRAIN_REVENUE :{GOLD}Trenau +STR_FINANCES_SECTION_ROAD_VEHICLE_REVENUE :{GOLD}Cerbydau Ffordd STR_FINANCES_SECTION_AIRCRAFT_REVENUE :{GOLD}Awyrennau +STR_FINANCES_SECTION_SHIP_REVENUE :{GOLD}Llongau STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Llog y Benthyciad STR_FINANCES_SECTION_OTHER :{GOLD}Arall +STR_FINANCES_TOTAL_CAPTION :{WHITE}Cyfanswm STR_FINANCES_NEGATIVE_INCOME :-{CURRENCY_LONG} +STR_FINANCES_ZERO_INCOME :{CURRENCY_LONG} STR_FINANCES_POSITIVE_INCOME :+{CURRENCY_LONG} +STR_FINANCES_PROFIT :{WHITE}Elw STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Balans Banc +STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Arian Personol STR_FINANCES_LOAN_TITLE :{WHITE}Benthyciad STR_FINANCES_INTEREST_RATE :{WHITE}Llog y Benthyciad: {BLACK}{NUM}% STR_FINANCES_MAX_LOAN :{WHITE}Uchafswm Benthyciad: {BLACK}{CURRENCY_LONG} STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG} STR_FINANCES_BORROW_BUTTON :{BLACK}Benthyg {CURRENCY_LONG} -STR_FINANCES_BORROW_TOOLTIP :{BLACK}Cynyddu maint y benthyciad. Mae Ctrl+Clic yn benthyca gymait ag y sydd bosib +STR_FINANCES_BORROW_TOOLTIP :{BLACK}Cynyddu maint y benthyciad. Ctrl+Clic i fenthyca gymaint ag y sydd bosib STR_FINANCES_REPAY_BUTTON :{BLACK}Ad-dalu {CURRENCY_LONG} -STR_FINANCES_REPAY_TOOLTIP :{BLACK}Ad-dalu rhan o'r benthyciad. Mae Ctrl+Clic yn ad-dalu gymaint ag y sydd bosib +STR_FINANCES_REPAY_TOOLTIP :{BLACK}Ad-dalu rhan o'r benthyciad. Ctrl+Clic i ad-dalu gymaint ag y sydd bosib STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Tanadeiledd # Company view @@ -3591,7 +3898,7 @@ STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Adeiladu STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Gweld pencadlys cwmni STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Gweld pencadlys y cwmni STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Ail-leoli pencadlys cwmni -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Ailadeiladu pencadlys cwmni mewn man arall am 1% o werth y cwmni. Mae Shift+Clic yn dangos amcangyfrif o'r gost heb adleoli +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Ailadeiladu pencadlys cwmni mewn man arall am 1% o werth y cwmni. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Manylion STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Gweld cyfansymau tanadeiledd manwl STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Rhoi arian @@ -3610,6 +3917,7 @@ STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Newid en STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Enw Cwmni STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Enw Rheolwr +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Rhowch faint o arian yr ydych am ei roi STR_BUY_COMPANY_MESSAGE :{WHITE}Rydyn ni'n chwilio am rywun i gymryd ein cwmni ni drosodd.{}{}Hoffech chi brynu {COMPANY} am {CURRENCY_LONG}? STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Mewn trosfeddiant gelyniaethus o {COMPANY} byddwch yn prynu pob ased, talu i ffwrdd pob benthyciad, a thalu deuflwydd o elw.{}{}Amcangyfrif o'r cyfanswm yw {CURRENCY_LONG}.{}{}A ydych am barhau efo'r trosfeddiant gelyniaethus? @@ -3619,30 +3927,42 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Tanadeil STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Darnau rheilffordd: STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signalau STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Darnau ffordd: +STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Darnau tram: STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Teiliau dŵr: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Camlesi STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Gorsafoedd: STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Teiliau gorsaf STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Meysydd Awyr +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR :{WHITE}{CURRENCY_LONG}/blwyddyn +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD :{WHITE}{CURRENCY_LONG}/cyfnod # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Diwydiannau STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Dim - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% wedi'i gludo){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} +STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} a {NUM} mwy... -STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Enwau diwydiannau - cliciwch ar enw i ganoli'r sgrin ar ddiwydiant. Mae Ctrl+Clic yn agor ffenest golwg newydd ar leoliad y diwydiant +STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Enwau diwydiannau - cliciwch ar enw i ganoli'r sgrin ar ddiwydiant. Ctrl+Clic i agor ffenest golwg newydd ar leoliad y diwydiant STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Llwythi a dderbynir: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Cargo a gynhyrchir: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Pob math o lwyth +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Dim # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Cynnyrch mis diwethaf: +STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Cynnyrch y munud olaf: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% wedi'i gludo) -STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Canoli'r brif olygfa ar y diwydiant. Mae Ctrl+Clic yn agor ffenest golwg newydd ar leoliad y diwydiant +STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Canoli'r brif olygfa ar y diwydiant. Ctrl+Clic i agor ffenest golwg newydd ar leoliad y diwydiant STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Lefel cynhyrchu: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Mae'r diwydiant wedi datgan ei fod ar fin cau! STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Angen: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Yn cynhyrchu: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Angen: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRING}{BLACK}{3:STRING} @@ -3673,16 +3993,17 @@ STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Awyrennau sydd STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Golygu'r rhestr STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Anfon y cyfarwyddiadau at bob cerbyd yn y rhestr STR_VEHICLE_LIST_REPLACE_VEHICLES :Cyfnewid Cerbydau -STR_VEHICLE_LIST_SEND_FOR_SERVICING :Gyrru i dderbyn Gwasanaeth +STR_VEHICLE_LIST_SEND_FOR_SERVICING :Gyrru i dderbyn gwasanaeth STR_VEHICLE_LIST_CREATE_GROUP :Creu grŵp STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Elw eleni: {CURRENCY_LONG} (llynedd: {CURRENCY_LONG}) +STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{TINY_FONT}{BLACK}Elw y cyfnod yma: {CURRENCY_LONG} (cyfnod diwethaf: {CURRENCY_LONG}) STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} -STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Gyrru i Ddepo -STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Gyrru i Ddepo -STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Gyrru i Ddepo -STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Gyrru i Awyrendy +STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Gyrru i ddepo +STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Gyrru i ddepo +STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Gyrru i ddepo +STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Gyrru at awyrendy STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Clicio i stopio pob cerbyd yn y rhestr STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Clicio i gychwyn pob cerbyd yn y rhestr @@ -3703,11 +4024,13 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Cerbydau ffordd STR_GROUP_DEFAULT_SHIPS :Llongau heb eu grwpio STR_GROUP_DEFAULT_AIRCRAFTS :Awyrenau heb eu grwpio +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grŵp - cliciwch ar grŵp i restru pob cerbyd yn y grŵp hwn. Gallwch glico a llusgo grwpiau i drefnu'r hierarchaeth. STR_GROUP_CREATE_TOOLTIP :{BLACK}Cliciwch i greu grŵp STR_GROUP_DELETE_TOOLTIP :{BLACK}Dileu'r grŵp a ddewiswyd STR_GROUP_RENAME_TOOLTIP :{BLACK}Ailenwi'r grŵp a ddewiswyd +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Newid lifrau'r grŵp a ddewiswyd STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Cliciwch i amddiffyn y grŵp rhag awtoddisodli bydol. Mae Ctrl+clic hefyd yn amddiffyn is-grwpiau STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Dileu Grŵp @@ -3719,7 +4042,9 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Dileu pob cerby STR_GROUP_RENAME_CAPTION :{BLACK}Ailenwi grŵp STR_GROUP_PROFIT_THIS_YEAR :Elw eleni: +STR_GROUP_PROFIT_THIS_PERIOD :Elw y cyfnod yma: STR_GROUP_PROFIT_LAST_YEAR :Elw llynedd: +STR_GROUP_PROFIT_LAST_PERIOD :Elw y cyfnod diwethaf: STR_GROUP_OCCUPANCY :Defnydd presennol: STR_GROUP_OCCUPANCY_VALUE :{NUM}% @@ -3731,6 +4056,7 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Cerbydau Monore STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Cerbydau Maglef Newydd STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Cerbydau Ffordd Newydd +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Cerbydau Tram Newydd # Vehicle availability ###length VEHICLE_TYPES @@ -3761,6 +4087,7 @@ STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Wageni P STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Modd ei ailffitio i: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Pob math o lwyth STR_PURCHASE_INFO_NONE :Dim +STR_PURCHASE_INFO_ENGINES_ONLY :Injans yn unig STR_PURCHASE_INFO_ALL_BUT :Popeth ond{CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Grym Tynnu Uchaf: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Pellter cyrhaeddiad: {GOLD}{COMMA} teil @@ -3768,13 +4095,14 @@ STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Math awy ###length 3 STR_CARGO_TYPE_FILTER_ALL :Pob math o lwyth +STR_CARGO_TYPE_FILTER_FREIGHT :Llwythi STR_CARGO_TYPE_FILTER_NONE :Dim ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Rhestr dewis trenau. Cliciwch ar gerbyd am wybodaeth. Mae Ctrl+Clicio'n toglu cuddio'r math cerbyd -STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Rhestr dewis cerbydau ffordd. Cliciwch ar gerbyd am wybodaeth. Mae Ctrl+Clicio'n toglu cuddio'r math cerbyd -STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Rhestr ddewis llongau. Cliciwch ar long am wybodaeth. Mae Ctrl+Clicio'n toglu cuddio'r math llong -STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Rhestr ddewis awyrennau. Cliciwch ar awyren am wybodaeth. Mae Ctrl+Clicio'n toglu cuddio'r math awyren +STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Rhestr dewis cerbydau trên. Cliciwch ar gerbyd am wybodaeth. Ctrl+Clic i ddangos/cuddio'r math yma o gerbyd +STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Rhestr dewis cerbydau ffordd. Cliciwch ar gerbyd am wybodaeth. Ctrl+Clic i ddangos/cuddio'r math yma o gerbyd +STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Rhestr ddewis llongau. Cliciwch ar long am wybodaeth. Ctrl+Clicio i ddangos/cuddio'r math llong yma +STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Rhestr ddewis awyrennau. Cliciwch ar awyren am wybodaeth. Ctrl+Clicio i ddangos/cuddio'r math yma o awyren ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Prynu Cerbyd @@ -3789,12 +4117,16 @@ STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Prynu ac STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Prynu ac Ailffitio Awyrennau ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Adeiladu'r cerbyd trên sydd wedi'i amlygu. Mae Shift+Clic yn dangos amcangyfrif o'r gost -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Adeiladu'r cerbyd ffordd sydd wedi'i amlygu. Mae Shift+Clic yn dangos amcangyfrif o'r gost -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Adeiladu'r llong sydd wedi'i hamlygu. Mae Shift+Clic yn dfangos amcangyfrif o'r gost -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Adeiladu'r awyren sydd wedi'i hamlygu. Mae Shift+Clic yn dangos amcangyfrif o'r gost +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Adeiladu'r cerbyd trên sydd wedi'i amlygu. Mae pwyso Shift hefyd yn dangos amcangyfrif o'r gost yn unig +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Adeiladu'r cerbyd ffordd sydd wedi'i amlygu. Mae pwyso Shift hefyd yn ddangos amcangyfrif o'r gost yn unig +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Adeiladu'r llong sydd wedi'i hamlygu. Mae pwyso Shift hefyd yn dangos amcangyfrif o'r gost yn unig +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Adeiladu'r awyren sydd wedi'i hamlygu. Hefyd pwyso Shift i ddangos amcangyfrif o'r gost yn unig ###length VEHICLE_TYPES +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Prynu ac ail-ffitio'r cerbyd trên sydd wedi'i amlygu. Mae pwyso Shift hefyd yn dangos amcangyfrif o'r gost yn unig +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Prynu ac ail-ffitio'r cerbyd ffordd sydd wedi'i amlygu. Mae pwyso Shift hefyd yn dangos amcangyfrif o'r gost yn unig +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Prynu ac ail-ffitio'r llong sydd wedi'i amlygu. Mae pwyso Shift hefyd yn dangos amcangyfrif o'r gost yn unig +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Prynu ac ail-ffitio'r awyren sydd wedi'i amlygu. Mae pwyso Shift hefyd yn dangos amcangyfrif o'r gost yn unig ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Ailenwi @@ -3844,7 +4176,7 @@ STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} ce STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Trenau - cliciwch ar y trên am wybodaeth, llusgwch gerbyd i'w ychwanegu neu i'w dynnu o'r trên. Daliwch Ctrl i symyd pob cerbyd y tu ôl hefyd +STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Trenau - llusgwch gerbyd efo'r botwm chwith i'w ychwanegu neu i'w dynnu o drên, de-gliciwch am wybodaeth. Ctrl+Clic i wneud hyn ar gyfer y gerbydres sy'n dilyn STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Cerbydau - cliciwch ar gerbyd am wybodaeth STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Llongau - cliciwch ar long am wybodaeth STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Awyrennau - cliciwch ar awyren am wybodaeth @@ -3886,16 +4218,16 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Dyblygu STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Dyblygu Awyren ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Bydd hyn yn prynu copi o'r trên gan gynnwys pob cerbyd. Cliciwch ar y botwm hwn ac yna ar drên sydd tu fewn neu tu allan i'r depo. Bydd Ctrl+Clic yn rhannu'r gorchmynion, tra fo Shift+Clic yn dangos amcangyfrif o'r gost -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Bydd hyn yn adeiladu copi o gerbyd ffordd. Cliciwch ar y botwm hwn ac yna ar gerbyd sydd tu fewn neu tu allan i'r depo. Mae Ctrl+Clic yn rhannu'r gorchmynion, tra fo Shift+Clic yn dangos amcangyfrif o'r gost heb brynnu -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Bydd hyn yn adeiladu copi o long. Cliciwch ar y botwm hwn ac yna ar long sydd tu fewn neu tu allan i'r depo. Mae Ctrl+Clic yn rhannu'r gorchmynion, tra fo Shift+Clic yn dangos amcangyfrif o'r gost -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Bydd hyn yn adeiladu copi o awyren. Cliciwch ar y botwm hwn ac yna ar awyren sydd tu fewn neu tu allan i'r awyrendy. Mae Ctrl+Clic yn rhannu'r gorchmynion, tra fo Shift+Clic yn dangos amcangyfrif o'r gost +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Prynu copi o'r trên gan gynnwys pob cerbyd. Cliciwch ar y botwm hwn ac yna ar drên tu fewn neu tu allan i ddepo. Ctrl+Clic i rannu'r gorchmynion. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Prynu copi o gerbyd ffordd. Cliciwch ar y botwm hwn ac yna ar gerbyd sydd tu fewn neu tu allan i ddepo. Ctrl+Clic i rannu gorchmynion. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Prynu copi o long. Cliciwch ar y botwm hwn ac yna ar long sydd tu fewn neu tu allan i ddepo. Ctrl+Clic i rannu gorchmynion. Hefyd Shift i ddangos amcangyfrif o'r gost yn unig +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Prynu copi o awyren. Cliciwch ar y botwm hwn ac yna ar awyren sydd tu fewn neu tu allan i awyrendy. Ctrl+Clic i rannu gorchmynion. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Canoli'r prif olygfa ar leoliad y depo trên. Mae Ctrl+Clic yn agor ffenest golwg newydd ar leoliad y depo -STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Canoli'r brif olygfa ar leoliad y depo cerbyd ffordd. Mae Ctrl+Clic yn agor ffenest golwg newydd ar leoliad y depo -STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Canoli'r brif olygfa ar leoliad depo'r llong. Mae Ctrl+Clic yn agor ffenest golwg newydd ar leoliad y depo -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Canoli'r prif olygfa ar leoliad yr awyrendy. Mae Ctrl+Clic yn agor ffenest golwg newydd ar leoliad yr awyrendy +STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Canoli'r prif olygfa ar leoliad y depo trên. Ctrl+Clic i agor ffenest golwg newydd ar leoliad y depo +STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Canoli'r brif olygfa ar leoliad y depo cerbyd ffordd. Ctrl+Clic i agor ffenest golwg newydd ar leoliad y depo +STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Canoli'r brif olygfa ar leoliad depo'r llong. Ctrl+Clic i agor ffenest golwg newydd ar leoliad y depo +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Canoli'r prif olygfa ar leoliad yr awyrendy. Ctrl+Clic i agor ffenest golwg newydd ar leoliad yr awyrendy ###length VEHICLE_TYPES STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Dangos rhestr o bob trên gyda'r depo presennol yn eu gorchmynion @@ -3940,6 +4272,7 @@ STR_ENGINE_PREVIEW_COST_MAX_SPEED :Cost: {CURRENCY STR_ENGINE_PREVIEW_SPEED_POWER :Cyflymder: {VELOCITY} Pŵer: {POWER} STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Cyflymder: {VELOCITY} Pŵer: {POWER} Grym Tynnu Uchaf: {FORCE} STR_ENGINE_PREVIEW_TYPE :Math awyren: {STRING} +STR_ENGINE_PREVIEW_TYPE_RANGE :Math awyren: {STRING} Pellter hedfan: {COMMA} teil STR_ENGINE_PREVIEW_RUNCOST_YEAR :Cost Rhedeg: {CURRENCY_LONG}/blwyddyn STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Cost Rhedeg: {CURRENCY_LONG}/cyfnod STR_ENGINE_PREVIEW_CAPACITY :Cynhwysedd: {CARGO_LONG} @@ -3976,9 +4309,11 @@ STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Newid rh STR_REPLACE_ENGINES :Injanau STR_REPLACE_WAGONS :Wagenni STR_REPLACE_ALL_RAILTYPE :Pob cerbyd rheilffordd +STR_REPLACE_ALL_ROADTYPE :Pob cerbyd ffordd ###length 2 STR_REPLACE_HELP_RAILTYPE :{BLACK}Dewiswch y math o reilffordd yr hoffech chi ddisodli injans ar ei gyfer +STR_REPLACE_HELP_ROADTYPE :{BLACK}Dewiswch y math o ffordd yr hoffech ddisodli injans ar ei gyfer ###next-name-looks-similar STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Dangoswch pa injan (os unrhyw) y mae'r injan ar y chwith yn cael ei disodli gyda @@ -3988,30 +4323,37 @@ STR_REPLACE_MONORAIL_VEHICLES :Cerbydau Monore STR_REPLACE_MAGLEV_VEHICLES :Cerbydau Maglef STR_REPLACE_ROAD_VEHICLES :Cerbydau Ffordd +STR_REPLACE_TRAM_VEHICLES :Cerbydau Tramffordd STR_REPLACE_REMOVE_WAGON :{BLACK}Tynnu wagenni: ({STRING}): {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Gwneud i awtoddisodli gadw hyd y trên yr un peth drwy dynnu wagenni (gan ddechrau yn y blaen), os byddai newid yr injan yn gwneud y trên yn hirach +STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl+Clic i weithredu ar is-grwpiau hefyd # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} ###length VEHICLE_TYPES +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Canoli'r brif olygfa ar leoliad trên. Clic dwbl i ddilyn y trên yn y brif olygfa. Ctrl+Clic i agor ffenest golwg newydd ar leoliad y trên +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Canoli'r brif olygfa ar leoliad cerbyd. Clic dwbl i ddilyn y cerbyd yn y brif olygfa. Ctrl+Clic i agor ffenest golwg newydd ar leoliad y cerbyd +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Canoli'r brif olygfa ar leoliad llong. Clic dwbl i ddilyn y llong yn y brif olygfa Ctrl+Clic i agor ffenest golwg newydd ar leoliad y llong +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Canoli'r brif olygfa ar leoliad awyren. Clic dwbl i ddilyn yr awyren yn y brif olygfa. Ctrl+Clic i agor ffenest golwg newydd ar leoliad yr awyren ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Anfon trên i'r depo. Bydd CTRL+clic yn rhoi gwasanaeth iddo'n unig -STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Anfon cerbyd i'r depo. Bydd CTRL+clic yn rhoi gwasanaeth iddo'n unig -STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Gyrru'r llong i ddepo. Bydd CTRL+clic yn rhoi gwasanaeth iddo'n unig -STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Anfon awyren to awyrendy. Bydd CTRL+click yn rhoi gwasanaeth iddo'n unig +STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Anfon trên i'r depo. Ctrl+Clic i roi gwasanaeth yn unig +STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Anfon cerbyd i'r depo. Ctrl+Clic i roi gwasanaeth yn unig +STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Gyrru'r llong i ddepo. Ctrl+Clic i roi gwasanaeth yn unig +STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Anfon awyren at awyrendy. Ctrl+Clic i roi gwasanaeth yn unig ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Bydd hyn yn adeiladu copi o'r trên gan gynnwys pob un o'i gerbydau. Mae Ctrl+Clic yn rhannu'r gorchmynion, tra fo Shift+Clic yn dangos amcangyfrif o'r gost -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Bydd hyn yn adeiladu copi o'r cerbyd ffordd. Mae Ctrl+Clic yn rhannu'r gorchmynion, tra fo Shift+Clic yn dangos amcangyfrif o'r gost -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Bydd hyn yn adeiladu copi o'r llong. Mae Ctrl+Clic yn rhannu'r gorchmynion, tra fo Shift+Clic yn dangos amcangyfrif o'r gost -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Bydd hyn yn adeiladu copi o'r awyren. Mae Ctrl+Clic yn rhannu'r gorchmynion, tra fo Shift+Clic yn dangos amcangyfrif o'r gost +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Prynu copi o'r trên gan gynnwys pob un o'i gerbydau. Ctrl+Clic i rannu'r gorchmynion. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Prynu copi o'r cerbyd ffordd. Ctrl+Clic i rannu'r gorchmynion. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Prynu copi o'r llong. Ctrl+Clic i rannu'r gorchmynion. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig +STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Prynu copi o'r awyren. Ctrl+Clic i rannu'r gorchmynion. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Gorfodi trên i barhau heb fod signal yn ei glirio STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Gwrthdroi cyfeiriad trên STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Gorfodi cerbyd i droi rownd +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Canoli'r brif olygfa ar gyrchfan y gorchymyn. Ctrl+Clic i agor ffenestr olygfa newydd ar gyrchfan y gorchymyn ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Ailffitio trên i gario llwyth o fath gwahanol @@ -4032,28 +4374,34 @@ STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Dangos m STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Dangos manylion awyren ###length VEHICLE_TYPES +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Gweithred presennol trên - clicio i stopio/cychwyn trên +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Gweithred presennol cerbyd - clicio i stopio/cychwyn cerbyd +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Gweithred presennol llong - clicio i stopio/cychwyn llong +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Gweithred presennol awyren - clicio i stopio/cychwyn awyren # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Llwytho / Dadlwytho STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Gadael +STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Yn aros i ddad-glystru STR_VEHICLE_STATUS_CRASHED :{RED}Wedi crashio! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Torri lawr STR_VEHICLE_STATUS_STOPPED :{RED}Wedi stopio -STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Yn dod at aros, {VELOCITY} +STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}{VELOCITY} - Yn dod at aros STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Dim Pŵer STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Aros am lwybr clir STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Rhy bell i'r cyrchfan nesaf -STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}Mynd tua {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Dim gorchmynion, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Mynd tua {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Mynd tua {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Mynd am wasanaeth yn {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Mynd tua {0:STATION} +STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Dim gorchmynion +STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Mynd tua {0:WAYPOINT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Mynd tua {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Gwasanwethu yn {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Dad-glystru a gwasanaethu yn {0:DEPOT} -STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}Methu cyrraedd {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}Methu cyrraedd {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}Methu cyrraedd {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}Methu cyrraedd {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - Methu cyrraedd {0:STATION} +STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Methu cyrraedd {0:WAYPOINT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Methu cyrraedd {0:DEPOT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Methu cyrraedd {0:DEPOT} # Vehicle stopped/started animations ###length 2 @@ -4075,7 +4423,8 @@ STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Enwi awy STR_VEHICLE_INFO_AGE :{COMMA} blwyddyn ({COMMA}) STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} blwyddyn ({COMMA}) -STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Oed: {LTBLUE}{STRING}{BLACK} Cost Rhedeg: {LTBLUE}{CURRENCY_LONG}/bl +STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Oed: {LTBLUE}{STRING}{BLACK} Cost Rhedeg: {LTBLUE}{CURRENCY_LONG}/blwyddyn +STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Oed: {LTBLUE}{STRING}{BLACK} Cost Rhedeg: {LTBLUE}{CURRENCY_LONG}/cyfnod STR_VEHICLE_INFO_MAX_SPEED :{BLACK}cyflymder uchaf: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Cyflym. uchaf: {LTBLUE}{VELOCITY} {BLACK}Math awyren: {LTBLUE}{STRING} @@ -4085,24 +4434,34 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Pwys: {L STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Elw eleni: {LTBLUE}{CURRENCY_LONG} (llynedd: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Elw eleni: {LTBLUE}{CURRENCY_LONG} (Elw llynedd : {CURRENCY_LONG}) {BLACK}Perfformiad isafsymol: {LTBLUE}{POWER_TO_WEIGHT} +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :Elw y cyfnod yma: {LTBLUE}{CURRENCY_LONG} (cyfnod diwethaf: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Elw'r cyfnod yma: {LTBLUE}{CURRENCY_LONG} (cyfnod diwethaf: {CURRENCY_LONG}) {BLACK}Perfformiad isaf:: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Dibynadwyedd: {LTBLUE}{COMMA}% {BLACK}Toriadau ers gwasanaeth olaf: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Codi: {LTBLUE}{NUM}{BLACK} Pris: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Cynhwysedd: {LTBLUE}Dim{STRING} -STR_VEHICLE_INFO_CAPACITY :{BLACK}Cynhwysedd: {LTBLUE}{CARGO_LONG}{3:STRING} -STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Cynhwysedd: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM}) +STR_VEHICLE_INFO_CAPACITY :{BLACK}Cynhwysedd: {LTBLUE}{0:CARGO_LONG}{3:STRING} +STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Cynhwysedd: {LTBLUE}{0:CARGO_LONG}{3:STRING} (x{4:NUM}) STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Cynhwysedd: {LTBLUE}{CARGO_LONG}, {CARGO_LONG}{STRING} STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Credydau Trosglwyddo: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Bwlch rhwng gwasanaeth: {LTBLUE}{COMMA}{NBSP}diwrnod{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Ysbaid gwasanaethu: {LTBLUE}{COMMA}{NBSP}munud{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Bwlch rhwng gwasanaethu: {LTBLUE}{COMMA}%{BLACK} {STRING} +STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Gwasanaeth diwethaf: {LTBLUE}{DATE_LONG} +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Gwasanaeth diwethaf: {LTBLUE}{NUM} munud yn ôl +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Cynyddu'r ysbaid gwasanaeth o 10 diwrnod. Mae Ctrl+Clic yn cynyddu'r ysbaid o 5 diwrnod +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Cynyddu'r ysbaid gwasanaeth o 5 munud. Mae Ctrl+Clic yn cynyddu'r ysbaid o 1 funud +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Cynyddu'r ysbaid gwasanaeth o 10 y cant. Mae Ctrl+Clic yn cynyddu'r ysbaid o 5 y cant STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Lleihau ysbaid gwasanaeth o 10 diwrnod. Mae Ctrl+Clic yn lleihau'r ysbaid gwasanaeth o 5 diwrnod STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Lleihau ysbaid gwasanaeth o 5 munud. Mae Ctrl+Clic yn lleihau'r ysbaid gwasanaeth o 1 munud STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Lleihau ysbaid gwasanaeth o 10 y cant. Mae Ctrl+Clic yn lleihau'r ysbaid gwasanaeth o 5 y cant STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Newid dull ystod gwasanaethu STR_VEHICLE_DETAILS_DEFAULT :Rhagosodedig +STR_VEHICLE_DETAILS_DAYS :Diwrnod +STR_VEHICLE_DETAILS_MINUTES :Munudau STR_VEHICLE_DETAILS_PERCENT :Canran ###length VEHICLE_TYPES @@ -4116,8 +4475,8 @@ STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE :{LTBLUE}{ENGINE STR_VEHICLE_DETAILS_TRAIN_WAGON_VALUE :{LTBLUE}{ENGINE}{BLACK} Gwerth: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_TEXT :{BLACK}Cyfanswm cynhwysedd cludo'r trên hwn: -STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY :{LTBLUE}- {CARGO_LONG} ({CARGO_SHORT}) -STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_MULT :{LTBLUE}- {CARGO_LONG} ({CARGO_SHORT}) (x{NUM}) +STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY :{LTBLUE}{CARGO_LONG} ({CARGO_SHORT}) +STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_MULT :{LTBLUE}{CARGO_LONG} ({CARGO_SHORT}) (x{NUM}) STR_VEHICLE_DETAILS_CARGO_EMPTY :{LTBLUE}Gwag STR_VEHICLE_DETAILS_CARGO_FROM :{LTBLUE}{CARGO_LONG} o {STATION} @@ -4141,7 +4500,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}bellach STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Cynhwysedd newydd: {GOLD}{CARGO_LONG}{}{BLACK}Incwm drwy ailffitio: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Cynhwysedd newydd: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Cost ailffitio: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Cynhwysedd newydd: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Incwm drwy ailffitio: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Dewisiwch y cerbydau i ailffitio. Mae llusgo'r llygoden yn galluogi dewis sawl cerbyd. Mae clicio ar wagle'n dewis y cerbydres gyfan. Mae Ctrl+Clic yn dewis cerbyd a phob un ar ei hôl +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Dewisiwch y cerbydau i ailffitio. Clic+Llusgo i ddewis sawl cerbyd. Clicio ar wagle i ddewis y cerbyd gyfan. Ctrl+Clic i ddewis cerbyd a'r cerbydres sy'n dilyn ###length VEHICLE_TYPES STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Dewiswch fath o lwyth i'r trên ei gario @@ -4166,7 +4525,7 @@ STR_ORDERS_CAPTION :{WHITE}{VEHICLE STR_ORDERS_TIMETABLE_VIEW :{BLACK}Amserlen STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Newid i'r golwg amserlen -STR_ORDERS_LIST_TOOLTIP :{BLACK}Rhestr orchmynion - cliciwch orchymyn i'w amlygu. Mae Ctrl+Clic yn sgrolio i gyrchfan yr orchymyn +STR_ORDERS_LIST_TOOLTIP :{BLACK}Rhestr gorchmynion - cliciwch orchymyn i'w amlygu. Ctrl+Clic i sgrolio i gyrchfan y gorchymyn STR_ORDER_INDEX :{COMMA}:{NBSP} STR_ORDER_TEXT :{STRING} {STRING} {STRING} {STRING} @@ -4205,9 +4564,14 @@ STR_ORDER_DROP_REFIT_AUTO_ANY :Llwythi ar gael STR_ORDER_DROP_GO_ALWAYS_DEPOT :Mynd bob tro STR_ORDER_DROP_SERVICE_DEPOT :Gwasanaethu os oes angen STR_ORDER_DROP_HALT_DEPOT :Stopio +STR_ORDER_DROP_UNBUNCH :Dad-glystru # Depot action tooltips, one per vehicle type ###length VEHICLE_TYPES +STR_ORDER_TRAIN_DEPOT_ACTION_TOOLTIP :{BLACK}Dewis y weithred i'w gymryd yn y depo yma +STR_ORDER_ROAD_DEPOT_ACTION_TOOLTIP :{BLACK}Dewis y weithred i'w gymryd yn y depo yma +STR_ORDER_SHIP_DEPOT_ACTION_TOOLTIP :{BLACK}Dewis y weithred i'w gymryd yn y depo yma +STR_ORDER_HANGAR_ACTION_TOOLTIP :{BLACK}Dewis y weithred i'w gymryd yn yr awyrendy yma ###next-name-looks-similar STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Data cerbyd i seilio'r naid arno @@ -4228,9 +4592,9 @@ STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Sut i gy STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :yn hafal i STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :ddim yn hafal i STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :yn llai na -STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :yn llai na neu'n fwy na +STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :yn llai na neu'n hafal i STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :yn fwy na -STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :yn fwy neu'n llai na +STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :yn fwy neu'n hafal i STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :yn wir STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :yn anghywir @@ -4238,20 +4602,20 @@ STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK} Y gwert STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Rhowch y gwerth i'w gymharu'n ei erbyn STR_ORDERS_SKIP_BUTTON :{BLACK}Hepgor -STR_ORDERS_SKIP_TOOLTIP :{BLACK}hepgor y gorchymyn cyfredol, a chychwyn y nesaf +STR_ORDERS_SKIP_TOOLTIP :{BLACK}Hepgor y gorchymyn cyfredol, a chychwyn y nesaf. Ctrl+Clicio i hepgor at y gorchymyn a ddewisir STR_ORDERS_DELETE_BUTTON :{BLACK}Dileu STR_ORDERS_DELETE_TOOLTIP :{BLACK}Dileu y gorchymyn sydd wedi'i amlygu STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Dileu pob gorchymyn STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Peidio â rhannu -STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Peidio â rhannu rhestr gorchmynion. Mae Ctrl+Clic hefyd yn dileu holl orchmynion y cerbyd hwn +STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Peidio â rhannu rhestr gorchmynion. Ctrl+Clic i ddileu holl orchmynion y cerbyd hwn hefyd STR_ORDERS_GO_TO_BUTTON :{BLACK}Mynd i STR_ORDER_GO_TO_NEAREST_DEPOT :Mynd i'r depo agosaf STR_ORDER_GO_TO_NEAREST_HANGAR :Mynd i'r awyrendy agosaf STR_ORDER_CONDITIONAL :Naid gorchymyn amodol STR_ORDER_SHARE :Rhannu gorchmynion -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Mewnosod gorchymyn newydd cyn yr orchymyn a amlygwyd, neu greu ar ddiwedd y rhestr. Mae Ctrl yn gwneud gorchymynion orsaf yn rhai 'llwyth llawn unrhyw nwyddau', gorchymynion pwyntiau llwybro 'heb aros' a gorchmynion depot 'gwasanaethu'. Mae 'Rhannu gorchmynion' neu Ctrl yn galluogi i'r cerbyd yma rannu gorchmynion gyda'r cerbyd a ddewisir. Mae clicio ar gerbyd yn copïo gorchmynion o'r cerbyd hwnnw. Mae gorchymyn depo'n analluogi gwasanaethu diofyn ar gyfer y cerbyd +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Mewnosod gorchymyn newydd cyn yr orchymyn a amlygwyd, neu greu ar ddiwedd y rhestr. Ctrl+Clic ar orsaf ar gyfer 'llwyth llawn unrhyw nwyddau', ar bwynt llwybro i wyrdroi'r gosodiad 'heb aros', neu ar ddepot ar gyfer 'dad-glystru'. Clicio ar gerbyd arall i gopïo ei orchmynion neu Ctrl+Clic i rannu gorchmynion. Mae gorchymyn depo'n analluogi gwasanaethu diofyn y cerbyd STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Dangos pob cerbydau sy'n rhannu'r amserlen hon @@ -4277,6 +4641,7 @@ STR_ORDER_REFIT_ORDER :(Ailffitio i {S STR_ORDER_REFIT_STOP_ORDER :(Ailfitio i {STRING} a stopio) STR_ORDER_STOP_ORDER :(Stopio) +STR_ORDER_WAIT_TO_UNBUNCH :(aros i ddad-glystru) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Methu defnyddio gorsaf){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4354,33 +4719,40 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Mae'r ce STR_TIMETABLE_STATUS_LATE :{BLACK}Mae'r cerbyd hwn yn rhedeg {STRING} yn hwyr ar hyn o bryd STR_TIMETABLE_STATUS_EARLY :{BLACK}Mae'r cerbyd hwn yn rhedeg {STRING} yn gynnar ar hyn o bryd STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Nid yw'r amserlen yma wedi dechrau +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Bydd yr amserlen yma'n dechrau am {STRING} +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Bydd yr amserlen yma'n dechrau mewn {COMMA} eiliad +STR_TIMETABLE_START :{BLACK}Dechrau Amserlen +STR_TIMETABLE_START_TOOLTIP :{BLACK}Dewis pryd fydd yr amserlen yn dechrau. Ctrl+Clic i ddosbarthu dechrau pob cerbyd yn ôl eu trefn perthynol, os yw'r gorchymyn wedi ei amserlennu'n llwyr +STR_TIMETABLE_START_SECONDS_QUERY :Eiliadau nes i'r amserlen ddechrau STR_TIMETABLE_CHANGE_TIME :{BLACK}Newid Amser -STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Newid faint o amser y dylai'r gorchymyn a amlygwyd ei gymryd +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Newid faint o amser y dylai'r gorchymyn a amlygwyd ei gymryd. Ctrl+Clic i osod yr amser ar gyfer pob gorchymyn STR_TIMETABLE_CLEAR_TIME :{BLACK}Clirio Amser -STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Clirio faint o amser y dylai'r gorchymyn a amlygwyd ei gymryd. +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Clirio'r amser ar gyfer y gorchymyn a amlygwyd. Ctrl+Clic i glirio'r amser ar gyfer pob gorchymyn STR_TIMETABLE_CHANGE_SPEED :{BLACK}Newid Terfyn Cyflymder -STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Newid cyflymder teithio uchafsymol y gorchymyn a amlygwyd +STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Newid cyflymder teithio uchafsymol y gorchymyn a amlygwyd. Ctrl+Clic i osod y cyflymder ar gyfer bob gorchymyn STR_TIMETABLE_CLEAR_SPEED :{BLACK}Clirio Terfyn Cyflymder -STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Clirio cyflymder teithio uchafsymol y gorchymyn a amlygwyd +STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Clirio cyflymder teithio uchafsymol y gorchymyn a amlygwyd. Ctrl+Clic i glirio'r cyflymder ar gyfer bob gorchymyn STR_TIMETABLE_RESET_LATENESS :{BLACK}Ailosod Mesurydd Hwyrni -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Ailosod y mesurydd hwyrni, fel y bydd y cerbyd ar amser +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Ailosod y mesurydd hwyrni, fel y bydd y cerbyd ar amser. Ctrl+Clic i ailosod y grŵp cyfan fel yn bydd y cerbyd hwyraf ar amser a'r gweddill yn gynnar STR_TIMETABLE_AUTOFILL :{BLACK}Awtolenwi -STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Llenwch yr amserlen yn awtomatig gyda gwerthoedd o'r daith nesaf (Ctrl+Clic er mwyn ceisio cadw amserau aros) +STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Llenwi yr amserlen yn awtomatig gyda gwerthoedd o'r daith nesaf. Ctrl+Clic i geisio cadw amserau aros STR_TIMETABLE_EXPECTED :{BLACK}Disgwylir STR_TIMETABLE_SCHEDULED :{BLACK}Amserlenwyd STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Newid rhwng yr amser a ddisgwylir a'r amserlen STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :D: {COLOUR}{DATE_TINY} STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} eiliad +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :D: {COLOUR}{COMMA} eiliad # Date window (for timetable) @@ -4408,9 +4780,9 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Cydweddu STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Toglo cydweddu priflythrennu tra'n cymharu negeseuon log AI gyda'r llinyn torri STR_AI_DEBUG_CONTINUE :{BLACK}Parhau STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Dadoedi a rhedeg yr AI -STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Gweld allbwn dadnamu'r AI yma +STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Gweld allbwn dadnamu'r AI yma. Ctrl+Clic i'w agor mewn ffenest newydd STR_AI_GAME_SCRIPT :{BLACK}Game Script -STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Gwirio'r log Game Script +STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Gwirio'r log sgript gêm. Mae Ctrl+Clic yn ei agor mewn ffenest newydd STR_ERROR_AI_NO_AI_FOUND :Ni ganfuwyd AI addas i lwytho.{}AI ffug yw hwn na wnai unrhyw beth.{}Gallwch lawrlwytho sawl AI drwy'r system 'Cynnwys Arlein' STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Mae sgript a oedd yn rhedeg wedi chwalu. A fyddwch cystad ag adrodd am hyn i awdur yr sgript ynghyd â sgrin-gipiad o'r Ffenestr Ddadnamu AI/Sgript Gêm @@ -4459,11 +4831,17 @@ STR_AI_LIST_CANCEL :{BLACK}Canslo STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Peidio newid y sgript STR_SCREENSHOT_CAPTION :{WHITE}Creu ciplun +STR_SCREENSHOT_SCREENSHOT :{BLACK}Ciplun arferol +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Ciplun wedi'i fwyhau'n llawn +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Ciplun mwyhad rhagosodedig STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Ciplun map cyfan +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Ciplun map uchder +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Ciplun map bychan # Script Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Paramedrau STR_AI_SETTINGS_CAPTION_AI :AI +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Sgript Gêm STR_AI_SETTINGS_CLOSE :{BLACK}Cau STR_AI_SETTINGS_RESET :{BLACK}Ailosod STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} @@ -4556,6 +4934,7 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Dim ond STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Ciplun anferth STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Bydd gan y ciplun faint o {COMMA} x {COMMA} pcsel. Gall cymeryd peth amser i greu'r ciplun. A ydych am barhau? +STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Map uchder wedi ei gadw'n llwyddiannus fel '{STRING}'. Copa uchaf yw {NUM} STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Cadwyd y ciplun yn llwyddiannus fel '{STRING}' STR_ERROR_SCREENSHOT_FAILED :{WHITE}Methodd y ciplun! @@ -4631,6 +5010,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... gorm STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Doedd dim modd cynhyrchu diwydiannau... STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Ni ellir adeiladu {STRING} yma... STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Does dim modd adeiladu diwydiant o'r math hwn yma... +STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Methu mwynchwilio'r diwydiant... STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... rhy agos i ddiwydiant arall STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... rhaid adeiladu tref yn gyntaf STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... un yn unig a ganiateir ym mhob tref @@ -4645,6 +5025,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... dim STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... gellir ei adeiladu uwchben yr eirlin yn unig STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... gellir ei adeiladu islaw i'r eirlin yn unig +STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}Yn anlwcus, methodd y mwyngloddio ; triwch eto +STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Nid oedd mannau addas ar gyfer mwynchwilio'r diwydiant yma STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Nid oedd manau addas ar gyfer diwydiannau '{STRING}' STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Newidwch y paramedrau cynhyrchu map er mwyn cael map gwell @@ -4729,12 +5111,18 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Methu do STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :math depo anghywir # Depot unbunching related errors +STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... gellid ond cael un gorchymyn dad-glystru +STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... methu defnyddio gorchmynion llwyth llawn pan fo cerbyd hefo gorchymyn dad-glystru +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... methu dad-glystru cerbyd hefo gorchymyn llwyth llawn +STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... methu defnyddio gorchmynion amodol pan fo cerbyd hefo gorchymyn dad-glystru +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... methu dad-glystru cerbyd hefo gorchymyn amodol # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}Aeth gormod o amser heibio i allu adnewyddu {VEHICLE} STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Ni weithredwyd unrhyw reolau awtogyfnewid/adnewyddu STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(terfyn arian) STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Nid yw'r cerbyd newydd yn gallu cario {STRING} +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Ni all cerbyd newydd ailffitio yn ngorchymyn {NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Cyfuniad trac amhosib @@ -4743,6 +5131,7 @@ STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Dim trac STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Rhaid tynnu'r trac rheilffordd yn gyntaf STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Mae'r ffordd yn ffordd un-ffordd, neu wedi'i blocio STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Ni chaniateir croesfannau ar y cledrau yma +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Ni chaniateir croesfannau ar gyfer y math yma o ffordd STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Methu adeiladu signalau yma... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Methu adeiladu trac rheilffordd yma... STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Methu tynnu trac rheilffordd oddi yma... @@ -4762,8 +5151,10 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Methu cl STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Methu dileu tramffordd oddi yma... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... nid oes ffordd yno STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... nid oes tramffordd yno +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Methu trosi'r math ffordd yma... STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Methu trosi'r math tram yma... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Dim lôn addas +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Dim tramffordd addas # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Methu adeiladu camlesi yma... @@ -4810,6 +5201,7 @@ STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Gwrthryc STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... pencadlys cwmni yn y ffordd STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Does dim modd prynu'r darn yma o dir... STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... rydych chi eisoes yn berchen arno! +STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}... terfyn adeiladu gwrthrychau wedi'i gyrraedd # Group related errors STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Methu creu grŵp @@ -4850,14 +5242,14 @@ STR_ERROR_CAN_T_RENAME_AIRCRAFT :{WHITE}Methu en ###length VEHICLE_TYPES STR_ERROR_CAN_T_STOP_START_TRAIN :{WHITE}Methu cychwyn/stopio trên... STR_ERROR_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}Methu aros/dechrau'r cerbyd ffordd... -STR_ERROR_CAN_T_STOP_START_SHIP :{WHITE}methu cychwyn/stopio llong... +STR_ERROR_CAN_T_STOP_START_SHIP :{WHITE}methu stopio/cychwyn llong... STR_ERROR_CAN_T_STOP_START_AIRCRAFT :{WHITE}Methu stopio/cychwyn awyren... ###length VEHICLE_TYPES STR_ERROR_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Methu gyrru trên i depo... STR_ERROR_CAN_T_SEND_ROAD_VEHICLE_TO_DEPOT :{WHITE}Methu gyrru cerbyd i'r depo... STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Methu gyrru llong i ddepo... -STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR :{WHITE}Methu gyrru awyren i awyrendy... +STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR :{WHITE}Methu gyrru awyren at awyrendy... ###length VEHICLE_TYPES STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Methu prynnu cerbyd rheilffordd... @@ -4882,6 +5274,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Methu ne STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... cerbyd wedi ei ddinistrio +STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... nid yw bob cerbyd yn unfath STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Ni fydd cerbydau ar gael o gwbl STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Newid eich ffurfweddiad NewGRF @@ -4909,6 +5302,7 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Does dim STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... ni all y cerbyd fynd i bob gorsaf STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... ni all y cerbyd fynd i'r orsaf honno STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... ni all cerbyd sy'n rhannu'r gorchymyn hwn fynd i'r orsaf honno +STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... nid oes gan bob cerbyd yn un gorchmynion STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... nid yw bob cerbyd yn rhannu gorchmynion STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Does dim modd rhannu'r rhestr gorchmynion... @@ -4918,16 +5312,25 @@ STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... rhy STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... nid yw o fewn cyrraedd yr awyren # Extra messages which go on the third line of errors, explaining why orders failed +STR_ERROR_NO_RAIL_STATION :{WHITE}Nid oes gorsaf rheilffordd +STR_ERROR_NO_BUS_STATION :{WHITE}Nid oes gorsaf fysiau STR_ERROR_NO_TRUCK_STATION :{WHITE}Nid oes gorsaf lorïau +STR_ERROR_NO_DOCK :{WHITE}Nid oes doc +STR_ERROR_NO_AIRPORT :{WHITE}Nid oes maes awyr/hofrenfa STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Nid oes gorsafoedd gyda math ffordd cydnaws STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Nid oes gorsafoedd gyda math tram cydnaws +STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Nid oes arosfannau addas ar gyfer cerbydau cymalog.{}Mae cerbydau ffordd cymalog angen arosfan gyrru-trwodd, nid arosfan trol'n ôl STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Nid yw'r awyren yma'n gallu glanio yn yr hofrenfa yma STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Nid yw'r hofrennydd yma'n gallu glanio yn y maes awyr yma +STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Nid oes pwynt llwybro rheilffordd +STR_ERROR_NO_BUOY :{WHITE}Nid oes bwi # Timetable related errors STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Methu amserlennu cerbyd... STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Dim ond mewn gorsafoedd y gall cerbydau aros STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Nid yw'r cerbyd hwn yn galw yn yr orsaf hon +STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... amserlen anghhyflawn +STR_ERROR_TIMETABLE_NOT_STARTED :{WHITE}... amserlen heb ddechrau eto # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... gormod o arwyddion @@ -5034,10 +5437,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE :Cloddfa Siwgr ##id 0x6000 STR_SV_EMPTY : STR_SV_UNNAMED :Dienw -STR_SV_TRAIN_NAME :Trên {COMMA} -STR_SV_ROAD_VEHICLE_NAME :Cerbyd Ffordd {COMMA} -STR_SV_SHIP_NAME :Llong {COMMA} -STR_SV_AIRCRAFT_NAME :Awyren {COMMA} +STR_SV_TRAIN_NAME :Trên #{COMMA} +STR_SV_ROAD_VEHICLE_NAME :Cerbyd Ffordd #{COMMA} +STR_SV_SHIP_NAME :Llong #{COMMA} +STR_SV_AIRCRAFT_NAME :Awyren #{COMMA} ###length 27 STR_SV_STNAME :{STRING} @@ -5346,6 +5749,7 @@ STR_FORMAT_DATE_ISO :{2:NUM}-{1:ZERO STR_FORMAT_COMPANY_NUM :(Cwmni {COMMA}) STR_FORMAT_GROUP_NAME :Grŵp {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN} ###length 2 @@ -5372,6 +5776,7 @@ STR_UNKNOWN_STATION :gorsaf anhysbys STR_DEFAULT_SIGN_NAME :Arwydd STR_COMPANY_SOMEONE :rhywun +STR_SAVEGAME_DURATION_REALTIME :{NUM}awr {NUM}mun STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING} STR_SAVEGAME_NAME_SPECTATOR :Gwyliwr, {1:STRING} @@ -5405,8 +5810,13 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}m +STR_CURRENCY_SHORT_GIGA :{NBSP}bn +STR_CURRENCY_SHORT_TERA :{NBSP}tn 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} @@ -5419,6 +5829,8 @@ STR_JUST_DATE_SHORT :{DATE_SHORT} STR_JUST_DATE_LONG :{DATE_LONG} STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} +STR_JUST_STRING1 :{STRING} +STR_JUST_STRING2 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} From dc6305e8c19f5fa1f8969a2c3e12e121ec10a64d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 11 Mar 2024 08:09:44 +0000 Subject: [PATCH 099/695] Codechange: Use std::make_unique instead of passing new into a unique_ptr. (#12263) std::make_unique will also initialise the data so MemSetT is not needed. --- src/gfx.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/gfx.cpp b/src/gfx.cpp index 4601d444da..4b6b7b8d0c 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -1169,9 +1169,7 @@ std::unique_ptr DrawSpriteToRgbaBuffer(SpriteID spriteId, ZoomLevel const Sprite *sprite = GetSprite(real_sprite, SpriteType::Normal); Dimension dim = GetSpriteSize(real_sprite, nullptr, zoom); size_t dim_size = static_cast(dim.width) * dim.height; - std::unique_ptr result(new uint32_t[dim_size]); - /* Set buffer to fully transparent. */ - MemSetT(result.get(), 0, dim_size); + std::unique_ptr result = std::make_unique(dim_size); /* Prepare new DrawPixelInfo - Normally this would be the screen but we want to draw to another buffer here. * Normally, pitch would be scaled screen width, but in our case our "screen" is only the sprite width wide. */ @@ -1189,9 +1187,7 @@ std::unique_ptr DrawSpriteToRgbaBuffer(SpriteID spriteId, ZoomLevel /* If the current blitter is a paletted blitter, we have to render to an extra buffer and resolve the palette later. */ std::unique_ptr pal_buffer{}; if (blitter->GetScreenDepth() == 8) { - pal_buffer.reset(new byte[dim_size]); - MemSetT(pal_buffer.get(), 0, dim_size); - + pal_buffer = std::make_unique(dim_size); dpi.dst_ptr = pal_buffer.get(); } From b9ca3ead8b1d44a1d44e49fac8d7c76280f3bb87 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 11 Mar 2024 14:19:01 +0000 Subject: [PATCH 100/695] Change: Use (at least) standard toolbar button size for signal selection buttons. (#12265) Signal selection buttons could be very narrow, with a very wide spacer, depending on loaded signal types and fonts. --- src/rail_gui.cpp | 45 +++++++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index bc107ccfeb..a89080e011 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1759,8 +1759,6 @@ public: } else if (IsInsideMM(widget, WID_BS_SEMAPHORE_NORM, WID_BS_ELECTRIC_PBS_OWAY + 1)) { size->width = std::max(size->width, this->sig_sprite_size.width + padding.width); size->height = std::max(size->height, this->sig_sprite_size.height + padding.height); - } else if (widget == WID_BS_CAPTION) { - size->width += WidgetDimensions::scaled.frametext.Horizontal(); } } @@ -1879,52 +1877,51 @@ static constexpr NWidgetPart _nested_signal_builder_widgets[] = { NWidget(NWID_VERTICAL, NC_EQUALSIZE), /* Semaphore block signals. */ NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_NORM), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP), EndContainer(), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_ENTRY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP), EndContainer(), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_EXIT), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP), EndContainer(), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_COMBO), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_NORM), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP), SetMinimalSize(22, 22), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_ENTRY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP), SetMinimalSize(22, 22), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_EXIT), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP), SetMinimalSize(22, 22), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_COMBO), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP), SetMinimalSize(22, 22), EndContainer(), EndContainer(), /* Electric block signals. */ NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_NORM), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP), EndContainer(), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_ENTRY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP), EndContainer(), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_EXIT), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP), EndContainer(), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_COMBO), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_NORM), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP), SetMinimalSize(22, 22), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_ENTRY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP), SetMinimalSize(22, 22), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_EXIT), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP), SetMinimalSize(22, 22), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_COMBO), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP), SetMinimalSize(22, 22), EndContainer(), EndContainer(), EndContainer(), EndContainer(), /* Divider (only shown if block signals visible). */ NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BS_BLOCK_SPACER_SEL), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetMinimalSize(4, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetFill(0, 0), SetMinimalSize(4, 0), EndContainer(), EndContainer(), /* Path signals. */ NWidget(NWID_VERTICAL, NC_EQUALSIZE), /* Semaphore path signals. */ NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_PBS), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP), EndContainer(), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_PBS_OWAY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_PBS), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP), SetMinimalSize(22, 22), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_PBS_OWAY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP), SetMinimalSize(22, 22), EndContainer(), EndContainer(), /* Electric path signals. */ NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_PBS), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP), EndContainer(), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_PBS_OWAY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_PBS), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP), SetMinimalSize(22, 22), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_PBS_OWAY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP), SetMinimalSize(22, 22), EndContainer(), EndContainer(), EndContainer(), /* Convert/autofill buttons. */ NWidget(NWID_VERTICAL, NC_EQUALSIZE), - NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_BS_CONVERT), SetDataTip(SPR_IMG_SIGNAL_CONVERT, STR_BUILD_SIGNAL_CONVERT_TOOLTIP), SetFill(1, 1), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP), SetFill(1, 1), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BS_DRAG_SIGNALS_DENSITY_LABEL), SetDataTip(STR_JUST_INT, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP), SetTextStyle(TC_ORANGE), SetFill(1, 1), - NWidget(NWID_HORIZONTAL), SetPIP(2, 0, 2), - NWidget(NWID_SPACER), SetFill(1, 0), - NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_BS_DRAG_SIGNALS_DENSITY_DECREASE), SetMinimalSize(9, 12), SetDataTip(AWV_DECREASE, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP), - NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_BS_DRAG_SIGNALS_DENSITY_INCREASE), SetMinimalSize(9, 12), SetDataTip(AWV_INCREASE, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP), - NWidget(NWID_SPACER), SetFill(1, 0), + NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_BS_CONVERT), SetDataTip(SPR_IMG_SIGNAL_CONVERT, STR_BUILD_SIGNAL_CONVERT_TOOLTIP), SetFill(0, 1), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP), SetFill(0, 1), + NWidget(NWID_VERTICAL), SetPadding(2), SetPIPRatio(1, 0, 1), + NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BS_DRAG_SIGNALS_DENSITY_LABEL), SetDataTip(STR_JUST_INT, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP), SetTextStyle(TC_ORANGE), SetFill(1, 1), + NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), + NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_BS_DRAG_SIGNALS_DENSITY_DECREASE), SetMinimalSize(9, 12), SetDataTip(AWV_DECREASE, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP), + NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_BS_DRAG_SIGNALS_DENSITY_INCREASE), SetMinimalSize(9, 12), SetDataTip(AWV_INCREASE, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP), + EndContainer(), EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(0, 2), SetFill(1, 0), EndContainer(), EndContainer(), EndContainer(), From eaf62f3969f62b6ef4363b4534b35823b6da81f1 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 11 Mar 2024 15:42:44 +0100 Subject: [PATCH 101/695] Codechange: [CI] manual build CodeQL to improve speed (#12251) Autobuild also fetches dependencies and other things, while those are already ready on the system. This seems to cost ~1 minutes, for no actual good reason. --- .github/workflows/codeql.yml | 42 ++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index c5a432d80b..fe63c43d9f 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -26,6 +26,19 @@ jobs: - name: Checkout uses: actions/checkout@v4 + - name: Setup vcpkg caching + uses: actions/github-script@v7 + with: + script: | + core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); + core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); + core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite') + + - name: Install vcpkg + run: | + git clone https://github.com/microsoft/vcpkg + ./vcpkg/bootstrap-vcpkg.sh -disableMetrics + - name: Install dependencies run: | echo "::group::Update apt" @@ -44,13 +57,28 @@ jobs: libsdl2-dev \ zlib1g-dev \ # EOF + + echo "::group::Install vcpkg dependencies" + + # Disable vcpkg integration, as we mostly use system libraries. + mv vcpkg.json vcpkg-disabled.json + + # We only use breakpad from vcpkg, as its CMake files + # are a bit special. So the Ubuntu's variant doesn't work. + ./vcpkg/vcpkg install breakpad + echo "::endgroup::" env: DEBIAN_FRONTEND: noninteractive - - name: Set number of make jobs + - name: Prepare build run: | - echo "MAKEFLAGS=-j$(nproc)" >> $GITHUB_ENV + mkdir build + cd build + + echo "::group::CMake" + cmake .. -DCMAKE_TOOLCHAIN_FILE=${GITHUB_WORKSPACE}/vcpkg/scripts/buildsystems/vcpkg.cmake + echo "::endgroup::" - name: Initialize CodeQL uses: github/codeql-action/init@v3 @@ -58,8 +86,14 @@ jobs: languages: cpp config-file: ./.github/codeql/codeql-config.yml - - name: Autobuild - uses: github/codeql-action/autobuild@v3 + - name: Build + run: | + cd build + + echo "::group::Build" + echo "Running on $(nproc) cores" + cmake --build . -j $(nproc) + echo "::endgroup::" - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v3 From ee22fa34d7d98b7395cc4c6c83f8f0198e03565d Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 10 Mar 2024 10:29:41 +0100 Subject: [PATCH 102/695] Codechange: [CI] Split the ci-build into smaller components --- .github/workflows/ci-build.yml | 377 +++------------------------- .github/workflows/ci-emscripten.yml | 62 +++++ .github/workflows/ci-linux.yml | 123 +++++++++ .github/workflows/ci-macos.yml | 80 ++++++ .github/workflows/ci-mingw.yml | 83 ++++++ .github/workflows/ci-windows.yml | 87 +++++++ 6 files changed, 469 insertions(+), 343 deletions(-) create mode 100644 .github/workflows/ci-emscripten.yml create mode 100644 .github/workflows/ci-linux.yml create mode 100644 .github/workflows/ci-macos.yml create mode 100644 .github/workflows/ci-mingw.yml create mode 100644 .github/workflows/ci-windows.yml diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 953efe7bca..059ee338ab 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -17,56 +17,8 @@ jobs: emscripten: name: Emscripten - runs-on: ubuntu-20.04 - container: - # If you change this version, change the number in the cache step too. - image: emscripten/emsdk:3.1.42 - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup cache - uses: actions/cache@v4 - with: - path: /emsdk/upstream/emscripten/cache - key: 3.1.42-${{ runner.os }} - - - name: Patch Emscripten to support LZMA - run: | - cd /emsdk/upstream/emscripten - patch -p1 < ${GITHUB_WORKSPACE}/os/emscripten/emsdk-liblzma.patch - - - name: Build (host tools) - run: | - mkdir build-host - cd build-host - - echo "::group::CMake" - cmake .. -DOPTION_TOOLS_ONLY=ON - echo "::endgroup::" - - echo "::group::Build" - echo "Running on $(nproc) cores" - cmake --build . -j $(nproc) --target tools - echo "::endgroup::" - - - name: Install GCC problem matcher - uses: ammaraskar/gcc-problem-matcher@master - - - name: Build - run: | - mkdir build - cd build - - echo "::group::CMake" - emcmake cmake .. -DHOST_BINARY_DIR=../build-host - echo "::endgroup::" - - echo "::group::Build" - echo "Running on $(nproc) cores" - cmake --build . -j $(nproc) --target openttd - echo "::endgroup::" + uses: ./.github/workflows/ci-emscripten.yml + secrets: inherit linux: strategy: @@ -99,104 +51,14 @@ jobs: name: Linux (${{ matrix.name }}) - runs-on: ubuntu-latest - env: - CC: ${{ matrix.compiler }} - CXX: ${{ matrix.cxxcompiler }} + uses: ./.github/workflows/ci-linux.yml + secrets: inherit - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup vcpkg caching - uses: actions/github-script@v7 - with: - script: | - core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); - core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); - core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite') - - - name: Install vcpkg - run: | - git clone https://github.com/microsoft/vcpkg - ./vcpkg/bootstrap-vcpkg.sh -disableMetrics - - - name: Install dependencies - run: | - echo "::group::Update apt" - sudo apt-get update - echo "::endgroup::" - - echo "::group::Install dependencies" - sudo apt-get install -y --no-install-recommends \ - liballegro4-dev \ - libcurl4-openssl-dev \ - libfontconfig-dev \ - libharfbuzz-dev \ - libicu-dev \ - liblzma-dev \ - liblzo2-dev \ - ${{ matrix.libraries }} \ - zlib1g-dev \ - # EOF - - echo "::group::Install vcpkg dependencies" - - # Disable vcpkg integration, as we mostly use system libraries. - mv vcpkg.json vcpkg-disabled.json - - # We only use breakpad from vcpkg, as its CMake files - # are a bit special. So the Ubuntu's variant doesn't work. - ./vcpkg/vcpkg install breakpad - - echo "::endgroup::" - env: - DEBIAN_FRONTEND: noninteractive - - - name: Get OpenGFX - run: | - mkdir -p ~/.local/share/openttd/baseset - cd ~/.local/share/openttd/baseset - - echo "::group::Download OpenGFX" - curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip - echo "::endgroup::" - - echo "::group::Unpack OpenGFX" - unzip opengfx-all.zip - echo "::endgroup::" - - rm -f opengfx-all.zip - - - name: Install GCC problem matcher - uses: ammaraskar/gcc-problem-matcher@master - - - name: Build - run: | - mkdir build - cd build - - echo "::group::CMake" - cmake .. -DCMAKE_TOOLCHAIN_FILE=${GITHUB_WORKSPACE}/vcpkg/scripts/buildsystems/vcpkg.cmake ${{ matrix.extra-cmake-parameters }} - echo "::endgroup::" - - echo "::group::Build" - echo "Running on $(nproc) cores" - cmake --build . -j $(nproc) - echo "::endgroup::" - - - name: Test - run: | - ( - cd build - ctest -j $(nproc) --timeout 120 - ) - - # Re-enable vcpkg. - mv vcpkg-disabled.json vcpkg.json - - # Check no tracked files have been modified. - git diff --exit-code + with: + compiler: ${{ matrix.compiler }} + cxxcompiler: ${{ matrix.cxxcompiler }} + libraries: ${{ matrix.libraries }} + extra-cmake-parameters: ${{ matrix.extra-cmake-parameters }} macos: strategy: @@ -208,148 +70,35 @@ jobs: name: Mac OS (${{ matrix.arch }}) - runs-on: macos-14 - env: - MACOSX_DEPLOYMENT_TARGET: 10.13 + uses: ./.github/workflows/ci-macos.yml + secrets: inherit - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup vcpkg caching - uses: actions/github-script@v7 - with: - script: | - core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); - core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); - core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite') - - - name: Install vcpkg - run: | - git clone https://github.com/microsoft/vcpkg - ./vcpkg/bootstrap-vcpkg.sh -disableMetrics - - - name: Install OpenGFX - run: | - mkdir -p ~/Documents/OpenTTD/baseset - cd ~/Documents/OpenTTD/baseset - - echo "::group::Download OpenGFX" - curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip - echo "::endgroup::" - - echo "::group::Unpack OpenGFX" - unzip opengfx-all.zip - echo "::endgroup::" - - rm -f opengfx-all.zip - - - name: Install GCC problem matcher - uses: ammaraskar/gcc-problem-matcher@master - - - name: Build - run: | - mkdir build - cd build - - echo "::group::CMake" - cmake .. \ - -DCMAKE_OSX_ARCHITECTURES=${{ matrix.full_arch }} \ - -DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-osx \ - -DCMAKE_TOOLCHAIN_FILE=${GITHUB_WORKSPACE}/vcpkg/scripts/buildsystems/vcpkg.cmake \ - # EOF - echo "::endgroup::" - - echo "::group::Build" - echo "Running on $(sysctl -n hw.logicalcpu) cores" - cmake --build . -j $(sysctl -n hw.logicalcpu) - echo "::endgroup::" - - - name: Test - run: | - cd build - ctest -j $(sysctl -n hw.logicalcpu) --timeout 120 + with: + arch: ${{ matrix.arch }} + full_arch: ${{ matrix.full_arch }} windows: strategy: fail-fast: false matrix: - os: [windows-latest] - arch: [x86, x64] + include: + - os: windows-latest + name: Windows + arch: x86 + - os: windows-latest + name: Windows + arch: x64 - name: Windows (${{ matrix.os }} / ${{ matrix.arch }}) + name: ${{ matrix.name }} (${{ matrix.arch }}) - runs-on: ${{ matrix.os }} + uses: ./.github/workflows/ci-windows.yml + secrets: inherit - steps: - - name: Checkout - uses: actions/checkout@v4 + with: + os: ${{ matrix.os }} + arch: ${{ matrix.arch }} - - name: Setup vcpkg caching - uses: actions/github-script@v7 - with: - script: | - core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); - core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); - core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite') - - - name: Install vcpkg - run: | - git clone https://github.com/microsoft/vcpkg - .\vcpkg\bootstrap-vcpkg.bat -disableMetrics - - - name: Install OpenGFX - shell: bash - run: | - mkdir -p "C:/Users/Public/Documents/OpenTTD/baseset" - cd "C:/Users/Public/Documents/OpenTTD/baseset" - - echo "::group::Download OpenGFX" - curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip - echo "::endgroup::" - - echo "::group::Unpack OpenGFX" - unzip opengfx-all.zip - echo "::endgroup::" - - rm -f opengfx-all.zip - - - name: Install MSVC problem matcher - uses: ammaraskar/msvc-problem-matcher@master - - - name: Configure developer command prompt for ${{ matrix.arch }} - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: ${{ matrix.arch }} - - - name: Build - shell: bash - env: - NINJA_STATUS: "[%f/%t -- %e] " # [finished_edges/total_edges -- elapsed_time], default value is "[%f/%t] " - run: | - mkdir build - cd build - - echo "::group::CMake" - cmake .. \ - -GNinja \ - -DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-windows-static \ - -DCMAKE_TOOLCHAIN_FILE="${GITHUB_WORKSPACE}\vcpkg\scripts\buildsystems\vcpkg.cmake" \ - # EOF - echo "::endgroup::" - - echo "::group::Build" - cmake --build . - echo "::endgroup::" - - - name: Test - shell: bash - run: | - cd build - ctest --timeout 120 - - - msys2: + mingw: strategy: fail-fast: false matrix: @@ -361,70 +110,12 @@ jobs: name: MinGW (${{ matrix.arch }}) - runs-on: windows-latest + uses: ./.github/workflows/ci-mingw.yml + secrets: inherit - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup MSYS2 - uses: msys2/setup-msys2@v2 - with: - msystem: ${{ matrix.msystem }} - release: false - install: >- - git - make - mingw-w64-${{ matrix.arch }}-cmake - mingw-w64-${{ matrix.arch }}-gcc - mingw-w64-${{ matrix.arch }}-lzo2 - mingw-w64-${{ matrix.arch }}-libpng - mingw-w64-${{ matrix.arch }}-lld - mingw-w64-${{ matrix.arch }}-ninja - - - name: Install OpenGFX - shell: bash - run: | - mkdir -p "C:/Users/Public/Documents/OpenTTD/baseset" - cd "C:/Users/Public/Documents/OpenTTD/baseset" - - echo "::group::Download OpenGFX" - curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip - echo "::endgroup::" - - echo "::group::Unpack OpenGFX" - unzip opengfx-all.zip - echo "::endgroup::" - - rm -f opengfx-all.zip - - - name: Install GCC problem matcher - uses: ammaraskar/gcc-problem-matcher@master - - - name: Build - shell: msys2 {0} - env: - NINJA_STATUS: "[%f/%t -- %e] " # [finished_edges/total_edges -- elapsed_time], default value is "[%f/%t] " - run: | - mkdir build - cd build - - echo "::group::CMake" - cmake .. \ - -GNinja \ - -DCMAKE_CXX_FLAGS="-fuse-ld=lld" \ - # EOF - echo "::endgroup::" - - echo "::group::Build" - cmake --build . - echo "::endgroup::" - - - name: Test - shell: msys2 {0} - run: | - cd build - ctest --timeout 120 + with: + msystem: ${{ matrix.msystem }} + arch: ${{ matrix.arch }} check_annotations: name: Check Annotations @@ -433,7 +124,7 @@ jobs: - linux - macos - windows - - msys2 + - mingw if: always() && github.event_name == 'pull_request' diff --git a/.github/workflows/ci-emscripten.yml b/.github/workflows/ci-emscripten.yml new file mode 100644 index 0000000000..e1814ed79b --- /dev/null +++ b/.github/workflows/ci-emscripten.yml @@ -0,0 +1,62 @@ +name: CI (Emscripten) + +on: + workflow_call: + +env: + CTEST_OUTPUT_ON_FAILURE: 1 + +jobs: + emscripten: + name: CI + + runs-on: ubuntu-20.04 + container: + # If you change this version, change the number in the cache step too. + image: emscripten/emsdk:3.1.42 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup cache + uses: actions/cache@v4 + with: + path: /emsdk/upstream/emscripten/cache + key: 3.1.42-${{ runner.os }} + + - name: Patch Emscripten to support LZMA + run: | + cd /emsdk/upstream/emscripten + patch -p1 < ${GITHUB_WORKSPACE}/os/emscripten/emsdk-liblzma.patch + + - name: Build (host tools) + run: | + mkdir build-host + cd build-host + + echo "::group::CMake" + cmake .. -DOPTION_TOOLS_ONLY=ON + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + cmake --build . -j $(nproc) --target tools + echo "::endgroup::" + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build + run: | + mkdir build + cd build + + echo "::group::CMake" + emcmake cmake .. -DHOST_BINARY_DIR=../build-host + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + cmake --build . -j $(nproc) --target openttd + echo "::endgroup::" diff --git a/.github/workflows/ci-linux.yml b/.github/workflows/ci-linux.yml new file mode 100644 index 0000000000..61b96a32cc --- /dev/null +++ b/.github/workflows/ci-linux.yml @@ -0,0 +1,123 @@ +name: CI (Linux) + +on: + workflow_call: + inputs: + compiler: + required: true + type: string + cxxcompiler: + required: true + type: string + libraries: + required: true + type: string + extra-cmake-parameters: + required: true + type: string + +env: + CTEST_OUTPUT_ON_FAILURE: 1 + +jobs: + linux: + name: CI + + runs-on: ubuntu-latest + env: + CC: ${{ inputs.compiler }} + CXX: ${{ inputs.cxxcompiler }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup vcpkg caching + uses: actions/github-script@v7 + with: + script: | + core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); + core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); + core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite') + + - name: Install vcpkg + run: | + git clone https://github.com/microsoft/vcpkg + ./vcpkg/bootstrap-vcpkg.sh -disableMetrics + + - name: Install dependencies + run: | + echo "::group::Update apt" + sudo apt-get update + echo "::endgroup::" + + echo "::group::Install dependencies" + sudo apt-get install -y --no-install-recommends \ + liballegro4-dev \ + libcurl4-openssl-dev \ + libfontconfig-dev \ + libharfbuzz-dev \ + libicu-dev \ + liblzma-dev \ + liblzo2-dev \ + ${{ inputs.libraries }} \ + zlib1g-dev \ + # EOF + + echo "::group::Install vcpkg dependencies" + + # Disable vcpkg integration, as we mostly use system libraries. + mv vcpkg.json vcpkg-disabled.json + + # We only use breakpad from vcpkg, as its CMake files + # are a bit special. So the Ubuntu's variant doesn't work. + ./vcpkg/vcpkg install breakpad + + echo "::endgroup::" + env: + DEBIAN_FRONTEND: noninteractive + + - name: Get OpenGFX + run: | + mkdir -p ~/.local/share/openttd/baseset + cd ~/.local/share/openttd/baseset + + echo "::group::Download OpenGFX" + curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip + echo "::endgroup::" + + echo "::group::Unpack OpenGFX" + unzip opengfx-all.zip + echo "::endgroup::" + + rm -f opengfx-all.zip + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build + run: | + mkdir build + cd build + + echo "::group::CMake" + cmake .. -DCMAKE_TOOLCHAIN_FILE=${GITHUB_WORKSPACE}/vcpkg/scripts/buildsystems/vcpkg.cmake ${{ inputs.extra-cmake-parameters }} + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + cmake --build . -j $(nproc) + echo "::endgroup::" + + - name: Test + run: | + ( + cd build + ctest -j $(nproc) --timeout 120 + ) + + # Re-enable vcpkg. + mv vcpkg-disabled.json vcpkg.json + + # Check no tracked files have been modified. + git diff --exit-code diff --git a/.github/workflows/ci-macos.yml b/.github/workflows/ci-macos.yml new file mode 100644 index 0000000000..025580e8c6 --- /dev/null +++ b/.github/workflows/ci-macos.yml @@ -0,0 +1,80 @@ +name: CI (MacOS) + +on: + workflow_call: + inputs: + arch: + required: true + type: string + full_arch: + required: true + type: string + +env: + CTEST_OUTPUT_ON_FAILURE: 1 + +jobs: + macos: + name: CI + + runs-on: macos-14 + env: + MACOSX_DEPLOYMENT_TARGET: 10.13 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup vcpkg caching + uses: actions/github-script@v7 + with: + script: | + core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); + core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); + core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite') + + - name: Install vcpkg + run: | + git clone https://github.com/microsoft/vcpkg + ./vcpkg/bootstrap-vcpkg.sh -disableMetrics + + - name: Install OpenGFX + run: | + mkdir -p ~/Documents/OpenTTD/baseset + cd ~/Documents/OpenTTD/baseset + + echo "::group::Download OpenGFX" + curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip + echo "::endgroup::" + + echo "::group::Unpack OpenGFX" + unzip opengfx-all.zip + echo "::endgroup::" + + rm -f opengfx-all.zip + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build + run: | + mkdir build + cd build + + echo "::group::CMake" + cmake .. \ + -DCMAKE_OSX_ARCHITECTURES=${{ inputs.full_arch }} \ + -DVCPKG_TARGET_TRIPLET=${{ inputs.arch }}-osx \ + -DCMAKE_TOOLCHAIN_FILE=${GITHUB_WORKSPACE}/vcpkg/scripts/buildsystems/vcpkg.cmake \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(sysctl -n hw.logicalcpu) cores" + cmake --build . -j $(sysctl -n hw.logicalcpu) + echo "::endgroup::" + + - name: Test + run: | + cd build + ctest -j $(sysctl -n hw.logicalcpu) --timeout 120 diff --git a/.github/workflows/ci-mingw.yml b/.github/workflows/ci-mingw.yml new file mode 100644 index 0000000000..6a244ee6b4 --- /dev/null +++ b/.github/workflows/ci-mingw.yml @@ -0,0 +1,83 @@ +name: CI (MinGW) + +on: + workflow_call: + inputs: + arch: + required: true + type: string + msystem: + required: true + type: string + +env: + CTEST_OUTPUT_ON_FAILURE: 1 + +jobs: + mingw: + name: CI + + runs-on: windows-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup MSYS2 + uses: msys2/setup-msys2@v2 + with: + msystem: ${{ inputs.msystem }} + release: false + install: >- + git + make + mingw-w64-${{ inputs.arch }}-cmake + mingw-w64-${{ inputs.arch }}-gcc + mingw-w64-${{ inputs.arch }}-lzo2 + mingw-w64-${{ inputs.arch }}-libpng + mingw-w64-${{ inputs.arch }}-lld + mingw-w64-${{ inputs.arch }}-ninja + + - name: Install OpenGFX + shell: bash + run: | + mkdir -p "C:/Users/Public/Documents/OpenTTD/baseset" + cd "C:/Users/Public/Documents/OpenTTD/baseset" + + echo "::group::Download OpenGFX" + curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip + echo "::endgroup::" + + echo "::group::Unpack OpenGFX" + unzip opengfx-all.zip + echo "::endgroup::" + + rm -f opengfx-all.zip + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build + shell: msys2 {0} + env: + NINJA_STATUS: "[%f/%t -- %e] " # [finished_edges/total_edges -- elapsed_time], default value is "[%f/%t] " + run: | + mkdir build + cd build + + echo "::group::CMake" + cmake .. \ + -GNinja \ + -DCMAKE_CXX_FLAGS="-fuse-ld=lld" \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + cmake --build . + echo "::endgroup::" + + - name: Test + shell: msys2 {0} + run: | + cd build + ctest --timeout 120 diff --git a/.github/workflows/ci-windows.yml b/.github/workflows/ci-windows.yml new file mode 100644 index 0000000000..3411581d3d --- /dev/null +++ b/.github/workflows/ci-windows.yml @@ -0,0 +1,87 @@ +name: CI (Windows) + +on: + workflow_call: + inputs: + arch: + required: true + type: string + os: + required: true + type: string + +env: + CTEST_OUTPUT_ON_FAILURE: 1 + +jobs: + windows: + name: CI + + runs-on: ${{ inputs.os }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup vcpkg caching + uses: actions/github-script@v7 + with: + script: | + core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); + core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); + core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite') + + - name: Install vcpkg + run: | + git clone https://github.com/microsoft/vcpkg + .\vcpkg\bootstrap-vcpkg.bat -disableMetrics + + - name: Install OpenGFX + shell: bash + run: | + mkdir -p "C:/Users/Public/Documents/OpenTTD/baseset" + cd "C:/Users/Public/Documents/OpenTTD/baseset" + + echo "::group::Download OpenGFX" + curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip + echo "::endgroup::" + + echo "::group::Unpack OpenGFX" + unzip opengfx-all.zip + echo "::endgroup::" + + rm -f opengfx-all.zip + + - name: Install MSVC problem matcher + uses: ammaraskar/msvc-problem-matcher@master + + - name: Configure developer command prompt for ${{ inputs.arch }} + uses: ilammy/msvc-dev-cmd@v1 + with: + arch: ${{ inputs.arch }} + + - name: Build + shell: bash + env: + NINJA_STATUS: "[%f/%t -- %e] " # [finished_edges/total_edges -- elapsed_time], default value is "[%f/%t] " + run: | + mkdir build + cd build + + echo "::group::CMake" + cmake .. \ + -GNinja \ + -DVCPKG_TARGET_TRIPLET=${{ inputs.arch }}-windows-static \ + -DCMAKE_TOOLCHAIN_FILE="${GITHUB_WORKSPACE}\vcpkg\scripts\buildsystems\vcpkg.cmake" \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + cmake --build . + echo "::endgroup::" + + - name: Test + shell: bash + run: | + cd build + ctest --timeout 120 From c768f4fc7a7dc7c17586f14508814032dc8ade22 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 10 Mar 2024 10:48:11 +0100 Subject: [PATCH 103/695] Codechange: [CI] build some targets every night, instead of every PR This mainly as they are not expected to fail, or give more information than the other targets already would. And this is just hogging up the CI pipeline. On average, these targets take ~80 CPU-minutes to finish. --- .dorpsgek.yml | 1 + .github/workflows/ci-build.yml | 30 +----------- .github/workflows/ci-nightly.yml | 82 ++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+), 28 deletions(-) create mode 100644 .github/workflows/ci-nightly.yml diff --git a/.dorpsgek.yml b/.dorpsgek.yml index bbd2b9780a..2a1dc5f0f5 100644 --- a/.dorpsgek.yml +++ b/.dorpsgek.yml @@ -17,3 +17,4 @@ notifications: workflow-run: only: - .github/workflows/release.yml + - .github/workflows/ci-nightly.yml diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 059ee338ab..0cedad4c61 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -1,4 +1,4 @@ -name: CI +name: CI - Build on: pull_request: @@ -38,10 +38,6 @@ jobs: compiler: gcc cxxcompiler: g++ libraries: libsdl2-dev - - name: GCC - SDL1.2 - compiler: gcc - cxxcompiler: g++ - libraries: libsdl1.2-dev - name: GCC - Dedicated compiler: gcc cxxcompiler: g++ @@ -83,13 +79,11 @@ jobs: matrix: include: - os: windows-latest - name: Windows arch: x86 - os: windows-latest - name: Windows arch: x64 - name: ${{ matrix.name }} (${{ matrix.arch }}) + name: Windows (${{ matrix.arch }}) uses: ./.github/workflows/ci-windows.yml secrets: inherit @@ -98,25 +92,6 @@ jobs: os: ${{ matrix.os }} arch: ${{ matrix.arch }} - mingw: - strategy: - fail-fast: false - matrix: - include: - - msystem: MINGW64 - arch: x86_64 - - msystem: MINGW32 - arch: i686 - - name: MinGW (${{ matrix.arch }}) - - uses: ./.github/workflows/ci-mingw.yml - secrets: inherit - - with: - msystem: ${{ matrix.msystem }} - arch: ${{ matrix.arch }} - check_annotations: name: Check Annotations needs: @@ -124,7 +99,6 @@ jobs: - linux - macos - windows - - mingw if: always() && github.event_name == 'pull_request' diff --git a/.github/workflows/ci-nightly.yml b/.github/workflows/ci-nightly.yml new file mode 100644 index 0000000000..15bc55a97c --- /dev/null +++ b/.github/workflows/ci-nightly.yml @@ -0,0 +1,82 @@ +name: CI - Nightly + +on: + schedule: + - cron: '0 3 * * *' + workflow_dispatch: + +env: + CTEST_OUTPUT_ON_FAILURE: 1 + +jobs: + linux: + strategy: + fail-fast: false + matrix: + include: + - name: GCC - SDL1.2 + compiler: gcc + cxxcompiler: g++ + libraries: libsdl1.2-dev + + name: Linux (${{ matrix.name }}) + + uses: ./.github/workflows/ci-linux.yml + secrets: inherit + + with: + compiler: ${{ matrix.compiler }} + cxxcompiler: ${{ matrix.cxxcompiler }} + libraries: ${{ matrix.libraries }} + extra-cmake-parameters: + + macos: + strategy: + fail-fast: false + matrix: + include: + - arch: x64 + full_arch: x86_64 + + name: Mac OS (${{ matrix.arch }}) + + uses: ./.github/workflows/ci-macos.yml + secrets: inherit + + with: + arch: ${{ matrix.arch }} + full_arch: ${{ matrix.full_arch }} + + mingw: + strategy: + fail-fast: false + matrix: + include: + - msystem: MINGW64 + arch: x86_64 + - msystem: MINGW32 + arch: i686 + + name: MinGW (${{ matrix.arch }}) + + uses: ./.github/workflows/ci-mingw.yml + secrets: inherit + + with: + msystem: ${{ matrix.msystem }} + arch: ${{ matrix.arch }} + + check_annotations: + name: Check Annotations + needs: + - linux + - macos + - mingw + + if: always() + + runs-on: ubuntu-latest + + steps: + - name: Check annotations + uses: OpenTTD/actions/annotation-check@v5 From d7b99cbe266a02e022f1ac4792bad8ed2c2b19a5 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 11 Mar 2024 19:53:09 +0100 Subject: [PATCH 104/695] Codefix: [CI] Store vcpkg outside the repository folder (#12271) Otherwise tools like CodeQL can pick up on vcpkg files. --- .github/workflows/ci-linux.yml | 8 ++++---- .github/workflows/ci-macos.yml | 6 +++--- .github/workflows/ci-windows.yml | 6 +++--- .github/workflows/codeql.yml | 8 ++++---- .github/workflows/release-macos.yml | 8 ++++---- .github/workflows/release-windows.yml | 8 ++++---- 6 files changed, 22 insertions(+), 22 deletions(-) diff --git a/.github/workflows/ci-linux.yml b/.github/workflows/ci-linux.yml index 61b96a32cc..bfe345412a 100644 --- a/.github/workflows/ci-linux.yml +++ b/.github/workflows/ci-linux.yml @@ -42,8 +42,8 @@ jobs: - name: Install vcpkg run: | - git clone https://github.com/microsoft/vcpkg - ./vcpkg/bootstrap-vcpkg.sh -disableMetrics + git clone https://github.com/microsoft/vcpkg ${{ runner.temp }}/vcpkg + ${{ runner.temp }}/vcpkg/bootstrap-vcpkg.sh -disableMetrics - name: Install dependencies run: | @@ -71,7 +71,7 @@ jobs: # We only use breakpad from vcpkg, as its CMake files # are a bit special. So the Ubuntu's variant doesn't work. - ./vcpkg/vcpkg install breakpad + ${{ runner.temp }}/vcpkg/vcpkg install breakpad echo "::endgroup::" env: @@ -101,7 +101,7 @@ jobs: cd build echo "::group::CMake" - cmake .. -DCMAKE_TOOLCHAIN_FILE=${GITHUB_WORKSPACE}/vcpkg/scripts/buildsystems/vcpkg.cmake ${{ inputs.extra-cmake-parameters }} + cmake .. -DCMAKE_TOOLCHAIN_FILE=${{ runner.temp }}/vcpkg/scripts/buildsystems/vcpkg.cmake ${{ inputs.extra-cmake-parameters }} echo "::endgroup::" echo "::group::Build" diff --git a/.github/workflows/ci-macos.yml b/.github/workflows/ci-macos.yml index 025580e8c6..f4f30a606b 100644 --- a/.github/workflows/ci-macos.yml +++ b/.github/workflows/ci-macos.yml @@ -35,8 +35,8 @@ jobs: - name: Install vcpkg run: | - git clone https://github.com/microsoft/vcpkg - ./vcpkg/bootstrap-vcpkg.sh -disableMetrics + git clone https://github.com/microsoft/vcpkg ${{ runner.temp }}/vcpkg + ${{ runner.temp }}/vcpkg/bootstrap-vcpkg.sh -disableMetrics - name: Install OpenGFX run: | @@ -65,7 +65,7 @@ jobs: cmake .. \ -DCMAKE_OSX_ARCHITECTURES=${{ inputs.full_arch }} \ -DVCPKG_TARGET_TRIPLET=${{ inputs.arch }}-osx \ - -DCMAKE_TOOLCHAIN_FILE=${GITHUB_WORKSPACE}/vcpkg/scripts/buildsystems/vcpkg.cmake \ + -DCMAKE_TOOLCHAIN_FILE=${{ runner.temp }}/vcpkg/scripts/buildsystems/vcpkg.cmake \ # EOF echo "::endgroup::" diff --git a/.github/workflows/ci-windows.yml b/.github/workflows/ci-windows.yml index 3411581d3d..b748e8db2e 100644 --- a/.github/workflows/ci-windows.yml +++ b/.github/workflows/ci-windows.yml @@ -33,8 +33,8 @@ jobs: - name: Install vcpkg run: | - git clone https://github.com/microsoft/vcpkg - .\vcpkg\bootstrap-vcpkg.bat -disableMetrics + git clone https://github.com/microsoft/vcpkg ${{ runner.temp }}\vcpkg + ${{ runner.temp }}\vcpkg\bootstrap-vcpkg.bat -disableMetrics - name: Install OpenGFX shell: bash @@ -72,7 +72,7 @@ jobs: cmake .. \ -GNinja \ -DVCPKG_TARGET_TRIPLET=${{ inputs.arch }}-windows-static \ - -DCMAKE_TOOLCHAIN_FILE="${GITHUB_WORKSPACE}\vcpkg\scripts\buildsystems\vcpkg.cmake" \ + -DCMAKE_TOOLCHAIN_FILE="${{ runner.temp }}\vcpkg\scripts\buildsystems\vcpkg.cmake" \ # EOF echo "::endgroup::" diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index fe63c43d9f..4d10111a4e 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -36,8 +36,8 @@ jobs: - name: Install vcpkg run: | - git clone https://github.com/microsoft/vcpkg - ./vcpkg/bootstrap-vcpkg.sh -disableMetrics + git clone https://github.com/microsoft/vcpkg ${{ runner.temp }}/vcpkg + ${{ runner.temp }}/vcpkg/bootstrap-vcpkg.sh -disableMetrics - name: Install dependencies run: | @@ -65,7 +65,7 @@ jobs: # We only use breakpad from vcpkg, as its CMake files # are a bit special. So the Ubuntu's variant doesn't work. - ./vcpkg/vcpkg install breakpad + ${{ runner.temp }}/vcpkg/vcpkg install breakpad echo "::endgroup::" env: @@ -77,7 +77,7 @@ jobs: cd build echo "::group::CMake" - cmake .. -DCMAKE_TOOLCHAIN_FILE=${GITHUB_WORKSPACE}/vcpkg/scripts/buildsystems/vcpkg.cmake + cmake .. -DCMAKE_TOOLCHAIN_FILE=${{ runner.temp }}/vcpkg/scripts/buildsystems/vcpkg.cmake echo "::endgroup::" - name: Initialize CodeQL diff --git a/.github/workflows/release-macos.yml b/.github/workflows/release-macos.yml index 38170e1a6a..afaad467a9 100644 --- a/.github/workflows/release-macos.yml +++ b/.github/workflows/release-macos.yml @@ -42,8 +42,8 @@ jobs: - name: Install vcpkg run: | - git clone https://github.com/microsoft/vcpkg - ./vcpkg/bootstrap-vcpkg.sh -disableMetrics + git clone https://github.com/microsoft/vcpkg ${{ runner.temp }}/vcpkg + ${{ runner.temp }}/vcpkg/bootstrap-vcpkg.sh -disableMetrics - name: Install dependencies env: @@ -99,7 +99,7 @@ jobs: cmake ${GITHUB_WORKSPACE} \ -DCMAKE_OSX_ARCHITECTURES=arm64 \ -DVCPKG_TARGET_TRIPLET=arm64-osx \ - -DCMAKE_TOOLCHAIN_FILE=${GITHUB_WORKSPACE}/vcpkg/scripts/buildsystems/vcpkg.cmake \ + -DCMAKE_TOOLCHAIN_FILE=${{ runner.temp }}/vcpkg/scripts/buildsystems/vcpkg.cmake \ -DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DOPTION_SURVEY_KEY=${{ inputs.survey_key }} \ @@ -120,7 +120,7 @@ jobs: cmake ${GITHUB_WORKSPACE} \ -DCMAKE_OSX_ARCHITECTURES=x86_64 \ -DVCPKG_TARGET_TRIPLET=x64-osx \ - -DCMAKE_TOOLCHAIN_FILE=${GITHUB_WORKSPACE}/vcpkg/scripts/buildsystems/vcpkg.cmake \ + -DCMAKE_TOOLCHAIN_FILE=${{ runner.temp }}/vcpkg/scripts/buildsystems/vcpkg.cmake \ -DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DOPTION_SURVEY_KEY=${{ inputs.survey_key }} \ diff --git a/.github/workflows/release-windows.yml b/.github/workflows/release-windows.yml index 93dfce6498..a574a28f01 100644 --- a/.github/workflows/release-windows.yml +++ b/.github/workflows/release-windows.yml @@ -55,8 +55,8 @@ jobs: - name: Install vcpkg run: | - git clone https://github.com/microsoft/vcpkg - .\vcpkg\bootstrap-vcpkg.bat -disableMetrics + git clone https://github.com/microsoft/vcpkg ${{ runner.temp }}\vcpkg + ${{ runner.temp }}\vcpkg\bootstrap-vcpkg.bat -disableMetrics - name: Install dependencies shell: bash @@ -126,7 +126,7 @@ jobs: cmake ${GITHUB_WORKSPACE} \ -GNinja \ -DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-windows-static \ - -DCMAKE_TOOLCHAIN_FILE="${GITHUB_WORKSPACE}\vcpkg\scripts\buildsystems\vcpkg.cmake" \ + -DCMAKE_TOOLCHAIN_FILE="${{ runner.temp }}\vcpkg\scripts\buildsystems\vcpkg.cmake" \ -DOPTION_USE_NSIS=ON \ -DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ @@ -152,7 +152,7 @@ jobs: cmake ${GITHUB_WORKSPACE} \ -GNinja \ -DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-windows-static \ - -DCMAKE_TOOLCHAIN_FILE="${GITHUB_WORKSPACE}\vcpkg\scripts\buildsystems\vcpkg.cmake" \ + -DCMAKE_TOOLCHAIN_FILE="${{ runner.temp }}\vcpkg\scripts\buildsystems\vcpkg.cmake" \ -DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DOPTION_SURVEY_KEY=${{ inputs.survey_key }} \ From 984202b1018a24603539e18900838de3e8f6e87e Mon Sep 17 00:00:00 2001 From: Koen Bussemaker Date: Mon, 11 Mar 2024 19:48:11 +0100 Subject: [PATCH 105/695] Codechange: Remove outdated YAPF example code --- src/pathfinder/yapf/yapf_base.hpp | 55 ------------------------------- 1 file changed, 55 deletions(-) diff --git a/src/pathfinder/yapf/yapf_base.hpp b/src/pathfinder/yapf/yapf_base.hpp index 88c875d842..de46ebb6c9 100644 --- a/src/pathfinder/yapf/yapf_base.hpp +++ b/src/pathfinder/yapf/yapf_base.hpp @@ -290,61 +290,6 @@ public: dmp.WriteStructT("m_nodes", &m_nodes); dmp.WriteValue("m_num_steps", m_num_steps); } - - /* methods that should be implemented at derived class Types::Tpf (derived from CYapfBaseT) */ - -#if 0 - /** Example: PfSetStartupNodes() - set source (origin) nodes */ - inline void PfSetStartupNodes() - { - /* example: */ - Node &n1 = *base::m_nodes.CreateNewNode(); - . - . // setup node members here - . - base::m_nodes.InsertOpenNode(n1); - } - - /** Example: PfFollowNode() - set following (child) nodes of the given node */ - inline void PfFollowNode(Node &org) - { - for (each follower of node org) { - Node &n = *base::m_nodes.CreateNewNode(); - . - . // setup node members here - . - n.m_parent = &org; // set node's parent to allow back tracking - AddNewNode(n); - } - } - - /** Example: PfCalcCost() - set path cost from origin to the given node */ - inline bool PfCalcCost(Node &n) - { - /* evaluate last step cost */ - int cost = ...; - /* set the node cost as sum of parent's cost and last step cost */ - n.m_cost = n.m_parent->m_cost + cost; - return true; // true if node is valid follower (i.e. no obstacle was found) - } - - /** Example: PfCalcEstimate() - set path cost estimate from origin to the target through given node */ - inline bool PfCalcEstimate(Node &n) - { - /* evaluate the distance to our destination */ - int distance = ...; - /* set estimate as sum of cost from origin + distance to the target */ - n.m_estimate = n.m_cost + distance; - return true; // true if node is valid (i.e. not too far away :) - } - - /** Example: PfDetectDestination() - return true if the given node is our destination */ - inline bool PfDetectDestination(Node &n) - { - bool bDest = (n.m_key.m_x == m_x2) && (n.m_key.m_y == m_y2); - return bDest; - } -#endif }; #endif /* YAPF_BASE_HPP */ From a06814c17367f4b7f6e2241a76dab98a6d1422ae Mon Sep 17 00:00:00 2001 From: Rubidium Date: Wed, 17 Jan 2024 03:45:47 +0100 Subject: [PATCH 106/695] Codechange: use std::source_location over __FILE__ and __LINE__ for Random --- src/core/random_func.cpp | 20 ++--------- src/core/random_func.hpp | 76 +++++++++++++++++++--------------------- 2 files changed, 39 insertions(+), 57 deletions(-) diff --git a/src/core/random_func.cpp b/src/core/random_func.cpp index 7b605501a0..8266f751d2 100644 --- a/src/core/random_func.cpp +++ b/src/core/random_func.cpp @@ -49,17 +49,6 @@ uint32_t Randomizer::Next() return this->state[1] = std::rotr(s, 3) - 1; } -/** - * Generate the next pseudo random number scaled to \a limit, excluding \a limit - * itself. - * @param limit Limit of the range to be generated from. - * @return Random number in [0,\a limit) - */ -uint32_t Randomizer::Next(uint32_t limit) -{ - return ((uint64_t)this->Next() * (uint64_t)limit) >> 32; -} - /** * (Re)set the state of the random number generator. * @param seed the new state @@ -81,19 +70,14 @@ void SetRandomSeed(uint32_t seed) } #ifdef RANDOM_DEBUG -uint32_t DoRandom(int line, const char *file) +uint32_t Random(const std::source_location location) { if (_networking && (!_network_server || (NetworkClientSocket::IsValidID(0) && NetworkClientSocket::Get(0)->status != NetworkClientSocket::STATUS_INACTIVE))) { - Debug(random, 0, "{:08x}; {:02x}; {:04x}; {:02x}; {}:{}", TimerGameEconomy::date, TimerGameEconomy::date_fract, _frame_counter, (byte)_current_company, file, line); + Debug(random, 0, "{:08x}; {:02x}; {:04x}; {:02x}; {}:{}", TimerGameEconomy::date, TimerGameEconomy::date_fract, _frame_counter, (byte)_current_company, location.file_name(), location.line()); } return _random.Next(); } - -uint32_t DoRandomRange(uint32_t limit, int line, const char *file) -{ - return ((uint64_t)DoRandom(line, file) * (uint64_t)limit) >> 32; -} #endif /* RANDOM_DEBUG */ /** diff --git a/src/core/random_func.hpp b/src/core/random_func.hpp index ef3f4569b2..d24c4e12d0 100644 --- a/src/core/random_func.hpp +++ b/src/core/random_func.hpp @@ -10,10 +10,16 @@ #ifndef RANDOM_FUNC_HPP #define RANDOM_FUNC_HPP -#if defined(__APPLE__) - /* Apple already has Random declared */ -# define Random OTTD_Random -#endif /* __APPLE__ */ +/** + * Scale a uint32_t number to be within the range [0,\a limit). + * @param value The value to scale. + * @param limit The limit to scale to. + * @return The scaled value. + */ +static constexpr uint32_t ScaleToLimit(uint32_t value, uint32_t limit) +{ + return ((uint64_t)value * (uint64_t)limit) >> 32; +} /** * Structure to encapsulate the pseudo random number generators. @@ -23,8 +29,15 @@ struct Randomizer { uint32_t state[2]; uint32_t Next(); - uint32_t Next(uint32_t limit); void SetSeed(uint32_t seed); + + /** + * Generate the next pseudo random number scaled to \a limit, excluding \a limit + * itself. + * @param limit Limit of the range to be generated from. + * @return Random number in [0,\a limit) + */ + inline uint32_t Next(uint32_t limit) { return ScaleToLimit(this->Next(), limit); } }; extern Randomizer _random; ///< Random used in the game state calculations extern Randomizer _interactive_random; ///< Random used everywhere else, where it does not (directly) influence the game state @@ -57,33 +70,26 @@ inline void RestoreRandomSeeds(const SavedRandomSeeds &storage) void SetRandomSeed(uint32_t seed); #ifdef RANDOM_DEBUG -# ifdef __APPLE__ -# define OTTD_Random() DoRandom(__LINE__, __FILE__) -# else -# define Random() DoRandom(__LINE__, __FILE__) -# endif - uint32_t DoRandom(int line, const char *file); -# define RandomRange(limit) DoRandomRange(limit, __LINE__, __FILE__) - uint32_t DoRandomRange(uint32_t limit, int line, const char *file); + uint32_t Random(const std::source_location location = std::source_location::current()); #else - static inline uint32_t Random() + inline uint32_t Random([[maybe_unused]] const std::source_location location = std::source_location::current()) { return _random.Next(); } - - /** - * Pick a random number between 0 and \a limit - 1, inclusive. That means 0 - * can be returned and \a limit - 1 can be returned, but \a limit can not be - * returned. - * @param limit Limit for the range to be picked from. - * @return A random number in [0,\a limit). - */ - static inline uint32_t RandomRange(uint32_t limit) - { - return _random.Next(limit); - } #endif +/** + * Pick a random number between 0 and \a limit - 1, inclusive. That means 0 + * can be returned and \a limit - 1 can be returned, but \a limit can not be + * returned. + * @param limit Limit for the range to be picked from. + * @return A random number in [0,\a limit). + */ +inline uint32_t RandomRange(uint32_t limit, const std::source_location location = std::source_location::current()) +{ + return ScaleToLimit(Random(location), limit); +} + inline uint32_t InteractiveRandom() { return _interactive_random.Next(); @@ -109,7 +115,7 @@ inline uint32_t InteractiveRandomRange(uint32_t limit) * @param r The given randomize-number * @return True if the probability given by r is less or equal to (a/b) */ -inline bool Chance16I(const uint a, const uint b, const uint32_t r) +inline bool Chance16I(const uint32_t a, const uint32_t b, const uint32_t r) { assert(b != 0); return (((uint16_t)r * b + b / 2) >> 16) < a; @@ -125,14 +131,10 @@ inline bool Chance16I(const uint a, const uint b, const uint32_t r) * @param b The denominator of the fraction * @return True with (a/b) probability */ -#ifdef RANDOM_DEBUG -# define Chance16(a, b) Chance16I(a, b, DoRandom(__LINE__, __FILE__)) -#else -inline bool Chance16(const uint a, const uint b) +inline bool Chance16(const uint32_t a, const uint32_t b, const std::source_location location = std::source_location::current()) { - return Chance16I(a, b, Random()); + return Chance16I(a, b, Random(location)); } -#endif /* RANDOM_DEBUG */ /** * Flips a coin with a given probability and saves the randomize-number in a variable. @@ -149,15 +151,11 @@ inline bool Chance16(const uint a, const uint b) * @param r The variable to save the randomize-number from Random() * @return True in (a/b) percent */ -#ifdef RANDOM_DEBUG -# define Chance16R(a, b, r) (r = DoRandom(__LINE__, __FILE__), Chance16I(a, b, r)) -#else -inline bool Chance16R(const uint a, const uint b, uint32_t &r) +inline bool Chance16R(const uint32_t a, const uint32_t b, uint32_t &r, const std::source_location location = std::source_location::current()) { - r = Random(); + r = Random(location); return Chance16I(a, b, r); } -#endif /* RANDOM_DEBUG */ void RandomBytesWithFallback(std::span buf); From 8a37f6479a64701b360e41c57469fefa1dfb84bc Mon Sep 17 00:00:00 2001 From: Richard Wheeler <2762690+zephyris@users.noreply.github.com> Date: Mon, 11 Mar 2024 20:54:15 +0000 Subject: [PATCH 107/695] Change: Update OpenTTD TTF fonts to v0.6 Adds missing characters for Chuvash and Serbian translations. Adds support for combining diacritics (needed for for Cyrillic es with accent) and corrects miscoded Cyrillic es with descender. --- media/baseset/OpenTTD-Mono.ttf | Bin 60480 -> 70932 bytes media/baseset/OpenTTD-Sans.ttf | Bin 64372 -> 72740 bytes media/baseset/OpenTTD-Serif.ttf | Bin 79508 -> 88724 bytes media/baseset/OpenTTD-Small.ttf | Bin 56244 -> 64340 bytes media/baseset/OpenTTD-font.md | 2 +- 5 files changed, 1 insertion(+), 1 deletion(-) diff --git a/media/baseset/OpenTTD-Mono.ttf b/media/baseset/OpenTTD-Mono.ttf index 6022735dbe88ac5e2233dd70335086e6396b4be9..853e8527c01085a46bc40e8475e4bf0bbc52da18 100644 GIT binary patch delta 16890 zcmc(H3wTq4@rLDhh*9E6F-h5zb#|g*ciVJxQ2kSK>*)J?9A7 zg1nlxB6H53+1c6Inc11yBRQ|U#T_`Ka3YKl3WJLRq3Y_{4M)-vwjiwe60mVKRnx1L z{~h!rgoEAiY^!N*n)UGMDL+Mc;sJz$7uC#~W50i3)(nIv1R;d?G|kH47tJ~Ag7$8p z?_9j1t7mBWYXqT??Jz<0;`M9w$Uq*33EzNz#nP@d&Ys)15eE~z0*Iic-48E0*7n8@ zgmlvoI`!VN`@0+|XFvZdFbskI{AGYpT_sLTh_+x0!26+Aup$Uh(S1srN3V|x%97SA_t5S@*IA$nBK1|qMjGRa8lgpKF+|1DOUQBCn<)!AT;85 zoG5hTM9c|$;W{Kdji)#X?nVYq53)2MMDGA@PJjD0+7GZBxAe9UdV~iQ^>N+kX}(V0X|8&VuK=X$R(HH2)C$-$ejf zK+*o=6V3PmG14l&jt<6s%Rn~H{^KY9yFY(l`~SNN`p>ez?37=<|G(?1eB&GA)2%!n=oq%e;qDVmZvQjwPlaCPmQ^wSE=wrm@ghI6;US#z$xk!Fb-r^9a;wDI}Ok9<)L~RJ36hApWI(|yLUg%d(;c{Wz8Fk{) z7rejny1WOy`@H?$ZQh064(|f*ecrj=A9!oLS)-qfemwf0qaTf47=2=N<7nGx>uBMv zfBDO&H?nVJ-pII-b|dwM=|;khxEnFov#w`cPre>;J=k;2^S0-*=U1MEo;mL=xw`+p zx_Orn2G#6vJs#A7@k7GL!SQp>fF`=pCM=-S=q0ojEk-M$O0NVgLMu=onTZymZD-Aas zYJIPMvwn|$P=8#1R{xUzqW+5hy8cuBh(TqDFeDf<4EYATq0unUu*A@7*lgHiIAeIz z;7uw_YEN39v@NMW=}^+iq&JOvW4^J`xYl^YIBfjLX&gz8O|~buB`;6zP2QNiE%{LL zv&ol}M^e&Ka#IRZrlrhCX-;WR=}cLc(vz|&WqZm%%E6SQDX*lsQ!b~xmGXfp#1w7P zn{1}}rVXZZrguyqnr^0sq}o$kQ) ztJ3GE_oq8gr(eoI8KD_*8EF}ojAYl0RrhbqelFer?%iflKHYYa6l*8xPa%SeV<*d(nCO0(KlIzIr%{`g> zXpAO(`DyvZ`JMR(^3UeKmj6M%w;;Bls$gxw;eu<0VTHEBorM<* zy+xWLTTxHZV9{{Vr$r;hy5i#Ew&I@RL&eV)Un>bMNiJzF*CDo# zr3Xtdl{r;qxn-qgGs-rX?I}B7_PH(EmTYUc?X|sVd(ZZy)^C0w3`(n70DIzDmGT^t$4a(xZ<6Pn-#b03VVoM zV~?{Z+h^FD?epxL?R)Hl_T%=m_Ve~D_V?{KDrOWX;oEK zYpb5Ax;{O6`sV59rhi%;TRpFOQ}xN}FKg^IJ8Lf1cxTLIBaYKk6Uyt z*)3Hq8(a3aJl*nM%jd0{*2dQ5ty@};x4zW+X6u);^t0@oZsP}bDTabm9*Zi|F&1^HxW3j1J!IHq)@=w z!qLJgxHdQGVoA2l3Zis7urk43r}JhDojp-8fxYvk-smES5<`HA5VjV@;ylJOkFq2r zj}8S?k4-0x6lLN$LTIs0*s@D4R2DDC9m3h-cx+_@tfCCod&ppAjI2Ud$)9l{8&D|D zP{=wcN+rb6w0l9e+niIN54Macs3Z1pWI(uC_OmMSqrc`9OcfmU7&>!A9Knq^DW{`X`E_oPnKGDnDj)D>BVU z8Y3`5+QRLCH-W~+(EIkID03ixx+ouip{*%QuuqQ^-RRNjS!z+XnNJkyD85USW~RJk zkVZ7*3dSYF4?mX%6g*3^D~w==Mmajnp(@5LGQCgAIfAZw2sU?UaTHvyRoBEYrD0Z0 z00$6tFWoIAx|XpIno$16>5^Flw?oEvt1*#i?9-RQZ`+68ahvy3i(t{888#Ed0_kE zHV9%mC1!s0YTX50U<6}32)47dg8~VteT3iFC*5W2GU##zHx%GyxYI$63`!s8EKEY& zDB&GM0e8Us|qZI~> zVv%-hbF9w4OAN2fe7|g#%@;_(%tr~tgcwM`vP^hO(irCAo}=~^AQs0hV1DKs3wkT} zg#uwK5U|}wiv1*~>E48y=6@*@V4q7<&EFyLwD2({eq+V1PG+nH5VWcTJH;>oa^2Np zf%Md3u18xx#?syl^Z{|t%x0SkoJ6+K9hU?C-?H=?bd4EwC6KkAI!jfX5V={`1GaR@h zWPbLnb)lB{N`SJC>3#yfHj-(>yZt?YTV^bB#4@qY^MXZ?`X zSpQREKU$8Q6wyZ}NfUsFi3~)ih7=0&gJA0qi*&Leu&ey(pmbn#cp;+$0qJW85O@}) zyY0m{rRUk83XI&h3-Q41KcfhQgq3soY|08yH`!DhMb`2&1_uEae}*-$W-NP!BXb{8 z!-fu1|y*O5KMscj0P?26r&aH#xl(37esO@wHb!@32|FewBkz|nSUHgf-yxx^Olwf zao%%`SClB%&=##I*K1o0QvY1mpU!3y{<0;N!&$sAWvk5zGW!WWi7_yT7g){V#&EUP zNX2)v4=mzkci-q~Jl)*~{tF+;c~~)oM<`|tuTYVfw!o}aW34e&V&)kf!I6U_Zqn}Y z#EfKmKjBAUtiKQ%CMD>@7;fZ36`9xy>Y$4F&#g&!lh+tkz@$xu0YKK*H{^CWfWO-f z(q;_~QUi>WO zka(;KCB{@UpI;`to31R!Sq?YuC|_KhkWjq1e9&RCm8Ci;D~LrIl@0KYrJ*vz!Q>dL zVLj!l6n>i$7f09OrVB_-DR-yVJXG`8v15&$}wj(Pr+s_4pk-5Rma4p#s=592jSx#o)A7IGIL6025Gka z4$?jccgXj!F3`CHt{ux){U# z7sBpced?b5PMC?l28QIul;)d-X7_n4lV3q-8p<6nC*z1emwADS#AHjyK%xx5 zi}bKwp>6N#U=#iE3zf+A*50`!=T7|w*(!yFZpclrhcIjvkK64T@_rH%wb}FCd`yfYG$~d`+N*~Kx22du`2&x+sw)T6GgP{&st%WJK#g&wP`&@YV7pj? z5xa0^f2yHMda7at*&;kZ=0T~FN~TNr>8{WBPsX@WAVL#vaA!Fzcv}zMQZ%SJU`q%`PdrLPAZ$WfJBK4U%}40rh^=AqL}g4em0?SAQYZ(g1kRjl zHAm$GCY$u*(*D|7M|TE)q#xH7r$tW0cw%H)JnzWiph4Q7+{FK|1_*)5uMALU^Z|A2x3xH2@-cOCwLy$%%suZW-{5_{l)I$ej0|o!=_Cp(^mcitXNdf8M1h`s4a!_=~LjYE_bca50b>!oj6!YzK$t^R0BG zLzuMBu+)D(Vjedis}K!l>UhlE#C3W@V3lLW(U|M6EI3esUL$Erftbt6L)@kt6XB#7 z7%5cjiz6UQ$G$kKgqMX)`wSUl%rpV9B^XMuKFna$8Y5{`wsBSq6-hY1FM+4Bh^`L` zhu=K-%f{Y#_{&C%?IPjqiAP%evEQI(fF+7ST@=S0uHmh)LQN=_l+B4bGhrY-2R0x` z0cMsoB8Gg?)69uD(yZl-6R{DBjYudLV+2p8vFlDKn+zKXHm83jK+``Y8+wIAH#FpM zyV=z@gD6!T)wzKMF37ldLKjE|>0@_W&X^jBSqR)2gK4c;cIKDybcl)r^c*ngeYvlW z`jWg38d%h50z#4INMou|Z7eXSLJ~Z#AJ!lD4A#+t4*cIUhMt)&kHsys-U-$#;H{Qy z4$kdllJ{juh#^+28O0Ud z{vn)%+EEydZIOPbAgkGip>(9DAU7W19Z)Me>Z0|LgZ#wcGqmRH@$~h1aQiB^$~#=8 zhmz@Be}NO;10y&F8LX_-1A{|}uQkh7*WyShmIfVzG4PKzhDJuf1?oWE^wLL6CDHN;O%Mu9oIoPVBFG{TR9f=icCukUxRFkpQM)1TRz35CXG8Nap_@lWyb-KzO z=2~-1Mb)WORTYbtlsL4SAj6}iy`wHVFD+uqbYopdh+5@{QHRGy8sKY5LyA5`rFL*Z zaB%Vyg8CCZq`+Ye_Cx{XOZH(WhDbMfhxZdGKV_kv?dTijY~O%(dc>e=XNN5nJ#5+3 z1rB`EJ;W=56cfV}vh*>^AeBPFDU@mmB&^o=4o6ocq=iSQK->wDTD>6;>Ojg<2-~L9 z+^rT6inkRBCHoc$zuuNA9NkwV82dYfKkdtN=D~!D90;HEgusR3$SGE%F+|1pQ7#_S zQ3odK2@xTV5%Eyq?Wr`tRFW4{Yfpv)In86dPNRY#W=%3#^1tat9OZ1#jwX%~%B=OhYwUP0uen0_j zod;)ui@>Q`$^dY%hMs|p$Dm$kIROc2KQlYi(0_=&2SSEm>Gwcz#tXxB5?+NS;k=o%%Vd<9ITEIUhwRM0$4m%htpg2IZ#DTVO^=I+UX0%Jf zD^N5hQd^1iI9+P1kPdz+BaWS9IE1%I?NDSfe9gF zI=lnDg*RB5c3rRgqa_Hkl(FeOKcoo$w=| zMPxB?ko(CJvJ^dwTx1z~9=(8GBM+eG(67+HlI7?Z=sfx@I!7KP-DCw>Nmh{_cp2PF z){wR63$l)^Cl8Sgi0^C^<%slc&fD@-uRhoFb>m z&&e6`3-UDiALJ|5OXOvE8}J))p8S@)LS7{o$p0j- zk$;6BcKwdH;m2LC!*9jjAb%j2$p0qfvg_8n@d_vsBi=7`1~2XHT7UoIRVx++cP(DG zmbKLDRz8qx&gFyGKG5y($5^DEeCb{w-3z6Ag><(|_e$wrE#C8Z>24M8e7-u0O~p%$ zc!`n4;%a^W3uQ3llUJ2nCD=bo#ksCUA05WdTspX-z?>)EE2<|}WUpD#)!n_gt7pwb zyI;G~uU+NWp6=JK_G{PpwP*OXYyH|Yoqi8>e(id{c7tEL(XZX)*KYP}xA?VN{o1qq z+Ows$ldf`(Uq_o?`v-pQcE9#qzxKR4?Qp7nOI~gOCNBWP%NS?R8flnWM)@$70E{&N zlOKR72*4BuVD6aMDNpZbX-ObIdrKHUt4kO^+e;Wf4-heYfIfIXeK;i|pF-r-^8xzc z1N6ZM=z|Z?2Opph-d`V1W;4EMyo&fcDv~tB2WW^7&=4P>AwEDuyq|^;e07H~96$-n zBJ_KdY)GO6G8BgI1uUpFefj|o(AV*Y0FDBj1b7HaaD&`o?l^avJIg)Cy~Mr3UF6>2u5fR0 z*SPn&kGRjc|Ke^b2pru)6&gjXLa#6>vJ||cP+?P4DP}5~6>SRm(wqJgPO%JNCBRyM zjR0E!b^`1Lcmm)cz!88G0B6Ae6wg58d4O{O7XY9%S6l)Z2Dl3F9>50x9|L?2@Fjp3 z{>&1Lq=fey$}j+(GESMKOjBknEy`l$G-b82UfHT_S9T~J%H_%)<$C2NJRWxw)( z@{sbV@}%-<<+I8cmFJbt*Oad-FDu_vzN5UZ{80I+@}_b`g;Xk4h$=!Atx8ZOt1?u% zs(e+c%C4HBYE;cu%~N%%mZ-W_y{ZkW&8qFHJ*okORD%GA0geNl1~?1w9KcHeuK-*G zcmv=Hz*_*<0N#i7t3HCpX8`{Na0?+d0SE#J1<(M*0_Xuu09gP$Kp}t)pbB6nKr=ua z02o0HMo@zh)L;ZP7(u-eU<<%b05F0YjGzW1sKE&86A*vYU%L0Om@0fPM%q2LKKM9EInT_gp>34}8nj!|&w$A{{XI#RkCB S537c+?pn2vKKTC+4E{gkJMx$S delta 6033 zcmZ`-3sh5Ay8ibj22{Wxgog!lP7)H{j}YFkL;(>2k%vXa2bd~lP{CSitq671XIram zA03O1_1^0+-WlyO*0I*H_SUPJUa!l#TwZHCjyOYg^)el2bhOu7!u|I-C!oMhR+7EH z{Xf3{-~ay4$=Q8Wb^fMT2M_@8hfeT z(b7i`qp$92{6`d3;82hlS0;}m?B zH^06t`&{Lp0VXvA>^a-`QhkRba_2!8E^>*qMnu$K(}n1O6EHTeShH4tVDevZjxwqn z&8wEyzxZnVVRX=q^Q$ZB*S644$RBaN80CeP^($VQ_ru380sKo8KI9p11=2Sq9|X2rTA{g*+u-gz`^GDYQ0==k=gz8 zLvYS9X+=@MA1)K}B1idW__Y*emrB!1Lm=iyl5z}QQ80%*M@haW`9wsqG&qQUJ6VPQ zLgK(t*?5l^?lVxDaUDKO41C_Z2iL~7V?3O<%$|?A7uVoD+>baero0@3_s~a90$;$F zCnd@%gpGm05W!X?85em8({>RqL4)!J*eki^0m<(MBy0Ddi79olPT$~A(vOA5i#r@t zPaKGz*)15K! z&A_dJuLo`pd^FHG&^S;qU>h*~^!CGV`@;Le`a=7H`zH5I==14Q-3_^`y*sIQp!ZSl z?|U!ye%gDex1`s0XU?tl3sQk#NUhG#{TC6^zywW14L?`Su%5gLJ#Yrz#LZoa$)1iV zzzS%mshFRQunG2&KoUe_Xe>>p78*|z;1iVioMh4rT1wMsx}*W{I!&Z0tV%`4smv}Q0#%g1;@h#(F z<7MO1$SILgk>!!|BO4++BM(NNiFBK$nqo|8rgGC;rro9<(|OZP(+}o6bG5m}ywTik zK54!h6&_`Ynjf_$YID@VsH;)mM{A;|MOQ>Gif)Q-i{2Q$BYJ=IcQN{yqL_^_XJdYf z4UMgf?br}|DE55pcX2*(<#BCshvP2Cx#Oea%j4I?AC12d{~)0*p)p}iLTAD|3GXMI zPWXFbMPggxk;IdU_mh&6T9Vc$ZB06rbR}7nJU6*Hd0ldM@(qiRCB{-}X|^1+oU~lF z{FsuEl9$q$(wTBJrQfQu##xK4E!OSUL)Lz)J2j>wwJCLd>fzKIsSncBX;Epmw7Rs- zX{XX|rwi$o>7D5pG9bg6QIOG;u|MN%#^X%i%+SoF%!g*y@oZx)3Y)fMe7x-&zVQ9a}AjO)d; zcv3vC}p?sb)`Y zTXd2WQZ`avu_j8C#gVIuwb8gtS(LnpUDNInqeRE}{}?bzg4jZ*yL@DiP=E@-7AP27 zV+>q!2?bp43TABu7sv5#q+#~Lz;TjU_F-X=s*OXfINAb9gK$w9zF1cs8talrd9LKPMuusD#mnR7wdQ-N2;% zJ5Z%Z#Y0t7oj0n|2%b_5kpKkH~A?ei{%jbe9y8UEV4#QR0g6mMVn z-Hy)bTKh*rPC0wlX?@vmV!PBjh{gXGtbR)r`G&o{C7gN*?C2KJ;>B(A)(Vs01;82) z$R?IxZIJg=q772V(m-vBC68JYsKFaYX;zbgd2dad!T;mQYU2Qs14OMDKx^GCwASJF zm6k9i-E=#e)j%*npr{Q<(Hc?>qSla0ENSV1UTW`@fa7fM)<~8d-@y9_{x__}2OkiS z5|WytO;6E!hiDCERPr{Yrkh#mHql@9IuGT{Xp?npGn1$6SKIQ!hUrY?1_IJkQvwVD z-dY2juw6G_Zr}GgFZuC;6fg2bPTUWX{J47eJ|%&BpSoymZ*SOB_g^eepFS%;Sq{Sx zVDR!+#gbHv;yBy2UC&mW4huTo-hSNWaGhJSZbc9Rpk-fdG=;ew)F*iIUb55SzE0vC13iJ^!T#gNc>&YE_A~aiC1-}5 zN{lUk^gWO~goL@3eYRTRb}xuvjdywpbD;{qXH^IB<7e7JYQI-XecHH+O9z>C&Mk-}6k2!9yxp zjt{jLxs)HWg59j+E0303PyC7{vHzO~=O(AXJf&H+5!T5Oj{*1=6$`8z9 zqB2YD=5aTWope4jHPa*oPjc@6U=ksj>}dCFlI48b{X|2e+24Ot&)zt;fr;lV9cK71 zx!geoz9dW;j{^-pm6R$2)G(2>Dq}y*e;Pb8{xHQFq2LoSyw<_ac z#DBq`YpKR#Hmvx;F}rpyqN5zPD7Xqjfj@NRGUGrXCS|OKV7zk6xSzP6v@2tOu%_Ho z#u^BwT@Ubpd##+QzD&t_p_uzk`m+|3KBhSvr@#h<$V(olh6gI=YZ9qKn}PT|(<= z16@iT^d-8CE~kz3W!gl4Mw{shx{|JvSD`gRZCT@DBWy zZlE2s)BDwxFDE$<{7BM$1mqV`o6Vgm2_Qx_PO)_0UhIq{r~^~ diff --git a/media/baseset/OpenTTD-Sans.ttf b/media/baseset/OpenTTD-Sans.ttf index a9ed5d8c838c987071cde945b7724bdeff62d4b5..406825f5131b4a9eda5e599a52dd32ac8a6ccfe8 100644 GIT binary patch delta 16568 zcmch83s_Xwwea41&de|{3=GTz1_p*17#{MRVR$nrA|MP8-vkX2o%jkWDkjFLW2~_W zF-ScrvBsu}NmFZ#S|_z$OKp;CbEj!;u1&dVYHcbuTCcVF6HATt*Ws>x9>W3jzit2j z`^9z6K5MVN*4}Haz4qGsoEf<(d+ikCLl_|x4HpKX+S<8IFJ&Z!A)FWn*u=V;8MQL4 zJb-XmAv`BJQP*&R}>)w#t01`c%h8mFEK{<=z-A^`2`Lih6u&NKWHPnItrsyOdUNCRLd`L zocKEKN`6H#WC(3W3gkg@t|dnPtyo8JKf71F~%rVrWlK6-#X&Rk5Q z2to%wG6DK2q5r6SGbUt^wJXcn=OfeDEnkJR--?XZP;%}cC>)rtQd+6BKIJ92`PYZN zhpmi)0POG@bo$MK6^gkKSU^zwYWOqa~ur(x(Z6ypNvmnH7 zAzt=sSSlN>YV!%wWpJmE$g73yq&DZC8L|TI186&_#Q>#kxE}lP9=sQyBnjjJvV^Q6 zJ!CuCL%u~0knfN|@^9o9~jGoO1Wicdy_5)7@)#-@Uu{?&iA>-(7Hb&fU_xt~)RP<;%+j zmvb-YT%K|{>vHDhl*`GN6EEdm%DI$&NqCwCZ0rk>>)Dqhll>}92gaM(6;Wo@VNhxp+JafOFUsg@LQBvN z^b~pl$AaTklj&q8X&^I5E&3Ordk2@2R^lbiqy?VnzsE@(X=KkwrNz#}9cUeH#|!Zy z@L_}>#Pivh=x_KOs`;v3)p6C;a80-;d`0-K@KfRE!Y@RGN2Eq9j@T7(B;x&uJL*Jr zt$LAqi+Z2>xH=HIII=4;sL9uqXclQ+(!3v~j>?a!iP{%+D%u|15WOmTbM%hrYtgs0 z8QL1{dhKEDY3)Vr?HDE|E5;pD8{>`XiP;(Re9VV2=VPw;Vs69)W5Z(&u{E)+v5R6? z#P-B)kKG-+FZQ+AUQY*bo+I$>rUv-=swkJ^d`Ms@6fyT z4f^@|Q~I;|bNUPVtNIZGGN=u4hE&5gL$6`LaL{nnaN6*m;hHhaSY)g=HXGZG%Zz=- z{l?dg?02;$d2?KQ+!FSzHr>|~zdio-_z&aH$6txR5g#;#n+ztaDc4kHsx_@J^_aGs zj+joF&YCWmu9|`g;R%KWYeH^9Swd}sH(^^sZ^A&r!Gxm;rxV^w7)i7wW+#>;)+Dwj zE=pXHIFNWf@s^n}N1GGP8RkOsRI|t2X7-x9&0EY*o1ZtoY(8Q>WiX#Lf10F7ib+aJ z%1SCqs!nQ7YEN3mZi_MdOvxq5tCII7e~^6L5^gbAtd?9$nWfwEn&r49VEH^HE~Poe zo6?i=e9BFf99Tt?8@M52l~Zh|ch2 z^k%%4aVs+}vm~=Ub9?5&%qv;etmdp8Stqk@Oo^LPGiCFXeN)b6$7CmEXJr><8TnK5 zJMw$;-_Admf2$z6prT+~!9c;8g7XDIN1P+y(e7C9c**g;H54Vx~RUWqi9vpj-rFUqSHm^iZ#WS;@aX(#l6KR ziZ2xhOLQgqCG{oVlBY|Kmz*nQN^48IN;j46EInQNUTLr_zpS~er|k8z^W{u=c6mv8 zO?hkivhvO4edYVhUx&Z9%HJ;kp!}1H@Cp<6*HE#yVzA=#%9zTm%7)4%m0KzgR=!&~ zRC&`K?)GK5tKALm+3v;eHSR6$o$f>K*gMrYfn*QB_klw`z0MK-J4t zhpXPII#U&xil)w=IxzLb)GO00(`HZGHEr*-z_dHn8P(m@d#eYl1Jh%s&!7JM^p9(- zH61nmGYm6wXDpi0UmITQsP)z!to@=cw{CCU$-1+3=Y4gb*OU6%`pxw_>U-<=*B`Dw zQ-8kx`b_uCM`wQ6Ft_1s!^MWr8}2k_H&!%y8~YkxZ~UO~mPhTW_iXZP_dM^bB)?m6Xo+Y|7d^L*mD=(+0o!gH$$HH9@rH^ntsnlhU5n_8RNnie;0X*$^SNz>Kl z=;n;(=H};{3yw6OZT_q|*rIDGYw@&nwY=1Fyye4|JFSVWj@J3D-L1P@PqdzIy)&z5 zmUmX~toIP|C+cUCs5x{Ajkc3na8;02e~)obRGbavLkQH`Tsno#YOlnFMdi3Km)KZS zda~RhkC|d+E7DULqd6stUAr~a|Mm1MvPUwZiC(86)?5ND+{EcH$o0A;xVsrZY=L!Dq&p`Zwn^s#_ND zdO%O`dO!ydg47L-mcVjpiB2c;?o~e;4AqP6H}dUSUDn@__r#~esst$xZNZw#S1Ivo`WVALTW-RIZ1Y-U9%Qhzzcj(2{l)VH z`tf+Xz`u|^H`TzBiYa&=n_H0}S7479vCS3BaR+;{BDoGSJ)WD)Lb;(wX?_OMC*VU; z#^c4&m9UAG@wkL7s{9o$=X6m{bzv+Qx%0XZ`c%%gx&uD^kQc=$P|cWP@CY}c#oUOw z8op~B-i|x(NpHtXKtGfD*zvOa&@bokdQLEx%psWtGExUBLAC6Wstg(R|BtIm1pn7g zb@2XQJJssLtGULt6FO}d22(!)pN_@BK+Qb{Gm&2Gw16M|5cmaTE#O5DeV7M>Z2ZfZ z0CbzHSnQw`0-kHY<2$(qA|9L^XUojMXxV|gJU#1}_OFS&?jR&g=pMBVtF4YThXycv z0tK}OJFQyBP!?Q)>YH6x{aZPw40hIZNoz>>Ck>x{a(ZmCU?r&MDMm{Kx8@bc`lolw zIT|*;Ceas~TY^h0<*XrbAz{w7Pn=r}cvhB?i7Jzj%h_W^229qR;XgSoY4yeqPA z)o2ZlaYGR;%$CnE`Nmg?9xHJcu6yZ_dh(NOJbgNTSP%y-cx?&v^Mxrsp5BgEa>EJn zw+b;Q9g7W|A|qj(bJ>9z&-frxi1=}Olz1a&1Uu&SIGLW;<3xHGn9$KsEaLc&4Gdb0 zj>29FtW1L=D41#j6raI&XtV^6fa2|V4L7pM0>puh7a(dvLN5$h2#&aMjK9oBqcR^% z8pbpsG-&5XFs=cm=SMu5UNGeZ`mqs13u?-cr*+}%ByPl6VuhfhIlN%h0D;qB#4sf# z6Gn*gG3+1fj>dP;08PXAI1&iO?9uwV`1VP){h(*1p;!@&bugzSZ)J1y)w#l8)Qy$N*ZK%hy*;5Ub@f;#rf$~H`h*?x*7prMB#?R%Q zU95#b#E1F0th@1#9?%CTM3~u}13UnZAqo%aVf<9UO%n!BrvkgqbIuo9pvJlOY;oMM zednjVVCb=hPN3%vJ(+%m;Mx=Uui!kDqelb|4bC+^EGtHpY)Nx^q=uNW&S)s2NfBmO zHQUv*Xy)U9{6&Rlu-|G>{pMaF)d5g;+3; zi>W{@;su5AGYP19yx3V`r7Rl53sak4K|}PwP!PcNmP{7FN4Zdg2?B~G0{Y1yxZP@Q zbPGg$C{Yq)2ONM&1}00#bJ_K+FDCPO8e}YDwJ<)qz9~=}n^+U?3*|FH9l!pB7B3Qh`!fBk}e#7Fx^)^Pz=fgj-e8hQph^7WAGSzzWvL=c{7$W_3>7ymrS#Q_C|IU>~4 zxS+s-QOT?5=iKu`q5f5#9<4$T@eLwzE=RD45{w=o>o@|~JqU}~qX$IBd`ARj105gx zAL6|TKO}ZQ7|1!oXgDe!tWsr@nK7D|iPu?N~yeB1d> z;B|aUdbSIlO~*SX;`vVFofGjKy&d;*(G$3Y`0y*oo=Nn(fWIBHJbnCF10hPR=Q{VQ zm;K3xss3*++%LyF+5FA~-yVdfB4;Q^6C4qYOCt_`k&30N5Ol`jVUXVmDTLRhh<`=w zChp+6vySV|tM}>+a6blpf+|?C1fRB`0``2TO~b8O2BX7OSZsF{vYI7vB@1F;(b6S3 z7>2Z!^192u(+yIEMo1<?gODqsl0SqDfH&ON9WInGe2P%6^l zCsfVLMPZ& zkEHotos?rP<6IM*C**A7o$&kj!9xpfR*wqH#X2DX_<<3`I(|)uxC*gOi=BEE)+=o; zzozRLPKF5xNzWji6_kaL!13oBwRn)duzI5}8^J=QEoTHjkZPsaHcpH5@Q9&t8kCss zIM(QZIIPi(=|-dZ59OE+1DGfx;MfXus05uAsIuigS)xQ`4iBvD}#z zjt%}f&X^h~%ksMZ**v{TfvZ(o(OAWi=a3 zFcws@33lnT74%sAHQJx%{U${z9$_(AQWH3_kbwJ@F*|2aoaWxQrdx zni|E=kYa~h#wVyh+nTKLQV)%>M8$^7;h>KF)7E4yH|44;utsZ7Fw-p6Z`kG}N^Wn6 zZ?mo2e}}W^9AA(m6BK*DIgaJwI?ewy%M;CMS`8;toaSGD^0v$eyAW6hop9XfNTM^F zpX)B0-iG+84iUz{M;ILN3de%teD?-O2_0B?gqasl+J?n5!qB82#v`2ASvmuOIAcwv zV-+JL`^8hO7XFk6e?`5J_eCMX^V8xhcJZ#K@L&B`cKw0iJ8WOMAr9Z>DMLvszoVA3 zx1RZ??+;=fpN!GBQE>9cr5S>!^9xryH(6@&M|8c&A1|4=!i}*W3CZ;RcJ4eqHv(4u z>^4H={@u?$OiKBLgGM$r#4^1t9YUK^U+mOl(spb(5Ewod{BwN#@GvNDI6nAiJ`&1y zk~Vh#W2R`*797IacMsu?+qZ)U0r|yqx2@c%ngZsx6Wg#emb3+eL-c=uwB0=fEfyg5 zv%W9!boS#t%W*C1?q8^y!G{GhgKajL*unnDlsW-ZM|CwC#QpdtUCc?nfUoyo>rcjb z78|~|1<&@k@BQC$)f@EvE=&%ezhmD6;bs+hPKuuU)7n68H_nD$&=BYi4zWiLKJBAM z9zDSIHwGnxE*)HEr!;~dXmo{RamK398I0*Jr?JRYh|O0{JkmPTvE4e=G1Lp&5V1We<>`IA5rANO zhykww*u#$N0Q7X+b6Mz_*I;O0BnYe!>lqW*0az}^T$rvqt{m)g`s8U&eI(Y~(&RSW z5j+TM103H64{{fH+=L>01lO+gxQdecW%Ku z2YQ2py#u&os5_oi-F+wC7YN{NNSweOdDTGAU`fCb@%W7fb>h(OqQmViOQQP=QWbp0 z%kL@rGpeeS>867EHn)}F!pYycYw`WR+qTI0Ne2^dFsP=JEeIOm<{7MYppj_$kp$#z z5M*pF8?4)v*in>QjAaUCigp(;GaML(^>V`Ny{B ziog+MSAn0NE)PZ*7qTFGpz+HEDTE3`@S?E`$8rU_M$-_+1u=+dTnRoQh!xy{Q&a&} zxdGmAVI>y_;LTVbcF|OlxTuC)P6q@5yUnVI!akQViIRq8#~lWg*RTQHN~3YUAZ~U0y&x& zV+EsNsKv(Z{|abQtDQ0$hu$l!tkPut>Cn{MteY@d~x>djeFx~OaQ z!km`;#DKRbCb9XsSx@{xn`Sh6H948`wtAc)3$DoJMHmKqJkWQC5jSr{Ta@3810r(djvcWbdCZ-$5HUi z4ytc#hPPy#Y`zyl6r_fk5X@|@v0z5*VlWHf{_(L4k3cTW$1>q<9aU2#*Z_9gFg4)R zg%6LoSU7j_!OLP>U_js~a2ug{M}QBHUK$zk$lXJdNJ|;so81IX^^Ly4;cG84^LI#xj>T-`&{lxaPyA^WAd3SJ2t zi?Q`562|@f>_R7!9ci7a`!Ixd_}Nlp~}6-6qm#kg3oj;G>bc zaGp@sBBroQDC+_LtWY)p{viD*kAbugK_W!UZ2J+juN8e=z%wWg6QL|e7Mv-R;ln+6 z`_8wGOxcgO3uO%|bY2t6(I~F4TqtW%Sm6?(tOxu$p=<#BJ~SJxL`%^M)QQ$3FS4*V zkDQb_P%-=Fn|Z`h?El@H$DQo%;S@aNKRSGf81Pf*6Euu>;jhCtr@uuP(C^Si^c%M8 zv-Rx7&r%6`k!3Ci6=V*XOXjhbE4uk)G3kV_3YWrXZV!`XWI0(uR+3fd1oD$d&`I`74{udb_FOYrkvEqL6B7Cs;ZSoR)wD>Z4g&ZWWlGn(0$?N2M1#82KLKO`r~kH{(VFXS}&F-(r1kTc|`Qs^#lDAANY~+SN-`ol7_Na3$r&H7oO- z`3_aj$}X=IQz+CF3HM^*ULxG53HNH@K3%xi^7jG(~y8Mbi z^~uTf0=Dl9S43egUtd^T%AWb6O2x4+sL8KkZ+?-E^ZkY|4`6LRTJDC`on2i^JG(bTR7=X!CFL4Pd4{B1D=F7W%Jq`+Oi8&xQf}nRK3=d#Qqd$S zH%rPbl5(r0JWEoZEh*2Dl;=vy^Cac@KFPxZNx4l@en3)gA1iCAX$lMSCt(UEVH}e% zP66WswF`_2ClR?OVTvYUiYH-8CSfEd7G#AC?F)&Q*jpfySY5zKY%gFW9>8N9ll0-3 zqz}iKK77LH9il=)`fyCrhhvgHAkPmuuONPsJ{*(u;V2zz7qq9G**-at0gQM@NNa;hv0(|8D7hMBF{iAT}LS; zzr@jNIO;`%NKsSknTzb5>sPNqMN8Lq_n_LPkFW1St;^Rx{0Lgy)!DNKb;DB0{{!xv zjIn2*1i@{C$EqYX(0X!Hq24lkRt+*Ob!=FQEZu81u15AAdd-G5VrTh|^P3R@oe4)V z$OHq1ogE#&g(Jl9Nj6V-L%83DzG~n@8rrZHfNCd|9?#;B@Ofmy7x0(x?u-B%ilsVx z1QEOzuZ1h6z#IhzZVXV-?$Rz1vD zjJd{q0Xjj3hw>r$dHF^875R1f4f!p35H|GTifDyF zk*KgLG8DNA(3}D^rvS|m_X*DE(Ew<&ijdzJml0p$VZLFFOkQRQ38 z)5^Df%J-BXC_hquqWo0(nev+Q3*}AaoiGv>7N!Z)g_*)EVfL`>Fh^KPm^-W{tRbv5 zY<}1x_*v8vfE5610D1s618fJ_1+W`nFTg&4mjGS^I1F$c;3U8xz`Fne0N;mj83H&D za1r1Nz;%Ed0Ji{w2&ou=aDZq413)5x6(9p37XS>Q0z;_45GpW)$^!s~P=O&-U*|Es_fDzJnK450!;sK5}aBLF85Y>N;~HJr^|`z7TONm+u2 z&A}Kw-%8q+r)jXcXA%^_l{s(<9}Z5A*1^^!S`b%#ZNBZ&tZAIbdKDglJkF__5F#chNQDVLJ8f6 zTK+0}!=y=gkFJRN=KNoLxR;-gQ@9|QqnGMKivN4cV{LsQOZ-!vxSy~w0sjMkpD@9s z4enRw)d*kpj-ROGG$d^+?HoTvCtrP&Q5;&kAsYWe60B``FxggG)PK>K`AOc=e%X=N*r_gF{iJ43! zEHT3R03YOT|7)FZ1Kxlb{5XCbHW^#+7ASAS&>i@Jt`Ew)@GiLa;Xc6Z!7x5NfcL>h z?nU?pONPIVzYW*#z;{ruCL{vMRS5BiefllT-|2k}pU!%y)$ zuyY`A!nqM|qVYm1e7xAn0w;?4KMTPq9d7{sTVPN=7)&1wVgSE@_rU^qeqZbXNfTk6xrk;p{ge4eZNb zF>K;j>e=+i;iCt@cJS2>cRfIVNKSDSE8=L0Vz@t{B-Zk6d3xH8?f%NZ?))kmevwYA z#D9Vi2~MmR@8cLAfL`il1WjWHznY#`hw8w~>)}t1X2PEgHK0Z)d*Ck|!4K`=!^&p( zlcN^+3ug_t{*v5+&@C4_|Mj(d=w15r`~L=NgOhLo delta 8915 zcmcIKd34jqnKL6gssb{xkcKrzCUkU+p3 z12(0U5|(y(NecwABufZQQkD|ht@V8ck@GJ1VytTchb5D-G453KC zm%3Wlb(@ieYygHp6G>OMJn!oq8$%Lc@Bjc|tJ^lL+I3vjhLFa9Q2(wqD_guNGmoAI zf{cM{4FJLqgnj|fwa$O^KS zbdxP)4>>}9NG_6JkYAEPiA}OovP<%sTFn}Bg4sr|M{DW*=xisW@ea8{J|wq*#x|hQC;2BSlJ1qhF1;cBNcx39LmHr= zH(Ka&xgKZJ&GO9FbE9WR2S)owcaQdtx<@`9xjpi`ky|5YMz)Ns87Utr9>chc% zhI?`MV()41#oUXy7j{p2S9e!)cgoPn(D2ZQLsy3089FvpJ5+pU-tA3GoaX7~)PxTc z-b?sd!li@@32!4zv#0d>-<{Ho@d|2C8W$V_qqLz-xEGy77f>&1MIEqa5Eby(j(Ug_ ztw3AROK1SAz!_4>bdpW%B%NfSe+7*9aUOA#I^rU^+zf;^kWAvBeafk-2D}tKhZo_+ zcnSCw!cBMqy`tRb%L;D@e`2C2eh}wu%5!)ipM_iA%9T^sBjjWGcA9*zLV&tEr zXw_o|PmPpYq~ztl)I3XMUN zqRG(|YmRAtqIp|$S#v`(sCl3n)*@|`c9phEyIH$a+pj&YJ*B;=i_w{MsXCXgR5x3< zPPbLpr=#;!rjXj$^|9M%w<_7!7k57HgShK)x8v@|eGxYr9}%yOx5j70&y8=2UlV^I z{#g7^;xEVFh`%5IMf|8fLa)_Z^%?p){VIKzezSh3zF&V_e@Z`S2s5Y+W<#36ZKyUh z8nzp589p_9Zur_5W>g!^#x$ebSZr3Yw)h`qC1b6Sjlr+({TUN0_x{t2x8$H6JpcFkdv^wM1F07Q3b1veD9K zIc|B~a@KOea?|ohtK90guCQ*k?zNt`eqg<3{m6RP`e*CoL|I}?qA4*yu`6+F;-SPd ziB}WvBq@>%N$#ZCNo$g}Bppe*lJv<`*;MmX`_$U0o2DM~O}%16Ho47UOR?qHifwha zM%xM7plvj{HhFvU<>XIN>?!prT`31rE~E@jGf!)nwq@G6X%A8jsimoHsmD{_OZ{wm z*7W@8)zcfMFQ48veb@BMY1Xvbw1sKjv;%3k)8o@^>GpJQ`lj@sq<@hcrHh*pY z-uyH9ALM^pAT2NyBo(9;cnYcu78W!YY%SPXaG>Drg3ARr3I+=v6nt42RcI>AC~PR~ zEZkVQt+21qcc}1q;q9WVqRygSMeh|oE>0_6UffoEy!fLMQc_#eR?=T`yyUaetkRCs zGo@dbxy#m;eO?|`?kZnf{%J*2MPbFJifff&m2H)KE00#5tGrqjRi&;nRHaqrSIwUfP#W2rAo13h)6Cu^NlF2xPxU7G z|1j;oWWEW|HEKDrW)Q$GBo4baM5ET)UGQYH%J8ts)4I9UV}h@u4ZWl9*lKO?AHUe2 zJgY10*Lihezo)Fs!y1JA?u_r^Ton*@D0#|GCG>!%6IYxT=$!^Cq;YhINCv++ zx`UDMldPFhbBcJ~(06#<&=G`S*MY{|P(RFyWDu3pJ$QU!2=Y7;iBA0^j7iJ2vo+DK;^JQ zy1rZMV;#1n;3dOMe%v4qPl7LH`ZDZbIH&Jq_%@)k#OoFDx$O_^i(mtlg#2D-{E5yS@2efR`?-DEgU<4y7ee8N%#oql?$?B^EVK=a0_@&*;`UC-OQ0zu~+ z>>NEtl-3^1#} zU;!5~PcjfEKx*d&6%?OOt<^iUkXuB!Xjtaf?^ml0yd|GNz|4~LFV*TgK|}&56PA2j zbRi_bq!)RU3aSeDV{SYQa2sx79D$%g6g8Nj4KvkfZ;jd@Bx5|2=g24ovITt;5Ek*) zc>;lx`OO+lH7~-X@o|xBMZ%nsYzU6ZkVc!?ET*EsFd5g=!djh46lX3!DlCPVQt9)x zr{cKy!FAqAR)&o1nOPObIc3l&7t(kUJv`HBZxYuA*z$0IfU8cRhCbx9tvZsN>8A@@9+FV7(VXXo*}PN%4Logo3dAc$NsC;MsI!_6>EQM2W5n zIe-q$2`oFAguuJ%&>U4dly?^9HnfgK3BwEGA(np_2P|4Lw=*;c!G(d!PCcdZYGE^^ zwaScGt<`DSZiqgZYYX?*+OqUoCsfw>c}Y>Q<8fADJktRiA3AGZaxKpdEfBd0NzR6x zzy;ijEsL-qd$~y9?Hs^|oWqhL1OUA>PZ!QdIE=F00$#=EpM|0#0xDNH$tsa$AU*H} z6|hB?JU$dc=29C)2Ni=-sCohXaZxw}iu7$jZo(?bP+&qpS0JsRZ`P~q0?DUD5d@OS zSPc8bAXSp_eEO*V`v!ia1?gEF75K5pqCcH)@WBx8Miab3#_Es=52_4L65=bvWc=j7 z9&QqS*itZy1@L_nD#Jt{o6IQK$0iV9`4LumyyUof!NsNE^5X=2xOj`_@Ef@3E0d9_ zqNe6@Lm=~RC;AM1+>jX#YpDoj`(Wl+OA*+YpFF8h0onv}kEhPb z_~NPtaddg;2Hymf>Y|SF^>}A=HIsqVR&HIw!-qM4ODeCc`;=8(z=W9s`vC9ex+l z^925OE^vE!{Mhjcg7+@xgxlvYU-oeb?xNH_<_nK;_ngZ;AT#eWt=4YzD1B901p`AZbR7y2$_+SUR#-%%Vj)=y^uI_a&69> z3^J6uIAu|nGczP4)7iBsWpQd@Q?^!{-BhSHnbeWGIE7TIh|^KyDwDFx)$gi`HWj7C z#>dB|6`7*_Ggrw%mO%35&X|efA=7Rm?2yUlRqm9jbFQu`;*Xi^v^n|?%d-4Ib6Rc1 zw7@}=>jZLc8S-Cz#)+3$A#qzYiCRe3auVPYl)WG0=2w#^a1jzYY4qlm_Xn}?PRQzz zd7Ijws)<8rs#+Eb;`1k2T_I-2<4o+(YVdIH1}6FGEWJJ}S|;na4=vn@nVjrM%S5em zo=)=`3|=onXFDRX4~nwNAr=;=at493aqc)pP(l_eONR41SA|@;_Wrmmz1n2=+D&SK zMel~DJohrjHZB@e@SbLTs$Gnut9k;*(;y1o)5oM?GQfh5jnSjeDt-Gv7%ry7Y|d}b zF}Ot#eBA8@z6B05xY!&MQqD4A!}S^v!Z5~d^U)N9;0^#gG~rkin&|Xrbe_fu5LHkV zUuXW#NU$qx=DFM{pc21MzkcoopN(xMlryBl@=ml&ZsG(hvI_>@h{^VTuicBArxmnGLTp3xPb1W`Vrf(plR|GDQ+vo*yK+@H(FrO!Ef@wI z&`E@+0?bBq5?QE4IfOsH+S3yn787Gi%1N*%rKx*Jk$2>zS7IJ{pO$RUrj?V6qfthq zU7x6o_Eyco!(Sil=@}vy0cohGr-uXCN24kdAh>D%a+m+;hF^w+pJ%TMAiE6uyL`R) zAGj~FVF%sZn-nQJF53~k*_#kLkKYl|PkIw3?uU?HzSTj(xg!OB0M;3;Gto8M-d+6v zmkj*$rN(~@1XD3;uwEI z;&)E?FXQZl^0kPIu1fqK;=FF6C<47Z<8y>!|E3md^bXt2b*^((dai@T>QM?yFV*3-4CBU=%`wu2yoJY_0 z&%tn|H}F+R`1jbWEO5Mbzw8H#BIwKi+~aRM`E@AWb>R(PGWsq5k_t&t6pj=6A@G*7 zTIkDABz{ilM=Sn4QN)p>_#C4ESD>hzdZDjG(wwJ-z6Rj02z@QUf5={hNyEWTIq-o# zJ^zl;Hygbyz@;b_u~(c7Cj^o1;%h>CnS6X*Ez-#z1?fBM{vd;RjioFrOw z3k~6y@OJz%`WOwO|3r7t@9-=1R}Z@g`aUfjPNLr7(Yfd>@{{@KJbDXVCJpEu`WN(X zWC3~uT|z%Y7s*2M6cqYJWHDJnn#fYpOqQYlCCf<*yzgrzUb2#`BCE+7@-)2tdxo@; zc6#QoY6V$OHjs_vJ7g2-LA%iZ(3^kFiXi=DfE*&xQm2RJXco-SrJ&{Yvr_3!P{0I zH3D^`z90?koCf)v2GyJf^_&LH0Sz#a6vgCT_j7tN#(y6Q^Rf^rf@B6H;;lh6W%m%S%a&5Ew}|q@oKyp5xf?!g?<}uLm0Q?cIbEGZfG~*O#tZu_a}H8 z-i{=A2kccP_*MKWw7c3(4N3QhW2&*22l7ZJ`G_( zAkhCkbC>gf^{k5P}J1DaWl-S0F)eaDTHwaw>5`(-z1|&U% zzlRUw@8cu*2ly!dAwGs*1Id4cf6OEYxle)QL~@*4i_0Vld^DUs7pfj;)?r08tke-^ zZ}tNN)@M&bD?s>X1{-s8Er-vr*(@Fxp@H{wSUYe_hvjm9h;PS^3|!J-orECIKz=MP z(^bQDbO@?}e-c#7{aRr*nvFsRPQ~Jf(Q{Dh5P+}mqx892b8&pVf1+D;dSK%sX zt0B?Ka1CbDF=~dp(PT6Y?!q#W9XVkCl8f@-b|fFJ&@13xyc*arCbQ`=g>hh?9yjOC m#q)r;k(fvVF%t{1l0=e3rV@5tzy|=j{qnPLL<#<7#{U6Gfd@qZ diff --git a/media/baseset/OpenTTD-Serif.ttf b/media/baseset/OpenTTD-Serif.ttf index d188e2c80cef2288e966b845390e6573c6d8fdba..318aa340f5293691c425d8ff5a7a781e3f7c53ea 100644 GIT binary patch delta 15445 zcmbVz3sh9s)$lpzJ_Z$sHzLX~FJ^cSFboe-5EM}n0TBTaP+)k7JVqqOR~&0t)*72o zuTf*HO$ExXqo`eFn*eUTW3REZL#qpOaT4dzV^B; z4kiSrLw^g_HrPT5>HRI7;${=J(De~lkDYuUva8yVozFpb+>1&mFt=cU45Sj- zDbQzp8s(G02hSjq{SlD=2z&|PDR{>*&~Tkl`7tvuA-j(aWbu(?;jTz>sV=$BO`U?1 z5k-Ko$mfXoTNKzUIP@VEFrd$LmGE3AygzA^3kwd;Sn{^|91uGd|!xYlx6ShKw962iiZ z(;Y(p^bl8ox)$TDg2OLj)hWHAxlXfS%d~)kZX;tE%| ze>-*>HQO|MGzT=tHLq#TYR+qJMMg*3B6A`OBP%2AktZY1M7|&SapV_~Uq;@Jys!1q z25Yt2cx{F@Pg|m`*0yN7wf)**9j^=2X>_r=G~EJSk*-SDr0de{)a}z9(w)$q)(z+` z>OR$7)qSJa>znjl`knfH`a}8?`qTOWr~ab;Q~g&4o8h401;Z`F9V0Tv8#9dM#(HCi zahq|E@qqET(QW+JcrS{L@{gJw6&+=Z+Gffy<(W!M)ut9xw`rGY$ZRoZn)A)2=2~;B zd9!)9`Dyb}^DE}J%;(G>nLjt*Fn?zrj^?A2qPwGaMemP365SWwA3YfDj&=@3UyJ@W z`d$nh;~z6SCOXCzlM_=IQyF8Aam4J1*&A~%Rvp_EdpXW0E<3Iut~{i&A*u)I@m!DXgSew|B_(|e7NhB#V zsXA#-(zT>}$)@D|uKvJ);lRnQnsZG+4MGxEz_27E49_yT5X$c z=Tl9oZK)U1LeuKgj-_2nC+U{-E$JuIuVxfvbYwi8ab}KsPR1N(+nf_~{+gMWc_8z< z%;CBG+`ze-xv_KC%{@QQXI{a)%6U!m`sUrwYR%e`wI}OdHlN*^?ascI{oVZN`3L5I zkyDk^lCwFdC+Dr4FLM2Jt8zEzzMp$v(@dY&vw?^>rdC;YS`Q0w)6H<`?*G2V_)Nq#&4QP zQ+QKh)0t*tb9}R{d0ul~b76B?b9J-5xvjaoc}H_k^Zw?8&BvPinol*KX&!98(EM@p zQ1g`*bxUZArX{~+N6Yz^tLtOe*SF4Y?P)!|A#_92h65W0H{5FrYb$6w()Mnfr+qZ~OI1srJf+FG&B>XMh7Jn1k0eCYh6WIe}x!*q4zgg@b8!s4_ z{?eHw@&Fni8=vEEMvv3%?9Y=4cwCO}OvH1;{$|`DN;95b4SY6Crlk9f*xRWvo6s9c;pPAy7hr1%lBh#k{S1V?W>y>7Kk_n_u5jvL5$MwQ#_-qiqTNa7a z1$E(!rBDEYhU}wv`95*>axBp+@X{(K<9Q|jbfKg0Z%d&P61jO)KC-T~;_MUfpsU_V zc!`^gcfGc}6g%-ckSrsRM|opwru%5db@Tr+(4=I`H5%Kk-$0p&c=vuvap=-r2oDJd%d9=dImF<_8BWb*J z0^Y0fiFmKZm3XDbm3W25g;S+hn(;bW2(WEYr=xt1w7q0d)ZIjU{X^(QrsMIRPQFj# z!)Sqz@INb`Q{iUZOWV(sg+K6Uhzh}=8T&*lkUSk~nh72)MiDb^98d4*^s$N4Ik+vN zi5R8jcsjW&%wK@NgGP)8RxCuX3J6V>mpmeykz_8y8>_;d6T7??~ukOY4Gtry)y0uUwbxX{}VhY(L0TD@SB`0N^E;b;vF& z4;T}u;t>LQ72$Q|yQ(%RCJIHBGiG|Xp+FYP+q*{W^)5!)D=tRZSvjN5yCrh3$DwKy zHQ7P85G(`EGSmS)9o!ai#x`nsfS2jVc0`Vwc+9J0hbed6t@OkC2C6r_oYv>SP6`Q) zpr8hD{Z=uA2<9r?diDa~?4!p#w?v#btlWaBO?b^ic)SesjliSv0llY_xg{ArO`?E@ zJrnSjS8rAY<7(H%s^{?(Z^*X^t<^u#bTC?R6y$SpltW&Kq!7Ve(}h{b#i1`;bjLKA+nR@ zk$uAh@`zF2JH1Q~8zGrQg%lbv9EYg<2+8udijm0m%vwEh$|)3%^8Mq&jJ$bcDc9>C zN_r}jH_S|=UoVHHiS+Abe*$`1IJlDPcR&jD2JThf70a>FYkH|(JloIwS)o{&9#$q5 z2C~!OF@?(sqg4)uGX3Zs$%N74qLfaa?35-Ly~`Ggs`d(0F5~3^xSZ}Nxcx+WZ-$ZS zJrHHZ9rY&Uw6O&giVNtZ-VFvR(mO#qX#x{v?60EHZh}DG6(}d5`u9#C>)8WgT--Mb5B*Ib-->&TD&(f73KfsCj6z6Eme~GQ#|(aHqFSqFrJ{9iP`m<+2JQ z>iF`>n>QODL0==6pi2I9g)MTXkn^l_Y=ZTV7_eSUqCAoZcsf-+QV@{6G(+BtPT74N zavYQC5tbbHa` zR1(Q0$7NO?)r{fg^eMX$j2oj@rWqx@m_B9uRMJx=%2~se(eeaS)FCf;qEU9psc52& zdFdzGm_+Yl+K!X?j1*tkexyMrdIAd4Sv5E$SWWz}Rl`ApG3ZiL0t~tUoi)v7GGO^P zTq^FmE(kTGbU+xut(s2~GxiUNVU^V-9h@!)wUAVtxdV~RoUU$0{!xau>X|lA;W;e^SKUu8tNDxSIhK}wBbm>qYW~@eljTXmp6hYbJ-8Qql*g-tqOOLSwc|LNahFsn zpbf%XU5SxnPZAY95rWm4uoPIj4s6mnyPzurqRehO^%&U^(Mez`F#?G+-afgc+%vgv z6bcNk2Mlb#Xm~0-Zk(LAel&iZMY3eoB^YSJ&)R9g6NgE7Ic0AWh2-(eu1_}2RWS)D zUGUu=HJt=&ND2@FH87Q52SdC-z4MTbg6fa`r?-b^;3~c-xP_KL9#tOZnD=W4DOOAlj!Xb z@h(a9^r!$ryzScjR56M0?&CS-KJqVveKz59t{Xp$Blr)3x_1_Q#`ccl-@9Ue^c##n za@{-d7lN+}Up;GxxPnj)O8X<#{OG8hM5Vx;kH2=A4t<}S;(fg0I{Unf^%EVPMpR@# z|K_HIJakiBzkaciRKT4$6ev?Ja9dFrN~`SKtN=|JgS%7JB<;x)$}# z_L|?Q&q}yzIsu=koE;gN>oNTikxR)}kXNR~dJ9 z$;W?qFh)G@P&<@M{%rie(jf0H!wr!Z935_oMCXLvelU1!4N%0!oNFi%FT1aGvqnp9yv+*-apNh+V6(}H|>jy14C39t#%S&Kf1ZJF zsWLu@!gzsDd%-m&Pt*cW@`UgY&ANQ~Nj_}Cmnb$`Bay{2ezB|m!<8792xl)A;}tIc z*K=p$9AUw=Mis;uZVM>LV$u@kmQZ5S2noNM>Q6-lm4Hn;W=77Bi5A+v{;dSo~6JdecIiuP+;rwe*Sn<(mtVL%Fn+KF`qap4d4= zGQW7C${E|lsr7NT1^R6Jnq2?x*ecKY_WFk7sfjp?{W)np^(V(E&xcEON#@{LCew7a zoeNCR&koVs(hPj-sVmq1_&O==J=OH>lRm+5QBk3R(FL|AN19Icj#wR)Q#Zo-PO?!S z8ytTX7mKi9c*ZM`QzRILivo542;@TzJw=KGtX>A<`PqBWmh}ttPssKR35brzgj$faez{tbJOCz?PgV4U#GZqG zxjKUJ*G2jaalEv}w0~?qpr;zBkq;@f^cOV%8CrI0NkX|qr}eJLP%ezU0+6|0`l-=k zKh&wRn*qIWZo8q}isNy-=%(4kbZF$H6+G$${2s=4JigQ!Xs85V%^tZ7zFO-!0iSok z=OG)6sX;Dgz0V{I3D3V*>Len`pG1GwQqK!8AhEUsyA1W#dSf*nx5erif*^r=8(uw7 zMsWJN-Ont)zr*c@>3Y|+x36LQCGRjS`$5gJ?WO56X`u%-UeC8ZP|eY~sNFoME#v>) z;xg;sFD_+mQgaXnx^-H%Pz*nkBO_3NXNc|$2nBaKSeGK`js!Wgne?Ev^cWnA)hZRE zCMq4&yf~h`^ak1Ib|2bUamelQJyfyr(8-xmaYp|)0)sqnkeBqDtEd_S!iU@LjM^NK33!0Orw#R8XoLlym;yIC)oaJe)@>a zxD^q0!|Vtj+)MM0PsD74Jz_;%W`y2v+PdP*g>z$c)+s(JL-`WBf1b%NtSHOvw&!o( z;EsqhhFIOhcKfi~8e)udZ`hu1ce}HS!u(8m{&r#G(I6-279z$Bb^w95f-)ic@+ubU z4v5RVIaLFJIGckoOw5K<8neww@Bp1^Rz=fWHcJMd`uxcS+gfoL!A0MD_3i2<->WH4 znGGZrA)*c&Ju7W5zohe)|tG7w0isy3Q}g)Psk6WAN}e|`lStn~gh ztKH6q+oc@(Al4v=y)^X(B#Cwv=_C^jOG@uqH~)Q8K!Z8Aa{id{W(DM$ zr}~IqEBPnHDTPNanpdHVRu~-@v}u-}daZZbM-)JF{*wwwEP&tyTrT|TS6dXt*}kpO z>akcQmP|s%`4-{!d(R0!KEE)FUY5b)#Upx%VU}1f=`e(By@h~Zr&vSjsoh}KuqoM$ z8S7xn?8C$GrVbWW&bQEy&{(4v=|a+AssSP?S|+=LfOz@ zo;5&Am#RzE8%?$}V|uEN)ARnJ^dy%Chrm0uYX1;t4Gefb_)x0eKlFSsFo3f@qygZA z=Z{{%@fVIh57SoR`oX({4OMn~RRc8Yag}?oXU4mGN#)4Ny?Dvq2U{#>!QB5a3sOUY z2v5u1v=gZ_pnwBiN}uv>QauX0Ppn9nO#y$-2W6yWCq%~O6fc}beC#79BO!QC??Qq;b*&?$0Pl6f3&$7W3T0n?*d2$fyvHL*@8E#Aclk5B*QH}pcHq?pv1~u&8L~3B+-@lqgMZCT zFWtVZ<_F85hIZca3_;EkGqJqKQ!c=S(~zFtr$=$HuTcT8w;?fDOfTc6mriD>aN*-~ z#Ct5GoBfZEML~*w*s~S{S=IY`JrxAUQyJQ-8*xJeX1=z=kH_fDByL+^_!Zv!AuM|Ln8Rs!N}3Yskt9^T)ct1jD@aqUCidyIl6T zVMBR}!{2K4cchdX?oLT>dZo)!mYbiD8?`9NYWIn3Z2u`ckkaaW+I`jibZbgrc&t7# zG@u1X_~}EmAz|t%`9FALb9_vr8sAYj#>B6ErY#*$5739FL}vTrwMY5TIdNbT;x+r| zUD&c;fQ3Mjiqqhf5v<12(L(1vdP(}rW<$jzhK8|bGxT`D_c>3{Q^ga%^9=QEy*Y5O z#^3WB(PpSlQ~Yb69r*G~I8DUPoV)s|{-;*Yof%uj4q!MvT)T3rHM8ma$4fmG;_=7s zsVM#No~F6&^whB8hr4Ui(`$DBa0Q$gWFh6iWTaN*%}j7x=+yHwLV2h}#7vuRGMloQ z6i%n-gF{nve4pEW{~A44byZ;eM4@L0JZ_dDVERw{7^%v{y&eZOYuxMg(%!P}r(U#U zm0v_`PV9f>R{UHlIAsH;d;WJ?ks~-U1chigVdvNHxgNWIj}x+PS)DQHYX}VVhegwI zg52id71SEJ%_CoUeN>{E?*AJ@vfNgqa9gU}_D9ogZE`yRscie?b_n24%k5CWe@tH$ zWT(JvHUMY~-`$FEmLfsMvnU(~$ZZa3@m#shqcHgLNg6v{cNAWzliF%zOA+5!1)lyO zPl=2VKx*4Ixg7%d19CeQ@Pnunt%n!yTHs=}3&M?7*!SlPj1}(Vis9`nYr1RKH@`_a zT&Tf1eBqrA4StP;;yvgKbRB;m@5Mhre?(W%pU^e*hr{tYe2~XO_%rnUI~R3WgR@B^ zX(G*}g{((!As1;yXVE+80@;AhptsS7qz%1}&Y}0vAZaHZq?0(vM$$z#k#6!B*^K^i zSZ}~qC+Q_WA_s^-4x;_&f5@}s5IIbakmtxz@;tmv`D1b%-l%+myhu)vmq;IZnY==N zN=}kj$!p|wa*F(noF;FOe)1-Hi@3-c@-{h3-XZUjpOXRd3wRUrm*gCIkGxNQMb48C z$OZBtxd?A(y2<||AHh4C9~0eg$S35#$tChz@+tWp86uyN&<}7vvA*GWjF9LjLql zw*g17c+TMiW_-~{^;pOHq!gR&oyurD%1v27pOf>F@(!0+uo)-4g6M73~s5dxfH1s%WoNw9DkSldf`=qN7~Vu28fq746lEcGZJ+09CjxIcX9mc@oCz z#W)?Cm&_X zCuzt!Nki628nP-hqKNTknf;a5xbZ{GjTH!7G$%@Yu74OU!HD4;J zTHI|qOjJBPNzwzCf6HlDSz8EiJ2#}=?9 zY&l!a*0U{a2NX%&>^626yNBJ+9$=5K$JsvkJA{7rEIY`aXWi^4>=1j|$zEf>V!vho z%HCr=9Lr7R{JBtWHmB#JISXgwGPxWspDW}_xk|2~<+)?fY z?iKD7_ZIgqcaFQjeZ*bjK8LU2Zg97_@3=eMFpqei_vHimFkZtO`B*-QPvhtD3-~2` z5nskTtN3+%6W_*n@mu(vd=I~m@8u8i$M_TcN&Yl{h9BVH=P&Xf^Plox@K^aS`EU5! z{9XROil}^4YB+wuUaP_Zv;Zams9#lZeXWA~1ywdc9srylRB)B5g72YK)d2MXEdZb+ zr>Ywo+W>X}>;c#hZ~)*4z;S>+fY$)}0nP%zVOw<`zzy&Tz!1P?fNKC>0elPaSAcr} z9{2{B1(*up4-g6fe&M4Bhz790MLhg<4D!hY$N|U)CB`o#~>^okRRQ!-kyEw7ull{At-@U{{aNI_3PqZ0*%R}{ue zDlw8)qZ}Z$A0mWe0{9yxn1C&uII(guO057l=Y;8%-Q$KSWLMHC+mBkSQa4H(+J-zQ zDRUeng<_R>r9PC5l=w%{EAfi4&PSRIC=rwiH+*y#74318DYT+sI?nVSg_kzVDeab$ zsZ#CA!Q=1>4Jm2H@ljZYa;#Dl#Hn0?g6ShoNy${vR@%I>t(;8B(~Fnv{}DncSH>0s zTd)=Jvq${ArD!YhVlTd<=#}V|qr79C511-gkU=_F`eYQtxZnp&BdO1#K{ ze)TxU(>r}X*uOk@3VJM{5DF3@8|BLBJ3eSsDkW*a-CfTzK)4gwqnc!Acr@He{BZXr9BOKMO4L~ccIyx4|o9WTAKGUTT2 nN?%6;e7xe5S_5GZ(lU&BfelAtCy$9Zw9r#}AL>M8YgdZtFR%=P#;aL|JAe`6*Xh>$pYAXsv0SL#v&R-W6 z6bD~l@D;-Gc7$YMnZ>26Di(CS0Q2WzzOSG-*4%P{`wSucBwSb5ZK`Sad4~N8p$C2f z0lK=aohpyO9JK3;^KU*s{IhaN3sv2n8At`mcbd`WlDv=a*Ih z!`U#O*aX15f0}g@t~20T+q9{(>#MhZ{ykieA>=o^rLC^!+r-c;5TF7DeK*x~wKGFF z5$2nKUe#K&sXp`O*>ebur2xCR?QP~QopoP+)`M`E4I%$h-Wp&G`B3B6>*uEYj2`gu zg@x$)q5fq4|BZhyWaF?VY%=445}uf#^us(x5cqwDZO023*`L`xcmbBKA7 z8Du_UK4Gp(q!M4rY{^`Sza&s%V5{bYVn4QLj+Pym6S0EOy~ljWe9U|sp$hb|0Nv$GWoaXcHXP*=X~;#|+W z_PO@DdR{%C29z{y*10z5eF)wb$2NtG)8{S}Vfrn~F!dgt=ANxdm-Q z&9M2W&a_*ddGE_L1}?9_#Ihdmi~AnZuk>tXMNoeTReJUTovd{uaUctvQ41e z^&a)}>H+m}^`QE^dPsdueM_U&G-*0DJ2iVW&ua!W$2Ega&3Vm`W-KBx;<<>U5#L3O zYZbYx;=w=P*{)fMTgbQ^VBb-lV_ zeVjf;pQSI+SL<8!UHaYnKK&v6EBd$eXZ4@zKi7Yw|3N=t@HLnXTMfO2y@rE^mklQj zXABn%&SAr-;kMy!lsw8mDl95GDluwRRDM)NR6|rpR8Q3JqRvJuqnn~f7WpkoTVz{g zU*uTSzGyIJeoS0UNz8LGgE2RajM2~NZ!{QFj2T9ovBcPA>@^-SUNBxZUNQb)ylY}i zI#Zk}$y8>lHElKZn)a9um`<9`m_9TOn?{|c+othYX{>*&D%J#lDY03xC9ykV&&6Jg z{Ut6gt|+cMZaD6Cd`Nssd{g|M_*>=}v(4ON9x$IXf4A7WxNGrci^>vXNwQ>E3N7m_ zO_ol}*#vFE#)JCd*sUN2PDfQM0 z-HN^y!)f-khP2MK-n8Rs!z&dl?JGN1o>@7*>Wy?|dP;gu`WxvJ8HS9ajQtrWGQL@D zUR|;Jh_%q#YkkFfD>EoFC$l$mZ|2!7O;)Ef>uh#hc4zir_LUq>PHk>b?#A5ba*x`4 zZH2ZSwgKCD+gM(7UVGkwyes*({GR;R^T!JO3vvo}7JN`}r!cEa;-GEw6^qk zsq;#if0?c9$+FXBSIT|MlgcZ~Ys)v5ca=Y0exUqN`C$3E@{8rS%kSFdc7J=A-DJ1g ztL*Le!}hcG3-%%VpX_7yI}bY^9<8XZI8^b&+TOL7*7>hHU+G_&Q+c#XUX@YRU3GH3 zYJKbaq3VF@9o3)LXlq7meQS$q_teGIwbUIm)Qvl89iP`{)jwXpxBlh&GYz_ibq$>j z=Npq7s~S%>g*D|jo!p?=@H_5O&@PNuaz*pE;JG#^&`7Cca^Tm8$>xTFFV1K09)E(1 zT3qo^b|C|Onc&bK5H!~3pb2)#x|BL7#7L=U^7+;G=Anes`K|oCXFdCA&c8a1JP)Ap zwaC+ydbEvnDy5v6hT~Fb7}IdsU8Nq^@Y+nJR{)>pne>D|UdL<4(<25sSYO+K2K`0= zkxo=bHo_~Dj$?SCaqLCgL&0%VXF(-#)@6GL$FV_qD{wVi2ER4zb9v#}W`W*4E*}uK zMnzABe*@J~GbG~8o# zZ(OkYOg>¤V4z{OMv$XechZh0E7glNBMI0;8y32&TdIu&=d$pCJM@`gNlhQY*7)uOJO7F?D zY4o_7D#X(};ess40m0+|P3oBUf?k4C*H0HvMibeap6slQ1}CLQNGJ$cq>uG@dq5^5 z0-Cuu$`@fLEn<8Y36`Fg6@nqa(zLiyJ~ZpV(lhCWeL=jyzP$N+?~7)mlXyUS9Q2_c z5ElR*K*|6d9r+4{=mKaSd@Y8J-CrTm5MsKI`?To9?qn>Yt&>B%XN&1q~BS+BP z_aVdAOVlLLy5PRc1$hv!FNGJ-lJUQ4;)~cOCKDiI^IqFr)K(r3LIg^L5XORcb z+tnr+U+BI(Y_XQ&Fc>0Sz>{J zlAE^zH7M~6UnN@LhLz|aFR&x}@S!M*_c(xtR+->1oG*%}`a_6{{NV-_Dk0%dl*jV| z6cR4C#*cB*CJ%Sx$EQ>}TH3|Kf+zpH=>^YBDfu4yMp_v?^g{QQqN#&SXaCBxa3Q_gG?1iQzjHle=K22nL;Y=H-){=L{RLc<=yP zkJ-x&Kf(!tp2w(o(wzAup4x2PaNeU0b0$4s#%I#=;%QN161?~eVZ;|TClb3nJy62= zSg7OP3-|*YIEYlu>GX~Fp(g?wsY5Bfs|_|l@JfLmCGiS5p@h(6tCWoKNk|vKlQsjt zgHjg9`;*Jf@INEgn-m^a^&>hJ|)KqUASNIUSFQl4nXTwZ4e~%_6YFU+T+hC|IW~b1610kTo67+8K-6*u$L<`M`rANVPV0uv6`90}gOjhG%sU&!WM7 zpXWWhiZz1*gv6*vjXyCHlpxslv;is*mC4TSJbtWMMd@jL49p3NY6(iyV z985(#)=m)E%2Bo_@+Q~5wNx&NM``T&?#Q{4z<@C6Vm!~BDoe1KB<$U8?R?vgd`pm0 zm6Y3@hGUkjw=Rtgejvz_zk`i^bYaM=@oP43Pfu#7D_E|PR81TWHm2p2+vC!=Z(bA6 zt$*|mcD4y8Kzxwja*f+996fQH5V-iTU(ZUGlc0X{0=ZWlR^ zlig7K4X`(K0=Jv^AE`*!!{#svcggwfY}o4QJ>l6v0*1(ia^6o_^0|XwnZ{C7L7;a) zmAWL*OH{n!PH>v13z$&R+3$HfTmA=#y$1Xqw|Czn1`o5RpIHdM!_T7pT#iaDpXOqK4fE1}LyJB7wRy0;>bn^Wd8RzX|Lo-J0BK4wtCB zyuHu$>pQKhcOClzzqsX#W4l(jzT^6JpH~3bCSQ^4b`9Z}iEbR@8e%89HSqZ9{=p(W zUEmcd1rP6gw=(zHosQ&W$IfSSE8pGsaDjK^;5m-J6*?T!;|@0d(csYkFUSzv9^1re zUz))4g&?1Gj`!6^vJq0Q@b?IDgMSG1C3fVU_bWI0FLi#wLT`1)$;GVKfr7==Ye&#{!9HrCkQy&U2jL2@vji43( z=e@WfEtlUBy&1%R5!Xz)rLp4Sduzmp3E~YT1KT?Iet6_J_eexd;mH&UYR{t)(0KU$ zwGuY_b{AK9PKLR|e+f(#iLIP8I}PZD@Dc>xq|L$6bS#5+ zYZY`XN3-#7>3ELvvj`I%E6@UqnU0lcj%5QK&qF?zC+Ij3@Ym=#2=I@|ix%lDs26a0 zA!AnI3UwADmf}*h04wNNhEzC-j^$`RZl>co>Vxp^LExi6mcXd*+@wRc66AaRB-pUB{2(C*Zx|RWyRWMAz_B{Y8oRfE>Mmhwy)& zx|N8-a4I^1IHn$*M5oX>rUAW$-bR098qsU$40<08GEK||c&F6Nv@n~PR;G<w6(%1Hxyeu$AT%3Zi%J27=;tx=){A`oPy@W^k!4tIB}i4%v8ffs z)NSu*K}n4r_01@wrKYnL74j=d9VaUYm-~*Le`f->wLY>5`NFIqR7(H*!hboKhbZ|V zyn+)Is)n~oGZjkY6-wh3%DJx+%kJrRzY#CIxxS-yiYkIVd{132#b>0_>+rtx{{X0c BY;^zt diff --git a/media/baseset/OpenTTD-Small.ttf b/media/baseset/OpenTTD-Small.ttf index a1c08fd49e785efd4ef6a902128b83ddea502954..701de01d3c7552bb88fdc2063799f90d2be5b96b 100644 GIT binary patch delta 12731 zcmb_j3w)HtwV#>&9=kk39-AlGN3zN0Nl5mYge2refCNGk0Rb@*STJgU@DPy#i%6;E zaxpNPdMP5JMWkG?1d*Z_l}l-AB}L0crOHpZ!ll+)w5e4pn|o%yZ>g1i7=938hqY${s<&--{J7zC@VH%Vl1Nk}g7PhpX zU;p$62n~A!4AjqCvD}J`cr`*%kTht##q@l{0^c-B7=Z(2)1r7SC%La`dVZ3;>CX z7PhQx*TtX<(B2C2)FLo?j?y+3@F+%SjMJV<;js}2n=DnVT zdq$M}4GkqTpd-4t<0r-J_a!0zI*r7s#esI+1}@CF>JK@>IPh#mF{lEGh(H78QspQQ zW+@;6|BSZbvG^d}k4IwC)r~*W(f=Vv`e&l2zahiuX|b9gj-m8m7F5KA@A#uPSOogE!n}+2C%e6w^jEXc%(zv zC!7(^314zc$RvQFA*SJ`5vBywNR!nXX-%-&twq*qYrA#1b)9uria#zTH8ncp>I?aN zAh_>;`%d(|*>|Y#7k!WSej0yJ}~hrscyQp>u}oyWSk$ zjPVL;9buaGA^_BeR^x4GFFJ-ELG#ce@NyLgZXsGjCZf4$J^CT~368-=Qbxv-aioS+ zkV^DRka-gqkx66@sU>y12SN{%Dl(pK8<8F}4L74Dcox13&qk|2=iPXE*IOfAB>sBS zT+>q1DpRLvpXs>il&Qyb&eUrPm{ZNg=4$gK^HlR}v(MaSUT$7(-eBHre#*Sdyx;tm z`Caoh^Vb$+(Ocpysg^v8$5Lsjx6HA$Syoy$SoT=XTdrD%SgqDd>vZtIX6sAVcdehM zpp=A^vXq9DMJXFoo=Q2Ia?PKbnp&H>G4+Ym-KhsskENbUeK+-j&1Gw~J!U&*yOK5} zEj4XY+KjYKX@}F^P3uk1Os`M(rEf_;oPHtwnth19#Jl>LOg$9~>^#r~x|kdc-# zJ)=2eTgJ|eeHoWBBQt9-^=8Lq z7iTZZUYor;`)GD=jycDZQ<<|MXKhYr&c2*8IhS%#Zgy@-ZgcLA+@9P|as#8{Mma`J zAGLba&QWiVx}KMrSCh9gZ-3sgybGiCqnk%>8og`u{?QjkU(b)ux93mFZ_Zzvzc>F_ z{)Yv|f~f^<1se)>6dWx$?;wseN0Z;N&auyN#BsuL#qp)n>a2GzaBgz$bDnn*SF$V9 z<#Ls{np_K9t6Uph+gv+c`&>s{CtSU5I;p9$%X#>!s5c}!urA) zg>ws^C_GyfQIuUYqv*Bb$l}W4oyFb7pN~lzGj+`BF}ucGDY2K#DcN3ft~9N5PU*(d z&&#B;;<5#0d&_#tz8&iryL9ZHv6sq)@?quHa##6;@)hMf%lDKYC_hquy!=#oPx-m> z3*}eJKQI5PJWwH3L{!98m@DiJ6?qk&in5BDiu#J_6(3hzt+-YhUFoT8tz22TtMW+Y zmsQDCj;a||E2_3s?XK#sI$!m5b!xS%dV2L^)yJyOR9_v3#wCv{A9w$_&Et-Z`?Myq z>$uTonQ{k9kCArt19-}066!_>@{g}?2V}Atkr|}%mhC9i9_;_1(x2wLmf=zK4NrW* zD7LheT!wQ&mmRl&j6}5j4$hye@VC{)CG~4ndfltE(qy-vzV6AU*lVL#-KBc24Nvk> zTo*^HJk1ua22UPn7C}}3vo1a;*T7bFP+GorP%ao0fxcGnZ?TtYNc0Y(!OJC?OdPE( zJTMvGgHW`D*jC;jg*m=k^I<*%QuUn&K?Z@6hn8=}vcMVt<4~Q*J@@pgS&6 z0WRc#Q1g6xz#X47e~`}i@y-SJar5Dwfe*nuS_AXn_<-B!iLy2HPvZ=9<=A0<7sT$!X2>A7xSrxI)nzK%q84_GWT$K z05npwlPYJ*e1xQc?ysDdtV}OY(WBta^z&&`Q`K7B zM0Zq`PE^D~Aqm6i4v9%K|ry?0-SyUePNeX`v%kyKEOC*dl%d5wzD76z`n&Rxec1n^Q1HDRq;fb&)*a4;);)8)%8h$7r!Kw`fekd() z*WIXf`1$K~zoU?{`Q9C-O3A_D@=8VumseaKF3(&pAuf+_*MYi6vAViLuI;~`AUaHH zdJ8$C-@@)%GkG;mV(-bY(ZiWA8YLkce2N%@9dWTnIgU0gF*;rL9PCRhotaQ@cag*A zOEj9z#zY5y;*K$H`$&tYu*p{kKSrCelRXgqs{T&=0Ii==OxqeV>GH4M?&46k?a$duq+j@N@K@tp(Y z!I@mXm#0Pv-xaK@L%5&U6LB++1$#LXyc7lvvS7@>bCl!;zk_@h6B3?IXEmDX(Z+Fj zDh)K=6$P%~hEAvhT}o#)9MQDr`9 za(kDc9bogv!ORqr*)p&%nZfmMQ}|sCcf?BmM}4RqIi0XZv;$$&Sb(>nTeT@uU!qQZ zduZ^=a^RD~JA;!7EeD0aE69i6d^<|TJZs?HHyZ$>>5$l#qCm8S55V`Hz|4!5y1gL?v~2F{_*oj5`;g_;fk-K-jX?sEuXa5#Zz7f<`q&8x zPWsgB)l)M6uAwt{zg}jW=BFCz>iMT}LRakq8@4D-|IiFe$zL;hmv6c@-&>%QApk-D zH(e+1Kdlc|sI{u~(DI*&7JhWcUj;RUPH_AXjK88MAD$`mOoDs6(pJqU1xh8{2=v(MJesg(sy~=5(JDT=O9Mph3ZIZ5A3}_Ko4v5X1YjBioC2{3Ccg;d z^9hHYG7WaNQ9uWn)S3rnp2~^PRlYWb_(i6JC!I)?g3?hIge3BsNxajQr_ZpJ5x3JA zp_grLXRI9MjM6z{ot!7hW*lqFBN?_>TW5T{4*Lkv>qZFivPE>nC+IX)pRe2J^KoWU zdU}!%>*C`bzRvifl=K*fH8D9dd8ldbh3ttbuL%k#PpP+ z_)h9s?xZd2uF$dBlW5%|r|?)By?#8dq_ftKF;pngM=I#f^%*HuY7Jged49-MUP#~z zB#%+}oOxyaGk7xH_~;Z|-*xWMJ4fJBnn$OnsE`-{idb7zN~|r`8SC@m-0n5-?10(O zC0TO}++X-1_=dVACEwrCTNgK{ z>@dP#AGH0+Dvi7!1lVa?D}Wn=bvVqjb~v;u?Qp7O3JZdDe%g_UqkkPY^{*4y=T-f% z2Y^2K9uTzW=L+E%7-aA|d|+4W023I5FZkMaT(8vo;Kat;;e4fSXNRSJb=W`EdM}rE zhU$KW!44Ku5Msn)+5z7v#v?fI+#;$Yh-`C}>AlW8;YM1hZb~nW@4r}BAHH-# zFmagKajGAz#ekR+&CpJp??}q_`G%$xvSpiC7aLU@g*%KD&#=0$uyeHA*wCmEU)7pY z*x1YuCHy#oJL>9+)w76l4*BkrjsJU`Y}gtKc^PsTTcc4nSfFfq2F|i3m=EM#2s^k_ zNkS;b8Rd+%xpPRYt(3URh&Mih#5&z|7wc?waGI(c5g(^-k|L8qLEtP)SUyK~Q*qwV znR;t$VK)`mxdjX%Mvvc@)U2dEw=EPE%&CsB6z2%J7I!e;bPh~q+~cZ$ZqA2#?zd%> zFV4+fR)&$xQ9;9>DO{O0$ z&!8`@tD#!Pi~4#%GCfG#5G`Zosq>CcSX}909je zZ~%tmuTg>x#+_<+d7N&i?9Rcdk}+-!ad;qTz<)TmZq1rHAAdmhWl1;jAb%z%;)j~s zo9pV};kfRz*e&p%FNCtc16d$!zH6xuzETx;4!YEs5jFJSLK1dO{tu>+0#Q|07dQ(c zCZEN*EY9f2hsLJjsFa{o6z&ZSW6`HTxKcJT5fd4kT4He*|f!HS$DAO%Z znEXwMs(b+@;V88%A}b!FmL-&c7pdjpDckXrYB>VAoa|zp>5PQ&G^ph$6yaK>mScgx zO)bX(|25Qv?t^Q-R@8!)A|JBS>?cp^9LP)m@?<`7c)P5fr=9e(-=yFpT@i2XC2{zN z=zVk%Z^Su>K4t^K?v}^8ZGcJP*+$DIXaGBN3X#(?*pWbEF_D_V$x2Qkfmf9`a3<|5HG{{EVD z!wvAzx8TD0ZE~9Qkl%G(?=cCuh(`YYlwN*t(S7+&m#gdC?`MliMftq$Dk@NZS5&CK zE9s;U78@#At)M!;njZcj1Lt?0{a^?7^DY%$C+||>t*9AVk+*DNOIzE#miA>sD>daR zO}ScA9;YeSXv*U?I7{?Lh_}iDM-JC&Ih~o<5xWhP}Fpf8j zQy9j%>0*D-yvEb&fHeMAIU2949F6Z)jwS*Wjw1{YhXxP7Dii`FID1DJ9*!_P9AS7k z!tii};o;EY;paYc6b*#PaT6jHAx9WOjxdBAVF)?G5OQb`f?EyPDc}f9cqSeOnKutU z{u21p8w{VdFun&rfONPGKCffE5Vu2l33(Z01(0M1WtRJu{Lh|4&;qm$iPbferXp+0 z(uIpq?!1SWwxPm%m(G6xRkyV)UxXTXUl4|Vpa<;pA6~hQGO;!_R-=e{j%D+Z5#)o$ zF$_mS5ioGZi{yNaW&<|@?%UYj%dWi$l+sWsh`fV8fDPpjxab-ju-JSVTbVDx?J!fq zMKFk517&Q+3?pUE1g%6x^h}Rcla~KgDft#-WJ3(XySyK~{z35tpRz8@PwW-vcFTBS z%hCss9y+leY}QNz1`alSY}k*8;Tjr-ex-|pEjk&ZN0$nPOdxn=*TKfEgEuH$IS`<& zgSTuQygBP;0Kqp>oeu~;b?MrHRsg|Eux>rjV?bMgo&eeov8|QN*Y)bI!^kATKTL=g5(Kl5CS(iwf=4J3DuoF`y)adnCCm{P2yMbr zVWqHE*dT0zzfu@rd}E zctY$Jd&INidGTZMiujrMrTDcNkOXOn6e-0?0GkA;Nr0LJs7ZjD1gJ@XngpmxfSLrT zNr0LJs7ZjD1gJ@XngpmxfSLrTNr0N<2iPQlO#;{?fK39}B!Epi1auVWIM7L;w}8$7 zos&M4E=gCV&!t}Jx{PE=9wtZ239?yEle6V~*&~<8mGT6+UY;t?lIO?^H#_nbROtqpesP10euPdHBbN{g8(!HC=w_R2pnMmM;O2n25^J{ z9AN-Q7|Mab5r#=X;0Oaa!T^pi_<-&QY6k*G7{C#J19-v!o-lwT4B!aEc33PhAb5iK zfahR*5F8+>^i|{s>&0aJw=$#cJm?_cb3mx?_b>a|_p||ul-a-q!T`QHlrX+J%P{_6 z@>)LMJzyT+tMfl?m|N-Bi`oCa=C$+Cmj4<2;O+fi;KlEW9}JrP@v{QH78Y$;otc8u zAWubJk<^w4U#5HDMi;VX1=)YgLgOgnyg8ZpOb>owl>KtjL6Ow0*`dSc$B(|K8m{bG{~ delta 5533 zcmai23s98T6+ZXw&n_B)6;=?!zIZIlYuOjOyg`FV5Q7plJ_tfw1r-4+A&Dg{M$}A7 z6uoKVSZYXO6WeC2<61L1jxlLs6KkwGCb4QVVnb?7nuj5#O=ao1|Nn!Fkm=6+{O5l6 zoO93XKlgGk+)^BRUEu`+0HM$c3aBk9shYcI(tDo(T;7Ff?Cj!MB`^&%IBw_TiU%|7 z)oWil2S6HdT)TX2T}%Ae8^ZwZ=>-rh%iCHFpdrW`b{gk}`nvTk!^5Z$LyX>u6?1RZaSPQFJS|D_&H5BrFp)3Oj^z!bie)LEA$MwV(~s zs{f`r?vVeW|9Ss5|Fiy${u=+o{%Zdc|04fFf634n zLpO##AG$vD&!IPlUKrXj^x#m%Q0DF3-+eKVI$$118b};44nz+`4MbcsT}!y8yEf&T zqW@z52mPn||Jc8{zv61`rC%&92EsOmdVN7*HN?9P+F&&XMY zyAj$k4g26IY=q^|gvq&2oLvh~(qec7o`TKrJc%G0noV+ET4Y z+o)~Twrjhz-P-50z1qFnW7?D2GujWeH?%jkKkBCI;&dsx2XsqxO}Y)bUAjKqaotJX z8Qm4#b={!uwmw*|(VO&keSyAA->C1?@7JHze`W|a#2QKrm4-IMF2e!CNy8^b0khyV zmK$q~9md1P>v3vtTzTA*xQ4jaxX!rlxLt95akt`A;>+UOx`b}2T5>uC{$JA@uXF6m$Vfrj-dXgcjDycT9F==no zd2_H?V>Xye%~j^7%m>ZK%_q%Qk|!tIljkK@CpRSbB_B@qUQE87VofPZ@uX}>Ih=Ae z<=?47syVeNbx~?#>dw@?sc)rznd(n7q}8PLq`i`MBJE<@VEXj*g7n(-ZRy9-Z&-pY zIhH0%yQR-^D#MUbp7BUVQ$}CLv5X5D*R7#egSE)I+S+d2WBt$;X|vc$Y&EtGwqD!Y zw$JPu`%HVI*Z#P@%f8Qk$bQYCc9^1Ly_rWd&t~3oX<{Yx81>RjXS}e=61S^+@ z5KZ7bkt{T4e-Plet!8iLM4$~y_EwGt8>yOoo1+o1QG&Qh^2iPMN-2{J|5HJQZ10=pn%H%m zbxan;5CX?BBpTIniGdxMttm&P#UloDrDRZ@M4EV&;S6s6Ba4xq030O(>qay}Nz=Ih zUJ#pS;Iv#;e6JiMCdXwwzXy|n>c;Vl_yqbJM1Lgy{J?q^Cw@{OJz#UbJi+0}&$%r2z`1s+Bw$&o6m0$}b1r1ZMO^C52xOd^!f+ zM4EU+ME!+hLnwMUfk7fZfkCzGs~J(MS~0t2+#mMMjA=2F`DGKB&-62+>cz!JXGe`q z;aW(e2gPJ#C8t-9i@NY=~&w$2g3uFh;Gb!;AfaBK2HSnGYcWH~!@_$z7VkT8bCMqPZB!I~kEm z-o)Kdv;N`^GN0AX$`{1pi?cM*jbf-O?&v4!a;cn|6-Cyt&t{$Cy~lp1D`0$jxPhWd zCD=wp#klcgN+!%_>QYT4dN6l{VKh(;EPVEFSbTlBO8k_0hrmP`>NV`dY{7=+2eufg zmDF=H>G;OVabIF-D&ad%xBL4#;ddA`b`uzd@Nl9_@ z!Tc2Q#^omsn4ly)$Mtbluuw`I;(?7`5|H@s;B0C|#9Xm|E5S8l!bn_Y9QEC$QTj&4 zYvefBSSCxlM4tYsY8)k?g(`T z7(6I$>>Ou1P^4B&YX$2o;3999+es$x=F8yW02wI}QcugA7@vS&3jcV1j{8>4?I!X! zIWD2nH#xOJBQpf%=UwRw<0@uUv=e5WUqx24w)r_0-ipZY#9~tN9cIiJ*W_awBF{g< zLM!9OieN7kMFz!2q9oYfa2!o)$TSR@lB{GWD=WkKmM>|BcR37gZ2$Zeoe1?1o)0Dd zmoR2ASjQ}tm7$VyX?kldNR15FuuBilArCTB z)lyQ;c2=d5W_G+PO7#TKFw$45jQS@fTI!fQPjW-@$~>_PGTqJ4i~L(hn)fJA_uaB| zkr?V83HLp{V49L_WP6t0OS;+7rT5k~%ZA}i1@~k08)+5=uxU#;|4Pvj6OnMdIvC-X z8a8PbE3oelj%Se`H1RcGLG{Nf{D1x%chsEM0;dDiz48-yAV078BwXfQaiIgO!}A7t zffcNHOn>BVpT(G)#1o*B9PwRPaX-QPiGb5>UVWYFAyMik+gm?CBZ2+RXkkYh2K5sB zp8$iTuXB;e{)6xIDw|^RV$p^lkcs`*Smj%~wk=pCW4?=zhA8!T&_mzxZbFXU$Vo&z z2IB37(7t%Y0H3FQ1-1R3Wk(h9{SL!QDf_X*B3AzBRv>mea`i4&lhhq4!p!7dh=xgt z1C*?^gqqB8A zi|zi^LY9}hnEm!8yVnc@(iIF|D}|60nGOOqSt8R)m_norEPxR8`|%bT4}}<~U8dC# z;#?)uQ$gk2D$~;t|AS0NBK{t~<`E`gsCa8enk{@;>zxNo#s!EWp)wr=29hPyN|;X8 z$aIKtH`yuEq2P4fmT5KGGgqdkLa6gGnVyFDcA1Vu{0N>VR^d%a1JuFKzyk($^X0dR zlO5S>B~ITLd*64kBNq*%&3EbIKCJVL&`&m#Eo3WPhAZ$fT!p`rr`fK{JxcgBIY-X> zELU`-01kqWJ_3i~b$FXDhePluc!zr64{#jbfMaw8T}kU{16@T|(>1h_uBA=z18t@) zbRGQ}UC*BR*ghGrT)w8y(rt9RujCW0z}8%Q!)O0Tbx=%}RrP4oDyuWgCcU%eakh=^ xyWY%_J~#L(KK~^t77t!nt=N^Q9CLsvc#A4vta&*T`H?8Nw6%FVB4h3#{|At{NiqNc diff --git a/media/baseset/OpenTTD-font.md b/media/baseset/OpenTTD-font.md index 25115cca90..39de7ca1b4 100644 --- a/media/baseset/OpenTTD-font.md +++ b/media/baseset/OpenTTD-font.md @@ -3,4 +3,4 @@ The OpenTTD TrueType font was created by Zephyris and is maintained on [Github](https://github.com/zephyris/openttd-ttf). It is licensed under GPL-2.0. -The currently included files correspond to release v0.5. +The currently included files correspond to release v0.6. From 1addeddc072f02f2f6759f9c5a14dfce3cdc41d1 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 12 Mar 2024 04:41:20 +0000 Subject: [PATCH 108/695] Update: Translations from eints english (au): 45 changes by krysclarke norwegian (bokmal): 256 changes by eriksorngard welsh: 41 changes by Ansbaradigeidfran english (us): 45 changes by 2TallTyler russian: 11 changes by Ln-Wolf finnish: 18 changes by hpiirai ukrainian: 20 changes by StepanIvasyn catalan: 167 changes by J0anJosep danish: 11 changes by bscargo spanish: 35 changes by lrlopez french: 41 changes by ottdfevr portuguese: 44 changes by jcteotonio portuguese (brazilian): 168 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 336 +++++++++---------- src/lang/catalan.txt | 334 +++++++++---------- src/lang/danish.txt | 22 +- src/lang/english_AU.txt | 90 +++--- src/lang/english_US.txt | 90 +++--- src/lang/finnish.txt | 36 +-- src/lang/french.txt | 82 ++--- src/lang/norwegian_bokmal.txt | 513 +++++++++++++++--------------- src/lang/portuguese.txt | 88 ++--- src/lang/russian.txt | 22 +- src/lang/spanish.txt | 69 ++-- src/lang/ukrainian.txt | 29 +- src/lang/welsh.txt | 82 ++--- 13 files changed, 902 insertions(+), 891 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index d055559c00..43eed26e68 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -50,7 +50,7 @@ STR_CARGO_PLURAL_RUBBER :Borracha STR_CARGO_PLURAL_SUGAR :Açúcar STR_CARGO_PLURAL_TOYS :Brinquedos STR_CARGO_PLURAL_SWEETS :Doces -STR_CARGO_PLURAL_COLA :Bebida de Cola +STR_CARGO_PLURAL_COLA :Xarope de Cola STR_CARGO_PLURAL_CANDYFLOSS :Algodão Doce STR_CARGO_PLURAL_BUBBLES :Bolhas STR_CARGO_PLURAL_TOFFEE :Caramelo @@ -84,7 +84,7 @@ STR_CARGO_SINGULAR_RUBBER :Borracha STR_CARGO_SINGULAR_SUGAR :Açúcar STR_CARGO_SINGULAR_TOY :Brinquedo STR_CARGO_SINGULAR_SWEETS :Doce -STR_CARGO_SINGULAR_COLA :Bebida de Cola +STR_CARGO_SINGULAR_COLA :Xarope de Cola STR_CARGO_SINGULAR_CANDYFLOSS :Algodão Doce STR_CARGO_SINGULAR_BUBBLE :Bolha STR_CARGO_SINGULAR_TOFFEE :Caramelo @@ -118,7 +118,7 @@ STR_QUANTITY_RUBBER :{VOLUME_LONG} d STR_QUANTITY_SUGAR :{WEIGHT_LONG} de açúcar STR_QUANTITY_TOYS :{COMMA}{NBSP}brinquedo{P "" s} STR_QUANTITY_SWEETS :{COMMA}{NBSP}saco{P "" s} de doces -STR_QUANTITY_COLA :{VOLUME_LONG} de bebida de Cola +STR_QUANTITY_COLA :{VOLUME_LONG} de xarope de Cola STR_QUANTITY_CANDYFLOSS :{WEIGHT_LONG} de algodão doce STR_QUANTITY_BUBBLES :{COMMA} bolha{P "" s} STR_QUANTITY_TOFFEE :{WEIGHT_LONG} de caramelo @@ -290,7 +290,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Clique e STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Alternar entre janela grande/pequena STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de rolagem - desloca a lista para cima/baixo STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de rolagem - desloca a lista para a esquerda/direita -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolir construções, etc. em um quadrado do terreno. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolir construções, etc. em um quadrado do terreno. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para só mostrar o custo estimado # Show engines button ###length VEHICLE_TYPES @@ -380,7 +380,7 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Abrir a # Tooltips for the main toolbar ###length 31 -STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausar jogo +STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausar o jogo STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Avanço rápido do jogo STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opções e configurações STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Salvar, abrir ou abandonar jogo, sair do programa @@ -425,9 +425,9 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Construi STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Construir ou gerar indústrias STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Construir infraestrutura rodoviária STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construir infraestrutura para bondes -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árvores. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árvores. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para só mostrar o custo estimado STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Colocar placa -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objeto. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objeto. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para só mostrar o custo estimado # Scenario editor file menu ###length 7 @@ -479,7 +479,7 @@ STR_SUBSIDIES_MENU_SUBSIDIES :Subsídios # Graph menu STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Gráfico do lucro operacional -STR_GRAPH_MENU_INCOME_GRAPH :Gráfico das receitas +STR_GRAPH_MENU_INCOME_GRAPH :Gráfico de rendimentos STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Gráfico das cargas entregues STR_GRAPH_MENU_PERFORMANCE_HISTORY_GRAPH :Gráfico do histórico de desempenho STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Gráfico do valor da empresa @@ -606,8 +606,8 @@ STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STR STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} -STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Gráfico de Lucro Operacional -STR_GRAPH_INCOME_CAPTION :{WHITE}Gráfico de Receitas +STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Gráfico do Lucro Operacional +STR_GRAPH_INCOME_CAPTION :{WHITE}Gráfico de Rendimentos STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Unidades de carga entregues STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Classificações do desempenho da empresa (máximo=1000) STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Gráfico de Valor da Empresa @@ -657,8 +657,8 @@ STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP :{BLACK}Ver deta STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}Veículos: STR_PERFORMANCE_DETAIL_STATIONS :{BLACK}Estações: STR_PERFORMANCE_DETAIL_MIN_PROFIT :{BLACK}Lucro mín.: -STR_PERFORMANCE_DETAIL_MIN_INCOME :{BLACK}Receita mín.: -STR_PERFORMANCE_DETAIL_MAX_INCOME :{BLACK}Receita máx.: +STR_PERFORMANCE_DETAIL_MIN_INCOME :{BLACK}Renda mín.: +STR_PERFORMANCE_DETAIL_MAX_INCOME :{BLACK}Renda máx.: STR_PERFORMANCE_DETAIL_DELIVERED :{BLACK}Entregue: STR_PERFORMANCE_DETAIL_CARGO :{BLACK}Carga: STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Dinheiro: @@ -877,12 +877,12 @@ STR_NEWS_END_OF_RECESSION :{BIG_FONT}{BLAC STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL :{BIG_FONT}{BLACK}{INDUSTRY} aumenta a produção! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL :{BIG_FONT}{BLACK}Nova camada de carvão encontrada na {INDUSTRY}!{}A produção deverá duplicar! -STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL :{BIG_FONT}{BLACK}Novas reservas de petróleo encontradas {G nos na} {INDUSTRY}!{}A produção deverá duplicar! +STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL :{BIG_FONT}{BLACK}Novas reservas de petróleo encontradas n{G o a} {INDUSTRY}!{}A produção deverá duplicar! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM :{BIG_FONT}{BLACK}Métodos agrícolas aperfeiçoados na {INDUSTRY} deverão duplicar a produção! -STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}Produção de {STRING} {G nos na} {INDUSTRY} aumenta {COMMA}%! +STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}Produção de {STRING} n{G o a} {INDUSTRY} aumenta {COMMA}%! STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}A produção de {INDUSTRY} foi reduzida em 50% STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Infestação de insetos causa destruição {G no na} {INDUSTRY}!{}Produção diminui 50% -STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}Produção de {STRING} {G nos na} {INDUSTRY} diminui {COMMA}%! +STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}Produção de {STRING} n{G o a} {INDUSTRY} diminui {COMMA}%! ###length VEHICLE_TYPES STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} está aguardando no depósito @@ -919,14 +919,14 @@ STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Abrir a STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}{STATION} não aceita mais: {CARGO_LIST} STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION} agora aceita: {CARGO_LIST} -STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Oferta do subsídio expirou:{}{}{STRING} de {STRING} para {STRING} agora não será subsidiado -STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsídio retirado:{}{}Transportar {STRING} de {STRING} para {STRING} não é mais subsidiado -STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subsídio de serviço oferecido:{}{}Primeiro transporte de {STRING} de {STRING} para {STRING} irá receber {UNITS_YEARS_OR_MINUTES} de subsídio da autoridade local! +STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Oferta do subsídio expirou:{}{}{STRING} d{G o a} {STRING} para {STRING} agora não será subsidiado +STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsídio retirado:{}{}Transportar {STRING} d{G o a} {STRING} para {STRING} não é mais subsidiado +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subsídio de serviço oferecido:{}{}Primeiro transporte de {STRING} d{G o a} {STRING} para {STRING} irá receber {UNITS_YEARS_OR_MINUTES} de subsídio da autoridade local! ###length 4 -STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} de {STRING} para {STRING} será pago a 150% pelos próximos {UNITS_YEARS_OR_MINUTES}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} de {STRING} para {STRING} será pago a 200% pelos próximos {UNITS_YEARS_OR_MINUTES}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} de {STRING} para {STRING} será pago a 300% pelos próximos {UNITS_YEARS_OR_MINUTES}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} de {STRING} para {STRING} será pago a 400% pelos próximos {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} d{G o a} {STRING} para {STRING} será pago a 150% pelos próximos {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} d{G o a} {STRING} para {STRING} será pago a 200% pelos próximos {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} d{G o a} {STRING} para {STRING} será pago a 300% pelos próximos {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} d{G o a} {STRING} para {STRING} será pago a 400% pelos próximos {UNITS_YEARS_OR_MINUTES}! STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Tráfego caótico em {TOWN}!{}{}Programa de reconstrução de estradas financiado por {STRING} provoca 6 meses de sofrimento aos motoristas! STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}Tráfego caótico em {TOWN}!{}{}Programa de reconstrução de estradas financiado por {STRING} provoca 6 minutos de sofrimento aos motoristas! @@ -945,13 +945,13 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copiar a STR_GAME_OPTIONS_CAPTION :{WHITE}Opções do Jogo STR_GAME_OPTIONS_TAB_GENERAL :Geral -STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Escolher as configurações gerais +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Selecionar as configurações gerais STR_GAME_OPTIONS_TAB_GRAPHICS :Gráficos -STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Escolher as configurações gráficas +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Selecionar as configurações gráficas STR_GAME_OPTIONS_TAB_SOUND :Som -STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Escolher as configurações de sons e música +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Selecionar as configurações de sons e música STR_GAME_OPTIONS_TAB_SOCIAL :Social -STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}Escolher as configurações de integração social +STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}Selecionar as configurações de integração social STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Efeitos sonoros @@ -1000,7 +1000,7 @@ STR_GAME_OPTIONS_CURRENCY_EEK :Coroa Estoniana STR_GAME_OPTIONS_CURRENCY_LTL :Litas Lituano STR_GAME_OPTIONS_CURRENCY_KRW :Won Sul Coreano STR_GAME_OPTIONS_CURRENCY_ZAR :Rand Sul Africano -STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizado... +STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizada... STR_GAME_OPTIONS_CURRENCY_GEL :Lari da Geórgia STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iraniano STR_GAME_OPTIONS_CURRENCY_RUB :Novo Rublo Russo @@ -1054,10 +1054,10 @@ STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Marque e STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Escalar chanfros STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Marque esta caixa para dimensionar os chanfros pelo tamanho de interface -STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Usar a fonte sprite tradicional -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marque esta caixa se preferir usar o tipo de fonte tradicional de tamanho fixo. +STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Usar a fonte fixa tradicional +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marque esta caixa se preferir usar o tipo de fonte tradicional de tamanho fixo STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Fontes com bordas suaves -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marque esta caixa para fontes redimensionáveis com contornos suaves. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marque esta caixa para fontes redimensionáveis com contornos suaves STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1069,7 +1069,7 @@ STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Pesquisa STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participar de pesquisa automatizada STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Quando ativado, o OpenTTD enviará uma pesquisa ao sair de um jogo STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}Sobre pesquisa e privacidade -STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Isso abre um navegador com mais informações sobre a pesquisa automatizada +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Abrir um navegador com mais informações sobre a pesquisa automatizada STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Pré-visualizar resultado da pesquisa STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Mostrar o resultado da pesquisa do jogo atual em execução @@ -1219,7 +1219,7 @@ STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(sem explicaç STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{ORANGE}{STRING}{POP_COLOUR} STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor padrão: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipo de configuração: {ORANGE}{STRING} -STR_CONFIG_SETTING_TYPE_CLIENT :Configuração do cliente (não é armazenada em jogos salvos; afeta todos os jogos) +STR_CONFIG_SETTING_TYPE_CLIENT :Configuração do cliente (não é armazenada no jogo salvo; afeta todos os jogos) STR_CONFIG_SETTING_TYPE_GAME_MENU :Configuração do jogo (armazenada no jogo salvo; só afeta novos jogos) STR_CONFIG_SETTING_TYPE_GAME_INGAME :Configuração do jogo (armazenada no jogo salvo; só afeta o jogo atual) STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Configuração da empresa (armazenada no jogo salvo; só afeta novos jogos) @@ -1238,7 +1238,7 @@ STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Configurações STR_CONFIG_SETTING_TYPE_DROPDOWN_HELPTEXT :{BLACK}Restringe a lista abaixo a determinados tipos STR_CONFIG_SETTING_TYPE_DROPDOWN_ALL :Todos os tipos de configuração -STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Configuração do cliente (não armazenada no jogo salvo; afeta todos os jogos) +STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Configuração do cliente (não é armazenada no jogo salvo; afeta todos os jogos) STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Configurações do jogo (armazenadas no jogo salvo; só afeta novos jogos) STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Configurações do jogo (armazenadas no jogo salvo; só afeta o jogo atual) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Configurações da empresa (armazenadas no jogo salvo; só afeta novos jogos) @@ -1276,7 +1276,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Dinheiro ilimit STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Permite gastos ilimitados e desabilita a falência de empresas STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Valor máximo do empréstimo inicial: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Valor máximo que uma empresa pode emprestar (sem considerar a inflação). Se definido como "Sem empréstimo", não haverá dinheiro disponível a menos que seja fornecido por um Script de Jogo ou pela configuração "Dinheiro ilimitado". +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Valor máximo que uma empresa pode emprestar (sem considerar a inflação). Se definido como "Sem empréstimo", não haverá dinheiro disponível a menos que seja fornecido por um Script de Jogo ou pela configuração "Dinheiro ilimitado" STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sem empréstimo @@ -1330,8 +1330,8 @@ STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Você n STR_CONFIG_SETTING_AUTOSLOPE :Permitir paisagismo sob edifícios, vias, etc.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permite paisagismo sob edifícios e vias sem precisar removê-lo(a)s -STR_CONFIG_SETTING_CATCHMENT :Permitir áreas de abrangência com dimensões mais realistas: {STRING} -STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Usa área de abrangência de tamanhos diferentes para diferentes tipos de estações e aeroportos +STR_CONFIG_SETTING_CATCHMENT :Área de cobertura com dimensões mais realistas: {STRING} +STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Usar áreas de cobertura de tamanhos diferentes para diferentes tipos de estações e aeroportos STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Estações de empresas podem servir indústrias com estações neutras próprias: {STRING} STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Quando ativado, indústrias com estações próprias (como as Petrolíferas) podem ser servidas por estações da empresa construídas nas proximidades. Quando desativado, essas indústrias só podem ser servidas pela sua própria estação. Qualquer estação da empresa nas redondezas não poderá servir a indústria e a estação própria não poderá atender outra senão a própria indústria @@ -1340,17 +1340,17 @@ STR_CONFIG_SETTING_EXTRADYNAMITE :Permitir a remo STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Torna mais fácil remover edifícios e infraestruturas das localidades STR_CONFIG_SETTING_TRAIN_LENGTH :Comprimento máximo de trens: {STRING} -STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Define o tamanho máximo dos trens +STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Define o comprimento máximo dos trens STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} quadrado{P 0 "" s} STR_CONFIG_SETTING_SMOKE_AMOUNT :Quantidade de fumaça/fagulhas das locomotivas: {STRING} STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Define a quantidade de fumaça ou fagulhas emitidas pelos veículos STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Modelo de aceleração dos trens: {STRING} -STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Escolher o modelo físico para a aceleração dos trens. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do trem, tais como 'comprimento' e 'força de tração' +STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Escolher o modelo físico para a aceleração dos trens. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do trem, tais como comprimento e força de tração STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Modelo de aceleração dos veículos: {STRING} -STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Escolher o modelo físico para a aceleração dos veículos rodoviários. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do veículo, por exemplo a 'força de tração' +STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Escolher o modelo físico para a aceleração dos veículos rodoviários. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do veículo, por exemplo a força de tração STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :Inclinação do terreno para trens: {STRING} STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Inclinação de um quadrado inclinado para um trem. Valores grandes tornam mais difícil para um trem subir uma colina @@ -1360,7 +1360,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Inclinação do STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Inclinação de um quadrado inclinado para um veículo rodoviário. Valores grandes tornam mais difícil para um veículo subir uma colina STR_CONFIG_SETTING_FORBID_90_DEG :Proibir trens de fazer curvas de 90 graus: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas de 90 graus ocorrem quando uma pista horizontal é seguida diretamente por outra vertical em um quadrado adjacente, fazendo com que o trem vire 90 graus quando passa de um quadrado para o próximo, ao invés dos habituais 45 graus para outras combinações de pistas. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas de 90 graus ocorrem quando uma pista horizontal é seguida diretamente por outra vertical em um quadrado adjacente, fazendo com que o trem vire 90 graus quando passa de um quadrado para o próximo, ao invés dos habituais 45 graus para outras combinações de pistas STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permitir a união de estações não adjacentes: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite acrescentar partes a uma estação sem tocar diretamente nas partes já existentes, usando Ctrl+Clique enquanto coloca as novas partes @@ -1402,8 +1402,8 @@ STR_CONFIG_SETTING_SHOWFINANCES :Mostrar janela STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Mostrar janela de finanças no fim do período: {STRING} ###length 2 -STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Se ativado, a janela de finanças é exibida no fim de cada ano, permitindo uma inspeção fácil do estado financeiro da empresa -STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Se ativado, a janela de finanças é exibida no fim de cada período, permitindo uma inspeção fácil do estado financeiro da empresa +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Se ativado, a janela de finanças será exibida no fim de cada ano, permitindo uma inspeção fácil da situação financeira da empresa +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Se ativado, a janela de finanças será exibida no fim de cada período, permitindo uma inspeção fácil da situação financeira da empresa STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Novas ordens, por padrão, são 'sem parar' : {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalmente, um veículo irá parar em cada estação por onde passa. Ativando esta configuração, o veículo passará por todas as estações na sua rota, sem parar, até o destino final. Esta opção só define um modo padrão para novas ordens. Ordens individuais podem ser definidas explicitamente para qualquer um dos dois comportamentos @@ -1442,7 +1442,7 @@ STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Permitir que em STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Permitir enviar dinheiro para outras empresas: {STRING} STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Permite a transferências de dinheiro entre empresas em modo multijogador -STR_CONFIG_SETTING_FREIGHT_TRAINS :Multiplicador de peso para cargas para simular trens pesados: {STRING} +STR_CONFIG_SETTING_FREIGHT_TRAINS :Multiplicador de peso da carga para simular trens pesados: {STRING} STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Define o impacto do transporte de carga nos trens. Um valor grande torna o transporte de carga mais difícil para os trens, especialmente em inclinações STR_CONFIG_SETTING_PLANE_SPEED :Fator de velocidade de aviões: {STRING} @@ -1472,7 +1472,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Cor inicial da STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Escolher a cor inicial para a empresa STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Cor inicial secundária da empresa: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Escolher a cor inicial secundária para a empresa, se um NewGRF precisar usá-la. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Escolher a cor inicial secundária para a empresa, se estiver usando um NewGRF que permite isso STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeroportos nunca expiram: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Quando ativada, esta configuração torna cada tipo de aeroporto disponível para sempre após a sua introdução @@ -1496,22 +1496,22 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Veículos nunca STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Quando ativado, todos os modelos de veículos permanecerão disponíveis para sempre após a sua introdução STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Unidades de tempo: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Escolher as unidades de tempo para o jogo. Isto não pode ser alterado posteriormente.{}{}O modo clássico no OpenTTD é baseado em um calendário, em que um ano é composto de 12 meses e cada mês tem 28-31 dias.{}{}No tempo baseado em relógio de parede, a produção de carga e as finanças são baseadas em incrementos de um minuto, que tem aproximadamente a mesma duração de um mês de 30 dias no modo baseado em calendário. Esses incrementos são agrupados em períodos de 12 minutos, equivalentes a um ano no modo baseado em calendário.{}{}Nos dois modos, há sempre um calendário clássico, que é usado para datas de introdução de veículos, casas e outras infraestruturas. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Escolher as unidades de tempo para o jogo. Isto não pode ser alterado posteriormente.{}{}O modo clássico no OpenTTD é baseado em um calendário, em que um ano é composto de 12 meses e cada mês tem 28-31 dias.{}{}No tempo baseado em relógio de parede, a produção de carga e as finanças são baseadas em incrementos de um minuto, que tem aproximadamente a mesma duração de um mês de 30 dias no modo baseado em calendário. Esses incrementos são agrupados em períodos de 12 minutos, equivalentes a um ano no modo baseado em calendário.{}{}Nos dois modos, há sempre um calendário clássico, que é usado para datas de introdução de veículos, casas e outras infraestruturas ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendário STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Relógio de parede STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutos por ano: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Escolher o número de minutos para o ano do calendário. O padrão é 12 minutos. Defina como 0 para o tempo do calendário não mudar. Essa configuração não afeta a simulação econômica do jogo e só está disponível quando o tempo é baseado em relógio de parede. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Escolher o número de minutos para o ano do calendário. O padrão é 12 minutos. Defina como 0 para o tempo do calendário não mudar. Essa configuração não afeta a simulação econômica do jogo e só está disponível quando o tempo é baseado em relógio de parede STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (tempo de calendário congelado) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Escalar a produção de carga da localidade: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Ajustar a produção de carga das localidades nesta porcentagem. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Ajustar a produção de carga das localidades nesta porcentagem STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Escalar a produção de carga da indústria: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Ajustar a produção de carga das indústrias nesta porcentagem. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Ajustar a produção de carga das indústrias nesta porcentagem STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Renovar automaticamente um veículo quando ele ficar velho: {STRING} @@ -1542,7 +1542,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Espessura das l STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Espessura da linha nos gráficos. Linhas finas são mais precisas, enquanto linhas grossas são mais fáceis de distinguir STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostrar o nome do NewGRF na janela de comprar veículos: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Adiciona uma linha na janela de aquisição de veículos, mostrando a qual NewGRF pertence o veículo selecionado. +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Adiciona uma linha na janela de aquisição de veículos, mostrando a qual NewGRF pertence o veículo selecionado STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as cargas que os veículos podem transportar nas janelas de listagem: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Se ativado, a carga transportável pelo veículo aparecerá acima dele nas listas de veículos @@ -1562,13 +1562,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densidade de in STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Define quantas indústrias devem ser geradas e que nível deve ser mantido durante o jogo STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distância máxima entre a borda do mapa para Refinarias de Petróleo: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limite de distância entre a borda do mapa e o local de construção de refinarias e plataformas de petróleo. Em mapas de ilhas isso garante que elas fiquem perto da costa. Em mapas com mais de 256 quadrados esse valor é aumentado. +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limite de distância entre a borda do mapa e o local de construção de refinarias e plataformas de petróleo. Em mapas de ilhas isso garante que elas fiquem perto da costa. Em mapas com mais de 256 quadrados esse valor é aumentado STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altura da linha de neve: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Escolher a que altura a neve começa na paisagem subártica. A neve também afeta a geração de indústrias e os requisitos de crescimento das localidades. Só pode ser modificado no Editor de Cenário ou então é calculado usando a "cobertura de neve" STR_CONFIG_SETTING_SNOW_COVERAGE :Cobertura de neve: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de neve na paisagem subártica. A neve também afeta a geração das indústrias e os requisitos para crescimento das localidades. Usado apenas durante a geração do mapa. O nível do mar e as suas encostas nunca têm neve. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de neve na paisagem subártica. A neve também afeta a geração das indústrias e os requisitos para crescimento das localidades. Usado apenas durante a geração do mapa. O nível do mar e as suas encostas nunca têm neve STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Cobertura do deserto: {STRING} @@ -1576,7 +1576,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Escolher a quan STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Irregularidade do terreno: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Escolher a forma e o número de colinas. As paisagens suaves têm poucas colinas largas, enquanto as paisagens acidentadas possuem mais colinas pequenas. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Escolher a forma e o número de colinas. As paisagens suaves têm poucas colinas largas, enquanto as paisagens acidentadas possuem mais colinas pequenas ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Muito Regular STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Regular @@ -1584,7 +1584,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Irregular STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Muito Irregular STR_CONFIG_SETTING_VARIETY :Distribuição de variedade: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Escolher se o mapa conterá tanto áreas montanhosas como áreas planas. Quanto maior a variedade, maiores as diferenças de altura entre as áreas montanhosas e as planas. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Escolher se o mapa conterá tanto áreas montanhosas como áreas planas. Quanto maior a variedade, maiores as diferenças de altura entre as áreas montanhosas e as planas STR_CONFIG_SETTING_RIVER_AMOUNT :Quantidade de rios: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Escolher quantos rios serão gerados @@ -1631,7 +1631,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Verde escuro STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violeta STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Cores de sobreposição do fluxo de carga: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Define o esquema de cores usado na sobreposição do fluxo de carga. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Define o esquema de cores usado na sobreposição do fluxo de carga ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Verde para vermelho (original) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Verde para azul @@ -1668,7 +1668,7 @@ STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Controla a sens STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING :Função da roda do mouse: {STRING} STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING_HELPTEXT :Ativar o rolamento com rodas de mouse bidimensionais ###length 3 -STR_CONFIG_SETTING_SCROLLWHEEL_ZOOM :Ampliar mapa +STR_CONFIG_SETTING_SCROLLWHEEL_ZOOM :Ampliar o mapa STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Mover o mapa STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Desativado @@ -1712,7 +1712,7 @@ STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Pausar automati STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Quando ativado, o jogo irá pausar automaticamente quando um novo jogo começar, permitindo o estudo detalhado do mapa STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Durante uma pausa permitir: {STRING} -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Escolher quais ações podem ser executadas com o jogo pausado +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Selecionar quais ações podem ser executadas com o jogo pausado ###length 4 STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Nenhuma ação STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Todas as ações, exceto construção @@ -1739,7 +1739,7 @@ STR_CONFIG_SETTING_QUICKGOTO :Criação rápi STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Pré-selecionar o cursor 'Ir Para' ao abrir a janela de ordens STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Tipo de trilho padrão (ao criar novo ou abrir jogo): {STRING} -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Tipo de trilhos a ser selecionado ao carregar/iniciar um jogo. 'Primeiro disponível' seleciona o tipo de trilho mais antigo. 'Último disponível' seleciona o tipo mais novo de trilho e 'Mais utilizado' seleciona o tipo que é mais usado atualmente +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Tipo de trilho a ser selecionado ao carregar/iniciar um jogo. 'Primeiro disponível' seleciona o tipo de trilho mais antigo. 'Último disponível' seleciona o tipo mais novo de trilho e 'Mais utilizado' seleciona o tipo que é mais usado atualmente ###length 3 STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Primeiro disponível STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Último disponível @@ -1752,10 +1752,10 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Manter as ferra STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Manter ativas as ferramentas de construção para pontes, túneis, etc. após o uso STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Remover automaticamente os sinais durante a construção de ferrovias: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Remover automaticamente os sinais durante a construção de ferrovias se os sinais estiverem no caminho. Isso pode potencialmente causar acidentes de trens. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Remover automaticamente os sinais durante a construção de ferrovias se os sinais estiverem no caminho. Isso pode, potencialmente, causar acidentes de trens STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Limite de velocidade do avanço rápido: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limite da velocidade do jogo quando o avanço rápido está ativado. 0 = sem limite (tão rápido quanto o seu computador permitir). Valores abaixo de 100% tornam o jogo mais lento. O limite superior depende das especificações do seu computador e pode variar dependendo do jogo. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limite da velocidade do jogo quando o avanço rápido está ativado. 0 = sem limite (tão rápido quanto o seu computador permitir). Valores abaixo de 100% tornam o jogo mais lento. O limite superior depende das especificações do seu computador e pode variar dependendo do jogo STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% da velocidade normal do jogo ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Sem limite (o máximo que o seu computador suporta) @@ -1819,11 +1819,11 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite que com STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes antes de scripts serem suspensos: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Número máximo de passos computacionais que um script pode executar em um turno STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Utilização máxima de memória por script: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Quantidade de memória que um script pode usar antes dele ser terminado automaticamente. Para mapas maiores pode ser necessário aumentar este valor. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Quantidade de memória que um script pode usar antes dele ser terminado automaticamente. Para mapas maiores pode ser necessário aumentar este valor STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Intervalos de manutenção são em porcentagem: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Quando ativado, os veículos tentam fazer a manutenção quando sua confiabilidade atingir uma determinada porcentagem da confiabilidade máxima.{}{}Por exemplo, se a confiabilidade máxima de um veículo for 90% e o intervalo de manutenção for 20%, o veículo tentará fazer a manutenção quando atingir 72% de confiabilidade. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Quando ativado, os veículos tentam fazer a manutenção quando sua confiabilidade atingir uma determinada porcentagem da confiabilidade máxima.{}{}Por exemplo, se a confiabilidade máxima de um veículo for 90% e o intervalo de manutenção for 20%, o veículo tentará fazer a manutenção quando atingir 72% de confiabilidade STR_CONFIG_SETTING_SERVINT_TRAINS :Intervalo padrão de manutenção para trens: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Define o intervalo padrão de manutenção para novos veículos ferroviários, se não for configurado um intervalo de manutenção explícito para o veículo @@ -1841,10 +1841,10 @@ STR_CONFIG_SETTING_NOSERVICE :Desativar manut STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Quando ativado, veículos não recebem manutenção se não puderem quebrar STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Penalidade de velocidade de carregamento para trens que são mais longos que a estação: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quando ativado, os trens que são muito compridos para a estação demoram mais tempo para carregar do que um trem que cabe na estação. Esta configuração não afeta a geração de rotas. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quando ativado, os trens que são muito compridos para a estação demoram mais tempo para carregar do que um trem que cabe na estação. Esta configuração não afeta a geração de rotas -STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ativar limites de velocidade para vagões: {STRING} -STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Quando ativado, aplica os limites de velocidade dos vagões para definir a velocidade máxima de um trem +STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ativar limite de velocidade para vagões: {STRING} +STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Quando ativado, aplica o limite de velocidade dos vagões para definir a velocidade máxima de um trem STR_CONFIG_SETTING_DISABLE_ELRAILS :Desativar ferrovias elétricas: {STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Quando ativada, esta configuração desativa a necessidade de eletrificar os trilhos para que locomotivas elétricas possam utilizá-los @@ -1886,7 +1886,7 @@ STR_CONFIG_SETTING_NEWS_ADVICE :Avisos / inform STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Mostrar mensagens sobre veículos que requerem atenção STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Novos veículos: {STRING} -STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Mostrar um jornal quando é disponibilizado um novo tipo de veículo +STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Mostrar um jornal quando um novo tipo de veículo é disponibilizado STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Mudanças de aceitação de carga: {STRING} STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Exibir mensagens quando estações alterarem a aceitação de algumas cargas @@ -1906,20 +1906,20 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Ano em que os j STR_CONFIG_SETTING_STARTING_YEAR :Data de início: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Pontuação no fim do ano: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Ano em que o jogo termina para fins de pontuação. No fim desse ano, a pontuação da empresa é registrada e a tela de pontuação máxima é exibida, mas os jogadores podem continuar jogando depois disso.{}Se isso for antes do ano de início, a tela de pontuação máxima nunca é exibida. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Ano em que o jogo termina para fins de pontuação. No fim desse ano, a pontuação da empresa é registrada e a tela de pontuação máxima é exibida, mas os jogadores podem continuar jogando depois disso.{}Se isso for antes do ano de início, a tela de pontuação máxima nunca será exibida STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nunca STR_CONFIG_SETTING_ECONOMY_TYPE :Tipo de economia: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Economia 'Suave' faz alterações de produção com mais frequência e em etapas menores. Economia 'Congelada' não permite alterações de produção e fechamentos de indústrias. Esta configuração pode não ter efeito se os tipos de indústria forem fornecidos por um NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Economia 'Suave' faz alterações de produção com mais frequência e em etapas menores. Economia 'Congelada' não permite alterações de produção e fechamentos de indústrias. Esta configuração pode não ter efeito se os tipos de indústria forem fornecidos por um NewGRF ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Suave STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Congelada STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentagem do lucro da etapa a pagar em sistemas de transbordo: {STRING} -STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentagem da receita dada às etapas intermediárias em sistemas de transbordo, dando maior controle sobre a receita +STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentagem da receita dada às etapas intermediárias em sistemas de transbordo, dando maior controle sobre a renda STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Quando arrastar, colocar sinais a cada: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Define a distância na qual os sinais serão construídos em uma linha até o próximo obstáculo (sinal, junção), quando colocar sinais arrastando @@ -1931,13 +1931,13 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Usar automatica STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Definir o ano em que os sinais elétricos serão usados nas ferrovias. Antes deste ano, sinais não-elétricos serão usados (eles têm a mesma funcionalidade, mas aparência diferente) STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Alternar entre tipos de sinais: {STRING} -STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Escolher quais os tipos de sinais serão alternados quando usar Ctrl+Clique em um sinal construído com a ferramenta de sinais +STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Selecionar quais os tipos de sinais serão alternados quando usar Ctrl+Clique em um sinal construído com a ferramenta de sinais ###length 2 STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :Somente grupo atual STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Todos visíveis STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Mostrar tipos de sinais: {STRING} -STR_CONFIG_SETTING_SIGNAL_GUI_MODE_HELPTEXT :Escolher quais tipos de sinais são mostrados na barra de ferramentas de sinais +STR_CONFIG_SETTING_SIGNAL_GUI_MODE_HELPTEXT :Selecionar quais tipos de sinais são mostrados na barra de ferramentas de sinais ###length 2 STR_CONFIG_SETTING_SIGNAL_GUI_MODE_PATH :Somente sinais de caminho STR_CONFIG_SETTING_SIGNAL_GUI_MODE_ALL_CYCLE_PATH :Todos os sinais @@ -1967,7 +1967,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permitido STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Permitido, estrutura personalizada da localidade STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Geração de carga da localidade: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Quanta carga é produzida pelas casas nas localidades, em relação à população geral da localidade.{}Crescimento quadrático: uma localidade com o dobro do tamanho gera quatro vezes mais passageiros.{}Crescimento linear: uma localidade com o dobro do tamanho gera o dobro da quantidade de passageiros. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Quanta carga é produzida pelas casas nas localidades, em relação à população geral da localidade.{}Crescimento quadrático: uma localidade com o dobro do tamanho gera quatro vezes mais passageiros.{}Crescimento linear: uma localidade com o dobro do tamanho gera o dobro da quantidade de passageiros ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadrático (original) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear @@ -1976,7 +1976,7 @@ STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Surgimento de STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controla o aparecimento aleatório de árvores durante o jogo. Isto poderá afetar indústrias que dependem do crescimento de árvores, como as madeireiras ###length 4 STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Crescer sem espalhar {RED}(afeta madeireiras) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Crescer mas espalhar somente em florestas tropicais +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Crescer, mas espalhar somente em florestas tropicais STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Crescer e espalhar em todos os lugares STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Não crescer e não espalhar {RED}(afeta madeireiras) @@ -2008,7 +2008,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Resolução máxima de sprites: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limita a resolução máxima a ser usada para sprites. Limitar a resolução de sprites evitará o uso de gráficos de alta resolução, mesmo quando estiverem disponíveis. Isso pode ajudar a manter a aparência uniforme do jogo quando estiver usando uma mistura de arquivos GRF com e sem gráficos de alta resolução. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limita a resolução máxima a ser usada para sprites. Limitar a resolução de sprites evitará o uso de gráficos de alta resolução, mesmo quando estiverem disponíveis. Isso pode ajudar a manter a aparência uniforme do jogo quando estiver usando uma mistura de arquivos GRF com e sem gráficos de alta resolução ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2032,33 +2032,33 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador d STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamanho médio das cidades em relação às localidades normais no início do jogo STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Atualizar a distribuição a cada {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo entre recálculos subsequentes da rede de conexões. Cada recálculo atualiza os planos para um componente da rede. Isso significa que um valor X para esta configuração não significa que toda a rede será atualizada a cada X segundos. Apenas algum componente será atualizado. Quanto menor o tempo definido, mais tempo de CPU será necessário para calculá-lo. Quanto maior o valor definido, mais tempo será necessário até que a distribuição de carga inicie nas novas rotas. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo entre recálculos subsequentes da rede de conexões. Cada recálculo atualiza os planos para um componente da rede. Isso significa que um valor X para esta configuração não significa que toda a rede será atualizada a cada X segundos. Apenas algum componente será atualizado. Quanto menor o tempo definido, mais tempo de CPU será necessário para calculá-lo. Quanto maior o valor definido, mais tempo será necessário até que a distribuição de carga inicie nas novas rotas STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Usar {STRING} para recalcular a distribuição -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo gasto para cada recálculo de um componente da rede de conexões. Quando um recálculo é iniciado, uma tarefa é gerada e pode ser executada por esse número de segundos. Quanto menor for esse valor, maior a chance de que a tarefa não seja concluída quando deveria. Então o jogo para até que ela seja completada, causando um atraso. Quanto maior for esse valor, mais tempo será necessário para a distribuição ser atualizada quando as rotas mudam. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo gasto para cada recálculo de um componente da rede de conexões. Quando um recálculo é iniciado, uma tarefa é gerada e pode ser executada por esse número de segundos. Quanto menor for esse valor, maior a chance de que a tarefa não seja concluída quando deveria. Então o jogo para até que ela seja completada, causando um atraso. Quanto maior for esse valor, mais tempo será necessário para a distribuição ser atualizada quando as rotas mudam STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribuição para passageiros: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" significa que aproximadamente o mesmo número de passageiros irá de uma estação A para uma estação B, assim como de B para A. "Assimétrico" significa que um número arbitrário de passageiros pode ir em qualquer direção. "Manual" significa que não haverá distribuição automática dos passageiros. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" significa que aproximadamente o mesmo número de passageiros irá de uma estação A para uma estação B, assim como de B para A. "Assimétrico" significa que um número arbitrário de passageiros pode ir em qualquer direção. "Manual" significa que não haverá distribuição automática dos passageiros STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modo de distribuição para correio: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simétrico" significa que aproximadamente a mesma quantidade de correio será enviada de uma estação A para uma estação B, assim como de B para A. "Assimétrica" significa que quantidades arbitrárias de correio podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática para correio. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simétrico" significa que aproximadamente a mesma quantidade de correio será enviada de uma estação A para uma estação B, assim como de B para A. "Assimétrica" significa que quantidades arbitrárias de correio podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática para correio STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Modo de distribuição para a classe de carga BLINDADA: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe de carga BLINDADA contém objetos de valor em clima temperado, diamantes em clima subtropical ou ouro em clima subártico. NewGRFs podem modificar isso. "Simétrica" significa que aproximadamente a mesma quantidade dessa carga será enviada de uma estação A para uma estação B, assim como de B para A. "Assimétrica" significa que quantidades arbitrárias dessa carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática para aquela carga. Recomenda-se definir isso como assimétrico ou manual ao jogar subártico ou subtropical, pois os bancos só recebem carga nesses climas. Para temperado, você também pode escolher simétrico, pois os bancos enviarão objetos de valor de volta ao banco de origem. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe de carga BLINDADA contém objetos de valor no clima temperado, diamantes no clima subtropical e ouro no clima subártico. NewGRFs podem modificar isso. "Simétrico" significa que aproximadamente a mesma quantidade dessa carga será enviada de uma estação A para uma estação B, assim como de B para A. "Assimétrico" significa que quantidades arbitrárias dessa carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática para aquela carga. Recomenda-se definir isso como assimétrico ou manual ao jogar subártico ou subtropical, pois os bancos só recebem carga nesses climas. Para temperado, você também pode escolher simétrico, pois os bancos enviarão objetos de valor de volta ao banco de origem STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Modo de distribuição para outras classes de carga: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Assimétrico" significa que quantidades arbitrárias de carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática dessas cargas. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Assimétrico" significa que quantidades arbitrárias de carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática dessas cargas ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :assimétrico STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simétrico STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Precisão da distribuição: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Quanto maior for esse valor, mais tempo de CPU será necessário para calcular a rede de conexões. Se demorar muito, você poderá notar um atraso. Entretanto, se o valor for muito pequeno, a distribuição será imprecisa e você irá perceber que cargas não estão sendo enviadas para os locais esperados. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Quanto maior for esse valor, mais tempo de CPU será necessário para calcular a rede de conexões. Se demorar muito, você poderá notar um atraso. Entretanto, se o valor for muito pequeno, a distribuição será imprecisa e você irá perceber que cargas não estão sendo enviadas para os locais esperados STR_CONFIG_SETTING_DEMAND_DISTANCE :Efeito da distância na demanda: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Se for definido um valor maior que 0, a distância entre a estação de origem A de alguma carga e um possível destino B terá um efeito na quantidade de carga transportada de A até B. Quanto mais distante B estiver de A, menos carga será enviada. Quanto maior o valor definido, menos carga será transportada para estações distantes e mais carga será enviada para estações mais próximas. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Se for definido um valor maior que 0, a distância entre a estação de origem A de alguma carga e um possível destino B terá um efeito na quantidade de carga enviada de A até B. Quanto mais distante B estiver de A, menos carga será enviada. Quanto maior o valor definido, menos carga será transportada para estações distantes e mais carga será enviada para estações mais próximas STR_CONFIG_SETTING_DEMAND_SIZE :Quantidade de carga retornada no modo simétrico: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Definindo isto para menos de 100% faz com que a distribuição simétrica comporte-se mais como a assimétrica. Menos carga será forçadamente devolvida se uma certa quantidade for enviada a uma estação. Se você definir para 0% a distribuição simétrica se comportará exatamente como a assimétrica. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Definindo isto para menos de 100% faz com que a distribuição simétrica comporte-se mais como a assimétrica. Menos carga será forçadamente devolvida se uma certa quantidade for enviada a uma estação. Se você definir para 0% a distribuição simétrica se comportará exatamente como a assimétrica STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturação de rotas curtas antes de usar rotas de grande capacidade: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequentemente há diversas rotas entre duas estações. Cargodist irá saturar a rota mais curta primeiro, depois usar a segunda rota mais curta até saturá-la, e assim por diante. A saturação é determinada por uma estimativa da capacidade e da utilização prevista. Ao saturar todas as rotas, se ainda existir demanda não atendida, CargoDist irá sobrecarregar todas as rotas, dando preferência àquelas de maior capacidade. Entretanto, na maioria das vezes o algoritmo não irá estimar corretamente a capacidade. Esta configuração permite definir até que porcentagem uma rota mais curta deverá ser saturada na primeira passada antes do algoritmo selecionar a próxima rota mais longa. Defina-o para menos de 100% para evitar estações sobrecarregadas no caso de capacidade superestimada. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequentemente há diversas rotas entre duas estações. Cargodist irá saturar a rota mais curta primeiro, depois usar a segunda rota mais curta até saturá-la, e assim por diante. A saturação é determinada por uma estimativa da capacidade e da utilização prevista. Ao saturar todas as rotas, se ainda existir demanda não atendida, CargoDist irá sobrecarregar todas as rotas, dando preferência àquelas de maior capacidade. Entretanto, na maioria das vezes o algoritmo não irá estimar corretamente a capacidade. Esta configuração permite definir até que porcentagem uma rota mais curta deverá ser saturada na primeira passada antes do algoritmo selecionar a próxima rota mais longa. Defina-o para menos de 100% para evitar estações sobrecarregadas no caso de capacidade superestimada STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unidades de velocidade (terrestre): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Unidades de velocidade (náutica): {STRING} @@ -2307,9 +2307,9 @@ STR_FACE_OK_TOOLTIP :{BLACK}Aceitar STR_FACE_RANDOM :{BLACK}Seleção aleatória STR_FACE_MALE_BUTTON :{BLACK}Masculino -STR_FACE_MALE_TOOLTIP :{BLACK}Escolher faces masculinas +STR_FACE_MALE_TOOLTIP :{BLACK}Selecionar faces masculinas STR_FACE_FEMALE_BUTTON :{BLACK}Feminino -STR_FACE_FEMALE_TOOLTIP :{BLACK}Escolher faces femininas +STR_FACE_FEMALE_TOOLTIP :{BLACK}Selecionar faces femininas STR_FACE_NEW_FACE_BUTTON :{BLACK}Nova Face STR_FACE_NEW_FACE_TOOLTIP :{BLACK}Gerar nova face aleatoriamente STR_FACE_ADVANCED :{BLACK}Avançado @@ -2785,16 +2785,16 @@ STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construção de STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Construção de Monotrilho STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Construção de MagLev -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir ferrovia. Ctrl+Clique para remover a ferrovia. Pressione também Shift para apenas mostrar o custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construir ferrovia usando o modo Autotrilho. Ctrl+Clique para remover seção da ferrovia. Pressione também Shift para apenas mostrar o custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construir depósito ferroviário (para compra e manutenção de trens). Pressione também Shift para apenas mostrar o custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Construir ponto de controle na ferrovia. Ctrl+Clique para selecionar outro ponto de controle e unir com este. Pressione também Shift para apenas mostrar o custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Construir estação ferroviária. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Construir sinal na ferrovia. Ctrl+Clique para construir o sinal com estilo diferente{}Clique+Arraste para preencher a seção selecionada da ferrovia com os sinais no espaçamento escolhido. Ctrl+Clique+Arraste para colocar sinais até a próxima junção, estação ou sinal. Pressione também Shift para apenas mostrar o custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Construir ponte ferroviária. Pressione também Shift para apenas mostrar o custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Construir túnel ferroviário. Pressione também Shift para apenas mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir ferrovia. Ctrl+Clique para remover a ferrovia. Pressione também Shift para só mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construir ferrovia usando o modo Autotrilho. Ctrl+Clique para remover seção da ferrovia. Pressione também Shift para só mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construir depósito ferroviário (para compra e manutenção de trens). Pressione também Shift para só mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Construir ponto de controle na ferrovia. Ctrl+Clique para selecionar outro ponto de controle e unir com este. Pressione também Shift para só mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Construir estação ferroviária. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para só mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Construir sinal na ferrovia. Ctrl+Clique para construir o sinal com estilo diferente{}Clique+Arraste para preencher a seção selecionada da ferrovia com os sinais no espaçamento escolhido. Ctrl+Clique+Arraste para colocar sinais até a próxima junção, estação ou sinal. Pressione também Shift para só mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Construir ponte ferroviária. Pressione também Shift para só mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Construir túnel ferroviário. Pressione também Shift para só mostrar o custo estimado STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Construir/Remover ferrovia, sinais, pontos de controle e estações. Ctrl+Clique para também remover os trilhos de pontos de controle e das estações -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Converter/Atualizar tipo de trilho. Pressione também Shift para apenas mostrar o custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Converter/Atualizar tipo de trilho. Pressione também Shift para só mostrar o custo estimado STR_RAIL_NAME_RAILROAD :Ferrovia STR_RAIL_NAME_ELRAIL :Ferrovia eletrificada @@ -2844,7 +2844,7 @@ STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Sinal de STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Sinal Combinado (elétrico){}O sinal combinado funciona simultaneamente como um sinal de entrada e de saída. Isto permite construir ramificações complexas de pré-sinais. STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Sinal de Caminho (elétrico){}Um sinal de caminho que permite mais de um trem entrar em uma seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Sinais de caminho padrões podem ser passados no sentido contrário STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Sinal de Sentido Único (elétrico){}Um sinal de caminho que permite mais de um trem entrar em uma seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Os sinais de sentido único não podem ser passados no sentido contrário -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Converter sinal{}Clique em um sinal existente para convertê-lo para o tipo e variante de sinal selecionado. Ctrl+Clique para mudar a variante existente. Shift+Clique para mostrar o custo estimado de conversão +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Converter sinal{}Clique em um sinal existente para convertê-lo para o tipo e variante de sinal selecionado. Ctrl+Clique para mudar a variante existente. Shift+Clique para só mostrar o custo estimado de conversão STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distância entre os sinais quando arrastar STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Diminuir a distância entre os sinais quando arrastar STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Aumentar a distância entre os sinais quando arrastar @@ -2870,25 +2870,25 @@ STR_BRIDGE_TUBULAR_SILICON :Tubular, Silíc # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Construção de estradas STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Construção de Linhas de Bonde -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Construir seção de estrada. Ctrl+Clique para remover seção da estrada. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Construir seção de linha de bonde. Ctrl+Clique para remover seção da linha. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Construir estrada usando o modo Autoestrada. Ctrl+Clique para remover seção da estrada. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Construir linha de bonde usando o modo Autotrilho. Ctrl+Clique para remover seção da linha. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construir depósito rodoviário (para compra e manutenção de veículos). Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construir depósito de bondes (para compra e manutenção de bondes). Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Construir estação de ônibus. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Construir estação de bondes de passageiros. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Construir estação de caminhões. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Construir estação de bondes de carga. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Construir seção de estrada. Ctrl+Clique para remover seção da estrada. Pressione também Shift para só mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Construir seção de linha de bonde. Ctrl+Clique para remover seção da linha. Pressione também Shift para só mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Construir estrada usando o modo Autoestrada. Ctrl+Clique para remover seção da estrada. Pressione também Shift para só mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Construir linha de bonde usando o modo Autotrilho. Ctrl+Clique para remover seção da linha. Pressione também Shift para só mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construir depósito rodoviário (para compra e manutenção de veículos). Pressione também Shift para só mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construir depósito de bondes (para compra e manutenção de bondes). Pressione também Shift para só mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Construir estação de ônibus. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para só mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Construir estação de bondes de passageiros. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para só mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Construir estação de caminhões. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para só mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Construir estação de bondes de carga. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para só mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Ativar/Desativar estradas de sentido único -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Construir ponte rodoviária. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Construir ponte para bondes. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Construir túnel rodoviário. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Construir túnel para bondes. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Construir ponte rodoviária. Pressione também Shift para só mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Construir ponte para bondes. Pressione também Shift para só mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Construir túnel rodoviário. Pressione também Shift para só mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Construir túnel para bondes. Pressione também Shift para só mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Construir/Remover estrada STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Construir/Remover linhas de bonde -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Converter/Atualizar o tipo de estrada. Pressione também Shift para apenas mostrar o custo estimado -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Converter/Atualizar o tipo de bonde. Pressione também Shift para apenas mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Converter/Atualizar o tipo de estrada. Pressione também Shift para só mostrar o custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Converter/Atualizar o tipo de bonde. Pressione também Shift para só mostrar o custo estimado STR_ROAD_NAME_ROAD :Estrada STR_ROAD_NAME_TRAM :Bonde @@ -2912,12 +2912,12 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Escolher # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Construção de Hidrovias STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Hidrovias -STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Construir canais. Pressione também Shift para apenas mostrar o custo estimado -STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Construir eclusas. Pressione também Shift para apenas mostrar o custo estimado -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Construir depósito de embarcações (para compra e manutenção de embarcações). Pressione também Shift para apenas mostrar o custo estimado -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construir doca naval. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para apenas mostrar o custo estimado -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Colocar uma boia que pode ser usada como ponto de controle. Pressione também Shift para apenas mostrar o custo estimado -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construir aqueduto. Pressione também Shift para apenas mostrar o custo estimado +STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Construir canais. Pressione também Shift para só mostrar o custo estimado +STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Construir eclusas. Pressione também Shift para só mostrar o custo estimado +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Construir depósito de embarcações (para compra e manutenção de embarcações). Pressione também Shift para só mostrar o custo estimado +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construir doca naval. Ctrl+Clique para selecionar outra estação e unir com esta. Pressione também Shift para só mostrar o custo estimado +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Colocar uma boia que pode ser usada como ponto de controle. Pressione também Shift para só mostrar o custo estimado +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construir aqueduto. Pressione também Shift para só mostrar o custo estimado STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Construir canal. Ctrl+Clique no nível do mar para inundar com água do mar STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Colocar rios. Ctrl+Clique para selecionar diagonalmente @@ -2930,7 +2930,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Doca # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Aeroportos -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Construir aeroporto. Ctrl+Clique para selecionar outro aeroporto e unir com este. Pressione também Shift para apenas mostrar o custo estimado +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Construir aeroporto. Ctrl+Clique para selecionar outro aeroporto e unir com este. Pressione também Shift para só mostrar o custo estimado # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Seleção de Aeroporto @@ -2957,14 +2957,14 @@ STR_STATION_BUILD_NOISE :{BLACK}Ruído g # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Paisagismo -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Abaixar um canto do terreno. Clique+Arraste para abaixar o primeiro canto selecionado e nivelar a área selecionada à nova altura do canto. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Elevar um canto do terreno. Clique+Arraste para elevar o primeiro canto selecionado e nivelar a área selecionada à nova altura do canto. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Nivelar uma área do terreno à altura do primeiro canto selecionado. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar terreno para uso futuro. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Abaixar um canto do terreno. Clique+Arraste para abaixar o primeiro canto selecionado e nivelar a área selecionada à nova altura do canto. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para só mostrar o custo estimado +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Elevar um canto do terreno. Clique+Arraste para elevar o primeiro canto selecionado e nivelar a área selecionada à nova altura do canto. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para só mostrar o custo estimado +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Nivelar uma área do terreno à altura do primeiro canto selecionado. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para só mostrar o custo estimado +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar terreno para uso futuro. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para só mostrar o custo estimado # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Seleção de Objeto -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Escolher objeto para construir. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Escolher objeto para construir. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para só mostrar o custo estimado STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Escolher a classe do objeto para construir STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Pré-visualização do objeto STR_OBJECT_BUILD_SIZE :{BLACK}Tamanho: {GOLD}{NUM} x {NUM} quadrados @@ -2974,17 +2974,17 @@ STR_OBJECT_CLASS_TRNS :Transmissores # Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Árvores -STR_PLANT_TREE_TOOLTIP :{BLACK}Escolher tipo de árvore para plantar. Se no quadrado já existir uma árvore, serão adicionadas mais árvores de diferentes tipos, ignorando o tipo selecionado +STR_PLANT_TREE_TOOLTIP :{BLACK}Escolher um tipo de árvore para plantar. Se no quadrado já existir uma árvore, serão adicionadas mais árvores de diferentes tipos, ignorando o tipo selecionado STR_TREES_RANDOM_TYPE :{BLACK}Árvores de tipo aleatório -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plantar árvores de tipo aleatório. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plantar árvores de tipo aleatório. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para só mostrar o custo estimado STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Plantar Aleatoriamente STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plantar árvores aleatoriamente no terreno STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plantar árvores isoladas ao arrastar o cursor sobre o terreno. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plantar árvores isoladas ao arrastar o cursor sobre o terreno STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Bosque -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plantar florestas pequenas ao arrastar o cursor sobre o terreno. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plantar florestas pequenas ao arrastar o cursor sobre o terreno STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Floresta -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantar florestas grandes ao arrastar o cursor sobre o terreno. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantar florestas grandes ao arrastar o cursor sobre o terreno # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Geração de Terreno @@ -3003,7 +3003,7 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Você qu # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Geração de Localidades STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Nova Localidade -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Fundar nova localidade. Pressione também Shift para apenas mostrar o custo estimado +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Fundar nova localidade. Pressione também Shift para só mostrar o custo estimado STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Localidade Aleatória STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Fundar localidade em um local aleatório STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Várias localidades aleatórias @@ -3199,11 +3199,11 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Taxa de quadros STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Taxa de simulação: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Número de tiques simulados por segundo. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Número de tiques simulados por segundo STR_FRAMERATE_RATE_BLITTER :{BLACK}Taxa de quadros gráficos: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Número de quadros de vídeo renderizados por segundo. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Número de quadros de vídeo renderizados por segundo STR_FRAMERATE_SPEED_FACTOR :{BLACK}Fator de velocidade atual do jogo: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Quão rápido o jogo está sendo executado, comparado com a velocidade esperada na taxa de simulação normal. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Quão rápido o jogo está sendo executado, comparado com a velocidade esperada na taxa de simulação normal STR_FRAMERATE_CURRENT :{WHITE}Atual STR_FRAMERATE_AVERAGE :{WHITE}Média STR_FRAMERATE_MEMORYUSE :{WHITE}Memória @@ -3286,16 +3286,16 @@ STR_SAVELOAD_OSKTITLE :{BLACK}Digitar # World generation STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Geração de Mapas STR_MAPGEN_MAPSIZE :{BLACK}Dimensões do mapa: -STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Escolher o tamanho do mapa em quadrados. O número de quadrados disponíveis será um pouco menor +STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Escolher o tamanho do mapa, em quadrados. O número de quadrados disponíveis será um pouco menor STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Núm. de localidades: -STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Escolher a densidade de localidades ou um número personalizado +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Escolher a densidade de localidades ou um número de localidades STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Nomes das localidades: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Escolher o estilo dos nomes das localidades STR_MAPGEN_DATE :{BLACK}Data: STR_MAPGEN_DATE_TOOLTIP :{BLACK}Escolher a data inicial STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Núm. de indústrias: -STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Escolher a densidade de indústrias ou um número personalizado +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Escolher a densidade de indústrias ou um número de indústrias STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Pico mais alto: STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Escolher o pico mais alto que o jogo tentará criar, medido em elevação acima do nível do mar STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Aumentar de uma unidade a altura máxima do pico mais alto no mapa @@ -3348,7 +3348,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Catalão # Strings for map borders at game generation STR_MAPGEN_BORDER_TYPE :{BLACK}Bordas do mapa: -STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Escolher as bordas do mapa do jogo +STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Escolher as bordas do mundo do jogo STR_MAPGEN_NORTHWEST :{BLACK}Noroeste STR_MAPGEN_NORTHEAST :{BLACK}Nordeste STR_MAPGEN_SOUTHEAST :{BLACK}Sudeste @@ -3732,7 +3732,7 @@ STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Livro de STR_STORY_BOOK_SPECTATOR :Livro de Histórias Global STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Página {NUM} -STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Saltar para uma página específica escolhendo-a nesta lista. +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Saltar para uma página específica escolhendo-a nesta lista STR_STORY_BOOK_PREV_PAGE :{BLACK}Anterior STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Ir para a página anterior STR_STORY_BOOK_NEXT_PAGE :{BLACK}Próxima @@ -3899,7 +3899,7 @@ STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Construi STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Ver sede STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Ver sede da empresa STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Mover sede -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Reconstruir sede da empresa em outro local por 1% do valor da empresa. Pressione também Shift para apenas mostrar o custo estimado +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Reconstruir sede da empresa em outro local por 1% do valor da empresa. Pressione também Shift para só mostrar o custo estimado STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detalhes STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Ver contagens detalhadas da infraestrutura STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Dar dinheiro @@ -4027,12 +4027,12 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Aeronaves sem g STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - Clique em um grupo para listar todos os veículos do grupo. Clique+Arraste para organizar a hierarquia. +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - Clique em um grupo para listar todos os veículos do grupo. Clique+Arraste para organizar a hierarquia STR_GROUP_CREATE_TOOLTIP :{BLACK}Clique para criar um grupo STR_GROUP_DELETE_TOOLTIP :{BLACK}Excluir o grupo selecionado STR_GROUP_RENAME_TOOLTIP :{BLACK}Alterar o nome do grupo selecionado STR_GROUP_LIVERY_TOOLTIP :{BLACK}Alterar a cor do grupo selecionado -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clique para proteger este grupo da substituição automática global. Ctrl+Clique para também proteger os subgrupos. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clique para proteger este grupo da substituição automática global. Ctrl+Clique para também proteger os subgrupos STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Excluir grupo STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Você quer mesmo excluir este grupo e seus descendentes? @@ -4118,16 +4118,16 @@ STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Adaptar Aeronave ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar o veículo ferroviário selecionado. Pressione também Shift para apenas mostrar o custo estimado -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar o veículo rodoviário selecionado. Pressione também Shift para apenas mostrar o custo estimado -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar a embarcação selecionada. Pressione também Shift para apenas mostrar o custo estimado -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar a aeronave selecionada. Pressione também Shift para apenas mostrar o custo estimado +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar o veículo ferroviário selecionado. Pressione também Shift para só mostrar o custo estimado +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar o veículo rodoviário selecionado. Pressione também Shift para só mostrar o custo estimado +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar a embarcação selecionada. Pressione também Shift para só mostrar o custo estimado +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar a aeronave selecionada. Pressione também Shift para só mostrar o custo estimado ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e adaptar o veículo ferroviário selecionado. Pressione também Shift para apenas mostrar o custo estimado -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e adaptar o veículo rodoviário selecionado. Pressione também Shift para apenas mostrar o custo estimado -STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e adaptar a embarcação selecionada. Pressione também Shift para apenas mostrar o custo estimado -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e adaptar a aeronave selecionada. Pressione também Shift para apenas mostrar o custo estimado +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e adaptar o veículo ferroviário selecionado. Pressione também Shift para só mostrar o custo estimado +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e adaptar o veículo rodoviário selecionado. Pressione também Shift para só mostrar o custo estimado +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e adaptar a embarcação selecionada. Pressione também Shift para só mostrar o custo estimado +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e adaptar a aeronave selecionada. Pressione também Shift para só mostrar o custo estimado ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Renomear @@ -4219,10 +4219,10 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Clonar E STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Clonar Aeronave ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Comprar uma cópia de um trem incluindo todos os vagões. Clique neste botão e depois em um trem que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Comprar uma cópia de um veículo rodoviário. Clique neste botão e depois em um veículo que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Comprar uma cópia de uma embarcação. Clique neste botão e depois em uma embarcação que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Comprar uma cópia de uma aeronave. Clique neste botão e depois em uma aeronave que está dentro ou fora do hangar. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Comprar uma cópia de um trem incluindo todos os vagões. Clique neste botão e depois em um trem que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Comprar uma cópia de um veículo rodoviário. Clique neste botão e depois em um veículo que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Comprar uma cópia de uma embarcação. Clique neste botão e depois em uma embarcação que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Comprar uma cópia de uma aeronave. Clique neste botão e depois em uma aeronave que está dentro ou fora do hangar. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização do depósito ferroviário. Ctrl+Clique para abrir uma nova visualização na localização do depósito ferroviário @@ -4346,10 +4346,10 @@ STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar e STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar aeronave para o hangar. Ctrl+Clique para fazer apenas manutenção ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Comprar uma cópia do trem, incluindo todos os vagões. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Comprar uma cópia do veículo. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Comprar uma cópia da embarcação. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Comprar uma cópia da aeronave. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para apenas mostrar o custo estimado +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Comprar uma cópia do trem, incluindo todos os vagões. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Comprar uma cópia do veículo. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Comprar uma cópia da embarcação. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado +STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Comprar uma cópia da aeronave. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Forçar o trem a prosseguir sem aguardar o sinal de liberação STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Inverter a direção do trem @@ -4475,7 +4475,7 @@ STR_QUERY_RENAME_AIRCRAFT_CAPTION :{WHITE}Renomear STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE :{LTBLUE}{ENGINE}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_TRAIN_WAGON_VALUE :{LTBLUE}{ENGINE}{BLACK} Valor: {LTBLUE}{CURRENCY_LONG} -STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_TEXT :{BLACK}Capacidade total deste trem: +STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_TEXT :{BLACK}Capacidade total de carga deste trem: STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY :{LTBLUE}{CARGO_LONG} ({CARGO_SHORT}) STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_MULT :{LTBLUE}{CARGO_LONG} ({CARGO_SHORT}) (x{NUM}) @@ -4935,8 +4935,8 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Somente STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Captura tela enorme STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}A captura de tela terá uma resolução de {COMMA}x{COMMA} pixels. Essa captura pode demorar. Deseja continuar? -STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Mapa topográfico gravado como '{STRING}' com sucesso. O pico mais alto tem {NUM} -STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Captura de tela gravada como '{STRING}' com sucesso +STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Mapa topográfico '{STRING}' gravado com sucesso. O pico mais alto tem {NUM} +STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Captura de tela '{STRING}' gravada com sucesso STR_ERROR_SCREENSHOT_FAILED :{WHITE}A captura de tela falhou! # Error message titles @@ -4954,14 +4954,14 @@ STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Edifíci STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Não é possível limpar esta área... STR_ERROR_SITE_UNSUITABLE :{WHITE}... local inadequado STR_ERROR_ALREADY_BUILT :{WHITE}... já construído -STR_ERROR_OWNED_BY :{WHITE}... propriedade de {STRING} +STR_ERROR_OWNED_BY :{WHITE}... é propriedade de {STRING} STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... área é propriedade de outra empresa STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... limite de paisagismo atingido STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... limite de limpeza de quadrados atingido STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... limite de plantação de árvores atingido STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}Nome deve ser único STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{1:STRING} no caminho -STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Não permitido enquanto pausado +STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Não é permitido enquanto pausado # Local authority errors STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}A autoridade local de {TOWN} recusa-se a permitir isso @@ -5099,7 +5099,7 @@ STR_ERROR_SHIP_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... deve STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}... deve estar parado em um hangar STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Trens só podem ser modificados quando estão parados em um depósito -STR_ERROR_TRAIN_TOO_LONG :{WHITE}Trem muito longo +STR_ERROR_TRAIN_TOO_LONG :{WHITE}Trem é muito longo STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Não é possível inverter a direção do veículo... STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}... composto por múltiplas unidades STR_ERROR_INCOMPATIBLE_RAIL_TYPES :Tipos de trilhos incompatíveis @@ -5178,13 +5178,13 @@ STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}Não é STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Não é possível construir ponte aqui... STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}É necessário demolir a ponte primeiro STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Não é possível iniciar e terminar no mesmo ponto -STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Extremidades da ponte não estão no mesmo nível +STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}As extremidades da ponte não estão no mesmo nível STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}A ponte é muito baixa para este terreno STR_ERROR_BRIDGE_TOO_HIGH_FOR_TERRAIN :{WHITE}A ponte é muito alta para este terreno STR_ERROR_START_AND_END_MUST_BE_IN :{WHITE}Início e final devem estar alinhados STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}... os extremos da ponte devem estar sobre a terra STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... ponte muito longa -STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :{WHITE}Ponte terminaria fora do mapa +STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :{WHITE}A ponte terminaria fora do mapa # Tunnel related errors STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Não é possível construir túnel aqui... @@ -5405,7 +5405,7 @@ STR_INDUSTRY_NAME_PRINTING_WORKS :{G=f}Gráfica STR_INDUSTRY_NAME_STEEL_MILL :{G=f}Siderúrgica STR_INDUSTRY_NAME_FARM :{G=f}Fazenda STR_INDUSTRY_NAME_COPPER_ORE_MINE :{G=f}Mina de Cobre -STR_INDUSTRY_NAME_OIL_WELLS :{G=m}Poços de Petróleo +STR_INDUSTRY_NAME_OIL_WELLS :{G=m}Campo de Petróleo STR_INDUSTRY_NAME_BANK :{G=m}Banco STR_INDUSTRY_NAME_FOOD_PROCESSING_PLANT :{G=f}Indústria de Alimentos STR_INDUSTRY_NAME_PAPER_MILL :{G=f}Fábrica de Papel @@ -5415,7 +5415,7 @@ STR_INDUSTRY_NAME_DIAMOND_MINE :{G=f}Mina de Di STR_INDUSTRY_NAME_IRON_ORE_MINE :{G=f}Mina de Ferro STR_INDUSTRY_NAME_FRUIT_PLANTATION :{G=f}Plantação de Frutas STR_INDUSTRY_NAME_RUBBER_PLANTATION :{G=f}Plantação de Seringueiras -STR_INDUSTRY_NAME_WATER_SUPPLY :{G=m}Abastecimento de Água +STR_INDUSTRY_NAME_WATER_SUPPLY :{G=m}Fornecimento de Água STR_INDUSTRY_NAME_WATER_TOWER :{G=m}Reservatório de Água STR_INDUSTRY_NAME_FACTORY_2 :{G=f}Fábrica STR_INDUSTRY_NAME_FARM_2 :{G=f}Fazenda @@ -5423,10 +5423,10 @@ STR_INDUSTRY_NAME_LUMBER_MILL :{G=f}Madeireira STR_INDUSTRY_NAME_COTTON_CANDY_FOREST :{G=f}Floresta de Algodão Doce STR_INDUSTRY_NAME_CANDY_FACTORY :{G=f}Fábrica de Doces STR_INDUSTRY_NAME_BATTERY_FARM :{G=f}Fazenda de Pilhas -STR_INDUSTRY_NAME_COLA_WELLS :{G=m}Poços de Xarope de Cola +STR_INDUSTRY_NAME_COLA_WELLS :{G=m}Poço de Xarope de Cola STR_INDUSTRY_NAME_TOY_SHOP :{G=f}Loja de Brinquedos STR_INDUSTRY_NAME_TOY_FACTORY :{G=f}Fábrica de Brinquedos -STR_INDUSTRY_NAME_PLASTIC_FOUNTAINS :{G=f}Fontes de Plástico +STR_INDUSTRY_NAME_PLASTIC_FOUNTAINS :{G=f}Fonte de Plástico STR_INDUSTRY_NAME_FIZZY_DRINK_FACTORY :{G=f}Fábrica de Refrigerantes STR_INDUSTRY_NAME_BUBBLE_GENERATOR :{G=m}Gerador de Bolhas STR_INDUSTRY_NAME_TOFFEE_QUARRY :{G=f}Pedreira de Caramelo diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 8ddf51ca2f..12d4c34e32 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -118,7 +118,7 @@ STR_QUANTITY_RUBBER :{VOLUME_LONG} d STR_QUANTITY_SUGAR :{WEIGHT_LONG} de sucre STR_QUANTITY_TOYS :{COMMA}{NBSP}joguin{P a es} STR_QUANTITY_SWEETS :{G=Femenin}{COMMA}{NBSP}boss{P a es} de dolços -STR_QUANTITY_COLA :{VOLUME_LONG} de refrescs +STR_QUANTITY_COLA :{VOLUME_LONG} de refrescos STR_QUANTITY_CANDYFLOSS :{WEIGHT_LONG} de cotó de sucre STR_QUANTITY_BUBBLES :{COMMA} bomboll{P a es} STR_QUANTITY_TOFFEE :{WEIGHT_LONG} de caramel{P "" s} @@ -650,7 +650,7 @@ STR_PERFORMANCE_DETAIL :{WHITE}Detall d STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detall STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) -STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}% +STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}{NBSP}% STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP :{BLACK}Veure els detalls d'aquesta companyia ###length 10 @@ -772,16 +772,16 @@ STR_SMALLMAP_LEGENDA_ROAD_VEHICLES :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_SHIPS :{TINY_FONT}{BLACK}Vaixells STR_SMALLMAP_LEGENDA_AIRCRAFT :{TINY_FONT}{BLACK}Avions STR_SMALLMAP_LEGENDA_TRANSPORT_ROUTES :{TINY_FONT}{BLACK}Rutes de transport -STR_SMALLMAP_LEGENDA_FOREST :{TINY_FONT}{BLACK}Bosc -STR_SMALLMAP_LEGENDA_RAILROAD_STATION :{TINY_FONT}{BLACK}Estació de ferrocarril -STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Estació per a camions -STR_SMALLMAP_LEGENDA_BUS_STATION :{TINY_FONT}{BLACK}Parada d'autobús +STR_SMALLMAP_LEGENDA_FOREST :{TINY_FONT}{BLACK}Boscos +STR_SMALLMAP_LEGENDA_RAILROAD_STATION :{TINY_FONT}{BLACK}Estacions de tren +STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Estacions de camió +STR_SMALLMAP_LEGENDA_BUS_STATION :{TINY_FONT}{BLACK}Parades d'autobús STR_SMALLMAP_LEGENDA_AIRPORT_HELIPORT :{TINY_FONT}{BLACK}Aeroport/Heliport -STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLACK}Moll +STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLACK}Molls STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Terreny irregular STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Gespa STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Terreny erm -STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Selva tropical +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Selves tropicals STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Camps de conreu STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Arbres STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Roques @@ -793,7 +793,7 @@ STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_SNOW :{TINY_FONT}{BLACK}Neu STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Mostra/amaga el nom de les poblacions al mapa -STR_SMALLMAP_CENTER :{BLACK}Centra el mapa petit a la posició actual +STR_SMALLMAP_CENTER :{BLACK}Centra el minimapa a la posició actual STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STRING} ({NUM}) STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} @@ -879,10 +879,10 @@ STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL :{BIG_FONT}{BLAC STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL :{BIG_FONT}{BLACK}Nova veta de carbó trobada a {INDUSTRY}{}Es preveu doblar la producció STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL :{BIG_FONT}{BLACK}Noves reserves de petroli trobades a {INDUSTRY}{}Es preveu doblar la producció STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM :{BIG_FONT}{BLACK}Sistemes de conreu millorats a {INDUSTRY} fan preveure que es doblarà la producció -STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}La producció de {STRING} a {INDUSTRY} creix un {COMMA}% -STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}La producció de {INDUSTRY} descendeix un 50% -STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Una plaga d'insectes provoca el caos a {INDUSTRY}{}La producció baixa un 50% -STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}La producció de {STRING} a {INDUSTRY} es redueix un {COMMA}% +STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}La producció de {STRING} a {INDUSTRY} creix un {COMMA}{NBSP}% +STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}La producció de {INDUSTRY} descendeix un 50{NBSP}% +STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Una plaga d'insectes provoca el caos a {INDUSTRY}{}La producció baixa un 50{NBSP}% +STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}La producció de {STRING} a {INDUSTRY} es redueix un {COMMA}{NBSP}% ###length VEHICLE_TYPES STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} està esperant a la cotxera @@ -923,7 +923,7 @@ STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLAC STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subvenció retirada:{}{}El transport de {STRING} des de {STRING} fins a {STRING} ja no està subvencionat STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Oferta de subvenció per a un servei:{}{}La primera companyia que transporti {STRING} des de {STRING} fins a {STRING} rebrà una subvenció durant {UNITS_YEARS_OR_MINUTES} de l'autoritat local ###length 4 -STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subvenció concedida a {STRING}{}{}El transport de {STRING} des de {STRING} fins a {STRING} rebrà uns ingressos addicionals del 50% durant {UNITS_YEARS_OR_MINUTES} +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subvenció concedida a {STRING}{}{}El transport de {STRING} des de {STRING} fins a {STRING} rebrà uns ingressos addicionals del 50{NBSP}% durant {UNITS_YEARS_OR_MINUTES} STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subvenció concedida a {STRING}{}{}El transport de {STRING} de {STRING} fins a {STRING} ingressarà el doble de la tarifa habitual durant {UNITS_YEARS_OR_MINUTES}! STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subvenció concedida a {STRING}{}{}El transport de {STRING} de {STRING} fins a {STRING} ingressarà el triple de la tarifa habitual durant {UNITS_YEARS_OR_MINUTES} STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subvenció concedida a {STRING}{}{}El transport de {STRING} de {STRING} fins a {STRING} ingressarà el quàdruple de la tarifa habitual durant {UNITS_YEARS_OR_MINUTES} @@ -1027,7 +1027,7 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :Cada 120 minuts STR_GAME_OPTIONS_LANGUAGE :{BLACK}Idioma STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Selecciona l'idioma de la interfície -STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}{NBSP}% completed) +STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}{NBSP}% completat) STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Pantalla completa STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Marqueu la casella per mostrar l'OpenTTD a pantalla completa. @@ -1167,7 +1167,7 @@ STR_SEA_LEVEL_LOW :Baix STR_SEA_LEVEL_MEDIUM :Mitjà STR_SEA_LEVEL_HIGH :Alt STR_SEA_LEVEL_CUSTOM :Personalitzat -STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Personalitzat ({NUM}%) +STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Personalitzat ({NUM}{NBSP}%) ###length 4 STR_RIVERS_NONE :Cap @@ -1354,7 +1354,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Seleccioneu el STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :Pendent de les costes per als trens: {STRING} STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :El pendent de les caselles amb costes per als trens. Els valors alts fan que sigui més difícil pujar els turons. -STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% +STR_CONFIG_SETTING_PERCENTAGE :{COMMA}{NBSP}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Pendent de les costes per als vehicles de carretera: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :El pendent de les caselles amb costes per a vehicles de carretera. Els valors alts fan que sigui més difícil pujar els turons. @@ -1543,7 +1543,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Gruix de la lí STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostra el nom del NewGRF a la finestra de construcció de vehicles: {STRING} STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Afegeix una línia a la finestra de construcció de vehicles que mostri de quin NewGRF és el vehicle seleccionat. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostra les càrregues que poden portar els vehicles a les finestres de llistes {STRING} +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostra les càrregues que poden portar els vehicles a les finestres de llistes: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Si s'activa, la càrrega transportable del vehicle apareixerà al damunt de les llistes dels vehicles. STR_CONFIG_SETTING_LANDSCAPE :Paisatge: {STRING} @@ -1623,8 +1623,8 @@ STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Inspecciona els STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Enllaça la barra d'eines del paisatge a les barres d'eines de vies/carreteres/aigua/aeroports: {STRING} STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Quan s'obre la barra d'eines de construcció per un tipus de transport, també s'obre la barra d'eines de remodelació del paisatge -STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :Color del terra utilitzat al mapa petit: {STRING} -STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Color del terreny al mapa petit +STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :Color del terra utilitzat al minimapa: {STRING} +STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Color del terreny al minimapa ###length 3 STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Verd STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Verd fosc @@ -1647,7 +1647,7 @@ STR_CONFIG_SETTING_SCROLLMODE_RMB :Mou el mapa amb STR_CONFIG_SETTING_SCROLLMODE_LMB :Mou el mapa amb el botó esquerre del ratolí STR_CONFIG_SETTING_SMOOTH_SCROLLING :Desplaçament suau de la vista: {STRING} -STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla com la vista principal es desplaça a una posició específica quan es clica al mapa petit o quan s'envia una ordre de desplaçar-se a un objecte específic al mapa. Si està activat, la vista es desplaça suaument; si està desactivat, salta directament al punt assenyalat +STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla com la vista principal es desplaça a una posició específica quan es fa clic al minimapa o quan s'envia una ordre de desplaçar-se a un objecte específic al mapa. Si està activat, la vista es desplaça suaument; si està desactivat, salta directament al punt assenyalat STR_CONFIG_SETTING_MEASURE_TOOLTIP :Mostra un cartell de mesura quan estiguis utilitzant vàries eines de construcció: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Mostra les distàncies-cel·la i les diferències d'alçada quan s'arrossegui durant la construcció @@ -1833,7 +1833,7 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Interval per de STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Estableix l'interval de revisió predeterminat pels nous avions, si no hi ha un interval de revisió explícit pel vehicle STR_CONFIG_SETTING_SERVINT_SHIPS :Interval per defecte de servei per als vaixells: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Estableix l'interval de revisió predeterminat pels vaixells que es comprin, si no hi ha un interval de revisió explícit pel vehicle. -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}di{P 0 a es}/minut{P 0 "" s}% +STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}di{P 0 a es}/minut{P 0 "" s}/% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Desactivat @@ -2055,10 +2055,10 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Com més alt el STR_CONFIG_SETTING_DEMAND_DISTANCE :Efecte de la distància sobre les demandes: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Si indiqueu un valor major de 0, la distància entre l'estació d'origen A d'una càrrega i la possible destinació B, tindrà efecte en la quantitat de càrrega enviada de A a B. Com més lluny és B de A menys càrrega s'hi enviarà. Com més alt el valor, menys càrrega s'enviarà a estacions llunyanes i més càrrega a estacions properes. STR_CONFIG_SETTING_DEMAND_SIZE :Quantitat de càrrega retornada per mode simètric: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Indicant menys del 100% la distribució simètrica es comporta més com l'asimètrica. Menys càrrega serà retornada si una certa quantitat és enviada a una estació. Si indiqueu 0% la distribució simètrica es comporta igual que l'asimètrica. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Indicant menys del 100{NBSP}% la distribució simètrica es comporta més com l'asimètrica. Menys càrrega serà retornada si una certa quantitat és enviada a una estació. Si indiqueu un 0{NBSP}%, la distribució simètrica es comporta igual que l'asimètrica. STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturació de camins curts abans d'usar camins d'alta capacitat: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Sovint hi ha diversos camins entre dues estacions donades. Cargodist primer saturarà el camí més curt, després usarà el segon camí més curt fins a saturar-lo i així successivament. La saturació és determinada per una estimació de la capacitat i l'ús previst. Un cop ha saturat tots els camins, si encara hi ha demanda, sobrecarregarà tots els camins, preferint aquells de major capacitat. No obstant, molt sovint l'algoritme no farà una estimació acurada de la capacitat. Aquest paràmetre us permet especificar fins a quin percentatge un camí més curt ha de ser saturat en la primera ronda abans d'escollir el següent en longitud. Indiqueu menys del 100% per evitar la superpoblació d'estacions en cas de capacitat sobreestimada. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Sovint hi ha diversos camins entre dues estacions donades. Cargodist primer saturarà el camí més curt, després usarà el segon camí més curt fins a saturar-lo i així successivament. La saturació és determinada per una estimació de la capacitat i l'ús previst. Un cop ha saturat tots els camins, si encara hi ha demanda, sobrecarregarà tots els camins, preferint aquells de major capacitat. No obstant, molt sovint l'algoritme no farà una estimació acurada de la capacitat. Aquest paràmetre us permet especificar fins a quin percentatge un camí més curt ha de ser saturat en la primera ronda abans d'escollir el següent en longitud. Indiqueu menys del 100{NBSP}% per a evitar la superpoblació d'estacions en cas de capacitat sobreestimada. STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unitats de velocitat (terrestres): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Unitats de velocitat (nàutiques): {STRING} @@ -2982,9 +2982,9 @@ STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Planta a STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Planta un arbre a cada casella arrossegant el ratolí pel paisatge. STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Arbreda -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Planta petits boscos arrossegant el ratolí pel paisatge. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Planta boscos petits arrossegant el ratolí pel paisatge. STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Bosc -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Planta grans boscos arrossegant el ratolí pel paisatge. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Planta boscos grans arrossegant el ratolí pel paisatge. # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Generador de terreny @@ -3056,12 +3056,12 @@ STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Cadena d STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Indústries productores STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Indústries acceptades STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Cases -STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Clica a la indústria per veure els seus proveïdors i clients +STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Clica a la indústria per veure els seus proveïdors i clients. STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Clica a la càrrega per veure els proveïdors i clients STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Cadena d'indústries STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Mostra les càrregues proveïdes i les indústries acceptades -STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Enllaç al mapa petit -STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Selecciona les indústries mostrades també al mapa petit +STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Mostra el minimapa +STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Selecciona les indústries mostrades també al minimapa. STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}Selecciona la càrrega STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}Selecciona la càrrega que vols mostrar STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}Selecciona indústria @@ -3199,9 +3199,9 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Fotogrames per segon STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} (x{DECIMAL}) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Velocitat de simulació: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Nombre de tics del joc per segon. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Nombre de tics del joc per segon STR_FRAMERATE_RATE_BLITTER :{BLACK}Fotogrames per segon: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Nombre de fotogrames renderitzats per segon. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Nombre de fotogrames renderitzats per segon STR_FRAMERATE_SPEED_FACTOR :{BLACK}Factor de velocitat actual: x{DECIMAL} STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Quant ràpid va la partida actual, comparant-ho amb l'estimació de la velocitat normal. STR_FRAMERATE_CURRENT :{WHITE}Actual @@ -3389,7 +3389,7 @@ STR_GENERATION_WORLD :{WHITE}Generant STR_GENERATION_ABORT :{BLACK}Avorta STR_GENERATION_ABORT_CAPTION :{WHITE}Avorta la generació del mapa STR_GENERATION_ABORT_MESSAGE :{YELLOW}Realment vols avortar la generació? -STR_GENERATION_PROGRESS :{WHITE}{NUM}% complet +STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% complet STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generació del món STR_GENERATION_RIVER_GENERATION :{BLACK}Generació de rius @@ -3591,8 +3591,8 @@ STR_NEWGRF_SCAN_STATUS :{BLACK}{NUM} Ne STR_NEWGRF_SCAN_ARCHIVES :Escanejant arxius # Sign list window -STR_SIGN_LIST_CAPTION :{WHITE}Llista de senyals - {COMMA} Senyal{P "" s} -STR_SIGN_LIST_MATCH_CASE :{BLACK}Coincideix Majúscules/Minúscules +STR_SIGN_LIST_CAPTION :{WHITE}Llista de senyals - {COMMA} senyal{P "" s} +STR_SIGN_LIST_MATCH_CASE :{BLACK}Coincideix majúscules/minúscules STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Commuta minúscules/majúscules en comparar els noms dels senyals contra la cadena filtrant # Sign window @@ -3771,7 +3771,7 @@ STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Ratis STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Mostra els ratis de l'estació STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MONTH :{BLACK}Subministrament mensual i rati local: STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MINUTE :{BLACK}Subministrament per minut i rati local: -STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) +STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}{NBSP}%) STR_STATION_VIEW_GROUP :{BLACK}Agrupa per STR_STATION_VIEW_WAITING_STATION :Estació: En espera @@ -3956,9 +3956,9 @@ STR_INDUSTRY_DIRECTORY_FILTER_NONE :Cap STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producció del darrer mes: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producció durant l'últim minut: -STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportat) +STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% transportat) STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra la vista principal al lloc de la indústria. Amb Ctrl+clic, s'obre una vista nova centrada al lloc on és la indústria. -STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivell de producció: {YELLOW}{COMMA}% +STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivell de producció: {YELLOW}{COMMA}{NBSP}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La indústria ha anunciat la seva clausura imminent! STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Requereix: {YELLOW}{STRING}{STRING} @@ -3970,7 +3970,7 @@ STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRI STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} esperant{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}Canvia la producció (múltiple de 8, fins a 2040) -STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Canvia el nivell de producció (en percentatge, fins a 800%) +STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Canvia el nivell de producció (en percentatge, fins al 800{NBSP}%) # Vehicle lists ###length VEHICLE_TYPES @@ -4047,7 +4047,7 @@ STR_GROUP_PROFIT_THIS_PERIOD :Benefici durant STR_GROUP_PROFIT_LAST_YEAR :Benefici de l'any passat: STR_GROUP_PROFIT_LAST_PERIOD :Benefici durant l'últim període: STR_GROUP_OCCUPANCY :Ocupació actual: -STR_GROUP_OCCUPANCY_VALUE :{NUM}% +STR_GROUP_OCCUPANCY_VALUE :{NUM}{NBSP}% # Build vehicle window ###length 4 @@ -4077,7 +4077,7 @@ STR_PURCHASE_INFO_RUNNINGCOST_PERIOD :{BLACK}Cost d'u STR_PURCHASE_INFO_CAPACITY :{BLACK}Capacitat: {GOLD}{CARGO_LONG} {STRING} STR_PURCHASE_INFO_REFITTABLE :(remodelable) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Dissenyat: {GOLD}{NUM}{BLACK} Vida: {GOLD}{COMMA} any{P "" s} -STR_PURCHASE_INFO_RELIABILITY :{BLACK}Fiabilitat màxima: {GOLD}{COMMA}% +STR_PURCHASE_INFO_RELIABILITY :{BLACK}Fiabilitat màxima: {GOLD}{COMMA}{NBSP}% STR_PURCHASE_INFO_COST :{BLACK}Cost: {GOLD}{CURRENCY_LONG} STR_PURCHASE_INFO_COST_REFIT :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} (Cost del remodelat: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Pes: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) @@ -4437,7 +4437,7 @@ STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Benefici STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Benefici aquest any: {LTBLUE}{CURRENCY_LONG} (l'any passat: {CURRENCY_LONG}) {BLACK}Rendiment mínim: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Benefici durant aquest període: {LTBLUE}{CURRENCY_LONG} (durant l'últim període: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Benefici durant aquest període: {LTBLUE}{CURRENCY_LONG} (durant l'últim període: {CURRENCY_LONG}) {BLACK}Rendiment mínim: {LTBLUE}{POWER_TO_WEIGHT} -STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilitat: {LTBLUE}{COMMA}% {BLACK}Avaries des de la darrera revisió: {LTBLUE}{COMMA} +STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilitat: {LTBLUE}{COMMA}{NBSP}% {BLACK}Avaries des de la darrera revisió: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Fabricat: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Capacitat: {LTBLUE}Cap{STRING} @@ -4871,14 +4871,14 @@ STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}Document # Vehicle loading indicators -STR_PERCENT_UP_SMALL :{TINY_FONT}{WHITE}{NUM}%{UP_ARROW} -STR_PERCENT_UP :{WHITE}{NUM}%{UP_ARROW} -STR_PERCENT_DOWN_SMALL :{TINY_FONT}{WHITE}{NUM}%{DOWN_ARROW} -STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWN_ARROW} -STR_PERCENT_UP_DOWN_SMALL :{TINY_FONT}{WHITE}{NUM}%{UP_ARROW}{DOWN_ARROW} -STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UP_ARROW}{DOWN_ARROW} -STR_PERCENT_NONE_SMALL :{TINY_FONT}{WHITE}{NUM}% -STR_PERCENT_NONE :{WHITE}{NUM}% +STR_PERCENT_UP_SMALL :{TINY_FONT}{WHITE}{NUM}{NBSP}%{UP_ARROW} +STR_PERCENT_UP :{WHITE}{NUM}{NBSP}%{UP_ARROW} +STR_PERCENT_DOWN_SMALL :{TINY_FONT}{WHITE}{NUM}{NBSP}%{DOWN_ARROW} +STR_PERCENT_DOWN :{WHITE}{NUM}{NBSP}%{DOWN_ARROW} +STR_PERCENT_UP_DOWN_SMALL :{TINY_FONT}{WHITE}{NUM}{NBSP}%{UP_ARROW}{DOWN_ARROW} +STR_PERCENT_UP_DOWN :{WHITE}{NUM}{NBSP}%{UP_ARROW}{DOWN_ARROW} +STR_PERCENT_NONE_SMALL :{TINY_FONT}{WHITE}{NUM}{NBSP}% +STR_PERCENT_NONE :{WHITE}{NUM}{NBSP}% # Income 'floats' STR_INCOME_FLOAT_COST_SMALL :{TINY_FONT}{RED}Cost: {CURRENCY_LONG} @@ -5394,43 +5394,43 @@ STR_TOWN_BUILDING_NAME_PIGGY_BANK_1 :Banc-guardiola ##id 0x4800 # industry names -STR_INDUSTRY_NAME_COAL_MINE :{G=Femenin}Mina de Carbó -STR_INDUSTRY_NAME_POWER_STATION :{G=Femenin}Central Tèrmica +STR_INDUSTRY_NAME_COAL_MINE :{G=Femenin}Mina de carbó +STR_INDUSTRY_NAME_POWER_STATION :{G=Femenin}Central tèrmica STR_INDUSTRY_NAME_SAWMILL :{G=Femenin}Serradora STR_INDUSTRY_NAME_FOREST :{G=Masculin}Bosc -STR_INDUSTRY_NAME_OIL_REFINERY :{G=Femenin}Refineria de Petroli -STR_INDUSTRY_NAME_OIL_RIG :{G=Femenin}Plataforma Petrolífera +STR_INDUSTRY_NAME_OIL_REFINERY :{G=Femenin}Refineria de petroli +STR_INDUSTRY_NAME_OIL_RIG :{G=Femenin}Plataforma petrolífera STR_INDUSTRY_NAME_FACTORY :{G=Femenin}Fàbrica STR_INDUSTRY_NAME_PRINTING_WORKS :{G=Femenin}Impremta -STR_INDUSTRY_NAME_STEEL_MILL :{G=Masculin}Alt Forn +STR_INDUSTRY_NAME_STEEL_MILL :{G=Masculin}Alt forn STR_INDUSTRY_NAME_FARM :{G=Femenin}Granja -STR_INDUSTRY_NAME_COPPER_ORE_MINE :{G=Femenin}Mina de Coure -STR_INDUSTRY_NAME_OIL_WELLS :{G=Masculin}Pou de Petroli +STR_INDUSTRY_NAME_COPPER_ORE_MINE :{G=Femenin}Mina de coure +STR_INDUSTRY_NAME_OIL_WELLS :{G=Masculin}Pou de petroli STR_INDUSTRY_NAME_BANK :{G=Masculin}Banc STR_INDUSTRY_NAME_FOOD_PROCESSING_PLANT :{G=Femenin}Planta de Manipulació de Queviures -STR_INDUSTRY_NAME_PAPER_MILL :{G=Femenin}Indústria Paperera -STR_INDUSTRY_NAME_GOLD_MINE :{G=Femenin}Mina d'Or +STR_INDUSTRY_NAME_PAPER_MILL :{G=Femenin}Indústria paperera +STR_INDUSTRY_NAME_GOLD_MINE :{G=Femenin}Mina d'or STR_INDUSTRY_NAME_BANK_TROPIC_ARCTIC :{G=Masculin}Banc STR_INDUSTRY_NAME_DIAMOND_MINE :{G=Femenin}Mina de Diamants -STR_INDUSTRY_NAME_IRON_ORE_MINE :{G=Femenin}Mina de Ferro -STR_INDUSTRY_NAME_FRUIT_PLANTATION :{G=Femenin}Plantació de Fruita -STR_INDUSTRY_NAME_RUBBER_PLANTATION :{G=Femenin}Plantació de Cautxú -STR_INDUSTRY_NAME_WATER_SUPPLY :{G=Masculin}Sortidor d'Aigua -STR_INDUSTRY_NAME_WATER_TOWER :{G=Femenin}Torre d'Aigua +STR_INDUSTRY_NAME_IRON_ORE_MINE :{G=Femenin}Mina de ferro +STR_INDUSTRY_NAME_FRUIT_PLANTATION :{G=Femenin}Plantació de fruita +STR_INDUSTRY_NAME_RUBBER_PLANTATION :{G=Femenin}Plantació de cautxú +STR_INDUSTRY_NAME_WATER_SUPPLY :{G=Masculin}Sortidor d'aigua +STR_INDUSTRY_NAME_WATER_TOWER :{G=Femenin}Torre d'aigua STR_INDUSTRY_NAME_FACTORY_2 :{G=Femenin}Fàbrica STR_INDUSTRY_NAME_FARM_2 :{G=Femenin}Granja STR_INDUSTRY_NAME_LUMBER_MILL :{G=Femenin}Serradora -STR_INDUSTRY_NAME_COTTON_CANDY_FOREST :{G=Masculin}Bosc de Cotó de Sucre -STR_INDUSTRY_NAME_CANDY_FACTORY :{G=Femenin}Fàbrica de Dolços -STR_INDUSTRY_NAME_BATTERY_FARM :{G=Femenin}Granja de Piles -STR_INDUSTRY_NAME_COLA_WELLS :{G=Masculin}Pou de Refrescs -STR_INDUSTRY_NAME_TOY_SHOP :{G=Femenin}Botiga de Joguines -STR_INDUSTRY_NAME_TOY_FACTORY :{G=Femenin}Fàbrica de Joguines -STR_INDUSTRY_NAME_PLASTIC_FOUNTAINS :{G=Femenin}Font de Plàstic -STR_INDUSTRY_NAME_FIZZY_DRINK_FACTORY :{G=Femenin}Fàbrica de Begudes Gasoses -STR_INDUSTRY_NAME_BUBBLE_GENERATOR :{G=Masculin}Generador de Bombolles -STR_INDUSTRY_NAME_TOFFEE_QUARRY :{G=Femenin}Pedrera de Caramel -STR_INDUSTRY_NAME_SUGAR_MINE :{G=Femenin}Mina de Sucre +STR_INDUSTRY_NAME_COTTON_CANDY_FOREST :{G=Masculin}Bosc de cotó de sucre +STR_INDUSTRY_NAME_CANDY_FACTORY :{G=Femenin}Fàbrica de dolços +STR_INDUSTRY_NAME_BATTERY_FARM :{G=Femenin}Granja de piles +STR_INDUSTRY_NAME_COLA_WELLS :{G=Masculin}Pou de refrescos +STR_INDUSTRY_NAME_TOY_SHOP :{G=Femenin}Botiga de joguines +STR_INDUSTRY_NAME_TOY_FACTORY :{G=Femenin}Fàbrica de joguines +STR_INDUSTRY_NAME_PLASTIC_FOUNTAINS :{G=Femenin}Font de plàstic +STR_INDUSTRY_NAME_FIZZY_DRINK_FACTORY :{G=Femenin}Fàbrica de begudes gasoses +STR_INDUSTRY_NAME_BUBBLE_GENERATOR :{G=Masculin}Generador de bombolles +STR_INDUSTRY_NAME_TOFFEE_QUARRY :{G=Femenin}Pedrera de caramel +STR_INDUSTRY_NAME_SUGAR_MINE :{G=Femenin}Mina de sucre ############ WARNING, using range 0x6000 for strings that are stored in the savegame ############ These strings may never get a new id, or savegames will break! @@ -5450,7 +5450,7 @@ STR_SV_STNAME_SOUTH :{STRING} Sud STR_SV_STNAME_EAST :{STRING} Est STR_SV_STNAME_WEST :{STRING} Oest STR_SV_STNAME_CENTRAL :{STRING} Central -STR_SV_STNAME_TRANSFER :{STRING} Transbord +STR_SV_STNAME_TRANSFER :Transbord de {STRING} STR_SV_STNAME_HALT :Parada de {STRING} STR_SV_STNAME_VALLEY :Vall de {STRING} STR_SV_STNAME_HEIGHTS :Pic de {STRING} @@ -5526,7 +5526,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_SUGAR_TRUCK :{G=Masculin}Vag STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COTTON_CANDY_HOPPER :{G=Masculin}Vagó de cotó de sucre STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOFFEE_HOPPER :{G=Masculin}Vagó de caramels STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BUBBLE_VAN :{G=Masculin}Vagó de bombolles -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COLA_TANKER :{G=Masculin}Tanc de refresc +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COLA_TANKER :{G=Masculin}Tanc de refrescos STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_CANDY_VAN :{G=Masculin}Vagó de dolços STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOY_VAN :{G=Masculin}Vagó de joguines STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BATTERY_TRUCK :{G=Masculin}Vagó de piles @@ -5556,7 +5556,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_SUGAR_TRUCK :{G=Masculin}Vag STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COTTON_CANDY_HOPPER :{G=Masculin}Vagó de cotó de sucre STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOFFEE_HOPPER :{G=Masculin}Vagó de caramels STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BUBBLE_VAN :{G=Masculin}Vagó de bombolles -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COLA_TANKER :{G=Masculin}Tanc de refresc +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COLA_TANKER :{G=Masculin}Tanc de refrescos STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_CANDY_VAN :{G=Masculin}Vagó de dolços STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :{G=Masculin}Vagó de joguines STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BATTERY_TRUCK :{G=Masculin}Vagó de piles @@ -5588,7 +5588,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_SUGAR_TRUCK :{G=Masculin}Vag STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COTTON_CANDY_HOPPER :{G=Masculin}Vagó de cotó de sucre STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOFFEE_HOPPER :{G=Masculin}Vagó de caramels STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BUBBLE_VAN :{G=Masculin}Vagó de bombolles -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COLA_TANKER :{G=Masculin}Tanc de refresc +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COLA_TANKER :{G=Masculin}Tanc de refrescos STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_CANDY_VAN :{G=Masculin}Vagó de dolços STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOY_VAN :{G=Masculin}Vagó de joguines STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BATTERY_TRUCK :{G=Masculin}Vagó de piles @@ -5603,100 +5603,100 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_MKII_SUPERBUS :{G=Masculin}Aut STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKI_BUS :{G=Masculin}Autobús Ploddyphut MkI STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKII_BUS :{G=Masculin}Autobús Ploddyphut MkII STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKIII_BUS :{G=Masculin}Autobús Ploddyphut MkIII -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_COAL_TRUCK :{G=Masculin}Camió per Carbó Balogh -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_COAL_TRUCK :{G=Masculin}Camió per Carbó Uhl -STR_VEHICLE_NAME_ROAD_VEHICLE_DW_COAL_TRUCK :{G=Masculin}Camió per Carbó DW -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_MAIL_TRUCK :{G=Masculin}Camió per Correu MPS -STR_VEHICLE_NAME_ROAD_VEHICLE_REYNARD_MAIL_TRUCK :{G=Masculin}Camió per Correu Reynard -STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_MAIL_TRUCK :{G=Masculin}Camió per Correu Perry -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_MAIL_TRUCK :{G=Masculin}Camió per Correu MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_MAIL_TRUCK :{G=Masculin}Camió per Correu Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_MAIL_TRUCK :{G=Masculin}Camió per Correu Wizzowow -STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_OIL_TANKER :{G=Femenin}Cuba de Petroli Witcombe -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_OIL_TANKER :{G=Femenin}Cuba de Petroli Foster -STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_OIL_TANKER :{G=Femenin}Cuba de Petroli Perry -STR_VEHICLE_NAME_ROAD_VEHICLE_TALBOTT_LIVESTOCK_VAN :{G=Masculin}Camió de Bestiar Talbott -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_LIVESTOCK_VAN :{G=Masculin}Vagó de Bestiar Uhl -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_LIVESTOCK_VAN :{G=Masculin}Camió de Bestiar Foster -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_GOODS_TRUCK :{G=Masculin}Camió de Mercaderies Balogh -STR_VEHICLE_NAME_ROAD_VEHICLE_CRAIGHEAD_GOODS_TRUCK :{G=Masculin}Camió de Mercaderies Craighead -STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GOODS_TRUCK :{G=Masculin}Camió de Mercaderies Goss -STR_VEHICLE_NAME_ROAD_VEHICLE_HEREFORD_GRAIN_TRUCK :{G=Masculin}Camió per Gra Hereford -STR_VEHICLE_NAME_ROAD_VEHICLE_THOMAS_GRAIN_TRUCK :{G=Masculin}Camió per Gra Thomas -STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GRAIN_TRUCK :{G=Masculin}Camió per Gra Goss -STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_WOOD_TRUCK :{G=Masculin}Camió per Fusta Witcombe -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_WOOD_TRUCK :{G=Masculin}Camió per Fusta Foster -STR_VEHICLE_NAME_ROAD_VEHICLE_MORELAND_WOOD_TRUCK :{G=Masculin}Camió per Fusta Moreland -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_IRON_ORE_TRUCK :{G=Masculin}Camió per Mineral de Ferro MPS -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_IRON_ORE_TRUCK :{G=Masculin}Camió per Mineral de Ferro Uhl -STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_IRON_ORE_TRUCK :{G=Masculin}Camió per Mineral de Ferro Chippy -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_STEEL_TRUCK :{G=Masculin}Camió per Acer Balogh -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_STEEL_TRUCK :{G=Masculin}Camió per Acer Uhl -STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_STEEL_TRUCK :{G=Masculin}Camió per Acer Kelling -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_ARMORED_TRUCK :{G=Masculin}Furgó Blindat Balogh -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_ARMORED_TRUCK :{G=Masculin}Furgó Blindat Uhl -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_ARMORED_TRUCK :{G=Masculin}Furgó Blindat Foster -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_FOOD_VAN :{G=Masculin}Camió per Queviures Foster -STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_FOOD_VAN :{G=Masculin}Camió per Queviures Perry -STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_FOOD_VAN :{G=Masculin}Camió per Queviures Chippy -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_PAPER_TRUCK :{G=Masculin}Camió per Paper Uhl -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_PAPER_TRUCK :{G=Masculin}Camió per Paper Balogh -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_PAPER_TRUCK :{G=Masculin}Camió per Paper MPS -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_COPPER_ORE_TRUCK :{G=Masculin}Camió per Mineral de Coure MPS -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_COPPER_ORE_TRUCK :{G=Masculin}Camió per Mineral de Coure Uhl -STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_COPPER_ORE_TRUCK :{G=Masculin}Camió per Mineral de Coure Goss -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_WATER_TANKER :{G=Femenin}Cuba d'Aigua Uhl -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_WATER_TANKER :{G=Femenin}Cuba d'Aigua Balogh -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_WATER_TANKER :{G=Femenin}Cuba d'Aigua MPS -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_FRUIT_TRUCK :{G=Masculin}Camió per Fruita Balogh -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_FRUIT_TRUCK :{G=Masculin}Camió per Fruita Uhl -STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_FRUIT_TRUCK :{G=Masculin}Camió per Fruita Kelling -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_RUBBER_TRUCK :{G=Masculin}Camió per Cautxú Balogh -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_RUBBER_TRUCK :Camió per Cautxú Uhl -STR_VEHICLE_NAME_ROAD_VEHICLE_RMT_RUBBER_TRUCK :{G=Masculin}Camió per Cautxú RMT -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_SUGAR_TRUCK :{G=Masculin}Camió per Sucre MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_SUGAR_TRUCK :{G=Masculin}Camió per Sucre Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_SUGAR_TRUCK :{G=Masculin}Camió per Sucre Wizzowow -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COLA_TRUCK :{G=Masculin}Camió per Refrescs MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COLA_TRUCK :{G=Masculin}Camió per Refrescs Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COLA_TRUCK :{G=Masculin}Camió per Refrescs Wizzowow -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COTTON_CANDY :{G=Masculin}Camió per Cotó de Sucre MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COTTON_CANDY :{G=Masculin}Camió per Cotó de Sucre Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COTTON_CANDY_TRUCK :{G=Masculin}Camió per Cotó de Sucre Wizzowow -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOFFEE_TRUCK :{G=Masculin}Camió per Caramels MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOFFEE_TRUCK :{G=Masculin}Camió per Caramels Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOFFEE_TRUCK :{G=Masculin}Camió per Caramels Wizzowow -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOY_VAN :{G=Masculin}Camió per Joguines MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOY_VAN :{G=Masculin}Camió per Joguines Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOY_VAN :{G=Masculin}Camió per Joguines Wizzowow -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_CANDY_TRUCK :{G=Masculin}Camió per Dolços MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_CANDY_TRUCK :{G=Masculin}Camió per Dolços Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_CANDY_TRUCK :{G=Masculin}Camió per Dolços Wizzowow -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BATTERY_TRUCK :{G=Masculin}Camió per Piles MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BATTERY_TRUCK :{G=Masculin}Camió per Piles Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BATTERY_TRUCK :{G=Masculin}Camió per Piles Wizzowow -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_FIZZY_DRINK :{G=Masculin}Camió per Begudes Gasoses MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_FIZZY_DRINK :{G=Masculin}Camió per Begudes Gasoses Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_FIZZY_DRINK_TRUCK :{G=Masculin}Camió per Begudes Gasoses Wizzowow -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_PLASTIC_TRUCK :{G=Masculin}Camió per Plàstic MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_PLASTIC_TRUCK :{G=Masculin}Camió per Plàstic Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_PLASTIC_TRUCK :{G=Masculin}Camió per Plàstic Wizzowow -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BUBBLE_TRUCK :{G=Masculin}Camió per Bombolles MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BUBBLE_TRUCK :{G=Masculin}Camió per Bombolles Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BUBBLE_TRUCK :{G=Masculin}Camió per Bombolles Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_COAL_TRUCK :{G=Masculin}Camió de carbó Balogh +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_COAL_TRUCK :{G=Masculin}Camió de carbó Uhl +STR_VEHICLE_NAME_ROAD_VEHICLE_DW_COAL_TRUCK :{G=Masculin}Camió de carbó DW +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_MAIL_TRUCK :{G=Masculin}Camió de correu MPS +STR_VEHICLE_NAME_ROAD_VEHICLE_REYNARD_MAIL_TRUCK :{G=Masculin}Camió de correu Reynard +STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_MAIL_TRUCK :{G=Masculin}Camió de correu Perry +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_MAIL_TRUCK :{G=Masculin}Camió de correu MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_MAIL_TRUCK :{G=Masculin}Camió de correu Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_MAIL_TRUCK :{G=Masculin}Camió de correu Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_OIL_TANKER :{G=Femenin}Cuba de petroli Witcombe +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_OIL_TANKER :{G=Femenin}Cuba de petroli Foster +STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_OIL_TANKER :{G=Femenin}Cuba de petroli Perry +STR_VEHICLE_NAME_ROAD_VEHICLE_TALBOTT_LIVESTOCK_VAN :{G=Masculin}Camió de bestiar Talbott +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_LIVESTOCK_VAN :{G=Masculin}Vagó de bestiar Uhl +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_LIVESTOCK_VAN :{G=Masculin}Camió de bestiar Foster +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_GOODS_TRUCK :{G=Masculin}Camió de mercaderies Balogh +STR_VEHICLE_NAME_ROAD_VEHICLE_CRAIGHEAD_GOODS_TRUCK :{G=Masculin}Camió de mercaderies Craighead +STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GOODS_TRUCK :{G=Masculin}Camió de mercaderies Goss +STR_VEHICLE_NAME_ROAD_VEHICLE_HEREFORD_GRAIN_TRUCK :{G=Masculin}Camió de gra Hereford +STR_VEHICLE_NAME_ROAD_VEHICLE_THOMAS_GRAIN_TRUCK :{G=Masculin}Camió de gra Thomas +STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GRAIN_TRUCK :{G=Masculin}Camió de gra Goss +STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_WOOD_TRUCK :{G=Masculin}Camió de fusta Witcombe +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_WOOD_TRUCK :{G=Masculin}Camió de fusta Foster +STR_VEHICLE_NAME_ROAD_VEHICLE_MORELAND_WOOD_TRUCK :{G=Masculin}Camió de fusta Moreland +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_IRON_ORE_TRUCK :{G=Masculin}Camió de mineral de ferro MPS +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_IRON_ORE_TRUCK :{G=Masculin}Camió de mineral de ferro Uhl +STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_IRON_ORE_TRUCK :{G=Masculin}Camió de mineral de ferro Chippy +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_STEEL_TRUCK :{G=Masculin}Camió d'acer Balogh +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_STEEL_TRUCK :{G=Masculin}Camió d'acer Uhl +STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_STEEL_TRUCK :{G=Masculin}Camió d'acer Kelling +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_ARMORED_TRUCK :{G=Masculin}Furgó blindat Balogh +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_ARMORED_TRUCK :{G=Masculin}Furgó blindat Uhl +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_ARMORED_TRUCK :{G=Masculin}Furgó blindat Foster +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_FOOD_VAN :{G=Masculin}Camió de queviures Foster +STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_FOOD_VAN :{G=Masculin}Camió de queviures Perry +STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_FOOD_VAN :{G=Masculin}Camió de queviures Chippy +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_PAPER_TRUCK :{G=Masculin}Camió de paper Uhl +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_PAPER_TRUCK :{G=Masculin}Camió de paper Balogh +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_PAPER_TRUCK :{G=Masculin}Camió de paper MPS +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_COPPER_ORE_TRUCK :{G=Masculin}Camió de mineral de coure MPS +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_COPPER_ORE_TRUCK :{G=Masculin}Camió de mineral de coure Uhl +STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_COPPER_ORE_TRUCK :{G=Masculin}Camió de mineral de coure Goss +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_WATER_TANKER :{G=Femenin}Cuba d'aigua Uhl +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_WATER_TANKER :{G=Femenin}Cuba d'aigua Balogh +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_WATER_TANKER :{G=Femenin}Cuba d'aigua MPS +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_FRUIT_TRUCK :{G=Masculin}Camió de fruita Balogh +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_FRUIT_TRUCK :{G=Masculin}Camió de fruita Uhl +STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_FRUIT_TRUCK :{G=Masculin}Camió de fruita Kelling +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_RUBBER_TRUCK :{G=Masculin}Camió de cautxú Balogh +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_RUBBER_TRUCK :Camió de cautxú Uhl +STR_VEHICLE_NAME_ROAD_VEHICLE_RMT_RUBBER_TRUCK :{G=Masculin}Camió de cautxú RMT +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_SUGAR_TRUCK :{G=Masculin}Camió de sucre MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_SUGAR_TRUCK :{G=Masculin}Camió de sucre Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_SUGAR_TRUCK :{G=Masculin}Camió de sucre Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COLA_TRUCK :{G=Masculin}Camió de refrescos MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COLA_TRUCK :{G=Masculin}Camió de refrescos Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COLA_TRUCK :{G=Masculin}Camió de refrescos Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COTTON_CANDY :{G=Masculin}Camió de cotó de sucre MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COTTON_CANDY :{G=Masculin}Camió de cotó de sucre Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COTTON_CANDY_TRUCK :{G=Masculin}Camió de cotó de sucre Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOFFEE_TRUCK :{G=Masculin}Camió de caramels MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOFFEE_TRUCK :{G=Masculin}Camió de caramels Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOFFEE_TRUCK :{G=Masculin}Camió de caramels Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOY_VAN :{G=Masculin}Camió de joguines MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOY_VAN :{G=Masculin}Camió de joguines Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOY_VAN :{G=Masculin}Camió de joguines Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_CANDY_TRUCK :{G=Masculin}Camió de dolços MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_CANDY_TRUCK :{G=Masculin}Camió de dolços Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_CANDY_TRUCK :{G=Masculin}Camió de dolços Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BATTERY_TRUCK :{G=Masculin}Camió de piles MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BATTERY_TRUCK :{G=Masculin}Camió de piles Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BATTERY_TRUCK :{G=Masculin}Camió de piles Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_FIZZY_DRINK :{G=Masculin}Camió de begudes gasoses MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_FIZZY_DRINK :{G=Masculin}Camió de begudes gasoses Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_FIZZY_DRINK_TRUCK :{G=Masculin}Camió de begudes gasoses Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_PLASTIC_TRUCK :{G=Masculin}Camió de plàstic MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_PLASTIC_TRUCK :{G=Masculin}Camió de plàstic Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_PLASTIC_TRUCK :{G=Masculin}Camió de plàstic Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BUBBLE_TRUCK :{G=Masculin}Camió de bombolles MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BUBBLE_TRUCK :{G=Masculin}Camió de bombolles Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BUBBLE_TRUCK :{G=Masculin}Camió de bombolles Wizzowow ###length 11 STR_VEHICLE_NAME_SHIP_MPS_OIL_TANKER :{G=Masculin}Petroler MPS STR_VEHICLE_NAME_SHIP_CS_INC_OIL_TANKER :{G=Masculin}Petroler CS-Inc. -STR_VEHICLE_NAME_SHIP_MPS_PASSENGER_FERRY :{G=Masculin}Ferry de Passatgers MPS -STR_VEHICLE_NAME_SHIP_FFP_PASSENGER_FERRY :{G=Masculin}Ferry de Passatgers FFP +STR_VEHICLE_NAME_SHIP_MPS_PASSENGER_FERRY :{G=Masculin}Ferry de passatgers MPS +STR_VEHICLE_NAME_SHIP_FFP_PASSENGER_FERRY :{G=Masculin}Ferry de passatgers FFP STR_VEHICLE_NAME_SHIP_BAKEWELL_300_HOVERCRAFT :{G=Masculin}Hovercraft Bakewell 300 -STR_VEHICLE_NAME_SHIP_CHUGGER_CHUG_PASSENGER :{G=Masculin}Ferry de Passatgers Chugger-Chug -STR_VEHICLE_NAME_SHIP_SHIVERSHAKE_PASSENGER_FERRY :{G=Masculin}Ferry de Passatgers Shivershake -STR_VEHICLE_NAME_SHIP_YATE_CARGO_SHIP :{G=Masculin}Vaixell Mercant Yate -STR_VEHICLE_NAME_SHIP_BAKEWELL_CARGO_SHIP :{G=Masculin}Vaixell Mercant Bakewell -STR_VEHICLE_NAME_SHIP_MIGHTYMOVER_CARGO_SHIP :{G=Masculin}Vaixell Mercant MightyMover -STR_VEHICLE_NAME_SHIP_POWERNAUT_CARGO_SHIP :{G=Masculin}Vaixell Mercant Powernaut +STR_VEHICLE_NAME_SHIP_CHUGGER_CHUG_PASSENGER :{G=Masculin}Ferry de passatgers Chugger-Chug +STR_VEHICLE_NAME_SHIP_SHIVERSHAKE_PASSENGER_FERRY :{G=Masculin}Ferry de passatgers Shivershake +STR_VEHICLE_NAME_SHIP_YATE_CARGO_SHIP :{G=Masculin}Vaixell mercant Yate +STR_VEHICLE_NAME_SHIP_BAKEWELL_CARGO_SHIP :{G=Masculin}Vaixell mercant Bakewell +STR_VEHICLE_NAME_SHIP_MIGHTYMOVER_CARGO_SHIP :{G=Masculin}Vaixell mercant MightyMover +STR_VEHICLE_NAME_SHIP_POWERNAUT_CARGO_SHIP :{G=Masculin}Vaixell mercant Powernaut ###length 41 STR_VEHICLE_NAME_AIRCRAFT_SAMPSON_U52 :{G=Masculin}Sampson U52 diff --git a/src/lang/danish.txt b/src/lang/danish.txt index e7f68c0daf..e2765b5679 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1542,7 +1542,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Bredde af linje STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Vis navn på NewGRF i byg fartøj vinduet: {STRING} STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Tilføjer en linje til byg fartøj vinduet som viser, hvilken NewGRF det valgte fartøj stammer fra. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Vis de laster, køretøjerne kan bære i listevinduerne {STRING} +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Vis de laster, køretøjerne kan bære i listevinduerne: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Hvis det er aktiveret, vises køretøjets transportable last over det på køretøjslisterne STR_CONFIG_SETTING_LANDSCAPE :Landskab: {STRING} @@ -1575,7 +1575,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Vælg den omtre STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Tærrenets hårdhed (kun TerraGenesis) : {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Vælg formen og antallet af bakker. Glatte landskaber har færre, bredere bakker, mens barske landskaber har flere mindre bakker. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Vælg formen og antallet af bakker. Glatte landskaber har færre, bredere bakker, mens barske landskaber har flere mindre bakker ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Meget blødt STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Blødt @@ -1630,7 +1630,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Mørkegrøn STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violet STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Overlejringsfarver til lastflow: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Indstil det farveskema, der bruges til laststrømsoverlejringen. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Indstil det farveskema, der bruges til laststrøms overlejringen ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Grøn til rød (original) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Grøn til blå @@ -1751,7 +1751,7 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Hold byggeværk STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Hold bygnings-værktøjer til broer, tunneler, mv. åben efter brug STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Fjern automatisk signaler under jernbane-bygning: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Fjerner automatisk signaler under jernbane-bygning, hvis signalerne er i vejen. Bemærk at dette potentielt kan føre til togsammenstød. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Fjerner automatisk signaler under jernbane-bygning, hvis signalerne er i vejen. Bemærk at dette potentielt kan føre til togsammenstød STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Hurtig kørsel hastighedsgrænse: {STRING} STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Begrænser hvor hurtigt spillet kører, når hurtig kørsel er aktiveret. 0 = ingen grænse (så hurtigt som din computer er i stand til.) Værdier under 100% sænker spillets hastighed. Den øvre grænse afhænger af din computers specifikationer og kan variere afhængig af spillet. @@ -2031,25 +2031,25 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Startværdi for STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Gennemsnitlig størrelse af storbyer i forhold til normale byer ved start af spillet STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Opdater distributionsgraf hver {STRING}{NBSP}sekund{P 0:2 "" er} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tid mellem efterfølgende genberegninger af linkgrafen. Hver genberegning beregner planerne for én komponent af grafen. Det betyder, at en værdi X for denne indstilling ikke betyder, at hele grafen vil blive opdateret hvert X sekund. Kun en komponent vil. Jo kortere du indstiller det, jo mere CPU-tid vil være nødvendigt for at beregne det. Jo længere du indstiller det, jo længere tid vil det tage, før godsfordelingen starter på nye ruter. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tid mellem efterfølgende genberegninger af linkgrafen. Hver genberegning beregner planerne for én komponent af grafen. Det betyder, at en værdi X for denne indstilling ikke betyder, at hele grafen vil blive opdateret hvert X sekund. Kun en komponent vil. Jo kortere du indstiller det, jo mere CPU-tid vil være nødvendigt for at beregne det. Jo længere du indstiller det, jo længere tid vil det tage, før godsfordelingen starter på nye ruter STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Tag {STRING}{NBSP}sekund{P 0:2 "" er} til genberegning af fordelingsgraf -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tid det tager for hver genberegning af en linkgrafkomponent. Når en genberegning startes, dannes en tråd, som får lov til at køre i dette antal sekunder. Jo kortere du indstiller dette, jo mere sandsynligt er det, at tråden ikke er færdig, når den skal. Så stopper spillet, indtil det er ("lag"). Jo længere du indstiller det, jo længere tid tager det for distributionen at blive opdateret, når ruter ændres. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tid det tager for hver genberegning af en linkgrafkomponent. Når en genberegning startes, dannes en tråd, som får lov til at køre i dette antal sekunder. Jo kortere du indstiller dette, jo mere sandsynligt er det, at tråden ikke er færdig, når den skal. Så stopper spillet, indtil det er ("lag"). Jo længere du indstiller det, jo længere tid tager det for distributionen at blive opdateret, når ruter ændres STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distributionsmodel for passagerer: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetrisk" betyder, at omtrent det samme antal passagerer vil gå fra en station A til en station B som fra B til A. "Asymmetrisk" betyder, at vilkårlige antal passagerer kan gå i begge retninger. "Manuel" betyder, at der ikke finder nogen automatisk distribution sted for passagerer. STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distributionsmodel for post: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"symmetrisk" betyder, at der sendes omtrent den samme mængde post fra en station A til en station B som fra B til A. "asymmetrisk" betyder, at vilkårlige mængder post kan sendes i begge retninger. "Manuel" betyder, at der ikke finder automatisk distribution sted for post. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"symmetrisk" betyder, at der sendes omtrent den samme mængde post fra en station A til en station B som fra B til A. "asymmetrisk" betyder, at vilkårlige mængder post kan sendes i begge retninger. "Manuel" betyder, at der ikke finder automatisk distribution sted for post STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distributionsmodel for PANSRET last-klasse: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :PANSRET last-klasse indeholder værdigenstande i tempereret, diamanter i det subtropiske eller guld i det subarktiske klima. NewGRF'er kan ændre det. "Symmetrisk" betyder, at omtrent den samme mængde af denne last vil blive sendt fra en station A til en station B som fra B til A. "Asymmetrisk" betyder, at vilkårlige mængder af denne last kan sendes i begge retninger. "Manuel" betyder, at der ikke finder nogen automatisk distribution sted for den pågældende last. Det anbefales at indstille dette til asymmetrisk eller manuel, når du spiller subarktisk eller subtropisk, da banker kun modtager gods i disse klimaer. For tempereret kan du også vælge symmetrisk, da banker sender værdigenstande tilbage til oprindelsesbanken. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :PANSRET last-klasse indeholder værdigenstande i tempereret, diamanter i det subtropiske eller guld i det subarktiske klima. NewGRF'er kan ændre det. "Symmetrisk" betyder, at omtrent den samme mængde af denne last vil blive sendt fra en station A til en station B som fra B til A. "Asymmetrisk" betyder, at vilkårlige mængder af denne last kan sendes i begge retninger. "Manuel" betyder, at der ikke finder nogen automatisk distribution sted for den pågældende last. Det anbefales at indstille dette til asymmetrisk eller manuel, når du spiller subarktisk eller subtropisk, da banker kun modtager gods i disse klimaer. For tempereret kan du også vælge symmetrisk, da banker sender værdigenstande tilbage til oprindelsesbanken STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distributionsmodel for andre lastklasser: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asymmetrisk" betyder, at vilkårlige mængder last kan sendes i begge retninger. "manuel" betyder, at der ikke finder nogen automatisk distribution sted for disse laster. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asymmetrisk" betyder, at vilkårlige mængder last kan sendes i begge retninger. "manuel" betyder, at der ikke finder nogen automatisk distribution sted for disse laster ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuel STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetrisk STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :symmetrisk STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Distributionsnøjagtighed: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Jo højere du sætter denne indstilling, jo mere CPU-tid vil beregningen af forbindelsesgrafen tage. Hvis den tager for længe, kan du opleve lag. Hvis du derimod sætter indstillingen til en lav værdi, vil distributionen være unøjagtig, og du kan opleve last ikke blive sendt til de steder, du forventer. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Jo højere du sætter denne indstilling, jo mere CPU-tid vil beregningen af forbindelsesgrafen tage. Hvis den tager for længe, kan du opleve lag. Hvis du derimod sætter indstillingen til en lav værdi, vil distributionen være unøjagtig, og du kan opleve last ikke blive sendt til de steder, du forventer STR_CONFIG_SETTING_DEMAND_DISTANCE :Effekt af afstand på efterspørgsel: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Hvis du sætter denne indstilling til en værdi større end 0, vil afstanden mellem oprindelsesstation A for noget last og en mulig destination B have en effekt på mængden af last sendt fra A til B. Jo længere væk B er fra A, jo mindre last vil blive sendt. Jo højere du sætter denne indstilling, jo mindre last vil blive sendt til fjerne stationer, og jo mere last vil blive sendt til nærliggende stationer. @@ -3202,7 +3202,7 @@ STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Antal sp STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafik hastighed: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Antal billeder tegnet i sekundet. STR_FRAMERATE_SPEED_FACTOR :{BLACK}Aktuel spilhastighedsfaktor: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hvor hurtigt spillet aktuelt kører, i forhold til det forventede ved normal simulationshastighed. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hvor hurtigt spillet aktuelt kører, i forhold til det forventede ved normal simulationshastighed STR_FRAMERATE_CURRENT :{WHITE}Aktuel STR_FRAMERATE_AVERAGE :{WHITE}Gennemsnit STR_FRAMERATE_MEMORYUSE :{WHITE}Hukommelse diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 4138e45bfc..ee9400f76f 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1054,9 +1054,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Scale be STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Check this box to scale bevels by interface size STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Use traditional sprite font -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Check this box if you prefer to use the traditional fixed-size sprite font. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Check this box if you prefer to use the traditional fixed-size sprite font STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias fonts -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Check this box to anti-alias resizable fonts. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Check this box to anti-alias resizable fonts STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1275,7 +1275,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Infinite money: STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Allow unlimited spending and disable bankruptcy of companies STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximum initial loan: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account). If set to "No loan", no money will be available unless provided by a Game Script or the "Infinite money" setting. +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account). If set to "No loan", no money will be available unless provided by a Game Script or the "Infinite money" setting STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :No loan @@ -1359,7 +1359,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Slope steepness STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Steepness of a sloped tile for a road vehicle. Higher values make it more difficult to climb a hill STR_CONFIG_SETTING_FORBID_90_DEG :Forbid trains and ships from making 90° turns: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 degree turns occur when a horizontal track is directly followed by a vertical track piece on the adjacent tile, thus making the train turn by 90 degree when traversing the tile edge instead of the usual 45 degrees for other track combinations. This also applies to the turning radius of ships +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 degree turns occur when a horizontal track is directly followed by a vertical track piece on the adjacent tile, thus making the train turn by 90 degree when traversing the tile edge instead of the usual 45 degrees for other track combinations STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Allow to join stations not directly adjacent: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Allow adding parts to a station without directly touching the existing parts, by Ctrl+Clicking while placing the new parts @@ -1471,7 +1471,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Starting compan STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Choose starting colour for the company STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Starting company secondary colour: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Choose starting secondary colour for the company, if using a NewGRF that enables it. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Choose starting secondary colour for the company, if using a NewGRF that enables it STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Airports never expire: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Enabling this setting makes each airport type stay available forever after its introduction @@ -1495,22 +1495,22 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Vehicles never STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :When enabled, all vehicle models remain available forever after their introduction STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Timekeeping: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Select the timekeeping units of the game. This cannot be changed later.{}{}Calendar-based is the classic OpenTTD experience, with a year consisting of 12 months, and each month having 28-31 days.{}{}In Wallclock-based time, cargo production and financials are instead based on one-minute increments, which is about as long as a 30 day month takes in Calendar-based mode. These are grouped into 12-minute periods, equivalent to a year in Calendar-based mode.{}{}In either mode there is always a classic calendar, which is used for introduction dates of vehicles, houses, and other infrastructure. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Select the timekeeping units of the game. This cannot be changed later.{}{}Calendar-based is the classic OpenTTD experience, with a year consisting of 12 months, and each month having 28-31 days.{}{}In Wallclock-based time, cargo production and financials are instead based on one-minute increments, which is about as long as a 30 day month takes in Calendar-based mode. These are grouped into 12-minute periods, equivalent to a year in Calendar-based mode.{}{}In either mode there is always a classic calendar, which is used for introduction dates of vehicles, houses, and other infrastructure ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendar STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Wallclock STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutes per year: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Choose the number of minutes in a calendar year. The default is 12 minutes. Set to 0 to stop calendar time from changing. This setting does not affect the economic simulation of the game, and is only available when using wallclock timekeeping. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Choose the number of minutes in a calendar year. The default is 12 minutes. Set to 0 to stop calendar time from changing. This setting does not affect the economic simulation of the game, and is only available when using wallclock timekeeping STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (calendar time frozen) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Scale town cargo production: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Scale the cargo production of towns by this percentage. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Scale the cargo production of towns by this percentage STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Scale industry cargo production: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Scale the cargo production of industries by this percentage. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Scale the cargo production of industries by this percentage STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autorenew vehicle when it gets old: {STRING} @@ -1529,7 +1529,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Duration of err STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duration for displaying error messages in a red window. Note that some (critical) error messages are not closed automatically after this time, but must be closed manually STR_CONFIG_SETTING_HOVER_DELAY :Show tooltips: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Delay before tooltips are displayed when hovering the mouse over some interface element. Alternatively tooltips can be bound to the right mouse button +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Delay before tooltips are displayed when hovering the mouse over some interface element. Alternatively tooltips are bound to the right mouse button when this value is set to 0 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Hover for {COMMA} millisecond{P 0 "" s} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Right click @@ -1541,8 +1541,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Thickness of li STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Width of the line in the graphs. A thin line is more precisely readable, a thicker line is easier to see and colours are easier to distinguish STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Show the NewGRF's name in the build vehicle window: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Add a line to the build vehicle window, showing which NewGRF the selected vehicle comes from. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Show the cargoes the vehicles can carry in the list windows {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Add a line to the build vehicle window, showing which NewGRF the selected vehicle comes from +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Show the cargoes the vehicles can carry in the list windows: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :If enabled, the vehicle's transportable load will appear above it in the vehicle lists STR_CONFIG_SETTING_LANDSCAPE :Landscape: {STRING} @@ -1561,13 +1561,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industry densit STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Set how many industries should be generated and what level should be maintained during the game STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximum distance from edge for Oil refineries: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Oil refineries are only constructed near the map border, that is at the coast for island maps +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limit for how far from the map border oil refineries and oil rigs can be constructed. On island maps this ensures they are near the coast. On maps larger than 256 tiles, this value is scaled up STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snow line height: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Choose at what height snow starts in sub-arctic landscape. Snow also affects industry generation and town growth requirements. Can only be modified via Scenario Editor or is otherwise calculated via "snow coverage" STR_CONFIG_SETTING_SNOW_COVERAGE :Snow coverage: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Choose the approximate amount of snow on the sub-arctic landscape. Snow also affects industry generation and town growth requirements. Only used during map generation. Sea level and coast tiles never have snow. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Choose the approximate amount of snow on the sub-arctic landscape. Snow also affects industry generation and town growth requirements. Only used during map generation. Sea level and coast tiles never have snow STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Desert coverage: {STRING} @@ -1575,7 +1575,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Choose the appr STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Roughness of terrain: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Choose the shape and number of hills. Smooth landscapes have fewer, wider hills, while rough landscapes have more, smaller hills. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Choose the shape and number of hills. Smooth landscapes have fewer, wider hills, while rough landscapes have more, smaller hills ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Very Smooth STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Smooth @@ -1583,7 +1583,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Rough STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Very Rough STR_CONFIG_SETTING_VARIETY :Variety distribution: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Choose if the map contains both mountains and flat areas. The higher the variety, the more differences in elevation between mountainous and flat areas. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Choose if the map contains both mountains and flat areas. The higher the variety, the more differences in elevation between mountainous and flat areas STR_CONFIG_SETTING_RIVER_AMOUNT :River amount: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Choose how many rivers to generate @@ -1630,7 +1630,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Dark green STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violet STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Cargo flow overlay colours: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Set the colour scheme used for the cargo flow overlay. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Set the colour scheme used for the cargo flow overlay ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Green to red (original) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Green to blue @@ -1751,10 +1751,10 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Keep building t STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Keep the building tools for bridges, tunnels, etc. open after use STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatically remove signals during rail construction: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatically remove signals during rail construction if the signals are in the way. Note that this can potentially lead to train crashes. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatically remove signals during rail construction if the signals are in the way. Note that this can potentially lead to train crashes STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Fast forward speed limit: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limit on how fast the game goes when fast forward is enabled. 0 = no limit (as fast as your computer allows). Values below 100% slow the game down. The upper-limit depends on the specification of your computer and can vary depending on the game. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limit on how fast the game goes when fast forward is enabled. 0 = no limit (as fast as your computer allows). Values below 100% slow the game down. The upper-limit depends on the specification of your computer and can vary depending on the game STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normal game speed ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :No limit (as fast as your computer allows) @@ -1818,11 +1818,11 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Allow AI comput STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes before scripts are suspended: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximum number of computation steps that a script can take in one turn STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Max memory usage per script: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :How much memory a single script may consume before it's forcibly terminated. This may need to be increased for large maps. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :How much memory a single script may consume before it's forcibly terminated. This may need to be increased for large maps STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Service intervals are in percents: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :When enabled, vehicles try to service when their reliability drops by a given percentage of the maximum reliability.{}{}For example, if a vehicle's maximum reliability is 90% and the service interval is 20%, the vehicle will try to service when it reaches 72% reliability. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :When enabled, vehicles try to service when their reliability drops by a given percentage of the maximum reliability.{}{}For example, if a vehicle's maximum reliability is 90% and the service interval is 20%, the vehicle will try to service when it reaches 72% reliability STR_CONFIG_SETTING_SERVINT_TRAINS :Default service interval for trains: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Set the default service interval for new rail vehicles, if no explicit service interval is set for the vehicle @@ -1840,7 +1840,7 @@ STR_CONFIG_SETTING_NOSERVICE :Disable servici STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :When enabled, vehicles do not get serviced if they cannot break down STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Loading speed penalty for trains that are longer than the station: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :When enabled, trains which are too long for the station load more slowly than a train which fits the station. This setting does not affect pathfinding. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :When enabled, trains which are too long for the station load more slowly than a train which fits the station. This setting does not affect pathfinding STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Enable wagon speed limits: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :When enabled, also use speed limits of wagons for deciding the maximum speed of a train @@ -1905,13 +1905,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Year that the n STR_CONFIG_SETTING_STARTING_YEAR :Starting year: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Scoring end year: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Year the game ends for scoring purposes. At the end of this year, the company's score is recorded and the high-score screen is displayed, but the players can continue playing after that.{}If this is before the starting year, the high-score screen is never displayed. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Year the game ends for scoring purposes. At the end of this year, the company's score is recorded and the high-score screen is displayed, but the players can continue playing after that.{}If this is before the starting year, the high-score screen is never displayed STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Never STR_CONFIG_SETTING_ECONOMY_TYPE :Economy type: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Smooth economy makes production changes more often, and in smaller steps. Frozen economy stops production changes and industry closures. This setting may have no effect if industry types are provided by a NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Smooth economy makes production changes more often, and in smaller steps. Frozen economy stops production changes and industry closures. This setting may have no effect if industry types are provided by a NewGRF ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Smooth @@ -1966,7 +1966,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Allowed STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Allowed, custom town layout STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Town cargo generation: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :How much cargo is produced by houses in towns, relative to the overall population of the town.{}Quadratic growth: A town twice the size generates four times as many passengers.{}Linear growth: A town twice the size generates twice the amount of passengers. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :How much cargo is produced by houses in towns, relative to the overall population of the town.{}Quadratic growth: A town twice the size generates four times as many passengers.{}Linear growth: A town twice the size generates twice the amount of passengers ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadratic (original) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear @@ -2007,7 +2007,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Highest resolution sprites to use: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limit the maximum resolution to use for sprites. Limiting sprite resolution will avoid using high resolution graphics even when available. This can help keep the game appearance unified when using a mix of GRF files with and without high resolution graphics. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limit the maximum resolution to use for sprites. Limiting sprite resolution will avoid using high resolution graphics even when available. This can help keep the game appearance unified when using a mix of GRF files with and without high resolution graphics ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2031,33 +2031,33 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Initial city si STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Average size of cities relative to normal towns at start of the game STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Update distribution graph every {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Time between subsequent recalculations of the link graph. Each recalculation calculates the plans for one component of the graph. That means that a value X for this setting does not mean the whole graph will be updated every X seconds. Only some component will. The shorter you set it the more CPU time will be necessary to calculate it. The longer you set it the longer it will take until the cargo distribution starts on new routes. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Time between subsequent recalculations of the link graph. Each recalculation calculates the plans for one component of the graph. That means that a value X for this setting does not mean the whole graph will be updated every X seconds. Only some component will. The shorter you set it the more CPU time will be necessary to calculate it. The longer you set it the longer it will take until the cargo distribution starts on new routes STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Take {STRING} for recalculation of distribution graph -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Time taken for each recalculation of a link graph component. When a recalculation is started, a thread is spawned which is allowed to run for this number of seconds. The shorter you set this the more likely it is that the thread is not finished when it's supposed to. Then the game stops until it is ("lag"). The longer you set it the longer it takes for the distribution to be updated when routes change. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Time taken for each recalculation of a link graph component. When a recalculation is started, a thread is spawned which is allowed to run for this number of seconds. The shorter you set this the more likely it is that the thread is not finished when it's supposed to. Then the game stops until it is ("lag"). The longer you set it the longer it takes for the distribution to be updated when routes change STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distribution mode for passengers: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetric" means that roughly the same number of passengers will go from a station A to a station B as from B to A. "Asymmetric" means that arbitrary numbers of passengers can go in either direction. "Manual" means that no automatic distribution will take place for passengers. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetric" means that roughly the same number of passengers will go from a station A to a station B as from B to A. "Asymmetric" means that arbitrary numbers of passengers can go in either direction. "Manual" means that no automatic distribution will take place for passengers STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distribution mode for mail: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetric" means that roughly the same amount of mail will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of mail can be sent in either direction. "Manual" means that no automatic distribution will take place for mail. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetric" means that roughly the same amount of mail will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of mail can be sent in either direction. "Manual" means that no automatic distribution will take place for mail STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distribution mode for the ARMOURED cargo class: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :The ARMOURED cargo class contains valuables in the temperate, diamonds in the subtropical, or gold in the subarctic climate. NewGRFs may change that. "Symmetric" means that roughly the same amount of that cargo will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of that cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for that cargo. It is recommended to set this to asymmetric or manual when playing subarctic or subtropic, as banks only receive cargo in these climates. For temperate you can also choose symmetric as banks will send valuables back to the origin bank. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :The ARMOURED cargo class contains valuables in the temperate, diamonds in the subtropical, or gold in the subarctic climate. NewGRFs may change that. "Symmetric" means that roughly the same amount of that cargo will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of that cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for that cargo. It is recommended to set this to asymmetric or manual when playing subarctic or subtropic, as banks only receive cargo in these climates. For temperate you can also choose symmetric as banks will send valuables back to the origin bank STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distribution mode for other cargo classes: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetric" means that arbitrary amounts of cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for those cargoes. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetric" means that arbitrary amounts of cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for those cargoes ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetric STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :symmetric STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Distribution accuracy: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :The higher you set this the more CPU time the calculation of the link graph will take. If it takes too long you may notice lag. If you set it to a low value, however, the distribution will be inaccurate, and you may notice cargo not being sent to the places you expect it to go. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :The higher you set this the more CPU time the calculation of the link graph will take. If it takes too long you may notice lag. If you set it to a low value, however, the distribution will be inaccurate, and you may notice cargo not being sent to the places you expect it to go STR_CONFIG_SETTING_DEMAND_DISTANCE :Effect of distance on demands: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :If you set this to a value higher than 0, the distance between the origin station A of some cargo and a possible destination B will have an effect on the amount of cargo sent from A to B. The further away B is from A the less cargo will be sent. The higher you set it, the less cargo will be sent to far away stations and the more cargo will be sent to near stations. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :If you set this to a value higher than 0, the distance between the origin station A of some cargo and a possible destination B will have an effect on the amount of cargo sent from A to B. The further away B is from A the less cargo will be sent. The higher you set it, the less cargo will be sent to far away stations and the more cargo will be sent to near stations STR_CONFIG_SETTING_DEMAND_SIZE :Amount of returning cargo for symmetric mode: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Setting this to less than 100% makes the symmetric distribution behave more like the asymmetric one. Less cargo will be forcibly sent back if a certain amount is sent to a station. If you set it to 0% the symmetric distribution behaves just like the asymmetric one. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Setting this to less than 100% makes the symmetric distribution behave more like the asymmetric one. Less cargo will be forcibly sent back if a certain amount is sent to a station. If you set it to 0% the symmetric distribution behaves just like the asymmetric one STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturation of short paths before using high-capacity paths: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequently there are multiple paths between two given stations. Cargodist will saturate the shortest path first, then use the second shortest path until that is saturated and so on. Saturation is determined by an estimation of capacity and planned usage. Once it has saturated all paths, if there is still demand left, it will overload all paths, prefering the ones with high capacity. Most of the time the algorithm will not estimate the capacity accurately, though. This setting allows you to specify up to which percentage a shorter path must be saturated in the first pass before choosing the next longer one. Set it to less than 100% to avoid overcrowded stations in case of overestimated capacity. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequently there are multiple paths between two given stations. Cargodist will saturate the shortest path first, then use the second shortest path until that is saturated and so on. Saturation is determined by an estimation of capacity and planned usage. Once it has saturated all paths, if there is still demand left, it will overload all paths, prefering the ones with high capacity. Most of the time the algorithm will not estimate the capacity accurately, though. This setting allows you to specify up to which percentage a shorter path must be saturated in the first pass before choosing the next longer one. Set it to less than 100% to avoid overcrowded stations in case of overestimated capacity STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Speed units (land): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Speed units (nautical): {STRING} @@ -2979,11 +2979,11 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Place tr STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Random Trees STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plant trees randomly throughout the landscape STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plant single trees by dragging over the landscape. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plant single trees by dragging over the landscape STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Grove -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plant small forests by dragging over the landscape. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plant small forests by dragging over the landscape STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Forest -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plant large forests by dragging over the landscape. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plant large forests by dragging over the landscape # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Land Generation @@ -3198,11 +3198,11 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Frame Rate STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulation rate: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Number of game ticks simulated per second. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Number of game ticks simulated per second STR_FRAMERATE_RATE_BLITTER :{BLACK}Graphics frame rate: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Number of video frames rendered per second. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Number of video frames rendered per second STR_FRAMERATE_SPEED_FACTOR :{BLACK}Current game speed factor: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}How fast the game is currently running, compared to the expected speed at normal simulation rate. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}How fast the game is currently running, compared to the expected speed at normal simulation rate STR_FRAMERATE_CURRENT :{WHITE}Current STR_FRAMERATE_AVERAGE :{WHITE}Average STR_FRAMERATE_MEMORYUSE :{WHITE}Memory @@ -3731,7 +3731,7 @@ STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Global S STR_STORY_BOOK_SPECTATOR :Global Story Book STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Page {NUM} -STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Jump to a specific page by selecting it in this drop down list. +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Jump to a specific page by selecting it in this drop down list STR_STORY_BOOK_PREV_PAGE :{BLACK}Previous STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Go to previous page STR_STORY_BOOK_NEXT_PAGE :{BLACK}Next @@ -4026,12 +4026,12 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Ungrouped aircr STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groups - click on a group to list all vehicles of this group. Drag and drop groups to arrange hierarchy. +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groups - click on a group to list all vehicles of this group. Drag and drop groups to arrange hierarchy STR_GROUP_CREATE_TOOLTIP :{BLACK}Click to create a group STR_GROUP_DELETE_TOOLTIP :{BLACK}Delete the selected group STR_GROUP_RENAME_TOOLTIP :{BLACK}Rename the selected group STR_GROUP_LIVERY_TOOLTIP :{BLACK}Change livery of the selected group -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Click to protect this group from global autoreplace. Ctrl+Click to also protect sub-groups. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Click to protect this group from global autoreplace. Ctrl+Click to also protect sub-groups STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Delete Group STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Are you sure you want to delete this group and any descendants? diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 9081a8781a..dfd6ca2bff 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1054,9 +1054,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Scale be STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Check this box to scale bevels by interface size STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Use traditional sprite font -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Check this box if you prefer to use the traditional fixed-size sprite font. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Check this box if you prefer to use the traditional fixed-size sprite font STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias fonts -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Check this box to anti-alias resizable fonts. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Check this box to anti-alias resizable fonts STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1275,7 +1275,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Infinite money: STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Allow unlimited spending and disable bankruptcy of companies STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximum initial loan: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account). If set to "No loan", no money will be available unless provided by a Game Script or the "Infinite money" setting. +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account). If set to "No loan", no money will be available unless provided by a Game Script or the "Infinite money" setting STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :No loan @@ -1359,7 +1359,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Slope steepness STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Steepness of a sloped tile for a road vehicle. Higher values make it more difficult to climb a hill STR_CONFIG_SETTING_FORBID_90_DEG :Forbid trains from making 90° turns: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 degree turns occur when a horizontal track is directly followed by a vertical track piece on the adjacent tile, thus making the train turn by 90 degrees when traversing the tile edge instead of the usual 45 degrees for other track combinations. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 degree turns occur when a horizontal track is directly followed by a vertical track piece on the adjacent tile, thus making the train turn by 90 degree when traversing the tile edge instead of the usual 45 degrees for other track combinations STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Allow joining stations not directly adjacent: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Allow adding parts to a station without directly touching the existing parts, by Ctrl+Clicking while placing the new parts @@ -1471,7 +1471,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Starting compan STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Choose starting color for the company STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Starting company secondary color: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Choose starting secondary color for the company, if using a NewGRF that enables it. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Choose starting secondary color for the company, if using a NewGRF that enables it STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Airports never expire: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Enabling this setting makes each airport type stay available forever after its introduction @@ -1495,22 +1495,22 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Vehicles never STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :When enabled, all vehicle models remain available forever after their introduction STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Timekeeping: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Select the timekeeping units of the game. This cannot be changed later.{}{}Calendar-based is the classic OpenTTD experience, with a year consisting of 12 months, and each month having 28-31 days.{}{}In Wallclock-based time, cargo production and financials are instead based on one-minute increments, which is about as long as a 30 day month takes in Calendar-based mode. These are grouped into 12-minute periods, equivalent to a year in Calendar-based mode.{}{}In either mode there is always a classic calendar, which is used for introduction dates of vehicles, houses, and other infrastructure. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Select the timekeeping units of the game. This cannot be changed later.{}{}Calendar-based is the classic OpenTTD experience, with a year consisting of 12 months, and each month having 28-31 days.{}{}In Wallclock-based time, cargo production and financials are instead based on one-minute increments, which is about as long as a 30 day month takes in Calendar-based mode. These are grouped into 12-minute periods, equivalent to a year in Calendar-based mode.{}{}In either mode there is always a classic calendar, which is used for introduction dates of vehicles, houses, and other infrastructure ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendar STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Wallclock STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutes per year: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Choose the number of minutes in a calendar year. The default is 12 minutes. Set to 0 to stop calendar time from changing. This setting does not affect the economic simulation of the game, and is only available when using wallclock timekeeping. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Choose the number of minutes in a calendar year. The default is 12 minutes. Set to 0 to stop calendar time from changing. This setting does not affect the economic simulation of the game, and is only available when using wallclock timekeeping STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (calendar time frozen) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Scale town cargo production: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Scale the cargo production of towns by this percentage. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Scale the cargo production of towns by this percentage STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Scale industry cargo production: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Scale the cargo production of industries by this percentage. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Scale the cargo production of industries by this percentage STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autorenew vehicle when it gets old: {STRING} @@ -1529,7 +1529,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Duration of err STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duration for displaying error messages in a red window. Note that some (critical) error messages are not closed automatically after this time, but must be closed manually STR_CONFIG_SETTING_HOVER_DELAY :Show tooltips: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Delay before tooltips are displayed when hovering the mouse over some interface element. Alternatively tooltips are bound to the right mouse button when this value is set to 0. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Delay before tooltips are displayed when hovering the mouse over some interface element. Alternatively tooltips are bound to the right mouse button when this value is set to 0 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Hover for {COMMA} millisecond{P 0 "" s} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Right click @@ -1541,8 +1541,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Thickness of li STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Width of the line in the graphs. A thin line is more precisely readable, a thicker line is easier to see and colors are easier to distinguish STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Show the NewGRF's name in the build vehicle window: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Add a line to the build vehicle window, showing which NewGRF the selected vehicle comes from. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Show the cargos the vehicles can carry in the list windows {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Add a line to the build vehicle window, showing which NewGRF the selected vehicle comes from +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Show the cargos the vehicles can carry in the list windows: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :If enabled, the vehicle's transportable load will appear above it in the vehicle lists STR_CONFIG_SETTING_LANDSCAPE :Landscape: {STRING} @@ -1561,13 +1561,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industry densit STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Set how many industries should be generated and what level should be maintained during the game STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximum distance from edge for Oil industries: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limit for how far from the map border oil refineries and oil rigs can be constructed. On island maps this ensures they are near the coast. On maps larger than 256 tiles, this value is scaled up. +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limit for how far from the map border oil refineries and oil rigs can be constructed. On island maps this ensures they are near the coast. On maps larger than 256 tiles, this value is scaled up STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snow line height: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Choose at what height snow starts in sub-arctic landscape. Snow also affects industry generation and town growth requirements. Can only be modified via Scenario Editor or is otherwise calculated via "snow coverage" STR_CONFIG_SETTING_SNOW_COVERAGE :Snow coverage: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Choose the approximate amount of snow on the sub-arctic landscape. Snow also affects industry generation and town growth requirements. Only used during map generation. Sea level and coast tiles never have snow. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Choose the approximate amount of snow on the sub-arctic landscape. Snow also affects industry generation and town growth requirements. Only used during map generation. Sea level and coast tiles never have snow STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Desert coverage: {STRING} @@ -1575,7 +1575,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Choose the appr STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Roughness of terrain: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Choose the shape and number of hills. Smooth landscapes have fewer, wider hills, while rough landscapes have more, smaller hills. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Choose the shape and number of hills. Smooth landscapes have fewer, wider hills, while rough landscapes have more, smaller hills ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Very Smooth STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Smooth @@ -1583,7 +1583,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Rough STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Very Rough STR_CONFIG_SETTING_VARIETY :Variety distribution: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Choose if the map contains both mountains and flat areas. The higher the variety, the more differences in elevation between mountainous and flat areas. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Choose if the map contains both mountains and flat areas. The higher the variety, the more differences in elevation between mountainous and flat areas STR_CONFIG_SETTING_RIVER_AMOUNT :River amount: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Choose how many rivers to generate @@ -1630,7 +1630,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Dark green STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Purple STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Cargo flow overlay colors: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Set the color scheme used for the cargo flow overlay. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Set the color scheme used for the cargo flow overlay ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Green to red (original) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Green to blue @@ -1751,10 +1751,10 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Keep building t STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Keep the building tools for bridges, tunnels, etc. open after use STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatically remove signals during track construction: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatically remove signals during track construction if the signals are in the way. Note that this can potentially lead to train crashes. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatically remove signals during track construction if the signals are in the way. Note that this can potentially lead to train crashes STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Fast forward speed limit: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limit on how fast the game goes when fast forward is enabled. 0 = no limit (as fast as your computer allows). Values below 100% slow the game down. The upper-limit depends on the specification of your computer and can vary depending on the game. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limit on how fast the game goes when fast forward is enabled. 0 = no limit (as fast as your computer allows). Values below 100% slow the game down. The upper-limit depends on the specification of your computer and can vary depending on the game STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normal game speed ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :No limit (as fast as your computer allows) @@ -1818,11 +1818,11 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Allow AI comput STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes before scripts are suspended: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximum number of computation steps that a script can take in one turn STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Max memory usage per script: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :How much memory a single script may consume before it's forcibly terminated. This may need to be increased for large maps. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :How much memory a single script may consume before it's forcibly terminated. This may need to be increased for large maps STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Maintenance intervals are in percents: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :When enabled, vehicles try to go for maintenance when their reliability drops by a given percentage of the maximum reliability.{}{}For example, if a vehicle's maximum reliability is 90% and the maintenance interval is 20%, the vehicle will try to go for maintenance when it reaches 72% reliability. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :When enabled, vehicles try to go for maintenance when their reliability drops by a given percentage of the maximum reliability.{}{}For example, if a vehicle's maximum reliability is 90% and the maintenance interval is 20%, the vehicle will try to go for maintenance when it reaches 72% reliability STR_CONFIG_SETTING_SERVINT_TRAINS :Default maintenance interval for trains: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Set the default maintenance interval for new rail vehicles, if no explicit maintenance interval is set for the vehicle @@ -1840,7 +1840,7 @@ STR_CONFIG_SETTING_NOSERVICE :Disable mainten STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :When enabled, vehicles do not get maintained if they cannot break down STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Loading speed penalty for trains that are longer than the station: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :When enabled, trains which are too long for the station load more slowly than a train which fits the station. This setting does not affect pathfinding. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :When enabled, trains which are too long for the station load more slowly than a train which fits the station. This setting does not affect pathfinding STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Enable railroad car speed limits: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :When enabled, also use speed limits of wagons for deciding the maximum speed of a train @@ -1905,13 +1905,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Year that the n STR_CONFIG_SETTING_STARTING_YEAR :Starting year: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Scoring end year: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Year the game ends for scoring purposes. At the end of this year, the company's score is recorded and the high-score screen is displayed, but the players can continue playing after that.{}If this is before the starting year, the high-score screen is never displayed. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Year the game ends for scoring purposes. At the end of this year, the company's score is recorded and the high-score screen is displayed, but the players can continue playing after that.{}If this is before the starting year, the high-score screen is never displayed STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Never STR_CONFIG_SETTING_ECONOMY_TYPE :Economy type: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Smooth economy makes production changes more often, and in smaller steps. Frozen economy stops production changes and industry closures. This setting may have no effect if industry types are provided by a NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Smooth economy makes production changes more often, and in smaller steps. Frozen economy stops production changes and industry closures. This setting may have no effect if industry types are provided by a NewGRF ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Smooth @@ -1966,7 +1966,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Allowed STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Allowed, custom town layout STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Town cargo generation: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :How much cargo is produced by houses in towns, relative to the overall population of the town.{}Quadratic growth: A town twice the size generates four times as many passengers.{}Linear growth: A town twice the size generates twice the amount of passengers. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :How much cargo is produced by houses in towns, relative to the overall population of the town.{}Quadratic growth: A town twice the size generates four times as many passengers.{}Linear growth: A town twice the size generates twice the amount of passengers ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadratic (original) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear @@ -2007,7 +2007,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Highest resolution sprites to use: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limit the maximum resolution to use for sprites. Limiting sprite resolution will avoid using high resolution graphics even when available. This can help keep the game appearance unified when using a mix of GRF files with and without high resolution graphics. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limit the maximum resolution to use for sprites. Limiting sprite resolution will avoid using high resolution graphics even when available. This can help keep the game appearance unified when using a mix of GRF files with and without high resolution graphics ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2031,33 +2031,33 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Initial city si STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Average size of cities relative to normal towns at start of the game STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Update distribution graph every {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Time between subsequent recalculations of the link graph. Each recalculation calculates the plans for one component of the graph. That means that a value X for this setting does not mean the whole graph will be updated every X seconds. Only some component will. The shorter you set it the more CPU time will be necessary to calculate it. The longer you set it the longer it will take until the cargo distribution starts on new routes. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Time between subsequent recalculations of the link graph. Each recalculation calculates the plans for one component of the graph. That means that a value X for this setting does not mean the whole graph will be updated every X seconds. Only some component will. The shorter you set it the more CPU time will be necessary to calculate it. The longer you set it the longer it will take until the cargo distribution starts on new routes STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Take {STRING} for recalculation of distribution graph -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Time taken for each recalculation of a link graph component. When a recalculation is started, a thread is spawned which is allowed to run for this number of seconds. The shorter you set this the more likely it is that the thread is not finished when it's supposed to. Then the game stops until it is ("lag"). The longer you set it the longer it takes for the distribution to be updated when routes change. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Time taken for each recalculation of a link graph component. When a recalculation is started, a thread is spawned which is allowed to run for this number of seconds. The shorter you set this the more likely it is that the thread is not finished when it's supposed to. Then the game stops until it is ("lag"). The longer you set it the longer it takes for the distribution to be updated when routes change STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distribution mode for passengers: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetric" means that roughly the same number of passengers will go from a station A to a station B as from B to A. "Asymmetric" means that arbitrary numbers of passengers can go in either direction. "Manual" means that no automatic distribution will take place for passengers. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetric" means that roughly the same number of passengers will go from a station A to a station B as from B to A. "Asymmetric" means that arbitrary numbers of passengers can go in either direction. "Manual" means that no automatic distribution will take place for passengers STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distribution mode for mail: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetric" means that roughly the same amount of mail will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of mail can be sent in either direction. "Manual" means that no automatic distribution will take place for mail. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetric" means that roughly the same amount of mail will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of mail can be sent in either direction. "Manual" means that no automatic distribution will take place for mail STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distribution mode for the ARMORED cargo class: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :The ARMORED cargo class contains valuables in the temperate, diamonds in the subtropical, or gold in the subarctic climate. NewGRFs may change that. "Symmetric" means that roughly the same amount of that cargo will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of that cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for that cargo. It is recommended to set this to asymmetric or manual when playing subarctic or subtropic, as banks only receive cargo in these climates. For temperate you can also choose symmetric as banks will send valuables back to the origin bank. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :The ARMORED cargo class contains valuables in the temperate, diamonds in the subtropical, or gold in the subarctic climate. NewGRFs may change that. "Symmetric" means that roughly the same amount of that cargo will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of that cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for that cargo. It is recommended to set this to asymmetric or manual when playing subarctic or subtropic, as banks only receive cargo in these climates. For temperate you can also choose symmetric as banks will send valuables back to the origin bank STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distribution mode for other cargo classes: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetric" means that arbitrary amounts of cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for those cargoes. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetric" means that arbitrary amounts of cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for those cargoes ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetric STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :symmetric STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Distribution accuracy: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :The higher you set this the more CPU time the calculation of the link graph will take. If it takes too long you may notice lag. If you set it to a low value, however, the distribution will be inaccurate, and you may notice cargo not being sent to the places you expect it to go. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :The higher you set this the more CPU time the calculation of the link graph will take. If it takes too long you may notice lag. If you set it to a low value, however, the distribution will be inaccurate, and you may notice cargo not being sent to the places you expect it to go STR_CONFIG_SETTING_DEMAND_DISTANCE :Effect of distance on demands: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :If you set this to a value higher than 0, the distance between the origin station A of some cargo and a possible destination B will have an effect on the amount of cargo sent from A to B. The further away B is from A the less cargo will be sent. The higher you set it, the less cargo will be sent to far away stations and the more cargo will be sent to near stations. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :If you set this to a value higher than 0, the distance between the origin station A of some cargo and a possible destination B will have an effect on the amount of cargo sent from A to B. The further away B is from A the less cargo will be sent. The higher you set it, the less cargo will be sent to far away stations and the more cargo will be sent to near stations STR_CONFIG_SETTING_DEMAND_SIZE :Amount of returning cargo for symmetric mode: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Setting this to less than 100% makes the symmetric distribution behave more like the asymmetric one. Less cargo will be forcibly sent back if a certain amount is sent to a station. If you set it to 0% the symmetric distribution behaves just like the asymmetric one. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Setting this to less than 100% makes the symmetric distribution behave more like the asymmetric one. Less cargo will be forcibly sent back if a certain amount is sent to a station. If you set it to 0% the symmetric distribution behaves just like the asymmetric one STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturation of short paths before using high-capacity paths: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequently there are multiple paths between two given stations. Cargodist will saturate the shortest path first, then use the second shortest path until that is saturated and so on. Saturation is determined by an estimation of capacity and planned usage. Once it has saturated all paths, if there is still demand left, it will overload all paths, preferring the ones with high capacity. Most of the time the algorithm will not estimate the capacity accurately, though. This setting allows you to specify up to which percentage a shorter path must be saturated in the first pass before choosing the next longer one. Set it to less than 100% to avoid overcrowded stations in case of overestimated capacity. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequently there are multiple paths between two given stations. Cargodist will saturate the shortest path first, then use the second shortest path until that is saturated and so on. Saturation is determined by an estimation of capacity and planned usage. Once it has saturated all paths, if there is still demand left, it will overload all paths, preferring the ones with high capacity. Most of the time the algorithm will not estimate the capacity accurately, though. This setting allows you to specify up to which percentage a shorter path must be saturated in the first pass before choosing the next longer one. Set it to less than 100% to avoid overcrowded stations in case of overestimated capacity STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Speed units (land): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Speed units (nautical): {STRING} @@ -2979,11 +2979,11 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Place tr STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Random Trees STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plant trees randomly throughout the landscape STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plant single trees by dragging over the landscape. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plant single trees by dragging over the landscape STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Grove -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plant small forests by dragging over the landscape. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plant small forests by dragging over the landscape STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Forest -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plant large forests by dragging over the landscape. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plant large forests by dragging over the landscape # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Land Generation @@ -3198,11 +3198,11 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Frame Rate STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulation rate: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Number of game ticks simulated per second. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Number of game ticks simulated per second STR_FRAMERATE_RATE_BLITTER :{BLACK}Graphics frame rate: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Number of video frames rendered per second. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Number of video frames rendered per second STR_FRAMERATE_SPEED_FACTOR :{BLACK}Current game speed factor: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}How fast the game is currently running, compared to the expected speed at normal simulation rate. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}How fast the game is currently running, compared to the expected speed at normal simulation rate STR_FRAMERATE_CURRENT :{WHITE}Current STR_FRAMERATE_AVERAGE :{WHITE}Average STR_FRAMERATE_MEMORYUSE :{WHITE}Memory @@ -3731,7 +3731,7 @@ STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Global S STR_STORY_BOOK_SPECTATOR :Global Story Book STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Page {NUM} -STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Jump to a specific page by selecting it in this drop down list. +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Jump to a specific page by selecting it in this drop down list STR_STORY_BOOK_PREV_PAGE :{BLACK}Previous STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Go to previous page STR_STORY_BOOK_NEXT_PAGE :{BLACK}Next @@ -4026,12 +4026,12 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Ungrouped aircr STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groups - click on a group to list all vehicles of this group. Drag and drop groups to arrange hierarchy. +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groups - click on a group to list all vehicles of this group. Drag and drop groups to arrange hierarchy STR_GROUP_CREATE_TOOLTIP :{BLACK}Click to create a group STR_GROUP_DELETE_TOOLTIP :{BLACK}Delete the selected group STR_GROUP_RENAME_TOOLTIP :{BLACK}Rename the selected group STR_GROUP_LIVERY_TOOLTIP :{BLACK}Change livery of the selected group -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Click to protect this group from global autoreplace. Ctrl+Click to also protect sub-groups. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Click to protect this group from global autoreplace. Ctrl+Click to also protect sub-groups STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Delete Group STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Are you sure you want to delete this group and any descendants? diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 8d1a3a72dd..9761843e72 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1359,7 +1359,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Mäkien jyrkkyy STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Mäkien jyrkkyys ajoneuvoille. Korkeammat arvot tekevät mäkien nousemisesta vaikeampaa STR_CONFIG_SETTING_FORBID_90_DEG :90 asteen käännökset kielletty junilta: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 asteen käännöksiä esiintyy kun vaakasuuntaista rataa seuraa pystysuuntainen rata viereisellä ruudulla, tämä vaatii junan kääntymään 90 astetta ruutujen reunalla normaalin 45 asteen sijasta. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 asteen käännöksiä esiintyy, kun vaakasuuntaista raidetta seuraa välittömästi pystysuuntainen raidepala viereisessä ruudussa, jolloin juna joutuu kääntymään 90 astetta kulkiessaan ruudun reunan yli muiden raideyhdistelmien tavanomaisen 45 asteen sijaan STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Salli ei-vierekkäisten asemien yhdistäminen: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Mahdollistaa aseman osien rakentamisen vaikka ne eivät olisi kosketuksissa olemassaoleviin aseman osiin painamalla Ctrl-näppäintä rakennettaessa @@ -1508,7 +1508,7 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (kalenteriaika jäädytetty) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Skaalaa taajamarahdin tuotantoa: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Skaalaa kuntien tuottaman rahdin määrää tällä prosenttiluvulla. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Skaalaa kuntien tuottaman rahdin määrää tällä prosenttiluvulla STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Skaalaa teollisuusrahdin tuotantoa: {STRING} STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skaalaa tuotantolaitosten tuottaman rahdin määrää tällä prosenttiluvulla. STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}{NBSP}% @@ -1529,7 +1529,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Virheilmoituste STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Aika virheilmoitusten näyttämiseen punaisessa ikkunassa. Huomaa, että jotkut (kriittiset) virheilmoitukset eivät sulkeudu automaattisesti tämän ajan jälkeen, vaan ne on suljettava käsin STR_CONFIG_SETTING_HOVER_DELAY :Näytä työkaluvihjeet: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Viive ennen työkaluvihjeen näyttämistä, kun hiiren kursoria pidetään käyttöliittymäelementin päällä. Vaihtoehtoisesti työkaluvihjeen saa myös näkymiin painamalla hiiren oikeata painiketta, kun arvoksi on määritetty 0. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Viive ennen työkaluvihjeen näyttämistä, kun hiiren osoitinta pidetään käyttöliittymäelementin päällä. Vaihtoehtoisesti työkaluvihjeen saa myös näkyviin painamalla hiiren oikeaa painiketta, kun arvoksi on määritetty 0 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Pidä hiirtä päällä {COMMA} millisekunti{P 0 "" a} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Hiiren oikea painike @@ -1541,8 +1541,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Viivojen paksuu STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Viivan leveys kuvaajissa. Ohut viiva on tarkasti luettavissa kun taas paksumpi viiva on helpompi nähdä ja sen värit ovat helpommin havaittavissa STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Näytä NewGRF:n nimi kulkuneuvoikkunassa: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Lisää kulkuneuvovalikoimaikkunaan rivin, joka kertoo mistä NewGRF:stä valittu kulkuneuvo on peräisin. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Näytä kulkuneuvojen kuljetettavissa olevat rahdit listaikkunoissa {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Lisää kulkuneuvovalikoimaikkunaan rivin, joka kertoo mistä NewGRF:stä valittu kulkuneuvo on peräisin +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Näytä kulkuneuvojen kuljetettavissa olevat rahdit listaikkunoissa: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Mikäli käytössä, kuljetettavissa oleva rahti näytetään kulkuneuvolistoissa kulkuneuvon yllä STR_CONFIG_SETTING_LANDSCAPE :Maasto: {STRING} @@ -1561,13 +1561,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Teollisuuden m STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Määritä, kuinka paljon teollisuutta tulisi luoda ja millä tasolla teollisuuden tulisi pysytellä pelin aikana STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Suurin sallittu etäisyys kartan reunoilta öljyteollisuudelle: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Öljynjalostamojen ja öljynporauslauttojen suurin etäisyys kartan reunasta. Saarikartoilla tämä takaa sen, että ne ovat lähellä rannikkoa. Yli 256 ruudun kartoilla tämä arvo suhteutetaan kartan kokoon. +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Öljynjalostamojen ja öljynporauslauttojen suurin etäisyys kartan reunasta. Saarikartoilla tämä takaa sen, että ne ovat lähellä rannikkoa. Yli 256 ruudun kartoilla tämä arvo suhteutetaan kartan kokoon STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Lumirajan korkeus: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Säätää lumirajan korkeutta pohjoisessa maastossa. Lumi vaikuttaa myös teollisuuslaitosten luontiin ja kuntien kasvuedellytyksiin. Voidaan muuttaa vain skenaariomuokkaimessa, lasketaan muutoin ”lumen peiton” perusteella STR_CONFIG_SETTING_SNOW_COVERAGE :Lumen peitto: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Säätää lumen määrän suuruusluokkaa pohjoisessa maastossa. Lumi vaikuttaa myös teollisuuslaitosten luontiin ja kuntien kasvuedellytyksiin. Käytetään vain karttaa luotaessa. Merenpinnan tasolla sijaitsevat ruudut ja rannikkoruudut ovat aina lumettomat. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Säätää lumen määrän suuruusluokkaa pohjoisessa maastossa. Lumi vaikuttaa myös teollisuuslaitosten luontiin ja kuntien kasvuedellytyksiin. Käytetään vain karttaa luotaessa. Merenpinnan tasolla sijaitsevat ruudut ja rannikkoruudut ovat aina lumettomat STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}{NBSP}% STR_CONFIG_SETTING_DESERT_COVERAGE :Aavikon peitto: {STRING} @@ -1751,7 +1751,7 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Pidä rakennust STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Pidä siltojen, tunneleiden, jne. rakennustyökalut käytössä käytön jälkeen STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Poista automaattisesti opastimia rautateitä rakennettaessa: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Poista automaattisesti opastimia, jos ne ovat rautatien rakentamisen tiellä. Huomaa, että tämä saattaa johtaa junien yhteentörmäyksiin. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Poista automaattisesti opastimia, jos ne ovat rautatien rakentamisen tiellä. Huomaa, että tämä saattaa johtaa junien yhteentörmäyksiin STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Nopeutetun pelin enimmäisnopeus: {STRING} STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Yläraja pelin nopeudelle, kun pelin nopeutus on käytössä. 0 = ei rajoitusta (niin nopeasti kuin tietokoneesi sallii). Alle 100 %:n arvot hidastavat peliä. Yläraja riippuu tietokoneesi ominaisuuksista ja voi vaihdella pelistä riippuen. @@ -1822,7 +1822,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Kuinka paljon m STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Huoltovälit ovat prosentteina: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Kun tämä on valittuna, kulkuneuvot yrittävät mennä huoltoon niiden luotettavuuden laskettua annetun prosenttiosuuden verran enimmäisluotettavuudesta.{}{}Jos esimerkiksi kulkuneuvon enimmäisluotettavuus on 90 % ja huoltoväli 20 %, kulkuneuvo pyrkii huoltoon luotettavuuden laskettua 72 %:iin. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Kun tämä on valittuna, kulkuneuvot yrittävät mennä huoltoon niiden luotettavuuden laskettua annetun prosenttiosuuden verran enimmäisluotettavuudesta.{}{}Jos esimerkiksi kulkuneuvon enimmäisluotettavuus on 90 % ja huoltoväli 20 %, kulkuneuvo pyrkii huoltoon luotettavuuden laskettua 72 %:iin STR_CONFIG_SETTING_SERVINT_TRAINS :Junien oletushuoltoväli: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Määritä oletushuoltoväli uusille junille, mikäli kulkuneuvolle ei ole määritelty erillistä huoltoväliä @@ -1966,7 +1966,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Sallittu STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Sallittu, oma tiekaava STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Taajamarahdin luonti: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Talojen tuottaman rahdin määrä suhteessa kunnan asukaslukuun.{}Neliöllinen kasvu: Kaksinkertainen asukasmäärä tuottaa matkustajia nelinkertaisesti.{}Lineaarinen kasvu: Kaksinkertainen asukasmäärä tuottaa matkustajia kaksinkertaisesti. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Talojen tuottaman rahdin määrä suhteessa kunnan asukaslukuun.{}Neliöllinen kasvu: Kaksinkertainen asukasmäärä tuottaa matkustajia nelinkertaisesti.{}Lineaarinen kasvu: Kaksinkertainen asukasmäärä tuottaa matkustajia kaksinkertaisesti ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Neliöllinen (alkuperäinen) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineaarinen @@ -2031,18 +2031,18 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Kasvukerroin al STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Kaupunkien keskimääräinen koko suhteessa muihin kuntiin pelin alussa STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Yhteyskuvaajan päivitysväli: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Yhteyskuvaajan uudelleenlaskentojen välinen aika. Jokainen uudelleenlaskenta laskee suunnitelmat kuvaajan yhdelle osalle. Tämän asetuksen arvo X ei siis tarkoita, että koko kuvaaja päivittyisi X sekunnin välein, vaan ainoastaan sen yksi osa. Mitä lyhyemmäksi asetat tämän ajan, sitä enemmän suoritinaikaa kuluu laskentaan. Mitä pitemmäksi asetat ajan, sitä pitempään kestää rahdin jakautumisen alkaminen uusille reiteille. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Yhteyskuvaajan uudelleenlaskentojen välinen aika. Jokainen uudelleenlaskenta laskee suunnitelmat kuvaajan yhdelle osalle. Tämän asetuksen arvo X ei siis tarkoita, että koko kuvaaja päivittyisi X sekunnin välein, vaan ainoastaan sen yksi osa. Mitä lyhyemmäksi asetat tämän ajan, sitä enemmän suoritinaikaa kuluu laskentaan. Mitä pitemmäksi asetat ajan, sitä pitempään kestää rahdin jakautumisen alkaminen uusille reiteille STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Käytä {STRING} yhteyskuvaajan uudelleenlaskentaan -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Yhteyskuvaajan kunkin osan uudelleenlaskentaan käytettävä aika. Uudelleenlaskennan alkaessa käynnistetään säie, jonka annetaan toimia näin monta sekuntia. Mitä lyhyemmäksi asetat tämän ajan, sitä todennäköisemmin säie ei ehdi päättymään ajoissa, jolloin peli pysähtyy (”jumii”) säikeen valmistumiseen asti. Mitä pitemmäksi asetat ajan, sitä pitempään rahdin jakautumisen päivittyminen kestää reittien muuttuessa. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Yhteyskuvaajan kunkin osan uudelleenlaskentaan käytettävä aika. Uudelleenlaskennan alkaessa käynnistetään säie, jonka annetaan toimia näin monta sekuntia. Mitä lyhyemmäksi asetat tämän ajan, sitä todennäköisemmin säie ei ehdi päättymään ajoissa, jolloin peli pysähtyy (”jumii”) säikeen valmistumiseen asti. Mitä pitemmäksi asetat ajan, sitä pitempään rahdin jakautumisen päivittyminen kestää reittien muuttuessa STR_CONFIG_SETTING_DISTRIBUTION_PAX :Matkustajien jakautuminen: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :”Symmetrinen” tarkoittaa, että suunnilleen sama määrä matkustajia kulkee asemalta A asemalle B kuin asemalta B asemalle A. ”Epäsymmetrinen” tarkoittaa, että matkustajia voi kulkea mielivaltainen määrä kumpaankin suuntaan. ”Manuaalinen” tarkoittaa, että automaattista jakautumista ei sovelleta matkustajiin. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :”Symmetrinen” tarkoittaa, että suunnilleen sama määrä matkustajia kulkee asemalta A asemalle B kuin asemalta B asemalle A. ”Epäsymmetrinen” tarkoittaa, että matkustajia voi kulkea mielivaltainen määrä kumpaankin suuntaan. ”Manuaalinen” tarkoittaa, että automaattista jakautumista ei sovelleta matkustajiin STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Postin jakautuminen: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :”Symmetrinen” tarkoittaa, että suunnilleen sama määrä postia kulkee asemalta A asemalle B kuin asemalta B asemalle A. ”Epäsymmetrinen” tarkoittaa, että postia voi kulkea mielivaltainen määrä kumpaankin suuntaan. ”Manuaalinen” tarkoittaa, että automaattista jakautumista ei sovelleta postiin. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :”Symmetrinen” tarkoittaa, että suunnilleen sama määrä postia kulkee asemalta A asemalle B kuin asemalta B asemalle A. ”Epäsymmetrinen” tarkoittaa, että postia voi kulkea mielivaltainen määrä kumpaankin suuntaan. ”Manuaalinen” tarkoittaa, että automaattista jakautumista ei sovelleta postiin STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Arvokuljetusten jakautuminen: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Arvokuljetuksiin kuuluvat arvotavarat lauhkeassa ilmastossa, timantit subtrooppisessa ilmastossa ja kulta pohjoisessa ilmastossa. NewGRF:t voivat kuitenkin muuttaa näitä rahteja. ”Symmetrinen” tarkoittaa, että suunnilleen sama määrä rahtia lähetetään asemalta A asemalle B kuin asemalta B asemalle A. ”Epäsymmetrinen” tarkoittaa, että tätä rahtia lähetetään mielivaltainen määrä kumpaankin suuntaan. ”Manuaalinen” tarkoittaa, että automaattista jakautumista ei sovelleta tähän rahtiin. Suositeltavia asetuksia ovat ”epäsymmetrinen” tai ”manuaalinen” pelattaessa pohjoisessa tai subtrooppisessa ilmastossa, sillä näissä pankit ottavat ainoastaan vastaan rahtia. Lauhkeassa ilmastossa pelatessa voidaan myös valita ”symmetrinen”, sillä pankit myös lähettävät arvotavaroita takaisin lähtöpankille. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Arvokuljetuksiin kuuluvat arvotavarat lauhkeassa ilmastossa, timantit subtrooppisessa ilmastossa ja kulta pohjoisessa ilmastossa. NewGRF:t voivat kuitenkin muuttaa näitä rahteja. ”Symmetrinen” tarkoittaa, että suunnilleen sama määrä rahtia lähetetään asemalta A asemalle B kuin asemalta B asemalle A. ”Epäsymmetrinen” tarkoittaa, että tätä rahtia voidaan lähettää mielivaltainen määrä kumpaankin suuntaan. ”Manuaalinen” tarkoittaa, että automaattista jakautumista ei sovelleta tähän rahtiin. Suositeltavia asetuksia ovat ”epäsymmetrinen” tai ”manuaalinen” pelattaessa pohjoisessa tai subtrooppisessa ilmastossa, sillä näissä pankit ottavat ainoastaan vastaan rahtia. Lauhkeassa ilmastossa pelatessa voidaan myös valita ”symmetrinen”, sillä pankit myös lähettävät arvotavaroita takaisin lähtöpankille STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Muiden rahtityyppien jakautuminen: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :”Epäsymmetrinen” tarkoittaa, että rahtia lähetetään mielivaltainen määrä kumpaankin suuntaan. ”Manuaalinen” tarkoittaa, että automaattista jakautumista ei sovelleta näihin rahteihin. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :”Epäsymmetrinen” tarkoittaa, että rahtia voidaan lähettää mielivaltainen määrä kumpaankin suuntaan. ”Manuaalinen” tarkoittaa, että automaattista jakautumista ei sovelleta näihin rahteihin ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuaalinen STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :epäsymmetrinen @@ -2052,9 +2052,9 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Jakautumisen ta STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Mitä suuremmaksi tämä asetus on määritetty, sitä enemmän prosessoriaikaa yhteyskuvaajan laskemiseen kuluu. Mikäli tähän kuluu liian paljon aikaa, saatat havaita pelin nykimistä. Jos arvo on määritetty liian pieneksi, jakauman laskeminen ei ole tarkka ja rahtia ei välttämättä lähetetä odotetuille asemille. STR_CONFIG_SETTING_DEMAND_DISTANCE :Välimatkan vaikutus kysyntään: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Mikäli asetuksen arvo on määritelty suuremmaksi kuin 0, alkuperäisen aseman A ja mahdollisen määränpään B välimatkalla on vaikutus A:sta B:hen lähetetyn rahdin määrään. Mitä kauempana B on A:sta, sitä vähemmän rahtia lähetetään. Mitä suuremmaksi tämä asetus on määritetty, sitä vähemmän rahtia lähetetään kaukana oleville ja enemmän lähellä oleville asemille. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Mikäli tämä arvo on asetettu suuremmaksi kuin 0, rahdin lähtöaseman A ja mahdollisen määränpään B välimatka vaikuttaa A:sta B:hen lähetetyn rahdin määrään. Mitä kauempana B on A:sta, sitä vähemmän rahtia lähetetään. Mitä suurempi tämän asetuksen arvo on, sitä vähemmän rahtia lähetetään kaukana oleville asemille ja sitä enemmän lähellä oleville STR_CONFIG_SETTING_DEMAND_SIZE :Palautettavan rahdin määrä symmetrisessä tilassa: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Mikäli asetuksen arvoksi on määritetty alle 100{NBSP}%, symmetrinen jakauma toimii enemmän epäsymmetrisen jakauman tavoin, ja vähemmän rahtia pakotetaan lähetettäväksi takaisin alkuperäiselle asemalle. Jos arvoksi määritetään 0{NBSP}%, symmetrinen jakauma toimii täysin epäsymmetrisen jakauman tavoin. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Mikäli asetuksen arvoksi on määritetty alle 100{NBSP}%, symmetrinen jakauma toimii enemmän epäsymmetrisen jakauman tavoin, ja vähemmän rahtia pakotetaan lähetettäväksi takaisin alkuperäiselle asemalle. Jos arvoksi määritetään 0{NBSP}%, symmetrinen jakauma toimii täysin epäsymmetrisen jakauman tavoin STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Lyhyiden reittien kuormittuminen ennen vapaampien reittien käyttämistä: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Kahden aseman välillä on usein useita reittejä. Lyhintä reittiä käytetään ensisijaisesti, toiseksi lyhintä ensimmäisen kuormittuessa ja niin edelleen. Kuormitus määritellään arvioidun kapasiteetin ja suunnitellun käytön mukaan. Kaikkien reittien ollessa kuormittuneita reittejä aletaan ylikuormittaa, suurimman kapasiteetin omaavista reiteista aloittaen. Algoritmi ei kuitenkaan aina arvioi kapasiteettia oikein. Tämä asetus mahdollistaa reitin kuormitustason määrittämisen ennen seuraavan reitin käyttämistä. Määritä arvoksi vähemmän kuin 100{NBSP}% välttääksesi ylikuormittuneita asemia, jos kapasiteetti yliarvioidaan. diff --git a/src/lang/french.txt b/src/lang/french.txt index 3e695c041a..1c7cf1b157 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1055,9 +1055,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Mettre STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Cochez cette case pour mettre les bordures à l'échelle avec la taille de l'interface STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Utiliser la police d'écriture par défaut -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Cochez cette case si vous préferez utiliser la police d'écriture par défaut. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Cochez cette case si vous préferez utiliser la police d'écriture par défaut STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Polices d'écriture supportant l'anti-crénelage -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Cochez cette case pour activer l'anti-crénelage sur les polices d'écriture à taille variable. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Cochez cette case pour activer l'anti-crénelage sur les polices d'écriture à taille variable STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1276,7 +1276,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Argent infini{N STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Autoriser les dépenses illimitées et désactiver la banqueroute des compagnies STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Emprunt initial maximum{NBSP}: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Montant maximum qu'une compagnie peut emprunter (sans tenir compte de l'inflation). Si ce paramètre est défini sur "Pas de prêt", alors aucun argent ne sera disponible tant qu'un script de jeu ne le fournira pas ou que le paramètre "Argent infini" ne sera pas activé. +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Montant maximum qu'une compagnie peut emprunter (sans tenir compte de l'inflation). Si ce paramètre est défini sur "Pas de prêt", alors aucun argent ne sera disponible tant qu'un script de jeu ne le fournira pas ou que le paramètre "Argent infini" ne sera pas activé STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Pas d'emprunt @@ -1360,7 +1360,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Inclinaison des STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Inclinaison d'une case en pente pour un véhicule routier. Les valeurs les plus hautes rendent l’ascension plus difficile STR_CONFIG_SETTING_FORBID_90_DEG :Interdire aux trains les virages à 90°{NBSP}: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Les virages à 90° se produisent lorsqu'une voie horizontale est directement suivie par une voie verticale, impliquant que le train tourne de 90° en traversant la bordure de la case au lieu des 45° habituels pour les autres combinaisons de voies. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Les virages à 90° se produisent lorsqu'une voie horizontale est directement suivie par une voie verticale, impliquant que le train tourne de 90° en traversant la bordure de la case au lieu des 45° habituels pour les autres combinaisons de voies STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permettre de joindre des stations non adjacentes{NBSP}: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Autoriser l'ajout à une station de morceaux ne touchant pas directement les morceaux existants, en utilisant Ctrl lors du placement des nouveaux morceaux. @@ -1472,7 +1472,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Couleur de la c STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Choisir la couleur de démarrage pour la compagnie STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Seconde couleur de la compagnie au démarrage{NBSP}: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Choisir une seconde couleur pour le démarrage de la compagnie, si un NewGRF l'utilise. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Choisir une seconde couleur pour le démarrage de la compagnie, si un NewGRF l'utilise STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Les aéroports n'expirent jamais{NBSP}: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Activer ce paramètre fait que chaque type d'aéroports reste toujours disponible après son introduction @@ -1496,22 +1496,22 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Les véhicules STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Quand il est actif, tous les modèles de véhicule restent disponibles pour toujours après leur introduction STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Mesure du temps{NBSP}: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Sélectionner les unités de mesure du temps pour la partie. Ce choix ne peut pas être modifié par la suite.{}{}"Calendrier" correspond à l’expérience classique d'OpenTTD, avec une année de 12 mois et chaque mois ayant de 28 à 31 jours.{}{}Quand le temps est basé sur la "pendule", la production de marchandises et les finances sont basées sur des incréments d'une minute, équivalent à des mois de 30 jours dans le mode "calendrier". Ceux-ci sont groupés par période de 12 minutes, équivalent à une année dans le mode "calendrier".{}{}Quelque soit le mode, il y a toujours un calendrier classique, utilisé pour les dates d'introduction des véhicules, maisons, et autres infrastructures. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Sélectionner les unités de mesure du temps pour la partie. Ce choix ne peut pas être modifié par la suite.{}{}"Calendrier" correspond à l’expérience classique d'OpenTTD, avec une année de 12 mois et chaque mois ayant de 28 à 31 jours.{}{}Quand le temps est basé sur la "pendule", la production de marchandises et les finances sont basées sur des incréments d'une minute, équivalent à des mois de 30 jours dans le mode "calendrier". Ceux-ci sont groupés par période de 12 minutes, équivalent à une année dans le mode "calendrier".{}{}Quelque soit le mode, il y a toujours un calendrier classique, utilisé pour les dates d'introduction des véhicules, maisons, et autres infrastructures ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendrier STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Pendule STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutes par année{NBSP}: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Sélectionner le nombre de minutes dans une année calendaire. La valeur par défaut est 12 minutes.Régler sur 0 pour arrêter la progression du calendrier. Ce paramètre n'affecte pas la simulation économique du jeu, et il n'est disponible qu'en utilisant le mode "pendule". +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Sélectionner le nombre de minutes dans une année calendaire. La valeur par défaut est 12 minutes.Régler sur 0 pour arrêter la progression du calendrier. Ce paramètre n'affecte pas la simulation économique du jeu, et il n'est disponible qu'en utilisant le mode "pendule" STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (calendrier gelé) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Échelle de production de marchandise des villes{NBSP}: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Modifier la production de marchandise des villes de ce pourcentage. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Modifier la production de marchandise des villes de ce pourcentage STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Échelle de production de marchandise des industries{NBSP}: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Modifier la production de marchandise des industries de ce pourcentage. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Modifier la production de marchandise des industries de ce pourcentage STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Renouveler automatiquement les véhicules vieillissants{NBSP}: {STRING} @@ -1530,7 +1530,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Temps d'afficha STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Durée pour l'affichage des messages d'erreur dans une fenêtre rouge. Noter que certains messages d'erreur (critique) ne sont pas fermés automatiquement après ce délai, mais doivent être fermés manuellement STR_CONFIG_SETTING_HOVER_DELAY :Affichage des infobulles{NBSP}: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Délai avant que les infobulles soient affichées lorsque la souris survole certains éléments de l'interface. Les infobulles peuvent également être affectées au bouton droit de la souris en réglant cette valeur à 0. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Délai avant que les infobulles soient affichées lorsque la souris survole certains éléments de l'interface. Les infobulles peuvent également être affectées au bouton droit de la souris en réglant cette valeur à 0 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Survoler pendant {COMMA} milliseconde{P 0 "" s} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Clic droit @@ -1542,8 +1542,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Épaisseur des STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Épaisseur de la ligne dans les graphiques. Une ligne fine est lisible plus précisément, une ligne épaisse est plus facile à voir et les couleurs sont plus facile à distinguer STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Afficher le nom du NewGRF dans la fenêtre d'achat des véhicules{NBSP}: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Ajoute une ligne à la fenêtre d'achat des véhicules, montrant de quel NewGRF provient le véhicule sélectionné. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Afficher les cargaisons que peuvent transporter les véhicules dans les fenêtres de liste {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Ajoute une ligne à la fenêtre d'achat des véhicules, montrant de quel NewGRF provient le véhicule sélectionné +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Afficher les cargaisons que peuvent transporter les véhicules dans les fenêtres de liste{NBSP}: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Quand il est actif, ce qu'un véhicule peut transporter est affiché au dessus de lui dans les listes de véhicules STR_CONFIG_SETTING_LANDSCAPE :Paysage{NBSP}: {STRING} @@ -1562,13 +1562,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densité des in STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Définit combien d'industries doivent être générée et quel niveau doit être maintenu pendant la partie STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distance maximum depuis les bords pour les industries pétrolières{NBSP}: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limite de distance par rapport au bord de la carte où les raffineries et les plateformes pétrolières peuvent être construites. Sur les cartes d'îles cela assure qu'elles sont près de la côte. Sur les cartes plus large que 256 tuiles, cette valeur est mise à l'échelle. +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limite de distance par rapport au bord de la carte où les raffineries et les plateformes pétrolières peuvent être construites. Sur les cartes d'îles cela assure qu'elles sont près de la côte. Sur les cartes plus large que 256 tuiles, cette valeur est mise à l'échelle STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altitude d'enneigement{NBSP}: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Chosir à quelle altitude la neige commence dans le climat sub-arctique. La neige affecte aussi la génération des industries et les exigences pour la croissance des villes. Ne peut être modifié que via l'éditeur de scénario autrement il est calculé via "couverture de neige" STR_CONFIG_SETTING_SNOW_COVERAGE :Couverture de neige: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Contrôle la quantité approximative de neige sur le paysage sub-arctique. La neige affecte également la création d'industries et les besoins des villes pour croître. Seulement utilisé lors de la création de la carte. L'eau et les côtes ne seront jamais enneigées. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Contrôle la quantité approximative de neige sur le paysage sub-arctique. La neige affecte également la création d'industries et les besoins des villes pour croître. Seulement utilisé lors de la création de la carte. L'eau et les côtes ne seront jamais enneigées STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Couverture du désert: {STRING} @@ -1576,7 +1576,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Choisir la quan STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Rugosité du terrain{NBSP}: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Choisir la forme et le nombre de collines. Les paysages doux ont des collines basses et larges, tandis que les paysages rugueux ont de plus petites collines. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Choisir la forme et le nombre de collines. Les paysages doux ont des collines basses et larges, tandis que les paysages rugueux ont de plus petites collines ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Très lisse STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Lisse @@ -1584,7 +1584,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Rugueux STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Très rugueux STR_CONFIG_SETTING_VARIETY :Distribution de variété{NBSP}: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Contrôle si la carte contient à la fois des montagnes et des plaines. Plus la valeur est élevée, plus la différence d'élévation entre le plateau montagneux et les plaines sera importante. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Contrôle si la carte contient à la fois des montagnes et des plaines. Plus la valeur est élevée, plus la différence d'élévation entre le plateau montagneux et les plaines sera importante STR_CONFIG_SETTING_RIVER_AMOUNT :Quantité de rivières{NBSP}: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Choisir combien de rivières générer @@ -1631,7 +1631,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Vert foncé STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violet STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Couleurs du flux de marchandises{NBSP}: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Définir le jeu de couleur utilisé pour l'affichage des flux de marchandises. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Définir le jeu de couleur utilisé pour l'affichage des flux de marchandises ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Vert à rouge (original) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Vert à bleu @@ -1752,10 +1752,10 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Conserver les o STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Garde les outils de construction de ponts, tunnels, etc. ouverts après usage STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Retire automatiquement les signaux durant la construction de la voie ferrée: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Retire automatiquement les signaux durant la construction de la voie ferrée si les signaux sont sur le chemin. Il est à noter que cela peut potentiellement mener à des accidents de trains. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Retire automatiquement les signaux durant la construction de la voie ferrée si les signaux sont sur le chemin. Il est à noter que cela peut potentiellement mener à des accidents de trains STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Seuil de vitesse d'avancement rapide: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limite de la vitesse du jeu lorsque l'avance rapide est activée. 0 = pas de limite (aussi rapidement que votre ordinateur le permet). Les valeurs inférieures à 100% ralentissent le jeu. Les limites supérieures dépendent des spécifications de votre ordinateur et peuvent varier en fonction du jeu. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limite de la vitesse du jeu lorsque l'avance rapide est activée. 0 = pas de limite (aussi rapidement que votre ordinateur le permet). Les valeurs inférieures à 100% ralentissent le jeu. Les limites supérieures dépendent des spécifications de votre ordinateur et peuvent varier en fonction du jeu STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% de la vitesse normal ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Aucune limite (aussi rapidement que votre ordinateur le permet) @@ -1819,11 +1819,11 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Autorise les In STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Nombre d'opcodes avant d'interrompre les scripts{NBSP}: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Nombre maximum d'opérations qu'un script peut effectuer en un tour STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Utilisation max de la mémoire par script{NBSP}: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Quantité de mémoire qu'un seul script peut consommer avant d'être terminé de force. Peut nécessiter d'être augmenté pour les grandes cartes. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Quantité de mémoire qu'un seul script peut consommer avant d'être terminé de force. Peut nécessiter d'être augmenté pour les grandes cartes STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} Mio STR_CONFIG_SETTING_SERVINT_ISPERCENT :Les intervalles de service sont en pourcentage{NBSP}: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Lorsqu'il est activé, les véhicules essaient d'être entretenus quand leur fiabilité passe sous le pourcentage donné de la fiabilité maximum.{}{}Par exemple, si la fiabilité maximum d'un véhicule est 90% et l'intervalle d'entretien 20%, le véhicule essayera d'être entretenu quand sa fiabilité atteindra 72%. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Lorsqu'il est activé, les véhicules essaient d'être entretenus quand leur fiabilité passe sous le pourcentage donné de la fiabilité maximum.{}{}Par exemple, si la fiabilité maximum d'un véhicule est 90% et l'intervalle d'entretien 20%, le véhicule essayera d'être entretenu quand sa fiabilité atteindra 72% STR_CONFIG_SETTING_SERVINT_TRAINS :Intervalle d'entretien par défaut pour les trains{NBSP}: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Définit l'intervalle d'entretien par défaut des nouveaux véhicules ferroviaires, si aucun intervalle d'entretien n'est défini pour le véhicule @@ -1841,7 +1841,7 @@ STR_CONFIG_SETTING_NOSERVICE :Désactiver l'e STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Lorsqu'il est activé, les véhicules ne sont pas entretenus s'ils ne peuvent pas tomber en panne STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Pénalité de vitesse de chargement pour les trains plus long que les stations: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quand activé, un train qui est trop long pour une station se charge plus lentement qu'un train qui a la même taille que la station. Ce paramètre n'affecte pas la recherche de chemin. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quand activé, un train qui est trop long pour une station se charge plus lentement qu'un train qui a la même taille que la station. Ce paramètre n'affecte pas la recherche de chemin STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Activer la vitesse limite des wagons{NBSP}: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Lorsqu'il est activé, utiliser la vitesse limite des wagons pour déterminer la vitesse maximum d'un train @@ -1906,13 +1906,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Année à parti STR_CONFIG_SETTING_STARTING_YEAR :Année de départ{NBSP}: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Année de fin du jeu{NBSP}: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :À la fin de cette année, le score de la compagnie est enregistré et la fenêtre des meilleurs scores est affichée. Il est quand même possible de continuer de jouer après, mais le score ne sera pas enregistré.{}Si le jeu commence après cette année, les meilleurs scores ne sont jamais affichés. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :À la fin de cette année, le score de la compagnie est enregistré et la fenêtre des meilleurs scores est affichée. Il est quand même possible de continuer de jouer après, mais le score ne sera pas enregistré.{}Si le jeu commence après cette année, les meilleurs scores ne sont jamais affichés STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Jamais STR_CONFIG_SETTING_ECONOMY_TYPE :Type d'économie{NBSP}: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Une économie stable entraîne des changements de production plus fréquents, mais de plus faible intensité. Une économie gelée bloque les changements de production et les fermetures d'industries. Ce paramètre peut n'avoir aucun effet si les types d'industries proviennent d'un NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Une économie stable entraîne des changements de production plus fréquents, mais de plus faible intensité. Une économie gelée bloque les changements de production et les fermetures d'industries. Ce paramètre peut n'avoir aucun effet si les types d'industries proviennent d'un NewGRF ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Stable @@ -1967,7 +1967,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Autorisé STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Autorisé, y compris l'agencement personnalisé des routes STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Génération des marchandises des villes{NBSP}: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Combien de marchandises sont produites par les maisons dans les villes, relativement à la population globale de la ville.{}Croissance quadratique{NBSP}: une ville deux fois plus grande génère quatre fois plus de passagers.{}Croissance linéaire{NBSP}: une ville deux fois plus grande génère deux fois plus de passagers. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Combien de marchandises sont produites par les maisons dans les villes, relativement à la population globale de la ville.{}Croissance quadratique{NBSP}: une ville deux fois plus grande génère quatre fois plus de passagers.{}Croissance linéaire{NBSP}: une ville deux fois plus grande génère deux fois plus de passagers ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadratique (original) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linéaire @@ -2008,7 +2008,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Résolution maximale des sprites{NBSP}: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limite la résolution des graphismes. Même si des sprites de plus haute résolution sont disponibles, ils ne seront pas utilisés. Cela peut aider à garder un aspect cohérent quand plusieurs fichiers GRF avec des résolutions différentes sont utilisés. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limite la résolution des graphismes. Même si des sprites de plus haute résolution sont disponibles, ils ne seront pas utilisés. Cela peut aider à garder un aspect cohérent quand plusieurs fichiers GRF avec des résolutions différentes sont utilisés ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2032,33 +2032,33 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicateur STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Taille moyenne des métropoles par rapport aux villes normales au début de la partie STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Mise à jour le graphe de distribution toutes les {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Intervalle entre les recalculs successifs du graphe de liaison. Chaque recalcul planifie un composant du graphe. Cela signifie qu'une valeur X pour ce paramètre ne signifie pas que l'ensemble du graphe sera mis à jour toutes les X secondes. Seul un composant le sera. Plus vous définissez cet intervalle court, plus le temps de processeur nécessaire pour le calcul sera important. Plus vous définissez cet intervalle long, plus il faudra de temps pour que la distribution de marchandises commence sur de nouveaux itinéraires. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Intervalle entre les recalculs successifs du graphe de liaison. Chaque recalcul planifie un composant du graphe. Cela signifie qu'une valeur X pour ce paramètre ne signifie pas que l'ensemble du graphe sera mis à jour toutes les X secondes. Seul un composant le sera. Plus vous définissez cet intervalle court, plus le temps de processeur nécessaire pour le calcul sera important. Plus vous définissez cet intervalle long, plus il faudra de temps pour que la distribution de marchandises commence sur de nouveaux itinéraires STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Prend {STRING} pour le recalcul du graphe de distribution -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Temps pris pour chaque recalcul d'un composant du graphe de liaison. Lorsqu'un recalcul est lancé, un fil d'exécution est créé et autorisé à fonctionner pendant ce nombre de secondes. Plus vous définissez cette durée courte, plus il est probable que le fil ne soit pas terminé lorsqu'il est censé l'être. Ensuite, le jeu s'arrête jusqu'à ce qu'il le soit ("lag"). Plus vous définissez cette durée longue, plus il faut de temps pour que la distribution soit mise à jour lorsque les itinéraires changent. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Temps pris pour chaque recalcul d'un composant du graphe de liaison. Lorsqu'un recalcul est lancé, un fil d'exécution est créé et autorisé à fonctionner pendant ce nombre de secondes. Plus vous définissez cette durée courte, plus il est probable que le fil ne soit pas terminé lorsqu'il est censé l'être. Ensuite, le jeu s'arrête jusqu'à ce qu'il le soit ("lag"). Plus vous définissez cette durée longue, plus il faut de temps pour que la distribution soit mise à jour lorsque les itinéraires changent STR_CONFIG_SETTING_DISTRIBUTION_PAX :Type de distribution pour les passagers{NBSP}: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symétrique" signifie qu'autant de passagers iront d'une station A vers une station B, que de la station B vers la station A. "Asymétrique" signifie qu'un nombre arbitraire de passagers peut être envoyé dans les deux directions. "Manuel" signifie qu'aucune distribution n'est mise en place pour les passagers. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symétrique" signifie qu'autant de passagers iront d'une station A vers une station B, que de la station B vers la station A. "Asymétrique" signifie qu'un nombre arbitraire de passagers peut être envoyé dans les deux directions. "Manuel" signifie qu'aucune distribution n'est mise en place pour les passagers STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Type de distribution pour le courrier{NBSP}: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symétrique" signifie qu'autant de courrier ira d'une station A vers une station B, que de la station B vers la station A. "Asymétrique" signifie qu'une quantité arbitraire de courrier peut être envoyée dans les deux directions. "Manuel" signifie qu'aucune distribution n'est mise en place pour le courrier. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symétrique" signifie qu'autant de courrier ira d'une station A vers une station B, que de la station B vers la station A. "Asymétrique" signifie qu'une quantité arbitraire de courrier peut être envoyée dans les deux directions. "Manuel" signifie qu'aucune distribution n'est mise en place pour le courrier STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Type de distribution pour les cargaisons de classe ARMOURED{NBSP}: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :La classe de cargaison ARMOURED contient des biens de valeur dans les climats tempéré, des diamants dans le climat subtropical, et de l'or dans le climat subarctique. Les NewGRFs peuvent changer ça. "Symétrique" signifie qu'autant de ces cargaisons iront d'une station A vers une station B, que de la station B vers la station A. "Asymétrique" signifie qu'une quantité arbitraire de ces cargaisons peut être envoyée dans les deux directions. "Manuel" signifie qu'aucune distribution n'est mise en place pour ces cargaisons. Il est conseillé de choisir "asymétrique" ou "manuel" dans les climats subarctique ou subtropical, car les banques ne font que recevoir des marchandises dans ces climats. Dans le climat tempéré, on peut choisir aussi "symétrique", car les banques peuvent renvoyer en retour des biens de valeurs aux banques qui en envoient à l'origine. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :La classe de cargaison ARMOURED contient des biens de valeur dans les climats tempéré, des diamants dans le climat subtropical, et de l'or dans le climat subarctique. Les NewGRFs peuvent changer ça. "Symétrique" signifie qu'autant de ces cargaisons iront d'une station A vers une station B, que de la station B vers la station A. "Asymétrique" signifie qu'une quantité arbitraire de ces cargaisons peut être envoyée dans les deux directions. "Manuel" signifie qu'aucune distribution n'est mise en place pour ces cargaisons. Il est conseillé de choisir "asymétrique" ou "manuel" dans les climats subarctique ou subtropical, car les banques ne font que recevoir des marchandises dans ces climats. Dans le climat tempéré, on peut choisir aussi "symétrique", car les banques peuvent renvoyer en retour des biens de valeurs aux banques qui en envoient à l'origine STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Type de distribution pour les autres classes de cargaison{NBSP}: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymétrique" signifie qu'une quantité arbitraire de cargaison peut être envoyée dans les deux directions. "Manuel" signifie qu'aucune distribution n'est mise en place pour la cargaison. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymétrique" signifie qu'une quantité arbitraire de cargaison peut être envoyée dans les deux directions. "Manuel" signifie qu'aucune distribution n'est mise en place pour la cargaison ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuel STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymétrique STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :symétrique STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Précision de la distribution{NBSP}: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Plus ce réglage est élevé, plus le recalcul du graphe de distribution occupe de temps CPU. S'il est trop élevé, cela peut produire de la latence ("lag"). Au contraire, plus la valeur est basse, plus la distribution sera imprécise et l'on risque de voir des cargaisons ne pas aller vers la destination attendue. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Plus ce réglage est élevé, plus le recalcul du graphe de distribution occupe de temps CPU. S'il est trop élevé, cela peut produire de la latence ("lag"). Au contraire, plus la valeur est basse, plus la distribution sera imprécise et l'on risque de voir des cargaisons ne pas aller vers la destination attendue STR_CONFIG_SETTING_DEMAND_DISTANCE :Effet de la distance sur la demande{NBSP}: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Si cette valeur est supérieure à 0, la distance entre la station d'origine A d'une cargaison et une possible destination B a un impact sur la quantité de cargaison envoyée de A vers B. Plus la distance est grande entre les deux, moins de cargaison sera envoyée. Plus cette valeur est élevée, moins de cargaison sera envoyée vers des stations lointaines, et plus vers les stations plus proches. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Si cette valeur est supérieure à 0, la distance entre la station d'origine A d'une cargaison et une possible destination B a un impact sur la quantité de cargaison envoyée de A vers B. Plus la distance est grande entre les deux, moins de cargaison sera envoyée. Plus cette valeur est élevée, moins de cargaison sera envoyée vers des stations lointaines, et plus vers les stations plus proches STR_CONFIG_SETTING_DEMAND_SIZE :Quantité de cargaison renvoyée en mode symétrique{NBSP}: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Définir ici une valeur inférieure à 100% rapproche le comportement de la distribution symétrique de celui d'une distribution asymétrique. Moins de cargaison sera envoyée en retour de celle envoyée par une autre. Si cette valeur est réglée à 0% la distribution devient totalement asymétrique. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Définir ici une valeur inférieure à 100% rapproche le comportement de la distribution symétrique de celui d'une distribution asymétrique. Moins de cargaison sera envoyée en retour de celle envoyée par une autre. Si cette valeur est réglée à 0% la distribution devient totalement asymétrique STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturation des chemins courts avant utilisation des chemins à forte capacité{NBSP}: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Il y a souvent plusieurs routes possibles entre deux stations. Cargodist s'efforce d'utiliser d'abord le chemin le plus court jusqu'à saturation, ensuite les chemins un peu moins courts, et ainsi de suite. La saturation est déterminée par une estimation de la capacité et de la fréquentation prévue. Une fois que tous les chemins sont saturés, s'il y a encore une demande, il va surcharger tous les chemins, en privilégiant ceux à plus haute capacité. Mais la plupart du temps, la capacité n'est pas évaluée précisément. Ce réglage permets de spécifier jusqu'à quel pourcentage un chemin court doit être initialement saturé avant de passer au prochain chemin moins court. Il vaut mieux le régler à moins de 100% pour éviter que les stations soient surchargées en cas de surestimation de la capacité. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Il y a souvent plusieurs routes possibles entre deux stations. Cargodist s'efforce d'utiliser d'abord le chemin le plus court jusqu'à saturation, ensuite les chemins un peu moins courts, et ainsi de suite. La saturation est déterminée par une estimation de la capacité et de la fréquentation prévue. Une fois que tous les chemins sont saturés, s'il y a encore une demande, il va surcharger tous les chemins, en privilégiant ceux à plus haute capacité. Mais la plupart du temps, la capacité n'est pas évaluée précisément. Ce réglage permets de spécifier jusqu'à quel pourcentage un chemin court doit être initialement saturé avant de passer au prochain chemin moins court. Il vaut mieux le régler à moins de 100% pour éviter que les stations soient surchargées en cas de surestimation de la capacité STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unité de vitesse (terrestre){NBSP}: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Unité de vitesse (nautique){NBSP}: {STRING} @@ -3199,11 +3199,11 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Fréquence d'images STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Fréquence de simulation{NBSP}: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Nombre de ticks simulés par seconde. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Nombre de ticks simulés par seconde STR_FRAMERATE_RATE_BLITTER :{BLACK}Fréquence des graphismes{NBSP}: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Nombre d'images rendues par seconde. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Nombre d'images rendues par seconde STR_FRAMERATE_SPEED_FACTOR :{BLACK}Facteur de vitesse actuel{NBSP}: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}À quelle vitesse le jeu tourne actuellement, comparé à la vitesse attendue pour la simulation normale. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}À quelle vitesse le jeu tourne actuellement, comparé à la vitesse attendue pour la simulation normale STR_FRAMERATE_CURRENT :{WHITE}Actuel STR_FRAMERATE_AVERAGE :{WHITE}Moyen STR_FRAMERATE_MEMORYUSE :{WHITE}Mémoire @@ -4027,12 +4027,12 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Aéronefs non g STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groupes - Cliquer sur un groupe pour lister tous les véhicules de ce groupe. Glisser et déposer les groupes pour les hiérarchiser. +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groupes - Cliquer sur un groupe pour lister tous les véhicules de ce groupe. Glisser et déposer les groupes pour les hiérarchiser STR_GROUP_CREATE_TOOLTIP :{BLACK}Créer un groupe de véhicules STR_GROUP_DELETE_TOOLTIP :{BLACK}Supprimer le groupe sélectionné STR_GROUP_RENAME_TOOLTIP :{BLACK}Renommer le groupe sélectionné STR_GROUP_LIVERY_TOOLTIP :{BLACK}Changer la couleur du groupe sélectionné -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Cliquer pour protéger ce groupe contre l'auto-remplacement global. Ctrl-clic pour protéger aussi les sous-groupes. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Cliquer pour protéger ce groupe contre l'auto-remplacement global. Ctrl-clic pour protéger aussi les sous-groupes STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Supprimer un groupe STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Êtes-vous sûr de vouloir supprimer ce groupe et ses descendants{NBSP}? diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 5af2273f46..419c42637d 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -32,7 +32,7 @@ STR_CARGO_PLURAL_COAL :Kull STR_CARGO_PLURAL_MAIL :Post STR_CARGO_PLURAL_OIL :Olje STR_CARGO_PLURAL_LIVESTOCK :Buskap -STR_CARGO_PLURAL_GOODS :Gods +STR_CARGO_PLURAL_GOODS :Varer STR_CARGO_PLURAL_GRAIN :Korn STR_CARGO_PLURAL_WOOD :Tømmer STR_CARGO_PLURAL_IRON_ORE :Jernmalm @@ -66,7 +66,7 @@ STR_CARGO_SINGULAR_COAL :Kull STR_CARGO_SINGULAR_MAIL :Post STR_CARGO_SINGULAR_OIL :Olje STR_CARGO_SINGULAR_LIVESTOCK :Buskap -STR_CARGO_SINGULAR_GOODS :Gods +STR_CARGO_SINGULAR_GOODS :Vare STR_CARGO_SINGULAR_GRAIN :Korn STR_CARGO_SINGULAR_WOOD :Tømmer STR_CARGO_SINGULAR_IRON_ORE :Jernmalm @@ -100,7 +100,7 @@ STR_QUANTITY_COAL :{WEIGHT_LONG} k STR_QUANTITY_MAIL :{COMMA}{NBSP}postsekk{P "" er} STR_QUANTITY_OIL :{VOLUME_LONG} olje STR_QUANTITY_LIVESTOCK :{COMMA}{NBSP}enhet{P "" er} buskap -STR_QUANTITY_GOODS :{COMMA}{NBSP}kasse{P "" r} gods +STR_QUANTITY_GOODS :{COMMA}{NBSP}kasse{P "" r} varer STR_QUANTITY_GRAIN :{WEIGHT_LONG} korn STR_QUANTITY_WOOD :{WEIGHT_LONG} tømmer STR_QUANTITY_IRON_ORE :{WEIGHT_LONG} jernmalm @@ -291,7 +291,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Klikk og STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Veksle mellom stor/liten vindustørrelse STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Rullefelt - ruller listen opp/ned STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Rullefelt - ruller listen til venstre/høyre -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Riv bygninger osv. på et landområde. Ctrl velger område diagonalt. Shift slår av/på kostnadsestimat +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Riv bygninger osv. på et landområde. Ctrl+klikk+dra for å velge området diagonalt. Trykk også Shift for kun å vise kostnadsestimat # Show engines button ###length VEHICLE_TYPES @@ -339,7 +339,7 @@ STR_SORT_BY_PROFIT_THIS_PERIOD :Fortjeneste den STR_SORT_BY_AGE :Alder STR_SORT_BY_RELIABILITY :Pålitelighet STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Total kapasitet per varetype -STR_SORT_BY_MAX_SPEED :Maks hastighet +STR_SORT_BY_MAX_SPEED :Topphastighet STR_SORT_BY_MODEL :Modell STR_SORT_BY_VALUE :Verdi STR_SORT_BY_LENGTH :Lengde @@ -362,13 +362,13 @@ STR_SORT_BY_RANGE :Rekkevidde STR_SORT_BY_POPULATION :Folketall STR_SORT_BY_RATING :Rangering STR_SORT_BY_NUM_VEHICLES :Antall kjøretøy -STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Total profitt i fjor +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Total fortjeneste i fjor STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD :Total fortjeneste forrige periode STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Total fortjeneste i år STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Total fortjeneste denne perioden -STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Gjennomsnittlig profitt i fjor +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Gjennomsnittlig fortjeneste i fjor STR_SORT_BY_AVERAGE_PROFIT_LAST_PERIOD :Gjennomsnittlig fortjeneste forrige periode -STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Gjennomsnittlig profitt i år +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Gjennomsnittlig fortjeneste i år STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Gjennomsnittlig fortjeneste denne periode # Group by options for vehicle list @@ -396,10 +396,10 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Åpne m STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Åpne selskapsgrafer og satser for varebetaling STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Åpne selskapsrangeringstabell STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Åpne industrikatalog, industrikjede, eller finansier bygging av ny industri -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Åpne liste over selskapets tog. Ctrl+klikk for å vise eller skjule farkostgrupper, motsatt av valgt innstilling -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Åpne liste over selskapets kjøretøy. Ctrl+klikk for å vise eller skjule farkostgrupper, motsatt av valgt innstilling -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :Åpne liste over selskapets skip. Ctrl+klikk for å vise eller skjule farkostgrupper, motsatt av valgt innstilling -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Åpne liste over selskapets luftfartøy. Ctrl+klikk for å vise eller skjule farkostgrupper, motsatt av valgt innstilling +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Åpne liste over selskapets tog. Ctrl+klikk for å vise eller skjule transportmiddelgrupper, motsatt av valgt innstilling +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Åpne liste over selskapets kjøretøy. Ctrl+klikk for å vise eller skjule transportmiddelgrupper, motsatt av valgt innstilling +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Åpne liste over selskapets skip. Ctrl+klikk for å vise eller skjule transportmiddelgrupper, motsatt av valgt innstilling +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Åpne liste over selskapets luftfartøy. Ctrl+klikk for å vise eller skjule transportmiddelgrupper, motsatt av valgt innstilling STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Zoom inn STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Zoom ut STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Bygg jernbaneinfrastruktur @@ -451,11 +451,11 @@ STR_SETTINGS_MENU_SANDBOX_OPTIONS :Sandkasseinnsti STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Instillinger for gjennomsiktighet STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Vis bynavn STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Vis stasjonsnavn -STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Vis kontrollpunkt +STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Vis veipunktnavn STR_SETTINGS_MENU_SIGNS_DISPLAYED :Vis skilt STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Vis konkurrenters skilt og navn STR_SETTINGS_MENU_FULL_ANIMATION :Fullstending animasjon -STR_SETTINGS_MENU_FULL_DETAIL :Maks detaljer +STR_SETTINGS_MENU_FULL_DETAIL :Alle detaljer STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Gjennomsiktige bygninger STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Gjennomsiktige skilt @@ -497,20 +497,20 @@ STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Industrikjeder STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Finansier ny industri # URailway construction menu -STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Bygg jernbane -STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Bygg elektrisk jernbane -STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Bygg monorail -STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Bygg maglev +STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Bygge jernbane +STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Bygge elektrisk jernbane +STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Bygge monorail +STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Bygge maglev # Road construction menu -STR_ROAD_MENU_ROAD_CONSTRUCTION :Bygg vei -STR_ROAD_MENU_TRAM_CONSTRUCTION :Bygg trikkespor +STR_ROAD_MENU_ROAD_CONSTRUCTION :Bygge vei +STR_ROAD_MENU_TRAM_CONSTRUCTION :Bygge trikkespor # Waterways construction menu -STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Bygg vannveier +STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Bygge vannveier # Aairport construction menu -STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Bygg flyplass +STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Bygge flyplass # Landscaping menu STR_LANDSCAPING_MENU_LANDSCAPING :Landskapsverktøy @@ -610,7 +610,7 @@ STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COM STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Fortjenestegraf STR_GRAPH_INCOME_CAPTION :{WHITE}Inntektsgraf STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Vareenheter levert -STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Prestasjonsvurdering av firma (maks poeng=1000) +STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Prestasjonsvurdering av selskap (største poengsum=1000) STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Graf over selskapsverdi STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Siste 72 minutter @@ -659,7 +659,7 @@ STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}Kjøret STR_PERFORMANCE_DETAIL_STATIONS :{BLACK}Stasjoner: STR_PERFORMANCE_DETAIL_MIN_PROFIT :{BLACK}Min. fortjeneste: STR_PERFORMANCE_DETAIL_MIN_INCOME :{BLACK}Min. inntekt: -STR_PERFORMANCE_DETAIL_MAX_INCOME :{BLACK}Maks inntekt: +STR_PERFORMANCE_DETAIL_MAX_INCOME :{BLACK}Største inntekt: STR_PERFORMANCE_DETAIL_DELIVERED :{BLACK}Levert: STR_PERFORMANCE_DETAIL_CARGO :{BLACK}Varer: STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Penger: @@ -667,8 +667,8 @@ STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Lån: STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Totalt: ###next-name-looks-similar -STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}Antall farkoster som gikk med overskudd forrige år. Dette inkluderer kjøretøy, tog, skip og luftfartøy. -STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Antall farkoster som gikk med overskudd forrige periode. Dette inkluderer kjøretøy, tog, skip og luftfartøy. +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}Antall transportmidler som gikk med overskudd forrige år. Dette inkluderer kjøretøy, tog, skip og luftfartøy. +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Antall transportmidler som gikk med overskudd forrige periode. Dette inkluderer kjøretøy, tog, skip og luftfartøy. STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Antall nylig betjente stasjonsdeler. Hver del av en stasjon (f.eks. togstasjon, bussholdeplass, flyplass) er medregnet, selv om de er tilkoblet en stasjon. STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}Inntekten til fartøyet med lavest inntekt (bare fartøy eldre enn to år er tatt med) STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}Inntekten til fartøyet med lavest inntekt (bare fartøy eldre enn to perioder er tatt med) @@ -1056,7 +1056,7 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Skaler f STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Kryss av denne knappen for å skalere faser med størrelsen på grensesnittet STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Bruk tradisjonell sprite-skrift -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Kryss av denne knappen hvis du foretrekker den tradisjonelle sprite-skriften med fast størrelse. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Kryss av denne knappen hvis du foretrekker den tradisjonelle sprite-skriften med fast størrelse STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Kantutjevning av skrift STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Kryss av denne knappen for å kantutjevne skalerbar skrift @@ -1276,8 +1276,8 @@ STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}se STR_CONFIG_SETTING_INFINITE_MONEY :Uendelig med penger: {STRING} STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Tillat uendelig pengebruk og ikke la selskaper gå konkurs -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimalt innledende lån: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Det maksimale beløp et selskap kan låne (uten å ta inflasjon i betraktning). Hvis satt til "Ingen lån", vil ingen penger være tilgjengelig hvis ikke anskaffet av et Game Script eller innstillingen "Uendelig med penger". +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Største innledende lån: {STRING} +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Det største beløp et selskap kan låne (uten å ta inflasjon i betraktning). Hvis satt til "Ingen lån", vil ingen penger være tilgjengelig hvis ikke anskaffet av et Game Script eller innstillingen "Uendelig med penger" STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Ingen lån @@ -1289,7 +1289,7 @@ STR_CONFIG_SETTING_RUNNING_COSTS :Driftskostnader STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Still nivå av vedlikehold og driftskostnader for kjøretøy og infrastruktur STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Byggehastighet: {STRING} -STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Begrens mengden av byggetiltak hos datastyrte motsandere +STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Begrens mengden av byggetiltak hos KI-er STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Havarerte kjøretøy: {STRING} STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Kontrollér hvor ofte mangelfullt vedlikeholdte kjøretøy kan bryte sammen @@ -1322,11 +1322,11 @@ STR_CONFIG_SETTING_CITY_APPROVAL :Lokale myndighe STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Velg hvor mye støy og miljøskader forårsaket av selskaper påvirker deres anseelse i byen og muligheter for ytterligere utbygging i byen STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Karthøydegrense: {STRING} -STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Still inn maksimal høyde på kartterrenget. Med "(auto)" vil en god verdi bli valgt etter terrenggenerering +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Still inn største høyde på kartterrenget. Med "(auto)" vil en god verdi bli valgt etter terrenggenerering STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(auto) -STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Du kan ikke sette den maksimale karthøyden til denne verdien. Minst ett fjell på kartet er høyere +STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Du kan ikke sette den største karthøyden til denne verdien. Minst ett fjell på kartet er høyere STR_CONFIG_SETTING_AUTOSLOPE :Tillat endring av landskap under bygninger, spor, osv.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Tillat endring av landskapet under bygninger og spor uten å fjerne dem @@ -1340,8 +1340,8 @@ STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Hvis aktivert, STR_CONFIG_SETTING_EXTRADYNAMITE :Tillat fjerning av flere veier, broer osv. eid av byene: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Gjør det enklere å fjerne infrastruktur og bygninger som tilhører byer -STR_CONFIG_SETTING_TRAIN_LENGTH :Maksimal toglengde: {STRING} -STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Sett maksimumlengde for tog +STR_CONFIG_SETTING_TRAIN_LENGTH :Største toglengde: {STRING} +STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Sett største lengde for tog STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} rute{P 0 "" r} STR_CONFIG_SETTING_SMOKE_AMOUNT :Mengde med kjøretøyrøyk/gnister: {STRING} @@ -1357,11 +1357,11 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :Skråningens br STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Brattheten av et skrått kartelement for et tog. Høyere verdier gjør det vanskeligere å klatre en bakke STR_CONFIG_SETTING_PERCENTAGE :{COMMA} % -STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Skråningens bratthet for veikjøretøy: {STRING} -STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Brattheten av et skrått kartelement for et veikjøretøy. Høyere verdier gjør det vanskeligere å kjøre opp bakken +STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Skråningens bratthet for kjøretøy: {STRING} +STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Brattheten av et skrått kartelement for et kjøretøy. Høyere verdier gjør det vanskeligere å kjøre opp bakken STR_CONFIG_SETTING_FORBID_90_DEG :Forby tog å gjøre 90° svinger: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90-graders svinger oppstår når et horisontalt spor etterfølges av et vertikalt spor på tilstøtende kartelement, som medfører at toget må svinge 90 grader når det krysser kartelementet, i stedet for de vanlige 45 grader for andre spor-kombinasjoner. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90-graders svinger oppstår når et horisontalt spor etterfølges av et vertikalt spor på den tilstøtende ruten, som medfører at toget må svinge 90 grader når det krysser ruten, i stedet for de vanlige 45 grader for andre sporkombinasjoner STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Tillat sammenslåing av stasjoner som ikke ligger inntil hverandre: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Gjør det mulig å legge til deler til en stasjon uten at de er direkte ved siden av hverandre, ved å Ctrl+klikke når nye deler plasseres @@ -1369,14 +1369,14 @@ STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Gjør det mulig STR_CONFIG_SETTING_INFLATION :Inflasjon: {STRING} STR_CONFIG_SETTING_INFLATION_HELPTEXT :Aktiver inflasjon i økonomien, der kostnader stiger litt raskere enn betalinger -STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Maksimal brolengde: {STRING} -STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Maksimal lengde for broer +STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Største brolengde: {STRING} +STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Største lengde for broer -STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT :Maksimal brohøyde: {STRING} -STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Maksimal høyde for å bygge broer +STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT :Største brohøyde: {STRING} +STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Største høyde for å bygge broer -STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Maksimal tunnellengde: {STRING} -STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Maksimal lengde for tunneller +STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Største tunnellengde: {STRING} +STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Største lengde for tunneller STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Konstruksjonsmetode for primærindustri: {STRING} STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Metode for finansiering av primærindustri. 'Ingen' betyr at det ikke er mulig å finansiere noen. 'Prospekterer' betyr at finansiering er mulig, men oppbyggingen skjer på et tilfeldig sted på kartet, og det er rimelig sjanse for at den mislykkes. 'Som andre industrier' betyr at råvareindustri kan bygges opp av firmaer hvor som helst på kartet på samme måte som prosessindustri @@ -1395,7 +1395,7 @@ STR_CONFIG_SETTING_SIGNALSIDE :Vis signaler: { STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Velg på hvilken side av skinnene signalene blir plassert ###length 3 STR_CONFIG_SETTING_SIGNALSIDE_LEFT :Til venstre -STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :På kjøre-siden +STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :På kjøresiden STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Til høyre ###length 2 @@ -1438,17 +1438,17 @@ STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT_MINUTES :Hvis et firma k STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Tillat finansiering av bygninger: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Tillat firmaer å gi penger til byer til bygging av nye bygninger -STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Tillat finansiering av lokal veikonstruksjon: {STRING} +STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Tillat finansiering av lokal veibygging: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Tillat firmaer å gi penger til byer for omlegging av veinettet for å sabotere veibaserte tjenester i byen STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Tillat pengeoverføring til andre firmaer: {STRING} STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Tillat firmaer å overføre penger til andre firmaer i flerspillermodus STR_CONFIG_SETTING_FREIGHT_TRAINS :Vektmultiplikator for last for å simulere tunge tog: {STRING} -STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Still virkningen av å frakte gods i tog. En høyere verdi gjør det mer krevende for tog å frakte gods, spesielt i bakker +STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Still virkningen av å frakte gods på tog. En høyere verdi gjør det mer krevende for tog å frakte gods, spesielt i bakker STR_CONFIG_SETTING_PLANE_SPEED :Flyfart faktor: {STRING} -STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Still den relative hastigheten til fly sammenlignet med andre kjøretøy, for å redusere inntekter ved luftfrakt +STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Still den relative hastigheten til fly sammenlignet med andre kjøretøy, for å redusere inntekter ved flytransport STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Antall flystyrter: {STRING} @@ -1468,13 +1468,13 @@ STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Tillat bygging STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Det er ikke mulig å endre denne innstillingen når det allerede finnes kjøretøy. STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Vedlikehold av infrastruktur: {STRING} -STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Når aktivert, medfører infrastruktur vedlikeholdskostnader. Kostnadene vokser over-proporsjonalt med nettverkets størrelse, og påvirker dermed større selskaper mer enn de små +STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Når aktivert, medfører infrastruktur vedlikeholdskostnader. Kostnadene vokser overproporsjonalt med nettverkets størrelse, og påvirker dermed større selskaper mer enn de små STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Startfarge for selskapet: {STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Velg startfarge for selskapet -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Oppstarsselskapets sekundære farge:{STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Velg sekundær startfarge for selskapet, hvis en NewGRF som tillater det er i bruk. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Oppstartsselskapets sekundære farge: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Velg sekundær startfarge for selskapet, hvis en NewGRF som tillater det er i bruk STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Flyplasser utgår aldri: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Aktivering av denne innstillingen gjør at hver type flyplass forblir tilgjengelig for alltid etter at sin introduksjon @@ -1498,41 +1498,41 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Kjøretøy utg STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Når aktivert, vil alle kjøretøysmodeller være tilgjengelig for alltid etter de introduseres STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Tidtagning: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Velg enhet for tidtagning i spillet. Dette kan ikke endres seinere.{}{}Kalenderbasert er den klassiske OpenTTD-opplevelsen, med et år bestående av 12 måneder, hvor hver måned har 28-31 dager.{}{}Med veggurbasert tid, er vareproduksjon og økonomi i stedet basert på ett-minutts skritt, som er omtrent så lang tid som en 30-dags måned tar i kalenderbasert modus. Disse er gruppert i 12-minutters periode, tilsvarende et år i kalenderbasert modus.{}{}I begge moduser er det alltid en klassisk kalender, som brukes til introduksjonsdatoer for farkoster, hus og annen infrakstruktur. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Velg enhet for tidtagning i spillet. Dette kan ikke endres seinere.{}{}Kalenderbasert er den klassiske OpenTTD-opplevelsen, med et år bestående av 12 måneder, hvor hver måned har 28-31 dager.{}{}Med veggurbasert tid, er vareproduksjon og økonomi i stedet basert på 1-minutts skritt, som er omtrent så lang tid som en 30-dags måned tar i kalenderbasert modus. Disse er gruppert i 12-minutters periode, tilsvarende et år i kalenderbasert modus.{}{}I begge moduser er det alltid en klassisk kalender, som brukes til introduksjonsdatoer for transportmidler, hus og annen infrakstruktur ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalender STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Veggur STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutter per år: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Velg antall minutter i et kalenderår. Standard er 12 minutter. Sett til 0 for å hindre kalendertiden fra å endre seg. Denne innstillingen påvirker ikke økonomisimuleringen i spillet, og er kun tilgjengelig med veggur-tidtaking. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Velg antall minutter i et kalenderår. Standard er 12 minutter. Sett til 0 for å hindre kalendertiden i å endre seg. Denne innstillingen påvirker ikke økonomisimuleringen i spillet, og er kun tilgjengelig med veggurtidtaking STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (frosset kalendertid) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Skaler en bys vareproduksjon: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Skaler vareproduksjonen i byer med denne prosenten: +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Skaler vareproduksjonen i byer med denne prosenten STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Skaler en industris vareproduksjon: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skaler vareproduksjonen til industrier med denne prosenten: +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skaler vareproduksjonen til industrier med denne prosenten STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% -STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Forny farkost automatisk når den blir gammel: {STRING} -STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Når aktivert, blir en farkost som nærmer seg slutten av sin levetid automatisk erstattet når betingelsene for fornyelse er oppfylt +STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Forny transportmiddel automatisk når den blir gammel: {STRING} +STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Når aktivert, blir et transportmiddel som nærmer seg slutten av sin levetid automatisk erstattet når betingelsene for fornyelse er oppfylt -STR_CONFIG_SETTING_AUTORENEW_MONTHS :Forny farkost automatisk når den er {STRING} maks alder -STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Relativ alder når en farkost bør bli vurdert fornyet automatisk +STR_CONFIG_SETTING_AUTORENEW_MONTHS :Forny transportmiddel automatisk når den er {STRING} høyeste alder +STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Relativ alder når et transportmiddel bør bli vurdert fornyet automatisk ###length 2 STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} måned{P 0 "" er} før STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} måned{P 0 "" er} etter -STR_CONFIG_SETTING_AUTORENEW_MONEY :Minimum formue for autofornyelse av kjøretøy: {STRING} -STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minste mengde penger som må være igjen i banken for å vurdere automatisk fornying av farkoster +STR_CONFIG_SETTING_AUTORENEW_MONEY :Minste formue for automatisk fornyelse av kjøretøy: {STRING} +STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minste pengebeløp som må være igjen i banken for å vurdere automatisk fornying av transportmidler STR_CONFIG_SETTING_ERRMSG_DURATION :Varighet av feilmelding: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Varighet for visning av feilmeldinger i et rødt vindu. Vær oppmerksom på at noen (kritiske) feilmeldinger ikke lukkes automatisk etter dette tidspunktet, men må lukkes manuelt STR_CONFIG_SETTING_HOVER_DELAY :Vis verktøytips: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Forsinkelse før verktøytips vises når musen svever over elementer i grensesnittet. Alternativt kan verktøytips bindes til den høyre museknappen +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Forsinkelse før verktøytips vises når musen svever over elementer i grensesnittet. Alternativt kan verktøytips knyttes til den høyre museknappen når denne verdien er satt til 0 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Hovre i {COMMA} millisekunder{P 0 "" s} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Høyreklikk @@ -1544,12 +1544,12 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Graflinjenes ty STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Linjebredde i grafene. En tynn linje er mer presis å lese av, mens en tykkere linje er lettere å se, og farger er lettere å skille STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Vis NewGRF's navn i kjøretøysbyggevinduet: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Legg til en linje i bygg kjøretøy vinduet, som viser hvilken NewGRF det valgte kjøretøyet kommer fra. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Vis varene kjøretøyene kan frakte i listevinduene {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Legg til en linje i vinduet for å bygge transportmidler, som viser hvilken NewGRF det valgte transportmiddelet kommer fra +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Vis varene kjøretøyene kan frakte i listevinduene: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Hvis aktivert vil kjøretøyets last vises over i kjøretøylisten STR_CONFIG_SETTING_LANDSCAPE :Landskap: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landskap definerer grunnleggende spill-scenarier med forskjellige laster og byers vekstkrav. NewGRF og spill-skript tillater imidlertid finere kontroll +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landskap definerer grunnleggende spillscenarier med forskjellige laster og byers vekstkrav. NewGRF og Game Script tillater imidlertid finere kontroll STR_CONFIG_SETTING_LAND_GENERATOR :Landskapsgenerator: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Den opprinnelige generatoren avhenger av det originale grafikksettet, og komponerer faste landskapsformer. TerraGenesis er en Perlin støybasert generator med finere kontrollinnstillinger @@ -1563,8 +1563,8 @@ STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Velg høyden ti STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industritetthet: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Angi hvor mange næringer som skal genereres og hvilket nivå som skal opprettholdes i løpet av spillet -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maks avstand fra kant for Oljeraffinerier: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Olje rafinerier er bare bygd nær kartets kanter, det er ved kysten på øy kart +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Største avstand fra kant for oljeraffinerier: {STRING} +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Grense for hvor langt fra kartkanten oljeraffinerier og oljerigger kan bygges. På øykart sørger dette for at de er nær kysten. På kart større enn 256 ruter, er denne verdien skalert opp STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snøgrense: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Velg på hvilken høyde snøen begynner i subarktisk landskap. Snø påvirker også industrigenerering og byers vekstkrav. Kan kun endres i scenarie-redigering og er ellers beregnet fra "snødekning" @@ -1586,7 +1586,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Ulendt STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Veldig ulendt STR_CONFIG_SETTING_VARIETY :Variasjonsspredning: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Velg om kartet inneholder både fjellrike og flate områder. Jo høyere variasjon, dess større forskjeller i høyde mellom fjellrike og flate områder. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Velg om kartet inneholder både fjellrike og flate områder. Jo høyere variasjon, dess større forskjeller i høyde mellom fjellrike og flate områder STR_CONFIG_SETTING_RIVER_AMOUNT :Elvemengde: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Velg hvor mange elver som genereres @@ -1598,8 +1598,8 @@ STR_CONFIG_SETTING_TREE_PLACER_NONE :Ingen STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Forbedret -STR_CONFIG_SETTING_ROAD_SIDE :Veikjøretøy: {STRING} -STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Velg kjøre-siden +STR_CONFIG_SETTING_ROAD_SIDE :Kjøretøy: {STRING} +STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Velg kjøresiden ###length 2 STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Venstrekjøring @@ -1616,8 +1616,8 @@ STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :Høydenivå et STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}En eller flere ruter ved den nordlige kanten av kartet er ikke tom(me) STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}En eller flere ruter ved en av kantene på kartet er ikke vann -STR_CONFIG_SETTING_STATION_SPREAD :Maks stasjonspredning: {STRING} -STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Maksimalt areal som delene av en enkelt stasjon kan spres ut på. Vær oppmerksom på at høye verdier vil gjøre spillet tregere +STR_CONFIG_SETTING_STATION_SPREAD :Største stasjonsspredning: {STRING} +STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Største areal som delene av en enkelt stasjon kan spres ut på. Vær oppmerksom på at høye verdier vil gjøre spillet tregere STR_CONFIG_SETTING_SERVICEATHELIPAD :Automatisk vedlikehold ved helikopterplass: {STRING} STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Utfør vedlikehold av helikoptre etter hver landing, selv om det ikke er noen depot på flyplassen @@ -1633,7 +1633,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Mørkegrønn STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Fiolett STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Farger for vareflyt: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Velg farge for vareflyt. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Velg selskapsfarge for vareflyt ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Grønn til rød (original) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Grønn til blå @@ -1654,8 +1654,8 @@ STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Velge hvordan s STR_CONFIG_SETTING_MEASURE_TOOLTIP :Vis målingsverktøy ved bruk av byggingsverktøy: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Vise avstander mellom kartelementer samt høydeforskjeller når du drar linjer ved byggevirksomhet -STR_CONFIG_SETTING_LIVERIES :Vis utleiefirma etter kjøretøytype: {STRING} -STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Kontrollér bruken av kjøretøystype-spesifikke lakkeringer (i motsetning til selskaps-spesifikke) +STR_CONFIG_SETTING_LIVERIES :Vis design spesifikke for type transportmidler: {STRING} +STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Kontrollér bruken av kjøretøystypespesifikke lakkeringer (i motsetning til selskapsspesifikke) ###length 3 STR_CONFIG_SETTING_LIVERIES_NONE :Ingen STR_CONFIG_SETTING_LIVERIES_OWN :Eget firma @@ -1675,7 +1675,7 @@ STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Panorer kartet STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Av STR_CONFIG_SETTING_OSK_ACTIVATION :Skjermtastatur: {STRING} -STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Velg metode for å åpne skjerm-tastaturet for inntasting av tekst i tekstbokser ved hjelp av pekeenheten. Dette er ment for små enheter uten fysisk tastatur +STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Velg metode for å åpne skjermtastaturet for inntasting av tekst i tekstbokser ved hjelp av pekeenheten. Dette er ment for små enheter uten fysisk tastatur ###length 4 STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :Deaktivert STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dobbeltklikk @@ -1717,7 +1717,7 @@ STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Når spillet er STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Velg hvilke handlinger som kan bli gjort når spillet er pauset ###length 4 STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Ingen handlinger -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Alt utenom konstruksjon +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Alt utenom byggeaktivitet STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Alt utenom landskapsendringer STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Alle handlinger @@ -1738,7 +1738,7 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Vis ankomst og STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Vise forventede ankomst- og avgangstider i rutetabeller STR_CONFIG_SETTING_QUICKGOTO :Rask opprettelse av kjøretøyordre: {STRING} -STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Forhåndsvelg 'gå til markøren' når ordre-vinduet åpnes +STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Forhåndsvelg 'gå til markøren' når ordrevinduet åpnes STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Standard jernbanetype (etter nytt/innlastet spill): {STRING} STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Jernbanetype som velges når man starter eller laster et spill. 'første tilgjengelige' velger den eldste typen spor, 'siste tilgjengelige' velger den nyeste typen spor og 'mest brukt' velger den typen som for tiden er mest i bruk @@ -1748,16 +1748,16 @@ STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Siste tilgjenge STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Mest brukt STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Vis reserverte spor: {STRING} -STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Gi reserverte spor en annen farge for å bistå med problemer hvor tog nekter å entre sti-baserte blokker +STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Gi reserverte spor en annen farge for å bistå med problemer hvor tog nekter å entre stibaserte blokker STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :La byggingsverktøy være aktive etter bruk: {STRING} STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Holde verktøylinjen for bruer, tunneler, osv åpnet etter bruk STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatisk fjerne signaler mens jernbane bygges: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatisk fjerne signaler mens jernbane bygges dersom signalene er i veien. Vær oppmerksom på at dette kan potensielt lede til togkrasj. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Fjern signaler automatisk når jernbane bygges dersom signalene er i veien. Vær oppmerksom på at dette potensielt kan føre til ulykker STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Grense for hvor fort spillet kjører: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Begrens hvor fort spillet går når hurtigspoling er aktivert. 0 = ingen begrensning (så raskt som din pc tillater). Verdier under 100% gjør spillet tregere. Den øvre grensen avhenger av spesifikasjonene til din pc og kan variere avhengig av spillet. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Begrens hvor fort spillet går når hurtigspoling er aktivert. 0 = ingen begrensning (så raskt som din datamaskin tillater). Verdier under 100% gjør spillet tregere. Den øvre grensen avhenger av spesifikasjonene til din datamaskin og kan variere avhengig av spillet STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normal hastighet ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Ingen grense (så fort som maskinen din tillater) @@ -1776,8 +1776,8 @@ STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Slutt på perio STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Spill av lydeffekt ved utgangen av et år som oppsummerer selskapets resultater i løpet av året i forhold til året før STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Spill av lydeffekt ved utgangen av en periode som oppsummerer selskapets resultater i løpet av perioden i forhold til forrige periode -STR_CONFIG_SETTING_SOUND_CONFIRM :Konstruksjon: {STRING} -STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Spille av lydeffekt ved fullførte konstruksjoner eller andre tiltak +STR_CONFIG_SETTING_SOUND_CONFIRM :Byggeaktivitet: {STRING} +STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Spille av lydeffekt ved fullført byggeaktivitet eller andre tiltak STR_CONFIG_SETTING_SOUND_CLICK :Tastetrykk: {STRING} STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :Pipetone ved tastetrykk @@ -1791,46 +1791,46 @@ STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT :Spill lydeffekt STR_CONFIG_SETTING_SOUND_AMBIENT :Omgivelse: {STRING} STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Spille lyder fra omgivelsene av landskapet, industrier og tettsteder -STR_CONFIG_SETTING_MAX_TRAINS :Maks antall tog per firma: {STRING} -STR_CONFIG_SETTING_MAX_TRAINS_HELPTEXT :Maksimalt antall tog som et firma kan ha +STR_CONFIG_SETTING_MAX_TRAINS :Største antall tog per selskap: {STRING} +STR_CONFIG_SETTING_MAX_TRAINS_HELPTEXT :Største antall tog som et selskap kan ha -STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Maks antall veikjøretøy per firma: {STRING} -STR_CONFIG_SETTING_MAX_ROAD_VEHICLES_HELPTEXT :Maksimalt antall veikjøretøy som et firma kan ha +STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Største antall kjøretøy per selskap: {STRING} +STR_CONFIG_SETTING_MAX_ROAD_VEHICLES_HELPTEXT :Største antall kjøretøy som et selskap kan ha -STR_CONFIG_SETTING_MAX_AIRCRAFT :Maks antall luftfartøy per firma: {STRING} -STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT :Maksimalt antall fly som et firma kan ha +STR_CONFIG_SETTING_MAX_AIRCRAFT :Største antall luftfartøy per selskap: {STRING} +STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT :Største antall luftfartøy som et selskap kan ha -STR_CONFIG_SETTING_MAX_SHIPS :Maks antall skip per firma: {STRING} -STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT :Maksimalt antall skip som et firma kan ha +STR_CONFIG_SETTING_MAX_SHIPS :Største antall skip per selskap: {STRING} +STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT :Største antall skip som et selskap kan ha STR_CONFIG_SETTING_AI_BUILDS_TRAINS :Hindre datamaskinen i å bygge tog: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT :Aktivering av denne innstillingen gjør bygging av tog umulig for en datamaskin-spiller +STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT :Aktivering av denne innstillingen gjør bygging av tog umulig for en datamaskinspiller -STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :Hindre datamaskinen i å bygge veikjøretøy: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :Aktivering av denne innstillingen gjør bygging av veikjøretøy umulig for en datamaskin-spiller +STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :Hindre datamaskinen i å bygge kjøretøy: {STRING} +STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :Aktivering av denne innstillingen gjør bygging av kjøretøy umulig for en datamaskinspiller STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :Hindre datamaskinen i å bygge luftfartøy: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Aktivering av denne innstillingen gjør bygging av fly umulig for en datamaskin-spiller +STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Aktivering av denne innstillingen gjør bygging av fly umulig for en datamaskinspiller STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Hindre datamaskinen i å bygge skip: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Aktivering av denne innstillingen gjør bygging av skip umulig for en datamaskin-spiller +STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Aktivering av denne innstillingen gjør bygging av skip umulig for en datamaskinspiller STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Tillat KI-er i flerspiller: {STRING} -STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Tillat datamaskin-spillere å delta i flerspiller-spill +STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Tillat datamaskinspillere å delta i flerspillerspill STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes før skript er avbrutt: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maksimalt antall beregningstrinn et skript kan ta i én omgang -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maks minnebruk pr. script: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Hvor mye minne ett enkelt script kan bruke før det blir stoppet av systemet. Denne verdien må kanskje økes for store kart. +STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Største antall beregningstrinn et skript kan gjøre i én omgang +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Største minnebruk per skript: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Hvor mye minne ett enkelt skript kan bruke før det blir stanset. Denne verdien må kanskje økes for store kart. STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Vedlikeholdsintervaller er i prosent: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Når aktivert, farkoster forsøker å få utført vedlikehold når påliteligheten faller med en gitt prosent fra maksimal pålitelighet.{}{}For eksempel, hvis en farkosts maksimale pålitelighet er 90% og vedlikeholdsintervallet er 20%, vil farkosten forsøke å få utført vedlikehold når den når 72% pålitelighet.Velge om vedlikehold av kjøretøyer utløses av tiden som er forløpt fra siste gjennomførte vedlikehold, eller av at pålitelighet dropper under en bestemt prosent av maksimal pålitelighet +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Når aktivert vil transportmidler forsøke å få utført vedlikehold når påliteligheten faller med en gitt prosent fra største pålitelighet.{}{}For eksempel, hvis et transportmiddels største pålitelighet er 90% og vedlikeholdsintervallet er 20%, vil transportmiddelet forsøke å få utført vedlikehold når den når 72% pålitelighet STR_CONFIG_SETTING_SERVINT_TRAINS :Standard vedlikeholdsintervall for tog: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Angi standard vedlikeholdsintervall for nytt jernbanemateriell, hvis det ikke er satt noe vedlikeholdsintervall for materiellet -STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Standard vedlikeholdsintervall for veikjøretøy: {STRING} -STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Angi standard vedlikeholdsintervall for nye veikjøretøy, hvis det ikke er satt noe vedlikeholdsintervall for kjøretøyet +STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Standard vedlikeholdsintervall for kjøretøy: {STRING} +STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Angi standard vedlikeholdsintervall for nye kjøretøy, hvis det ikke er satt noe vedlikeholdsintervall for kjøretøyet STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Standard vedlikeholdsintervall for fly: {STRING} STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Angi standard vedlikeholdsintervall for nye fly, hvis det ikke er angitt noe vedlikeholdsintervall for flyet STR_CONFIG_SETTING_SERVINT_SHIPS :Standard vedlikeholdsintervall for skip: {STRING} @@ -1843,10 +1843,10 @@ STR_CONFIG_SETTING_NOSERVICE :Deaktiver vedli STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Når aktivert, vil kjøretøy ikke bli vedlikeholdt hvis de ikke kan bryte sammen STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Lastehastighet reduseres for tog som er lengre enn stasjonen:{STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Når aktivert vil tog som er for lange for stasjonen laste saktere enn tog som passer til stasjonen. Denne innstillingen påvirker ikke rutesøking. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Når aktivert vil tog som er for lange for stasjonen laste saktere enn tog som passer til stasjonen. Denne innstillingen påvirker ikke rutesøking STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Aktiver fartsgrenser for vogner: {STRING} -STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Når aktivert, brukes også fartsgrenser til vogner for å avgjøre den maksimale hastigheten til et tog +STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Når aktivert, brukes også fartsgrenser til vogner for å avgjøre topphastigheten til et tog STR_CONFIG_SETTING_DISABLE_ELRAILS :Deaktiver elektriske spor: {STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Aktivering av denne innstillingen deaktiverer kravet om å elektrifisere spor for å tillate at elektriske motorer kan kjøre på dem @@ -1854,8 +1854,8 @@ STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Aktivering av d STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Første kjøretøy ankommer spillers stasjon: {STRING} STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Vis en nyhetsoppdatering når det første kjøretøyet ankommer stasjonen til en ny spiller -STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Første kjøretøy ankommer motstanders stasjon: {STRING} -STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Vise nyhetsoppdatering når det første kjøretøyet ankommer stasjonen til en ny motstander +STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Første kjøretøy ankommer konkurrents stasjon: {STRING} +STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Vise nyhetsoppdatering når det første kjøretøyet ankommer stasjonen til en ny konkurrent STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Ulykker / katastrofer: {STRING} STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Vise nyhetsoppdatering når ulykker eller katastrofer inntreffer @@ -1878,7 +1878,7 @@ STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES_HELPTEXT :Vis en nyhetsop STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY :Produksjonsendringer hos industrier ekspedert av firmaet: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :Vise nyhetsoppdateringer når produksjonsnivået endrer seg for industrier som er tilknyttet selskapet -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER :Produksjonsendringer hos industrier ekspedert av motspiller(e): {STRING} +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER :Produksjonsendringer hos industrier betjent av konkurrent(er): {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :Vise nyhetsoppdateringer når produksjonsnivået endrer seg for industrier som er tilknyttet konkurrentene STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Andre industriproduksjonsendringer: {STRING} @@ -1891,10 +1891,10 @@ STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Nye kjøretøy: STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Vise nyhetsoppdatering når nye kjøretøystyper blir tilgjengelig STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Endringer i godtatte varer: {STRING} -STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Vise meldinger om stasjoners skiftende aksept av godstyper +STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Vise meldinger om stasjoners skiftende aksept av varetyper STR_CONFIG_SETTING_NEWS_SUBSIDIES :Subsidier: {STRING} -STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Vise nyhetsoppdateringer om subsidie-relaterte hendelser +STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Vise nyhetsoppdateringer om subsidierelaterte hendelser STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION :Generell informasjon: {STRING} STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION_HELPTEXT :Vise avis for generelle hendelser, som for eksempel kjøp av eksklusive rettigheter eller finansiering av veibygging @@ -1908,19 +1908,19 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Året der avisa STR_CONFIG_SETTING_STARTING_YEAR :Start spillet i år: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Poengsum ved slutten av året: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Året spillet slutter med tanke på poeng. På slutten av dette året, vil firmaets poengsum bli lagret og tavlen med høyeste poengsummer vil vises. Spilleren kan fortsette å spille etter dette.{}Hvis dette er før start året, vil tavlen med høyeste poengsummer aldri vises. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Året spillet slutter å beregne poeng. På slutten av dette året vil selskapets poengsum bli lagret og tavlen med høyeste poengsum vil vises, men spilleren kan fortsette å spille etter dette.{}Hvis dette er før startåret, vil tavlen med høyeste poengsum aldri vises. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Aldri STR_CONFIG_SETTING_ECONOMY_TYPE :Økonomi type: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Jevn økonomi medfører at produksjonen endres oftere, og i mindre steg. Frossen økonomi stopper produksjon endringer og industri stenges. Denne innstillingen kan ha ingen effekt dersom industri typene er gitt av NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Jevn økonomi medfører at produksjonen endres oftere, og i mindre steg. Frossen økonomi stopper produksjonsendringer og industrinedleggelser. Denne innstillingen kan ha ingen effekt hvis industritypene kommer fra en NewGRF. ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Jevnt STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Frossen -STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Prosentandel av etappe-overskudd som skal betales i innmatingssystem: {STRING} +STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Prosentandel av etappeoverskudd som skal betales i innmatingssystem: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Andel av inntekten gitt til de mellomliggende etapper i et overføringssystem, noe som gir mer kontroll over inntektene STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Når du drar en linje, plasser signaler hver: {STRING} @@ -1959,7 +1959,7 @@ STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Byer har lov å STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Ved å aktivere denne innstillingen, tillates byer å bygge planoverganger STR_CONFIG_SETTING_NOISE_LEVEL :Begrens plassering av flyplasser basert på støynivå: {STRING} -STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :La byer blokkere flyplasskonstruksjon basert på støygrenser, som er basert på byens innbyggertall og flyplassens størrelse og avstand. His denne innstillingen er deaktivert, vil byer kun tillate to flyplasser hvis ikke lokale myndigheters holdning er "Tillatende". +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :La byer blokkere flyplassbygging basert på støygrenser, som er basert på byens innbyggertall og flyplassens størrelse og avstand. His denne innstillingen er deaktivert, vil byer kun tillate to flyplasser hvis ikke lokale myndigheters holdning er "Tillatende". STR_CONFIG_SETTING_TOWN_FOUNDING :Grunnlegging av byer i spillet: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Ved å aktivere denne innstillingen tillates spillere å grunnlegge nye byer i spillet @@ -1991,16 +1991,16 @@ STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Avstanden mello STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} piks{P 0 el ler} ###setting-zero-is-special STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Deaktivert -STR_CONFIG_SETTING_SOFT_LIMIT :Maksimalt antall flytende vinduer: {STRING} +STR_CONFIG_SETTING_SOFT_LIMIT :Største antall ikke-klebrige vinduer: {STRING} STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Antall ikke-klebrige åpne vinduer før gamle vinduer automatisk blir lukket for å gi plass til nye vinduer STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} ###setting-zero-is-special STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :deaktivert -STR_CONFIG_SETTING_ZOOM_MIN :Maks zoom-inn nivå: {STRING} -STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Maksimalt forstørrelsesnivå for synsfelt. Vær oppmerksom på at aktivering av høyere forstørrelsesnivå øker minnekravet -STR_CONFIG_SETTING_ZOOM_MAX :Maks zoom-ut nivå: {STRING} -STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Maksimalt 'zoom-ut' nivå for synsfelt. Høye ut-zoomingsnivåer kan føre til hakking når det brukes +STR_CONFIG_SETTING_ZOOM_MIN :Største zoom-inn nivå: {STRING} +STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Største forstørrelsesnivå for synsfelt. Vær oppmerksom på at aktivering av høyere forstørrelsesnivå øker minnekravet +STR_CONFIG_SETTING_ZOOM_MAX :Største zoom-ut nivå: {STRING} +STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Største 'zoom-ut' nivå for synsfelt. Høye ut-zoomingsnivåer kan føre til hakking når det brukes ###length 6 STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2x @@ -2010,7 +2010,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Høyeste oppløsning effekter kan bruke: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Begrens maks oppløsning effektene kan bruke. Å begrense oppløsningen vil unngå å bruke høy oppløsning selv når den er tilgjengelig. Dette kan bidra til å holde spillets utseende enhetlig når du bruker en blanding av GRF-filer med og uten grafikk med høy oppløsning. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Begrens største oppløsning spritene kan bruke. Å begrense oppløsningen vil unngå å bruke høyoppløst grafikk selv når det er tilgjengelig. Dette kan bidra til gjøre spillets uttrykk enhetlig når en blanding av GRF-filer med og uten høyoppløst grafikk er i bruk ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2034,33 +2034,33 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Innledende byst STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Gjennomsnittsstørrelse på (stor)byer i forhold til vanlige byer ved begynnelsen av spillet STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Oppdater distribusjonsgraf hvert {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tid mellom hver rekalkulering av lenkegrafen. Hver rekalkulering kalkulerer planene for en komponent på grafen. Dette betyr at verdi X for denne innstillingen ikke innebærer at hele grafen vil bli oppdatert hvert X sekund. Kun noen komponenter vil. Jo kortere du setter den, jo mer CPU-tid vil være nødvendig for å kalkulere den. Jo lenger du setter den, jo lenger vil det ta før varedistribusjonen kommer i gang på nye ruter. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tid mellom hver rekalkulering av koblingsgrafen. Hver rekalkulering kalkulerer planene for en komponent på grafen. Dette betyr at verdi X for denne innstillingen ikke innebærer at hele grafen vil bli oppdatert hvert X sekund. Kun noen komponenter vil. Jo kortere du setter den, jo mer CPU-tid vil være nødvendig for å kalkulere den. Jo lenger du setter den, jo lenger vil det ta før varedistribusjonen kommer i gang på nye ruter STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Ta {STRING} for rekalkulering av distribusjonsgraf -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tid for hver rekalkulering av en komponent i lenkegrafen. Når en rekalkulering starter, opprettes en tråd som får kjøre et oppgitte antallet sekunder. Jo kortere du setter den, jo mer sannsynlig er det at tråden ikke er ferdig når den skal. Da stopper spille til det er ("lag"). Jo lenger du setter den, jo lenger tar det før distribusjonen blir oppdatert når ruter endres. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tid for hver rekalkulering av en komponent i koblingsgrafen. Når en rekalkulering starter, opprettes en tråd som får kjøre et oppgitte antallet sekunder. Jo kortere du setter den, jo mer sannsynlig er det at tråden ikke er ferdig når den skal. Da stopper spille til det er ("lag"). Jo lenger du setter den, jo lenger tar det før distribusjonen blir oppdatert når ruter endres STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distribusjonsmodus for passasjerer: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetrisk" betyr at omtrent like mange passasjerer vil reise fra stasjon A til stasjon B som fra B til A. "Asymmetrisk" betyr at et vilkårlig antall passasjerer kan reise i begge retninger. "Manuell" betyr at ingen automatisk distribusjon vil forekomme for passasjerer. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetrisk" betyr at omtrent like mange passasjerer vil reise fra stasjon A til stasjon B som fra B til A. "Asymmetrisk" betyr at et vilkårlig antall passasjerer kan reise i begge retninger. "Manuell" betyr at ingen automatisk distribusjon vil forekomme for passasjerer STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distribusjonsmodus for post: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetrisk" betyr at omtrent samme mengde post vil bli sent fra stasjon A til stasjon B som fra B til A. "Asymmetrisk" betyr at vilkårlige mengder post kan bli sendt i begge retninger. "Manuell" betyr at ingen automatisk distribusjon vil forekomme for post. -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distribusjonsmodus for den pansrede gods-klassen: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Den PANSREDE vareklassen inneholder verdisaker i det tempererte klimaet, diamanter i det subtropiske, og gull i det subarktiske. NewGRF-er kan endre på dette. "Symmetrisk" betyr at omtrent like mye varer vil bli sendt fra stasjon A til stasjon B som fra B til A. "Asymmetrisk" betyr at vilkårlige mengder varer kan sendes i begge retninger. "Manuell" betyr at ingen automatisk distribusjon vil forekomme for varene. Det anbefales å sette denne til asymmetrisk eller manuell når du spiller subarktisk eller subtropisk, siden banker kun mottar varer i disse klimaene. For temperert klima kan du også velge symmetrisk, da banker fint kan sende verdisaker tilbake til opprinnelig bank. -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distribusjonsmodus for andre godsklasser: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetrisk" betyr at vilkårlige mengder varer kan sendes i begge retninger. "Manuell" betyr at ingen automatisk distribusjon vil forekomme for disse varene. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetrisk" betyr at omtrent samme mengde post vil bli sent fra stasjon A til stasjon B som fra B til A. "Asymmetrisk" betyr at vilkårlige mengder post kan bli sendt i begge retninger. "Manuell" betyr at ingen automatisk distribusjon vil forekomme for post +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distribusjonsmodus for den PANSREDE vareklassen: {STRING} +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Den PANSREDE vareklassen inneholder verdisaker i det tempererte klimaet, diamanter i det subtropiske, og gull i det subarktiske. NewGRF-er kan endre på dette. "Symmetrisk" betyr at omtrent like mye varer vil bli sendt fra stasjon A til stasjon B som fra B til A. "Asymmetrisk" betyr at vilkårlige mengder varer kan sendes i begge retninger. "Manuell" betyr at ingen automatisk distribusjon vil forekomme for varene. Det anbefales å sette denne til asymmetrisk eller manuell når du spiller subarktisk eller subtropisk, siden banker kun mottar varer i disse klimaene. For temperert klima kan du også velge symmetrisk, da banker fint kan sende verdisaker tilbake til opprinnelig bank +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distribusjonsmodus for andre vareklasser: {STRING} +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetrisk" betyr at vilkårlige mengder varer kan sendes i begge retninger. "Manuell" betyr at ingen automatisk distribusjon vil forekomme for disse varene ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetrisk STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :symmetrisk -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Distribusjons-nøyaktighet: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Jo høyere du setter denne, desto mer prosessor-tid vil beregningen av koblingsgrafen ta. Hvis dette bruker for lang tid, vil du oppleve etterslep. Hvis du setter den til en lav verdi, vil distribusjonen bli mer unøyaktig, og du vil kunne oppleve at gods ikke blir sendt til de stedene du forventer at den skal gå. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Distribusjonsnøyaktighet: {STRING} +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Jo høyere du setter denne, desto mer prosessortid vil beregningen av koblingsgrafen ta. Hvis dette bruker for lang tid, vil du kunne oppleve etterslep. Hvis du setter den til en lav verdi, derimot, vil distribusjonen bli mer unøyaktig, og du vil kunne oppleve at varer ikke blir sendt til de stedene du forventer at de skal STR_CONFIG_SETTING_DEMAND_DISTANCE :Efffekten av avstand på behov: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Hvis du setter denne til en verdi større enn 0, vil avstanden mellom opprinnelsesstasjonen (A) og en mulig destinasjon (B) ha en effekt på mengden av last som sendes fra A til B. Jo lengre vekk B er fra A, desto mindre gods vil bli sent. Jo høyere du setter den, desto mindre gods vil bli sendt til stasjoner langt vekk, og en større andel gods vil bli sendt til mer nærliggende stasjoner. -STR_CONFIG_SETTING_DEMAND_SIZE :Mengde retur-last ved symmetrisk modus: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Ved å sette denne til mindre enn 100%, vil symmetrisk distribusjon oppføre seg mer som den asymmetriske: Mindre gods vil ved automatikk bli sendt tilbake til den opprinnelige stasjonen. Hvis du setter denne til 0% vil symmetrisk distribusjon oppføre seg akkurat som den asymmetriske. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Hvis du setter denne til en verdi større enn 0, vil avstanden mellom opprinnelsesstasjonen A for noen varer og en mulig destinasjon B ha en effekt på mengden av varer som sendes fra A til B. Jo lengre vekk B er fra A, desto færre varer vil bli sent. Jo høyere du setter den, desto mindre varer vil bli sendt til stasjoner langt vekk, og en større andel varer vil bli sendt til nærliggende stasjoner +STR_CONFIG_SETTING_DEMAND_SIZE :Mengde returlast ved symmetrisk modus: {STRING} +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Ved å sette denne til mindre enn 100%, vil symmetrisk distribusjon oppføre seg mer som den asymmetriske: Færre varer vil bli returnert hvis en viss mengde blir sendt til stasjonen. Hvis du setter den til 0% vil symmetrisk distribusjon oppføre seg akkurat som asymmetrisk STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Metning av korte stier før man anvender rommelige stier: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Ofte er det flere stier mellom to gitte stasjoner. Varedistribusjons-algoritmen vil mette den korteste strekning først. Deretter vil den bruke den neste korteste veien inntil den er mettet, og så videre. Metning bestemmes ut fra en vurdering av kapasitet og planlagt bruk. Når den har mettet alle veier, vil den, hvis det fortsatt er etterspørsel, overbelaste alle veier, og foretrekke de med høy kapasitet. Algoritmen vil imidlertid ikke estimere kapasitet nøyaktig, mesteparten av tiden. Med denne innstillingen kan du angi opptil hvilken prosentandel en kortere sti må være metter før man velger en en lengre (ledig) sti. Sett denne til mindre enn 100% for å unngå overfylte stasjoner i tilfeller hvor kapasiteten overvurderes. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Ofte er det flere veier mellom to gitte stasjoner. Varedistribusjonsalgoritmen vil fylle den korteste veien først. Deretter vil den bruke den neste korteste veien inntil den er full, og så videre. Fyllingsgrad bestemmes ut fra en vurdering av kapasitet og planlagt bruk. Når den har fylt alle veier, vil den, hvis det fortsatt er etterspørsel, overbelaste alle veier, og foretrekke de med høy kapasitet. Algoritmen vil imidlertid ikke estimere kapasiteten nøyaktig mesteparten av tiden. Denne innstillingen lar deg angi opptil hvilken prosent en kortere vei må være full før man velger en en lengre vei. Sett denne til mindre enn 100% for å unngå overfylte stasjoner i tilfeller hvor kapasiteten overvurderes STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Hastighetsenheter (land): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Hastighetsenheter (nautisk): {STRING} @@ -2079,7 +2079,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL :Det britiske im STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_METRIC :Metrisk (HK) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_SI :SI (kW) -STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT :Vekt-enheter: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT :Vektenheter: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT :Når vektene vises i brukergrensesnittet, vis dem i de utvalgte enhetene ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL :Det britiske imperiets enhetssystem ('short t'/tonn) @@ -2100,7 +2100,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL :Det britiske im STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_METRIC :Metrisk (kgf) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_SI :SI (kN) -STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT :Høyde-enheter: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT :Høydeenheter: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT :Når en høyde vises i brukergrensesnittet, vis den i de valgte enhetene ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :Det britiske imperiets enhetssystem (fot) @@ -2113,7 +2113,7 @@ STR_CONFIG_SETTING_SOUND :Lydeffekter STR_CONFIG_SETTING_INTERFACE :Grensesnitt STR_CONFIG_SETTING_INTERFACE_GENERAL :Generelt STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :Synsfelt -STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :Konstruksjon +STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :Byggeaktivitet STR_CONFIG_SETTING_ADVISORS :Nyheter / Rådgivere STR_CONFIG_SETTING_COMPANY :Firma STR_CONFIG_SETTING_ACCOUNTING :Regnskap @@ -2129,7 +2129,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_TIME :Tid STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :Myndigheter STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :Byer STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Industrier -STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Gods-distribusjon +STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Varedistribusjon STR_CONFIG_SETTING_ENVIRONMENT_TREES :Trær STR_CONFIG_SETTING_AI :Konkurrenter STR_CONFIG_SETTING_AI_NPC :Datamaskinstyrte spillere @@ -2199,7 +2199,7 @@ STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Last inn STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Start et nytt spill og bruk et høydekart som landskap STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Start et nytt spill som bruker et egendefinert scenario STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Opprett en egendefinert spillverden eller et scenario -STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Start et flerspiller-spill +STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Start et flerspillerspill STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Velg temperert miljø STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Velg subarktisk miljø @@ -2250,8 +2250,8 @@ STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spiller STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magisk bulldoser (fjern industrier, uflyttbare objekter): {ORANGE}{STRING} STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunneler kan krysse hverandre: {ORANGE}{STRING} STR_CHEAT_NO_JETCRASH :{LTBLUE}Jetfly vil ikke krasje (regelmessig) på små flyplasser: {ORANGE} {STRING} -STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Rediger den maksimale karthøyden: {ORANGE}{NUM} -STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Rediger den maksimale fjellhøyden på kartet +STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Rediger den største karthøyden: {ORANGE}{NUM} +STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Rediger den største fjellhøyden på kartet STR_CHEAT_CHANGE_DATE :{LTBLUE}Endre dato: {ORANGE} {DATE_SHORT} STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Endre nåværende år STR_CHEAT_SETUP_PROD :{LTBLUE}Tillat endring av produksjonsmengder: {ORANGE}{STRING} @@ -2268,14 +2268,14 @@ STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Vis luft STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Vis farger i toggrupper STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Vis fargene til kjøretøygrupper STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Vis fargene til skipsgrupper -STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Vis fargene til flygrupper +STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Vis fargene til luftfartøygrupper STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Velg primærfarge for valgte tema. Ctrl+klikk for å bruke denne fargen på alt STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Velg sekundærfarge for valgte tema. Ctrl+klikk for å bruke denne fargen på alt STR_LIVERY_PANEL_TOOLTIP :{BLACK}Velg fargetemaet du ønsker å endre, eller flere fargetemaer med Ctrl+klikk. Klikk på boksen for å vise bruken av fargetemaene STR_LIVERY_TRAIN_GROUP_EMPTY :Ingen toggrupper satt opp STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Ingen kjøretøygrupper er satt opp STR_LIVERY_SHIP_GROUP_EMPTY :Ingen skipsgrupper er satt opp -STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Ingen flygupper er satt opp +STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Ingen luftfartøygrupper er satt opp ###length 23 STR_LIVERY_DEFAULT :Standarddesign @@ -2284,7 +2284,7 @@ STR_LIVERY_DIESEL :Diesellokomotiv STR_LIVERY_ELECTRIC :Elektrisk lokomotiv STR_LIVERY_MONORAIL :Monorail-lokomotiv STR_LIVERY_MAGLEV :Maglev-lokomotiv -STR_LIVERY_DMU :Dieseltogsett (DMU) +STR_LIVERY_DMU :Dieselmotorvogn (DMU) STR_LIVERY_EMU :Elektrisk togsett (EMU) STR_LIVERY_PASSENGER_WAGON_STEAM :Passasjervogn (damp) STR_LIVERY_PASSENGER_WAGON_DIESEL :Passasjervogn (diesel) @@ -2375,7 +2375,7 @@ STR_NETWORK_SERVER_LIST_GAME_NAME :{BLACK}Navn STR_NETWORK_SERVER_LIST_GAME_NAME_TOOLTIP :{BLACK}Navn på spillet STR_NETWORK_SERVER_LIST_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA} STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION :{BLACK}Klienter -STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Klienter på nett / maks antall klienter{}Firmaer på nett / maks antall firmaer +STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Klienter på nett / største antall klienter{}Selskaper på nett / største antall selskap STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x{COMMA} STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Kartstørrelse STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Kartstørrelsen på spillet{}Klikk for å sortere på område @@ -2436,11 +2436,10 @@ STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beskytt STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Synlighet: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Om andre mennesker kan se serveren din i den offentlige oppføringen STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" er} -STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maks antall klienter: -STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS.small :dra og slipp -STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Velg maks antall klienter. Ikke alle plassene trenger å bli tatt +STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Største antall klienter: +STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Velg største antall klienter. Ikke alle plassene trenger å bli tatt STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} firma{P "" er} -STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maks antall firmaer: +STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Største antall selskap: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Begrens tjeneren til et bestemt antall firmaer STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Skriv inn et navn for nettverksspillet @@ -2776,8 +2775,8 @@ STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}Vedlikeh STR_JOIN_STATION_CAPTION :{WHITE}Slå sammen stasjoner STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Bygg separat stasjon -STR_JOIN_WAYPOINT_CAPTION :{WHITE}Slå sammen kontrollpunkter -STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Bygg separat kontrollpunkt +STR_JOIN_WAYPOINT_CAPTION :{WHITE}Slå sammen veipunkter +STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Bygg et separat veipunkt # Generic toolbar STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Deaktivert da det ikke er noen kjøretøy tilgjengelig for denne infrastrukturen @@ -2790,13 +2789,13 @@ STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Bygg maglev STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Bygg jernbanespor. Ctrl+klikk for å fjerne vei. Trykk også Shift for å kun vise kostnadsestimat STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Bygg jernbanespor ved hjelp av autobanemodusen. Ctrl+klikk for å fjerne jernbanespor. Trykk også Shift for å kun vise kostnadsestimat -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Bygg togstall (trengs for å kjøpe og vedlikeholde tog). Trykk også Shift for å vise kun kostnadsestimat +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Bygg togstall (for å kjøpe og vedlikeholde tog). Trykk også Shift for å kun vise kostnadsestimat STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Bygg veipunkt på jernbane. Ctrl+klikk for å velge et annet veipunkt å slå sammen med. Trykk også Shift for å kun vise kostnadsestimat STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Bygg jernbanestasjon. Ctrl+klikk for å velge en annen stasjon å slå sammen med. Trykk også Shift for å kun vise kostnadsestimat -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Bygg jernbanesignaler. Ctrl veksler mellom vingesignaler/lyssignaler{}Hold og dra for å bygge signaler langs en rett jernbanestrekning. Ctrl bygger signaler til det neste krysset eller signalet. Ctrl+klikk viser/skjuler signalvalgsvinduet. Shift bytter mellom bygging/vising av kostnadsestimat +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Bygg jernbanesignaler. Ctrl+klikk for å bygge den alternative signaltypen{}Klikk+dra for å bygge signaler langs en rett jernbanestrekning med valgt avstand. Ctrl+klikk+dra for å bygge signaler til det neste krysset eller signalet. Trykk også Shift for kun å vise kostnadsestimat STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Bygg jernbanebro. Trykk også Shift for å kun vise kostnadsestimat -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Bygg jernbanetunnel. Trykk også Shift for å vise kun kostnadsestimat -STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Veksle mellom bygging/fjerning av jernbanespor, signaler, kontrollpunkt og stasjoner. Hold inne Ctrl for i tillegg å fjerne jernbanespor fra kontrollpunkt og stasjoner +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Bygg jernbanetunnel. Trykk også Shift for å kun vise kostnadsestimat +STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Veksle mellom bygging/fjerning av jernbanespor, signaler, veipunkt og stasjoner. Ctrl+klikk for i tillegg å fjerne jernbanespor fra veipunkt og stasjoner STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Konverter/oppgrader type jernbane. Trykk også Shift for å kun vise kostnadsestimat STR_RAIL_NAME_RAILROAD :Jernbane @@ -2809,8 +2808,8 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Togstall STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Velg togstallens retning # Rail waypoint construction window -STR_WAYPOINT_CAPTION :{WHITE}Kontrollpunkt -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Velg type kontrollpunkt +STR_WAYPOINT_CAPTION :{WHITE}Veipunkt +STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Velg type veipunkt # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Velg jernbanestasjonstype @@ -2829,7 +2828,7 @@ STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Velg sta STR_STATION_CLASS_DFLT :Standard STR_STATION_CLASS_DFLT_STATION :Standard stasjon STR_STATION_CLASS_DFLT_ROADSTOP :Standard veistans -STR_STATION_CLASS_WAYP :Kontrollpunkter +STR_STATION_CLASS_WAYP :Veipunkter STR_STATION_CLASS_WAYP_WAYPOINT :Standard veipunkt # Signal window @@ -2837,13 +2836,13 @@ STR_BUILD_SIGNAL_CAPTION :{WHITE}Signalva STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Veksle mellom visning av avanserte signaltyper STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Blokksignal (vingesignal){}Dette er den enkleste typen av signaler som tillater kun ett tog å kjøre om gangen. STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Inngangssignal (vingesignal){}Grønt så lenge det er ett eller flere grønne utgangssignal fra etterfølgende sporseksjon. Ellers rødt. -STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Utgangssignal (vingesignal){}Oppfører seg på samme måte som et blokksignal, men er nødvendig for å utløse riktig farge på inngangs- og kombinasjons-forsignaler. +STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Utgangssignal (vingesignal){}Oppfører seg på samme måte som et blokksignal, men er nødvendig for å utløse riktig farge på inngangs- og kombinasjonsforsignaler. STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Kombinasjonssignal (vingesignal){}Kombinasjonssignalet fungerer både som inn- og utgangssignal. Dette gjør at du kan bygge store "grener" med forsignaler. STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Avansert signal (vingesignal){}Et avansert signal tillater flere tog å kjøre samtidig på samme signalblokk, dersom togene kan reservere en rute til et trygt stoppested. Vanlige avanserte signaler kan passeres bakfra. STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Enveis avansert signal (vingesignal){}Et avansert signal tillater flere tog å kjøre samtidig på samme signalblokk, dersom togene kan reservere en rute til et trygt stoppested. Enveis avanserte signaler kan ikke passeres bakfra STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Blokksignal (lyssignal){}Dette er den enkleste typen av signaler som tillater kun ett tog å kjøre om gangen. STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Inngangssignal (lyssignal){}Grønt så lenge det er ett eller flere grønne utgangssignal fra etterfølgende sporseksjon. Ellers rødt. -STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Utgangssignal (lyssignal){}Oppfører seg på samme måte som et blokksignal, men er nødvendig for å utløse riktig farge på inngangs- og kombinasjons-forsignaler. +STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Utgangssignal (lyssignal){}Oppfører seg på samme måte som et blokksignal, men er nødvendig for å utløse riktig farge på inngangs- og kombinasjonsforsignaler. STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Kombinasjonssignal (lyssignal){}Kombinasjonssignalet fungerer både som inn- og utgangssignal. Dette gjør at du kan bygge store "grener" med forsignaler. STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Avanserte signal (lyssignal){}Et avansert signal tillater flere tog å kjøre samtidig på samme signalblokk, dersom togene kan reservere en rute til et trygt stoppested. Vanlige avanserte signaler kan passeres bakfra. STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Enveis avansert signal (lyssignal){}Et avansert signal tillater flere tog å kjøre samtidig på samme signalblokk, dersom togene kan reservere en rute til et trygt stoppested . Enveis avanserte signaler kan ikke passeres bakfra. @@ -2871,14 +2870,14 @@ STR_BRIDGE_TUBULAR_SILICON :Hvelv, Silisium # Road construction toolbar -STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Bygg vei +STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Bygge vei STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Bygg trikkespor STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Bygg vei. Ctrl+klikk for å fjerne vei. Trykk også Shift for å kun vise kostnadsestimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Bygg trikkespor. Ctrl+klikk for å fjerne trikkespor. Trykk også Shift for å kun vise kostnadsestimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Bygg vei ved bruk av autoveimodusen. Ctrl+klikk for å fjerne vei. Trykk også Shift for å kun vise kostnadsestimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Bygg trikkespor ved bruk av autotrikkespormodusen. Ctrl+klikk for å fjerne trikkespor. Trykk også Shift for å kun vise kostnadsestimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Bygg garasje (for kjøp og vedlikehold av kjøretøy). Trykk også Shift for å kun vise kostnadsestimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Bygg trikkestall (nødvendig for kjøp og vedlikehold av trikker). Trykk også Shift for å kun vise kostnadsestimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Bygg trikkestall (for kjøp og vedlikehold av trikker). Trykk også Shift for å kun vise kostnadsestimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Bygg bussholdeplass. Ctrl+klikk for å velge en annen holdeplass å slå sammen med. Trykk også Shift for å kun vise kostnadsestimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Bygg trikkestopp for passasjerer. Ctrl+klikk for å velge en annen stasjon å slå sammen med. Trykk også Shift for å kun vise kostnadsestimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Bygg godsterminal. Ctrl+klikk for å velge en annen terminal å slå sammen med. Trykk også Shift for å kun vise kostnadsestimat @@ -2889,7 +2888,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Bygg tri STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Bygg veitunnel. Trykk også Shift for å kun vise kostnadsestimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Bygg trikkesportunnel. Trykk også Shift for å kun vise kostnadsestimat STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Veksle mellom bygging/fjerning for veibygging -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Veksle mellom bygging/fjerning for trikkesporkonstruksjon +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Veksle mellom bygging/fjerning for trikkesporlegging STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Konverter/oppgrader type vei. Trykk også Shift for å kun vise kostnadsestimat STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Konverter/oppgrader type trikk. Trykk også Shift for å kun vise kostnadsestimat @@ -2960,7 +2959,7 @@ STR_STATION_BUILD_NOISE :{BLACK}Støy ge # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Landskapsverktøy -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Senk et hjørne av et landområde. Dra for å senke det første valgte hjørnet, og jevne resten til samme høyde. Ctrl velger område diagonalt. Shift slår av/på kostnadsestimat +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Senk et hjørne av et landområde. Klikk+dra for å senke det første valgte hjørnet, og planer det valgte arealet til den nye hjørnehøyden. Ctrl+klikk+dra for å velge området diagonalt. Trykk også Shift for kun å vise kostnadsestimat STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Hev et hjørne av et landområde. Ctrl+dra for å heve det første valgte hjørnet, og jevne resten av området til samme høyde. Ctrl+klikk+dra for å velge området diagonalt. Trykk også Shift for å kun vise kostnadsestimat STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Jevn ut et landareal til samme høyde som det første valgte hjørnet. Ctrl+klikk+dra for å velge arealet diagonalt. Trykk også Shift for å kun vise kostnadsestimat STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Kjøp opp land for fremtidig bruk. Ctrl+klikk+dra for å velge arealet diagonalt. Trykk også Shift for å kun vise kostnadsestimat @@ -2983,11 +2982,11 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plasser STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Tilfeldige trær STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plasser trær tilfeldig i landskapet STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plant ett og ett tre ved å dra over landskapet. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plant ett og ett tre ved å dra over landskapet STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Vokse -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plant små skoger ved å dra over landskapet. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plant små skoger ved å dra over landskapet STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Skog -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plant store skoger ved å dra over landskapet. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plant store skoger ved å dra over landskapet # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Landskapsgenerering @@ -3107,7 +3106,7 @@ STR_LAI_CLEAR_DESCRIPTION_ROUGH_LAND :Ulendt terreng STR_LAI_CLEAR_DESCRIPTION_BARE_LAND :Bart land STR_LAI_CLEAR_DESCRIPTION_GRASS :Gress STR_LAI_CLEAR_DESCRIPTION_FIELDS :Jorder -STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Snødekket land +STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Snødekt land STR_LAI_CLEAR_DESCRIPTION_DESERT :Ørken STR_LAI_RAIL_DESCRIPTION_TRACK :Jernbanespor @@ -3155,7 +3154,7 @@ STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :{G=masculine}Go STR_LAI_STATION_DESCRIPTION_BUS_STATION :{G=masculine}Bussterminal STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :{G=feminine}Havn STR_LAI_STATION_DESCRIPTION_BUOY :{G=feminine}Bøye -STR_LAI_STATION_DESCRIPTION_WAYPOINT :{G=neuter}Kontrollpunkt +STR_LAI_STATION_DESCRIPTION_WAYPOINT :{G=neuter}Veipunkt STR_LAI_WATER_DESCRIPTION_WATER :Vann STR_LAI_WATER_DESCRIPTION_CANAL :Kanal @@ -3190,7 +3189,7 @@ STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT :Akvedukt STR_LAI_OBJECT_DESCRIPTION_TRANSMITTER :Radiosender STR_LAI_OBJECT_DESCRIPTION_LIGHTHOUSE :Fyrtårn STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Firmaets hovedkontor -STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Firma-eid landområde +STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Selskapseid landområde # About OpenTTD window STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD @@ -3202,11 +3201,11 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Oppdateringsrate STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simuleringshastighet: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Antall spill-tikk per sekund. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Antall spilltikk simulert per sekund STR_FRAMERATE_RATE_BLITTER :{BLACK}Oppdateringsrate: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Antall bilder tegnet per sekund. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Antall bilder tegnet per sekund STR_FRAMERATE_SPEED_FACTOR :{BLACK}Gjeldende spillhastighetsfaktor: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hvor raskt spillet kjører i forhold til forventet hastighet ved normal simulering. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hvor raskt spillet kjører, sammenliknet med forventet hastighet ved normal simuleringsrate STR_FRAMERATE_CURRENT :{WHITE}Gjeldende STR_FRAMERATE_AVERAGE :{WHITE}Middels STR_FRAMERATE_MEMORYUSE :{WHITE}Minne @@ -3222,14 +3221,14 @@ STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COM STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ###length 15 -STR_FRAMERATE_GAMELOOP :{BLACK}Spill-løkke totalt: +STR_FRAMERATE_GAMELOOP :{BLACK}Spillløkke totalt: STR_FRAMERATE_GL_ECONOMY :{BLACK} Godshåndtering: -STR_FRAMERATE_GL_TRAINS :{BLACK} Tog-tikk: -STR_FRAMERATE_GL_ROADVEHS :{BLACK} Veikjøretøy-tikk: -STR_FRAMERATE_GL_SHIPS :{BLACK} Skips-tikk: -STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Fly-tikk: -STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Spillverden-tikk: -STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Koblingsgraf-etterslep: +STR_FRAMERATE_GL_TRAINS :{BLACK} Togtikk: +STR_FRAMERATE_GL_ROADVEHS :{BLACK}Kjøretøytikk: +STR_FRAMERATE_GL_SHIPS :{BLACK} Skipstikk: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Flytikk: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Verdenstikk: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Koblingsgrafetterslep: STR_FRAMERATE_DRAWING :{BLACK}Grafikktegning: STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Synsfelt for spillverden: STR_FRAMERATE_VIDEO :{BLACK}Video output: @@ -3239,14 +3238,14 @@ STR_FRAMERATE_GAMESCRIPT :{BLACK} Game STR_FRAMERATE_AI :{BLACK} KI {NUM} {STRING} ###length 15 -STR_FRAMETIME_CAPTION_GAMELOOP :Spill-løkke +STR_FRAMETIME_CAPTION_GAMELOOP :Spilløkke STR_FRAMETIME_CAPTION_GL_ECONOMY :Godshåndtering STR_FRAMETIME_CAPTION_GL_TRAINS :Tog-tikk -STR_FRAMETIME_CAPTION_GL_ROADVEHS :Veikjøretøy-tikk +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Kjøretøytikk STR_FRAMETIME_CAPTION_GL_SHIPS :Skips-tikk -STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Fly-tikk -STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Verdens-tikk -STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Koblingsgrad-etterslep +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Flytikk +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Verdenstikk +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Koblingsgradetterslep STR_FRAMETIME_CAPTION_DRAWING :Grafikktegning STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Tegning av synsfelt for spillverden STR_FRAMETIME_CAPTION_VIDEO :Video output @@ -3301,8 +3300,8 @@ STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Antall i STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Velg tettheten av industrier, eller et fritt tall STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Høyeste fjelltopp: STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Velg den høyeste toppen spillet vil forsøke å opprette, målt i høyde over havnivå -STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Øk den maksimale høyden på den høyeste fjelltoppen på kartet med en -STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Reduser den maksimale høyden på den høyeste fjelltoppen med en +STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Øk den største høyden på den høyeste fjelltoppen på kartet med én +STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Reduser den største høyden på den høyeste fjelltoppen på kartet med én STR_MAPGEN_SNOW_COVERAGE :{BLACK}Snødekning STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Øk snødekningen med ti prosent STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Øk snødekningen med ti prosent @@ -3397,10 +3396,10 @@ STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / STR_GENERATION_WORLD_GENERATION :{BLACK}Generer en verden STR_GENERATION_RIVER_GENERATION :{BLACK}Skap elver STR_GENERATION_TREE_GENERATION :{BLACK}Tregenerering -STR_GENERATION_OBJECT_GENERATION :{BLACK}Objekt-generering +STR_GENERATION_OBJECT_GENERATION :{BLACK}Objektgenerering STR_GENERATION_CLEARING_TILES :{BLACK}Generering av ulendt og steinete område STR_GENERATION_SETTINGUP_GAME :{BLACK}Klargjør spillet -STR_GENERATION_PREPARING_TILELOOP :{BLACK}Kjører rute-løkke +STR_GENERATION_PREPARING_TILELOOP :{BLACK}Kjører ruteløkke STR_GENERATION_PREPARING_SCRIPT :{BLACK}Kjører skript STR_GENERATION_PREPARING_GAME :{BLACK}Gjør klart spillet @@ -3550,7 +3549,7 @@ STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Du er i STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Kan ikke legge til fil: GRF ID finnes allerede STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Matchende fil ble ikke funnet (kompatibel GRF-fil lastet inn) -STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Kan ikke legge til fil: Maksgrense nådd for NewGRF-filer +STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Kan ikke legge til fil: Grense nådd for NewGRF-filer STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}Kompatibel GRF(er) lastet for manglende filer STR_NEWGRF_DISABLED_WARNING :{WHITE}Manglende GRF-fil(er) har blitt deaktivert @@ -3572,7 +3571,7 @@ STR_NEWGRF_BROKEN_CAPACITY :{WHITE} Det end STR_BROKEN_VEHICLE_LENGTH :{WHITE}Tog '{VEHICLE}' tilhørende '{COMPANY}' har ugyldig lengde. Dette skyldes trolig problemer med NewGRF-er. Spillet kan bli usynkronisert eller krasje. STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' gir feilaktig informasjon. -STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Vare-/ombyggingsinformasjon for '{1:ENGINE}' er forskjellig fra kjøpelisten etter konstruksjonen. Dette kan resultere i at autofornying ikke fungerer på riktig måte. +STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Vare-/ombyggingsinformasjon for '{1:ENGINE}' er forskjellig fra kjøpelisten etter konstruksjonen. Dette kan resultere i at automatisk fornyelse ikke fungerer på riktig måte. STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' forårsaket en uendelig løkke i produksjonstilbakekallet. STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Tilbakekall {1:HEX} rapporterte ukjent/ugyldig resultat {2:HEX} STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' ugyldig varetype i produksjonscallback at {2:HEX} @@ -3630,7 +3629,7 @@ STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Byen vok STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Byen vokser hver {ORANGE}{UNITS_DAYS_OR_SECONDS} (finansiert) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Byen vokser {RED}ikke{BLACK} STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Flystøy: {ORANGE}{COMMA}{BLACK} støygrense: {ORANGE}{COMMA} -STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Gå til by. Ctrl+klikk åpner et nytt tilleggsvindu over byen +STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Sentrer hovedvisningen på bylokasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på bylokasjon STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Lokale myndigheter STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Vis informasjon om lokale myndigheter STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Endre navn på byen @@ -3687,7 +3686,7 @@ STR_GOALS_TEXT :{ORANGE}{STRING STR_GOALS_NONE :{ORANGE}- Ingen - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}klikk på mål for å gå til industri/by/rute . Ctrl+klikk åpner et nytt tilleggsvindu over industriens/byens/rutens beliggenhet +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikk på mål for å sentrere hovedvisningen på industri/by/rute . Ctrl+klikk for å åpner et nytt tilleggsvindu på lokasjonen til industrien/byen/ruten # Goal question window STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Spørsmål @@ -3723,7 +3722,7 @@ STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_NONE :{ORANGE}- Ingen - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Tjenester som allerede subsidieres: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} fra {STRING} til {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) -STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikk for å gå til industri/by. Ctrl+klikk åpner et nytt tilleggsvindu over industrien/byen +STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikk på tjeneste for å sentrere hovedvisningen på industri/by. Ctrl+klikk for å åpne et nytt tilleggsvindu på industri-/bylokasjon STR_SUBSIDIES_OFFERED_EXPIRY_DATE :innen {DATE_SHORT} STR_SUBSIDIES_OFFERED_EXPIRY_TIME :i løpet av {UNITS_MONTHS_OR_MINUTES} STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :til {DATE_SHORT} @@ -3735,7 +3734,7 @@ STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Global h STR_STORY_BOOK_SPECTATOR :Global historiebok STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Side {NUM} -STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Gå til en bestemt side ved å velge den i denne nedtrekkslisten. +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Gå til en bestemt side ved å velge den i denne nedtrekkslisten STR_STORY_BOOK_PREV_PAGE :{BLACK}Forrige STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Gå til forrige side STR_STORY_BOOK_NEXT_PAGE :{BLACK}Neste @@ -3743,7 +3742,7 @@ STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Gå til STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Ugyldig mål-referanse # Station list window -STR_STATION_LIST_TOOLTIP :{BLACK}Stasjonsnavn - klikk på navnet for å gå til stasjonen. Ctrl+klikk åpner et nytt tilleggsvindu over stasjonen. +STR_STATION_LIST_TOOLTIP :{BLACK}Stasjonsnavn - klikk på navnet for å sentrere hovedvisningen på stasjonen. Ctrl+klikk for å åpne et nytt tilleggsvindu på stasjonslokasjon. STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Ctrl+klikk for å velge flere elementer STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} stasjon{P "" er} STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} @@ -3809,7 +3808,7 @@ STR_CARGO_RATING_VERY_GOOD :Veldig god STR_CARGO_RATING_EXCELLENT :Utmerket STR_CARGO_RATING_OUTSTANDING :Fremragende -STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Gå til stasjon. Ctrl+klikk åpner et nytt tilleggsvindu over stasjonen +STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Sentrer hovedvisningen på stasjonslokasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på stasjonslokasjon STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Endre stasjonens navn STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Vis alle tog som har denne stasjonen på sin ruteplan @@ -3825,11 +3824,11 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Hindre f # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Sentrer hovedvinduet på veipunktets lokasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på veipunktets lokasjon -STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Endre kontrollpunktets navn +STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Endre veipunktets navn STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Sentrer hovedvinduet på bøyens lokasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på bøyens lokasjon STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Endre navn på bøye -STR_EDIT_WAYPOINT_NAME :{WHITE}Endre navn på kontrollpunkt +STR_EDIT_WAYPOINT_NAME :{WHITE}Endre navn på veipunkt # Finances window STR_FINANCES_CAPTION :{WHITE}{COMPANY}s regnskap{BLACK}{COMPANY_NUM} @@ -3844,7 +3843,7 @@ STR_FINANCES_CAPITAL_EXPENSES_TITLE :{WHITE}Kapitalk ###length 13 -STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Konstruksjon +STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Byggeaktivitet STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Nye kjøretøy STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Tog STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Kjøretøy @@ -3862,12 +3861,12 @@ STR_FINANCES_TOTAL_CAPTION :{WHITE}Totalt STR_FINANCES_NEGATIVE_INCOME :-{CURRENCY_LONG} STR_FINANCES_ZERO_INCOME :{CURRENCY_LONG} STR_FINANCES_POSITIVE_INCOME :+{CURRENCY_LONG} -STR_FINANCES_PROFIT :{WHITE}Profitt +STR_FINANCES_PROFIT :{WHITE}Fortjeneste STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Saldo STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Egne midler STR_FINANCES_LOAN_TITLE :{WHITE}Lån STR_FINANCES_INTEREST_RATE :{WHITE}Lånerenter: {BLACK}{NUM}% -STR_FINANCES_MAX_LOAN :{WHITE}Maks lån: {BLACK}{CURRENCY_LONG} +STR_FINANCES_MAX_LOAN :{WHITE}Største lån: {BLACK}{CURRENCY_LONG} STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG} STR_FINANCES_BORROW_BUTTON :{BLACK}Lån ({CURRENCY_LONG}) @@ -3923,7 +3922,7 @@ STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Firmanavn STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Sjefens navn STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Skriv inn hvor mye penger du vil gi -STR_BUY_COMPANY_MESSAGE :{WHITE}Vi ser etter et transportfirma som er villig til å overta oss.{}{}Vil du kjøpe {COMPANY} for {CURRENCY_LONG}? +STR_BUY_COMPANY_MESSAGE :{WHITE}Vi ser etter et transportselskap som er villig til å overta oss.{}{}Vil du kjøpe {COMPANY} for {CURRENCY_LONG}? STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}I en fiendtlig overtakelse av {COMPANY} vil du kjøpe alle eiendelen, betale ned alle lån, og betale to års utbytte.{}{}Totalt estimert til {CURRENCY_LONG}.{}{}Ønsker du å fortsette denne fiendtlige overtakelsen? # Company infrastructure window @@ -3949,7 +3948,7 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} og {NUM} flere... -STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industrinavn - klikk på navn for å gå til industri. Ctrl+klikk åpner et nytt tilleggsvindu over industrien +STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industrinavn - klikk på navn for å sentrere hovedvisningen på industrien. Ctrl+klikk for å åpne et nytt tilleggsvindu på industrilokasjonen STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Godtatte varer:{SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Produserte varer: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Alle varetyper @@ -3960,7 +3959,7 @@ STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTR STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produksjon forrige måned: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produksjon forrige minutt: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% transportert) -STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Gå til industri. Ctrl+klikk åpner et nytt tilleggsvindu over industrien +STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Sentrer hovedvisningen på industrilokasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på industrilokasjon STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksjonsnivå: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Næringen har annonsert snarlig nedleggelse! @@ -4000,7 +3999,7 @@ STR_VEHICLE_LIST_REPLACE_VEHICLES :Bytt ut kjøret STR_VEHICLE_LIST_SEND_FOR_SERVICING :Send til vedlikehold STR_VEHICLE_LIST_CREATE_GROUP :Lag gruppe STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Fortjeneste i år: {CURRENCY_LONG} (i fjor: {CURRENCY_LONG}) -STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{TINY_FONT}{BLACK}Profitt denne perioden: {CURRENCY_LONG} (forrige periode: {CURRENCY_LONG}) +STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{TINY_FONT}{BLACK}Fortjeneste denne perioden: {CURRENCY_LONG} (forrige periode: {CURRENCY_LONG}) STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} @@ -4030,12 +4029,12 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Ugrupperte luft STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupper - Klikk på en gruppe for å se alle kjøretøy i gruppen. Dra og slipp grupper for å arrangere dem hierarkisk +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupper - klikk på en gruppe for å se alle transportmidler i gruppen. Dra og slipp grupper for å sortere dem hierarkisk STR_GROUP_CREATE_TOOLTIP :{BLACK}Klikk for å opprette en gruppe STR_GROUP_DELETE_TOOLTIP :{BLACK}Fjern den valgte gruppen STR_GROUP_RENAME_TOOLTIP :{BLACK}Gi nytt navn på den valgte gruppen STR_GROUP_LIVERY_TOOLTIP :{BLACK}Endre design for den valgte gruppen -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klikk for å beskytte denne gruppen fra global autoerstatning. Ctrl+klikk for å også beskytte undergrupper +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klikk for å beskytte denne gruppen fra global automatisk erstatning. Ctrl+klikk for å også beskytte undergrupper STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Slette gruppe STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Er du sikker på at du vil slette denne gruppen og eventuelle etterkommere? @@ -4046,7 +4045,7 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Fjern alle kjø STR_GROUP_RENAME_CAPTION :{BLACK}Endre navn på gruppe STR_GROUP_PROFIT_THIS_YEAR :Fortjeneste i år: -STR_GROUP_PROFIT_THIS_PERIOD :Profitt denne periode: +STR_GROUP_PROFIT_THIS_PERIOD :Fortjeneste denne periode: STR_GROUP_PROFIT_LAST_YEAR :Fortjeneste i fjor: STR_GROUP_PROFIT_LAST_PERIOD :Fortjeneste forrige periode: STR_GROUP_OCCUPANCY :Gjeldende bruk: @@ -4065,7 +4064,7 @@ STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Nye trikkekjør # Vehicle availability ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Nytt jernbanemateriell -STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Nye veikjøretøy +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Nye kjøretøy STR_BUY_VEHICLE_SHIP_CAPTION :Nye skip STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nye luftfartøy @@ -4080,7 +4079,7 @@ STR_PURCHASE_INFO_RUNNINGCOST_PERIOD :{BLACK}Driftsko STR_PURCHASE_INFO_CAPACITY :{BLACK}Kapasitet: {GOLD}{CARGO_LONG} {STRING} STR_PURCHASE_INFO_REFITTABLE :(ombyggbart) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Designet: {GOLD}{NUM}{BLACK} Levetid: {GOLD}{COMMA} år -STR_PURCHASE_INFO_RELIABILITY :{BLACK}Maks pålitelighet: {GOLD}{COMMA}{NBSP}% +STR_PURCHASE_INFO_RELIABILITY :{BLACK}Største pålitelighet: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Kostnad: {GOLD}{CURRENCY_LONG} STR_PURCHASE_INFO_COST_REFIT :{BLACK}Kostnad: {GOLD}{CURRENCY_LONG}{BLACK} (Ombyggingskostnad: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Vekt: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) @@ -4093,7 +4092,7 @@ STR_PURCHASE_INFO_ALL_TYPES :Alle varetyper STR_PURCHASE_INFO_NONE :Ingen STR_PURCHASE_INFO_ENGINES_ONLY :Kun lokomotiv STR_PURCHASE_INFO_ALL_BUT :Alt utenom {CARGO_LIST} -STR_PURCHASE_INFO_MAX_TE :{BLACK}Maks trekkraft: {GOLD}{FORCE} +STR_PURCHASE_INFO_MAX_TE :{BLACK}Største trekkraft: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Rekkevidde: {GOLD}{COMMA} ruter STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Flytype: {GOLD}{STRING} @@ -4222,14 +4221,14 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Kopier s STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Kopier luftfartøy ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Dette vil kjøpe en kopi av et tog inkludert alle vognene. Klikk denne knappen og deretter på et tog utenfor eller inni togstallen. Ctrl+klikk deler ordrene. Shift+klikk viser estimert kostnad uten kjøp -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Dette vil skape en kopi av et kjøretøy. Klikk denne knappen og deretter på et kjøretøy utenfor eller inni garasjen. Ctrl+klikk vil dele ordrene. Shift+klikk viser estimert kostnad -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Dette vil skape en kopi av et skip. Klikk denne knappen og deretter på et skip utenfor eller inni skipsdokken. Ctrl+klikk vil dele ordrene. Shift+klikk viser estimert kostnad -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Dette vil skape en kopi av et luftfartøy. Klikk denne knappen og deretter på et luftfartøy utenfor eller inni hangaren. Ctrl+klikk vil dele ordrene. Shift+klikk viser estimert kostnad +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Kjøp en kopi av et tog inkludert alle vogner. Klikk på denne knappen og deretter på et tog inne i eller utenfor togstallen. Ctrl+klikk vil dele ordrene. Trykk også Shift for kun å vise kostnadsestimat +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Kjøp en kopi av et kjøretøy. Klikk på denne knappen og deretter på et kjøretøy inne i eller utenfor garasjen. Ctrl+klikk vil dele ordrene. Trykk også Shift for kun å vise kostnadsestimat +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Kjøp en kopi av et skip. Klikk på denne knappen og deretter på et skip inne i eller utenfor skipsdokken. Ctrl+klikk vil dele ordrene. Trykk også Shift for kun å vise kostnadsestimat +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Kjøp en kopi av et luftfartøy. Klikk på denne knappen og deretter på et luftfartøy inne i eller utenfor hangaren. Ctrl+klikk vil dele ordrene. Trykk også Shift for kun å vise kostnadsestimat ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Midtjuster hovedvinduet på togstallens lokalisasjon. Ctrl+Klikk åpner et nytt tilleggsvindu over togstallens lokalisasjon -STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Midtjuster hovedvinduet på vegkjøretøyets garasje lokalisasjon. Dobbelklikk for å følge kjøretøyet i hovedvinduet. Ctrl+Klikk åpner et nytt tilleggsvindu over vegkjøretøyets garasje lokalisasjon +STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Sentrer hovedvisningen på togstall. Ctrl+klikk for å åpne et nytt tilleggsvindu på togstall +STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Sentrer hovedvisningen på garasjelokasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på garasjelokasjon STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Midtjuster hovedvinduet på skipsdokkens lokasjon. Dobbelklikk for å følge skipet i hovedvinduet. Ctrl+klikk åpner et nytt tilleggsvindu over skipsdokkens lokasjon STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Sentrer hovedvinduet på hangarens lokasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på hangarens lokasjon @@ -4274,7 +4273,7 @@ STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING} STR_ENGINE_PREVIEW_COST_WEIGHT :Kostnad: {CURRENCY_LONG} Vekt: {WEIGHT_SHORT} STR_ENGINE_PREVIEW_COST_MAX_SPEED :Kostnad: {CURRENCY_LONG} Topphastighet: {VELOCITY} STR_ENGINE_PREVIEW_SPEED_POWER :Hastighet: {VELOCITY} Kraft: {POWER} -STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Hastighet: {VELOCITY} Kraft: {POWER} Maks. TK.: {FORCE} +STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Hastighet: {VELOCITY} Kraft: {POWER} Største TK.: {FORCE} STR_ENGINE_PREVIEW_TYPE :Flytype: {STRING} STR_ENGINE_PREVIEW_TYPE_RANGE :Flytype: {STRING} Rekkevidde: {COMMA} ruter STR_ENGINE_PREVIEW_RUNCOST_YEAR :Running Cost: {CURRENCY_LONG}/år @@ -4313,7 +4312,7 @@ STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Veksle m STR_REPLACE_ENGINES :Lokomotiv STR_REPLACE_WAGONS :Vogner STR_REPLACE_ALL_RAILTYPE :Alt jernbanemateriell -STR_REPLACE_ALL_ROADTYPE :Alle veikjøretøy +STR_REPLACE_ALL_ROADTYPE :Alle kjøretøy ###length 2 STR_REPLACE_HELP_RAILTYPE :{BLACK}Velg jernbanetypen du vil bytte ut lokomotiv på @@ -4326,7 +4325,7 @@ STR_REPLACE_ELRAIL_VEHICLES :Elektrisk jernb STR_REPLACE_MONORAIL_VEHICLES :Monorail-kjøretøy STR_REPLACE_MAGLEV_VEHICLES :Maglev-kjøretøy -STR_REPLACE_ROAD_VEHICLES :Veikjøretøy +STR_REPLACE_ROAD_VEHICLES :Kjøretøy STR_REPLACE_TRAM_VEHICLES :Trikkekjøretøy STR_REPLACE_REMOVE_WAGON :{BLACK}Vognfjerning ({STRING}): {ORANGE}{STRING} @@ -4337,8 +4336,8 @@ STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl+ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Midtjuster hovedvinduet på togets lokalisasjon. Dobbelklikk for å følge toget i hovedvinduet. Ctrl+Klikk åpner et nytt tilleggsvindu over togets lokalisasjon -STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Sentrer hovedvinduet på kjøretøyets lokasjon. Dobbeltklikk for å følge skipet i hovedvinduet. Ctrl+klikk for å åpne et nytt tilleggsvindu på kjøretøyets lokasjon +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}{BLACK}Sentrer hovedvinduet på togets lokasjon. Dobbeltklikk for å følge toget i hovedvinduet. Ctrl+klikk for å åpne et nytt tilleggsvindu på togets lokasjon +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Sentrer hovedvinduet på kjøretøyets lokasjon. Dobbeltklikk for å følge kjøretøyet i hovedvinduet. Ctrl+klikk for å åpne et nytt tilleggsvindu på kjøretøyets lokasjon STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Sentrer hovedvinduet på skipets lokasjon. Dobbeltklikk for å følge skipet i hovedvinduet. Ctrl+klikk for å åpne et nytt tilleggsvindu på skipets lokasjon STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Midtjuster hovedvinduet på flyets lokasjon. Dobbelklikk for å følge flyet i hovedvinduet. Ctrl+klikk åpner et nytt tilleggsvindu over flyet lokasjon @@ -4349,15 +4348,15 @@ STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send ski STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send luftfartøyet til en hangar. Ctrl+klikk for kun vedlikehold ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Dette vil skape en kopi av toget, inkludert alle vognene. Ctrl+klikk vil sørge for delte ordre. Shift+klikk viser estimert kostnad +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Kjøp en kopi av toget inkludert alle vognene. Ctrl+klikk for å dele ordre. Trykk også Shift for kun å vise kostnadsestimat STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Kjøp en kopi av kjøretøyet. Ctrl+klikk vil dele ordrene. Trykk også Shift for å vise kostnadsestimat -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Dette vil skape en kopi av skipet. Ctrl+klikk vil dele ordrene. Shift+klikk viser estimert kostnad +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Kjøp en kopi av skipet. Ctrl+klikk for å dele ordre. Trykk også Shift for kun å vise kostnadsestimat STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Kjøp en kopi av luftfartøyet. Ctrl+klikk vil dele ordrene. Trykk også Shift for å vise kostnadsestimat STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Tving toget til å fortsette uten å vente på klarsignal STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Snu togets kjøreretning STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Tving kjøretøy til å snu om -STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Midtjuster hovedvinduet på ordrens lokalisasjon. Ctrl+Klikk åpner et nytt tilleggsvindu over ordrens lokalisasjon +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Sentrer hovedvisningen på ordrens destinasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på lokasjonen til ordrens destinasjon ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Bygg om toget til å frakte en annen varetype @@ -4438,8 +4437,8 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Vekt: {L STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Fortjeneste i år: {LTBLUE}{CURRENCY_LONG} (i fjor: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Fortjeneste dette år: {LTBLUE}{CURRENCY_LONG} (forrige år: {CURRENCY_LONG}) {BLACK}Min. ytelse: {LTBLUE}{POWER_TO_WEIGHT} -STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Profitt denne perioden: {LTBLUE}{CURRENCY_LONG} (forrige periode: {CURRENCY_LONG}) -STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Profitt denne perioden: {LTBLUE}{CURRENCY_LONG} (forrige periode: {CURRENCY_LONG}) {BLACK}Minste ytelse: {LTBLUE}{POWER_TO_WEIGHT} +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Fortjeneste denne perioden: {LTBLUE}{CURRENCY_LONG} (forrige periode: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Fortjeneste denne perioden: {LTBLUE}{CURRENCY_LONG} (forrige periode: {CURRENCY_LONG}) {BLACK}Minste ytelse: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Pålitelighet: {LTBLUE}{COMMA}{NBSP}% {BLACK}Havarier siden siste vedlikehold: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY_LONG} @@ -4504,7 +4503,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Ny kapas STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Ny kapasitet: {GOLD}{CARGO_LONG}{}{BLACK}Inntekt fra ombygning: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Ny kapasitet: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Kostnad for ombygging: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Ny kapasitet: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Inntekt fra ombygning: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Velg kjøretøy for ombygging. Dra med musen for å velge flere kjøretøy. Klikk på et tomt område for å velge hele kjøretøyet. Ctrl+klikk vil velge et kjøretøy og den følgende kjeden +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Velg transportmidler for ombygging. Klikk+dra for å velge flere transportmidler. Klikk på et tomt område for å velge hele transportmiddelet. Ctrl+klikk vil velge et transportmiddel og den følgende kjeden ###length VEHICLE_TYPES STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Velg hvilken varetype toget skal frakte @@ -4561,7 +4560,7 @@ STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Endre lo STR_ORDER_REFIT :{BLACK}Bygg om STR_ORDER_REFIT_TOOLTIP :{BLACK}Velg hvilken varetype det skal bygges om til i denne ordren. Ctrl+klikk for å fjerne ombyggingsordren STR_ORDER_REFIT_AUTO :{BLACK}Ombygging på stasjon -STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Velg hvilken godstype det skal bygges om til i denne ordren. Ctrl+klikk for å fjerne ombyggingsinstrukser. Ombygging blir kun utført hvis kjøretøyet tillater det +STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Velg hvilken varetype det skal bygges om til i denne ordren. Ctrl+klikk for å fjerne ombyggingsinstrukser. Ombygging blir kun utført hvis transportmiddelet tillater det STR_ORDER_DROP_REFIT_AUTO :Fast varetype STR_ORDER_DROP_REFIT_AUTO_ANY :Tilgjengelig varetype @@ -4589,7 +4588,7 @@ STR_ORDER_CONDITIONAL_AGE :Alder (år) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Trenger vedlikehold STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Alltid STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Gjenstående levetid (år) -STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maksimal pålitelighet +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Største pålitelighet ###next-name-looks-similar STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Hvordan sammenligne kjøretøyets data til den gitte verdi @@ -4612,14 +4611,14 @@ STR_ORDERS_DELETE_BUTTON :{BLACK}Slett STR_ORDERS_DELETE_TOOLTIP :{BLACK}Slett den merkede ordren STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Slett alle ordre STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Stopp deling -STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Stans deling av ordrelisten. Ctrl+klikk for å slette alle ordre for denne farkosten i tillegg +STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Stans deling av ordrelisten. Ctrl+klikk for å slette alle ordre for dette transportmiddelet i tillegg STR_ORDERS_GO_TO_BUTTON :{BLACK}Kjør til STR_ORDER_GO_TO_NEAREST_DEPOT :Gå til nærmeste garasje/stall/hangar/dokk STR_ORDER_GO_TO_NEAREST_HANGAR :Gå til nærmeste hangar STR_ORDER_CONDITIONAL :Betinget ordrehopp STR_ORDER_SHARE :Del ordre -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Sett inn en ny ordre før den merkede ordren, eller legg til i slutten av listen. Ctrl gir ordren 'full last, enhver varetype', kontrollpunktordre 'direkte' og verkstedsordre 'vedlikehold'. 'Del ordrer' eller Ctrl lar dette kjøretøyet dele ordrer med det valgte kjøretøyet. Klikk på et kjøretøy for å kopiere ordrene fra det. En verkstedsordre slår av automatisk vedlikehold av kjøretøyet +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Sett inn en ny ordre før den merkede ordren, eller legg til i slutten av listen. Ctrl+klikk på en stasjon for 'full last av enhver vare', på et veipunkt for å invertere 'direkte' og et depot for 'dele'. Kilkk på et annet transportmiddel for å kopiere dets ordre, eller Ctrl+klikk for å dele ordre. En depotordre deaktiverer automatisk vedlikehold av transportmiddelet STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Vis alle kjøretøy som deler denne ruteplanen @@ -4706,9 +4705,9 @@ STR_TIMETABLE_TOOLTIP :{BLACK}Rutetabe STR_TIMETABLE_NO_TRAVEL :Ingen reise STR_TIMETABLE_NOT_TIMETABLEABLE :Reis (automatisk; settes på ruteplan med neste manuelle ordre) STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Reise (uten rutetabell) -STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Reis (uten rutetabell) med maks {2:VELOCITY} +STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Reis (uten rutetabell) med inntil {2:VELOCITY} STR_TIMETABLE_TRAVEL_FOR :Reise i {STRING} -STR_TIMETABLE_TRAVEL_FOR_SPEED :Reis i {STRING} med maks {VELOCITY} +STR_TIMETABLE_TRAVEL_FOR_SPEED :Reis i {STRING} med inntil {VELOCITY} STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Reise (i {STRING}, ikke oppsatt i rutetabell) STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Reise (i {STRING}, ikke oppsatt i rutetabell) med høyst {VELOCITY} STR_TIMETABLE_STAY_FOR_ESTIMATED :(opphold i {STRING}, ikke oppsatt i rutetabell) @@ -4727,7 +4726,7 @@ STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Denne ru STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Denne rutetabellen vil starte om {COMMA} sekunder STR_TIMETABLE_START :{BLACK}Start rutetabell -STR_TIMETABLE_START_TOOLTIP :{BLACK}Velg når denne rutetabellen starter. Ctrl+klikk for å distribuere start av alle farkoster som deler denne ordren basert på deres innbyrdes rekkefølge jevnt, hvis ordren er fullstendig beskrevet i rutetabellen +STR_TIMETABLE_START_TOOLTIP :{BLACK}Velg når denne rutetabellen starter. Ctrl+klikk for å distribuere start av alle transportmidler som deler denne ordren basert på deres innbyrdes rekkefølge jevnt, hvis ordren er fullstendig beskrevet i rutetabellen STR_TIMETABLE_START_SECONDS_QUERY :Sekunder til rutetabellen starter @@ -4744,7 +4743,7 @@ STR_TIMETABLE_CLEAR_SPEED :{BLACK}Fjern fa STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Fjern største reisehastighet for den merkede ordren. Ctrl+klikk for å fjerne hastigheten for alle ordre STR_TIMETABLE_RESET_LATENESS :{BLACK}Nullstill senhetsteller -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Nullstill senhetstelleren slik at farkosten ankommer i tide. Ctrl+klikk for å nullstille hele gruppen så den siste farkosten ankommer i tid og alle andre vil være tidlig ute +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Nullstill senhetstelleren slik at transportmiddelet ankommer i tide. Ctrl+klikk for å nullstille hele gruppen så det siste transportmiddelet ankommer i tid og alle andre vil være tidlig ute STR_TIMETABLE_AUTOFILL :{BLACK}Fyll automatisk STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fyll ut rutetabellen automatisk med verdiene fra neste tur Ctrl+klikk for å prøve å beholde ventetider @@ -4789,7 +4788,7 @@ STR_AI_GAME_SCRIPT :{BLACK}Game Scr STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Sjekk "Game Script"-loggen. Ctrl+klikk for å åpne i et nytt vindu STR_ERROR_AI_NO_AI_FOUND :Fant ingen passende KI.{}Denne KI-en er en plassholder og vil ikke gjøre noe.{}Du kan laste ned flere KI-er via spillets system for nedlastning av innhold. -STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Et skript krasjet. Vennligst rapporter dette til skript-forfatteren med et skjermbilde av feilsøkingsvinduet for KI/Game Script +STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Et skript krasjet. Vennligst rapporter dette til skriptforfatteren med et skjermbilde av feilsøkingsvinduet for KI/Game Script STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Feilsøkingsvindu for KI/Game Script er kun tilgjengelig for tjeneren # AI configuration window @@ -4836,7 +4835,7 @@ STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ikke end STR_SCREENSHOT_CAPTION :WHITE}Ta skjermbilde STR_SCREENSHOT_SCREENSHOT :{BLACK}Normalt skjermbilde -STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Skjermbilde med maksimal zoom +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Fullt innzoomet skjermbilde STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Standard zoomet skjermbilde STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Skjermbilde av hele kartat STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Høydekart skjermbilde @@ -4986,7 +4985,7 @@ STR_ERROR_BRIDGE_TOO_HIGH_AFTER_LOWER_LAND :{WHITE}Etterpå STR_ERROR_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Kan ikke endre firmaets navn... STR_ERROR_CAN_T_CHANGE_PRESIDENT :{WHITE}Kan ikke endre sjefens navn... -STR_ERROR_MAXIMUM_PERMITTED_LOAN :{WHITE}... maks lån er {CURRENCY_LONG} +STR_ERROR_MAXIMUM_PERMITTED_LOAN :{WHITE}... største tillatte lån er {CURRENCY_LONG} STR_ERROR_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Kan ikke låne mer penger... STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... ingen lån å tilbakebetale STR_ERROR_CURRENCY_REQUIRED :{WHITE}... du trenger {CURRENCY_LONG} @@ -5006,7 +5005,7 @@ STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}...{NBSP STR_ERROR_TOO_MANY_TOWNS :{WHITE}...{NBSP}for mange byer STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... det er ikke mer plass på kartet STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Veiarbeid i gang -STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kan ikke fjerne denne byen...{}En stasjon eller garasje/stall/hangar/dokk henviser til byen eller en by-eid rute som ikke kan fjernes +STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kan ikke fjerne denne byen...{}En stasjon eller garasje/stall/hangar/dokk henviser til byen eller en byeid rute som ikke kan fjernes STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... det er ingen passende steder for en statue i sentrum av denne byen # Industry related errors @@ -5032,7 +5031,7 @@ STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... kan STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}Finansieringen mislyktes på grunn av uflaks; prøv igjen STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Det var ingen passende steder å utvikle denne industrien STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Det var ingen egnede steder for '{STRING}' bransjer -STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Endre parametrene for kart-generering for å få et bedre kart +STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Endre parametrene for kartgenerering for å få et bedre kart # Station construction related errors STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Kan ikke bygge jernbanestasjon her... @@ -5076,15 +5075,15 @@ STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Må rive STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Må rive flyplass først # Waypoint related errors -STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Grenser til flere enn ett eksisterende kontrollpunkt -STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}For nærme et annet kontrollpunkt +STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Grenser til flere enn ett eksisterende veipunkt +STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}For nærme et annet veipunkt -STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Kan ikke bygge kontrollpunkt for tog her... +STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Kan ikke bygge veipunkt for tog her... STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Kan ikke plassere bøye her... -STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Kan ikke endre navn på kontrollpunkt... +STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Kan ikke endre navn på veipunkt... -STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Kan ikke fjerne kontrollpunkt for tog her... -STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Må fjerne kontrollpunkt for tog først +STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Kan ikke fjerne veipunkt for tog her... +STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Må fjerne veipunkt for tog først STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... bøyen er i veien STR_ERROR_BUOY_IS_IN_USE :{WHITE}... bøyen er i bruk av et annet firma! @@ -5116,9 +5115,9 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Feil type garas # Depot unbunching related errors STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... kan bare ha én deleordre -STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... kan ikke bruke full last-ordre når farkost har en deleordre +STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... kan ikke bruke full last-ordre når transportmiddel har en deleordre STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... kan ikke dele et kjøretøy med en full last-ordre -STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... kan ikke bruke ordre med betingelser når farkost har en deleordre +STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... kan ikke bruke ordre med betingelser når transportmiddel har en deleordre STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... kan ikke dele et kjøretøy med en betinget ordre # Autoreplace related errors @@ -5307,7 +5306,7 @@ STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... kjø STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... kjøretøyet kan ikke gå til den stasjonen STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... et kjøretøy som deler denne ordren kan ikke gå til den stasjonen STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... ikke alle kjøretøyene har like ordre -STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... Alle farkoster deler ikke ordre +STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... Alle transportmidler deler ikke ordre STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Kan ikke dele ordreliste... STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Kan ikke stoppe deling av ordreliste... @@ -5543,7 +5542,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_MAIL_VAN :Postvogn STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COAL_CAR :Kullvogn STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_OIL_TANKER :Oljetankvogn STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_LIVESTOCK_VAN :Buskapsvogn -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_GOODS_VAN :Godsvogn +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_GOODS_VAN :Varebil STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_GRAIN_HOPPER :Kornvogn STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_WOOD_TRUCK :Tømmervogn STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_IRON_ORE_HOPPER :Jernmalmvogn @@ -5575,7 +5574,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_MAIL_VAN :Postvogn STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COAL_CAR :Kullvogn STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_OIL_TANKER :Oljetankvogn STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_LIVESTOCK_VAN :Buskapsvogn -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_GOODS_VAN :Godsvogn +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_GOODS_VAN :Varebil STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_GRAIN_HOPPER :Kornvogn STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WOOD_TRUCK :Tømmervogn STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_IRON_ORE_HOPPER :Jernmalmvogn @@ -5621,9 +5620,9 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_OIL_TANKER :Perry-tankbil f STR_VEHICLE_NAME_ROAD_VEHICLE_TALBOTT_LIVESTOCK_VAN :Talbott-lastebil for buskap STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_LIVESTOCK_VAN :Uhl-lastebil for buskap STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_LIVESTOCK_VAN :Foster-lastebil for buskap -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_GOODS_TRUCK :Balogh-lastebil for gods -STR_VEHICLE_NAME_ROAD_VEHICLE_CRAIGHEAD_GOODS_TRUCK :Craighead-lastebil for gods -STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GOODS_TRUCK :Goss-lastebil for gods +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_GOODS_TRUCK :Balogh-lastebil for varer +STR_VEHICLE_NAME_ROAD_VEHICLE_CRAIGHEAD_GOODS_TRUCK :Craighead-lastebil for varer +STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GOODS_TRUCK :Goss-lastebil for varer STR_VEHICLE_NAME_ROAD_VEHICLE_HEREFORD_GRAIN_TRUCK :Hereford-lastebil for korn STR_VEHICLE_NAME_ROAD_VEHICLE_THOMAS_GRAIN_TRUCK :Thomas-lastebil for korn STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GRAIN_TRUCK :Goss-lastebil for korn @@ -5761,8 +5760,8 @@ STR_FORMAT_BUOY_NAME :{TOWN} Bøye STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Bøye #{COMMA} ###length 2 -STR_FORMAT_WAYPOINT_NAME :{TOWN} Kontrollpunkt -STR_FORMAT_WAYPOINT_NAME_SERIAL :{TOWN} Kontrollpunkt # {COMMA} +STR_FORMAT_WAYPOINT_NAME :{TOWN} Veipunkt +STR_FORMAT_WAYPOINT_NAME_SERIAL :{TOWN} Veipunkt #{COMMA} ###length 6 STR_FORMAT_DEPOT_NAME_TRAIN :{TOWN} Togstall diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 5988e5a729..c41f7622b5 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1055,9 +1055,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Escalar STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Marque esta caixa para dimensionar os chanfros por tamanho de interface STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Usar a fonte "sprite" tradicional -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marque esta caixa se prefere usar o tipo de fonte tradicional de tamanho fixo. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marque esta caixa se prefere usar o tipo de fonte tradicional de tamanho fixo STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Fontes anti-alias -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marque esta caixa para fontes redimensionáveis com anti-alias. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marque esta caixa para fontes redimensionáveis com anti-alias STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1276,7 +1276,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Dinheiro ilimit STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Permitir gastos ilimitados e desabilitar a falência de empresas STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Valor máximo do empréstimo inicial: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Valor máximo do empréstimo para cada empresa (sem ter em conta a inflação)Se definido como "Sem empréstimo", não haverá dinheiro disponível, a menos que seja fornecido por um Script de Jogo ou pela configuração "Dinheiro ilimitado". +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Valor máximo do empréstimo para cada empresa (sem ter em conta a inflação). Se definido como "Sem empréstimo", não haverá dinheiro disponível, a menos que seja fornecido por um Script de Jogo ou pela configuração "Dinheiro ilimitado" STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sem empréstimo @@ -1360,7 +1360,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Ângulo de incl STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Declive de um mosaico inclinado para um veiculo de estrada. Valores mais altos tornam mais difícil de subir. STR_CONFIG_SETTING_FORBID_90_DEG :Proibir comboios fazer curvas de 90º: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas de 90 graus ocorrem quando uma pista horizontal é diretamente seguida por outra vertical num mosaico adjacente, fazendo com que o comboio vire 90 graus quando atravessa a fronteira dos mosaicos, ao invés dos habituais 45 graus para outras combinações de pistas. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas de 90 graus ocorrem quando uma pista horizontal é diretamente seguida por outra vertical num mosaico adjacente, fazendo com que o comboio vire 90 graus quando atravessa a fronteira dos mosaicos, ao invés dos habituais 45 graus para outras combinações de pistas STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permitir juntar estações não adjacentes: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite acrescentar partes a uma estação sem tocar diretamente nas partes já existentes, fazendo Ctrl+Clique enquanto coloca as novas partes @@ -1472,7 +1472,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Cor inicial da STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Escolher a cor inicial da empresa STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Cor secundária da empresa inicial: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Escolha a cor inicial secundária para a empresa, se estiver a usar um NewGRF que a permita. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Escolha a cor inicial secundária para a empresa, se estiver a usar um NewGRF que a permita STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeroportos nunca expiram: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ativar esta preferência torna cada tipo de aeroporto disponível para sempre após a sua introdução @@ -1496,22 +1496,22 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Veículos nunca STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Quando ativo, todos os modelos de veículos permanecerão disponíveis para sempre após a sua introdução STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Unidades de cronometragem: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecione as unidades de cronometragem do jogo. Isto não pode ser alterado posteriormente.{}{}O uso baseado no calendário é a experiência clássica do OpenTTD, em que um ano corresponde a 12 meses e cada mês tem 28 a 31 dias.{}{}No tempo baseado no relógio de parede, o movimento de veículos, a produção de carga e as finanças baseiam-se em incrementos de um minuto, o que equivale a um mês de 30 dias no modo baseado no calendário. Estes são agrupados em períodos de 12 minutos, equivalentes a um ano no modo baseado em calendário.{}{}Em ambos os modos há sempre um calendário clássico, que é usado para datas de introdução de veículos, casas e outras infraestruturas. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecione as unidades de cronometragem do jogo. Isto não pode ser alterado posteriormente.{}{}O uso baseado no calendário é a experiência clássica do OpenTTD, em que um ano corresponde a 12 meses e cada mês tem 28 a 31 dias.{}{}No tempo baseado no relógio de parede, o movimento de veículos, a produção de carga e as finanças baseiam-se em incrementos de um minuto, o que equivale a um mês de 30 dias no modo baseado no calendário. Estes são agrupados em períodos de 12 minutos, equivalentes a um ano no modo baseado em calendário.{}{}Em ambos os modos há sempre um calendário clássico, que é usado para datas de introdução de veículos, casas e outras infraestruturas ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendário STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Relógio de parede STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutos por ano: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Escolher o número de minutos num ano civil. Por omissão é 12 minutos. Defina como 0 para impedir que a hora do calendário seja alterada. Esta configuração não afeta a simulação económica do jogo e só está disponível ao usar a cronometragem do relógio de parede. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Escolher o número de minutos num ano civil. Valor por omissão é 12 minutos. Defina como 0 para impedir que a hora do calendário seja alterada. Esta configuração não afeta a simulação económica do jogo e só está disponível ao usar a cronometragem do relógio de parede STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (tempo do calendário congelado) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Escalar a produção de carga da localidade: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Escalar a produção de carga das localidades nesta percentagem. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Escalar a produção de carga das localidades nesta percentagem STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Escalar a produção de carga da indústria: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Escalar a produção de carga das indústrias nesta percentagem. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Escalar a produção de carga das indústrias nesta percentagem STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Auto-renovação de veículos quando ficam velhos: {STRING} @@ -1542,8 +1542,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Grossura das li STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Largura da linha nos gráficos. Uma linha mais estreita é de leitura mais precisa, enquanto uma linha mais espessa é mais fácil de ver e as cores distinguem-se melhor. STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Exibir o nome do "NewGRF" na janela de compra de veículos: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Adiciona uma linha à janela de compra de veículos, mostrando a qual "NewGRF" pertence o veículo selecionado. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as cargas que os veículos podem transportar nas janelas de listagem {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Adiciona uma linha à janela de compra de veículos, mostrando a qual "NewGRF" pertence o veículo selecionado +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as cargas que os veículos podem transportar nas janelas de listagem: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Quando ativo, a carga transportável do veículo aparecerá acima nas listas de veículos STR_CONFIG_SETTING_LANDSCAPE :Cenário: {STRING} @@ -1562,13 +1562,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densidade indus STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Define quantas indústrias devem ser geradas e que nível deve ser mantido durante o jogo STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distância máxima entre o limite do mapa e Refinarias de Petróleo: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Refinarias de petróleo são construídas apenas próximo da borda do mapa, isto é, na costa para mapas de ilha +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limite de distância entre a borda do mapa e o local de construção de refinarias e plataformas de petróleo. Em mapas de ilhas isto garante que elas fiquem perto da costa. Em mapas com mais de 256 quadrados esse valor é aumentado STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altura da linha de neve: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Escolher a que altura a neve começa na paisagem subártica. A neve também afeta a geração de indústrias e os requisitos de crescimento das localidades. Só pode ser modificado através do Editor de Cenários ou é calculado através da "cobertura de neve" STR_CONFIG_SETTING_SNOW_COVERAGE :Cobertura de neve: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de neve no clima subártico. A neve também afeta a geração de indústrias e os requisitos de crescimento das localidades. Usado apenas durante a geração do mapa. O nível do mar e as suas encostas nunca têm neve. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de neve no clima subártico. A neve também afeta a geração de indústrias e os requisitos de crescimento das localidades. Usado apenas durante a geração do mapa. O nível do mar e as suas encostas nunca têm neve STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Cobertura do deserto: {STRING} @@ -1576,7 +1576,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Escolher a quan STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Rudeza do terreno: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Escolher a forma e o número de colinas. As paisagens suaves têm poucas colinas, largas, enquanto as paisagens acidentadas possuem mais, colinas pequenas. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Escolher a forma e o número de colinas. As paisagens suaves têm poucas colinas, largas, enquanto as paisagens acidentadas possuem mais, colinas pequenas ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Muito suave STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Suave @@ -1584,7 +1584,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Acidentado STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Muito acidentado STR_CONFIG_SETTING_VARIETY :Distribuição de variedade: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Escolher se o mapa contém tanto áreas montanhosas como áreas planas. Quanto maior a variedade, maiores as diferenças de altitude entre essas as áreas. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Escolher se o mapa contém tanto áreas montanhosas como áreas planas. Quanto maior a variedade, maiores as diferenças de altitude entre essas as áreas STR_CONFIG_SETTING_RIVER_AMOUNT :Quantidade de rios: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Escolhe quantos rios serão gerados @@ -1631,7 +1631,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Verde Escuro STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violeta STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Cores de sobreposição de fluxo de carga: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Define o esquema de cores usado para a sobreposição do fluxo de carga. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Define o esquema de cores usado para a sobreposição do fluxo de carga ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Verde para vermelho (original) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Verde para azul @@ -1752,10 +1752,10 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Deixar ferramen STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Manter as ferramentas de construção de pontes, túneis, etc. abertas após uso STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Remover automaticamente os sinais durante a construção de vias férreas: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Remova automaticamente os sinais durante a construção do trilho se os sinais estiverem no caminho. Observe que isso pode potencialmente levar a acidentes de comboio. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Remova automaticamente os sinais durante a construção da ferrovia se os sinais estiverem no caminho. Isto pode potencialmente causar acidentes de comboio STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Limite de velocidade do avanço rápido: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limite da velocidade do jogo quando o avanço rápido está ativado. 0 = sem limite (tão rápido quanto o seu computador permitir). Valores abaixo de 100% tornam o jogo mais lento. O limite superior depende das especificações do seu computador e pode variar dependendo do jogo. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limite da velocidade do jogo quando o avanço rápido está ativado. 0 = sem limite (tão rápido quanto o seu computador permitir). Valores abaixo de 100% tornam o jogo mais lento. O limite superior depende das especificações do seu computador e pode variar dependendo do jogo STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% velocidade normal do jogo ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Sem limite (tão rápido quanto o seu computador permitir) @@ -1819,11 +1819,11 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite a jogad STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes antes de os scripts serem suspensos: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Número máximo de passos computacionais que um script pode executar num turno STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Utilização máxima de memória por script: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Definir o volume máximo de memória que pode ser utilizada por um script antes de este ser terminado. Para mapas maiores é possível que este parâmetro tenha de ser aumentado. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Definir o volume máximo de memória que pode ser utilizada por um script antes de este ser terminado. Para mapas maiores é possível que este parâmetro tenha de ser aumentado STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Os intervalos de manutenção são em percentagem: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Quando ativado, os veículos procuram fazer a manutenção quando sua fiabilidade reduz para uma determinada percentagem da fiabilidade máxima.{}{}Por exemplo, se a fiabilidade máxima de um veículo for 90% e o intervalo de manutenção for 20%, o veículo tentará fazer a manutenção quando atinge 72% de fiabilidade. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Quando ativado, os veículos procuram fazer a manutenção quando sua fiabilidade reduz para uma determinada percentagem da fiabilidade máxima.{}{}Por exemplo, se a fiabilidade máxima de um veículo for 90% e o intervalo de manutenção for 20%, o veículo tentará fazer a manutenção quando atinge 72% de fiabilidade STR_CONFIG_SETTING_SERVINT_TRAINS :Intervalo de serviço para comboios por omissão: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Definir o intervalo de manutenção por omissão para novos veículos sobre carris, se não for configurado um intervalo de manutenção explícito para o veículo @@ -1841,7 +1841,7 @@ STR_CONFIG_SETTING_NOSERVICE :Não fazer manu STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Quando ativo, os veículos não farão manutenção se não puderem avariar STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Penalidade de velocidade de carregamento para comboios mais compridos do que a estação: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quando ativo, os comboios que são muito compridos para a estação demoram mais tempo a carregar/encher do que um comboio que caiba na estação. Esta definição não afeta a procura de itinerários. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quando ativo, os comboios que são muito compridos para a estação demoram mais tempo a carregar do que um comboio que caiba na estação. Esta definição não afeta a procura de itinerários STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ativar limites de velocidade para vagões: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Quando ativo, aplica também os limites de velocidade dos vagões para decidir a velocidade máxima do comboio @@ -1906,13 +1906,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Ano em que os a STR_CONFIG_SETTING_STARTING_YEAR :Data de início: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Ano final de pontuação: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Ano em que o jogo termina para fins de pontuação. No final deste ano, a pontuação da empresa é registada e a tabela de pontuação máxima é exibida, mas os jogadores podem continuar a jogar depois disso.{} Se isto for antes do ano inicial, a tabela de pontuação máxima nunca será exibida. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Ano em que o jogo termina para fins de pontuação. No final deste ano, a pontuação da empresa é registada e a tabela de pontuação máxima é exibida, mas os jogadores podem continuar a jogar depois disso.{} Se isto for antes do ano inicial, a tabela de pontuação máxima nunca será exibida STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nunca STR_CONFIG_SETTING_ECONOMY_TYPE :Tipo de economia: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :A economia suave faz mudanças na produção com mais frequência e em etapas menores. Economia congelada impede mudanças de produção e fechamentos de indústrias. Esta configuração pode não ter efeito se os tipos de indústria forem fornecidos por um NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :A economia suave faz mudanças na produção com mais frequência e em etapas menores. Economia congelada impede mudanças de produção e fechamentos de indústrias. Esta configuração poderá não ter efeito se os tipos de indústria forem fornecidos por um NewGRF ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Suave @@ -1967,7 +1967,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permitido STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Permitido, estrutura personalizada da localidade STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Geração de carga citadina: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Quantidade de carga produzida por casas em localidades, relativa à população total da mesma.{}Crescimento quadrático: Uma localidade do dobro do tamanho gera 4x mais passageiros.{}Crescimento linear: Uma localidade do dobro do tamanho gera 2x a quantidade de passageiros. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Quantidade de carga produzida por casas em localidades, relativa à população total da mesma.{}Crescimento quadrático: Uma localidade do dobro do tamanho gera quatro vezes mais passageiros.{}Crescimento linear: Uma localidade do dobro do tamanho gera duas vezes a quantidade de passageiros ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadrático (original) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear @@ -2008,7 +2008,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Resolução máxima de "sprites" a usar: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limita a resolução máxima a ser usada para "sprites". Limitar a resolução dos "sprites" evitará o uso de gráficos de alta resolução, mesmo quando disponíveis. Isto pode ajudar a manter a aparência do jogo unificada ao usar uma combinação de ficheiros GRF com e sem gráficos de alta resolução. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limita a resolução máxima a ser usada para sprites. Limitar a resolução dos sprites evitará o uso de gráficos de alta resolução, mesmo quando disponíveis. Isto pode ajudar a manter a aparência do jogo unificada ao usar uma combinação de ficheiros GRF com e sem gráficos de alta resolução ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2032,33 +2032,33 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador i STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamanho relativo das cidades em relação ao tamanho normal das localidades aquando o início do jogo STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Atualizar o gráfico de distribuição a cada {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo de intervalo entre recalculos subsequentes do gráfico de ligações. Cada recalculo calcula os planos para um componente do gráfico. Isso significa que um valor X para esta configuração não significa que todo o gráfico será atualizado a cada X segundos. Apenas algum componente será. Quanto mais curto escolher, mais tempo de CPU será necessário para calcular. Quanto mais tempo for definido, mais tempo levará até que a distribuição de carga inicie nas novas rotas. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo de intervalo entre recalculos subsequentes do gráfico de ligações. Cada recalculo calcula os planos para um componente do gráfico. Isso significa que um valor X para esta configuração não significa que todo o gráfico será atualizado a cada X segundos. Apenas algum componente será. Quanto mais curto escolher, mais tempo de CPU será necessário para calcular. Quanto mais tempo for definido, mais tempo levará até que a distribuição de carga inicie nas novas rotas STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Usar {STRING} para recalcular o gráfico de distribuição -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo gasto para cada recalculo de um componente de gráfico de ligação. Quando um recalculo é iniciado, um encadeamento é gerado e pode ser executado nesse número de segundos. Quanto mais curto você definir, mais provável será que o encadeamento não seja concluído quando deveria. Então o jogo pára até que seja ("lag"). Quanto mais tempo você definir, mais tempo levará para a distribuição ser atualizada quando as rotas mudarem. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo gasto para cada recalculo de um componente de gráfico de ligação. Quando um recalculo é iniciado, um encadeamento é gerado e pode ser executado nesse número de segundos. Quanto mais curto você definir, mais provável será que o encadeamento não seja concluído quando deveria. Então o jogo para até que aconteça ("lag"). Quanto mais tempo você definir, mais tempo levará para a distribuição ser atualizada quando as rotas mudarem STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribuição para os passageiros: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" significa que aproximadamente o mesmo numero de passageiros irá de uma estação A para uma estação B e de B para A. "Assimétrico" significa que um numero arbitrário de passageiros poderá seguir em qualquer direção. "Manual" significa que nenhuma distribuição automática terá lugar para passageiros. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" significa que aproximadamente o mesmo numero de passageiros irá de uma estação A para uma estação B e de B para A. "Assimétrico" significa que um numero arbitrário de passageiros poderá seguir em qualquer direção. "Manual" significa que nenhuma distribuição automática terá lugar para passageiros STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modo de distribuição para o correio: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simétrico" significa que aproximadamente a mesma quantidade de correio será enviada de uma estação A para a estação B assim como de B para A. "Assimétrico" significa que uma quantidade arbitrária de correio poderá ser enviada em qualquer direção. "Manual" significa que nenhuma distribuição automática terá lugar para o correio. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simétrico" significa que aproximadamente a mesma quantidade de correio será enviada de uma estação A para a estação B assim como de B para A. "Assimétrico" significa que uma quantidade arbitrária de correio poderá ser enviada em qualquer direção. "Manual" significa que nenhuma distribuição automática terá lugar para o correio STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Modo de distribuição para a classe de carga ARMOURED: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe de carga "ARMOURED" (Blindado) contém valores no clima temperado, diamantes no tropical ou ouro no ártico. Os NewGRFs podem mudar isto. "Simétrico" significa que aproximadamente a mesma quantidade de carga será enviada da estação A para a estação B assim como da B para a A. "Assimétrico" significa que quantidades arbitrárias dessa carga podem ser enviadas em qualquer direção. "Manual" significa que nenhuma distribuição automática ocorrerá para essa carga. Recomenda-se que seja definido para assimétrico ou manual quando a jogar no ártico ou no tropical, pois os bancos nesses climas só recebem mercadorias. Para o temperado pode ser também escolhido simétrico pois os bancos irão remeter valores ao banco de origem. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe de carga BLINDADA contém valores no clima temperado, diamantes no tropical ou ouro no ártico. Os NewGRFs podem mudar isto. "Simétrico" significa que aproximadamente a mesma quantidade de carga será enviada da estação A para a estação B assim como da B para a A. "Assimétrico" significa que quantidades arbitrárias dessa carga podem ser enviadas em qualquer direção. "Manual" significa que nenhuma distribuição automática ocorrerá para essa carga. Recomenda-se que seja definido para assimétrico ou manual quando a jogar no ártico ou no tropical, pois os bancos nesses climas só recebem mercadorias. Para o temperado pode ser também escolhido simétrico pois os bancos irão remeter valores ao banco de origem STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Modo de distribuição para outras classes de carga: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Assimétrico" significa que quantidades arbitrárias de carga podem ser enviadas em qualquer direção. "Manual" significa que nenhuma distribuição automática ocorrerá para essas cargas. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Assimétrico" significa que quantidades arbitrárias de carga podem ser enviadas em qualquer direção. "Manual" significa que nenhuma distribuição automática ocorrerá para essas cargas ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimétrico STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simétrico STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Precisão de distribuição: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Quanto mais alto o definir, mais tempo o CPU demorará a calcular o gráfico de ligações. Se demorar muito poderá notar-se algum lag. Se no entanto for definido um valor reduzido a distribuição será imprecisa, e poderá verificar cargas não serem entregues onde seriam esperadas. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Quanto mais alto o definir, mais tempo o CPU demorará a calcular o gráfico de ligações. Se demorar muito poderá notar-se algum lag. Se no entanto for definido um valor reduzido a distribuição será imprecisa, e poderá verificar cargas não serem entregues onde seriam esperadas STR_CONFIG_SETTING_DEMAND_DISTANCE :Efeito de distância nos pedidos: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Se definir para um valor maior que 0, a distância entre a estação de origem A para alguma carga e um possível destino B terá um efeito na quantidade de carga transportada de A para B. Quanto maior a distância de B para A, menos carga será enviada. Quanto maior o valor definido, menos carga será transportada para estações distantes, e mais carga será levada para estações próximas. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Se definir para um valor maior que 0, a distância entre a estação de origem A para alguma carga e um possível destino B terá um efeito na quantidade de carga transportada de A para B. Quanto maior a distância de B para A, menos carga será enviada. Quanto maior o valor definido, menos carga será transportada para estações distantes, e mais carga será levada para estações próximas STR_CONFIG_SETTING_DEMAND_SIZE :Quantidade de carga a regressar para o modo simétrico: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Definir isto para menos de 100% torna a distribuição simétrica reagir mais como a assimétrica. Menos carga será forçada a ser devolvida se uma determinada quantidade for enviada para uma estação. Se for definido para 0% a distribuição simétrica irá reagir como a assimétrica. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Definir isto para menos de 100% torna a distribuição simétrica reagir mais como a assimétrica. Menos carga será forçada a ser devolvida se uma determinada quantidade for enviada para uma estação. Se for definido para 0% a distribuição simétrica irá reagir como a assimétrica STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturação de percursos curtos antes de usar percursos de grande capacidade: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequentemente existem múltiplos trajectos entre duas estações. Cargodist irá saturar o trajecto mais curto primeiro, depois usar o segundo trajecto mais curto até o saturar, e assim por diante. A saturação é determinada pelo estimativa da capacidade do uso planeado. Ao saturar todos os caminhos, se ainda existir procura, irá sobrecarregar todos os trajectos, com preferência pelos de maior capacidade. No entanto, grande parte das vezes o algoritmo não irá estimar correctamente a capacidade. Esta configuração permite definir até que percentagem um trajecto mais curto deverá ser saturado na primeira passagem antes do algoritmo proceder ao próximo. Defina-o para menos de 100% para evitar estações sobrecarregadas no caso de capacidade super-estimada. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequentemente existem múltiplos trajectos entre duas estações. Cargodist irá saturar o trajecto mais curto primeiro, depois usar o segundo trajecto mais curto até o saturar, e assim por diante. A saturação é determinada pelo estimativa da capacidade do uso planeado. Ao saturar todos os caminhos, se ainda existir procura, irá sobrecarregar todos os trajectos, com preferência pelos de maior capacidade. No entanto, grande parte das vezes o algoritmo não irá estimar correctamente a capacidade. Esta configuração permite definir até que percentagem um trajecto mais curto deverá ser saturado na primeira passagem antes do algoritmo proceder ao próximo. Defina-o para menos de 100% para evitar estações sobrecarregadas no caso de capacidade super-estimada STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unidades de velocidade (terrestre): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Unidades de velocidade (náutica): {STRING} @@ -2980,11 +2980,11 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plantar STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Plantar aleatoriamente STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plantar árvores aleatoriamente no terreno STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plante árvores isoladas arrastando-as pela paisagem. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plantar árvores isoladas arrastando-as pela paisagem STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Arvoredo -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plantar florestas pequenas ao arrastar pelo terreno. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plantar florestas pequenas ao arrastar pelo terreno STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Floresta -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantar florestas grandes ao arrastar pelo terreno. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantar florestas grandes ao arrastar pelo terreno # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Gerar Terreno @@ -3199,11 +3199,11 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Taxa de fotogramas STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Taxa de simulação: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Numero de quantidades de atraso no percurso simulados por segundo. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Número de tiques simulados por segundo STR_FRAMERATE_RATE_BLITTER :{BLACK}Taxa de fotogramas dos gráficos: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Número de fotogramas de video renderizados por segundo. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Número de fotogramas de video renderizados por segundo STR_FRAMERATE_SPEED_FACTOR :{BLACK}Factor de velocidade actual do jogo: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Quão rápido o jogo está a ser executado, comparado com a velocidade esperada na taxa de simulação normal. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Quão rápido o jogo está a ser executado, comparado com a velocidade esperada na taxa de simulação normal STR_FRAMERATE_CURRENT :{WHITE}Actual STR_FRAMERATE_AVERAGE :{WHITE}Média STR_FRAMERATE_MEMORYUSE :{WHITE}Memória @@ -3732,7 +3732,7 @@ STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Livro de STR_STORY_BOOK_SPECTATOR :Livro de Histórico Global STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Página nº {NUM} -STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Saltar para uma pagina especifica escolhendo-a nesta lista. +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Saltar para uma pagina especifica escolhendo-a nesta lista STR_STORY_BOOK_PREV_PAGE :{BLACK}Anterior STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Ir para a página anterior STR_STORY_BOOK_NEXT_PAGE :{BLACK}Próxima @@ -4027,12 +4027,12 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Aeronaves sem g STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - clique num grupo para listar todos os veículos contidos +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - Clique em um grupo para listar todos os veículos do grupo. Clique+Arraste para organizar a hierarquia STR_GROUP_CREATE_TOOLTIP :{BLACK}Clique para criar um grupo STR_GROUP_DELETE_TOOLTIP :{BLACK}Remover o grupo seleccionado STR_GROUP_RENAME_TOOLTIP :{BLACK}Mudar o nome do grupo seleccionado STR_GROUP_LIVERY_TOOLTIP :{BLACK}Alterar a imagem do grupo selecionado -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clique para proteger este grupo da auto-substituição global. Ctrl+Clique para proteger também sub-grupos. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clique para proteger este grupo da auto-substituição global. Ctrl+Clique para proteger também sub-grupos STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Apagar Grupo STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Tem a certeza de que quer apagar este grupo e quaisquer descendentes? diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 7912ea9ad1..c6b64f9e65 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1426,7 +1426,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Неогран STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Разрешить компаниям неограниченные расходы; банкротство им в таком случае грозить не будет. STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максимальная сумма кредита: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максимальная сумма кредита для компании (без учета инфляции). Если установлено значение «нет», деньги не будут доступны, если их не предоставит игровой скрипт или настройка «Неограниченные финансы». +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максимальная сумма кредита для компании (без учета инфляции). Если установлено значение «нет», у компаний не будет средств, если их не предоставит игровой скрипт или настройка «Неограниченные финансы». STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :нет @@ -1646,13 +1646,13 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Транспо STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :При включении все транспортные средства остаются доступными для покупки в любое время после начала их производства STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Игровое время: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Выбор системы отсчёта времени, используемой в игре. После старта сменить её невозможно.{}{}Календарь - это классическая система, изначально использовавшаяся в OpenTTD: год состоит из 12 месяцев, в каждом из которых 28-31{NBSP}день.{}{}В режиме реального времени расчёты производства и финансовых показателей основаны на интервалах длительностью в 1{NBSP}минуту, что примерно соответствует 30{NBSP}дням в режиме календаря. Эти интервалы группируются в 12-минутные циклы, соответствующие 1{NBSP}году в классическом режиме.{}{}В любом случае, появление новых транспортных средств, зданий и инфраструктуры будет сопровождаться календарём с понятными датами. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Выбор системы отсчёта времени, используемой в игре. После старта сменить её невозможно.{}{}Календарь - это классическая система, изначально использовавшаяся в OpenTTD: год состоит из 12 месяцев, в каждом из которых 28-31 день.{}{}В режиме реального времени расчёты производства и финансовых показателей основаны на интервалах длительностью в 1 минуту, что примерно соответствует 30 дням в режиме календаря. Эти интервалы группируются в 12-минутные циклы, соответствующие 1 году в классическом режиме.{}{}В любом случае, появление новых транспортных средств, зданий и инфраструктуры будет сопровождаться календарём с понятными датами. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Календарь STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Реальное время STR_CONFIG_SETTING_MINUTES_PER_YEAR :Продолжительность года: {STRING} мин. -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Выберите, сколько минут реального времени длится год в игре. По умолчанию{NBSP}- 12{NBSP}минут. Значение «0» остановит календарное время. Эта настройка не влияет на расчёт экономической модели в игре, и работает только в режиме реального времени. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Выберите, сколько минут реального времени длится год в игре. По умолчанию - 12 минут. Значение «0» остановит календарное время. Эта настройка не влияет на расчёт экономической модели в игре, и работает только в режиме реального времени. STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special @@ -1718,7 +1718,7 @@ STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Высота с STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Выберите, на какой высоте в субарктическом климате устанавливается снеговой покров. Наличие снега влияет на расстановку предприятий и на условия роста городов.{}Значение может быть изменено только в редакторе сценариев; иначе оно рассчитывается в зависимости от значения «снежного покрытия». STR_CONFIG_SETTING_SNOW_COVERAGE :Снежное покрытие: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Выберите примерную относительную площадь суши, покрытой снегом в субарктическом климате. Наличие снега влияет на расположение предприятий и на условия роста городов.{}Это значение используется только при создании карты. Земля на уровне моря и береговые клетки никогда не покрываются снегом. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Выберите примерную относительную площадь суши, покрытой снегом в субарктическом климате. Наличие снега влияет на расположение предприятий и на условия роста городов.{}Это значение используется только при создании карты. Земля на уровне моря и береговые поля никогда не покрываются снегом. STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Песчаное покрытие: {STRING} @@ -1973,7 +1973,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Объём па STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} МиБ STR_CONFIG_SETTING_SERVINT_ISPERCENT :Интервал тех. обслуживания в процентах: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :При включении транспортные средства будут отправляться на техническое обслуживание после падения надёжности на указанный процент от максимальной.{}Например, при максимальной надёжности 90% и указанном интервале ТО 20% транспортное средство уйдёт на обслуживание при падении надёжности до 72%. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :При включении - транспортные средства будут отправляться на техническое обслуживание после падения надёжности на указанный процент от максимальной.{}Например, при максимальной надёжности 90% и указанном интервале ТО 20% транспортное средство уйдёт на обслуживание при падении надёжности до 72%. STR_CONFIG_SETTING_SERVINT_TRAINS :Интервал ТО по умолчанию для поездов: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Настройка периодичности технического обслуживания для новых поездов @@ -2056,13 +2056,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Обычно в STR_CONFIG_SETTING_STARTING_YEAR :Год начала игры: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Последний год игры: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :По прошествии указанного года рассчитывается рейтинг компании и выводится таблица рекордов. После этого игру можно продолжить.{}Если указанный год предшествует году начала игры, то таблица рекордов не отображается. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :По прошествии указанного года рейтинг компании рассчитывается, записывается и выводится таблица рекордов. После этого игру можно продолжить.{}Если указанный год предшествует году начала игры, то таблица рекордов не отображается. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Никогда STR_CONFIG_SETTING_ECONOMY_TYPE :Экономика: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :При плавной экономике изменения в производительности предприятий небольшие и происходят чаще.{}При стабильной экономике предприятия не закрываются и не меняют производительность.{}Типы предприятий, добавленные с помощью NewGRF, могут игнорировать эту настройку. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :При плавной экономике изменения в производительности предприятий небольшие и происходят чаще.{}При стабильной экономике предприятия не закрываются и не меняют производительность.{}Типы предприятий, добавленные с помощью модулей NewGRF, могут игнорировать эту настройку. ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :классическая STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :плавная @@ -2203,12 +2203,12 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Точност STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Чем выше данное значение, тем больше процессорного времени используется для расчёта графа грузоперевозок. При высоких значениях возможны задержки в игре. Однако при низких значениях расчёты грузопотоков будут неточными, и грузы, возможно, будут отправляться не туда, куда нужно. STR_CONFIG_SETTING_DEMAND_DISTANCE :Зависимость спроса от расстояния: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Если это значение больше 0, то количество груза, отправляемого с одной станции на другую, будет зависеть от расстояния между станциями. Чем выше это значение, тем больше груза будет отправляться к ближним станциям и меньше{NBSP}- к дальним. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Если это значение больше 0, то количество груза, отправляемого с одной станции на другую, будет зависеть от расстояния между станциями. Чем выше это значение, тем больше груза будет отправляться к ближним станциям и меньше - к дальним. STR_CONFIG_SETTING_DEMAND_SIZE :Количество возвращаемого груза при симметричном распределении: {STRING} STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Установка этого значения ниже 100% заставит распределение быть менее «симметричным»: количество возвращаемого груза сможет быть меньше, чем количество отправленного. Установка в 0% сделает распределение полностью асимметричным. STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Предел загрузки коротких маршрутов перед использованием вместительных: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :При наличии нескольких маршрутов между станциями алгоритм распределения грузов будет использовать кратчайший маршрут до его загрузки, потом следующий по длине и т.{NBSP}д. При избытке груза маршруты будут перегружаться начиная с самых производительных. Загрузка рассчитывается исходя из оценки пропускной способности (которая может быть неточной) и интенсивности использования. Эта настройка определяет, насколько загружать маршрут перед тем, как начать использовать следующий. Установите значение ниже 100% для того, чтобы избежать задержки груза, если пропускная способность маршрута будет переоценена алгоритмом. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :При наличии нескольких маршрутов между станциями алгоритм распределения грузов будет использовать кратчайший маршрут до его загрузки, потом следующий по длине и{NBSP}т.{NBSP}д. При избытке груза маршруты будут перегружаться начиная с самых производительных. Загрузка рассчитывается исходя из оценки пропускной способности (которая может быть неточной) и интенсивности использования. Эта настройка определяет, насколько загружать маршрут перед тем, как начать использовать следующий. Установите значение ниже 100% для того, чтобы избежать задержки груза, если пропускная способность маршрута будет переоценена алгоритмом. STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Система единиц скорости наземных ТС: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Система единиц скорости водных и воздушных ТС: {STRING} @@ -3373,9 +3373,9 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Скорость игры STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Скорость расчёта игры: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Кол-во игровых циклов, рассчитываемых в секунду. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Кол-во игровых циклов, рассчитываемых в секунду STR_FRAMERATE_RATE_BLITTER :{BLACK}Вывод на экран: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Кол-во отображаемых кадров в секунду. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Кол-во отображаемых кадров в секунду STR_FRAMERATE_SPEED_FACTOR :{BLACK}Текущая скорость игры: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Фактическая скорость игры (по сравнению с ожидаемой скоростью при нормальной скорости симуляции). STR_FRAMERATE_CURRENT :{WHITE}Сейчас diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index bf29d89cdd..9e8e075118 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1012,6 +1012,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Rupia india STR_GAME_OPTIONS_CURRENCY_IDR :Rupia indonesia STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit malasio STR_GAME_OPTIONS_CURRENCY_LVL :Lats letón +STR_GAME_OPTIONS_CURRENCY_PTE :Escudo portugués STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Autoguardado STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Selección del intervalo entre guardados automáticos del juego @@ -1056,7 +1057,7 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Marca es STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Usar el tipo de letra tradicional de sprite STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marca esta casilla si prefieres usar el tipo de letra tradicional de tamaño fijo STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Tipos de letra suavizadas -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marca esta casilla para suavizar los tipos de letra escalables. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marca esta casilla para suavizar los tipos de letra escalables STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1275,7 +1276,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Dinero infinito STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Permite el gasto infinito y desactiva la bancarrota de empresas STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Préstamo máximo inicial: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Cantidad máxima que una empresa puede recibir como préstamo (sin tener en cuenta la inflación). Si se selecciona "Sin préstamo", no habrá fondos disponibles a menos que un script the juego los proporcione o esté activada la opción "Dinero infinito" +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Máxima cantidad que una empresa puede pedir prestada (sin tener en cuenta la inflación). Si se selecciona "Sin préstamo", no habrá fondos disponibles a menos que un script del juego los proporcione o esté activada la opción "Dinero infinito" STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sin préstamo @@ -1359,7 +1360,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Inclinación de STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Pendiente de las casillas en cuesta para los vehículos de carretera. Los valores altos hacen que sea más difícil subir las colinas STR_CONFIG_SETTING_FORBID_90_DEG :Prohibir a trenes realizar giros de 90°: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Los giros de 90 grados ocurren cuando una vía en sentido horizontal está seguida por una vía en sentido vertical, haciendo que el tren gire 90 grados al pasar de una a otra en lugar de los 45 grados habituales en otras combinaciones. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Los giros de 90 grados ocurren cuando una vía en sentido horizontal está seguida por una vía en sentido vertical, haciendo que el tren gire 90 grados al pasar de una a otra en lugar de los 45 grados habituales en otras combinaciones STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permitir unir estaciones no adyacentes: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite añadir partes a una estación sin tener que estar en contacto directamente con las otras partes existentes, al pulsar Ctrl+clic mientras se añaden las partes nuevas @@ -1471,7 +1472,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Color inicial d STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Selecciona el color inicial de la empresa STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Color secundario de la empresa inicial: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Selecciona un color secundario para la empresa, si usas un NewGRF que lo permita. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Selecciona un color secundario para la empresa, si usas un NewGRF que lo permita STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeropuertos nunca caducan: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Permite a todos los aeropuertos estar disponibles permanentemente una vez han sido introducidos @@ -1495,22 +1496,22 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Los vehículos STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Si se activa, todos los modelos de vehículos permanecen disponibles para siempre una vez han sido introducidos STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Modo temporal: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecciona el modo temporal del juego. Este ajuste no puede ser cambiado más adelante.{}{}"Calendario" es la experiencia clásica de OpenTTD, donde un año tiene 12 meses y cada mes entre 28 y 31 días.{}{}En el modo "Reloj", la producción de carga y la gestión financiera se basan en incrementos de un minuto, que es similar a lo que tarda un mes de 30 días en el modo "Calendario". Éstos se agrupan en períodos de 12 minutos, que equivalen a un año en el modo "Calendario".{}{}En uno y otro modo siempre existe un calendario clásico que es usado para las fechas de lanzamiento de vehículos, casas y otras infraestructuras. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecciona el modo temporal del juego. Este ajuste no puede ser cambiado más adelante.{}{}"Calendario" es la experiencia clásica de OpenTTD, donde un año tiene 12 meses y cada mes entre 28 y 31 días.{}{}En el modo "Reloj", la producción de carga y la gestión financiera se basan en incrementos de un minuto, que es similar a lo que tarda un mes de 30 días en el modo "Calendario". Éstos se agrupan en períodos de 12 minutos, que equivalen a un año en el modo "Calendario".{}{}En uno y otro modo siempre existe un calendario clásico que es usado para las fechas de lanzamiento de vehículos, casas y otras infraestructuras ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendario STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Reloj STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutos por año: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Selecciona el número de minutos de un año de calendario. Por defecto es 12 minutos. Introduce 0 para evitar que cambie el tiempo del calendario. Este ajuste no afecta a la simulación de la economía del juego y sólo está disponible cuando se usa el modo "Reloj" . +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Selecciona el número de minutos de un año de calendario. Por defecto es 12 minutos. Introduce 0 para evitar que cambie el tiempo del calendario. Este ajuste no afecta a la simulación de la economía del juego y sólo está disponible cuando se usa el modo "Reloj" STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (tiempo de calendario congelado) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Escalar producción de carga de las municipio al: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Escala la producción de carga de los municipios a este porcentaje. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Escala la producción de carga de los municipios a este porcentaje STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Escalar producción de carga industrial al: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Escala la producción de carga de las industrias a este porcentaje. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Escala la producción de carga de las industrias a este porcentaje STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Renovación automática de vehículos cuando se vuelven viejos: {STRING} @@ -1529,7 +1530,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Duración de me STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duración de los mensajes de error mostrados en ventanas rojas. Algunos mensajes de error (críticos) no se cierran automáticamente, y deben de ser cerrados manualmente STR_CONFIG_SETTING_HOVER_DELAY :Mostrar mensajes de ayuda: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tiempo necesario del ratón sobre un elemento de la interfaz para que ésta muestre su mensaje de ayuda. De forma alternativa, se puede escoger mostrar estos mensajes al pulsar el botón derecho si el valor de esta opción ha sido establecido a 0. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tiempo necesario del ratón sobre un elemento de la interfaz para que ésta muestre su mensaje de ayuda. De forma alternativa, se puede escoger mostrar estos mensajes al pulsar el botón derecho si el valor de esta opción ha sido establecido a 0 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Mantener ratón durante {COMMA} milisegundo{P 0 "" s} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Clic derecho @@ -1541,8 +1542,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Grosor de las l STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Grosor de las líneas en las gráficas. Una línea fina es más precisa, una línea más gruesa es más fácil de distinguir STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostrar el nombre del NewGRF en la ventana de compra de vehículos: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Añade una línea a la ventana de compra de vehículos, mostrando a qué NewGRF pertenece el vehículo seleccionado. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar las cargas que pueden llevar los vehículos en las ventanas con listas {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Añade una línea a la ventana de compra de vehículos, mostrando a qué NewGRF pertenece el vehículo seleccionado +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar las cargas que pueden llevar los vehículos en las ventanas con listas: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Si se activa, las cargas que los vehículos pueden transportar aparecerán encima de éstos en las listas de vehículos STR_CONFIG_SETTING_LANDSCAPE :Terreno: {STRING} @@ -1561,7 +1562,7 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densidad indust STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Permite fijar el número de industrias que deberían generarse, y el nivel que debería mantenerse durante la partida STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Máxima distancia de Refinerías de Petróleo con los bordes: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Límite para la distancia del borde del mapa en la que se pueden construir refinerías de petróleo y plataformas petrolíferas. En los mapas de islas, esto garantiza que estén cerca de la costa. En los mapas de más de 256 casillas, este valor se amplía. +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Límite para la distancia del borde del mapa en la que se pueden construir refinerías de petróleo y plataformas petrolíferas. En los mapas de islas, esto garantiza que estén cerca de la costa. En los mapas de más de 256 casillas, este valor se amplía STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altura cota nieve: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Permite escoger la cota a la cual la nieve comienza en el clima subártico. La nieve también afecta a la generación de industrias y a los requisitos de crecimiento de municipios. Solo puede ser modificado mediante el Editor de Escenarios o calculado mediante "extensión de la nieve" @@ -1575,7 +1576,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Controla la can STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Orografía del terreno: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Selecciona la forma y el número de las colinas. Los terrenos suaves tienen menos colinas y más extensas, mientras que los terrenos abruptos tienen más colinas y más reducidas. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Selecciona la forma y el número de las colinas. Los terrenos suaves tienen menos colinas y más extensas, mientras que los terrenos abruptos tienen más colinas y más reducidas ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Muy Llano STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Llano @@ -1630,7 +1631,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Verde oscuro STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violeta STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Colores de Flujos de Carga: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Esquema de Color que se usará para el grafo de Flujos de Carga. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Esquema de color de los indicadores visuales del flujo de carga ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :De verde a rojo (original) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :De verde a azul @@ -1751,10 +1752,10 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Mantener activa STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Mantiene las herramientas de construcción de puentes, túneles, etcétera, abiertas después de su uso STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Eliminar automáticamente las señales durante la construcción de ferrocarril: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Elimina automáticamente las señales durante la construcción de la via si las señales están en el camino. Ten en cuenta que esto puede provocar choques entre trenes. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Elimina las señales de forma automática durante al construir vías férreas si las señales están en el camino. Ten en cuenta que esto puede provocar choques entre trenes STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Límite de velocidad para el avance rápido: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Límite de la velocidad de juego cuando se activa el avance rápido. 0 = sin límite (tan rápido como lo permita el ordenador). Los valores inferiores a 100% ralentizan el juego. El límite superior depende de las características del ordenador y pueden variar dependiendo de la partida. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Límite de la velocidad de juego cuando se activa el avance rápido. 0 = sin límite (tan rápido como lo permita el ordenador). Los valores inferiores a 100% ralentizan el juego. El límite superior depende de las características del ordenador y pueden variar dependiendo de la partida STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% Velocidad de juego normal ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Sin límite (tan rápido como pueda el ordenador) @@ -1822,7 +1823,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Cantidad de mem STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Intervalo de mantenimiento en porcentajes: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Si se activa, los vehículos intentarán realizar el mantenimiento cuando su fiabilidad descienda un porcentaje determinado respecto a la fiabilidad máxima{}{}Por ejemplo, si la fiabilidad máxima de un vehículo es 90% y el intervalo de servicio es 20%, el vehículo intentará realizar el mantenimiento cuando alcance una fiabilidad del 72%. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Si se activa, los vehículos intentarán realizar el mantenimiento cuando su fiabilidad descienda un porcentaje determinado respecto a la fiabilidad máxima{}{}Por ejemplo, si la fiabilidad máxima de un vehículo es 90% y el intervalo de servicio es 20%, el vehículo intentará realizar el mantenimiento cuando alcance una fiabilidad del 72% STR_CONFIG_SETTING_SERVINT_TRAINS :Intervalo de mantenimiento por defecto para trenes: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Fija el intervalo de mantenimiento por defecto para los nuevos vehículos de ferrocarril, que se empleará si no se define un intervalo de forma explícita para ése vehículo @@ -1840,7 +1841,7 @@ STR_CONFIG_SETTING_NOSERVICE :Desactivar mant STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Si se activa, los vehículos no reciben mantenimiento si no pueden averiarse STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Penalización de velocidad de carga para los trenes que sean más largos que la estación: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Si se activa, los trenes que sean demasiado largos para la estación cargarán más despacio que un tren que quepa en ella. Este ajuste no afecta a la búsqueda de rutas. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Si se activa, los trenes que sean demasiado largos para la estación cargarán más despacio que un tren que quepa en ella. Este ajuste no afecta a la búsqueda de rutas STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Activar límites de velocidad en vagones: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Si se activa, se tienen en cuenta los límites de velocidad de los vagones a la hora de establecer la velocidad máxima de un tren @@ -1905,13 +1906,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Año en el cual STR_CONFIG_SETTING_STARTING_YEAR :Fecha de inicio: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Año de clasificación final: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Año en el que finaliza el juego para establecer la clasificación. Al final de este año se guarda la puntuación de las empresas y se muestra la pantalla de las puntuaciones más altas, aunque se puede continuar jugando la partida.{}Si este año es posterior al año de comienzo, la pantalla de puntuaciones más altas no se mostrará nunca. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Año en el que finaliza el juego para establecer la clasificación. Al final de este año se guarda la puntuación de las empresas y se muestra la pantalla de las puntuaciones más altas, aunque se puede continuar jugando la partida.{}Si este año es posterior al año de comienzo, la pantalla de puntuaciones más altas no se mostrará nunca STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nunca STR_CONFIG_SETTING_ECONOMY_TYPE :Tipo de economía: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :La economía suave provoca que los cambios en la producción sean más frecuentes y en pasos más pequeños. La economía congelada detiene los cambios en la producción y los cierres de industrias. Esta configuración puede no tener efecto si los tipos de industria los proporciona un NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :La economía suave provoca que los cambios en la producción sean más frecuentes y en pasos más pequeños. La economía congelada detiene los cambios en la producción y los cierres de industrias. Esta configuración puede no tener efecto si los tipos de industria los proporciona un NewGRF ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Suave @@ -1966,7 +1967,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permitido STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Permitido, patrón de carreteras personalizado STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Generación de carga en municipios: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Cantidad de carga que es producida por las casas del municipio, en relación a la población total del municipio.{}Crecimiento cuadrático: Un municipio de doble tamaño genera el cuádruple de pasajeros.{}Crecimiento lineal: Un municipio de doble tamaño genera el doble de pasajeros. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Cantidad de carga que es producida por las casas del municipio, en relación a la población total del municipio.{}Crecimiento cuadrático: Un municipio de doble tamaño genera el cuádruple de pasajeros.{}Crecimiento lineal: Un municipio de doble tamaño genera el doble de pasajeros ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Cuadrático (original) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineal @@ -2031,30 +2032,30 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador i STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamaño medio de las ciudades en relación a los pueblos normales al comienzo de la partida STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Actualizar gráfico de distribución cada {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Intervalo entre cálculos sucesivos del grafo de distribución. Cada cálculo planifica uno de los componentes del grafo. Esto significa que un valor X en este ajuste no implica que el grafo completo se actualice cada X segundos. Solo lo hará algún componente. Cuanto más corto sea, más tiempo de CPU será necesario para calcularlo. Cuanto más largo sea, más tiempo tardará la distribución de carga en incorporar nuevas rutas. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Intervalo entre cálculos sucesivos del grafo de distribución. Cada cálculo planifica uno de los componentes del grafo. Esto significa que un valor X en este ajuste no implica que el grafo completo se actualice cada X segundos. Solo lo hará algún componente. Cuanto más corto sea, más tiempo de CPU será necesario para calcularlo. Cuanto más largo sea, más tiempo tardará la distribución de carga en incorporar nuevas rutas STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Utilizar {STRING} para recalcular el gráfico de distribución -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tiempo necesario para cada cálculo de un componente del grafo de distribución. Cuando comienza un cálculo, se crea un hilo de ejecución al que se le permite funcionar durante este número de segundos. Cuanto más corto sea, más probable será que el hilo no haya finalizado a tiempo. En ese caso, el juego se detendrá hasta que finalice (se producirá un retardo o "lag"). Cuanto más largo sea, más tardará en actualizarse la distribución cuando cambien las rutas. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tiempo necesario para cada cálculo de un componente del grafo de distribución. Cuando comienza un cálculo, se crea un hilo de ejecución al que se le permite funcionar durante este número de segundos. Cuanto más corto sea, más probable será que el hilo no haya finalizado a tiempo. En ese caso, el juego se detendrá hasta que finalice (se producirá un retardo o "lag"). Cuanto más largo sea, más tardará en actualizarse la distribución cuando cambien las rutas STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribución para pasajeros: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :En una distribución "Simétrica", se envía la misma cantidad de pasajeros de la estación A a la B que de la B a la A. En una distribución "Asimétrica" se pueden enviar cantidades arbitrarias de pasajeros en ambas direcciones. "Manual" significa que no se realiza una distribución automática para los pasajeros. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :En una distribución "Simétrica", se envía la misma cantidad de pasajeros de la estación A a la B que de la B a la A. En una distribución "Asimétrica" se pueden enviar cantidades arbitrarias de pasajeros en ambas direcciones. "Manual" significa que no se realiza una distribución automática para los pasajeros STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modo de distribución para el correo: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :En una distribución "Simétrica", se envía la misma cantidad de carga de la estación A a la B que de la B a la A. En una distribución "Asimétrica" se pueden enviar cantidades arbitrarias de carga en ambas direcciones. "Manual" significa que no se realiza una distribución automática para el correo. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :En una distribución "Simétrica", se envía la misma cantidad de carga de la estación A a la B que de la B a la A. En una distribución "Asimétrica" se pueden enviar cantidades arbitrarias de carga en ambas direcciones. "Manual" significa que no se realiza una distribución automática para el correo STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Modo de distribución para la clase de carga BLINDADA: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :El tipo de carga BLINDADA contiene objetos de valor en el clima templado, diamantes en el clima subtropical y oro en el clima subártico. Los NewGRFs pueden modificar esto. En una distribución "Simétrica", se envía la misma cantidad de carga de la estación A a la B que de la B a la A. En una distribución "Asimétrica" se pueden enviar cantidades arbitrarias de carga en ambas direcciones. "Manual" significa que no se realiza una distribución automática para esta carga. Se recomienda fijar esta distribución en "Asimétrica" o en "Manual" al jugar en los clima subártico y subtropical, ya que los bancos sólo reciben carga en esos climas. En el clima templado es factible escoger "Simétrica" ya que los bancos pueden enviar objetos de valor de vuelta al banco de origen. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :El tipo de carga BLINDADA contiene objetos de valor en el clima templado, diamantes en el clima subtropical y oro en el clima subártico. Los NewGRFs pueden modificar esto. En una distribución "Simétrica", se envía la misma cantidad de carga de la estación A a la B que de la B a la A. En una distribución "Asimétrica" se pueden enviar cantidades arbitrarias de carga en ambas direcciones. "Manual" significa que no se realiza una distribución automática para esta carga. Se recomienda fijar esta distribución en "Asimétrica" o en "Manual" al jugar en los clima subártico y subtropical, ya que los bancos sólo reciben carga en esos climas. En el clima templado es factible escoger "Simétrica" ya que los bancos pueden enviar objetos de valor de vuelta al banco de origen STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Modo de distribución para otras clases de carga: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asimétrico" significa que se pueden mover cantidades arbitrarias de carga en ambas direcciones. "Manual" significa que no habrá distribución automática para estos tipos de carga. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asimétrico" significa que se pueden mover cantidades arbitrarias de carga en ambas direcciones. "Manual" significa que no habrá distribución automática para estos tipos de carga ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimétrico STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simétrico STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Precisión de la distribución: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Este valor determina el tiempo de CPU empleado en calcular el grafo de distribución. Si es demasiado elevado puede producir ralentización en el juego. Si es demasiado bajo la distribución puede ser poco precisa, causando que ocasionalmente se produzcan errores en los lugares a los que se destina la carga. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Este valor determina el tiempo de CPU empleado en calcular el grafo de distribución. Si es demasiado elevado puede producir ralentización en el juego. Si es demasiado bajo la distribución puede ser poco precisa, causando que ocasionalmente se produzcan errores en los lugares a los que se destina la carga STR_CONFIG_SETTING_DEMAND_DISTANCE :Efecto de la distancia en la demanda: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Si se fija a un valor superior a 0, la distancia entre la estación origen A de cierta carga y un posible destino B afectará a la cantidad de carga que se enviará de A a B. Cuanto más lejos esté B de A, menos carga se enviará. Cuanto mayor sea el valor de este ajuste, menos carga se enviará a estaciones distantes en favor de estaciones cercanas STR_CONFIG_SETTING_DEMAND_SIZE :Cantidad de carga a devolver en modo simétrico: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Fijar esta opción a menos de 100% provoca que la distribución "simétrica" de carga se comporte como una distribucion "asimétrica". Si una cantidad determinada es enviada a una estación, se forzará a enviar menos carga de vuelta. Si se fija a 0%, la distribución "simétrica" se comporta como una distribución "asimétrica". +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Fijar esta opción a menos de 100% provoca que la distribución "simétrica" de carga se comporte como una distribución "asimétrica". Si una cantidad determinada es enviada a una estación, se forzará a enviar menos carga de vuelta. Si se fija a 0%, la distribución "simétrica" se comporta como una distribución "asimétrica" STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturación de caminos cortos antes de usar aquellos de mayor capacidad: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frecuentemente hay múltiples caminos posibles entre dos estaciones determinadas. En primer lugar se intentará saturar el camino más corto, para posteriormente saturar el segundo más corto y así sucesivamente. La saturación está determinada por una estimación de capacidad y uso planificado. Una vez que se hayan saturado todos los caminos, si todavía hay demanda, se sobrecargarán los caminos empezando por aquellos de mayor capacidad. La mayor parte de las veces, el algoritmo no estimará la capacidad de forma precisa. Esta opción permite especificar el porcentaje de saturación que debe de tener una línea en la primera parte del algoritmo antes de pasar a la siguiente línea. Fijarlo a menos de 100% permite evitar estaciones sobrecargadas en el caso de que se sobreestimen las capacidades @@ -3198,11 +3199,11 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Fotogramas por segundo STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Tasa de Simulación: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Número de tics de juego simulados por segundo. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Número de tics de juego simulados por segundo STR_FRAMERATE_RATE_BLITTER :{BLACK}FPS de gráficos: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Número de fotogramas renderizados por segundo. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Número de cuadros dibujados por segundo STR_FRAMERATE_SPEED_FACTOR :{BLACK}Factor actual de velocidad de juego: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Velocidad actual del juego, comparada con la velocidad esperada durante una simulación a ritmo normal. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Velocidad actual del juego, comparada con la velocidad esperada durante una simulación a ritmo normal STR_FRAMERATE_CURRENT :{WHITE}Actual STR_FRAMERATE_AVERAGE :{WHITE}Medio STR_FRAMERATE_MEMORYUSE :{WHITE}Memoria @@ -4026,12 +4027,12 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Aeronaves sin a STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - Clica en un grupo para ver la lista de sus vehículos. Es posible arrastrar grupos para modificar su jerarquía. +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - Haz clic en un grupo para ver la lista de sus vehículos. Es posible arrastrar y soltar grupos para reorganizar los elementos STR_GROUP_CREATE_TOOLTIP :{BLACK}Clica para crear un grupo nuevo STR_GROUP_DELETE_TOOLTIP :{BLACK}Borra el grupo seleccionado STR_GROUP_RENAME_TOOLTIP :{BLACK}Renombra el grupo seleccionado STR_GROUP_LIVERY_TOOLTIP :{BLACK}Cambia el color del grupo seleccionado -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clica para proteger este grupo del autorreemplazo global. Ctrl+clic protege también los subgrupos. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Haz clic para evitar que los vehículos en este grupo se reemplacen automáticamente. Ctrl+Clic protege también a los subgrupos STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Borrar Grupo STR_GROUP_DELETE_QUERY_TEXT :{WHITE}¿Estás seguro de que quieres borrar este grupo y todos sus subgrupos? diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 560383e4d7..b2052d5a89 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -782,7 +782,7 @@ STR_PERFORMANCE_DETAIL_KEY :{BLACK}Дета STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}% -STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP :{BLACK}Проглянути деталі рейтинга цієї компанії +STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP :{BLACK}Проглянути деталі рейтингу цієї компанії ###length 10 STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}Транспорт: @@ -800,6 +800,8 @@ STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Підс STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}Кількість транспортних засобів, які були прибутковими минулого року (дорожній транспорт, потяги, кораблі, літаки). STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Кількість транспортних засобів, які були прибутковими минулого періоду (дорожній транспорт, потяги, кораблі, літаки). STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Кількість нещодавно обслуговуваних частин станцій. Кожна частина станції (залізнична станція, автобусна зупинка, аеропорт) враховується окремо, навіть якщо вони об'єднані в одну станцію +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}Прибуток транспортного засобу з найменшим заробітком (враховується тільки транспорт старший за два роки) +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}Прибуток транспортного засобу з найменшим заробітком (враховується тільки транспорт старший за два періоди) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Найменший квартальний прибуток за останні 12 кварталів STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Найбільший квартальний прибуток за останні 12 кварталів STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Кількість одиниць вантажу, доставлених за останні 4 квартали @@ -1619,6 +1621,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :При вклю STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Дотримання розкладу: {STRING} ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Календар +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Настінний годинник STR_CONFIG_SETTING_MINUTES_PER_YEAR :Хвилин у році: {STRING} @@ -1626,6 +1629,10 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (час календаря зупинено) +STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Зміна виробництва вантажів у містах: {STRING} +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Змінити виробництво вантажів у містах на цей відсоток +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Змінити виробництво вантажів підприємствами: {STRING} +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Змінити виробництво вантажів підприємствами на цей відсоток STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Автозаміна зношених транспортних засобів: {STRING} @@ -2080,7 +2087,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Дозволе STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Дозволено (з вибором дорожньої сітки) STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Кількість вантажів та пасажирів у містах: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Скільки вантажів генерується будинками в містах відносно населення.{}Квадратична залежність: Вдвічі більше місто генерує вчетверо більше вантажів.{}Лінійна: Вдвічі більше місто генерує вдвічі більше вантажів. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Скільки вантажів створюється будинками в містах відносно населення.{}Квадратична залежність: Вдвічі більше місто створює вчетверо більше вантажів.{}Лінійна: Вдвічі більше місто створює вдвічі більше вантажів. ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Квадратична(оригінальна) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :лінійна залежність @@ -2176,6 +2183,9 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Показув STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Імперські (милі/год) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Метричні (км/год) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :СІ (м/с) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_DAYS :Ігрових одиниць (клітинок/день) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_SECS :Ігрових одиниць (клітинок/секунду) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :вузли STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Одиниці потужності: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Показувати потужності в таких одиницях: @@ -4499,16 +4509,17 @@ STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Не до STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Очікування вільного шляху STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Занадто далеко до наступного місця призначення -STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}Прямує до {STATION}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Прямує до {0:STATION} STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Без завдань, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Прямує до {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Прямує до {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Прямує до {0:WAYPOINT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Прямує до {0:DEPOT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Техогляд у {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Звільнити і обслужити в {0:DEPOT} -STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}Неможливо досягти {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}Неможливо досягти {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}Неможливо досягти {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}Неможливо досягти {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - Неможливо досягти {0:STATION} +STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Неможливо досягти {0:WAYPOINT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Неможливо досягти {0:DEPOT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Неможливо досягти {0:DEPOT} # Vehicle stopped/started animations ###length 2 diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 3055f2a0bc..8b067abc58 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1054,7 +1054,7 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :Helaethu befela STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Marciwch y blwch hwn i helaethu befelau yn ôl maint y rhyngwyneb STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Defnyddio wynebfath corlun traddodiadol -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marciwch y blwch hwn os oes well gennych ddefnyddio y wynebfath corlun un-maint traddodiadol. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marciwch y blwch hwn os oes well gennych ddefnyddio y wynebfath corlun un-maint traddodiadol STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Gwynebfathau dadamgenu STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marciwch y blwch hwn i ddadamgennu ffontiau y gellir eu hailfeintio @@ -1275,7 +1275,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Arian di-derfyn STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Caniatáu gwario di-derfyn ac analluogi methdaledd cwmnïau STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Benthyciad agoriadol uchafsymol: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Y swm uchaf y gall cwmni fenthyca (heb ystyried chwyddiant). Os y gosodir ar "dim benthyciad", ni fydd arian ar gael oni bai y caiff ei roi gan Sgript Gêm neu'r gosodiad "Arian di-derfyn". +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Y swm uchaf y gall cwmni fenthyca (heb ystyried chwyddiant). Os y gosodir ar "dim benthyciad", ni fydd arian ar gael oni bai y caiff ei roi gan Sgript Gêm neu'r gosodiad "Arian di-derfyn" STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Dim benthyciad @@ -1359,7 +1359,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Serthrwydd llet STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Serthrwydd teil llethr ar gyfer cerbyd ffordd. Mae gwerthoedd uwch yn ei gwneud yn anoddach i ddringo allt STR_CONFIG_SETTING_FORBID_90_DEG :Rhwystro trenau a llongau rhag troi 90 gradd: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Tro 90 gradd yw pan fo trac llorweddol yn cael ei ddilyn yn syth gan drac fertigol at y teil cyfagos, gan wneud i'r trên droi 90 gradd wrth groesi ochr y teil yn hytrach na'r 45 gradd sydd i'w gael gyda chyfuniadau trac eraill. Mae hyn hefyd yn effeithio ar gylch troi llongau +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Tro 90 gradd yw pan fo trac llorweddol yn cael ei ddilyn yn syth gan drac fertigol at y teil cyfagos, gan wneud i'r trên droi 90 gradd wrth groesi ochr y teil yn hytrach na'r 45 gradd sydd i'w gael gyda chyfuniadau trac eraill STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Caniatáu cyfuno gorsafoedd nad ydynt yn union gyfochrog: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Caniatáu ychwanegu rhannau at orsaf heb gyffwrdd yn uniongyrchol a'r rhai sydd eisoes yn bodoli, trwy Ctrl+Clicio wrth osod y darnau newydd @@ -1471,7 +1471,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Lliw dechreuol STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Dewiswch liw dechreuol am y cwmni STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Ail liw dechreuol y cwmni: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Dewiswch ail liw dechreuol ar gyfer y cwmni, os yn defnyddio NewGRF sy'n ei alluogi. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Dewiswch ail liw dechreuol ar gyfer y cwmni, os yn defnyddio NewGRF sy'n ei alluogi STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Maes awyr ddim yn dibennu: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Mae galluogi'r dewis yma'n peri i bob math o faes awyr aros ar gael am byth wedi ei gyflwyniad gyntaf @@ -1495,22 +1495,22 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Nid yw cerbydau STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Pan fo wedi'i alluogi, bydd bob math o gerbyd yn aros ar gael am byth wedi eu cyflwyniad gyntaf STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Cadw amser: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Dewis unedau cadw amser y gêm. Ni ellir newid hyn yn ddiweddarach.{}{}Dull calendr yw'r profiad clasurol OpenTTD, gyda blwyddyn yn cynnwys 12 mis o 28-31 diwrnod.{}{}Yn y dull cloc wal, mae cynhyrchiant cargo a materion ariannol yn cael eu cyfrifo fesul munud, sef tua'r un amser a mis 30 diwrnod yn y modd calendr. Mae'r rhain yn cael eu grwpio i gyfnodau 12 munud, sydd gyfystyr â blwyddyn yn y modd calendr..{}{}Yn y naill modd neu'r llall, mae wastad calendr traddodiadol, sydd yn cael ei ddefnyddio ar gyfer dyddiadau cyflwyno cerbydau, tai a thanadeiledd arall. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Dewis unedau cadw amser y gêm. Ni ellir newid hyn yn ddiweddarach.{}{}Dull calendr yw'r profiad clasurol OpenTTD, gyda blwyddyn yn cynnwys 12 mis o 28-31 diwrnod.{}{}Yn y dull cloc wal, mae cynhyrchiant cargo a materion ariannol yn cael eu cyfrifo fesul munud, sef tua'r un amser a mis 30 diwrnod yn y modd calendr. Mae'r rhain yn cael eu grwpio i gyfnodau 12 munud, sydd gyfystyr â blwyddyn yn y modd calendr..{}{}Yn y naill modd neu'r llall, mae wastad calendr traddodiadol, sydd yn cael ei ddefnyddio ar gyfer dyddiadau cyflwyno cerbydau, tai a thanadeiledd arall ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendr STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Cloc wal STR_CONFIG_SETTING_MINUTES_PER_YEAR :Munudau i bob blwyddyn: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Dewis y nifer o funudau mewn blwyddyn calendr. Y rhagosodiad yw 12 munud. Gosodwch at 0 i rwystro'r flwyddyn calendr rhag newid. Nid yw'r gosodiad yma'n effeithio ar efelychiad economaidd y gêm, ac mae ond ar gael pan yn defnyddio amseru cloc wal. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Dewis y nifer o funudau mewn blwyddyn calendr. Y rhagosodiad yw 12 munud. Gosodwch at 0 i rwystro'r flwyddyn calendr rhag newid. Nid yw'r gosodiad yma'n effeithio ar efelychiad economaidd y gêm, ac mae ond ar gael pan yn defnyddio amseru cloc wal STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (amser calendr wedi'i rewi) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Helaethu cynhyrchiant cargo trefi: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Helaethu cynhyrchiant cargo trefi gyda'r canran yma. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Helaethu cynhyrchiant cargo trefi gyda'r canran yma STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Helaethu cynhyrchiant cargo diwydiannau: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Helaethu cynhyrchiant cargo diwydiannau gyda'r canran yma. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Helaethu cynhyrchiant cargo diwydiannau gyda'r canran yma STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Awtoadnewyddu cerbyd pan aiff yn hen: {STRING} @@ -1529,7 +1529,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Ystod neges gwa STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Amser i ddangos negeseuon gwall mewn ffenestr coch. Sylwer ni gaiff rhai negeseuon gwall (difrifol) eu cau'n ddiofyn STR_CONFIG_SETTING_HOVER_DELAY :Dangos cynghorion: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Oediad cyn y dangosir cynghorion wrth ddal y cyrchydd dros rhyw elfen rhyngwyneb. Fel arall rhwymir cynghorion at botwm dde'r llygoden pan fo'r gwerth yma'n 0. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Oediad cyn y dangosir cynghorion wrth ddal y cyrchydd dros rhyw elfen rhyngwyneb. Fel arall rhwymir cynghorion at botwm dde'r llygoden pan fo'r gwerth yma'n 0 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Oedi am {COMMA} milfed o eiliad ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :De glicio @@ -1541,8 +1541,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Trwch llinellau STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Lled y linell mewn graffiau. Bydd llinell fain yn fwy manwl, tra y bydd llinell trwchus yn haws i'w weld gyda lliwiau'n fwy amlwg STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Dangos enw'r NewGRF yn y ffenest adeiladu cerbyd: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Ychwanegu llinell i'r ffenestr adeiladu cerbyd, gan ddangos pa NewGRF mae'r cerbyd a ddewisir yn dod o. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Dangos y llwythi y gall cerbydau eu cario yn y ffenestri rhestr {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Ychwanegu llinell i'r ffenestr adeiladu cerbyd, gan ddangos pa NewGRF mae'r cerbyd a ddewisir yn dod o +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Dangos y llwythi y gall cerbydau eu cario yn y ffenestri rhestr: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Os y galluogir, bydd llwyth cludadwy'r cerbyd yn dangos uwch ei ben yn y rhestrau cerbyd STR_CONFIG_SETTING_LANDSCAPE :Tirwedd: {STRING} @@ -1561,13 +1561,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Dwysedd diwydia STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Gosod faint o ddiwydiannau y dylid eu creu a pha lefel caiff eu cynnal drwy'r gêm STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Pellter uchafsymol o'r ochr ar gyfer Purfeydd olew: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Codir purfeydd olew ger ymylon y map yn unig, h.y. ar yr arfordir mewn mapiau ynys +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Cyfyngiad pa mor bell o ymyl y map y gellid adeiladu purfeydd a rigiau olew. Ar mapiau ynys mae hyn yn sicrhau eu bod ger y môr. Ar mapiau sy'n fwy na 256 teil, bydd y gwerth yma'n cael ei helaethu i fyny STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Uchder Llinell Eira: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Rheoli'r uchder y mae eira'n ymddangos mewn tirwedd is-arctig. Mae eira hefyd yn effeithio ar gynhyrchu diwydiannau a gofynion twf trefi. Dim ond yn y Golygydd Senario y gellir ei newid, neu fel arall caiff ei gyfrifo trwy "gorchudd eira" STR_CONFIG_SETTING_SNOW_COVERAGE :Gorchuddiad eira: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Dewis faint o eira ar gyfer y tirwedd is-arctig. Mae eira'n effeithio ar gynhyrchu diwydiannau a gofynion twf trefi. Dim ond yn cael ei ddefnyddio wrth greu map. Nid yw teiliau lefel môr ac arfordir byth o dan eira. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Dewis faint o eira ar gyfer y tirwedd is-arctig. Mae eira'n effeithio ar gynhyrchu diwydiannau a gofynion twf trefi. Dim ond yn cael ei ddefnyddio wrth greu map. Nid yw teiliau lefel môr ac arfordir byth o dan eira STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Gorchudd anialwch: {STRING} @@ -1583,7 +1583,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Garw STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Garw Iawn STR_CONFIG_SETTING_VARIETY :Dosraniad amrywiaeth: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Rheoli a yw'r map yn cynnwys ardaloedd mynyddig a gwastad. Y mwyaf o amrywiaeth, y mwy o wahaniaeth uchder rhwng ardaloedd mynyddig a gwastad. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Rheoli a yw'r map yn cynnwys ardaloedd mynyddig a gwastad. Y mwyaf o amrywiaeth, y mwy o wahaniaeth uchder rhwng ardaloedd mynyddig a gwastad STR_CONFIG_SETTING_RIVER_AMOUNT :Nifer afonydd: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Dewis sawl afon i'w creu @@ -1630,7 +1630,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Gwyrdd tywyll STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Fioled STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Gorliw llif cargo: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Gosod y cynllun lliw a ddefnyddir ar gyfer y gwedd llif cargo. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Gosod y cynllun lliw a ddefnyddir ar gyfer y gwedd llif cargo ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Gwyrdd i goch (gwreiddiol) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Gwyrdd at las @@ -1751,10 +1751,10 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Cadw'r offer ad STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Cadw'r offer adeiladu pontydd, twneli, a.y.y.b. ar agor wedi eu defnydd STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Tynnu signalau'n ddiofyn wrth adeiladu rheilffordd: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Tynnu signalau'n ddiofyn wrth adeiladu rheilffordd os ydynt ar y ffordd. Sylwch y gall hyn arwain at ddamwain rheilffordd posibl. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Tynnu signalau'n ddiofyn wrth adeiladu rheilffordd os ydynt ar y ffordd. Sylwch y gall hyn arwain at ddamwain rheilffordd posibl STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Cyfyngiad cyflymu'r gêm: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Cyfyngu pa mor gyflym mae'r gêm yn mynd pan yn cyflymu'r gêm. Mae 0 yn golygu dim cyfyngiad (pa mor gyflym y gall eich cyfrifiadur fynd). Mae gwerthoedd o dan 100% yn arafu'r gêm i lawr. Mae'r terfyn uchaf yn dibynnu ar briodweddau'ch cyfrifiadur a gall amrywio yn ôl y gêm. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Cyfyngu pa mor gyflym mae'r gêm yn mynd pan yn cyflymu'r gêm. Mae 0 yn golygu dim cyfyngiad (pa mor gyflym y gall eich cyfrifiadur fynd). Mae gwerthoedd o dan 100% yn arafu'r gêm i lawr. Mae'r terfyn uchaf yn dibynnu ar briodweddau'ch cyfrifiadur a gall amrywio yn ôl y gêm STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% cyflymder gêm arferol ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Dim terfyn (mor gyflym ag y gall eich cyfrifiadur fynd) @@ -1818,11 +1818,11 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Caniatáu i chw STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Nifer y gweithredoedd cyn diarddel sgriptiau: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Uchafswm y nifer o gamau cyfrifo y gall sgript ei gymeryd mewn un tro STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Defnydd cof uchaf i bob sgript: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Faint o gof y gall sgript unigol ei ddefnyddio cyn y gaiff ei ddiffodd yn orfodol. Gall fod angen cynyddu hyn ar gyfer mapiau mawr. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Faint o gof y gall sgript unigol ei ddefnyddio cyn y gaiff ei ddiffodd yn orfodol. Gall fod angen cynyddu hyn ar gyfer mapiau mawr STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Dangos y cyfnod rhwng gwasanaethau mewn canrannau: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Pan y galluogir, bydd cerbydau'n ceisio gwasanaeth pan fo'u dibynadwyedd yn disgyn canran penodol o'u dibynadwyedd uchafsymol.{}{}Er enghraifft, os yw dibynadwyedd uchafsymol cerbyd yn 90% a'r ystod gwasanaeth yn 20%, bydd y cerbyg yn ceisio gwasanaeth pan mae'r dibynadwyedd yn cyrraedd 72%.Dewis os y bydd gwasanaethu cerbydau'n digwydd yn ôl yr amser ers y gwasanaeth olaf, neu wrth i'w dibynadwyedd ddisgyn islaw ganran penodol o'r dibynadwyedd uchafsymol +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Pan y galluogir, bydd cerbydau'n ceisio gwasanaeth pan fo'u dibynadwyedd yn disgyn canran penodol o'u dibynadwyedd uchafsymol.{}{}Er enghraifft, os yw dibynadwyedd uchafsymol cerbyd yn 90% a'r ystod gwasanaeth yn 20%, bydd y cerbyg yn ceisio gwasanaeth pan mae'r dibynadwyedd yn cyrraedd 72% STR_CONFIG_SETTING_SERVINT_TRAINS :Ystod gwasanaethu rhagosodedig ar gyfer trenau: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Gosod yr ystod gwasanaethu rhagosodedig ar gyfer cerbydau rheilffordd newydd, os na ddynodir ystod gwasanaethu penodol ar gyfer y cerbyd @@ -1840,7 +1840,7 @@ STR_CONFIG_SETTING_NOSERVICE :Analluogi gwasa STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Pan y galluogir, ni wasanaethir cerbydau os na allent dorri i lawr STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Cosb cyflymder llwytho ar gyfer trenau sy'n hirach na'r orsaf: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Pan y galluogir, bydd trenau sy'n rhy hir i'r orsaf yn llwytho'r arafach na thrên sydd yn ffitio'r orsaf. Nid yw'r gosodiad yma'n effeithio ar lwybro. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Pan y galluogir, bydd trenau sy'n rhy hir i'r orsaf yn llwytho'r arafach na thrên sydd yn ffitio'r orsaf. Nid yw'r gosodiad yma'n effeithio ar lwybro STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Galluogi terfynau cyflymder wagenni: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Pan y galluogir, fe ddefnyddir terfynnau cyflymder pob cerbyd mewn trên pan yn cyfrifo ei gyflymder uchafsymol @@ -1905,13 +1905,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Y blwyddyn y ca STR_CONFIG_SETTING_STARTING_YEAR :Blwyddyn dechreuol: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Sgorio diwedd blwyddyn: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Y flwyddyn y bydd y gêm yn gorffen ar gyfer dibenion sgorio. Ar ddiwedd y flwyddyn yma, bydd sgôr y cwmni'n cael ei gofnodi a bydd y sgôr uchaf yn cael ei arddangos, ond gall y chwaraewyr barhau i chwarae wedi hynny.{}Os yr hyn cyn y blwyddyn dechrau, ni fydd y sgrin sgôr uchaf byth yn cael ei arddangos. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Y flwyddyn y bydd y gêm yn gorffen ar gyfer dibenion sgorio. Ar ddiwedd y flwyddyn yma, bydd sgôr y cwmni'n cael ei gofnodi a bydd y sgôr uchaf yn cael ei arddangos, ond gall y chwaraewyr barhau i chwarae wedi hynny.{}Os yr hyn cyn y blwyddyn dechrau, ni fydd y sgrin sgôr uchaf byth yn cael ei arddangos STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Byth STR_CONFIG_SETTING_ECONOMY_TYPE :Math economi: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Mae economi llyfn yn gwneud newidiadau cynhyrchiant yn fwy aml, ac mewn camau llai. Mae economi rhewiedig yn atal newidiadau cynhyrchiant a chau diwydiannau. Efallai ni fydd effaith gan y gosodiadau yma os yw mathau diwydiant yn cael eu darparu gan NewGRF/. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Mae economi llyfn yn gwneud newidiadau cynhyrchiant yn fwy aml, ac mewn camau llai. Mae economi rhewiedig yn atal newidiadau cynhyrchiant a chau diwydiannau. Efallai ni fydd effaith gan y gosodiadau yma os yw mathau diwydiant yn cael eu darparu gan NewGRF ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Gwreiddiol STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Llyfn @@ -1966,7 +1966,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Caniatáu STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Caniatáu, cynllun tref addasiedig STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Cynhyrchiant cargo tref: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Faint o gargo sy'n cael ei greu gan dai mewn trefi, o gymharu efo poblogaeth cyfansymiol y dref.{}Tyfiant cwadratig: Mae tref dwywaith y main yn creu pedair gwaith gymaint o deithwyr.{}Tyfiant llinol: Mae tref dwywaith y main yn creu dwywaith gymaint o deithwyr. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Faint o gargo sy'n cael ei greu gan dai mewn trefi, o gymharu efo poblogaeth cyfansymiol y dref.{}Tyfiant cwadratig: Mae tref dwywaith y main yn creu pedair gwaith gymaint o deithwyr.{}Tyfiant llinol: Mae tref dwywaith y main yn creu dwywaith gymaint o deithwyr ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Cwadratig (gwreiddiol) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Llinol @@ -2007,7 +2007,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Cydraniad uchaf o gorluniau i'w defnyddio: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Cyfyngu y cyfraniad uchaf a ddefnyddir ar gyfer corluniau. Bydd cyfyngu cydraniad corluniau yn osgoi defnyddio graffigau cydraniad uchel hyn yn oed pan font ar gael. Gall hyn helpu cadw ymddangosiad y gêm yn gyson pan yn defnyddio cymysgedd o ffeiliau GRF gyda a heb graffigau cydraniad uchel. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Cyfyngu y cyfraniad uchaf a ddefnyddir ar gyfer corluniau. Bydd cyfyngu cydraniad corluniau yn osgoi defnyddio graffigau cydraniad uchel hyn yn oed pan font ar gael. Gall hyn helpu cadw ymddangosiad y gêm yn gyson pan yn defnyddio cymysgedd o ffeiliau GRF gyda a heb graffigau cydraniad uchel ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2031,33 +2031,33 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Lluosydd cychwy STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Maint cymhedrol dinasoedd o gymharu â threfi arferol ar ddechrau'r gêm STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Diweddaru'r graff dosraniad bob {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Amser rhwng ailgyfrifiadau o'r graff cyswllt. Mae bob ailgyfrifiad yn cyfrifo'r cynlluniau ar gyfer un cydran o'r graff. Mae hyn yn golygu nad yw gwerth o X yn golygu y bydd y graff gyfan yn cael ei ddiweddaru bob X eiliad, dim ond rhyw gydran ohono. Po fyrraf y gwerth y mwyaf o amser prosesydd y bydd ei angen i'w gyfrifo. Yr hiraf y gwerth y mwyaf yr amser cyn y bydd dosbarthiad cargo yn dechrau ar lwybrau newydd. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Amser rhwng ailgyfrifiadau o'r graff cyswllt. Mae bob ailgyfrifiad yn cyfrifo'r cynlluniau ar gyfer un cydran o'r graff. Mae hyn yn golygu nad yw gwerth o X yn golygu y bydd y graff gyfan yn cael ei ddiweddaru bob X eiliad, dim ond rhyw gydran ohono. Po fyrraf y gwerth y mwyaf o amser prosesydd y bydd ei angen i'w gyfrifo. Yr hiraf y gwerth y mwyaf yr amser cyn y bydd dosbarthiad cargo yn dechrau ar lwybrau newydd STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Cymryd {STRING} eiliad ar gyfer ailgyfrifo'r graff dosraniad -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Amser a gymerir ar gyfer ailgyfrifo pob cydran o graff cyswllt. Pan fo ailgyfrifiad yn cael ei ddechrau, bydd edefyn yn cael ei ddechrau sy'n cael rhedeg am y nifer yma o eiliadau. Y byrraf yr amser y mwyaf tebygol na fydd yr edefyn wedi gorffen erbyn hyn. Yna bydd y gêm yn aros tan y bydd ("lag"). Yr hiraf yr amser y hiraf y bydd yn cymryd i ddiweddaru dosraniad pan fydd llwybrau'n newid. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Amser a gymerir ar gyfer ailgyfrifo pob cydran o graff cyswllt. Pan fo ailgyfrifiad yn cael ei ddechrau, bydd edefyn yn cael ei ddechrau sy'n cael rhedeg am y nifer yma o eiliadau. Y byrraf yr amser y mwyaf tebygol na fydd yr edefyn wedi gorffen erbyn hyn. Yna bydd y gêm yn aros tan y bydd ("lag"). Yr hiraf yr amser y hiraf y bydd yn cymryd i ddiweddaru dosraniad pan fydd llwybrau'n newid STR_CONFIG_SETTING_DISTRIBUTION_PAX :Dull dosrannu ar gyfer teithwyr: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :Mae "cymesur" yn golygu y bydd tua'r un faint o deithwyr yn mynd o orsaf A i orsaf B ac yr aiff o B i A. Mae "anghymesur" yn golygu y gall niferoedd mympwyol fynd yn y naill cyfeiriad neu'r llall. Mae "â llaw" yn golygu ni fydd dosrannu diofyn yn digwydd ar gyfer teithwyr. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :Mae "cymesur" yn golygu y bydd tua'r un faint o deithwyr yn mynd o orsaf A i orsaf B ac yr aiff o B i A. Mae "anghymesur" yn golygu y gall niferoedd mympwyol fynd yn y naill cyfeiriad neu'r llall. Mae "â llaw" yn golygu ni fydd dosrannu diofyn yn digwydd ar gyfer teithwyr STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Dull dosrannu ar gyfer post: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :Mae "cymesur" yn golygu y bydd tua'r un faint o bost yn cael ei yrru o orsaf A i orsaf B ac y gyrrir o B i A. Mae "anghymesur" yn golygu y gall llwythi mympwyol eu gyrru yn y naill cyfeiriad neu'r llall. Mae "â llaw" yn golygu ni fydd dosrannu diofyn yn digwydd ar gyfer post. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :Mae "cymesur" yn golygu y bydd tua'r un faint o bost yn cael ei yrru o orsaf A i orsaf B ac y gyrrir o B i A. Mae "anghymesur" yn golygu y gall llwythi mympwyol eu gyrru yn y naill cyfeiriad neu'r llall. Mae "â llaw" yn golygu ni fydd dosrannu diofyn yn digwydd ar gyfer post STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Dull dosrannu ar gyfer llwythi ARFOG: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Mae llwythi ARFOG yn cynnwys trysorau mewn ardaloedd tymherus, diemwntau yn y trofannau, neu aur yn yr is-arctig. Gall NewGRFau newid hyn, Mae "cymesur" yn golygu y bydd tua'r un faint o lwythi'n cael eu gyrru o orsaf A i orsaf B ac y gyrrir o B i A. Mae "anghymesur" yn golygu y gall llwythi mympwyol eu gyrru yn y naill cyfeiriad neu'r llall. Mae "â llaw" yn golygu ni fydd dosrannu diofyn yn digwydd ar gyfer y llwythi yma. Fe argymhellir eich bod yn dewis anghymesur neu â llaw pan yn chwarae mewn ardal is-arctig, gan na fydd banciau'n gyrru aur yn ôl i gloddfeydd aur. Ar gyfer ardaloedd tymherus neu trofannol gallwch hefyd ddewis cymesur gan y bydd banciau'n gyrru trysorau'n ôl i rai banciau tardd. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Mae llwythi ARFOG yn cynnwys trysorau mewn ardaloedd tymherus, diemwntau yn y trofannau, neu aur yn yr is-arctig. Gall NewGRFau newid hyn, Mae "cymesur" yn golygu y bydd tua'r un faint o lwythi'n cael eu gyrru o orsaf A i orsaf B ac y gyrrir o B i A. Mae "anghymesur" yn golygu y gall llwythi mympwyol eu gyrru yn y naill cyfeiriad neu'r llall. Mae "â llaw" yn golygu ni fydd dosrannu diofyn yn digwydd ar gyfer y llwythi yma. Fe argymhellir eich bod yn dewis anghymesur neu â llaw pan yn chwarae mewn ardal is-arctig, gan na fydd banciau'n gyrru aur yn ôl i gloddfeydd aur. Ar gyfer ardaloedd tymherus neu trofannol gallwch hefyd ddewis cymesur gan y bydd banciau'n gyrru trysorau'n ôl i rai banciau tardd STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Dull dosrannu ar gyfer llwythi eraill: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :Mae "anghymesur" yn golygu y gall llwythi mympwyol eu gyrru yn y naill cyfeiriad neu'r llall. Mae "â llaw" yn golygu ni fydd dosrannu diofyn yn digwydd ar gyfer y llwythi hyn. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :Mae "anghymesur" yn golygu y gall llwythi mympwyol eu gyrru yn y naill cyfeiriad neu'r llall. Mae "â llaw" yn golygu ni fydd dosrannu diofyn yn digwydd ar gyfer y llwythi hyn ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :â llaw STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :anghymesur STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :cymesur STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Manylder dosrannu: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Mae'r gosodiad yma'n pennu faint o amser prosesydd y bydd cyfrifo'r graff cyswllt yn ei gymeryd. Os yw'n cymryd gormod o amser efallai bydd peth oedi ar y gêm. Os ydych yn gosod gwerth isel, fodd bynnag, ni fyddy dosraniad yn fanwl gywir, a gallwch nodi nad yw llwythi'n cael ei yrru i'r mannau y bydddech y disgwyl. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Mae'r gosodiad yma'n pennu faint o amser prosesydd y bydd cyfrifo'r graff cyswllt yn ei gymeryd. Os yw'n cymryd gormod o amser efallai bydd peth oedi ar y gêm. Os ydych yn gosod gwerth isel, fodd bynnag, ni fydd y dosraniad yn fanwl gywir, a gallwch nodi nad yw llwythi'n cael ei yrru i'r mannau y byddech y disgwyl STR_CONFIG_SETTING_DEMAND_DISTANCE :Effaith pellter ar y galw am lwythi: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Os ydych yn gosod at werth yn uwch na 0, bydd y pellter rhwng gorsaf tardd rhyw gargo a cyrchfan posibl B yn dylanwadu ar faint o llwythi a yrrir o A i B. Y pellaf y mae B o A, y lleiaf o gargo a yrrir. Gyda gosodiad uwch, bydd llai o gargo yn cael ei yrru i orsafoedd pell a mwy'n cael ei yrru at orsafoedd agos. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Os ydych yn gosod at werth yn uwch na 0, bydd y pellter rhwng gorsaf tardd rhyw gargo a cyrchfan posibl B yn dylanwadu ar faint o llwythi a yrrir o A i B. Y pellaf y mae B o A, y lleiaf o gargo a yrrir. Gyda gosodiad uwch, bydd llai o gargo yn cael ei yrru i orsafoedd pell a mwy'n cael ei yrru at orsafoedd agos STR_CONFIG_SETTING_DEMAND_SIZE :Cyfanswm y llwythi'n dychwelyd ar gyfer modd cymesur: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Bydd gosod hwn at llai na 100% yn gwneud y dosraniad cymesur yn fwy fel yr un anghymesur. Caiff llai o llwythi eu gyrru'n ôl yn orfodol os y bydd peth penodol yn cael ei yrru i orsaf. Gyda gosodiad o 0% bydd y dosraniad cymesur yn ymddwyn fel yr un anghymesur. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Bydd gosod hwn at llai na 100% yn gwneud y dosraniad cymesur yn fwy fel yr un anghymesur. Caiff llai o llwythi eu gyrru'n ôl yn orfodol os y bydd peth penodol yn cael ei yrru i orsaf. Gyda gosodiad o 0% bydd y dosraniad cymesur yn ymddwyn fel yr un anghymesur STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Llenwi llwybrau byr cyn troi at rhai uwch eu cynhwysedd: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Yn aml mae mwy nag un llwybr rhwng dwy orsaf. Bydd Cargodist yn llenwi'r llwybr byrraf yn gyntaf, yna'n symyd at yr ail fyrraf nes ei fod yn llawn, ayyb. Fe ystyrir llwybr yn llawn yn ôl amcangyfrif o gynhwysedd y llwybr a'r defnydd a gynllunwyd. Gyda fod pob llwybr wedi ei lenwi, os oes galw o hyd, bydd yn gorlwytho pob llwybr, gan ffafrio'r rhai gyda chynhwysedd uchel. Ni fydd yr algorithm yn amcangyfrif y cynhwysedd yn fanwl gywir. Mae'r gosodiad yma'n eich galluogi i nodi pa mor llawn y dylai llwybr byrrach fod (fel canran) cyn dewis y llwybr nesaf. Gosodwch at llai na 100% i osgoi tagfeydd mewn gorsafoedd oherwydd goramcangyfrif cynhwysedd. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Yn aml mae mwy nag un llwybr rhwng dwy orsaf. Bydd Cargodist yn llenwi'r llwybr byrraf yn gyntaf, yna'n symyd at yr ail fyrraf nes ei fod yn llawn, ayyb. Fe ystyrir llwybr yn llawn yn ôl amcangyfrif o gynhwysedd y llwybr a'r defnydd a gynllunwyd. Gyda fod pob llwybr wedi ei lenwi, os oes galw o hyd, bydd yn gorlwytho pob llwybr, gan ffafrio'r rhai gyda chynhwysedd uchel. Ni fydd yr algorithm yn amcangyfrif y cynhwysedd yn fanwl gywir. Mae'r gosodiad yma'n eich galluogi i nodi pa mor llawn y dylai llwybr byrrach fod (fel canran) cyn dewis y llwybr nesaf. Gosodwch at llai na 100% i osgoi tagfeydd mewn gorsafoedd oherwydd goramcangyfrif cynhwysedd STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unedau cyflymder (tir): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Unedau cyflymder (môr): {STRING} @@ -2979,9 +2979,9 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Gosod co STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Coed ar hap STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plannu coed ar hap ar draws y tirwedd STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Arferol -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plannu coed unigol trwy lusgo ar draws y tirwedd. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plannu coed unigol trwy lusgo ar draws y tirwedd STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Coedlwyn -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plannu coedwigoedd bach trwy lusgo ar draws y tirwedd. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plannu coedwigoedd bach trwy lusgo ar draws y tirwedd STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Coedwig STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plannu coedwigoedd mawr trwy lusgo ar draws y tirwedd @@ -3198,11 +3198,11 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Cyfradd Fframiau STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Cyfradd efelychu: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Nifer y ticiau gêm a efelychir bob eiliad. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Nifer y ticiau gêm a efelychir bob eiliad STR_FRAMERATE_RATE_BLITTER :{BLACK}Cyfradd fframiau graffeg: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Nifer o fframiau fideo a lunir bob eiliad. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Nifer o fframiau fideo a lunir bob eiliad STR_FRAMERATE_SPEED_FACTOR :{BLACK}Ffactor cyflymder gêm presennol: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Pa mor gyflym mae'r gêm yn rhedeg, o gymharu a'r cyflymder i'w ddisgwyl ar gyfradd efelychu arferol. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Pa mor gyflym mae'r gêm yn rhedeg, o gymharu a'r cyflymder i'w ddisgwyl ar gyfradd efelychu arferol STR_FRAMERATE_CURRENT :{WHITE}Presennol STR_FRAMERATE_AVERAGE :{WHITE}Cymedr STR_FRAMERATE_MEMORYUSE :{WHITE}Cof @@ -3731,7 +3731,7 @@ STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Llyfr Ha STR_STORY_BOOK_SPECTATOR :Llyfr Hanes Bydol STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Tudalen {NUM} -STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Neidio i dudalen benodol dwy ei ddewis o'r cwymplen yma. +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Neidio i dudalen benodol dwy ei ddewis o'r cwymplen yma STR_STORY_BOOK_PREV_PAGE :{BLACK}Blaenorol STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Mynd i'r dudalen blaenorol STR_STORY_BOOK_NEXT_PAGE :{BLACK}Nesaf @@ -4026,7 +4026,7 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Awyrenau heb eu STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grŵp - cliciwch ar grŵp i restru pob cerbyd yn y grŵp hwn. Gallwch glico a llusgo grwpiau i drefnu'r hierarchaeth. +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grŵp - cliciwch ar grŵp i restru pob cerbyd yn y grŵp hwn. Gallwch glicio a llusgo grwpiau i drefnu'r hierarchaeth STR_GROUP_CREATE_TOOLTIP :{BLACK}Cliciwch i greu grŵp STR_GROUP_DELETE_TOOLTIP :{BLACK}Dileu'r grŵp a ddewiswyd STR_GROUP_RENAME_TOOLTIP :{BLACK}Ailenwi'r grŵp a ddewiswyd From 0cff40dd19a52ebd1b2435991dab9ebfdacbcec1 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 13 Mar 2024 04:41:24 +0000 Subject: [PATCH 109/695] Update: Translations from eints norwegian (bokmal): 203 changes by eriksorngard italian: 45 changes by Rivarossi german: 42 changes by Wuzzy2 ukrainian: 13 changes by StepanIvasyn turkish: 25 changes by jnmbk portuguese (brazilian): 25 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 50 ++-- src/lang/german.txt | 83 +++--- src/lang/italian.txt | 87 ++++--- src/lang/norwegian_bokmal.txt | 407 +++++++++++++++--------------- src/lang/turkish.txt | 41 +-- src/lang/ukrainian.txt | 17 +- 6 files changed, 353 insertions(+), 332 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 43eed26e68..d6a6d4b158 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1360,7 +1360,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Inclinação do STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Inclinação de um quadrado inclinado para um veículo rodoviário. Valores grandes tornam mais difícil para um veículo subir uma colina STR_CONFIG_SETTING_FORBID_90_DEG :Proibir trens de fazer curvas de 90 graus: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas de 90 graus ocorrem quando uma pista horizontal é seguida diretamente por outra vertical em um quadrado adjacente, fazendo com que o trem vire 90 graus quando passa de um quadrado para o próximo, ao invés dos habituais 45 graus para outras combinações de pistas +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas de 90 graus ocorrem quando uma linha horizontal é seguida diretamente por outra vertical em um quadrado adjacente, fazendo com que o trem vire 90 graus quando passa de um quadrado para o próximo, ao invés dos habituais 45 graus para outras combinações de linhas STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permitir a união de estações não adjacentes: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite acrescentar partes a uma estação sem tocar diretamente nas partes já existentes, usando Ctrl+Clique enquanto coloca as novas partes @@ -2134,11 +2134,11 @@ STR_CONFIG_SETTING_AI_NPC :Competidores IA STR_CONFIG_SETTING_NETWORK :Rede STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Gerador de rotas para trens: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Gerador de rotas usado para os trens +STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Algoritmo usado para gerar as rotas dos trens STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Gerador de rotas para veículos: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Gerador de rotas usado para os veículos rodoviários +STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Algoritmo usado para gerar as rotas dos veículos rodoviários STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Gerador de rotas para embarcações: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Gerador de rotas usado para as embarcações +STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Algoritmo usado para gerar as rotas das embarcações STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Reversão automática em sinais: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permitir que os trens invertam a direção em um sinal, se eles esperaram lá muito tempo ###length 2 @@ -2176,9 +2176,9 @@ STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... O dr STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} STR_INTRO_NEW_GAME :{BLACK}Novo Jogo -STR_INTRO_LOAD_GAME :{BLACK}Abrir Jogo -STR_INTRO_PLAY_SCENARIO :{BLACK}Jogar Cenário -STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Jogar Mapa Topográfico +STR_INTRO_LOAD_GAME :{BLACK}Abrir um Jogo +STR_INTRO_PLAY_SCENARIO :{BLACK}Jogar em Cenário +STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Jogar em Mapa Topográfico STR_INTRO_SCENARIO_EDITOR :{BLACK}Editor de Cenário STR_INTRO_MULTIPLAYER :{BLACK}Multijogador @@ -2190,7 +2190,7 @@ STR_INTRO_NEWGRF_SETTINGS :{BLACK}Configur STR_INTRO_ONLINE_CONTENT :{BLACK}Verificar Conteúdo Online STR_INTRO_AI_SETTINGS :{BLACK}Configurações de IA STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Configurações de Script de Jogo -STR_INTRO_QUIT :{BLACK}Sair +STR_INTRO_QUIT :{BLACK}Sair do OpenTTD STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Iniciar um novo jogo. Ctrl+Clique para saltar a configuração do mapa STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Abrir um jogo salvo @@ -2212,10 +2212,10 @@ STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Abrir co STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Verificar por conteúdo novo e atualizado para download STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Abrir configurações de IA STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Abrir configurações de Script de Jogo -STR_INTRO_TOOLTIP_QUIT :{BLACK}Sair do 'OpenTTD' +STR_INTRO_TOOLTIP_QUIT :{BLACK}Fechar o 'OpenTTD' STR_INTRO_BASESET :{BLACK}Faltam {NUM} sprite{P "" s} no conjunto de gráficos base selecionado. Por favor, verifique se existem atualizações para o conjunto. -STR_INTRO_TRANSLATION :{BLACK}Faltam {NUM} frase{P "" s} nesta tradução. Por favor, ajude a melhorar o OpenTTD inscrevendo-se como tradutor. Veja o arquivo readme.txt para mais detalhes. +STR_INTRO_TRANSLATION :{BLACK}Faltam {NUM} string{P "" s} nesta tradução. Por favor, ajude a melhorar o OpenTTD inscrevendo-se como tradutor. Veja o arquivo readme.txt para mais detalhes. # Quit window STR_QUIT_CAPTION :{WHITE}Sair @@ -2236,7 +2236,7 @@ STR_HELP_WINDOW_README :{BLACK}Leia-me STR_HELP_WINDOW_CHANGELOG :{BLACK}Registro de modificações STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Erros conhecidos STR_HELP_WINDOW_LICENSE :{BLACK}Licença -STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD +STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}Site do OpenTTD STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Manual / Wiki STR_HELP_WINDOW_BUGTRACKER :{BLACK}Relatar um erro STR_HELP_WINDOW_COMMUNITY :{BLACK}Comunidade @@ -2429,7 +2429,7 @@ STR_NETWORK_START_SERVER_CAPTION :{WHITE}Iniciar STR_NETWORK_START_SERVER_NEW_GAME_NAME :{BLACK}Nome do jogo: STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}O nome do jogo será mostrado aos outros jogadores no menu de seleção de jogos multijogador STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Definir senha -STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Proteja o jogo com uma senha se não desejar que ele seja publicamente acessível +STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Proteja o jogo com uma senha se você não quiser que ele seja publicamente acessível STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibilidade STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Se outras pessoas podem ver seu servidor na lista pública @@ -2480,14 +2480,14 @@ STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Se outra STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Código de convite STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Código de convite que outros jogadores podem usar para acessar este servidor STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}Tipo de conexão -STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Se e como seu servidor pode ser acessado por outros +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Como o seu servidor pode ser acessado por outras pessoas STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Jogador STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Nome STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Seu nome de jogador STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Editar o seu nome de jogador STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Seu nome de jogador -STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Ações administrativas para executar para este cliente -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Ações administrativas para executar para esta empresa +STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Ações administrativas para executar neste cliente +STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Ações administrativas para executar nesta empresa STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Juntar-se a esta empresa STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Enviar uma mensagem a este jogador STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Enviar uma mensagem a todos os jogadores desta empresa @@ -2511,7 +2511,7 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Via retr STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Expulsar STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Banir STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Excluir -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Desbloquear com senha +STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Desbloquear senha STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Ação administrativa STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Você quer mesmo expulsar o jogador '{STRING}'? @@ -2571,8 +2571,8 @@ STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}A conex STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Não foi possível abrir o jogo STR_NETWORK_ERROR_SERVER_START :{WHITE}Não foi possível iniciar o servidor STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Ocorreu um erro de protocolo e a conexão foi encerrada -STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Seu nome de jogador não foi definido. O nome pode ser definido no topo da janela de Multijogador -STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}O nome do seu servidor não foi definido. O nome pode ser definido no topo da janela de Multijogador +STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Seu nome de jogador não foi definido. O nome pode ser definido na parte superior da janela de Multijogador +STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}O nome do seu servidor não foi definido. O nome pode ser definido na parte superior da janela de Multijogador STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}A versão deste cliente é incompatível com a versão do servidor STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Senha incorreta STR_NETWORK_ERROR_SERVER_FULL :{WHITE}O servidor está cheio @@ -2668,7 +2668,7 @@ STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Os termo STR_CONTENT_FILTER_TITLE :{BLACK}Filtrar por etiqueta/nome: STR_CONTENT_OPEN_URL :{BLACK}Página da internet STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Visitar o site desse conteúdo -STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Download +STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Fazer download STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Iniciar o download do conteúdo selecionado STR_CONTENT_TOTAL_DOWNLOAD_SIZE :{SILVER}Tamanho total do download: {WHITE}{BYTES} STR_CONTENT_DETAIL_TITLE :{SILVER}INFORMAÇÕES DO CONTEÚDO @@ -2724,7 +2724,7 @@ STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Sim, obt STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Não, sair do OpenTTD STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}O download falhou -STR_MISSING_GRAPHICS_ERROR :{BLACK}O download de gráficos falhou.{}Por favor, baixe os gráficos manualmente. +STR_MISSING_GRAPHICS_ERROR :{BLACK}O download de gráficos falhou.{}Por favor, obtenha os gráficos manualmente STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Sair do OpenTTD # Transparency settings window @@ -2777,7 +2777,7 @@ STR_JOIN_WAYPOINT_CAPTION :{WHITE}Unir pon STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Construir um ponto de controle separado # Generic toolbar -STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Desativado pois não existem atualmente veículos disponíveis para esta infraestrutura +STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Desativado porque não existem, atualmente, veículos disponíveis para esta infraestrutura # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construção de Ferrovia @@ -2821,7 +2821,7 @@ STR_STATION_BUILD_DRAG_DROP :{BLACK}Arrastar STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construir estação usando arrastar & soltar STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Escolher uma classe de estação para mostrar -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Escolher o tipo de estação para construir +STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Escolher um tipo de estação para construir STR_STATION_CLASS_DFLT :Padrão STR_STATION_CLASS_DFLT_STATION :Estação padrão @@ -2868,8 +2868,8 @@ STR_BRIDGE_TUBULAR_SILICON :Tubular, Silíc # Road construction toolbar -STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Construção de estradas -STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Construção de Linhas de Bonde +STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Construção de Estradas +STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Construção de Linha de Bonde STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Construir seção de estrada. Ctrl+Clique para remover seção da estrada. Pressione também Shift para só mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Construir seção de linha de bonde. Ctrl+Clique para remover seção da linha. Pressione também Shift para só mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Construir estrada usando o modo Autoestrada. Ctrl+Clique para remover seção da estrada. Pressione também Shift para só mostrar o custo estimado @@ -2886,7 +2886,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Construi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Construir túnel rodoviário. Pressione também Shift para só mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Construir túnel para bondes. Pressione também Shift para só mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Construir/Remover estrada -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Construir/Remover linhas de bonde +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Construir/Remover linha de bonde STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Converter/Atualizar o tipo de estrada. Pressione também Shift para só mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Converter/Atualizar o tipo de bonde. Pressione também Shift para só mostrar o custo estimado diff --git a/src/lang/german.txt b/src/lang/german.txt index fc775f7008..c3c1d8e400 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1012,6 +1012,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Indische Rupie STR_GAME_OPTIONS_CURRENCY_IDR :Indonesische Rupiah STR_GAME_OPTIONS_CURRENCY_MYR :Malaysische Ringgit STR_GAME_OPTIONS_CURRENCY_LVL :Lettlandischer Lats +STR_GAME_OPTIONS_CURRENCY_PTE :Portugiesische Escudo STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Autosicherung STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Abstand zwischen den automatischen Spielesicherungen wählen @@ -1054,9 +1055,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Schräge STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Dieses Kästchen ankreuzen, um Schrägen nach der Oberflächengröße zu skalieren STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Nutze die traditionelle Sprite-Schriftart -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Dieses Kästchen ankreuzen, um die traditionelle Sprite-Schriftart mit fester Größe zu verwenden. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Dieses Kästchen ankreuzen, um die traditionelle Sprite-Schrift mit fester Größe zu verwenden STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Kantenglättung für Schriften -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Dieses Kästchen ankreuzen, um Kantenglättung für skalierbare Schriften zu aktivieren. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Dieses Kästchen ankreuzen, um Kantenglättung für skalierbare Schriften zu aktivieren STR_GAME_OPTIONS_GUI_SCALE_1X :1× STR_GAME_OPTIONS_GUI_SCALE_2X :2× @@ -1275,7 +1276,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Unbegrenzte fin STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Erlaubt Firmen, unbeschränkte Ausgaben zu tätigen und deaktiviert Insolvenz STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Kreditlimit bei Spielbeginn: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximaler Kredit für eine Firma (ohne Berücksichtigung der Inflation). Falls auf „Kein Darlehen“ gesetzt, wird kein Geld zur Verfügung stehen, außer, wenn es von einem Spielskript oder der „Unendlich Geld“-Einstellung zur Verfügung gestellt wird. +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximaler Kredit für eine Firma (ohne Berücksichtigung der Inflation). Falls auf „Kein Darlehen“ gesetzt, wird kein Geld zur Verfügung stehen, außer, wenn es von einem Spielskript oder der „Unendlich Geld“-Einstellung zur Verfügung gestellt wird STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Kein Darlehen @@ -1471,7 +1472,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Firmenfarbe zu STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Wähle die Firmenfarbe zu Spielbeginn STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Sekundärfirmenfarbe zu Spielbeginn: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Initiale Sekundärfarbe für das Unternehmen wählen, falls ein NewGRF verwendet wird, welches sie verwendet. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Initiale Sekundärfarbe für das Unternehmen wählen, falls ein NewGRF verwendet wird, welches sie aktiviert STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Flughäfen veralten nie: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Wird diese Option aktiviert, können Flughäfen, die einmal eingeführt wurden, das ganze Spiel über gebaut werden und veralten nie @@ -1495,22 +1496,22 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Fahrzeuge veral STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Erlauben, dass Fahrzeuge nach ihrem Einführungsdatum ewig verfügbar bleiben STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Zeiteinheit: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Wähle die Zeitbasis des Spiels. Diese kann später nicht geändert werden.{}{}Kalender-basiert ist die klassische OpenTTD Erfahrung, in dem ein Jahr aus 12 Monaten besteht und jeder Monat 28-31 Tage hat.{}{}In Wanduhr-basierter Zeit sind Güterproduktion und Finanzen basierend auf 1-minütigen Intervallen, welche etwa so lang wie ein 30-tägiger Monat im Kalender-basierten Modus sind. Diese sind in 12-minütigen Zyklen gruppiert, equivalent zu einem Kalender-Jahr.{}{}In beiden Modi gilt immer auch ein klassischer Kalender für das Einführungdatum von Fahrzeugen, Häusern und anderer Infrastruktur. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Die Zeitbasis des Spiels wählen. Diese kann später nicht geändert werden.{}{}Kalender-basiert ist die klassische OpenTTD-Erfahrung, in dem ein Jahr aus 12 Monaten besteht und jeder Monat 28-31 Tage hat.{}{}In Wanduhr-basierter Zeit sind Güterproduktion und Finanzen basierend auf 1-minütigen Intervallen, welche etwa so lang wie ein 30-tägiger Monat im Kalender-basierten Modus sind. Diese sind in 12-minütigen Zyklen gruppiert, equivalent zu einem Kalenderjahr.{}{}In beiden Modi gilt immer auch ein klassischer Kalender für das Einführungdatum von Fahrzeugen, Häusern und anderer Infrastruktur ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalender STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Wanduhr STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minuten pro Jahr: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Wähle die Anzahl an Minuten in einem Kalenderjahr. Standartmäßig sind das 12 Minuten. Um das wechseln der Kalenderzeit auszuschalten, stelle dies einfach auf 0. Diese Einstellung beeinflusst nicht die wirtschaftssimulation des Spiels und ist nur verfügbar, wenn die Wanduhr als Zeitmesser eingestellt ist. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Die Anzahl an Minuten in einem Kalenderjahr wählen. Standartmäßig sind das 12 Minuten. Um das wechseln der Kalenderzeit auszuschalten, einfach auf 0 stellen. Diese Einstellung beeinflusst nicht die wirtschaftssimulation des Spiels und ist nur verfügbar, wenn die Wanduhr als Zeitmesser eingestellt ist STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (Kalenderzeit steht still) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Skaliere Güterproduktion in Städten: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Skaliere die Güterproduktion in Städten um diesen Prozentsatz. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Skaliere die Güterproduktion in Städten um diesen Prozentsatz STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Skaliere Güterproduktion durch Industrie: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skaliere die Güterproduktion durch die Industrie um diesen Prozentsatz. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skaliere die Güterproduktion durch die Industrie um diesen Prozentsatz STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Fahrzeuge automatisch erneuern, wenn sie alt werden: {STRING} @@ -1529,7 +1530,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Anzeigedauer f STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Anzeigedauer für Fehlermeldungen in einem roten Fenster. Bedenken Sie, dass einige (kritische) Fehlermeldungen nicht automatisch nach dieser Dauer geschlossen werden, sondern manuell geschlossen werden müssen STR_CONFIG_SETTING_HOVER_DELAY :Zeige kurzen Hilfetext: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Einstellen, wie lange man zum Aufruf von Hilfetexten zur Erklärung der Funktionen im Spiel mit dem Mauszeiger über der gewünschten Stelle stehenbleiben muss. Alternativ werden die Hilfetexte bei einem Rechtsklick sofort angezeigt, wenn dieser Wert auf 0 gesetzt wird. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Einstellen, wie lange man zum Aufruf von Hilfetexten zur Erklärung der Funktionen im Spiel mit dem Mauszeiger über der gewünschten Stelle stehenbleiben muss. Alternativ werden die Hilfetexte bei einem Rechtsklick sofort angezeigt, wenn dieser Wert auf 0 gesetzt wird STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Nach {COMMA} Millisekunde{P 0 "" n} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Rechtsklick @@ -1541,8 +1542,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Linienstärke i STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Strichdicke der Linien in Diagrammen. Dünnere Linien sind genauer ablesbar, dickere Linien sind besser sichtbar und erlauben es, Farben leichter zu unterscheiden STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :NewGRF-Namen im Fahrzeugbaumenü zeigen: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Eine Textzeile mit dem Namen des NewGRF, von dem ein Fahrzeug stammt, hinzufügen. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Die Frachten, die das Fahrzzeug tragen kann, in den Listenfenstern anzeigen {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Eine Textzeile mit dem Namen des NewGRF, von dem ein Fahrzeug stammt, hinzufügen +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Die Frachten, die das Fahrzzeug tragen kann, in den Listenfenstern anzeigen: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Falls erlaubt, wird die transportierbare Ladung des Fahrzeugs über ihm in den Fahrzeuglisten erscheinen STR_CONFIG_SETTING_LANDSCAPE :Landschaftstyp: {STRING} @@ -1561,13 +1562,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industriedichte STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Wähle wieviele Industrien generiert werden sollen und welche Anzahl während des Spiels angestrebt wird zu erhalten STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximalabstand vom Kartenrand für Ölraffinerien: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Ölraffinerien werden nur in der Nähe des Kartenrands gebaut, bei inselreichen Karten nahe der Küste +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Begrenzen, für wie weit von der Kartengrenze Ölraffinerien und Ölbohrinseln gebaut werden können. Auf Inselkarten stellt dies sicher, dass sie sich nahe der Küste befinden. Auf Karten, die größer als 256 Kacheln sind, wird dieser Wert hochskaliert STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Schneegrenze auf: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Höhe der Schneefallgrenze im subarktischen Klima wählen. Schnee beeinflusst auch die Platzierung von Industrien und Voraussetzungen für Städtewachstum. Dies kann nur im Szenarieneditor geändert werden oder wird ansonsten anhand der Einstellung „Schneebedeckung“ berechnet. STR_CONFIG_SETTING_SNOW_COVERAGE :Schneebedeckung: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Regelt die ungefähre Menge von Schneeflächen im subarktischen Klima. Schnee beeinflusst die Platzierung von Industrien und Vorausstzungen für Städtewachstum. Dies kann nur während der Kartenerzeugung benutzt werden. Am Meerespiegel und auf Küstenkacheln wird sich nie Schnee befinden. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Regelt die ungefähre Menge von Schneeflächen im subarktischen Klima. Schnee beeinflusst die Platzierung von Industrien und Vorausstzungen für Städtewachstum. Dies kann nur während der Kartenerzeugung benutzt werden. Am Meerespiegel und auf Küstenkacheln wird sich nie Schnee befinden STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Wüstenbedeckung: {STRING} @@ -1575,7 +1576,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Passt die ungef STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Rauheit des Geländes: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(nur TerraGenesis) Die Häufigkeit von Hügeln wählen: Ebene Landschaften haben wenige breitere Hügel, zerklüftete Landschaften haben viele kleinere Hügel. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Die Häufigkeit von Hügeln wählen. Ebene Landschaften haben wenige breitere Hügel, zerklüftete Landschaften haben viele kleinere Hügel ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Sehr eben STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Eben @@ -1583,7 +1584,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Zerklüftet STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Sehr zerklüftet STR_CONFIG_SETTING_VARIETY :Größe der Geländeformen: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Wählen, ob die Karte sowohl Berge als auch ebene Gebiete enthalten soll. Je höher die Vielfalt, desto häufiger sind Höhenunterschiede zwischen bergigen und flachen Gebieten. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Wählen, ob die Karte sowohl Berge als auch ebene Gebiete enthalten soll. Je höher die Vielfalt, desto häufiger sind Höhenunterschiede zwischen bergigen und flachen Gebieten STR_CONFIG_SETTING_RIVER_AMOUNT :Anzahl Flüsse: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Wähle die Anzahl zu erzeugender Flüsse @@ -1630,7 +1631,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Dunkelgrün STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Lila STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Overlay-Farben der Frachtverbindungen: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Bestimme das Farbschema für das Frachtverbindungsoverlay. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Bestimme das Farbschema für das Frachtverbindungsoverlay ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Grün zu rot (original) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Grün zu blau @@ -1751,10 +1752,10 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Belasse Bauwerk STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Die Bauwerkzeuge für Brücken, Tunnel, etc. nach Benutzung weiter aktiviert lassen STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatische Entfernung von Signalen während der Errichtung von Bahntrassen: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatische Entfernung von Signalen während der Errichtung der Bahntrasse, wenn diese sich im Weg befinden. Hinweis: Dies kann zu Unfällen führen! +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatische Entfernung von Signalen während der Errichtung der Bahntrasse, wenn diese sich im Weg befinden. Hinweis: Dies kann zu Unfällen führen STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Zeitraffer Geschwindigkeitslimit: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limit wie schnell das Spiel läuft, wenn Zeitraffer aktiviert ist. 0= unlimitiert (so schnell, wie ihr Computer es erlaubt). Eingaben unter 100% können das Spiel verlangsamen. Das obere Limit hängt von den technischen Spezifikationen ihres Computer ab und kann großen Einfluss auf das Spiel haben +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Begrenzen, wie schnell das Spiel läuft, wenn Zeitraffer aktiviert ist. 0 = unlimitiert (so schnell, wie ihr Computer es erlaubt). Eingaben unter 100% können das Spiel verlangsamen. Das obere Limit hängt von den technischen Spezifikationen ihres Computer ab und kann großen Einfluss auf das Spiel haben STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normale Spielgeschwindigkeit ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Keine Beschränkung (so schnell wie ihr Computer es erlaubt) @@ -1818,11 +1819,11 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Erlaube die Tei STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Rechenoperationen, bevor das Skript angehalten wird: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximale Anzahl Rechenschritte, die ein Skript in einer Runde zur Verfügung hat STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maximaler Arbeitsspeicher pro Skript: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Wie viel Arbeitsspeicher ein Script maximal benutzen darf bevor es terminiert wird. Diese Wert muss eventuell vergrößert werden für größere Maps. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Wie viel Arbeitsspeicher ein Skript maximal benutzen darf, bevor es terminiert wird. Dieser Wert muss eventuell für große Karten erhöht werden STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Wartungsintervalle in Prozent: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Falls aktiviert, werden Fahrzeuge versuchen, sich in die Wartung zu begeben, sobald ihre Zuverlässigkeit unter einer bestimmten Prozentzahl unterhalb der maximalen Zuverlässigkeit liegt.{}{}Zum Beispiel: Wenn die maximale Zuverlässigkeit eines Fahrzeugs 90% beträgt und das Wartungsintervall bei 20% liegt, wird das Fahrzeug versuchen, sich in die Wartung zu begeben, sobald es eine Zuverlässigkeit von 72% erreicht. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Falls aktiviert, werden Fahrzeuge versuchen, sich in die Wartung zu begeben, sobald ihre Zuverlässigkeit unter einer bestimmten Prozentzahl unterhalb der maximalen Zuverlässigkeit liegt.{}{}Zum Beispiel: Wenn die maximale Zuverlässigkeit eines Fahrzeugs 90% beträgt und das Wartungsintervall bei 20% liegt, wird das Fahrzeug versuchen, sich in die Wartung zu begeben, sobald es eine Zuverlässigkeit von 72% erreicht STR_CONFIG_SETTING_SERVINT_TRAINS :Standard-Wartungsintervall für Züge: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Setze das Standardwartungsintervall für Schienenfahrzeuge. Dieses Wartungsintervall wird von allen Zügen eingehalten, denen kein individuelles Wartungsintervall zugewiesen worden ist @@ -1840,7 +1841,7 @@ STR_CONFIG_SETTING_NOSERVICE :Wartung deaktiv STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Schicke Fahrzeuge nicht zur Wartung, wenn Pannen ausgeschaltet sind STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Verringerung der Ladegeschwindigkeit für Züge die länger als die Station sind: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Wenn aktiviert laden Züge, die zu lang für den Bahnhof sind, langsamer, als solche, die passen. Diese Option hat keine Auswirkung auf die Wegfindung +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Falls aktiviert, laden Züge, die zu lang für den Bahnhof sind, langsamer, als solche, die passen. Diese Option hat keine Auswirkung auf die Wegfindung STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Berücksichtige Waggonhöchstgeschwindigkeit: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Begrenze die Höchstgeschwindigkeit eines Zuges durch die jeweiligen Höchstgeschwindigkeiten der mitgeführten Waggons @@ -1905,13 +1906,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Jahr in dem die STR_CONFIG_SETTING_STARTING_YEAR :Startdatum: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Beurteilungsjahr der Firma: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Jahr, in dem das Spiel zwecks Beurteilung endet. Am Ende diesen Jahres wird die Punktezahl der Firma ermittelt und die Bestenliste wird angezeigt, es kann danach aber noch weitergespielt werden.{}Wenn dieser Wert kleiner als das Anfangsjahr ist, wird die Bestenliste nie angezeigt. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Jahr, in dem das Spiel zwecks Beurteilung endet. Am Ende diesen Jahres wird die Punktezahl der Firma ermittelt und die Bestenliste wird angezeigt, es kann danach aber noch weitergespielt werden.{}Wenn dieser Wert kleiner als das Anfangsjahr ist, wird die Bestenliste nie angezeigt STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nie STR_CONFIG_SETTING_ECONOMY_TYPE :Wirtschaftstyp: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :„Geglättet“ sorgt für öftere, kleinere Produktionsänderungen. „Statisch“ stoppt Produktionsänderungen und Industrieschließungen. Diese Einstellung hat womöglich keinen Effekt, wenn durch NewGRFs eigene Industrietypen bereitgestellt werden. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :„Geglättet“ sorgt für öftere, kleinere Produktionsänderungen. „Statisch“ stoppt Produktionsänderungen und Industrieschließungen. Diese Einstellung hat womöglich keinen Effekt, wenn durch NewGRFs eigene Industrietypen bereitgestellt werden ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Geglättet @@ -1966,7 +1967,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Erlaubt STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Erlaubt, mit wählbarem Straßenbauplan STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Güterproduktion in Städten: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Die Gütermenge, die von Häusern einer Stadt relativ zur Gesamtbevölkerung der Stadt produziert wird.{}Quadratisch: eine doppelt so große Stadt generiert viermal so viele Passagiere.{}Linear: eine doppelt so große Stadt generiert doppelt so viele Passagiere. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Die Gütermenge, die von Häusern einer Stadt relativ zur Gesamtbevölkerung der Stadt produziert wird.{}Quadratisch: eine doppelt so große Stadt generiert viermal so viele Passagiere.{}Linear: eine doppelt so große Stadt generiert doppelt so viele Passagiere ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadratisch (orginal) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear @@ -2007,7 +2008,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4× STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8× STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Höchste Auflösung der Sprites: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limitiert die maximale Auflösung, die von Sprites verwendet wird. Das Limitieren der Sprite-Auflösung verhindert das Verwenden von hochauflösenden Grafiken selbst dann, wenn diese verfügbar sind. Dies kann dabei helfen eine einheitliche Spieldarstellung zu erhalten, wenn GRF-Dateien mit und ohne hochauflösenden Grafiken verwendet werden. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limitiert die maximale Auflösung, die von Sprites verwendet wird. Das Limitieren der Sprite-Auflösung verhindert das Verwenden von hochauflösenden Grafiken selbst dann, wenn diese verfügbar sind. Dies kann dabei helfen, eine einheitliche Spieldarstellung zu erhalten, wenn GRF-Dateien mit und ohne hochauflösenden Grafiken verwendet werden ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2031,33 +2032,33 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Größe von Gro STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Durchschnittliche Größe von Großstädten relativ zu normalen Städten bei Spielbeginn STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Verteilungsgraphen alle {STRING} aktualisieren -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Zeit zwischen anfolgenden Neuberechnungen der Warenverteilung. Jede Neuberechnung berechnet die Pläne für eine Komponente des Graphen. Das bedeutet, dass ein Wert X für diese Einstellung nicht bedeutet, dass der gesamte Graph alle X Sekunden aktualisiert wird. Nur ein Teil wird es. Je kürzer du die Zeit festlegst, desto mehr CPU-Zeit wird nötig sein, um ihn zu berechnen. Je länger du die Zeit festlegst, desto länger wird es dauern, bis die Frachtverteilung auf neuen Strecken beginnt. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Zeit zwischen anfolgenden Neuberechnungen der Warenverteilung. Jede Neuberechnung berechnet die Pläne für eine Komponente des Graphen. Das bedeutet, dass ein Wert X für diese Einstellung nicht bedeutet, dass der gesamte Graph alle X Sekunden aktualisiert wird. Nur ein Teil wird es. Je kürzer die Zeit festgelegt ist, desto mehr CPU-Zeit wird nötig sein, um ihn zu berechnen. Je länger die Zeit festgelegt ist, desto länger wird es dauern, bis die Frachtverteilung auf neuen Strecken beginnt STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :{STRING} für Neuberechnung des Verteilungsgraphen nehmen -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Zeit für jede Neuberechnung einer Warenverteilungskomponente. Wenn eine Neuberechnung gestartet wird, wird ein Thread gestartet, der für diese Anzahl von Sekunden laufen darf. Je kürzer du ihn festlegst, desto wahrscheinlicher ist es, dass der Thread nicht beendet ist, wenn er aber sein sollte. Dann wird das Spiel beendet, sobald dies der Fall ist („Lag“). Je länger du es festlegst, desto länger dauert es, bis die Verteilung aktualisiert wird, wenn sich Routen ändern. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Zeit für jede Neuberechnung einer Warenverteilungskomponente. Wenn eine Neuberechnung gestartet wird, wird ein Thread gestartet, der für diese Anzahl von Sekunden laufen darf. Je kürzer diese Dauer festgelegt wird, desto wahrscheinlicher ist es, dass der Thread nicht beendet ist, wenn er aber sein sollte. Dann wird das Spiel beendet, sobald dies der Fall ist („Lag“). Je länger diese Dauer festgelegt wird, desto länger dauert es, bis die Verteilung aktualisiert wird, wenn sich Routen ändern STR_CONFIG_SETTING_DISTRIBUTION_PAX :Verteilungsschema für Passagiere: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :„Symmetrisch“ heißt, dass etwa die selbe Zahl von Passagieren von einer Station A zu einer anderen Station B reisen, wie von B nach A. „Asymmetrisch“ heißt, dass Passagiere in beliebigen Zahlen hin- und her fahren können. „Manuell“ heißt, dass keine automatische Verteilung der Passagiere stattfindet. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :„Symmetrisch“ heißt, dass etwa die selbe Zahl von Passagieren von einer Station A zu einer anderen Station B reisen, wie von B nach A. „Asymmetrisch“ heißt, dass Passagiere in beliebigen Zahlen hin- und her fahren können. „Manuell“ heißt, dass keine automatische Verteilung der Passagiere stattfindet STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Verteilungsschema für Post: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :„Symmetrisch“ heißt, dass etwa die selbe Menge Post von einer Station A zu einer anderen Station B geschickt wird, wie von B nach A. „Asymmetrisch“ heißt, dass Post in beliebigen Mengen hin- und her geschickt werden kann. „Manuell“ heißt, dass keine automatische Verteilung der Post stattfindet. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :„Symmetrisch“ heißt, dass etwa die selbe Menge Post von einer Station A zu einer anderen Station B geschickt wird, wie von B nach A. „Asymmetrisch“ heißt, dass Post in beliebigen Mengen hin- und her geschickt werden kann. „Manuell“ heißt, dass keine automatische Verteilung der Post stattfindet STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Verteilungsschema für Wertsachen: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Werttransporte (Frachtklasse „ARMOURED“) umfassen Wertsachen im gemäßigten, Diamanten im subtropischen und Gold im subarktischen Klima. NewGRFs könnten dies ändern. „Symmetrisch“ bedeutet, dass etwa dieselbe Anzahl von Station A nach Station B transportiert wird wie umgekehrt von B nach A. „Asymmetrisch“ bedeutet, dass eine unterschiedliche Menge in die jeweiligen Richtungen gesendet wird. „Manuell“ bedeutet, dass keine automatische Verteilung stattfindet. Es wird die Einstellung „asymmetrisch“ oder „manuell“ im subarktischen Gebiet empfohlen, da Banken kein Gold bzw. Diamanten zu den Minen senden. Für das gemäßigte und subtropische Klima kann die Einstellung „symmetrisch“ genommen werden, da Banken Wertsachen untereinander versenden. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Werttransporte (Frachtklasse „ARMOURED“) umfassen Wertsachen im gemäßigten, Diamanten im subtropischen und Gold im subarktischen Klima. NewGRFs könnten dies ändern. „Symmetrisch“ bedeutet, dass etwa dieselbe Anzahl von Station A nach Station B transportiert wird wie umgekehrt von B nach A. „Asymmetrisch“ bedeutet, dass eine unterschiedliche Menge in die jeweiligen Richtungen gesendet wird. „Manuell“ bedeutet, dass keine automatische Verteilung stattfindet. Es wird die Einstellung „asymmetrisch“ oder „manuell“ im subarktischen Gebiet empfohlen, da Banken kein Gold bzw. Diamanten zu den Minen senden. Für das gemäßigte und subtropische Klima kann die Einstellung „symmetrisch“ genommen werden, da Banken Wertsachen untereinander versenden STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Verteilungsschema für sonstige Frachtarten: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :„Asymmetrisch“ heißt, dass Waren in beliebigen Mengen hin- und her geschickt werden können. „Manuell“ heißt, dass keine automatische Verteilung der Waren stattfindet. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :„Asymmetrisch“ heißt, dass Waren in beliebigen Mengen hin- und her geschickt werden können. „Manuell“ heißt, dass keine automatische Verteilung der Waren stattfindet ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuell STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetrisch STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :symmetrisch STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Genauigkeit für die Berechnung der Warenverteilung: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Je höher dieser Wert ist, desto genauer und rechenintensiver ist die Berechnung der Warenverteilung. Wird ein zu hoher Wert gewählt, kann das Spiel bei der Berechnung „hängen“. Wird ein zu niedriger Wert gewählt, kann es vorkommen, dass Waren nicht dorthin geschickt werden, wo man erwarten würde dass sie hin sollen. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Je höher dieser Wert ist, desto genauer und rechenintensiver ist die Berechnung der Warenverteilung. Wird ein zu hoher Wert gewählt, kann das Spiel bei der Berechnung „hängen“. Wird ein zu niedriger Wert gewählt, kann es vorkommen, dass Waren nicht dorthin geschickt werden, wo man erwarten würde dass sie hin sollen STR_CONFIG_SETTING_DEMAND_DISTANCE :Einfluss der Entfernung auf die Transportnachfrage: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Wenn hier ein Wert größer als 0 gewählt wird, so spielt die Entfernung zwischen dem Ursprung und den möglichen Zielen eine Rolle bei der Verteilung von Waren. Je größer die Entfernung und je höher der Wert, desto geringer der Anteil der Waren, die zu der entsprechenden Station geschickt werden. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Wenn hier ein Wert größer als 0 gewählt wird, so spielt die Entfernung zwischen dem Ursprung und den möglichen Zielen eine Rolle bei der Verteilung von Waren. Je größer die Entfernung und je höher der Wert, desto geringer der Anteil der Waren, die zu der entsprechenden Station geschickt werden STR_CONFIG_SETTING_DEMAND_SIZE :Einfluss der Beliebtheit der Zielhaltestelle auf die Transportnachfrage bei symmetrischen Verbindungen: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Wenn hier weniger als 100% gesetzt wird, so verhält sich die symmetrische Verteilung mehr wie die asymmetrische. Das heißt weniger Waren werden für eine gegebene Menge in einer Richtung reisender Waren zurück geschickt. Wenn hier 0 angegeben wird, verhält sich die symmetrische wie die asymmetrische Verteilung. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Wenn hier weniger als 100% gesetzt wird, so verhält sich die symmetrische Verteilung mehr wie die asymmetrische. Das heißt, weniger Waren werden für eine gegebene Menge in einer Richtung reisender Waren zurück geschickt. Wenn hier 0% angegeben wird, verhält sich die symmetrische wie die asymmetrische Verteilung STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Auslastung der kürzeren Verbindungen bevor längere Verbindungen gewählt werden: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Häufig gibt es mehrere Verbindungen um von einer Station zu einer anderen zu kommen. Zuerst wird der Algorithmus die kürzesten Verbindungen auslasten, dann die längeren usw. Wenn alle Verbindungen ausgelastet sind, verteilt er die verbliebene Nachfrage gleichmäßig. Diese Einstellung besagt, ab welcher Auslastung eine Verbinudng als „voll“ gilt und der Algorithmus in der ersten Runde die nächst längere wählt. Da die Kapazität der Verbindungen geschätzt wird, ist es sinnvoll, hier weniger als 100% anzugeben, um etwas „Luft“ für Fehlschätzungen zu lassen. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Häufig gibt es mehrere Verbindungen, um von einer Station zu einer anderen zu kommen. Zuerst wird der Algorithmus die kürzesten Verbindungen auslasten, dann die längeren usw. Die Auslastung wird anhand einer Schätzung der Kapazität und der geplanten Verwendung bestimmt. Wenn alle Verbindungen ausgelastet sind und immer noch Nachfrage besteht, werden alle Pfade überladen, wobei die Pfade mit höherer Kapazität bevorzugt werden. Jedoch wird der Algorithmus die Kapazität meistens nicht richtig abschätzen. Diese Einstellung besagt, ab welcher Auslastung eine Verbindung als „voll“ gilt und der Algorithmus in der ersten Runde die nächstlängere wählt. Da die Kapazität der Verbindungen geschätzt wird, ist es sinnvoll, hier weniger als 100% anzugeben, um etwas „Luft“ für Fehlschätzungen zu lassen STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Geschwindigkeitseinheiten (Land): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Geschwindigkeitseinheit (nautisch): {STRING} @@ -2979,11 +2980,11 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Zufälli STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Zufällige Bäume STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Bäume zufällig über die Landschaft verteilen STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Einzelne Bäume durch Klicken und Ziehen über die Landschaft pflanzen. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Einzelne Bäume durch Klicken und Ziehen über die Landschaft pflanzen STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Hain -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Kleine Haine durch Klicken und Ziehen über die Landschaft pflanzen. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Kleine Haine durch Klicken und Ziehen über die Landschaft pflanzen STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Wald -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Große Wälder durch Klicken und Ziehen über die Landschaft pflanzen. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Große Wälder durch Klicken und Ziehen über die Landschaft pflanzen # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Land erstellen @@ -3198,11 +3199,11 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Bildwiederholrate STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulationsrate: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Anzahl an simulierten Ticks pro Sekunde. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Anzahl an simulierten Ticks pro Sekunde STR_FRAMERATE_RATE_BLITTER :{BLACK}Bildwiederholrate: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Anzahl an Einzelbildern, die pro Sekunde gerendert werden. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Anzahl an Einzelbildern, die pro Sekunde gerendert werden STR_FRAMERATE_SPEED_FACTOR :{BLACK}Aktueller Geschwindigkeitsfaktor des Spiels: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Wie schnell das Spiel aktuell läuft, verglichen mit der erwarteten Geschwindigkeit bei normaler Simulationsrate. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Wie schnell das Spiel aktuell läuft, verglichen mit der erwarteten Geschwindigkeit bei normaler Simulationsrate STR_FRAMERATE_CURRENT :{WHITE}Momentan STR_FRAMERATE_AVERAGE :{WHITE}Durchschnitt STR_FRAMERATE_MEMORYUSE :{WHITE}Arbeitsspeicher diff --git a/src/lang/italian.txt b/src/lang/italian.txt index c9516cf79a..b34770530e 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1013,6 +1013,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Rupia indiana STR_GAME_OPTIONS_CURRENCY_IDR :Rupia indonesiana STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit malaysiano STR_GAME_OPTIONS_CURRENCY_LVL :Lats lettoni +STR_GAME_OPTIONS_CURRENCY_PTE :Escudo portoghese STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Salvataggi automatici STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Seleziona l'intervallo fra i salvataggi automatici della partita @@ -1055,9 +1056,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Scala sm STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Seleziona questa casella per ridimensionare le smussature in base alle dimensioni dell'interfaccia STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Usa il carattere sprite tradizionale -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Seleziona questa casella se preferisci utilizzare il tradizionale carattere sprite di dimensioni fisse. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Seleziona questa casella se preferisci utilizzare il tradizionale carattere sprite di dimensioni fisse STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Font anti-aliasing -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Seleziona questa casella per applicare l'anti-aliasing ai caratteri ridimensionabili. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Seleziona questa casella per applicare l'anti-aliasing ai caratteri ridimensionabili STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1309,7 +1310,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Denaro infinito STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Consenti spese illimitate e disabilita il fallimento delle aziende STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Prestito massimo iniziale: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Ammontare massimo di denaro che una compagnia può chiedere in prestito (senza tenere conto dell'inflazione). Se è impostato su "Nessun prestito", il denaro non sarà disponibile a meno che non sia fornito da uno script di gioco o dall'impostazione "Denaro infinito". +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Ammontare massimo di denaro che una compagnia può chiedere in prestito (senza tenere conto dell'inflazione). Se è impostato su "Nessun prestito", il denaro non sarà disponibile a meno che non sia fornito da uno script di gioco o dall'impostazione "Denaro infinito" STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Nessun prestito @@ -1393,7 +1394,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Pendenza salite STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Pendenza delle caselle inclinate percepita dagli automezzi. I valori più elevati rendono più difficile risalire le colline. STR_CONFIG_SETTING_FORBID_90_DEG :Impedisci ai treni di curvare a 90 gradi: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Le curve a 90 gradi avvengono quando un binario orizzontale è seguito direttamente da un binario verticale nella casella adiacente, facendo sì che un treno che attraversa il bordo fra le caselle curvi di 90 gradi invece dei 45 gradi delle altre combinazioni di binari. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Le curve a 90 gradi avvengono quando un binario orizzontale è seguito direttamente da un binario verticale nella casella adiacente, facendo sì che un treno che attraversa il bordo fra le caselle curvi di 90 gradi invece dei 45 gradi delle altre combinazioni di binari STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Consenti di unire stazioni non direttamente adiacenti: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Consente di aggiungere nuove parti a una stazione, non attaccate direttamente alle parti esistenti ma che siano comprese all'interno dell'area di estensione massima della stazione. Richiede l'uso di Ctrl+Clic per posizionare le nuove parti. @@ -1505,7 +1506,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Colore iniziale STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Imposta il colore predefinito della compagnia, che volendo potrà essere modificato successivamente, anche durante la partità. STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Colore secondario della compagnia di partenza: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Scegliere il colore secondario iniziale per l'azienda, se si utilizza un NewGRF che lo consente. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Scegliere il colore secondario iniziale per l'azienda, se si utilizza un NewGRF che lo consente STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Non rendere mai obsoleti i tipi di aeroporto: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Se abilitata, dopo la loro introduzione, tutti i tipi di aeroporto rimarranno sempre disponibili. @@ -1529,22 +1530,22 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :I veicoli non d STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Se abilitata, dopo la loro introduzione, tutti i tipi di veicoli rimarranno sempre disponibili. STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Unità di tempo: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selezionare le unità di misura del tempo del gioco. Non è possibile modificarla in seguito.{}{}La modalità basata sul calendario è l'esperienza classica di OpenTTD, con un anno composto da 12 mesi e ogni mese di 28-31 giorni.{}{}Nel tempo basato sull'orologio a muro, la produzione di merci e le finanze si basano invece su incrementi di un minuto, che è più o meno la durata di un mese di 30 giorni nella modalità basata sul calendario. Questi sono raggruppati in periodi di 12 minuti, equivalenti a un anno nella modalità basata sul calendario.{}{}In entrambe le modalità è sempre presente un calendario classico, che viene utilizzato per le date di introduzione di veicoli, case e altre infrastrutture. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selezionare le unità di misura del tempo del gioco. Non è possibile modificarla in seguito.{}{}La modalità basata sul calendario è l'esperienza classica di OpenTTD, con un anno composto da 12 mesi e ogni mese di 28-31 giorni.{}{}Nel tempo basato sull'orologio a muro, la produzione di merci e le finanze si basano invece su incrementi di un minuto, che è più o meno la durata di un mese di 30 giorni nella modalità basata sul calendario. Questi sono raggruppati in periodi di 12 minuti, equivalenti a un anno nella modalità basata sul calendario.{}{}In entrambe le modalità è sempre presente un calendario classico, che viene utilizzato per le date di introduzione di veicoli, case e altre infrastrutture ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendario STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Orologio STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minuti per anno: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Scegli il numero di minuti in un anno del calendario. Il valore predefinito è di 12 minuti. Seleziona 0 per bloccare il tempo nel calendario. Questa impostazione non influisce sulla simulazione economica del gioco ed è disponibile solo quando si utilizza il tempo basato sull'orologio. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Scegli il numero di minuti in un anno del calendario. Il valore predefinito è di 12 minuti. Seleziona 0 per bloccare il tempo nel calendario. Questa impostazione non influisce sulla simulazione economica del gioco ed è disponibile solo quando si utilizza il tempo basato sull'orologio STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (tempo del calendario bloccato) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Scala la produzione di merci delle città: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Scala la produzione di merci delle città di questo percentuale. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Scala la produzione di merci delle città di questo percentuale STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Scala la produzione delle industrie: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Scala la produzione industriale di questa percentuale. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Scala la produzione industriale di questa percentuale STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Rinnova un veicolo quando diventa vecchio: {STRING} @@ -1563,7 +1564,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Durata dei mess STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Durata di visualizzazione dei messaggi d'errore nelle finestre rosse. Nota: alcuni messaggi d'errore (critici) non sono chiusi automaticamente anche allo scadere del tempo, ma devono essere chiusi manualmente STR_CONFIG_SETTING_HOVER_DELAY :Mostra suggerimenti: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Ritardo con cui i suggerimenti sono mostrati al passaggio del mouse su un elemento dell'interfaccia. In alternativa, i messaggi possono essere attivati col pulsante destro del mouse impostando questo valore a 0. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Ritardo con cui i suggerimenti sono mostrati al passaggio del mouse su un elemento dell'interfaccia. In alternativa, i messaggi possono essere attivati col pulsante destro del mouse impostando questo valore a 0 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Al passaggio del mouse dopo {COMMA} millisecond{P 0 o i} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Al clic col pulsante destro @@ -1575,8 +1576,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Spessore delle STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Larghezza delle linee nei grafici. Le linee sottili sono più leggibili, quelle più spesse sono più facili da vedere e i colori più facili da distinguere STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostra il nome dei NewGRF nella finestra di costruzione dei veicoli: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Viene aggiunta una riga di testo alla finestra di costruzione dei veicoli, che specifica da quale NewGRF proviene il veicolo selezionato. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrare i carichi che i veicoli possono trasportare nella finestra dell'elenco veicoli. {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Viene aggiunta una riga di testo alla finestra di costruzione dei veicoli, che specifica da quale NewGRF proviene il veicolo selezionato +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrare i carichi che i veicoli possono trasportare nella finestra dell'elenco veicoli: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Se abilitato, il carico trasportabile dal veicolo apparirà sopra di esso nell'elenco dei veicoli della compagnia. STR_CONFIG_SETTING_LANDSCAPE :Paesaggio: {STRING} @@ -1595,13 +1596,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densità delle STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Determina quante industrie sono generate e a quale livello di densità sulla mappa sono mantenute nel corso della partita. STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Massima distanza delle industrie petrolifere dal bordo della mappa: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limita la distanza dal bordo della mappa entro cui possono essere costruite raffinerie e piattaforme petrolifere. Nelle mappe insulari sono comunque sempre vicino alla costa. Su mappe più grandi di 256 caselle il valore aumenta proporzionalmente. +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limita la distanza dal bordo della mappa entro cui possono essere costruite raffinerie e piattaforme petrolifere. Nelle mappe insulari sono comunque sempre vicino alla costa. Su mappe più grandi di 256 caselle il valore aumenta proporzionalmente STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altezza delle nevi perenni: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Scegliere a quale altezza inizia a nevicare nel paesaggio sub-artico. La neve influisce anche sulla generazione di industrie e sui requisiti di crescita delle città. Può essere modificato solo tramite l'Editor scenari o viene altrimenti calcolato tramite le "Aree innevate". STR_CONFIG_SETTING_SNOW_COVERAGE :Aree innevate: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Scegliere la quantità approssimativa di neve sul paesaggio sub-artico. La neve influisce anche sulla generazione di industrie e sui requisiti di crescita delle città. Si usa solo durante la generazione della mappa. Le caselle del livello del mare e della costa non hanno mai neve. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Scegliere la quantità approssimativa di neve sul paesaggio sub-artico. La neve influisce anche sulla generazione di industrie e sui requisiti di crescita delle città. Si usa solo durante la generazione della mappa. Le caselle del livello del mare e della costa non hanno mai neve STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Aree desertiche: {STRING} @@ -1609,7 +1610,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Scegliere la qu STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Irregolarità del terreno: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Scegliere la forma e il numero di colline. I paesaggi morbidi hanno un numero minore di colline più ampie, mentre i paesaggi ruvidi hanno un numero maggiore di colline più piccole. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Scegliere la forma e il numero di colline. I paesaggi morbidi hanno un numero minore di colline più ampie, mentre i paesaggi ruvidi hanno un numero maggiore di colline più piccole ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Molto morbido STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Morbido @@ -1617,7 +1618,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Accidentato STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Molto accidentato STR_CONFIG_SETTING_VARIETY :Varietà del terreno: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Scegliere se la mappa deve contenere sia montagne che aree pianeggianti. Più alta è la varietà, maggiori sono le differenze di altitudine tra aree montuose e pianeggianti. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Scegliere se la mappa deve contenere sia montagne che aree pianeggianti. Più alta è la varietà, maggiori sono le differenze di altitudine tra aree montuose e pianeggianti STR_CONFIG_SETTING_RIVER_AMOUNT :Quantità di fiumi: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Imposta la quantità di fiumi da generare. @@ -1664,7 +1665,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Verde scuro STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Viola STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Colori rotte commerciali in sovrimpressione:{STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Imposta la combinazione di colori utilizzata per le rotte commerciali, sia delle linee che compaiono in sovrimpressione sulla schermata di gioco, sia nella finestra "Legenda rotte commerciali" da cui è possibile selezionarle (si trova nel menu "Mappa" della barra degli strumenti principale). +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Imposta la combinazione di colori utilizzata per le rotte commerciali, sia delle linee che compaiono in sovrimpressione sulla schermata di gioco, sia nella finestra "Legenda rotte commerciali" da cui è possibile selezionarle (si trova nel menu "Mappa" della barra degli strumenti principale) ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Verde a rosso (originale) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Verde a blu @@ -1785,10 +1786,10 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Mantieni aperte STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Mantiene aperti dopo l'uso gli strumenti di costruzione di ponti, tunnel, etc. STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Rimuove automaticamente i segnali durante la costruzione di binari: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Rimuove automaticamente i segnali d'intralcio durante la costruzione di binari. Notare che questo può potenzialmente causare incidenti ferroviari. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Rimuove automaticamente i segnali d'intralcio durante la costruzione di binari. Notare che questo può potenzialmente causare incidenti ferroviari STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Limite velocità avanzamento veloce: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limite della velocità di gioco quanto l'avanzamento veloce è abilitato. 0 = nessun limite (per quanto consenta il tuo computer). Valori al di sotto di 100% rallentano il gioco. Il limite superiore dipende dalle specifiche del tuo computer e può variare a seconda del gioco in corso. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limite della velocità di gioco quanto l'avanzamento veloce è abilitato. 0 = nessun limite (per quanto consenta il tuo computer). Valori al di sotto di 100% rallentano il gioco. Il limite superiore dipende dalle specifiche del tuo computer e può variare a seconda del gioco in corso STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% della velocità di gioco normale ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Nessun limite (per quanto consenta il tuo computer) @@ -1852,11 +1853,11 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Consente ai gio STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Numero massimo di opcode prima della sospensione degli script: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Numero massimo di passi elementari che uno script può eseguire in una volta sola. STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Uso massimo di memoria per gli script: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Quantità massima di memoria che un singolo script può consumare prima di essere terminato forzatamente. Può essere necessario aumentarla per le mappe grandi. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Quantità massima di memoria che un singolo script può consumare prima di essere terminato forzatamente. Può essere necessario aumentarla per le mappe grandi STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Gli intervalli di manutenzione sono in percentuale: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Quando è abilitata, i veicoli tentano la manutenzione quando la loro affidabilità scende di una determinata percentuale dell'affidabilità massima.{}{}Ad esempio, se l'affidabilità massima di un veicolo è del 90% e l'intervallo di manutenzione è del 20%, il veicolo tenterà la manutenzione quando raggiunge il 72% di affidabilità. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Quando è abilitata, i veicoli tentano la manutenzione quando la loro affidabilità scende di una determinata percentuale dell'affidabilità massima.{}{}Ad esempio, se l'affidabilità massima di un veicolo è del 90% e l'intervallo di manutenzione è del 20%, il veicolo tenterà la manutenzione quando raggiunge il 72% di affidabilità STR_CONFIG_SETTING_SERVINT_TRAINS :Intervallo manutenzione predefinito treni: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Imposta l'intervallo di manutenzione predefinito per i nuovi veicoli ferroviari, quando non viene impostato nessun intervallo esplicito @@ -1874,7 +1875,7 @@ STR_CONFIG_SETTING_NOSERVICE :Disabilita manu STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Se abilitata, non vengono manutenuti i veicoli che non possono guastarsi. STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Penalità sulla velocità di carico per i treni più lunghi della stazione: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quando abilitato, i treni che sono troppo lunghi per la stazione si caricano più lentamente rispetto a un treno che si adatta alla stazione. Questa impostazione non influisce sulla pianificazione del percorso. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quando abilitato, i treni che sono troppo lunghi per la stazione si caricano più lentamente rispetto a un treno che si adatta alla stazione. Questa impostazione non influisce sulla pianificazione del percorso STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Abilita limiti di velocità dei vagoni: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Quando abilitata, tiene conto anche dei limiti di velocità dei vagoni per determinare la velocità massima di un treno. @@ -1939,13 +1940,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Anno a partire STR_CONFIG_SETTING_STARTING_YEAR :Anno di inizio: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Punteggi a fine anno: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Anno in cui il gioco finisce per poter calcolare i punteggi. Alla fine di quest'anno il punteggio della compagnia viene registrato e viene mostrata la schermata con i punteggi più alti, ma il giocatore può continuare a giocare anche dopo.{}Se quest'anno dovesse precedere quello di inizio partita, la schermata dei punteggi non verrà mai mostrata. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Anno in cui il gioco finisce per poter calcolare i punteggi. Alla fine di quest'anno il punteggio della compagnia viene registrato e viene mostrata la schermata con i punteggi più alti, ma il giocatore può continuare a giocare anche dopo.{}Se quest'anno dovesse precedere quello di inizio partita, la schermata dei punteggi non verrà mai mostrata STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Mai STR_CONFIG_SETTING_ECONOMY_TYPE :Tipo di economia: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Un'economia morbida fa cambiare la produzione più spesso, ma a piccoli step. Un'economia congelata impedisce cambiamenti di produzione e chiusure di industrie. Questa impostazione potrebbe non avere effetto per le tipologie industriali introdotte da NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Un'economia morbida fa cambiare la produzione più spesso, ma a piccoli step. Un'economia congelata impedisce cambiamenti di produzione e chiusure di industrie. Questa impostazione potrebbe non avere effetto per le tipologie industriali introdotte da NewGRF ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Originale STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Morbida @@ -2000,7 +2001,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permessa STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Permessa, disposizione strade personalizzata STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Generazione passeggeri e posta: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Quantità di carichi (passeggeri e posta) prodotta dalle case in relazione alla popolazione della città.{}Quadratica: Una città grande il doppio genera il quadruplo di passeggeri.{}Lineare: Una città grande il doppio genera il doppio di passeggeri. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Quantità di carichi (passeggeri e posta) prodotta dalle case in relazione alla popolazione della città.{}Quadratica: Una città grande il doppio genera il quadruplo di passeggeri.{}Lineare: Una città grande il doppio genera il doppio di passeggeri ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadratica (originale) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineare @@ -2041,7 +2042,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Risoluzione massima sprite: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limita la risoluzione massima degli sprite da utilizzare. Questa limitazione eviterà di utilizzare texture ad alta risoluzione anche quando disponibili. Ciò può aiutare a rendere l'aspetto di gioco più uniforme quando si usano combinazioni di file GRF con e senza texture ad alta risoluzione. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limita la risoluzione massima degli sprite da utilizzare. Questa limitazione eviterà di utilizzare texture ad alta risoluzione anche quando disponibili. Ciò può aiutare a rendere l'aspetto di gioco più uniforme quando si usano combinazioni di file GRF con e senza texture ad alta risoluzione ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2065,33 +2066,33 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Moltiplicatore STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Dimensione media delle metropoli in rapporto alle normali città all'inizio della partita. STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Aggiornare il grafico di distribuzione ogni {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo tra i successivi ricalcoli del grafico dei collegamenti. Ogni ricalcolo calcola i piani per un componente del grafico. Ciò significa che un valore X per questa impostazione non significa che l'intero grafico verrà aggiornato ogni X secondi. Solo alcuni componenti lo saranno. Quanto più breve è l'impostazione, tanto più tempo di CPU sarà necessario per il calcolo. Più lungo è il valore impostato, più tempo ci vorrà prima che la distribuzione del carico inizi su nuove rotte. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo tra i successivi ricalcoli del grafico dei collegamenti. Ogni ricalcolo calcola i piani per un componente del grafico. Ciò significa che un valore X per questa impostazione non significa che l'intero grafico verrà aggiornato ogni X secondi. Solo alcuni componenti lo saranno. Quanto più breve è l'impostazione, tanto più tempo di CPU sarà necessario per il calcolo. Più lungo è il valore impostato, più tempo ci vorrà prima che la distribuzione del carico inizi su nuove rotte STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Impiegare {STRING} per il ricalcolo del grafico di distribuzione -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo necessario per ogni ricalcolo di un componente del grafo dei collegamenti. Quando viene avviato un ricalcolo, viene generato un thread che può essere eseguito per questo numero di secondi. Quanto più breve è il tempo impostato, tanto più è probabile che il thread non finisca quando dovrebbe. In questo caso il gioco si ferma finché non viene terminato ("lag"). Più lungo è il valore impostato, più tempo ci vuole per aggiornare la distribuzione quando i percorsi cambiano. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo necessario per ogni ricalcolo di un componente del grafo dei collegamenti. Quando viene avviato un ricalcolo, viene generato un thread che può essere eseguito per questo numero di secondi. Quanto più breve è il tempo impostato, tanto più è probabile che il thread non finisca quando dovrebbe. In questo caso il gioco si ferma finché non viene terminato ("lag"). Più lungo è il valore impostato, più tempo ci vuole per aggiornare la distribuzione quando i percorsi cambiano STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modalità di distribuzione dei passeggeri: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :In modalità "Simmetrica" il numero di passeggeri che viaggiano da una stazione A ad una stazione B è approssimativamente lo stesso di quelli che viaggiano da B ad A. In modalità "Asimmetrica" è consentito il viaggio di un numero di passeggeri arbitrario in entrambe le direzioni. In modalità "Manuale" non viene effettuata alcuna distribuzione automatica dei passeggeri. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :In modalità "Simmetrica" il numero di passeggeri che viaggiano da una stazione A ad una stazione B è approssimativamente lo stesso di quelli che viaggiano da B ad A. In modalità "Asimmetrica" è consentito il viaggio di un numero di passeggeri arbitrario in entrambe le direzioni. In modalità "Manuale" non viene effettuata alcuna distribuzione automatica dei passeggeri STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modalità di distribuzione della posta: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :In modalità "Simmetrica" la quantità di posta spedita da una stazione A ad una stazione B è approssimativamente la stessa di quella spedita da B ad A. In modalità "Asimmetrica" è possibile spedire quantità di posta arbitrarie in entrambe le direzioni. In modalità "Manuale" non viene effettuata alcuna distribuzione automatica della posta. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :In modalità "Simmetrica" la quantità di posta spedita da una stazione A ad una stazione B è approssimativamente la stessa di quella spedita da B ad A. In modalità "Asimmetrica" è possibile spedire quantità di posta arbitrarie in entrambe le direzioni. In modalità "Manuale" non viene effettuata alcuna distribuzione automatica della posta STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Modalità di distribuzione dei carichi della classe ARMOURED: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :La classe di carico ARMOURED comprende i Valori nel clima temperato, i Diamanti nel clima subtropicale e l'Oro nel clima subartico. I NewGRF possono modificare questa impostazione. In modalità "Simmetrica" la quantità di carico inviata da una stazione A ad una stazione B è approssimativamente la stessa di quella inviata da B ad A. In modalità "Asimmetrica" quantità arbitrarie di quel carico possono essere inviate in entrambe le direzioni. In modalità "Manuale" non viene effettuata alcuna distribuzione automatica dei carichi interessati. Si raccomanda di impostare su "Asimmetrica" o "Manuale" per le partite nel clima subartico e subtropicale, in quanto le banche non restituiscono Oro alle miniere. Per il clima temperato è possibile impostare "Simmetrica" poiché le banche restituiscono un carico di valori equivalente a quello ricevuto dalla banca di origine. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :La classe di carico ARMOURED comprende i Valori nel clima temperato, i Diamanti nel clima subtropicale e l'Oro nel clima subartico. I NewGRF possono modificare questa impostazione. In modalità "Simmetrica" la quantità di carico inviata da una stazione A ad una stazione B è approssimativamente la stessa di quella inviata da B ad A. In modalità "Asimmetrica" quantità arbitrarie di quel carico possono essere inviate in entrambe le direzioni. In modalità "Manuale" non viene effettuata alcuna distribuzione automatica dei carichi interessati. Si raccomanda di impostare su "Asimmetrica" o "Manuale" per le partite nel clima subartico e subtropicale, in quanto le banche non restituiscono Oro alle miniere. Per il clima temperato è possibile impostare "Simmetrica" poiché le banche restituiscono un carico di valori equivalente a quello ricevuto dalla banca di origine STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Modalità di distribuzione dei carichi delle altre classi: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :In modalità "Asimmetrica" è consentito l'invio di quantità di carico arbitrarie in entrambe le direzioni. In modalità "Manuale" non viene effettuata alcuna distribuzione automatica dei carichi interessati. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :In modalità "Asimmetrica" è consentito l'invio di quantità di carico arbitrarie in entrambe le direzioni. In modalità "Manuale" non viene effettuata alcuna distribuzione automatica dei carichi interessati ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :Manuale STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :Asimmetrica STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :Simmetrica STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Precisione della distribuzione: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Più alta l'impostazione, più tempo impiega la CPU per calcolare il grafo delle rotte. Nel caso sia richiesto molto tempo, potrebbero verificarsi rallentamenti. Tuttavia, impostando un valore basso, la distribuzione potrebbe essere imprecisa e i carichi potrebbero essere inviati a destinazioni inattese. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Più alta l'impostazione, più tempo impiega la CPU per calcolare il grafo delle rotte. Nel caso sia richiesto molto tempo, potrebbero verificarsi rallentamenti. Tuttavia, impostando un valore basso, la distribuzione potrebbe essere imprecisa e i carichi potrebbero essere inviati a destinazioni inattese STR_CONFIG_SETTING_DEMAND_DISTANCE :Effetto della distanza sulla domanda: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Impostando a un valore maggiore di 0, la distanza fra una stazione di origine A e una possibile destinazione B per uno dei carichi prodotti ha effetto sulla quantità di carico effettivamente inviata da A a B. Più B si trova lontano da A, più piccola è la quantità inviata. Aumentando il valore dell'impostazione si aumenta anche lo squilibrio fra le stazioni lontane (che ricevono meno carico) e le stazioni più vicine (che ne ricevono di più). +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Impostando a un valore maggiore di 0, la distanza fra una stazione di origine A e una possibile destinazione B per uno dei carichi prodotti ha effetto sulla quantità di carico effettivamente inviata da A a B. Più B si trova lontano da A, più piccola è la quantità inviata. Aumentando il valore dell'impostazione si aumenta anche lo squilibrio fra le stazioni lontane (che ricevono meno carico) e le stazioni più vicine (che ne ricevono di più) STR_CONFIG_SETTING_DEMAND_SIZE :Quantità di carico restituita in modalità simmetrica: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Impostarla a meno di 100% fa sì che la distribuzione simmetrica si comporti più come quella asimmetrica. Viene consentito il ritorno indietro di un carico inferiore rispetto alla quantità inviata ad una stazione. A 0% la distribuzione simmetrica si comporta come quella asimmetrica. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Impostarla a meno di 100% fa sì che la distribuzione simmetrica si comporti più come quella asimmetrica. Viene consentito il ritorno indietro di un carico inferiore rispetto alla quantità inviata ad una stazione. A 0% la distribuzione simmetrica si comporta come quella asimmetrica STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturazione dei percorsi corti prima di utilizzare quelli a più alta capacità: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :È frequente che esistano più percorsi fra due stazioni. L'algoritmo Cargodist cercherà di saturare innanzi tutto il percorso più corto, quindi il secondo più corto fino a saturazione e così via. Il grado di saturazione è determinato dalla stima della capacità e dell'utilizo programmato. Se con tutti i percorsi saturi permane ancora domanda, l'algoritmo sovraccaricherà i percorsi indipendentemente dalla lunghezza, preferendo quelli a più alta capacità. Tuttavia, il più delle volte l'algoritmo non stimerà la capacità in modo accurato. Questa impostazione permette di specificare fino a quale percentuale saturare un percorso corto durante il primo passaggio dell'algoritmo prima di sceglierne uno più lungo. Impostarlo a meno di 100% in modo da evitare sovraffollamento delle stazioni in caso di capacità sovrastimata. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :È frequente che esistano più percorsi fra due stazioni. L'algoritmo Cargodist cercherà di saturare innanzi tutto il percorso più corto, quindi il secondo più corto fino a saturazione e così via. Il grado di saturazione è determinato dalla stima della capacità e dell'utilizo programmato. Se con tutti i percorsi saturi permane ancora domanda, l'algoritmo sovraccaricherà i percorsi indipendentemente dalla lunghezza, preferendo quelli a più alta capacità. Tuttavia, il più delle volte l'algoritmo non stimerà la capacità in modo accurato. Questa impostazione permette di specificare fino a quale percentuale saturare un percorso corto durante il primo passaggio dell'algoritmo prima di sceglierne uno più lungo. Impostarlo a meno di 100% in modo da evitare sovraffollamento delle stazioni in caso di capacità sovrastimata STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unità di velocità (terrestre): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Unità di velocità (nautica): {STRING} @@ -3019,11 +3020,11 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Pianta a STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Alberi casuali STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Pianta alberi casualmente nel paesaggio STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normale -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Pianta singoli alberi trascinando il mouse sopra il paesaggio. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Pianta singoli alberi trascinando il mouse sopra il paesaggio STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Bosco -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Pianta piccole foreste trascinando il mouse sopra il paesaggio. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Pianta piccole foreste trascinando il mouse sopra il paesaggio STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Foresta -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Pianta grandi foreste trascinando il mouse sopra il paesaggio. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Pianta grandi foreste trascinando il mouse sopra il paesaggio # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Generazione terreno @@ -3119,6 +3120,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propriet STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Proprietario ferrovia: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autorità locale: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Nessuna +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordinate: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Indice del tile: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Costruito/Rinnovato il: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Tipo stazione: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo stazione: {LTBLUE}{STRING} @@ -3240,7 +3243,7 @@ STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Numero d STR_FRAMERATE_RATE_BLITTER :{BLACK}Frame rate grafica: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Numero di fotogrammi video renderizzati in un secondo STR_FRAMERATE_SPEED_FACTOR :{BLACK}Fattore di velocità corrente della partita: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Prestazioni correnti della partita, confrontate con le prestazioni attese alla velocità di giorno normale. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Prestazioni correnti della partita, confrontate con le prestazioni attese alla velocità di giorno normale STR_FRAMERATE_CURRENT :{WHITE}Corrente STR_FRAMERATE_AVERAGE :{WHITE}Media STR_FRAMERATE_MEMORYUSE :{WHITE}Memoria @@ -4064,12 +4067,12 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Aeromobili senz STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Gruppi - fare clic su un gruppo per elencare tutti i suoi veicoli. Trascinare i gruppi per organizzarli in gerarchia. +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Gruppi - fare clic su un gruppo per elencare tutti i suoi veicoli. Trascinare i gruppi per organizzarli in gerarchia STR_GROUP_CREATE_TOOLTIP :{BLACK}Fare clic per creare un gruppo STR_GROUP_DELETE_TOOLTIP :{BLACK}Elimina il gruppo selezionato STR_GROUP_RENAME_TOOLTIP :{BLACK}Rinomina il gruppo selezionato STR_GROUP_LIVERY_TOOLTIP :{BLACK}Cambia la livrea del gruppo selezionato -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Fare clic per proteggere questo gruppo dal rimpiazzo automatico. Ctrl+Clic per proteggere anche i sottogruppi. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Fare clic per proteggere questo gruppo dal rimpiazzo automatico. Ctrl+Clic per proteggere anche i sottogruppi STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Elimina Gruppo STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Si è sicuri di voler eliminare questo gruppo e tutti i gruppi contenuti? diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 419c42637d..24d67a6c84 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -212,7 +212,7 @@ STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Samme som prim # Units used in OpenTTD -STR_UNITS_VELOCITY_IMPERIAL :{DECIMAL}{NBSP}mi/t +STR_UNITS_VELOCITY_IMPERIAL :{DECIMAL}{NBSP}mph STR_UNITS_VELOCITY_METRIC :{DECIMAL}{NBSP}km/t STR_UNITS_VELOCITY_SI :{DECIMAL}{NBSP}m/s STR_UNITS_VELOCITY_GAMEUNITS_DAY :{DECIMAL}{NBSP}ruter/dag @@ -243,7 +243,7 @@ STR_UNITS_WEIGHT_LONG_SI :{DECIMAL}{NBSP} STR_UNITS_VOLUME_SHORT_IMPERIAL :{DECIMAL}{NBSP}gal STR_UNITS_VOLUME_SHORT_METRIC :{DECIMAL}{NBSP}l -STR_UNITS_VOLUME_SHORT_SI :{DECIMAL} m³ +STR_UNITS_VOLUME_SHORT_SI :{DECIMAL}{NBSP}m³ STR_UNITS_VOLUME_LONG_IMPERIAL :{DECIMAL}{NBSP}gallon STR_UNITS_VOLUME_LONG_METRIC :{DECIMAL}{NBSP}liter @@ -273,7 +273,7 @@ STR_LIST_FILTER_TITLE :{BLACK}Filtrer: STR_LIST_FILTER_OSKTITLE :{BLACK}Skriv inn ett eller flere nøkkelord for å søkeord for å filtrere listen med STR_LIST_FILTER_TOOLTIP :{BLACK}Skriv inn ett eller flere nøkkelord for å søkeord for å filtrere listen med -STR_TOOLTIP_GROUP_ORDER :{BLACK}Velg grupperings-rekkefølge +STR_TOOLTIP_GROUP_ORDER :{BLACK}Velg grupperingsrekkefølge STR_TOOLTIP_SORT_ORDER :{BLACK}Velg sorteringsrekkefølge (synkende/stigende) STR_TOOLTIP_SORT_CRITERIA :{BLACK}Velg sorteringskriterier STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Velg filtreringskriterier @@ -310,7 +310,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Ved å a STR_BUTTON_DEFAULT :{BLACK}Standard STR_BUTTON_CANCEL :{BLACK}Avbryt STR_BUTTON_OK :{BLACK}OK -STR_WARNING_PASSWORD_SECURITY :{YELLOW}Advarsel: Server-administratorer kan lese tekst som blir skrevet her. +STR_WARNING_PASSWORD_SECURITY :{YELLOW}Advarsel: Tjeneradministratorer kan lese all tekst som blir skrevet her. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -356,7 +356,7 @@ STR_SORT_BY_POWER :Kraft STR_SORT_BY_TRACTIVE_EFFORT :Trekkraft STR_SORT_BY_INTRO_DATE :Introduksjonsdato STR_SORT_BY_RUNNING_COST :Driftskostnad -STR_SORT_BY_POWER_VS_RUNNING_COST :Effekt-/Driftskostnad +STR_SORT_BY_POWER_VS_RUNNING_COST :Effekt/Driftskostnad STR_SORT_BY_CARGO_CAPACITY :Lastekapasitet STR_SORT_BY_RANGE :Rekkevidde STR_SORT_BY_POPULATION :Folketall @@ -487,7 +487,7 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Graf over selsk STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Varetakster # Company league menu -STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Firmarangeringstabell +STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Selskapsrangeringstabell STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Detaljert prestasjonrating STR_GRAPH_MENU_HIGHSCORE :Tavle med høyeste poengsummer @@ -629,11 +629,11 @@ STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLA STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Vis detaljerte prestasjonsmålinger # Graph key window -STR_GRAPH_KEY_CAPTION :{WHITE}Nøkkel til firmagraf -STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Klikk her for å vise/skjule firmaet i grafen. +STR_GRAPH_KEY_CAPTION :{WHITE}Nøkkel til selskapsgrafer +STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Klikk her for å vise/skjule selskapet i grafen # Company league window -STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Firmarangering +STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Selskapsrangering STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' STR_COMPANY_LEAGUE_COMPANY_RANK :{YELLOW}#{NUM} STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Ingeniør @@ -641,7 +641,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Trafikkleder STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Transportkoordinator STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ROUTE_SUPERVISOR :Oppsynsmann STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR :Direktør -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE :Sjefsleder +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE :Toppsjef STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Formann STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :President STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Finansfyrste @@ -652,7 +652,7 @@ STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detaljer STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}{NBSP}% -STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP :{BLACK}Vis detaljer om dette firmaet +STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP :{BLACK}Vis detaljer om dette selskapet ###length 10 STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}Kjøretøy: @@ -676,8 +676,8 @@ STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Inntekt STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Inntekt i det kvartalet med størst fortjeneste de siste 12 kvartalene STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Vareenheter levert de siste fire kvartalene. STR_PERFORMANCE_DETAIL_CARGO_TOOLTIP :{BLACK}Antall varetyper levert det siste kvartalet. -STR_PERFORMANCE_DETAIL_MONEY_TOOLTIP :{BLACK}Hvor mye penger dette firmaet har i banken -STR_PERFORMANCE_DETAIL_LOAN_TOOLTIP :{BLACK}Størrelsen på firmaets lån +STR_PERFORMANCE_DETAIL_MONEY_TOOLTIP :{BLACK}Hvor mye penger dette selskapet har i banken +STR_PERFORMANCE_DETAIL_LOAN_TOOLTIP :{BLACK}Størrelsen på selskapets lån STR_PERFORMANCE_DETAIL_TOTAL_TOOLTIP :{BLACK}Totale poeng av mulige poeng # Music window @@ -760,7 +760,7 @@ STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Vis tran STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Vis vegetasjon på kartet STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Vis landeiere på kartet STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Klikk på en industritype for å slå på dens visning. Ctrl+klikk deaktiverer alle typer unntatt den valgte. Ctrl+klikk på den igjen for å slå på visning av alle industrier -STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Klikk på et firma for å slå på visning av firmaets eiendom. Ctrl+klikk deaktiverer visning av alle firmaene unntatt det valgte. Ctrl+klikk på firmaet igjen for å slå på visning av alle firmaene +STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Klikk på et selskap for å slå på visning av selskapets eiendom. Ctrl+klikk deaktiverer visning av alle selskapene unntatt det valgte. Ctrl+klikk på selskapet igjen for å slå på visning av alle selskapene STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Klikk på en varetype for å veksle mellom å vise dens egenskap. Ctrl + Klikk deaktiverer alle varetyper utenom den valgte. Ctrl + klikk på den igjen for å aktivere alle varetyper STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Veier @@ -805,8 +805,8 @@ STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Vis høy STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Ikke vis industrier på kartet STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Vis alle industrier på kartet STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Veksle mellom visning av høydekart -STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Ikke vis firmaeiendommer på kartet -STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Vis alle firmaeiendommer på kartet +STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Ikke vis selskapseiendommer på kartet +STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Vis alle selskapseiendommer på kartet STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Ikke vis noen varetyper på kartet STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Vis alle varetyper på kartet @@ -851,16 +851,16 @@ STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLAC STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}Gruvegangkollaps fører til store ødeleggelser i nærheten av {TOWN}! STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Flom!{}Minst {COMMA} savnet eller antatt død{P "" e} etter voldsom oversvømmelse! -STR_NEWS_COMPANY_IN_TROUBLE_TITLE :{BIG_FONT}{BLACK}Transportfirma i trøbbel! -STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} vil selges eller slås konkurs hvis ikke firmaets økonomi bedrer seg snart! -STR_NEWS_COMPANY_MERGER_TITLE :{BIG_FONT}{BLACK}Transportfirmaer fusjonerer! +STR_NEWS_COMPANY_IN_TROUBLE_TITLE :{BIG_FONT}{BLACK}Transportselskap i trøbbel! +STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} vil selges eller slås konkurs hvis ikke resultatet bedrer seg snart! +STR_NEWS_COMPANY_MERGER_TITLE :{BIG_FONT}{BLACK}Transportselskaper fusjonerer! STR_NEWS_COMPANY_MERGER_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} har blitt solgt til {STRING} for {CURRENCY_LONG}! STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLACK}Konkurs! STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} har blitt nedlagt av kreditorene og alle aktiva har blitt solgt! -STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Nytt transportfirma opprettet! +STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Nytt transportselskap opprettet! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} starter opp i nærheten av {TOWN}! STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} har blitt kjøpt opp av {STRING} for et ukjent beløp! -STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Sjef) +STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Leder) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} sponset grunnleggelsen av den nye byen {TOWN}! STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}En ny by kalt {TOWN} har blitt reist! @@ -931,7 +931,7 @@ STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLAC STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Trafikkaos i {TOWN}!{}{}Veibyggingsprogram finansiert av {STRING} fører til 6 måneder med elendighet for sjåfører! STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}Trafikkaos i {TOWN}!{}{}Veibyggingsprogram finansiert av {STRING} fører til 6 minutter med elendighet for sjåfører! -STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transport monopol! +STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transportmonopol! STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLACK}Lokale myndigheter i {TOWN} signerer kontrakt med {STRING} om 12 måneder med eksklusive transportrettigheter! STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}Lokale myndigheter i {TOWN} signerer kontrakt med {STRING} om 12 minutter med eksklusive transportrettigheter! @@ -970,48 +970,48 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Velg val STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) ###length 44 -STR_GAME_OPTIONS_CURRENCY_GBP :Britisk pund +STR_GAME_OPTIONS_CURRENCY_GBP :Britiske pund STR_GAME_OPTIONS_CURRENCY_USD :Amerikansk dollar STR_GAME_OPTIONS_CURRENCY_EUR :Euro -STR_GAME_OPTIONS_CURRENCY_JPY :Japansk yen -STR_GAME_OPTIONS_CURRENCY_ATS :Østerriksk shilling -STR_GAME_OPTIONS_CURRENCY_BEF :Belgisk franc +STR_GAME_OPTIONS_CURRENCY_JPY :Japanske yen +STR_GAME_OPTIONS_CURRENCY_ATS :Østerrikske shilling +STR_GAME_OPTIONS_CURRENCY_BEF :Belgiske franc STR_GAME_OPTIONS_CURRENCY_CHF :Sveitsisk franc -STR_GAME_OPTIONS_CURRENCY_CZK :Tsjekkisk koruna -STR_GAME_OPTIONS_CURRENCY_DEM :Tysk mark -STR_GAME_OPTIONS_CURRENCY_DKK :Dansk krone -STR_GAME_OPTIONS_CURRENCY_ESP :Spansk pesetas -STR_GAME_OPTIONS_CURRENCY_FIM :Finsk mark -STR_GAME_OPTIONS_CURRENCY_FRF :Fransk franc -STR_GAME_OPTIONS_CURRENCY_GRD :Gresk drakme -STR_GAME_OPTIONS_CURRENCY_HUF :Ungarsk forint -STR_GAME_OPTIONS_CURRENCY_ISK :Islandsk krone -STR_GAME_OPTIONS_CURRENCY_ITL :Italiensk lire -STR_GAME_OPTIONS_CURRENCY_NLG :Hollandsk guilder -STR_GAME_OPTIONS_CURRENCY_NOK :Norsk krone +STR_GAME_OPTIONS_CURRENCY_CZK :Tsjekkiske koruna +STR_GAME_OPTIONS_CURRENCY_DEM :Tyske mark +STR_GAME_OPTIONS_CURRENCY_DKK :Danske kroner +STR_GAME_OPTIONS_CURRENCY_ESP :Spanske pesetas +STR_GAME_OPTIONS_CURRENCY_FIM :Finske mark +STR_GAME_OPTIONS_CURRENCY_FRF :Franske franc +STR_GAME_OPTIONS_CURRENCY_GRD :Greske drakmer +STR_GAME_OPTIONS_CURRENCY_HUF :Ungarske forinter +STR_GAME_OPTIONS_CURRENCY_ISK :Islandske kroner +STR_GAME_OPTIONS_CURRENCY_ITL :Italienske lire +STR_GAME_OPTIONS_CURRENCY_NLG :Nederlandske gylden +STR_GAME_OPTIONS_CURRENCY_NOK :Norske kroner STR_GAME_OPTIONS_CURRENCY_PLN :Polske złoty -STR_GAME_OPTIONS_CURRENCY_RON :Rumensk leu -STR_GAME_OPTIONS_CURRENCY_RUR :Russisk rubel -STR_GAME_OPTIONS_CURRENCY_SIT :Slovensk tolar -STR_GAME_OPTIONS_CURRENCY_SEK :Svensk krone -STR_GAME_OPTIONS_CURRENCY_TRY :Tyrkisk lire -STR_GAME_OPTIONS_CURRENCY_SKK :Slovakisk koruna -STR_GAME_OPTIONS_CURRENCY_BRL :Brasiliansk real -STR_GAME_OPTIONS_CURRENCY_EEK :Estlandsk krone -STR_GAME_OPTIONS_CURRENCY_LTL :Litauisk litas -STR_GAME_OPTIONS_CURRENCY_KRW :Sørkoreansk won +STR_GAME_OPTIONS_CURRENCY_RON :Rumenske leu +STR_GAME_OPTIONS_CURRENCY_RUR :Russiske rubler +STR_GAME_OPTIONS_CURRENCY_SIT :Slovenske tolar +STR_GAME_OPTIONS_CURRENCY_SEK :Svenske kroner +STR_GAME_OPTIONS_CURRENCY_TRY :Tyrkiske lire +STR_GAME_OPTIONS_CURRENCY_SKK :Slovakiske koruna +STR_GAME_OPTIONS_CURRENCY_BRL :Brasilianske real +STR_GAME_OPTIONS_CURRENCY_EEK :Estiske kroner +STR_GAME_OPTIONS_CURRENCY_LTL :Litauiske litas +STR_GAME_OPTIONS_CURRENCY_KRW :Sørkoreanske won STR_GAME_OPTIONS_CURRENCY_ZAR :Sørafrikanske rand STR_GAME_OPTIONS_CURRENCY_CUSTOM :Egendefinert... -STR_GAME_OPTIONS_CURRENCY_GEL :Georgisk lari -STR_GAME_OPTIONS_CURRENCY_IRR :Iransk rial -STR_GAME_OPTIONS_CURRENCY_RUB :Ny russisk rubel -STR_GAME_OPTIONS_CURRENCY_MXN :Meksikansk peso -STR_GAME_OPTIONS_CURRENCY_NTD :Ny Taiwan Dollar -STR_GAME_OPTIONS_CURRENCY_CNY :Chinese Renminbi -STR_GAME_OPTIONS_CURRENCY_HKD :Hong Kong Dollar +STR_GAME_OPTIONS_CURRENCY_GEL :Georgiske lari +STR_GAME_OPTIONS_CURRENCY_IRR :Iranske rial +STR_GAME_OPTIONS_CURRENCY_RUB :Nye russiske rubler +STR_GAME_OPTIONS_CURRENCY_MXN :Meksikanske peso +STR_GAME_OPTIONS_CURRENCY_NTD :Nye taiwanske dollar +STR_GAME_OPTIONS_CURRENCY_CNY :Kinesiske renminbi +STR_GAME_OPTIONS_CURRENCY_HKD :Hong Kong dollar STR_GAME_OPTIONS_CURRENCY_INR :Indiske rupi -STR_GAME_OPTIONS_CURRENCY_IDR :Indonesisk Rupi -STR_GAME_OPTIONS_CURRENCY_MYR :Malaysisk Ringgit +STR_GAME_OPTIONS_CURRENCY_IDR :Indonesiske rupi +STR_GAME_OPTIONS_CURRENCY_MYR :Malaysiske ringgit STR_GAME_OPTIONS_CURRENCY_LVL :Latviske lats STR_GAME_OPTIONS_CURRENCY_PTE :Portugisiske escudo @@ -1043,7 +1043,7 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Merk av STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Innstillingen vil ikke tre i kraft før spillet er restartet STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync -STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Merk av i denne boksen for å v-synkronisere skjermen. Endring av innstillinger krever omstart av spillet. Fungerer bare med maskinvareakselerasjon aktivert +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Merk av i denne boksen for å aktivere VSync for skjermen. Endring av innstilling krever omstart av spillet. Fungerer bare med maskinvareakselerasjon aktivert STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Aktiv driver: {STRING} @@ -1242,8 +1242,8 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_ALL :Alle instilling STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Klientinnstillinger (lagres ikke i lagringsfiler; påvirker alle spill) STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Spillinnstillinger (lagres i lagringsfil; påvirker bare nye spill) STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Spillinnstillinger (lagres i lagringsfilen; påvirker bare gjeldende spill) -STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Firmainnstillinger (lagres i lagringsfilen; påvirker bare nye spill) -STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Firmainnstillinger (lagret i lagringsfilen; påvirker bare gjeldende selskap) +STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Selskapsinnstillinger (lagret i lagringsfilen; påvirker bare nye spill) +STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Selskapsinnstillinger (lagret i lagringsfilen; påvirker bare gjeldende selskap) STR_CONFIG_SETTINGS_NONE :{WHITE}- Ingen - ###length 3 @@ -1258,8 +1258,8 @@ STR_CONFIG_SETTING_DISABLED :Deaktivert ###length 3 STR_CONFIG_SETTING_COMPANIES_OFF :Av -STR_CONFIG_SETTING_COMPANIES_OWN :Eget firma -STR_CONFIG_SETTING_COMPANIES_ALL :Alle firmaer +STR_CONFIG_SETTING_COMPANIES_OWN :Eget selskap +STR_CONFIG_SETTING_COMPANIES_ALL :Alle selskaper ###length 3 STR_CONFIG_SETTING_NONE :Ingen @@ -1313,7 +1313,7 @@ STR_CONFIG_SETTING_RECESSIONS :Resesjoner: {ST STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Hvis aktivert, lavkonjunkturer kan forekomme innimellom. Under en lavkonjunktur vil all produksjon være betydelig lavere (den returnerer til tidligere nivå når lavkonjunktur er over) STR_CONFIG_SETTING_TRAIN_REVERSING :Forby reversering av tog i stasjoner: {STRING} -STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Hvis aktivert, vil ikke toget rygge i ikke-terminus stationer, selv om det er en kortere vei til deres neste stasjon ved å rygge +STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Hvis aktivert, vil ikke togene reversere i ikke-endestasjoner, selv om det er en kortere vei til neste stasjon ved å rygge STR_CONFIG_SETTING_DISASTERS :Katastrofer: {STRING} STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Aktiver/inaktiver katastrofer som tidvis kan blokkere eller ødelegge kjøretøy og infrastruktur @@ -1334,7 +1334,7 @@ STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Tillat endring STR_CONFIG_SETTING_CATCHMENT :Mer realistisk størrelse på oppfangingsområder: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Ha oppsamlingsområder i forskjellige størrelser for forskjellige typer stasjoner og lufthavner -STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Firmaets stasjoner kan betjene industrier med tilknyttede nøytrale stasjoner: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Selskapets stasjoner kan betjene industrier med tilknyttede nøytrale stasjoner: {STRING} STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Hvis aktivert, vil industrier med tilknyttede stasjoner (slik som oljerigger) også kunne betjenes av selskapseide stasjoner bygget i nærheten. Hvis deaktivert, vil disse industriene bare kunne betjenes av sine tilknyttede stasjoner. Nærliggende selskapsstasjoner vil ikke kunne betjene dem, heller ikke vil den tilknyttede stasjonen betjene noe annet enn industrien STR_CONFIG_SETTING_EXTRADYNAMITE :Tillat fjerning av flere veier, broer osv. eid av byene: {STRING} @@ -1379,7 +1379,7 @@ STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Største tunnel STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Største lengde for tunneller STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Konstruksjonsmetode for primærindustri: {STRING} -STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Metode for finansiering av primærindustri. 'Ingen' betyr at det ikke er mulig å finansiere noen. 'Prospekterer' betyr at finansiering er mulig, men oppbyggingen skjer på et tilfeldig sted på kartet, og det er rimelig sjanse for at den mislykkes. 'Som andre industrier' betyr at råvareindustri kan bygges opp av firmaer hvor som helst på kartet på samme måte som prosessindustri +STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Metode for finansiering av primærindustri. 'Ingen' betyr at det ikke er mulig å finansiere noen. 'Prospekterer' betyr at finansiering er mulig, men oppbyggingen skjer på et tilfeldig sted på kartet, og det er rimelig sjanse for at den mislykkes. 'Som andre industrier' betyr at råvareindustri kan bygges opp av selskaper hvor som helst på kartet på samme måte som prosessindustri ###length 3 STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :Ingen STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :Som andre industrier @@ -1426,23 +1426,22 @@ STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :alle tilleggsvi STR_CONFIG_SETTING_BRIBE :Tillat bestikkelser av lokale myndigheter: {STRING} ###length 2 -STR_CONFIG_SETTING_BRIBE_HELPTEXT :Tillat firmaer å prøve å bestikke de lokale myndighetene i byen. Hvis bestikkelsen blir oppdaget av en inspektør, vil selskapet ikke være i stand til å gjøre forretninger i byen de neste seks månedene -STR_CONFIG_SETTING_BRIBE_HELPTEXT.small :firma -STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :Tillat selskaper å prøve å bestikke de lokale myndighetene i byen. Hvis bestikkelsen blir oppdaget av en inspektør, vil selskapet ikke kunne gjøre forretninger i byen de neste seks minuttene +STR_CONFIG_SETTING_BRIBE_HELPTEXT :Tillat selskap å prøve å bestikke de lokale myndighetene i byen. Hvis bestikkelsen blir oppdaget av en inspektør, vil selskapet ikke være i stand til å gjøre forretninger i byen de neste seks månedene +STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :Tillat selskap å prøve å bestikke de lokale myndighetene i byen. Hvis bestikkelsen blir oppdaget av en inspektør, vil selskapet ikke kunne gjøre forretninger i byen de neste seks minuttene STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Tillat kjøp av eksklusive transportrettigheter: {STRING} ###length 2 -STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Om et firma kjøper eksklusive transportrettigheter for en by, vil ikke motstandernes stasjoner motta varer eller passasjorer på tolv måneder -STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT_MINUTES :Hvis et firma kjøper eksklusive transportrettigheter for en by, vil ikke motstandernes stasjoner (passasjerer og varer) motta noen varer i tolv minutter +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Om et selskap kjøper eksklusive transportrettigheter for en by, vil ikke motstandernes stasjoner motta varer eller passasjerer på tolv måneder +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT_MINUTES :Hvis et selskap kjøper eksklusive transportrettigheter for en by, vil ikke motstandernes stasjoner (passasjerer og varer) motta noen varer i tolv minutter STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Tillat finansiering av bygninger: {STRING} -STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Tillat firmaer å gi penger til byer til bygging av nye bygninger +STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Tillat selskap å gi penger til byer til bygging av nye bygninger STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Tillat finansiering av lokal veibygging: {STRING} -STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Tillat firmaer å gi penger til byer for omlegging av veinettet for å sabotere veibaserte tjenester i byen +STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Tillat selskap å gi penger til byer for omlegging av veinettet for å sabotere veibaserte tjenester i byen -STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Tillat pengeoverføring til andre firmaer: {STRING} -STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Tillat firmaer å overføre penger til andre firmaer i flerspillermodus +STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Tillat pengeoverføring til andre selskap: {STRING} +STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Tillat overføring av penger mellom selskap i flerspillermodus STR_CONFIG_SETTING_FREIGHT_TRAINS :Vektmultiplikator for last for å simulere tunge tog: {STRING} STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Still virkningen av å frakte gods på tog. En høyere verdi gjør det mer krevende for tog å frakte gods, spesielt i bakker @@ -1465,7 +1464,7 @@ STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Tillat stoppest STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Tillat bygging av stoppesteder med gjennomkjøring på veier eid av byer STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Tillat stoppesteder med gjennomkjøring på veier eid av konkurrenter: {STRING} STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Tillat bygging av gjennomkjørbare lastestasjoner på veier eid av andre selskaper -STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Det er ikke mulig å endre denne innstillingen når det allerede finnes kjøretøy. +STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Det er ikke mulig å endre denne innstillingen når det finnes transportmidler STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Vedlikehold av infrastruktur: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Når aktivert, medfører infrastruktur vedlikeholdskostnader. Kostnadene vokser overproporsjonalt med nettverkets størrelse, og påvirker dermed større selskaper mer enn de små @@ -1655,14 +1654,14 @@ STR_CONFIG_SETTING_MEASURE_TOOLTIP :Vis målingsver STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Vise avstander mellom kartelementer samt høydeforskjeller når du drar linjer ved byggevirksomhet STR_CONFIG_SETTING_LIVERIES :Vis design spesifikke for type transportmidler: {STRING} -STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Kontrollér bruken av kjøretøystypespesifikke lakkeringer (i motsetning til selskapsspesifikke) +STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Kontrollér bruken av kjøretøystypespesifikke design (i motsetning til selskapsspesifikke) ###length 3 STR_CONFIG_SETTING_LIVERIES_NONE :Ingen -STR_CONFIG_SETTING_LIVERIES_OWN :Eget firma -STR_CONFIG_SETTING_LIVERIES_ALL :Alle firmaer +STR_CONFIG_SETTING_LIVERIES_OWN :Eget selskap +STR_CONFIG_SETTING_LIVERIES_ALL :Alle selskaper STR_CONFIG_SETTING_PREFER_TEAMCHAT :Foretrekk lagsamtale med : {STRING} -STR_CONFIG_SETTING_PREFER_TEAMCHAT_HELPTEXT :Bytte bindingen av firmaets interne og offentlige kommunikasjon til , henholdsvis +STR_CONFIG_SETTING_PREFER_TEAMCHAT_HELPTEXT :Bytte bindingen av selskapet interne og offentlige kommunikasjon til , henholdsvis STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :Rullehjulets hastighet på kartet: {STRING} STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Kontroller følsomheten til panorering med musehjulet @@ -1683,7 +1682,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Enkelt klikk (v STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Enkelt klikk (umiddelbart) STR_CONFIG_SETTING_USE_RELAY_SERVICE :Bruk videresendingstjeneste: {STRING} -STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Hvis opprettelsen av en tilkobling til serveren mislykkes, kan man bruke en videresendingstjeneste til å opprette en tilkobling. "Aldri" tillater dette, "spør" vil spørre først, "tillat" vil tillate det uten å spørre +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Hvis opprettelsen av en tilkobling til tjeneren mislykkes, kan man bruke en videresendingstjeneste til å opprette en tilkobling. "Aldri" tillater dette, "spør" vil spørre først, "tillat" vil tillate det uten å spørre ###length 3 STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Aldri STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Spør @@ -1863,7 +1862,7 @@ STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Vise nyhetsoppd STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :Ulykker med konkurrentens kjøretøy: {STRING} STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :Vis en avis om havarerte kjøretøy for konkurrenter -STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Firmainformasjon: {STRING} +STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Selskapsinformasjon: {STRING} STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Vise nyhetsoppdatering når nye selskaper starter opp, eller når selskaper er konkurstruet STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN :Åpning av industrier: {STRING} @@ -1875,7 +1874,7 @@ STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE_HELPTEXT :Vise nyhetsoppd STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES :Økonomiske endringer: {STRING} STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES_HELPTEXT :Vis en nyhetsoppdatering om globale forandringer i økonomi -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY :Produksjonsendringer hos industrier ekspedert av firmaet: {STRING} +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY :Produksjonsendringer hos industrier betjent av selskapet: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :Vise nyhetsoppdateringer når produksjonsnivået endrer seg for industrier som er tilknyttet selskapet STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER :Produksjonsendringer hos industrier betjent av konkurrent(er): {STRING} @@ -1884,7 +1883,7 @@ STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :Vise nyhetsoppd STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Andre industriproduksjonsendringer: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Vise nyhetsoppdatering når produksjonsnivået endrer seg for industrier som ikke er tilknyttet selskapet eller andre konkurrenter -STR_CONFIG_SETTING_NEWS_ADVICE :Forslag / informasjon om firmaets kjøretøyer: {STRING} +STR_CONFIG_SETTING_NEWS_ADVICE :Forslag / informasjon om selskapets kjøretøyer: {STRING} STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Vise meldinger om kjøretøy som trenger oppmerksomhet STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Nye kjøretøy: {STRING} @@ -2065,7 +2064,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Ofte er det fle STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Hastighetsenheter (land): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Hastighetsenheter (nautisk): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Når en hastighet vises i brukergrensesnittet, vise det i de valgte enheter -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Det britiske imperiets enhetssystem (mph) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperisk (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrisk (km/t) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_DAYS :Spillenheter (ruter/dag) @@ -2075,35 +2074,35 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :Knop STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Kjøretøys effektenheter: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Når et kjøretøys effekt er vist i brukergrensesnittet, vise det i de valgte enheter ###length 3 -STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL :Det britiske imperiets enhetssystem (hp) +STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL :Imperisk (hp) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_METRIC :Metrisk (HK) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_SI :SI (kW) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT :Vektenheter: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT :Når vektene vises i brukergrensesnittet, vis dem i de utvalgte enhetene ###length 3 -STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL :Det britiske imperiets enhetssystem ('short t'/tonn) +STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL :Imperisk (amerikansk t/tonn) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_METRIC :Metrisk (t/tonn) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_SI :SI (kg) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME :Volumenheter: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_HELPTEXT :Når volumene vises i brukergrensesnittet, vis dem i de utvalgte enhetene ###length 3 -STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL :Det britiske imperiets enhetssystem (gal) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL :Imperisk (gal) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_METRIC :Metrisk (l) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_SI :SI (m³) -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Enhet for trekkraft: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Trekkraftenheter: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Når trekkarbeid, også kjent som trekkraft, er vist i brukergrensesnittet, vis det i de utvalgte enhetene ###length 3 -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL :Det britiske imperiets enhetssystem (lbf) +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL :Imperisk (lbf) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_METRIC :Metrisk (kgf) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_SI :SI (kN) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT :Høydeenheter: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT :Når en høyde vises i brukergrensesnittet, vis den i de valgte enhetene ###length 3 -STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :Det britiske imperiets enhetssystem (fot) +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :Imperisk (fot) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :Metrisk (m) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m) @@ -2115,7 +2114,7 @@ STR_CONFIG_SETTING_INTERFACE_GENERAL :Generelt STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :Synsfelt STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :Byggeaktivitet STR_CONFIG_SETTING_ADVISORS :Nyheter / Rådgivere -STR_CONFIG_SETTING_COMPANY :Firma +STR_CONFIG_SETTING_COMPANY :Selskap STR_CONFIG_SETTING_ACCOUNTING :Regnskap STR_CONFIG_SETTING_VEHICLES :Kjøretøy STR_CONFIG_SETTING_VEHICLES_PHYSICS :Fysikk @@ -2132,7 +2131,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Industrier STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Varedistribusjon STR_CONFIG_SETTING_ENVIRONMENT_TREES :Trær STR_CONFIG_SETTING_AI :Konkurrenter -STR_CONFIG_SETTING_AI_NPC :Datamaskinstyrte spillere +STR_CONFIG_SETTING_AI_NPC :Datamaskinspillere STR_CONFIG_SETTING_NETWORK :Nettverk STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Veifinner for tog: {STRING} @@ -2172,7 +2171,7 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Tildelin # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Feil med skjerminstillingene... STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... ingen kompatibel GPU funnet. Maskinvareakselerasjon deaktivert -STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... GPU-driveren krasjet spille. Maskinvareakselerasjon deaktivert +STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... GPU-driveren krasjet spillet. Maskinvareakselerasjon deaktivert # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -2190,7 +2189,7 @@ STR_INTRO_HELP :{BLACK}Hjelp og STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Innstillinger STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF-innstillinger STR_INTRO_ONLINE_CONTENT :{BLACK}Se etter innhold på nettet -STR_INTRO_AI_SETTINGS :{BLACK}AI innstillinger +STR_INTRO_AI_SETTINGS :{BLACK}KI-innstillinger STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Game Script-innstillinger STR_INTRO_QUIT :{BLACK}Avslutt @@ -2246,7 +2245,7 @@ STR_HELP_WINDOW_COMMUNITY :{BLACK}Fellessk # Cheat window STR_CHEATS :{WHITE}Sandkasseinnstillinger STR_CHEAT_MONEY :{LTBLUE}Øk pengebeholdningen med {CURRENCY_LONG} -STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spiller som firma: {ORANGE}{COMMA} +STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spiller som selskap: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magisk bulldoser (fjern industrier, uflyttbare objekter): {ORANGE}{STRING} STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunneler kan krysse hverandre: {ORANGE}{STRING} STR_CHEAT_NO_JETCRASH :{LTBLUE}Jetfly vil ikke krasje (regelmessig) på små flyplasser: {ORANGE} {STRING} @@ -2258,7 +2257,7 @@ STR_CHEAT_SETUP_PROD :{LTBLUE}Tillat STR_CHEAT_STATION_RATING :{LTBLUE}Lås stasjonsvurdering til 100%: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Firmafarge +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Selskapsfarge STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Vis generelle fargetemaer STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vis togfargetemaer @@ -2269,9 +2268,9 @@ STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Vis farg STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Vis fargene til kjøretøygrupper STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Vis fargene til skipsgrupper STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Vis fargene til luftfartøygrupper -STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Velg primærfarge for valgte tema. Ctrl+klikk for å bruke denne fargen på alt +STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Velg primærfarge for valgte fargetema. Ctrl+klikk for å bruke denne fargen på alt STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Velg sekundærfarge for valgte tema. Ctrl+klikk for å bruke denne fargen på alt -STR_LIVERY_PANEL_TOOLTIP :{BLACK}Velg fargetemaet du ønsker å endre, eller flere fargetemaer med Ctrl+klikk. Klikk på boksen for å vise bruken av fargetemaene +STR_LIVERY_PANEL_TOOLTIP :{BLACK}Velg fargetemaet du ønsker å endre, eller flere fargetemaer med Ctrl+klikk. Klikk på boksen for å vise bruken av fargetemaet STR_LIVERY_TRAIN_GROUP_EMPTY :Ingen toggrupper satt opp STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Ingen kjøretøygrupper er satt opp STR_LIVERY_SHIP_GROUP_EMPTY :Ingen skipsgrupper er satt opp @@ -2322,7 +2321,7 @@ STR_FACE_LOAD :{BLACK}Last inn STR_FACE_LOAD_TOOLTIP :{BLACK}Last inn favorittansikt STR_FACE_LOAD_DONE :{WHITE}Ditt favorittansikt har blitt lastet inn fra OpenTTDs konfigurasjonsfil STR_FACE_FACECODE :{BLACK}Ansiktsnummer -STR_FACE_FACECODE_TOOLTIP :{BLACK}Vis og/eller endre ansiktsnummeret til firmaets leder +STR_FACE_FACECODE_TOOLTIP :{BLACK}Vis og/eller endre ansiktsnummeret til selskapets president STR_FACE_FACECODE_CAPTION :{WHITE}Vis og/eller endre lederens ansiktsnummer STR_FACE_FACECODE_SET :{WHITE}Ny ansiktsnummerkode har blitt satt STR_FACE_FACECODE_ERR :{WHITE}Kunne ikke endre lederens ansiktsnummer - må være et heltall mellom 0 og 4294967295! @@ -2404,7 +2403,7 @@ STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Game Sc STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Passordbeskyttet! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}TJENEREN ER FRAKOBLET STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}TJENEREN ER FULL -STR_NETWORK_SERVER_LIST_SERVER_BANNED :{SILVER}DU ER BANNET FRA SERVEREN +STR_NETWORK_SERVER_LIST_SERVER_BANNED :{SILVER}DU ER BANNET FRA TJENEREN STR_NETWORK_SERVER_LIST_SERVER_TOO_OLD :{SILVER}SERVEREN FOR GAMMEL STR_NETWORK_SERVER_LIST_VERSION_MISMATCH :{SILVER}DU HAR EN ANNEN VERSJON ENN TJENEREN STR_NETWORK_SERVER_LIST_GRF_MISMATCH :{SILVER}DU HAR EN ANNEN NEWGRF ENN TJENEREN @@ -2414,16 +2413,16 @@ STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Oppdater STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Oppdater tjenerinfo STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :Søk på internett -STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Søk på internett for offentlige servere +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Søk på Internett for offentlige tjenere STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Søk LAN -STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Søk lokalt nettverk for servere +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Søk lokalt nettverk for tjenere STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Legg til tjener -STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Legger til en tjener til listen. Dette kan enten være en serveradresse eller en invitasjonskode +STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Legger til en tjener til listen. Dette kan enten være en tjeneradresse eller en invitasjonskode STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Start tjener STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Start en egen tjener STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Skriv inn ditt navn -STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Tast inn serveradresse og invitasjonskode +STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Tast inn tjeneradresse og invitasjonskode # Start new multiplayer server STR_NETWORK_START_SERVER_CAPTION :{WHITE}Start et nytt flerspillerspill @@ -2434,13 +2433,13 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Sett pas STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beskytt ditt spill med et passord hvis du ikke vil at hvem som helst skal bli med på det STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Synlighet: -STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Om andre mennesker kan se serveren din i den offentlige oppføringen +STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Om andre mennesker kan se tjeneren din i den offentlige oppføringen STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" er} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Største antall klienter: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Velg største antall klienter. Ikke alle plassene trenger å bli tatt -STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} firma{P "" er} +STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} selskap{P "" er} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Største antall selskap: -STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Begrens tjeneren til et bestemt antall firmaer +STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Begrens tjeneren til et bestemt antall selskap STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Skriv inn et navn for nettverksspillet @@ -2459,12 +2458,12 @@ STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) La STR_NETWORK_CONNECTING_5 :{BLACK}(5/6) Behandler data... STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Registrerer... STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Henter spillinformasjon... -STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Henter firmainformasjon... +STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Henter selskapsinformasjon... STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Koble fra STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Tjeneren er beskyttet. Skriv inn passord -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firmaet er beskyttet. Skriv inn passord +STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Selskapet er beskyttet. Skriv inn passord # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Påloggede spillere @@ -2474,29 +2473,29 @@ STR_NETWORK_COMPANY_LIST_SPECTATE :Se STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Påloggede Spillere STR_NETWORK_CLIENT_LIST_SERVER :{BLACK}Server STR_NETWORK_CLIENT_LIST_SERVER_NAME :{BLACK}Navn -STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP :{BLACK}Navnet på serveren du spiller på -STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Rediger navnet på serveren +STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP :{BLACK}Navnet på tjeneren du spiller på +STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Rediger navnet på tjeneren STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Servernavn STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Synlighet -STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Om andre mennesker kan se serveren din i den offentlige oppføringen +STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Om andre mennesker kan se tjeneren din i den offentlige oppføringen STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Invitasjonskode -STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Invitasjonskode andre spillere kan bruke for å koble til denne serveren +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Invitasjonskode andre spillere kan bruke for å koble til denne tjeneren STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}Tilkoblingstype -STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Hvorvidt og hvordan serveren din kan nås av andre +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Hvorvidt og hvordan tjeneren din kan nås av andre STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Spiller STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Navn STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Ditt spillernavn STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Rediger ditt spillernavn STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Ditt spillernavn STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Administrative handlinger å utføre for denne klienten -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Administrative tiltak å utføre for dette firmaet -STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Bli med i dette firmaet +STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Administrative tiltak å utføre for dette selskapet +STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Bli med i dette selskapet STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Send en melding til denne spilleren -STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Send en melding til alle spillerne i dette firmaet +STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Send en melding til alle spillerne i dette selskapet STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Send en melding til alle tilskuerne STR_NETWORK_CLIENT_LIST_SPECTATORS :Tilskuere -STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nytt firma) -STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Opprett et nytt firma og bli med i det +STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nytt selskap) +STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Opprett et nytt selskap og bli med i det STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Dette er deg STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Dette er verten for spillet STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} klient{P "" er} / {NUM}{NUM} selskap{P et er} @@ -2518,11 +2517,11 @@ STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Låse opp passo STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Administratorhandling STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Er du sikker på at du vil utestenge spiller '{STRING}'? STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Er du sikker på at du vil utestenge spiller '{STRING}'? -STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Er du sikker på at du vil slette firmaet '{COMPANY}'? -STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Er du sikker på at du vil tilbakestille passordet til firma '{COMPANY}'? +STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Er du sikker på at du vil slette selskapet '{COMPANY}'? +STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Er du sikker på at du vil tilbakestille passordet til selskapet '{COMPANY}'? STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Vil du bruke videresending? -STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Kunne ikke opprette en kobling mellom deg og serveren '{STRING}'.{}Vil du videresende denne økten via '{STRING}'? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Kunne ikke opprette en kobling mellom deg og tjeneren '{STRING}'.{}Vil du videresende denne økten via '{STRING}'? STR_NETWORK_ASK_RELAY_NO :{BLACK}Nei STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Ja, denne STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Ja, ikke spør igjen @@ -2538,17 +2537,17 @@ STR_NETWORK_SPECTATORS :Tilskuere # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ikke lagre passordet -STR_COMPANY_PASSWORD_OK :{BLACK}Gi firmaet det nye passordet -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Firmapassord -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Standard firmapassord -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Bruk dette passordet som standard for nye firmaer +STR_COMPANY_PASSWORD_OK :{BLACK}Gi selskapet det nye passordet +STR_COMPANY_PASSWORD_CAPTION :{WHITE}Selskapspassord +STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Standard selskapspassord +STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Bruk dette passordet som standard for nye selskap # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Bli med -STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Bli med og spill som dette firmaet +STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Bli med og spill som dette selskapet STR_COMPANY_VIEW_PASSWORD :{BLACK}Passord -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Passordbeskytt firmaet ditt for å forhindre uautoriserte brukere fra å bli med -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Velg firmapassord +STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Passordbeskytt selskapet ditt for å forhindre uautoriserte brukere fra å bli med +STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Velg selskapspassord # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Send @@ -2566,7 +2565,7 @@ STR_NETWORK_CHAT_OSKTITLE :{BLACK}Skriv in # Network messages STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Ingen nettverksadapter funnet -STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Tilkoblingen til serveren ble tidsavbrutt eller avslått +STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Tilkoblingen til tjeneren ble tidsavbrutt eller avslått STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Kunne ikke koble til pga. ulike versjoner av NewGRF STR_NETWORK_ERROR_DESYNC :{WHITE}Synkronisering av nettverksspill feilet. STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Mistet tilkobling til nettverksspill @@ -2574,7 +2573,7 @@ STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Kunne ik STR_NETWORK_ERROR_SERVER_START :{WHITE}Kunne ikke starte tjeneren STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Forbindelsen ble brutt pga. en protokollfeil STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Spillernavnet ditt er ikke angitt. Navnet kan angis øverst i flerspillervinduet -STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Du har ikke valgt servernavn. Navnet kan velges øverst i flerspillervinduet +STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Du har ikke valgt tjenernavn. Navnet kan velges øverst i flerspillervinduet STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Klientversjonen er ikke den samme som tjenerversjonen STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Feil passord STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Tjeneren er full @@ -2582,7 +2581,7 @@ STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Du er ba STR_NETWORK_ERROR_KICKED :{WHITE}Du ble kastet ut av spillet STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Grunn: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Juksing er ikke tillatt på denne tjeneren -STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Du sendte for mange kommandoer til serveren +STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Du sendte for mange kommandoer til tjeneren STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Du brukte for lang tid på å skrive inn passordet STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Din datamaskin er ikke rask nok til å holde følge med tjeneren STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Din datamaskin brukte for lang tid på å laste ned kartet @@ -2590,7 +2589,7 @@ STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Din data STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Spillernavnet ditt er ugyldig STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Mulig tap av tilkobling -STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE} Siste {NUM} sekund{P "" er} har ingen data ankommet fra serveren +STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE} Siste {NUM} sekund{P "" er} har ingen data ankommet fra tjeneren ###length 21 STR_NETWORK_ERROR_CLIENT_GENERAL :generell feil @@ -2604,7 +2603,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :mottok ugyldig STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :feil versjon STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :navnet er allerede i bruk STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :feil passord -STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :feil firma i DoCommand +STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :feil selskap i DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :kastet ut av tjeneren STR_NETWORK_ERROR_CLIENT_CHEATER :prøvde å jukse STR_NETWORK_ERROR_CLIENT_SERVER_FULL :tjeneren er full @@ -2646,9 +2645,9 @@ STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Tjeneren STR_NETWORK_MESSAGE_KICKED :*** {STRING} ble kastet ut. Grunn: ({STRING}) STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Serverregistrering mislykket -STR_NETWORK_ERROR_COORDINATOR_REUSE_OF_INVITE_CODE :{WHITE}En annen server med samme invitasjons kode finnes. Bytter til "lokal" modus. +STR_NETWORK_ERROR_COORDINATOR_REUSE_OF_INVITE_CODE :{WHITE}En annen tjener med samme invitasjonskode finnes. Bytter til "lokal" modus. STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}Serveren din tillater ikke eksterne tilkoblinger -STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Andre spillere vil ikke kunne koble seg til din server +STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Andre spillere vil ikke kunne koble seg til din tjener # Content downloading window STR_CONTENT_TITLE :{WHITE}Laster ned innhold @@ -2698,7 +2697,7 @@ STR_CONTENT_NO_ZLIB_SUB :{WHITE}...{NBSP # Order of these is important! STR_CONTENT_TYPE_BASE_GRAPHICS :Grafikk STR_CONTENT_TYPE_NEWGRF :NewGRF -STR_CONTENT_TYPE_AI :AI +STR_CONTENT_TYPE_AI :KI STR_CONTENT_TYPE_AI_LIBRARY :KI-bibliotek STR_CONTENT_TYPE_SCENARIO :Scenario STR_CONTENT_TYPE_HEIGHTMAP :Høydekart @@ -2861,12 +2860,12 @@ STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_BRIDGE_NAME_SUSPENSION_STEEL :Hengebro, stål STR_BRIDGE_NAME_GIRDER_STEEL :Bjelker, stål -STR_BRIDGE_NAME_CANTILEVER_STEEL :Frittbærende, stål +STR_BRIDGE_NAME_CANTILEVER_STEEL :Fritt frambygg-bro, stål STR_BRIDGE_NAME_SUSPENSION_CONCRETE :Hengebro, betong STR_BRIDGE_NAME_WOODEN :Tre STR_BRIDGE_NAME_CONCRETE :Betong -STR_BRIDGE_NAME_TUBULAR_STEEL :Hvelv, stål -STR_BRIDGE_TUBULAR_SILICON :Hvelv, Silisium +STR_BRIDGE_NAME_TUBULAR_STEEL :Rør, stål +STR_BRIDGE_TUBULAR_SILICON :Rør, Silisium # Road construction toolbar @@ -2997,10 +2996,10 @@ STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Reduser STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Generer tilfeldig landskap STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Opprett et nytt scenario STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Tilbakestill landskap -STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Fjern all spiller-eid eiendom fra kartet +STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Fjern all selskapseid eiendom fra kartet STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Tilbakestill landskap -STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Er du sikker på at du vil fjerne all spiller-eid eiendom? +STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Er du sikker på at du vil fjerne all selskapseid eiendom? # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Bygenerering @@ -3131,13 +3130,13 @@ STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Jernbanespor me STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Jernbanespor med kombinasjon- og avanserte signaler STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Jernbanespor med kombinasjon- og enveis avanserte signaler STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Jernbanespor med avanserte- og enveis avanserte signaler -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Jernbane-togstall +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Jernbanetogstall STR_LAI_ROAD_DESCRIPTION_ROAD :Vei STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Vei med gatelykter STR_LAI_ROAD_DESCRIPTION_TREE_LINED_ROAD :Aveny STR_LAI_ROAD_DESCRIPTION_ROAD_VEHICLE_DEPOT :Garasje -STR_LAI_ROAD_DESCRIPTION_ROAD_RAIL_LEVEL_CROSSING :Jernbaneovergang +STR_LAI_ROAD_DESCRIPTION_ROAD_RAIL_LEVEL_CROSSING :Planovergang STR_LAI_ROAD_DESCRIPTION_TRAMWAY :Trikkespor # Houses come directly from their building names @@ -3170,25 +3169,25 @@ STR_LAI_TUNNEL_DESCRIPTION_ROAD :Veitunnel STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_STEEL :Hengebro av stål (jernbane) STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL :Bjelkebro av stål (jernbane) -STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL :Frittbærende bro av stål (jernbane) +STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL :Fritt frambygg-bro av stål (jernbane) STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_CONCRETE :Hengebro av armert betong (jernbane) STR_LAI_BRIDGE_DESCRIPTION_RAIL_WOODEN :Trebro (jernbane) STR_LAI_BRIDGE_DESCRIPTION_RAIL_CONCRETE :Betongbro (jernbane) -STR_LAI_BRIDGE_DESCRIPTION_RAIL_TUBULAR_STEEL :Hvelvbro (jernbane) +STR_LAI_BRIDGE_DESCRIPTION_RAIL_TUBULAR_STEEL :Rørbro (jernbane) STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_STEEL :Hengebro av stål (vei) STR_LAI_BRIDGE_DESCRIPTION_ROAD_GIRDER_STEEL :Bjelkebro av stål (vei) -STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL :Frittbærende bro av stål (vei) +STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL :Fritt frambygg-bro av stål (vei) STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_CONCRETE :Hengebro av armert betong (vei) STR_LAI_BRIDGE_DESCRIPTION_ROAD_WOODEN :Trebro (vei) STR_LAI_BRIDGE_DESCRIPTION_ROAD_CONCRETE :Betongbro (vei) -STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL :Hvelvbro (vei) +STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL :Rørbro (vei) STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT :Akvedukt STR_LAI_OBJECT_DESCRIPTION_TRANSMITTER :Radiosender STR_LAI_OBJECT_DESCRIPTION_LIGHTHOUSE :Fyrtårn -STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Firmaets hovedkontor +STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Selskapets hovedkontor STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Selskapseid landområde # About OpenTTD window @@ -3539,7 +3538,7 @@ STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Inneholder fler STR_NEWGRF_ERROR_READ_BOUNDS :Leste forbi slutten av pseudo-sprite (figur {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :Etterspurte GRF-ressurser ikke tilgjengelig (figur {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} ble deaktivert av {STRING} -STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ugyldig/ukjent sprite layout-format (figur {3:NUM}) +STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ugyldig/ukjent sprite layoutformat (figur {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :For mange elementer i fortegnelse over eiendomsverdier (sprite {3:NUM}, property {4:HEX}) STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ugyldig industriprodukjson callback (sprite {3:NUM}, "{2:STRING}") @@ -3565,7 +3564,7 @@ STR_NEWGRF_LIST_MISSING :{RED}Manglende # NewGRF 'it's broken' warnings STR_NEWGRF_BROKEN :{WHITE}Atferden til NewGRF '{STRING}' vil trolig forårsake synkroniseringsfeil og/eller krasj. -STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Det endret maskinvogn-tilstand for '{1:ENGINE}' mens det er utenfor en togstall. +STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Det endret maskinvogntilstand for '{1:ENGINE}' mens det er utenfor en togstall. STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Det endret kjøretøylengde for '{1:ENGINE}' når utenfor en togstall. STR_NEWGRF_BROKEN_CAPACITY :{WHITE} Det endret kjøretøykapasitet for '{1:ENGINE}' når ikke i et depot eller under ombygging STR_BROKEN_VEHICLE_LENGTH :{WHITE}Tog '{VEHICLE}' tilhørende '{COMPANY}' har ugyldig lengde. Dette skyldes trolig problemer med NewGRF-er. Spillet kan bli usynkronisert eller krasje. @@ -3645,7 +3644,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Endre bynavnet STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN}s lokale myndigheter STR_LOCAL_AUTHORITY_ZONE :{BLACK}Område STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Vis zonene innenfor de lokale myndigheters grenser -STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Vurdering av transportfirma: +STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Rangering av transportselskap: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Handlinger tilgjengelig: STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Liste over ting som kan gjøres for/i byen - klikk på valg for mer informasjon @@ -3657,7 +3656,7 @@ STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN :Liten reklameka STR_LOCAL_AUTHORITY_ACTION_MEDIUM_ADVERTISING_CAMPAIGN :Middels stor reklamekampanje STR_LOCAL_AUTHORITY_ACTION_LARGE_ADVERTISING_CAMPAIGN :Stor reklamekampanje STR_LOCAL_AUTHORITY_ACTION_ROAD_RECONSTRUCTION :Finansier ombygging av byens veinett -STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :Bygg statue av firmaets grunnlegger +STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :Bygg statue av selskapets grunnlegger STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Finansier nye bygninger STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Kjøp eksklusive transportrettigheter STR_LOCAL_AUTHORITY_ACTION_BRIBE :Bestikk de lokale myndighetene @@ -3680,7 +3679,7 @@ STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globale STR_GOALS_SPECTATOR :Globale mål STR_GOALS_GLOBAL_BUTTON :{BLACK}Global STR_GOALS_GLOBAL_BUTTON_HELPTEXT :{BLACK}Vis globale målsetninger -STR_GOALS_COMPANY_BUTTON :{BLACK}Firma +STR_GOALS_COMPANY_BUTTON :{BLACK}Selskap STR_GOALS_COMPANY_BUTTON_HELPTEXT :{BLACK}Vis selskapets målsetninger STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Ingen - @@ -3877,7 +3876,7 @@ STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Infrastr # Company view STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY} {BLACK}{COMPANY_NUM} -STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Sjef) +STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Leder) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Grunnlagt: {WHITE}{NUM} STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Selskapsfarge: @@ -3887,7 +3886,7 @@ STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} STR_COMPANY_VIEW_AIRCRAFT :{WHITE}{COMMA} luftfartøy STR_COMPANY_VIEW_SHIPS :{WHITE}{COMMA} skip STR_COMPANY_VIEW_VEHICLES_NONE :{WHITE}Ingen -STR_COMPANY_VIEW_COMPANY_VALUE :{GOLD}Firmaverdi: {WHITE}{CURRENCY_LONG} +STR_COMPANY_VIEW_COMPANY_VALUE :{GOLD}Selskapsverdi: {WHITE}{CURRENCY_LONG} STR_COMPANY_VIEW_INFRASTRUCTURE :{GOLD}Infrastruktur: STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA} jernbanebit{P "" er} STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} veibit{P "" er} @@ -3898,28 +3897,28 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Ingen STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Bygg hovedkontor STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Bygg selskapets hovedkontor -STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Se firmaets hovedkontor -STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Vis firmaets hovedkontor -STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Flytt firmaets hovedkontor -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Flytt firmaets hovedkontor til et annet sted for en kostnad av 1% av verdien til selskapet. Trykk også Shift for å kun vise kostnadsestimat +STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Vis hovedkontor +STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Vis selskapets hovedkontor +STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Flytt selskapets hovedkontor +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Flytt selskapets hovedkontor til et annet sted for en kostnad av 1% av verdien til selskapet. Trykk også Shift for å kun vise kostnadsestimat STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detaljer STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Vis detaljert infrastrukturtelling STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Gi penger -STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Gi penger til dette firmaet +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Gi penger til dette selskapet STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Fientlig overtakelse STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Gjør en fiendtlig overtagelse av dette selskapet STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nytt ansikt -STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Velg nytt ansikt på sjefen +STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Velg nytt ansikt på leder STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Selskapsfarge STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Endre selskapsfarge -STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Firmanavn -STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}Endre firmanavn -STR_COMPANY_VIEW_PRESIDENT_NAME_BUTTON :{BLACK}Sjefens navn -STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Endre sjefens navn +STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Selskapsnavn +STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}Endre selskapsnavn +STR_COMPANY_VIEW_PRESIDENT_NAME_BUTTON :{BLACK}Lederens navn +STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Endre lederens navn -STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Firmanavn -STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Sjefens navn +STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Selskapsnavn +STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Lederens navn STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Skriv inn hvor mye penger du vil gi STR_BUY_COMPANY_MESSAGE :{WHITE}Vi ser etter et transportselskap som er villig til å overta oss.{}{}Vil du kjøpe {COMPANY} for {CURRENCY_LONG}? @@ -4010,7 +4009,7 @@ STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Send til hangar STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Klikk for å stoppe alle kjøretøy i listen STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Klikk for å starte alle kjøretøy i listen -STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Se en liste over tilgjengelige modeller for denne kjøretøytypen. +STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Se en liste over tilgjengelige lokomotivmodeller for denne typen jernbanemateriell STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}Delte ordre av {COMMA} kjøretøy @@ -4055,8 +4054,8 @@ STR_GROUP_OCCUPANCY_VALUE :{NUM} % ###length 4 STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Nytt jernbanemateriell STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Nytt elektrisk jernbanemateriell -STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Nye tog/vogner for monorail -STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Nye tog/vogner for maglev +STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Nytt jernbanemateriell for monorail +STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Nytt jernbanemateriell for maglev STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Nye kjøretøy STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Nye trikkekjøretøy @@ -4108,7 +4107,7 @@ STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Liste ov STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Liste over luftfartøy. Klikk på luftfartøyet for mer informasjon. Ctrl+klikk for å vise eller skjule denne typen luftfartøy ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Kjøp tog/vogn +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Kjøp jernbanemateriell STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Kjøp kjøretøy STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Kjøp skip STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Kjøp luftfartøy @@ -4185,7 +4184,7 @@ STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Skip - h STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Luftfartøy - høyreklikk på luftfartøy for mer informasjon ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Dra tog/vogn hit for å selge det +STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Dra jernbanemateriell hit for å selge det STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Dra kjøretøy hit for å selge det STR_DEPOT_SHIP_SELL_TOOLTIP :{BLACK}Dra skip hit for å selge det STR_DEPOT_AIRCRAFT_SELL_TOOLTIP :{BLACK}Dra luftfartøy hit for å selge det @@ -4203,13 +4202,13 @@ STR_DEPOT_AUTOREPLACE_SHIP_TOOLTIP :{BLACK}Autoerst STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}Autoerstatt alle luftfartøy i hangaren ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON :{BLACK}Nye tog/vogner +STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON :{BLACK}Nytt jernbanemateriell STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_BUTTON :{BLACK}Nye kjøretøy STR_DEPOT_SHIP_NEW_VEHICLES_BUTTON :{BLACK}Nye skip STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Nye luftfartøy ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Kjøp nytt tog/vogn +STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Kjøp nytt jernbanemateriell STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Kjøp nytt kjøretøy STR_DEPOT_SHIP_NEW_VEHICLES_TOOLTIP :{BLACK}Kjøp nytt skip STR_DEPOT_AIRCRAFT_NEW_VEHICLES_TOOLTIP :{BLACK}Kjøp nye luftfartøy @@ -4255,7 +4254,7 @@ STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Du er n # Engine preview window STR_ENGINE_PREVIEW_CAPTION :{WHITE}Melding fra kjøretøysprodusent -STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Vi har nettopp designet e{G n i t} ny{G "" "" tt} {STRING} - er du interessert i ett års ekslusivt bruk av dette, slik at vi kan se hvordan det virker før det blir allment tilgjengelig? +STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Vi har nettopp designet e{G n i t} ny{G "" "" tt} {STRING} - er du interessert i ett års ekslusivt bruk av de{G 0 n n t}, slik at vi kan se hvordan de{G 0 n n t} virker før de{G 0 n n t} blir allment tilgjengelig? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :{G=neuter}lokomotiv STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :{G=neuter}elektrisk lokomotiv @@ -4308,7 +4307,7 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} når g STR_REPLACE_VEHICLES_STOP :{BLACK}Stopp erstatning av kjøretøy STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Klikk denne knappen for å stoppe erstatning av lokomotivet som er valgt på venstresiden -STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Veksle mellom tog- og vognerstatningsvinduet +STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Veksle mellom lokomotiv- og vognerstatningsvinduene STR_REPLACE_ENGINES :Lokomotiv STR_REPLACE_WAGONS :Vogner STR_REPLACE_ALL_RAILTYPE :Alt jernbanemateriell @@ -4322,8 +4321,8 @@ STR_REPLACE_HELP_ROADTYPE :{BLACK}Velg vei STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Viser hvilket lokomotiv som overtar for det valgte lokomotivet på venstresiden STR_REPLACE_RAIL_VEHICLES :Jernbanemateriell STR_REPLACE_ELRAIL_VEHICLES :Elektrisk jernbanemateriell -STR_REPLACE_MONORAIL_VEHICLES :Monorail-kjøretøy -STR_REPLACE_MAGLEV_VEHICLES :Maglev-kjøretøy +STR_REPLACE_MONORAIL_VEHICLES :Monorail-materiell +STR_REPLACE_MAGLEV_VEHICLES :Maglev-materiell STR_REPLACE_ROAD_VEHICLES :Kjøretøy STR_REPLACE_TRAM_VEHICLES :Trikkekjøretøy @@ -4355,7 +4354,7 @@ STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Kjøp en STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Tving toget til å fortsette uten å vente på klarsignal STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Snu togets kjøreretning -STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Tving kjøretøy til å snu om +STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Tving kjøretøy til å snu STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Sentrer hovedvisningen på ordrens destinasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på lokasjonen til ordrens destinasjon ###length VEHICLE_TYPES @@ -4488,7 +4487,7 @@ STR_VEHICLE_DETAILS_CARGO_FROM_MULT :{LTBLUE}{CARGO_ STR_VEHICLE_DETAIL_TAB_CARGO :{BLACK}Varer STR_VEHICLE_DETAILS_TRAIN_CARGO_TOOLTIP :{BLACK}Vis detaljer om innholdet i vognene STR_VEHICLE_DETAIL_TAB_INFORMATION :{BLACK}Informasjon -STR_VEHICLE_DETAILS_TRAIN_INFORMATION_TOOLTIP :{BLACK}Vis detaljer om tog/vogner +STR_VEHICLE_DETAILS_TRAIN_INFORMATION_TOOLTIP :{BLACK}Vis detaljer om jernbanemateriell STR_VEHICLE_DETAIL_TAB_CAPACITIES :{BLACK}Kapasitet STR_VEHICLE_DETAILS_TRAIN_CAPACITIES_TOOLTIP :{BLACK}Vis kapasiteten til vognene STR_VEHICLE_DETAIL_TAB_TOTAL_CARGO :{BLACK}Total last @@ -4843,7 +4842,7 @@ STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Oversikt # Script Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametre -STR_AI_SETTINGS_CAPTION_AI :AI +STR_AI_SETTINGS_CAPTION_AI :KI STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script STR_AI_SETTINGS_CLOSE :{BLACK}Lukk STR_AI_SETTINGS_RESET :{BLACK}Tilbakestill @@ -4957,7 +4956,7 @@ STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Kan ikke STR_ERROR_SITE_UNSUITABLE :{WHITE}...{NBSP}feltet er uegnet STR_ERROR_ALREADY_BUILT :{WHITE}... allerede bygget STR_ERROR_OWNED_BY :{WHITE}...{NBSP}eies av {STRING} -STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... området eies av et annet firma +STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... området eies av et annet selskap STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... grense for landskapsendring er nådd STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... ruterensingens grense nådd STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... tre planterings grense nådd @@ -4982,8 +4981,8 @@ STR_ERROR_ALREADY_LEVELLED :{WHITE}... alle STR_ERROR_BRIDGE_TOO_HIGH_AFTER_LOWER_LAND :{WHITE}Etterpå vil broen over den være for høy. # Company related errors -STR_ERROR_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Kan ikke endre firmaets navn... -STR_ERROR_CAN_T_CHANGE_PRESIDENT :{WHITE}Kan ikke endre sjefens navn... +STR_ERROR_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Kan ikke endre selskapets navn... +STR_ERROR_CAN_T_CHANGE_PRESIDENT :{WHITE}Kan ikke endre lederens navn... STR_ERROR_MAXIMUM_PERMITTED_LOAN :{WHITE}... største tillatte lån er {CURRENCY_LONG} STR_ERROR_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Kan ikke låne mer penger... @@ -4991,9 +4990,9 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... inge STR_ERROR_CURRENCY_REQUIRED :{WHITE}... du trenger {CURRENCY_LONG} STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Kan ikke betale tilbake lån... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Kan ikke gi bort penger som er lånt fra banken... -STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Kan ikke gi bort penger til dette firmaet... -STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Kan ikke kjøpe firma... -STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Kan ikke bygge firmaets hovedkontor... +STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Kan ikke gi bort penger til dette selskapet... +STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Kan ikke kjøpe selskap... +STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Kan ikke bygge selskapets hovedkontor... # Town related errors STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Kan ikke grunnlegge noen byer @@ -5085,7 +5084,7 @@ STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Kan ikke STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Kan ikke fjerne veipunkt for tog her... STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Må fjerne veipunkt for tog først STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... bøyen er i veien -STR_ERROR_BUOY_IS_IN_USE :{WHITE}... bøyen er i bruk av et annet firma! +STR_ERROR_BUOY_IS_IN_USE :{WHITE}... bøyen er i bruk av et annet selskap! # Depot related errors STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Kan ikke bygge togstall her... @@ -5102,12 +5101,12 @@ STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}... må STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Tog kan kun endres når det har stoppet i togstallen STR_ERROR_TRAIN_TOO_LONG :{WHITE}Toget er for langt -STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Kan ikke snu om kjøreretningen til kjøretøy... +STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Kan ikke reversere retningen til jernbanemateriell... STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}... består av flere deler STR_ERROR_INCOMPATIBLE_RAIL_TYPES :Inkompatible jernbanetyper STR_ERROR_CAN_T_MOVE_VEHICLE :{WHITE}Kan ikke flytte kjøretøy... -STR_ERROR_REAR_ENGINE_FOLLOW_FRONT :{WHITE}Bakre maskin vil alltid følge det fremste motstykket +STR_ERROR_REAR_ENGINE_FOLLOW_FRONT :{WHITE}Bakre lokomotiv vil alltid følge fremre lokomotiv STR_ERROR_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Finner ingen rute til nærmeste garasje/stall/hangar/dokk STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Kan ikke finne en garasje/stall/hangar/dokk i nærheten @@ -5201,7 +5200,7 @@ STR_ERROR_TUNNEL_TOO_LONG :{WHITE}... tunn STR_ERROR_TOO_MANY_OBJECTS :{WHITE}... for mange objekter STR_ERROR_CAN_T_BUILD_OBJECT :{WHITE}Kan ikke bygge objekt... STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Objekt er i veien -STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... firmaets hovedkontor er i veien +STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... selskapets hovedkontor er i veien STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Kan ikke kjøpe dette landområdet... STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... du eier det allerede! STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}... nådd grense for byggetiltak @@ -5286,7 +5285,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Starte e # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan ikke tvinge tog til å passere signal ved fare... -STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Kan ikke snu om toget... +STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Kan ikke reversere toget... STR_ERROR_TRAIN_START_NO_POWER :Tog mangler kraft STR_ERROR_CAN_T_MAKE_ROAD_VEHICLE_TURN :{WHITE}Kan ikke snu om kjøretøy... @@ -5409,7 +5408,7 @@ STR_INDUSTRY_NAME_FARM :{G=masculine}G STR_INDUSTRY_NAME_COPPER_ORE_MINE :{G=feminine}Kobbergruve STR_INDUSTRY_NAME_OIL_WELLS :{G=masculine}Oljebrønn STR_INDUSTRY_NAME_BANK :{G=masculine}Bank -STR_INDUSTRY_NAME_FOOD_PROCESSING_PLANT :{G=masculine}Matforedlingsfabrikk +STR_INDUSTRY_NAME_FOOD_PROCESSING_PLANT :{G=masculine}Matvareindustri STR_INDUSTRY_NAME_PAPER_MILL :{G=masculine}Papirfabrikk STR_INDUSTRY_NAME_GOLD_MINE :{G=feminine}Gullgruve STR_INDUSTRY_NAME_BANK_TROPIC_ARCTIC :{G=masculine}Bank @@ -5441,7 +5440,7 @@ STR_INDUSTRY_NAME_SUGAR_MINE :{G=feminine}Suk STR_SV_EMPTY : STR_SV_UNNAMED :Uten navn STR_SV_TRAIN_NAME :Tog #{COMMA} -STR_SV_ROAD_VEHICLE_NAME :Vegkjøretøy #{COMMA} +STR_SV_ROAD_VEHICLE_NAME :Kjøretøy #{COMMA} STR_SV_SHIP_NAME :Skip #{COMMA} STR_SV_AIRCRAFT_NAME :Luftfartøy #{COMMA} @@ -5458,7 +5457,7 @@ STR_SV_STNAME_VALLEY :{STRING}dalen STR_SV_STNAME_HEIGHTS :{STRING}haugen STR_SV_STNAME_WOODS :{STRING}vollen STR_SV_STNAME_LAKESIDE :{STRING}sjøen -STR_SV_STNAME_EXCHANGE :{STRING}moen +STR_SV_STNAME_EXCHANGE :{STRING}krysset STR_SV_STNAME_AIRPORT :{STRING} lufthavn STR_SV_STNAME_OILFIELD :{STRING} oljefelt STR_SV_STNAME_MINES :{STRING}gruva @@ -5528,7 +5527,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_SUGAR_TRUCK :Sukkervogn STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COTTON_CANDY_HOPPER :Sukkerspinnvogn STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOFFEE_HOPPER :Karamellvogn STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BUBBLE_VAN :Boblevogn -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COLA_TANKER :Colavogn +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COLA_TANKER :Colatankvogn STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_CANDY_VAN :Godterivogn STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOY_VAN :Leketøyvogn STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BATTERY_TRUCK :Batterivogn @@ -5558,7 +5557,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_SUGAR_TRUCK :Sukkervogn STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COTTON_CANDY_HOPPER :Sukkerspinnvogn STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOFFEE_HOPPER :Karamellvogn STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BUBBLE_VAN :Boblevogn -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COLA_TANKER :Colavogn +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COLA_TANKER :Colatankvogn STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_CANDY_VAN :Godterivogn STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :Leketøyvogn STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BATTERY_TRUCK :Batterivogn @@ -5590,7 +5589,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_SUGAR_TRUCK :Sukkervogn STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COTTON_CANDY_HOPPER :Sukkerspinnvogn STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOFFEE_HOPPER :Karamellvogn STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BUBBLE_VAN :Boblevogn -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COLA_TANKER :Colavogn +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COLA_TANKER :Colatankvogn STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_CANDY_VAN :Godterivogn STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOY_VAN :Leketøyvogn STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BATTERY_TRUCK :Batterivogn @@ -5695,10 +5694,10 @@ STR_VEHICLE_NAME_SHIP_FFP_PASSENGER_FERRY :FFP-passasjerfe STR_VEHICLE_NAME_SHIP_BAKEWELL_300_HOVERCRAFT :Bakewell 300-luftputeskip STR_VEHICLE_NAME_SHIP_CHUGGER_CHUG_PASSENGER :Chugger-Chug-passasjerferje STR_VEHICLE_NAME_SHIP_SHIVERSHAKE_PASSENGER_FERRY :Shivershake-passasjerferje -STR_VEHICLE_NAME_SHIP_YATE_CARGO_SHIP :Yate kontainerskip -STR_VEHICLE_NAME_SHIP_BAKEWELL_CARGO_SHIP :Bakewell kontainerskip -STR_VEHICLE_NAME_SHIP_MIGHTYMOVER_CARGO_SHIP :MightyMover kontainerskip -STR_VEHICLE_NAME_SHIP_POWERNAUT_CARGO_SHIP :Powernaut kontainerskip +STR_VEHICLE_NAME_SHIP_YATE_CARGO_SHIP :Yate-kontainerskip +STR_VEHICLE_NAME_SHIP_BAKEWELL_CARGO_SHIP :Bakewell-kontainerskip +STR_VEHICLE_NAME_SHIP_MIGHTYMOVER_CARGO_SHIP :MightyMover-kontainerskip +STR_VEHICLE_NAME_SHIP_POWERNAUT_CARGO_SHIP :Powernaut-kontainerskip ###length 41 STR_VEHICLE_NAME_AIRCRAFT_SAMPSON_U52 :Sampson U52 @@ -5750,7 +5749,7 @@ STR_FORMAT_DATE_SHORT :{STRING} {NUM} STR_FORMAT_DATE_LONG :{STRING} {STRING} {NUM} STR_FORMAT_DATE_ISO :{2:NUM}-{1:ZEROFILL_NUM}-{0:ZEROFILL_NUM} -STR_FORMAT_COMPANY_NUM :(Firma {COMMA}) +STR_FORMAT_COMPANY_NUM :(Selskap {COMMA}) STR_FORMAT_GROUP_NAME :Gruppe {COMMA} STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{TOWN} {STRING} diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index d18fb16a2c..72bfe53144 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1012,6 +1012,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Hindistan Rupis STR_GAME_OPTIONS_CURRENCY_IDR :Endonezya Rupiahı STR_GAME_OPTIONS_CURRENCY_MYR :Malezya Ringgiti STR_GAME_OPTIONS_CURRENCY_LVL :Letonya Latsı +STR_GAME_OPTIONS_CURRENCY_PTE :Portekiz Esküdosu STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Otomatik Kaydet STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Otomatik kaydetme sıklığını seçin @@ -1054,9 +1055,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Eğimi a STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Eğimi arayüz boyutuna göre ayarlamak için bu kutucuğu işaretleyin STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK} Geleneksel yazı tipini kullan -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK} Yazı tipini geleneksel eski haline döndürmek için bu kutucuğu işaretleyin +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Yazı tipini geleneksel sabit boyutlu haline döndürmek için bu kutucuğu işaretleyin STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Yazı tipi kenarlarını yumuşatma -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :Yeniden boyutlandırılabilir yazı tiplerinin kenarlarını yumuşatmak için bu kutuyu işaretleyin. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Yeniden boyutlandırılabilir yazı tiplerinin kenarlarını yumuşatmak için bu kutuyu işaretleyin STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1118,6 +1119,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Bir Ster STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Bir Sterlin'e (£) karşılık gelen para biriminizi arttırın STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Bir Sterlin'e (£) karşılık gelen para biriminizi belirleyin +STR_CURRENCY_SEPARATOR :{LTBLUE}Ayraç: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Para biriminiz için binler ayracını belirleyin STR_CURRENCY_PREFIX :{LTBLUE}Ön ek: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Para biriminiz için ön ek belirleyin @@ -1540,7 +1543,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Grafiklerdeki STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :NewGRF'nin adını araç inşa penceresinde göster: {STRING} STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Araç inşa penceresine, seçilen aracın hangi NewGRF'den geldiğini gösteren bir satır ekleyin. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Liste menüsünde araçların taşıyabildiği kargoları göster {STRING} +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Liste pencerelerinde araçların taşıyabildiği kargoları göster: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Etkinleştirildiğinde, araç listesinin üstünde aracın nakliye edilebilir yükü gözükür STR_CONFIG_SETTING_LANDSCAPE :İklim: {STRING} @@ -1565,7 +1568,7 @@ STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Kar kalınlığ STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Kutupsal arazide, karın ne kadar yükseklikten başlayacağını denetleyin. Kar aynı zamanda fabrika oluşumunu ve şehir gelişme gereksinimini de etkiler. Yalnızca Senerya Editörü ile değiştirilebilir veya "kar örtüsü" üzerinden hesaplanır STR_CONFIG_SETTING_SNOW_COVERAGE :Kar örtüsü: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Arktik altındaki yaklaşık kar miktarını kontrol eder. Kar, aynı zamanda endüstri üretimini ve kasaba büyüme gereksinimlerini de etkiler. Yalnızca harita oluşumu sırasında kullanılır. Deniz seviyesinin hemen üzerindeki arazi her zaman karsızdır +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Arktik altındaki yaklaşık kar miktarını ayarlayın. Kar, aynı zamanda endüstri üretimini ve kasaba büyüme gereksinimlerini de etkiler. Yalnızca harita oluşumu sırasında kullanılır. Deniz seviyesindeki ve sahildeki araziler her zaman karsızdır STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :%{NUM} STR_CONFIG_SETTING_DESERT_COVERAGE :Çöl örtüsü: {STRING} @@ -1749,10 +1752,10 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Yapı araçlar STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Köprü, tünel vb. için kullanılan inşa araçlarını kullanımdan sonra da açık tut STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Ray yapımı sırasında sinyalleri otomatik olarak kaldır: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Ray yapımı sırasında sinyaller yolun üzerinde ise otomatik kaldır. Bunun potansiyel olarak tren kazalarına yol açabileceğini unutmayın. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Ray yapımı sırasında sinyaller yolun üzerinde ise otomatik kaldır. Bunun potansiyel olarak tren kazalarına yol açabileceğini unutmayın STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :İleri sarma hız limiti: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Hızlı ileri sarma etkinleştirildiğinde oyunun ne kadar hızlı sarıldığını sınırlayın. 0 = sınır yok (bilgisayarın el verdiği kadar). %100'ün altındaki değerler oyunu yavaşlatır. Üst sınır bilgisayarının özelliklerine ve oyuna göre değişkenlik gösterebilir. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Hızlı ileri sarma etkinleştirildiğinde oyunun ne kadar hızlı sarıldığını sınırlayın. 0 = sınır yok (bilgisayarın el verdiği kadar). %100'ün altındaki değerler oyunu yavaşlatır. Üst sınır bilgisayarının özelliklerine ve oyuna göre değişkenlik gösterebilir STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :%{NUM} normal oyun hızı ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Limit yok (bilgisayarın izin verdiği maksimum hızda ) @@ -1820,7 +1823,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Tek bir betiği STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Servis gecikmeleri yüzde ile: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Etkinleştirildiğinde, araçların güvenilirlik değerinin azami güvenilirliğe kıyasla belli bir yüzde oranında düşmesine bağlı olarak bakım yapar.{}{}Örneğin, eğer aracın azami güvenirliği %90 ve bakım aralığı %20 ise araç %72 güvenilirliğe ulaştığında bakım yapmayı dener. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Etkinleştirildiğinde, araçların güvenilirlik değerinin azami güvenilirliğe kıyasla belli bir yüzde oranında düşmesine bağlı olarak bakım yapar.{}{}Örneğin, eğer aracın azami güvenirliği %90 ve bakım aralığı %20 ise araç %72 güvenilirliğe ulaştığında bakım yapmayı dener STR_CONFIG_SETTING_SERVINT_TRAINS :Trenler için varsayılan bakım aralığı: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Yeni tren yolu araçları için varsayılan bakım aralığını ayarlar, eğer araç için özel bir bakım aralığı belirtilmemişse geçerlidir @@ -2034,13 +2037,13 @@ STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Dağılım graf STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Bir bağlantı grafiği bileşeninin her yeniden hesaplanması için geçen süre. Bir yeniden hesaplama başlatıldığında, bu sayıda saniye boyunca çalışmasına izin verilen bir iş parçacığı oluşturulur. Bunu ne kadar kısa ayarlarsanız, iş parçacığının olması gerektiği zamanda bitmemiş olma olasılığı o kadar artar. Ardından oyun ("gecikme") olana kadar durur. Ne kadar uzun ayarlarsanız, rotalar değiştiğinde dağıtımın güncellenmesi o kadar uzun sürer. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Yolcular için dağıtım kipi: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simetrik" seçildiğinde A durağından B durağına taşınan ile B'den A'ya taşınan yolcu miktarı kabaca eşit olur. "Asimetrik" seçildiğinde iki yönde de rastgele miktarda yolcu gönderilebilir. "el ile" seçildiğinde yolcular için otomatik dağıtım yapılmaz. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simetrik" seçildiğinde A durağından B durağına taşınan ile B'den A'ya taşınan yolcu miktarı kabaca eşit olur. "Asimetrik" seçildiğinde iki yönde de rastgele miktarda yolcu gönderilebilir. "el ile" seçildiğinde yolcular için otomatik dağıtım yapılmaz STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Posta için dağıtım kipi: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simetrik" seçildiğinde A durağından B durağına gönderilen ile B'den A'ya gönderilen posta miktarı kabaca eşit olur. "Asimetrik" seçildiğinde iki yönde de rastgele miktarda posta gönderilebilir. "El ile" seçildiğinde posta için otomatik dağıtım yapılmaz. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simetrik" seçildiğinde A durağından B durağına gönderilen ile B'den A'ya gönderilen posta miktarı kabaca eşit olur. "Asimetrik" seçildiğinde iki yönde de rastgele miktarda posta gönderilebilir. "El ile" seçildiğinde posta için otomatik dağıtım yapılmaz STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :ZIRHLI kargo sınıfı için dağıtım kipi: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :ZIRHLI kargo sınıfı ılıman iklimde değerli mallar, yarı-tropik iklimde elmaslar, veya yarı-soğuk iklimde altın içerir. NewGRF dosyaları bunu değiştirebilir. "Simetrik" olarak ayarlandığında A durağından B durağına gönderilen kargo miktarı, B'den A'ya gönderilene kabaca eşit olur. "Asimetrik" ise herhangi bir yönde rastgele miktarda kargo gönderilebileceğini gösterir. "El ile" seçildiğinde o kargo için otomatik dağıtım yapılmaz. Yarı-soğuk iklimde oynarken bu değeri "asimetrik" veya "el ile" olarak ayarlamanız tavsiye edilir, çünkü bankalar altınları altın madenine geri göndermez. Ilıman ve yarı-tropik iklim için aynı zamanda "simetrik" seçebilirsiniz, zira bankalar değerli malların bir kısmını malların geldiği kaynak bankaya geri gönderir. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :ZIRHLI kargo sınıfı ılıman iklimde değerli mallar, yarı-tropik iklimde elmaslar, veya yarı-soğuk iklimde altın içerir. NewGRF dosyaları bunu değiştirebilir. "Simetrik" olarak ayarlandığında A durağından B durağına gönderilen kargo miktarı, B'den A'ya gönderilene kabaca eşit olur. "Asimetrik" ise herhangi bir yönde rastgele miktarda kargo gönderilebileceğini gösterir. "El ile" seçildiğinde o kargo için otomatik dağıtım yapılmaz. Yarı-soğuk iklimde oynarken bu değeri "asimetrik" veya "el ile" olarak ayarlamanız tavsiye edilir, çünkü bankalar altınları altın madenine geri göndermez. Ilıman ve yarı-tropik iklim için aynı zamanda "simetrik" seçebilirsiniz, zira bankalar değerli malların bir kısmını malların geldiği kaynak bankaya geri gönderir STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Diğer kargo sınıfları için dağılım kipi: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asimetrik", kargonun iki yönde de rastgele miktarda gönderileceğini gösterir. "El ile" seçildiği takdirde o kargolar için otomatik dağılım yapılmaz. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asimetrik", kargonun iki yönde de rastgele miktarda gönderileceğini gösterir. "El ile" seçildiği takdirde o kargolar için otomatik dağılım yapılmaz ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :el ile (manual) STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimetrik @@ -2055,7 +2058,7 @@ STR_CONFIG_SETTING_DEMAND_SIZE :Simetrik kip i STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Buraya %100'den küçük bir değer girmek simetrik dağılımın asimetrik bir dağılıma benzer şekilde davranmasına sebep olur. Eğer bir durağa belli miktar kargo gönderilmişse, daha az kargo zorla geri gönderilir. Eğer %0 olarak ayarlarsanız simetrik dağılım aynen asimetrik dağılım gibi davranmaya başlar. STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Yüksek kapasiteli güzergahları kullanmadan önce daha kısa güzergah doygunluğu: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Sıklıkla iki durak arasında birden fazla güzergah bulunur. Kargo dağıtımı önce en kısa güzergahı doygunluğa ulaştırır, ardından ikinci en kısa güzergahı doygunluğa ulaşana kadar kullanır ve böyle devam eder. Doygunluk, kapasite tahmini ve planlanan kullanım miktarına göre hesaplanır. Tüm güzergahlar doygunluğa ulaştığında eğer hala talep varsa, yüksek kapasiteli olan güzergahları tercih ederek tüm güzergahları aşırı yükler. Fakat çoğu zaman algoritma kapasiteyi isabetli olarak hesaplayamaz. Bu değer, daha kısa bir güzergahın yüzde kaç oranında doygunluğa ulaştığı zaman bir sonraki güzergahın seçileceğini ayarlamanızı sağlar. Yanlış (büyük) kapasite tahmini ihtimaline karşı aşırı dolu durakları önlemek için %100'den daha düşük bir değer seçin. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Sıklıkla iki durak arasında birden fazla güzergah bulunur. Kargo dağıtımı önce en kısa güzergahı doygunluğa ulaştırır, ardından ikinci en kısa güzergahı doygunluğa ulaşana kadar kullanır ve böyle devam eder. Doygunluk, kapasite tahmini ve planlanan kullanım miktarına göre hesaplanır. Tüm güzergahlar doygunluğa ulaştığında eğer hala talep varsa, yüksek kapasiteli olan güzergahları tercih ederek tüm güzergahları aşırı yükler. Fakat çoğu zaman algoritma kapasiteyi isabetli olarak hesaplayamaz. Bu değer, daha kısa bir güzergahın yüzde kaç oranında doygunluğa ulaştığı zaman bir sonraki güzergahın seçileceğini ayarlamanızı sağlar. Yanlış (büyük) kapasite tahmini ihtimaline karşı aşırı dolu durakları önlemek için %100'den daha düşük bir değer seçin STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Hız birimi (kara): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Hız birimleri (denizcilik): {STRING} @@ -2979,9 +2982,9 @@ STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Haritaya STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Arazinin üzerine sürükleyerek tekli ağaçlar dikin. STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Koru -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Arazinin üzerine sürükleyerek küçük ormanlar dikin. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Arazinin üzerine sürükleyerek küçük ormanlar dikin STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Orman -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Arazinin üzerine sürükleyerek büyük ormanlar dikin. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Arazinin üzerine sürükleyerek büyük ormanlar dikin # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Arazi Yapımı @@ -3077,6 +3080,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Tramvay STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Demiryolu sahibi: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Belediyesi: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Hiçbiri +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinatlar: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Kare indeksi: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}İnşa/yenileme tarihi: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}İstasyon sınıfı: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}İstasyon türü: {LTBLUE}{STRING} @@ -3198,7 +3203,7 @@ STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Saniyede STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafik kare oranı: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Saniyede işlenecek video kare sayısı. STR_FRAMERATE_SPEED_FACTOR :{BLACK}Şu anki oyun hız çarpanı: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Beklenen normal simülasyon hızı yerine, şu anda oyunun ne kadar hızlı çalıştığı. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Beklenen normal simülasyon hızı yerine, şu anda oyunun ne kadar hızlı çalıştığı STR_FRAMERATE_CURRENT :{WHITE}Geçerli STR_FRAMERATE_AVERAGE :{WHITE}Ortalama STR_FRAMERATE_MEMORYUSE :{WHITE}Bellek @@ -4022,7 +4027,7 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Gruplanmamış STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Gruplar - gruba ait araçları listelemek için grubun üzerine tıklayın. Hiyerarşiyi düzenlemek için grupları sürükleyip bırakın. +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Gruplar - gruba ait araçları listelemek için grubun üzerine tıklayın. Hiyerarşiyi düzenlemek için grupları sürükleyip bırakın STR_GROUP_CREATE_TOOLTIP :{BLACK}Grup oluşturmak için tıklayın STR_GROUP_DELETE_TOOLTIP :{BLACK}Seçili grubu sil STR_GROUP_RENAME_TOOLTIP :{BLACK}Seçili grubun ismini değiştir @@ -5816,6 +5821,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}m +STR_CURRENCY_SHORT_GIGA :{NBSP}bn +STR_CURRENCY_SHORT_TERA :{NBSP}tn STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index b2052d5a89..995d6ecf94 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -331,6 +331,7 @@ STR_COLOUR_SECONDARY_ORANGE :Помаран STR_COLOUR_SECONDARY_BROWN :Коричневий STR_COLOUR_SECONDARY_GREY :Сірий STR_COLOUR_SECONDARY_WHITE :Білий +STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Як базовий # Units used in OpenTTD @@ -578,6 +579,7 @@ STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Налашту STR_SETTINGS_MENU_AI_SETTINGS :Налаштування ШІ STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Налаштування ігрового скрипту STR_SETTINGS_MENU_NEWGRF_SETTINGS :Налаштування NewGRF +STR_SETTINGS_MENU_SANDBOX_OPTIONS :Налаштування пісочниці STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Налаштування прозорості STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Показувати назви міст STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Показувати назви станцій @@ -748,6 +750,8 @@ STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Варт STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Останні 72 хвилини STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Тарифи на доставку вантажів +STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Днів у русі +STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Секунд у русі STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Плата за доставку 10 одиниць (або 10,000 літрів) вантажу на відстань 20 квадратів STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Включити всі STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Відключити усі @@ -1573,7 +1577,7 @@ STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Налашту STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Частота повітряних катастроф: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Налаштування частоти повітряних катастроф.{}* Великі літаки мають більший ризик катастрофив малих аеропортах +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Налаштування частоти повітряних катастроф.{}* Великі літаки мають більший ризик катастроф у малих аеропортах ###length 3 STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Немає STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Низька @@ -1725,6 +1729,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :лівосто STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :правосторонній рух STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Поворот мапи висот: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Обрати напрям обертання мапи висот для припасування в ігровий світ ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :проти годинникової стрілки STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :за годинниковою стрілкою @@ -1940,7 +1945,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Максима STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Максимально допустима кількість розрахунків, які може виконати скрипт впродовж одного ходу STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Максимальне використання пам'яті скриптом: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Скільки пам'яті може зайняти один скрипт до примусового припинення. Це може знадобитися збільшити для великих карт. -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MБ STR_CONFIG_SETTING_SERVINT_ISPERCENT :Інтервали техогляду вказано у відсотках: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Налаштування способу визначення необхідності проведення техогляду: через вказаний проміжок часу після попереднього техогляду чи коли поточна надійність транспортного засобу стане нижчою від максимальної його надійності на вказаний процент. @@ -2008,7 +2013,7 @@ STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Показат STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Новий транспорт: {STRING} STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Показати газету, коли стає доступним новий засіб пересування -STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Зміни в списку грузів, що приймаються: {STRING} +STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Зміни в списку вантажів, що приймаються: {STRING} STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Показати повідомлення, якщо станція змінює приймані типи вантажів STR_CONFIG_SETTING_NEWS_SUBSIDIES :Субсидії: {STRING} @@ -2615,6 +2620,7 @@ 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 ія ії ій} +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}Кількість поточно з'єднаних клієнтів, кількість компаній і максимум компаній, дозволених адміністратором сервера # Matches ConnectionType ###length 5 @@ -4510,7 +4516,7 @@ STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Очі STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Занадто далеко до наступного місця призначення STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Прямує до {0:STATION} -STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Без завдань, {VELOCITY} +STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Без наказів STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Прямує до {0:WAYPOINT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Прямує до {0:DEPOT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Техогляд у {0:DEPOT} @@ -4757,6 +4763,7 @@ STR_ORDER_REFIT_ORDER :(Переобл STR_ORDER_REFIT_STOP_ORDER :(Переобладнати на {STRING} і зупинити) STR_ORDER_STOP_ORDER :(зупинити) +STR_ORDER_WAIT_TO_UNBUNCH :(чекає звільнення) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Неможливо використати станцію){POP_COLOUR} {STRING} {STATION} {STRING} @@ -5226,6 +5233,7 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Немо STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Неправильний тип депо # Depot unbunching related errors +STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... можливий тільки один звільнений наказ # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} дуже довгий після оновлення @@ -5429,6 +5437,7 @@ STR_ERROR_NO_DOCK :{WHITE}Нема STR_ERROR_NO_AIRPORT :{WHITE}Немає аеропорту або геліпорту STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Немає зупинок із сумісним типом дороги STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Немає зупинок із сумісним типом трамвайної колії +STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Відсутні зупинки для зчленованого транспорту.{}Зчленований транспорт потребує проїзної зупинки, не кінцевої STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Цей літак не може приземлятися у цьому геліпорті STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Цей гелікоптер не може приземлятися у цьому аеропорту STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Немає точки залізничного маршруту From 100c043599187289f821184e45a4bdf13ec9411d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Wed, 13 Mar 2024 15:49:24 +0100 Subject: [PATCH 110/695] Codechange: [Win32] Disable assert message box when no GUI (#12291) --- src/video/dedicated_v.cpp | 2 ++ src/video/null_v.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp index e2613f2313..c56896eb8a 100644 --- a/src/video/dedicated_v.cpp +++ b/src/video/dedicated_v.cpp @@ -126,6 +126,8 @@ const char *VideoDriver_Dedicated::Start(const StringList &) #ifdef _MSC_VER /* Disable the MSVC assertion message box. */ _set_error_mode(_OUT_TO_STDERR); + _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE); + _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); #endif Debug(driver, 1, "Loading dedicated server"); diff --git a/src/video/null_v.cpp b/src/video/null_v.cpp index f0551e8898..c1e2c5396b 100644 --- a/src/video/null_v.cpp +++ b/src/video/null_v.cpp @@ -24,6 +24,8 @@ const char *VideoDriver_Null::Start(const StringList &parm) #ifdef _MSC_VER /* Disable the MSVC assertion message box. */ _set_error_mode(_OUT_TO_STDERR); + _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE); + _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); #endif this->UpdateAutoResolution(); From 14d95ef1c97b320c11a0a56e1104b27de84fc3fc Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Wed, 13 Mar 2024 15:22:52 +0000 Subject: [PATCH 111/695] Fix #12279: Update random path each step (#12286) --- src/pathfinder/yapf/yapf_ship.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp index 8fe1701948..01bd85faf7 100644 --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -172,28 +172,28 @@ public: return 'w'; } - /** Returns a random trackdir that can be reached from the current tile/trackdir, or INVALID_TRACK if none is available. */ - static Trackdir GetRandomFollowUpTrackdir(const Ship *v, TileIndex tile, Trackdir dir, bool include_90_degree_turns) + /** Returns a random tile/trackdir that can be reached from the current tile/trackdir, or tile/INVALID_TRACK if none is available. */ + static std::pair GetRandomFollowUpTileTrackdir(const Ship *v, TileIndex tile, Trackdir dir, bool include_90_degree_turns) { TrackFollower follower(v); if (follower.Follow(tile, dir)) { - tile = follower.m_new_tile; TrackdirBits dirs = follower.m_new_td_bits; if (!include_90_degree_turns) dirs &= ~TrackdirCrossesTrackdirs(dir); const int strip_amount = _random.Next(CountBits(dirs)); for (int s = 0; s < strip_amount; ++s) RemoveFirstTrackdir(&dirs); - return FindFirstTrackdir(dirs); + return { follower.m_new_tile, FindFirstTrackdir(dirs) }; } - return INVALID_TRACKDIR; + return { follower.m_new_tile, INVALID_TRACKDIR }; } /** Creates a random path, avoids 90 degree turns. */ static Trackdir CreateRandomPath(const Ship *v, TileIndex tile, Trackdir dir, ShipPathCache &path_cache, int path_length) { + std::pair tile_dir = { tile, dir }; for (int i = 0; i < path_length; ++i) { - const Trackdir random_dir = GetRandomFollowUpTrackdir(v, tile, dir, false); - if (random_dir == INVALID_TRACKDIR) break; - path_cache.push_back(random_dir); + tile_dir = GetRandomFollowUpTileTrackdir(v, tile_dir.first, tile_dir.second, false); + if (tile_dir.second == INVALID_TRACKDIR) break; + path_cache.push_back(tile_dir.second); } if (path_cache.empty()) return INVALID_TRACKDIR; @@ -240,7 +240,7 @@ public: path_found = pf.FindPath(v); Node *node = pf.GetBestNode(); if (attempt == 0 && !path_found) continue; // Try again with restricted search area. - if (!path_found || node == nullptr) return GetRandomFollowUpTrackdir(v, src_tile, trackdir, true); + if (!path_found || node == nullptr) return GetRandomFollowUpTileTrackdir(v, src_tile, trackdir, true).second; /* Return only the path within the current water region if an intermediate destination was returned. If not, cache the entire path * to the final destination tile. The low-level pathfinder might actually prefer a different docking tile in a nearby region. Without @@ -266,7 +266,7 @@ public: /* A empty path means we are already at the destination. The pathfinder shouldn't have been called at all. * Return a random reachable trackdir to hopefully nudge the ship out of this strange situation. */ - if (path_cache.empty()) return GetRandomFollowUpTrackdir(v, src_tile, trackdir, true); + if (path_cache.empty()) return GetRandomFollowUpTileTrackdir(v, src_tile, trackdir, true).second; /* Take out the last trackdir as the result. */ const Trackdir result = path_cache.front(); From 24efdf6ac5572a4822d233becda6ae36587f4900 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Wed, 13 Mar 2024 20:06:19 +0100 Subject: [PATCH 112/695] Codefix 363e251: incorrect trace debug message --- src/network/network_client.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index a9a4706768..c4f5149ce6 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -510,7 +510,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendSetName(const std::string */ NetworkRecvStatus ClientNetworkGameSocketHandler::SendQuit() { - Debug(net, 9, "Client::SendSetName()"); + Debug(net, 9, "Client::SendQuit()"); auto p = std::make_unique(PACKET_CLIENT_QUIT); From 23d733be955e4e7c67f58a4b34dd791edc8a419e Mon Sep 17 00:00:00 2001 From: Ivan Fefer Date: Wed, 13 Mar 2024 21:43:08 +0100 Subject: [PATCH 113/695] Add: Basic autocompletion on tab for console commands (#12163) --- src/CMakeLists.txt | 2 + src/autocompletion.cpp | 66 +++++++++++++ src/autocompletion.h | 46 +++++++++ src/console_gui.cpp | 56 ++++++++++- src/network/network_chat_gui.cpp | 159 ++++++++----------------------- src/string.cpp | 37 +++---- src/string_func.h | 1 + src/tests/string_func.cpp | 24 +++++ src/video/cocoa/cocoa_wnd.mm | 7 +- 9 files changed, 250 insertions(+), 148 deletions(-) create mode 100644 src/autocompletion.cpp create mode 100644 src/autocompletion.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ebb946ae4e..a55346167a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -52,6 +52,8 @@ add_files( animated_tile_func.h articulated_vehicles.cpp articulated_vehicles.h + autocompletion.cpp + autocompletion.h autoreplace.cpp autoreplace_base.h autoreplace_cmd.cpp diff --git a/src/autocompletion.cpp b/src/autocompletion.cpp new file mode 100644 index 0000000000..e88150c752 --- /dev/null +++ b/src/autocompletion.cpp @@ -0,0 +1,66 @@ +/* + * 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 autocompletion.cpp Generic auto-completion engine. */ + +#include "stdafx.h" + +#include "autocompletion.h" + +#include "console_internal.h" +#include "town.h" +#include "network/network_base.h" + +#include "safeguards.h" + +bool AutoCompletion::AutoComplete() +{ + // We are pressing TAB for the first time after reset. + if (this->suggestions.empty()) { + this->InitSuggestions(this->textbuf->buf); + if (this->suggestions.empty()) { + return false; + } + this->ApplySuggestion(prefix, suggestions[0]); + return true; + } + + // We are pressing TAB again on the same text. + if (this->current_suggestion_index + 1 < this->suggestions.size()) { + this->ApplySuggestion(prefix, this->suggestions[++this->current_suggestion_index]); + } else { + // We are out of options, restore original text. + this->textbuf->Assign(initial_buf); + this->Reset(); + } + return true; +} + +void AutoCompletion::Reset() +{ + this->prefix = ""; + this->query = ""; + this->initial_buf.clear(); + this->suggestions.clear(); + this->current_suggestion_index = 0; +} + +void AutoCompletion::InitSuggestions(std::string_view text) +{ + this->initial_buf = text; + size_t space_pos = this->initial_buf.find_last_of(' '); + this->query = this->initial_buf; + if (space_pos == std::string::npos) { + this->prefix = ""; + } else { + this->prefix = this->query.substr(0, space_pos + 1); + this->query.remove_prefix(space_pos + 1); + } + + this->suggestions = this->GetSuggestions(prefix, query); + this->current_suggestion_index = 0; +} diff --git a/src/autocompletion.h b/src/autocompletion.h new file mode 100644 index 0000000000..452c23e87a --- /dev/null +++ b/src/autocompletion.h @@ -0,0 +1,46 @@ +/* + * 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 autocompletion.h Generic auto-completion engine. */ + +#ifndef AUTOCOMPLETION_H +#define AUTOCOMPLETION_H + +#include "textbuf_type.h" + +class AutoCompletion { +protected: + Textbuf *textbuf; + +private: + std::string initial_buf; ///< Value of text buffer when we started current suggestion session. + + std::string_view prefix; ///< Prefix of the text before the last space. + std::string_view query; ///< Last token of the text. This is used to based the suggestions on. + + std::vector suggestions; + size_t current_suggestion_index; + +public: + AutoCompletion(Textbuf *textbuf) : textbuf(textbuf) + { + this->Reset(); + } + virtual ~AutoCompletion() = default; + + // Returns true the textbuf was updated. + bool AutoComplete(); + void Reset(); + +private: + void InitSuggestions(std::string_view text); + + virtual std::vector GetSuggestions(std::string_view prefix, std::string_view query) = 0; + virtual void ApplySuggestion(std::string_view prefix, std::string_view suggestion) = 0; +}; + +#endif /* AUTOCOMPLETION_H */ diff --git a/src/console_gui.cpp b/src/console_gui.cpp index 2fd8b221ef..6dc0393e66 100644 --- a/src/console_gui.cpp +++ b/src/console_gui.cpp @@ -10,6 +10,7 @@ #include "stdafx.h" #include "textbuf_type.h" #include "window_gui.h" +#include "autocompletion.h" #include "console_gui.h" #include "console_internal.h" #include "window_func.h" @@ -68,9 +69,44 @@ static std::deque _iconsole_buffer; static bool TruncateBuffer(); +class ConsoleAutoCompletion final : public AutoCompletion { +public: + using AutoCompletion::AutoCompletion; + +private: + std::vector GetSuggestions(std::string_view prefix, std::string_view query) override + { + prefix = StrTrimView(prefix); + std::vector suggestions; + + /* We only suggest commands or aliases, so we only do it for the first token or an argument to help command. */ + if (!prefix.empty() && prefix != "help") { + return suggestions; + } + + for (const auto &[_, command] : IConsole::Commands()) { + if (command.name.starts_with(query)) { + suggestions.push_back(command.name); + } + } + for (const auto &[_, alias] : IConsole::Aliases()) { + if (alias.name.starts_with(query)) { + suggestions.push_back(alias.name); + } + } + + return suggestions; + } + + void ApplySuggestion(std::string_view prefix, std::string_view suggestion) override + { + this->textbuf->Assign(fmt::format("{}{} ", prefix, suggestion)); + } +}; /* ** main console cmd buffer ** */ static Textbuf _iconsole_cmdline(ICON_CMDLN_SIZE); +static ConsoleAutoCompletion _iconsole_tab_completion(&_iconsole_cmdline); static std::deque _iconsole_history; static ptrdiff_t _iconsole_historypos; IConsoleModes _iconsole_mode; @@ -86,6 +122,7 @@ static void IConsoleClearCommand() _iconsole_cmdline.pixels = 0; _iconsole_cmdline.caretpos = 0; _iconsole_cmdline.caretxoffs = 0; + _iconsole_tab_completion.Reset(); SetWindowDirty(WC_CONSOLE, 0); } @@ -258,8 +295,18 @@ struct IConsoleWindow : Window IConsoleCmdExec("clear"); break; - default: - if (_iconsole_cmdline.HandleKeyPress(key, keycode) != HKPR_NOT_HANDLED) { + case WKC_TAB: + if (_iconsole_tab_completion.AutoComplete()) { + this->SetDirty(); + } + break; + + default: { + HandleKeyPressResult handle_result = _iconsole_cmdline.HandleKeyPress(key, keycode); + if (handle_result != HKPR_NOT_HANDLED) { + if (handle_result == HKPR_EDITING) { + _iconsole_tab_completion.Reset(); + } IConsoleWindow::scroll = 0; IConsoleResetHistoryPos(); this->SetDirty(); @@ -267,6 +314,7 @@ struct IConsoleWindow : Window return ES_NOT_HANDLED; } break; + } } return ES_HANDLED; } @@ -274,13 +322,14 @@ struct IConsoleWindow : Window void InsertTextString(WidgetID, const char *str, bool marked, const char *caret, const char *insert_location, const char *replacement_end) override { if (_iconsole_cmdline.InsertString(str, marked, caret, insert_location, replacement_end)) { + _iconsole_tab_completion.Reset(); IConsoleWindow::scroll = 0; IConsoleResetHistoryPos(); this->SetDirty(); } } - Textbuf *GetFocusedTextbuf() const override + const Textbuf *GetFocusedTextbuf() const override { return &_iconsole_cmdline; } @@ -434,6 +483,7 @@ static void IConsoleHistoryNavigate(int direction) } else { _iconsole_cmdline.Assign(_iconsole_history[_iconsole_historypos]); } + _iconsole_tab_completion.Reset(); } /** diff --git a/src/network/network_chat_gui.cpp b/src/network/network_chat_gui.cpp index 1b83f67f76..be61d5cbf8 100644 --- a/src/network/network_chat_gui.cpp +++ b/src/network/network_chat_gui.cpp @@ -9,6 +9,7 @@ #include "../stdafx.h" #include "../strings_func.h" +#include "../autocompletion.h" #include "../blitter/factory.hpp" #include "../console_func.h" #include "../video/video_driver.hpp" @@ -44,7 +45,6 @@ struct ChatMessage { static std::deque _chatmsg_list; ///< The actual chat message list. static bool _chatmessage_dirty = false; ///< Does the chat message need repainting? static bool _chatmessage_visible = false; ///< Is a chat message visible. -static bool _chat_tab_completion_active; ///< Whether tab completion is active. static uint MAX_CHAT_MESSAGES = 0; ///< The limit of chat messages to show. /** @@ -262,11 +262,47 @@ static void SendChat(const std::string &buf, DestType type, int dest) } } +class NetworkChatAutoCompletion final : public AutoCompletion { +public: + using AutoCompletion::AutoCompletion; + +private: + std::vector GetSuggestions([[maybe_unused]] std::string_view prefix, std::string_view query) override + { + std::vector suggestions; + for (NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { + if (ci->client_name.starts_with(query)) { + suggestions.push_back(ci->client_name); + } + } + for (const Town *t : Town::Iterate()) { + /* Get the town-name via the string-system */ + SetDParam(0, t->index); + std::string town_name = GetString(STR_TOWN_NAME); + if (town_name.starts_with(query)) { + suggestions.push_back(std::move(town_name)); + } + } + return suggestions; + } + + void ApplySuggestion(std::string_view prefix, std::string_view suggestion) override + { + /* Add ': ' if we are at the start of the line (pretty) */ + if (prefix.empty()) { + this->textbuf->Assign(fmt::format("{}: ", suggestion)); + } else { + this->textbuf->Assign(fmt::format("{}{} ", prefix, suggestion)); + } + } +}; + /** Window to enter the chat message in. */ struct NetworkChatWindow : public Window { DestType dtype; ///< The type of destination. int dest; ///< The identifier of the destination. QueryString message_editbox; ///< Message editbox. + NetworkChatAutoCompletion chat_tab_completion; ///< Holds the state and logic of auto-completion of player names and towns on Tab press. /** * Create a chat input window. @@ -274,7 +310,8 @@ struct NetworkChatWindow : public Window { * @param type The type of destination. * @param dest The actual destination index. */ - NetworkChatWindow(WindowDesc *desc, DestType type, int dest) : Window(desc), message_editbox(NETWORK_CHAT_LENGTH) + NetworkChatWindow(WindowDesc *desc, DestType type, int dest) + : Window(desc), message_editbox(NETWORK_CHAT_LENGTH), chat_tab_completion(&message_editbox.text) { this->dtype = type; this->dest = dest; @@ -295,7 +332,6 @@ struct NetworkChatWindow : public Window { this->SetFocusedWidget(WID_NC_TEXTBOX); InvalidateWindowData(WC_NEWS_WINDOW, 0, this->height); - _chat_tab_completion_active = false; PositionNetworkChatWindow(this); } @@ -311,125 +347,12 @@ struct NetworkChatWindow : public Window { Window::FindWindowPlacementAndResize(_toolbar_width, def_height); } - /** - * Find the next item of the list of things that can be auto-completed. - * @param item The current indexed item to return. This function can, and most - * likely will, alter item, to skip empty items in the arrays. - * @return Returns the view that matched to the index. - */ - std::optional ChatTabCompletionNextItem(uint *item) - { - /* First, try clients */ - if (*item < MAX_CLIENT_SLOTS) { - /* Skip inactive clients */ - for (NetworkClientInfo *ci : NetworkClientInfo::Iterate(*item)) { - *item = ci->index; - return ci->client_name; - } - *item = MAX_CLIENT_SLOTS; - } - - /* Then, try townnames - * Not that the following assumes all town indices are adjacent, ie no - * towns have been deleted. */ - if (*item < (uint)MAX_CLIENT_SLOTS + Town::GetPoolSize()) { - for (const Town *t : Town::Iterate(*item - MAX_CLIENT_SLOTS)) { - /* Get the town-name via the string-system */ - SetDParam(0, t->index); - return GetString(STR_TOWN_NAME); - } - } - - return std::nullopt; - } - - /** - * Find what text to complete. It scans for a space from the left and marks - * the word right from that as to complete. It also writes a \0 at the - * position of the space (if any). If nothing found, buf is returned. - */ - static std::string_view ChatTabCompletionFindText(std::string_view &buf) - { - auto it = buf.find_last_of(' '); - if (it == std::string_view::npos) return buf; - - std::string_view res = buf.substr(it + 1); - buf.remove_suffix(res.size() + 1); - return res; - } - /** * See if we can auto-complete the current text of the user. */ void ChatTabCompletion() { - static std::string _chat_tab_completion_buf; - - Textbuf *tb = &this->message_editbox.text; - uint item = 0; - bool second_scan = false; - - /* Create views, so we do not need to copy the data for now. */ - std::string_view pre_buf = _chat_tab_completion_active ? std::string_view(_chat_tab_completion_buf) : std::string_view(tb->buf); - std::string_view tb_buf = ChatTabCompletionFindText(pre_buf); - - /* - * Comparing pointers of the data, as both "Hi:" and "Hi: Hi:" will result in - * tb_buf and pre_buf being "Hi:", which would be equal in content but not in context. - */ - bool begin_of_line = tb_buf.data() == pre_buf.data(); - - std::optional cur_item; - while ((cur_item = ChatTabCompletionNextItem(&item)).has_value()) { - std::string_view cur_name = cur_item.value(); - item++; - - if (_chat_tab_completion_active) { - /* We are pressing TAB again on the same name, is there another name - * that starts with this? */ - if (!second_scan) { - std::string_view view; - - /* If we are completing at the begin of the line, skip the ': ' we added */ - if (begin_of_line) { - view = std::string_view(tb->buf, (tb->bytes - 1) - 2); - } else { - /* Else, find the place we are completing at */ - size_t offset = pre_buf.size() + 1; - view = std::string_view(tb->buf + offset, (tb->bytes - 1) - offset); - } - - /* Compare if we have a match */ - if (cur_name == view) second_scan = true; - - continue; - } - - /* Now any match we make on _chat_tab_completion_buf after this, is perfect */ - } - - if (tb_buf.size() < cur_name.size() && cur_name.starts_with(tb_buf)) { - /* Save the data it was before completion */ - if (!second_scan) _chat_tab_completion_buf = tb->buf; - _chat_tab_completion_active = true; - - /* Change to the found name. Add ': ' if we are at the start of the line (pretty) */ - if (begin_of_line) { - this->message_editbox.text.Assign(fmt::format("{}: ", cur_name)); - } else { - this->message_editbox.text.Assign(fmt::format("{} {}", pre_buf, cur_name)); - } - - this->SetDirty(); - return; - } - } - - if (second_scan) { - /* We walked all possibilities, and the user presses tab again.. revert to original text */ - this->message_editbox.text.Assign(_chat_tab_completion_buf); - _chat_tab_completion_active = false; - + if (this->chat_tab_completion.AutoComplete()) { this->SetDirty(); } } @@ -475,7 +398,7 @@ struct NetworkChatWindow : public Window { void OnEditboxChanged(WidgetID widget) override { if (widget == WID_NC_TEXTBOX) { - _chat_tab_completion_active = false; + this->chat_tab_completion.Reset(); } } diff --git a/src/string.cpp b/src/string.cpp index f695194906..394a24fab0 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -254,30 +254,6 @@ bool StrValid(const char *str, const char *last) return *str == '\0'; } -/** - * Trim the spaces from the begin of given string in place, i.e. the string buffer - * that is passed will be modified whenever spaces exist in the given string. - * When there are spaces at the begin, the whole string is moved forward. - * @param str The string to perform the in place left trimming on. - */ -static void StrLeftTrimInPlace(std::string &str) -{ - size_t pos = str.find_first_not_of(' '); - str.erase(0, pos); -} - -/** - * Trim the spaces from the end of given string in place, i.e. the string buffer - * that is passed will be modified whenever spaces exist in the given string. - * When there are spaces at the end, the '\0' will be moved forward. - * @param str The string to perform the in place left trimming on. - */ -static void StrRightTrimInPlace(std::string &str) -{ - size_t pos = str.find_last_not_of(' '); - if (pos != std::string::npos) str.erase(pos + 1); -} - /** * Trim the spaces from given string in place, i.e. the string buffer that * is passed will be modified whenever spaces exist in the given string. @@ -287,8 +263,17 @@ static void StrRightTrimInPlace(std::string &str) */ void StrTrimInPlace(std::string &str) { - StrLeftTrimInPlace(str); - StrRightTrimInPlace(str); + str = StrTrimView(str); +} + +std::string_view StrTrimView(std::string_view str) +{ + size_t first_pos = str.find_first_not_of(' '); + if (first_pos == std::string::npos) { + return std::string_view{}; + } + size_t last_pos = str.find_last_not_of(' '); + return str.substr(first_pos, last_pos - first_pos + 1); } /** diff --git a/src/string_func.h b/src/string_func.h index df487f12d2..d7ec094a64 100644 --- a/src/string_func.h +++ b/src/string_func.h @@ -29,6 +29,7 @@ bool strtolower(std::string &str, std::string::size_type offs = 0); [[nodiscard]] bool StrValid(const char *str, const char *last) NOACCESS(2); void StrTrimInPlace(std::string &str); +std::string_view StrTrimView(std::string_view str); [[nodiscard]] bool StrStartsWithIgnoreCase(std::string_view str, const std::string_view prefix); [[nodiscard]] bool StrEndsWithIgnoreCase(std::string_view str, const std::string_view suffix); diff --git a/src/tests/string_func.cpp b/src/tests/string_func.cpp index ca238db46f..cc5b624250 100644 --- a/src/tests/string_func.cpp +++ b/src/tests/string_func.cpp @@ -384,3 +384,27 @@ TEST_CASE("ConvertHexToBytes") CHECK(bytes3[6] == 0xde); CHECK(bytes3[7] == 0xf0); } + +static const std::vector> _str_trim_testcases = { + {"a", "a"}, + {" a", "a"}, + {"a ", "a"}, + {" a ", "a"}, + {" a b c ", "a b c"}, + {" ", ""} +}; + +TEST_CASE("StrTrimInPlace") +{ + for (auto [input, expected] : _str_trim_testcases) { + StrTrimInPlace(input); + CHECK(input == expected); + } +} + +TEST_CASE("StrTrimView") { + for (const auto& [input, expected] : _str_trim_testcases) { + CHECK(StrTrimView(input) == expected); + } +} + diff --git a/src/video/cocoa/cocoa_wnd.mm b/src/video/cocoa/cocoa_wnd.mm index f6957ff6ef..a36ef78dea 100644 --- a/src/video/cocoa/cocoa_wnd.mm +++ b/src/video/cocoa/cocoa_wnd.mm @@ -789,7 +789,12 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel case QZ_LEFT: SB(_dirkeys, 0, 1, down); break; case QZ_RIGHT: SB(_dirkeys, 2, 1, down); break; - case QZ_TAB: _tab_is_down = down; break; + case QZ_TAB: + _tab_is_down = down; + if (down && EditBoxInGlobalFocus()) { + HandleKeypress(WKC_TAB, unicode); + } + break; case QZ_RETURN: case QZ_f: From 2d2191fbb3ffb063c1b8ae8b1705239813b0827f Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 14 Mar 2024 04:41:11 +0000 Subject: [PATCH 114/695] Update: Translations from eints norwegian (bokmal): 11 changes by eriksorngard chinese (simplified): 1 change by WenSimEHRP finnish: 23 changes by hpiirai ukrainian: 21 changes by StepanIvasyn danish: 32 changes by bscargo spanish: 6 changes by MontyMontana portuguese (brazilian): 50 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 100 +++++++++++++++--------------- src/lang/danish.txt | 64 +++++++++---------- src/lang/finnish.txt | 46 +++++++------- src/lang/norwegian_bokmal.txt | 22 +++---- src/lang/simplified_chinese.txt | 2 +- src/lang/spanish.txt | 12 ++-- src/lang/ukrainian.txt | 29 ++++++--- 7 files changed, 144 insertions(+), 131 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index d6a6d4b158..5d042b7b0a 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -480,7 +480,7 @@ STR_SUBSIDIES_MENU_SUBSIDIES :Subsídios # Graph menu STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Gráfico do lucro operacional STR_GRAPH_MENU_INCOME_GRAPH :Gráfico de rendimentos -STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Gráfico das cargas entregues +STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Gráfico da carga entregada STR_GRAPH_MENU_PERFORMANCE_HISTORY_GRAPH :Gráfico do histórico de desempenho STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Gráfico do valor da empresa STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Receitas por carga @@ -608,7 +608,7 @@ STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COM STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Gráfico do Lucro Operacional STR_GRAPH_INCOME_CAPTION :{WHITE}Gráfico de Rendimentos -STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Unidades de carga entregues +STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Unidades de carga entregada STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Classificações do desempenho da empresa (máximo=1000) STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Gráfico de Valor da Empresa @@ -651,7 +651,7 @@ STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detalhes STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}% -STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP :{BLACK}Ver detalhes desta empresa +STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP :{BLACK}Ver detalhes sobre esta empresa ###length 10 STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}Veículos: @@ -659,7 +659,7 @@ STR_PERFORMANCE_DETAIL_STATIONS :{BLACK}Estaçõ STR_PERFORMANCE_DETAIL_MIN_PROFIT :{BLACK}Lucro mín.: STR_PERFORMANCE_DETAIL_MIN_INCOME :{BLACK}Renda mín.: STR_PERFORMANCE_DETAIL_MAX_INCOME :{BLACK}Renda máx.: -STR_PERFORMANCE_DETAIL_DELIVERED :{BLACK}Entregue: +STR_PERFORMANCE_DETAIL_DELIVERED :{BLACK}Entregado: STR_PERFORMANCE_DETAIL_CARGO :{BLACK}Carga: STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Dinheiro: STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Empréstimo: @@ -673,8 +673,8 @@ STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}Lucro do STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}Lucro do veículo com o menor rendimento (apenas veículos com mais de dois períodos são considerados) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Quantia de dinheiro obtida no trimestre com o menor lucro dos últimos 12 trimestres STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Quantia de dinheiro obtida no trimestre com o maior lucro dos últimos 12 trimestres -STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Unidades de carga entregues nos últimos quatro trimestres -STR_PERFORMANCE_DETAIL_CARGO_TOOLTIP :{BLACK}Número de tipos de carga entregues no último trimestre +STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Unidades de carga entregada nos últimos quatro trimestres +STR_PERFORMANCE_DETAIL_CARGO_TOOLTIP :{BLACK}Número de tipos de carga entregada no último trimestre STR_PERFORMANCE_DETAIL_MONEY_TOOLTIP :{BLACK}Quantia de dinheiro que esta empresa tem no banco STR_PERFORMANCE_DETAIL_LOAN_TOOLTIP :{BLACK}A quantia de dinheiro que esta empresa tomou por empréstimo STR_PERFORMANCE_DETAIL_TOTAL_TOOLTIP :{BLACK}Total de pontos de pontos possíveis @@ -900,7 +900,7 @@ STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE} está ficando velho STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE} está ficando muito velho -STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} está ficando muito velho e necessita urgentemente de substituição +STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} está ficando muito velho e necessita urgentemente ser substituído STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} não consegue encontrar um caminho para continuar STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} está perdido STR_NEWS_VEHICLE_UNPROFITABLE_YEAR :{WHITE}{VEHICLE} gerou um lucro de {CURRENCY_LONG} no último ano @@ -2145,7 +2145,7 @@ STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permitir que os STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recomendado) -STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Alterar valor da definição +STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Alterar valor da configuração # Config errors STR_CONFIG_ERROR :{WHITE}Erro no arquivo de configuração... @@ -2486,8 +2486,8 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Nome STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Seu nome de jogador STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Editar o seu nome de jogador STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Seu nome de jogador -STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Ações administrativas para executar neste cliente -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Ações administrativas para executar nesta empresa +STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Ações administrativas para aplicar neste cliente +STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Ações administrativas para aplicar nesta empresa STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Juntar-se a esta empresa STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Enviar uma mensagem a este jogador STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Enviar uma mensagem a todos os jogadores desta empresa @@ -3260,14 +3260,14 @@ STR_SAVELOAD_SAVE_SCENARIO :{WHITE}Salvar C STR_SAVELOAD_LOAD_SCENARIO :{WHITE}Abrir Cenário STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Abrir mapa topográfico STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Salvar mapa topográfico -STR_SAVELOAD_HOME_BUTTON :{BLACK}Clique aqui para acessar o diretório padrão atual onde salvar/carregar jogos +STR_SAVELOAD_HOME_BUTTON :{BLACK}Acessar o diretório padrão atual onde salvar/abrir jogos STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} livres STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Lista de unidades, diretórios e arquivos de jogos gravados STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Nome selecionado para salvar o jogo STR_SAVELOAD_DELETE_BUTTON :{BLACK}Apagar STR_SAVELOAD_DELETE_TOOLTIP :{BLACK}Apagar o jogo salvo selecionado STR_SAVELOAD_SAVE_BUTTON :{BLACK}Salvar -STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Salvar o jogo atual, usando o nome escolhido +STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Salvar o jogo atual usando o nome escolhido STR_SAVELOAD_LOAD_BUTTON :{BLACK}Abrir STR_SAVELOAD_LOAD_TOOLTIP :{BLACK}Carregar o jogo selecionado STR_SAVELOAD_LOAD_HEIGHTMAP_TOOLTIP :{BLACK}Carregar o mapa topográfico selecionado @@ -3363,7 +3363,7 @@ STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotaçã STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nome do mapa topográfico: STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}O nome do arquivo de imagem do mapa topográfico STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Tamanho: -STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}O tamanho da imagem original do mapa topográfico. Para melhores resultados, cada lado deve corresponder a um comprimento de lado de mapa disponível no OpenTTD, tais como 256, 512, 1024, etc. +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}O tamanho da imagem original do mapa topográfico. Para obter melhores resultados, cada lado deve corresponder a um comprimento de lado de mapa disponível no OpenTTD, tais como 256, 512, 1024, etc. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Altura desejada do pico @@ -3395,7 +3395,7 @@ STR_GENERATION_WORLD_GENERATION :{BLACK}Geraçã STR_GENERATION_RIVER_GENERATION :{BLACK}Geração de rios STR_GENERATION_TREE_GENERATION :{BLACK}Geração de árvores STR_GENERATION_OBJECT_GENERATION :{BLACK}Geração de objetos -STR_GENERATION_CLEARING_TILES :{BLACK}Geração de área rochosa e irregular +STR_GENERATION_CLEARING_TILES :{BLACK}Geração de áreas irregulares e rochosas STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurando o jogo STR_GENERATION_PREPARING_TILELOOP :{BLACK}Preparando o terreno STR_GENERATION_PREPARING_SCRIPT :{BLACK}Executando o script @@ -3403,29 +3403,29 @@ STR_GENERATION_PREPARING_GAME :{BLACK}Preparan # NewGRF settings STR_NEWGRF_SETTINGS_CAPTION :{WHITE}Configurações de NewGRF -STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Informação detalhada de NewGRF +STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Informação detalhada do NewGRF STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Arquivos NewGRF ativos STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Arquivos NewGRF inativos STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}Selecionar predefinição: STR_NEWGRF_FILTER_TITLE :{ORANGE}Filtro: -STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}Carrega a predefinição selecionada +STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}Carregar a predefinição selecionada STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}Salvar predefinição STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP :{BLACK}Salvar a lista atual como uma predefinição STR_NEWGRF_SETTINGS_PRESET_DELETE :{BLACK}Excluir predefinição STR_NEWGRF_SETTINGS_PRESET_DELETE_TOOLTIP :{BLACK}Excluir a predefinição selecionada STR_NEWGRF_SETTINGS_ADD :{BLACK}Adicionar -STR_NEWGRF_SETTINGS_ADD_FILE_TOOLTIP :{BLACK}Adicionar NewGRF selecionado à sua configuração +STR_NEWGRF_SETTINGS_ADD_FILE_TOOLTIP :{BLACK}Adicionar o arquivo NewGRF selecionado à sua configuração STR_NEWGRF_SETTINGS_RESCAN_FILES :{BLACK}Procurar arquivos NewGRF -STR_NEWGRF_SETTINGS_RESCAN_FILES_TOOLTIP :{BLACK}Atualiza a lista de NewGRF disponíveis +STR_NEWGRF_SETTINGS_RESCAN_FILES_TOOLTIP :{BLACK}Atualizar a lista de arquivos NewGRF disponíveis STR_NEWGRF_SETTINGS_REMOVE :{BLACK}Remover -STR_NEWGRF_SETTINGS_REMOVE_TOOLTIP :{BLACK}Remover NewGRF selecionado da lista +STR_NEWGRF_SETTINGS_REMOVE_TOOLTIP :{BLACK}Remover o arquivo NewGRF selecionado da lista STR_NEWGRF_SETTINGS_MOVEUP :{BLACK}Para cima -STR_NEWGRF_SETTINGS_MOVEUP_TOOLTIP :{BLACK}Mover NewGRF selecionado para cima na lista +STR_NEWGRF_SETTINGS_MOVEUP_TOOLTIP :{BLACK}Mover o arquivo NewGRF selecionado para cima na lista STR_NEWGRF_SETTINGS_MOVEDOWN :{BLACK}Para baixo -STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP :{BLACK}Mover NewGRF selecionado para baixo na lista +STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP :{BLACK}Mover o arquivo NewGRF selecionado para baixo na lista STR_NEWGRF_SETTINGS_UPGRADE :{BLACK}Atualizar STR_NEWGRF_SETTINGS_UPGRADE_TOOLTIP :{BLACK}Atualizar arquivos NewGRF para os quais você tem uma versão mais recente instalada -STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Uma lista de NewGRF que estão instalados +STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Uma lista de arquivos NewGRF que estão instalados STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Definir parâmetros STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}Mostrar parâmetros @@ -3456,7 +3456,7 @@ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Incompatí # NewGRF save preset window STR_SAVE_PRESET_CAPTION :{WHITE}Salvar predefinição -STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lista de predefinições disponíveis, selecione uma para copiá-la como nome para a gravação abaixo +STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lista de predefinições disponíveis, selecione uma para copiar o nome e usar na gravação abaixo STR_SAVE_PRESET_TITLE :{BLACK}Digitar um nome para a predefinição STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Nome que está selecionado para a gravação da predefinição STR_SAVE_PRESET_CANCEL :{BLACK}Cancelar @@ -3484,16 +3484,16 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Objeto STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Tipo de ferrovia STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de estrada -STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parâmetro da variável 60+x de NewGRF (hexadecimal) +STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parâmetro da variável 60+x do NewGRF (hexadecimal) # Sprite aligner window STR_SPRITE_ALIGNER_CAPTION :{WHITE}Alinhando sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Próximo sprite -STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Ir para o próximo sprite normal, pulando quaisquer sprites falsos/recoloridos/tipo de letra e retornar do último sprite ao primeiro +STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Ir para o próximo sprite normal, pulando quaisquer sprites falsos/recoloridos/tipo de letra, retornando do último sprite para o primeiro STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ir para o sprite STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Ir para o sprite selecionado. Se o sprite não for um sprite normal, seguir para o próximo sprite normal STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Sprite anterior -STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Ir para o sprite normal anterior, pulando quaisquer sprites falsos/recoloridos/tipo de letra e retornar do primeiro sprite ao último +STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Ir para o sprite normal anterior, pulando quaisquer sprites falsos/recoloridos/tipo de letra, retornando do primeiro sprite para o último STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representação do sprite atualmente selecionado. O alinhamento é ignorado ao desenhar este sprite STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move o sprite, alterando os deslocamentos X e Y. Ctrl+Clique para mover o sprite 8 unidades por vez @@ -3525,8 +3525,8 @@ STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} é d STR_NEWGRF_ERROR_INVALID_PARAMETER :Parâmetro inválido para {1:STRING}: parâmetro {2:STRING} ({3:NUM}) STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} deve ser carregado antes de {2:STRING} STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} deve ser carregado depois de {2:STRING} -STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} requer OpenTTD versão {2:STRING} ou superior -STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :o arquivo GRF que foi desenvolvido para traduzir +STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} é para OpenTTD versão {2:STRING} ou superior +STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :o arquivo GRF que foi desenvolvido para a tradução STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Foram carregados NewGRFs demais STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Carregar {1:STRING} como NewGRF estático com {2:STRING} pode causar erro de sincronização STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Sprite inesperado (sprite {3:NUM}) @@ -3545,14 +3545,14 @@ STR_NEWGRF_ERROR_INDPROD_CALLBACK :Chamada de prod STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Cuidado! STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Você está prestes a fazer alterações em um jogo em execução. Isso pode travar o OpenTTD ou interromper o estado do jogo. Não envie relatórios de erros sobre estas questões.{}Você quer mesmo fazer as alterações? -STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Não é possível adicionar arquivo: ID do GRF duplicado +STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Não é possível adicionar o arquivo: GRF ID duplicado STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Arquivo correspondente não encontrado (GRF compatível carregado) -STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Não é possível adicionar arquivo: limite de NewGRFs atingido +STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Não é possível adicionar o arquivo: limite de NewGRFs atingido -STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}GRFs compatíveis foram carregados para os arquivos que faltam +STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}GRFs compatíveis foram carregados para os arquivos ausentes STR_NEWGRF_DISABLED_WARNING :{WHITE}Arquivos GRF ausentes foram desativados STR_NEWGRF_UNPAUSE_WARNING_TITLE :{YELLOW}Arquivos GRF em falta -STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Sair da pausa pode travar o OpenTTD. Não envie relatórios de erros sobre travamentos subsequentes.{}Você quer mesmo continuar o jogo? +STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Sair da pausa pode travar o OpenTTD. Não envie relatórios de erros sobre travamentos subsequentes.{}Você quer mesmo sair da pausa? # NewGRF status STR_NEWGRF_LIST_NONE :Nenhum @@ -3566,7 +3566,7 @@ STR_NEWGRF_BROKEN :{WHITE}O compor STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Ele alterou o estado do vagão motorizado '{1:ENGINE}' quando não estava em um depósito STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Ele alterou o comprimento do veículo '{1:ENGINE}' quando não estava em um depósito STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Ele alterou a capacidade do veículo '{1:ENGINE}' quando não estava em um depósito ou em adaptação -STR_BROKEN_VEHICLE_LENGTH :{WHITE}O trem '{VEHICLE}' pertencente a '{COMPANY}' tem um comprimento inválido, possivelmente devido a problemas com NewGRFs. Podem ocorrer erros de sincronização ou travamento do jogo +STR_BROKEN_VEHICLE_LENGTH :{WHITE}O trem '{VEHICLE}' que pertence a '{COMPANY}' tem um comprimento inválido, possivelmente devido a problemas com NewGRFs. Podem ocorrer erros de sincronização ou travamento do jogo STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' produz informação incorreta STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}A informação de carga/adaptação para '{1:ENGINE}' é diferente da lista de compra depois da construção. Isto pode fazer a renovação/substituição automática falhar se adaptar corretamente @@ -3615,14 +3615,14 @@ STR_TOWN_POPULATION :{BLACK}Populaç STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Cidade) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}População: {ORANGE}{COMMA}{BLACK} Casas: {ORANGE}{COMMA} -STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} último mês: {ORANGE}{COMMA}{BLACK} máx: {ORANGE}{COMMA} -STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}{CARGO_LIST} último minuto: {ORANGE}{COMMA}{BLACK} máx: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} no último mês: {ORANGE}{COMMA}{BLACK} máx: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}{CARGO_LIST} no último minuto: {ORANGE}{COMMA}{BLACK} máx: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Carga necessária para o crescimento da localidade: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} é necessário STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} é necessário no inverno -STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} entregue +STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} foi entregado STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (ainda é necessário) -STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (entregue) +STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (entregado) STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Localidade cresce a cada {ORANGE}{UNITS_DAYS_OR_SECONDS} STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Localidade cresce a cada {ORANGE}{UNITS_DAYS_OR_SECONDS} (financiada) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Localidade {RED}não{BLACK} está crescendo @@ -3701,7 +3701,7 @@ STR_GOAL_QUESTION_BUTTON_YES :Sim STR_GOAL_QUESTION_BUTTON_DECLINE :Recusar STR_GOAL_QUESTION_BUTTON_ACCEPT :Aceitar STR_GOAL_QUESTION_BUTTON_IGNORE :Ignorar -STR_GOAL_QUESTION_BUTTON_RETRY :Tentar novamente +STR_GOAL_QUESTION_BUTTON_RETRY :Repetir STR_GOAL_QUESTION_BUTTON_PREVIOUS :Anterior STR_GOAL_QUESTION_BUTTON_NEXT :Próximo STR_GOAL_QUESTION_BUTTON_STOP :Parar @@ -3716,10 +3716,10 @@ STR_GOAL_QUESTION_BUTTON_CLOSE :Fechar # Subsidies window STR_SUBSIDIES_CAPTION :{WHITE}Subsídios STR_SUBSIDIES_OFFERED_TITLE :{BLACK}Oferta de subsídios para execução de serviços: -STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING} de {STRING} para {STRING}{YELLOW} ({STRING}) +STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING} d{G o a} {STRING} para {STRING}{YELLOW} ({STRING}) STR_SUBSIDIES_NONE :{ORANGE}- Nenhum - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Serviços já subsidiados: -STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} de {STRING} para {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) +STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} d{G o a} {STRING} para {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique em um serviço para centralizar visualização principal em uma indústria/localidade. Ctrl+Clique para abrir uma nova visualização na localização da indústria/localidade STR_SUBSIDIES_OFFERED_EXPIRY_DATE :até {DATE_SHORT} STR_SUBSIDIES_OFFERED_EXPIRY_TIME :por {UNITS_MONTHS_OR_MINUTES} @@ -3734,7 +3734,7 @@ STR_STORY_BOOK_TITLE :{YELLOW}{STRING STR_STORY_BOOK_GENERIC_PAGE_ITEM :Página {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Saltar para uma página específica escolhendo-a nesta lista STR_STORY_BOOK_PREV_PAGE :{BLACK}Anterior -STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Ir para a página anterior +STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Voltar para a página anterior STR_STORY_BOOK_NEXT_PAGE :{BLACK}Próxima STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Ir para a próxima página STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Referência de objetivo inválida @@ -3877,7 +3877,7 @@ STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Infraest STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY} {BLACK}{COMPANY_NUM} STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Presidente) -STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inaugurado: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inauguração: {WHITE}{NUM} STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Esquema de Cores: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Veículos: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} tre{P m ns} @@ -3897,7 +3897,7 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Nenhum STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Construir sede STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Construir sede da empresa STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Ver sede -STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Ver sede da empresa +STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Mostar sede da empresa STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Mover sede STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Reconstruir sede da empresa em outro local por 1% do valor da empresa. Pressione também Shift para só mostrar o custo estimado STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detalhes @@ -4219,7 +4219,7 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Clonar E STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Clonar Aeronave ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Comprar uma cópia de um trem incluindo todos os vagões. Clique neste botão e depois em um trem que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Comprar uma cópia de um trem, incluindo todos os vagões. Clique neste botão e depois em um trem que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Comprar uma cópia de um veículo rodoviário. Clique neste botão e depois em um veículo que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Comprar uma cópia de uma embarcação. Clique neste botão e depois em uma embarcação que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Comprar uma cópia de uma aeronave. Clique neste botão e depois em uma aeronave que está dentro ou fora do hangar. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado @@ -4272,7 +4272,7 @@ STR_ENGINE_PREVIEW_COST_WEIGHT :Custo: {CURRENC STR_ENGINE_PREVIEW_COST_MAX_SPEED :Custo: {CURRENCY_LONG} Velocidade máx.: {VELOCITY} STR_ENGINE_PREVIEW_SPEED_POWER :Velocidade: {VELOCITY} Potência: {POWER} STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Velocidade: {VELOCITY} Potência: {POWER} Força de Tração máx.: {FORCE} -STR_ENGINE_PREVIEW_TYPE :Tipo da aeronave: {STRING} +STR_ENGINE_PREVIEW_TYPE :Tipo de aeronave: {STRING} STR_ENGINE_PREVIEW_TYPE_RANGE :Tipo de aeronave: {STRING} Autonomia: {COMMA} quadrados STR_ENGINE_PREVIEW_RUNCOST_YEAR :Custo de Operação: {CURRENCY_LONG}/ano STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Custo de Operação: {CURRENCY_LONG}/período @@ -4294,11 +4294,11 @@ STR_REPLACE_VEHICLE_SHIP :Embarcação STR_REPLACE_VEHICLE_AIRCRAFT :Aeronave STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Escolher o tipo de locomotiva para substituir -STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Escolher o novo tipo de locomotiva que será usada para substituir a que foi selecionada à esquerda +STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Escolher o novo tipo de locomotiva que irá substituir a que foi selecionada à esquerda STR_REPLACE_VEHICLES_START :{BLACK}Iniciar Substituição de Veículos STR_REPLACE_VEHICLES_NOW :Substituir todos os veículos agora -STR_REPLACE_VEHICLES_WHEN_OLD :Substituir apenas veículos velhos +STR_REPLACE_VEHICLES_WHEN_OLD :Substituir apenas os veículos velhos STR_REPLACE_HELP_START_BUTTON :{BLACK}Pressione para iniciar a substituição do tipo de locomotiva selecionada à esquerda com o tipo de locomotiva selecionada à direita STR_REPLACE_NOT_REPLACING :{BLACK}Não substituindo STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Nenhum veículo selecionado @@ -4327,7 +4327,7 @@ STR_REPLACE_ROAD_VEHICLES :Veículos Rodov STR_REPLACE_TRAM_VEHICLES :Bondes STR_REPLACE_REMOVE_WAGON :{BLACK}Remoção de vagões ({STRING}): {ORANGE}{STRING} -STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Forçar a substituição automática a manter o trem com o mesmo comprimento removendo vagões (começando pela frente), se a substituição da locomotiva aumentar o comprimento do trem +STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Fazer a substituição automática mantendo o comprimento do trem, removendo vagões (começando pela frente), se a substituição da locomotiva aumentar o comprimento do trem STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl+Clique para também aplicar aos subgrupos # Vehicle view @@ -4740,7 +4740,7 @@ STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Alterar STR_TIMETABLE_CLEAR_SPEED :{BLACK}Remover limite de velocidade STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Apagar a velocidade máxima de viagem da ordem selecionada. Ctrl+Clique para apagar a velocidade de todas as ordens -STR_TIMETABLE_RESET_LATENESS :{BLACK}Reiniciar o Contador de Atrasos +STR_TIMETABLE_RESET_LATENESS :{BLACK}Reiniciar Contador de Atrasos STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reiniciar o contador de atrasos para o veículo ficar pontual. Ctrl+Clique para reiniciar todo o grupo e, com isso, fazer o veículo mais atrasado ficar no horário e todos os outros ficarem adiantados STR_TIMETABLE_AUTOFILL :{BLACK}Preencher automaticamente @@ -5278,7 +5278,7 @@ STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... o ve STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... nem todos os veículos são idênticos STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Não haverá veículos disponíveis -STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Altere a sua configuração NewGRF +STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Modifique a sua configuração de NewGRF STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Não existem veículos disponíveis ainda STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Inicie um novo jogo depois de {DATE_SHORT} ou utilize um NewGRF que forneça veículos iniciais diff --git a/src/lang/danish.txt b/src/lang/danish.txt index e2765b5679..646c39d02c 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1054,9 +1054,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Skalere STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Marker dette afkrydsningsfelt for at skalere facetter efter grænsefladestørrelse STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Brug traditionel sprite-skrifttype -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marker dette felt, hvis du foretrækker at bruge den traditionelle sprite-skrifttype med fast størrelse. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marker dette felt, hvis du foretrækker at bruge den traditionelle sprite-skrifttype med fast størrelse STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias skrifttyper -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marker dette felt for at skrifttyper, der kan ændres størrelse, kan udlignes. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marker dette felt for at skrifttyper, der kan ændres størrelse, kan udlignes STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1275,7 +1275,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Ubegrænset pen STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Tillad ubegrænset forbrug og deaktiver virksomheders konkurs STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimum startlån: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Det maksimale beløb en virksomhed kan låne (uden at tage højde for inflation). Hvis den er indstillet til "Intet lån", vil ingen penge være tilgængelige, medmindre de leveres af et spilscript eller indstillingen "Uendelige penge". +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Det maksimale beløb en virksomhed kan låne (uden at tage højde for inflation). Hvis den er indstillet til "Intet lån", vil ingen penge være tilgængelige, medmindre de leveres af et spilscript eller indstillingen "Uendelige penge" STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Intet lån @@ -1359,7 +1359,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Skrånings stej STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Stejlhed af skrå felter for vej køretøjer. Højere værdier gør det vanskeligere at bestige en bakke STR_CONFIG_SETTING_FORBID_90_DEG :Forbyd tog at dreje 90 grader: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 graders drejninger forekommer når et vandret sporstykke er direkte efterfulgt af et lodret sporstykke på det tilstødende felt. Således drejer toget 90 grader når det passerer feltets kant, i stedet for de sædvanlige 45 grader for andre sporkombinationer. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 graders drejninger forekommer når et vandret sporstykke er direkte efterfulgt af et lodret sporstykke på det tilstødende felt. Således drejer toget 90 grader når det passerer feltets kant, i stedet for de sædvanlige 45 grader for andre sporkombinationer STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Tillad sammenkædning af stationer der ikke ligger direkte op ad hinanden: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Tillad tilføjelse af dele til en station uden direkte at røre de eksisterende dele ved at Ctrl+klikke, mens du placerer de nye dele @@ -1471,7 +1471,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Foretrukken sel STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Vælg den foretrukne farve egne selskaber skal starte med STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Startfirma sekundær farve: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Vælg startende sekundær farve for virksomheden, hvis du bruger en NewGRF, der aktiverer det. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Vælg startende sekundær farve for virksomheden, hvis du bruger en NewGRF, der aktiverer det STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Lufthavnenes levealder udløber aldrig: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Aktiveres denne indstilling gøres at hver lufthavnstype forbliver tilgængelig for evigt efter dens indførelse @@ -1495,22 +1495,22 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Køretøjernes STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Når aktiveret, forbliver alle biltyper tilgængelige for evigt efter indførelse STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Tidtagning: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Vælg spillets tidtagningsenheder. Dette kan ikke ændres senere.{}{}Kalenderbaseret er den klassiske OpenTTD-oplevelse, med et år bestående af 12 måneder, og hver måned har 28-31 dage.{}{}I Vægur-baseret tid, lastproduktion og økonomi er i stedet baseret på trin på et minut, hvilket er omtrent lige så lang tid, som en måned på 30 dage tager i kalenderbaseret tilstand. Disse er grupperet i 12-minutters perioder, svarende til et år i kalenderbaseret tilstand.{}{}I begge tilstande er der altid en klassisk kalender, som bruges til introduktionsdatoer for køretøjer, huse og anden infrastruktur. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Vælg spillets tidtagningsenheder. Dette kan ikke ændres senere.{}{}Kalenderbaseret er den klassiske OpenTTD-oplevelse, med et år bestående af 12 måneder, og hver måned har 28-31 dage.{}{}I Vægur-baseret tid, lastproduktion og økonomi er i stedet baseret på trin på et minut, hvilket er omtrent lige så lang tid, som en måned på 30 dage tager i kalenderbaseret tilstand. Disse er grupperet i 12-minutters perioder, svarende til et år i kalenderbaseret tilstand.{}{}I begge tilstande er der altid en klassisk kalender, som bruges til introduktionsdatoer for køretøjer, huse og anden infrastruktur ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalender STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Vægur STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutter om året: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Vælg antallet af minutter i et kalenderår. Standard er 12 minutter. Indstil til 0 for at forhindre kalendertiden i at ændre sig. Denne indstilling påvirker ikke den økonomiske simulering af spillet og er kun tilgængelig, når du bruger vægurs tidtagning. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Vælg antallet af minutter i et kalenderår. Standard er 12 minutter. Indstil til 0 for at forhindre kalendertiden i at ændre sig. Denne indstilling påvirker ikke den økonomiske simulering af spillet og er kun tilgængelig, når du bruger vægurs tidtagning STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (kalendertid frosset) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Skala bygodsproduktion: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Skaler byernes godsproduktion med denne procentdel. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Skaler byernes godsproduktion med denne procentdel STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Skaler industri gods produktion: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skaler industriens gods produktion med denne procentdel. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skaler industriens gods produktion med denne procentdel STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatisk fornyelse af gamle køretøjer: {STRING} @@ -1529,7 +1529,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Varighed af fej STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Varighed for visning fejlmeddelelser i en rød vindue. Bemærk, at nogle (kritisk) fejlmeddelelser ikke lukkes automatisk efter dette tidspunkt, men skal lukkes manuelt STR_CONFIG_SETTING_HOVER_DELAY :Vis værktøjstip: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Forsinkelse inden tooltips vises, når musen føres over nogle den grænseflade . Alternativt tooltips er bundet til den højre museknap, når denne værdi er sat til 0. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Forsinkelse inden tooltips vises, når musen føres over nogle den grænseflade . Alternativt tooltips er bundet til den højre museknap, når denne værdi er sat til 0 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Hold markøren i {COMMA} sekund{P 0 "" er} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Højre klik @@ -1541,7 +1541,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Linjetykkelse i STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Bredde af linjerne i graferne. En tynd linie er mere læsbar, en tykkere linje er nemmere at se og det er lettere at skelne mellem farverne STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Vis navn på NewGRF i byg fartøj vinduet: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Tilføjer en linje til byg fartøj vinduet som viser, hvilken NewGRF det valgte fartøj stammer fra. +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Tilføjer en linje til byg fartøj vinduet som viser, hvilken NewGRF det valgte fartøj stammer fra STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Vis de laster, køretøjerne kan bære i listevinduerne: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Hvis det er aktiveret, vises køretøjets transportable last over det på køretøjslisterne @@ -1561,13 +1561,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industri tæthe STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Angiv hvor mange industrier skal genereres og hvilket niveau der bevares i løbet af spillet STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maksimal afstand fra kant til olieindustrier: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Grænse for hvor langt fra kortets kant olieraffinaderier kan blive bygget. På ø-kort sikrer dette at de er nær kysten. På kort større end 256 felter bliver denne værdi automatisk skaleret op. +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Grænse for hvor langt fra kortets kant olieraffinaderier kan blive bygget. På ø-kort sikrer dette at de er nær kysten. På kort større end 256 felter bliver denne værdi automatisk skaleret op STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snelinjehøjden: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Vælg, i hvilken højde sneen starter i det subarktiske landskab. Sne påvirker også industriproduktion og byvækstkrav. Kan kun ændres via Scenario Editor eller på anden måde beregnes via "snedækning" STR_CONFIG_SETTING_SNOW_COVERAGE :Snedække: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Vælg den omtrentlige mængde sne på det subarktiske landskab. Sne påvirker også industriproduktion og byvækstkrav. Bruges kun under kortgenerering. Havniveau og kystfliser har aldrig sne. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Vælg den omtrentlige mængde sne på det subarktiske landskab. Sne påvirker også industriproduktion og byvækstkrav. Bruges kun under kortgenerering. Havniveau og kystfliser har aldrig sne STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Ørkendækning: {STRING} @@ -1583,7 +1583,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Råt STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Meget råt STR_CONFIG_SETTING_VARIETY :Forskelligheds fordeling: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Vælg om kortet indeholder både bjerge og flade områder. Jo højere sorten er, jo flere højdeforskelle mellem bjergrige og flade områder. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Vælg om kortet indeholder både bjerge og flade områder. Jo højere sorten er, jo flere højdeforskelle mellem bjergrige og flade områder STR_CONFIG_SETTING_RIVER_AMOUNT :Floder antal: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Vælg, hvor mange floder at skabe @@ -1754,7 +1754,7 @@ STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Fjern automatis STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Fjerner automatisk signaler under jernbane-bygning, hvis signalerne er i vejen. Bemærk at dette potentielt kan føre til togsammenstød STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Hurtig kørsel hastighedsgrænse: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Begrænser hvor hurtigt spillet kører, når hurtig kørsel er aktiveret. 0 = ingen grænse (så hurtigt som din computer er i stand til.) Værdier under 100% sænker spillets hastighed. Den øvre grænse afhænger af din computers specifikationer og kan variere afhængig af spillet. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Begrænser hvor hurtigt spillet kører, når hurtig kørsel er aktiveret. 0 = ingen grænse (så hurtigt som din computer er i stand til.) Værdier under 100% sænker spillets hastighed. Den øvre grænse afhænger af din computers specifikationer og kan variere afhængig af spillet STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normal simulationshastighed ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Ingen grænse (så hurtigt din computer er i stand til) @@ -1818,11 +1818,11 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Tillad computer STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes før scriptet bliver stoppet: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximale nummer af udregninger et script kan eksekvere i en tur STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maks hukommelsesforbrug per script: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Hvor meget hukommelse et enkelt script må anvende før det bliver tvungent afbrudt. Det kan være nødvendigt at forøge dette for spil på store kort. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Hvor meget hukommelse et enkelt script må anvende før det bliver tvungent afbrudt. Det kan være nødvendigt at forøge dette for spil på store kort STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Service intervaller er i procent: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Når den er aktiveret, forsøger køretøjer at servicere, når deres pålidelighed falder med en given procentdel af den maksimale pålidelighed.Hvis f.eks. et køretøjs maksimale pålidelighed er 90 %, og serviceintervallet er 20 %, vil køretøjet forsøge at servicere, når den når 72 % pålidelighed. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Når den er aktiveret, forsøger køretøjer at servicere, når deres pålidelighed falder med en given procentdel af den maksimale pålidelighed.{}{}Hvis f.eks. et køretøjs maksimale pålidelighed er 90 %, og serviceintervallet er 20 %, vil køretøjet forsøge at servicere, når den når 72 % pålidelighed STR_CONFIG_SETTING_SERVINT_TRAINS :Standard vedligeholdelses interval for tog: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Sæt serviceintervallets standardværdi for nye skinnekøretøjer. @@ -1840,7 +1840,7 @@ STR_CONFIG_SETTING_NOSERVICE :Slå service fr STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Når tilladt, bliver køretøjer ikke serviceret, hvis de ikke kan bryde ned STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Læsningshastighedsstraf for tog, der er længere end stationen: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Når den er aktiveret, læsser et tog, der er for lange til stationen, langsommere end et tog, der passer til stationen. Denne indstilling påvirker ikke stifinding. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Når den er aktiveret, læsser et tog, der er for lange til stationen, langsommere end et tog, der passer til stationen. Denne indstilling påvirker ikke stifinding STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Aktiver hastighedsbegrænsning for vogne: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Når tilladt, brug også fartgrænse på vogne, for at bestemme makshastigheden på tog @@ -1905,13 +1905,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Året hvor nyhe STR_CONFIG_SETTING_STARTING_YEAR :Start dato: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Slutår for pointoptælling: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Årstal hvor spillet slutter pointoptælling. Ved slutningen af dette år bliver selskabets point optaget, og topresultater-skærmen bliver vist. Spillerne kan fortsætte med at spille efter dette.{}Hvis dette er før spillets start år, bliver topresultater-skærmen aldrig vist. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Årstal hvor spillet slutter pointoptælling. Ved slutningen af dette år bliver selskabets point optaget, og topresultater-skærmen bliver vist. Spillerne kan fortsætte med at spille efter dette.{}Hvis dette er før spillets start år, bliver topresultater-skærmen aldrig vist STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Aldrig STR_CONFIG_SETTING_ECONOMY_TYPE :Økonomitype: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Udjævnet økonomi ændrer produktionsniveauet oftere, og i mindre trin. Frossen økonomi forhindrer ændringer i produktionsniveauet og industrilukninger. Denne indstilling kan muligvis ikke have nogen effekt hvis industrityperne stammer fra en NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Udjævnet økonomi ændrer produktionsniveauet oftere, og i mindre trin. Frossen økonomi forhindrer ændringer i produktionsniveauet og industrilukninger. Denne indstilling kan muligvis ikke have nogen effekt hvis industrityperne stammer fra en NewGRF ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Udjævnet @@ -1966,7 +1966,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Tilladt STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Tilladt, tilpasset by-layout STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Godsgenerering i byer: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Hvor meget gods der bliver produceret af byers bygninger, i forhold til byens samlede indbyggertal.{}Kvadratisk vækst: En by med dobbelt indbyggertal genererer fire gange så mange passagerer.{}Lineær vækst: En by med dobbelt indbyggertal genererer dobbelt så mange passagerer. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Hvor meget gods der bliver produceret af byers bygninger, i forhold til byens samlede indbyggertal.{}Kvadratisk vækst: En by med dobbelt indbyggertal genererer fire gange så mange passagerer.{}Lineær vækst: En by med dobbelt indbyggertal genererer dobbelt så mange passagerer ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kvadratisk (original) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineær @@ -2007,7 +2007,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Højeste sprite-opløsning der må anvendes: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Begrænser den maksimale opløsning for sprites. Denne begrænsning vil forhindre brug af højopløsningsgrafik selv når den er tilgængelig. Dette kan bevare en ensartet fremtoning af spillet når der er en blanding af GRF filer med og uden højopløsningsgrafik. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Begrænser den maksimale opløsning for sprites. Denne begrænsning vil forhindre brug af højopløsningsgrafik selv når den er tilgængelig. Dette kan bevare en ensartet fremtoning af spillet når der er en blanding af GRF filer med og uden højopløsningsgrafik ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2036,7 +2036,7 @@ STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Tag {STRING}{NB STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tid det tager for hver genberegning af en linkgrafkomponent. Når en genberegning startes, dannes en tråd, som får lov til at køre i dette antal sekunder. Jo kortere du indstiller dette, jo mere sandsynligt er det, at tråden ikke er færdig, når den skal. Så stopper spillet, indtil det er ("lag"). Jo længere du indstiller det, jo længere tid tager det for distributionen at blive opdateret, når ruter ændres STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distributionsmodel for passagerer: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetrisk" betyder, at omtrent det samme antal passagerer vil gå fra en station A til en station B som fra B til A. "Asymmetrisk" betyder, at vilkårlige antal passagerer kan gå i begge retninger. "Manuel" betyder, at der ikke finder nogen automatisk distribution sted for passagerer. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetrisk" betyder, at omtrent det samme antal passagerer vil gå fra en station A til en station B som fra B til A. "Asymmetrisk" betyder, at vilkårlige antal passagerer kan gå i begge retninger. "Manuel" betyder, at der ikke finder nogen automatisk distribution sted for passagerer STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distributionsmodel for post: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"symmetrisk" betyder, at der sendes omtrent den samme mængde post fra en station A til en station B som fra B til A. "asymmetrisk" betyder, at vilkårlige mængder post kan sendes i begge retninger. "Manuel" betyder, at der ikke finder automatisk distribution sted for post STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distributionsmodel for PANSRET last-klasse: {STRING} @@ -2052,12 +2052,12 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Distributionsn STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Jo højere du sætter denne indstilling, jo mere CPU-tid vil beregningen af forbindelsesgrafen tage. Hvis den tager for længe, kan du opleve lag. Hvis du derimod sætter indstillingen til en lav værdi, vil distributionen være unøjagtig, og du kan opleve last ikke blive sendt til de steder, du forventer STR_CONFIG_SETTING_DEMAND_DISTANCE :Effekt af afstand på efterspørgsel: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Hvis du sætter denne indstilling til en værdi større end 0, vil afstanden mellem oprindelsesstation A for noget last og en mulig destination B have en effekt på mængden af last sendt fra A til B. Jo længere væk B er fra A, jo mindre last vil blive sendt. Jo højere du sætter denne indstilling, jo mindre last vil blive sendt til fjerne stationer, og jo mere last vil blive sendt til nærliggende stationer. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Hvis du sætter denne indstilling til en værdi større end 0, vil afstanden mellem oprindelsesstation A for noget last og en mulig destination B have en effekt på mængden af last sendt fra A til B. Jo længere væk B er fra A, jo mindre last vil blive sendt. Jo højere du sætter denne indstilling, jo mindre last vil blive sendt til fjerne stationer, og jo mere last vil blive sendt til nærliggende stationer STR_CONFIG_SETTING_DEMAND_SIZE :Mængde returnerende last for symmetrisk model: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Ved at sætte denne indstilling til mindre end 100%, opfører den symmetriske distribution sig mere som den asymmetriske. Mindre last vil blive tvunget sendt tilbage hvis en bestemt mængde er blevet sendt til en station. Hvis du sætter denne indstilling til 0%, vil den symmetriske distribution opfører sig ligesom den asymmetriske. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Ved at sætte denne indstilling til mindre end 100%, opfører den symmetriske distribution sig mere som den asymmetriske. Mindre last vil blive tvunget sendt tilbage hvis en bestemt mængde er blevet sendt til en station. Hvis du sætter denne indstilling til 0%, vil den symmetriske distribution opfører sig ligesom den asymmetriske STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Mætning af korte veje før brug af veje med høj kapacitet: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Der er ofte flere veje mellem to givne stationer. Cargodist vil mætte den korteste vej først, så bruge den næstkorteste vej indtil den er mættet, osv.. Mætning bestemmes af en vurdering af kapacitet og planlagt brug. Når den har mættet alle veje, og hvis der stadig er efterspørgsel tilbage, vil den overbelaste alle veje, og foretrække vejene med høj kapacitet. Det meste af tiden vil algoritmen dog ikke vurdere kapaciteten nøjagtigt. Denne indstilling giver dig mulighed for at bestemme op til hvilken procentdel en kortere vej skal være mættet i første omgang før den næste, længere vej vælges. Sæt denne indstilling til mindre end 100% for at undgå overfyldte stationer i tilfælde af overvurderet kapacitet. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Der er ofte flere veje mellem to givne stationer. Cargodist vil mætte den korteste vej først, så bruge den næstkorteste vej indtil den er mættet, osv.. Mætning bestemmes af en vurdering af kapacitet og planlagt brug. Når den har mættet alle veje, og hvis der stadig er efterspørgsel tilbage, vil den overbelaste alle veje, og foretrække vejene med høj kapacitet. Det meste af tiden vil algoritmen dog ikke vurdere kapaciteten nøjagtigt. Denne indstilling giver dig mulighed for at bestemme op til hvilken procentdel en kortere vej skal være mættet i første omgang før den næste, længere vej vælges. Sæt denne indstilling til mindre end 100% for at undgå overfyldte stationer i tilfælde af overvurderet kapacitet STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Hastighedsenheder: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Hastighedsenheder (nautisk): {STRING} @@ -2979,9 +2979,9 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Placer t STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Tilfældige træer STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plant træer tilfældigt i landskabet STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plant individuelle træer ved at trække hen over landskabet. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plant individuelle træer ved at trække hen over landskabet STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Lund -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plant små skove ved at trække hen over landskabet. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plant små skove ved at trække hen over landskabet STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Skov STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plant store skove ved at trække hen over landskabet @@ -3198,9 +3198,9 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Billedhastighed STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulationshastighed: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Antal spil-trin simuleret i sekundet. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Antal spil-trin simuleret i sekundet STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafik hastighed: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Antal billeder tegnet i sekundet. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Antal billeder tegnet i sekundet STR_FRAMERATE_SPEED_FACTOR :{BLACK}Aktuel spilhastighedsfaktor: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hvor hurtigt spillet aktuelt kører, i forhold til det forventede ved normal simulationshastighed STR_FRAMERATE_CURRENT :{WHITE}Aktuel @@ -3731,7 +3731,7 @@ STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Global H STR_STORY_BOOK_SPECTATOR :Global Historiebog STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Side {NUM} -STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Gå til en bestemt side ved at vælge den i denne rulleliste. +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Gå til en bestemt side ved at vælge den i denne rulleliste STR_STORY_BOOK_PREV_PAGE :{BLACK}Forrige STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Gå til forrige side STR_STORY_BOOK_NEXT_PAGE :{BLACK}Næste @@ -4031,7 +4031,7 @@ STR_GROUP_CREATE_TOOLTIP :{BLACK}Klik for STR_GROUP_DELETE_TOOLTIP :{BLACK}Slet den valgte gruppe STR_GROUP_RENAME_TOOLTIP :{BLACK}Omdøb den valgte gruppe STR_GROUP_LIVERY_TOOLTIP :{BLACK}Skift farvetema for den valgte gruppe -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klik for at beskytte denne gruppe mod global auto-udskiftning Ctrl+klik beskytter også undergrupper. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klik for at beskytte denne gruppe mod global auto-udskiftning Ctrl+klik beskytter også undergrupper STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Slet gruppe STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Er du sikker på at du vil slette denne gruppe og eventuelle under grupper? diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 9761843e72..2abe6c5861 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1054,9 +1054,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Skaalaa STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Valitse tämä ruutu reunusten skaalaamiseksi käyttöliittymän koon mukaan STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Käytä perinteistä sprite-fonttia -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Valitse tämä ruutu käyttääksesi perinteistä kiinteäkokoista sprite-kirjasintyyppiä. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Valitse tämä ruutu käyttääksesi perinteistä kiinteäkokoista sprite-kirjasintyyppiä STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Pehmennä kirjasinten reunoja -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Valitse tämä ruutu pehmentääksesi muuttuvan kokoisten fonttien reunoja. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Valitse tämä ruutu pehmentääksesi muuttuvan kokoisten fonttien reunoja STR_GAME_OPTIONS_GUI_SCALE_1X :1× STR_GAME_OPTIONS_GUI_SCALE_2X :2× @@ -1275,7 +1275,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Loputon raha: { STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Salli rajaton rahankäyttö ja estä yritysten konkurssit STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Suurin mahdollinen laina alussa: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Enimmäissumma, jonka yritys voi lainata (ottamatta huomioon inflaatiota). Jos tämä on ”ei lainaa”, rahaa ei ole käytettävissä ilman peliskriptiä tai ”loputon raha” -asetusta. +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Enimmäissumma, jonka yritys voi lainata (ottamatta huomioon inflaatiota). Jos tämä on ”ei lainaa”, rahaa ei ole käytettävissä ilman peliskriptiä tai ”loputon raha” -asetusta STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Ei lainaa @@ -1471,7 +1471,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Yhtiön väri a STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Valitse yhtiön aloitusväri STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Yhtiön toissijainen väri alussa: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Valitse yhtiön toissijainen aloitusväri käytettäessä NewGRF:ää, joka mahdollistaa sen. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Valitse yhtiön toissijainen aloitusväri käytettäessä NewGRF:ää, joka mahdollistaa sen STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Lentokentät eivät vanhene: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Mikäli käytössä, kaikki lentokenttätyypit ovat saatavilla ikuisesti niiden julkistamisen jälkeen @@ -1495,13 +1495,13 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Kulkuneuvot eiv STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Mikäli käytössä, kaikki kulkuneuvot ovat saatavilla ikuisesti niiden julkistamisen jälkeen STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Ajanlasku: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Valitse pelin aikayksiköt. Tätä ei voi muuttaa myöhemmin.{}{}Kalenteripohjainen on klassinen OpenTTD-kokemus, jossa vuosi koostuu 12 kuukaudesta ja jokaisessa kuukaudessa on 28–31 päivää.{}{}Seinäkellopohjaisessa ajassa sen sijaan rahdin tuotanto ja talous perustuvat yhden minuutin askeliin, mikä on suunnilleen yhtä pitkä aika kuin 30 päivän kuukausi kalenteripohjaisessa tilassa. Nämä on ryhmitelty 12 minuutin jaksoihin, jotka vastaavat vuotta kalenteripohjaisessa tilassa.{}{}Kummassakin tilassa on aina myös klassinen kalenteri, jota käytetään kulkuneuvojen sekä talojen ja muun infrastruktuurin käyttöönottoajankohtiin. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Valitse pelin aikayksiköt. Tätä ei voi muuttaa myöhemmin.{}{}Kalenteripohjainen on klassinen OpenTTD-kokemus, jossa vuosi koostuu 12 kuukaudesta ja jokaisessa kuukaudessa on 28–31 päivää.{}{}Seinäkellopohjaisessa ajassa sen sijaan rahdin tuotanto ja talous perustuvat yhden minuutin askeliin, mikä on suunnilleen yhtä pitkä aika kuin 30 päivän kuukausi kalenteripohjaisessa tilassa. Nämä on ryhmitelty 12 minuutin jaksoihin, jotka vastaavat vuotta kalenteripohjaisessa tilassa.{}{}Kummassakin tilassa on aina myös klassinen kalenteri, jota käytetään kulkuneuvojen sekä talojen ja muun infrastruktuurin käyttöönottoajankohtiin ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalenteri STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Seinäkello STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minuuttia vuodessa: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Valitse minuuttien määrä kalenterivuodessa. Oletusarvo on 12 minuuttia. Aseta arvoksi 0, jos et halua kalenteriajan muuttuvan. Tämä asetus ei vaikuta pelin taloussimulaatioon, ja se on valittavissa vain seinäkelloaikaa käytettäessä. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Valitse minuuttien määrä kalenterivuodessa. Oletusarvo on 12 minuuttia. Aseta arvoksi 0, jos et halua kalenteriajan muuttuvan. Tämä asetus ei vaikuta pelin taloussimulaatioon, ja se on valittavissa vain seinäkelloaikaa käytettäessä STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special @@ -1510,7 +1510,7 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (kalenteriaik STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Skaalaa taajamarahdin tuotantoa: {STRING} STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Skaalaa kuntien tuottaman rahdin määrää tällä prosenttiluvulla STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Skaalaa teollisuusrahdin tuotantoa: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skaalaa tuotantolaitosten tuottaman rahdin määrää tällä prosenttiluvulla. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skaalaa tuotantolaitosten tuottaman rahdin määrää tällä prosenttiluvulla STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}{NBSP}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Uudista kulkuneuvo automaattisesti, kun se vanhenee: {STRING} @@ -1575,7 +1575,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Säätele aavik STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}{NBSP}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Maaston epätasaisuus: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Määritä mäkien muoto ja tiheys. Tasaisessa maastossa mäkiä on vähemmän ja ne ovat laajempia, kun taas epätasaisessa maastossa on useampia pienempiä mäkiä. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Määritä mäkien muoto ja tiheys. Tasaisessa maastossa mäkiä on vähemmän ja ne ovat laajempia, kun taas epätasaisessa maastossa on useampia pienempiä mäkiä ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Erittäin tasainen STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Tasainen @@ -1583,7 +1583,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Epätasainen STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Erittäin epätasainen STR_CONFIG_SETTING_VARIETY :Maaston vaihtelu: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Valitse, onko kartalla sekä vuoristoisia että tasaisia alueita. Mitä suurempi on vaihtelu, sitä suurempia ovat korkeuserot vuoristoisten ja tasaisten alueiden välillä. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Valitse, onko kartalla sekä vuoristoisia että tasaisia alueita. Mitä suurempi on vaihtelu, sitä suurempia ovat korkeuserot vuoristoisten ja tasaisten alueiden välillä STR_CONFIG_SETTING_RIVER_AMOUNT :Jokien määrä: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Valitse, kuinka paljon jokia luodaan @@ -1630,7 +1630,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Tummanvihreä STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violetti STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Rahtivirtapeitteen värit: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Aseta rahtivirtapeitteen väriteema. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Aseta rahtivirtapeitteen väriteema ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Vihreästä punaiseen (alkup.) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Vihreästä siniseen @@ -1754,7 +1754,7 @@ STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Poista automaat STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Poista automaattisesti opastimia, jos ne ovat rautatien rakentamisen tiellä. Huomaa, että tämä saattaa johtaa junien yhteentörmäyksiin STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Nopeutetun pelin enimmäisnopeus: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Yläraja pelin nopeudelle, kun pelin nopeutus on käytössä. 0 = ei rajoitusta (niin nopeasti kuin tietokoneesi sallii). Alle 100 %:n arvot hidastavat peliä. Yläraja riippuu tietokoneesi ominaisuuksista ja voi vaihdella pelistä riippuen. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Yläraja pelin nopeudelle, kun pelin nopeutus on käytössä. 0 = ei rajoitusta (niin nopeasti kuin tietokoneesi sallii). Alle 100 %:n arvot hidastavat peliä. Yläraja riippuu tietokoneesi ominaisuuksista ja voi vaihdella pelistä riippuen STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM} % pelin normaalinopeudesta ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Ei rajoitusta (niin nopeasti kuin koneesi sallii) @@ -1818,7 +1818,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Sallii tietokon STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Operaatiokoodien määrä ennen skriptin pysäyttämistä: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Suurin sallittu määrä laskutoimituksia, jonka skripti voi suorittaa yhden vuoron aikana STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Skriptikohtainen muistinkäyttö enintään: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Kuinka paljon muistia yksittäinen skripti saa käyttää, ennen kuin se pakotetaan lopettamaan. Jos kartta on iso, tätä arvoa voi joutua suurentamaan. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Kuinka paljon muistia yksittäinen skripti saa käyttää, ennen kuin se pakotetaan lopettamaan. Jos kartta on iso, tätä arvoa voi joutua suurentamaan STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Huoltovälit ovat prosentteina: {STRING} @@ -1840,7 +1840,7 @@ STR_CONFIG_SETTING_NOSERVICE :Poista huollot STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Mikäli käytössä, kulkuneuvoja ei huolleta, jos ne eivät voi rikkoutua STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Alennettu lastausnopeus asemaa pitemmille junille: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Mikäli käytössä, rautatieasemaa pitemmät junat kuormataan asemalle kokonaan mahtuvia hitaammin. Tämä asetus ei vaikuta reittien laskentaan. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Mikäli käytössä, rautatieasemaa pitemmät junat kuormataan asemalle kokonaan mahtuvia hitaammin. Tämä asetus ei vaikuta reittien laskentaan STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ota käyttöön vaunujen nopeusrajoitukset: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Mikäli käytössä, vaunujen nopeusrajoitusta käytetään junan maksiminopeuden määrittämisessä @@ -1905,13 +1905,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Vuosi, josta al STR_CONFIG_SETTING_STARTING_YEAR :Aloitusvuosi: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Pistelaskun päättymisvuosi: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Pelin päättymisvuosi pisteiden laskemista varten. Tämän vuoden lopussa talletetaan yhtiön pistemäärä ja näytetään ennätysluettelo; pelaajat voivat jatkaa pelaamista tämän jälkeenkin.{}Jos päättymisvuosi on ennen alkamisvuotta, ennätyksiä ei näytetä koskaan. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Pelin päättymisvuosi pisteiden laskemista varten. Tämän vuoden lopussa talletetaan yhtiön pistemäärä ja näytetään ennätysluettelo; pelaajat voivat jatkaa pelaamista tämän jälkeenkin.{}Jos päättymisvuosi on ennen alkamisvuotta, ennätyksiä ei näytetä koskaan STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Ei koskaan STR_CONFIG_SETTING_ECONOMY_TYPE :Talouden laji: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Tasaisessa taloudessa tuotanto muuttuu useammin, ja pienemmissä askeleissa, kuin alkuperäisessä. Jäädytetty talous estää tuotantomuutokset ja laitosten sulkeutumiset. Tämä asetus ei välttämättä vaikuta, jos teollisuustyypit tulevat NewGRF:stä. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Tasaisessa taloudessa tuotanto muuttuu useammin, ja pienemmissä askeleissa, kuin alkuperäisessä. Jäädytetty talous estää tuotantomuutokset ja laitosten sulkeutumiset. Tämä asetus ei välttämättä vaikuta, jos teollisuustyypit tulevat NewGRF:stä ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Alkuperäinen STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Tasainen @@ -2007,7 +2007,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Korkein käytettävä sprite-resoluutio: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Rajoita suurinta spriteille käytettävää resoluutiota. Resoluution rajoittaminen estää korkean tarkkuuden grafiikoiden käyttämisen vaikka niitä olisi saatavilla. Tämä voi auttaa pitämään pelin ulkoasun yhtenäisenä käytettäessä sekaisin GRF-tiedostoja, joista osalla on ja osalla ei ole korkean tarkkuuden grafiikoita. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Rajoita suurinta spriteille käytettävää resoluutiota. Resoluution rajoittaminen estää korkean tarkkuuden grafiikoiden käyttämisen, vaikka niitä olisi saatavilla. Tämä voi auttaa pitämään pelin ulkoasun yhtenäisenä käytettäessä sekaisin GRF-tiedostoja, joista osassa on ja osassa ei ole korkean tarkkuuden grafiikoita ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4× STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2× @@ -2049,7 +2049,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :epäsymmetrinen STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :symmetrinen STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Jakautumisen tarkkuus: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Mitä suuremmaksi tämä asetus on määritetty, sitä enemmän prosessoriaikaa yhteyskuvaajan laskemiseen kuluu. Mikäli tähän kuluu liian paljon aikaa, saatat havaita pelin nykimistä. Jos arvo on määritetty liian pieneksi, jakauman laskeminen ei ole tarkka ja rahtia ei välttämättä lähetetä odotetuille asemille. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Mitä suuremmaksi tämä asetus on määritetty, sitä enemmän prosessoriaikaa yhteyskuvaajan laskemiseen kuluu. Mikäli tähän kuluu liian paljon aikaa, saatat havaita pelin nykimistä. Jos arvo on määritetty liian pieneksi, jakauman laskeminen ei ole tarkkaa, ja rahtia ei välttämättä lähetetä odotettuihin paikkoin STR_CONFIG_SETTING_DEMAND_DISTANCE :Välimatkan vaikutus kysyntään: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Mikäli tämä arvo on asetettu suuremmaksi kuin 0, rahdin lähtöaseman A ja mahdollisen määränpään B välimatka vaikuttaa A:sta B:hen lähetetyn rahdin määrään. Mitä kauempana B on A:sta, sitä vähemmän rahtia lähetetään. Mitä suurempi tämän asetuksen arvo on, sitä vähemmän rahtia lähetetään kaukana oleville asemille ja sitä enemmän lähellä oleville @@ -2057,7 +2057,7 @@ STR_CONFIG_SETTING_DEMAND_SIZE :Palautettavan r STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Mikäli asetuksen arvoksi on määritetty alle 100{NBSP}%, symmetrinen jakauma toimii enemmän epäsymmetrisen jakauman tavoin, ja vähemmän rahtia pakotetaan lähetettäväksi takaisin alkuperäiselle asemalle. Jos arvoksi määritetään 0{NBSP}%, symmetrinen jakauma toimii täysin epäsymmetrisen jakauman tavoin STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Lyhyiden reittien kuormittuminen ennen vapaampien reittien käyttämistä: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Kahden aseman välillä on usein useita reittejä. Lyhintä reittiä käytetään ensisijaisesti, toiseksi lyhintä ensimmäisen kuormittuessa ja niin edelleen. Kuormitus määritellään arvioidun kapasiteetin ja suunnitellun käytön mukaan. Kaikkien reittien ollessa kuormittuneita reittejä aletaan ylikuormittaa, suurimman kapasiteetin omaavista reiteista aloittaen. Algoritmi ei kuitenkaan aina arvioi kapasiteettia oikein. Tämä asetus mahdollistaa reitin kuormitustason määrittämisen ennen seuraavan reitin käyttämistä. Määritä arvoksi vähemmän kuin 100{NBSP}% välttääksesi ylikuormittuneita asemia, jos kapasiteetti yliarvioidaan. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Kahden aseman välillä on usein useita reittejä. Lyhintä reittiä käytetään ensisijaisesti, toiseksi lyhintä ensimmäisen kuormittuessa ja niin edelleen. Kuormitus määritellään arvioidun kapasiteetin ja suunnitellun käytön mukaan. Kaikkien reittien ollessa kuormittuneita reittejä aletaan ylikuormittaa, suurimman kapasiteetin omaavista reiteistä aloittaen. Useimmiten algoritmi ei kuitenkaan arvioi kapasiteettia tarkasti. Tämä asetus mahdollistaa reitin kuormitustason määrittämisen ennen seuraavan reitin käyttämistä. Määritä arvoksi vähemmän kuin 100{NBSP}% välttääksesi ylikuormittuneita asemia, jos kapasiteetti yliarvioidaan STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Nopeuden yksikkö (maaliikenne): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Nopeuden yksikkö (vesiliikenne): {STRING} @@ -2979,11 +2979,11 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Istuta s STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Satunnaisia puita. STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Istuta puita satunnaisesti maastoon STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Tavallinen -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Istuta yksittäisiä puita vetämällä. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Istuta yksittäisiä puita vetämällä pitkin maisemaa STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Metsikkö -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Istuta pieniä metsiä vetämällä. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Istuta pieniä metsiä vetämällä pitkin maisemaa STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Metsä -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Istuta isoja metsiä vetämällä. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Istuta isoja metsiä vetämällä pitkin maisemaa # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Maanrakennus @@ -4026,12 +4026,12 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Muut ilma-aluks STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Ryhmät – napsauta ryhmää nähdäksesi kaikki kulkuneuvot tässä ryhmässä. Järjestä ryhmiä vetämällä ja pudottamalla. +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Ryhmät – napsauta ryhmää nähdäksesi kaikki kulkuneuvot tässä ryhmässä. Järjestä hierarkia vetämällä ja pudottamalla ryhmiä STR_GROUP_CREATE_TOOLTIP :{BLACK}Luo ryhmä STR_GROUP_DELETE_TOOLTIP :{BLACK}Poista valittu ryhmä STR_GROUP_RENAME_TOOLTIP :{BLACK}Nimeä valittu ryhmä STR_GROUP_LIVERY_TOOLTIP :{BLACK}Muuta valitun ryhmän väritystä -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Napsauta suojataksesi tämä ryhmä yleiseltä automaattikorvaukselta. Ctrl+napsautus suojaa myös aliryhmät. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Napsauta suojataksesi tämä ryhmä yleiseltä automaattikorvaukselta. Ctrl+napsautus suojaa myös aliryhmät STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Poista ryhmä STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Haluatko varmasti poistaa tämän ryhmän ja sen alaryhmät? diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 24d67a6c84..57f769421c 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1331,8 +1331,8 @@ STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Du kan i STR_CONFIG_SETTING_AUTOSLOPE :Tillat endring av landskap under bygninger, spor, osv.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Tillat endring av landskapet under bygninger og spor uten å fjerne dem -STR_CONFIG_SETTING_CATCHMENT :Mer realistisk størrelse på oppfangingsområder: {STRING} -STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Ha oppsamlingsområder i forskjellige størrelser for forskjellige typer stasjoner og lufthavner +STR_CONFIG_SETTING_CATCHMENT :Mer realistisk størrelse på dekningsområder: {STRING} +STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Ha dekningssområder i forskjellige størrelser for forskjellige typer stasjoner og lufthavner STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Selskapets stasjoner kan betjene industrier med tilknyttede nøytrale stasjoner: {STRING} STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Hvis aktivert, vil industrier med tilknyttede stasjoner (slik som oljerigger) også kunne betjenes av selskapseide stasjoner bygget i nærheten. Hvis deaktivert, vil disse industriene bare kunne betjenes av sine tilknyttede stasjoner. Nærliggende selskapsstasjoner vil ikke kunne betjene dem, heller ikke vil den tilknyttede stasjonen betjene noe annet enn industrien @@ -4384,7 +4384,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Valgt lu # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Laster / Losser STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Forlater -STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Venter på å dele +STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Venter på å fjerne klumping STR_VEHICLE_STATUS_CRASHED :{RED}Krasjet! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Havarert STR_VEHICLE_STATUS_STOPPED :{RED}Stoppet @@ -4398,7 +4398,7 @@ STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCI STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Har kurs mot {0:WAYPOINT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - På vei til {0:DEPOT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} Vedlikehold ved {0:DEPOT} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Del og vedlikehold ved {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Fjern klumping og vedlikehold ved {0:DEPOT} STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - Kan ikke nå {0:STATION} STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Kan ikke nå {0:WAYPOINT} @@ -4566,7 +4566,7 @@ STR_ORDER_DROP_REFIT_AUTO_ANY :Tilgjengelig va STR_ORDER_DROP_GO_ALWAYS_DEPOT :Alltid gå STR_ORDER_DROP_SERVICE_DEPOT :Vedlikehold ved behov STR_ORDER_DROP_HALT_DEPOT :Stopp -STR_ORDER_DROP_UNBUNCH :Del +STR_ORDER_DROP_UNBUNCH :Fjern klumping # Depot action tooltips, one per vehicle type ###length VEHICLE_TYPES @@ -4643,7 +4643,7 @@ STR_ORDER_REFIT_ORDER :(Bygg om til {S STR_ORDER_REFIT_STOP_ORDER :(Bygg om til {STRING} og stopp) STR_ORDER_STOP_ORDER :(Stopp) -STR_ORDER_WAIT_TO_UNBUNCH :(vent på å dele) +STR_ORDER_WAIT_TO_UNBUNCH :(vent for å fjerne klumping) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Kan ikke bruke stasjon){POP_COLOUR} {STRING} {STATION} {STRING} @@ -5113,11 +5113,11 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Kan ikke STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Feil type garasje/stall/hangar/dokk # Depot unbunching related errors -STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... kan bare ha én deleordre -STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... kan ikke bruke full last-ordre når transportmiddel har en deleordre -STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... kan ikke dele et kjøretøy med en full last-ordre -STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... kan ikke bruke ordre med betingelser når transportmiddel har en deleordre -STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... kan ikke dele et kjøretøy med en betinget ordre +STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... kan bare ha én ordre om å fjerne klumping +STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... kan ikke bruke full last-ordre når kjøretøyet har en ordre om å fjerne klumping +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... kan ikke fjerne klumping på et kjøretøy med en full last-ordre +STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... kan ikke bruke betingede ordre når kjøretøyet har en ordre om å fjerne klumping +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... kan ikke fjerne klumping på et kjøretøy med en betinget ordre # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} er for langt etter utskiftning diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 4a6c3493fc..9e7800f547 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -811,7 +811,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}地图 # Status bar messages STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}显示最后一条消息或新闻 STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - -STR_STATUSBAR_PAUSED :{YELLOW}* * 已暂停 * * +STR_STATUSBAR_PAUSED :{YELLOW}* * 已暂停 * * STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * 已暂停 (等待货物分配图更新) * * STR_STATUSBAR_AUTOSAVE :{RED}自动保存 STR_STATUSBAR_SAVING_GAME :{RED}* * 保存游戏中 * * diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 9e8e075118..1fed3fbbb9 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1276,7 +1276,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Dinero infinito STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Permite el gasto infinito y desactiva la bancarrota de empresas STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Préstamo máximo inicial: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Máxima cantidad que una empresa puede pedir prestada (sin tener en cuenta la inflación). Si se selecciona "Sin préstamo", no habrá fondos disponibles a menos que un script del juego los proporcione o esté activada la opción "Dinero infinito" +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Cantidad máxima de dinero que una empresa puede pedir prestada (sin tener en cuenta la inflación). Si se selecciona "Sin préstamo", no habrá fondos disponibles a menos que un script del juego los proporcione o esté activada la opción "Dinero infinito" STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sin préstamo @@ -1631,7 +1631,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Verde oscuro STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violeta STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Colores de Flujos de Carga: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Esquema de color de los indicadores visuales del flujo de carga +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Esquema de color de los indicadores visuales del grafo de los flujos de carga ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :De verde a rojo (original) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :De verde a azul @@ -1752,7 +1752,7 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Mantener activa STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Mantiene las herramientas de construcción de puentes, túneles, etcétera, abiertas después de su uso STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Eliminar automáticamente las señales durante la construcción de ferrocarril: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Elimina las señales de forma automática durante al construir vías férreas si las señales están en el camino. Ten en cuenta que esto puede provocar choques entre trenes +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Elimina las señales de forma automática al construir vías férreas si las señales están en el camino. Ten en cuenta que esto puede provocar choques entre trenes STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Límite de velocidad para el avance rápido: {STRING} STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Límite de la velocidad de juego cuando se activa el avance rápido. 0 = sin límite (tan rápido como lo permita el ordenador). Los valores inferiores a 100% ralentizan el juego. El límite superior depende de las características del ordenador y pueden variar dependiendo de la partida @@ -3201,7 +3201,7 @@ STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Tasa de Simulación: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Número de tics de juego simulados por segundo STR_FRAMERATE_RATE_BLITTER :{BLACK}FPS de gráficos: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Número de cuadros dibujados por segundo +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Número de fotogramas de vídeo renderizados por segundo STR_FRAMERATE_SPEED_FACTOR :{BLACK}Factor actual de velocidad de juego: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Velocidad actual del juego, comparada con la velocidad esperada durante una simulación a ritmo normal STR_FRAMERATE_CURRENT :{WHITE}Actual @@ -4027,12 +4027,12 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Aeronaves sin a STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - Haz clic en un grupo para ver la lista de sus vehículos. Es posible arrastrar y soltar grupos para reorganizar los elementos +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - Haz clic en un grupo para ver la lista de sus vehículos. Arrastra y suelta los grupos para reorganizarlos STR_GROUP_CREATE_TOOLTIP :{BLACK}Clica para crear un grupo nuevo STR_GROUP_DELETE_TOOLTIP :{BLACK}Borra el grupo seleccionado STR_GROUP_RENAME_TOOLTIP :{BLACK}Renombra el grupo seleccionado STR_GROUP_LIVERY_TOOLTIP :{BLACK}Cambia el color del grupo seleccionado -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Haz clic para evitar que los vehículos en este grupo se reemplacen automáticamente. Ctrl+Clic protege también a los subgrupos +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clica para evitar que los vehículos en este grupo se reemplacen automáticamente. Ctrl+clic protege también a los subgrupos STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Borrar Grupo STR_GROUP_DELETE_QUERY_TEXT :{WHITE}¿Estás seguro de que quieres borrar este grupo y todos sus subgrupos? diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 995d6ecf94..3219a4fddd 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -668,6 +668,7 @@ STR_ABOUT_MENU_ABOUT_OPENTTD :Про гру ' STR_ABOUT_MENU_SPRITE_ALIGNER :Вирівнювання спрайтів STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Вкл./відкл. обмежуючі рамки STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Вкл./відкл. підсвічування застарілих блоків +STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Увімкнути межі віджета ###length 31 STR_DAY_NUMBER_1ST :1 @@ -1086,6 +1087,7 @@ STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Вибе STR_GAME_OPTIONS_TAB_SOUND :Звук STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Виберіть налаштування звуку та музики STR_GAME_OPTIONS_TAB_SOCIAL :Соціальні платформи +STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}Оберіть налаштування інтеграції соціальних мереж STR_GAME_OPTIONS_VOLUME :Гучність STR_GAME_OPTIONS_SFX_VOLUME :Звукові ефекти @@ -1146,6 +1148,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Індійсь STR_GAME_OPTIONS_CURRENCY_IDR :Індонезійська рупія STR_GAME_OPTIONS_CURRENCY_MYR :Малайзійський рингіт STR_GAME_OPTIONS_CURRENCY_LVL :Латвійські лати +STR_GAME_OPTIONS_CURRENCY_PTE :Португальське ескудо STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Автозбереження STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Виберіть період автозбереження гри @@ -1188,9 +1191,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Межі STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :BLACK}Увімкнутий прапорець дозволить змінити розмір інтерфейсу STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Використовувати шрифт звичайної роздільності -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Натисніть цю кнопку для використання шрифтів незмінних розмірів +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Увімкніть прапорець для використання шрифтів незмінних розмірів STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Згладжування шрифтів -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Натисніть цю кнопку для згладження шрифтів змінних розмірів +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Увімкніть прапорець для згладження шрифтів змінних розмірів STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1200,8 +1203,11 @@ STR_GAME_OPTIONS_GUI_SCALE_5X :5x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Автоматизований збір даних STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Участь в автоматизованому зборі даних +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Якщо увімкнено, OpenTTD передаватиме зібрані дані при виході з гри STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}Про збір даних і приватність +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Відкриє переглядач з детальнішою інформацією про автоматичний збір даних STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Попередній перегляд збору даних +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Перегляд збору даних поточної гри STR_GAME_OPTIONS_GRAPHICS :{BLACK}Графіка @@ -1211,11 +1217,11 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Гц STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Оновлення з частотою понад 60ГГц може зашкодити роботі гри. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Базовий набір графіки -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Оберіть, яку основну графіку використовувати +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Оберіть, яку основну графіку використовувати (неможливо змінити у грі, тільки з головного меню) STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Додаткова інформація про базовий набір графіки STR_GAME_OPTIONS_BASE_SFX :{BLACK}Базовий набір звуків -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Оберіть базовий набір звуків для використання +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Оберіть базовий набір звуків для використання (неможливо змінити у грі, тільки з головного меню) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Додаткова інформація про базовий набір звуків STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Базовий музичний набір @@ -1405,9 +1411,10 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Нескінч STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Дозволяє необмежені витрати і вимикає банкрутство компаній STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максимальна сума позики: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максимальна сума позики для компанії (без урахування інфляції) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максимальна сума позики для компанії (без урахування інфляції). Якщо обрати "Ніяких позик", гроші будуть недоступні, окрім ігрових скриптів або налаштування "Безкінечні гроші" STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Ніяких позик STR_CONFIG_SETTING_INTEREST_RATE :Процентна ставка: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Процентна ставка за позиками; також контролює інфляцію, якщо вона увімкнена @@ -4461,13 +4468,13 @@ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Показати місце розташування потяга в центрі екрану. Подвійний клац для показу потяга в центрі екрану.Ctrl+клац мишею відкриє нове вікно у місці розташування потяга STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Показати транспорт у вікні. Подвійний клац для показу транспорту в центрі екрану. Ctrl+клац мишою для руху за транспортом. STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Показати місце розташування корабля в центрі екрану. Подвійний клац для показу корабля в центрі екрану.Ctrl+клац мишою відкриє нове вікно у місці розташування корабля -STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Показати авіатранспорт у вікні. Подвійний клац для показу авіатранспорту в центрі екрану. Ctrl+клац мишою для руху за авіатранспортом. +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Показати авіатранспорт у центрі головного вікна. Подвійний клац для руху за авіатранспортом у головному вікні. Ctrl+клац мишою для показу авіатранспорту в додатковому вікні ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити поїзд у депо STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити авто в депо STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити корабель в депо -STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити літак в ангар +STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити літак в ангар. Ctrl+клац тільки для техогляду ###length VEHICLE_TYPES STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Купити копію поїзда з усіма вагонами. Утримуйте Ctrl для спільного завдання. Утримуйте Shift для показу витрат на придбання @@ -4507,10 +4514,11 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Пото # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Вантаження STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Відходить +STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Чекає на звільнення STR_VEHICLE_STATUS_CRASHED :{RED}Аварія! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Зламався STR_VEHICLE_STATUS_STOPPED :{RED}Зупинено -STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Зупиняється, {VELOCITY} +STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}{VELOCITY} - Зупиняється STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Не достатньо потужності STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Очікування вільного шляху STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Занадто далеко до наступного місця призначення @@ -4585,6 +4593,7 @@ STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Змен STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Відлік інтервалу між техоглядами STR_VEHICLE_DETAILS_DEFAULT :Стандартно STR_VEHICLE_DETAILS_DAYS :Днів +STR_VEHICLE_DETAILS_MINUTES :Хвилин STR_VEHICLE_DETAILS_PERCENT :Проценти ###length VEHICLE_TYPES @@ -5234,6 +5243,10 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Неправи # Depot unbunching related errors STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... можливий тільки один звільнений наказ +STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... неможливо використати наказ "повне завантаження", якщо транспорт звільнено +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... неможливо звільнити транспорт з наказом "повне завантаження" +STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... неможливо використати стандартні накази, якщо транспорт звільнено +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... неможливо звільнити транспорт зі стандартним наказом # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} дуже довгий після оновлення From 9db285a32bef898a7ae0172ce80bfd02107d1bfa Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 15 Mar 2024 04:41:43 +0000 Subject: [PATCH 115/695] Update: Translations from eints norwegian (bokmal): 6 changes by eriksorngard ukrainian: 3 changes by StepanIvasyn dutch: 5 changes by RogierVC portuguese (brazilian): 76 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 152 +++++++++++++++--------------- src/lang/dutch.txt | 10 +- src/lang/norwegian_bokmal.txt | 12 +-- src/lang/ukrainian.txt | 5 +- 4 files changed, 90 insertions(+), 89 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 5d042b7b0a..5ac4fd1024 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -135,11 +135,11 @@ STR_ABBREV_MAIL :CR STR_ABBREV_OIL :PT STR_ABBREV_LIVESTOCK :GD STR_ABBREV_GOODS :BN -STR_ABBREV_GRAIN :CR +STR_ABBREV_GRAIN :CS STR_ABBREV_WOOD :MD STR_ABBREV_IRON_ORE :MF STR_ABBREV_STEEL :AÇ -STR_ABBREV_VALUABLES :OV +STR_ABBREV_VALUABLES :VL STR_ABBREV_COPPER_ORE :MC STR_ABBREV_MAIZE :ML STR_ABBREV_FRUIT :FT @@ -151,9 +151,9 @@ STR_ABBREV_WATER :AG STR_ABBREV_WHEAT :TR STR_ABBREV_RUBBER :BR STR_ABBREV_SUGAR :AR -STR_ABBREV_TOYS :BR -STR_ABBREV_SWEETS :DO -STR_ABBREV_COLA :CO +STR_ABBREV_TOYS :BQ +STR_ABBREV_SWEETS :DC +STR_ABBREV_COLA :CL STR_ABBREV_CANDYFLOSS :AD STR_ABBREV_BUBBLES :BO STR_ABBREV_TOFFEE :CM @@ -347,8 +347,8 @@ STR_SORT_BY_TIMETABLE_DELAY :Atraso de horá STR_SORT_BY_FACILITY :Tipo de estação STR_SORT_BY_WAITING_TOTAL :Carga total aguardando STR_SORT_BY_WAITING_AVAILABLE :Carga disponível aguardando -STR_SORT_BY_RATING_MAX :Maior índice de carga -STR_SORT_BY_RATING_MIN :Menor índice de carga +STR_SORT_BY_RATING_MAX :Maior classificação de carga +STR_SORT_BY_RATING_MIN :Menor classificação de carga STR_SORT_BY_ENGINE_ID :Locomotiva ID(ordem clássica) STR_SORT_BY_COST :Custo STR_SORT_BY_POWER :Potência @@ -1229,14 +1229,14 @@ STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Esta aç STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoria: STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo: -STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Restringe a lista abaixo usando filtros pré-definidos +STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Restringir a lista abaixo usando filtros pré-definidos STR_CONFIG_SETTING_RESTRICT_BASIC :Básico (mostrar somente as configurações importantes) STR_CONFIG_SETTING_RESTRICT_ADVANCED :Avançado (mostrar a maioria das configurações) STR_CONFIG_SETTING_RESTRICT_ALL :Especialista (mostrar todas as configurações, incluindo as estranhas) STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Configurações com um valor diferente do padrão STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Configurações com um valor diferente das preferências para novos jogos -STR_CONFIG_SETTING_TYPE_DROPDOWN_HELPTEXT :{BLACK}Restringe a lista abaixo a determinados tipos +STR_CONFIG_SETTING_TYPE_DROPDOWN_HELPTEXT :{BLACK}Restringir a lista abaixo a certos tipos de configuração STR_CONFIG_SETTING_TYPE_DROPDOWN_ALL :Todos os tipos de configuração STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Configuração do cliente (não é armazenada no jogo salvo; afeta todos os jogos) STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Configurações do jogo (armazenadas no jogo salvo; só afeta novos jogos) @@ -1273,7 +1273,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Direita STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}segundo{P 0 "" s} STR_CONFIG_SETTING_INFINITE_MONEY :Dinheiro ilimitado: {STRING} -STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Permite gastos ilimitados e desabilita a falência de empresas +STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Permitir gastos ilimitados e desabilitar a falência de empresas STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Valor máximo do empréstimo inicial: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Valor máximo que uma empresa pode emprestar (sem considerar a inflação). Se definido como "Sem empréstimo", não haverá dinheiro disponível a menos que seja fornecido por um Script de Jogo ou pela configuração "Dinheiro ilimitado" @@ -1291,22 +1291,22 @@ STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Velocidade de c STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Limitar a quantidade ações de construção para IAs STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Quebra de veículos: {STRING} -STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Controla a frequência com a qual veículos com manutenção inadequada podem quebrar +STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Controlar a frequência com que veículos sem manutenção adequada podem quebrar STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Multiplicador de subsídios: {STRING} -STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Define quanto é pago por conexões subsidiadas +STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Definir quanto é pago para conexões subsidiadas STR_CONFIG_SETTING_SUBSIDY_DURATION :Duração do subsídio: {STRING} ###length 2 -STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Define por quantos anos um subsídio é concedido -STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT_PERIODS :Define por quantos períodos um subsídio é concedido +STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Definir por quantos anos um subsídio é concedido +STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT_PERIODS :Definir por quantos períodos um subsídio é concedido STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{UNITS_YEARS_OR_PERIODS} ###setting-zero-is-special STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Sem subsídios STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Custos de construção: {STRING} -STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Define o nível de construção e custos de aquisição +STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Definir o nível de construção e custos de aquisição STR_CONFIG_SETTING_RECESSIONS :Recessões: {STRING} STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Se ativado, recessões podem ocorrer periodicamente. Durante uma recessão toda a produção é significativamente menor (ela retorna ao nível anterior quando a recessão termina) @@ -1318,17 +1318,17 @@ STR_CONFIG_SETTING_DISASTERS :Desastres: {STR STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Ativar desastres que podem, ocasionalmente, bloquear ou destruir veículos ou infraestrutura STR_CONFIG_SETTING_CITY_APPROVAL :Atitude da autoridade local: {STRING} -STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Define de que forma o ruído sonoro e os danos ambientais causados pelas empresas afetam a sua classificação na localidade e as futuras ações de construção na localidade +STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Escolher de que modo o ruído sonoro e os danos ambientais, causados pelas empresas, afetam a classificação delas na localidade e as ações futuras de construção na localidade STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Limite de altura do mapa: {STRING} -STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Define a altura máxima do terreno do mapa. Com "(automático)" um valor adequado será escolhido após a geração do terreno +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Definir a altura máxima do terreno do mapa. Com "(automático)" um valor adequado será escolhido após a geração do terreno STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(automático) STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Você não pode definir o limite de altura do mapa para este valor. Pelo menos uma montanha no mapa é mais alta STR_CONFIG_SETTING_AUTOSLOPE :Permitir paisagismo sob edifícios, vias, etc.: {STRING} -STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permite paisagismo sob edifícios e vias sem precisar removê-lo(a)s +STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permitir paisagismo sob edifícios e vias sem precisar removê-lo(a)s STR_CONFIG_SETTING_CATCHMENT :Área de cobertura com dimensões mais realistas: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Usar áreas de cobertura de tamanhos diferentes para diferentes tipos de estações e aeroportos @@ -1337,14 +1337,14 @@ STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Estações de e STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Quando ativado, indústrias com estações próprias (como as Petrolíferas) podem ser servidas por estações da empresa construídas nas proximidades. Quando desativado, essas indústrias só podem ser servidas pela sua própria estação. Qualquer estação da empresa nas redondezas não poderá servir a indústria e a estação própria não poderá atender outra senão a própria indústria STR_CONFIG_SETTING_EXTRADYNAMITE :Permitir a remoção de mais estradas, pontes e túneis das cidades: {STRING} -STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Torna mais fácil remover edifícios e infraestruturas das localidades +STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Facilitar a remoção de edifícios e infraestruturas das localidades STR_CONFIG_SETTING_TRAIN_LENGTH :Comprimento máximo de trens: {STRING} -STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Define o comprimento máximo dos trens +STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Definir o comprimento máximo dos trens STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} quadrado{P 0 "" s} STR_CONFIG_SETTING_SMOKE_AMOUNT :Quantidade de fumaça/fagulhas das locomotivas: {STRING} -STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Define a quantidade de fumaça ou fagulhas emitidas pelos veículos +STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Definir a quantidade de fumaça ou quantas fagulhas são emitidas pelos veículos STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Modelo de aceleração dos trens: {STRING} STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Escolher o modelo físico para a aceleração dos trens. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do trem, tais como comprimento e força de tração @@ -1363,7 +1363,7 @@ STR_CONFIG_SETTING_FORBID_90_DEG :Proibir trens d STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas de 90 graus ocorrem quando uma linha horizontal é seguida diretamente por outra vertical em um quadrado adjacente, fazendo com que o trem vire 90 graus quando passa de um quadrado para o próximo, ao invés dos habituais 45 graus para outras combinações de linhas STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permitir a união de estações não adjacentes: {STRING} -STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite acrescentar partes a uma estação sem tocar diretamente nas partes já existentes, usando Ctrl+Clique enquanto coloca as novas partes +STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permitir acrescentar partes a uma estação sem tocar diretamente nas partes já existentes, usando Ctrl+Clique enquanto coloca as novas partes STR_CONFIG_SETTING_INFLATION :Inflação: {STRING} STR_CONFIG_SETTING_INFLATION_HELPTEXT :Permitir inflação na economia, na qual os custos aumentam ligeiramente mais rápido do que os pagamentos @@ -1409,7 +1409,7 @@ STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Novas ordens, p STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalmente, um veículo irá parar em cada estação por onde passa. Ativando esta configuração, o veículo passará por todas as estações na sua rota, sem parar, até o destino final. Esta opção só define um modo padrão para novas ordens. Ordens individuais podem ser definidas explicitamente para qualquer um dos dois comportamentos STR_CONFIG_SETTING_STOP_LOCATION :Novas ordens de trem, por padrão, têm parada no {STRING} da plataforma -STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Local padrão onde um trem irá parar na plataforma. No 'início' significa próximo à entrada, 'meio' significa no meio da plataforma e 'final' significa parar na saída da plataforma. Esta opção só define um padrão para as novas ordens. Ordens individuais podem ter o local de parada definido clicando no texto da ordem +STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Local padrão onde um trem irá parar na plataforma. No 'início' significa perto da entrada, 'meio' significa no meio da plataforma e 'final' significa na saída da plataforma. Esta opção só define um padrão para as novas ordens. Ordens individuais podem ter o local de parada definido clicando no texto da ordem ###length 3 STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :início STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :meio @@ -1425,8 +1425,8 @@ STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Todas as visual STR_CONFIG_SETTING_BRIBE :Permitir o suborno da autoridade local: {STRING} ###length 2 -STR_CONFIG_SETTING_BRIBE_HELPTEXT :Permite que as empresas tentem subornar a autoridade local. Se o suborno for descoberto por um inspetor, a empresa não poderá atuar nessa localidade durante seis meses -STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :Permite que as empresas tentem subornar a autoridade local. Se o suborno for descoberto por um inspetor, a empresa não poderá atuar nessa localidade durante seis minutos +STR_CONFIG_SETTING_BRIBE_HELPTEXT :Permitir que as empresas tentem subornar a autoridade local. Se o suborno for descoberto por um inspetor, a empresa não poderá atuar nessa localidade durante seis meses +STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :Permitir que as empresas tentem subornar a autoridade local. Se o suborno for descoberto por um inspetor, a empresa não poderá atuar nessa localidade durante seis minutos STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Permitir comprar direitos exclusivos de transporte: {STRING} ###length 2 @@ -1434,19 +1434,19 @@ STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Se uma empresa STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT_MINUTES :Se uma empresa comprar direitos exclusivos de transporte para uma localidade, as estações dos concorrentes (passageiros e carga) não receberão carga durante doze minutos STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permitir financiar edifícios: {STRING} -STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Permite que empresas doem dinheiro às localidades para custear novas casas +STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Permitir que empresas doem dinheiro às localidades para custear novas casas STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Permitir financiar a reconstrução de estradas locais:{STRING} STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Permitir que empresas doem dinheiro às localidades para reconstrução de estradas e, com isso, sabotar os serviços rodoviários na localidade STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Permitir enviar dinheiro para outras empresas: {STRING} -STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Permite a transferências de dinheiro entre empresas em modo multijogador +STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Permitir a transferências de dinheiro entre empresas em modo multijogador STR_CONFIG_SETTING_FREIGHT_TRAINS :Multiplicador de peso da carga para simular trens pesados: {STRING} -STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Define o impacto do transporte de carga nos trens. Um valor grande torna o transporte de carga mais difícil para os trens, especialmente em inclinações +STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Definir o impacto do transporte de carga nos trens. Um valor grande torna o transporte de carga mais difícil para os trens, especialmente em inclinações STR_CONFIG_SETTING_PLANE_SPEED :Fator de velocidade de aviões: {STRING} -STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Define a velocidade relativa dos aviões em comparação com outros tipos de veículos, para diminuir o valor da receita do transporte por aeronave +STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Definir a velocidade relativa dos aviões, em comparação com outros tipos de veículos, para diminuir o valor da receita do transporte por aeronave STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Número de acidentes de aeronaves: {STRING} @@ -1542,7 +1542,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Espessura das l STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Espessura da linha nos gráficos. Linhas finas são mais precisas, enquanto linhas grossas são mais fáceis de distinguir STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostrar o nome do NewGRF na janela de comprar veículos: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Adiciona uma linha na janela de aquisição de veículos, mostrando a qual NewGRF pertence o veículo selecionado +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Adicionar uma linha na janela de aquisição de veículos, mostrando a qual NewGRF pertence o veículo selecionado STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as cargas que os veículos podem transportar nas janelas de listagem: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Se ativado, a carga transportável pelo veículo aparecerá acima dele nas listas de veículos @@ -1559,7 +1559,7 @@ STR_CONFIG_SETTING_TERRAIN_TYPE :Tipo de terreno STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Escolher a altura das colinas e montanhas da paisagem STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densidade de indústrias: {STRING} -STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Define quantas indústrias devem ser geradas e que nível deve ser mantido durante o jogo +STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Definir quantas indústrias devem ser geradas e que nível deve ser mantido durante o jogo STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distância máxima entre a borda do mapa para Refinarias de Petróleo: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limite de distância entre a borda do mapa e o local de construção de refinarias e plataformas de petróleo. Em mapas de ilhas isso garante que elas fiquem perto da costa. Em mapas com mais de 256 quadrados esse valor é aumentado @@ -1631,7 +1631,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Verde escuro STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violeta STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Cores de sobreposição do fluxo de carga: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Define o esquema de cores usado na sobreposição do fluxo de carga +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Definir o esquema de cores usado na sobreposição do fluxo de carga ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Verde para vermelho (original) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Verde para azul @@ -1647,13 +1647,13 @@ STR_CONFIG_SETTING_SCROLLMODE_RMB :Mover mapa com STR_CONFIG_SETTING_SCROLLMODE_LMB :Mover mapa com Botão Esquerdo Mouse STR_CONFIG_SETTING_SMOOTH_SCROLLING :Suavizar deslocamento da visualização: {STRING} -STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla como a visualização principal se move para uma localização específica ao clicar no minimapa ou quando é dado um comando para ir até um objeto específico no mapa. Se ativado, a visualização se move suavemente. Se desativado, a visualização salta diretamente para o destino escolhido +STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controlar como a visualização principal se move para uma localização específica ao clicar no minimapa ou quando é dado um comando para ir até um objeto específico no mapa. Se ativado, a visualização se move suavemente. Se desativado, a visualização salta diretamente para o destino escolhido STR_CONFIG_SETTING_MEASURE_TOOLTIP :Mostrar medidas quando usar as ferramentas de construção: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Mostrar distâncias em quadrados e diferenças de altura quando Clicar+Arrastar nas ações de construção STR_CONFIG_SETTING_LIVERIES :Mostrar cores específicas do tipo de veículo: {STRING} -STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Controla a utilização de cores específicas, por tipo de veículo, para os veículos (em vez de cores por empresa) +STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Controlar a utilização de cores específicas, por tipo de veículo, para os veículos (em vez de cores por empresa) ###length 3 STR_CONFIG_SETTING_LIVERIES_NONE :Nenhuma STR_CONFIG_SETTING_LIVERIES_OWN :Própria empresa @@ -1663,7 +1663,7 @@ STR_CONFIG_SETTING_PREFER_TEAMCHAT :Preferência de STR_CONFIG_SETTING_PREFER_TEAMCHAT_HELPTEXT :Trocar o mapeamento entre o chat interno da empresa e o chat público para e , respectivamente STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :Velocidade da roda do mouse no mapa: {STRING} -STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Controla a sensibilidade da roda do mouse na rolagem +STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Controlar a sensibilidade da roda do mouse na rolagem STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING :Função da roda do mouse: {STRING} STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING_HELPTEXT :Ativar o rolamento com rodas de mouse bidimensionais @@ -1755,7 +1755,7 @@ STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Remover automat STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Remover automaticamente os sinais durante a construção de ferrovias se os sinais estiverem no caminho. Isso pode, potencialmente, causar acidentes de trens STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Limite de velocidade do avanço rápido: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limite da velocidade do jogo quando o avanço rápido está ativado. 0 = sem limite (tão rápido quanto o seu computador permitir). Valores abaixo de 100% tornam o jogo mais lento. O limite superior depende das especificações do seu computador e pode variar dependendo do jogo +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limitar a velocidade do jogo quando o avanço rápido está ativado. 0 = sem limite (tão rápido quanto o seu computador permitir). Valores abaixo de 100% tornam o jogo mais lento. O limite superior depende das especificações do seu computador e pode variar dependendo do jogo STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% da velocidade normal do jogo ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Sem limite (o máximo que o seu computador suporta) @@ -1814,7 +1814,7 @@ STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desativar embar STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Quando ativada, esta configuração não permite a construção de embarcações por um competidor controlado por IA STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permitir IAs em multijogador: {STRING} -STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite que competidores controlados por IA participem de jogos multijogador +STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permitir que competidores controlados por IA participem de jogos multijogador STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes antes de scripts serem suspensos: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Número máximo de passos computacionais que um script pode executar em um turno @@ -1826,13 +1826,13 @@ STR_CONFIG_SETTING_SERVINT_ISPERCENT :Intervalos de m STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Quando ativado, os veículos tentam fazer a manutenção quando sua confiabilidade atingir uma determinada porcentagem da confiabilidade máxima.{}{}Por exemplo, se a confiabilidade máxima de um veículo for 90% e o intervalo de manutenção for 20%, o veículo tentará fazer a manutenção quando atingir 72% de confiabilidade STR_CONFIG_SETTING_SERVINT_TRAINS :Intervalo padrão de manutenção para trens: {STRING} -STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Define o intervalo padrão de manutenção para novos veículos ferroviários, se não for configurado um intervalo de manutenção explícito para o veículo +STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Definir o intervalo padrão de manutenção para novos veículos ferroviários, se não for configurado um intervalo de manutenção explícito para o veículo STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Intervalo padrão de manutenção para veículos: {STRING} -STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Define o intervalo padrão de manutenção para novos veículos rodoviários, se não for configurado um intervalo de manutenção explícito para o veículo +STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Definir o intervalo padrão de manutenção para novos veículos rodoviários, se não for configurado um intervalo de manutenção explícito para o veículo STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervalo padrão de manutenção para aeronaves: {STRING} -STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Define o intervalo padrão de manutenção para novas aeronaves, se não for configurado um intervalo de manutenção explícito para o veículo +STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Definir o intervalo padrão de manutenção para novas aeronaves, se não for configurado um intervalo de manutenção explícito para o veículo STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalo padrão de manutenção para embarcações: {STRING} -STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Define o intervalo padrão de manutenção para novas embarcações, se não for configurado um intervalo de manutenção explícito para o veículo +STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Definir o intervalo padrão de manutenção para novas embarcações, se não for configurado um intervalo de manutenção explícito para o veículo STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Dia{P 0 "" s}/Minuto{P 0 "" s}/% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Desativado @@ -1844,7 +1844,7 @@ STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Penalidade de v STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quando ativado, os trens que são muito compridos para a estação demoram mais tempo para carregar do que um trem que cabe na estação. Esta configuração não afeta a geração de rotas STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ativar limite de velocidade para vagões: {STRING} -STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Quando ativado, aplica o limite de velocidade dos vagões para definir a velocidade máxima de um trem +STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Quando ativado, usa o limite de velocidade dos vagões para definir a velocidade máxima de um trem STR_CONFIG_SETTING_DISABLE_ELRAILS :Desativar ferrovias elétricas: {STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Quando ativada, esta configuração desativa a necessidade de eletrificar os trilhos para que locomotivas elétricas possam utilizá-los @@ -1889,7 +1889,7 @@ STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Novos veículos STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Mostrar um jornal quando um novo tipo de veículo é disponibilizado STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Mudanças de aceitação de carga: {STRING} -STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Exibir mensagens quando estações alterarem a aceitação de algumas cargas +STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Mostrar mensagens quando estações alterarem a aceitação de algumas cargas STR_CONFIG_SETTING_NEWS_SUBSIDIES :Subsídios: {STRING} STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Mostrar um jornal sobre eventos relacionados a subsídios @@ -1922,7 +1922,7 @@ STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentagem do STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentagem da receita dada às etapas intermediárias em sistemas de transbordo, dando maior controle sobre a renda STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Quando arrastar, colocar sinais a cada: {STRING} -STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Define a distância na qual os sinais serão construídos em uma linha até o próximo obstáculo (sinal, junção), quando colocar sinais arrastando +STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Definir a distância na qual os sinais serão construídos em uma linha até o próximo obstáculo (sinal, junção), quando colocar sinais arrastando STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} quadrado{P 0 "" s} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Quando arrastar, manter distância fixa entre os sinais: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Escolher o comportamento da colocação de sinais ao usar Ctrl+Arrastar. Se desativado, sinais são colocados ao redor de túneis ou pontes para evitar seções longas sem sinais. Se ativado, sinais são colocados a cada N quadrados, facilitando o alinhamento de sinais em linhas paralelas @@ -1973,7 +1973,7 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadrático (or STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Surgimento de árvores no decorrer do jogo: {STRING} -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controla o aparecimento aleatório de árvores durante o jogo. Isto poderá afetar indústrias que dependem do crescimento de árvores, como as madeireiras +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controlar o aparecimento aleatório de árvores durante o jogo. Isto poderá afetar indústrias que dependem do crescimento de árvores, como as madeireiras ###length 4 STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Crescer sem espalhar {RED}(afeta madeireiras) STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Crescer, mas espalhar somente em florestas tropicais @@ -2008,7 +2008,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Resolução máxima de sprites: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limita a resolução máxima a ser usada para sprites. Limitar a resolução de sprites evitará o uso de gráficos de alta resolução, mesmo quando estiverem disponíveis. Isso pode ajudar a manter a aparência uniforme do jogo quando estiver usando uma mistura de arquivos GRF com e sem gráficos de alta resolução +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limitar a resolução máxima a ser usada para sprites. Limitar a resolução de sprites evitará o uso de gráficos de alta resolução, mesmo quando estiverem disponíveis. Isso pode ajudar a manter a aparência uniforme do jogo quando estiver usando uma mistura de arquivos GRF com e sem gráficos de alta resolução ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2055,7 +2055,7 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Quanto maior fo STR_CONFIG_SETTING_DEMAND_DISTANCE :Efeito da distância na demanda: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Se for definido um valor maior que 0, a distância entre a estação de origem A de alguma carga e um possível destino B terá um efeito na quantidade de carga enviada de A até B. Quanto mais distante B estiver de A, menos carga será enviada. Quanto maior o valor definido, menos carga será transportada para estações distantes e mais carga será enviada para estações mais próximas STR_CONFIG_SETTING_DEMAND_SIZE :Quantidade de carga retornada no modo simétrico: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Definindo isto para menos de 100% faz com que a distribuição simétrica comporte-se mais como a assimétrica. Menos carga será forçadamente devolvida se uma certa quantidade for enviada a uma estação. Se você definir para 0% a distribuição simétrica se comportará exatamente como a assimétrica +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Definir isto para menos de 100% faz com que a distribuição simétrica comporte-se mais como a assimétrica. Menos carga será forçadamente devolvida se uma certa quantidade for enviada a uma estação. Se você definir em 0% a distribuição simétrica se comportará exatamente como a assimétrica STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturação de rotas curtas antes de usar rotas de grande capacidade: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequentemente há diversas rotas entre duas estações. Cargodist irá saturar a rota mais curta primeiro, depois usar a segunda rota mais curta até saturá-la, e assim por diante. A saturação é determinada por uma estimativa da capacidade e da utilização prevista. Ao saturar todas as rotas, se ainda existir demanda não atendida, CargoDist irá sobrecarregar todas as rotas, dando preferência àquelas de maior capacidade. Entretanto, na maioria das vezes o algoritmo não irá estimar corretamente a capacidade. Esta configuração permite definir até que porcentagem uma rota mais curta deverá ser saturada na primeira passada antes do algoritmo selecionar a próxima rota mais longa. Defina-o para menos de 100% para evitar estações sobrecarregadas no caso de capacidade superestimada @@ -2170,7 +2170,7 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Falha ao # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Erro nas configurações de vídeo... STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... nenhuma GPU compatível encontrada. Aceleração por hardware desativada -STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... O driver gráfico (GPU) travou o jogo. Aceleração por hardware desativada +STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... O controlador gráfico (GPU) travou o jogo. Aceleração por hardware desativada # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -2995,7 +2995,7 @@ STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Diminuir STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Gerar terreno aleatório STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Criar novo cenário STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Restaurar paisagem -STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Remover todas as propriedades das empresas do mapa +STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Remover do mapa todas as propriedades das empresas STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Restaurar Paisagem STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Você quer mesmo remover todas as propriedades das empresas? @@ -3187,7 +3187,7 @@ STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT :Aqueduto STR_LAI_OBJECT_DESCRIPTION_TRANSMITTER :Transmissor STR_LAI_OBJECT_DESCRIPTION_LIGHTHOUSE :Farol STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Sede de Empresa -STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno propriedade de uma empresa +STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno que pertence a uma empresa # About OpenTTD window STR_ABOUT_OPENTTD :{WHITE}Sobre o OpenTTD... @@ -3593,7 +3593,7 @@ STR_NEWGRF_SCAN_ARCHIVES :Procurando por # Sign list window STR_SIGN_LIST_CAPTION :{WHITE}Lista de Placas - {COMMA} Placa{P "" s} STR_SIGN_LIST_MATCH_CASE :{BLACK}Diferenciar maiúsculas/minúsculas -STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Ativar/Desativar correspondência de maiúsculas/minúsculas quando comparar os nomes das placas com os caracteres fornecidos +STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Ativar/Desativar correspondência de maiúsculas/minúsculas quando comparar os nomes das placas com a sequência de caracteres fornecida # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Editar texto da placa @@ -3661,9 +3661,9 @@ STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Comprar direito STR_LOCAL_AUTHORITY_ACTION_BRIBE :Subornar a autoridade local ###next-name-looks-similar -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma campanha publicitária pequena local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na avaliação da estação em um raio pequeno ao redor do centro da localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma campanha publicitária média local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na avaliação da estação em um raio médio ao redor do centro da cidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma campanha publicitária grande local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na avaliação da estação em um raio grande ao redor do centro da localidade{}{POP_COLOUR}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma campanha publicitária pequena local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na classificação da estação em um raio pequeno ao redor do centro da localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma campanha publicitária média local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na classificação da estação em um raio médio ao redor do centro da cidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma campanha publicitária grande local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na classificação da estação em um raio grande ao redor do centro da localidade{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Financiar a reconstrução da rede urbana de estradas.{}Provoca uma perturbação considerável no tráfego por até 6 meses.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}Financiar a reconstrução da rede urbana de estradas.{}Provoca uma perturbação considerável no tráfego por até 6 minutos.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Construir uma estátua em homenagem à sua empresa.{}Produz um aumento permanente na classificação da estação nesta localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} @@ -3734,7 +3734,7 @@ STR_STORY_BOOK_TITLE :{YELLOW}{STRING STR_STORY_BOOK_GENERIC_PAGE_ITEM :Página {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Saltar para uma página específica escolhendo-a nesta lista STR_STORY_BOOK_PREV_PAGE :{BLACK}Anterior -STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Voltar para a página anterior +STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Ir para a página anterior STR_STORY_BOOK_NEXT_PAGE :{BLACK}Próxima STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Ir para a próxima página STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Referência de objetivo inválida @@ -3797,7 +3797,7 @@ STR_STATION_VIEW_GROUP_D_S_V :Destino-Origem- STR_STATION_VIEW_GROUP_D_V_S :Destino-Via-Origem ###length 8 -STR_CARGO_RATING_APPALLING :Inexistente +STR_CARGO_RATING_APPALLING :Horrível STR_CARGO_RATING_VERY_POOR :Muito Fraco STR_CARGO_RATING_POOR :Fraco STR_CARGO_RATING_MEDIOCRE :Medíocre @@ -4773,12 +4773,12 @@ STR_AI_DEBUG_SETTINGS :{BLACK}Configur STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Alterar as configurações do script STR_AI_DEBUG_RELOAD :{BLACK}Recarregar IA STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Interromper a IA, recarregar o script e reiniciar a IA -STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Ativar/Desativar interrupção quando uma mensagem de registro da IA corresponder aos caracteres de parada +STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Ativar/Desativar interrupção quando uma mensagem de registro da IA for igual a esta sequência de caracteres STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Parar em: STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Parar em -STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Quando uma mensagem de registro da IA for igual a estes caracteres, o jogo é pausado +STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Quando uma mensagem de registro da IA for igual a esta sequência de caracteres, o jogo é pausado STR_AI_DEBUG_MATCH_CASE :{BLACK}Diferenciar maiúsculas/minúsculas -STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Ativar/Desativar correspondência de maiúsculas/minúsculas quando comparar as mensagens de registro da IA com os caracteres de parada +STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Ativar/Desativar correspondência de maiúsculas/minúsculas quando comparar as mensagens de registro da IA com a sequência de caracteres de parada STR_AI_DEBUG_CONTINUE :{BLACK}Continuar STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Sair da pausa e continuar a IA STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Mostrar saída de depuração desta IA. Ctrl+Clique para abrir em uma nova janela @@ -4833,9 +4833,9 @@ STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Não mud STR_SCREENSHOT_CAPTION :{WHITE}Fazer uma captura de tela STR_SCREENSHOT_SCREENSHOT :{BLACK}Captura de tela normal -STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Ampliação máxima para captura de tela -STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Ampliação padrão para captura de tela -STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Captura de tela do mapa todo +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Captura de tela com ampliação máxima +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Captura de tela com ampliação padrão +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Captura de tela do mapa completo STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captura de tela do mapa topográfico STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captura de tela do minimapa @@ -4867,7 +4867,7 @@ STR_TEXTFILE_README_CAPTION :{WHITE}Leia-me STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Registro de modificações em {STRING} de {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}Licença de {STRING} de {STRING} STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Pré-visualização do resultado da pesquisa -STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}Documento '{STRING}' OpenTTD +STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}Documento '{STRING}' do OpenTTD # Vehicle loading indicators @@ -4896,13 +4896,13 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Receita # Saveload messages STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravação ainda sendo executada,{}por favor aguarde até terminar! -STR_ERROR_AUTOSAVE_FAILED :{WHITE}Falha ao salvar automaticamente +STR_ERROR_AUTOSAVE_FAILED :{WHITE}Salvamento automático falhou STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Não é possível ler a unidade -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Falha ao salvar o jogo{}{STRING} +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Não foi possível salvar o jogo{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Não é possível apagar o arquivo -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Falha ao abrir o jogo{}{STRING} +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Não foi possível abrir o jogo{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erro interno: {STRING} -STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Jogo salvo corrompido - {STRING} +STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Jogo salvo está corrompido - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Jogo salvo foi feito com uma versão mais recente STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Arquivo não legível STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Arquivo não gravável @@ -4954,8 +4954,8 @@ STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Edifíci STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Não é possível limpar esta área... STR_ERROR_SITE_UNSUITABLE :{WHITE}... local inadequado STR_ERROR_ALREADY_BUILT :{WHITE}... já construído -STR_ERROR_OWNED_BY :{WHITE}... é propriedade de {STRING} -STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... área é propriedade de outra empresa +STR_ERROR_OWNED_BY :{WHITE}... pertence a {STRING} +STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... área pertence a outra empresa STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... limite de paisagismo atingido STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... limite de limpeza de quadrados atingido STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... limite de plantação de árvores atingido @@ -5028,7 +5028,7 @@ STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... só STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}O financiamento falhou em prospectar devido ao azar; tente novamente STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Não havia locais adequados para prospectar por esta indústria -STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Não havia locais adequados para indústrias de '{STRING}' +STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Não havia locais adequados para indústrias do tipo '{STRING}' STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Modificar os parâmetros de geração do mapa para obter um mapa melhor # Station construction related errors @@ -5101,7 +5101,7 @@ STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}... deve STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Trens só podem ser modificados quando estão parados em um depósito STR_ERROR_TRAIN_TOO_LONG :{WHITE}Trem é muito longo STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Não é possível inverter a direção do veículo... -STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}... composto por múltiplas unidades +STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}... composto por várias unidades STR_ERROR_INCOMPATIBLE_RAIL_TYPES :Tipos de trilhos incompatíveis STR_ERROR_CAN_T_MOVE_VEHICLE :{WHITE}Não é possível mover veículo... @@ -5209,7 +5209,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Não é STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Não é possível excluir este grupo... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Não é possível renomear o grupo... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Não é possível definir grupo principal... -STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... não são permitidos ciclos na hierarquia de grupos +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... ciclos na hierarquia de grupos não são permitidos STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Não é possível remover todos os veículos deste grupo... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Não é possível adicionar o veículo a este grupo... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Não é possível adicionar veículos compartilhados ao grupo... @@ -5300,7 +5300,7 @@ STR_ERROR_CAN_T_MODIFY_THIS_ORDER :{WHITE}Não é STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Não é possível mover esta ordem... STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Não é possível saltar a ordem atual... STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Não é possível saltar a ordem selecionada... -STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... veiculo não pode ir a todas as estações +STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... veiculo não pode ir à todas as estações STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... veiculo não pode ir a essa estação STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... um veículo compartilhando esta ordem não pode ir a essa estação STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... nem todos os veículos possuem as mesmas ordens @@ -5327,7 +5327,7 @@ STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Não exi STR_ERROR_NO_BUOY :{WHITE}Não existe uma boia # Timetable related errors -STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Não é possível programar veículo... +STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Não é possível programar o veículo... STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Veículos só podem aguardar em estações STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Este veículo não para nesta estação STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... horário incompleto @@ -5346,14 +5346,14 @@ STR_DESKTOP_SHORTCUT_COMMENT :Um jogo de simu # Translatable descriptions in media/baseset/*.ob* files ###external 10 STR_BASEGRAPHICS_DOS_DESCRIPTION :Gráficos Originais do Transport Tycoon Deluxe, edição DOS. -STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Gráficos Originais do Transport Tycoon Deluxe, edição (alemã) DOS. +STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Gráficos Originais do Transport Tycoon Deluxe, edição DOS (alemã). STR_BASEGRAPHICS_WIN_DESCRIPTION :Gráficos Originais do Transport Tycoon, edição Windows. STR_BASESOUNDS_DOS_DESCRIPTION :Sons Originais do Transport Tycoon Deluxe, edição DOS. STR_BASESOUNDS_WIN_DESCRIPTION :Sons Originais do Transport Tycoon Deluxe, edição Windows. STR_BASESOUNDS_NONE_DESCRIPTION :Um conjunto de sons vazio. STR_BASEMUSIC_WIN_DESCRIPTION :Música Original do Transport Tycoon Deluxe, edição Windows. STR_BASEMUSIC_DOS_DESCRIPTION :Música Original do Transport Tycoon Deluxe, edição DOS. -STR_BASEMUSIC_TTO_DESCRIPTION :Música Original do Transport Tycoon, edição (Original/Editor Mundial) DOS. +STR_BASEMUSIC_TTO_DESCRIPTION :Música Original do Transport Tycoon, edição DOS (Original/Editor Mundial). STR_BASEMUSIC_NONE_DESCRIPTION :Um conjunto de músicas vazio. ##id 0x2000 diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 97abd76252..323203cd68 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1561,7 +1561,7 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industriedichth STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Stelt in hoeveel industrieën worden gegenereerd en welk niveau tijdens het spel moet worden gehandhaafd STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximumafstand van de rand voor olieraffinaderijen: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Olieraffinaderijen worden alleen gebouwd nabij de kaartgrens, dat is aan de kust van eilandkaarten +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limiet voor hoe ver van de kaartgrens olieraffinaderijen en booreilanden kunnen worden gebouwd. Op eilandkaarten zorgt dit ervoor dat ze dichtbij de kust liggen. Op kaarten groter dan 256 wordt deze waarde opgeschaald. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sneeuwhoogte: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Kies op welke hoogte de sneeuw begint in subarctisch landschap. Sneeuw heeft ook invloed op het ontstaan van industrieën en op de vereisten voor stadsgroei. Kan alleen worden aangepast in de scenariobewerker of wordt berekend met behulp van 'sneeuwoppervlak' @@ -2031,9 +2031,9 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Beginfactor voo STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Gemiddelde grootte van steden in vergelijking tot normale steden bij het begin van het spel. STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Distributiegrafiek elke {STRING} bijwerken -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :De tijd tussen opeenvolgende herberekeningen van de koppeling-grafiek. Elke berekening berekent de plannen voor één component van de grafiek. Dat betekent dat een waarde X voor deze instelling niet betekent dat de hele grafiek elke X seconden wordt bijgewerkt. Dat geldt alleen voor één component. Hoe korter je deze waarde instelt, hoe meer CPU-tijd er nodig is voor de berekening. Hoe langer je deze waarde instelt, hoe langer het duurt voordat de vrachtdistributie start op nieuwe routes. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :De tijd tussen opeenvolgende herberekeningen van de koppelingsgrafiek. Elke berekening berekent de plannen voor één component van de grafiek. Dat betekent dat een waarde X voor deze instelling niet betekent dat de hele grafiek elke X seconden wordt bijgewerkt. Dat geldt alleen voor één component. Hoe korter je deze waarde instelt, hoe meer CPU-tijd er nodig is voor de berekening. Hoe langer je deze waarde instelt, hoe langer het duurt voordat de vrachtdistributie start op nieuwe routes. STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :{STRING} per herberekening van de distributiegrafiek besteden -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :De benodigde tijd voor een herbereking van een koppeling-grafiekcomponent. Wanneer een herberekening wordt gestart, start een draad die dit aantal seconden mag lopen. Hoe korter je deze waarde maakt, hoe groter de kans dat de draad niet op tijd is afgelopen. Het spel stopt dan totdat dit alsnog gebeurt (het 'hikt'). Hoe langer je deze waarde maakt, hoe langer het duurt voor de distributie wordt bijgewerkt wanneer een route wijzigt. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :De benodigde tijd voor een herberekening van een koppelingsgrafiekcomponent. Wanneer een herberekening wordt gestart, start een proces die dit aantal seconden mag lopen. Hoe korter je deze waarde maakt, hoe groter de kans dat het proces niet op tijd is afgelopen. Het spel stopt dan totdat dit alsnog gebeurt (het 'hikt'). Hoe langer je deze waarde maakt, hoe langer het duurt voor de distributie wordt bijgewerkt wanneer een route wijzigt. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distributiemodus voor passagiers: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :'Symmetrisch' betekent dat ongeveer hetzelfde aantal passagiers van station A naar station B gaat als van B naar A. 'Asymmetrisch' betekent dat willekeurige aantallen passagiers reizen in beide richtingen. 'Handmatig' betekent dat er geen automatische distributie plaatsvindt voor passagiers. @@ -2049,7 +2049,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :Asymmetrisch STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :Symmetrisch STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Verdeelnauwkeurigheid: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Hoe hoger de instelling, des te meer CPU-tijd de berekening van de linkgrafiek zal gebruiken. Als het te lang duurt, kan dan dat lag opleveren. Als je dit echter op een lage waarde instelt, zal de verdeling onnauwkeurig zijn, en kan het zijn dat vracht niet wordt gestuurd naar de plekken waar het naartoe moet gaan. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Hoe hoger de instelling, des te meer CPU-tijd de berekening van de linkgrafiek zal gebruiken. Als het te lang duurt, kan dat lag opleveren. Als je dit echter op een lage waarde instelt, zal de verdeling onnauwkeurig zijn en kan het zijn dat vracht niet wordt gestuurd naar de plekken waar het naartoe moet gaan. STR_CONFIG_SETTING_DEMAND_DISTANCE :Effect van afstand op de vraag: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Als je dit op een waarde hoger dan 0 zet, dan zal de afstand tussen het station van herkomst A met enige vracht en een mogelijke bestemming B effect hebben op de hoeveelheid lading verzonden van A naar B. Hoe verder weg B is van A, des te minder lading wordt verzonden. Hoe hoger je deze instelt, hoe minder lading wordt verzonden naar verder geleden stations en meer lading zal worden verzonden naar dichtbij gelegen stations. @@ -4026,7 +4026,7 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Niet-gegroepeer STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groepen - Klik op een groep voor een lijst van alle voertuigen in deze groep. Klik en sleep om hiërarchie te beheren +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groepen - Klik op een groep voor een lijst van alle voertuigen in deze groep. Klik en sleep om hiërarchie te ordenen STR_GROUP_CREATE_TOOLTIP :{BLACK}Klik om een groep te creëren STR_GROUP_DELETE_TOOLTIP :{BLACK}Verwijder de geselecteerde groep STR_GROUP_RENAME_TOOLTIP :{BLACK}Hiermee hernoem je de geselecteerde groep diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 57f769421c..4ef26062a3 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -893,7 +893,7 @@ STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE ###next-name-looks-similar # Order review system / warnings -STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE} har for få ordre på ruteplanen +STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE} har for få ordre på ordrelisten STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}{VEHICLE} har en tom ordre STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}{VEHICLE} har doble ordre STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}{VEHICLE} har en ugyldig stasjon i ordrelisten @@ -3810,10 +3810,10 @@ STR_CARGO_RATING_OUTSTANDING :Fremragende STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Sentrer hovedvisningen på stasjonslokasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på stasjonslokasjon STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Endre stasjonens navn -STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Vis alle tog som har denne stasjonen på sin ruteplan -STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Vis alle kjøretøy som har denne stasjonen på sin ruteplan -STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Vis alle luftfartøy som har denne stasjonen på sin ruteplan -STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Vis alle skip som har denne stasjonen på sin ruteplan +STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Vis alle tog som har denne stasjonen på sin ordreliste +STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Vis alle kjøretøy som har denne stasjonen på sin ordreliste +STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Vis alle luftfartøy som har denne stasjonen på sin ordreliste +STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Vis alle skip som har denne stasjonen på sin ordreliste STR_STATION_VIEW_RENAME_STATION_CAPTION :Endre navnet til stasjon/godsterminal @@ -4619,7 +4619,7 @@ STR_ORDER_CONDITIONAL :Betinget ordreh STR_ORDER_SHARE :Del ordre STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Sett inn en ny ordre før den merkede ordren, eller legg til i slutten av listen. Ctrl+klikk på en stasjon for 'full last av enhver vare', på et veipunkt for å invertere 'direkte' og et depot for 'dele'. Kilkk på et annet transportmiddel for å kopiere dets ordre, eller Ctrl+klikk for å dele ordre. En depotordre deaktiverer automatisk vedlikehold av transportmiddelet -STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Vis alle kjøretøy som deler denne ruteplanen +STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Vis alle kjøretøy som deler denne ordretabellen # String parts to build the order string STR_ORDER_GO_TO_WAYPOINT :Kjør via {WAYPOINT} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 3219a4fddd..12406d6b40 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -4053,6 +4053,7 @@ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Ім'я кер STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Введіть суму грошей, яку бажаєте передати STR_BUY_COMPANY_MESSAGE :{WHITE}Ми шукаємо нового власника нашої компанії.{}{}Чи бажаєте Ви купити {COMPANY} за {CURRENCY_LONG}? +STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Для агресивного захоплення компанії {COMPANY} необхідно прдбати усі активи, виплатити усі позики і сплатити дворічний прибуток.{}{}Приблизна вартість {CURRENCY_LONG}.{}{}Бажаєте продовжити агресивне захоплення? # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Інфраструктура {COMPANY} @@ -4863,13 +4864,13 @@ STR_TIMETABLE_CHANGE_TIME :{BLACK}Змін STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Змінити час, впродовж якого має виконуватись наказ. Ctrl+клац змінить час в усіх завданнях STR_TIMETABLE_CLEAR_TIME :{BLACK}Скасувати час -STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Скасувати час виконання виділеного наказу. Ctrl+клац видалить час в усіх завданнях +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Скасувати час виконання виділеного наказу. Ctrl+клац скасує обмеження часу в усіх наказах STR_TIMETABLE_CHANGE_SPEED :{BLACK}Змінити обмеж. швидкості STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Змінити обмеження швидкості для виділеного пункту. Ctrl+клац змінить швидкість в усіх завданнях STR_TIMETABLE_CLEAR_SPEED :{BLACK}Скасувати обмеж. швидкості -STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Скасувати обмеження швидкості для виділеного пункту. Ctrl+клац видалить швидкість в усіх завданнях +STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Скасувати обмеження швидкості для виділеного пункту. Ctrl+клац скасує обмеження швидкості в усіх наказах STR_TIMETABLE_RESET_LATENESS :{BLACK}Скасувати відхилення STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Скасувати лічильник відхилення від графіка, щоб транспорт встигнув. Ctrl+клац щоб скасувати лічильник для всіх транспортів. При цьому останній транспорт стане йти за графіком, а інщі опереджати графік. From a7625b8ae0d2c42c7ebfb142669f8ba1eb8e4df0 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Tue, 12 Mar 2024 15:58:15 +0000 Subject: [PATCH 116/695] Fix #12280: Allow ships 90 degree turns if only choice If there is no path found, a random path is created which forbids 90 degrees. Allow 90 degrees if they're the only choice. --- src/pathfinder/yapf/yapf_ship.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp index 01bd85faf7..fa617d3e1f 100644 --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -173,12 +173,13 @@ public: } /** Returns a random tile/trackdir that can be reached from the current tile/trackdir, or tile/INVALID_TRACK if none is available. */ - static std::pair GetRandomFollowUpTileTrackdir(const Ship *v, TileIndex tile, Trackdir dir, bool include_90_degree_turns) + static std::pair GetRandomFollowUpTileTrackdir(const Ship *v, TileIndex tile, Trackdir dir) { TrackFollower follower(v); if (follower.Follow(tile, dir)) { TrackdirBits dirs = follower.m_new_td_bits; - if (!include_90_degree_turns) dirs &= ~TrackdirCrossesTrackdirs(dir); + const TrackdirBits dirs_without_90_degree = dirs & ~TrackdirCrossesTrackdirs(dir); + if (dirs_without_90_degree != TRACKDIR_BIT_NONE) dirs = dirs_without_90_degree; const int strip_amount = _random.Next(CountBits(dirs)); for (int s = 0; s < strip_amount; ++s) RemoveFirstTrackdir(&dirs); return { follower.m_new_tile, FindFirstTrackdir(dirs) }; @@ -191,7 +192,7 @@ public: { std::pair tile_dir = { tile, dir }; for (int i = 0; i < path_length; ++i) { - tile_dir = GetRandomFollowUpTileTrackdir(v, tile_dir.first, tile_dir.second, false); + tile_dir = GetRandomFollowUpTileTrackdir(v, tile_dir.first, tile_dir.second); if (tile_dir.second == INVALID_TRACKDIR) break; path_cache.push_back(tile_dir.second); } @@ -240,7 +241,7 @@ public: path_found = pf.FindPath(v); Node *node = pf.GetBestNode(); if (attempt == 0 && !path_found) continue; // Try again with restricted search area. - if (!path_found || node == nullptr) return GetRandomFollowUpTileTrackdir(v, src_tile, trackdir, true).second; + if (!path_found || node == nullptr) return GetRandomFollowUpTileTrackdir(v, src_tile, trackdir).second; /* Return only the path within the current water region if an intermediate destination was returned. If not, cache the entire path * to the final destination tile. The low-level pathfinder might actually prefer a different docking tile in a nearby region. Without @@ -266,7 +267,7 @@ public: /* A empty path means we are already at the destination. The pathfinder shouldn't have been called at all. * Return a random reachable trackdir to hopefully nudge the ship out of this strange situation. */ - if (path_cache.empty()) return GetRandomFollowUpTileTrackdir(v, src_tile, trackdir, true).second; + if (path_cache.empty()) return GetRandomFollowUpTileTrackdir(v, src_tile, trackdir).second; /* Take out the last trackdir as the result. */ const Trackdir result = path_cache.front(); From b394c205194c02550315c97f9e7f5437c7c1d351 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 16 Mar 2024 04:41:24 +0000 Subject: [PATCH 117/695] Update: Translations from eints korean: 43 changes by telk5093 persian: 33 changes by CptMcWill ukrainian: 4 changes by StepanIvasyn dutch: 26 changes by Afoklala portuguese (brazilian): 70 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 140 +++++++++++++++--------------- src/lang/dutch.txt | 52 +++++------ src/lang/korean.txt | 85 +++++++++--------- src/lang/persian.txt | 35 +++++++- src/lang/ukrainian.txt | 6 +- 5 files changed, 176 insertions(+), 142 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 5ac4fd1024..6d01f8d923 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -818,11 +818,11 @@ STR_STATUSBAR_AUTOSAVE :{RED}Salvo Auto STR_STATUSBAR_SAVING_GAME :{RED}* * SALVANDO JOGO * * STR_STATUSBAR_SPECTATOR :{WHITE}(espectador) -STR_STATUSBAR_INFINITE_MONEY :{WHITE}(dinheiro ilimitado) +STR_STATUSBAR_INFINITE_MONEY :{WHITE}(dinheiro infinito) # News message history STR_MESSAGE_HISTORY :{WHITE}Histórico de Mensagens -STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Uma lista das mensagens com notícias recentes +STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Uma lista das mensagens e notícias recentes STR_MESSAGE_NEWS_FORMAT :{STRING} - {STRING} STR_NEWS_MESSAGE_CAPTION :{WHITE}Mensagem @@ -851,7 +851,7 @@ STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLAC STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Inundações!{}Pelo menos {COMMA} desaparecidos, supostamente mortos após terríveis inundações! STR_NEWS_COMPANY_IN_TROUBLE_TITLE :{BIG_FONT}{BLACK}Empresa de transporte em dificuldades! -STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} será vendida ou declarada falida a menos que aumente o desempenho em breve! +STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} será vendida ou declarada falida, a menos que aumente o desempenho em breve! STR_NEWS_COMPANY_MERGER_TITLE :{BIG_FONT}{BLACK}Fusão de empresas de transportes! STR_NEWS_COMPANY_MERGER_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} foi vendida para {STRING} por {CURRENCY_LONG}! STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLACK}Falência! @@ -1272,11 +1272,11 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Direita STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}segundo{P 0 "" s} -STR_CONFIG_SETTING_INFINITE_MONEY :Dinheiro ilimitado: {STRING} +STR_CONFIG_SETTING_INFINITE_MONEY :Dinheiro infinito: {STRING} STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Permitir gastos ilimitados e desabilitar a falência de empresas STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Valor máximo do empréstimo inicial: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Valor máximo que uma empresa pode emprestar (sem considerar a inflação). Se definido como "Sem empréstimo", não haverá dinheiro disponível a menos que seja fornecido por um Script de Jogo ou pela configuração "Dinheiro ilimitado" +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Valor máximo que uma empresa pode emprestar (sem considerar a inflação). Se definido como "Sem empréstimo", não haverá dinheiro disponível a menos que seja fornecido por um Script de Jogo ou pela configuração "Dinheiro infinito" STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sem empréstimo @@ -1309,7 +1309,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Custos de const STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Definir o nível de construção e custos de aquisição STR_CONFIG_SETTING_RECESSIONS :Recessões: {STRING} -STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Se ativado, recessões podem ocorrer periodicamente. Durante uma recessão toda a produção é significativamente menor (ela retorna ao nível anterior quando a recessão termina) +STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Se ativado, recessões podem ocorrer periodicamente. Durante uma recessão, toda a produção é significativamente menor (ela retorna ao nível anterior quando a recessão termina) STR_CONFIG_SETTING_TRAIN_REVERSING :Desabilitar reversão de trens nas estações: {STRING} STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Se ativado, os trens não podem inverter a direção em estações não-terminais, mesmo se existir um caminho mais curto para o próximo destino com a inversão @@ -1350,7 +1350,7 @@ STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Modelo de acele STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Escolher o modelo físico para a aceleração dos trens. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do trem, tais como comprimento e força de tração STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Modelo de aceleração dos veículos: {STRING} -STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Escolher o modelo físico para a aceleração dos veículos rodoviários. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do veículo, por exemplo a força de tração +STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Escolher o modelo físico para a aceleração dos veículos rodoviários. O modelo "original" penaliza as inclinações igualmente para todos os veículos. O modelo "realista" penaliza as inclinações e curvas considerando várias propriedades do veículo como, por exemplo, a força de tração STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :Inclinação do terreno para trens: {STRING} STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Inclinação de um quadrado inclinado para um trem. Valores grandes tornam mais difícil para um trem subir uma colina @@ -1369,13 +1369,13 @@ STR_CONFIG_SETTING_INFLATION :Inflação: {ST STR_CONFIG_SETTING_INFLATION_HELPTEXT :Permitir inflação na economia, na qual os custos aumentam ligeiramente mais rápido do que os pagamentos STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Comprimento máximo de pontes: {STRING} -STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Comprimento máximo para construção de pontes +STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Comprimento máximo para a construção de pontes STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT :Altura máxima de pontes: {STRING} STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Altura máxima para a construção de pontes STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Comprimento máximo de túneis: {STRING} -STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Comprimento máximo para construção de túneis +STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Comprimento máximo para a construção de túneis STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Método manual de construção de indústria primária: {STRING} STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Método de fundar uma indústria primária. 'Nenhum' significa que não é possível fundar nenhuma; 'Prospecção' significa que é possível fundar, mas a construção ocorre em um local aleatório do mapa e pode até falhar; 'Como as outras indústrias' significa que novas indústrias podem ser construídas em qualquer local escolhido pelas empresas, como se fossem indústrias de processamento @@ -1443,14 +1443,14 @@ STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Permitir enviar STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Permitir a transferências de dinheiro entre empresas em modo multijogador STR_CONFIG_SETTING_FREIGHT_TRAINS :Multiplicador de peso da carga para simular trens pesados: {STRING} -STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Definir o impacto do transporte de carga nos trens. Um valor grande torna o transporte de carga mais difícil para os trens, especialmente em inclinações +STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Definir o impacto do transporte de carga nos trens. Um valor grande torna o transporte de carga mais difícil para os trens, especialmente em terreno inclinado STR_CONFIG_SETTING_PLANE_SPEED :Fator de velocidade de aviões: {STRING} STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Definir a velocidade relativa dos aviões, em comparação com outros tipos de veículos, para diminuir o valor da receita do transporte por aeronave STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Número de acidentes de aeronaves: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Definir a probabilidade de ocorrer um acidente aéreo.{}* Aeronaves grandes sempre estão sujeitas a acidentes quando pousam em aeroportos pequenos +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Definir a ocorrência aleatória de acidentes aéreos.{}* Aeronaves grandes sempre estão sujeitas a acidentes quando pousam em aeroportos pequenos ###length 3 STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Nenhum STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reduzido @@ -1475,13 +1475,13 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Cor inicial sec STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Escolher a cor inicial secundária para a empresa, se estiver usando um NewGRF que permite isso STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeroportos nunca expiram: {STRING} -STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Quando ativada, esta configuração torna cada tipo de aeroporto disponível para sempre após a sua introdução +STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ativando esta configuração, cada tipo de aeroporto ficará disponível para sempre após a sua introdução STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Avisar se o veículo está perdido: {STRING} -STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :Mostrar mensagens sobre veículos que não conseguem encontrar um caminho para o destino ordenado +STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :Mostrar mensagens sobre veículos que não conseguem encontrar um caminho para o destino programado STR_CONFIG_SETTING_ORDER_REVIEW :Revisar as ordens dos veículos: {STRING} -STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Quando ativado, as ordens dos veículos são periodicamente verificadas e, quando detetados, alguns problemas óbvios são relatados com mensagens +STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Quando ativado, as ordens dos veículos são periodicamente verificadas e alguns problemas evidentes, quando detetados, são relatados com uma mensagem de aviso ###length 3 STR_CONFIG_SETTING_ORDER_REVIEW_OFF :Não STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :Sim, mas excluir veículos parados @@ -1489,8 +1489,8 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :De todos os ve STR_CONFIG_SETTING_WARN_INCOME_LESS :Avisar se o rendimento de um veículo está negativo: {STRING} ###length 2 -STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Quando ativado, uma mensagem é enviada quando um veículo não gerou lucro durante um ano -STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Quando ativado, uma mensagem é enviada quando um veículo não gerou qualquer lucro durante um período +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Quando ativado, uma mensagem de aviso será exibida quando um veículo não gerou lucro durante um ano +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Quando ativado, uma mensagem de aviso será exibida quando um veículo não gerou qualquer lucro durante um período STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Veículos nunca saem de linha: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Quando ativado, todos os modelos de veículos permanecerão disponíveis para sempre após a sua introdução @@ -1518,7 +1518,7 @@ STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Renovar automat STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Quando ativado, um veículo próximo do fim da vida útil é automaticamente substituído quando as condições de renovação são satisfeitas STR_CONFIG_SETTING_AUTORENEW_MONTHS :Renovar automaticamente o veículo {STRING} da idade máxima -STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Idade relativa em que um veículo deve ser considerado para renovação automática +STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Idade relativa na qual um veículo deve ser considerado para renovação automática ###length 2 STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} m{P 0 ês eses} antes STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} m{P 0 ês eses} depois @@ -1530,7 +1530,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Duração da me STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duração da visualização de mensagens de erro em uma janela vermelha. Algumas mensagens de erro (crítico) não são fechadas automaticamente após este tempo, mas precisam ser fechadas manualmente STR_CONFIG_SETTING_HOVER_DELAY :Mostrar textos de ajuda: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tempo que o cursor deve ficar sobre algum elemento da interface para que os textos de ajuda sejam mostrados. Alternativamente, os textos de ajuda podem ser mostrados com o botão direito do mouse quando este valor está definido como 0 +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tempo que o cursor deve ficar sobre algum elemento da interface para que os textos de ajuda sejam mostrados. Quando este valor está definido como 0, os textos de ajuda podem ser mostrados com o botão direito do mouse STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Manter o cursor por {COMMA} milissegundo{P 0 "" s} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Botão direito @@ -1547,10 +1547,10 @@ STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as carg STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Se ativado, a carga transportável pelo veículo aparecerá acima dele nas listas de veículos STR_CONFIG_SETTING_LANDSCAPE :Clima: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os climas definem a jogabilidade básica com diferentes cargas e requerimentos para o crescimento das localidades. NewGRFs e Scripts de Jogo permitem um controle mais fino +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os climas definem a jogabilidade básica dos cenários, com diferentes cargas e necessidades para o crescimento das localidades. NewGRFs e Scripts de Jogo permitem um controle mais preciso sobre isso STR_CONFIG_SETTING_LAND_GENERATOR :Gerador de Terreno: {STRING} -STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :O gerador 'Original' depende do conjunto gráfico base e produz formas de terreno pré-definidas. 'TerraGenesis' é um gerador baseado no algoritmo de ruído de Perlin com definições mais refinadas +STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :O gerador 'Original' depende do conjunto gráfico base e produz formas de terreno pré-definidas. 'TerraGenesis' é um gerador baseado no algoritmo de ruído de Perlin, que permite configurações mais refinadas ###length 2 STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis @@ -1565,14 +1565,14 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distância máx STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limite de distância entre a borda do mapa e o local de construção de refinarias e plataformas de petróleo. Em mapas de ilhas isso garante que elas fiquem perto da costa. Em mapas com mais de 256 quadrados esse valor é aumentado STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altura da linha de neve: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Escolher a que altura a neve começa na paisagem subártica. A neve também afeta a geração de indústrias e os requisitos de crescimento das localidades. Só pode ser modificado no Editor de Cenário ou então é calculado usando a "cobertura de neve" +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Escolher em que latitude a neve começa na paisagem subártica. A neve também afeta a geração de indústrias e os requisitos de crescimento das localidades. Só pode ser modificado no Editor de Cenário ou então é calculado usando a "cobertura de neve" STR_CONFIG_SETTING_SNOW_COVERAGE :Cobertura de neve: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de neve na paisagem subártica. A neve também afeta a geração das indústrias e os requisitos para crescimento das localidades. Usado apenas durante a geração do mapa. O nível do mar e as suas encostas nunca têm neve +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de neve na paisagem subártica. A neve também afeta a geração de indústrias e os requisitos para crescimento das localidades. Usado apenas durante a geração do mapa. O nível do mar e as suas encostas nunca têm neve STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Cobertura do deserto: {STRING} -STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de deserto na paisagem tropical. O deserto também afeta a geração das indústrias. Usado somente durante a geração do mapa +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de deserto na paisagem tropical. O deserto também afeta a geração de indústrias. Usado somente durante a geração do mapa STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Irregularidade do terreno: {STRING} @@ -1614,7 +1614,7 @@ STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :Altura de um ma STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}Um ou mais quadrados na borda norte não estão vazios STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}Um ou mais quadrados em um dos cantos não é água -STR_CONFIG_SETTING_STATION_SPREAD :Tamanho máximo de estação {STRING} +STR_CONFIG_SETTING_STATION_SPREAD :Tamanho máximo de estação: {STRING} STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Área máxima que as partes de uma estação simples podem ocupar. Valores grandes tornam o jogo lento STR_CONFIG_SETTING_SERVICEATHELIPAD :Manutenção automática de helicópteros em heliportos: {STRING} @@ -1638,13 +1638,13 @@ STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Verde para azul STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :Cinza para vermelho STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Escala de cinza -STR_CONFIG_SETTING_SCROLLMODE :Comportamento de rolamento da janela: {STRING} -STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Comportamento ao mover o mapa. A opção "posição do mouse travada" não funciona em todos os sistemas, tais como versões baseadas na web, telas sensíveis ao toque, Linux com Wayland e outros +STR_CONFIG_SETTING_SCROLLMODE :Comportamento do deslocamento da visualização: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Comportamento da movimentação do mapa. A opção "posição do mouse travada" não funciona em todos os sistemas, tais como versões baseadas na web, telas sensíveis ao toque, Linux com Wayland e outros ###length 4 -STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Mover visualização com Botão Direito Mouse, posição do mouse travada -STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Mover mapa com Botão Direito Mouse, posição do mouse travada -STR_CONFIG_SETTING_SCROLLMODE_RMB :Mover mapa com Botão Direito Mouse -STR_CONFIG_SETTING_SCROLLMODE_LMB :Mover mapa com Botão Esquerdo Mouse +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Mover visualização com o Botão Direito, posição do mouse travada +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Mover mapa com o Botão Direito, posição do mouse travada +STR_CONFIG_SETTING_SCROLLMODE_RMB :Mover mapa com o Botão Direito do Mouse +STR_CONFIG_SETTING_SCROLLMODE_LMB :Mover mapa com o Botão Esquerdo do Mouse STR_CONFIG_SETTING_SMOOTH_SCROLLING :Suavizar deslocamento da visualização: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controlar como a visualização principal se move para uma localização específica ao clicar no minimapa ou quando é dado um comando para ir até um objeto específico no mapa. Se ativado, a visualização se move suavemente. Se desativado, a visualização salta diretamente para o destino escolhido @@ -1681,7 +1681,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Clique simples STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Clique simples (imediatamente) STR_CONFIG_SETTING_USE_RELAY_SERVICE :Usar serviço de retransmissão: {STRING} -STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Se durante a criação da conexão o servidor falhar, pode-se usar um serviço de retransmissão para criar a conexão. "Nunca" não permite isso, "Perguntar" irá perguntar antes, "Permitir" vai permitir sem perguntar +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Se a criação de uma conexão com o servidor falhar, pode-se usar um serviço de retransmissão para criar a conexão. "Nunca" não permite isso, "Perguntar" irá perguntar antes, "Permitir" vai permitir sem perguntar ###length 3 STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Nunca STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Perguntar @@ -1738,15 +1738,15 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Mostrar os hor STR_CONFIG_SETTING_QUICKGOTO :Criação rápida de ordens de veículos: {STRING} STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Pré-selecionar o cursor 'Ir Para' ao abrir a janela de ordens -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Tipo de trilho padrão (ao criar novo ou abrir jogo): {STRING} -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Tipo de trilho a ser selecionado ao carregar/iniciar um jogo. 'Primeiro disponível' seleciona o tipo de trilho mais antigo. 'Último disponível' seleciona o tipo mais novo de trilho e 'Mais utilizado' seleciona o tipo que é mais usado atualmente +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Tipo de trilho padrão (ao iniciar novo/abrir jogo): {STRING} +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Tipo de trilho a ser selecionado ao iniciar novo/abrir um jogo. 'Primeiro disponível' seleciona o tipo de trilho mais antigo. 'Último disponível' seleciona o tipo mais novo de trilho e 'Mais utilizado' seleciona o tipo que é mais usado atualmente ###length 3 STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Primeiro disponível STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Último disponível STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Mais utilizado STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Mostrar caminhos reservados para trajetos: {STRING} -STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Destacar os trajetos reservados com uma cor diferente para ajudar em problemas com trens que se recusam a entrar em seções controlados por sinais de caminho +STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Usar uma cor diferente nos trajetos reservados para auxiliar na solução de problemas com trens que se recusam a entrar em seções controlados por sinais de caminho STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Manter as ferramentas de construção ativas após o uso: {STRING} STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Manter ativas as ferramentas de construção para pontes, túneis, etc. após o uso @@ -1760,8 +1760,8 @@ STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% da veloc ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Sem limite (o máximo que o seu computador suporta) -STR_CONFIG_SETTING_SOUND_TICKER :Notícias: {STRING} -STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Reproduzir som para mensagens com notícias resumidas +STR_CONFIG_SETTING_SOUND_TICKER :Painel de notícias: {STRING} +STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Reproduzir som para mensagens e notícias resumidas STR_CONFIG_SETTING_SOUND_NEWS :Jornal: {STRING} STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Reproduzir som ao mostrar um jornal @@ -1771,8 +1771,8 @@ STR_CONFIG_SETTING_SOUND_NEW_YEAR :Fim do ano: {ST STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Fim do período: {STRING} ###length 2 -STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Reproduzir som no fim do ano e apresentar o desempenho da empresa neste ano comparado com o desempenho no ano anterior -STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Reproduzir som no fim do período e apresentar o desempenho da empresa neste período comparado com o desempenho no período anterior +STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Reproduzir som no fim do ano e mostrar um resumo do desempenho da empresa neste ano, comparado com o desempenho no ano anterior +STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Reproduzir som no fim do período e mostrar um resumo do desempenho da empresa neste período, comparado com o desempenho no período anterior STR_CONFIG_SETTING_SOUND_CONFIRM :Construção: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Reproduzir som para construções ou outras ações bem sucedidas @@ -1819,20 +1819,20 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permitir que co STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes antes de scripts serem suspensos: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Número máximo de passos computacionais que um script pode executar em um turno STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Utilização máxima de memória por script: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Quantidade de memória que um script pode usar antes dele ser terminado automaticamente. Para mapas maiores pode ser necessário aumentar este valor +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Quantidade de memória que um script pode usar antes de ser terminado automaticamente. Para mapas maiores pode ser necessário aumentar este valor STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Intervalos de manutenção são em porcentagem: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Quando ativado, os veículos tentam fazer a manutenção quando sua confiabilidade atingir uma determinada porcentagem da confiabilidade máxima.{}{}Por exemplo, se a confiabilidade máxima de um veículo for 90% e o intervalo de manutenção for 20%, o veículo tentará fazer a manutenção quando atingir 72% de confiabilidade +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Quando ativado, os veículos tentam fazer a manutenção quando sua confiabilidade atinge uma determinada porcentagem da confiabilidade máxima.{}{}Por exemplo, se a confiabilidade máxima de um veículo for 90% e o intervalo de manutenção for 20%, o veículo tentará fazer a manutenção quando atingir 72% de confiabilidade STR_CONFIG_SETTING_SERVINT_TRAINS :Intervalo padrão de manutenção para trens: {STRING} -STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Definir o intervalo padrão de manutenção para novos veículos ferroviários, se não for configurado um intervalo de manutenção explícito para o veículo +STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Definir o intervalo padrão de manutenção para novos veículos ferroviários, se um intervalo de manutenção não for explicitamente configurado para o veículo STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Intervalo padrão de manutenção para veículos: {STRING} -STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Definir o intervalo padrão de manutenção para novos veículos rodoviários, se não for configurado um intervalo de manutenção explícito para o veículo +STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Definir o intervalo padrão de manutenção para novos veículos rodoviários, se um intervalo de manutenção não for explicitamente configurado para o veículo STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervalo padrão de manutenção para aeronaves: {STRING} -STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Definir o intervalo padrão de manutenção para novas aeronaves, se não for configurado um intervalo de manutenção explícito para o veículo +STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Definir o intervalo padrão de manutenção para novas aeronaves, se um intervalo de manutenção não for explicitamente configurado para o veículo STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalo padrão de manutenção para embarcações: {STRING} -STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Definir o intervalo padrão de manutenção para novas embarcações, se não for configurado um intervalo de manutenção explícito para o veículo +STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Definir o intervalo padrão de manutenção para novas embarcações, se um intervalo de manutenção não for explicitamente configurado para o veículo STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Dia{P 0 "" s}/Minuto{P 0 "" s}/% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Desativado @@ -1847,7 +1847,7 @@ STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ativar limite d STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Quando ativado, usa o limite de velocidade dos vagões para definir a velocidade máxima de um trem STR_CONFIG_SETTING_DISABLE_ELRAILS :Desativar ferrovias elétricas: {STRING} -STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Quando ativada, esta configuração desativa a necessidade de eletrificar os trilhos para que locomotivas elétricas possam utilizá-los +STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Quando ativada, esta configuração elimina a necessidade de eletrificar os trilhos para que locomotivas elétricas possam utilizá-los STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Chegada do primeiro veículo na estação do jogador: {STRING} STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Mostrar um jornal quando o primeiro veículo chegar a uma estação nova do jogador @@ -1861,7 +1861,7 @@ STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Mostrar um jorn STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :Acidentes de veículos dos concorrentes: {STRING} STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :Mostrar um jornal sobre veículos acidentados dos concorrentes -STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Informações de empresa: {STRING} +STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Informações sobre empresas: {STRING} STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Mostrar um jornal quando uma nova empresa é criada ou quando empresas estão à beira da falência STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN :Abertura de indústrias: {STRING} @@ -1888,7 +1888,7 @@ STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Mostrar mensage STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Novos veículos: {STRING} STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Mostrar um jornal quando um novo tipo de veículo é disponibilizado -STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Mudanças de aceitação de carga: {STRING} +STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Mudanças na aceitação de carga: {STRING} STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Mostrar mensagens quando estações alterarem a aceitação de algumas cargas STR_CONFIG_SETTING_NEWS_SUBSIDIES :Subsídios: {STRING} @@ -1902,7 +1902,7 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_SUMMARY :Resumo STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Completo STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Notícias em cores aparecem em: {STRING} -STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Ano em que os jornais serão mostrados em cores. Antes deste ano, serão mostrados em preto e branco. +STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Ano em que os jornais serão mostrados em cores. Antes deste ano, serão mostrados em preto e branco STR_CONFIG_SETTING_STARTING_YEAR :Data de início: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Pontuação no fim do ano: {STRING} @@ -1967,7 +1967,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permitido STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Permitido, estrutura personalizada da localidade STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Geração de carga da localidade: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Quanta carga é produzida pelas casas nas localidades, em relação à população geral da localidade.{}Crescimento quadrático: uma localidade com o dobro do tamanho gera quatro vezes mais passageiros.{}Crescimento linear: uma localidade com o dobro do tamanho gera o dobro da quantidade de passageiros +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Quanta carga é produzida pelas casas nas localidades, em relação à população total da localidade.{}Crescimento quadrático: uma localidade com o dobro do tamanho gera quatro vezes mais passageiros.{}Crescimento linear: uma localidade com o dobro do tamanho gera o dobro da quantidade de passageiros ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadrático (original) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear @@ -1981,16 +1981,16 @@ STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Crescer e espal STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Não crescer e não espalhar {RED}(afeta madeireiras) STR_CONFIG_SETTING_TOOLBAR_POS :Posição da barra de ferramentas principal: {STRING} -STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Posição horizontal da barra de ferramentas principal na parte superior da tela -STR_CONFIG_SETTING_STATUSBAR_POS :Posição da barra de status: {STRING} -STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT :Posição horizontal da barra de status na parte inferior da tela +STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Posição horizontal, na parte superior da tela, da barra de ferramentas principal +STR_CONFIG_SETTING_STATUSBAR_POS :Posição da barra de estado: {STRING} +STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT :Posição horizontal, na parte inferior da tela, da barra de informações atuais sobre o jogo STR_CONFIG_SETTING_SNAP_RADIUS :Distância para alinhamento de janelas: {STRING} STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Distância mínima entre janelas para que a janela que está sendo movida se alinhe automaticamente às janelas mais próximas STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} pixel{P 0 "" s} ###setting-zero-is-special STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Desativado STR_CONFIG_SETTING_SOFT_LIMIT :Número máximo de janelas não fixadas: {STRING} -STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Número de janelas, não fixadas, abertas antes que as janelas antigas sejam automaticamente fechadas, liberando espaço para novas janelas +STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Número de janelas abertas, que não estão fixadas, antes que as janelas antigas sejam automaticamente fechadas para liberar espaço para novas janelas STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} ###setting-zero-is-special STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :desativado @@ -2008,14 +2008,14 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Resolução máxima de sprites: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limitar a resolução máxima a ser usada para sprites. Limitar a resolução de sprites evitará o uso de gráficos de alta resolução, mesmo quando estiverem disponíveis. Isso pode ajudar a manter a aparência uniforme do jogo quando estiver usando uma mistura de arquivos GRF com e sem gráficos de alta resolução +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limita a resolução máxima a ser usada para sprites. Limitar a resolução de sprites evitará o uso de gráficos de alta resolução, mesmo quando estiverem disponíveis. Isso pode ajudar a manter o jogo com uma aparência unificada quando usar uma mistura de arquivos GRF com e sem gráficos de alta resolução ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x -STR_CONFIG_SETTING_TOWN_GROWTH :Ritmo de crescimento de localidades: {STRING} -STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Velocidade de crescimento das localidades +STR_CONFIG_SETTING_TOWN_GROWTH :Ritmo de crescimento das localidades: {STRING} +STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Velocidade do crescimento das localidades ###length 5 STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Nenhum STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Devagar @@ -2024,7 +2024,7 @@ STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Rápido STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Muito rápido STR_CONFIG_SETTING_LARGER_TOWNS :Proporção de localidades que se tornarão cidades: {STRING} -STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Quantidade de localidades que se tornarão cidades, desse modo uma localidade que começa maior crescerá mais rápido +STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Quantidade de localidades que se tornarão cidades. Assim, uma localidade que começa maior crescerá mais rápido STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 a cada {COMMA} ###setting-zero-is-special STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Nenhum @@ -2034,7 +2034,7 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamanho médio STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Atualizar a distribuição a cada {STRING} STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo entre recálculos subsequentes da rede de conexões. Cada recálculo atualiza os planos para um componente da rede. Isso significa que um valor X para esta configuração não significa que toda a rede será atualizada a cada X segundos. Apenas algum componente será atualizado. Quanto menor o tempo definido, mais tempo de CPU será necessário para calculá-lo. Quanto maior o valor definido, mais tempo será necessário até que a distribuição de carga inicie nas novas rotas STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Usar {STRING} para recalcular a distribuição -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo gasto para cada recálculo de um componente da rede de conexões. Quando um recálculo é iniciado, uma tarefa é gerada e pode ser executada por esse número de segundos. Quanto menor for esse valor, maior a chance de que a tarefa não seja concluída quando deveria. Então o jogo para até que ela seja completada, causando um atraso. Quanto maior for esse valor, mais tempo será necessário para a distribuição ser atualizada quando as rotas mudam +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo gasto em cada recálculo de um componente da rede de conexões. Quando um recálculo é iniciado, uma tarefa é gerada e pode ser executada por esse número de segundos. Quanto menor for esse valor, maior a chance de que a tarefa não seja concluída quando deveria. Então o jogo para até que ela seja completada, causando um atraso. Quanto maior for esse valor, mais tempo será necessário para a distribuição ser atualizada quando as rotas mudam STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribuição para passageiros: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" significa que aproximadamente o mesmo número de passageiros irá de uma estação A para uma estação B, assim como de B para A. "Assimétrico" significa que um número arbitrário de passageiros pode ir em qualquer direção. "Manual" significa que não haverá distribuição automática dos passageiros @@ -2053,12 +2053,12 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Precisão da di STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Quanto maior for esse valor, mais tempo de CPU será necessário para calcular a rede de conexões. Se demorar muito, você poderá notar um atraso. Entretanto, se o valor for muito pequeno, a distribuição será imprecisa e você irá perceber que cargas não estão sendo enviadas para os locais esperados STR_CONFIG_SETTING_DEMAND_DISTANCE :Efeito da distância na demanda: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Se for definido um valor maior que 0, a distância entre a estação de origem A de alguma carga e um possível destino B terá um efeito na quantidade de carga enviada de A até B. Quanto mais distante B estiver de A, menos carga será enviada. Quanto maior o valor definido, menos carga será transportada para estações distantes e mais carga será enviada para estações mais próximas +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Se for definido um valor maior que 0, a distância entre a estação de origem A (de alguma carga) e um possível destino B terá um efeito na quantidade de carga enviada de A até B. Quanto mais distante B estiver de A, menos carga será enviada. Quanto maior o valor definido, menos carga será transportada para estações distantes e mais carga será enviada para estações mais próximas STR_CONFIG_SETTING_DEMAND_SIZE :Quantidade de carga retornada no modo simétrico: {STRING} STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Definir isto para menos de 100% faz com que a distribuição simétrica comporte-se mais como a assimétrica. Menos carga será forçadamente devolvida se uma certa quantidade for enviada a uma estação. Se você definir em 0% a distribuição simétrica se comportará exatamente como a assimétrica STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturação de rotas curtas antes de usar rotas de grande capacidade: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequentemente há diversas rotas entre duas estações. Cargodist irá saturar a rota mais curta primeiro, depois usar a segunda rota mais curta até saturá-la, e assim por diante. A saturação é determinada por uma estimativa da capacidade e da utilização prevista. Ao saturar todas as rotas, se ainda existir demanda não atendida, CargoDist irá sobrecarregar todas as rotas, dando preferência àquelas de maior capacidade. Entretanto, na maioria das vezes o algoritmo não irá estimar corretamente a capacidade. Esta configuração permite definir até que porcentagem uma rota mais curta deverá ser saturada na primeira passada antes do algoritmo selecionar a próxima rota mais longa. Defina-o para menos de 100% para evitar estações sobrecarregadas no caso de capacidade superestimada +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequentemente há diversas rotas entre duas estações. Cargodist irá saturar a rota mais curta primeiro, depois usar a segunda rota mais curta até saturá-la, e assim por diante. A saturação é determinada por uma estimativa da capacidade e da utilização prevista. Ao saturar todas as rotas, se ainda existir demanda não atendida, Cargodist irá sobrecarregar todas as rotas, dando preferência àquelas de maior capacidade. Entretanto, na maioria das vezes o algoritmo não irá estimar corretamente a capacidade. Esta configuração permite definir até que porcentagem uma rota mais curta deverá ser saturada na primeira passada antes do algoritmo selecionar a próxima rota mais longa. Defina-o para menos de 100% para evitar estações sobrecarregadas no caso de capacidade superestimada STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unidades de velocidade (terrestre): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Unidades de velocidade (náutica): {STRING} @@ -2152,7 +2152,7 @@ STR_CONFIG_ERROR :{WHITE}Erro no STR_CONFIG_ERROR_ARRAY :{WHITE}... erro no array '{STRING}' STR_CONFIG_ERROR_INVALID_VALUE :{WHITE}... valor inválido '{STRING}' para '{STRING}' STR_CONFIG_ERROR_TRAILING_CHARACTERS :{WHITE}... caracteres extras no final de '{STRING}' -STR_CONFIG_ERROR_DUPLICATE_GRFID :{WHITE}... ignorando NewGRF '{STRING}': ID do GRF é idêntico a '{STRING}' +STR_CONFIG_ERROR_DUPLICATE_GRFID :{WHITE}... ignorando NewGRF '{STRING}': GRF ID é igual ao de '{STRING}' STR_CONFIG_ERROR_INVALID_GRF :{WHITE}... ignorando NewGRF '{STRING}' inválido: {STRING} STR_CONFIG_ERROR_INVALID_GRF_NOT_FOUND :não encontrado STR_CONFIG_ERROR_INVALID_GRF_UNSAFE :inseguro para uso estático @@ -2288,7 +2288,7 @@ STR_LIVERY_PASSENGER_WAGON_STEAM :Vagão de Passa STR_LIVERY_PASSENGER_WAGON_DIESEL :Vagão de Passageiros (Diesel) STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Vagão de Passageiros (Elétrico) STR_LIVERY_PASSENGER_WAGON_MONORAIL :Vagão de Passageiros (Monotrilho) -STR_LIVERY_PASSENGER_WAGON_MAGLEV :Vagão de Passageiros (Maglev) +STR_LIVERY_PASSENGER_WAGON_MAGLEV :Vagão de Passageiros (MagLev) STR_LIVERY_FREIGHT_WAGON :Vagão de Carga STR_LIVERY_BUS :Ônibus STR_LIVERY_TRUCK :Caminhão @@ -2592,7 +2592,7 @@ STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Nos últ ###length 21 STR_NETWORK_ERROR_CLIENT_GENERAL :erro geral -STR_NETWORK_ERROR_CLIENT_DESYNC :erro por perda de sincronização +STR_NETWORK_ERROR_CLIENT_DESYNC :erro/falha de sincronização STR_NETWORK_ERROR_CLIENT_SAVEGAME :não foi possível carregar o mapa STR_NETWORK_ERROR_CLIENT_CONNECTION_LOST :conexão perdida STR_NETWORK_ERROR_CLIENT_PROTOCOL_ERROR :erro de protocolo @@ -2703,7 +2703,7 @@ STR_CONTENT_TYPE_HEIGHTMAP :Mapa topográfi STR_CONTENT_TYPE_BASE_SOUNDS :Sons base STR_CONTENT_TYPE_BASE_MUSIC :Músicas base STR_CONTENT_TYPE_GAME_SCRIPT :Script de jogo -STR_CONTENT_TYPE_GS_LIBRARY :Biblioteca de GS +STR_CONTENT_TYPE_GS_LIBRARY :Biblioteca de SJ # Content downloading progress window STR_CONTENT_DOWNLOAD_TITLE :{WHITE}Baixando conteúdo... @@ -2799,7 +2799,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Converte STR_RAIL_NAME_RAILROAD :Ferrovia STR_RAIL_NAME_ELRAIL :Ferrovia eletrificada STR_RAIL_NAME_MONORAIL :Monotrilho -STR_RAIL_NAME_MAGLEV :Maglev +STR_RAIL_NAME_MAGLEV :MagLev # Rail depot construction window STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Orientação do Depósito Ferroviário @@ -3528,7 +3528,7 @@ STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} deve STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} é para OpenTTD versão {2:STRING} ou superior STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :o arquivo GRF que foi desenvolvido para a tradução STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Foram carregados NewGRFs demais -STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Carregar {1:STRING} como NewGRF estático com {2:STRING} pode causar erro de sincronização +STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Carregar {1:STRING} como NewGRF estático com {2:STRING} pode causar dessincronização STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Sprite inesperado (sprite {3:NUM}) STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Propriedade Action 0 desconhecida {4:HEX} (sprite {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Tentativa de uso de ID inválido (sprite {3:NUM}) @@ -3562,11 +3562,11 @@ STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}Foram e STR_NEWGRF_LIST_MISSING :{RED}Arquivos em falta # NewGRF 'it's broken' warnings -STR_NEWGRF_BROKEN :{WHITE}O comportamento do NewGRF '{0:STRING}' pode causar erros de sincronização e/ou travamentos +STR_NEWGRF_BROKEN :{WHITE}O comportamento do NewGRF '{0:STRING}' pode causar dessincronização e/ou travamentos STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Ele alterou o estado do vagão motorizado '{1:ENGINE}' quando não estava em um depósito STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Ele alterou o comprimento do veículo '{1:ENGINE}' quando não estava em um depósito STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Ele alterou a capacidade do veículo '{1:ENGINE}' quando não estava em um depósito ou em adaptação -STR_BROKEN_VEHICLE_LENGTH :{WHITE}O trem '{VEHICLE}' que pertence a '{COMPANY}' tem um comprimento inválido, possivelmente devido a problemas com NewGRFs. Podem ocorrer erros de sincronização ou travamento do jogo +STR_BROKEN_VEHICLE_LENGTH :{WHITE}O trem '{VEHICLE}' que pertence a '{COMPANY}' tem um comprimento inválido. Provavelmente isso é devido a problemas com NewGRFs. Pode ocorrer dessincronização ou travamento do jogo STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' produz informação incorreta STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}A informação de carga/adaptação para '{1:ENGINE}' é diferente da lista de compra depois da construção. Isto pode fazer a renovação/substituição automática falhar se adaptar corretamente @@ -3897,7 +3897,7 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Nenhum STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Construir sede STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Construir sede da empresa STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Ver sede -STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Mostar sede da empresa +STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Mostrar sede da empresa STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Mover sede STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Reconstruir sede da empresa em outro local por 1% do valor da empresa. Pressione também Shift para só mostrar o custo estimado STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detalhes @@ -4782,7 +4782,7 @@ STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Ativar/D STR_AI_DEBUG_CONTINUE :{BLACK}Continuar STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Sair da pausa e continuar a IA STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Mostrar saída de depuração desta IA. Ctrl+Clique para abrir em uma nova janela -STR_AI_GAME_SCRIPT :{BLACK}Script de jogo +STR_AI_GAME_SCRIPT :{BLACK}Script de Jogo STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Verificar o registro do Script de Jogo. Ctrl+Clique para abrir em uma nova janela STR_ERROR_AI_NO_AI_FOUND :Não foi encontrada nenhuma IA adequada para carregar.{}Esta IA é um pacote vazio e não fará nada.{}Você pode obter várias IAs usando o sistema de 'Conteúdo Online' diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 323203cd68..b82bf6b157 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1054,9 +1054,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Randen s STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Vink dit vakje aan om randen te schalen op grootte van gebruikersscherm STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Traditioneel sprite-lettertype gebruiken -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Vink dit vakje aan als je het traditionele sprite-lettertype met vaste breedte wilt gebruiken. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Vink dit vakje aan als je het traditionele sprite-lettertype met vaste breedte wilt gebruiken STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Lettertypen met anti-alias -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Vink dit vakje aan voor in grootte aanpasbare lettertypen met anti-alias. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Vink dit vakje aan voor in grootte aanpasbare lettertypen met anti-alias STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1275,7 +1275,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Onbeperkt geld: STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Je kunt onbeperkt geld uitgeven en bedrijven gaan niet failliet STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximale beginlening: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximaal bedrag dat een bedrijf kan lenen (zonder rekening te houden met de inflatie). Als je dit instelt op 'Geen lening' kun je geen geld krijgen tenzij door middel van een spelscript of de instelling 'Onbeperkt geld'. +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximaal bedrag dat een bedrijf kan lenen (zonder rekening te houden met de inflatie). Als je dit instelt op 'Geen lening' kun je geen geld krijgen tenzij door middel van een spelscript of de instelling 'Onbeperkt geld' STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Geen lening @@ -1359,7 +1359,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Hellingsteilhei STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Steilheid van een schuine tegel voor een wegvoertuig. Hogere waarden maken het moeilijker om een heuvel te beklimmen STR_CONFIG_SETTING_FORBID_90_DEG :Treinen en schepen mogen niet 90° draaien: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Draaiingen met 90° treden op wanneer een horizontale baan direct gevolgd wordt door een verticaal baanstuk op de aangrenzende tegel, waardoor de trein daarna 90 graden draait wanneer de tegelrand wordt overgestoken in plaats van de gebruikelijke 45 graden voor andere spoorcombinaties. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Bochten van 90° treden op wanneer een horizontale baan direct gevolgd wordt door een verticaal baanstuk op de aangrenzende tegel, waardoor de trein daarna 90 graden draait wanneer de tegelrand wordt overgestoken in plaats van de gebruikelijke 45 graden voor andere spoorcombinaties STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Samenvoegen van indirect aansluitende stations toestaan: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Hiermee kun je aanvullende onderdelen aan een station plaatsen zonder dat reeds bestaande onderdelen beïnvloed worden. Ctrl+klik is vereist tijdens het plaatsen van nieuwe onderdelen. @@ -1495,22 +1495,22 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Voertuigen verl STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Wanneer ingeschakeld, alle voertuig modellen blijven voor altijd beschikbaar na hun introductie STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Tijd bijhouden: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecteer de tijdbasis voor het spel. Dit kan later niet meer worden gewijzigd.{}{}Kalender is het klassieke OpenTTD, met een jaar met 12 maanden en maanden met 28-31 dagen.{}{}Bij Muurklok worden vrachtproductie en financiën gebaseerd op stappen van één minuut, ongeveer zolang als maanden van 30 dagen in Kalender-modus. Deze worden gegroepeerd in perioden van 12 minuten, equivalent aan een jaar in Kalender-modus.{}{}In beide modi heb je altijd een klassieke kalender die wordt gebruikt voor de introductiedatums van voertuigen, huizen en andere infrastructuur. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecteer de tijdbasis voor het spel. Dit kan later niet meer worden gewijzigd.{}{}Kalender is het klassieke OpenTTD, met een jaar met 12 maanden en maanden met 28-31 dagen.{}{}Bij Muurklok worden vrachtproductie en financiën gebaseerd op stappen van één minuut, ongeveer zolang als maanden van 30 dagen in Kalender-modus. Deze worden gegroepeerd in perioden van 12 minuten, equivalent aan een jaar in Kalender-modus.{}{}In beide modi heb je altijd een klassieke kalender die wordt gebruikt voor de introductiedatums van voertuigen, huizen en andere infrastructuur ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalender STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Muurklok STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minuten per jaar: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Kies het aantal minuten in een kalenderjaar. Standaard is 12 minuten. Bij 0 wijzigt de kalendertijd niet. Deze instelling heeft geen invloed op de economische simulatie van het spel en is alleen beschikbaar met tijdbasis Muurklok. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Kies het aantal minuten in een kalenderjaar. Standaard is 12 minuten. Bij 0 wijzigt de kalendertijd niet. Deze instelling heeft geen invloed op de economische simulatie van het spel en is alleen beschikbaar met tijdbasis Muurklok STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (kalendertijd bevroren) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Schaal vrachtproductie van stad: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Schaal de vrachtproductie van steden met dit percentage. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Schaal de vrachtproductie van steden met dit percentage STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Schaal vrachtproductie van industrie: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Schaal de vrachtproductie van industrieën met dit percentage. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Schaal de vrachtproductie van industrieën met dit percentage STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Voertuig automatisch vernieuwen wanneer dit oud wordt: {STRING} @@ -1529,7 +1529,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Duur van foutbe STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duur voor het weergeven van foutberichten in een rood venster. Merk op dat sommige (kritische) foutmeldingen niet automatisch worden gesloten na deze tijd, deze moeten handmatig worden gesloten STR_CONFIG_SETTING_HOVER_DELAY :Knopinfo weergeven: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Vertraging voordat knopinfo worden weergegeven wanneer je de muis boven een besturingselement houdt. Wanneer de waarde 0 is, wordt knopinfo aan de rechtermuisknop gebonden. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Vertraging voordat knopinfo worden weergegeven wanneer je de muis boven een besturingselement houdt. Wanneer de waarde 0 is, wordt knopinfo aan de rechtermuisknop gebonden STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Muis stilhouden gedurende {COMMA} milliseconde{P 0 "" n} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Rechtsklik @@ -1541,8 +1541,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Dikte van de li STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Breedte van de lijnen in de grafiek. Een dunne lijn is preciezer leesbaar, een dikke lijn is makkelijker te zien en kleuren zijn makkelijker om te onderscheiden STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Naam van NewGRF weergeven in venster voor voertuigen bouwen: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Voeg een regel toe aan het venster voor voertuigen bouwen die aangeeft uit welke NewGRF het geselecteerde voertuig komt. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mogelijke lading van voertuigen weergeven in lijstvensters {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Voeg een regel toe aan het venster voor voertuigen bouwen die aangeeft uit welke NewGRF het geselecteerde voertuig komt +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mogelijke lading van voertuigen weergeven in lijstvensters: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Wanneer ingeschakeld, verschijnt de mogelijke lading van het voertuig erboven in voertuiglijsten STR_CONFIG_SETTING_LANDSCAPE :Landschap: {STRING} @@ -1567,7 +1567,7 @@ STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sneeuwhoogte: { STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Kies op welke hoogte de sneeuw begint in subarctisch landschap. Sneeuw heeft ook invloed op het ontstaan van industrieën en op de vereisten voor stadsgroei. Kan alleen worden aangepast in de scenariobewerker of wordt berekend met behulp van 'sneeuwoppervlak' STR_CONFIG_SETTING_SNOW_COVERAGE :Sneeuwoppervlak: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Kies de hoeveelheid sneeuw in het subarctische landschap. Sneeuw is ook van invloed op de industrieën en de groei van steden. Wordt alleen gebruikt tijdens het maken van de kaart. Land op zeeniveau of aan de kust krijgt nooit sneeuw. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Kies de hoeveelheid sneeuw in het subarctische landschap. Sneeuw is ook van invloed op de industrieën en de groei van steden. Wordt alleen gebruikt tijdens het maken van de kaart. Land op zeeniveau of aan de kust krijgt nooit sneeuw STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Woestijnoppervlak: {STRING} @@ -1575,7 +1575,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Kies de hoeveel STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Ruwheid van het terrein: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Kies vorm en aantal heuvels. Gladde landschappen hebben minder en bredere heuvels. Ruwe landschappen hebben meer, maar kleinere heuvels. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Kies vorm en aantal heuvels. Gladde landschappen hebben minder en bredere heuvels. Ruwe landschappen hebben meer, maar kleinere heuvels ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Erg glad STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Glad @@ -1583,7 +1583,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Ruig STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Erg ruig STR_CONFIG_SETTING_VARIETY :Variëteit distributie: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Kies of de kaart zowel bergachtige als vlakke gebieden bevat. Hoe groter de variatie, hoe meer verschillen in hoogte tussen bergachtige en vlakke gebieden. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Kies of de kaart zowel bergachtige als vlakke gebieden bevat. Hoe groter de variatie, hoe meer verschillen in hoogte tussen bergachtige en vlakke gebieden STR_CONFIG_SETTING_RIVER_AMOUNT :Hoeveelheid rivieren: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Selecteer hoeveel rivieren er gegenereerd worden @@ -1754,7 +1754,7 @@ STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatisch sei STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Seinen automatisch verwijderen tijdens spooraanleg als deze in de weg staan. Dit kan botsingen veroorzaken. STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Limiet verhoogde spelsnelheid: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Beperkt de snelheid van het spel wanneer de spelsnelheid is verhoogt. 0 = geen limiet (alleen beperkt door de computer zelf). Waarden onder 100% vertragen het spel. De hoogste waarde hangt af van de specifcaties van de computer en kan afhankelijk van het spel variëren. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Beperkt de snelheid van het spel wanneer snel vooruit is ingeschakeld. 0 = geen limiet (alleen beperkt door de computer zelf). Waarden onder 100% vertragen het spel. De hoogste waarde hangt af van de specifcaties van de computer en kan afhankelijk van het spel variëren STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normale spelsnelheid ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Geen limiet (alleen beperkt door de computer zelf) @@ -1818,11 +1818,11 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Computerspelers STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Aantal opcodes voordat scripts worden gestopt: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximumaantal berekeningsstappen die een script kan maken in een beurt STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Max. geheugengebruik per script: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :De hoeveelheid geheugen die een script mag gebruiken voordat het geforceerd wordt beëindigd. Voor grote kaarten moet deze waarde misschien verhoogd worden. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :De hoeveelheid geheugen die een script mag gebruiken voordat het geforceerd wordt beëindigd. Voor grote kaarten moet deze waarde misschien verhoogd worden STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Onderhoudstermijnen in procenten: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Als deze optie is ingeschakeld, proberen voertuigen in onderhoud te gaan als de betrouwbaarheid met een bepaald percentage van de maximale betrouwbaarheid is gezakt.{}{}Als bijvoorbeeld de maximale betrouwbaarheid 90% is en de onderhoudstermijn is 20%, dan probeert het voertuig in onderhoud te gaan als de betrouwbaarheid tot 72% daalt. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Als deze optie is ingeschakeld, proberen voertuigen in onderhoud te gaan als de betrouwbaarheid met een bepaald percentage van de maximale betrouwbaarheid is gezakt.{}{}Als bijvoorbeeld de maximale betrouwbaarheid 90% is en de onderhoudstermijn is 20%, dan probeert het voertuig in onderhoud te gaan als de betrouwbaarheid tot 72% daalt STR_CONFIG_SETTING_SERVINT_TRAINS :Standaardonderhoudstermijn voor treinen: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Standaardonderhoudstermijn instellen voor nieuwe treinen als er geen expliciete onderhoudstermijn is ingesteld voor het voertuig @@ -1840,7 +1840,7 @@ STR_CONFIG_SETTING_NOSERVICE :Onderhoud uitsc STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Als deze optie is ingeschakeld worden voertuigen niet onderhouden als ze niet kapot kunnen gaan. STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Verminderde laadsnelheid voor treinen langer dan het station: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Indien ingeschakeld worden treinen die te lang zijn voor het station langzamer geladen dan treinen die in het station passen. Deze instelling is niet van invloed op het zoeken van de route. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Indien ingeschakeld worden treinen die te lang zijn voor het station langzamer geladen dan treinen die in het station passen. Deze instelling is niet van invloed op het zoeken van de route STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Snelheidslimieten voor wagons inschakelen: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Wanneer ingeschakeld, ook gebruik maken van snelheidsbeperkingen van wagons voor het bepalen van de maximale snelheid van een trein @@ -1905,13 +1905,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Jaar dat de kra STR_CONFIG_SETTING_STARTING_YEAR :Startjaar: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Eindjaar voor score: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Jaar dat het spel eindigt ten behoeve van de score. Aan het einde van dit jaar wordt de score van het bedrijf vastgelegd en verschijnt het venster met topscores. De spelers kunnen echter doorgaan met spelen.{}Als dit voor het startjaar ligt, verschijnt het venster met topscores niet. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Jaar dat het spel eindigt ten behoeve van de score. Aan het einde van dit jaar wordt de score van het bedrijf vastgelegd en verschijnt het venster met topscores. Je kunt echter doorgaan met spelen.{}Als deze waarde eerder is dan het startjaar, verschijnt het venster met topscores niet STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nooit STR_CONFIG_SETTING_ECONOMY_TYPE :Type economie: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Bij gelijkmatige economie zijn er vaker wijzigingen in productie, die in kleinere stappen verlopen. Bij vaste economie zijn er geen wijzigingen in productie en sluiten bedrijven niet. Deze instelling werkt misschien niet als de soorten industrie worden geleverd in een NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Bij gelijkmatige economie zijn er vaker wijzigingen in productie die in kleinere stappen verlopen. Bij vaste economie zijn er geen wijzigingen in productie en sluiten bedrijven niet. Deze instelling werkt misschien niet als de soorten industrie worden geleverd in een NewGRF ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Origineel STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Gelijkmatig @@ -1966,7 +1966,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Toestaan STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Toestaan, eigen wegpatroon STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Genereren van vracht in steden: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Hoeveel vracht wordt geproduceerd door huizen in steden, in relatie tot de totale bevolking van de stad.{}Kwadratische groei: een stad die twee keer zo groot is, genereert vier keer zo veel passagiers.{}Lineaire groei: een stad die twee keer zo groot is, genereert twee keer zo veel passagiers. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Hoeveel vracht wordt geproduceerd door huizen in steden, in relatie tot de totale bevolking van de stad.{}Kwadratische groei: een stad die twee keer zo groot is, genereert vier keer zo veel passagiers.{}Lineaire groei: een stad die twee keer zo groot is, genereert twee keer zo veel passagiers ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kwadratisch (origineel) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineair @@ -2007,7 +2007,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Hoogste resolutie die sprites mogen gebruiken: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Beperk de maximale resolutie die voor sprites wordt gebruikt. Door deze beperking worden geen grafische elementen in hoge resolutie gebruikt, ook niet als ze beschikbaar zijn. Zo kan de weergave van het spel consistent blijven wanneer je verschillende GRF-bestanden gebruikt met en zonder grafische elementen in hoge resolutie. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Beperk de maximale resolutie die voor sprites wordt gebruikt. Door deze beperking worden geen grafische elementen in hoge resolutie gebruikt, ook niet als ze beschikbaar zijn. Zo kan de weergave van het spel consistent blijven wanneer je verschillende GRF-bestanden gebruikt met en zonder grafische elementen in hoge resolutie ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2057,7 +2057,7 @@ STR_CONFIG_SETTING_DEMAND_SIZE :Hoeveelheid ter STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Door dit op minder dan 100% te zetten lijkt de symmetrische verdeling meer op de asymmetrische verdeling. Minder vracht zal geforceerd worden om zich terug te sturen als er een bepaalde hoeveelheid wordt verzonden naar een station. Op 0% van de symmetrische verdeling gedraagt deze zich als de asymmetrische verdeling. STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Verzadiging van korte routes voordat routes met hoge capaciteit worden gebruikt: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Vaak zijn er meerdere routes mogelijk tussen twee stations. De vrachtdistributie verzadigt eerst de kortste route, gebruikt dan de op één na kortste route tot die verzadigd is enzovoort. Verzadiging wordt bepaald door een schatting van de capaciteit en het geplande gebruik. Wanneer alle routes verzadigd zijn, maar er is meer vraag, raken alle wegen overbelast, die met hoge capaciteit als eerste. In veel gevallen schat het algoritme helaas de capaciteit niet nauwkeurig in. Met deze instelling kun je aangeven tot welk percentage een korter pad moet worden verzadigd voordat de eerstvolgende, langere route wordt gekozen. Stel dit in op minder dan 100% om overvolle stations in geval van overschatte capaciteit te voorkomen. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Vaak zijn er meerdere routes mogelijk tussen twee stations. De vrachtdistributie verzadigt eerst de kortste route, gebruikt dan de op één na kortste route tot die verzadigd is enzovoort. Verzadiging wordt bepaald door een schatting van de capaciteit en het geplande gebruik. Wanneer alle routes verzadigd zijn, maar er is meer vraag, raken alle wegen overbelast, die met hoge capaciteit als eerste. In veel gevallen schat het algoritme helaas de capaciteit niet nauwkeurig in. Met deze instelling kun je aangeven tot welk percentage een korter pad moet worden verzadigd voordat de eerstvolgende, langere route wordt gekozen. Stel dit in op minder dan 100% om overvolle stations in geval van overschatte capaciteit te voorkomen STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Snelheidseenheden (land): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Snelheidseenheden (nautisch): {STRING} @@ -3202,7 +3202,7 @@ STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Aantal g STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafische framesnelheid: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Aantal videoframes die weergegeven worden per seconde. STR_FRAMERATE_SPEED_FACTOR :{BLACK}Huidige spelsnelheidsfactor: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hoe snel het spel momenteel draait, vergeleken met de verwachte snelheid bij een normale simulatiesnelheid. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hoe snel het spel momenteel verloopt, vergeleken met de verwachte snelheid bij een normale simulatiesnelheid STR_FRAMERATE_CURRENT :{WHITE}Huidig STR_FRAMERATE_AVERAGE :{WHITE}Gemiddeld STR_FRAMERATE_MEMORYUSE :{WHITE}Geheugen @@ -3731,7 +3731,7 @@ STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Algemeen STR_STORY_BOOK_SPECTATOR :Algemeen verhaal STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Pagina {NUM} -STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Spring naar een bepaalde pagina door deze te selecteren in deze keuzelijst. +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Spring naar een bepaalde pagina door deze te selecteren in deze keuzelijst STR_STORY_BOOK_PREV_PAGE :{BLACK}Vorige STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Ga naar de vorige pagina STR_STORY_BOOK_NEXT_PAGE :{BLACK}Volgende @@ -4031,7 +4031,7 @@ STR_GROUP_CREATE_TOOLTIP :{BLACK}Klik om STR_GROUP_DELETE_TOOLTIP :{BLACK}Verwijder de geselecteerde groep STR_GROUP_RENAME_TOOLTIP :{BLACK}Hiermee hernoem je de geselecteerde groep STR_GROUP_LIVERY_TOOLTIP :{BLACK}Wijzig het uiterlijk van de geselecteerde groep -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klik om deze groep te beschermen tegen globaal automatisch vervangen. Met Ctrl+klik geldt dit ook voor subgroepen. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klik om deze groep te beschermen tegen globaal automatisch vervangen. Met Ctrl+klik geldt dit ook voor subgroepen STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Verwijder groep STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Weet je zeker dat je deze groep en de eventuele subgroepen wilt verwijderen? diff --git a/src/lang/korean.txt b/src/lang/korean.txt index b9712a6911..dc39605707 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1012,6 +1012,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :인도 루피 STR_GAME_OPTIONS_CURRENCY_IDR :인도네시아 루피아 STR_GAME_OPTIONS_CURRENCY_MYR :말레이시아 링깃 STR_GAME_OPTIONS_CURRENCY_LVL :라트비아 라츠 +STR_GAME_OPTIONS_CURRENCY_PTE :포르투갈 이스쿠두 STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}자동 저장 STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}게임 자동 저장 간격을 선택 @@ -1054,9 +1055,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}크기 STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}인터페이스 크기를 슬라이더로 조절하려면 이 박스에 체크하세요 STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}원본 그래픽 글꼴 사용 -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}기존 영어의 고정폭 글꼴을 사용하는 것을 선호하는 경우 이 박스에 체크하세요. 한국어 사용자는 체크하면 안 됩니다. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}기존 영어의 고정폭 글꼴을 사용하는 것을 선호하는 경우 이 박스에 체크하세요. 한국어 사용자는 체크하면 안 됩니다 STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}글씨체 테두리를 부드럽게 -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}크기 조절이 가능한 글씨체에 안티 에일리어싱을 적용하여 테두리를 부드럽게 표현하려면 이 박스에 체크하세요. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}크기 조절이 가능한 글씨체에 안티 에일리어싱을 적용하여 테두리를 부드럽게 표현하려면 이 박스에 체크하세요 STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1275,7 +1276,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :돈 무제한: STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :돈을 무제한으로 만들고 회사가 파산하지 않게 만듭니다 STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :최대 초기 대출금: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :(인플레이션 효과를 적용하지 않고) 한 회사가 최대한 빌릴 수 있는 대출금의 양을 조절할 수 있습니다. 이 설정을 "대출 불가"로 설정하면, 게임 스크립트가 돈을 지급하거나 "돈 무한 모드" 설정을 사용하지 않는 한, 돈을 사용할 수 없습니다. +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :(인플레이션 효과를 적용하지 않고) 한 회사가 최대한 빌릴 수 있는 대출금의 양을 조절할 수 있습니다. 이 설정을 "대출 불가"로 설정하면, 게임 스크립트가 돈을 지급하거나 "돈 무한 모드" 설정을 사용하지 않는 한, 돈을 사용할 수 없습니다 STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :대출 불가 @@ -1359,7 +1360,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :경사도 설 STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :자동차/전차에 적용시킬 경사도를 설정합니다. 값이 높을수록 차량이 언덕을 오를 때 더 힘이 듭니다. STR_CONFIG_SETTING_FORBID_90_DEG :열차의 90도 회전을 금지함: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :─ 모양의 수평 선로와 │ 모양의 수직 선로가 바로 이어져 만날 때 90도 회전이 발생합니다. 이 설정을 켜면, 열차가 칸 가장자리를 통과할 때 90도로 회전할 수 있도록 허용합니다. 이 설정은 선박의 회전 반경에도 적용됩니다. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :─ 모양의 수평 선로와 │ 모양의 수직 선로가 바로 이어져 만날 때 90도 회전이 발생합니다. 이 설정을 켜면, 열차가 칸 가장자리를 통과할 때 90도로 회전할 수 있도록 허용합니다. 이 설정은 선박의 회전 반경에도 적용됩니다 STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :역이 같은 방향으로 붙어있지 않아도 같은 이름의 역 짓기 허용: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :이미 존재하는 역을 직접 건드리지 않고도 역의 일부분을 새로 추가/확장하는 것을 허용합니다. 인접한 칸에 기존과 다른 새로운 역을 놓을 때에는 CTRL+클릭해야 합니다 @@ -1471,7 +1472,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :시작시 회 STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :새 회사에서 사용할 색상을 선택합니다 STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :시작시 회사 부 색상: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :부 색상을 지원하는 NewGRF를 사용할 경우, 새 회사에서 사용할 부 색상을 선택합니다. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :부 색상을 지원하는 NewGRF를 사용할 경우, 새 회사에서 사용할 부 색상을 선택합니다 STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :옛날 공항을 사라지지 않고 계속 만들 수 있게 함: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :이 설정을 켜면, 소형 공항을 포함한 모든 공항 종류를 도입 이후에 계속 사용할 수 있게 됩니다. @@ -1495,22 +1496,22 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :옛날 차량 STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :이 설정을 켜면, 오래된 차량 모델을 포함하여 모든 차량 모델을 도입 이후에 계속 사용할 수 있게 됩니다. STR_CONFIG_SETTING_TIMEKEEPING_UNITS :시간 단위: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :게임에서 사용할 시간 표시 단위를 선택합니다. 나중에 변경할 수 없습니다.{}{}달력 기반은 1년 12개월, 매월 28~31일로 구성된 고전적인 OpenTTD 환경입니다.{}{}벽시계 기반은 화물 생산 및 재정이 1분 단위로 대신 계산됩니다. 1분은 달력 기반 모드에서 한 달, 즉 30일 정도 걸리는 시간으로, 12분 간격으로 묶어서 1년을 구성합니다.{}{}두 단위 모두, 시간 표시 단위와 상관없이 차량, 건물 및 기타 기반 시설 도입 날짜 등에는 기존의 달력 시스템을 별도로 사용합니다. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :게임에서 사용할 시간 표시 단위를 선택합니다. 나중에 변경할 수 없습니다.{}{}달력 기반은 1년 12개월, 매월 28~31일로 구성된 고전적인 OpenTTD 환경입니다.{}{}벽시계 기반은 화물 생산 및 재정이 1분 단위로 대신 계산됩니다. 1분은 달력 기반 모드에서 한 달, 즉 30일 정도 걸리는 시간으로, 12분 간격으로 묶어서 1년을 구성합니다.{}{}두 단위 모두, 시간 표시 단위와 상관없이 차량, 건물 및 기타 기반 시설 도입 날짜 등에는 기존의 달력 시스템을 별도로 사용합니다 ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :달력 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :벽시계 STR_CONFIG_SETTING_MINUTES_PER_YEAR :1년의 길이: {STRING}{ORANGE}분 -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :달력의 1년을 몇 분으로 할 지 선택합니다. 기본값은 12분입니다. 달력 시간이 변하는 것을 막으려면 0으로 설정하세요. 이 설정은 게임의 경제 시뮬레이션에는 영향을 미치지 않고, 벽시계 시간 설정을 사용할 때만 이용 가능합니다. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :달력의 1년을 몇 분으로 할 지 선택합니다. 기본값은 12분입니다. 달력 시간이 변하는 것을 막으려면 0으로 설정하세요. 이 설정은 게임의 경제 시뮬레이션에는 영향을 미치지 않고, 벽시계 시간 설정을 사용할 때만 이용 가능합니다 STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :(달력 시간 정지됨) 0 STR_CONFIG_SETTING_TOWN_CARGO_SCALE :도시 화물 생성 조정: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :도시의 화물 생산량을 이 백분율 값만큼 조정합니다. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :도시의 화물 생산량을 이 백분율 값만큼 조정합니다 STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :산업시설 화물 생성 조정: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :산업시설의 생산량을 이 백분율 값만큼 조정합니다. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :산업시설의 생산량을 이 백분율 값만큼 조정합니다 STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :차량이 낡으면 차량을 자동으로 교체: {STRING} @@ -1529,7 +1530,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :오류 메시 STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :오류 메시지를 표시할 시간을 설정합니다. 일부 (중요한) 오류 메시지는 이 시간이 지나도 자동으로 사라지지 않고 수동으로 꺼야할 수도 있음을 알아두십시오. STR_CONFIG_SETTING_HOVER_DELAY :도움말 보이기: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :마우스를 올려놓았을 때 도움말이 뜨는데 걸리는 시간을 설정합니다. 마우스 오른쪽 클릭으로 바로 뜨도록 할 수도 있습니다. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :마우스를 올려놓았을 때 도움말이 뜨는데 걸리는 시간을 설정합니다. 마우스 오른쪽 클릭으로 바로 뜨도록 할 수도 있습니다 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :마우스를 {COMMA}밀리초 동안 올려놓기 ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :마우스 오른쪽 클릭 @@ -1541,7 +1542,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :그래프 선 STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :그래프의 선 두께를 설정합니다. 얇으면 자세히 볼 수 있고, 두꺼우면 눈에 확 들어오며 색상을 분간하기가 편해집니다. STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :차량 구입 창에 NewGRF 이름 표시: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :차량 구입 창 맨 아래 줄에, 이 차량이 어떤 NewGRF에서 추가되는 지 해당 NewGRF의 이름을 표시해줍니다. +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :차량 구입 창 맨 아래 줄에, 이 차량이 어떤 NewGRF에서 추가되는 지 해당 NewGRF의 이름을 표시해줍니다 STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :차량 목록 창에서 차량이 실을 수 있는 화물 표시: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :이 설정을 켜면, 차량 목록 상단에 차량이 실을 수 있는 화물을 표시합니다 @@ -1561,13 +1562,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :산업시설 STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :게임을 플레이하는 동안 얼마나 많은 산업시설이 생성되고 유지되어야 할 지를 설정합니다. STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :석유 관련 산업시설의 최대 건설 범위: 지도 맨 끝에서부터 {STRING} 이내 -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :정유 공장과 유전이 맵 가장자리에서 얼마나 멀리 떨어진 곳까지 건설될 수 있는지를 나타냅니다. 섬 맵에서는 이 설정을 이용해서 해당 산업시설이 해안에 가까이 있도록 조정할 수 있습니다. 256칸보다 큰 맵의 경우에는 이 값은 더 크게 조정됩니다. +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :정유 공장과 유전이 맵 가장자리에서 얼마나 멀리 떨어진 곳까지 건설될 수 있는지를 나타냅니다. 섬 맵에서는 이 설정을 이용해서 해당 산업시설이 해안에 가까이 있도록 조정할 수 있습니다. 256칸보다 큰 맵의 경우에는 이 값은 더 크게 조정됩니다 STR_CONFIG_SETTING_SNOWLINE_HEIGHT :설선 고도: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :아한대 기후의 설선 고도를 선택합니다. 눈은 산업시설의 생성과 도시 성장에 영향을 미칩니다. 시나리오 에디터에서 수정할 수 있고 설정하지 않은 경우 "눈 비율" 설정을 따릅니다. STR_CONFIG_SETTING_SNOW_COVERAGE :눈 비율: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :아한대 기후에서 눈 지역의 양을 대략적으로 선택합니다. 눈은 산업시설 생성과 도시 성장 요구 조건에도 영향을 미칩니다. 지도를 생성할 때에만 사용하는 설정입니다. 해수면 바로 위에 있는 땅은 무조건 눈이 없을 것입니다. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :아한대 기후에서 눈 지역의 양을 대략적으로 선택합니다. 눈은 산업시설 생성과 도시 성장 요구 조건에도 영향을 미칩니다. 지도를 생성할 때에만 사용하는 설정입니다. 해수면 바로 위에 있는 땅은 무조건 눈이 없을 것입니다 STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :사막 비율: {STRING} @@ -1575,7 +1576,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :아열대 기 STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :지형의 거친 정도: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :언덕의 모양과 빈도 수를 선택합니다. 평탄한 지형은 개수가 적고 넓게 퍼진 언덕을 만들고, 거친 지형은 작은 언덕이 많이 만듭니다. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :언덕의 모양과 빈도 수를 선택합니다. 평탄한 지형은 개수가 적고 넓게 퍼진 언덕을 만들고, 거친 지형은 작은 언덕이 많이 만듭니다 ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :매우 부드럽게 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :부드럽게 @@ -1583,7 +1584,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :거칠게 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :매우 거칠게 STR_CONFIG_SETTING_VARIETY :산세 험준도: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :지도가 산지와 평지를 모두 갖도록 만들 것인 지를 결정합니다. 더 높은 값을 사용할 수록, 산지와 평지 사이의 고도 차이가 더 많아집니다. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :지도에 산지와 평지를 모두 있도록 만들지 결정합니다. 더 높은 값을 사용할수록, 산지와 평지 사이의 고도 차이가 더 많아집니다 STR_CONFIG_SETTING_RIVER_AMOUNT :강의 양: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :강을 얼마나 만들지 선택하세요 @@ -1630,7 +1631,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :어두운 녹 STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :보라색 STR_CONFIG_SETTING_LINKGRAPH_COLOURS :화물 흐름 오버레이 색상: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :화물 흐름 오버레이에 사용할 색상을 설정합니다. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :화물 흐름 오버레이에 사용할 색상을 설정합니다 ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :녹색 & 적색 (기본값) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :녹색 & 청색 @@ -1751,10 +1752,10 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :건설 도구 STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :다리, 터널 등의 건설 도구를 사용 후에도 계속 열어둔 채로 놔둡니다. STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :선로 건설 중 신호기 자동 제거: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :신호기가 이미 있는 선로에 선로를 추가로 설치하면 신호기를 자동으로 제거합니다. 잘못 사용하면 잠재적으로 열차가 충돌할 수 있다는 점을 명심하세요. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :신호기가 이미 있는 선로에 선로를 추가로 설치하면 신호기를 자동으로 제거합니다. 잘못 사용하면 잠재적으로 열차가 충돌할 수 있다는 점을 명심하세요 STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :빨리 감기 속도 제한: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :빨리 감기를 했을 때 게임이 진행되는 속도를 제한할 수 있습니다. 0으로 설정하면 컴퓨터가 허용하는 만큼 빠르게 돌립니다. 100% 미만의 값으로 설정하면 게임이 느리게 돌아갑니다. 빨리 감기 속도의 최댓값은 컴퓨터의 성능에 따라 결정되며 맵에 따라 다를 수 있습니다. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :빨리 감기를 했을 때 게임이 진행되는 속도를 제한할 수 있습니다. 0으로 설정하면 컴퓨터가 허용하는 만큼 빠르게 돌립니다. 100% 미만의 값으로 설정하면 게임이 느리게 돌아갑니다. 빨리 감기 속도의 최댓값은 컴퓨터의 성능에 따라 결정되며 맵에 따라 다를 수 있습니다 STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :보통 게임 속도의 {NUM}% ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :제한 없음 (컴퓨터가 허용하는 만큼 빠르게) @@ -1818,11 +1819,11 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :멀티 플레 STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :게임 스크립트가 중지되기 직전에 계산할 수 있는 최대 횟수: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :게임 스크립트가 한 단계에서 계산할 수 있는 최대 계산 횟수를 설정합니다. STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :스크립트당 최대 메모리 사용량: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :스크립트 하나가 강제 종료되기 전까지 사용할 수 있는 메모리의 양입니다. 크기가 큰 맵에서는 값을 크게 설정해야할 수도 있습니다. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :스크립트 하나가 강제 종료되기 전까지 사용할 수 있는 메모리의 양입니다. 크기가 큰 맵에서는 값을 크게 설정해야할 수도 있습니다 STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :신뢰도에 따른 점검 설정: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :이 설정을 켜면, 차량의 신뢰도가 최대 신뢰도에 비해 일정 비율만큼 하락했을 때 점검을 하러 가려고 합니다.{}{}예를 들어, 차량의 최대 신뢰도가 90%이고 점검 주기를 20%로 설정하면, 그 차량은 신뢰도가 72%가 되었을 때 점검을 하러 가게 됩니다. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :이 설정을 켜면, 차량의 신뢰도가 최대 신뢰도에 비해 일정 비율만큼 하락했을 때 점검을 하러 가려고 합니다.{}{}예를 들어, 차량의 최대 신뢰도가 90%이고 점검 주기를 20%로 설정하면, 그 차량은 신뢰도가 72%가 되었을 때 점검을 하러 가게 됩니다 STR_CONFIG_SETTING_SERVINT_TRAINS :열차에 대한 기본 점검 기준: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :열차에 따로 점검 기간이 설정되어있지 않은 경우에 사용할 기본 점검 기간을 설정합니다. @@ -1840,7 +1841,7 @@ STR_CONFIG_SETTING_NOSERVICE :차량 고장 STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :이 설정을 켜면, 차량이 고장나지 않도록 설정되어 있는 경우 차량이 자동으로 점검을 하러 가지 않습니다 STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :역 길이보다 열차 길이가 긴 경우 적재 속도 감소: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :이 설정을 켜면, 역 길이보다 길이가 긴 열차는 역 길이에 맞는 열차보다 적재/하차 속도가 느려지게 됩니다. 이 설정은 경로 탐색에는 영향을 미치지 않습니다. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :이 설정을 켜면, 역 길이보다 길이가 긴 열차는 역 길이에 맞는 열차보다 적재/하차 속도가 느려지게 됩니다. 이 설정은 경로 탐색에는 영향을 미치지 않습니다 STR_CONFIG_SETTING_WAGONSPEEDLIMITS :화물차 속력 제한 적용: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :이 설정을 켜면, 화물차의 속력 제한값에 따라 열차의 최대 속력을 제한합니다. @@ -1905,13 +1906,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :신문이 컬 STR_CONFIG_SETTING_STARTING_YEAR :시작 연도: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :게임 종료 연도: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :점수를 기록할 게임 종료 연도를 설정합니다. 이 연도가 지나면, 회사의 점수가 고득점 순위표에 기록되어 표시됩니다. 하지만 플레이어는 계속해서 게임을 진행할 수 있습니다.{}이 값이 시작 연도보다 이전으로 설정되어 있다면, 고득점 순위표는 나타나지 않습니다. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :점수를 기록할 게임 종료 연도를 설정합니다. 이 연도가 지나면, 회사의 점수가 고득점 순위표에 기록되어 표시됩니다. 하지만 플레이어는 계속해서 게임을 진행할 수 있습니다.{}이 값이 시작 연도보다 이전으로 설정되어 있다면, 고득점 순위표는 나타나지 않습니다 STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :안 함 STR_CONFIG_SETTING_ECONOMY_TYPE :경제 변화: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :부드러운 경제에서는 생산량이 소량으로 자주 변하게 됩니다. 멈춘 경제에서는 생산량이 변하지 않고 산업시설의 폐쇄를 막습니다. 이 설정은 NewGRF로 추가한 산업시설에는 적용되지 않을 수 있습니다. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :부드러운 경제에서는 생산량이 소량으로 자주 변하게 됩니다. 멈춘 경제에서는 생산량이 변하지 않고 산업시설의 폐쇄를 막습니다. 이 설정은 NewGRF로 추가한 산업시설에는 적용되지 않을 수 있습니다 ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :기본 STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :부드러움 @@ -1966,7 +1967,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :허용 STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :허용, 도로 모양 선택 가능 STR_CONFIG_SETTING_TOWN_CARGOGENMODE :도시 화물 생성: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :도시의 전반적인 인구에 따라, 도시가 얼마나 많은 화물을 생산하는 지를 설정합니다.{}제곱 성장: 도시의 규모가 2배 커지면 승객을 4배 더 생산합니다.{}선형 성장: 도시의 규모가 2배 커지면 승객을 2배 더 생산합니다. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :도시의 전반적인 인구에 따라, 도시가 얼마나 많은 화물을 생산하는 지를 설정합니다.{}제곱 성장: 도시의 규모가 2배 커지면 승객을 4배 더 생산합니다.{}선형 성장: 도시의 규모가 2배 커지면 승객을 2배 더 생산합니다 ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :제곱 (기본) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :선형 @@ -2007,7 +2008,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :최고 해상도 그래픽 스프라이트: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :그래픽 스프라이트에 사용할 최고 해상도를 제한할 수 있습니다. 그래픽 스프라이트 해상도를 제한하면 고해상도 그래픽을 사용할 수 있어도 이를 사용하지 않을 수 있습니다. 이 설정을 사용하면 고해상도 그래픽을 지원하지 않는 GRF 파일을 섞어서 사용할 때 게임의 모습을 일관성있게 만들 수 있습니다. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :그래픽 스프라이트에 사용할 최고 해상도를 제한할 수 있습니다. 그래픽 스프라이트 해상도를 제한하면 고해상도 그래픽을 사용할 수 있어도 이를 사용하지 않을 수 있습니다. 이 설정을 사용하면 고해상도 그래픽을 지원하지 않는 GRF 파일을 섞어서 사용할 때 게임의 모습을 일관성있게 만들 수 있습니다 ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2031,33 +2032,33 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :초기 대도 STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :게임을 시작했을 때 일반 도시에 대한 대도시의 평균 크기를 설정합니다 STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :분배 그래프를 매 {STRING}마다 업데이트 -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :각 연결 그래프의 하위 시퀀스 재계산 사이의 시간입니다. 각 재계산은 그래프의 한 구성 요소에 대한 계획을 계산합니다. 즉, 이 설정을 X로 설정한다고 해서 전체 그래프를 X초마다 업데이트한다는 뜻은 아닙니다. 일부 구성 요소만 X초마다 업데이트됩니다. 이 값을 더 짧게 설정할 수록 계산하는데 더 많은 CPU 계산 시간이 필요합니다. 값을 더 길게 설정하면 화물 분배가 새 경로로 이뤄지기까지 더 오랜 시간이 걸리게 됩니다. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :각 연결 그래프의 하위 시퀀스 재계산 사이의 시간입니다. 각 재계산은 그래프의 한 구성 요소에 대한 계획을 계산합니다. 즉, 이 설정을 X로 설정한다고 해서 전체 그래프를 X초마다 업데이트한다는 뜻은 아닙니다. 일부 구성 요소만 X초마다 업데이트됩니다. 이 값을 더 짧게 설정할 수록 계산하는데 더 많은 CPU 계산 시간이 필요합니다. 값을 더 길게 설정하면 화물 분배가 새 경로로 이뤄지기까지 더 오랜 시간이 걸리게 됩니다 STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :분배 그래프의 재계산을 위해 {STRING} 사용 -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :각 연결 그래프의 구성 요소를 재계산하는데 걸리는 시간입니다. 재계산이 시작되면, 이 시간(초) 동안 실행할 수 있는 스레드가 생성됩니다. 이 값을 더 짧게 설정할수록 스레드가 완료되어야 할 때 완료되지 못할 가능성이 높아집니다. 그러면 이를 완료하기 전까지는 게임이 멈추게 됩니다. 값을 더 길게 설정하면 경로가 변경되었을 때 분배가 업데이트되는 데 더 오래 걸립니다. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :각 연결 그래프의 구성 요소를 재계산하는데 걸리는 시간입니다. 재계산이 시작되면, 이 시간(초) 동안 실행할 수 있는 스레드가 생성됩니다. 이 값을 더 짧게 설정할수록 스레드가 완료되어야 할 때 완료되지 못할 가능성이 높아집니다. 그러면 이를 완료하기 전까지는 게임이 멈추게 됩니다. 값을 더 길게 설정하면 경로가 변경되었을 때 분배가 업데이트되는 데 더 오래 걸립니다 STR_CONFIG_SETTING_DISTRIBUTION_PAX :승객에 대한 분배 형식: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"대칭"은 A역에서 B역으로 가려는 승객의 수가 B에서 A로 가려는 승객의 수와 비슷하다는 뜻입니다. "비대칭"은 승객이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 승객 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"대칭"은 A역에서 B역으로 가려는 승객의 수가 B에서 A로 가려는 승객의 수와 비슷하다는 뜻입니다. "비대칭"은 승객이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 승객 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다 STR_CONFIG_SETTING_DISTRIBUTION_MAIL :우편에 대한 분배 형식: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"대칭"은 A역에서 B역으로 가려는 우편물의 수가 B에서 A로 가려는 우편물의 수와 비슷하다는 뜻입니다. "비대칭"은 우편물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 우편물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"대칭"은 A역에서 B역으로 가려는 우편물의 수가 B에서 A로 가려는 우편물의 수와 비슷하다는 뜻입니다. "비대칭"은 우편물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 우편물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다 STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :귀금속 화물에 대한 분배 형식: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :귀금속 화물은 온대 기후의 귀금속, 아열대 기후의 다이아몬드 또는 아한대 기후의 금을 말합니다. NewGRF을 사용하면 달라질 수 있습니다. "대칭"은 A역에서 B역으로 가려는 화물의 수가 B에서 A로 가려는 화물의 수와 비슷하다는 뜻입니다. "비대칭"은 화물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 화물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. 아한대나 아열대 기후에서는 대칭으로 설정하면 은행이 금을 받기만 하기 때문에 비대칭이나 수동으로 설정하는 것을 추천합니다. 온대 기후에서는 은행이 귀금속을 원래 은행으로 보내려고 하기 때문에 대칭을 선택해도 됩니다. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :귀금속 화물은 온대 기후의 귀금속, 아열대 기후의 다이아몬드 또는 아한대 기후의 금을 말합니다. NewGRF을 사용하면 달라질 수 있습니다. "대칭"은 A역에서 B역으로 가려는 화물의 수가 B에서 A로 가려는 화물의 수와 비슷하다는 뜻입니다. "비대칭"은 화물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 화물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. 아한대나 아열대 기후에서는 대칭으로 설정하면 은행이 금을 받기만 하기 때문에 비대칭이나 수동으로 설정하는 것을 추천합니다. 온대 기후에서는 은행이 귀금속을 원래 은행으로 보내려고 하기 때문에 대칭을 선택해도 됩니다 STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :다른 화물에 대한 분배 형식: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"비대칭"은 화물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 화물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. 특별한 이유가 없는 한, "비대칭"이나 "수동"으로 설정하십시오. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"비대칭"은 화물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 화물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. 특별한 이유가 없는 한, "비대칭"이나 "수동"으로 설정하십시오 ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :수동 STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :비대칭 STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :대칭 STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :분배 정확도: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :값이 높으면 높을수록 CPU가 연결 상태를 계산하는 시간이 더 오래 걸립니다. 만약 이 시간이 너무 오래 걸리면 게임이 버벅일 것입니다. 하지만, 낮은 값으로 설정하면 분배가 부정확하게 일어나서, 화물이 원하는 곳으로 분배되지 않을 수 있습니다. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :값이 높으면 높을수록 CPU가 연결 상태를 계산하는 시간이 더 오래 걸립니다. 만약 이 시간이 너무 오래 걸리면 게임이 버벅일 것입니다. 하지만, 낮은 값으로 설정하면 분배가 부정확하게 일어나서, 화물이 원하는 곳으로 분배되지 않을 수 있습니다 STR_CONFIG_SETTING_DEMAND_DISTANCE :거리에 따른 수요 효과: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :이 값을 0보다 크게 설정하면, 어떤 화물이 있는 A역과 목적지가 될 수 있는 역 B 사이의 거리는 A에서 B로 가는 화물의 양에 영향을 미치게 됩니다. A역에서 B역이 더 멀리 떨어질 수록 이동하는 화물의 양은 적어질 것입니다. 값이 크면 클 수록 화물은 멀리 이동하지 않고 가까운 역으로 가게 됩니다. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :이 값을 0보다 크게 설정하면, 어떤 화물이 있는 A역과 목적지가 될 수 있는 역 B 사이의 거리는 A에서 B로 가는 화물의 양에 영향을 미치게 됩니다. A역에서 B역이 더 멀리 떨어질 수록 이동하는 화물의 양은 적어질 것입니다. 값이 크면 클 수록 화물은 멀리 이동하지 않고 가까운 역으로 가게 됩니다 STR_CONFIG_SETTING_DEMAND_SIZE :대칭 모드에서 되돌아오는 화물의 양: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :이 값을 100%보다 작게 설정할 수록 대칭 분배는 비대칭 분배와 비슷해집니다. 특정 양의 화물을 역으로 보내면 그보다 더 적은 화물이 강제로 되돌아오게 됩니다. 이 값을 0%로 설정하면 대칭 분배는 비대칭 분배와 똑같습니다. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :이 값을 100%보다 작게 설정할 수록 대칭 분배는 비대칭 분배와 비슷해집니다. 특정 양의 화물을 역으로 보내면 그보다 더 적은 화물이 강제로 되돌아오게 됩니다. 이 값을 0%로 설정하면 대칭 분배는 비대칭 분배와 똑같습니다 STR_CONFIG_SETTING_SHORT_PATH_SATURATION :다음으로 짧은 경로를 사용하기 위한 경로의 포화도: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :종종 두 역 사이에는 여러 가지 경로가 존재할 수 있습니다. 이 경우, 화물 분배 기능은 먼저 가장 짧은 경로로 화물을 보내고, 그 경로가 포화 상태에 이르면 그 다음으로 짧은 경로를 사용하는 식으로 화물을 분배합니다. 포화도는 경로의 수송 능력과 예정 사용량을 추정하여 계산됩니다. 일단 모든 경로가 포화 상태가 되었는데 아직 수요가 남아있다면, 수송 능력이 높은 경로를 사용하면서 모든 경로를 과부하 상태로 만들게 됩니다. 하지만, 이 알고리즘은 수송량을 대부분 정확히 추정하지는 않습니다. 이 설정을 이용해서, 화물 분배 기능이 짧은 경로의 포화 상태가 몇 퍼센트가 되어야 다음으로 짧은 경로에 화물을 분배할 것인지를 지정할 수 있습니다. 과대평가된 수송량의 경우 너무 붐비는 역이 생기지 않도록 하기 위해서는 이 값을 100%보다 작게 설정하십시오. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :종종 두 역 사이에는 여러 가지 경로가 존재할 수 있습니다. 이 경우, 화물 분배 기능은 먼저 가장 짧은 경로로 화물을 보내고, 그 경로가 포화 상태에 이르면 그 다음으로 짧은 경로를 사용하는 식으로 화물을 분배합니다. 포화도는 경로의 수송 능력과 예정 사용량을 추정하여 계산됩니다. 일단 모든 경로가 포화 상태가 되었는데 아직 수요가 남아있다면, 수송 능력이 높은 경로를 사용하면서 모든 경로를 과부하 상태로 만들게 됩니다. 하지만, 이 알고리즘은 수송량을 대부분 정확히 추정하지는 않습니다. 이 설정을 이용해서, 화물 분배 기능이 짧은 경로의 포화 상태가 몇 퍼센트가 되어야 다음으로 짧은 경로에 화물을 분배할 것인지를 지정할 수 있습니다. 과대평가된 수송량의 경우 너무 붐비는 역이 생기지 않도록 하기 위해서는 이 값을 100%보다 작게 설정하십시오 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :속력 단위 (지상): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :속력 단위 (해상): {STRING} @@ -2979,11 +2980,11 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}여러 STR_TREES_RANDOM_TREES_BUTTON :{BLACK}무작위로 나무 심기 STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}전 지역에 걸쳐 무작위로 나무를 심습니다 STR_TREES_MODE_NORMAL_BUTTON :{BLACK}일반 -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}지면을 드래그해서 나무를 하나씩 놓습니다. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}지면을 드래그해서 나무를 하나씩 놓습니다 STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}작은 숲 -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}지면을 드래그해서 작은 숲을 만듭니다. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}지면을 드래그해서 작은 숲을 만듭니다 STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}큰 숲 -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}지면을 드래그해서 큰 숲을 만듭니다. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}지면을 드래그해서 큰 숲을 만듭니다 # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}지형 만들기 @@ -3198,11 +3199,11 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}프레임레이트 STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}시뮬레이션 비율: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}1초에 시뮬레이션하는 게임 틱 수입니다. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}1초에 시뮬레이션하는 게임 틱 수입니다 STR_FRAMERATE_RATE_BLITTER :{BLACK}그래픽 프레임레이트: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}1초에 표현하는 비디오 프레임 수입니다. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}1초에 표현하는 비디오 프레임 수입니다 STR_FRAMERATE_SPEED_FACTOR :{BLACK}현재 게임 속력 계수: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}현재 게임이 일반적인 시뮬레이션 비율 속도에 비해 얼마나 빠르게 구동되고 있는지를 보여줍니다. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}현재 게임이 일반적인 시뮬레이션 비율 속도에 비해 얼마나 빠르게 구동되고 있는지를 보여줍니다 STR_FRAMERATE_CURRENT :{WHITE}현재 STR_FRAMERATE_AVERAGE :{WHITE}평균 STR_FRAMERATE_MEMORYUSE :{WHITE}메모리 @@ -4031,7 +4032,7 @@ STR_GROUP_CREATE_TOOLTIP :{BLACK}클릭 STR_GROUP_DELETE_TOOLTIP :{BLACK}선택한 그룹을 삭제합니다 STR_GROUP_RENAME_TOOLTIP :{BLACK}선택한 그룹의 이름을 바꿉니다 STR_GROUP_LIVERY_TOOLTIP :{BLACK}선택한 그룹의 차량 색상을 변경합니다 -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}클릭하면 전체 자동 교체로부터 이 그룹을 보호합니다. CTRL+클릭하면 하위 그룹도 보호합니다. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}클릭하면 전체 자동 교체로부터 이 그룹을 보호합니다. CTRL+클릭하면 하위 그룹도 보호합니다 STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}그룹 삭제 STR_GROUP_DELETE_QUERY_TEXT :{WHITE}이 그룹과 하위 그룹을 정말 삭제하시겠습니까? diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 6802fa2dd3..80d7668f65 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -188,6 +188,7 @@ STR_COLOUR_GREY :خاکستری STR_COLOUR_WHITE :سفید ###length 17 +STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :همانند اصلی # Units used in OpenTTD @@ -199,6 +200,9 @@ STR_UNITS_POWER_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_POWER_METRIC :{DECIMAL}{NBSP}اسب بخار STR_UNITS_POWER_SI :{DECIMAL}{NBSP}کیلووات +STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t +STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t +STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg STR_UNITS_WEIGHT_SHORT_METRIC :{DECIMAL}{NBSP}تن STR_UNITS_WEIGHT_SHORT_SI :{DECIMAL}{NBSP}کیلوگرم @@ -838,6 +842,14 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}موقع # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}تنظیمات بازی +STR_GAME_OPTIONS_TAB_GENERAL :عمومی +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}تنظیمات عمومی خود را انتخاب کنید +STR_GAME_OPTIONS_TAB_GRAPHICS :گرافیک +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}تنظیمات گرافیکی خود را انتخاب کنید +STR_GAME_OPTIONS_TAB_SOUND :صدا +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}تنظیمات صدا و موسیقی خود را انتخاب کنید +STR_GAME_OPTIONS_TAB_SOCIAL :اجتماعی +STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}تنظیمات ادغام اجتماعی خود را انتخاب کنید @@ -1238,7 +1250,8 @@ STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(فقط ترا STR_CONFIG_SETTING_INDUSTRY_DENSITY :تراکم مراکز تولید: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :چند کارخانه باید ایجاد شود و در چه درجه ای باید در بازی نگهداری شود -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :تمام پالایشگاه ها در لبه های تقشه ساخته می شوند که ساحل جزیره است +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :حداکثر فاصله از لبه برای صنایع نفتی: {STRING} +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :محدودیت برای میزان فاصله ای که نسبت به مرز نقشه سکو های نفتی و پالایشگاه نفت می‌توانند بنا شوند. در نقشه های جزیره ای این اطمینان حاصل میکند که کنار ساحل باشند. در نقشه های بزرگتر از ۲۵۶ کاشی، این مقدار افزایش می یابد STR_CONFIG_SETTING_SNOWLINE_HEIGHT :ارتفاع خط برف: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :ارتفاع خط برف را در مناطق نیمه قطبی کنترل کنید. وجود برف بر ایجاد صنایع و اقلام ضروری رشد شهر تاثیر میگذارد. @@ -1348,6 +1361,7 @@ STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :همه کاره STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :همه کارها STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :اسنفاده گروهی از لیست خودرو: {STRING} +STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :فعال سازی استفاده از لیست های وسایل نقلیه پیشرفته برای گروه بندی STR_CONFIG_SETTING_LOADING_INDICATORS :استفاده از نشانه‌های بارگیری/بارگذاری: {STRING} @@ -1576,6 +1590,7 @@ STR_CONFIG_SETTING_AI_NPC :بازیگرا STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :مسیریاب برای قطارها: {STRING} STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :مسیریاب برای خودروهای جاده ای: {STRING} +STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :مسیریاب برای خودروهای جاده ای STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :مسیریاب برای کشتی ها: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :برگشت خودکار با رسیدن به نشانه ها: {STRING} ###length 2 @@ -1845,6 +1860,8 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}شرکت STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}لیست سرویس گیرنده ها # Network client list +STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}این شمایید +STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}این شخص میزبان بازی است # Matches ConnectionType ###length 5 @@ -1952,6 +1969,7 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} ب STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} یک شرکت جدید آغاز کرد (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} از بازی بیرون رفت ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} نامش را به {STRING} تغییر داد +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} داد {2:CURRENCY_LONG} به {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}سرویس دهنده جلسه را تعطیل کرد STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}راه اندازی مجدد سرویس دهنده...{}لطفا صبر کنید... @@ -2258,7 +2276,12 @@ STR_TREES_RANDOM_TYPE :{BLACK}درخت STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}نشاندن درختان با نوع تصادفی.گرفتن دکمه شیفت برآورد هزینه ساخت را نمایش می دهد STR_TREES_RANDOM_TREES_BUTTON :{BLACK} درخت های تصادفی STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK} به شکل تصافی در تمام محل درخت بکار -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK} با کشیدن بر روی زمین به شکل تکی درخت بکار +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}عادی +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK} کاشتن درخت ها بصورت تکی با کشیدن روی منظره +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}بیشه +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}کاشتن جنگل های کوچک با کشیدن روی منظره +STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}جنگل +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}کاشتن جنگل های بزرگ با کشیدن روی منظره # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}طراحی اتوماتیک سرزمین @@ -2328,6 +2351,9 @@ STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}نمای STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}نمایش صنایعی که بار را تولید و قبول می کنند STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}پیوند به نقشه کوچک STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}انتخاب صنایع نشان داده شده در نقشه کوچک +STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}محموله را انتخاب کنید +STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}محموله ای که میخواهید نشان داده شود را انتخاب کنید +STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}صنعت موردنظر را انتخاب کنید # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}اطلاعات زمین @@ -2341,6 +2367,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}مالک STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}مالک ریل راه آهن: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}فرماندار محلی: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :هیچکدام +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordinates: {LTBLUE}{NUM} x {NUM} x {NUM} STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}ساخته شده در: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}کلاس ایستگاه: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}نوع ایستگاه: {LTBLUE}{STRING} @@ -2671,6 +2698,7 @@ 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}The NewGRF "{STRING}" با یک خطای مهلک مواجه شده :{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} با TTDPatch که ویرایش آن توسط OpenTTD گزارش شده کار نمی کند STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} برای ویرایش {STRING}TTD می باشد STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} طراحی شده برای استفاده با {STRING} @@ -2863,6 +2891,8 @@ STR_STATION_VIEW_ACCEPTS_BUTTON :{BLACK}قبول STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}نشان دادن لیست کالاهای قابل دریافت STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}قبول می کند: {WHITE}{CARGO_LIST} +STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}این ایستگاه حقوق انحصاری حمل و نقل در این شهر دارد. +STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} حقوق انحصاری حمل و نقل این شهر را خرید. STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}رده بندی STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}نشان دادن رتبه بندی ایستگاه @@ -3279,6 +3309,7 @@ STR_VEHICLE_DETAIL_TAB_TOTAL_CARGO :{BLACK}مجمو STR_REFIT_CAPTION :{WHITE}{VEHICLE} (تعمیر مجدد) STR_REFIT_TITLE :{GOLD}انتخاب محموله قابل حمل: STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}ظرفیت جدید : {GOLD}{CARGO_LONG}{}{BLACK} بهای تعمیر مجدد: {RED}{CURRENCY_LONG} +STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}ظرفیت جدید: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}هزینه بازسازی: {RED}{CURRENCY_LONG} ###length VEHICLE_TYPES STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}انتخاب نوع محموله ای که این کشتی باید حمل کند diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 12406d6b40..95a22362c4 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -2163,7 +2163,9 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Жодного STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Множник розміру мегаполісів: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Середньостатистичне відношення початкового розміру мегаполісів порівняно зі звичайними містами. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Оновлення обрахунку зв'язків, час {STRING} STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Час між перерозрахунками графа зв'язків. Кожен розрахунок обчислює однин компонент графа, тобто лише деякі компоненти оновляться після закінчення кожного проміжку часу, а не весь граф. Чим менше це значення, тим більше часу процесора буде витрачатися. Чим більше це значення, тим довше буде очікувати розподілення вантажів на нових маршрутах +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Час між перерахунками графа зв'язків: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX :Режим розподілу для пасажирів: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :В "симетричному" режимі від станції A до станції B відправлятиметься приблизно стільки ж пасажирів, як від B до A. В "асиметричному" режимі дозволяється відправляти довільну кількість пасажирів в обох напрямках. Ручний режим означає, що розподіл пасажирів не здійснюватиметься автоматично. @@ -4747,7 +4749,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Прямува STR_ORDER_GO_TO_NEAREST_HANGAR :Прямувати в найближчий ангар STR_ORDER_CONDITIONAL :Зміна наказу з умовою STR_ORDER_SHARE :Спільні накази -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Вставити новий наказ перед вибраним, або додати в кінець списку. Утримуйте Ctrl аби створити наказ як "повне завантаження будь-якого вантажу", для точок маршруту - "без зупинок", і для депо - "обслуговування". Пункт "Спільні накази" або утримування Ctrl дозволяє поділитися спільними наказами з виділеним транспортом. Клац мишою на транспорті копіює з нього накази +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Вставити новий наказ перед обраним або додати в кінець списку. Ctrl+клац на станції аби наказати "повне завантаження будь-якого вантажу". Ctrl+клац на точці маршруту аби змінити налаштування "без зупинок" на протилежне. Ctrl+клаці на гаражі для "звільнення". Клац мишею на авто копіює його накази. Ctrl+клац на авто сворює спільні накази. Наказ із гаражем вимикає автоматичний техогляд авто STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Показати транспорт з таким самим маршрутом @@ -4873,7 +4875,7 @@ STR_TIMETABLE_CLEAR_SPEED :{BLACK}Скас STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Скасувати обмеження швидкості для виділеного пункту. Ctrl+клац скасує обмеження швидкості в усіх наказах STR_TIMETABLE_RESET_LATENESS :{BLACK}Скасувати відхилення -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Скасувати лічильник відхилення від графіка, щоб транспорт встигнув. Ctrl+клац щоб скасувати лічильник для всіх транспортів. При цьому останній транспорт стане йти за графіком, а інщі опереджати графік. +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Скасувати лічильник відхилення від графіка, щоб транспорт встигав. Ctrl+клац, щоб скасувати лічильник для всієї групи транспорту. При цьому останній транспорт йтиме за графіком, а інші випереджатимуть графік. STR_TIMETABLE_AUTOFILL :{BLACK}Авторозрахунок STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Автоматично розрахувати розклад впродовж наступної поїздки. Ctrl+клац, щоб спробувати зберегти час очікування From 3e625b5b1a81b00f774ca87b48d3e4f4e9d014c3 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 16 Mar 2024 08:58:56 +0100 Subject: [PATCH 118/695] Add: track savegame size to report with survey (#12304) --- src/crashlog.cpp | 4 ++++ src/gfx.cpp | 2 +- src/misc.cpp | 4 +--- src/network/core/config.h | 2 +- src/network/network_client.cpp | 3 ++- src/network/network_survey.cpp | 5 ++--- src/openttd.cpp | 8 ++++++-- src/openttd.h | 8 +++++++- src/saveload/misc_sl.cpp | 3 +-- src/saveload/saveload.cpp | 10 ++++++++-- src/survey.cpp | 15 ++++++++++++++- src/survey.h | 1 + 12 files changed, 48 insertions(+), 17 deletions(-) diff --git a/src/crashlog.cpp b/src/crashlog.cpp index eae4a3bef8..dfa029ca44 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -102,6 +102,10 @@ void CrashLog::FillCrashLog() this->survey["stacktrace"] = "crashed while gathering information"; } + if (!this->TryExecute("session", [this]() { SurveyGameSession(this->survey["session"]); return true; })) { + this->survey["session"] = "crashed while gathering information"; + } + { auto &info = this->survey["info"]; if (!this->TryExecute("os", [&info]() { SurveyOS(info["os"]); return true; })) { diff --git a/src/gfx.cpp b/src/gfx.cpp index 4b6b7b8d0c..c5bedda078 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -46,8 +46,8 @@ bool _screen_disable_anim = false; ///< Disable palette animation (important f std::atomic _exit_game; GameMode _game_mode; SwitchMode _switch_mode; ///< The next mainloop command. -std::chrono::steady_clock::time_point _switch_mode_time; ///< The time when the switch mode was requested. PauseMode _pause_mode; +GameSessionStats _game_session_stats; ///< Statistics about the current session. static byte _stringwidth_table[FS_END][224]; ///< Cache containing width of often used characters. @see GetCharacterWidth() DrawPixelInfo *_cur_dpi; diff --git a/src/misc.cpp b/src/misc.cpp index dd95950dda..d6467a1812 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -36,8 +36,6 @@ #include "safeguards.h" -std::string _savegame_id; ///< Unique ID of the current savegame. - extern TileIndex _cur_tileloop_tile; extern void MakeNewgameSettingsLive(); @@ -89,7 +87,7 @@ std::string GenerateUid(std::string_view subject) */ void GenerateSavegameId() { - _savegame_id = GenerateUid("OpenTTD Savegame ID"); + _game_session_stats.savegame_id = GenerateUid("OpenTTD Savegame ID"); } void InitializeGame(uint size_x, uint size_y, bool reset_date, bool reset_settings) diff --git a/src/network/core/config.h b/src/network/core/config.h index df8991ad69..18bafb66e2 100644 --- a/src/network/core/config.h +++ b/src/network/core/config.h @@ -48,7 +48,7 @@ static const size_t COMPAT_MTU = 1460; ///< Number of bytes we can pack in a sin static const byte NETWORK_GAME_ADMIN_VERSION = 3; ///< What version of the admin network do we use? static const byte NETWORK_GAME_INFO_VERSION = 7; ///< What version of game-info do we use? static const byte NETWORK_COORDINATOR_VERSION = 6; ///< What version of game-coordinator-protocol do we use? -static const byte NETWORK_SURVEY_VERSION = 1; ///< What version of the survey do we use? +static const byte NETWORK_SURVEY_VERSION = 2; ///< What version of the survey do we use? static const uint NETWORK_NAME_LENGTH = 80; ///< The maximum length of the server name and map name, in bytes including '\0' static const uint NETWORK_COMPANY_NAME_LENGTH = 128; ///< The maximum length of the company name, in bytes including '\0' diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index c4f5149ce6..7d961ab005 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -882,7 +882,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_DONE(Packet SendMapOk(); /* As we skipped switch-mode, update the time we "switched". */ - _switch_mode_time = std::chrono::steady_clock::now(); + _game_session_stats.start_time = std::chrono::steady_clock::now(); + _game_session_stats.savegame_size = std::nullopt; ShowClientList(); diff --git a/src/network/network_survey.cpp b/src/network/network_survey.cpp index 59d9b22d60..9bdddc40c2 100644 --- a/src/network/network_survey.cpp +++ b/src/network/network_survey.cpp @@ -19,8 +19,6 @@ #include "../safeguards.h" -extern std::string _savegame_id; - NetworkSurveyHandler _survey = {}; NLOHMANN_JSON_SERIALIZE_ENUM(NetworkSurveyHandler::Reason, { @@ -43,7 +41,6 @@ std::string NetworkSurveyHandler::CreatePayload(Reason reason, bool for_preview) survey["schema"] = NETWORK_SURVEY_VERSION; survey["reason"] = reason; - survey["id"] = _savegame_id; survey["date"] = fmt::format("{:%Y-%m-%d %H:%M:%S} (UTC)", fmt::gmtime(time(nullptr))); #ifdef SURVEY_KEY @@ -53,6 +50,8 @@ std::string NetworkSurveyHandler::CreatePayload(Reason reason, bool for_preview) survey["key"] = ""; #endif + SurveyGameSession(survey["session"]); + { auto &info = survey["info"]; SurveyOS(info["os"]); diff --git a/src/openttd.cpp b/src/openttd.cpp index 207ff37b41..e1e2cf1880 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -517,7 +517,8 @@ static const OptionData _options[] = { */ int openttd_main(int argc, char *argv[]) { - _switch_mode_time = std::chrono::steady_clock::now(); + _game_session_stats.start_time = std::chrono::steady_clock::now(); + _game_session_stats.savegame_size = std::nullopt; std::string musicdriver; std::string sounddriver; @@ -1086,7 +1087,10 @@ void SwitchToMode(SwitchMode new_mode) if (_game_mode == GM_NORMAL && new_mode != SM_SAVE_GAME) _survey.Transmit(NetworkSurveyHandler::Reason::LEAVE); /* Keep track when we last switch mode. Used for survey, to know how long someone was in a game. */ - if (new_mode != SM_SAVE_GAME) _switch_mode_time = std::chrono::steady_clock::now(); + if (new_mode != SM_SAVE_GAME) { + _game_session_stats.start_time = std::chrono::steady_clock::now(); + _game_session_stats.savegame_size = std::nullopt; + } switch (new_mode) { case SM_EDITOR: // Switch to scenario editor diff --git a/src/openttd.h b/src/openttd.h index 93875dfd6d..08f2988787 100644 --- a/src/openttd.h +++ b/src/openttd.h @@ -52,9 +52,15 @@ enum DisplayOptions { DO_SHOW_COMPETITOR_SIGNS = 7, ///< Display signs, station names and waypoint names of opponent companies. Buoys and oilrig-stations are always shown, even if this option is turned off. }; +struct GameSessionStats { + std::chrono::steady_clock::time_point start_time; ///< Time when the current game was started. + std::string savegame_id; ///< Unique ID of the savegame. + std::optional savegame_size; ///< Size of the last saved savegame in bytes, or std::nullopt if not saved yet. +}; + extern GameMode _game_mode; extern SwitchMode _switch_mode; -extern std::chrono::steady_clock::time_point _switch_mode_time; +extern GameSessionStats _game_session_stats; extern std::atomic _exit_game; extern bool _save_config; diff --git a/src/saveload/misc_sl.cpp b/src/saveload/misc_sl.cpp index 7ec076310a..f72ad09dbc 100644 --- a/src/saveload/misc_sl.cpp +++ b/src/saveload/misc_sl.cpp @@ -29,7 +29,6 @@ extern TileIndex _cur_tileloop_tile; extern uint16_t _disaster_delay; extern byte _trees_tick_ctr; -extern std::string _savegame_id; /* Keep track of current game position */ int _saved_scrollpos_x; @@ -98,7 +97,7 @@ static const SaveLoad _date_desc[] = { SLEG_VAR("company_tick_counter", _cur_company_tick_index, SLE_FILE_U8 | SLE_VAR_U32), SLEG_VAR("trees_tick_counter", _trees_tick_ctr, SLE_UINT8), SLEG_CONDVAR("pause_mode", _pause_mode, SLE_UINT8, SLV_4, SL_MAX_VERSION), - SLEG_CONDSSTR("id", _savegame_id, SLE_STR, SLV_SAVEGAME_ID, SL_MAX_VERSION), + SLEG_CONDSSTR("id", _game_session_stats.savegame_id, SLE_STR, SLV_SAVEGAME_ID, SL_MAX_VERSION), /* For older savegames, we load the current value as the "period"; afterload will set the "fired" and "elapsed". */ SLEG_CONDVAR("next_competitor_start", _new_competitor_timeout.period, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_109), SLEG_CONDVAR("next_competitor_start", _new_competitor_timeout.period, SLE_UINT32, SLV_109, SLV_AI_START_DATE), diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 4dd474a8db..09209ddd4a 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -2182,7 +2182,10 @@ struct FileReader : LoadFilter { /** Make sure everything is cleaned up. */ ~FileReader() { - if (this->file != nullptr) fclose(this->file); + if (this->file != nullptr) { + _game_session_stats.savegame_size = ftell(this->file) - this->begin; + fclose(this->file); + } this->file = nullptr; } @@ -2231,7 +2234,10 @@ struct FileWriter : SaveFilter { void Finish() override { - if (this->file != nullptr) fclose(this->file); + if (this->file != nullptr) { + _game_session_stats.savegame_size = ftell(this->file); + fclose(this->file); + } this->file = nullptr; } }; diff --git a/src/survey.cpp b/src/survey.cpp index 89a57fc717..f9310c976d 100644 --- a/src/survey.cpp +++ b/src/survey.cpp @@ -235,6 +235,20 @@ void SurveyOpenTTD(nlohmann::json &survey) ; } +/** + * Convert game session information to JSON. + * + * @param survey The JSON object. + */ +void SurveyGameSession(nlohmann::json &survey) +{ + survey["id"] = _game_session_stats.savegame_id; + survey["seconds"] = std::chrono::duration_cast(std::chrono::steady_clock::now() - _game_session_stats.start_time).count(); + if (_game_session_stats.savegame_size.has_value()) { + survey["savegame_size"] = _game_session_stats.savegame_size.value(); + } +} + /** * Convert generic game information to JSON. * @@ -330,7 +344,6 @@ void SurveyCompanies(nlohmann::json &survey) void SurveyTimers(nlohmann::json &survey) { survey["ticks"] = TimerGameTick::counter; - survey["seconds"] = std::chrono::duration_cast(std::chrono::steady_clock::now() - _switch_mode_time).count(); TimerGameEconomy::YearMonthDay economy_ymd = TimerGameEconomy::ConvertDateToYMD(TimerGameEconomy::date); survey["economy"] = fmt::format("{:04}-{:02}-{:02} ({})", economy_ymd.year, economy_ymd.month + 1, economy_ymd.day, TimerGameEconomy::date_fract); diff --git a/src/survey.h b/src/survey.h index 0e74641a27..bb235160ad 100644 --- a/src/survey.h +++ b/src/survey.h @@ -16,6 +16,7 @@ std::string SurveyMemoryToText(uint64_t memory); void SurveyCompanies(nlohmann::json &survey); void SurveyCompiler(nlohmann::json &survey); +void SurveyGameSession(nlohmann::json &survey); void SurveyConfiguration(nlohmann::json &survey); void SurveyFont(nlohmann::json &survey); void SurveyGameScript(nlohmann::json &survey); From ec4104ec6cc1a944762afd663a00dcbb15555718 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Tue, 6 Feb 2024 18:56:56 +0100 Subject: [PATCH 119/695] Codechange: do not pass the socket when the receiver already knows it --- src/network/network_server.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index f0eba6d005..683774858e 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -116,10 +116,9 @@ struct PacketWriter : SaveFilter { /** * Transfer all packets from here to the network's queue while holding * the lock on our mutex. - * @param socket The network socket to write to. * @return True iff the last packet of the map has been sent. */ - bool TransferToNetworkQueue(ServerNetworkGameSocketHandler *socket) + bool TransferToNetworkQueue() { /* Unsafe check for the queue being empty or not. */ if (this->packets.empty()) return false; @@ -128,7 +127,7 @@ struct PacketWriter : SaveFilter { while (!this->packets.empty()) { bool last_packet = this->packets.front()->GetPacketType() == PACKET_SERVER_MAP_DONE; - socket->SendPacket(std::move(this->packets.front())); + this->cs->SendPacket(std::move(this->packets.front())); this->packets.pop_front(); if (last_packet) return true; @@ -577,7 +576,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap() } if (this->status == STATUS_MAP) { - bool last_packet = this->savegame->TransferToNetworkQueue(this); + bool last_packet = this->savegame->TransferToNetworkQueue(); if (last_packet) { Debug(net, 9, "client[{}] SendMap(): last_packet", this->client_id); From 3c488e1eb81e3ff7e4b90f03da533d6aa5019d9f Mon Sep 17 00:00:00 2001 From: Rubidium Date: Tue, 6 Feb 2024 18:59:58 +0100 Subject: [PATCH 120/695] Codechange: don't check things outside the lock, that could change while waiting on the lock --- src/network/network_server.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 683774858e..f79f0a7ff3 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -138,13 +138,13 @@ struct PacketWriter : SaveFilter { void Write(byte *buf, size_t size) override { + std::lock_guard lock(this->mutex); + /* We want to abort the saving when the socket is closed. */ if (this->cs == nullptr) SlError(STR_NETWORK_ERROR_LOSTCONNECTION); if (this->current == nullptr) this->current = std::make_unique(PACKET_SERVER_MAP_DATA, TCP_MTU); - std::lock_guard lock(this->mutex); - byte *bufe = buf + size; while (buf != bufe) { size_t written = this->current->Send_bytes(buf, bufe); @@ -161,11 +161,11 @@ struct PacketWriter : SaveFilter { void Finish() override { + std::lock_guard lock(this->mutex); + /* We want to abort the saving when the socket is closed. */ if (this->cs == nullptr) SlError(STR_NETWORK_ERROR_LOSTCONNECTION); - std::lock_guard lock(this->mutex); - /* Make sure the last packet is flushed. */ if (this->current != nullptr) this->packets.push_back(std::move(this->current)); From 6eff879e4906da99c9e8963e321bd21976c403ec Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 4 Feb 2024 12:31:56 +0100 Subject: [PATCH 121/695] Codechange: pass the socket handler that is going to send the packet into the packet --- src/network/core/packet.cpp | 7 ++-- src/network/core/packet.h | 2 +- src/network/core/tcp_listen.h | 4 +-- src/network/network_admin.cpp | 52 +++++++++++++-------------- src/network/network_client.cpp | 30 ++++++++-------- src/network/network_content.cpp | 8 ++--- src/network/network_coordinator.cpp | 14 ++++---- src/network/network_query.cpp | 2 +- src/network/network_server.cpp | 54 ++++++++++++++--------------- src/network/network_stun.cpp | 2 +- src/network/network_turn.cpp | 2 +- src/network/network_udp.cpp | 4 +-- 12 files changed, 91 insertions(+), 90 deletions(-) diff --git a/src/network/core/packet.cpp b/src/network/core/packet.cpp index d4cf165125..f314dc803c 100644 --- a/src/network/core/packet.cpp +++ b/src/network/core/packet.cpp @@ -38,13 +38,14 @@ Packet::Packet(NetworkSocketHandler *cs, size_t limit, size_t initial_read_size) /** * Creates a packet to send + * @param cs The socket handler associated with the socket we are writing to; could be \c nullptr. * @param type The type of the packet to send * @param limit The maximum number of bytes the packet may have. Default is COMPAT_MTU. * Be careful of compatibility with older clients/servers when changing * the limit as it might break things if the other side is not expecting * much larger packets than what they support. */ -Packet::Packet(PacketType type, size_t limit) : pos(0), limit(limit), cs(nullptr) +Packet::Packet(NetworkSocketHandler *cs, PacketType type, size_t limit) : pos(0), limit(limit), cs(cs) { /* Allocate space for the the size so we can write that in just before sending the packet. */ this->Send_uint16(0); @@ -57,7 +58,8 @@ Packet::Packet(PacketType type, size_t limit) : pos(0), limit(limit), cs(nullptr */ void Packet::PrepareToSend() { - assert(this->cs == nullptr); + /* Prevent this to be called twice and for packets that have been received. */ + assert(this->buffer[0] == 0 && this->buffer[1] == 0); this->buffer[0] = GB(this->Size(), 0, 8); this->buffer[1] = GB(this->Size(), 8, 8); @@ -243,7 +245,6 @@ size_t Packet::Size() const */ bool Packet::ParsePacketSize() { - assert(this->cs != nullptr); size_t size = (size_t)this->buffer[0]; size += (size_t)this->buffer[1] << 8; diff --git a/src/network/core/packet.h b/src/network/core/packet.h index 9cedfd63e1..f403f37ae7 100644 --- a/src/network/core/packet.h +++ b/src/network/core/packet.h @@ -53,7 +53,7 @@ private: public: Packet(NetworkSocketHandler *cs, size_t limit, size_t initial_read_size = sizeof(PacketSize)); - Packet(PacketType type, size_t limit = COMPAT_MTU); + Packet(NetworkSocketHandler *cs, PacketType type, size_t limit = COMPAT_MTU); /* Sending/writing of packets */ void PrepareToSend(); diff --git a/src/network/core/tcp_listen.h b/src/network/core/tcp_listen.h index 088cc7b8cd..6e6d95e5da 100644 --- a/src/network/core/tcp_listen.h +++ b/src/network/core/tcp_listen.h @@ -35,7 +35,7 @@ public: /* Check if the client is banned. */ for (const auto &entry : _network_ban_list) { if (address.IsInNetmask(entry)) { - Packet p(Tban_packet); + Packet p(nullptr, Tban_packet); p.PrepareToSend(); Debug(net, 2, "[{}] Banned ip tried to join ({}), refused", Tsocket::GetName(), entry); @@ -52,7 +52,7 @@ public: if (!Tsocket::AllowConnection()) { /* No more clients allowed? * Send to the client that we are full! */ - Packet p(Tfull_packet); + Packet p(nullptr, Tfull_packet); p.PrepareToSend(); if (p.TransferOut(send, s, 0) < 0) { diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp index 028acc4d72..84e14ea4d9 100644 --- a/src/network/network_admin.cpp +++ b/src/network/network_admin.cpp @@ -134,7 +134,7 @@ ServerNetworkAdminSocketHandler::~ServerNetworkAdminSocketHandler() */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendError(NetworkErrorCode error) { - auto p = std::make_unique(ADMIN_PACKET_SERVER_ERROR); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_ERROR); p->Send_uint8(error); this->SendPacket(std::move(p)); @@ -149,7 +149,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendError(NetworkErrorCode er /** Send the protocol version to the admin. */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendProtocol() { - auto p = std::make_unique(ADMIN_PACKET_SERVER_PROTOCOL); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_PROTOCOL); /* announce the protocol version */ p->Send_uint8(NETWORK_GAME_ADMIN_VERSION); @@ -169,7 +169,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendProtocol() /** Send a welcome message to the admin. */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendWelcome() { - auto p = std::make_unique(ADMIN_PACKET_SERVER_WELCOME); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_WELCOME); p->Send_string(_settings_client.network.server_name); p->Send_string(GetNetworkRevisionString()); @@ -190,7 +190,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendWelcome() /** Tell the admin we started a new game. */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendNewGame() { - auto p = std::make_unique(ADMIN_PACKET_SERVER_NEWGAME); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_NEWGAME); this->SendPacket(std::move(p)); return NETWORK_RECV_STATUS_OKAY; } @@ -198,7 +198,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendNewGame() /** Tell the admin we're shutting down. */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendShutdown() { - auto p = std::make_unique(ADMIN_PACKET_SERVER_SHUTDOWN); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_SHUTDOWN); this->SendPacket(std::move(p)); return NETWORK_RECV_STATUS_OKAY; } @@ -206,7 +206,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendShutdown() /** Tell the admin the date. */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendDate() { - auto p = std::make_unique(ADMIN_PACKET_SERVER_DATE); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_DATE); p->Send_uint32(TimerGameCalendar::date.base()); this->SendPacket(std::move(p)); @@ -220,7 +220,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendDate() */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendClientJoin(ClientID client_id) { - auto p = std::make_unique(ADMIN_PACKET_SERVER_CLIENT_JOIN); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_CLIENT_JOIN); p->Send_uint32(client_id); this->SendPacket(std::move(p)); @@ -238,7 +238,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendClientInfo(const NetworkC /* Only send data when we're a proper client, not just someone trying to query the server. */ if (ci == nullptr) return NETWORK_RECV_STATUS_OKAY; - auto p = std::make_unique(ADMIN_PACKET_SERVER_CLIENT_INFO); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_CLIENT_INFO); p->Send_uint32(ci->client_id); p->Send_string(cs == nullptr ? "" : const_cast(cs->client_address).GetHostname()); @@ -259,7 +259,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendClientInfo(const NetworkC */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendClientUpdate(const NetworkClientInfo *ci) { - auto p = std::make_unique(ADMIN_PACKET_SERVER_CLIENT_UPDATE); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_CLIENT_UPDATE); p->Send_uint32(ci->client_id); p->Send_string(ci->client_name); @@ -276,7 +276,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendClientUpdate(const Networ */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendClientQuit(ClientID client_id) { - auto p = std::make_unique(ADMIN_PACKET_SERVER_CLIENT_QUIT); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_CLIENT_QUIT); p->Send_uint32(client_id); this->SendPacket(std::move(p)); @@ -291,7 +291,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendClientQuit(ClientID clien */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendClientError(ClientID client_id, NetworkErrorCode error) { - auto p = std::make_unique(ADMIN_PACKET_SERVER_CLIENT_ERROR); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_CLIENT_ERROR); p->Send_uint32(client_id); p->Send_uint8 (error); @@ -306,7 +306,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendClientError(ClientID clie */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyNew(CompanyID company_id) { - auto p = std::make_unique(ADMIN_PACKET_SERVER_COMPANY_NEW); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_COMPANY_NEW); p->Send_uint8(company_id); this->SendPacket(std::move(p)); @@ -320,7 +320,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyNew(CompanyID comp */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyInfo(const Company *c) { - auto p = std::make_unique(ADMIN_PACKET_SERVER_COMPANY_INFO); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_COMPANY_INFO); p->Send_uint8 (c->index); SetDParam(0, c->index); @@ -345,7 +345,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyInfo(const Company */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyUpdate(const Company *c) { - auto p = std::make_unique(ADMIN_PACKET_SERVER_COMPANY_UPDATE); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_COMPANY_UPDATE); p->Send_uint8 (c->index); SetDParam(0, c->index); @@ -368,7 +368,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyUpdate(const Compa */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyRemove(CompanyID company_id, AdminCompanyRemoveReason acrr) { - auto p = std::make_unique(ADMIN_PACKET_SERVER_COMPANY_REMOVE); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_COMPANY_REMOVE); p->Send_uint8(company_id); p->Send_uint8(acrr); @@ -385,7 +385,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyEconomy() /* Get the income. */ Money income = -std::reduce(std::begin(company->yearly_expenses[0]), std::end(company->yearly_expenses[0])); - auto p = std::make_unique(ADMIN_PACKET_SERVER_COMPANY_ECONOMY); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_COMPANY_ECONOMY); p->Send_uint8(company->index); @@ -418,7 +418,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyStats() /* Go through all the companies. */ for (const Company *company : Company::Iterate()) { - auto p = std::make_unique(ADMIN_PACKET_SERVER_COMPANY_STATS); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_COMPANY_STATS); /* Send the information. */ p->Send_uint8(company->index); @@ -447,7 +447,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyStats() */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendChat(NetworkAction action, DestType desttype, ClientID client_id, const std::string &msg, int64_t data) { - auto p = std::make_unique(ADMIN_PACKET_SERVER_CHAT); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_CHAT); p->Send_uint8 (action); p->Send_uint8 (desttype); @@ -465,7 +465,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendChat(NetworkAction action */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendRconEnd(const std::string_view command) { - auto p = std::make_unique(ADMIN_PACKET_SERVER_RCON_END); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_RCON_END); p->Send_string(command); this->SendPacket(std::move(p)); @@ -480,7 +480,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendRconEnd(const std::string */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendRcon(uint16_t colour, const std::string_view result) { - auto p = std::make_unique(ADMIN_PACKET_SERVER_RCON); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_RCON); p->Send_uint16(colour); p->Send_string(result); @@ -539,7 +539,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendConsole(const std::string * smaller than COMPAT_MTU. */ if (origin.size() + string.size() + 2 + 3 >= COMPAT_MTU) return NETWORK_RECV_STATUS_OKAY; - auto p = std::make_unique(ADMIN_PACKET_SERVER_CONSOLE); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_CONSOLE); p->Send_string(origin); p->Send_string(string); @@ -554,7 +554,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendConsole(const std::string */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendGameScript(const std::string_view json) { - auto p = std::make_unique(ADMIN_PACKET_SERVER_GAMESCRIPT); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_GAMESCRIPT); p->Send_string(json); this->SendPacket(std::move(p)); @@ -565,7 +565,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendGameScript(const std::str /** Send ping-reply (pong) to admin **/ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendPong(uint32_t d1) { - auto p = std::make_unique(ADMIN_PACKET_SERVER_PONG); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_PONG); p->Send_uint32(d1); this->SendPacket(std::move(p)); @@ -576,7 +576,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendPong(uint32_t d1) /** Send the names of the commands. */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCmdNames() { - auto p = std::make_unique(ADMIN_PACKET_SERVER_CMD_NAMES); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_CMD_NAMES); for (uint16_t i = 0; i < CMD_END; i++) { const char *cmdname = GetCommandName(static_cast(i)); @@ -588,7 +588,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCmdNames() p->Send_bool(false); this->SendPacket(std::move(p)); - p = std::make_unique(ADMIN_PACKET_SERVER_CMD_NAMES); + p = std::make_unique(this, ADMIN_PACKET_SERVER_CMD_NAMES); } p->Send_bool(true); @@ -610,7 +610,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCmdNames() */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCmdLogging(ClientID client_id, const CommandPacket &cp) { - auto p = std::make_unique(ADMIN_PACKET_SERVER_CMD_LOGGING); + auto p = std::make_unique(this, ADMIN_PACKET_SERVER_CMD_LOGGING); p->Send_uint32(client_id); p->Send_uint8 (cp.company); diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 7d961ab005..ded54f0bae 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -344,7 +344,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendJoin() _network_join_status = NETWORK_JOIN_STATUS_AUTHORIZING; SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); - auto p = std::make_unique(PACKET_CLIENT_JOIN); + auto p = std::make_unique(my_client, PACKET_CLIENT_JOIN); p->Send_string(GetNetworkRevisionString()); p->Send_uint32(_openttd_newgrf_version); p->Send_string(_settings_client.network.client_name); // Client name @@ -359,7 +359,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendNewGRFsOk() { Debug(net, 9, "Client::SendNewGRFsOk()"); - auto p = std::make_unique(PACKET_CLIENT_NEWGRFS_CHECKED); + auto p = std::make_unique(my_client, PACKET_CLIENT_NEWGRFS_CHECKED); my_client->SendPacket(std::move(p)); return NETWORK_RECV_STATUS_OKAY; } @@ -372,7 +372,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendGamePassword(const std::st { Debug(net, 9, "Client::SendGamePassword()"); - auto p = std::make_unique(PACKET_CLIENT_GAME_PASSWORD); + auto p = std::make_unique(my_client, PACKET_CLIENT_GAME_PASSWORD); p->Send_string(password); my_client->SendPacket(std::move(p)); return NETWORK_RECV_STATUS_OKAY; @@ -386,7 +386,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendCompanyPassword(const std: { Debug(net, 9, "Client::SendCompanyPassword()"); - auto p = std::make_unique(PACKET_CLIENT_COMPANY_PASSWORD); + auto p = std::make_unique(my_client, PACKET_CLIENT_COMPANY_PASSWORD); p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _password_game_seed)); my_client->SendPacket(std::move(p)); return NETWORK_RECV_STATUS_OKAY; @@ -400,7 +400,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendGetMap() Debug(net, 9, "Client::status = MAP_WAIT"); my_client->status = STATUS_MAP_WAIT; - auto p = std::make_unique(PACKET_CLIENT_GETMAP); + auto p = std::make_unique(my_client, PACKET_CLIENT_GETMAP); my_client->SendPacket(std::move(p)); return NETWORK_RECV_STATUS_OKAY; } @@ -413,7 +413,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendMapOk() Debug(net, 9, "Client::status = ACTIVE"); my_client->status = STATUS_ACTIVE; - auto p = std::make_unique(PACKET_CLIENT_MAP_OK); + auto p = std::make_unique(my_client, PACKET_CLIENT_MAP_OK); my_client->SendPacket(std::move(p)); return NETWORK_RECV_STATUS_OKAY; } @@ -423,7 +423,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendAck() { Debug(net, 9, "Client::SendAck()"); - auto p = std::make_unique(PACKET_CLIENT_ACK); + auto p = std::make_unique(my_client, PACKET_CLIENT_ACK); p->Send_uint32(_frame_counter); p->Send_uint8 (my_client->token); @@ -439,7 +439,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendCommand(const CommandPacke { Debug(net, 9, "Client::SendCommand(): cmd={}", cp.cmd); - auto p = std::make_unique(PACKET_CLIENT_COMMAND); + auto p = std::make_unique(my_client, PACKET_CLIENT_COMMAND); my_client->NetworkGameSocketHandler::SendCommand(*p, cp); my_client->SendPacket(std::move(p)); @@ -451,7 +451,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendChat(NetworkAction action, { Debug(net, 9, "Client::SendChat(): action={}, type={}, dest={}", action, type, dest); - auto p = std::make_unique(PACKET_CLIENT_CHAT); + auto p = std::make_unique(my_client, PACKET_CLIENT_CHAT); p->Send_uint8 (action); p->Send_uint8 (type); @@ -468,7 +468,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendError(NetworkErrorCode err { Debug(net, 9, "Client::SendError(): errorno={}", errorno); - auto p = std::make_unique(PACKET_CLIENT_ERROR); + auto p = std::make_unique(my_client, PACKET_CLIENT_ERROR); p->Send_uint8(errorno); my_client->SendPacket(std::move(p)); @@ -483,7 +483,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendSetPassword(const std::str { Debug(net, 9, "Client::SendSetPassword()"); - auto p = std::make_unique(PACKET_CLIENT_SET_PASSWORD); + auto p = std::make_unique(my_client, PACKET_CLIENT_SET_PASSWORD); p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _password_game_seed)); my_client->SendPacket(std::move(p)); @@ -498,7 +498,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendSetName(const std::string { Debug(net, 9, "Client::SendSetName()"); - auto p = std::make_unique(PACKET_CLIENT_SET_NAME); + auto p = std::make_unique(my_client, PACKET_CLIENT_SET_NAME); p->Send_string(name); my_client->SendPacket(std::move(p)); @@ -512,7 +512,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendQuit() { Debug(net, 9, "Client::SendQuit()"); - auto p = std::make_unique(PACKET_CLIENT_QUIT); + auto p = std::make_unique(my_client, PACKET_CLIENT_QUIT); my_client->SendPacket(std::move(p)); return NETWORK_RECV_STATUS_OKAY; @@ -527,7 +527,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendRCon(const std::string &pa { Debug(net, 9, "Client::SendRCon()"); - auto p = std::make_unique(PACKET_CLIENT_RCON); + auto p = std::make_unique(my_client, PACKET_CLIENT_RCON); p->Send_string(pass); p->Send_string(command); my_client->SendPacket(std::move(p)); @@ -543,7 +543,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendMove(CompanyID company, co { Debug(net, 9, "Client::SendMove(): company={}", company); - auto p = std::make_unique(PACKET_CLIENT_MOVE); + auto p = std::make_unique(my_client, PACKET_CLIENT_MOVE); p->Send_uint8(company); p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _password_game_seed)); my_client->SendPacket(std::move(p)); diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index caa437f2fe..4f51ddbcd4 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -204,7 +204,7 @@ void ClientNetworkContentSocketHandler::RequestContentList(ContentType type) this->Connect(); - auto p = std::make_unique(PACKET_CONTENT_CLIENT_INFO_LIST); + auto p = std::make_unique(this, PACKET_CONTENT_CLIENT_INFO_LIST); p->Send_uint8 ((byte)type); p->Send_uint32(0xffffffff); p->Send_uint8 (1); @@ -240,7 +240,7 @@ void ClientNetworkContentSocketHandler::RequestContentList(uint count, const Con * The rest of the packet can be used for the IDs. */ uint p_count = std::min(count, (TCP_MTU - sizeof(PacketSize) - sizeof(byte) - sizeof(uint16_t)) / sizeof(uint32_t)); - auto p = std::make_unique(PACKET_CONTENT_CLIENT_INFO_ID, TCP_MTU); + auto p = std::make_unique(this, PACKET_CONTENT_CLIENT_INFO_ID, TCP_MTU); p->Send_uint16(p_count); for (uint i = 0; i < p_count; i++) { @@ -268,7 +268,7 @@ void ClientNetworkContentSocketHandler::RequestContentList(ContentVector *cv, bo assert(cv->size() < (TCP_MTU - sizeof(PacketSize) - sizeof(byte) - sizeof(uint8_t)) / (sizeof(uint8_t) + sizeof(uint32_t) + (send_md5sum ? MD5_HASH_BYTES : 0))); - auto p = std::make_unique(send_md5sum ? PACKET_CONTENT_CLIENT_INFO_EXTID_MD5 : PACKET_CONTENT_CLIENT_INFO_EXTID, TCP_MTU); + auto p = std::make_unique(this, send_md5sum ? PACKET_CONTENT_CLIENT_INFO_EXTID_MD5 : PACKET_CONTENT_CLIENT_INFO_EXTID, TCP_MTU); p->Send_uint8((uint8_t)cv->size()); for (const ContentInfo *ci : *cv) { @@ -365,7 +365,7 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContentFallback(const Co * The rest of the packet can be used for the IDs. */ uint p_count = std::min(count, (TCP_MTU - sizeof(PacketSize) - sizeof(byte) - sizeof(uint16_t)) / sizeof(uint32_t)); - auto p = std::make_unique(PACKET_CONTENT_CLIENT_CONTENT, TCP_MTU); + auto p = std::make_unique(this, PACKET_CONTENT_CLIENT_CONTENT, TCP_MTU); p->Send_uint16(p_count); for (uint i = 0; i < p_count; i++) { diff --git a/src/network/network_coordinator.cpp b/src/network/network_coordinator.cpp index 129b26f8fb..e7bd0fdb6c 100644 --- a/src/network/network_coordinator.cpp +++ b/src/network/network_coordinator.cpp @@ -458,7 +458,7 @@ void ClientNetworkCoordinatorSocketHandler::Register() this->Connect(); - auto p = std::make_unique(PACKET_COORDINATOR_SERVER_REGISTER); + auto p = std::make_unique(this, PACKET_COORDINATOR_SERVER_REGISTER); p->Send_uint8(NETWORK_COORDINATOR_VERSION); p->Send_uint8(_settings_client.network.server_game_type); p->Send_uint16(_settings_client.network.server_port); @@ -480,7 +480,7 @@ void ClientNetworkCoordinatorSocketHandler::SendServerUpdate() { Debug(net, 6, "Sending server update to Game Coordinator"); - auto p = std::make_unique(PACKET_COORDINATOR_SERVER_UPDATE, TCP_MTU); + auto p = std::make_unique(this, PACKET_COORDINATOR_SERVER_UPDATE, TCP_MTU); p->Send_uint8(NETWORK_COORDINATOR_VERSION); SerializeNetworkGameInfo(*p, GetCurrentNetworkServerGameInfo(), this->next_update.time_since_epoch() != std::chrono::nanoseconds::zero()); @@ -498,7 +498,7 @@ void ClientNetworkCoordinatorSocketHandler::GetListing() _network_game_list_version++; - auto p = std::make_unique(PACKET_COORDINATOR_CLIENT_LISTING); + auto p = std::make_unique(this, PACKET_COORDINATOR_CLIENT_LISTING); p->Send_uint8(NETWORK_COORDINATOR_VERSION); p->Send_uint8(NETWORK_GAME_INFO_VERSION); p->Send_string(_openttd_revision); @@ -530,7 +530,7 @@ void ClientNetworkCoordinatorSocketHandler::ConnectToServer(const std::string &i this->Connect(); - auto p = std::make_unique(PACKET_COORDINATOR_CLIENT_CONNECT); + auto p = std::make_unique(this, PACKET_COORDINATOR_CLIENT_CONNECT); p->Send_uint8(NETWORK_COORDINATOR_VERSION); p->Send_string(invite_code); @@ -547,7 +547,7 @@ void ClientNetworkCoordinatorSocketHandler::ConnectFailure(const std::string &to /* Connecter will destroy itself. */ this->game_connecter = nullptr; - auto p = std::make_unique(PACKET_COORDINATOR_SERCLI_CONNECT_FAILED); + auto p = std::make_unique(this, PACKET_COORDINATOR_SERCLI_CONNECT_FAILED); p->Send_uint8(NETWORK_COORDINATOR_VERSION); p->Send_string(token); p->Send_uint8(tracking_number); @@ -578,7 +578,7 @@ void ClientNetworkCoordinatorSocketHandler::ConnectSuccess(const std::string &to } else { /* The client informs the Game Coordinator about the success. The server * doesn't have to, as it is implied by the client telling. */ - auto p = std::make_unique(PACKET_COORDINATOR_CLIENT_CONNECTED); + auto p = std::make_unique(this, PACKET_COORDINATOR_CLIENT_CONNECTED); p->Send_uint8(NETWORK_COORDINATOR_VERSION); p->Send_string(token); this->SendPacket(std::move(p)); @@ -606,7 +606,7 @@ void ClientNetworkCoordinatorSocketHandler::ConnectSuccess(const std::string &to */ void ClientNetworkCoordinatorSocketHandler::StunResult(const std::string &token, uint8_t family, bool result) { - auto p = std::make_unique(PACKET_COORDINATOR_SERCLI_STUN_RESULT); + auto p = std::make_unique(this, PACKET_COORDINATOR_SERCLI_STUN_RESULT); p->Send_uint8(NETWORK_COORDINATOR_VERSION); p->Send_string(token); p->Send_uint8(family); diff --git a/src/network/network_query.cpp b/src/network/network_query.cpp index 34cbd09289..9f87a277f9 100644 --- a/src/network/network_query.cpp +++ b/src/network/network_query.cpp @@ -83,7 +83,7 @@ NetworkRecvStatus QueryNetworkGameSocketHandler::SendGameInfo() { Debug(net, 9, "Query::SendGameInfo()"); - this->SendPacket(std::make_unique(PACKET_CLIENT_GAME_INFO)); + this->SendPacket(std::make_unique(this, PACKET_CLIENT_GAME_INFO)); return NETWORK_RECV_STATUS_OKAY; } diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index f79f0a7ff3..a1fbf09302 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -143,7 +143,7 @@ struct PacketWriter : SaveFilter { /* We want to abort the saving when the socket is closed. */ if (this->cs == nullptr) SlError(STR_NETWORK_ERROR_LOSTCONNECTION); - if (this->current == nullptr) this->current = std::make_unique(PACKET_SERVER_MAP_DATA, TCP_MTU); + if (this->current == nullptr) this->current = std::make_unique(this->cs, PACKET_SERVER_MAP_DATA, TCP_MTU); byte *bufe = buf + size; while (buf != bufe) { @@ -152,7 +152,7 @@ struct PacketWriter : SaveFilter { if (!this->current->CanWriteToPacket(1)) { this->packets.push_back(std::move(this->current)); - if (buf != bufe) this->current = std::make_unique(PACKET_SERVER_MAP_DATA, TCP_MTU); + if (buf != bufe) this->current = std::make_unique(this->cs, PACKET_SERVER_MAP_DATA, TCP_MTU); } } @@ -170,10 +170,10 @@ struct PacketWriter : SaveFilter { if (this->current != nullptr) this->packets.push_back(std::move(this->current)); /* Add a packet stating that this is the end to the queue. */ - this->packets.push_back(std::make_unique(PACKET_SERVER_MAP_DONE)); + this->packets.push_back(std::make_unique(this->cs, PACKET_SERVER_MAP_DONE)); /* Fast-track the size to the client. */ - auto p = std::make_unique(PACKET_SERVER_MAP_SIZE); + auto p = std::make_unique(this->cs, PACKET_SERVER_MAP_SIZE); p->Send_uint32((uint32_t)this->total_size); this->packets.push_front(std::move(p)); } @@ -324,7 +324,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendClientInfo(NetworkClientIn Debug(net, 9, "client[{}] SendClientInfo(): client_id={}", this->client_id, ci->client_id); if (ci->client_id != INVALID_CLIENT_ID) { - auto p = std::make_unique(PACKET_SERVER_CLIENT_INFO); + auto p = std::make_unique(this, PACKET_SERVER_CLIENT_INFO); p->Send_uint32(ci->client_id); p->Send_uint8 (ci->client_playas); p->Send_string(ci->client_name); @@ -339,7 +339,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendGameInfo() { Debug(net, 9, "client[{}] SendGameInfo()", this->client_id); - auto p = std::make_unique(PACKET_SERVER_GAME_INFO, TCP_MTU); + auto p = std::make_unique(this, PACKET_SERVER_GAME_INFO, TCP_MTU); SerializeNetworkGameInfo(*p, GetCurrentNetworkServerGameInfo()); this->SendPacket(std::move(p)); @@ -356,7 +356,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendError(NetworkErrorCode err { Debug(net, 9, "client[{}] SendError(): error={}", this->client_id, error); - auto p = std::make_unique(PACKET_SERVER_ERROR); + auto p = std::make_unique(this, PACKET_SERVER_ERROR); p->Send_uint8(error); if (!reason.empty()) p->Send_string(reason); @@ -401,7 +401,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGRFCheck() { Debug(net, 9, "client[{}] SendNewGRFCheck()", this->client_id); - auto p = std::make_unique(PACKET_SERVER_CHECK_NEWGRFS, TCP_MTU); + auto p = std::make_unique(this, PACKET_SERVER_CHECK_NEWGRFS, TCP_MTU); const GRFConfig *c; uint grf_count = 0; @@ -436,7 +436,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedGamePassword() /* Reset 'lag' counters */ this->last_frame = this->last_frame_server = _frame_counter; - auto p = std::make_unique(PACKET_SERVER_NEED_GAME_PASSWORD); + auto p = std::make_unique(this, PACKET_SERVER_NEED_GAME_PASSWORD); this->SendPacket(std::move(p)); return NETWORK_RECV_STATUS_OKAY; } @@ -459,7 +459,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedCompanyPassword() /* Reset 'lag' counters */ this->last_frame = this->last_frame_server = _frame_counter; - auto p = std::make_unique(PACKET_SERVER_NEED_COMPANY_PASSWORD); + auto p = std::make_unique(this, PACKET_SERVER_NEED_COMPANY_PASSWORD); p->Send_uint32(_settings_game.game_creation.generation_seed); p->Send_string(_settings_client.network.network_id); this->SendPacket(std::move(p)); @@ -481,7 +481,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendWelcome() _network_game_info.clients_on++; - auto p = std::make_unique(PACKET_SERVER_WELCOME); + auto p = std::make_unique(this, PACKET_SERVER_WELCOME); p->Send_uint32(this->client_id); p->Send_uint32(_settings_game.game_creation.generation_seed); p->Send_string(_settings_client.network.network_id); @@ -510,7 +510,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendWait() if (new_cs->GetInfo()->join_date < this->GetInfo()->join_date || (new_cs->GetInfo()->join_date == this->GetInfo()->join_date && new_cs->client_id < this->client_id)) waiting++; } - auto p = std::make_unique(PACKET_SERVER_WAIT); + auto p = std::make_unique(this, PACKET_SERVER_WAIT); p->Send_uint8(waiting); this->SendPacket(std::move(p)); return NETWORK_RECV_STATUS_OKAY; @@ -560,7 +560,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap() this->savegame = std::make_shared(this); /* Now send the _frame_counter and how many packets are coming */ - auto p = std::make_unique(PACKET_SERVER_MAP_BEGIN); + auto p = std::make_unique(this, PACKET_SERVER_MAP_BEGIN); p->Send_uint32(_frame_counter); this->SendPacket(std::move(p)); @@ -603,7 +603,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendJoin(ClientID client_id) { Debug(net, 9, "client[{}] SendJoin(): client_id={}", this->client_id, client_id); - auto p = std::make_unique(PACKET_SERVER_JOIN); + auto p = std::make_unique(this, PACKET_SERVER_JOIN); p->Send_uint32(client_id); @@ -614,7 +614,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendJoin(ClientID client_id) /** Tell the client that they may run to a particular frame. */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendFrame() { - auto p = std::make_unique(PACKET_SERVER_FRAME); + auto p = std::make_unique(this, PACKET_SERVER_FRAME); p->Send_uint32(_frame_counter); p->Send_uint32(_frame_counter_max); #ifdef ENABLE_NETWORK_SYNC_EVERY_FRAME @@ -639,7 +639,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendSync() { Debug(net, 9, "client[{}] SendSync(), frame_counter={}, sync_seed_1={}", this->client_id, _frame_counter, _sync_seed_1); - auto p = std::make_unique(PACKET_SERVER_SYNC); + auto p = std::make_unique(this, PACKET_SERVER_SYNC); p->Send_uint32(_frame_counter); p->Send_uint32(_sync_seed_1); @@ -658,7 +658,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCommand(const CommandPacke { Debug(net, 9, "client[{}] SendCommand(): cmd={}", this->client_id, cp.cmd); - auto p = std::make_unique(PACKET_SERVER_COMMAND); + auto p = std::make_unique(this, PACKET_SERVER_COMMAND); this->NetworkGameSocketHandler::SendCommand(*p, cp); p->Send_uint32(cp.frame); @@ -682,7 +682,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendChat(NetworkAction action, if (this->status < STATUS_PRE_ACTIVE) return NETWORK_RECV_STATUS_OKAY; - auto p = std::make_unique(PACKET_SERVER_CHAT); + auto p = std::make_unique(this, PACKET_SERVER_CHAT); p->Send_uint8 (action); p->Send_uint32(client_id); @@ -707,7 +707,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendExternalChat(const std::st if (this->status < STATUS_PRE_ACTIVE) return NETWORK_RECV_STATUS_OKAY; - auto p = std::make_unique(PACKET_SERVER_EXTERNAL_CHAT); + auto p = std::make_unique(this, PACKET_SERVER_EXTERNAL_CHAT); p->Send_string(source); p->Send_uint16(colour); @@ -727,7 +727,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendErrorQuit(ClientID client_ { Debug(net, 9, "client[{}] SendErrorQuit(): client_id={}, errorno={}", this->client_id, client_id, errorno); - auto p = std::make_unique(PACKET_SERVER_ERROR_QUIT); + auto p = std::make_unique(this, PACKET_SERVER_ERROR_QUIT); p->Send_uint32(client_id); p->Send_uint8 (errorno); @@ -744,7 +744,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendQuit(ClientID client_id) { Debug(net, 9, "client[{}] SendQuit(): client_id={}", this->client_id, client_id); - auto p = std::make_unique(PACKET_SERVER_QUIT); + auto p = std::make_unique(this, PACKET_SERVER_QUIT); p->Send_uint32(client_id); @@ -757,7 +757,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendShutdown() { Debug(net, 9, "client[{}] SendShutdown()", this->client_id); - auto p = std::make_unique(PACKET_SERVER_SHUTDOWN); + auto p = std::make_unique(this, PACKET_SERVER_SHUTDOWN); this->SendPacket(std::move(p)); return NETWORK_RECV_STATUS_OKAY; } @@ -767,7 +767,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGame() { Debug(net, 9, "client[{}] SendNewGame()", this->client_id); - auto p = std::make_unique(PACKET_SERVER_NEWGAME); + auto p = std::make_unique(this, PACKET_SERVER_NEWGAME); this->SendPacket(std::move(p)); return NETWORK_RECV_STATUS_OKAY; } @@ -781,7 +781,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendRConResult(uint16_t colour { Debug(net, 9, "client[{}] SendRConResult()", this->client_id); - auto p = std::make_unique(PACKET_SERVER_RCON); + auto p = std::make_unique(this, PACKET_SERVER_RCON); p->Send_uint16(colour); p->Send_string(command); @@ -798,7 +798,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMove(ClientID client_id, C { Debug(net, 9, "client[{}] SendMove(): client_id={}", this->client_id, client_id); - auto p = std::make_unique(PACKET_SERVER_MOVE); + auto p = std::make_unique(this, PACKET_SERVER_MOVE); p->Send_uint32(client_id); p->Send_uint8(company_id); @@ -811,7 +811,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyUpdate() { Debug(net, 9, "client[{}] SendCompanyUpdate()", this->client_id); - auto p = std::make_unique(PACKET_SERVER_COMPANY_UPDATE); + auto p = std::make_unique(this, PACKET_SERVER_COMPANY_UPDATE); static_assert(sizeof(_network_company_passworded) <= sizeof(uint16_t)); p->Send_uint16(_network_company_passworded); @@ -824,7 +824,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendConfigUpdate() { Debug(net, 9, "client[{}] SendConfigUpdate()", this->client_id); - auto p = std::make_unique(PACKET_SERVER_CONFIG_UPDATE); + auto p = std::make_unique(this, PACKET_SERVER_CONFIG_UPDATE); p->Send_uint8(_settings_client.network.max_companies); p->Send_string(_settings_client.network.server_name); diff --git a/src/network/network_stun.cpp b/src/network/network_stun.cpp index c606ff0c83..2acd438e56 100644 --- a/src/network/network_stun.cpp +++ b/src/network/network_stun.cpp @@ -92,7 +92,7 @@ std::unique_ptr ClientNetworkStunSocketHandler:: stun_handler->Connect(token, family); - auto p = std::make_unique(PACKET_STUN_SERCLI_STUN); + auto p = std::make_unique(stun_handler.get(), PACKET_STUN_SERCLI_STUN); p->Send_uint8(NETWORK_COORDINATOR_VERSION); p->Send_string(token); p->Send_uint8(family); diff --git a/src/network/network_turn.cpp b/src/network/network_turn.cpp index c3dfa75a0b..6626ae057d 100644 --- a/src/network/network_turn.cpp +++ b/src/network/network_turn.cpp @@ -100,7 +100,7 @@ void ClientNetworkTurnSocketHandler::Connect() { auto turn_handler = std::make_unique(token, tracking_number, connection_string); - auto p = std::make_unique(PACKET_TURN_SERCLI_CONNECT); + auto p = std::make_unique(turn_handler.get(), PACKET_TURN_SERCLI_CONNECT); p->Send_uint8(NETWORK_COORDINATOR_VERSION); p->Send_string(ticket); diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index 478e804eaf..88aaea538e 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -75,7 +75,7 @@ public: void ServerNetworkUDPSocketHandler::Receive_CLIENT_FIND_SERVER(Packet &, NetworkAddress &client_addr) { - Packet packet(PACKET_UDP_SERVER_RESPONSE); + Packet packet(this, PACKET_UDP_SERVER_RESPONSE); this->SendPacket(packet, client_addr); Debug(net, 7, "Queried from {}", client_addr.GetHostname()); @@ -104,7 +104,7 @@ static void NetworkUDPBroadCast(NetworkUDPSocketHandler *socket) for (NetworkAddress &addr : _broadcast_list) { Debug(net, 5, "Broadcasting to {}", addr.GetHostname()); - Packet p(PACKET_UDP_CLIENT_FIND_SERVER); + Packet p(socket, PACKET_UDP_CLIENT_FIND_SERVER); socket->SendPacket(p, addr, true, true); } } From 26d1d5d6e7d521bf3b77ad709ef8423643a6fb6d Mon Sep 17 00:00:00 2001 From: Rubidium Date: Wed, 13 Mar 2024 20:32:50 +0100 Subject: [PATCH 122/695] Codechange: move decision whether to check NewGRFs to SendNewGRFCheck, just like for sending game/company passwords --- src/network/network_server.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index a1fbf09302..943e3829cc 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -401,6 +401,17 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGRFCheck() { Debug(net, 9, "client[{}] SendNewGRFCheck()", this->client_id); + /* Invalid packet when status is STATUS_NEWGRFS_CHECK or higher */ + if (this->status >= STATUS_NEWGRFS_CHECK) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); + + Debug(net, 9, "client[{}] status = NEWGRFS_CHECK", this->client_id); + this->status = STATUS_NEWGRFS_CHECK; + + if (_grfconfig == nullptr) { + /* There are no NewGRFs, continue with the game password. */ + return this->SendNeedGamePassword(); + } + auto p = std::make_unique(this, PACKET_SERVER_CHECK_NEWGRFS, TCP_MTU); const GRFConfig *c; uint grf_count = 0; @@ -922,14 +933,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_JOIN(Packet &p) /* Make sure companies to which people try to join are not autocleaned */ if (Company::IsValidID(playas)) _network_company_states[playas].months_empty = 0; - Debug(net, 9, "client[{}] status = NEWGRFS_CHECK", this->client_id); - this->status = STATUS_NEWGRFS_CHECK; - - if (_grfconfig == nullptr) { - /* Continue asking for the game password. */ - return this->SendNeedGamePassword(); - } - return this->SendNewGRFCheck(); } From b6c75dec3a3b9526f4ccdfb6a8609a6f411aa52d Mon Sep 17 00:00:00 2001 From: Rubidium Date: Wed, 13 Mar 2024 21:15:25 +0100 Subject: [PATCH 123/695] Codechange: explicitly allow only one state in initial handshake/authorization --- src/network/network_server.cpp | 39 ++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 943e3829cc..65cb5388ae 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -401,8 +401,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGRFCheck() { Debug(net, 9, "client[{}] SendNewGRFCheck()", this->client_id); - /* Invalid packet when status is STATUS_NEWGRFS_CHECK or higher */ - if (this->status >= STATUS_NEWGRFS_CHECK) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); + /* Invalid packet when status is anything but STATUS_INACTIVE. */ + if (this->status != STATUS_INACTIVE) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); Debug(net, 9, "client[{}] status = NEWGRFS_CHECK", this->client_id); this->status = STATUS_NEWGRFS_CHECK; @@ -432,18 +432,19 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGRFCheck() /** Request the game password. */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedGamePassword() { + Debug(net, 9, "client[{}] SendNeedGamePassword()", this->client_id); + + /* Invalid packet when status is anything but STATUS_NEWGRFS_CHECK. */ + if (this->status != STATUS_NEWGRFS_CHECK) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); + + Debug(net, 9, "client[{}] status = AUTH_GAME", this->client_id); + this->status = STATUS_AUTH_GAME; + if (_settings_client.network.server_password.empty()) { /* Do not actually need a game password, continue with the company password. */ return this->SendNeedCompanyPassword(); } - Debug(net, 9, "client[{}] SendNeedGamePassword()", this->client_id); - - /* Invalid packet when status is STATUS_AUTH_GAME or higher */ - if (this->status >= STATUS_AUTH_GAME) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); - - Debug(net, 9, "client[{}] status = AUTH_GAME", this->client_id); - this->status = STATUS_AUTH_GAME; /* Reset 'lag' counters */ this->last_frame = this->last_frame_server = _frame_counter; @@ -455,18 +456,19 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedGamePassword() /** Request the company password. */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedCompanyPassword() { + Debug(net, 9, "client[{}] SendNeedCompanyPassword()", this->client_id); + + /* Invalid packet when status is anything but STATUS_AUTH_GAME. */ + if (this->status != STATUS_AUTH_GAME) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); + + Debug(net, 9, "client[{}] status = AUTH_COMPANY", this->client_id); + this->status = STATUS_AUTH_COMPANY; + NetworkClientInfo *ci = this->GetInfo(); if (!Company::IsValidID(ci->client_playas) || _network_company_states[ci->client_playas].password.empty()) { return this->SendWelcome(); } - Debug(net, 9, "client[{}] SendNeedCompanyPassword()", this->client_id); - - /* Invalid packet when status is STATUS_AUTH_COMPANY or higher */ - if (this->status >= STATUS_AUTH_COMPANY) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); - - Debug(net, 9, "client[{}] status = AUTH_COMPANY", this->client_id); - this->status = STATUS_AUTH_COMPANY; /* Reset 'lag' counters */ this->last_frame = this->last_frame_server = _frame_counter; @@ -482,11 +484,12 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendWelcome() { Debug(net, 9, "client[{}] SendWelcome()", this->client_id); - /* Invalid packet when status is AUTH or higher */ - if (this->status >= STATUS_AUTHORIZED) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); + /* Invalid packet when status is anything but STATUS_AUTH_COMPANY. */ + if (this->status != STATUS_AUTH_COMPANY) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); Debug(net, 9, "client[{}] status = AUTHORIZED", this->client_id); this->status = STATUS_AUTHORIZED; + /* Reset 'lag' counters */ this->last_frame = this->last_frame_server = _frame_counter; From 15d02f51ed61dd7ef26ea0fa84ab9c47424ecc2c Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 28 Jan 2024 13:28:07 +0100 Subject: [PATCH 124/695] Codechange: use span to send bytes to Packet and add span recv function --- src/network/core/packet.cpp | 31 +++++++++++++++++++++++-------- src/network/core/packet.h | 3 ++- src/network/network_server.cpp | 9 ++++----- 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/network/core/packet.cpp b/src/network/core/packet.cpp index f314dc803c..5339c43677 100644 --- a/src/network/core/packet.cpp +++ b/src/network/core/packet.cpp @@ -176,16 +176,15 @@ void Packet::Send_buffer(const std::vector &data) /** * Send as many of the bytes as possible in the packet. This can mean * that it is possible that not all bytes are sent. To cope with this - * the function returns the amount of bytes that were actually sent. - * @param begin The begin of the buffer to send. - * @param end The end of the buffer to send. - * @return The number of bytes that were added to this packet. + * the function returns the span of bytes that were not sent. + * @param span The span describing the range of bytes to send. + * @return The span of bytes that were not written. */ -size_t Packet::Send_bytes(const byte *begin, const byte *end) +std::span Packet::Send_bytes(const std::span span) { - size_t amount = std::min(end - begin, this->limit - this->Size()); - this->buffer.insert(this->buffer.end(), begin, begin + amount); - return amount; + size_t amount = std::min(span.size(), this->limit - this->Size()); + this->buffer.insert(this->buffer.end(), span.data(), span.data() + amount); + return span.subspan(amount); } /* @@ -370,6 +369,22 @@ std::vector Packet::Recv_buffer() return data; } +/** + * Extract at most the length of the span bytes from the packet into the span. + * @param span The span to write the bytes to. + * @return The number of bytes that were actually read. + */ +size_t Packet::Recv_bytes(std::span span) +{ + auto tranfer_to_span = [](std::span destination, const char *source, size_t amount) { + size_t to_copy = std::min(amount, destination.size()); + std::copy(source, source + to_copy, destination.data()); + return to_copy; + }; + + return this->TransferOut(tranfer_to_span, span); +} + /** * Reads characters (bytes) from the packet until it finds a '\0', or reaches a * maximum of \c length characters. diff --git a/src/network/core/packet.h b/src/network/core/packet.h index f403f37ae7..ccb56738ff 100644 --- a/src/network/core/packet.h +++ b/src/network/core/packet.h @@ -66,7 +66,7 @@ public: void Send_uint64(uint64_t data); void Send_string(const std::string_view data); void Send_buffer(const std::vector &data); - size_t Send_bytes (const byte *begin, const byte *end); + std::span Send_bytes(const std::span span); /* Reading/receiving of packets */ bool HasPacketSizeData() const; @@ -82,6 +82,7 @@ public: uint32_t Recv_uint32(); uint64_t Recv_uint64(); std::vector Recv_buffer(); + size_t Recv_bytes(std::span span); std::string Recv_string(size_t length, StringValidationSettings settings = SVS_REPLACE_WITH_QUESTION_MARK); size_t RemainingBytesToTransfer() const; diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 65cb5388ae..2e6c51920e 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -145,14 +145,13 @@ struct PacketWriter : SaveFilter { if (this->current == nullptr) this->current = std::make_unique(this->cs, PACKET_SERVER_MAP_DATA, TCP_MTU); - byte *bufe = buf + size; - while (buf != bufe) { - size_t written = this->current->Send_bytes(buf, bufe); - buf += written; + std::span to_write(buf, size); + while (!to_write.empty()) { + to_write = this->current->Send_bytes(to_write); if (!this->current->CanWriteToPacket(1)) { this->packets.push_back(std::move(this->current)); - if (buf != bufe) this->current = std::make_unique(this->cs, PACKET_SERVER_MAP_DATA, TCP_MTU); + if (!to_write.empty()) this->current = std::make_unique(this->cs, PACKET_SERVER_MAP_DATA, TCP_MTU); } } From fe12d38024038f90b8e81259d457288f8046bc5f Mon Sep 17 00:00:00 2001 From: Rubidium Date: Wed, 13 Mar 2024 21:33:28 +0100 Subject: [PATCH 125/695] Codechange: split initiating of joining and identification of the client --- src/network/core/tcp_game.cpp | 2 ++ src/network/core/tcp_game.h | 24 +++++++++++++++++++----- src/network/network_client.cpp | 13 +++++++++++-- src/network/network_client.h | 1 + src/network/network_server.cpp | 23 ++++++++++++++++++++--- src/network/network_server.h | 2 ++ 6 files changed, 55 insertions(+), 10 deletions(-) diff --git a/src/network/core/tcp_game.cpp b/src/network/core/tcp_game.cpp index 4bd32ec153..f1b4b05e2a 100644 --- a/src/network/core/tcp_game.cpp +++ b/src/network/core/tcp_game.cpp @@ -81,6 +81,7 @@ NetworkRecvStatus NetworkGameSocketHandler::HandlePacket(Packet &p) case PACKET_CLIENT_GAME_INFO: return this->Receive_CLIENT_GAME_INFO(p); case PACKET_SERVER_GAME_INFO: return this->Receive_SERVER_GAME_INFO(p); case PACKET_SERVER_CLIENT_INFO: return this->Receive_SERVER_CLIENT_INFO(p); + case PACKET_CLIENT_IDENTIFY: return this->Receive_CLIENT_IDENTIFY(p); case PACKET_SERVER_NEED_GAME_PASSWORD: return this->Receive_SERVER_NEED_GAME_PASSWORD(p); case PACKET_SERVER_NEED_COMPANY_PASSWORD: return this->Receive_SERVER_NEED_COMPANY_PASSWORD(p); case PACKET_CLIENT_GAME_PASSWORD: return this->Receive_CLIENT_GAME_PASSWORD(p); @@ -162,6 +163,7 @@ NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_ERROR(Packet &) { ret NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_GAME_INFO(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_GAME_INFO); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_GAME_INFO(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_GAME_INFO); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_CLIENT_INFO(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_CLIENT_INFO); } +NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_IDENTIFY(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_IDENTIFY); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_NEED_GAME_PASSWORD(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_NEED_GAME_PASSWORD); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_NEED_COMPANY_PASSWORD(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_NEED_COMPANY_PASSWORD); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_GAME_PASSWORD(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_GAME_PASSWORD); } diff --git a/src/network/core/tcp_game.h b/src/network/core/tcp_game.h index ce031aa07b..7aed964d51 100644 --- a/src/network/core/tcp_game.h +++ b/src/network/core/tcp_game.h @@ -56,7 +56,10 @@ enum PacketGameType : uint8_t { * the map and other important data. */ - /* After the join step, the first is checking NewGRFs. */ + /* After the initial join, the next step is identification. */ + PACKET_CLIENT_IDENTIFY, ///< Client telling the server the client's name and requested company. + + /* After the identify step, the next is checking NewGRFs. */ PACKET_SERVER_CHECK_NEWGRFS, ///< Server sends NewGRF IDs and MD5 checksums for the client to check. PACKET_CLIENT_NEWGRFS_CHECKED, ///< Client acknowledges that it has all required NewGRFs. @@ -162,10 +165,13 @@ protected: /** * Try to join the server: - * string OpenTTD revision (norev000 if no revision). - * string Name of the client (max NETWORK_NAME_LENGTH). - * uint8_t ID of the company to play as (1..MAX_COMPANIES). - * uint8_t ID of the clients Language. + * string OpenTTD revision (norev000 if no revision). + * uint32_t NewGRF version (added in 1.2). + * string Name of the client (max NETWORK_NAME_LENGTH) (removed in 15). + * uint8_t ID of the company to play as (1..MAX_COMPANIES) (removed in 15). + * uint8_t ID of the clients Language (removed in 15). + * string Client's unique identifier (removed in 1.0). + * * @param p The packet that was just received. */ virtual NetworkRecvStatus Receive_CLIENT_JOIN(Packet &p); @@ -199,6 +205,14 @@ protected: */ virtual NetworkRecvStatus Receive_SERVER_CLIENT_INFO(Packet &p); + /** + * The client tells the server about the identity of the client: + * string Name of the client (max NETWORK_NAME_LENGTH). + * uint8_t ID of the company to play as (1..MAX_COMPANIES). + * @param p The packet that was just received. + */ + virtual NetworkRecvStatus Receive_CLIENT_IDENTIFY(Packet &p); + /** * Indication to the client that the server needs a game password. * @param p The packet that was just received. diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index ded54f0bae..db56f0b209 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -347,9 +347,18 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendJoin() auto p = std::make_unique(my_client, PACKET_CLIENT_JOIN); p->Send_string(GetNetworkRevisionString()); p->Send_uint32(_openttd_newgrf_version); + my_client->SendPacket(std::move(p)); + + return ClientNetworkGameSocketHandler::SendIdentify(); +} + +NetworkRecvStatus ClientNetworkGameSocketHandler::SendIdentify() +{ + Debug(net, 9, "Client::SendIdentify()"); + + auto p = std::make_unique(my_client, PACKET_CLIENT_IDENTIFY); p->Send_string(_settings_client.network.client_name); // Client name - p->Send_uint8 (_network_join.company); // PlayAs - p->Send_uint8 (0); // Used to be language + p->Send_uint8(_network_join.company); // PlayAs my_client->SendPacket(std::move(p)); return NETWORK_RECV_STATUS_OKAY; } diff --git a/src/network/network_client.h b/src/network/network_client.h index d314ddc41a..72da871700 100644 --- a/src/network/network_client.h +++ b/src/network/network_client.h @@ -71,6 +71,7 @@ protected: static NetworkRecvStatus SendNewGRFsOk(); static NetworkRecvStatus SendGetMap(); static NetworkRecvStatus SendMapOk(); + static NetworkRecvStatus SendIdentify(); void CheckConnection(); public: ClientNetworkGameSocketHandler(SOCKET s, const std::string &connection_string); diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 2e6c51920e..72567c2ef9 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -400,8 +400,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGRFCheck() { Debug(net, 9, "client[{}] SendNewGRFCheck()", this->client_id); - /* Invalid packet when status is anything but STATUS_INACTIVE. */ - if (this->status != STATUS_INACTIVE) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); + /* Invalid packet when status is anything but STATUS_IDENTIFY. */ + if (this->status != STATUS_IDENTIFY) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); Debug(net, 9, "client[{}] status = NEWGRFS_CHECK", this->client_id); this->status = STATUS_NEWGRFS_CHECK; @@ -891,6 +891,21 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_JOIN(Packet &p) return this->SendError(NETWORK_ERROR_WRONG_REVISION); } + Debug(net, 9, "client[{}] status = IDENTIFY", this->client_id); + this->status = STATUS_IDENTIFY; + + /* Reset 'lag' counters */ + this->last_frame = this->last_frame_server = _frame_counter; + + return NETWORK_RECV_STATUS_OKAY; +} + +NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_IDENTIFY(Packet &p) +{ + if (this->status != STATUS_IDENTIFY) return this->SendError(NETWORK_ERROR_NOT_EXPECTED); + + Debug(net, 9, "client[{}] Receive_CLIENT_IDENTIFY()", this->client_id); + std::string client_name = p.Recv_string(NETWORK_CLIENT_NAME_LENGTH); CompanyID playas = (Owner)p.Recv_uint8(); @@ -905,7 +920,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_JOIN(Packet &p) break; case COMPANY_SPECTATOR: // Spectator break; - default: // Join another company (companies 1-8 (index 0-7)) + default: // Join another company (companies 1..MAX_COMPANIES (index 0..(MAX_COMPANIES-1))) if (!Company::IsValidHumanID(playas)) { return this->SendError(NETWORK_ERROR_COMPANY_MISMATCH); } @@ -1770,6 +1785,7 @@ void NetworkServer_Tick(bool send_frame) break; case NetworkClientSocket::STATUS_INACTIVE: + case NetworkClientSocket::STATUS_IDENTIFY: case NetworkClientSocket::STATUS_NEWGRFS_CHECK: case NetworkClientSocket::STATUS_AUTHORIZED: /* NewGRF check and authorized states should be handled almost instantly. @@ -1962,6 +1978,7 @@ void NetworkServerShowStatusToConsole() { static const char * const stat_str[] = { "inactive", + "identifing client", "checking NewGRFs", "authorizing (server password)", "authorizing (company password)", diff --git a/src/network/network_server.h b/src/network/network_server.h index bbf9817248..f67aeeb404 100644 --- a/src/network/network_server.h +++ b/src/network/network_server.h @@ -24,6 +24,7 @@ extern NetworkClientSocketPool _networkclientsocket_pool; class ServerNetworkGameSocketHandler : public NetworkClientSocketPool::PoolItem<&_networkclientsocket_pool>, public NetworkGameSocketHandler, public TCPListenHandler { protected: NetworkRecvStatus Receive_CLIENT_JOIN(Packet &p) override; + NetworkRecvStatus Receive_CLIENT_IDENTIFY(Packet &p) override; NetworkRecvStatus Receive_CLIENT_GAME_INFO(Packet &p) override; NetworkRecvStatus Receive_CLIENT_GAME_PASSWORD(Packet &p) override; NetworkRecvStatus Receive_CLIENT_COMPANY_PASSWORD(Packet &p) override; @@ -50,6 +51,7 @@ public: /** Status of a client */ enum ClientStatus { STATUS_INACTIVE, ///< The client is not connected nor active. + STATUS_IDENTIFY, ///< The client is identifying itself. STATUS_NEWGRFS_CHECK, ///< The client is checking NewGRFs. STATUS_AUTH_GAME, ///< The client is authorizing with game (server) password. STATUS_AUTH_COMPANY, ///< The client is authorizing with company password. From 4c0dca14113a78187adcc240fd02247fd27b653a Mon Sep 17 00:00:00 2001 From: merni-ns <66267867+merni-ns@users.noreply.github.com> Date: Sat, 16 Mar 2024 19:41:23 +0530 Subject: [PATCH 126/695] Codechange: [CI] Move Release CI build to MacOS runner (#12309) --- .github/workflows/ci-build.yml | 18 ++++++++++-------- .github/workflows/ci-macos.yml | 5 +++++ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 0cedad4c61..c823b92dfa 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -25,15 +25,10 @@ jobs: fail-fast: false matrix: include: - - name: Clang - Debug + - name: Clang compiler: clang-15 cxxcompiler: clang++-15 libraries: libsdl2-dev - - name: Clang - Release - compiler: clang-15 - cxxcompiler: clang++-15 - libraries: libsdl2-dev - extra-cmake-parameters: -DCMAKE_BUILD_TYPE=RelWithDebInfo -DOPTION_USE_ASSERTS=OFF - name: GCC - SDL2 compiler: gcc cxxcompiler: g++ @@ -61,10 +56,16 @@ jobs: fail-fast: false matrix: include: - - arch: arm64 + - name: arm64 - Debug + arch: arm64 full_arch: arm64 + extra-cmake-parameters: -DCMAKE_BUILD=Debug + - name: arm64 - Release + arch: arm64 + full_arch: arm64 + extra-cmake-parameters: -DCMAKE_BUILD_TYPE=RelWithDebInfo -DOPTION_USE_ASSERTS=OFF - name: Mac OS (${{ matrix.arch }}) + name: Mac OS (${{ matrix.name }}) uses: ./.github/workflows/ci-macos.yml secrets: inherit @@ -72,6 +73,7 @@ jobs: with: arch: ${{ matrix.arch }} full_arch: ${{ matrix.full_arch }} + extra-cmake-parameters: ${{ matrix.extra-cmake-parameters }} windows: strategy: diff --git a/.github/workflows/ci-macos.yml b/.github/workflows/ci-macos.yml index f4f30a606b..e6f5d623de 100644 --- a/.github/workflows/ci-macos.yml +++ b/.github/workflows/ci-macos.yml @@ -9,6 +9,10 @@ on: full_arch: required: true type: string + extra-cmake-parameters: + required: false + type: string + default: "" env: CTEST_OUTPUT_ON_FAILURE: 1 @@ -66,6 +70,7 @@ jobs: -DCMAKE_OSX_ARCHITECTURES=${{ inputs.full_arch }} \ -DVCPKG_TARGET_TRIPLET=${{ inputs.arch }}-osx \ -DCMAKE_TOOLCHAIN_FILE=${{ runner.temp }}/vcpkg/scripts/buildsystems/vcpkg.cmake \ + ${{ inputs.extra-cmake-parameters }} \ # EOF echo "::endgroup::" From 5f4f9334ce8aa0d1021b604be08628015b973bef Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 16 Mar 2024 15:39:57 +0100 Subject: [PATCH 127/695] Codefix f1e999ec: use RandomRange(l) instead of _random.Next(l) (#12274) --- src/pathfinder/yapf/yapf_ship.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp index fa617d3e1f..709d4f2919 100644 --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -180,7 +180,7 @@ public: TrackdirBits dirs = follower.m_new_td_bits; const TrackdirBits dirs_without_90_degree = dirs & ~TrackdirCrossesTrackdirs(dir); if (dirs_without_90_degree != TRACKDIR_BIT_NONE) dirs = dirs_without_90_degree; - const int strip_amount = _random.Next(CountBits(dirs)); + const int strip_amount = RandomRange(CountBits(dirs)); for (int s = 0; s < strip_amount; ++s) RemoveFirstTrackdir(&dirs); return { follower.m_new_tile, FindFirstTrackdir(dirs) }; } From 7f49b6f25abf4cf1ac82f28b8801a2c72c4e6ba9 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 16 Mar 2024 16:49:03 +0100 Subject: [PATCH 128/695] Codefix: allow preview label on PRs against release branches too (#12310) --- .github/workflows/preview.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 97ab31955b..bfbe13cacc 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -7,6 +7,7 @@ on: - synchronize branches: - master + - release/** concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number }} From d7c5e9e8ab7fc877c619bb819a584c653a73d4b7 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Fri, 1 Mar 2024 13:32:13 +0000 Subject: [PATCH 129/695] Codechange: Where the ship comes from is already known This simplifies the handling of variables. `ChooseShipTrack` is called upon entering `tile`, and looking further back to the caller, it can be deduced that `v->tile` matches `src_tile`. With that said, `enterdir` can also be removed, as it's not used anywhere else. `CreateRandomPath` and `GetRandomFollowUpTrackdir` is being fed `src_tile` as it's 2nd parameter. This could be eliminated, as `v` is also being passed to it. Just use `v->tile` in those functions. --- src/pathfinder/yapf/yapf.h | 3 +-- src/pathfinder/yapf/yapf_ship.cpp | 20 +++++++++----------- src/ship_cmd.cpp | 9 +++------ 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/src/pathfinder/yapf/yapf.h b/src/pathfinder/yapf/yapf.h index ca7b4f02c9..186986ce57 100644 --- a/src/pathfinder/yapf/yapf.h +++ b/src/pathfinder/yapf/yapf.h @@ -21,11 +21,10 @@ * Finds the best path for given ship using YAPF. * @param v the ship that needs to find a path * @param tile the tile to find the path from (should be next tile the ship is about to enter) - * @param enterdir diagonal direction which the ship will enter this new tile from * @param path_found [out] Whether a path has been found (true) or has been guessed (false) * @return the best trackdir for next turn or INVALID_TRACK if the path could not be found */ -Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, bool &path_found, ShipPathCache &path_cache); +Track YapfShipChooseTrack(const Ship *v, TileIndex tile, bool &path_found, ShipPathCache &path_cache); /** * Returns true if it is better to reverse the ship before leaving depot using YAPF. diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp index 709d4f2919..a4638879c5 100644 --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -188,9 +188,9 @@ public: } /** Creates a random path, avoids 90 degree turns. */ - static Trackdir CreateRandomPath(const Ship *v, TileIndex tile, Trackdir dir, ShipPathCache &path_cache, int path_length) + static Trackdir CreateRandomPath(const Ship *v, Trackdir dir, ShipPathCache &path_cache, int path_length) { - std::pair tile_dir = { tile, dir }; + std::pair tile_dir = { v->tile, dir }; for (int i = 0; i < path_length; ++i) { tile_dir = GetRandomFollowUpTileTrackdir(v, tile_dir.first, tile_dir.second); if (tile_dir.second == INVALID_TRACKDIR) break; @@ -204,10 +204,8 @@ public: return result; } - static Trackdir ChooseShipTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, bool &path_found, ShipPathCache &path_cache) + static Trackdir ChooseShipTrack(const Ship *v, TileIndex tile, bool &path_found, ShipPathCache &path_cache) { - /* Move back to the old tile/trackdir (where ship is coming from). */ - const TileIndex src_tile = TileAddByDiagDir(tile, ReverseDiagDir(enterdir)); const Trackdir trackdir = v->GetVehicleTrackdir(); assert(IsValidTrackdir(trackdir)); @@ -218,7 +216,7 @@ public: if (high_level_path.empty()) { path_found = false; /* Make the ship move around aimlessly. This prevents repeated pathfinder calls and clearly indicates that the ship is lost. */ - return CreateRandomPath(v, src_tile, trackdir, path_cache, SHIP_LOST_PATH_LENGTH); + return CreateRandomPath(v, trackdir, path_cache, SHIP_LOST_PATH_LENGTH); } /* Try one time without restricting the search area, which generally results in better and more natural looking paths. @@ -228,7 +226,7 @@ public: Tpf pf(MAX_SHIP_PF_NODES); /* Set origin and destination nodes */ - pf.SetOrigin(src_tile, trackdirs); + pf.SetOrigin(v->tile, trackdirs); pf.SetDestination(v); const bool is_intermediate_destination = static_cast(high_level_path.size()) >= NUMBER_OR_WATER_REGIONS_LOOKAHEAD + 1; if (is_intermediate_destination) pf.SetIntermediateDestination(high_level_path.back()); @@ -241,7 +239,7 @@ public: path_found = pf.FindPath(v); Node *node = pf.GetBestNode(); if (attempt == 0 && !path_found) continue; // Try again with restricted search area. - if (!path_found || node == nullptr) return GetRandomFollowUpTileTrackdir(v, src_tile, trackdir).second; + if (!path_found || node == nullptr) return GetRandomFollowUpTileTrackdir(v, v->tile, trackdir).second; /* Return only the path within the current water region if an intermediate destination was returned. If not, cache the entire path * to the final destination tile. The low-level pathfinder might actually prefer a different docking tile in a nearby region. Without @@ -267,7 +265,7 @@ public: /* A empty path means we are already at the destination. The pathfinder shouldn't have been called at all. * Return a random reachable trackdir to hopefully nudge the ship out of this strange situation. */ - if (path_cache.empty()) return GetRandomFollowUpTileTrackdir(v, src_tile, trackdir).second; + if (path_cache.empty()) return GetRandomFollowUpTileTrackdir(v, v->tile, trackdir).second; /* Take out the last trackdir as the result. */ const Trackdir result = path_cache.front(); @@ -437,9 +435,9 @@ struct CYapfShip : CYapfTpath); break; + case VPF_YAPF: track = YapfShipChooseTrack(v, tile, path_found, v->path); break; default: NOT_REACHED(); } } @@ -821,7 +818,7 @@ static void ShipController(Ship *v) } /* Choose a direction, and continue if we find one */ - const Track track = ChooseShipTrack(v, gp.new_tile, diagdir, tracks); + const Track track = ChooseShipTrack(v, gp.new_tile, tracks); if (track == INVALID_TRACK) return ReverseShip(v); const ShipSubcoordData &b = _ship_subcoord[diagdir][track]; From 818a57c9afb3ada0a3c4c6cdc0e9b11436603efd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Sat, 16 Mar 2024 17:41:58 +0100 Subject: [PATCH 130/695] Codechange: Actually use LIT_NONE (#12314) --- src/table/settings/gui_settings.ini | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/table/settings/gui_settings.ini b/src/table/settings/gui_settings.ini index 2abb58464f..23bd899334 100644 --- a/src/table/settings/gui_settings.ini +++ b/src/table/settings/gui_settings.ini @@ -336,9 +336,9 @@ cat = SC_BASIC var = gui.liveries type = SLE_UINT8 flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN -def = 2 -min = 0 -max = 2 +def = LIT_ALL +min = LIT_NONE +max = LIT_ALL str = STR_CONFIG_SETTING_LIVERIES strhelp = STR_CONFIG_SETTING_LIVERIES_HELPTEXT strval = STR_CONFIG_SETTING_LIVERIES_NONE From 0058ebe47264dfadc400137776a9342ccb61c0f0 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 16 Mar 2024 19:37:32 +0000 Subject: [PATCH 131/695] Codechange: Check cheap station-facility-filter before expensive in-use-filter. (#12317) --- src/station_gui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 6926fa15f5..bc081bd685 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -260,8 +260,8 @@ protected: this->stations_per_cargo_type_no_rating = 0; for (const Station *st : Station::Iterate()) { - if (st->owner == owner || (st->owner == OWNER_NONE && HasStationInUse(st->index, true, owner))) { - if (this->filter.facilities & st->facilities) { // only stations with selected facilities + if ((this->filter.facilities & st->facilities) != 0) { // only stations with selected facilities + if (st->owner == owner || (st->owner == OWNER_NONE && HasStationInUse(st->index, true, owner))) { bool has_rating = false; /* Add to the station/cargo counts. */ for (CargoID j = 0; j < NUM_CARGO; j++) { From af1bd43b3048f925e1c82ce11c050920ab9b06c5 Mon Sep 17 00:00:00 2001 From: merni-ns <66267867+merni-ns@users.noreply.github.com> Date: Sun, 17 Mar 2024 01:18:12 +0530 Subject: [PATCH 132/695] Codefix 4c0dca1: [CI] Fix typo in workflow file (#12318) --- .github/workflows/ci-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index c823b92dfa..bc833cbc7c 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -59,7 +59,7 @@ jobs: - name: arm64 - Debug arch: arm64 full_arch: arm64 - extra-cmake-parameters: -DCMAKE_BUILD=Debug + extra-cmake-parameters: -DCMAKE_BUILD_TYPE=Debug - name: arm64 - Release arch: arm64 full_arch: arm64 From bd7120bae41b6e7ac86c664c8220b59cd57242bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Sat, 16 Mar 2024 23:43:20 +0100 Subject: [PATCH 133/695] Fix #12316, 268e512: Support for enum storage type in GenerateWidget.cmake (#12321) --- cmake/scripts/GenerateWidget.cmake | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmake/scripts/GenerateWidget.cmake b/cmake/scripts/GenerateWidget.cmake index b6748422f5..ffa5e6edea 100644 --- a/cmake/scripts/GenerateWidget.cmake +++ b/cmake/scripts/GenerateWidget.cmake @@ -56,11 +56,14 @@ foreach(ENUM IN LISTS ENUM_LINES) endif() # Check for enum match - if("${LINE}" MATCHES "^ *enum *${ENUM_PATTERN} *\{") + if("${LINE}" MATCHES "^ *enum *${ENUM_PATTERN}( *: *[^ ]*)? *\{") # REGEX REPLACE does a REGEX MATCHALL and fails if an empty string is matched string(REGEX MATCH "[^ ]*" RESULT "${LINE}") string(REPLACE "${RESULT}" "" RM_INDENT "${LINE}") + string(REGEX MATCH " *: *[^ ]*" RESULT "${LINE}") + string(REPLACE "${RESULT}" "" LINE "${LINE}") + set(ACTIVE 1) if(ACTIVE_COMMENT GREATER 0) string(APPEND ${PLACE_HOLDER} "\n${COMMENT}") From a3cfd23cf93aa07f6b131211c6911bb6325dcb37 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 16 Mar 2024 23:59:32 +0100 Subject: [PATCH 134/695] Codechange: rename byte to uint8_t (#12308) --- CODINGSTYLE.md | 2 +- src/3rdparty/md5/md5.h | 4 +- src/aircraft.h | 12 +- src/aircraft_cmd.cpp | 16 +- src/airport.cpp | 12 +- src/airport.h | 30 +-- src/airport_gui.cpp | 12 +- src/autoreplace_cmd.cpp | 2 +- src/autoreplace_gui.cpp | 6 +- src/base_media_base.h | 6 +- src/base_station_base.h | 16 +- src/blitter/32bpp_anim.cpp | 10 +- src/blitter/32bpp_anim_sse4.cpp | 28 +-- src/blitter/32bpp_optimized.cpp | 14 +- src/blitter/32bpp_optimized.hpp | 2 +- src/blitter/32bpp_sse2.cpp | 2 +- src/blitter/32bpp_sse2.hpp | 2 +- src/blitter/32bpp_sse_func.hpp | 8 +- src/blitter/40bpp_anim.cpp | 10 +- src/blitter/8bpp_optimized.cpp | 8 +- src/blitter/8bpp_optimized.hpp | 2 +- src/blitter/base.hpp | 2 +- src/bmp.cpp | 46 ++--- src/bmp.h | 4 +- src/bridge.h | 4 +- src/bridge_gui.cpp | 8 +- src/build_vehicle_gui.cpp | 4 +- src/cargo_type.h | 4 +- src/cargotype.h | 6 +- src/clear_cmd.cpp | 2 +- src/clear_func.h | 2 +- src/command_type.h | 2 +- src/company_base.h | 8 +- src/company_cmd.cpp | 6 +- src/company_cmd.h | 2 +- src/company_gui.cpp | 6 +- src/company_manager_face.h | 6 +- src/company_type.h | 2 +- src/console.cpp | 2 +- src/console_cmds.cpp | 4 +- src/console_internal.h | 2 +- src/core/alloc_type.hpp | 4 +- src/core/mem_func.hpp | 2 +- src/core/overflowsafe_type.hpp | 10 +- src/core/pool_func.hpp | 4 +- src/core/random_func.cpp | 2 +- src/currency.cpp | 4 +- src/currency.h | 6 +- src/direction_type.h | 6 +- src/disaster_vehicle.cpp | 6 +- src/disaster_vehicle.h | 2 +- src/economy.cpp | 4 +- src/economy_type.h | 8 +- src/effectvehicle.cpp | 8 +- src/effectvehicle_base.h | 2 +- src/elrail.cpp | 14 +- src/engine_base.h | 6 +- src/engine_gui.h | 2 +- src/engine_type.h | 68 +++---- src/fios_gui.cpp | 2 +- src/fontcache/spritefontcache.cpp | 2 +- src/fontcache/truetypefontcache.h | 6 +- src/game/game_text.cpp | 2 +- src/gamelog.cpp | 6 +- src/gamelog.h | 4 +- src/gamelog_internal.h | 14 +- src/genworld.h | 2 +- src/genworld_gui.cpp | 2 +- src/gfx.cpp | 40 ++-- src/gfx_func.h | 8 +- src/gfx_type.h | 6 +- src/gfxinit.cpp | 8 +- src/goal.cpp | 2 +- src/goal_gui.cpp | 2 +- src/goal_type.h | 4 +- src/graph_gui.cpp | 12 +- src/ground_vehicle.cpp | 4 +- src/ground_vehicle.hpp | 8 +- src/group_cmd.h | 4 +- src/gui.h | 4 +- src/heightmap.cpp | 34 ++-- src/heightmap.h | 2 +- src/highscore.cpp | 4 +- src/house.h | 16 +- src/industry.h | 10 +- src/industry_cmd.cpp | 50 ++--- src/industry_cmd.h | 4 +- src/industry_gui.cpp | 14 +- src/industry_map.h | 22 +-- src/industrytype.h | 18 +- src/intro_gui.cpp | 4 +- src/landscape.cpp | 22 +-- src/landscape.h | 16 +- src/landscape_type.h | 2 +- src/language.h | 8 +- src/league_type.h | 2 +- src/linkgraph/linkgraph_type.h | 2 +- src/linkgraph/refresh.cpp | 2 +- src/livery.h | 12 +- src/main_gui.cpp | 4 +- src/map_func.h | 32 +-- src/map_type.h | 2 +- src/misc/endian_buffer.hpp | 14 +- src/misc/fixedsizearray.hpp | 8 +- src/misc/getoptdata.h | 2 +- src/misc_cmd.h | 4 +- src/music.cpp | 6 +- src/music/allegro_m.cpp | 2 +- src/music/allegro_m.h | 2 +- src/music/bemidi.cpp | 2 +- src/music/bemidi.h | 2 +- src/music/cocoa_m.cpp | 4 +- src/music/cocoa_m.h | 2 +- src/music/dmusic.cpp | 26 +-- src/music/dmusic.h | 2 +- src/music/extmidi.cpp | 2 +- src/music/extmidi.h | 2 +- src/music/fluidsynth.cpp | 2 +- src/music/fluidsynth.h | 2 +- src/music/midi.h | 2 +- src/music/midifile.cpp | 82 ++++---- src/music/midifile.hpp | 4 +- src/music/music_driver.hpp | 2 +- src/music/null_m.h | 2 +- src/music/win32_m.cpp | 30 +-- src/music/win32_m.h | 2 +- src/music_gui.cpp | 6 +- src/network/core/config.h | 8 +- src/network/core/network_game_info.cpp | 4 +- src/network/core/network_game_info.h | 12 +- src/network/core/packet.cpp | 12 +- src/network/core/packet.h | 10 +- src/network/core/tcp_content.h | 4 +- src/network/core/tcp_coordinator.h | 2 +- src/network/network.cpp | 10 +- src/network/network_admin.cpp | 2 +- src/network/network_client.cpp | 14 +- src/network/network_client.h | 2 +- src/network/network_command.cpp | 2 +- src/network/network_content.cpp | 12 +- src/network/network_func.h | 2 +- src/network/network_server.cpp | 10 +- src/network/network_server.h | 4 +- src/network/network_type.h | 2 +- src/newgrf.cpp | 260 ++++++++++++------------- src/newgrf.h | 10 +- src/newgrf_airport.cpp | 22 +-- src/newgrf_airport.h | 40 ++-- src/newgrf_airporttiles.cpp | 8 +- src/newgrf_airporttiles.h | 6 +- src/newgrf_animation_base.h | 4 +- src/newgrf_canal.cpp | 6 +- src/newgrf_commons.cpp | 4 +- src/newgrf_commons.h | 2 +- src/newgrf_config.cpp | 4 +- src/newgrf_config.h | 6 +- src/newgrf_debug_gui.cpp | 14 +- src/newgrf_engine.cpp | 26 +-- src/newgrf_engine.h | 8 +- src/newgrf_generic.cpp | 6 +- src/newgrf_house.cpp | 16 +- src/newgrf_house.h | 6 +- src/newgrf_industries.cpp | 14 +- src/newgrf_industries.h | 6 +- src/newgrf_industrytiles.cpp | 16 +- src/newgrf_industrytiles.h | 4 +- src/newgrf_object.cpp | 6 +- src/newgrf_object.h | 4 +- src/newgrf_railtype.cpp | 2 +- src/newgrf_railtype.h | 4 +- src/newgrf_roadstop.cpp | 8 +- src/newgrf_roadstop.h | 16 +- src/newgrf_roadtype.cpp | 2 +- src/newgrf_roadtype.h | 4 +- src/newgrf_spritegroup.cpp | 10 +- src/newgrf_spritegroup.h | 24 +-- src/newgrf_station.cpp | 14 +- src/newgrf_station.h | 28 +-- src/newgrf_storage.h | 4 +- src/newgrf_text.cpp | 26 +-- src/newgrf_text.h | 18 +- src/newgrf_town.cpp | 2 +- src/newgrf_town.h | 4 +- src/newgrf_townname.cpp | 4 +- src/newgrf_townname.h | 12 +- src/news_type.h | 8 +- src/object_base.h | 4 +- src/object_cmd.cpp | 2 +- src/object_map.h | 4 +- src/openttd.cpp | 6 +- src/openttd.h | 2 +- src/order_gui.cpp | 2 +- src/order_type.h | 10 +- src/os/macosx/font_osx.cpp | 4 +- src/os/windows/font_win32.cpp | 6 +- src/osk_gui.cpp | 2 +- src/palette.cpp | 10 +- src/palette_func.h | 4 +- src/pathfinder/npf/aystar.h | 4 +- src/pathfinder/npf/queue.cpp | 2 +- src/pathfinder/water_regions.cpp | 2 +- src/pathfinder/yapf/yapf_ship.cpp | 2 +- src/rail.cpp | 6 +- src/rail.h | 8 +- src/rail_cmd.cpp | 28 +-- src/rail_cmd.h | 4 +- src/rail_gui.cpp | 4 +- src/rail_map.h | 22 +-- src/rail_type.h | 2 +- src/random_access_file.cpp | 4 +- src/random_access_file_type.h | 8 +- src/rev.cpp.in | 4 +- src/rev.h | 4 +- src/road.h | 4 +- src/road_cmd.cpp | 8 +- src/road_cmd.h | 2 +- src/road_type.h | 6 +- src/roadstop_base.h | 2 +- src/roadveh.h | 18 +- src/roadveh_cmd.cpp | 6 +- src/saveload/afterload.cpp | 22 +-- src/saveload/gamelog_sl.cpp | 4 +- src/saveload/map_sl.cpp | 32 +-- src/saveload/misc_sl.cpp | 4 +- src/saveload/oldloader.cpp | 16 +- src/saveload/oldloader.h | 8 +- src/saveload/oldloader_sl.cpp | 16 +- src/saveload/saveload.cpp | 130 ++++++------- src/saveload/saveload.h | 10 +- src/saveload/saveload_filter.h | 6 +- src/saveload/strings_sl.cpp | 2 +- src/saveload/vehicle_sl.cpp | 2 +- src/screenshot.cpp | 28 +-- src/script/api/script_bridgelist.cpp | 4 +- src/script/api/script_company.cpp | 2 +- src/script/api/script_company.hpp | 2 +- src/script/api/script_goal.hpp | 2 +- src/script/api/script_industry.cpp | 4 +- src/script/api/script_league.hpp | 2 +- src/script/api/script_rail.hpp | 2 +- src/script/api/script_road.cpp | 4 +- src/script/api/script_story_page.hpp | 8 +- src/script/api/script_subsidy.cpp | 2 +- src/script/api/script_tile.cpp | 2 +- src/script/api/script_town.cpp | 2 +- src/script/api/script_types.hpp | 2 +- src/script/api/script_vehicle.cpp | 2 +- src/script/script_instance.cpp | 4 +- src/settings.cpp | 4 +- src/settings_gui.cpp | 28 +-- src/settings_gui.h | 2 +- src/settings_type.h | 10 +- src/ship_cmd.cpp | 8 +- src/signal_func.h | 12 +- src/signal_type.h | 4 +- src/slope_func.h | 2 +- src/slope_type.h | 2 +- src/smallmap_gui.cpp | 8 +- src/sortlist_type.h | 4 +- src/sound.cpp | 6 +- src/sound_type.h | 2 +- src/sprite.h | 22 +-- src/spritecache.cpp | 36 ++-- src/spritecache.h | 8 +- src/spritecache_internal.h | 2 +- src/spriteloader/grf.cpp | 30 +-- src/spriteloader/grf.hpp | 6 +- src/spriteloader/sprite_file.cpp | 4 +- src/spriteloader/sprite_file_type.hpp | 4 +- src/spriteloader/spriteloader.hpp | 2 +- src/station.cpp | 2 +- src/station_base.h | 14 +- src/station_cmd.cpp | 40 ++-- src/station_cmd.h | 8 +- src/station_func.h | 2 +- src/station_gui.cpp | 14 +- src/station_map.h | 18 +- src/station_type.h | 6 +- src/stdafx.h | 2 - src/story.cpp | 4 +- src/story_base.h | 6 +- src/story_type.h | 2 +- src/strgen/strgen.cpp | 4 +- src/strgen/strgen.h | 2 +- src/strgen/strgen_base.cpp | 10 +- src/string.cpp | 2 +- src/string_func.h | 2 +- src/strings.cpp | 28 +-- src/subsidy_type.h | 2 +- src/table/airport_movement.h | 38 ++-- src/table/clear_land.h | 8 +- src/table/elrail_data.h | 10 +- src/table/industry_land.h | 14 +- src/table/palette_convert.h | 4 +- src/table/roadveh_movement.h | 2 +- src/table/string_colours.h | 2 +- src/table/train_sprites.h | 6 +- src/table/tree_land.h | 4 +- src/table/unicode.h | 4 +- src/terraform_gui.cpp | 2 +- src/tests/string_func.cpp | 6 +- src/textbuf.cpp | 2 +- src/textfile_gui.cpp | 12 +- src/tgp.cpp | 4 +- src/tile_map.h | 4 +- src/tilehighlight_type.h | 4 +- src/town.h | 10 +- src/town_cmd.cpp | 20 +- src/town_cmd.h | 2 +- src/town_map.h | 28 +-- src/town_type.h | 8 +- src/townname.cpp | 6 +- src/townname_type.h | 2 +- src/track_type.h | 6 +- src/train.h | 12 +- src/train_cmd.cpp | 18 +- src/transparency.h | 2 +- src/transparency_gui.cpp | 2 +- src/transport_type.h | 2 +- src/tree_cmd.cpp | 12 +- src/tree_cmd.h | 2 +- src/tree_gui.cpp | 6 +- src/tunnelbridge_cmd.cpp | 12 +- src/tunnelbridge_cmd.h | 6 +- src/vehicle.cpp | 8 +- src/vehicle_base.h | 38 ++-- src/vehicle_cmd.cpp | 20 +- src/vehicle_cmd.h | 2 +- src/vehicle_func.h | 6 +- src/vehicle_gui.cpp | 12 +- src/vehicle_gui.h | 2 +- src/vehicle_gui_base.h | 6 +- src/vehicle_type.h | 4 +- src/vehiclelist.cpp | 4 +- src/vehiclelist.h | 2 +- src/video/allegro_v.cpp | 6 +- src/video/cocoa/cocoa_keys.h | 2 +- src/video/dedicated_v.cpp | 2 +- src/video/opengl.cpp | 14 +- src/video/opengl.h | 2 +- src/video/sdl2_v.cpp | 8 +- src/video/sdl_v.cpp | 6 +- src/video/win32_v.cpp | 6 +- src/viewport.cpp | 12 +- src/viewport_type.h | 2 +- src/water_cmd.cpp | 2 +- src/water_map.h | 6 +- src/waypoint_base.h | 2 +- src/waypoint_cmd.cpp | 12 +- src/waypoint_cmd.h | 4 +- src/widgets/dropdown.cpp | 2 +- src/widgets/slider_func.h | 2 +- src/window.cpp | 2 +- src/window_gui.h | 4 +- src/zoom_type.h | 2 +- 355 files changed, 1654 insertions(+), 1656 deletions(-) diff --git a/CODINGSTYLE.md b/CODINGSTYLE.md index 263b495333..555bd5f681 100644 --- a/CODINGSTYLE.md +++ b/CODINGSTYLE.md @@ -248,7 +248,7 @@ Templates are a very powerful C++ tool, but they can easily confuse beginners. T * Templates are to be documented in a very clear and verbose manner. Never assume anything in the documentation. * the template keyword and the template layout get a separate line. typenames are either "T" or preceded by a "T", integers get a single capital letter or a descriptive name preceded by "T". ```c++ -template +template int Func(); ``` diff --git a/src/3rdparty/md5/md5.h b/src/3rdparty/md5/md5.h index 29c7167944..a19f159168 100644 --- a/src/3rdparty/md5/md5.h +++ b/src/3rdparty/md5/md5.h @@ -57,8 +57,8 @@ static const size_t MD5_HASH_BYTES = 16; /** Container for storing a MD5 hash/checksum/digest. */ -struct MD5Hash : std::array { - MD5Hash() : std::array{} {} +struct MD5Hash : std::array { + MD5Hash() : std::array{} {} /** * Exclusively-or the given hash into this hash. diff --git a/src/aircraft.h b/src/aircraft.h index 3ac5a6102e..ef33f85898 100644 --- a/src/aircraft.h +++ b/src/aircraft.h @@ -73,14 +73,14 @@ struct AircraftCache { */ struct Aircraft final : public SpecializedVehicle { uint16_t crashed_counter; ///< Timer for handling crash animations. - byte pos; ///< Next desired position of the aircraft. - byte previous_pos; ///< Previous desired position of the aircraft. + uint8_t pos; ///< Next desired position of the aircraft. + uint8_t previous_pos; ///< Previous desired position of the aircraft. StationID targetairport; ///< Airport to go to next. - byte state; ///< State of the airport. @see AirportMovementStates + uint8_t state; ///< State of the airport. @see AirportMovementStates Direction last_direction; - byte number_consecutive_turns; ///< Protection to prevent the aircraft of making a lot of turns in order to reach a specific point. - byte turn_counter; ///< Ticks between each turn to prevent > 45 degree turns. - byte flags; ///< Aircraft flags. @see AirVehicleFlags + uint8_t number_consecutive_turns; ///< Protection to prevent the aircraft of making a lot of turns in order to reach a specific point. + uint8_t turn_counter; ///< Ticks between each turn to prevent > 45 degree turns. + uint8_t flags; ///< Aircraft flags. @see AirVehicleFlags AircraftCache acache; diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index ba1e8fbfa8..a85bc5c71b 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -655,7 +655,7 @@ static int UpdateAircraftSpeed(Aircraft *v, uint speed_limit = SPEED_LIMIT_NONE, * ~ acceleration * 77 (km-ish/h / 256) */ uint spd = v->acceleration * 77; - byte t; + uint8_t t; /* Adjust speed limits by plane speed factor to prevent taxiing * and take-off speeds being too low. */ @@ -672,7 +672,7 @@ static int UpdateAircraftSpeed(Aircraft *v, uint speed_limit = SPEED_LIMIT_NONE, speed_limit = v->vcache.cached_max_speed; } - v->subspeed = (t = v->subspeed) + (byte)spd; + v->subspeed = (t = v->subspeed) + (uint8_t)spd; /* Aircraft's current speed is used twice so that very fast planes are * forced to slow down rapidly in the short distance needed. The magic @@ -699,7 +699,7 @@ static int UpdateAircraftSpeed(Aircraft *v, uint speed_limit = SPEED_LIMIT_NONE, spd = v->GetOldAdvanceSpeed(spd); spd += v->progress; - v->progress = (byte)spd; + v->progress = (uint8_t)spd; return spd >> 8; } @@ -825,7 +825,7 @@ template int GetAircraftFlightLevel(Aircraft *v, bool takeoff); * @param rotation The rotation of the airport. * @return The index of the entry point */ -static byte AircraftGetEntryPoint(const Aircraft *v, const AirportFTAClass *apc, Direction rotation) +static uint8_t AircraftGetEntryPoint(const Aircraft *v, const AirportFTAClass *apc, Direction rotation) { assert(v != nullptr); assert(apc != nullptr); @@ -1666,7 +1666,7 @@ static void AircraftEventHandler_Flying(Aircraft *v, const AirportFTAClass *apc) /* {32,FLYING,NOTHING_block,37}, {32,LANDING,N,33}, {32,HELILANDING,N,41}, * if it is an airplane, look for LANDING, for helicopter HELILANDING * it is possible to choose from multiple landing runways, so loop until a free one is found */ - byte landingtype = (v->subtype == AIR_HELICOPTER) ? HELILANDING : LANDING; + uint8_t landingtype = (v->subtype == AIR_HELICOPTER) ? HELILANDING : LANDING; const AirportFTA *current = apc->layout[v->pos].next; while (current != nullptr) { if (current->heading == landingtype) { @@ -1813,8 +1813,8 @@ static bool AirportMove(Aircraft *v, const AirportFTAClass *apc) const AirportFTA *current = &apc->layout[v->pos]; /* we have arrived in an important state (eg terminal, hangar, etc.) */ if (current->heading == v->state) { - byte prev_pos = v->pos; // location could be changed in state, so save it before-hand - byte prev_state = v->state; + uint8_t prev_pos = v->pos; // location could be changed in state, so save it before-hand + uint8_t prev_state = v->state; _aircraft_state_handlers[v->state](v, apc); if (v->state != FLYING) v->previous_pos = prev_pos; if (v->state != prev_state || v->pos != prev_pos) UpdateAircraftCache(v); @@ -1950,7 +1950,7 @@ static const MovementTerminalMapping _airport_terminal_mapping[] = { * @param last_terminal Terminal number to stop examining. * @return A terminal or helipad has been found, and has been assigned to the aircraft. */ -static bool FreeTerminal(Aircraft *v, byte i, byte last_terminal) +static bool FreeTerminal(Aircraft *v, uint8_t i, uint8_t last_terminal) { assert(last_terminal <= lengthof(_airport_terminal_mapping)); Station *st = Station::Get(v->targetairport); diff --git a/src/airport.cpp b/src/airport.cpp index 936087f3c0..a1e68b0629 100644 --- a/src/airport.cpp +++ b/src/airport.cpp @@ -110,12 +110,12 @@ AirportMovingData RotateAirportMovingData(const AirportMovingData *orig, Directi AirportFTAClass::AirportFTAClass( const AirportMovingData *moving_data_, - const byte *terminals_, - const byte num_helipads_, - const byte *entry_points_, + const uint8_t *terminals_, + const uint8_t num_helipads_, + const uint8_t *entry_points_, Flags flags_, const AirportFTAbuildup *apFA, - byte delta_z_ + uint8_t delta_z_ ) : moving_data(moving_data_), terminals(terminals_), @@ -204,7 +204,7 @@ static AirportFTA *AirportBuildAutomata(uint nofelements, const AirportFTAbuildu * @param airport_type %Airport type to query FTA from. @see AirportTypes * @return Finite state machine of the airport. */ -const AirportFTAClass *GetAirport(const byte airport_type) +const AirportFTAClass *GetAirport(const uint8_t airport_type) { if (airport_type == AT_DUMMY) return &_airportfta_dummy; return AirportSpec::Get(airport_type)->fsm; @@ -215,7 +215,7 @@ const AirportFTAClass *GetAirport(const byte airport_type) * @param hangar_tile The tile on which the vehicle is build * @return The position (index in airport node array) where the aircraft ends up */ -byte GetVehiclePosOnBuild(TileIndex hangar_tile) +uint8_t GetVehiclePosOnBuild(TileIndex hangar_tile) { const Station *st = Station::GetByTile(hangar_tile); const AirportFTAClass *apc = st->airport.GetFTA(); diff --git a/src/airport.h b/src/airport.h index ac831c0971..d5df10e275 100644 --- a/src/airport.h +++ b/src/airport.h @@ -152,12 +152,12 @@ public: AirportFTAClass( const AirportMovingData *moving_data, - const byte *terminals, - const byte num_helipads, - const byte *entry_points, + const uint8_t *terminals, + const uint8_t num_helipads, + const uint8_t *entry_points, Flags flags, const AirportFTAbuildup *apFA, - byte delta_z + uint8_t delta_z ); ~AirportFTAClass(); @@ -167,7 +167,7 @@ public: * @param position Element number to get movement data about. * @return Pointer to the movement data. */ - const AirportMovingData *MovingData(byte position) const + const AirportMovingData *MovingData(uint8_t position) const { assert(position < nofelements); return &moving_data[position]; @@ -175,12 +175,12 @@ public: const AirportMovingData *moving_data; ///< Movement data. struct AirportFTA *layout; ///< state machine for airport - const byte *terminals; ///< %Array with the number of terminal groups, followed by the number of terminals in each group. - const byte num_helipads; ///< Number of helipads on this airport. When 0 helicopters will go to normal terminals. + const uint8_t *terminals; ///< %Array with the number of terminal groups, followed by the number of terminals in each group. + const uint8_t num_helipads; ///< Number of helipads on this airport. When 0 helicopters will go to normal terminals. Flags flags; ///< Flags for this airport type. - byte nofelements; ///< number of positions the airport consists of - const byte *entry_points; ///< when an airplane arrives at this airport, enter it at position entry_point, index depends on direction - byte delta_z; ///< Z adjustment for helicopter pads + uint8_t nofelements; ///< number of positions the airport consists of + const uint8_t *entry_points; ///< when an airplane arrives at this airport, enter it at position entry_point, index depends on direction + uint8_t delta_z; ///< Z adjustment for helicopter pads }; DECLARE_ENUM_AS_BIT_SET(AirportFTAClass::Flags) @@ -190,12 +190,12 @@ DECLARE_ENUM_AS_BIT_SET(AirportFTAClass::Flags) struct AirportFTA { AirportFTA *next; ///< possible extra movement choices from this position uint64_t block; ///< 64 bit blocks (st->airport.flags), should be enough for the most complex airports - byte position; ///< the position that an airplane is at - byte next_position; ///< next position from this position - byte heading; ///< heading (current orders), guiding an airplane to its target on an airport + uint8_t position; ///< the position that an airplane is at + uint8_t next_position; ///< next position from this position + uint8_t heading; ///< heading (current orders), guiding an airplane to its target on an airport }; -const AirportFTAClass *GetAirport(const byte airport_type); -byte GetVehiclePosOnBuild(TileIndex hangar_tile); +const AirportFTAClass *GetAirport(const uint8_t airport_type); +uint8_t GetVehiclePosOnBuild(TileIndex hangar_tile); #endif /* AIRPORT_H */ diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index ef80d44a9b..6f942428f9 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -41,11 +41,11 @@ static AirportClassID _selected_airport_class; ///< the currently visible airport class static int _selected_airport_index; ///< the index of the selected airport in the current class or -1 -static byte _selected_airport_layout; ///< selected airport layout number. +static uint8_t _selected_airport_layout; ///< selected airport layout number. static void ShowBuildAirportPicker(Window *parent); -SpriteID GetCustomAirportSprite(const AirportSpec *as, byte layout); +SpriteID GetCustomAirportSprite(const AirportSpec *as, uint8_t layout); void CcBuildAirport(Commands, const CommandCost &result, TileIndex tile) { @@ -63,8 +63,8 @@ static void PlaceAirport(TileIndex tile) { if (_selected_airport_index == -1) return; - byte airport_type = AirportClass::Get(_selected_airport_class)->GetSpec(_selected_airport_index)->GetIndex(); - byte layout = _selected_airport_layout; + uint8_t airport_type = AirportClass::Get(_selected_airport_class)->GetSpec(_selected_airport_index)->GetIndex(); + uint8_t layout = _selected_airport_layout; bool adjacent = _ctrl_pressed; auto proc = [=](bool test, StationID to_join) -> bool { @@ -347,7 +347,7 @@ public: for (int i = 0; i < NUM_AIRPORTS; i++) { const AirportSpec *as = AirportSpec::Get(i); if (!as->enabled) continue; - for (byte layout = 0; layout < as->num_table; layout++) { + for (uint8_t layout = 0; layout < as->num_table; layout++) { SpriteID sprite = GetCustomAirportSprite(as, layout); if (sprite != 0) { Dimension d = GetSpriteSize(sprite); @@ -363,7 +363,7 @@ public: for (int i = NEW_AIRPORT_OFFSET; i < NUM_AIRPORTS; i++) { const AirportSpec *as = AirportSpec::Get(i); if (!as->enabled) continue; - for (byte layout = 0; layout < as->num_table; layout++) { + for (uint8_t layout = 0; layout < as->num_table; layout++) { StringID string = GetAirportTextCallback(as, layout, CBID_AIRPORT_ADDITIONAL_TEXT); if (string == STR_UNDEFINED) continue; diff --git a/src/autoreplace_cmd.cpp b/src/autoreplace_cmd.cpp index 010e773e30..757f18d371 100644 --- a/src/autoreplace_cmd.cpp +++ b/src/autoreplace_cmd.cpp @@ -362,7 +362,7 @@ static CommandCost BuildReplacementVehicle(Vehicle *old_veh, Vehicle **new_vehic /* Refit the vehicle if needed */ if (refit_cargo != CARGO_NO_REFIT) { - byte subtype = GetBestFittingSubType(old_veh, new_veh, refit_cargo); + uint8_t subtype = GetBestFittingSubType(old_veh, new_veh, refit_cargo); cost.AddCost(std::get<0>(Command::Do(DC_EXEC, new_veh->index, refit_cargo, subtype, false, false, 0))); assert(cost.Succeeded()); // This should be ensured by GetNewCargoTypeForReplace() diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index c494f24126..f4586350ee 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -85,7 +85,7 @@ class ReplaceVehicleWindow : public Window { bool reset_sel_engine; ///< Also reset #sel_engine while updating left and/or right and no valid engine selected. GroupID sel_group; ///< Group selected to replace. int details_height; ///< Minimal needed height of the details panels, in text lines (found so far). - byte sort_criteria; ///< Criteria of sorting vehicles. + uint8_t sort_criteria; ///< Criteria of sorting vehicles. bool descending_sort_order; ///< Order of sorting vehicles. bool show_hidden_engines; ///< Whether to show the hidden engines. RailType sel_railtype; ///< Type of rail tracks selected. #INVALID_RAILTYPE to show all. @@ -143,7 +143,7 @@ class ReplaceVehicleWindow : public Window { std::vector variants; EngineID selected_engine = INVALID_ENGINE; VehicleType type = (VehicleType)this->window_number; - byte side = draw_left ? 0 : 1; + uint8_t side = draw_left ? 0 : 1; GUIEngineList list; @@ -607,7 +607,7 @@ public: case WID_RV_LEFT_MATRIX: case WID_RV_RIGHT_MATRIX: { - byte click_side; + uint8_t click_side; if (widget == WID_RV_LEFT_MATRIX) { click_side = 0; } else { diff --git a/src/base_media_base.h b/src/base_media_base.h index 5d74cb1a0d..92396cd616 100644 --- a/src/base_media_base.h +++ b/src/base_media_base.h @@ -314,7 +314,7 @@ static const uint NUM_SONGS_PLAYLIST = 32; /* Functions to read DOS music CAT files, similar to but not quite the same as sound effect CAT files */ char *GetMusicCatEntryName(const std::string &filename, size_t entrynum); -byte *GetMusicCatEntryData(const std::string &filename, size_t entrynum, size_t &entrylen); +uint8_t *GetMusicCatEntryData(const std::string &filename, size_t entrynum, size_t &entrylen); enum MusicTrackType { MTT_STANDARDMIDI, ///< Standard MIDI file @@ -324,7 +324,7 @@ enum MusicTrackType { /** Metadata about a music track. */ struct MusicSongInfo { std::string songname; ///< name of song displayed in UI - byte tracknr; ///< track number of song displayed in UI + uint8_t tracknr; ///< track number of song displayed in UI std::string filename; ///< file on disk containing song (when used in MusicSet class) MusicTrackType filetype; ///< decoder required for song file int cat_index; ///< entry index in CAT file, for filetype==MTT_MPSMIDI @@ -338,7 +338,7 @@ struct MusicSet : BaseSet { /** Data about individual songs in set. */ MusicSongInfo songinfo[NUM_SONGS_AVAILABLE]; /** Number of valid songs in set. */ - byte num_available; + uint8_t num_available; bool FillSetDetails(const IniFile &ini, const std::string &path, const std::string &full_filename); }; diff --git a/src/base_station_base.h b/src/base_station_base.h index 91f1ec127e..b414183b9c 100644 --- a/src/base_station_base.h +++ b/src/base_station_base.h @@ -59,7 +59,7 @@ struct StationRect : public Rect { struct BaseStation : StationPool::PoolItem<&_station_pool> { TileIndex xy; ///< Base tile of the station TrackedViewportSign sign; ///< NOSAVE: Dimensions of sign - byte delete_ctr; ///< Delete counter. If greater than 0 then it is decremented until it reaches 0; the waypoint is then is deleted. + uint8_t delete_ctr; ///< Delete counter. If greater than 0 then it is decremented until it reaches 0; the waypoint is then is deleted. std::string name; ///< Custom name StringID string_id; ///< Default name (town area) of station @@ -75,7 +75,7 @@ struct BaseStation : StationPool::PoolItem<&_station_pool> { TimerGameCalendar::Date build_date; ///< Date of construction uint16_t random_bits; ///< Random bits assigned to this station - byte waiting_triggers; ///< Waiting triggers (NewGRF) for this station + uint8_t waiting_triggers; ///< Waiting triggers (NewGRF) for this station uint8_t cached_anim_triggers; ///< NOSAVE: Combined animation trigger bitmask, used to determine if trigger processing should happen. uint8_t cached_roadstop_anim_triggers; ///< NOSAVE: Combined animation trigger bitmask for road stops, used to determine if trigger processing should happen. CargoTypes cached_cargo_triggers; ///< NOSAVE: Combined cargo trigger bitmask @@ -113,7 +113,7 @@ struct BaseStation : StationPool::PoolItem<&_station_pool> { * @param available will return false if ever the variable asked for does not exist * @return the value stored in the corresponding variable */ - virtual uint32_t GetNewGRFVariable(const struct ResolverObject &object, byte variable, byte parameter, bool *available) const = 0; + virtual uint32_t GetNewGRFVariable(const struct ResolverObject &object, uint8_t variable, uint8_t parameter, bool *available) const = 0; /** * Update the coordinated of the sign (as shown in the viewport). @@ -179,7 +179,7 @@ struct BaseStation : StationPool::PoolItem<&_station_pool> { return (this->facilities & ~FACIL_WAYPOINT) != 0; } - inline byte GetRoadStopRandomBits(TileIndex tile) const + inline uint8_t GetRoadStopRandomBits(TileIndex tile) const { for (const RoadStopTileData &tile_data : this->custom_roadstop_tile_data) { if (tile_data.tile == tile) return tile_data.random_bits; @@ -187,7 +187,7 @@ struct BaseStation : StationPool::PoolItem<&_station_pool> { return 0; } - inline byte GetRoadStopAnimationFrame(TileIndex tile) const + inline uint8_t GetRoadStopAnimationFrame(TileIndex tile) const { for (const RoadStopTileData &tile_data : this->custom_roadstop_tile_data) { if (tile_data.tile == tile) return tile_data.animation_frame; @@ -196,11 +196,11 @@ struct BaseStation : StationPool::PoolItem<&_station_pool> { } private: - void SetRoadStopTileData(TileIndex tile, byte data, bool animation); + void SetRoadStopTileData(TileIndex tile, uint8_t data, bool animation); public: - inline void SetRoadStopRandomBits(TileIndex tile, byte random_bits) { this->SetRoadStopTileData(tile, random_bits, false); } - inline void SetRoadStopAnimationFrame(TileIndex tile, byte frame) { this->SetRoadStopTileData(tile, frame, true); } + inline void SetRoadStopRandomBits(TileIndex tile, uint8_t random_bits) { this->SetRoadStopTileData(tile, random_bits, false); } + inline void SetRoadStopAnimationFrame(TileIndex tile, uint8_t frame) { this->SetRoadStopTileData(tile, frame, true); } void RemoveRoadStopTileData(TileIndex tile); static void PostDestructor(size_t index); diff --git a/src/blitter/32bpp_anim.cpp b/src/blitter/32bpp_anim.cpp index 0c2612fcde..d118d75f7a 100644 --- a/src/blitter/32bpp_anim.cpp +++ b/src/blitter/32bpp_anim.cpp @@ -34,23 +34,23 @@ inline void Blitter_32bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel const uint16_t *src_n = (const uint16_t *)(src->data + src->offset[zoom][1]); for (uint i = bp->skip_top; i != 0; i--) { - src_px = (const Colour *)((const byte *)src_px + *(const uint32_t *)src_px); - src_n = (const uint16_t *)((const byte *)src_n + *(const uint32_t *)src_n); + src_px = (const Colour *)((const uint8_t *)src_px + *(const uint32_t *)src_px); + src_n = (const uint16_t *)((const uint8_t *)src_n + *(const uint32_t *)src_n); } Colour *dst = (Colour *)bp->dst + bp->top * bp->pitch + bp->left; uint16_t *anim = this->anim_buf + this->ScreenToAnimOffset((uint32_t *)bp->dst) + bp->top * this->anim_buf_pitch + bp->left; - const byte *remap = bp->remap; // store so we don't have to access it via bp every time + const uint8_t *remap = bp->remap; // store so we don't have to access it via bp every time for (int y = 0; y < bp->height; y++) { Colour *dst_ln = dst + bp->pitch; uint16_t *anim_ln = anim + this->anim_buf_pitch; - const Colour *src_px_ln = (const Colour *)((const byte *)src_px + *(const uint32_t *)src_px); + const Colour *src_px_ln = (const Colour *)((const uint8_t *)src_px + *(const uint32_t *)src_px); src_px++; - const uint16_t *src_n_ln = (const uint16_t *)((const byte *)src_n + *(const uint32_t *)src_n); + const uint16_t *src_n_ln = (const uint16_t *)((const uint8_t *)src_n + *(const uint32_t *)src_n); src_n += 2; Colour *dst_end = dst + bp->skip_left; diff --git a/src/blitter/32bpp_anim_sse4.cpp b/src/blitter/32bpp_anim_sse4.cpp index 031f0cc985..c0007f1e29 100644 --- a/src/blitter/32bpp_anim_sse4.cpp +++ b/src/blitter/32bpp_anim_sse4.cpp @@ -33,7 +33,7 @@ template remap; + const uint8_t * const remap = bp->remap; Colour *dst_line = (Colour *) bp->dst + bp->top * bp->pitch + bp->left; uint16_t *anim_line = this->anim_buf + this->ScreenToAnimOffset((uint32_t *)bp->dst) + bp->top * this->anim_buf_pitch + bp->left; int effective_width = bp->width; @@ -42,7 +42,7 @@ inline void Blitter_32bppSSE4_Anim::Draw(const BlitterParams *bp, ZoomLevel zoom const Blitter_32bppSSE_Base::SpriteData * const sd = (const Blitter_32bppSSE_Base::SpriteData *) bp->sprite; const SpriteInfo * const si = &sd->infos[zoom]; const MapValue *src_mv_line = (const MapValue *) &sd->data[si->mv_offset] + bp->skip_top * si->sprite_width; - const Colour *src_rgba_line = (const Colour *) ((const byte *) &sd->data[si->sprite_offset] + bp->skip_top * si->sprite_line_size); + const Colour *src_rgba_line = (const Colour *) ((const uint8_t *) &sd->data[si->sprite_offset] + bp->skip_top * si->sprite_line_size); if (read_mode != RM_WITH_MARGIN) { src_rgba_line += bp->skip_left; @@ -104,20 +104,20 @@ inline void Blitter_32bppSSE4_Anim::Draw(const BlitterParams *bp, ZoomLevel zoom if (animated) { /* Remap colours. */ - const byte m0 = mvX2; + const uint8_t m0 = mvX2; if (m0 >= PALETTE_ANIM_START) { const Colour c0 = (this->LookupColourInPalette(m0).data & 0x00FFFFFF) | (src[0].data & 0xFF000000); - InsertFirstUint32(AdjustBrightneSSE(c0, (byte) (mvX2 >> 8)).data, srcABCD); + InsertFirstUint32(AdjustBrightneSSE(c0, (uint8_t) (mvX2 >> 8)).data, srcABCD); } - const byte m1 = mvX2 >> 16; + const uint8_t m1 = mvX2 >> 16; if (m1 >= PALETTE_ANIM_START) { const Colour c1 = (this->LookupColourInPalette(m1).data & 0x00FFFFFF) | (src[1].data & 0xFF000000); - InsertSecondUint32(AdjustBrightneSSE(c1, (byte) (mvX2 >> 24)).data, srcABCD); + InsertSecondUint32(AdjustBrightneSSE(c1, (uint8_t) (mvX2 >> 24)).data, srcABCD); } /* Update anim buffer. */ - const byte a0 = src[0].a; - const byte a1 = src[1].a; + const uint8_t a0 = src[0].a; + const uint8_t a1 = src[1].a; uint32_t anim01 = 0; if (a0 == 255) { if (a1 == 255) { @@ -185,9 +185,9 @@ bmno_full_transparency: __m128i dstABCD = _mm_loadl_epi64((__m128i*) dst); /* Remap colours. */ - const uint m0 = (byte) mvX2; + const uint m0 = (uint8_t) mvX2; const uint r0 = remap[m0]; - const uint m1 = (byte) (mvX2 >> 16); + const uint m1 = (uint8_t) (mvX2 >> 16); const uint r1 = remap[m1]; if (mvX2 & 0x00FF00FF) { #define CMOV_REMAP(m_colour, m_colour_init, m_src, m_m) \ @@ -195,7 +195,7 @@ bmno_full_transparency: Colour m_colour = m_colour_init; \ { \ const Colour srcm = (Colour) (m_src); \ - const uint m = (byte) (m_m); \ + const uint m = (uint8_t) (m_m); \ const uint r = remap[m]; \ const Colour cmap = (this->LookupColourInPalette(r).data & 0x00FFFFFF) | (srcm.data & 0xFF000000); \ m_colour = r == 0 ? m_colour : cmap; \ @@ -225,8 +225,8 @@ bmno_full_transparency: /* Update anim buffer. */ if (animated) { - const byte a0 = src[0].a; - const byte a1 = src[1].a; + const uint8_t a0 = src[0].a; + const uint8_t a1 = src[1].a; uint32_t anim01 = mvX2 & 0xFF00FF00; if (a0 == 255) { anim01 |= r0; @@ -368,7 +368,7 @@ bmcr_alpha_blend_single: next_line: if (mode != BM_TRANSPARENT && mode != BM_TRANSPARENT_REMAP) src_mv_line += si->sprite_width; - src_rgba_line = (const Colour*) ((const byte*) src_rgba_line + si->sprite_line_size); + src_rgba_line = (const Colour*) ((const uint8_t*) src_rgba_line + si->sprite_line_size); dst_line += bp->pitch; anim_line += this->anim_buf_pitch; } diff --git a/src/blitter/32bpp_optimized.cpp b/src/blitter/32bpp_optimized.cpp index 15b607a9a7..65fa193576 100644 --- a/src/blitter/32bpp_optimized.cpp +++ b/src/blitter/32bpp_optimized.cpp @@ -40,26 +40,26 @@ inline void Blitter_32bppOptimized::Draw(const Blitter::BlitterParams *bp, ZoomL /* skip upper lines in src_px and src_n */ for (uint i = bp->skip_top; i != 0; i--) { - src_px = (const Colour *)((const byte *)src_px + *(const uint32_t *)src_px); - src_n = (const uint16_t *)((const byte *)src_n + *(const uint32_t *)src_n); + src_px = (const Colour *)((const uint8_t *)src_px + *(const uint32_t *)src_px); + src_n = (const uint16_t *)((const uint8_t *)src_n + *(const uint32_t *)src_n); } /* skip lines in dst */ Colour *dst = (Colour *)bp->dst + bp->top * bp->pitch + bp->left; /* store so we don't have to access it via bp every time (compiler assumes pointer aliasing) */ - const byte *remap = bp->remap; + const uint8_t *remap = bp->remap; for (int y = 0; y < bp->height; y++) { /* next dst line begins here */ Colour *dst_ln = dst + bp->pitch; /* next src line begins here */ - const Colour *src_px_ln = (const Colour *)((const byte *)src_px + *(const uint32_t *)src_px); + const Colour *src_px_ln = (const Colour *)((const uint8_t *)src_px + *(const uint32_t *)src_px); src_px++; /* next src_n line begins here */ - const uint16_t *src_n_ln = (const uint16_t *)((const byte *)src_n + *(const uint32_t *)src_n); + const uint16_t *src_n_ln = (const uint16_t *)((const uint8_t *)src_n + *(const uint32_t *)src_n); src_n += 2; /* we will end this line when we reach this point */ @@ -405,8 +405,8 @@ template Sprite *Blitter_32bppOptimized::EncodeInternal(const dst_n_ln = (uint32_t *)dst_n; } - lengths[z][0] = (byte *)dst_px_ln - (byte *)dst_px_orig[z]; // all are aligned to 4B boundary - lengths[z][1] = (byte *)dst_n_ln - (byte *)dst_n_orig[z]; + lengths[z][0] = (uint8_t *)dst_px_ln - (uint8_t *)dst_px_orig[z]; // all are aligned to 4B boundary + lengths[z][1] = (uint8_t *)dst_n_ln - (uint8_t *)dst_n_orig[z]; } uint len = 0; // total length of data diff --git a/src/blitter/32bpp_optimized.hpp b/src/blitter/32bpp_optimized.hpp index e40a0ec667..3c332ceeda 100644 --- a/src/blitter/32bpp_optimized.hpp +++ b/src/blitter/32bpp_optimized.hpp @@ -18,7 +18,7 @@ public: /** Data stored about a (single) sprite. */ struct SpriteData { uint32_t offset[ZOOM_LVL_END][2]; ///< Offsets (from .data) to streams for different zoom levels, and the normal and remap image information. - byte data[]; ///< Data, all zoomlevels. + uint8_t data[]; ///< Data, all zoomlevels. }; void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; diff --git a/src/blitter/32bpp_sse2.cpp b/src/blitter/32bpp_sse2.cpp index 1638127b56..6c486d1b5e 100644 --- a/src/blitter/32bpp_sse2.cpp +++ b/src/blitter/32bpp_sse2.cpp @@ -114,7 +114,7 @@ Sprite *Blitter_32bppSSE_Base::Encode(const SpriteLoader::SpriteCollection &spri (*dst_rgba_line).data = nb_pix_transp; Colour *nb_right = dst_rgba_line + 1; - dst_rgba_line = (Colour*) ((byte*) dst_rgba_line + sd.infos[z].sprite_line_size); + dst_rgba_line = (Colour*) ((uint8_t*) dst_rgba_line + sd.infos[z].sprite_line_size); /* Count the number of transparent pixels from the right. */ dst_rgba = dst_rgba_line - 1; diff --git a/src/blitter/32bpp_sse2.hpp b/src/blitter/32bpp_sse2.hpp index fa643dd3cd..85bfc6e027 100644 --- a/src/blitter/32bpp_sse2.hpp +++ b/src/blitter/32bpp_sse2.hpp @@ -73,7 +73,7 @@ public: struct SpriteData { SpriteFlags flags; SpriteInfo infos[ZOOM_LVL_END]; - byte data[]; ///< Data, all zoomlevels. + uint8_t data[]; ///< Data, all zoomlevels. }; Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator); diff --git a/src/blitter/32bpp_sse_func.hpp b/src/blitter/32bpp_sse_func.hpp index 93ec415dda..e02a232648 100644 --- a/src/blitter/32bpp_sse_func.hpp +++ b/src/blitter/32bpp_sse_func.hpp @@ -214,7 +214,7 @@ inline void Blitter_32bppSSSE3::Draw(const Blitter::BlitterParams *bp, ZoomLevel inline void Blitter_32bppSSE4::Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom) #endif { - const byte * const remap = bp->remap; + const uint8_t * const remap = bp->remap; Colour *dst_line = (Colour *) bp->dst + bp->top * bp->pitch + bp->left; int effective_width = bp->width; @@ -222,7 +222,7 @@ inline void Blitter_32bppSSE4::Draw(const Blitter::BlitterParams *bp, ZoomLevel const SpriteData * const sd = (const SpriteData *) bp->sprite; const SpriteInfo * const si = &sd->infos[zoom]; const MapValue *src_mv_line = (const MapValue *) &sd->data[si->mv_offset] + bp->skip_top * si->sprite_width; - const Colour *src_rgba_line = (const Colour *) ((const byte *) &sd->data[si->sprite_offset] + bp->skip_top * si->sprite_line_size); + const Colour *src_rgba_line = (const Colour *) ((const uint8_t *) &sd->data[si->sprite_offset] + bp->skip_top * si->sprite_line_size); if (read_mode != RM_WITH_MARGIN) { src_rgba_line += bp->skip_left; @@ -307,7 +307,7 @@ inline void Blitter_32bppSSE4::Draw(const Blitter::BlitterParams *bp, ZoomLevel Colour m_colour = m_colour_init; \ { \ const Colour srcm = (Colour) (m_src); \ - const uint m = (byte) (m_m); \ + const uint m = (uint8_t) (m_m); \ const uint r = remap[m]; \ const Colour cmap = (this->LookupColourInPalette(r).data & 0x00FFFFFF) | (srcm.data & 0xFF000000); \ m_colour = r == 0 ? m_colour : cmap; \ @@ -435,7 +435,7 @@ bmcr_alpha_blend_single: next_line: if (mode == BM_COLOUR_REMAP || mode == BM_CRASH_REMAP) src_mv_line += si->sprite_width; - src_rgba_line = (const Colour*) ((const byte*) src_rgba_line + si->sprite_line_size); + src_rgba_line = (const Colour*) ((const uint8_t*) src_rgba_line + si->sprite_line_size); dst_line += bp->pitch; } } diff --git a/src/blitter/40bpp_anim.cpp b/src/blitter/40bpp_anim.cpp index e65a1d7151..cf2ee68897 100644 --- a/src/blitter/40bpp_anim.cpp +++ b/src/blitter/40bpp_anim.cpp @@ -104,8 +104,8 @@ inline void Blitter_40bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel /* skip upper lines in src_px and src_n */ for (uint i = bp->skip_top; i != 0; i--) { - src_px = (const Colour *)((const byte *)src_px + *(const uint32_t *)src_px); - src_n = (const uint16_t *)((const byte *)src_n + *(const uint32_t *)src_n); + src_px = (const Colour *)((const uint8_t *)src_px + *(const uint32_t *)src_px); + src_n = (const uint16_t *)((const uint8_t *)src_n + *(const uint32_t *)src_n); } /* skip lines in dst */ @@ -114,7 +114,7 @@ inline void Blitter_40bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel uint8_t *anim = VideoDriver::GetInstance()->GetAnimBuffer() + ((uint32_t *)bp->dst - (uint32_t *)_screen.dst_ptr) + bp->top * bp->pitch + bp->left; /* store so we don't have to access it via bp everytime (compiler assumes pointer aliasing) */ - const byte *remap = bp->remap; + const uint8_t *remap = bp->remap; for (int y = 0; y < bp->height; y++) { /* next dst line begins here */ @@ -122,11 +122,11 @@ inline void Blitter_40bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel uint8_t *anim_ln = anim + bp->pitch; /* next src line begins here */ - const Colour *src_px_ln = (const Colour *)((const byte *)src_px + *(const uint32_t *)src_px); + const Colour *src_px_ln = (const Colour *)((const uint8_t *)src_px + *(const uint32_t *)src_px); src_px++; /* next src_n line begins here */ - const uint16_t *src_n_ln = (const uint16_t *)((const byte *)src_n + *(const uint32_t *)src_n); + const uint16_t *src_n_ln = (const uint16_t *)((const uint8_t *)src_n + *(const uint32_t *)src_n); src_n += 2; /* we will end this line when we reach this point */ diff --git a/src/blitter/8bpp_optimized.cpp b/src/blitter/8bpp_optimized.cpp index 3758e3a80a..710f117255 100644 --- a/src/blitter/8bpp_optimized.cpp +++ b/src/blitter/8bpp_optimized.cpp @@ -147,10 +147,10 @@ Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::SpriteCollection &spri /* Don't allocate memory each time, but just keep some * memory around as this function is called quite often * and the memory usage is quite low. */ - static ReusableBuffer temp_buffer; + static ReusableBuffer temp_buffer; SpriteData *temp_dst = (SpriteData *)temp_buffer.Allocate(memory); memset(temp_dst, 0, sizeof(*temp_dst)); - byte *dst = temp_dst->data; + uint8_t *dst = temp_dst->data; /* Make the sprites per zoom-level */ for (ZoomLevel i = zoom_min; i <= zoom_max; i++) { @@ -166,7 +166,7 @@ Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::SpriteCollection &spri uint trans = 0; uint pixels = 0; uint last_colour = 0; - byte *count_dst = nullptr; + uint8_t *count_dst = nullptr; /* Store the scaled image */ const SpriteLoader::CommonPixel *src = &sprite[i].data[y * sprite[i].width]; @@ -213,7 +213,7 @@ Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::SpriteCollection &spri } } - uint size = dst - (byte *)temp_dst; + uint size = dst - (uint8_t *)temp_dst; /* Safety check, to make sure we guessed the size correctly */ assert(size < memory); diff --git a/src/blitter/8bpp_optimized.hpp b/src/blitter/8bpp_optimized.hpp index 39a7d91d22..f55586170d 100644 --- a/src/blitter/8bpp_optimized.hpp +++ b/src/blitter/8bpp_optimized.hpp @@ -19,7 +19,7 @@ public: /** Data stored about a (single) sprite. */ struct SpriteData { uint32_t offset[ZOOM_LVL_END]; ///< Offsets (from .data) to streams for different zoom levels. - byte data[]; ///< Data, all zoomlevels. + uint8_t data[]; ///< Data, all zoomlevels. }; void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; diff --git a/src/blitter/base.hpp b/src/blitter/base.hpp index 26ed39eb6d..9d79107bd3 100644 --- a/src/blitter/base.hpp +++ b/src/blitter/base.hpp @@ -31,7 +31,7 @@ public: /** Parameters related to blitting. */ struct BlitterParams { const void *sprite; ///< Pointer to the sprite how ever the encoder stored it - const byte *remap; ///< XXX -- Temporary storage for remap array + const uint8_t *remap; ///< XXX -- Temporary storage for remap array int skip_left; ///< How much pixels of the source to skip on the left (based on zoom of dst) int skip_top; ///< How much pixels of the source to skip on the top (based on zoom of dst) diff --git a/src/bmp.cpp b/src/bmp.cpp index eca61335dd..544217f51f 100644 --- a/src/bmp.cpp +++ b/src/bmp.cpp @@ -39,7 +39,7 @@ static inline bool EndOfBuffer(BmpBuffer *buffer) return buffer->pos == buffer->read; } -static inline byte ReadByte(BmpBuffer *buffer) +static inline uint8_t ReadByte(BmpBuffer *buffer) { if (buffer->read < 0) return 0; @@ -83,9 +83,9 @@ static inline void SetStreamOffset(BmpBuffer *buffer, int offset) static inline bool BmpRead1(BmpBuffer *buffer, BmpInfo *info, BmpData *data) { uint x, y, i; - byte pad = GB(4 - info->width / 8, 0, 2); - byte *pixel_row; - byte b; + uint8_t pad = GB(4 - info->width / 8, 0, 2); + uint8_t *pixel_row; + uint8_t b; for (y = info->height; y > 0; y--) { x = 0; pixel_row = &data->bitmap[(y - 1) * info->width]; @@ -110,9 +110,9 @@ static inline bool BmpRead1(BmpBuffer *buffer, BmpInfo *info, BmpData *data) static inline bool BmpRead4(BmpBuffer *buffer, BmpInfo *info, BmpData *data) { uint x, y; - byte pad = GB(4 - info->width / 2, 0, 2); - byte *pixel_row; - byte b; + uint8_t pad = GB(4 - info->width / 2, 0, 2); + uint8_t *pixel_row; + uint8_t b; for (y = info->height; y > 0; y--) { x = 0; pixel_row = &data->bitmap[(y - 1) * info->width]; @@ -140,12 +140,12 @@ static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data) { uint x = 0; uint y = info->height - 1; - byte *pixel = &data->bitmap[y * info->width]; + uint8_t *pixel = &data->bitmap[y * info->width]; while (y != 0 || x < info->width) { if (EndOfBuffer(buffer)) return false; // the file is shorter than expected - byte n = ReadByte(buffer); - byte c = ReadByte(buffer); + uint8_t n = ReadByte(buffer); + uint8_t c = ReadByte(buffer); if (n == 0) { switch (c) { case 0: // end of line @@ -159,8 +159,8 @@ static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data) case 2: { // delta if (EndOfBuffer(buffer)) return false; - byte dx = ReadByte(buffer); - byte dy = ReadByte(buffer); + uint8_t dx = ReadByte(buffer); + uint8_t dy = ReadByte(buffer); /* Check for over- and underflow. */ if (x + dx >= info->width || x + dx < x || dy > y) return false; @@ -175,7 +175,7 @@ static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data) uint i = 0; while (i++ < c) { if (EndOfBuffer(buffer) || x >= info->width) return false; - byte b = ReadByte(buffer); + uint8_t b = ReadByte(buffer); *pixel++ = GB(b, 4, 4); x++; if (i++ < c) { @@ -214,8 +214,8 @@ static inline bool BmpRead8(BmpBuffer *buffer, BmpInfo *info, BmpData *data) { uint i; uint y; - byte pad = GB(4 - info->width, 0, 2); - byte *pixel; + uint8_t pad = GB(4 - info->width, 0, 2); + uint8_t *pixel; for (y = info->height; y > 0; y--) { if (EndOfBuffer(buffer)) return false; // the file is shorter than expected pixel = &data->bitmap[(y - 1) * info->width]; @@ -233,12 +233,12 @@ static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data) { uint x = 0; uint y = info->height - 1; - byte *pixel = &data->bitmap[y * info->width]; + uint8_t *pixel = &data->bitmap[y * info->width]; while (y != 0 || x < info->width) { if (EndOfBuffer(buffer)) return false; // the file is shorter than expected - byte n = ReadByte(buffer); - byte c = ReadByte(buffer); + uint8_t n = ReadByte(buffer); + uint8_t c = ReadByte(buffer); if (n == 0) { switch (c) { case 0: // end of line @@ -252,8 +252,8 @@ static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data) case 2: { // delta if (EndOfBuffer(buffer)) return false; - byte dx = ReadByte(buffer); - byte dy = ReadByte(buffer); + uint8_t dx = ReadByte(buffer); + uint8_t dy = ReadByte(buffer); /* Check for over- and underflow. */ if (x + dx >= info->width || x + dx < x || dy > y) return false; @@ -294,8 +294,8 @@ static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data) static inline bool BmpRead24(BmpBuffer *buffer, BmpInfo *info, BmpData *data) { uint x, y; - byte pad = GB(4 - info->width * 3, 0, 2); - byte *pixel_row; + uint8_t pad = GB(4 - info->width * 3, 0, 2); + uint8_t *pixel_row; for (y = info->height; y > 0; y--) { pixel_row = &data->bitmap[(y - 1) * info->width * 3]; for (x = 0; x < info->width; x++) { @@ -395,7 +395,7 @@ bool BmpReadBitmap(BmpBuffer *buffer, BmpInfo *info, BmpData *data) { assert(info != nullptr && data != nullptr); - data->bitmap = CallocT(static_cast(info->width) * info->height * ((info->bpp == 24) ? 3 : 1)); + data->bitmap = CallocT(static_cast(info->width) * info->height * ((info->bpp == 24) ? 3 : 1)); /* Load image */ SetStreamOffset(buffer, info->offset); diff --git a/src/bmp.h b/src/bmp.h index 9b7289e4d1..557244e1ee 100644 --- a/src/bmp.h +++ b/src/bmp.h @@ -24,13 +24,13 @@ struct BmpInfo { struct BmpData { Colour *palette; - byte *bitmap; + uint8_t *bitmap; }; #define BMP_BUFFER_SIZE 1024 struct BmpBuffer { - byte data[BMP_BUFFER_SIZE]; + uint8_t data[BMP_BUFFER_SIZE]; int pos; int read; FILE *file; diff --git a/src/bridge.h b/src/bridge.h index b9d08de46f..0d64dd6012 100644 --- a/src/bridge.h +++ b/src/bridge.h @@ -41,7 +41,7 @@ typedef uint BridgeType; ///< Bridge spec number. */ struct BridgeSpec { TimerGameCalendar::Year avail_year; ///< the year where it becomes available - byte min_length; ///< the minimum length (not counting start and end tile) + uint8_t min_length; ///< the minimum length (not counting start and end tile) uint16_t max_length; ///< the maximum length (not counting start and end tile) uint16_t price; ///< the price multiplier uint16_t speed; ///< maximum travel speed (1 unit = 1/1.6 mph = 1 km-ish/h) @@ -50,7 +50,7 @@ struct BridgeSpec { StringID material; ///< the string that contains the bridge description StringID transport_name[2]; ///< description of the bridge, when built for road or rail PalSpriteID **sprite_table; ///< table of sprites for drawing the bridge - byte flags; ///< bit 0 set: disable drawing of far pillars. + uint8_t flags; ///< bit 0 set: disable drawing of far pillars. }; extern BridgeSpec _bridge[MAX_BRIDGES]; diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index 90aa8580d7..9cb6f56c25 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -54,7 +54,7 @@ typedef GUIList GUIBridgeList; ///< List of bridges, used in #B * @param tile_start start tile * @param transport_type transport type. */ -void CcBuildBridge(Commands, const CommandCost &result, TileIndex end_tile, TileIndex tile_start, TransportType transport_type, BridgeType, byte) +void CcBuildBridge(Commands, const CommandCost &result, TileIndex end_tile, TileIndex tile_start, TransportType transport_type, BridgeType, uint8_t) { if (result.Failed()) return; if (_settings_client.sound.confirm) SndPlayTileFx(SND_27_CONSTRUCTION_BRIDGE, end_tile); @@ -82,7 +82,7 @@ private: TileIndex start_tile; TileIndex end_tile; TransportType transport_type; - byte road_rail_type; + uint8_t road_rail_type; GUIBridgeList bridges; int icon_width; ///< Scaled width of the the bridge icon sprite. Scrollbar *vscroll; @@ -147,7 +147,7 @@ private: } public: - BuildBridgeWindow(WindowDesc *desc, TileIndex start, TileIndex end, TransportType transport_type, byte road_rail_type, GUIBridgeList &&bl) : Window(desc), + BuildBridgeWindow(WindowDesc *desc, TileIndex start, TileIndex end, TransportType transport_type, uint8_t road_rail_type, GUIBridgeList &&bl) : Window(desc), start_tile(start), end_tile(end), transport_type(transport_type), @@ -358,7 +358,7 @@ static WindowDesc _build_bridge_desc( * @param transport_type The transport type * @param road_rail_type The road/rail type */ -void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transport_type, byte road_rail_type) +void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transport_type, uint8_t road_rail_type) { CloseWindowByClass(WC_BUILD_BRIDGE); diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 7d07f65882..a21a139c1a 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -95,7 +95,7 @@ static constexpr NWidgetPart _nested_build_vehicle_widgets[] = { bool _engine_sort_direction; ///< \c false = descending, \c true = ascending. -byte _engine_sort_last_criteria[] = {0, 0, 0, 0}; ///< Last set sort criteria, for each vehicle type. +uint8_t _engine_sort_last_criteria[] = {0, 0, 0, 0}; ///< Last set sort criteria, for each vehicle type. bool _engine_sort_last_order[] = {false, false, false, false}; ///< Last set direction of the sort order, for each vehicle type. bool _engine_sort_show_hidden_engines[] = {false, false, false, false}; ///< Last set 'show hidden engines' setting for each vehicle type. static CargoID _engine_sort_last_cargo_criteria[] = {CargoFilterCriteria::CF_ANY, CargoFilterCriteria::CF_ANY, CargoFilterCriteria::CF_ANY, CargoFilterCriteria::CF_ANY}; ///< Last set filter criteria, for each vehicle type. @@ -1126,7 +1126,7 @@ struct BuildVehicleWindow : Window { RoadType roadtype; ///< Road type to show, or #INVALID_ROADTYPE. } filter; ///< Filter to apply. bool descending_sort_order; ///< Sort direction, @see _engine_sort_direction - byte sort_criteria; ///< Current sort criterium. + uint8_t sort_criteria; ///< Current sort criterium. bool show_hidden_engines; ///< State of the 'show hidden engines' button. bool listview_mode; ///< If set, only display the available vehicles and do not show a 'build' button. EngineID sel_engine; ///< Currently selected engine, or #INVALID_ENGINE diff --git a/src/cargo_type.h b/src/cargo_type.h index a5dbdefcb9..3b0380f429 100644 --- a/src/cargo_type.h +++ b/src/cargo_type.h @@ -19,7 +19,7 @@ using CargoLabel = StrongType::Typedef { /** Types of cargo source and destination */ -enum class SourceType : byte { +enum class SourceType : uint8_t { Industry, ///< Source/destination is an industry Town, ///< Source/destination is a town Headquarters, ///< Source/destination are company headquarters diff --git a/src/cargotype.h b/src/cargotype.h index 81758c8b42..9314d34482 100644 --- a/src/cargotype.h +++ b/src/cargotype.h @@ -18,7 +18,7 @@ #include "core/bitmath_func.hpp" /** Town growth effect when delivering cargo. */ -enum TownAcceptanceEffect : byte { +enum TownAcceptanceEffect : uint8_t { TAE_BEGIN = 0, TAE_NONE = TAE_BEGIN, ///< Cargo has no effect. TAE_PASSENGERS, ///< Cargo behaves passenger-like. @@ -31,7 +31,7 @@ enum TownAcceptanceEffect : byte { }; /** Town effect when producing cargo. */ -enum TownProductionEffect : byte { +enum TownProductionEffect : uint8_t { TPE_NONE, ///< Town will not produce this cargo type. TPE_PASSENGERS, ///< Cargo behaves passenger-like for production. TPE_MAIL, ///< Cargo behaves mail-like for production. @@ -60,7 +60,7 @@ enum CargoClass { CC_SPECIAL = 1 << 15, ///< Special bit used for livery refit tricks instead of normal cargoes. }; -static const byte INVALID_CARGO_BITNUM = 0xFF; ///< Constant representing invalid cargo +static const uint8_t INVALID_CARGO_BITNUM = 0xFF; ///< Constant representing invalid cargo static const uint TOWN_PRODUCTION_DIVISOR = 256; diff --git a/src/clear_cmd.cpp b/src/clear_cmd.cpp index 3a325f8dac..181a6882a8 100644 --- a/src/clear_cmd.cpp +++ b/src/clear_cmd.cpp @@ -44,7 +44,7 @@ static CommandCost ClearTile_Clear(TileIndex tile, DoCommandFlag flags) return price; } -void DrawClearLandTile(const TileInfo *ti, byte set) +void DrawClearLandTile(const TileInfo *ti, uint8_t set) { DrawGroundSprite(SPR_FLAT_BARE_LAND + SlopeToSpriteOffset(ti->tileh) + set * 19, PAL_NONE); } diff --git a/src/clear_func.h b/src/clear_func.h index 2232b56747..28fd7d4a85 100644 --- a/src/clear_func.h +++ b/src/clear_func.h @@ -13,6 +13,6 @@ #include "tile_cmd.h" void DrawHillyLandTile(const TileInfo *ti); -void DrawClearLandTile(const TileInfo *ti, byte set); +void DrawClearLandTile(const TileInfo *ti, uint8_t set); #endif /* CLEAR_FUNC_H */ diff --git a/src/command_type.h b/src/command_type.h index b3ca60d901..dae768104b 100644 --- a/src/command_type.h +++ b/src/command_type.h @@ -462,7 +462,7 @@ template struct CommandTraits; }; /** Storage buffer for serialized command data. */ -typedef std::vector CommandDataBuffer; +typedef std::vector CommandDataBuffer; /** * Define a callback function for the client, after the command is finished. diff --git a/src/company_base.h b/src/company_base.h index b29d0ddc1c..ea4565a808 100644 --- a/src/company_base.h +++ b/src/company_base.h @@ -78,20 +78,20 @@ struct CompanyProperties { CompanyManagerFace face; ///< Face description of the president. Money money; ///< Money owned by the company. - byte money_fraction; ///< Fraction of money of the company, too small to represent in #money. + uint8_t money_fraction; ///< Fraction of money of the company, too small to represent in #money. Money current_loan; ///< Amount of money borrowed from the bank. Money max_loan; ///< Max allowed amount of the loan or COMPANY_MAX_LOAN_DEFAULT. Colours colour; ///< Company colour. - byte block_preview; ///< Number of quarters that the company is not allowed to get new exclusive engine previews (see CompaniesGenStatistics). + uint8_t block_preview; ///< Number of quarters that the company is not allowed to get new exclusive engine previews (see CompaniesGenStatistics). TileIndex location_of_HQ; ///< Northern tile of HQ; #INVALID_TILE when there is none. TileIndex last_build_coordinate; ///< Coordinate of the last build thing by this company. TimerGameEconomy::Year inaugurated_year; ///< Economy year of starting the company. - byte months_of_bankruptcy; ///< Number of months that the company is unable to pay its debts + uint8_t months_of_bankruptcy; ///< Number of months that the company is unable to pay its debts CompanyMask bankrupt_asked; ///< which companies were asked about buying it? int16_t bankrupt_timeout; ///< If bigger than \c 0, amount of time to wait for an answer on an offer to buy this company. Money bankrupt_value; @@ -110,7 +110,7 @@ struct CompanyProperties { std::array yearly_expenses{}; ///< Expenses of the company for the last three years. CompanyEconomyEntry cur_economy; ///< Economic data of the company of this quarter. CompanyEconomyEntry old_economy[MAX_HISTORY_QUARTERS]; ///< Economic data of the company of the last #MAX_HISTORY_QUARTERS quarters. - byte num_valid_stat_ent; ///< Number of valid statistical entries in #old_economy. + uint8_t num_valid_stat_ent; ///< Number of valid statistical entries in #old_economy. Livery livery[LS_END]; diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 6c936d7138..bee3b6032f 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -298,10 +298,10 @@ void SubtractMoneyFromCompany(const CommandCost &cost) void SubtractMoneyFromCompanyFract(CompanyID company, const CommandCost &cst) { Company *c = Company::Get(company); - byte m = c->money_fraction; + uint8_t m = c->money_fraction; Money cost = cst.GetCost(); - c->money_fraction = m - (byte)cost; + c->money_fraction = m - (uint8_t)cost; cost >>= 8; if (c->money_fraction > m) cost++; if (cost != 0) SubtractMoneyFromAnyCompany(c, CommandCost(cst.GetExpensesType(), cost)); @@ -447,7 +447,7 @@ bad_town_name:; } /** Sorting weights for the company colours. */ -static const byte _colour_sort[COLOUR_END] = {2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2, 2, 3, 1, 1, 1}; +static const uint8_t _colour_sort[COLOUR_END] = {2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2, 2, 3, 1, 1, 1}; /** Similar colours, so we can try to prevent same coloured companies. */ static const Colours _similar_colour[COLOUR_END][2] = { { COLOUR_BLUE, COLOUR_LIGHT_BLUE }, // COLOUR_DARK_BLUE diff --git a/src/company_cmd.h b/src/company_cmd.h index b2be9a45bc..8493549c58 100644 --- a/src/company_cmd.h +++ b/src/company_cmd.h @@ -15,7 +15,7 @@ #include "livery.h" enum ClientID : uint32_t; -enum Colours : byte; +enum Colours : uint8_t; CommandCost CmdCompanyCtrl(DoCommandFlag flags, CompanyCtrlAction cca, CompanyID company_id, CompanyRemoveReason reason, ClientID client_id); CommandCost CmdGiveMoney(DoCommandFlag flags, Money money, CompanyID dest_company); diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 9c05f513b8..7896f2bb9a 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -610,7 +610,7 @@ private: uint32_t used_colours = 0; const Livery *livery, *default_livery = nullptr; bool primary = widget == WID_SCL_PRI_COL_DROPDOWN; - byte default_col = 0; + uint8_t default_col = 0; /* Disallow other company colours for the primary colour */ if (this->livery_class < LC_GROUP_RAIL && HasBit(this->sel, LS_DEFAULT) && primary) { @@ -651,7 +651,7 @@ private: list.push_back(std::make_unique>(i, HasBit(used_colours, i))); } - byte sel; + uint8_t sel; if (default_livery == nullptr || HasBit(livery->in_use, primary ? 0 : 1)) { sel = primary ? livery->colour1 : livery->colour2; } else { @@ -2524,7 +2524,7 @@ struct CompanyWindow : Window } case WID_C_BUILD_HQ: - if ((byte)this->window_number != _local_company) return; + if ((uint8_t)this->window_number != _local_company) return; if (this->IsWidgetLowered(WID_C_BUILD_HQ)) { ResetObjectToPlace(); this->RaiseButtons(); diff --git a/src/company_manager_face.h b/src/company_manager_face.h index 113a4c728b..dbb11de5fd 100644 --- a/src/company_manager_face.h +++ b/src/company_manager_face.h @@ -54,9 +54,9 @@ DECLARE_POSTFIX_INCREMENT(CompanyManagerFaceVariable) /** Information about the valid values of CompanyManagerFace bitgroups as well as the sprites to draw */ struct CompanyManagerFaceBitsInfo { - byte offset; ///< Offset in bits into the CompanyManagerFace - byte length; ///< Number of bits used in the CompanyManagerFace - byte valid_values[GE_END]; ///< The number of valid values per gender/ethnicity + uint8_t offset; ///< Offset in bits into the CompanyManagerFace + uint8_t length; ///< Number of bits used in the CompanyManagerFace + uint8_t valid_values[GE_END]; ///< The number of valid values per gender/ethnicity SpriteID first_sprite[GE_END]; ///< The first sprite per gender/ethnicity }; diff --git a/src/company_type.h b/src/company_type.h index ff22a4d0dc..c119a17719 100644 --- a/src/company_type.h +++ b/src/company_type.h @@ -15,7 +15,7 @@ /** * Enum for all companies/owners. */ -enum Owner : byte { +enum Owner : uint8_t { /* All companies below MAX_COMPANIES are playable * companies, above, they are special, computer controlled 'companies' */ OWNER_BEGIN = 0x00, ///< First owner diff --git a/src/console.cpp b/src/console.cpp index 9781283095..373cc274b9 100644 --- a/src/console.cpp +++ b/src/console.cpp @@ -206,7 +206,7 @@ static std::string RemoveUnderscores(std::string name) * @param tokencount the number of parameters passed * @param *tokens are the parameters given to the original command (0 is the first param) */ -static void IConsoleAliasExec(const IConsoleAlias *alias, byte tokencount, char *tokens[ICON_TOKEN_COUNT], const uint recurse_count) +static void IConsoleAliasExec(const IConsoleAlias *alias, uint8_t tokencount, char *tokens[ICON_TOKEN_COUNT], const uint recurse_count) { std::string alias_buffer; diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 0c766b0f47..d74446be5a 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -89,7 +89,7 @@ static ConsoleFileList _console_file_list_scenario{FT_SCENARIO, false}; ///< Fil static ConsoleFileList _console_file_list_heightmap{FT_HEIGHTMAP, false}; ///< File storage cache for heightmaps. /* console command defines */ -#define DEF_CONSOLE_CMD(function) static bool function([[maybe_unused]] byte argc, [[maybe_unused]] char *argv[]) +#define DEF_CONSOLE_CMD(function) static bool function([[maybe_unused]] uint8_t argc, [[maybe_unused]] char *argv[]) #define DEF_CONSOLE_HOOK(function) static ConsoleHookResult function(bool echo) @@ -2113,7 +2113,7 @@ DEF_CONSOLE_CMD(ConFont) uint size = setting->size; bool aa = setting->aa; - byte arg_index = 2; + uint8_t arg_index = 2; /* We may encounter "aa" or "noaa" but it must be the last argument. */ if (StrEqualsIgnoreCase(argv[arg_index], "aa") || StrEqualsIgnoreCase(argv[arg_index], "noaa")) { aa = !StrStartsWithIgnoreCase(argv[arg_index++], "no"); diff --git a/src/console_internal.h b/src/console_internal.h index 4d23a67e1a..4f6dcb4714 100644 --- a/src/console_internal.h +++ b/src/console_internal.h @@ -30,7 +30,7 @@ enum ConsoleHookResult { * If you want to handle multiple words as one, enclose them in double-quotes * eg. 'say "hello everybody"' */ -typedef bool IConsoleCmdProc(byte argc, char *argv[]); +typedef bool IConsoleCmdProc(uint8_t argc, char *argv[]); typedef ConsoleHookResult IConsoleHook(bool echo); struct IConsoleCmd { IConsoleCmd(const std::string &name, IConsoleCmdProc *proc, IConsoleHook *hook) : name(name), proc(proc), hook(hook) {} diff --git a/src/core/alloc_type.hpp b/src/core/alloc_type.hpp index 173c859f58..98e6249f7e 100644 --- a/src/core/alloc_type.hpp +++ b/src/core/alloc_type.hpp @@ -93,14 +93,14 @@ public: * @param size the amount of bytes to allocate. * @return the given amounts of bytes zeroed. */ - inline void *operator new(size_t size) { return CallocT(size); } + inline void *operator new(size_t size) { return CallocT(size); } /** * Memory allocator for an array of class instances. * @param size the amount of bytes to allocate. * @return the given amounts of bytes zeroed. */ - inline void *operator new[](size_t size) { return CallocT(size); } + inline void *operator new[](size_t size) { return CallocT(size); } /** * Memory release for a single class instance. diff --git a/src/core/mem_func.hpp b/src/core/mem_func.hpp index 26bd7c6b7c..202d1ebe15 100644 --- a/src/core/mem_func.hpp +++ b/src/core/mem_func.hpp @@ -46,7 +46,7 @@ inline void MemMoveT(T *destination, const T *source, size_t num = 1) * @param num number of items to be set (!not number of bytes!) */ template -inline void MemSetT(T *ptr, byte value, size_t num = 1) +inline void MemSetT(T *ptr, uint8_t value, size_t num = 1) { memset(ptr, value, num * sizeof(T)); } diff --git a/src/core/overflowsafe_type.hpp b/src/core/overflowsafe_type.hpp index 455510f831..95fee34fa0 100644 --- a/src/core/overflowsafe_type.hpp +++ b/src/core/overflowsafe_type.hpp @@ -140,7 +140,7 @@ public: inline constexpr OverflowSafeInt operator * (const int factor) const { OverflowSafeInt result = *this; result *= (int64_t)factor; return result; } inline constexpr OverflowSafeInt operator * (const uint factor) const { OverflowSafeInt result = *this; result *= (int64_t)factor; return result; } inline constexpr OverflowSafeInt operator * (const uint16_t factor) const { OverflowSafeInt result = *this; result *= (int64_t)factor; return result; } - inline constexpr OverflowSafeInt operator * (const byte factor) const { OverflowSafeInt result = *this; result *= (int64_t)factor; return result; } + inline constexpr OverflowSafeInt operator * (const uint8_t factor) const { OverflowSafeInt result = *this; result *= (int64_t)factor; return result; } /* Operators for division. */ inline constexpr OverflowSafeInt& operator /= (const int64_t divisor) { this->m_value /= divisor; return *this; } @@ -200,10 +200,10 @@ template inline constexpr OverflowSafeInt operator * (const uint a template inline constexpr OverflowSafeInt operator / (const uint a, const OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } /* Sometimes we got byte operator OverflowSafeInt instead of vice versa. Handle that properly. */ -template inline constexpr OverflowSafeInt operator + (const byte a, const OverflowSafeInt b) { return b + (uint)a; } -template inline constexpr OverflowSafeInt operator - (const byte a, const OverflowSafeInt b) { return -b + (uint)a; } -template inline constexpr OverflowSafeInt operator * (const byte a, const OverflowSafeInt b) { return b * (uint)a; } -template inline constexpr OverflowSafeInt operator / (const byte a, const OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } +template inline constexpr OverflowSafeInt operator + (const uint8_t a, const OverflowSafeInt b) { return b + (uint)a; } +template inline constexpr OverflowSafeInt operator - (const uint8_t a, const OverflowSafeInt b) { return -b + (uint)a; } +template inline constexpr OverflowSafeInt operator * (const uint8_t a, const OverflowSafeInt b) { return b * (uint)a; } +template inline constexpr OverflowSafeInt operator / (const uint8_t a, const OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } typedef OverflowSafeInt OverflowSafeInt64; typedef OverflowSafeInt OverflowSafeInt32; diff --git a/src/core/pool_func.hpp b/src/core/pool_func.hpp index d593766859..bea4f45b2c 100644 --- a/src/core/pool_func.hpp +++ b/src/core/pool_func.hpp @@ -123,9 +123,9 @@ DEFINE_POOL_METHOD(inline void *)::AllocateItem(size_t size, size_t index) memset((void *)item, 0, sizeof(Titem)); } } else if (Tzero) { - item = (Titem *)CallocT(size); + item = (Titem *)CallocT(size); } else { - item = (Titem *)MallocT(size); + item = (Titem *)MallocT(size); } this->data[index] = item; SetBit(this->used_bitmap[index / BITMAP_SIZE], index % BITMAP_SIZE); diff --git a/src/core/random_func.cpp b/src/core/random_func.cpp index 8266f751d2..971879dd38 100644 --- a/src/core/random_func.cpp +++ b/src/core/random_func.cpp @@ -73,7 +73,7 @@ void SetRandomSeed(uint32_t seed) uint32_t Random(const std::source_location location) { if (_networking && (!_network_server || (NetworkClientSocket::IsValidID(0) && NetworkClientSocket::Get(0)->status != NetworkClientSocket::STATUS_INACTIVE))) { - Debug(random, 0, "{:08x}; {:02x}; {:04x}; {:02x}; {}:{}", TimerGameEconomy::date, TimerGameEconomy::date_fract, _frame_counter, (byte)_current_company, location.file_name(), location.line()); + Debug(random, 0, "{:08x}; {:02x}; {:04x}; {:02x}; {}:{}", TimerGameEconomy::date, TimerGameEconomy::date_fract, _frame_counter, (uint8_t)_current_company, location.file_name(), location.line()); } return _random.Next(); diff --git a/src/currency.cpp b/src/currency.cpp index bdf4598786..98a89cda6e 100644 --- a/src/currency.cpp +++ b/src/currency.cpp @@ -82,7 +82,7 @@ CurrencySpec _currency_specs[CURRENCY_END]; * When a grf sends currencies, they are based on the order defined by TTDPatch. * So, we must reindex them to our own order. */ -const byte TTDPatch_To_OTTDIndex[] = +const uint8_t TTDPatch_To_OTTDIndex[] = { CURRENCY_GBP, CURRENCY_USD, @@ -113,7 +113,7 @@ const byte TTDPatch_To_OTTDIndex[] = * @param grfcurr_id currency id coming from newgrf * @return the corrected index */ -byte GetNewgrfCurrencyIdConverted(byte grfcurr_id) +uint8_t GetNewgrfCurrencyIdConverted(uint8_t grfcurr_id) { return (grfcurr_id >= lengthof(TTDPatch_To_OTTDIndex)) ? grfcurr_id : TTDPatch_To_OTTDIndex[grfcurr_id]; } diff --git a/src/currency.h b/src/currency.h index be8793c749..1ae229f772 100644 --- a/src/currency.h +++ b/src/currency.h @@ -88,12 +88,12 @@ struct CurrencySpec { * It is not a spec from Newgrf, * rather a way to let users do what they want with custom currency */ - byte symbol_pos; + uint8_t symbol_pos; StringID name; CurrencySpec() = default; - CurrencySpec(uint16_t rate, const char *separator, TimerGameCalendar::Year to_euro, const char *prefix, const char *suffix, const char *code, byte symbol_pos, StringID name) : + CurrencySpec(uint16_t rate, const char *separator, TimerGameCalendar::Year to_euro, const char *prefix, const char *suffix, const char *code, uint8_t symbol_pos, StringID name) : rate(rate), separator(separator), to_euro(to_euro), prefix(prefix), suffix(suffix), code(code), symbol_pos(symbol_pos), name(name) { } @@ -107,6 +107,6 @@ extern CurrencySpec _currency_specs[CURRENCY_END]; uint64_t GetMaskOfAllowedCurrencies(); void ResetCurrencies(bool preserve_custom = true); -byte GetNewgrfCurrencyIdConverted(byte grfcurr_id); +uint8_t GetNewgrfCurrencyIdConverted(uint8_t grfcurr_id); #endif /* CURRENCY_H */ diff --git a/src/direction_type.h b/src/direction_type.h index fb08c224af..84bc130a84 100644 --- a/src/direction_type.h +++ b/src/direction_type.h @@ -21,7 +21,7 @@ * your viewport and not rotated by 45 degrees left or right to get * a "north" used in you games. */ -enum Direction : byte { +enum Direction : uint8_t { DIR_BEGIN = 0, ///< Used to iterate DIR_N = 0, ///< North DIR_NE = 1, ///< Northeast @@ -70,7 +70,7 @@ enum DirDiff { * * This enumeration is used for the 4 direction of the tile-edges. */ -enum DiagDirection : byte { +enum DiagDirection : uint8_t { DIAGDIR_BEGIN = 0, ///< Used for iterations DIAGDIR_NE = 0, ///< Northeast, upper right on your monitor DIAGDIR_SE = 1, ///< Southeast @@ -113,7 +113,7 @@ DECLARE_POSTFIX_INCREMENT(DiagDirDiff) * (and south-east edge). The Y axis must be so the one which goes * align the north-east edge (and south-west) edge. */ -enum Axis : byte { +enum Axis : uint8_t { AXIS_X = 0, ///< The X axis AXIS_Y = 1, ///< The y axis AXIS_END, ///< Used for iterations diff --git a/src/disaster_vehicle.cpp b/src/disaster_vehicle.cpp index 833226eab7..eea873ffca 100644 --- a/src/disaster_vehicle.cpp +++ b/src/disaster_vehicle.cpp @@ -925,11 +925,11 @@ static const Disaster _disasters[] = { static void DoDisaster() { - byte buf[lengthof(_disasters)]; + uint8_t buf[lengthof(_disasters)]; - byte j = 0; + uint8_t j = 0; for (size_t i = 0; i != lengthof(_disasters); i++) { - if (TimerGameCalendar::year >= _disasters[i].min_year && TimerGameCalendar::year < _disasters[i].max_year) buf[j++] = (byte)i; + if (TimerGameCalendar::year >= _disasters[i].min_year && TimerGameCalendar::year < _disasters[i].max_year) buf[j++] = (uint8_t)i; } if (j == 0) return; diff --git a/src/disaster_vehicle.h b/src/disaster_vehicle.h index fc3abecc6e..f6a864df9d 100644 --- a/src/disaster_vehicle.h +++ b/src/disaster_vehicle.h @@ -37,7 +37,7 @@ enum DisasterSubType { struct DisasterVehicle final : public SpecializedVehicle { SpriteID image_override; ///< Override for the default disaster vehicle sprite. VehicleID big_ufo_destroyer_target; ///< The big UFO that this destroyer is supposed to bomb. - byte flags; ///< Flags about the state of the vehicle, @see AirVehicleFlags + uint8_t flags; ///< Flags about the state of the vehicle, @see AirVehicleFlags uint16_t state; ///< Action stage of the disaster vehicle. /** For use by saveload. */ diff --git a/src/economy.cpp b/src/economy.cpp index 3a3755fa6e..9e880a51df 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -118,7 +118,7 @@ static Money CalculateCompanyAssetValue(const Company *c) uint num = 0; for (const Station *st : Station::Iterate()) { - if (st->owner == owner) num += CountBits((byte)st->facilities); + if (st->owner == owner) num += CountBits((uint8_t)st->facilities); } Money value = num * _price[PR_STATION_VALUE] * 25; @@ -239,7 +239,7 @@ int UpdateCompanyRatingAndValue(Company *c, bool update) uint num = 0; for (const Station *st : Station::Iterate()) { /* Only count stations that are actually serviced */ - if (st->owner == owner && (st->time_since_load <= 20 || st->time_since_unload <= 20)) num += CountBits((byte)st->facilities); + if (st->owner == owner && (st->time_since_load <= 20 || st->time_since_unload <= 20)) num += CountBits((uint8_t)st->facilities); } _score_part[owner][SCORE_STATIONS] = num; } diff --git a/src/economy_type.h b/src/economy_type.h index 26474b7b9d..e4d0ea077a 100644 --- a/src/economy_type.h +++ b/src/economy_type.h @@ -43,9 +43,9 @@ static const int DEF_CARGO_SCALE = 100; struct Economy { Money max_loan; ///< NOSAVE: Maximum possible loan int16_t fluct; ///< Economy fluctuation status - byte interest_rate; ///< Interest - byte infl_amount; ///< inflation amount - byte infl_amount_pr; ///< inflation rate for payment rates + uint8_t interest_rate; ///< Interest + uint8_t infl_amount; ///< inflation amount + uint8_t infl_amount_pr; ///< inflation rate for payment rates uint32_t industry_daily_change_counter; ///< Bits 31-16 are number of industry to be performed, 15-0 are fractional collected daily uint32_t industry_daily_increment; ///< The value which will increment industry_daily_change_counter. Computed value. NOSAVE uint64_t inflation_prices; ///< Cumulated inflation of prices since game start; 16 bit fractional part @@ -169,7 +169,7 @@ typedef Money Prices[PR_END]; ///< Prices of everything. @see Price typedef int8_t PriceMultipliers[PR_END]; /** Types of expenses. */ -enum ExpensesType : byte { +enum ExpensesType : uint8_t { EXPENSES_CONSTRUCTION = 0, ///< Construction costs. EXPENSES_NEW_VEHICLES, ///< New vehicles. EXPENSES_TRAIN_RUN, ///< Running costs trains. diff --git a/src/effectvehicle.cpp b/src/effectvehicle.cpp index 3db32f9d97..e2fbea0102 100644 --- a/src/effectvehicle.cpp +++ b/src/effectvehicle.cpp @@ -245,9 +245,9 @@ static void BulldozerInit(EffectVehicle *v) } struct BulldozerMovement { - byte direction:2; - byte image:2; - byte duration:3; + uint8_t direction:2; + uint8_t image:2; + uint8_t duration:3; }; static const BulldozerMovement _bulldozer_movement[] = { @@ -320,7 +320,7 @@ struct BubbleMovement { int8_t x:4; int8_t y:4; int8_t z:4; - byte image:4; + uint8_t image:4; }; #define MK(x, y, z, i) { x, y, z, i } diff --git a/src/effectvehicle_base.h b/src/effectvehicle_base.h index 2c0d2744c5..ae064d92ff 100644 --- a/src/effectvehicle_base.h +++ b/src/effectvehicle_base.h @@ -23,7 +23,7 @@ */ struct EffectVehicle final : public SpecializedVehicle { uint16_t animation_state; ///< State primarily used to change the graphics/behaviour. - byte animation_substate; ///< Sub state to time the change of the graphics/behaviour. + uint8_t animation_substate; ///< Sub state to time the change of the graphics/behaviour. /** We don't want GCC to zero our struct! It already is zeroed and has an index! */ EffectVehicle() : SpecializedVehicleBase() {} diff --git a/src/elrail.cpp b/src/elrail.cpp index 82ab9c1c66..334a50042d 100644 --- a/src/elrail.cpp +++ b/src/elrail.cpp @@ -83,7 +83,7 @@ static inline TLG GetTLG(TileIndex t) * @param override pointer to PCP override, can be nullptr * @return trackbits of tile if it is electrified */ -static TrackBits GetRailTrackBitsUniversal(TileIndex t, byte *override) +static TrackBits GetRailTrackBitsUniversal(TileIndex t, uint8_t *override) { switch (GetTileType(t)) { case MP_RAILWAY: @@ -295,10 +295,10 @@ static void DrawRailCatenaryRailway(const TileInfo *ti) } TLG tlg = GetTLG(ti->tile); - byte PCPstatus = 0; - byte OverridePCP = 0; - byte PPPpreferred[DIAGDIR_END]; - byte PPPallowed[DIAGDIR_END]; + uint8_t PCPstatus = 0; + uint8_t OverridePCP = 0; + uint8_t PPPpreferred[DIAGDIR_END]; + uint8_t PPPallowed[DIAGDIR_END]; /* Find which rail bits are present, and select the override points. * We don't draw a pylon: @@ -425,7 +425,7 @@ static void DrawRailCatenaryRailway(const TileInfo *ti) if (PPPallowed[i] != 0 && HasBit(PCPstatus, i) && !HasBit(OverridePCP, i) && (!IsRailStationTile(ti->tile) || CanStationTileHavePylons(ti->tile))) { for (Direction k = DIR_BEGIN; k < DIR_END; k++) { - byte temp = PPPorder[i][GetTLG(ti->tile)][k]; + uint8_t temp = PPPorder[i][GetTLG(ti->tile)][k]; if (HasBit(PPPallowed[i], temp)) { uint x = ti->x + x_pcp_offsets[i] + x_ppp_offsets[temp]; @@ -474,7 +474,7 @@ static void DrawRailCatenaryRailway(const TileInfo *ti) /* Drawing of pylons is finished, now draw the wires */ for (Track t : SetTrackBitIterator(wireconfig[TS_HOME])) { SpriteID wire_base = (t == halftile_track) ? wire_halftile : wire_normal; - byte PCPconfig = HasBit(PCPstatus, PCPpositions[t][0]) + + uint8_t PCPconfig = HasBit(PCPstatus, PCPpositions[t][0]) + (HasBit(PCPstatus, PCPpositions[t][1]) << 1); const SortableSpriteStruct *sss; diff --git a/src/engine_base.h b/src/engine_base.h index f52d3bd3b7..de552bd9a7 100644 --- a/src/engine_base.h +++ b/src/engine_base.h @@ -23,7 +23,7 @@ struct WagonOverride { }; /** Flags used client-side in the purchase/autorenew engine list. */ -enum class EngineDisplayFlags : byte { +enum class EngineDisplayFlags : uint8_t { None = 0, ///< No flag set. HasVariants = (1U << 0), ///< Set if engine has variants. IsFolded = (1U << 1), ///< Set if display of variants should be folded (hidden). @@ -46,10 +46,10 @@ struct Engine : EnginePool::PoolItem<&_engine_pool> { uint16_t duration_phase_1; ///< First reliability phase in months, increasing reliability from #reliability_start to #reliability_max. uint16_t duration_phase_2; ///< Second reliability phase in months, keeping #reliability_max. uint16_t duration_phase_3; ///< Third reliability phase in months, decaying to #reliability_final. - byte flags; ///< Flags of the engine. @see EngineFlags + uint8_t flags; ///< Flags of the engine. @see EngineFlags CompanyMask preview_asked; ///< Bit for each company which has already been offered a preview. CompanyID preview_company; ///< Company which is currently being offered a preview \c INVALID_COMPANY means no company. - byte preview_wait; ///< Daily countdown timer for timeout of offering the engine to the #preview_company company. + uint8_t preview_wait; ///< Daily countdown timer for timeout of offering the engine to the #preview_company company. CompanyMask company_avail; ///< Bit for each company whether the engine is available for that company. CompanyMask company_hidden; ///< Bit for each company whether the engine is normally hidden in the build gui for that company. uint8_t original_image_index; ///< Original vehicle image index, thus the image index of the overridden vehicle diff --git a/src/engine_gui.h b/src/engine_gui.h index c6a20cb327..5a43f1f610 100644 --- a/src/engine_gui.h +++ b/src/engine_gui.h @@ -44,7 +44,7 @@ void DrawShipEngine(int left, int right, int preferred_x, int y, EngineID engine void DrawAircraftEngine(int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type); extern bool _engine_sort_direction; -extern byte _engine_sort_last_criteria[]; +extern uint8_t _engine_sort_last_criteria[]; extern bool _engine_sort_last_order[]; extern bool _engine_sort_show_hidden_engines[]; extern const StringID _engine_sort_listing[][12]; diff --git a/src/engine_type.h b/src/engine_type.h index be4416ef7b..d5a28ced3e 100644 --- a/src/engine_type.h +++ b/src/engine_type.h @@ -40,42 +40,42 @@ enum EngineClass { /** Information about a rail vehicle. */ struct RailVehicleInfo { - byte image_index; + uint8_t image_index; RailVehicleTypes railveh_type; - byte cost_factor; ///< Purchase cost factor; For multiheaded engines the sum of both engine prices. + uint8_t cost_factor; ///< Purchase cost factor; For multiheaded engines the sum of both engine prices. RailType railtype; ///< Railtype, mangled if elrail is disabled. RailType intended_railtype; ///< Intended railtype, regardless of elrail being enabled or disabled. uint16_t max_speed; ///< Maximum speed (1 unit = 1/1.6 mph = 1 km-ish/h) uint16_t power; ///< Power of engine (hp); For multiheaded engines the sum of both engine powers. uint16_t weight; ///< Weight of vehicle (tons); For multiheaded engines the weight of each single engine. - byte running_cost; ///< Running cost of engine; For multiheaded engines the sum of both running costs. + uint8_t running_cost; ///< Running cost of engine; For multiheaded engines the sum of both running costs. Price running_cost_class; EngineClass engclass; ///< Class of engine for this vehicle - byte capacity; ///< Cargo capacity of vehicle; For multiheaded engines the capacity of each single engine. - byte ai_passenger_only; ///< Bit value to tell AI that this engine is for passenger use only + uint8_t capacity; ///< Cargo capacity of vehicle; For multiheaded engines the capacity of each single engine. + uint8_t ai_passenger_only; ///< Bit value to tell AI that this engine is for passenger use only uint16_t pow_wag_power; ///< Extra power applied to consist if wagon should be powered - byte pow_wag_weight; ///< Extra weight applied to consist if wagon should be powered - byte visual_effect; ///< Bitstuffed NewGRF visual effect data - byte shorten_factor; ///< length on main map for this type is 8 - shorten_factor - byte tractive_effort; ///< Tractive effort coefficient - byte air_drag; ///< Coefficient of air drag - byte user_def_data; ///< Property 0x25: "User-defined bit mask" Used only for (very few) NewGRF vehicles + uint8_t pow_wag_weight; ///< Extra weight applied to consist if wagon should be powered + uint8_t visual_effect; ///< Bitstuffed NewGRF visual effect data + uint8_t shorten_factor; ///< length on main map for this type is 8 - shorten_factor + uint8_t tractive_effort; ///< Tractive effort coefficient + uint8_t air_drag; ///< Coefficient of air drag + uint8_t user_def_data; ///< Property 0x25: "User-defined bit mask" Used only for (very few) NewGRF vehicles int16_t curve_speed_mod; ///< Modifier to maximum speed in curves (fixed-point binary with 8 fractional bits) }; /** Information about a ship vehicle. */ struct ShipVehicleInfo { - byte image_index; - byte cost_factor; + uint8_t image_index; + uint8_t cost_factor; uint8_t acceleration; ///< Acceleration (1 unit = 1/3.2 mph per tick = 0.5 km-ish/h per tick) uint16_t max_speed; ///< Maximum speed (1 unit = 1/3.2 mph = 0.5 km-ish/h) uint16_t capacity; - byte running_cost; + uint8_t running_cost; SoundID sfx; bool old_refittable; ///< Is ship refittable; only used during initialisation. Later use EngineInfo::refit_mask. - byte visual_effect; ///< Bitstuffed NewGRF visual effect data - byte ocean_speed_frac; ///< Fraction of maximum speed for ocean tiles. - byte canal_speed_frac; ///< Fraction of maximum speed for canal/river tiles. + uint8_t visual_effect; ///< Bitstuffed NewGRF visual effect data + uint8_t ocean_speed_frac; ///< Fraction of maximum speed for ocean tiles. + uint8_t canal_speed_frac; ///< Fraction of maximum speed for canal/river tiles. /** Apply ocean/canal speed fraction to a velocity */ uint ApplyWaterClassSpeedFrac(uint raw_speed, bool is_ocean) const @@ -98,33 +98,33 @@ enum AircraftSubTypeBits { /** Information about a aircraft vehicle. */ struct AircraftVehicleInfo { - byte image_index; - byte cost_factor; - byte running_cost; - byte subtype; ///< Type of aircraft. @see AircraftSubTypeBits + uint8_t image_index; + uint8_t cost_factor; + uint8_t running_cost; + uint8_t subtype; ///< Type of aircraft. @see AircraftSubTypeBits SoundID sfx; - byte acceleration; + uint8_t acceleration; uint16_t max_speed; ///< Maximum speed (1 unit = 8 mph = 12.8 km-ish/h) - byte mail_capacity; ///< Mail capacity (bags). + uint8_t mail_capacity; ///< Mail capacity (bags). uint16_t passenger_capacity; ///< Passenger capacity (persons). uint16_t max_range; ///< Maximum range of this aircraft. }; /** Information about a road vehicle. */ struct RoadVehicleInfo { - byte image_index; - byte cost_factor; - byte running_cost; + uint8_t image_index; + uint8_t cost_factor; + uint8_t running_cost; Price running_cost_class; SoundID sfx; uint16_t max_speed; ///< Maximum speed (1 unit = 1/3.2 mph = 0.5 km-ish/h) - byte capacity; + uint8_t capacity; uint8_t weight; ///< Weight in 1/4t units uint8_t power; ///< Power in 10hp units uint8_t tractive_effort; ///< Coefficient of tractive effort uint8_t air_drag; ///< Coefficient of air drag - byte visual_effect; ///< Bitstuffed NewGRF visual effect data - byte shorten_factor; ///< length on main map for this type is 8 - shorten_factor + uint8_t visual_effect; ///< Bitstuffed NewGRF visual effect data + uint8_t shorten_factor; ///< length on main map for this type is 8 - shorten_factor RoadType roadtype; ///< Road type }; @@ -145,14 +145,14 @@ struct EngineInfo { TimerGameCalendar::Date base_intro; ///< Basic date of engine introduction (without random parts). TimerGameCalendar::Year lifelength; ///< Lifetime of a single vehicle TimerGameCalendar::Year base_life; ///< Basic duration of engine availability (without random parts). \c 0xFF means infinite life. - byte decay_speed; - byte load_amount; - byte climates; ///< Climates supported by the engine. + uint8_t decay_speed; + uint8_t load_amount; + uint8_t climates; ///< Climates supported by the engine. CargoID cargo_type; std::variant cargo_label; CargoTypes refit_mask; - byte refit_cost; - byte misc_flags; ///< Miscellaneous flags. @see EngineMiscFlags + uint8_t refit_cost; + uint8_t misc_flags; ///< Miscellaneous flags. @see EngineMiscFlags uint16_t callback_mask; ///< Bitmask of vehicle callbacks that have to be called int8_t retire_early; ///< Number of years early to retire vehicle StringID string_id; ///< Default name of engine diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index f02b1b8edd..c986b4eff6 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -498,7 +498,7 @@ public: if (tr.top > tr.bottom) return; /* Climate */ - byte landscape = _load_check_data.settings.game_creation.landscape; + uint8_t landscape = _load_check_data.settings.game_creation.landscape; if (landscape < NUM_LANDSCAPE) { SetDParam(0, STR_CLIMATE_TEMPERATE_LANDSCAPE + landscape); DrawString(tr, STR_NETWORK_SERVER_LIST_LANDSCAPE); diff --git a/src/fontcache/spritefontcache.cpp b/src/fontcache/spritefontcache.cpp index 92d687482f..aa577e1b11 100644 --- a/src/fontcache/spritefontcache.cpp +++ b/src/fontcache/spritefontcache.cpp @@ -85,7 +85,7 @@ void SpriteFontCache::InitializeUnicodeGlyphMap() } for (uint i = 0; i < lengthof(_default_unicode_map); i++) { - byte key = _default_unicode_map[i].key; + uint8_t key = _default_unicode_map[i].key; if (key == CLRA) { /* Clear the glyph. This happens if the glyph at this code point * is non-standard and should be accessed by an SCC_xxx enum diff --git a/src/fontcache/truetypefontcache.h b/src/fontcache/truetypefontcache.h index 2c84bbe2c9..53f1965816 100644 --- a/src/fontcache/truetypefontcache.h +++ b/src/fontcache/truetypefontcache.h @@ -15,8 +15,8 @@ static const int MAX_FONT_SIZE = 72; ///< Maximum font size. -static const byte FACE_COLOUR = 1; -static const byte SHADOW_COLOUR = 2; +static const uint8_t FACE_COLOUR = 1; +static const uint8_t SHADOW_COLOUR = 2; /** Font cache for fonts that are based on a TrueType font. */ class TrueTypeFontCache : public FontCache { @@ -33,7 +33,7 @@ protected: /** Container for information about a glyph. */ struct GlyphEntry { Sprite *sprite; ///< The loaded sprite. - byte width; ///< The width of the glyph. + uint8_t width; ///< The width of the glyph. bool duplicate; ///< Whether this glyph entry is a duplicate, i.e. may this be freed? }; diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp index d6730fe5f6..760a0b7395 100644 --- a/src/game/game_text.cpp +++ b/src/game/game_text.cpp @@ -136,7 +136,7 @@ struct TranslationWriter : LanguageWriter { /* We don't write the length. */ } - void Write(const byte *buffer, size_t length) override + void Write(const uint8_t *buffer, size_t length) override { this->strings.emplace_back((const char *)buffer, length); } diff --git a/src/gamelog.cpp b/src/gamelog.cpp index 7555380342..4384010b1a 100644 --- a/src/gamelog.cpp +++ b/src/gamelog.cpp @@ -26,7 +26,7 @@ extern SavegameType _savegame_type; ///< type of savegame we are loading extern uint32_t _ttdp_version; ///< version of TTDP savegame (if applicable) extern SaveLoadVersion _sl_version; ///< the major savegame version identifier -extern byte _sl_minor_version; ///< the minor savegame version, DO NOT USE! +extern uint8_t _sl_minor_version; ///< the minor savegame version, DO NOT USE! Gamelog _gamelog; ///< Gamelog instance @@ -463,7 +463,7 @@ void Gamelog::TestMode() * @param bug type of bug, @see enum GRFBugs * @param data additional data */ -void Gamelog::GRFBug(uint32_t grfid, byte bug, uint64_t data) +void Gamelog::GRFBug(uint32_t grfid, uint8_t bug, uint64_t data) { assert(this->action_type == GLAT_GRFBUG); @@ -682,7 +682,7 @@ void Gamelog::GRFUpdate(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 Gamelog::Info(uint32_t *last_ottd_rev, byte *ever_modified, bool *removed_newgrfs) +void Gamelog::Info(uint32_t *last_ottd_rev, uint8_t *ever_modified, bool *removed_newgrfs) { for (const LoggedAction &la : this->data->action) { for (const auto &lc : la.change) { diff --git a/src/gamelog.h b/src/gamelog.h index 919ef9b5ba..597683769f 100644 --- a/src/gamelog.h +++ b/src/gamelog.h @@ -80,7 +80,7 @@ public: void GRFAddList(const GRFConfig *newg); void GRFRemove(uint32_t grfid); void GRFAdd(const GRFConfig *newg); - void GRFBug(uint32_t grfid, byte bug, uint64_t data); + void GRFBug(uint32_t grfid, uint8_t bug, uint64_t data); bool GRFBugReverse(uint32_t grfid, uint16_t internal_id); void GRFCompatible(const GRFIdentifier *newg); void GRFMove(uint32_t grfid, int32_t offset); @@ -89,7 +89,7 @@ public: void TestRevision(); void TestMode(); - void Info(uint32_t *last_ottd_rev, byte *ever_modified, bool *removed_newgrfs); + void Info(uint32_t *last_ottd_rev, uint8_t *ever_modified, bool *removed_newgrfs); const GRFIdentifier *GetOverriddenIdentifier(const GRFConfig *c); /* Saveload handler for gamelog needs access to internal data. */ diff --git a/src/gamelog_internal.h b/src/gamelog_internal.h index 463c0eab0e..23c35c8bd6 100644 --- a/src/gamelog_internal.h +++ b/src/gamelog_internal.h @@ -38,24 +38,24 @@ struct LoggedChange { struct LoggedChangeMode : LoggedChange { LoggedChangeMode() : LoggedChange(GLCT_MODE) {} - LoggedChangeMode(byte mode, byte landscape) : + LoggedChangeMode(uint8_t mode, uint8_t landscape) : LoggedChange(GLCT_MODE), mode(mode), landscape(landscape) {} void FormatTo(std::back_insert_iterator &output_iterator, GrfIDMapping &grf_names, GamelogActionType action_type) override; - byte mode; ///< new game mode - Editor x Game - byte landscape; ///< landscape (temperate, arctic, ...) + uint8_t mode; ///< new game mode - Editor x Game + uint8_t landscape; ///< landscape (temperate, arctic, ...) }; struct LoggedChangeRevision : LoggedChange { LoggedChangeRevision() : LoggedChange(GLCT_REVISION) {} - LoggedChangeRevision(const std::string &text, uint32_t newgrf, uint16_t slver, byte modified) : + LoggedChangeRevision(const std::string &text, uint32_t newgrf, uint16_t slver, uint8_t modified) : LoggedChange(GLCT_REVISION), text(text), newgrf(newgrf), slver(slver), modified(modified) {} void FormatTo(std::back_insert_iterator &output_iterator, GrfIDMapping &grf_names, GamelogActionType action_type) override; std::string text; ///< revision string, _openttd_revision uint32_t newgrf; ///< _openttd_newgrf_version uint16_t slver; ///< _sl_version - byte modified; //< _openttd_revision_modified + uint8_t modified; //< _openttd_revision_modified }; struct LoggedChangeOldVersion : LoggedChange { @@ -123,13 +123,13 @@ struct LoggedChangeSettingChanged : LoggedChange { struct LoggedChangeGRFBug : LoggedChange { LoggedChangeGRFBug() : LoggedChange(GLCT_GRFBUG) {} - LoggedChangeGRFBug(uint64_t data, uint32_t grfid, byte bug) : + LoggedChangeGRFBug(uint64_t data, uint32_t grfid, uint8_t bug) : LoggedChange(GLCT_GRFBUG), data(data), grfid(grfid), bug(bug) {} void FormatTo(std::back_insert_iterator &output_iterator, GrfIDMapping &grf_names, GamelogActionType action_type) override; uint64_t data; ///< additional data uint32_t grfid; ///< ID of problematic GRF - byte bug; ///< type of bug, @see enum GRFBugs + uint8_t bug; ///< type of bug, @see enum GRFBugs }; struct LoggedChangeEmergencySave : LoggedChange { diff --git a/src/genworld.h b/src/genworld.h index e76eb15d1f..23bdf633fe 100644 --- a/src/genworld.h +++ b/src/genworld.h @@ -91,7 +91,7 @@ bool IsGeneratingWorldAborted(); void HandleGeneratingWorldAbortion(); /* genworld_gui.cpp */ -void SetNewLandscapeType(byte landscape); +void SetNewLandscapeType(uint8_t landscape); void SetGeneratingWorldProgress(GenWorldProgress cls, uint total); void IncreaseGeneratingWorldProgress(GenWorldProgress cls); void PrepareGenerateWorldProgress(); diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index 6f5876a00b..33689ea80d 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -61,7 +61,7 @@ static uint GetMapHeightLimit() * Changes landscape type and sets genworld window dirty * @param landscape new landscape type */ -void SetNewLandscapeType(byte landscape) +void SetNewLandscapeType(uint8_t landscape) { _settings_newgame.game_creation.landscape = landscape; InvalidateWindowClassesData(WC_SELECT_GAME); diff --git a/src/gfx.cpp b/src/gfx.cpp index c5bedda078..595592139f 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -30,9 +30,9 @@ #include "safeguards.h" -byte _dirkeys; ///< 1 = left, 2 = up, 4 = right, 8 = down +uint8_t _dirkeys; ///< 1 = left, 2 = up, 4 = right, 8 = down bool _fullscreen; -byte _support8bpp; +uint8_t _support8bpp; CursorVars _cursor; bool _ctrl_pressed; ///< Is Ctrl pressed? bool _shift_pressed; ///< Is Shift pressed? @@ -49,7 +49,7 @@ SwitchMode _switch_mode; ///< The next mainloop command. PauseMode _pause_mode; GameSessionStats _game_session_stats; ///< Statistics about the current session. -static byte _stringwidth_table[FS_END][224]; ///< Cache containing width of often used characters. @see GetCharacterWidth() +static uint8_t _stringwidth_table[FS_END][224]; ///< Cache containing width of often used characters. @see GetCharacterWidth() DrawPixelInfo *_cur_dpi; static void GfxMainBlitterViewport(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = nullptr, SpriteID sprite_id = SPR_CURSOR_MOUSE); @@ -70,14 +70,14 @@ int _gui_scale_cfg; ///< GUI scale in config. * @ingroup dirty */ static Rect _invalid_rect; -static const byte *_colour_remap_ptr; -static byte _string_colourremap[3]; ///< Recoloursprite for stringdrawing. The grf loader ensures that #SpriteType::Font sprites only use colours 0 to 2. +static const uint8_t *_colour_remap_ptr; +static uint8_t _string_colourremap[3]; ///< Recoloursprite for stringdrawing. The grf loader ensures that #SpriteType::Font sprites only use colours 0 to 2. static const uint DIRTY_BLOCK_HEIGHT = 8; static const uint DIRTY_BLOCK_WIDTH = 64; static uint _dirty_bytes_per_line = 0; -static byte *_dirty_blocks = nullptr; +static uint8_t *_dirty_blocks = nullptr; extern uint _dirty_block_colour; void GfxScroll(int left, int top, int width, int height, int xo, int yo) @@ -147,7 +147,7 @@ void GfxFillRect(int left, int top, int right, int bottom, int colour, FillRectM break; case FILLRECT_CHECKER: { - byte bo = (oleft - left + dpi->left + otop - top + dpi->top) & 1; + uint8_t bo = (oleft - left + dpi->left + otop - top + dpi->top) & 1; do { for (int i = (bo ^= 1); i < right; i += 2) blitter->SetPixel(dst, i, 0, (uint8_t)colour); dst = blitter->MoveTo(dst, 0, 1); @@ -431,7 +431,7 @@ void DrawBox(int x, int y, int dx1, int dy1, int dx2, int dy2, int dx3, int dy3) * ....V. */ - static const byte colour = PC_WHITE; + static const uint8_t colour = PC_WHITE; GfxDrawLineUnscaled(x, y, x + dx1, y + dy1, colour); GfxDrawLineUnscaled(x, y, x + dx2, y + dy2, colour); @@ -474,7 +474,7 @@ static void SetColourRemap(TextColour colour) bool raw_colour = (colour & TC_IS_PALETTE_COLOUR) != 0; colour &= ~(TC_NO_SHADE | TC_IS_PALETTE_COLOUR | TC_FORCED); - _string_colourremap[1] = raw_colour ? (byte)colour : _string_colourmap[colour]; + _string_colourremap[1] = raw_colour ? (uint8_t)colour : _string_colourmap[colour]; _string_colourremap[2] = no_shade ? 0 : 1; _colour_remap_ptr = _string_colourremap; } @@ -1185,9 +1185,9 @@ std::unique_ptr DrawSpriteToRgbaBuffer(SpriteID spriteId, ZoomLevel dim_size = static_cast(dim.width) * dim.height; /* If the current blitter is a paletted blitter, we have to render to an extra buffer and resolve the palette later. */ - std::unique_ptr pal_buffer{}; + std::unique_ptr pal_buffer{}; if (blitter->GetScreenDepth() == 8) { - pal_buffer = std::make_unique(dim_size); + pal_buffer = std::make_unique(dim_size); dpi.dst_ptr = pal_buffer.get(); } @@ -1199,7 +1199,7 @@ std::unique_ptr DrawSpriteToRgbaBuffer(SpriteID spriteId, ZoomLevel if (blitter->GetScreenDepth() == 8) { /* Resolve palette. */ uint32_t *dst = result.get(); - const byte *src = pal_buffer.get(); + const uint8_t *src = pal_buffer.get(); for (size_t i = 0; i < dim_size; ++i) { *dst++ = _cur_palette.palette[*src++].data; } @@ -1239,7 +1239,7 @@ void LoadStringWidthTable(bool monospace) * @param key Character code glyph * @return Width of the character glyph */ -byte GetCharacterWidth(FontSize size, char32_t key) +uint8_t GetCharacterWidth(FontSize size, char32_t key) { /* Use _stringwidth_table cache if possible */ if (key >= 32 && key < 256) return _stringwidth_table[size][key - 32]; @@ -1252,9 +1252,9 @@ byte GetCharacterWidth(FontSize size, char32_t key) * @param size Font of the digit * @return Width of the digit. */ -byte GetDigitWidth(FontSize size) +uint8_t GetDigitWidth(FontSize size) { - byte width = 0; + uint8_t width = 0; for (char c = '0'; c <= '9'; c++) { width = std::max(GetCharacterWidth(size, c), width); } @@ -1283,7 +1283,7 @@ void GetBroadestDigit(uint *front, uint *next, FontSize size) void ScreenSizeChanged() { _dirty_bytes_per_line = CeilDiv(_screen.width, DIRTY_BLOCK_WIDTH); - _dirty_blocks = ReallocT(_dirty_blocks, static_cast(_dirty_bytes_per_line) * CeilDiv(_screen.height, DIRTY_BLOCK_HEIGHT)); + _dirty_blocks = ReallocT(_dirty_blocks, static_cast(_dirty_bytes_per_line) * CeilDiv(_screen.height, DIRTY_BLOCK_HEIGHT)); /* check the dirty rect */ if (_invalid_rect.right >= _screen.width) _invalid_rect.right = _screen.width; @@ -1411,7 +1411,7 @@ void RedrawScreenRect(int left, int top, int right, int bottom) */ void DrawDirtyBlocks() { - byte *b = _dirty_blocks; + uint8_t *b = _dirty_blocks; const int w = Align(_screen.width, DIRTY_BLOCK_WIDTH); const int h = Align(_screen.height, DIRTY_BLOCK_HEIGHT); int x; @@ -1426,7 +1426,7 @@ void DrawDirtyBlocks() int top; int right = x + DIRTY_BLOCK_WIDTH; int bottom = y; - byte *p = b; + uint8_t *p = b; int h2; /* First try coalescing downwards */ @@ -1442,7 +1442,7 @@ void DrawDirtyBlocks() p = b; while (right != w) { - byte *p2 = ++p; + uint8_t *p2 = ++p; int i = h2; /* Check if a full line of dirty flags is set. */ do { @@ -1500,7 +1500,7 @@ void DrawDirtyBlocks() */ void AddDirtyBlock(int left, int top, int right, int bottom) { - byte *b; + uint8_t *b; int width; int height; diff --git a/src/gfx_func.h b/src/gfx_func.h index 9681158768..7d6aff7c07 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -48,9 +48,9 @@ void GameLoop(); void CreateConsole(); -extern byte _dirkeys; ///< 1 = left, 2 = up, 4 = right, 8 = down +extern uint8_t _dirkeys; ///< 1 = left, 2 = up, 4 = right, 8 = down extern bool _fullscreen; -extern byte _support8bpp; +extern uint8_t _support8bpp; extern CursorVars _cursor; extern bool _ctrl_pressed; ///< Is Ctrl pressed? extern bool _shift_pressed; ///< Is Shift pressed? @@ -181,8 +181,8 @@ void SortResolutions(); bool ToggleFullScreen(bool fs); /* gfx.cpp */ -byte GetCharacterWidth(FontSize size, char32_t key); -byte GetDigitWidth(FontSize size = FS_NORMAL); +uint8_t GetCharacterWidth(FontSize size, char32_t key); +uint8_t GetDigitWidth(FontSize size = FS_NORMAL); void GetBroadestDigit(uint *front, uint *next, FontSize size = FS_NORMAL); int GetCharacterHeight(FontSize size); diff --git a/src/gfx_type.h b/src/gfx_type.h index fc4eabbd77..c71819c7ad 100644 --- a/src/gfx_type.h +++ b/src/gfx_type.h @@ -109,7 +109,7 @@ enum WindowKeyCodes { struct AnimCursor { static const CursorID LAST = MAX_UVALUE(CursorID); CursorID sprite; ///< Must be set to LAST_ANIM when it is the last sprite of the loop - byte display_time; ///< Amount of ticks this sprite will be shown + uint8_t display_time; ///< Amount of ticks this sprite will be shown }; /** Collection of variables for cursor-display and -animation */ @@ -227,7 +227,7 @@ struct SubSprite { int left, top, right, bottom; }; -enum Colours : byte { +enum Colours : uint8_t { COLOUR_BEGIN, COLOUR_DARK_BLUE = COLOUR_BEGIN, COLOUR_PALE_GREEN, @@ -306,7 +306,7 @@ enum PaletteType { }; /** Types of sprites that might be loaded */ -enum class SpriteType : byte { +enum class SpriteType : uint8_t { Normal = 0, ///< The most basic (normal) sprite MapGen = 1, ///< Special sprite for the map generator Font = 2, ///< A sprite used for fonts diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index 785dbde159..0384bb86c8 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -52,12 +52,12 @@ static uint LoadGrfFile(const std::string &filename, uint load_index, bool needs Debug(sprite, 2, "Reading grf-file '{}'", filename); - byte container_ver = file.GetContainerVersion(); + uint8_t container_ver = file.GetContainerVersion(); if (container_ver == 0) UserError("Base grf '{}' is corrupt", filename); ReadGRFSpriteOffsets(file); if (container_ver >= 2) { /* Read compression. */ - byte compression = file.ReadByte(); + uint8_t compression = file.ReadByte(); if (compression != 0) UserError("Unsupported compression format"); } @@ -89,12 +89,12 @@ static void LoadGrfFileIndexed(const std::string &filename, const SpriteID *inde Debug(sprite, 2, "Reading indexed grf-file '{}'", filename); - byte container_ver = file.GetContainerVersion(); + uint8_t container_ver = file.GetContainerVersion(); if (container_ver == 0) UserError("Base grf '{}' is corrupt", filename); ReadGRFSpriteOffsets(file); if (container_ver >= 2) { /* Read compression. */ - byte compression = file.ReadByte(); + uint8_t compression = file.ReadByte(); if (compression != 0) UserError("Unsupported compression format"); } diff --git a/src/goal.cpp b/src/goal.cpp index 9b0cb20027..f33535fb74 100644 --- a/src/goal.cpp +++ b/src/goal.cpp @@ -306,7 +306,7 @@ CommandCost CmdGoalQuestionAnswer(DoCommandFlag flags, uint16_t uniqueid, uint8_ } if (flags & DC_EXEC) { - Game::NewEvent(new ScriptEventGoalQuestionAnswer(uniqueid, (ScriptCompany::CompanyID)(byte)_current_company, (ScriptGoal::QuestionButton)(1 << button))); + Game::NewEvent(new ScriptEventGoalQuestionAnswer(uniqueid, (ScriptCompany::CompanyID)(uint8_t)_current_company, (ScriptGoal::QuestionButton)(1 << button))); } return CommandCost(); diff --git a/src/goal_gui.cpp b/src/goal_gui.cpp index 4e2334b9ef..033c6359e2 100644 --- a/src/goal_gui.cpp +++ b/src/goal_gui.cpp @@ -479,7 +479,7 @@ static WindowDesc _goal_question_list_desc[] = { * @param button_mask Buttons to display. * @param question Question to ask. */ -void ShowGoalQuestion(uint16_t id, byte type, uint32_t button_mask, const std::string &question) +void ShowGoalQuestion(uint16_t id, uint8_t type, uint32_t button_mask, const std::string &question) { assert(type < GQT_END); new GoalQuestionWindow(&_goal_question_list_desc[type], id, type == 3 ? TC_WHITE : TC_BLACK, button_mask, question); diff --git a/src/goal_type.h b/src/goal_type.h index f4af4af197..66a3f3bf8a 100644 --- a/src/goal_type.h +++ b/src/goal_type.h @@ -14,7 +14,7 @@ static const uint32_t GOAL_QUESTION_BUTTON_COUNT = 18; ///< Amount of buttons available. -enum GoalQuestionType : byte { +enum GoalQuestionType : uint8_t { GQT_QUESTION = 0, GQT_INFORMATION = 1, GQT_WARNING = 2, @@ -23,7 +23,7 @@ enum GoalQuestionType : byte { }; /** Types of goal destinations */ -enum GoalType : byte { +enum GoalType : uint8_t { GT_NONE, ///< Destination is not linked GT_TILE, ///< Destination is a tile GT_INDUSTRY, ///< Destination is an industry diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 345a6af3fb..a9fc671d90 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -183,9 +183,9 @@ protected: static const int MIN_GRID_PIXEL_SIZE = 20; ///< Minimum distance between graph lines. uint64_t excluded_data; ///< bitmask of the datasets that shouldn't be displayed. - byte num_dataset; - byte num_on_x_axis; - byte num_vert_lines; + uint8_t num_dataset; + uint8_t num_on_x_axis; + uint8_t num_vert_lines; /* The starting month and year that values are plotted against. */ TimerGameEconomy::Month month; @@ -199,7 +199,7 @@ protected: uint16_t x_values_increment; StringID format_str_y_axis; - byte colours[GRAPH_MAX_DATASETS]; + uint8_t colours[GRAPH_MAX_DATASETS]; OverflowSafeInt64 cost[GRAPH_MAX_DATASETS][GRAPH_NUM_MONTHS]; ///< Stored costs for the last #GRAPH_NUM_MONTHS months /** @@ -443,7 +443,7 @@ protected: /* Centre the dot between the grid lines. */ x = r.left + (x_sep / 2); - byte colour = this->colours[i]; + uint8_t colour = this->colours[i]; uint prev_x = INVALID_DATAPOINT_POS; uint prev_y = INVALID_DATAPOINT_POS; @@ -600,7 +600,7 @@ public: if (!Company::IsValidID(c)) SetBit(excluded_companies, c); } - byte nums = 0; + uint8_t nums = 0; for (const Company *c : Company::Iterate()) { nums = std::min(this->num_vert_lines, std::max(nums, c->num_valid_stat_ent)); } diff --git a/src/ground_vehicle.cpp b/src/ground_vehicle.cpp index ef755775e3..a6ab9758c0 100644 --- a/src/ground_vehicle.cpp +++ b/src/ground_vehicle.cpp @@ -41,8 +41,8 @@ void GroundVehicle::PowerChanged() if (track_speed > 0) max_track_speed = std::min(max_track_speed, track_speed); } - byte air_drag; - byte air_drag_value = v->GetAirDrag(); + uint8_t air_drag; + uint8_t air_drag_value = v->GetAirDrag(); /* If air drag is set to zero (default), the resulting air drag coefficient is dependent on max speed. */ if (air_drag_value == 0) { diff --git a/src/ground_vehicle.hpp b/src/ground_vehicle.hpp index 331b212048..f8bc393b73 100644 --- a/src/ground_vehicle.hpp +++ b/src/ground_vehicle.hpp @@ -63,9 +63,9 @@ enum GroundVehicleFlags { * virtual uint16_t GetPower() const = 0; * virtual uint16_t GetPoweredPartPower(const T *head) const = 0; * virtual uint16_t GetWeight() const = 0; - * virtual byte GetTractiveEffort() const = 0; - * virtual byte GetAirDrag() const = 0; - * virtual byte GetAirDragArea() const = 0; + * virtual uint8_t GetTractiveEffort() const = 0; + * virtual uint8_t GetAirDrag() const = 0; + * virtual uint8_t GetAirDragArea() const = 0; * virtual AccelStatus GetAccelerationStatus() const = 0; * virtual uint16_t GetCurrentSpeed() const = 0; * virtual uint32_t GetRollingFriction() const = 0; @@ -362,7 +362,7 @@ protected: inline uint DoUpdateSpeed(uint accel, int min_speed, int max_speed) { uint spd = this->subspeed + accel; - this->subspeed = (byte)spd; + this->subspeed = (uint8_t)spd; /* When we are going faster than the maximum speed, reduce the speed * somewhat gradually. But never lower than the maximum speed. */ diff --git a/src/group_cmd.h b/src/group_cmd.h index e177a71614..81c6f4cdf2 100644 --- a/src/group_cmd.h +++ b/src/group_cmd.h @@ -16,11 +16,11 @@ #include "vehiclelist.h" #include "vehiclelist_cmd.h" -enum Colours : byte; +enum Colours : uint8_t; enum GroupFlags : uint8_t; /** Action for \c CmdAlterGroup. */ -enum class AlterGroupMode : byte { +enum class AlterGroupMode : uint8_t { Rename, ///< Change group name. SetParent, ///< Change group parent. }; diff --git a/src/gui.h b/src/gui.h index a55978c54a..87df7a3283 100644 --- a/src/gui.h +++ b/src/gui.h @@ -62,7 +62,7 @@ void ShowSubsidiesList(); /* goal_gui.cpp */ void ShowGoalsList(CompanyID company); -void ShowGoalQuestion(uint16_t id, byte type, uint32_t button_mask, const std::string &question); +void ShowGoalQuestion(uint16_t id, uint8_t type, uint32_t button_mask, const std::string &question); /* story_gui.cpp */ void ShowStoryBook(CompanyID company, uint16_t page_id = INVALID_STORY_PAGE, bool centered = false); @@ -72,7 +72,7 @@ void ShowExtraViewportWindow(TileIndex tile = INVALID_TILE); void ShowExtraViewportWindowForTileUnderCursor(); /* bridge_gui.cpp */ -void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transport_type, byte bridge_type); +void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transport_type, uint8_t bridge_type); /* music_gui.cpp */ void ShowMusicWindow(); diff --git a/src/heightmap.cpp b/src/heightmap.cpp index 230a090bad..3252c392dc 100644 --- a/src/heightmap.cpp +++ b/src/heightmap.cpp @@ -60,7 +60,7 @@ static inline bool IsValidHeightmapDimension(size_t width, size_t height) * Convert RGB colours to Grayscale using 29.9% Red, 58.7% Green, 11.4% Blue * (average luminosity formula, NTSC Colour Space) */ -static inline byte RGBToGrayscale(byte red, byte green, byte blue) +static inline uint8_t RGBToGrayscale(uint8_t red, uint8_t green, uint8_t blue) { /* To avoid doubles and stuff, multiply it with a total of 65536 (16bits), then * divide by it to normalize the value to a byte again. */ @@ -75,10 +75,10 @@ static inline byte RGBToGrayscale(byte red, byte green, byte blue) /** * The PNG Heightmap loader. */ -static void ReadHeightmapPNGImageData(byte *map, png_structp png_ptr, png_infop info_ptr) +static void ReadHeightmapPNGImageData(uint8_t *map, png_structp png_ptr, png_infop info_ptr) { uint x, y; - byte gray_palette[256]; + uint8_t gray_palette[256]; png_bytep *row_pointers = nullptr; bool has_palette = png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_PALETTE; uint channels = png_get_channels(png_ptr, info_ptr); @@ -114,7 +114,7 @@ static void ReadHeightmapPNGImageData(byte *map, png_structp png_ptr, png_infop /* Read the raw image data and convert in 8-bit grayscale */ for (x = 0; x < png_get_image_width(png_ptr, info_ptr); x++) { for (y = 0; y < png_get_image_height(png_ptr, info_ptr); y++) { - byte *pixel = &map[y * png_get_image_width(png_ptr, info_ptr) + x]; + uint8_t *pixel = &map[y * png_get_image_width(png_ptr, info_ptr) + x]; uint x_offset = x * channels; if (has_palette) { @@ -134,7 +134,7 @@ static void ReadHeightmapPNGImageData(byte *map, png_structp png_ptr, png_infop * If map == nullptr only the size of the PNG is read, otherwise a map * with grayscale pixels is allocated and assigned to *map. */ -static bool ReadHeightmapPNG(const char *filename, uint *x, uint *y, byte **map) +static bool ReadHeightmapPNG(const char *filename, uint *x, uint *y, uint8_t **map) { FILE *fp; png_structp png_ptr = nullptr; @@ -188,7 +188,7 @@ static bool ReadHeightmapPNG(const char *filename, uint *x, uint *y, byte **map) } if (map != nullptr) { - *map = MallocT(static_cast(width) * height); + *map = MallocT(static_cast(width) * height); ReadHeightmapPNGImageData(*map, png_ptr, info_ptr); } @@ -206,10 +206,10 @@ static bool ReadHeightmapPNG(const char *filename, uint *x, uint *y, byte **map) /** * The BMP Heightmap loader. */ -static void ReadHeightmapBMPImageData(byte *map, BmpInfo *info, BmpData *data) +static void ReadHeightmapBMPImageData(uint8_t *map, BmpInfo *info, BmpData *data) { uint x, y; - byte gray_palette[256]; + uint8_t gray_palette[256]; if (data->palette != nullptr) { uint i; @@ -244,8 +244,8 @@ static void ReadHeightmapBMPImageData(byte *map, BmpInfo *info, BmpData *data) /* Read the raw image data and convert in 8-bit grayscale */ for (y = 0; y < info->height; y++) { - byte *pixel = &map[y * info->width]; - byte *bitmap = &data->bitmap[y * info->width * (info->bpp == 24 ? 3 : 1)]; + uint8_t *pixel = &map[y * info->width]; + uint8_t *bitmap = &data->bitmap[y * info->width * (info->bpp == 24 ? 3 : 1)]; for (x = 0; x < info->width; x++) { if (info->bpp != 24) { @@ -263,7 +263,7 @@ static void ReadHeightmapBMPImageData(byte *map, BmpInfo *info, BmpData *data) * If map == nullptr only the size of the BMP is read, otherwise a map * with grayscale pixels is allocated and assigned to *map. */ -static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, byte **map) +static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, uint8_t **map) { FILE *f; BmpInfo info; @@ -303,7 +303,7 @@ static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, byte **map) return false; } - *map = MallocT(static_cast(info.width) * info.height); + *map = MallocT(static_cast(info.width) * info.height); ReadHeightmapBMPImageData(*map, &info, &data); } @@ -323,7 +323,7 @@ static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, byte **map) * @param img_height the height of the image in pixels/tiles * @param map the input map */ -static void GrayscaleToMapHeights(uint img_width, uint img_height, byte *map) +static void GrayscaleToMapHeights(uint img_width, uint img_height, uint8_t *map) { /* Defines the detail of the aspect ratio (to avoid doubles) */ const uint num_div = 16384; @@ -423,7 +423,7 @@ void FixSlopes() { uint width, height; int row, col; - byte current_tile; + uint8_t current_tile; /* Adjust height difference to maximum one horizontal/vertical change. */ width = Map::SizeX(); @@ -484,7 +484,7 @@ void FixSlopes() * @param[in,out] map If not \c nullptr, destination to store the loaded block of image data. * @return Whether loading was successful. */ -static bool ReadHeightMap(DetailedFileType dft, const char *filename, uint *x, uint *y, byte **map) +static bool ReadHeightMap(DetailedFileType dft, const char *filename, uint *x, uint *y, uint8_t **map) { switch (dft) { default: @@ -523,7 +523,7 @@ bool GetHeightmapDimensions(DetailedFileType dft, const char *filename, uint *x, bool LoadHeightmap(DetailedFileType dft, const char *filename) { uint x, y; - byte *map = nullptr; + uint8_t *map = nullptr; if (!ReadHeightMap(dft, filename, &x, &y, &map)) { free(map); @@ -543,7 +543,7 @@ bool LoadHeightmap(DetailedFileType dft, const char *filename) * Make an empty world where all tiles are of height 'tile_height'. * @param tile_height of the desired new empty world */ -void FlatEmptyWorld(byte tile_height) +void FlatEmptyWorld(uint8_t tile_height) { int edge_distance = _settings_game.construction.freeform_edges ? 0 : 2; for (uint row = edge_distance; row < Map::SizeY() - edge_distance; row++) { diff --git a/src/heightmap.h b/src/heightmap.h index d7c431c2e4..20e7ff5938 100644 --- a/src/heightmap.h +++ b/src/heightmap.h @@ -23,7 +23,7 @@ enum HeightmapRotation { bool GetHeightmapDimensions(DetailedFileType dft, const char *filename, uint *x, uint *y); bool LoadHeightmap(DetailedFileType dft, const char *filename); -void FlatEmptyWorld(byte tile_height); +void FlatEmptyWorld(uint8_t tile_height); void FixSlopes(); #endif /* HEIGHTMAP_H */ diff --git a/src/highscore.cpp b/src/highscore.cpp index 14bfd33ef8..f6fd57978b 100644 --- a/src/highscore.cpp +++ b/src/highscore.cpp @@ -129,7 +129,7 @@ void SaveToHighScore() for (int i = 0; i < SP_SAVED_HIGHSCORE_END; i++) { for (HighScore &hs : _highscore_table[i]) { /* This code is weird and old fashioned to keep compatibility with the old high score files. */ - byte name_length = ClampTo(hs.name.size()); + uint8_t name_length = ClampTo(hs.name.size()); if (fwrite(&name_length, sizeof(name_length), 1, fp.get()) != 1 || // Write the string length of the name fwrite(hs.name.data(), name_length, 1, fp.get()) > 1 || // Yes... could be 0 bytes too fwrite(&hs.score, sizeof(hs.score), 1, fp.get()) != 1 || @@ -153,7 +153,7 @@ void LoadFromHighScore() for (int i = 0; i < SP_SAVED_HIGHSCORE_END; i++) { for (HighScore &hs : _highscore_table[i]) { /* This code is weird and old fashioned to keep compatibility with the old high score files. */ - byte name_length; + uint8_t name_length; char buffer[std::numeric_limits::max() + 1]; if (fread(&name_length, sizeof(name_length), 1, fp.get()) != 1 || diff --git a/src/house.h b/src/house.h index c3308ea59b..a463b632ec 100644 --- a/src/house.h +++ b/src/house.h @@ -20,7 +20,7 @@ * Simple value that indicates the house has reached the final stage of * construction. */ -static const byte TOWN_HOUSE_COMPLETED = 3; +static const uint8_t TOWN_HOUSE_COMPLETED = 3; static const HouseID NUM_HOUSES_PER_GRF = 255; ///< Number of supported houses per NewGRF; limited to 255 to allow extending Action3 with an extended byte later on. @@ -99,12 +99,12 @@ struct HouseSpec { /* Standard properties */ TimerGameCalendar::Year min_year; ///< introduction year of the house TimerGameCalendar::Year max_year; ///< last year it can be built - byte population; ///< population (Zero on other tiles in multi tile house.) - byte removal_cost; ///< cost multiplier for removing it + uint8_t population; ///< population (Zero on other tiles in multi tile house.) + uint8_t removal_cost; ///< cost multiplier for removing it StringID building_name; ///< building name uint16_t remove_rating_decrease; ///< rating decrease if removed - byte mail_generation; ///< mail generation multiplier (tile based, as the acceptances below) - byte cargo_acceptance[HOUSE_NUM_ACCEPTS]; ///< acceptance level for the cargo slots + uint8_t mail_generation; ///< mail generation multiplier (tile based, as the acceptances below) + uint8_t cargo_acceptance[HOUSE_NUM_ACCEPTS]; ///< acceptance level for the cargo slots CargoID accepts_cargo[HOUSE_NUM_ACCEPTS]; ///< input cargo slots CargoLabel accepts_cargo_label[HOUSE_NUM_ACCEPTS]; ///< input landscape cargo slots BuildingFlags building_flags; ///< some flags that describe the house (size, stadium etc...) @@ -115,12 +115,12 @@ struct HouseSpec { GRFFileProps grf_prop; ///< Properties related the the grf file uint16_t callback_mask; ///< Bitmask of house callbacks that have to be called Colours random_colour[4]; ///< 4 "random" colours - byte probability; ///< Relative probability of appearing (16 is the standard value) + uint8_t probability; ///< Relative probability of appearing (16 is the standard value) HouseExtraFlags extra_flags; ///< some more flags HouseClassID class_id; ///< defines the class this house has (not grf file based) AnimationInfo animation; ///< information about the animation. - byte processing_time; ///< Periodic refresh multiplier - byte minimum_life; ///< The minimum number of years this house will survive before the town rebuilds it + uint8_t processing_time; ///< Periodic refresh multiplier + uint8_t minimum_life; ///< The minimum number of years this house will survive before the town rebuilds it CargoTypes watched_cargoes; ///< Cargo types watched for acceptance. Money GetRemovalCost() const; diff --git a/src/industry.h b/src/industry.h index 52b4dcd359..4a8f41bbcf 100644 --- a/src/industry.h +++ b/src/industry.h @@ -41,7 +41,7 @@ enum ProductionLevels { * Flags to control/override the behaviour of an industry. * These flags are controlled by game scripts. */ -enum IndustryControlFlags : byte { +enum IndustryControlFlags : uint8_t { /** No flags in effect */ INDCTL_NONE = 0, /** When industry production change is evaluated, rolls to decrease are ignored. */ @@ -98,14 +98,14 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> { Station *neutral_station; ///< Associated neutral station ProducedCargoArray produced; ///< INDUSTRY_NUM_OUTPUTS production cargo slots AcceptedCargoArray accepted; ///< INDUSTRY_NUM_INPUTS input cargo slots - byte prod_level; ///< general production level + uint8_t prod_level; ///< general production level uint16_t counter; ///< used for animation and/or production (if available cargo) IndustryType type; ///< type of industry. Owner owner; ///< owner of the industry. Which SHOULD always be (imho) OWNER_NONE Colours random_colour; ///< randomized colour of the industry, for display purpose TimerGameEconomy::Year last_prod_year; ///< last economy year of production - byte was_cargo_delivered; ///< flag that indicate this has been the closest industry chosen for cargo delivery by a station. see DeliverGoodsToIndustry + uint8_t was_cargo_delivered; ///< flag that indicate this has been the closest industry chosen for cargo delivery by a station. see DeliverGoodsToIndustry IndustryControlFlags ctlflags; ///< flags overriding standard behaviours PartOfSubsidy part_of_subsidy; ///< NOSAVE: is this industry a source/destination of a subsidy? @@ -115,7 +115,7 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> { Owner founder; ///< Founder of the industry TimerGameCalendar::Date construction_date; ///< Date of the construction of the industry uint8_t construction_type; ///< Way the industry was constructed (@see IndustryConstructionType) - byte selected_layout; ///< Which tile layout was used when creating the industry + uint8_t selected_layout; ///< Which tile layout was used when creating the industry Owner exclusive_supplier; ///< Which company has exclusive rights to deliver cargo (INVALID_OWNER = anyone) Owner exclusive_consumer; ///< Which company has exclusive rights to take cargo (INVALID_OWNER = anyone) std::string text; ///< General text with additional information. @@ -275,7 +275,7 @@ bool IsTileForestIndustry(TileIndex tile); /** Data for managing the number of industries of a single industry type. */ struct IndustryTypeBuildData { uint32_t probability; ///< Relative probability of building this industry. - byte min_number; ///< Smallest number of industries that should exist (either \c 0 or \c 1). + uint8_t min_number; ///< Smallest number of industries that should exist (either \c 0 or \c 1). uint16_t target_count; ///< Desired number of industries of this type. uint16_t max_wait; ///< Starting number of turns to wait (copied to #wait_count). uint16_t wait_count; ///< Number of turns to wait before trying to build again. diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 4db8004a22..46e3d79b08 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -60,7 +60,7 @@ INSTANTIATE_POOL_METHODS(Industry) void ShowIndustryViewWindow(int industry); void BuildOilRig(TileIndex tile); -static byte _industry_sound_ctr; +static uint8_t _industry_sound_ctr; static TileIndex _industry_sound_tile; uint16_t Industry::counts[NUM_INDUSTRYTYPES]; @@ -451,7 +451,7 @@ static void AddAcceptedCargo_Industry(TileIndex tile, CargoArray &acceptance, Ca } } - for (byte i = 0; i < std::size(itspec->accepts_cargo); i++) { + for (uint8_t i = 0; i < std::size(itspec->accepts_cargo); i++) { CargoID a = accepts_cargo[i]; if (!IsValidCargoID(a) || cargo_acceptance[i] <= 0) continue; // work only with valid cargoes @@ -547,7 +547,7 @@ static bool TransportIndustryGoods(TileIndex tile) static void AnimateSugarSieve(TileIndex tile) { - byte m = GetAnimationFrame(tile) + 1; + uint8_t m = GetAnimationFrame(tile) + 1; if (_settings_client.sound.ambient) { switch (m & 7) { @@ -567,7 +567,7 @@ static void AnimateSugarSieve(TileIndex tile) static void AnimateToffeeQuarry(TileIndex tile) { - byte m = GetAnimationFrame(tile); + uint8_t m = GetAnimationFrame(tile); if (_industry_anim_offs_toffee[m] == 0xFF && _settings_client.sound.ambient) { SndPlayTileFx(SND_30_TOFFEE_QUARRY, tile); @@ -584,7 +584,7 @@ static void AnimateToffeeQuarry(TileIndex tile) static void AnimateBubbleCatcher(TileIndex tile) { - byte m = GetAnimationFrame(tile); + uint8_t m = GetAnimationFrame(tile); if (++m >= 40) { m = 0; @@ -597,7 +597,7 @@ static void AnimateBubbleCatcher(TileIndex tile) static void AnimatePowerPlantSparks(TileIndex tile) { - byte m = GetAnimationFrame(tile); + uint8_t m = GetAnimationFrame(tile); if (m == 6) { SetAnimationFrame(tile, 0); DeleteAnimatedTile(tile); @@ -609,7 +609,7 @@ static void AnimatePowerPlantSparks(TileIndex tile) static void AnimateToyFactory(TileIndex tile) { - byte m = GetAnimationFrame(tile) + 1; + uint8_t m = GetAnimationFrame(tile) + 1; switch (m) { case 1: if (_settings_client.sound.ambient) SndPlayTileFx(SND_2C_TOY_FACTORY_1, tile); break; @@ -641,7 +641,7 @@ static void AnimatePlasticFountain(TileIndex tile, IndustryGfx gfx) static void AnimateOilWell(TileIndex tile, IndustryGfx gfx) { bool b = Chance16(1, 7); - byte m = GetAnimationFrame(tile) + 1; + uint8_t m = GetAnimationFrame(tile) + 1; if (m == 4 && (m = 0, ++gfx) == GFX_OILWELL_ANIMATED_3 + 1 && (gfx = GFX_OILWELL_ANIMATED_1, b)) { SetIndustryGfx(tile, GFX_OILWELL_NOT_ANIMATED); SetIndustryConstructionStage(tile, 3); @@ -661,7 +661,7 @@ static void AnimateMineTower(TileIndex tile) if (state < 0x1A0) { if (state < 0x20 || state >= 0x180) { - byte m = GetAnimationFrame(tile); + uint8_t m = GetAnimationFrame(tile); if (!(m & 0x40)) { SetAnimationFrame(tile, m | 0x40); if (_settings_client.sound.ambient) SndPlayTileFx(SND_0B_MINE, tile); @@ -670,7 +670,7 @@ static void AnimateMineTower(TileIndex tile) } else { if (state & 3) return; } - byte m = (GetAnimationFrame(tile) + 1) | 0x40; + uint8_t m = (GetAnimationFrame(tile) + 1) | 0x40; if (m > 0xC2) m = 0xC0; SetAnimationFrame(tile, m); MarkTileDirtyByTile(tile); @@ -678,7 +678,7 @@ static void AnimateMineTower(TileIndex tile) int i = (state < 0x220 || state >= 0x380) ? 7 : 3; if (state & i) return; - byte m = (GetAnimationFrame(tile) & 0xBF) - 1; + uint8_t m = (GetAnimationFrame(tile) & 0xBF) - 1; if (m < 0x80) m = 0x82; SetAnimationFrame(tile, m); MarkTileDirtyByTile(tile); @@ -747,13 +747,13 @@ static void CreateChimneySmoke(TileIndex tile) static void MakeIndustryTileBigger(TileIndex tile) { - byte cnt = GetIndustryConstructionCounter(tile) + 1; + uint8_t cnt = GetIndustryConstructionCounter(tile) + 1; if (cnt != 4) { SetIndustryConstructionCounter(tile, cnt); return; } - byte stage = GetIndustryConstructionStage(tile) + 1; + uint8_t stage = GetIndustryConstructionStage(tile) + 1; SetIndustryConstructionCounter(tile, 0); SetIndustryConstructionStage(tile, stage); StartStopIndustryTileAnimation(tile, IAT_CONSTRUCTION_STATE_CHANGE); @@ -985,7 +985,7 @@ bool IsTileForestIndustry(TileIndex tile) return std::any_of(std::begin(ind->produced), std::end(ind->produced), [](const auto &p) { return IsValidCargoID(p.cargo) && CargoSpec::Get(p.cargo)->label == CT_WOOD; }); } -static const byte _plantfarmfield_type[] = {1, 1, 1, 1, 1, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6}; +static const uint8_t _plantfarmfield_type[] = {1, 1, 1, 1, 1, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6}; /** * Check whether the tile can be replaced by a farm field. @@ -1010,7 +1010,7 @@ static bool IsSuitableForFarmField(TileIndex tile, bool allow_fields) * @param type type of fence to set * @param side the side of the tile to attempt placement */ -static void SetupFarmFieldFence(TileIndex tile, int size, byte type, DiagDirection side) +static void SetupFarmFieldFence(TileIndex tile, int size, uint8_t type, DiagDirection side) { TileIndexDiff diff = (DiagDirToAxis(side) == AXIS_Y ? TileDiffXY(1, 0) : TileDiffXY(0, 1)); TileIndexDiff neighbour_diff = TileOffsByDiagDir(side); @@ -1022,7 +1022,7 @@ static void SetupFarmFieldFence(TileIndex tile, int size, byte type, DiagDirecti TileIndex neighbour = tile + neighbour_diff; if (!IsTileType(neighbour, MP_CLEAR) || !IsClearGround(neighbour, CLEAR_FIELDS) || GetFence(neighbour, ReverseDiagDir(side)) == 0) { /* Add fence as long as neighbouring tile does not already have a fence in the same position. */ - byte or_ = type; + uint8_t or_ = type; if (or_ == 1 && Chance16(1, 7)) or_ = 2; @@ -1433,7 +1433,7 @@ static CommandCost FindTownForIndustry(TileIndex tile, int type, Town **t) if (_settings_game.economy.multiple_industry_per_town) return CommandCost(); for (const Industry *i : Industry::Iterate()) { - if (i->type == (byte)type && i->town == *t) { + if (i->type == (uint8_t)type && i->town == *t) { *t = nullptr; return_cmd_error(STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN); } @@ -1801,7 +1801,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, /* Randomize inital production if non-original economy is used and there are no production related callbacks. */ if (!indspec->UsesOriginalEconomy()) { for (auto &p : i->produced) { - p.rate = ClampTo((RandomRange(256) + 128) * p.rate >> 8); + p.rate = ClampTo((RandomRange(256) + 128) * p.rate >> 8); } } @@ -1824,7 +1824,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, /* Adding 1 here makes it conform to specs of var44 of varaction2 for industries * 0 = created prior of newindustries * else, chosen layout + 1 */ - i->selected_layout = (byte)(layout_index + 1); + i->selected_layout = (uint8_t)(layout_index + 1); i->exclusive_supplier = INVALID_OWNER; i->exclusive_consumer = INVALID_OWNER; @@ -2157,7 +2157,7 @@ CommandCost CmdIndustrySetFlags(DoCommandFlag flags, IndustryID ind_id, Industry * @param custom_news Custom news message text. * @return Empty cost or an error. */ -CommandCost CmdIndustrySetProduction(DoCommandFlag flags, IndustryID ind_id, byte prod_level, bool show_news, const std::string &custom_news) +CommandCost CmdIndustrySetProduction(DoCommandFlag flags, IndustryID ind_id, uint8_t prod_level, bool show_news, const std::string &custom_news) { if (_current_company != OWNER_DEITY) return CMD_ERROR; if (prod_level < PRODLEVEL_MINIMUM || prod_level > PRODLEVEL_MAXIMUM) return CMD_ERROR; @@ -2313,7 +2313,7 @@ static uint32_t GetScaledIndustryGenerationProbability(IndustryType it, bool *fo * @param[out] min_number Minimal number of industries that should exist at the map. * @return Relative probability for the industry to appear. */ -static uint16_t GetIndustryGamePlayProbability(IndustryType it, byte *min_number) +static uint16_t GetIndustryGamePlayProbability(IndustryType it, uint8_t *min_number) { if (_settings_game.difficulty.industry_density == ID_FUND_ONLY) { *min_number = 0; @@ -2321,7 +2321,7 @@ static uint16_t GetIndustryGamePlayProbability(IndustryType it, byte *min_number } const IndustrySpec *ind_spc = GetIndustrySpec(it); - byte chance = ind_spc->appear_ingame[_settings_game.game_creation.landscape]; + uint8_t chance = ind_spc->appear_ingame[_settings_game.game_creation.landscape]; if (!ind_spc->enabled || ind_spc->layouts.empty() || ((ind_spc->behaviour & INDUSTRYBEH_BEFORE_1950) && TimerGameCalendar::year > 1950) || ((ind_spc->behaviour & INDUSTRYBEH_AFTER_1960) && TimerGameCalendar::year < 1960) || @@ -2541,7 +2541,7 @@ void ClearAllIndustryCachedNames() */ bool IndustryTypeBuildData::GetIndustryTypeData(IndustryType it) { - byte min_number; + uint8_t min_number; uint32_t probability = GetIndustryGamePlayProbability(it, &min_number); bool changed = min_number != this->min_number || probability != this->probability; this->min_number = min_number; @@ -2801,8 +2801,8 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) bool recalculate_multipliers = false; ///< reinitialize production_rate to match prod_level /* use original economy for industries using production related callbacks */ bool original_economy = indspec->UsesOriginalEconomy(); - byte div = 0; - byte mul = 0; + uint8_t div = 0; + uint8_t mul = 0; int8_t increment = 0; bool callback_enabled = HasBit(indspec->callback_mask, monthly ? CBM_IND_MONTHLYPROD_CHANGE : CBM_IND_PRODUCTION_CHANGE); diff --git a/src/industry_cmd.h b/src/industry_cmd.h index 955ca68628..fee8034269 100644 --- a/src/industry_cmd.h +++ b/src/industry_cmd.h @@ -14,13 +14,13 @@ #include "company_type.h" #include "industry_type.h" -enum IndustryControlFlags : byte; +enum IndustryControlFlags : uint8_t; CommandCost CmdBuildIndustry(DoCommandFlag flags, TileIndex tile, IndustryType it, uint32_t first_layout, bool fund, uint32_t seed); CommandCost CmdIndustrySetFlags(DoCommandFlag flags, IndustryID ind_id, IndustryControlFlags ctlflags); CommandCost CmdIndustrySetExclusivity(DoCommandFlag flags, IndustryID ind_id, Owner company_id, bool consumer); CommandCost CmdIndustrySetText(DoCommandFlag flags, IndustryID ind_id, const std::string &text); -CommandCost CmdIndustrySetProduction(DoCommandFlag flags, IndustryID ind_id, byte prod_level, bool show_news, const std::string &text); +CommandCost CmdIndustrySetProduction(DoCommandFlag flags, IndustryID ind_id, uint8_t prod_level, bool show_news, const std::string &text); DEF_CMD_TRAIT(CMD_BUILD_INDUSTRY, CmdBuildIndustry, CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION) DEF_CMD_TRAIT(CMD_INDUSTRY_SET_FLAGS, CmdIndustrySetFlags, CMD_DEITY, CMDT_OTHER_MANAGEMENT) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index a8e5b3bfee..cf185cd3cb 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -160,7 +160,7 @@ static inline void GetAllCargoSuffixes(CargoSuffixInOut use_input, CargoSuffixTy /* Reworked behaviour with new many-in-many-out scheme */ for (uint j = 0; j < lengthof(suffixes); j++) { if (IsValidCargoID(cargoes[j])) { - byte local_id = indspec->grf_prop.grffile->cargo_map[cargoes[j]]; // should we check the value for valid? + uint8_t local_id = indspec->grf_prop.grffile->cargo_map[cargoes[j]]; // should we check the value for valid? uint cargotype = local_id << 16 | use_input; GetCargoSuffix(cargotype, cst, ind, ind_type, indspec, suffixes[j]); } else { @@ -207,7 +207,7 @@ void GetCargoSuffix(CargoSuffixInOut use_input, CargoSuffixType cst, const Indus suffix.display = CSD_CARGO; if (!IsValidCargoID(cargo)) return; if (indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED) { - byte local_id = indspec->grf_prop.grffile->cargo_map[cargo]; // should we check the value for valid? + uint8_t local_id = indspec->grf_prop.grffile->cargo_map[cargo]; // should we check the value for valid? uint cargotype = local_id << 16 | use_input; GetCargoSuffix(cargotype, cst, ind, ind_type, indspec, suffix); } else if (use_input == CARGOSUFFIX_IN) { @@ -805,7 +805,7 @@ class IndustryViewWindow : public Window Editability editable; ///< Mode for changing production InfoLine editbox_line; ///< The line clicked to open the edit box InfoLine clicked_line; ///< The line of the button that has been clicked - byte clicked_button; ///< The button that has been clicked (to raise) + uint8_t clicked_button; ///< The button that has been clicked (to raise) int production_offset_y; ///< The offset of the production texts/buttons int info_height; ///< Height needed for the #WID_IV_INFO panel int cheat_line_height; ///< Height of each line for the #WID_IV_INFO panel @@ -1048,10 +1048,10 @@ public: case EA_MULTIPLIER: if (decrease) { if (i->prod_level <= PRODLEVEL_MINIMUM) return; - i->prod_level = static_cast(std::max(i->prod_level / 2, PRODLEVEL_MINIMUM)); + i->prod_level = static_cast(std::max(i->prod_level / 2, PRODLEVEL_MINIMUM)); } else { if (i->prod_level >= PRODLEVEL_MAXIMUM) return; - i->prod_level = static_cast(std::min(i->prod_level * 2, PRODLEVEL_MAXIMUM)); + i->prod_level = static_cast(std::min(i->prod_level * 2, PRODLEVEL_MAXIMUM)); } break; @@ -1063,7 +1063,7 @@ public: if (i->produced[line - IL_RATE1].rate >= 255) return; /* a zero production industry is unlikely to give anything but zero, so push it a little bit */ int new_prod = i->produced[line - IL_RATE1].rate == 0 ? 1 : i->produced[line - IL_RATE1].rate * 2; - i->produced[line - IL_RATE1].rate = ClampTo(new_prod); + i->produced[line - IL_RATE1].rate = ClampTo(new_prod); } break; @@ -1551,7 +1551,7 @@ protected: StringID GetIndustryString(const Industry *i) const { const IndustrySpec *indsp = GetIndustrySpec(i->type); - byte p = 0; + uint8_t p = 0; /* Industry name */ SetDParam(p++, i->index); diff --git a/src/industry_map.h b/src/industry_map.h index bf664b24b0..ee45ade7c9 100644 --- a/src/industry_map.h +++ b/src/industry_map.h @@ -97,10 +97,10 @@ inline void SetIndustryCompleted(Tile tile) * @pre IsTileType(tile, MP_INDUSTRY) * @return the construction stage */ -inline byte GetIndustryConstructionStage(Tile tile) +inline uint8_t GetIndustryConstructionStage(Tile tile) { assert(IsTileType(tile, MP_INDUSTRY)); - return IsIndustryCompleted(tile) ? (byte)INDUSTRY_COMPLETED : GB(tile.m1(), 0, 2); + return IsIndustryCompleted(tile) ? (uint8_t)INDUSTRY_COMPLETED : GB(tile.m1(), 0, 2); } /** @@ -109,7 +109,7 @@ inline byte GetIndustryConstructionStage(Tile tile) * @param value the new construction stage * @pre IsTileType(tile, MP_INDUSTRY) */ -inline void SetIndustryConstructionStage(Tile tile, byte value) +inline void SetIndustryConstructionStage(Tile tile, uint8_t value) { assert(IsTileType(tile, MP_INDUSTRY)); SB(tile.m1(), 0, 2, value); @@ -159,7 +159,7 @@ inline void SetIndustryGfx(Tile t, IndustryGfx gfx) * @pre IsTileType(tile, MP_INDUSTRY) * @return the construction counter */ -inline byte GetIndustryConstructionCounter(Tile tile) +inline uint8_t GetIndustryConstructionCounter(Tile tile) { assert(IsTileType(tile, MP_INDUSTRY)); return GB(tile.m1(), 2, 2); @@ -171,7 +171,7 @@ inline byte GetIndustryConstructionCounter(Tile tile) * @param value the new value for the construction counter * @pre IsTileType(tile, MP_INDUSTRY) */ -inline void SetIndustryConstructionCounter(Tile tile, byte value) +inline void SetIndustryConstructionCounter(Tile tile, uint8_t value) { assert(IsTileType(tile, MP_INDUSTRY)); SB(tile.m1(), 2, 2, value); @@ -196,7 +196,7 @@ inline void ResetIndustryConstructionStage(Tile tile) * @param tile the tile to get the animation loop number of * @pre IsTileType(tile, MP_INDUSTRY) */ -inline byte GetIndustryAnimationLoop(Tile tile) +inline uint8_t GetIndustryAnimationLoop(Tile tile) { assert(IsTileType(tile, MP_INDUSTRY)); return tile.m4(); @@ -208,7 +208,7 @@ inline byte GetIndustryAnimationLoop(Tile tile) * @param count the new animation frame number * @pre IsTileType(tile, MP_INDUSTRY) */ -inline void SetIndustryAnimationLoop(Tile tile, byte count) +inline void SetIndustryAnimationLoop(Tile tile, uint8_t count) { assert(IsTileType(tile, MP_INDUSTRY)); tile.m4() = count; @@ -221,7 +221,7 @@ inline void SetIndustryAnimationLoop(Tile tile, byte count) * @pre IsTileType(tile, MP_INDUSTRY) * @return requested bits */ -inline byte GetIndustryRandomBits(Tile tile) +inline uint8_t GetIndustryRandomBits(Tile tile) { assert(IsTileType(tile, MP_INDUSTRY)); return tile.m3(); @@ -234,7 +234,7 @@ inline byte GetIndustryRandomBits(Tile tile) * @param bits the random bits * @pre IsTileType(tile, MP_INDUSTRY) */ -inline void SetIndustryRandomBits(Tile tile, byte bits) +inline void SetIndustryRandomBits(Tile tile, uint8_t bits) { assert(IsTileType(tile, MP_INDUSTRY)); tile.m3() = bits; @@ -247,7 +247,7 @@ inline void SetIndustryRandomBits(Tile tile, byte bits) * @pre IsTileType(tile, MP_INDUSTRY) * @return requested triggers */ -inline byte GetIndustryTriggers(Tile tile) +inline uint8_t GetIndustryTriggers(Tile tile) { assert(IsTileType(tile, MP_INDUSTRY)); return GB(tile.m6(), 3, 3); @@ -261,7 +261,7 @@ inline byte GetIndustryTriggers(Tile tile) * @param triggers the triggers to set * @pre IsTileType(tile, MP_INDUSTRY) */ -inline void SetIndustryTriggers(Tile tile, byte triggers) +inline void SetIndustryTriggers(Tile tile, uint8_t triggers) { assert(IsTileType(tile, MP_INDUSTRY)); SB(tile.m6(), 3, 3, triggers); diff --git a/src/industrytype.h b/src/industrytype.h index e1fbd881e8..7d33c2991b 100644 --- a/src/industrytype.h +++ b/src/industrytype.h @@ -108,30 +108,30 @@ struct IndustrySpec { uint32_t removal_cost_multiplier; ///< Base removal cost multiplier. uint32_t prospecting_chance; ///< Chance prospecting succeeds IndustryType conflicting[3]; ///< Industries this industry cannot be close to - byte check_proc; ///< Index to a procedure to check for conflicting circumstances + uint8_t check_proc; ///< Index to a procedure to check for conflicting circumstances CargoID produced_cargo[INDUSTRY_NUM_OUTPUTS]; std::variant produced_cargo_label[INDUSTRY_NUM_OUTPUTS]; - byte production_rate[INDUSTRY_NUM_OUTPUTS]; + uint8_t production_rate[INDUSTRY_NUM_OUTPUTS]; /** * minimum amount of cargo transported to the stations. * If the waiting cargo is less than this number, no cargo is moved to it. */ - byte minimal_cargo; + uint8_t minimal_cargo; CargoID accepts_cargo[INDUSTRY_NUM_INPUTS]; ///< 16 accepted cargoes. std::variant accepts_cargo_label[INDUSTRY_NUM_INPUTS]; uint16_t input_cargo_multiplier[INDUSTRY_NUM_INPUTS][INDUSTRY_NUM_OUTPUTS]; ///< Input cargo multipliers (multiply amount of incoming cargo for the produced cargoes) IndustryLifeType life_type; ///< This is also known as Industry production flag, in newgrf specs - byte climate_availability; ///< Bitmask, giving landscape enums as bit position + uint8_t climate_availability; ///< Bitmask, giving landscape enums as bit position IndustryBehaviour behaviour; ///< How this industry will behave, and how others entities can use it - byte map_colour; ///< colour used for the small map + uint8_t map_colour; ///< colour used for the small map StringID name; ///< Displayed name of the industry StringID new_industry_text; ///< Message appearing when the industry is built StringID closure_text; ///< Message appearing when the industry closes StringID production_up_text; ///< Message appearing when the industry's production is increasing StringID production_down_text; ///< Message appearing when the industry's production is decreasing StringID station_name; ///< Default name for nearby station - byte appear_ingame[NUM_LANDSCAPE]; ///< Probability of appearance in game - byte appear_creation[NUM_LANDSCAPE]; ///< Probability of appearance during map creation + uint8_t appear_ingame[NUM_LANDSCAPE]; ///< Probability of appearance in game + uint8_t appear_creation[NUM_LANDSCAPE]; ///< Probability of appearance during map creation uint8_t number_of_sounds; ///< Number of sounds available in the sounds array const uint8_t *random_sounds; ///< array of random sounds. /* Newgrf data */ @@ -158,8 +158,8 @@ struct IndustryTileSpec { std::array, INDUSTRY_NUM_INPUTS> accepts_cargo_label; std::array acceptance; ///< Level of acceptance per cargo type (signed, may be negative!) Slope slopes_refused; ///< slope pattern on which this tile cannot be built - byte anim_production; ///< Animation frame to start when goods are produced - byte anim_next; ///< Next frame in an animation + uint8_t anim_production; ///< Animation frame to start when goods are produced + uint8_t anim_next; ///< Next frame in an animation /** * When true, the tile has to be drawn using the animation * state instead of the construction state diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index 94399b47f8..0e1d53c84c 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -48,13 +48,13 @@ */ struct IntroGameViewportCommand { /** Horizontal alignment value. */ - enum AlignmentH : byte { + enum AlignmentH : uint8_t { LEFT, CENTRE, RIGHT, }; /** Vertical alignment value. */ - enum AlignmentV : byte { + enum AlignmentV : uint8_t { TOP, MIDDLE, BOTTOM, diff --git a/src/landscape.cpp b/src/landscape.cpp index 85aa03d6d6..6e3eaa4daf 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -76,7 +76,7 @@ const TileTypeProcs * const _tile_type_procs[16] = { }; /** landscape slope => sprite */ -extern const byte _slope_to_sprite_offset[32] = { +extern const uint8_t _slope_to_sprite_offset[32] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 17, 0, 15, 18, 0, }; @@ -455,7 +455,7 @@ void DrawFoundation(TileInfo *ti, Foundation f) if (IsInclinedFoundation(f)) { /* inclined foundation */ - byte inclined = highest_corner * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0); + uint8_t inclined = highest_corner * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0); AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, ti->x, ti->y, f == FOUNDATION_INCLINED_X ? TILE_SIZE : 1, @@ -510,7 +510,7 @@ void DrawFoundation(TileInfo *ti, Foundation f) OffsetGroundSprite(0, 0); } else { /* inclined foundation */ - byte inclined = GetHighestSlopeCorner(ti->tileh) * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0); + uint8_t inclined = GetHighestSlopeCorner(ti->tileh) * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0); AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, ti->x, ti->y, f == FOUNDATION_INCLINED_X ? TILE_SIZE : 1, @@ -582,7 +582,7 @@ bool IsSnowLineSet() * @param table the 12 * 32 byte table containing the snowline for each day * @ingroup SnowLineGroup */ -void SetSnowLine(byte table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS]) +void SetSnowLine(uint8_t table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS]) { _snow_line = CallocT(1); _snow_line->lowest_value = 0xFF; @@ -601,7 +601,7 @@ void SetSnowLine(byte table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS]) * @return the snow line height. * @ingroup SnowLineGroup */ -byte GetSnowLine() +uint8_t GetSnowLine() { if (_snow_line == nullptr) return _settings_game.game_creation.snow_line_height; @@ -614,7 +614,7 @@ byte GetSnowLine() * @return the highest snow line height. * @ingroup SnowLineGroup */ -byte HighestSnowLine() +uint8_t HighestSnowLine() { return _snow_line == nullptr ? _settings_game.game_creation.snow_line_height : _snow_line->highest_value; } @@ -624,7 +624,7 @@ byte HighestSnowLine() * @return the lowest snow line height. * @ingroup SnowLineGroup */ -byte LowestSnowLine() +uint8_t LowestSnowLine() { return _snow_line == nullptr ? _settings_game.game_creation.snow_line_height : _snow_line->lowest_value; } @@ -805,8 +805,8 @@ void InitializeLandscape() for (uint y = 0; y < Map::SizeY(); y++) MakeVoid(TileXY(Map::MaxX(), y)); } -static const byte _genterrain_tbl_1[5] = { 10, 22, 33, 37, 4 }; -static const byte _genterrain_tbl_2[5] = { 0, 0, 0, 0, 33 }; +static const uint8_t _genterrain_tbl_1[5] = { 10, 22, 33, 37, 4 }; +static const uint8_t _genterrain_tbl_2[5] = { 0, 0, 0, 0, 33 }; static void GenerateTerrain(int type, uint flag) { @@ -830,7 +830,7 @@ static void GenerateTerrain(int type, uint flag) if (DiagDirToAxis(direction) == AXIS_Y) Swap(w, h); - const byte *p = templ->data; + const uint8_t *p = templ->data; if ((flag & 4) != 0) { /* This is only executed in secondary/tertiary loops to generate the terrain for arctic and tropic. @@ -1550,7 +1550,7 @@ static uint8_t CalculateDesertLine() return CalculateCoverageLine(100 - _settings_game.game_creation.desert_coverage, 4); } -bool GenerateLandscape(byte mode) +bool GenerateLandscape(uint8_t mode) { /** Number of steps of landscape generation */ enum GenLandscapeSteps { diff --git a/src/landscape.h b/src/landscape.h index 0228e88c84..7d92ce1273 100644 --- a/src/landscape.h +++ b/src/landscape.h @@ -21,16 +21,16 @@ static const uint SNOW_LINE_DAYS = 32; ///< Number of days in each month in th * @ingroup SnowLineGroup */ struct SnowLine { - byte table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS]; ///< Height of the snow line each day of the year - byte highest_value; ///< Highest snow line of the year - byte lowest_value; ///< Lowest snow line of the year + uint8_t table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS]; ///< Height of the snow line each day of the year + uint8_t highest_value; ///< Highest snow line of the year + uint8_t lowest_value; ///< Lowest snow line of the year }; bool IsSnowLineSet(); -void SetSnowLine(byte table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS]); -byte GetSnowLine(); -byte HighestSnowLine(); -byte LowestSnowLine(); +void SetSnowLine(uint8_t table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS]); +uint8_t GetSnowLine(); +uint8_t HighestSnowLine(); +uint8_t LowestSnowLine(); void ClearSnowLine(); int GetSlopeZInCorner(Slope tileh, Corner corner); @@ -136,6 +136,6 @@ void DoClearSquare(TileIndex tile); void RunTileLoop(); void InitializeLandscape(); -bool GenerateLandscape(byte mode); +bool GenerateLandscape(uint8_t mode); #endif /* LANDSCAPE_H */ diff --git a/src/landscape_type.h b/src/landscape_type.h index 80b541bea4..81bed326e2 100644 --- a/src/landscape_type.h +++ b/src/landscape_type.h @@ -10,7 +10,7 @@ #ifndef LANDSCAPE_TYPE_H #define LANDSCAPE_TYPE_H -typedef byte LandscapeID; ///< Landscape type. @see LandscapeType +typedef uint8_t LandscapeID; ///< Landscape type. @see LandscapeType /** Landscape types */ enum LandscapeType { diff --git a/src/language.h b/src/language.h index 8068bdb328..c67df2bda1 100644 --- a/src/language.h +++ b/src/language.h @@ -38,8 +38,8 @@ struct LanguagePackHeader { /** Decimal separator */ char digit_decimal_separator[8]; uint16_t missing; ///< number of missing strings. - byte plural_form; ///< plural form index - byte text_dir; ///< default direction of the text + uint8_t plural_form; ///< plural form index + uint8_t text_dir; ///< default direction of the text /** * Windows language ID: * Windows cannot and will not convert isocodes to something it can use to @@ -52,7 +52,7 @@ struct LanguagePackHeader { uint8_t newgrflangid; ///< newgrf language id uint8_t num_genders; ///< the number of genders of this language uint8_t num_cases; ///< the number of cases of this language - byte pad[3]; ///< pad header to be a multiple of 4 + uint8_t pad[3]; ///< pad header to be a multiple of 4 char genders[MAX_NUM_GENDERS][CASE_GENDER_LEN]; ///< the genders used by this translation char cases[MAX_NUM_CASES][CASE_GENDER_LEN]; ///< the cases used by this translation @@ -108,6 +108,6 @@ extern std::unique_ptr _current_collator; #endif /* WITH_ICU_I18N */ bool ReadLanguagePack(const LanguageMetadata *lang); -const LanguageMetadata *GetLanguage(byte newgrflangid); +const LanguageMetadata *GetLanguage(uint8_t newgrflangid); #endif /* LANGUAGE_H */ diff --git a/src/league_type.h b/src/league_type.h index 335edd78b3..8954d66e5f 100644 --- a/src/league_type.h +++ b/src/league_type.h @@ -11,7 +11,7 @@ #define LEAGUE_TYPE_H /** Types of the possible link targets. */ -enum LinkType : byte { +enum LinkType : uint8_t { LT_NONE = 0, ///< No link LT_TILE = 1, ///< Link a tile LT_INDUSTRY = 2, ///< Link an industry diff --git a/src/linkgraph/linkgraph_type.h b/src/linkgraph/linkgraph_type.h index 1627767ed4..946f2cd930 100644 --- a/src/linkgraph/linkgraph_type.h +++ b/src/linkgraph/linkgraph_type.h @@ -19,7 +19,7 @@ static const LinkGraphJobID INVALID_LINK_GRAPH_JOB = UINT16_MAX; typedef uint16_t NodeID; static const NodeID INVALID_NODE = UINT16_MAX; -enum DistributionType : byte { +enum DistributionType : uint8_t { DT_BEGIN = 0, DT_MIN = 0, DT_MANUAL = 0, ///< Manual distribution. No link graph calculations are run. diff --git a/src/linkgraph/refresh.cpp b/src/linkgraph/refresh.cpp index 8cb6c81ec3..205f51ac11 100644 --- a/src/linkgraph/refresh.cpp +++ b/src/linkgraph/refresh.cpp @@ -102,7 +102,7 @@ bool LinkRefresher::HandleRefit(CargoID refit_cargo) /* Back up the vehicle's cargo type */ CargoID temp_cid = v->cargo_type; - byte temp_subtype = v->cargo_subtype; + uint8_t temp_subtype = v->cargo_subtype; v->cargo_type = this->cargo; v->cargo_subtype = GetBestFittingSubType(v, v, this->cargo); diff --git a/src/livery.h b/src/livery.h index 302d40e404..d9371fb9ba 100644 --- a/src/livery.h +++ b/src/livery.h @@ -13,12 +13,12 @@ #include "company_type.h" #include "gfx_type.h" -static const byte LIT_NONE = 0; ///< Don't show the liveries at all -static const byte LIT_COMPANY = 1; ///< Show the liveries of your own company -static const byte LIT_ALL = 2; ///< Show the liveries of all companies +static const uint8_t LIT_NONE = 0; ///< Don't show the liveries at all +static const uint8_t LIT_COMPANY = 1; ///< Show the liveries of your own company +static const uint8_t LIT_ALL = 2; ///< Show the liveries of all companies /** List of different livery schemes. */ -enum LiveryScheme : byte { +enum LiveryScheme : uint8_t { LS_BEGIN = 0, LS_DEFAULT = 0, @@ -60,7 +60,7 @@ enum LiveryScheme : byte { DECLARE_POSTFIX_INCREMENT(LiveryScheme) /** List of different livery classes, used only by the livery GUI. */ -enum LiveryClass : byte { +enum LiveryClass : uint8_t { LC_OTHER, LC_RAIL, LC_ROAD, @@ -76,7 +76,7 @@ DECLARE_ENUM_AS_ADDABLE(LiveryClass) /** Information about a particular livery. */ struct Livery { - byte in_use; ///< Bit 0 set if this livery should override the default livery first colour, Bit 1 for the second colour. + uint8_t in_use; ///< Bit 0 set if this livery should override the default livery first colour, Bit 1 for the second colour. Colours colour1; ///< First colour, for all vehicles. Colours colour2; ///< Second colour, for vehicles with 2CC support. }; diff --git a/src/main_gui.cpp b/src/main_gui.cpp index 2784e04cda..d93b9eeb2a 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -335,7 +335,7 @@ struct MainWindow : Window case GHK_REFRESH_SCREEN: MarkWholeScreenDirty(); break; case GHK_CRASH: // Crash the game - *(volatile byte *)nullptr = 0; + *(volatile uint8_t *)nullptr = 0; break; case GHK_MONEY: // Gimme money @@ -541,7 +541,7 @@ void ShowSelectGameWindow(); void SetupColoursAndInitialWindow() { for (Colours i = COLOUR_BEGIN; i != COLOUR_END; i++) { - const byte *b = GetNonSprite(GENERAL_SPRITE_COLOUR(i), SpriteType::Recolour) + 1; + const uint8_t *b = GetNonSprite(GENERAL_SPRITE_COLOUR(i), SpriteType::Recolour) + 1; assert(b != nullptr); for (ColourShade j = SHADE_BEGIN; j < SHADE_END; j++) { SetColourGradient(i, j, b[0xC6 + j]); diff --git a/src/map_func.h b/src/map_func.h index 948165df0d..7d3e11cd80 100644 --- a/src/map_func.h +++ b/src/map_func.h @@ -30,13 +30,13 @@ private: * Look at docs/landscape.html for the exact meaning of the members. */ struct TileBase { - byte type; ///< The type (bits 4..7), bridges (2..3), rainforest/desert (0..1) - byte height; ///< The height of the northern corner. + uint8_t type; ///< The type (bits 4..7), bridges (2..3), rainforest/desert (0..1) + uint8_t height; ///< The height of the northern corner. uint16_t m2; ///< Primarily used for indices to towns, industries and stations - byte m1; ///< Primarily used for ownership information - byte m3; ///< General purpose - byte m4; ///< General purpose - byte m5; ///< General purpose + uint8_t m1; ///< Primarily used for ownership information + uint8_t m3; ///< General purpose + uint8_t m4; ///< General purpose + uint8_t m5; ///< General purpose }; static_assert(sizeof(TileBase) == 8); @@ -46,8 +46,8 @@ private: * Look at docs/landscape.html for the exact meaning of the members. */ struct TileExtended { - byte m6; ///< General purpose - byte m7; ///< Primarily used for newgrf support + uint8_t m6; ///< General purpose + uint8_t m7; ///< Primarily used for newgrf support uint16_t m8; ///< General purpose }; @@ -86,7 +86,7 @@ public: * @param tile The tile to get the data for. * @return reference to the byte holding the data. */ - debug_inline byte &type() + debug_inline uint8_t &type() { return base_tiles[tile.base()].type; } @@ -98,7 +98,7 @@ public: * @param tile The tile to get the height for. * @return reference to the byte holding the height. */ - debug_inline byte &height() + debug_inline uint8_t &height() { return base_tiles[tile.base()].height; } @@ -110,7 +110,7 @@ public: * @param tile The tile to get the data for. * @return reference to the byte holding the data. */ - debug_inline byte &m1() + debug_inline uint8_t &m1() { return base_tiles[tile.base()].m1; } @@ -134,7 +134,7 @@ public: * @param tile The tile to get the data for. * @return reference to the byte holding the data. */ - debug_inline byte &m3() + debug_inline uint8_t &m3() { return base_tiles[tile.base()].m3; } @@ -146,7 +146,7 @@ public: * @param tile The tile to get the data for. * @return reference to the byte holding the data. */ - debug_inline byte &m4() + debug_inline uint8_t &m4() { return base_tiles[tile.base()].m4; } @@ -158,7 +158,7 @@ public: * @param tile The tile to get the data for. * @return reference to the byte holding the data. */ - debug_inline byte &m5() + debug_inline uint8_t &m5() { return base_tiles[tile.base()].m5; } @@ -170,7 +170,7 @@ public: * @param tile The tile to get the data for. * @return reference to the byte holding the data. */ - debug_inline byte &m6() + debug_inline uint8_t &m6() { return extended_tiles[tile.base()].m6; } @@ -182,7 +182,7 @@ public: * @param tile The tile to get the data for. * @return reference to the byte holding the data. */ - debug_inline byte &m7() + debug_inline uint8_t &m7() { return extended_tiles[tile.base()].m7; } diff --git a/src/map_type.h b/src/map_type.h index 3ff770d15d..246b6c0432 100644 --- a/src/map_type.h +++ b/src/map_type.h @@ -52,7 +52,7 @@ static const uint MAX_MAP_SIZE = 1U << MAX_MAP_SIZE_BITS; ///< Maximal map #define STRAIGHT_TRACK_LENGTH 7071/10000 /** Argument for CmdLevelLand describing what to do. */ -enum LevelMode : byte { +enum LevelMode : uint8_t { LM_LEVEL, ///< Level the land. LM_LOWER, ///< Lower the land. LM_RAISE, ///< Raise the land. diff --git a/src/misc/endian_buffer.hpp b/src/misc/endian_buffer.hpp index 3229029c53..29e810fa2b 100644 --- a/src/misc/endian_buffer.hpp +++ b/src/misc/endian_buffer.hpp @@ -22,7 +22,7 @@ struct StrongTypedefBase; * as this allows providing custom operator overloads for more complex types * like e.g. structs without needing to modify this class. */ -template , typename Titer = typename std::back_insert_iterator> +template , typename Titer = typename std::back_insert_iterator> class EndianBufferWriter { /** Output iterator for the destination buffer. */ Titer buffer; @@ -34,7 +34,7 @@ public: EndianBufferWriter &operator <<(const std::string &data) { return *this << std::string_view{ data }; } EndianBufferWriter &operator <<(const char *data) { return *this << std::string_view{ data }; } EndianBufferWriter &operator <<(std::string_view data) { this->Write(data); return *this; } - EndianBufferWriter &operator <<(bool data) { return *this << static_cast(data ? 1 : 0); } + EndianBufferWriter &operator <<(bool data) { return *this << static_cast(data ? 1 : 0); } template EndianBufferWriter &operator <<(const OverflowSafeInt &data) { return *this << static_cast(data); }; @@ -59,7 +59,7 @@ public: return *this; } - template > + template > static Tbuf FromValue(const Tvalue &data) { Tbuf buffer; @@ -118,17 +118,17 @@ private: */ class EndianBufferReader { /** Reference to storage buffer. */ - std::span buffer; + std::span buffer; /** Current read position. */ size_t read_pos = 0; public: - EndianBufferReader(std::span buffer) : buffer(buffer) {} + EndianBufferReader(std::span buffer) : buffer(buffer) {} void rewind() { this->read_pos = 0; } EndianBufferReader &operator >>(std::string &data) { data = this->ReadStr(); return *this; } - EndianBufferReader &operator >>(bool &data) { data = this->Read() != 0; return *this; } + EndianBufferReader &operator >>(bool &data) { data = this->Read() != 0; return *this; } template EndianBufferReader &operator >>(OverflowSafeInt &data) { data = this->Read(); return *this; }; @@ -154,7 +154,7 @@ public: } template - static Tvalue ToValue(std::span buffer) + static Tvalue ToValue(std::span buffer) { Tvalue result{}; EndianBufferReader reader{ buffer }; diff --git a/src/misc/fixedsizearray.hpp b/src/misc/fixedsizearray.hpp index 7a2c97b58b..f06492ff13 100644 --- a/src/misc/fixedsizearray.hpp +++ b/src/misc/fixedsizearray.hpp @@ -41,13 +41,13 @@ protected: /** return reference to the array header (non-const) */ inline ArrayHeader &Hdr() { - return *(ArrayHeader*)(((byte*)data) - HeaderSize); + return *(ArrayHeader*)(((uint8_t*)data) - HeaderSize); } /** return reference to the array header (const) */ inline const ArrayHeader &Hdr() const { - return *(ArrayHeader*)(((byte*)data) - HeaderSize); + return *(ArrayHeader*)(((uint8_t*)data) - HeaderSize); } /** return reference to the block reference counter */ @@ -70,7 +70,7 @@ public: static_assert(C < (SIZE_MAX - HeaderSize) / Tsize); /* allocate block for header + items (don't construct items) */ - data = (T*)((MallocT(HeaderSize + C * Tsize)) + HeaderSize); + data = (T*)((MallocT(HeaderSize + C * Tsize)) + HeaderSize); SizeRef() = 0; // initial number of items RefCnt() = 1; // initial reference counter } @@ -91,7 +91,7 @@ public: Clear(); /* free the memory block occupied by items */ - free(((byte*)data) - HeaderSize); + free(((uint8_t*)data) - HeaderSize); data = nullptr; } diff --git a/src/misc/getoptdata.h b/src/misc/getoptdata.h index f578769df5..e9a8e824a2 100644 --- a/src/misc/getoptdata.h +++ b/src/misc/getoptdata.h @@ -20,7 +20,7 @@ enum OptionDataFlags { /** Data of an option. */ struct OptionData { - byte id; ///< Unique identification of this option data, often the same as #shortname. + uint8_t id; ///< Unique identification of this option data, often the same as #shortname. char shortname; ///< Short option letter if available, else use \c '\0'. uint16_t flags; ///< Option data flags. @see OptionDataFlags const char *longname; ///< Long option name including '-'/'--' prefix, use \c nullptr if not available. diff --git a/src/misc_cmd.h b/src/misc_cmd.h index 47cdf760ae..f0d30df397 100644 --- a/src/misc_cmd.h +++ b/src/misc_cmd.h @@ -13,9 +13,9 @@ #include "command_type.h" #include "economy_type.h" -enum PauseMode : byte; +enum PauseMode : uint8_t; -enum class LoanCommand : byte { +enum class LoanCommand : uint8_t { Interval, Max, Amount, diff --git a/src/music.cpp b/src/music.cpp index 825ae388b0..64601cb769 100644 --- a/src/music.cpp +++ b/src/music.cpp @@ -35,7 +35,7 @@ char *GetMusicCatEntryName(const std::string &filename, size_t entrynum) if (entrynum < entry_count) { file.SeekTo(entrynum * 8, SEEK_SET); file.SeekTo(file.ReadDword(), SEEK_SET); - byte namelen = file.ReadByte(); + uint8_t namelen = file.ReadByte(); char *name = MallocT(namelen + 1); file.ReadBlock(name, namelen); name[namelen] = '\0'; @@ -52,7 +52,7 @@ char *GetMusicCatEntryName(const std::string &filename, size_t entrynum) * @return Pointer to buffer with data read, caller is responsible for freeind memory, * nullptr if entrynum does not exist. */ -byte *GetMusicCatEntryData(const std::string &filename, size_t entrynum, size_t &entrylen) +uint8_t *GetMusicCatEntryData(const std::string &filename, size_t entrynum, size_t &entrylen) { entrylen = 0; if (!FioCheckFileExists(filename, BASESET_DIR)) return nullptr; @@ -66,7 +66,7 @@ byte *GetMusicCatEntryData(const std::string &filename, size_t entrynum, size_t entrylen = file.ReadDword(); file.SeekTo(entrypos, SEEK_SET); file.SkipBytes(file.ReadByte()); - byte *data = MallocT(entrylen); + uint8_t *data = MallocT(entrylen); file.ReadBlock(data, entrylen); return data; } diff --git a/src/music/allegro_m.cpp b/src/music/allegro_m.cpp index b4fd0da8b2..849be0f87c 100644 --- a/src/music/allegro_m.cpp +++ b/src/music/allegro_m.cpp @@ -80,7 +80,7 @@ bool MusicDriver_Allegro::IsSongPlaying() return midi_pos >= 0; } -void MusicDriver_Allegro::SetVolume(byte vol) +void MusicDriver_Allegro::SetVolume(uint8_t vol) { set_volume(-1, vol); } diff --git a/src/music/allegro_m.h b/src/music/allegro_m.h index b07a7073b6..697fad4661 100644 --- a/src/music/allegro_m.h +++ b/src/music/allegro_m.h @@ -25,7 +25,7 @@ public: bool IsSongPlaying() override; - void SetVolume(byte vol) override; + void SetVolume(uint8_t vol) override; const char *GetName() const override { return "allegro"; } }; diff --git a/src/music/bemidi.cpp b/src/music/bemidi.cpp index 3e4f5b311c..6fda4cfe06 100644 --- a/src/music/bemidi.cpp +++ b/src/music/bemidi.cpp @@ -69,7 +69,7 @@ bool MusicDriver_BeMidi::IsSongPlaying() return !this->midi_synth_file->IsFinished(); } -void MusicDriver_BeMidi::SetVolume(byte vol) +void MusicDriver_BeMidi::SetVolume(uint8_t vol) { this->current_volume = vol / 128.0; if (this->midi_synth_file != nullptr) this->midi_synth_file->SetVolume(this->current_volume); diff --git a/src/music/bemidi.h b/src/music/bemidi.h index c4ab1f3599..52e9d7bd68 100644 --- a/src/music/bemidi.h +++ b/src/music/bemidi.h @@ -28,7 +28,7 @@ public: bool IsSongPlaying() override; - void SetVolume(byte vol) override; + void SetVolume(uint8_t vol) override; const char *GetName() const override { return "bemidi"; } private: diff --git a/src/music/cocoa_m.cpp b/src/music/cocoa_m.cpp index bd9dfc59a1..088f5bdf00 100644 --- a/src/music/cocoa_m.cpp +++ b/src/music/cocoa_m.cpp @@ -37,7 +37,7 @@ static MusicPlayer _player = nullptr; static MusicSequence _sequence = nullptr; static MusicTimeStamp _seq_length = 0; static bool _playing = false; -static byte _volume = 127; +static uint8_t _volume = 127; /** Set the volume of the current sequence. */ @@ -193,7 +193,7 @@ void MusicDriver_Cocoa::StopSong() * * @param vol The desired volume, range of the value is @c 0-127 */ -void MusicDriver_Cocoa::SetVolume(byte vol) +void MusicDriver_Cocoa::SetVolume(uint8_t vol) { _volume = vol; DoSetVolume(); diff --git a/src/music/cocoa_m.h b/src/music/cocoa_m.h index 046a60c386..ffa87b00fc 100644 --- a/src/music/cocoa_m.h +++ b/src/music/cocoa_m.h @@ -24,7 +24,7 @@ public: bool IsSongPlaying() override; - void SetVolume(byte vol) override; + void SetVolume(uint8_t vol) override; const char *GetName() const override { return "cocoa"; } }; diff --git a/src/music/dmusic.cpp b/src/music/dmusic.cpp index 640a0c771e..50be53accb 100644 --- a/src/music/dmusic.cpp +++ b/src/music/dmusic.cpp @@ -128,7 +128,7 @@ static struct { bool do_stop; ///< flag for stopping playback at next opportunity int preload_time; ///< preload time for music blocks. - byte new_volume; ///< volume setting to change to + uint8_t new_volume; ///< volume setting to change to MidiFile next_file; ///< upcoming file to play PlaybackSegment next_segment; ///< segment info for upcoming file @@ -519,12 +519,12 @@ bool DLSFile::LoadFile(const wchar_t *file) } -static byte ScaleVolume(byte original, byte scale) +static uint8_t ScaleVolume(uint8_t original, uint8_t scale) { return original * scale / 127; } -static void TransmitChannelMsg(IDirectMusicBuffer *buffer, REFERENCE_TIME rt, byte status, byte p1, byte p2 = 0) +static void TransmitChannelMsg(IDirectMusicBuffer *buffer, REFERENCE_TIME rt, uint8_t status, uint8_t p1, uint8_t p2 = 0) { if (buffer->PackStructured(rt, 0, status | (p1 << 8) | (p2 << 16)) == E_OUTOFMEMORY) { /* Buffer is full, clear it and try again. */ @@ -535,10 +535,10 @@ static void TransmitChannelMsg(IDirectMusicBuffer *buffer, REFERENCE_TIME rt, by } } -static void TransmitSysex(IDirectMusicBuffer *buffer, REFERENCE_TIME rt, const byte *&msg_start, size_t &remaining) +static void TransmitSysex(IDirectMusicBuffer *buffer, REFERENCE_TIME rt, const uint8_t *&msg_start, size_t &remaining) { /* Find end of message. */ - const byte *msg_end = msg_start; + const uint8_t *msg_end = msg_start; while (*msg_end != MIDIST_ENDSYSEX) msg_end++; msg_end++; // Also include SysEx end byte. @@ -558,7 +558,7 @@ static void TransmitSysex(IDirectMusicBuffer *buffer, REFERENCE_TIME rt, const b static void TransmitStandardSysex(IDirectMusicBuffer *buffer, REFERENCE_TIME rt, MidiSysexMessage msg) { size_t length = 0; - const byte *data = MidiGetStandardSysexMessage(msg, length); + const uint8_t *data = MidiGetStandardSysexMessage(msg, length); TransmitSysex(buffer, rt, data, length); } @@ -594,8 +594,8 @@ static void MidiThreadProc() MidiFile current_file; // file currently being played from PlaybackSegment current_segment; // segment info for current playback size_t current_block = 0; // next block index to send - byte current_volume = 0; // current effective volume setting - byte channel_volumes[16]; // last seen volume controller values in raw data + uint8_t current_volume = 0; // current effective volume setting + uint8_t channel_volumes[16]; // last seen volume controller values in raw data /* Get pointer to the reference clock of our output port. */ IReferenceClock *clock; @@ -650,7 +650,7 @@ static void MidiThreadProc() clock->GetTime(&cur_time); TransmitNotesOff(_buffer, block_time, cur_time); - MemSetT(channel_volumes, 127, lengthof(channel_volumes)); + MemSetT(channel_volumes, 127, lengthof(channel_volumes)); /* Invalidate current volume. */ current_volume = UINT8_MAX; last_volume_time = 0; @@ -735,13 +735,13 @@ static void MidiThreadProc() block_time = playback_start_time + block.realtime * MIDITIME_TO_REFTIME; Debug(driver, 9, "DMusic thread: Streaming block {} (cur={}, block={})", current_block, (long long)(current_time / MS_TO_REFTIME), (long long)(block_time / MS_TO_REFTIME)); - const byte *data = block.data.data(); + const uint8_t *data = block.data.data(); size_t remaining = block.data.size(); - byte last_status = 0; + uint8_t last_status = 0; while (remaining > 0) { /* MidiFile ought to have converted everything out of running status, * but handle it anyway just to be safe */ - byte status = data[0]; + uint8_t status = data[0]; if (status & 0x80) { last_status = status; data++; @@ -1237,7 +1237,7 @@ bool MusicDriver_DMusic::IsSongPlaying() } -void MusicDriver_DMusic::SetVolume(byte vol) +void MusicDriver_DMusic::SetVolume(uint8_t vol) { _playback.new_volume = vol; } diff --git a/src/music/dmusic.h b/src/music/dmusic.h index 616bf01208..9c2e009dcd 100644 --- a/src/music/dmusic.h +++ b/src/music/dmusic.h @@ -27,7 +27,7 @@ public: bool IsSongPlaying() override; - void SetVolume(byte vol) override; + void SetVolume(uint8_t vol) override; const char *GetName() const override { return "dmusic"; } }; diff --git a/src/music/extmidi.cpp b/src/music/extmidi.cpp index af62d3488d..1538b1e7a6 100644 --- a/src/music/extmidi.cpp +++ b/src/music/extmidi.cpp @@ -95,7 +95,7 @@ bool MusicDriver_ExtMidi::IsSongPlaying() return this->pid != -1; } -void MusicDriver_ExtMidi::SetVolume(byte) +void MusicDriver_ExtMidi::SetVolume(uint8_t) { Debug(driver, 1, "extmidi: set volume not implemented"); } diff --git a/src/music/extmidi.h b/src/music/extmidi.h index b106ef91f8..ee4ebb8eff 100644 --- a/src/music/extmidi.h +++ b/src/music/extmidi.h @@ -32,7 +32,7 @@ public: bool IsSongPlaying() override; - void SetVolume(byte vol) override; + void SetVolume(uint8_t vol) override; const char *GetName() const override { return "extmidi"; } }; diff --git a/src/music/fluidsynth.cpp b/src/music/fluidsynth.cpp index 7a900579e2..6cb92e6363 100644 --- a/src/music/fluidsynth.cpp +++ b/src/music/fluidsynth.cpp @@ -183,7 +183,7 @@ bool MusicDriver_FluidSynth::IsSongPlaying() return fluid_player_get_status(_midi.player) == FLUID_PLAYER_PLAYING; } -void MusicDriver_FluidSynth::SetVolume(byte vol) +void MusicDriver_FluidSynth::SetVolume(uint8_t vol) { std::lock_guard lock{ _midi.synth_mutex }; if (_midi.settings == nullptr) return; diff --git a/src/music/fluidsynth.h b/src/music/fluidsynth.h index 91543662d0..8eac4c000a 100644 --- a/src/music/fluidsynth.h +++ b/src/music/fluidsynth.h @@ -25,7 +25,7 @@ public: bool IsSongPlaying() override; - void SetVolume(byte vol) override; + void SetVolume(uint8_t vol) override; const char *GetName() const override { return "fluidsynth"; } }; diff --git a/src/music/midi.h b/src/music/midi.h index 38f82220f4..a0546a8e88 100644 --- a/src/music/midi.h +++ b/src/music/midi.h @@ -152,6 +152,6 @@ enum class MidiSysexMessage { RolandSetReverb, }; -const byte *MidiGetStandardSysexMessage(MidiSysexMessage msg, size_t &length); +const uint8_t *MidiGetStandardSysexMessage(MidiSysexMessage msg, size_t &length); #endif /* MUSIC_MIDI_H */ diff --git a/src/music/midifile.cpp b/src/music/midifile.cpp index fbb1a1dee1..ece0046c8d 100644 --- a/src/music/midifile.cpp +++ b/src/music/midifile.cpp @@ -30,12 +30,12 @@ static MidiFile *_midifile_instance = nullptr; * @param[out] length Receives the length of the returned buffer * @return Pointer to byte buffer with sysex message */ -const byte *MidiGetStandardSysexMessage(MidiSysexMessage msg, size_t &length) +const uint8_t *MidiGetStandardSysexMessage(MidiSysexMessage msg, size_t &length) { - static byte reset_gm_sysex[] = { 0xF0, 0x7E, 0x7F, 0x09, 0x01, 0xF7 }; - static byte reset_gs_sysex[] = { 0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x00, 0x41, 0xF7 }; - static byte reset_xg_sysex[] = { 0xF0, 0x43, 0x10, 0x4C, 0x00, 0x00, 0x7E, 0x00, 0xF7 }; - static byte roland_reverb_sysex[] = { 0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x01, 0x30, 0x02, 0x04, 0x00, 0x40, 0x40, 0x00, 0x00, 0x09, 0xF7 }; + static uint8_t reset_gm_sysex[] = { 0xF0, 0x7E, 0x7F, 0x09, 0x01, 0xF7 }; + static uint8_t reset_gs_sysex[] = { 0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x00, 0x41, 0xF7 }; + static uint8_t reset_xg_sysex[] = { 0xF0, 0x43, 0x10, 0x4C, 0x00, 0x00, 0x7E, 0x00, 0xF7 }; + static uint8_t roland_reverb_sysex[] = { 0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x01, 0x30, 0x02, 0x04, 0x00, 0x40, 0x40, 0x00, 0x00, 0x09, 0xF7 }; switch (msg) { case MidiSysexMessage::ResetGM: @@ -60,7 +60,7 @@ const byte *MidiGetStandardSysexMessage(MidiSysexMessage msg, size_t &length) * RAII-compliant to make teardown in error situations easier. */ class ByteBuffer { - std::vector buf; + std::vector buf; size_t pos; public: /** @@ -104,7 +104,7 @@ public: * @param[out] b returns the read value * @return true if a byte was available for reading */ - bool ReadByte(byte &b) + bool ReadByte(uint8_t &b) { if (this->IsEnd()) return false; b = this->buf[this->pos++]; @@ -121,7 +121,7 @@ public: bool ReadVariableLength(uint32_t &res) { res = 0; - byte b = 0; + uint8_t b = 0; do { if (this->IsEnd()) return false; b = this->buf[this->pos++]; @@ -136,7 +136,7 @@ public: * @param length number of bytes to read * @return true if the requested number of bytes were available */ - bool ReadBuffer(byte *dest, size_t length) + bool ReadBuffer(uint8_t *dest, size_t length) { if (this->IsEnd()) return false; if (this->buf.size() - this->pos < length) return false; @@ -188,9 +188,9 @@ public: static bool ReadTrackChunk(FILE *file, MidiFile &target) { - byte buf[4]; + uint8_t buf[4]; - const byte magic[] = { 'M', 'T', 'r', 'k' }; + const uint8_t magic[] = { 'M', 'T', 'r', 'k' }; if (fread(buf, sizeof(magic), 1, file) != 1) { return false; } @@ -213,7 +213,7 @@ static bool ReadTrackChunk(FILE *file, MidiFile &target) target.blocks.push_back(MidiFile::DataBlock()); MidiFile::DataBlock *block = &target.blocks.back(); - byte last_status = 0; + uint8_t last_status = 0; bool running_sysex = false; while (!chunk.IsEnd()) { /* Read deltatime for event, start new block */ @@ -227,7 +227,7 @@ static bool ReadTrackChunk(FILE *file, MidiFile &target) } /* Read status byte */ - byte status; + uint8_t status; if (!chunk.ReadByte(status)) { return false; } @@ -422,13 +422,13 @@ bool MidiFile::ReadSMFHeader(const std::string &filename, SMFHeader &header) bool MidiFile::ReadSMFHeader(FILE *file, SMFHeader &header) { /* Try to read header, fixed size */ - byte buffer[14]; + uint8_t buffer[14]; if (fread(buffer, sizeof(buffer), 1, file) != 1) { return false; } /* Check magic, 'MThd' followed by 4 byte length indicator (always = 6 in SMF) */ - const byte magic[] = { 'M', 'T', 'h', 'd', 0x00, 0x00, 0x00, 0x06 }; + const uint8_t magic[] = { 'M', 'T', 'h', 'd', 0x00, 0x00, 0x00, 0x06 }; if (MemCmpT(buffer, magic, sizeof(magic)) != 0) { return false; } @@ -505,8 +505,8 @@ cleanup: struct MpsMachine { /** Starting parameter and playback status for one channel/track */ struct Channel { - byte cur_program; ///< program selected, used for velocity scaling (lookup into programvelocities array) - byte running_status; ///< last midi status code seen + uint8_t cur_program; ///< program selected, used for velocity scaling (lookup into programvelocities array) + uint8_t running_status; ///< last midi status code seen uint16_t delay; ///< frames until next command uint32_t playpos; ///< next byte to play this channel from uint32_t startpos; ///< start position of master track @@ -521,9 +521,9 @@ struct MpsMachine { bool shouldplayflag; ///< not-end-of-song flag static const int TEMPO_RATE; - static const byte programvelocities[128]; + static const uint8_t programvelocities[128]; - const byte *songdata; ///< raw data array + const uint8_t *songdata; ///< raw data array size_t songdatalen; ///< length of song data MidiFile ⌖ ///< recipient of data @@ -534,12 +534,12 @@ struct MpsMachine { MPSMIDIST_ENDSONG = 0xFF, ///< immediately end the song }; - static void AddMidiData(MidiFile::DataBlock &block, byte b1, byte b2) + static void AddMidiData(MidiFile::DataBlock &block, uint8_t b1, uint8_t b2) { block.data.push_back(b1); block.data.push_back(b2); } - static void AddMidiData(MidiFile::DataBlock &block, byte b1, byte b2, byte b3) + static void AddMidiData(MidiFile::DataBlock &block, uint8_t b1, uint8_t b2, uint8_t b3) { block.data.push_back(b1); block.data.push_back(b2); @@ -552,7 +552,7 @@ struct MpsMachine { * @param length Length of the data buffer in bytes * @param target MidiFile object to add decoded data to */ - MpsMachine(const byte *data, size_t length, MidiFile &target) + MpsMachine(const uint8_t *data, size_t length, MidiFile &target) : songdata(data), songdatalen(length), target(target) { uint32_t pos = 0; @@ -580,7 +580,7 @@ struct MpsMachine { /* Similar structure to segments list, but also has * the MIDI channel number as a byte before the offset * to next track. */ - byte ch = this->songdata[pos++]; + uint8_t ch = this->songdata[pos++]; this->channels[ch].startpos = pos + 4; pos += FROM_LE16(*(const int16_t *)(this->songdata + pos)); } @@ -593,7 +593,7 @@ struct MpsMachine { */ uint16_t ReadVariableLength(uint32_t &pos) { - byte b = 0; + uint8_t b = 0; uint16_t res = 0; do { b = this->songdata[pos++]; @@ -627,7 +627,7 @@ struct MpsMachine { uint16_t PlayChannelFrame(MidiFile::DataBlock &outblock, int channel) { uint16_t newdelay = 0; - byte b1, b2; + uint8_t b1, b2; Channel &chandata = this->channels[channel]; do { @@ -811,7 +811,7 @@ struct MpsMachine { /** Frames/ticks per second for music playback */ const int MpsMachine::TEMPO_RATE = 148; /** Base note velocities for various GM programs */ -const byte MpsMachine::programvelocities[128] = { +const uint8_t MpsMachine::programvelocities[128] = { 100, 100, 100, 100, 100, 90, 100, 100, 100, 100, 100, 90, 100, 100, 100, 100, 100, 100, 85, 100, 100, 100, 100, 100, 100, 100, 100, 100, 90, 90, 110, 80, 100, 100, 100, 90, 70, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, @@ -828,7 +828,7 @@ const byte MpsMachine::programvelocities[128] = { * @param length size of data in bytes * @return true if the data could be loaded */ -bool MidiFile::LoadMpsData(const byte *data, size_t length) +bool MidiFile::LoadMpsData(const uint8_t *data, size_t length) { _midifile_instance = this; @@ -844,7 +844,7 @@ bool MidiFile::LoadSong(const MusicSongInfo &song) case MTT_MPSMIDI: { size_t songdatalen = 0; - byte *songdata = GetMusicCatEntryData(song.filename, song.cat_index, songdatalen); + uint8_t *songdata = GetMusicCatEntryData(song.filename, song.cat_index, songdatalen); if (songdata != nullptr) { bool result = this->LoadMpsData(songdata, songdatalen); free(songdata); @@ -878,21 +878,21 @@ void MidiFile::MoveFrom(MidiFile &other) static void WriteVariableLen(FILE *f, uint32_t value) { if (value <= 0x7F) { - byte tb = value; + uint8_t tb = value; fwrite(&tb, 1, 1, f); } else if (value <= 0x3FFF) { - byte tb[2]; + uint8_t tb[2]; tb[1] = value & 0x7F; value >>= 7; tb[0] = (value & 0x7F) | 0x80; value >>= 7; fwrite(tb, 1, sizeof(tb), f); } else if (value <= 0x1FFFFF) { - byte tb[3]; + uint8_t tb[3]; tb[2] = value & 0x7F; value >>= 7; tb[1] = (value & 0x7F) | 0x80; value >>= 7; tb[0] = (value & 0x7F) | 0x80; value >>= 7; fwrite(tb, 1, sizeof(tb), f); } else if (value <= 0x0FFFFFFF) { - byte tb[4]; + uint8_t tb[4]; tb[3] = value & 0x7F; value >>= 7; tb[2] = (value & 0x7F) | 0x80; value >>= 7; tb[1] = (value & 0x7F) | 0x80; value >>= 7; @@ -914,17 +914,17 @@ bool MidiFile::WriteSMF(const std::string &filename) } /* SMF header */ - const byte fileheader[] = { + const uint8_t fileheader[] = { 'M', 'T', 'h', 'd', // block name 0x00, 0x00, 0x00, 0x06, // BE32 block length, always 6 bytes 0x00, 0x00, // writing format 0 (all in one track) 0x00, 0x01, // containing 1 track (BE16) - (byte)(this->tickdiv >> 8), (byte)this->tickdiv, // tickdiv in BE16 + (uint8_t)(this->tickdiv >> 8), (uint8_t)this->tickdiv, // tickdiv in BE16 }; fwrite(fileheader, sizeof(fileheader), 1, f); /* Track header */ - const byte trackheader[] = { + const uint8_t trackheader[] = { 'M', 'T', 'r', 'k', // block name 0, 0, 0, 0, // BE32 block length, unknown at this time }; @@ -953,7 +953,7 @@ bool MidiFile::WriteSMF(const std::string &filename) /* Write tempo change if there is one */ if (nexttempo.ticktime <= block.ticktime) { - byte tempobuf[6] = { MIDIST_SMF_META, 0x51, 0x03, 0, 0, 0 }; + uint8_t tempobuf[6] = { MIDIST_SMF_META, 0x51, 0x03, 0, 0, 0 }; tempobuf[3] = (nexttempo.tempo & 0x00FF0000) >> 16; tempobuf[4] = (nexttempo.tempo & 0x0000FF00) >> 8; tempobuf[5] = (nexttempo.tempo & 0x000000FF); @@ -970,7 +970,7 @@ bool MidiFile::WriteSMF(const std::string &filename) } /* Write each block data command */ - byte *dp = block.data.data(); + uint8_t *dp = block.data.data(); while (dp < block.data.data() + block.data.size()) { /* Always zero delta time inside blocks */ if (needtime) { @@ -999,7 +999,7 @@ bool MidiFile::WriteSMF(const std::string &filename) if (*dp == MIDIST_SYSEX) { fwrite(dp, 1, 1, f); dp++; - byte *sysexend = dp; + uint8_t *sysexend = dp; while (*sysexend != MIDIST_ENDSYSEX) sysexend++; ptrdiff_t sysexlen = sysexend - dp; WriteVariableLen(f, sysexlen); @@ -1015,7 +1015,7 @@ bool MidiFile::WriteSMF(const std::string &filename) } /* End of track marker */ - static const byte track_end_marker[] = { 0x00, MIDIST_SMF_META, 0x2F, 0x00 }; + static const uint8_t track_end_marker[] = { 0x00, MIDIST_SMF_META, 0x2F, 0x00 }; fwrite(&track_end_marker, sizeof(track_end_marker), 1, f); /* Fill out the RIFF block length */ @@ -1078,7 +1078,7 @@ std::string MidiFile::GetSMFFile(const MusicSongInfo &song) return output_filename; } - byte *data; + uint8_t *data; size_t datalen; data = GetMusicCatEntryData(song.filename, song.cat_index, datalen); if (data == nullptr) return std::string(); @@ -1098,7 +1098,7 @@ std::string MidiFile::GetSMFFile(const MusicSongInfo &song) } -static bool CmdDumpSMF(byte argc, char *argv[]) +static bool CmdDumpSMF(uint8_t argc, char *argv[]) { if (argc == 0) { IConsolePrint(CC_HELP, "Write the current song to a Standard MIDI File. Usage: 'dumpsmf '."); diff --git a/src/music/midifile.hpp b/src/music/midifile.hpp index 430d95bc08..5d13861552 100644 --- a/src/music/midifile.hpp +++ b/src/music/midifile.hpp @@ -19,7 +19,7 @@ struct MidiFile { struct DataBlock { uint32_t ticktime; ///< tick number since start of file this block should be triggered at uint32_t realtime = 0; ///< real-time (microseconds) since start of file this block should be triggered at - std::vector data; ///< raw midi data contained in block + std::vector data; ///< raw midi data contained in block DataBlock(uint32_t _ticktime = 0) : ticktime(_ticktime) { } }; struct TempoChange { @@ -36,7 +36,7 @@ struct MidiFile { ~MidiFile(); bool LoadFile(const std::string &filename); - bool LoadMpsData(const byte *data, size_t length); + bool LoadMpsData(const uint8_t *data, size_t length); bool LoadSong(const MusicSongInfo &song); void MoveFrom(MidiFile &other); diff --git a/src/music/music_driver.hpp b/src/music/music_driver.hpp index f8aff0e716..eaa5d63ddb 100644 --- a/src/music/music_driver.hpp +++ b/src/music/music_driver.hpp @@ -38,7 +38,7 @@ public: * Set the volume, if possible. * @param vol The new volume. */ - virtual void SetVolume(byte vol) = 0; + virtual void SetVolume(uint8_t vol) = 0; /** * Get the currently active instance of the music driver. diff --git a/src/music/null_m.h b/src/music/null_m.h index 5754f55642..da6e5dd92c 100644 --- a/src/music/null_m.h +++ b/src/music/null_m.h @@ -25,7 +25,7 @@ public: bool IsSongPlaying() override { return true; } - void SetVolume(byte) override { } + void SetVolume(uint8_t) override { } const char *GetName() const override { return "null"; } }; diff --git a/src/music/win32_m.cpp b/src/music/win32_m.cpp index d07c7214a7..de7ed630a2 100644 --- a/src/music/win32_m.cpp +++ b/src/music/win32_m.cpp @@ -37,8 +37,8 @@ static struct { bool playing; ///< flag indicating that playback is active int do_start; ///< flag for starting playback of next_file at next opportunity bool do_stop; ///< flag for stopping playback at next opportunity - byte current_volume; ///< current effective volume setting - byte new_volume; ///< volume setting to change to + uint8_t current_volume; ///< current effective volume setting + uint8_t new_volume; ///< volume setting to change to MidiFile current_file; ///< file currently being played from PlaybackSegment current_segment; ///< segment info for current playback @@ -47,13 +47,13 @@ static struct { MidiFile next_file; ///< upcoming file to play PlaybackSegment next_segment; ///< segment info for upcoming file - byte channel_volumes[16]; ///< last seen volume controller values in raw data + uint8_t channel_volumes[16]; ///< last seen volume controller values in raw data } _midi; static FMusicDriver_Win32 iFMusicDriver_Win32; -static byte ScaleVolume(byte original, byte scale) +static uint8_t ScaleVolume(uint8_t original, uint8_t scale) { return original * scale / 127; } @@ -68,21 +68,21 @@ void CALLBACK MidiOutProc(HMIDIOUT hmo, UINT wMsg, DWORD_PTR, DWORD_PTR dwParam1 } } -static void TransmitChannelMsg(byte status, byte p1, byte p2 = 0) +static void TransmitChannelMsg(uint8_t status, uint8_t p1, uint8_t p2 = 0) { midiOutShortMsg(_midi.midi_out, status | (p1 << 8) | (p2 << 16)); } -static void TransmitSysex(const byte *&msg_start, size_t &remaining) +static void TransmitSysex(const uint8_t *&msg_start, size_t &remaining) { /* find end of message */ - const byte *msg_end = msg_start; + const uint8_t *msg_end = msg_start; while (*msg_end != MIDIST_ENDSYSEX) msg_end++; msg_end++; /* also include sysex end byte */ /* prepare header */ MIDIHDR *hdr = CallocT(1); - hdr->lpData = reinterpret_cast(const_cast(msg_start)); + hdr->lpData = reinterpret_cast(const_cast(msg_start)); hdr->dwBufferLength = msg_end - msg_start; if (midiOutPrepareHeader(_midi.midi_out, hdr, sizeof(*hdr)) == MMSYSERR_NOERROR) { /* transmit - just point directly into the data buffer */ @@ -100,7 +100,7 @@ static void TransmitSysex(const byte *&msg_start, size_t &remaining) static void TransmitStandardSysex(MidiSysexMessage msg) { size_t length = 0; - const byte *data = MidiGetStandardSysexMessage(msg, length); + const uint8_t *data = MidiGetStandardSysexMessage(msg, length); TransmitSysex(data, length); } @@ -164,7 +164,7 @@ void CALLBACK TimerCallback(UINT uTimerID, UINT, DWORD_PTR, DWORD_PTR, DWORD_PTR _midi.do_start = 0; _midi.current_block = 0; - MemSetT(_midi.channel_volumes, 127, lengthof(_midi.channel_volumes)); + MemSetT(_midi.channel_volumes, 127, lengthof(_midi.channel_volumes)); /* Invalidate current volume. */ _midi.current_volume = UINT8_MAX; volume_throttle = 0; @@ -184,7 +184,7 @@ void CALLBACK TimerCallback(UINT uTimerID, UINT, DWORD_PTR, DWORD_PTR, DWORD_PTR _midi.current_volume = _midi.new_volume; volume_throttle = 20 / _midi.time_period; for (int ch = 0; ch < 16; ch++) { - byte vol = ScaleVolume(_midi.channel_volumes[ch], _midi.current_volume); + uint8_t vol = ScaleVolume(_midi.channel_volumes[ch], _midi.current_volume); TransmitChannelMsg(MIDIST_CONTROLLER | ch, MIDICT_CHANVOLUME, vol); } } else { @@ -242,13 +242,13 @@ void CALLBACK TimerCallback(UINT uTimerID, UINT, DWORD_PTR, DWORD_PTR, DWORD_PTR break; } - const byte *data = block.data.data(); + const uint8_t *data = block.data.data(); size_t remaining = block.data.size(); - byte last_status = 0; + uint8_t last_status = 0; while (remaining > 0) { /* MidiFile ought to have converted everything out of running status, * but handle it anyway just to be safe */ - byte status = data[0]; + uint8_t status = data[0]; if (status & 0x80) { last_status = status; data++; @@ -361,7 +361,7 @@ bool MusicDriver_Win32::IsSongPlaying() return _midi.playing || (_midi.do_start != 0); } -void MusicDriver_Win32::SetVolume(byte vol) +void MusicDriver_Win32::SetVolume(uint8_t vol) { std::lock_guard mutex_lock(_midi.lock); _midi.new_volume = vol; diff --git a/src/music/win32_m.h b/src/music/win32_m.h index 5101d29321..74c0b938a6 100644 --- a/src/music/win32_m.h +++ b/src/music/win32_m.h @@ -25,7 +25,7 @@ public: bool IsSongPlaying() override; - void SetVolume(byte vol) override; + void SetVolume(uint8_t vol) override; const char *GetName() const override { return "win32"; } }; diff --git a/src/music_gui.cpp b/src/music_gui.cpp index 8ed2e0749a..3af86476e2 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -428,7 +428,7 @@ void MusicSystem::ChangePlaylistPosition(int ofs) */ void MusicSystem::SaveCustomPlaylist(PlaylistChoices pl) { - byte *settings_pl; + uint8_t *settings_pl; if (pl == PLCH_CUSTOM1) { settings_pl = _settings_client.music.custom_1; } else if (pl == PLCH_CUSTOM2) { @@ -442,7 +442,7 @@ void MusicSystem::SaveCustomPlaylist(PlaylistChoices pl) for (const auto &song : this->standard_playlists[pl]) { /* Music set indices in the settings playlist are 1-based, 0 means unused slot */ - settings_pl[num++] = (byte)song.set_index + 1; + settings_pl[num++] = (uint8_t)song.set_index + 1; } } @@ -825,7 +825,7 @@ struct MusicWindow : public Window { break; case WID_M_MUSIC_VOL: case WID_M_EFFECT_VOL: { // volume sliders - byte &vol = (widget == WID_M_MUSIC_VOL) ? _settings_client.music.music_vol : _settings_client.music.effect_vol; + uint8_t &vol = (widget == WID_M_MUSIC_VOL) ? _settings_client.music.music_vol : _settings_client.music.effect_vol; if (ClickSliderWidget(this->GetWidget(widget)->GetCurrentRect(), pt, 0, INT8_MAX, vol)) { if (widget == WID_M_MUSIC_VOL) { MusicDriver::GetInstance()->SetVolume(vol); diff --git a/src/network/core/config.h b/src/network/core/config.h index 18bafb66e2..b03f96cdaa 100644 --- a/src/network/core/config.h +++ b/src/network/core/config.h @@ -45,10 +45,10 @@ static const std::string NETWORK_SURVEY_DETAILS_LINK = "https://survey.openttd.o static const size_t TCP_MTU = 32767; ///< Number of bytes we can pack in a single TCP packet static const size_t COMPAT_MTU = 1460; ///< Number of bytes we can pack in a single packet for backward compatibility -static const byte NETWORK_GAME_ADMIN_VERSION = 3; ///< What version of the admin network do we use? -static const byte NETWORK_GAME_INFO_VERSION = 7; ///< What version of game-info do we use? -static const byte NETWORK_COORDINATOR_VERSION = 6; ///< What version of game-coordinator-protocol do we use? -static const byte NETWORK_SURVEY_VERSION = 2; ///< What version of the survey do we use? +static const uint8_t NETWORK_GAME_ADMIN_VERSION = 3; ///< What version of the admin network do we use? +static const uint8_t NETWORK_GAME_INFO_VERSION = 7; ///< What version of game-info do we use? +static const uint8_t NETWORK_COORDINATOR_VERSION = 6; ///< What version of game-coordinator-protocol do we use? +static const uint8_t NETWORK_SURVEY_VERSION = 2; ///< What version of the survey do we use? static const uint NETWORK_NAME_LENGTH = 80; ///< The maximum length of the server name and map name, in bytes including '\0' static const uint NETWORK_COMPANY_NAME_LENGTH = 128; ///< The maximum length of the company name, in bytes including '\0' diff --git a/src/network/core/network_game_info.cpp b/src/network/core/network_game_info.cpp index adecf1643f..004cac1b6c 100644 --- a/src/network/core/network_game_info.cpp +++ b/src/network/core/network_game_info.cpp @@ -148,7 +148,7 @@ const NetworkServerGameInfo &GetCurrentNetworkServerGameInfo() * - invite_code * These don't need to be updated manually here. */ - _network_game_info.companies_on = (byte)Company::GetNumItems(); + _network_game_info.companies_on = (uint8_t)Company::GetNumItems(); _network_game_info.spectators_on = NetworkSpectatorCount(); _network_game_info.calendar_date = TimerGameCalendar::date; _network_game_info.ticks_playing = TimerGameTick::counter; @@ -260,7 +260,7 @@ void SerializeNetworkGameInfo(Packet &p, const NetworkServerGameInfo &info, bool */ void DeserializeNetworkGameInfo(Packet &p, NetworkGameInfo &info, const GameInfoNewGRFLookupTable *newgrf_lookup_table) { - byte game_info_version = p.Recv_uint8(); + uint8_t game_info_version = p.Recv_uint8(); NewGRFSerializationType newgrf_serialisation = NST_GRFID_MD5; /* diff --git a/src/network/core/network_game_info.h b/src/network/core/network_game_info.h index 8b63d2d151..3dfd1f0058 100644 --- a/src/network/core/network_game_info.h +++ b/src/network/core/network_game_info.h @@ -104,12 +104,12 @@ struct NetworkServerGameInfo { std::string server_revision; ///< The version number the server is using (e.g.: 'r304' or 0.5.0) bool dedicated; ///< Is this a dedicated server? bool use_password; ///< Is this server passworded? - byte clients_on; ///< Current count of clients on server - byte clients_max; ///< Max clients allowed on server - byte companies_on; ///< How many started companies do we have - byte companies_max; ///< Max companies allowed on server - byte spectators_on; ///< How many spectators do we have? - byte landscape; ///< The used landscape + uint8_t clients_on; ///< Current count of clients on server + uint8_t clients_max; ///< Max clients allowed on server + uint8_t companies_on; ///< How many started companies do we have + uint8_t companies_max; ///< Max companies allowed on server + uint8_t spectators_on; ///< How many spectators do we have? + uint8_t landscape; ///< The used landscape int gamescript_version; ///< Version of the gamescript. std::string gamescript_name; ///< Name of the gamescript. }; diff --git a/src/network/core/packet.cpp b/src/network/core/packet.cpp index 5339c43677..2319b8adb1 100644 --- a/src/network/core/packet.cpp +++ b/src/network/core/packet.cpp @@ -166,7 +166,7 @@ void Packet::Send_string(const std::string_view data) * Copy a sized byte buffer into the packet. * @param data The data to send. */ -void Packet::Send_buffer(const std::vector &data) +void Packet::Send_buffer(const std::vector &data) { assert(this->CanWriteToPacket(sizeof(uint16_t) + data.size())); this->Send_uint16((uint16_t)data.size()); @@ -180,7 +180,7 @@ void Packet::Send_buffer(const std::vector &data) * @param span The span describing the range of bytes to send. * @return The span of bytes that were not written. */ -std::span Packet::Send_bytes(const std::span span) +std::span Packet::Send_bytes(const std::span span) { size_t amount = std::min(span.size(), this->limit - this->Size()); this->buffer.insert(this->buffer.end(), span.data(), span.data() + amount); @@ -356,12 +356,12 @@ uint64_t Packet::Recv_uint64() * Extract a sized byte buffer from the packet. * @return The extracted buffer. */ -std::vector Packet::Recv_buffer() +std::vector Packet::Recv_buffer() { uint16_t size = this->Recv_uint16(); if (size == 0 || !this->CanReadFromPacket(size, true)) return {}; - std::vector data; + std::vector data; while (size-- > 0) { data.push_back(this->buffer[this->pos++]); } @@ -374,9 +374,9 @@ std::vector Packet::Recv_buffer() * @param span The span to write the bytes to. * @return The number of bytes that were actually read. */ -size_t Packet::Recv_bytes(std::span span) +size_t Packet::Recv_bytes(std::span span) { - auto tranfer_to_span = [](std::span destination, const char *source, size_t amount) { + auto tranfer_to_span = [](std::span destination, const char *source, size_t amount) { size_t to_copy = std::min(amount, destination.size()); std::copy(source, source + to_copy, destination.data()); return to_copy; diff --git a/src/network/core/packet.h b/src/network/core/packet.h index ccb56738ff..beff95431d 100644 --- a/src/network/core/packet.h +++ b/src/network/core/packet.h @@ -44,7 +44,7 @@ private: /** The current read/write position in the packet */ PacketSize pos; /** The buffer of this packet. */ - std::vector buffer; + std::vector buffer; /** The limit for the packet size. */ size_t limit; @@ -65,8 +65,8 @@ public: void Send_uint32(uint32_t data); void Send_uint64(uint64_t data); void Send_string(const std::string_view data); - void Send_buffer(const std::vector &data); - std::span Send_bytes(const std::span span); + void Send_buffer(const std::vector &data); + std::span Send_bytes(const std::span span); /* Reading/receiving of packets */ bool HasPacketSizeData() const; @@ -81,8 +81,8 @@ public: uint16_t Recv_uint16(); uint32_t Recv_uint32(); uint64_t Recv_uint64(); - std::vector Recv_buffer(); - size_t Recv_bytes(std::span span); + std::vector Recv_buffer(); + size_t Recv_bytes(std::span span); std::string Recv_string(size_t length, StringValidationSettings settings = SVS_REPLACE_WITH_QUESTION_MARK); size_t RemainingBytesToTransfer() const; diff --git a/src/network/core/tcp_content.h b/src/network/core/tcp_content.h index 95ee2805ef..24ae8d873a 100644 --- a/src/network/core/tcp_content.h +++ b/src/network/core/tcp_content.h @@ -25,7 +25,7 @@ protected: /** * Client requesting a list of content info: - * byte type + * uint8_t type * uint32_t openttd version (or 0xFFFFFFFF if using a list) * Only if the above value is 0xFFFFFFFF: * uint8_t count @@ -76,7 +76,7 @@ protected: /** * Server sending list of content info: - * byte type (invalid ID == does not exist) + * uint8_t type (invalid ID == does not exist) * uint32_t id * uint32_t file_size * string name (max 32 characters) diff --git a/src/network/core/tcp_coordinator.h b/src/network/core/tcp_coordinator.h index 9f00714891..27ed65ec87 100644 --- a/src/network/core/tcp_coordinator.h +++ b/src/network/core/tcp_coordinator.h @@ -277,7 +277,7 @@ protected: * uint16_t Number of NewGRFs in the packet, with for each of the NewGRFs: * uint32_t Lookup table index for the NewGRF. * uint32_t Unique NewGRF ID. - * byte[16] MD5 checksum of the NewGRF + * uint8_t[16] MD5 checksum of the NewGRF * string Name of the NewGRF. * * The lookup table built using these packets are used by the deserialisation diff --git a/src/network/network.cpp b/src/network/network.cpp index 2193855661..9d47c2f964 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -84,7 +84,7 @@ CompanyMask _network_company_passworded; ///< Bitmask of the password status of static_assert((int)NETWORK_COMPANY_NAME_LENGTH == MAX_LENGTH_COMPANY_NAME_CHARS * MAX_CHAR_LENGTH); /** The amount of clients connected */ -byte _network_clients_connected = 0; +uint8_t _network_clients_connected = 0; extern std::string GenerateUid(std::string_view subject); @@ -134,9 +134,9 @@ NetworkClientInfo::~NetworkClientInfo() return nullptr; } -byte NetworkSpectatorCount() +uint8_t NetworkSpectatorCount() { - byte count = 0; + uint8_t count = 0; for (const NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { if (ci->client_playas == COMPANY_SPECTATOR) count++; @@ -1130,10 +1130,10 @@ void NetworkGameLoop() cp->cmd = (Commands)cmd; /* Parse command data. */ - std::vector args; + std::vector args; size_t arg_len = strlen(buffer); for (size_t i = 0; i + 1 < arg_len; i += 2) { - byte e = 0; + uint8_t e = 0; std::from_chars(buffer + i, buffer + i + 2, e, 16); args.emplace_back(e); } diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp index 84e14ea4d9..82cebe186e 100644 --- a/src/network/network_admin.cpp +++ b/src/network/network_admin.cpp @@ -32,7 +32,7 @@ AdminIndex _redirect_console_to_admin = INVALID_ADMIN_ID; /** The amount of admins connected. */ -byte _network_admins_connected = 0; +uint8_t _network_admins_connected = 0; /** The pool with sockets/clients. */ NetworkAdminSocketPool _networkadminsocket_pool("NetworkAdminSocket"); diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index db56f0b209..43eb46cb5c 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -43,10 +43,10 @@ struct PacketReader : LoadFilter { static const size_t CHUNK = 32 * 1024; ///< 32 KiB chunks of memory. - std::vector blocks; ///< Buffer with blocks of allocated memory. - byte *buf; ///< Buffer we're going to write to/read from. - byte *bufe; ///< End of the buffer we write to/read from. - byte **block; ///< The block we're reading from/writing to. + std::vector blocks; ///< Buffer with blocks of allocated memory. + uint8_t *buf; ///< Buffer we're going to write to/read from. + uint8_t *bufe; ///< End of the buffer we write to/read from. + uint8_t **block; ///< The block we're reading from/writing to. size_t written_bytes; ///< The total number of bytes we've written. size_t read_bytes; ///< The total number of read bytes. @@ -90,18 +90,18 @@ struct PacketReader : LoadFilter { if (p.RemainingBytesToTransfer() == 0) return; /* Allocate a new chunk and add the remaining data. */ - this->blocks.push_back(this->buf = CallocT(CHUNK)); + this->blocks.push_back(this->buf = CallocT(CHUNK)); this->bufe = this->buf + CHUNK; p.TransferOutWithLimit(TransferOutMemCopy, this->bufe - this->buf, this); } - size_t Read(byte *rbuf, size_t size) override + size_t Read(uint8_t *rbuf, size_t size) override { /* Limit the amount to read to whatever we still have. */ size_t ret_size = size = std::min(this->written_bytes - this->read_bytes, size); this->read_bytes += ret_size; - const byte *rbufe = rbuf + ret_size; + const uint8_t *rbufe = rbuf + ret_size; while (rbuf != rbufe) { if (this->buf == this->bufe) { diff --git a/src/network/network_client.h b/src/network/network_client.h index 72da871700..f6c0eb8a61 100644 --- a/src/network/network_client.h +++ b/src/network/network_client.h @@ -17,7 +17,7 @@ class ClientNetworkGameSocketHandler : public ZeroedMemoryAllocator, public Netw private: std::string connection_string; ///< Address we are connected to. std::shared_ptr savegame; ///< Packet reader for reading the savegame. - byte token; ///< The token we need to send back to the server to prove we're the right client. + uint8_t token; ///< The token we need to send back to the server to prove we're the right client. /** Status of the connection with the server. */ enum ServerStatus { diff --git a/src/network/network_command.cpp b/src/network/network_command.cpp index 189f198070..51c64e261e 100644 --- a/src/network/network_command.cpp +++ b/src/network/network_command.cpp @@ -369,7 +369,7 @@ const char *NetworkGameSocketHandler::ReceiveCommand(Packet &p, CommandPacket &c cp.err_msg = p.Recv_uint16(); cp.data = _cmd_dispatch[cp.cmd].Sanitize(p.Recv_buffer()); - byte callback = p.Recv_uint8(); + uint8_t callback = p.Recv_uint8(); if (callback >= _callback_table.size() || _cmd_dispatch[cp.cmd].Unpack[callback] == nullptr) return "invalid callback"; cp.callback = _callback_table[callback]; diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 4f51ddbcd4..94f6362fde 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -205,7 +205,7 @@ void ClientNetworkContentSocketHandler::RequestContentList(ContentType type) this->Connect(); auto p = std::make_unique(this, PACKET_CONTENT_CLIENT_INFO_LIST); - p->Send_uint8 ((byte)type); + p->Send_uint8 ((uint8_t)type); p->Send_uint32(0xffffffff); p->Send_uint8 (1); p->Send_string("vanilla"); @@ -238,7 +238,7 @@ void ClientNetworkContentSocketHandler::RequestContentList(uint count, const Con * A packet begins with the packet size and a byte for the type. * Then this packet adds a uint16_t for the count in this packet. * The rest of the packet can be used for the IDs. */ - uint p_count = std::min(count, (TCP_MTU - sizeof(PacketSize) - sizeof(byte) - sizeof(uint16_t)) / sizeof(uint32_t)); + uint p_count = std::min(count, (TCP_MTU - sizeof(PacketSize) - sizeof(uint8_t) - sizeof(uint16_t)) / sizeof(uint32_t)); auto p = std::make_unique(this, PACKET_CONTENT_CLIENT_INFO_ID, TCP_MTU); p->Send_uint16(p_count); @@ -265,14 +265,14 @@ void ClientNetworkContentSocketHandler::RequestContentList(ContentVector *cv, bo this->Connect(); assert(cv->size() < 255); - assert(cv->size() < (TCP_MTU - sizeof(PacketSize) - sizeof(byte) - sizeof(uint8_t)) / + assert(cv->size() < (TCP_MTU - sizeof(PacketSize) - sizeof(uint8_t) - sizeof(uint8_t)) / (sizeof(uint8_t) + sizeof(uint32_t) + (send_md5sum ? MD5_HASH_BYTES : 0))); auto p = std::make_unique(this, send_md5sum ? PACKET_CONTENT_CLIENT_INFO_EXTID_MD5 : PACKET_CONTENT_CLIENT_INFO_EXTID, TCP_MTU); p->Send_uint8((uint8_t)cv->size()); for (const ContentInfo *ci : *cv) { - p->Send_uint8((byte)ci->type); + p->Send_uint8((uint8_t)ci->type); p->Send_uint32(ci->unique_id); if (!send_md5sum) continue; @@ -363,7 +363,7 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContentFallback(const Co * A packet begins with the packet size and a byte for the type. * Then this packet adds a uint16_t for the count in this packet. * The rest of the packet can be used for the IDs. */ - uint p_count = std::min(count, (TCP_MTU - sizeof(PacketSize) - sizeof(byte) - sizeof(uint16_t)) / sizeof(uint32_t)); + uint p_count = std::min(count, (TCP_MTU - sizeof(PacketSize) - sizeof(uint8_t) - sizeof(uint16_t)) / sizeof(uint32_t)); auto p = std::make_unique(this, PACKET_CONTENT_CLIENT_CONTENT, TCP_MTU); p->Send_uint16(p_count); @@ -420,7 +420,7 @@ static bool GunzipFile(const ContentInfo *ci) if (fin == nullptr || fout == nullptr) { ret = false; } else { - byte buff[8192]; + uint8_t buff[8192]; for (;;) { int read = gzread(fin, buff, sizeof(buff)); if (read == 0) { diff --git a/src/network/network_func.h b/src/network/network_func.h index 369eb0fc30..37a4a81fd6 100644 --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -33,7 +33,7 @@ extern StringList _network_bind_list; extern StringList _network_host_list; extern StringList _network_ban_list; -byte NetworkSpectatorCount(); +uint8_t NetworkSpectatorCount(); bool NetworkIsValidClientName(const std::string_view client_name); bool NetworkValidateOurClientName(); bool NetworkValidateClientName(std::string &client_name); diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 72567c2ef9..eb3a1e3b18 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -136,7 +136,7 @@ struct PacketWriter : SaveFilter { return false; } - void Write(byte *buf, size_t size) override + void Write(uint8_t *buf, size_t size) override { std::lock_guard lock(this->mutex); @@ -145,7 +145,7 @@ struct PacketWriter : SaveFilter { if (this->current == nullptr) this->current = std::make_unique(this->cs, PACKET_SERVER_MAP_DATA, TCP_MTU); - std::span to_write(buf, size); + std::span to_write(buf, size); while (!to_write.empty()) { to_write = this->current->Send_bytes(to_write); @@ -267,7 +267,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::CloseConnection(NetworkRecvSta /* We just lost one client :( */ if (this->status >= STATUS_AUTHORIZED) _network_game_info.clients_on--; - extern byte _network_clients_connected; + extern uint8_t _network_clients_connected; _network_clients_connected--; this->SendPackets(true); @@ -285,7 +285,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::CloseConnection(NetworkRecvSta */ /* static */ bool ServerNetworkGameSocketHandler::AllowConnection() { - extern byte _network_clients_connected; + extern uint8_t _network_clients_connected; bool accept = _network_clients_connected < MAX_CLIENTS; /* We can't go over the MAX_CLIENTS limit here. However, the @@ -1520,7 +1520,7 @@ void NetworkPopulateCompanyStats(NetworkCompanyStats *stats) /* Go through all vehicles and count the type of vehicles */ for (const Vehicle *v : Vehicle::Iterate()) { if (!Company::IsValidID(v->owner) || !v->IsPrimaryVehicle()) continue; - byte type = 0; + uint8_t type = 0; switch (v->type) { case VEH_TRAIN: type = NETWORK_VEH_TRAIN; break; case VEH_ROAD: type = RoadVehicle::From(v)->IsBus() ? NETWORK_VEH_BUS : NETWORK_VEH_LORRY; break; diff --git a/src/network/network_server.h b/src/network/network_server.h index f67aeeb404..f4ce50842a 100644 --- a/src/network/network_server.h +++ b/src/network/network_server.h @@ -64,8 +64,8 @@ public: STATUS_END, ///< Must ALWAYS be on the end of this list!! (period). }; - byte lag_test; ///< Byte used for lag-testing the client - byte last_token; ///< The last random token we did send to verify the client is listening + uint8_t lag_test; ///< Byte used for lag-testing the client + uint8_t last_token; ///< The last random token we did send to verify the client is listening uint32_t last_token_frame; ///< The last frame we received the right token ClientStatus status; ///< Status of this client CommandQueue outgoing_queue; ///< The command-queue awaiting delivery; conceptually more a bucket to gather commands in, after which the whole bucket is sent to the client. diff --git a/src/network/network_type.h b/src/network/network_type.h index 5244fe18d6..40a990d472 100644 --- a/src/network/network_type.h +++ b/src/network/network_type.h @@ -88,7 +88,7 @@ enum NetworkPasswordType { * Destination of our chat messages. * @warning The values of the enum items are part of the admin network API. Only append at the end. */ -enum DestType : byte { +enum DestType : uint8_t { DESTTYPE_BROADCAST, ///< Send message/notice to all clients (All) DESTTYPE_TEAM, ///< Send message/notice to everyone playing the same company (Team) DESTTYPE_CLIENT, ///< Send message/notice to only a certain client (Private) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index cebf81ce34..9f558a1a5e 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -73,7 +73,7 @@ const std::vector &GetAllGRFFiles() } /** Miscellaneous GRF features, set by Action 0x0D, parameter 0x9E */ -byte _misc_grf_features = 0; +uint8_t _misc_grf_features = 0; /** 32 * 8 = 256 flags. Apparently TTDPatch uses this many.. */ static uint32_t _ttdpatch_flags[8]; @@ -133,7 +133,7 @@ public: * @param numsets Number of sets to define. * @param numents Number of sprites per set to define. */ - void AddSpriteSets(byte feature, SpriteID first_sprite, uint first_set, uint numsets, uint numents) + void AddSpriteSets(uint8_t feature, SpriteID first_sprite, uint first_set, uint numsets, uint numents) { assert(feature < GSF_END); for (uint i = 0; i < numsets; i++) { @@ -149,7 +149,7 @@ public: * @return true if there are any valid sets. * @note Spritesets with zero sprites are valid to allow callback-failures. */ - bool HasValidSpriteSets(byte feature) const + bool HasValidSpriteSets(uint8_t feature) const { assert(feature < GSF_END); return !this->spritesets[feature].empty(); @@ -162,7 +162,7 @@ public: * @return true if the set is valid. * @note Spritesets with zero sprites are valid to allow callback-failures. */ - bool IsValidSpriteSet(byte feature, uint set) const + bool IsValidSpriteSet(uint8_t feature, uint set) const { assert(feature < GSF_END); return this->spritesets[feature].find(set) != this->spritesets[feature].end(); @@ -174,7 +174,7 @@ public: * @param set Set to query. * @return First sprite of the set. */ - SpriteID GetSprite(byte feature, uint set) const + SpriteID GetSprite(uint8_t feature, uint set) const { assert(IsValidSpriteSet(feature, set)); return this->spritesets[feature].find(set)->second.sprite; @@ -186,7 +186,7 @@ public: * @param set Set to query. * @return Number of sprites in the set. */ - uint GetNumEnts(byte feature, uint set) const + uint GetNumEnts(uint8_t feature, uint set) const { assert(IsValidSpriteSet(feature, set)); return this->spritesets[feature].find(set)->second.num_sprites; @@ -213,13 +213,13 @@ class OTTDByteReaderSignal { }; /** Class to read from a NewGRF file */ class ByteReader { protected: - byte *data; - byte *end; + uint8_t *data; + uint8_t *end; public: - ByteReader(byte *data, byte *end) : data(data), end(end) { } + ByteReader(uint8_t *data, uint8_t *end) : data(data), end(end) { } - inline byte *ReadBytes(size_t size) + inline uint8_t *ReadBytes(size_t size) { if (data + size >= end) { /* Put data at the end, as would happen if every byte had been individually read. */ @@ -227,12 +227,12 @@ public: throw OTTDByteReaderSignal(); } - byte *ret = data; + uint8_t *ret = data; data += size; return ret; } - inline byte ReadByte() + inline uint8_t ReadByte() { if (data < end) return *(data)++; throw OTTDByteReaderSignal(); @@ -256,7 +256,7 @@ public: return val | (ReadWord() << 16); } - uint32_t ReadVarSize(byte size) + uint32_t ReadVarSize(uint8_t size) { switch (size) { case 1: return ReadByte(); @@ -296,7 +296,7 @@ public: return data + count <= end; } - inline byte *Data() + inline uint8_t *Data() { return data; } @@ -377,7 +377,7 @@ struct GRFLocation { }; static std::map _grm_sprites; -typedef std::map> GRFLineToSpriteOverride; +typedef std::map> GRFLineToSpriteOverride; static GRFLineToSpriteOverride _grf_line_to_action6_sprite_override; /** @@ -845,7 +845,7 @@ static void ReadSpriteLayoutRegisters(ByteReader *buf, TileLayoutFlags flags, bo * @param dts Layout container to output into * @return True on error (GRF was disabled). */ -static bool ReadSpriteLayout(ByteReader *buf, uint num_building_sprites, bool use_cur_spritesets, byte feature, bool allow_var10, bool no_z_position, NewGRFSpriteLayout *dts) +static bool ReadSpriteLayout(ByteReader *buf, uint num_building_sprites, bool use_cur_spritesets, uint8_t feature, bool allow_var10, bool no_z_position, NewGRFSpriteLayout *dts) { bool has_flags = HasBit(num_building_sprites, 6); ClrBit(num_building_sprites, 6); @@ -1255,7 +1255,7 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop break; case 0x24: { // High byte of vehicle weight - byte weight = buf->ReadByte(); + uint8_t weight = buf->ReadByte(); if (weight > 4) { GrfMsg(2, "RailVehicleChangeInfo: Nonsensical weight of {} tons, ignoring", weight << 8); @@ -2025,15 +2025,15 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte case 0x0E: // Define custom layout while (buf->HasData()) { - byte length = buf->ReadByte(); - byte number = buf->ReadByte(); + uint8_t length = buf->ReadByte(); + uint8_t number = buf->ReadByte(); if (length == 0 || number == 0) break; if (statspec->layouts.size() < length) statspec->layouts.resize(length); if (statspec->layouts[length - 1].size() < number) statspec->layouts[length - 1].resize(number); - const byte *layout = buf->ReadBytes(length * number); + const uint8_t *layout = buf->ReadBytes(length * number); statspec->layouts[length - 1][number - 1].assign(layout, layout + length * number); /* Validate tile values are only the permitted 00, 02, 04 and 06. */ @@ -2207,7 +2207,7 @@ static ChangeInfoResult BridgeChangeInfo(uint brid, int numinfo, int prop, ByteR switch (prop) { case 0x08: { // Year of availability /* We treat '0' as always available */ - byte year = buf->ReadByte(); + uint8_t year = buf->ReadByte(); bridge->avail_year = (year > 0 ? CalendarTime::ORIGINAL_BASE_YEAR + year : 0); break; } @@ -2231,8 +2231,8 @@ static ChangeInfoResult BridgeChangeInfo(uint brid, int numinfo, int prop, ByteR break; case 0x0D: { // Bridge sprite tables - byte tableid = buf->ReadByte(); - byte numtables = buf->ReadByte(); + uint8_t tableid = buf->ReadByte(); + uint8_t numtables = buf->ReadByte(); if (bridge->sprite_table == nullptr) { /* Allocate memory for sprite table pointers and zero out */ @@ -2242,7 +2242,7 @@ static ChangeInfoResult BridgeChangeInfo(uint brid, int numinfo, int prop, ByteR for (; numtables-- != 0; tableid++) { if (tableid >= 7) { // skip invalid data GrfMsg(1, "BridgeChangeInfo: Table {} >= 7, skipping", tableid); - for (byte sprite = 0; sprite < 32; sprite++) buf->ReadDWord(); + for (uint8_t sprite = 0; sprite < 32; sprite++) buf->ReadDWord(); continue; } @@ -2250,7 +2250,7 @@ static ChangeInfoResult BridgeChangeInfo(uint brid, int numinfo, int prop, ByteR bridge->sprite_table[tableid] = MallocT(32); } - for (byte sprite = 0; sprite < 32; sprite++) { + for (uint8_t sprite = 0; sprite < 32; sprite++) { SpriteID image = buf->ReadWord(); PaletteID pal = buf->ReadWord(); @@ -2346,8 +2346,8 @@ static ChangeInfoResult IgnoreTownHouseProperty(int prop, ByteReader *buf) break; case 0x20: { - byte count = buf->ReadByte(); - for (byte j = 0; j < count; j++) buf->ReadByte(); + uint8_t count = buf->ReadByte(); + for (uint8_t j = 0; j < count; j++) buf->ReadByte(); break; } @@ -2394,7 +2394,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt switch (prop) { case 0x08: { // Substitute building type, and definition of a new house - byte subs_id = buf->ReadByte(); + uint8_t subs_id = buf->ReadByte(); if (subs_id == 0xFF) { /* Instead of defining a new house, a substitute house id * of 0xFF disables the old house with the current id. */ @@ -2500,7 +2500,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt break; case 0x15: { // House override byte - byte override = buf->ReadByte(); + uint8_t override = buf->ReadByte(); /* The house being overridden must be an original house. */ if (override >= NEW_HOUSE_OFFSET) { @@ -2513,7 +2513,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt } case 0x16: // Periodic refresh multiplier - housespec->processing_time = std::min(buf->ReadByte(), 63u); + housespec->processing_time = std::min(buf->ReadByte(), 63u); break; case 0x17: // Four random colours to use @@ -2572,8 +2572,8 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt break; case 0x20: { // Cargo acceptance watch list - byte count = buf->ReadByte(); - for (byte j = 0; j < count; j++) { + uint8_t count = buf->ReadByte(); + for (uint8_t j = 0; j < count; j++) { CargoID cargo = GetCargoTranslation(buf->ReadByte(), _cur.grffile); if (IsValidCargoID(cargo)) SetBit(housespec->watched_cargoes, cargo); } @@ -2799,7 +2799,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By } else if (buf->Remaining() < SNOW_LINE_MONTHS * SNOW_LINE_DAYS) { GrfMsg(1, "GlobalVarChangeInfo: Not enough entries set in the snowline table ({})", buf->Remaining()); } else { - byte table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS]; + uint8_t table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS]; for (uint i = 0; i < SNOW_LINE_MONTHS; i++) { for (uint j = 0; j < SNOW_LINE_DAYS; j++) { @@ -2856,7 +2856,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By break; } - byte newgrf_id = buf->ReadByte(); // The NewGRF (custom) identifier. + uint8_t newgrf_id = buf->ReadByte(); // The NewGRF (custom) identifier. while (newgrf_id != 0) { const char *name = buf->ReadString(); // The name for the OpenTTD identifier. @@ -3252,7 +3252,7 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr switch (prop) { case 0x08: { // Substitute industry tile type - byte subs_id = buf->ReadByte(); + uint8_t subs_id = buf->ReadByte(); if (subs_id >= NEW_INDUSTRYTILEOFFSET) { /* The substitute id must be one of the original industry tile. */ GrfMsg(2, "IndustryTilesChangeInfo: Attempt to use new industry tile {} as substitute industry tile for {}. Ignoring.", subs_id, indtid + i); @@ -3281,7 +3281,7 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr } case 0x09: { // Industry tile override - byte ovrid = buf->ReadByte(); + uint8_t ovrid = buf->ReadByte(); /* The industry being overridden must be an original industry. */ if (ovrid >= NEW_INDUSTRYTILEOFFSET) { @@ -3328,7 +3328,7 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr break; case 0x13: { // variable length cargo acceptance - byte num_cargoes = buf->ReadByte(); + uint8_t num_cargoes = buf->ReadByte(); if (num_cargoes > std::size(tsp->acceptance)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); error->param_value[1] = prop; @@ -3403,20 +3403,20 @@ static ChangeInfoResult IgnoreIndustryProperty(int prop, ByteReader *buf) break; case 0x0A: { - byte num_table = buf->ReadByte(); - for (byte j = 0; j < num_table; j++) { + uint8_t num_table = buf->ReadByte(); + for (uint8_t j = 0; j < num_table; j++) { for (uint k = 0;; k++) { - byte x = buf->ReadByte(); + uint8_t x = buf->ReadByte(); if (x == 0xFE && k == 0) { buf->ReadByte(); buf->ReadByte(); break; } - byte y = buf->ReadByte(); + uint8_t y = buf->ReadByte(); if (x == 0 && y == 0x80) break; - byte gfx = buf->ReadByte(); + uint8_t gfx = buf->ReadByte(); if (gfx == 0xFE) buf->ReadWord(); } } @@ -3424,7 +3424,7 @@ static ChangeInfoResult IgnoreIndustryProperty(int prop, ByteReader *buf) } case 0x16: - for (byte j = 0; j < 3; j++) buf->ReadByte(); + for (uint8_t j = 0; j < 3; j++) buf->ReadByte(); break; case 0x15: @@ -3509,7 +3509,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, switch (prop) { case 0x08: { // Substitute industry type - byte subs_id = buf->ReadByte(); + uint8_t subs_id = buf->ReadByte(); if (subs_id == 0xFF) { /* Instead of defining a new industry, a substitute industry id * of 0xFF disables the old industry with the current id. */ @@ -3540,7 +3540,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } case 0x09: { // Industry type override - byte ovrid = buf->ReadByte(); + uint8_t ovrid = buf->ReadByte(); /* The industry being overridden must be an original industry. */ if (ovrid >= NEW_INDUSTRYOFFSET) { @@ -3553,13 +3553,13 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } case 0x0A: { // Set industry layout(s) - byte new_num_layouts = buf->ReadByte(); + uint8_t new_num_layouts = buf->ReadByte(); uint32_t definition_size = buf->ReadDWord(); uint32_t bytes_read = 0; std::vector new_layouts; IndustryTileLayout layout; - for (byte j = 0; j < new_num_layouts; j++) { + for (uint8_t j = 0; j < new_num_layouts; j++) { layout.clear(); for (uint k = 0;; k++) { @@ -3578,7 +3578,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, if (it.ti.x == 0xFE && k == 0) { /* This means we have to borrow the layout from an old industry */ IndustryType type = buf->ReadByte(); - byte laynbr = buf->ReadByte(); + uint8_t laynbr = buf->ReadByte(); bytes_read += 2; if (type >= lengthof(_origin_industry_specs)) { @@ -3672,14 +3672,14 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, break; case 0x10: // Production cargo types - for (byte j = 0; j < 2; j++) { + for (uint8_t j = 0; j < 2; j++) { indsp->produced_cargo[j] = GetCargoTranslation(buf->ReadByte(), _cur.grffile); indsp->produced_cargo_label[j] = CT_INVALID; } break; case 0x11: // Acceptance cargo types - for (byte j = 0; j < 3; j++) { + for (uint8_t j = 0; j < 3; j++) { indsp->accepts_cargo[j] = GetCargoTranslation(buf->ReadByte(), _cur.grffile); indsp->accepts_cargo_label[j] = CT_INVALID; } @@ -3717,7 +3717,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } case 0x16: // Conflicting industry types - for (byte j = 0; j < 3; j++) indsp->conflicting[j] = buf->ReadByte(); + for (uint8_t j = 0; j < 3; j++) indsp->conflicting[j] = buf->ReadByte(); break; case 0x17: // Probability in random game @@ -3759,7 +3759,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, case 0x21: // Callback mask case 0x22: { // Callback additional mask - byte aflag = buf->ReadByte(); + uint8_t aflag = buf->ReadByte(); SB(indsp->callback_mask, (prop - 0x21) * 8, 8, aflag); break; } @@ -3779,7 +3779,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } case 0x25: { // variable length produced cargoes - byte num_cargoes = buf->ReadByte(); + uint8_t num_cargoes = buf->ReadByte(); if (num_cargoes > lengthof(indsp->produced_cargo)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); error->param_value[1] = prop; @@ -3798,7 +3798,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } case 0x26: { // variable length accepted cargoes - byte num_cargoes = buf->ReadByte(); + uint8_t num_cargoes = buf->ReadByte(); if (num_cargoes > lengthof(indsp->accepts_cargo)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); error->param_value[1] = prop; @@ -3817,7 +3817,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } case 0x27: { // variable length production rates - byte num_cargoes = buf->ReadByte(); + uint8_t num_cargoes = buf->ReadByte(); if (num_cargoes > lengthof(indsp->production_rate)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); error->param_value[1] = prop; @@ -3834,8 +3834,8 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } case 0x28: { // variable size input/output production multiplier table - byte num_inputs = buf->ReadByte(); - byte num_outputs = buf->ReadByte(); + uint8_t num_inputs = buf->ReadByte(); + uint8_t num_outputs = buf->ReadByte(); if (num_inputs > lengthof(indsp->accepts_cargo) || num_outputs > lengthof(indsp->produced_cargo)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); error->param_value[1] = prop; @@ -3916,7 +3916,7 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B switch (prop) { case 0x08: { // Modify original airport - byte subs_id = buf->ReadByte(); + uint8_t subs_id = buf->ReadByte(); if (subs_id == 0xFF) { /* Instead of defining a new airport, an airport id * of 0xFF disables the old airport with the current id. */ @@ -3948,7 +3948,7 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B } case 0x0A: { // Set airport layout - byte old_num_table = as->num_table; + uint8_t old_num_table = as->num_table; free(as->rotation); as->num_table = buf->ReadByte(); // Number of layaouts as->rotation = MallocT(as->num_table); @@ -3958,7 +3958,7 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B int size; const AirportTileTable *copy_from; try { - for (byte j = 0; j < as->num_table; j++) { + for (uint8_t j = 0; j < as->num_table; j++) { const_cast(as->rotation[j]) = (Direction)buf->ReadByte(); for (int k = 0;; k++) { att[k].ti.x = buf->ReadByte(); // Offsets from northermost tile @@ -3997,11 +3997,11 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B } if (as->rotation[j] == DIR_E || as->rotation[j] == DIR_W) { - as->size_x = std::max(as->size_x, att[k].ti.y + 1); - as->size_y = std::max(as->size_y, att[k].ti.x + 1); + as->size_x = std::max(as->size_x, att[k].ti.y + 1); + as->size_y = std::max(as->size_y, att[k].ti.x + 1); } else { - as->size_x = std::max(as->size_x, att[k].ti.x + 1); - as->size_y = std::max(as->size_y, att[k].ti.y + 1); + as->size_x = std::max(as->size_x, att[k].ti.x + 1); + as->size_y = std::max(as->size_y, att[k].ti.y + 1); } } tile_table[j] = CallocT(size); @@ -4705,7 +4705,7 @@ static ChangeInfoResult AirportTilesChangeInfo(uint airtid, int numinfo, int pro switch (prop) { case 0x08: { // Substitute airport tile type - byte subs_id = buf->ReadByte(); + uint8_t subs_id = buf->ReadByte(); if (subs_id >= NEW_AIRPORTTILE_OFFSET) { /* The substitute id must be one of the original airport tiles. */ GrfMsg(2, "AirportTileChangeInfo: Attempt to use new airport tile {} as substitute airport tile for {}. Ignoring.", subs_id, airtid + i); @@ -4730,7 +4730,7 @@ static ChangeInfoResult AirportTilesChangeInfo(uint airtid, int numinfo, int pro } case 0x09: { // Airport tile override - byte override = buf->ReadByte(); + uint8_t override = buf->ReadByte(); /* The airport tile being overridden must be an original airport tile. */ if (override >= NEW_AIRPORTTILE_OFFSET) { @@ -5141,7 +5141,7 @@ static void SkipAct1(ByteReader *buf) /* Helper function to either create a callback or link to a previously * defined spritegroup. */ -static const SpriteGroup *GetGroupFromGroupID(byte setid, byte type, uint16_t groupid) +static const SpriteGroup *GetGroupFromGroupID(uint8_t setid, uint8_t type, uint16_t groupid) { if (HasBit(groupid, 15)) { assert(CallbackResultSpriteGroup::CanAllocateItem()); @@ -5164,7 +5164,7 @@ static const SpriteGroup *GetGroupFromGroupID(byte setid, byte type, uint16_t gr * @param spriteid Raw value from the GRF for the new spritegroup; describes either the return value or the referenced spritegroup. * @return Created spritegroup. */ -static const SpriteGroup *CreateGroupFromGroupID(byte feature, byte setid, byte type, uint16_t spriteid) +static const SpriteGroup *CreateGroupFromGroupID(uint8_t feature, uint8_t setid, uint8_t type, uint16_t spriteid) { if (HasBit(spriteid, 15)) { assert(CallbackResultSpriteGroup::CanAllocateItem()); @@ -5223,8 +5223,8 @@ static void NewSpriteGroup(ByteReader *buf) case 0x89: // Self scope, dword case 0x8A: // Parent scope, dword { - byte varadjust; - byte varsize; + uint8_t varadjust; + uint8_t varsize; assert(DeterministicSpriteGroup::CanAllocateItem()); DeterministicSpriteGroup *group = new DeterministicSpriteGroup(); @@ -5344,7 +5344,7 @@ static void NewSpriteGroup(ByteReader *buf) group->cmp_mode = HasBit(triggers, 7) ? RSG_CMP_ALL : RSG_CMP_ANY; group->lowest_randbit = buf->ReadByte(); - byte num_groups = buf->ReadByte(); + uint8_t num_groups = buf->ReadByte(); if (!HasExactlyOneBit(num_groups)) { GrfMsg(1, "NewSpriteGroup: Random Action 2 nrand should be power of 2"); } @@ -5372,8 +5372,8 @@ static void NewSpriteGroup(ByteReader *buf) case GSF_ROADTYPES: case GSF_TRAMTYPES: { - byte num_loaded = type; - byte num_loading = buf->ReadByte(); + uint8_t num_loaded = type; + uint8_t num_loading = buf->ReadByte(); if (!_cur.HasValidSpriteSets(feature)) { GrfMsg(0, "NewSpriteGroup: No sprite set to work on! Skipping"); @@ -5442,7 +5442,7 @@ static void NewSpriteGroup(ByteReader *buf) case GSF_OBJECTS: case GSF_INDUSTRYTILES: case GSF_ROADSTOPS: { - byte num_building_sprites = std::max((uint8_t)1, type); + uint8_t num_building_sprites = std::max((uint8_t)1, type); assert(TileLayoutSpriteGroup::CanAllocateItem()); TileLayoutSpriteGroup *group = new TileLayoutSpriteGroup(); @@ -5493,7 +5493,7 @@ static void NewSpriteGroup(ByteReader *buf) return; } for (uint i = 0; i < group->num_input; i++) { - byte rawcargo = buf->ReadByte(); + uint8_t rawcargo = buf->ReadByte(); CargoID cargo = GetCargoTranslation(rawcargo, _cur.grffile); if (!IsValidCargoID(cargo)) { /* The mapped cargo is invalid. This is permitted at this point, @@ -5515,7 +5515,7 @@ static void NewSpriteGroup(ByteReader *buf) return; } for (uint i = 0; i < group->num_output; i++) { - byte rawcargo = buf->ReadByte(); + uint8_t rawcargo = buf->ReadByte(); CargoID cargo = GetCargoTranslation(rawcargo, _cur.grffile); if (!IsValidCargoID(cargo)) { /* Mark this result as invalid to use */ @@ -5602,7 +5602,7 @@ static bool IsValidGroupID(uint16_t groupid, const char *function) return true; } -static void VehicleMapSpriteGroup(ByteReader *buf, byte feature, uint8_t idcount) +static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idcount) { static EngineID *last_engines; static uint last_engines_count; @@ -6547,7 +6547,7 @@ static void SkipAct5(ByteReader *buf) * @param grffile NewGRF querying the variable * @return true iff the variable is known and the value is returned in 'value'. */ -bool GetGlobalVariable(byte param, uint32_t *value, const GRFFile *grffile) +bool GetGlobalVariable(uint8_t param, uint32_t *value, const GRFFile *grffile) { switch (param) { case 0x00: // current date @@ -6648,7 +6648,7 @@ bool GetGlobalVariable(byte param, uint32_t *value, const GRFFile *grffile) /* case 0x1F: // locale dependent settings not implemented to avoid desync */ case 0x20: { // snow line height - byte snowline = GetSnowLine(); + uint8_t snowline = GetSnowLine(); if (_settings_game.game_creation.landscape == LT_ARCTIC && snowline <= _settings_game.construction.map_height_limit) { *value = Clamp(snowline * (grffile->grf_version >= 8 ? 1 : TILE_HEIGHT), 0, 0xFE); } else { @@ -6678,7 +6678,7 @@ bool GetGlobalVariable(byte param, uint32_t *value, const GRFFile *grffile) } } -static uint32_t GetParamVal(byte param, uint32_t *cond_val) +static uint32_t GetParamVal(uint8_t param, uint32_t *cond_val) { /* First handle variable common with VarAction2 */ uint32_t value; @@ -6753,7 +6753,7 @@ static void CfgApply(ByteReader *buf) /* Get (or create) the override for the next sprite. */ GRFLocation location(_cur.grfconfig->ident.grfid, _cur.nfo_line + 1); - std::vector &preload_sprite = _grf_line_to_action6_sprite_override[location]; + std::vector &preload_sprite = _grf_line_to_action6_sprite_override[location]; /* Load new sprite data if it hasn't already been loaded. */ if (preload_sprite.empty()) { @@ -7157,9 +7157,9 @@ static void GRFLoadError(ByteReader *buf) STR_NEWGRF_ERROR_MSG_FATAL }; - byte severity = buf->ReadByte(); - byte lang = buf->ReadByte(); - byte message_id = buf->ReadByte(); + uint8_t severity = buf->ReadByte(); + uint8_t lang = buf->ReadByte(); + uint8_t message_id = buf->ReadByte(); /* Skip the error if it isn't valid for the current language. */ if (!CheckGrfLangID(lang, _cur.grffile->grf_version)) return; @@ -7303,10 +7303,10 @@ static uint32_t GetPatchVariable(uint8_t param) * SS : combination of both X and Y, thus giving the size(log2) of the map */ case 0x13: { - byte map_bits = 0; - byte log_X = Map::LogX() - 6; // subtraction is required to make the minimal size (64) zero based - byte log_Y = Map::LogY() - 6; - byte max_edge = std::max(log_X, log_Y); + uint8_t map_bits = 0; + uint8_t log_X = Map::LogX() - 6; // subtraction is required to make the minimal size (64) zero based + uint8_t log_Y = Map::LogY() - 6; + uint8_t max_edge = std::max(log_X, log_Y); if (log_X == log_Y) { // we have a squared map, since both edges are identical SetBit(map_bits, 0); @@ -7752,7 +7752,7 @@ static void FeatureTownName(ByteReader *buf) GRFTownName *townname = AddGRFTownName(grfid); - byte id = buf->ReadByte(); + uint8_t id = buf->ReadByte(); GrfMsg(6, "FeatureTownName: definition 0x{:02X}", id & 0x7F); if (HasBit(id, 7)) { @@ -7760,7 +7760,7 @@ static void FeatureTownName(ByteReader *buf) ClrBit(id, 7); bool new_scheme = _cur.grffile->grf_version >= 7; - byte lang = buf->ReadByte(); + uint8_t lang = buf->ReadByte(); StringID style = STR_UNDEFINED; do { @@ -7796,7 +7796,7 @@ static void FeatureTownName(ByteReader *buf) part.prob = buf->ReadByte(); if (HasBit(part.prob, 7)) { - byte ref_id = buf->ReadByte(); + uint8_t ref_id = buf->ReadByte(); if (ref_id >= GRFTownName::MAX_LISTS || townname->partlists[ref_id].empty()) { GrfMsg(0, "FeatureTownName: definition 0x{:02X} doesn't exist, deactivating", ref_id); DelGRFTownName(grfid); @@ -7824,7 +7824,7 @@ static void DefineGotoLabel(ByteReader *buf) * B label The label to define * V comment Optional comment - ignored */ - byte nfo_label = buf->ReadByte(); + uint8_t nfo_label = buf->ReadByte(); _cur.grffile->labels.emplace_back(nfo_label, _cur.nfo_line, _cur.file->GetPos()); @@ -7900,7 +7900,7 @@ static void GRFSound(ByteReader *buf) } SpriteFile &file = *_cur.file; - byte grf_container_version = file.GetContainerVersion(); + uint8_t grf_container_version = file.GetContainerVersion(); for (int i = 0; i < num; i++) { _cur.nfo_line++; @@ -7911,7 +7911,7 @@ static void GRFSound(ByteReader *buf) size_t offs = file.GetPos(); uint32_t len = grf_container_version >= 2 ? file.ReadDword() : file.ReadWord(); - byte type = file.ReadByte(); + uint8_t type = file.ReadByte(); if (grf_container_version >= 2 && type == 0xFD) { /* Reference to sprite section. */ @@ -7940,7 +7940,7 @@ static void GRFSound(ByteReader *buf) file.SkipBytes(len); } - byte action = file.ReadByte(); + uint8_t action = file.ReadByte(); switch (action) { case 0xFF: /* Allocate sound only in init stage. */ @@ -8074,8 +8074,8 @@ static void TranslateGRFStrings(ByteReader *buf) * new_scheme has to be true as well, which will also be implicitly the case for version 8 * and higher. A language id of 0x7F will be overridden by a non-generic id, so this will * not change anything if a string has been provided specifically for this language. */ - byte language = _cur.grffile->grf_version >= 8 ? buf->ReadByte() : 0x7F; - byte num_strings = buf->ReadByte(); + uint8_t language = _cur.grffile->grf_version >= 8 ? buf->ReadByte() : 0x7F; + uint8_t num_strings = buf->ReadByte(); uint16_t first_id = buf->ReadWord(); if (!((first_id >= 0xD000 && first_id + num_strings <= 0xD400) || (first_id >= 0xD800 && first_id + num_strings <= 0xE000))) { @@ -8096,21 +8096,21 @@ static void TranslateGRFStrings(ByteReader *buf) } /** Callback function for 'INFO'->'NAME' to add a translation to the newgrf name. */ -static bool ChangeGRFName(byte langid, const char *str) +static bool ChangeGRFName(uint8_t langid, const char *str) { AddGRFTextToList(_cur.grfconfig->name, langid, _cur.grfconfig->ident.grfid, false, str); return true; } /** Callback function for 'INFO'->'DESC' to add a translation to the newgrf description. */ -static bool ChangeGRFDescription(byte langid, const char *str) +static bool ChangeGRFDescription(uint8_t langid, const char *str) { AddGRFTextToList(_cur.grfconfig->info, langid, _cur.grfconfig->ident.grfid, true, str); return true; } /** Callback function for 'INFO'->'URL_' to set the newgrf url. */ -static bool ChangeGRFURL(byte langid, const char *str) +static bool ChangeGRFURL(uint8_t langid, const char *str) { AddGRFTextToList(_cur.grfconfig->url, langid, _cur.grfconfig->ident.grfid, false, str); return true; @@ -8212,14 +8212,14 @@ static bool ChangeGRFMinVersion(size_t len, ByteReader *buf) static GRFParameterInfo *_cur_parameter; ///< The parameter which info is currently changed by the newgrf. /** Callback function for 'INFO'->'PARAM'->param_num->'NAME' to set the name of a parameter. */ -static bool ChangeGRFParamName(byte langid, const char *str) +static bool ChangeGRFParamName(uint8_t langid, const char *str) { AddGRFTextToList(_cur_parameter->name, langid, _cur.grfconfig->ident.grfid, false, str); return true; } /** Callback function for 'INFO'->'PARAM'->param_num->'DESC' to set the description of a parameter. */ -static bool ChangeGRFParamDescription(byte langid, const char *str) +static bool ChangeGRFParamDescription(uint8_t langid, const char *str) { AddGRFTextToList(_cur_parameter->desc, langid, _cur.grfconfig->ident.grfid, true, str); return true; @@ -8271,14 +8271,14 @@ static bool ChangeGRFParamMask(size_t len, ByteReader *buf) GrfMsg(2, "StaticGRFInfo: expected 1 to 3 bytes for 'INFO'->'PARA'->'MASK' but got {}, ignoring this field", len); buf->Skip(len); } else { - byte param_nr = buf->ReadByte(); + uint8_t param_nr = buf->ReadByte(); if (param_nr >= _cur.grfconfig->param.size()) { GrfMsg(2, "StaticGRFInfo: invalid parameter number in 'INFO'->'PARA'->'MASK', param {}, ignoring this field", param_nr); buf->Skip(len - 1); } else { _cur_parameter->param_nr = param_nr; - if (len >= 2) _cur_parameter->first_bit = std::min(buf->ReadByte(), 31); - if (len >= 3) _cur_parameter->num_bit = std::min(buf->ReadByte(), 32 - _cur_parameter->first_bit); + if (len >= 2) _cur_parameter->first_bit = std::min(buf->ReadByte(), 31); + if (len >= 3) _cur_parameter->num_bit = std::min(buf->ReadByte(), 32 - _cur_parameter->first_bit); } } @@ -8299,7 +8299,7 @@ static bool ChangeGRFParamDefault(size_t len, ByteReader *buf) } typedef bool (*DataHandler)(size_t, ByteReader *); ///< Type of callback function for binary nodes -typedef bool (*TextHandler)(byte, const char *str); ///< Type of callback function for text nodes +typedef bool (*TextHandler)(uint8_t, const char *str); ///< Type of callback function for text nodes typedef bool (*BranchHandler)(ByteReader *); ///< Type of callback function for branch nodes /** @@ -8367,7 +8367,7 @@ struct AllowedSubtags { } uint32_t id; ///< The identifier for this node - byte type; ///< The type of the node, must be one of 'C', 'B' or 'T'. + uint8_t type; ///< The type of the node, must be one of 'C', 'B' or 'T'. union { DataHandler data; ///< Callback function for a binary node, only valid if type == 'B'. TextHandler text; ///< Callback function for a text node, only valid if type == 'T'. @@ -8381,7 +8381,7 @@ struct AllowedSubtags { } handler; }; -static bool SkipUnknownInfo(ByteReader *buf, byte type); +static bool SkipUnknownInfo(ByteReader *buf, uint8_t type); static bool HandleNodes(ByteReader *buf, AllowedSubtags *tags); /** @@ -8392,7 +8392,7 @@ static bool HandleNodes(ByteReader *buf, AllowedSubtags *tags); */ static bool ChangeGRFParamValueNames(ByteReader *buf) { - byte type = buf->ReadByte(); + uint8_t type = buf->ReadByte(); while (type != 0) { uint32_t id = buf->ReadDWord(); if (type != 'T' || id > _cur_parameter->max_value) { @@ -8402,7 +8402,7 @@ static bool ChangeGRFParamValueNames(ByteReader *buf) continue; } - byte langid = buf->ReadByte(); + uint8_t langid = buf->ReadByte(); const char *name_string = buf->ReadString(); auto val_name = _cur_parameter->value_names.find(id); @@ -8439,7 +8439,7 @@ AllowedSubtags _tags_parameters[] = { */ static bool HandleParameterInfo(ByteReader *buf) { - byte type = buf->ReadByte(); + uint8_t type = buf->ReadByte(); while (type != 0) { uint32_t id = buf->ReadDWord(); if (type != 'C' || id >= _cur.grfconfig->num_valid_params) { @@ -8490,12 +8490,12 @@ AllowedSubtags _tags_root[] = { * @param type The node type to skip. * @return True if we could skip the node, false if an error occurred. */ -static bool SkipUnknownInfo(ByteReader *buf, byte type) +static bool SkipUnknownInfo(ByteReader *buf, uint8_t type) { /* type and id are already read */ switch (type) { case 'C': { - byte new_type = buf->ReadByte(); + uint8_t new_type = buf->ReadByte(); while (new_type != 0) { buf->ReadDWord(); // skip the id if (!SkipUnknownInfo(buf, new_type)) return false; @@ -8530,7 +8530,7 @@ static bool SkipUnknownInfo(ByteReader *buf, byte type) * @param subtags Allowed subtags. * @return Whether all tags could be handled. */ -static bool HandleNode(byte type, uint32_t id, ByteReader *buf, AllowedSubtags subtags[]) +static bool HandleNode(uint8_t type, uint32_t id, ByteReader *buf, AllowedSubtags subtags[]) { uint i = 0; AllowedSubtags *tag; @@ -8540,7 +8540,7 @@ static bool HandleNode(byte type, uint32_t id, ByteReader *buf, AllowedSubtags s default: NOT_REACHED(); case 'T': { - byte langid = buf->ReadByte(); + uint8_t langid = buf->ReadByte(); return tag->handler.text(langid, buf->ReadString()); } @@ -8570,7 +8570,7 @@ static bool HandleNode(byte type, uint32_t id, ByteReader *buf, AllowedSubtags s */ static bool HandleNodes(ByteReader *buf, AllowedSubtags subtags[]) { - byte type = buf->ReadByte(); + uint8_t type = buf->ReadByte(); while (type != 0) { uint32_t id = buf->ReadDWord(); if (!HandleNode(type, id, buf, subtags)) return false; @@ -9023,12 +9023,12 @@ static void CalculateRefitMasks() if (_gted[engine].defaultcargo_grf == nullptr) { /* If the vehicle has any capacity, apply the default refit masks */ if (e->type != VEH_TRAIN || e->u.rail.capacity != 0) { - static constexpr byte T = 1 << LT_TEMPERATE; - static constexpr byte A = 1 << LT_ARCTIC; - static constexpr byte S = 1 << LT_TROPIC; - static constexpr byte Y = 1 << LT_TOYLAND; + static constexpr uint8_t T = 1 << LT_TEMPERATE; + static constexpr uint8_t A = 1 << LT_ARCTIC; + static constexpr uint8_t S = 1 << LT_TROPIC; + static constexpr uint8_t Y = 1 << LT_TOYLAND; static const struct DefaultRefitMasks { - byte climate; + uint8_t climate; CargoLabel cargo_label; CargoTypes cargo_allowed; CargoTypes cargo_disallowed; @@ -9146,9 +9146,9 @@ static void CalculateRefitMasks() if (file == nullptr) file = e->GetGRF(); if (file != nullptr && file->grf_version >= 8 && !file->cargo_list.empty()) { /* Use first refittable cargo from cargo translation table */ - byte best_local_slot = UINT8_MAX; + uint8_t best_local_slot = UINT8_MAX; for (CargoID cargo_type : SetCargoBitIterator(ei->refit_mask)) { - byte local_slot = file->cargo_map[cargo_type]; + uint8_t local_slot = file->cargo_map[cargo_type]; if (local_slot < best_local_slot) { best_local_slot = local_slot; ei->cargo_type = cargo_type; @@ -9545,7 +9545,7 @@ static void FinaliseAirportsArray() * XXX: We consider GRF files trusted. It would be trivial to exploit OTTD by * a crafted invalid GRF file. We should tell that to the user somehow, or * better make this more robust in the future. */ -static void DecodeSpecialSprite(byte *buf, uint num, GrfLoadingStage stage) +static void DecodeSpecialSprite(uint8_t *buf, uint num, GrfLoadingStage stage) { /* XXX: There is a difference between staged loading in TTDPatch and * here. In TTDPatch, for some reason actions 1 and 2 are carried out @@ -9603,7 +9603,7 @@ static void DecodeSpecialSprite(byte *buf, uint num, GrfLoadingStage stage) ByteReader *bufp = &br; try { - byte action = bufp->ReadByte(); + uint8_t action = bufp->ReadByte(); if (action == 0xFF) { GrfMsg(2, "DecodeSpecialSprite: Unexpected data block, skipping"); @@ -9636,7 +9636,7 @@ static void LoadNewGRFFileFromFile(GRFConfig *config, GrfLoadingStage stage, Spr Debug(grf, 2, "LoadNewGRFFile: Reading NewGRF-file '{}'", config->filename); - byte grf_container_version = file.GetContainerVersion(); + uint8_t grf_container_version = file.GetContainerVersion(); if (grf_container_version == 0) { Debug(grf, 7, "LoadNewGRFFile: Custom .grf has invalid format"); return; @@ -9653,7 +9653,7 @@ static void LoadNewGRFFileFromFile(GRFConfig *config, GrfLoadingStage stage, Spr if (grf_container_version >= 2) { /* Read compression value. */ - byte compression = file.ReadByte(); + uint8_t compression = file.ReadByte(); if (compression != 0) { Debug(grf, 7, "LoadNewGRFFile: Unsupported compression format"); return; @@ -9673,10 +9673,10 @@ static void LoadNewGRFFileFromFile(GRFConfig *config, GrfLoadingStage stage, Spr _cur.ClearDataForNextFile(); - ReusableBuffer buf; + ReusableBuffer buf; while ((num = (grf_container_version >= 2 ? file.ReadDword() : file.ReadWord())) != 0) { - byte type = file.ReadByte(); + uint8_t type = file.ReadByte(); _cur.nfo_line++; if (type == 0xFF) { @@ -10055,7 +10055,7 @@ void LoadNewGRF(uint load_index, uint num_baseset) TimerGameEconomy::DateFract economy_date_fract = TimerGameEconomy::date_fract; uint64_t tick_counter = TimerGameTick::counter; - byte display_opt = _display_opt; + uint8_t display_opt = _display_opt; if (_networking) { TimerGameCalendar::year = _settings_game.game_creation.starting_year; diff --git a/src/newgrf.h b/src/newgrf.h index 9ca54e86d2..18d643a14b 100644 --- a/src/newgrf.h +++ b/src/newgrf.h @@ -96,18 +96,18 @@ enum GrfSpecFeature { static const uint32_t INVALID_GRFID = 0xFFFFFFFF; struct GRFLabel { - byte label; + uint8_t label; uint32_t nfo_line; size_t pos; - GRFLabel(byte label, uint32_t nfo_line, size_t pos) : label(label), nfo_line(nfo_line), pos(pos) {} + GRFLabel(uint8_t label, uint32_t nfo_line, size_t pos) : label(label), nfo_line(nfo_line), pos(pos) {} }; /** Dynamic data of a loaded NewGRF */ struct GRFFile : ZeroedMemoryAllocator { std::string filename; uint32_t grfid; - byte grf_version; + uint8_t grf_version; uint sound_offset; uint16_t num_sounds; @@ -188,7 +188,7 @@ struct GRFLoadedFeatures { */ inline bool HasGrfMiscBit(GrfMiscBit bit) { - extern byte _misc_grf_features; + extern uint8_t _misc_grf_features; return HasBit(_misc_grf_features, bit); } @@ -204,7 +204,7 @@ void ResetPersistentNewGRFData(); void GrfMsgI(int severity, const std::string &msg); #define GrfMsg(severity, format_string, ...) GrfMsgI(severity, fmt::format(FMT_STRING(format_string), ## __VA_ARGS__)) -bool GetGlobalVariable(byte param, uint32_t *value, const GRFFile *grffile); +bool GetGlobalVariable(uint8_t param, uint32_t *value, const GRFFile *grffile); StringID MapGRFStringID(uint32_t grfid, StringID str); void ShowNewGRFError(); diff --git a/src/newgrf_airport.cpp b/src/newgrf_airport.cpp index 41e8c7021a..2c0012141d 100644 --- a/src/newgrf_airport.cpp +++ b/src/newgrf_airport.cpp @@ -51,13 +51,13 @@ AirportSpec AirportSpec::specs[NUM_AIRPORTS]; ///< Airport specifications. * @param type index of airport * @return A pointer to the corresponding AirportSpec */ -/* static */ const AirportSpec *AirportSpec::Get(byte type) +/* static */ const AirportSpec *AirportSpec::Get(uint8_t type) { assert(type < lengthof(AirportSpec::specs)); const AirportSpec *as = &AirportSpec::specs[type]; if (type >= NEW_AIRPORT_OFFSET && !as->enabled) { if (_airport_mngr.GetGRFID(type) == 0) return as; - byte subst_id = _airport_mngr.GetSubstituteID(type); + uint8_t subst_id = _airport_mngr.GetSubstituteID(type); if (subst_id == AT_INVALID) return as; as = &AirportSpec::specs[subst_id]; } @@ -71,7 +71,7 @@ AirportSpec AirportSpec::specs[NUM_AIRPORTS]; ///< Airport specifications. * @param type index of airport * @return A pointer to the corresponding AirportSpec */ -/* static */ AirportSpec *AirportSpec::GetWithoutOverride(byte type) +/* static */ AirportSpec *AirportSpec::GetWithoutOverride(uint8_t type) { assert(type < lengthof(AirportSpec::specs)); return &AirportSpec::specs[type]; @@ -92,12 +92,12 @@ bool AirportSpec::IsAvailable() const * @param tile Top corner of the airport. * @return true iff the airport would be within the map bounds at the given tile. */ -bool AirportSpec::IsWithinMapBounds(byte table, TileIndex tile) const +bool AirportSpec::IsWithinMapBounds(uint8_t table, TileIndex tile) const { if (table >= this->num_table) return false; - byte w = this->size_x; - byte h = this->size_y; + uint8_t w = this->size_x; + uint8_t h = this->size_y; if (this->rotation[table] == DIR_E || this->rotation[table] == DIR_W) Swap(w, h); return TileX(tile) + w < Map::SizeX() && @@ -131,7 +131,7 @@ void BindAirportSpecs() void AirportOverrideManager::SetEntitySpec(AirportSpec *as) { - byte airport_id = this->AddEntityID(as->grf_prop.local_id, as->grf_prop.grffile->grfid, as->grf_prop.subst_id); + uint8_t airport_id = this->AddEntityID(as->grf_prop.local_id, as->grf_prop.grffile->grfid, as->grf_prop.subst_id); if (airport_id == this->invalid_id) { GrfMsg(1, "Airport.SetEntitySpec: Too many airports allocated. Ignoring."); @@ -153,7 +153,7 @@ void AirportOverrideManager::SetEntitySpec(AirportSpec *as) } } -/* virtual */ uint32_t AirportScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t AirportScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const { switch (variable) { case 0x40: return this->layout; @@ -241,14 +241,14 @@ TownScopeResolver *AirportResolverObject::GetTown() * @param param1 First parameter (var 10) of the callback. * @param param2 Second parameter (var 18) of the callback. */ -AirportResolverObject::AirportResolverObject(TileIndex tile, Station *st, byte airport_id, byte layout, +AirportResolverObject::AirportResolverObject(TileIndex tile, Station *st, uint8_t airport_id, uint8_t layout, CallbackID callback, uint32_t param1, uint32_t param2) : ResolverObject(AirportSpec::Get(airport_id)->grf_prop.grffile, callback, param1, param2), airport_scope(*this, tile, st, airport_id, layout) { this->root_spritegroup = AirportSpec::Get(airport_id)->grf_prop.spritegroup[0]; } -SpriteID GetCustomAirportSprite(const AirportSpec *as, byte layout) +SpriteID GetCustomAirportSprite(const AirportSpec *as, uint8_t layout) { AirportResolverObject object(INVALID_TILE, nullptr, as->GetIndex(), layout); const SpriteGroup *group = object.Resolve(); @@ -270,7 +270,7 @@ uint16_t GetAirportCallback(CallbackID callback, uint32_t param1, uint32_t param * @param callback The callback to call. * @return The custom text. */ -StringID GetAirportTextCallback(const AirportSpec *as, byte layout, uint16_t callback) +StringID GetAirportTextCallback(const AirportSpec *as, uint8_t layout, uint16_t callback) { AirportResolverObject object(INVALID_TILE, nullptr, as->GetIndex(), layout, (CallbackID)callback); uint16_t cb_res = object.ResolveCallback(); diff --git a/src/newgrf_airport.h b/src/newgrf_airport.h index 297d0d1c25..5d031f7c56 100644 --- a/src/newgrf_airport.h +++ b/src/newgrf_airport.h @@ -19,7 +19,7 @@ #include "tilearea_type.h" /** Copy from station_map.h */ -typedef byte StationGfx; +typedef uint8_t StationGfx; /** Tile-offset / AirportTileID pair. */ struct AirportTileTable { @@ -91,7 +91,7 @@ enum TTDPAirportType { struct HangarTileTable { TileIndexDiffC ti; ///< Tile offset from the top-most airport tile. Direction dir; ///< Direction of the exit. - byte hangar_num; ///< The hangar to which this tile belongs. + uint8_t hangar_num; ///< The hangar to which this tile belongs. }; /** @@ -101,13 +101,13 @@ struct AirportSpec { const struct AirportFTAClass *fsm; ///< the finite statemachine for the default airports const AirportTileTable * const *table; ///< list of the tiles composing the airport const Direction *rotation; ///< the rotation of each tiletable - byte num_table; ///< number of elements in the table + uint8_t num_table; ///< number of elements in the table const HangarTileTable *depot_table; ///< gives the position of the depots on the airports - byte nof_depots; ///< the number of hangar tiles in this airport - byte size_x; ///< size of airport in x direction - byte size_y; ///< size of airport in y direction - byte noise_level; ///< noise that this airport generates - byte catchment; ///< catchment area of this airport + uint8_t nof_depots; ///< the number of hangar tiles in this airport + uint8_t size_x; ///< size of airport in x direction + uint8_t size_y; ///< size of airport in y direction + uint8_t noise_level; ///< noise that this airport generates + uint8_t catchment; ///< catchment area of this airport TimerGameCalendar::Year min_year; ///< first year the airport is available TimerGameCalendar::Year max_year; ///< last year the airport is available StringID name; ///< name of this airport @@ -119,19 +119,19 @@ struct AirportSpec { bool enabled; ///< Entity still available (by default true). Newgrf can disable it, though. struct GRFFileProps grf_prop; ///< Properties related to the grf file. - static const AirportSpec *Get(byte type); - static AirportSpec *GetWithoutOverride(byte type); + static const AirportSpec *Get(uint8_t type); + static AirportSpec *GetWithoutOverride(uint8_t type); bool IsAvailable() const; - bool IsWithinMapBounds(byte table, TileIndex index) const; + bool IsWithinMapBounds(uint8_t table, TileIndex index) const; static void ResetAirports(); /** Get the index of this spec. */ - byte GetIndex() const + uint8_t GetIndex() const { assert(this >= specs && this < endof(specs)); - return (byte)(this - specs); + return (uint8_t)(this - specs); } static const AirportSpec dummy; ///< The dummy airport. @@ -148,8 +148,8 @@ void BindAirportSpecs(); /** Resolver for the airport scope. */ struct AirportScopeResolver : public ScopeResolver { struct Station *st; ///< Station of the airport for which the callback is run, or \c nullptr for build gui. - byte airport_id; ///< Type of airport for which the callback is run. - byte layout; ///< Layout of the airport to build. + uint8_t airport_id; ///< Type of airport for which the callback is run. + uint8_t layout; ///< Layout of the airport to build. TileIndex tile; ///< Tile for the callback, only valid for airporttile callbacks. /** @@ -160,13 +160,13 @@ struct AirportScopeResolver : public ScopeResolver { * @param airport_id Type of airport for which the callback is run. * @param layout Layout of the airport to build. */ - AirportScopeResolver(ResolverObject &ro, TileIndex tile, Station *st, byte airport_id, byte layout) + AirportScopeResolver(ResolverObject &ro, TileIndex tile, Station *st, uint8_t airport_id, uint8_t layout) : ScopeResolver(ro), st(st), airport_id(airport_id), layout(layout), tile(tile) { } uint32_t GetRandomBits() const override; - uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; void StorePSA(uint pos, int32_t value) override; }; @@ -176,12 +176,12 @@ struct AirportResolverObject : public ResolverObject { AirportScopeResolver airport_scope; std::unique_ptr town_scope; ///< The town scope resolver (created on the first call). - AirportResolverObject(TileIndex tile, Station *st, byte airport_id, byte layout, + AirportResolverObject(TileIndex tile, Station *st, uint8_t airport_id, uint8_t layout, CallbackID callback = CBID_NO_CALLBACK, uint32_t callback_param1 = 0, uint32_t callback_param2 = 0); TownScopeResolver *GetTown(); - ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &this->airport_scope; @@ -199,6 +199,6 @@ struct AirportResolverObject : public ResolverObject { uint32_t GetDebugID() const override; }; -StringID GetAirportTextCallback(const AirportSpec *as, byte layout, uint16_t callback); +StringID GetAirportTextCallback(const AirportSpec *as, uint8_t layout, uint16_t callback); #endif /* NEWGRF_AIRPORT_H */ diff --git a/src/newgrf_airporttiles.cpp b/src/newgrf_airporttiles.cpp index 5204d7b55b..d2a34fb28d 100644 --- a/src/newgrf_airporttiles.cpp +++ b/src/newgrf_airporttiles.cpp @@ -107,7 +107,7 @@ StationGfx GetTranslatedAirportTileID(StationGfx gfx) * @param grf_version8 True, if we are dealing with a new NewGRF which uses GRF version >= 8. * @return a construction of bits obeying the newgrf format */ -static uint32_t GetNearbyAirportTileInformation(byte parameter, TileIndex tile, StationID index, bool grf_version8) +static uint32_t GetNearbyAirportTileInformation(uint8_t parameter, TileIndex tile, StationID index, bool grf_version8) { if (parameter != 0) tile = GetNearbyTile(parameter, tile); // only perform if it is required bool is_same_airport = (IsTileType(tile, MP_STATION) && IsAirport(tile) && GetStationIndex(tile) == index); @@ -159,7 +159,7 @@ static uint32_t GetAirportTileIDAtOffset(TileIndex tile, const Station *st, uint return 0xFF << 8 | ats->grf_prop.subst_id; // so just give it the substitute } -/* virtual */ uint32_t AirportTileScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t AirportTileScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const { assert(this->st != nullptr); @@ -216,7 +216,7 @@ AirportTileResolverObject::AirportTileResolverObject(const AirportTileSpec *ats, CallbackID callback, uint32_t callback_param1, uint32_t callback_param2) : ResolverObject(ats->grf_prop.grffile, callback, callback_param1, callback_param2), tiles_scope(*this, ats, tile, st), - airport_scope(*this, tile, st, st != nullptr ? st->airport.type : (byte)AT_DUMMY, st != nullptr ? st->airport.layout : 0) + airport_scope(*this, tile, st, st != nullptr ? st->airport.type : (uint8_t)AT_DUMMY, st != nullptr ? st->airport.layout : 0) { this->root_spritegroup = ats->grf_prop.spritegroup[0]; } @@ -237,7 +237,7 @@ uint16_t GetAirportTileCallback(CallbackID callback, uint32_t param1, uint32_t p return object.ResolveCallback(); } -static void AirportDrawTileLayout(const TileInfo *ti, const TileLayoutSpriteGroup *group, byte colour) +static void AirportDrawTileLayout(const TileInfo *ti, const TileLayoutSpriteGroup *group, uint8_t colour) { const DrawTileSprites *dts = group->ProcessRegisters(nullptr); diff --git a/src/newgrf_airporttiles.h b/src/newgrf_airporttiles.h index 2362cfe110..53f10bab44 100644 --- a/src/newgrf_airporttiles.h +++ b/src/newgrf_airporttiles.h @@ -20,7 +20,7 @@ /** Scope resolver for handling the tiles of an airport. */ struct AirportTileScopeResolver : public ScopeResolver { struct Station *st; ///< %Station of the airport for which the callback is run, or \c nullptr for build gui. - byte airport_id; ///< Type of airport for which the callback is run. + uint8_t airport_id; ///< Type of airport for which the callback is run. TileIndex tile; ///< Tile for the callback, only valid for airporttile callbacks. const AirportTileSpec *ats; @@ -38,7 +38,7 @@ struct AirportTileScopeResolver : public ScopeResolver { } uint32_t GetRandomBits() const override; - uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; }; /** Resolver for tiles of an airport. */ @@ -49,7 +49,7 @@ struct AirportTileResolverObject : public ResolverObject { AirportTileResolverObject(const AirportTileSpec *ats, TileIndex tile, Station *st, CallbackID callback = CBID_NO_CALLBACK, uint32_t callback_param1 = 0, uint32_t callback_param2 = 0); - ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &tiles_scope; diff --git a/src/newgrf_animation_base.h b/src/newgrf_animation_base.h index 7ab4968194..fffb31133e 100644 --- a/src/newgrf_animation_base.h +++ b/src/newgrf_animation_base.h @@ -19,8 +19,8 @@ template struct TileAnimationFrameAnimationHelper { - static byte Get(Tobj *, TileIndex tile) { return GetAnimationFrame(tile); } - static void Set(Tobj *, TileIndex tile, byte frame) { SetAnimationFrame(tile, frame); } + static uint8_t Get(Tobj *, TileIndex tile) { return GetAnimationFrame(tile); } + static void Set(Tobj *, TileIndex tile, uint8_t frame) { SetAnimationFrame(tile, frame); } }; /** diff --git a/src/newgrf_canal.cpp b/src/newgrf_canal.cpp index 1c307bb671..4425ee00ff 100644 --- a/src/newgrf_canal.cpp +++ b/src/newgrf_canal.cpp @@ -30,7 +30,7 @@ struct CanalScopeResolver : public ScopeResolver { } uint32_t GetRandomBits() const override; - uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; }; /** Resolver object for canals. */ @@ -41,7 +41,7 @@ struct CanalResolverObject : public ResolverObject { CanalResolverObject(CanalFeature feature, TileIndex tile, CallbackID callback = CBID_NO_CALLBACK, uint32_t callback_param1 = 0, uint32_t callback_param2 = 0); - ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &this->canal_scope; @@ -59,7 +59,7 @@ struct CanalResolverObject : public ResolverObject { return IsTileType(this->tile, MP_WATER) ? GetWaterTileRandomBits(this->tile) : 0; } -/* virtual */ uint32_t CanalScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t CanalScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const { switch (variable) { /* Height of tile */ diff --git a/src/newgrf_commons.cpp b/src/newgrf_commons.cpp index 7804c08e30..d178920542 100644 --- a/src/newgrf_commons.cpp +++ b/src/newgrf_commons.cpp @@ -403,7 +403,7 @@ uint32_t GetTerrainType(TileIndex tile, TileContext context) * @param axis Axis of a railways station. * @return The tile at the offset. */ -TileIndex GetNearbyTile(byte parameter, TileIndex tile, bool signed_offsets, Axis axis) +TileIndex GetNearbyTile(uint8_t parameter, TileIndex tile, bool signed_offsets, Axis axis) { int8_t x = GB(parameter, 0, 4); int8_t y = GB(parameter, 4, 4); @@ -435,7 +435,7 @@ uint32_t GetNearbyTileInformation(TileIndex tile, bool grf_version8) auto [tileh, z] = GetTilePixelSlope(tile); /* Return 0 if the tile is a land tile */ - byte terrain_type = (HasTileWaterClass(tile) ? (GetWaterClass(tile) + 1) & 3 : 0) << 5 | GetTerrainType(tile) << 2 | (tile_type == MP_WATER ? 1 : 0) << 1; + uint8_t terrain_type = (HasTileWaterClass(tile) ? (GetWaterClass(tile) + 1) & 3 : 0) << 5 | GetTerrainType(tile) << 2 | (tile_type == MP_WATER ? 1 : 0) << 1; if (grf_version8) z /= TILE_HEIGHT; return tile_type << 24 | ClampTo(z) << 16 | terrain_type << 8 | tileh; } diff --git a/src/newgrf_commons.h b/src/newgrf_commons.h index 08913fd40b..bdfea825e6 100644 --- a/src/newgrf_commons.h +++ b/src/newgrf_commons.h @@ -293,7 +293,7 @@ extern AirportTileOverrideManager _airporttile_mngr; extern ObjectOverrideManager _object_mngr; uint32_t GetTerrainType(TileIndex tile, TileContext context = TCX_NORMAL); -TileIndex GetNearbyTile(byte parameter, TileIndex tile, bool signed_offsets = true, Axis axis = INVALID_AXIS); +TileIndex GetNearbyTile(uint8_t parameter, TileIndex tile, bool signed_offsets = true, Axis axis = INVALID_AXIS); uint32_t GetNearbyTileInformation(TileIndex tile, bool grf_version8); uint32_t GetCompanyInfo(CompanyID owner, const struct Livery *l = nullptr); CommandCost GetErrorMessageFromLocationCallbackResult(uint16_t cb_res, const GRFFile *grffile, StringID default_error); diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index f3cec8b5a5..60c6998b0f 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -254,10 +254,10 @@ void UpdateNewGRFConfigPalette(int32_t) */ size_t GRFGetSizeOfDataSection(FILE *f) { - extern const byte _grf_cont_v2_sig[]; + extern const uint8_t _grf_cont_v2_sig[]; static const uint header_len = 14; - byte data[header_len]; + uint8_t data[header_len]; if (fread(data, 1, header_len, f) == header_len) { if (data[0] == 0 && data[1] == 0 && MemCmpT(data + 2, _grf_cont_v2_sig, 8) == 0) { /* Valid container version 2, get data section size. */ diff --git a/src/newgrf_config.h b/src/newgrf_config.h index c9f6d51d71..f5d3233cea 100644 --- a/src/newgrf_config.h +++ b/src/newgrf_config.h @@ -132,9 +132,9 @@ struct GRFParameterInfo { uint32_t min_value; ///< The minimal value this parameter can have uint32_t max_value; ///< The maximal value of this parameter uint32_t def_value; ///< Default value of this parameter - byte param_nr; ///< GRF parameter to store content in - byte first_bit; ///< First bit to use in the GRF parameter - byte num_bit; ///< Number of bits to use for this parameter + uint8_t param_nr; ///< GRF parameter to store content in + uint8_t first_bit; ///< First bit to use in the GRF parameter + uint8_t num_bit; ///< Number of bits to use for this parameter std::map value_names; ///< Names for each value. bool complete_labels; ///< True if all values have a label. diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index 4ccc79e0e1..b5135b552c 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -86,9 +86,9 @@ typedef const void *NIOffsetProc(const void *b); struct NIProperty { const char *name; ///< A (human readable) name for the property NIOffsetProc *offset_proc; ///< Callback proc to get the actual variable address in memory - byte read_size; ///< Number of bytes (i.e. byte, word, dword etc) - byte prop; ///< The number of the property - byte type; + uint8_t read_size; ///< Number of bytes (i.e. byte, word, dword etc) + uint8_t prop; ///< The number of the property + uint8_t type; }; @@ -99,8 +99,8 @@ struct NIProperty { struct NICallback { const char *name; ///< The human readable name of the callback NIOffsetProc *offset_proc; ///< Callback proc to get the actual variable address in memory - byte read_size; ///< The number of bytes (i.e. byte, word, dword etc) to read - byte cb_bit; ///< The bit that needs to be set for this callback to be enabled + uint8_t read_size; ///< The number of bytes (i.e. byte, word, dword etc) to read + uint8_t cb_bit; ///< The bit that needs to be set for this callback to be enabled uint16_t cb_id; ///< The number of the callback }; /** Mask to show no bit needs to be enabled for the callback. */ @@ -109,7 +109,7 @@ static const int CBM_NO_BIT = UINT8_MAX; /** Representation on the NewGRF variables. */ struct NIVariable { const char *name; - byte var; + uint8_t var; }; /** Helper class to wrap some functionality/queries in. */ @@ -284,7 +284,7 @@ struct NewGRFInspectWindow : Window { uint chain_index; /** The currently edited parameter, to update the right one. */ - byte current_edit_param; + uint8_t current_edit_param; Scrollbar *vscroll; diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index 703858ccc1..1739835475 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -50,7 +50,7 @@ const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID cargo, Eng return nullptr; } -void SetCustomEngineSprites(EngineID engine, byte cargo, const SpriteGroup *group) +void SetCustomEngineSprites(EngineID engine, uint8_t cargo, const SpriteGroup *group) { Engine *e = Engine::Get(engine); assert(cargo < lengthof(e->grf_prop.spritegroup)); @@ -130,7 +130,7 @@ enum TTDPAircraftMovementStates { * Map OTTD aircraft movement states to TTDPatch style movement states * (VarAction 2 Variable 0xE2) */ -static byte MapAircraftMovementState(const Aircraft *v) +static uint8_t MapAircraftMovementState(const Aircraft *v) { const Station *st = GetTargetAirportIfValid(v); if (st == nullptr) return AMS_TTDP_FLIGHT_TO_TOWER; @@ -257,7 +257,7 @@ enum TTDPAircraftMovementActions { * (VarAction 2 Variable 0xE6) * This is not fully supported yet but it's enough for Planeset. */ -static byte MapAircraftMovementAction(const Aircraft *v) +static uint8_t MapAircraftMovementAction(const Aircraft *v) { switch (v->state) { case HANGAR: @@ -315,7 +315,7 @@ static byte MapAircraftMovementAction(const Aircraft *v) } -/* virtual */ ScopeResolver *VehicleResolverObject::GetScope(VarSpriteGroupScope scope, byte relative) +/* virtual */ ScopeResolver *VehicleResolverObject::GetScope(VarSpriteGroupScope scope, uint8_t relative) { switch (scope) { case VSG_SCOPE_SELF: return &this->self_scope; @@ -396,8 +396,8 @@ static const Livery *LiveryHelper(EngineID engine, const Vehicle *v) static uint32_t PositionHelper(const Vehicle *v, bool consecutive) { const Vehicle *u; - byte chain_before = 0; - byte chain_after = 0; + uint8_t chain_before = 0; + uint8_t chain_after = 0; for (u = v->First(); u != v; u = u->Next()) { chain_before++; @@ -412,7 +412,7 @@ static uint32_t PositionHelper(const Vehicle *v, bool consecutive) return chain_before | chain_after << 8 | (chain_before + chain_after + consecutive) << 16; } -static uint32_t VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *object, byte variable, uint32_t parameter, bool *available) +static uint32_t VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *object, uint8_t variable, uint32_t parameter, bool *available) { /* Calculated vehicle parameters */ switch (variable) { @@ -436,8 +436,8 @@ static uint32_t VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *objec case 0x42: { // Consist cargo information if (!HasBit(v->grf_cache.cache_valid, NCVV_CONSIST_CARGO_INFORMATION)) { std::array common_cargoes{}; - byte cargo_classes = 0; - byte user_def_data = 0; + uint8_t cargo_classes = 0; + uint8_t user_def_data = 0; for (const Vehicle *u = v; u != nullptr; u = u->Next()) { if (v->type == VEH_TRAIN) user_def_data |= Train::From(u)->tcache.user_def_data; @@ -506,7 +506,7 @@ static uint32_t VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *objec const Vehicle *w = v->Next(); assert(w != nullptr); uint16_t altitude = ClampTo(v->z_pos - w->z_pos); // Aircraft height - shadow height - byte airporttype = ATP_TTDP_LARGE; + uint8_t airporttype = ATP_TTDP_LARGE; const Station *st = GetTargetAirportIfValid(Aircraft::From(v)); @@ -590,9 +590,9 @@ static uint32_t VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *objec case 0x4D: // Position within articulated vehicle if (!HasBit(v->grf_cache.cache_valid, NCVV_POSITION_IN_VEHICLE)) { - byte artic_before = 0; + uint8_t artic_before = 0; for (const Vehicle *u = v; u->IsArticulatedPart(); u = u->Previous()) artic_before++; - byte artic_after = 0; + uint8_t artic_after = 0; for (const Vehicle *u = v; u->HasArticulatedPart(); u = u->Next()) artic_after++; v->grf_cache.position_in_vehicle = artic_before | artic_after << 8; SetBit(v->grf_cache.cache_valid, NCVV_POSITION_IN_VEHICLE); @@ -939,7 +939,7 @@ static uint32_t VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *objec return UINT_MAX; } -/* virtual */ uint32_t VehicleScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t VehicleScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const { if (this->v == nullptr) { /* Vehicle does not exist, so we're in a purchase list */ diff --git a/src/newgrf_engine.h b/src/newgrf_engine.h index da37602b81..527942a0a3 100644 --- a/src/newgrf_engine.h +++ b/src/newgrf_engine.h @@ -39,7 +39,7 @@ struct VehicleScopeResolver : public ScopeResolver { void SetVehicle(const Vehicle *v) { this->v = v; } uint32_t GetRandomBits() const override; - uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; uint32_t GetTriggers() const override; }; @@ -57,12 +57,12 @@ struct VehicleResolverObject : public ResolverObject { VehicleScopeResolver parent_scope; ///< Scope resolver for its parent vehicle. VehicleScopeResolver relative_scope; ///< Scope resolver for an other vehicle in the chain. - byte cached_relative_count; ///< Relative position of the other vehicle. + uint8_t cached_relative_count; ///< Relative position of the other vehicle. VehicleResolverObject(EngineID engine_type, const Vehicle *v, WagonOverride wagon_override, bool rotor_in_gui = false, CallbackID callback = CBID_NO_CALLBACK, uint32_t callback_param1 = 0, uint32_t callback_param2 = 0); - ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override; + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0) override; const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const override; @@ -78,7 +78,7 @@ struct VehicleSpriteSeq; void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const struct SpriteGroup *group, EngineID *train_id, uint trains); const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID cargo, EngineID overriding_engine); -void SetCustomEngineSprites(EngineID engine, byte cargo, const struct SpriteGroup *group); +void SetCustomEngineSprites(EngineID engine, uint8_t cargo, const struct SpriteGroup *group); void GetCustomEngineSprite(EngineID engine, const Vehicle *v, Direction direction, EngineImageType image_type, VehicleSpriteSeq *result); #define GetCustomVehicleSprite(v, direction, image_type, result) GetCustomEngineSprite(v->engine_type, v, direction, image_type, result) diff --git a/src/newgrf_generic.cpp b/src/newgrf_generic.cpp index dcd660793c..6b4dcf2fbb 100644 --- a/src/newgrf_generic.cpp +++ b/src/newgrf_generic.cpp @@ -41,7 +41,7 @@ struct GenericScopeResolver : public ScopeResolver { { } - uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; private: bool ai_callback; ///< Callback comes from the AI. @@ -54,7 +54,7 @@ struct GenericResolverObject : public ResolverObject { GenericResolverObject(bool ai_callback, CallbackID callback = CBID_NO_CALLBACK); - ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &this->generic_scope; @@ -118,7 +118,7 @@ void AddGenericCallback(uint8_t feature, const GRFFile *file, const SpriteGroup _gcl[feature].push_front(GenericCallback(file, group)); } -/* virtual */ uint32_t GenericScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t GenericScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const { if (this->ai_callback) { switch (variable) { diff --git a/src/newgrf_house.cpp b/src/newgrf_house.cpp index c56c62d5e6..0321ce0fc3 100644 --- a/src/newgrf_house.cpp +++ b/src/newgrf_house.cpp @@ -77,7 +77,7 @@ void ResetHouseClassIDs() _class_mapping = {}; } -HouseClassID AllocateHouseClassID(byte grf_class_id, uint32_t grfid) +HouseClassID AllocateHouseClassID(uint8_t grf_class_id, uint32_t grfid) { /* Start from 1 because 0 means that no class has been assigned. */ for (int i = 1; i != lengthof(_class_mapping); i++) { @@ -174,7 +174,7 @@ static uint32_t GetNumHouses(HouseID house_id, const Town *town) * @param grf_version8 True, if we are dealing with a new NewGRF which uses GRF version >= 8. * @return a construction of bits obeying the newgrf format */ -static uint32_t GetNearbyTileInformation(byte parameter, TileIndex tile, bool grf_version8) +static uint32_t GetNearbyTileInformation(uint8_t parameter, TileIndex tile, bool grf_version8) { tile = GetNearbyTile(parameter, tile); return GetNearbyTileInformation(tile, grf_version8); @@ -294,7 +294,7 @@ static uint32_t GetDistanceFromNearbyHouse(uint8_t parameter, TileIndex tile, Ho /** * @note Used by the resolver to get values for feature 07 deterministic spritegroups. */ -/* virtual */ uint32_t HouseScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t HouseScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const { switch (variable) { /* Construction stage. */ @@ -424,7 +424,7 @@ uint16_t GetHouseCallback(CallbackID callback, uint32_t param1, uint32_t param2, return object.ResolveCallback(); } -static void DrawTileLayout(const TileInfo *ti, const TileLayoutSpriteGroup *group, byte stage, HouseID house_id) +static void DrawTileLayout(const TileInfo *ti, const TileLayoutSpriteGroup *group, uint8_t stage, HouseID house_id) { const DrawTileSprites *dts = group->ProcessRegisters(&stage); @@ -472,7 +472,7 @@ void DrawNewHouseTile(TileInfo *ti, HouseID house_id) if (group != nullptr && group->type == SGT_TILELAYOUT) { /* Limit the building stage to the number of stages supplied. */ const TileLayoutSpriteGroup *tlgroup = (const TileLayoutSpriteGroup *)group; - byte stage = GetHouseBuildingStage(ti->tile); + uint8_t stage = GetHouseBuildingStage(ti->tile); DrawTileLayout(ti, tlgroup, stage, house_id); } } @@ -580,7 +580,7 @@ bool NewHouseTileLoop(TileIndex tile) return true; } -static void DoTriggerHouse(TileIndex tile, HouseTrigger trigger, byte base_random, bool first) +static void DoTriggerHouse(TileIndex tile, HouseTrigger trigger, uint8_t base_random, bool first) { /* We can't trigger a non-existent building... */ assert(IsTileType(tile, MP_HOUSE)); @@ -601,8 +601,8 @@ static void DoTriggerHouse(TileIndex tile, HouseTrigger trigger, byte base_rando SetHouseTriggers(tile, object.GetRemainingTriggers()); /* Rerandomise bits. Scopes other than SELF are invalid for houses. For bug-to-bug-compatibility with TTDP we ignore the scope. */ - byte new_random_bits = Random(); - byte random_bits = GetHouseRandomBits(tile); + uint8_t new_random_bits = Random(); + uint8_t random_bits = GetHouseRandomBits(tile); uint32_t reseed = object.GetReseedSum(); random_bits &= ~reseed; random_bits |= (first ? new_random_bits : base_random) & reseed; diff --git a/src/newgrf_house.h b/src/newgrf_house.h index 296e9152be..868116c7f9 100644 --- a/src/newgrf_house.h +++ b/src/newgrf_house.h @@ -43,7 +43,7 @@ struct HouseScopeResolver : public ScopeResolver { } uint32_t GetRandomBits() const override; - uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; uint32_t GetTriggers() const override; }; @@ -56,7 +56,7 @@ struct HouseResolverObject : public ResolverObject { CallbackID callback = CBID_NO_CALLBACK, uint32_t param1 = 0, uint32_t param2 = 0, bool not_yet_constructed = false, uint8_t initial_random_bits = 0, CargoTypes watched_cargo_triggers = 0); - ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &this->house_scope; @@ -88,7 +88,7 @@ struct HouseClassMapping { }; void ResetHouseClassIDs(); -HouseClassID AllocateHouseClassID(byte grf_class_id, uint32_t grfid); +HouseClassID AllocateHouseClassID(uint8_t grf_class_id, uint32_t grfid); void InitializeBuildingCounts(); void IncreaseBuildingCount(Town *t, HouseID house_id); diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp index 59660d0db9..ed68d35a01 100644 --- a/src/newgrf_industries.cpp +++ b/src/newgrf_industries.cpp @@ -111,12 +111,12 @@ static uint32_t GetClosestIndustry(TileIndex tile, IndustryType type, const Indu * @param current Industry for which the inquiry is made * @return the formatted answer to the callback : rr(reserved) cc(count) dddd(manhattan distance of closest sister) */ -static uint32_t GetCountAndDistanceOfClosestInstance(byte param_setID, byte layout_filter, bool town_filter, const Industry *current) +static uint32_t GetCountAndDistanceOfClosestInstance(uint8_t param_setID, uint8_t layout_filter, bool town_filter, const Industry *current) { uint32_t GrfID = GetRegister(0x100); ///< Get the GRFID of the definition to look for in register 100h IndustryType ind_index; uint32_t closest_dist = UINT32_MAX; - byte count = 0; + uint8_t count = 0; /* Determine what will be the industry type to look for */ switch (GrfID) { @@ -141,7 +141,7 @@ static uint32_t GetCountAndDistanceOfClosestInstance(byte param_setID, byte layo /* If the filter is 0, it could be because none was specified as well as being really a 0. * In either case, just do the regular var67 */ closest_dist = GetClosestIndustry(current->location.tile, ind_index, current); - count = ClampTo(Industry::GetIndustryTypeCount(ind_index)); + count = ClampTo(Industry::GetIndustryTypeCount(ind_index)); } else { /* Count only those who match the same industry type and layout filter * Unfortunately, we have to do it manually */ @@ -156,7 +156,7 @@ static uint32_t GetCountAndDistanceOfClosestInstance(byte param_setID, byte layo return count << 16 | GB(closest_dist, 0, 16); } -/* virtual */ uint32_t IndustriesScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t IndustriesScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const { if (this->ro.callback == CBID_INDUSTRY_LOCATION) { /* Variables available during construction check. */ @@ -233,7 +233,7 @@ static uint32_t GetCountAndDistanceOfClosestInstance(byte param_setID, byte layo /* Company info */ case 0x45: { - byte colours = 0; + uint8_t colours = 0; bool is_ai = false; const Company *c = Company::GetIfValid(this->industry->founder); @@ -298,7 +298,7 @@ static uint32_t GetCountAndDistanceOfClosestInstance(byte param_setID, byte layo * 68 is the same as 67, but with a filtering on selected layout */ case 0x67: case 0x68: { - byte layout_filter = 0; + uint8_t layout_filter = 0; bool town_filter = false; if (variable == 0x68) { uint32_t reg = GetRegister(0x101); @@ -545,7 +545,7 @@ CommandCost CheckIfCallBackAllowsCreation(TileIndex tile, IndustryType type, siz ind.location.tile = tile; ind.location.w = 0; // important to mark the industry invalid ind.type = type; - ind.selected_layout = (byte)layout; + ind.selected_layout = (uint8_t)layout; ind.town = ClosestTownFromTile(tile, UINT_MAX); ind.random = initial_random_bits; ind.founder = founder; diff --git a/src/newgrf_industries.h b/src/newgrf_industries.h index 1a2132951e..a195e978a4 100644 --- a/src/newgrf_industries.h +++ b/src/newgrf_industries.h @@ -33,7 +33,7 @@ struct IndustriesScopeResolver : public ScopeResolver { } uint32_t GetRandomBits() const override; - uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; uint32_t GetTriggers() const override; void StorePSA(uint pos, int32_t value) override; }; @@ -49,7 +49,7 @@ struct IndustriesResolverObject : public ResolverObject { TownScopeResolver *GetTown(); - ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &industries_scope; @@ -97,6 +97,6 @@ bool IndustryTemporarilyRefusesCargo(Industry *ind, CargoID cargo_type); IndustryType MapNewGRFIndustryType(IndustryType grf_type, uint32_t grf_id); /* in newgrf_industrytiles.cpp*/ -uint32_t GetNearbyIndustryTileInformation(byte parameter, TileIndex tile, IndustryID index, bool signed_offsets, bool grf_version8); +uint32_t GetNearbyIndustryTileInformation(uint8_t parameter, TileIndex tile, IndustryID index, bool signed_offsets, bool grf_version8); #endif /* NEWGRF_INDUSTRIES_H */ diff --git a/src/newgrf_industrytiles.cpp b/src/newgrf_industrytiles.cpp index 0cb0952a0b..f4c6ce5aeb 100644 --- a/src/newgrf_industrytiles.cpp +++ b/src/newgrf_industrytiles.cpp @@ -31,7 +31,7 @@ * @param grf_version8 True, if we are dealing with a new NewGRF which uses GRF version >= 8. * @return a construction of bits obeying the newgrf format */ -uint32_t GetNearbyIndustryTileInformation(byte parameter, TileIndex tile, IndustryID index, bool signed_offsets, bool grf_version8) +uint32_t GetNearbyIndustryTileInformation(uint8_t parameter, TileIndex tile, IndustryID index, bool signed_offsets, bool grf_version8) { if (parameter != 0) tile = GetNearbyTile(parameter, tile, signed_offsets); // only perform if it is required bool is_same_industry = (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == index); @@ -52,13 +52,13 @@ uint32_t GetNearbyIndustryTileInformation(byte parameter, TileIndex tile, Indust */ uint32_t GetRelativePosition(TileIndex tile, TileIndex ind_tile) { - byte x = TileX(tile) - TileX(ind_tile); - byte y = TileY(tile) - TileY(ind_tile); + uint8_t x = TileX(tile) - TileX(ind_tile); + uint8_t y = TileY(tile) - TileY(ind_tile); return ((y & 0xF) << 20) | ((x & 0xF) << 16) | (y << 8) | x; } -/* virtual */ uint32_t IndustryTileScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t IndustryTileScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const { switch (variable) { /* Construction state of the tile: a value between 0 and 3 */ @@ -155,7 +155,7 @@ uint32_t IndustryTileResolverObject::GetDebugID() const return GetIndustryTileSpec(gfx)->grf_prop.local_id; } -static void IndustryDrawTileLayout(const TileInfo *ti, const TileLayoutSpriteGroup *group, byte rnd_colour, byte stage) +static void IndustryDrawTileLayout(const TileInfo *ti, const TileLayoutSpriteGroup *group, uint8_t rnd_colour, uint8_t stage) { const DrawTileSprites *dts = group->ProcessRegisters(&stage); @@ -207,7 +207,7 @@ bool DrawNewIndustryTile(TileInfo *ti, Industry *i, IndustryGfx gfx, const Indus /* Limit the building stage to the number of stages supplied. */ const TileLayoutSpriteGroup *tlgroup = (const TileLayoutSpriteGroup *)group; - byte stage = GetIndustryConstructionStage(ti->tile); + uint8_t stage = GetIndustryConstructionStage(ti->tile); IndustryDrawTileLayout(ti, tlgroup, i->random_colour, stage); return true; } @@ -327,8 +327,8 @@ static void DoTriggerIndustryTile(TileIndex tile, IndustryTileTrigger trigger, I SetIndustryTriggers(tile, object.GetRemainingTriggers()); /* Rerandomise tile bits */ - byte new_random_bits = Random(); - byte random_bits = GetIndustryRandomBits(tile); + uint8_t new_random_bits = Random(); + uint8_t random_bits = GetIndustryRandomBits(tile); random_bits &= ~object.reseed[VSG_SCOPE_SELF]; random_bits |= new_random_bits & object.reseed[VSG_SCOPE_SELF]; SetIndustryRandomBits(tile, random_bits); diff --git a/src/newgrf_industrytiles.h b/src/newgrf_industrytiles.h index 8d39a09d59..538c0b7675 100644 --- a/src/newgrf_industrytiles.h +++ b/src/newgrf_industrytiles.h @@ -31,7 +31,7 @@ struct IndustryTileScopeResolver : public ScopeResolver { } uint32_t GetRandomBits() const override; - uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; uint32_t GetTriggers() const override; }; @@ -44,7 +44,7 @@ struct IndustryTileResolverObject : public ResolverObject { IndustryTileResolverObject(IndustryGfx gfx, TileIndex tile, Industry *indus, CallbackID callback = CBID_NO_CALLBACK, uint32_t callback_param1 = 0, uint32_t callback_param2 = 0); - ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &indtile_scope; diff --git a/src/newgrf_object.cpp b/src/newgrf_object.cpp index 55c53039b4..8e47c650ef 100644 --- a/src/newgrf_object.cpp +++ b/src/newgrf_object.cpp @@ -191,7 +191,7 @@ static uint32_t GetObjectIDAtOffset(TileIndex tile, uint32_t cur_grfid) * @param grf_version8 True, if we are dealing with a new NewGRF which uses GRF version >= 8. * @return a construction of bits obeying the newgrf format */ -static uint32_t GetNearbyObjectTileInformation(byte parameter, TileIndex tile, ObjectID index, bool grf_version8) +static uint32_t GetNearbyObjectTileInformation(uint8_t parameter, TileIndex tile, ObjectID index, bool grf_version8) { if (parameter != 0) tile = GetNearbyTile(parameter, tile); // only perform if it is required bool is_same_object = (IsTileType(tile, MP_OBJECT) && GetObjectIndex(tile) == index); @@ -226,7 +226,7 @@ static uint32_t GetClosestObject(TileIndex tile, ObjectType type, const Object * * @param current Object for which the inquiry is made * @return The formatted answer to the callback : rr(reserved) cc(count) dddd(manhattan distance of closest sister) */ -static uint32_t GetCountAndDistanceOfClosestInstance(byte local_id, uint32_t grfid, TileIndex tile, const Object *current) +static uint32_t GetCountAndDistanceOfClosestInstance(uint8_t local_id, uint32_t grfid, TileIndex tile, const Object *current) { uint32_t grf_id = GetRegister(0x100); // Get the GRFID of the definition to look for in register 100h uint32_t idx; @@ -253,7 +253,7 @@ static uint32_t GetCountAndDistanceOfClosestInstance(byte local_id, uint32_t grf } /** Used by the resolver to get values for feature 0F deterministic spritegroups. */ -/* virtual */ uint32_t ObjectScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t ObjectScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const { /* We get the town from the object, or we calculate the closest * town if we need to when there's no object. */ diff --git a/src/newgrf_object.h b/src/newgrf_object.h index a763ef5fc5..e55f9b8511 100644 --- a/src/newgrf_object.h +++ b/src/newgrf_object.h @@ -127,7 +127,7 @@ struct ObjectScopeResolver : public ScopeResolver { } uint32_t GetRandomBits() const override; - uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; }; /** A resolver object to be used with feature 0F spritegroups. */ @@ -139,7 +139,7 @@ struct ObjectResolverObject : public ResolverObject { CallbackID callback = CBID_NO_CALLBACK, uint32_t param1 = 0, uint32_t param2 = 0); ~ObjectResolverObject(); - ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: diff --git a/src/newgrf_railtype.cpp b/src/newgrf_railtype.cpp index 608e63546f..25f6ea6c19 100644 --- a/src/newgrf_railtype.cpp +++ b/src/newgrf_railtype.cpp @@ -23,7 +23,7 @@ return GB(tmp, 0, 2); } -/* virtual */ uint32_t RailTypeScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t RailTypeScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const { if (this->tile == INVALID_TILE) { switch (variable) { diff --git a/src/newgrf_railtype.h b/src/newgrf_railtype.h index d15f31d704..3995409e9f 100644 --- a/src/newgrf_railtype.h +++ b/src/newgrf_railtype.h @@ -32,7 +32,7 @@ struct RailTypeScopeResolver : public ScopeResolver { } uint32_t GetRandomBits() const override; - uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; }; /** Resolver object for rail types. */ @@ -41,7 +41,7 @@ struct RailTypeResolverObject : public ResolverObject { RailTypeResolverObject(const RailTypeInfo *rti, TileIndex tile, TileContext context, RailTypeSpriteGroup rtsg, uint32_t param1 = 0, uint32_t param2 = 0); - ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &this->railtype_scope; diff --git a/src/newgrf_roadstop.cpp b/src/newgrf_roadstop.cpp index 5192e6546c..557b771ac8 100644 --- a/src/newgrf_roadstop.cpp +++ b/src/newgrf_roadstop.cpp @@ -63,7 +63,7 @@ uint32_t RoadStopScopeResolver::GetTriggers() const return this->st == nullptr ? 0 : this->st->waiting_triggers; } -uint32_t RoadStopScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const +uint32_t RoadStopScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const { auto get_road_type_variable = [&](RoadTramType rtt) -> uint32_t { RoadType rt; @@ -328,8 +328,8 @@ uint16_t GetAnimRoadStopCallback(CallbackID callback, uint32_t param1, uint32_t } struct RoadStopAnimationFrameAnimationHelper { - static byte Get(BaseStation *st, TileIndex tile) { return st->GetRoadStopAnimationFrame(tile); } - static void Set(BaseStation *st, TileIndex tile, byte frame) { st->SetRoadStopAnimationFrame(tile, frame); } + static uint8_t Get(BaseStation *st, TileIndex tile) { return st->GetRoadStopAnimationFrame(tile); } + static void Set(BaseStation *st, TileIndex tile, uint8_t frame) { st->SetRoadStopAnimationFrame(tile, frame); } }; /** Helper class for animation control. */ @@ -564,7 +564,7 @@ int AllocateSpecToRoadStop(const RoadStopSpec *statspec, BaseStation *st, bool e return i; } -void DeallocateSpecFromRoadStop(BaseStation *st, byte specindex) +void DeallocateSpecFromRoadStop(BaseStation *st, uint8_t specindex) { /* specindex of 0 (default) is never freeable */ if (specindex == 0) return; diff --git a/src/newgrf_roadstop.h b/src/newgrf_roadstop.h index 46b3e0bcb6..7c47f74bb8 100644 --- a/src/newgrf_roadstop.h +++ b/src/newgrf_roadstop.h @@ -22,7 +22,7 @@ /** The maximum amount of roadstops a single GRF is allowed to add */ static const int NUM_ROADSTOPS_PER_GRF = UINT16_MAX - 1; -enum RoadStopClassID : byte { +enum RoadStopClassID : uint8_t { ROADSTOP_CLASS_BEGIN = 0, ///< The lowest valid value ROADSTOP_CLASS_DFLT = 0, ///< Default road stop class. ROADSTOP_CLASS_WAYP, ///< Waypoint class (unimplemented: this is reserved for future use with road waypoints). @@ -43,7 +43,7 @@ enum RoadStopRandomTrigger { * Various different options for availability, restricting * the roadstop to be only for busses or for trucks. */ -enum RoadStopAvailabilityType : byte { +enum RoadStopAvailabilityType : uint8_t { ROADSTOPTYPE_PASSENGER, ///< This RoadStop is for passenger (bus) stops. ROADSTOPTYPE_FREIGHT, ///< This RoadStop is for freight (truck) stops. ROADSTOPTYPE_ALL, ///< This RoadStop is for both types of station road stops. @@ -55,7 +55,7 @@ enum RoadStopAvailabilityType : byte { * Different draw modes to disallow rendering of some parts of the stop * or road. */ -enum RoadStopDrawMode : byte { +enum RoadStopDrawMode : uint8_t { ROADSTOP_DRAW_MODE_NONE = 0, ROADSTOP_DRAW_MODE_ROAD = 1 << 0, ///< Bay stops: Draw the road itself ROADSTOP_DRAW_MODE_OVERLAY = 1 << 1, ///< Drive-through stops: Draw the road overlay, e.g. pavement @@ -89,7 +89,7 @@ struct RoadStopScopeResolver : public ScopeResolver { uint32_t GetRandomBits() const override; uint32_t GetTriggers() const override; - uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; }; /** Road stop resolver. */ @@ -100,7 +100,7 @@ struct RoadStopResolverObject : public ResolverObject { RoadStopResolverObject(const RoadStopSpec *roadstopspec, BaseStation *st, TileIndex tile, RoadType roadtype, StationType type, uint8_t view, CallbackID callback = CBID_NO_CALLBACK, uint32_t param1 = 0, uint32_t param2 = 0); ~RoadStopResolverObject(); - ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &this->roadstop_scope; @@ -140,8 +140,8 @@ struct RoadStopSpec { AnimationInfo animation; - byte bridge_height[6]; ///< Minimum height for a bridge above, 0 for none - byte bridge_disallowed_pillars[6]; ///< Disallowed pillar flags for a bridge above + uint8_t bridge_height[6]; ///< Minimum height for a bridge above, 0 for none + uint8_t bridge_disallowed_pillars[6]; ///< Disallowed pillar flags for a bridge above uint8_t build_cost_multiplier = 16; ///< Build cost multiplier per tile. uint8_t clear_cost_multiplier = 16; ///< Clear cost multiplier per tile. @@ -178,7 +178,7 @@ bool GetIfStopIsForType(const RoadStopSpec *roadstopspec, RoadStopType rs, RoadT const RoadStopSpec *GetRoadStopSpec(TileIndex t); int AllocateSpecToRoadStop(const RoadStopSpec *statspec, BaseStation *st, bool exec); -void DeallocateSpecFromRoadStop(BaseStation *st, byte specindex); +void DeallocateSpecFromRoadStop(BaseStation *st, uint8_t specindex); void RoadStopUpdateCachedTriggers(BaseStation *st); #endif /* NEWGRF_ROADSTATION_H */ diff --git a/src/newgrf_roadtype.cpp b/src/newgrf_roadtype.cpp index 4a877c8bf3..eeae364e0b 100644 --- a/src/newgrf_roadtype.cpp +++ b/src/newgrf_roadtype.cpp @@ -23,7 +23,7 @@ return GB(tmp, 0, 2); } -/* virtual */ uint32_t RoadTypeScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t RoadTypeScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const { if (this->tile == INVALID_TILE) { switch (variable) { diff --git a/src/newgrf_roadtype.h b/src/newgrf_roadtype.h index 6a4ed878c5..40d5166c56 100644 --- a/src/newgrf_roadtype.h +++ b/src/newgrf_roadtype.h @@ -33,7 +33,7 @@ struct RoadTypeScopeResolver : public ScopeResolver { } uint32_t GetRandomBits() const override; - uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; }; /** Resolver object for road types. */ @@ -42,7 +42,7 @@ struct RoadTypeResolverObject : public ResolverObject { RoadTypeResolverObject(const RoadTypeInfo *rti, TileIndex tile, TileContext context, RoadTypeSpriteGroup rtsg, uint32_t param1 = 0, uint32_t param2 = 0); - ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &this->roadtype_scope; diff --git a/src/newgrf_spritegroup.cpp b/src/newgrf_spritegroup.cpp index daa65ca0d7..4dc4f72c45 100644 --- a/src/newgrf_spritegroup.cpp +++ b/src/newgrf_spritegroup.cpp @@ -53,7 +53,7 @@ TemporaryStorageArray _temp_store; } } -static inline uint32_t GetVariable(const ResolverObject &object, ScopeResolver *scope, byte variable, uint32_t parameter, bool *available) +static inline uint32_t GetVariable(const ResolverObject &object, ScopeResolver *scope, uint8_t variable, uint32_t parameter, bool *available) { uint32_t value; switch (variable) { @@ -103,7 +103,7 @@ static inline uint32_t GetVariable(const ResolverObject &object, ScopeResolver * * @param[out] available Set to false, in case the variable does not exist. * @return Value */ -/* virtual */ uint32_t ScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t ScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const { Debug(grf, 1, "Unhandled scope variable 0x{:X}", variable); *available = false; @@ -132,7 +132,7 @@ static inline uint32_t GetVariable(const ResolverObject &object, ScopeResolver * * Get a resolver for the \a scope. * @return The resolver for the requested scope. */ -/* virtual */ ScopeResolver *ResolverObject::GetScope(VarSpriteGroupScope, byte) +/* virtual */ ScopeResolver *ResolverObject::GetScope(VarSpriteGroupScope, uint8_t) { return &this->default_scope; } @@ -258,7 +258,7 @@ const SpriteGroup *RandomizedSpriteGroup::Resolve(ResolverObject &object) const ScopeResolver *scope = object.GetScope(this->var_scope, this->count); if (object.callback == CBID_RANDOM_TRIGGER) { /* Handle triggers */ - byte match = this->triggers & object.waiting_triggers; + uint8_t match = this->triggers & object.waiting_triggers; bool res = (this->cmp_mode == RSG_CMP_ANY) ? (match != 0) : (match == this->triggers); if (res) { @@ -268,7 +268,7 @@ const SpriteGroup *RandomizedSpriteGroup::Resolve(ResolverObject &object) const } uint32_t mask = ((uint)this->groups.size() - 1) << this->lowest_randbit; - byte index = (scope->GetRandomBits() & mask) >> this->lowest_randbit; + uint8_t index = (scope->GetRandomBits() & mask) >> this->lowest_randbit; return SpriteGroup::Resolve(this->groups[index], object, false); } diff --git a/src/newgrf_spritegroup.h b/src/newgrf_spritegroup.h index 9b91dcdcbf..7ca6d01ec0 100644 --- a/src/newgrf_spritegroup.h +++ b/src/newgrf_spritegroup.h @@ -67,7 +67,7 @@ public: SpriteGroupType type; virtual SpriteID GetResult() const { return 0; } - virtual byte GetNumResults() const { return 0; } + virtual uint8_t GetNumResults() const { return 0; } virtual uint16_t GetCallbackResult() const { return CALLBACK_FAILED; } static const SpriteGroup *Resolve(const SpriteGroup *group, ResolverObject &object, bool top_level = true); @@ -147,9 +147,9 @@ enum DeterministicSpriteGroupAdjustOperation { struct DeterministicSpriteGroupAdjust { DeterministicSpriteGroupAdjustOperation operation; DeterministicSpriteGroupAdjustType type; - byte variable; - byte parameter; ///< Used for variables between 0x60 and 0x7F inclusive. - byte shift_num; + uint8_t variable; + uint8_t parameter; ///< Used for variables between 0x60 and 0x7F inclusive. + uint8_t shift_num; uint32_t and_mask; uint32_t add_val; uint32_t divmod_val; @@ -193,10 +193,10 @@ struct RandomizedSpriteGroup : SpriteGroup { VarSpriteGroupScope var_scope; ///< Take this object: RandomizedSpriteGroupCompareMode cmp_mode; ///< Check for these triggers: - byte triggers; - byte count; + uint8_t triggers; + uint8_t count; - byte lowest_randbit; ///< Look for this in the per-object randomized bitmask: + uint8_t lowest_randbit; ///< Look for this in the per-object randomized bitmask: std::vector groups; ///< Take the group with appropriate index: @@ -240,7 +240,7 @@ struct ResultSpriteGroup : SpriteGroup { * @param num_sprites The number of sprites per set. * @return A spritegroup representing the sprite number result. */ - ResultSpriteGroup(SpriteID sprite, byte num_sprites) : + ResultSpriteGroup(SpriteID sprite, uint8_t num_sprites) : SpriteGroup(SGT_RESULT), sprite(sprite), num_sprites(num_sprites) @@ -248,9 +248,9 @@ struct ResultSpriteGroup : SpriteGroup { } SpriteID sprite; - byte num_sprites; + uint8_t num_sprites; SpriteID GetResult() const override { return this->sprite; } - byte GetNumResults() const override { return this->num_sprites; } + uint8_t GetNumResults() const override { return this->num_sprites; } }; /** @@ -294,7 +294,7 @@ struct ScopeResolver { virtual uint32_t GetRandomBits() const; virtual uint32_t GetTriggers() const; - virtual uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const; + virtual uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const; virtual void StorePSA(uint reg, int32_t value); }; @@ -356,7 +356,7 @@ struct ResolverObject { virtual const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const; - virtual ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0); + virtual ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0); /** * Returns the waiting triggers that did not trigger any rerandomisation. diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index 616c1ad799..4a3bae2abb 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -100,7 +100,7 @@ struct ETileArea : TileArea { * if centered, C/P start from the centre and c/p are not available. * @return Platform information in bit-stuffed format. */ -uint32_t GetPlatformInfo(Axis axis, byte tile, int platforms, int length, int x, int y, bool centred) +uint32_t GetPlatformInfo(Axis axis, uint8_t tile, int platforms, int length, int x, int y, bool centred) { uint32_t retval = 0; @@ -140,7 +140,7 @@ uint32_t GetPlatformInfo(Axis axis, byte tile, int platforms, int length, int x, */ static TileIndex FindRailStationEnd(TileIndex tile, TileIndexDiff delta, bool check_type, bool check_axis) { - byte orig_type = 0; + uint8_t orig_type = 0; Axis orig_axis = AXIS_X; StationID sid = GetStationIndex(tile); @@ -266,7 +266,7 @@ TownScopeResolver *StationResolverObject::GetTown() return this->town_scope; } -/* virtual */ uint32_t StationScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t StationScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const { if (this->st == nullptr) { /* Station does not exist, so we're in a purchase list or the land slope check callback. */ @@ -403,7 +403,7 @@ TownScopeResolver *StationResolverObject::GetTown() return this->st->GetNewGRFVariable(this->ro, variable, parameter, available); } -uint32_t Station::GetNewGRFVariable(const ResolverObject &object, byte variable, byte parameter, bool *available) const +uint32_t Station::GetNewGRFVariable(const ResolverObject &object, uint8_t variable, uint8_t parameter, bool *available) const { switch (variable) { case 0x48: { // Accepted cargo types @@ -469,7 +469,7 @@ uint32_t Station::GetNewGRFVariable(const ResolverObject &object, byte variable, return UINT_MAX; } -uint32_t Waypoint::GetNewGRFVariable(const ResolverObject &, byte variable, [[maybe_unused]] byte parameter, bool *available) const +uint32_t Waypoint::GetNewGRFVariable(const ResolverObject &, uint8_t variable, [[maybe_unused]] uint8_t parameter, bool *available) const { switch (variable) { case 0x48: return 0; // Accepted cargo types @@ -658,7 +658,7 @@ uint16_t GetStationCallback(CallbackID callback, uint32_t param1, uint32_t param * @param numtracks Number of platforms. * @return Succeeded or failed command. */ -CommandCost PerformStationTileSlopeCheck(TileIndex north_tile, TileIndex cur_tile, const StationSpec *statspec, Axis axis, byte plat_len, byte numtracks) +CommandCost PerformStationTileSlopeCheck(TileIndex north_tile, TileIndex cur_tile, const StationSpec *statspec, Axis axis, uint8_t plat_len, uint8_t numtracks) { TileIndex diff = cur_tile - north_tile; Slope slope = GetTileSlope(cur_tile); @@ -728,7 +728,7 @@ int AllocateSpecToStation(const StationSpec *statspec, BaseStation *st, bool exe * @param specindex Index of the custom station within the Station's spec list. * @return Indicates whether the StationSpec was deallocated. */ -void DeallocateSpecFromStation(BaseStation *st, byte specindex) +void DeallocateSpecFromStation(BaseStation *st, uint8_t specindex) { /* specindex of 0 (default) is never freeable */ if (specindex == 0) return; diff --git a/src/newgrf_station.h b/src/newgrf_station.h index 8c9aa60976..08fcaf8efd 100644 --- a/src/newgrf_station.h +++ b/src/newgrf_station.h @@ -43,7 +43,7 @@ struct StationScopeResolver : public ScopeResolver { uint32_t GetRandomBits() const override; uint32_t GetTriggers() const override; - uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; }; /** Station resolver. */ @@ -57,7 +57,7 @@ struct StationResolverObject : public ResolverObject { TownScopeResolver *GetTown(); - ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: @@ -80,7 +80,7 @@ struct StationResolverObject : public ResolverObject { uint32_t GetDebugID() const override; }; -enum StationClassID : byte { +enum StationClassID : uint8_t { STAT_CLASS_BEGIN = 0, ///< the lowest valid value STAT_CLASS_DFLT = 0, ///< Default station class. STAT_CLASS_WAYP, ///< Waypoint class. @@ -129,12 +129,12 @@ struct StationSpec { * Bitmask of number of platforms available for the station. * 0..6 correspond to 1..7, while bit 7 corresponds to >7 platforms. */ - byte disallowed_platforms; + uint8_t disallowed_platforms; /** * Bitmask of platform lengths available for the station. * 0..6 correspond to 1..7, while bit 7 corresponds to >7 tiles long. */ - byte disallowed_lengths; + uint8_t disallowed_lengths; /** * Number of tile layouts. @@ -154,13 +154,13 @@ struct StationSpec { CargoTypes cargo_triggers; ///< Bitmask of cargo types which cause trigger re-randomizing - byte callback_mask; ///< Bitmask of station callbacks that have to be called + uint8_t callback_mask; ///< Bitmask of station callbacks that have to be called - byte flags; ///< Bitmask of flags, bit 0: use different sprite set; bit 1: divide cargo about by station size + uint8_t flags; ///< Bitmask of flags, bit 0: use different sprite set; bit 1: divide cargo about by station size - byte pylons; ///< Bitmask of base tiles (0 - 7) which should contain elrail pylons - byte wires; ///< Bitmask of base tiles (0 - 7) which should contain elrail wires - byte blocked; ///< Bitmask of base tiles (0 - 7) which are blocked to trains + uint8_t pylons; ///< Bitmask of base tiles (0 - 7) which should contain elrail pylons + uint8_t wires; ///< Bitmask of base tiles (0 - 7) which should contain elrail wires + uint8_t blocked; ///< Bitmask of base tiles (0 - 7) which are blocked to trains AnimationInfo animation; @@ -172,7 +172,7 @@ struct StationSpec { * These can be sparsely populated, and the upper limit is not defined but * limited to 255. */ - std::vector>> layouts; + std::vector>> layouts; }; /** Struct containing information relating to station classes. */ @@ -181,18 +181,18 @@ typedef NewGRFClass StationClass; const StationSpec *GetStationSpec(TileIndex t); /* Evaluate a tile's position within a station, and return the result a bitstuffed format. */ -uint32_t GetPlatformInfo(Axis axis, byte tile, int platforms, int length, int x, int y, bool centred); +uint32_t GetPlatformInfo(Axis axis, uint8_t tile, int platforms, int length, int x, int y, bool centred); SpriteID GetCustomStationRelocation(const StationSpec *statspec, BaseStation *st, TileIndex tile, uint32_t var10 = 0); SpriteID GetCustomStationFoundationRelocation(const StationSpec *statspec, BaseStation *st, TileIndex tile, uint layout, uint edge_info); uint16_t GetStationCallback(CallbackID callback, uint32_t param1, uint32_t param2, const StationSpec *statspec, BaseStation *st, TileIndex tile); -CommandCost PerformStationTileSlopeCheck(TileIndex north_tile, TileIndex cur_tile, const StationSpec *statspec, Axis axis, byte plat_len, byte numtracks); +CommandCost PerformStationTileSlopeCheck(TileIndex north_tile, TileIndex cur_tile, const StationSpec *statspec, Axis axis, uint8_t plat_len, uint8_t numtracks); /* Allocate a StationSpec to a Station. This is called once per build operation. */ int AllocateSpecToStation(const StationSpec *statspec, BaseStation *st, bool exec); /* Deallocate a StationSpec from a Station. Called when removing a single station tile. */ -void DeallocateSpecFromStation(BaseStation *st, byte specindex); +void DeallocateSpecFromStation(BaseStation *st, uint8_t specindex); /* Draw representation of a station tile for GUI purposes. */ bool DrawStationTile(int x, int y, RailType railtype, Axis axis, StationClassID sclass, uint station); diff --git a/src/newgrf_storage.h b/src/newgrf_storage.h index 16c5b8c700..fe71caea1f 100644 --- a/src/newgrf_storage.h +++ b/src/newgrf_storage.h @@ -32,7 +32,7 @@ enum PersistentStorageMode { */ struct BasePersistentStorageArray { uint32_t grfid; ///< GRFID associated to this persistent storage. A value of zero means "default". - byte feature; ///< NOSAVE: Used to identify in the owner of the array in debug output. + uint8_t feature; ///< NOSAVE: Used to identify in the owner of the array in debug output. TileIndex tile; ///< NOSAVE: Used to identify in the owner of the array in debug output. virtual ~BasePersistentStorageArray(); @@ -198,7 +198,7 @@ extern PersistentStoragePool _persistent_storage_pool; */ struct PersistentStorage : PersistentStorageArray, PersistentStoragePool::PoolItem<&_persistent_storage_pool> { /** We don't want GCC to zero our struct! It already is zeroed and has an index! */ - PersistentStorage(const uint32_t new_grfid, byte feature, TileIndex tile) + PersistentStorage(const uint32_t new_grfid, uint8_t feature, TileIndex tile) { this->grfid = new_grfid; this->feature = feature; diff --git a/src/newgrf_text.cpp b/src/newgrf_text.cpp index 40c4d87156..40ef28c9a2 100644 --- a/src/newgrf_text.cpp +++ b/src/newgrf_text.cpp @@ -72,7 +72,7 @@ struct GRFTextEntry { static std::vector _grf_text; -static byte _currentLangID = GRFLX_ENGLISH; ///< by default, english is used. +static uint8_t _currentLangID = GRFLX_ENGLISH; ///< by default, english is used. /** * Get the mapping from the NewGRF supplied ID to OpenTTD's internal ID. @@ -120,7 +120,7 @@ struct UnmappedChoiceList { int offset; ///< The offset for the plural/gender form. /** Mapping of NewGRF supplied ID to the different strings in the choice list. */ - std::map strings; + std::map strings; /** * Flush this choice list into the destination string. @@ -269,7 +269,7 @@ std::string TranslateTTDPatchCodes(uint32_t grfid, uint8_t language_id, bool all continue; } } else { - c = (byte)*src++; + c = (uint8_t)*src++; } if (c == '\0') break; @@ -482,7 +482,7 @@ string_end: * @param langid The The language of the new text. * @param text_to_add The text to add to the list. */ -static void AddGRFTextToList(GRFTextList &list, byte langid, const std::string &text_to_add) +static void AddGRFTextToList(GRFTextList &list, uint8_t langid, const std::string &text_to_add) { /* Loop through all languages and see if we can replace a string */ for (auto &text : list) { @@ -505,7 +505,7 @@ static void AddGRFTextToList(GRFTextList &list, byte langid, const std::string & * @param text_to_add The text to add to the list. * @note All text-codes will be translated. */ -void AddGRFTextToList(GRFTextList &list, byte langid, uint32_t grfid, bool allow_newlines, const char *text_to_add) +void AddGRFTextToList(GRFTextList &list, uint8_t langid, uint32_t grfid, bool allow_newlines, const char *text_to_add) { AddGRFTextToList(list, langid, TranslateTTDPatchCodes(grfid, langid, allow_newlines, text_to_add)); } @@ -519,7 +519,7 @@ void AddGRFTextToList(GRFTextList &list, byte langid, uint32_t grfid, bool allow * @param text_to_add The text to add to the list. * @note All text-codes will be translated. */ -void AddGRFTextToList(GRFTextWrapper &list, byte langid, uint32_t grfid, bool allow_newlines, const char *text_to_add) +void AddGRFTextToList(GRFTextWrapper &list, uint8_t langid, uint32_t grfid, bool allow_newlines, const char *text_to_add) { if (!list) list.reset(new GRFTextList()); AddGRFTextToList(*list, langid, grfid, allow_newlines, text_to_add); @@ -540,7 +540,7 @@ void AddGRFTextToList(GRFTextWrapper &list, const std::string &text_to_add) /** * Add the new read string into our structure. */ -StringID AddGRFString(uint32_t grfid, uint16_t stringid, byte langid_to_add, bool new_scheme, bool allow_newlines, const char *text_to_add, StringID def_string) +StringID AddGRFString(uint32_t grfid, uint16_t stringid, uint8_t langid_to_add, bool new_scheme, bool allow_newlines, const char *text_to_add, StringID def_string) { /* When working with the old language scheme (grf_version is less than 7) and * English or American is among the set bits, simply add it as English in @@ -656,12 +656,12 @@ const char *GetGRFStringPtr(uint32_t stringid) * from strings.cpp:ReadLanguagePack * @param language_id iso code of current selection */ -void SetCurrentGrfLangID(byte language_id) +void SetCurrentGrfLangID(uint8_t language_id) { _currentLangID = language_id; } -bool CheckGrfLangID(byte lang_id, byte grf_version) +bool CheckGrfLangID(uint8_t lang_id, uint8_t grf_version) { if (grf_version < 7) { switch (_currentLangID) { @@ -685,8 +685,8 @@ void CleanUpStrings() } struct TextRefStack { - std::array stack; - byte position; + std::array stack; + uint8_t position; const GRFFile *grffile; bool used; @@ -719,7 +719,7 @@ struct TextRefStack { /** Rotate the top four words down: W1, W2, W3, W4 -> W4, W1, W2, W3 */ void RotateTop4Words() { - byte tmp[2]; + uint8_t tmp[2]; for (int i = 0; i < 2; i++) tmp[i] = this->stack[this->position + i + 6]; for (int i = 5; i >= 0; i--) this->stack[this->position + i + 2] = this->stack[this->position + i]; for (int i = 0; i < 2; i++) this->stack[this->position + i] = tmp[i]; @@ -795,7 +795,7 @@ void RestoreTextRefStackBackup(struct TextRefStack *backup) * @param numEntries number of entries to copy from the registers * @param values values to copy onto the stack; if nullptr the temporary NewGRF registers will be used instead */ -void StartTextRefStackUsage(const GRFFile *grffile, byte numEntries, const uint32_t *values) +void StartTextRefStackUsage(const GRFFile *grffile, uint8_t numEntries, const uint32_t *values) { extern TemporaryStorageArray _temp_store; diff --git a/src/newgrf_text.h b/src/newgrf_text.h index 66f591f588..aad9e92cce 100644 --- a/src/newgrf_text.h +++ b/src/newgrf_text.h @@ -20,7 +20,7 @@ static const char32_t NFO_UTF8_IDENTIFIER = 0x00DE; /** A GRF text with associated language ID. */ struct GRFText { - byte langid; ///< The language associated with this GRFText. + uint8_t langid; ///< The language associated with this GRFText. std::string text; ///< The actual (translated) text. }; @@ -29,21 +29,21 @@ typedef std::vector GRFTextList; /** Reference counted wrapper around a GRFText pointer. */ typedef std::shared_ptr GRFTextWrapper; -StringID AddGRFString(uint32_t grfid, uint16_t stringid, byte langid, bool new_scheme, bool allow_newlines, const char *text_to_add, StringID def_string); +StringID AddGRFString(uint32_t grfid, uint16_t stringid, uint8_t langid, bool new_scheme, bool allow_newlines, const char *text_to_add, StringID def_string); StringID GetGRFStringID(uint32_t grfid, StringID stringid); const char *GetGRFStringFromGRFText(const GRFTextList &text_list); const char *GetGRFStringFromGRFText(const GRFTextWrapper &text); const char *GetGRFStringPtr(uint32_t stringid); void CleanUpStrings(); -void SetCurrentGrfLangID(byte language_id); +void SetCurrentGrfLangID(uint8_t language_id); std::string TranslateTTDPatchCodes(uint32_t grfid, uint8_t language_id, bool allow_newlines, const std::string &str, StringControlCode byte80 = SCC_NEWGRF_PRINT_WORD_STRING_ID); -void AddGRFTextToList(GRFTextList &list, byte langid, uint32_t grfid, bool allow_newlines, const char *text_to_add); -void AddGRFTextToList(GRFTextWrapper &list, byte langid, uint32_t grfid, bool allow_newlines, const char *text_to_add); +void AddGRFTextToList(GRFTextList &list, uint8_t langid, uint32_t grfid, bool allow_newlines, const char *text_to_add); +void AddGRFTextToList(GRFTextWrapper &list, uint8_t langid, uint32_t grfid, bool allow_newlines, const char *text_to_add); void AddGRFTextToList(GRFTextWrapper &list, const std::string &text_to_add); -bool CheckGrfLangID(byte lang_id, byte grf_version); +bool CheckGrfLangID(uint8_t lang_id, uint8_t grf_version); -void StartTextRefStackUsage(const struct GRFFile *grffile, byte numEntries, const uint32_t *values = nullptr); +void StartTextRefStackUsage(const struct GRFFile *grffile, uint8_t numEntries, const uint32_t *values = nullptr); void StopTextRefStackUsage(); bool UsingNewGRFTextStack(); struct TextRefStack *CreateTextRefStackBackup(); @@ -53,8 +53,8 @@ void RestoreTextRefStackBackup(struct TextRefStack *backup); struct LanguageMap { /** Mapping between NewGRF and OpenTTD IDs. */ struct Mapping { - byte newgrf_id; ///< NewGRF's internal ID for a case/gender. - byte openttd_id; ///< OpenTTD's internal ID for a case/gender. + uint8_t newgrf_id; ///< NewGRF's internal ID for a case/gender. + uint8_t openttd_id; ///< OpenTTD's internal ID for a case/gender. }; /* We need a vector and can't use SmallMap due to the fact that for "setting" a diff --git a/src/newgrf_town.cpp b/src/newgrf_town.cpp index 0bd4924e34..2843869de4 100644 --- a/src/newgrf_town.cpp +++ b/src/newgrf_town.cpp @@ -15,7 +15,7 @@ #include "safeguards.h" -/* virtual */ uint32_t TownScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t TownScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const { CargoID cid; switch (variable) { diff --git a/src/newgrf_town.h b/src/newgrf_town.h index 88f3d5095d..7c9bc3729e 100644 --- a/src/newgrf_town.h +++ b/src/newgrf_town.h @@ -34,7 +34,7 @@ struct TownScopeResolver : public ScopeResolver { { } - uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; void StorePSA(uint reg, int32_t value) override; }; @@ -44,7 +44,7 @@ struct TownResolverObject : public ResolverObject { TownResolverObject(const struct GRFFile *grffile, Town *t, bool readonly); - ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &town_scope; diff --git a/src/newgrf_townname.cpp b/src/newgrf_townname.cpp index 82e9c9aa2c..d70f7892e2 100644 --- a/src/newgrf_townname.cpp +++ b/src/newgrf_townname.cpp @@ -47,11 +47,11 @@ void DelGRFTownName(uint32_t grfid) _grf_townnames.erase(std::find_if(std::begin(_grf_townnames), std::end(_grf_townnames), [&grfid](const GRFTownName &t){ return t.grfid == grfid; })); } -static void RandomPart(StringBuilder &builder, const GRFTownName *t, uint32_t seed, byte id) +static void RandomPart(StringBuilder &builder, const GRFTownName *t, uint32_t seed, uint8_t id) { assert(t != nullptr); for (const auto &partlist : t->partlists[id]) { - byte count = partlist.bitcount; + uint8_t count = partlist.bitcount; uint16_t maxprob = partlist.maxprob; uint32_t r = (GB(seed, partlist.bitstart, count) * maxprob) >> count; for (const auto &part : partlist.parts) { diff --git a/src/newgrf_townname.h b/src/newgrf_townname.h index 9a0e919efe..2371f2faf2 100644 --- a/src/newgrf_townname.h +++ b/src/newgrf_townname.h @@ -17,22 +17,22 @@ struct NamePart { std::string text; ///< If probability bit 7 is clear - byte id; ///< If probability bit 7 is set - byte prob; ///< The relative probability of the following name to appear in the bottom 7 bits. + uint8_t id; ///< If probability bit 7 is set + uint8_t prob; ///< The relative probability of the following name to appear in the bottom 7 bits. }; struct NamePartList { - byte bitstart; ///< Start of random seed bits to use. - byte bitcount; ///< Number of bits of random seed to use. + uint8_t bitstart; ///< Start of random seed bits to use. + uint8_t bitcount; ///< Number of bits of random seed to use. uint16_t maxprob; ///< Total probability of all parts. std::vector parts; ///< List of parts to choose from. }; struct TownNameStyle { StringID name; ///< String ID of this town name style. - byte id; ///< Index within partlist for this town name style. + uint8_t id; ///< Index within partlist for this town name style. - TownNameStyle(StringID name, byte id) : name(name), id(id) { } + TownNameStyle(StringID name, uint8_t id) : name(name), id(id) { } }; struct GRFTownName { diff --git a/src/news_type.h b/src/news_type.h index 53afc9be34..ffe63b6a8e 100644 --- a/src/news_type.h +++ b/src/news_type.h @@ -20,7 +20,7 @@ /** * Type of news. */ -enum NewsType : byte { +enum NewsType : uint8_t { NT_ARRIVAL_COMPANY, ///< First vehicle arrived for company NT_ARRIVAL_OTHER, ///< First vehicle arrived for competitor NT_ACCIDENT, ///< An accident or disaster has occurred @@ -49,7 +49,7 @@ enum NewsType : byte { * You have to make sure, #ChangeVehicleNews catches the DParams of your message. * This is NOT ensured by the references. */ -enum NewsReferenceType : byte { +enum NewsReferenceType : uint8_t { NR_NONE, ///< Empty reference NR_TILE, ///< Reference tile. Scroll to tile when clicking on the news. NR_VEHICLE, ///< Reference vehicle. Scroll to vehicle when clicking on the news. Delete news when vehicle is deleted. @@ -99,7 +99,7 @@ enum NewsDisplay { */ struct NewsTypeData { const char * const name; ///< Name - const byte age; ///< Maximum age of news items (in days) + const uint8_t age; ///< Maximum age of news items (in days) const SoundFx sound; ///< Sound /** @@ -108,7 +108,7 @@ struct NewsTypeData { * @param age The maximum age for these messages. * @param sound The sound to play. */ - NewsTypeData(const char *name, byte age, SoundFx sound) : + NewsTypeData(const char *name, uint8_t age, SoundFx sound) : name(name), age(age), sound(sound) diff --git a/src/object_base.h b/src/object_base.h index b54f0344e5..05cea0118e 100644 --- a/src/object_base.h +++ b/src/object_base.h @@ -25,8 +25,8 @@ struct Object : ObjectPool::PoolItem<&_object_pool> { Town *town; ///< Town the object is built in TileArea location; ///< Location of the object TimerGameCalendar::Date build_date; ///< Date of construction - byte colour; ///< Colour of the object, for display purpose - byte view; ///< The view setting for this object + uint8_t colour; ///< Colour of the object, for display purpose + uint8_t view; ///< The view setting for this object /** Make sure the object isn't zeroed. */ Object() {} diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp index 5ead59bd8a..7320786ce0 100644 --- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -163,7 +163,7 @@ void UpdateCompanyHQ(TileIndex tile, uint score) { if (tile == INVALID_TILE) return; - byte val = 0; + uint8_t val = 0; if (score >= 170) val++; if (score >= 350) val++; if (score >= 520) val++; diff --git a/src/object_map.h b/src/object_map.h index ae5e73d963..d646a2bfac 100644 --- a/src/object_map.h +++ b/src/object_map.h @@ -56,7 +56,7 @@ inline ObjectID GetObjectIndex(Tile t) * @pre IsTileType(t, MP_OBJECT) * @return The random bits. */ -inline byte GetObjectRandomBits(Tile t) +inline uint8_t GetObjectRandomBits(Tile t) { assert(IsTileType(t, MP_OBJECT)); return t.m3(); @@ -71,7 +71,7 @@ inline byte GetObjectRandomBits(Tile t) * @param wc Water class for this object. * @param random Random data to store on the tile */ -inline void MakeObject(Tile t, Owner o, ObjectID index, WaterClass wc, byte random) +inline void MakeObject(Tile t, Owner o, ObjectID index, WaterClass wc, uint8_t random) { SetTileType(t, MP_OBJECT); SetTileOwner(t, o); diff --git a/src/openttd.cpp b/src/openttd.cpp index e1e2cf1880..504c8d119f 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -227,7 +227,7 @@ static void WriteSavegameInfo(const std::string &name) { extern SaveLoadVersion _sl_version; uint32_t last_ottd_rev = 0; - byte ever_modified = 0; + uint8_t ever_modified = 0; bool removed_newgrfs = false; _gamelog.Info(&last_ottd_rev, &ever_modified, &removed_newgrfs); @@ -1362,7 +1362,7 @@ static void CheckCaches() /* Check whether the caches are still valid */ for (Vehicle *v : Vehicle::Iterate()) { - byte buff[sizeof(VehicleCargoList)]; + uint8_t buff[sizeof(VehicleCargoList)]; memcpy(buff, &v->cargo, sizeof(VehicleCargoList)); v->cargo.InvalidateCache(); assert(memcmp(&v->cargo, buff, sizeof(VehicleCargoList)) == 0); @@ -1377,7 +1377,7 @@ static void CheckCaches() for (Station *st : Station::Iterate()) { for (GoodsEntry &ge : st->goods) { - byte buff[sizeof(StationCargoList)]; + uint8_t buff[sizeof(StationCargoList)]; memcpy(buff, &ge.cargo, sizeof(StationCargoList)); ge.cargo.InvalidateCache(); assert(memcmp(&ge.cargo, buff, sizeof(StationCargoList)) == 0); diff --git a/src/openttd.h b/src/openttd.h index 08f2988787..2fb27e9288 100644 --- a/src/openttd.h +++ b/src/openttd.h @@ -65,7 +65,7 @@ extern std::atomic _exit_game; extern bool _save_config; /** Modes of pausing we've got */ -enum PauseMode : byte { +enum PauseMode : uint8_t { PM_UNPAUSED = 0, ///< A normal unpaused game PM_PAUSED_NORMAL = 1 << 0, ///< A game normally paused PM_PAUSED_SAVELOAD = 1 << 1, ///< A game paused for saving/loading diff --git a/src/order_gui.cpp b/src/order_gui.cpp index b52edc4067..44fbdea6ac 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -454,7 +454,7 @@ static Order GetOrderCmdFromTile(const Vehicle *v, TileIndex tile) st = in->neutral_station; } if (st != nullptr && (st->owner == _local_company || st->owner == OWNER_NONE)) { - byte facil; + uint8_t facil; switch (v->type) { case VEH_SHIP: facil = FACIL_DOCK; break; case VEH_TRAIN: facil = FACIL_TRAIN; break; diff --git a/src/order_type.h b/src/order_type.h index 99a2467d26..0fb9b2290d 100644 --- a/src/order_type.h +++ b/src/order_type.h @@ -12,7 +12,7 @@ #include "core/enum_type.hpp" -typedef byte VehicleOrderID; ///< The index of an order within its current vehicle (not pool related) +typedef uint8_t VehicleOrderID; ///< The index of an order within its current vehicle (not pool related) typedef uint32_t OrderID; typedef uint16_t OrderListID; typedef uint16_t DestinationID; @@ -32,7 +32,7 @@ static const OrderID INVALID_ORDER = 0xFFFFFF; static const uint IMPLICIT_ORDER_ONLY_CAP = 32; /** Order types. It needs to be 8bits, because we save and load it as such */ -enum OrderType : byte { +enum OrderType : uint8_t { OT_BEGIN = 0, OT_NOTHING = 0, OT_GOTO_STATION = 1, @@ -141,7 +141,7 @@ enum OrderConditionComparator { /** * Enumeration for the data to set in #CmdModifyOrder. */ -enum ModifyOrderFlags : byte { +enum ModifyOrderFlags : uint8_t { MOF_NON_STOP, ///< Passes an OrderNonStopFlags. MOF_STOP_LOCATION, ///< Passes an OrderStopLocation. MOF_UNLOAD, ///< Passes an OrderUnloadType. @@ -168,7 +168,7 @@ enum OrderDepotAction { /** * Enumeration for the data to set in #CmdChangeTimetable. */ -enum ModifyTimetableFlags : byte { +enum ModifyTimetableFlags : uint8_t { MTF_WAIT_TIME, ///< Set wait time. MTF_TRAVEL_TIME, ///< Set travel time. MTF_TRAVEL_SPEED, ///< Set max travel speed. @@ -176,7 +176,7 @@ enum ModifyTimetableFlags : byte { }; /** Clone actions. */ -enum CloneOptions : byte { +enum CloneOptions : uint8_t { CO_SHARE = 0, CO_COPY = 1, CO_UNSHARE = 2 diff --git a/src/os/macosx/font_osx.cpp b/src/os/macosx/font_osx.cpp index 12cf1f9116..3905c3c734 100644 --- a/src/os/macosx/font_osx.cpp +++ b/src/os/macosx/font_osx.cpp @@ -255,7 +255,7 @@ const Sprite *CoreTextFontCache::InternalGetGlyph(GlyphID key, bool use_aa) /* We only need the alpha channel, as we apply our own colour constants to the sprite. */ int pitch = Align(bb_width, 16); - byte *bmp = CallocT(bb_height * pitch); + uint8_t *bmp = CallocT(bb_height * pitch); CFAutoRelease context(CGBitmapContextCreate(bmp, bb_width, bb_height, 8, pitch, nullptr, kCGImageAlphaOnly)); /* Set antialias according to requirements. */ CGContextSetAllowsAntialiasing(context.get(), use_aa); @@ -291,7 +291,7 @@ const Sprite *CoreTextFontCache::InternalGetGlyph(GlyphID key, bool use_aa) GlyphEntry new_glyph; new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(spritecollection, SimpleSpriteAlloc); - new_glyph.width = (byte)std::round(CTFontGetAdvancesForGlyphs(this->font.get(), kCTFontOrientationDefault, &glyph, nullptr, 1)); + new_glyph.width = (uint8_t)std::round(CTFontGetAdvancesForGlyphs(this->font.get(), kCTFontOrientationDefault, &glyph, nullptr, 1)); this->SetGlyphPtr(key, &new_glyph); return new_glyph.sprite; diff --git a/src/os/windows/font_win32.cpp b/src/os/windows/font_win32.cpp index 1dc1977b37..28be70bb02 100644 --- a/src/os/windows/font_win32.cpp +++ b/src/os/windows/font_win32.cpp @@ -227,7 +227,7 @@ void Win32FontCache::ClearFontCache() if (width > MAX_GLYPH_DIM || height > MAX_GLYPH_DIM) UserError("Font glyph is too large"); /* Call GetGlyphOutline again with size to actually render the glyph. */ - byte *bmp = new byte[size]; + uint8_t *bmp = new uint8_t[size]; GetGlyphOutline(this->dc, key, GGO_GLYPH_INDEX | (aa ? GGO_GRAY8_BITMAP : GGO_BITMAP), &gm, size, bmp, &mat); /* GDI has rendered the glyph, now we allocate a sprite and copy the image into it. */ @@ -344,11 +344,11 @@ static bool TryLoadFontFromFile(const std::string &font_name, LOGFONT &logfont) /* Try to query an array of LOGFONTs that describe the file. */ DWORD len = 0; if (GetFontResourceInfo(fontPath, &len, nullptr, 2) && len >= sizeof(LOGFONT)) { - LOGFONT *buf = (LOGFONT *)new byte[len]; + LOGFONT *buf = (LOGFONT *)new uint8_t[len]; if (GetFontResourceInfo(fontPath, &len, buf, 2)) { logfont = *buf; // Just use first entry. } - delete[](byte *)buf; + delete[](uint8_t *)buf; } } diff --git a/src/osk_gui.cpp b/src/osk_gui.cpp index a6e16bff75..23c1a676e1 100644 --- a/src/osk_gui.cpp +++ b/src/osk_gui.cpp @@ -32,7 +32,7 @@ enum KeyStateBits { KEYS_SHIFT, KEYS_CAPS }; -static byte _keystate = KEYS_NONE; +static uint8_t _keystate = KEYS_NONE; struct OskWindow : public Window { StringID caption; ///< the caption for this window. diff --git a/src/palette.cpp b/src/palette.cpp index 8892e5715a..3f617b9f92 100644 --- a/src/palette.cpp +++ b/src/palette.cpp @@ -213,8 +213,8 @@ void DoPaletteAnimations() /* Radio tower blinking */ { - byte i = (palette_animation_counter >> 1) & 0x7F; - byte v; + uint8_t i = (palette_animation_counter >> 1) & 0x7F; + uint8_t v; if (i < 0x3f) { v = 255; @@ -300,7 +300,7 @@ TextColour GetContrastColour(uint8_t background, uint8_t threshold) */ struct ColourGradients { - using ColourGradient = std::array; + using ColourGradient = std::array; static inline std::array gradient{}; }; @@ -311,7 +311,7 @@ struct ColourGradients * @param shade Shade level from 1 to 7. * @returns palette index of colour. */ -byte GetColourGradient(Colours colour, ColourShade shade) +uint8_t GetColourGradient(Colours colour, ColourShade shade) { return ColourGradients::gradient[colour % COLOUR_END][shade % SHADE_END]; } @@ -322,7 +322,7 @@ byte GetColourGradient(Colours colour, ColourShade shade) * @param shade Shade level from 1 to 7. * @param palette_index Palette index to set. */ -void SetColourGradient(Colours colour, ColourShade shade, byte palette_index) +void SetColourGradient(Colours colour, ColourShade shade, uint8_t palette_index) { assert(colour < COLOUR_END); assert(shade < SHADE_END); diff --git a/src/palette_func.h b/src/palette_func.h index 0f35bc0258..2a62dbd12d 100644 --- a/src/palette_func.h +++ b/src/palette_func.h @@ -54,8 +54,8 @@ enum ColourShade : uint8_t { }; DECLARE_POSTFIX_INCREMENT(ColourShade) -byte GetColourGradient(Colours colour, ColourShade shade); -void SetColourGradient(Colours colour, ColourShade shade, byte palette_colour); +uint8_t GetColourGradient(Colours colour, ColourShade shade); +void SetColourGradient(Colours colour, ColourShade shade, uint8_t palette_colour); /** * Return the colour for a particular greyscale level. diff --git a/src/pathfinder/npf/aystar.h b/src/pathfinder/npf/aystar.h index 5bd2368172..98d4c17d14 100644 --- a/src/pathfinder/npf/aystar.h +++ b/src/pathfinder/npf/aystar.h @@ -135,14 +135,14 @@ struct AyStar { void *user_target; void *user_data; - byte loops_per_tick; ///< How many loops are there called before Main() gives control back to the caller. 0 = until done. + uint8_t loops_per_tick; ///< How many loops are there called before Main() gives control back to the caller. 0 = until done. uint max_path_cost; ///< If the g-value goes over this number, it stops searching, 0 = infinite. uint max_search_nodes; ///< The maximum number of nodes that will be expanded, 0 = infinite. /* These should be filled with the neighbours of a tile by * GetNeighbours */ AyStarNode neighbours[12]; - byte num_neighbours; + uint8_t num_neighbours; void Init(Hash_HashProc hash, uint num_buckets); diff --git a/src/pathfinder/npf/queue.cpp b/src/pathfinder/npf/queue.cpp index 66b05004b4..21ccd1ad9f 100644 --- a/src/pathfinder/npf/queue.cpp +++ b/src/pathfinder/npf/queue.cpp @@ -240,7 +240,7 @@ void Hash::Init(Hash_HashProc *hash, uint num_buckets) this->hash = hash; this->size = 0; this->num_buckets = num_buckets; - this->buckets = (HashNode*)MallocT(num_buckets * (sizeof(*this->buckets) + sizeof(*this->buckets_in_use))); + this->buckets = (HashNode*)MallocT(num_buckets * (sizeof(*this->buckets) + sizeof(*this->buckets_in_use))); this->buckets_in_use = (bool*)(this->buckets + num_buckets); for (i = 0; i < num_buckets; i++) this->buckets_in_use[i] = false; } diff --git a/src/pathfinder/water_regions.cpp b/src/pathfinder/water_regions.cpp index f5bc761d1b..df4da633df 100644 --- a/src/pathfinder/water_regions.cpp +++ b/src/pathfinder/water_regions.cpp @@ -24,7 +24,7 @@ using TWaterRegionTraversabilityBits = uint16_t; constexpr TWaterRegionPatchLabel FIRST_REGION_LABEL = 1; static_assert(sizeof(TWaterRegionTraversabilityBits) * 8 == WATER_REGION_EDGE_LENGTH); -static_assert(sizeof(TWaterRegionPatchLabel) == sizeof(byte)); // Important for the hash calculation. +static_assert(sizeof(TWaterRegionPatchLabel) == sizeof(uint8_t)); // Important for the hash calculation. static inline TrackBits GetWaterTracks(TileIndex tile) { return TrackStatusToTrackBits(GetTileTrackStatus(tile, TRANSPORT_WATER, 0)); } static inline bool IsAqueductTile(TileIndex tile) { return IsBridgeTile(tile) && GetTunnelBridgeTransportType(tile) == TRANSPORT_WATER; } diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp index a4638879c5..85f05747e5 100644 --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -398,7 +398,7 @@ public: /* Ocean/canal speed penalty. */ const ShipVehicleInfo *svi = ShipVehInfo(Yapf().GetVehicle()->engine_type); - byte speed_frac = (GetEffectiveWaterClass(n.GetTile()) == WATER_CLASS_SEA) ? svi->ocean_speed_frac : svi->canal_speed_frac; + uint8_t speed_frac = (GetEffectiveWaterClass(n.GetTile()) == WATER_CLASS_SEA) ? svi->ocean_speed_frac : svi->canal_speed_frac; if (speed_frac > 0) c += YAPF_TILE_LENGTH * (1 + tf->m_tiles_skipped) * speed_frac / (256 - speed_frac); /* Apply it. */ diff --git a/src/rail.cpp b/src/rail.cpp index 01b6421535..290248ac88 100644 --- a/src/rail.cpp +++ b/src/rail.cpp @@ -20,21 +20,21 @@ /* XXX: Below 3 tables store duplicate data. Maybe remove some? */ /* Maps a trackdir to the bit that stores its status in the map arrays, in the * direction along with the trackdir */ -extern const byte _signal_along_trackdir[TRACKDIR_END] = { +extern const uint8_t _signal_along_trackdir[TRACKDIR_END] = { 0x8, 0x8, 0x8, 0x2, 0x4, 0x1, 0, 0, 0x4, 0x4, 0x4, 0x1, 0x8, 0x2 }; /* Maps a trackdir to the bit that stores its status in the map arrays, in the * direction against the trackdir */ -extern const byte _signal_against_trackdir[TRACKDIR_END] = { +extern const uint8_t _signal_against_trackdir[TRACKDIR_END] = { 0x4, 0x4, 0x4, 0x1, 0x8, 0x2, 0, 0, 0x8, 0x8, 0x8, 0x2, 0x4, 0x1 }; /* Maps a Track to the bits that store the status of the two signals that can * be present on the given track */ -extern const byte _signal_on_track[] = { +extern const uint8_t _signal_on_track[] = { 0xC, 0xC, 0xC, 0x3, 0xC, 0x3 }; diff --git a/src/rail.h b/src/rail.h index 563278b28e..0d6b09fe6c 100644 --- a/src/rail.h +++ b/src/rail.h @@ -198,12 +198,12 @@ public: /** * Original railtype number to use when drawing non-newgrf railtypes, or when drawing stations. */ - byte fallback_railtype; + uint8_t fallback_railtype; /** * Multiplier for curve maximum speed advantage */ - byte curve_speed; + uint8_t curve_speed; /** * Bit mask of rail type flags @@ -243,7 +243,7 @@ public: /** * Colour on mini-map */ - byte map_colour; + uint8_t map_colour; /** * Introduction date. @@ -268,7 +268,7 @@ public: /** * The sorting order of this railtype for the toolbar dropdown. */ - byte sorting_order; + uint8_t sorting_order; /** * NewGRF providing the Action3 for the railtype. nullptr if not available. diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index fdf1c1f0e1..918bfe1421 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -179,7 +179,7 @@ RailType AllocateRailType(RailTypeLabel label) return INVALID_RAILTYPE; } -static const byte _track_sloped_sprites[14] = { +static const uint8_t _track_sloped_sprites[14] = { 14, 15, 22, 13, 0, 21, 17, 12, 23, 0, 18, 20, @@ -1049,7 +1049,7 @@ CommandCost CmdBuildTrainDepot(DoCommandFlag flags, TileIndex tile, RailType rai * @return the cost of this operation or an error * @todo p2 should be replaced by two bits for "along" and "against" the track. */ -CommandCost CmdBuildSingleSignal(DoCommandFlag flags, TileIndex tile, Track track, SignalType sigtype, SignalVariant sigvar, bool convert_signal, bool skip_existing_signals, bool ctrl_pressed, SignalType cycle_start, SignalType cycle_stop, uint8_t num_dir_cycle, byte signals_copy) +CommandCost CmdBuildSingleSignal(DoCommandFlag flags, TileIndex tile, Track track, SignalType sigtype, SignalVariant sigvar, bool convert_signal, bool skip_existing_signals, bool ctrl_pressed, SignalType cycle_start, SignalType cycle_stop, uint8_t num_dir_cycle, uint8_t signals_copy) { if (sigtype > SIGTYPE_LAST || sigvar > SIG_SEMAPHORE) return CMD_ERROR; if (cycle_start > cycle_stop || cycle_stop > SIGTYPE_LAST) return CMD_ERROR; @@ -1279,7 +1279,7 @@ static CommandCost CmdSignalTrackHelper(DoCommandFlag flags, TileIndex tile, Til /* Must start on a valid track to be able to avoid loops */ if (!HasTrack(tile, track)) return CMD_ERROR; - byte signals; + uint8_t signals; /* copy the signal-style of the first rail-piece if existing */ if (HasSignalOnTrack(tile, track)) { signals = GetPresentSignals(tile) & SignalOnTrack(track); @@ -1295,7 +1295,7 @@ static CommandCost CmdSignalTrackHelper(DoCommandFlag flags, TileIndex tile, Til signals = IsPbsSignal(sigtype) ? SignalAlongTrackdir(trackdir) : SignalOnTrack(track); } - byte signal_dir = 0; + uint8_t signal_dir = 0; if (signals & SignalAlongTrackdir(trackdir)) SetBit(signal_dir, 0); if (signals & SignalAgainstTrackdir(trackdir)) SetBit(signal_dir, 1); @@ -1320,7 +1320,7 @@ static CommandCost CmdSignalTrackHelper(DoCommandFlag flags, TileIndex tile, Til bool had_success = false; auto build_signal = [&](TileIndex tile, Trackdir trackdir, bool test_only) { /* Pick the correct orientation for the track direction */ - byte signals = 0; + uint8_t signals = 0; if (HasBit(signal_dir, 0)) signals |= SignalAlongTrackdir(trackdir); if (HasBit(signal_dir, 1)) signals |= SignalAgainstTrackdir(trackdir); @@ -1446,7 +1446,7 @@ static CommandCost CmdSignalTrackHelper(DoCommandFlag flags, TileIndex tile, Til * @return the cost of this operation or an error * @see CmdSignalTrackHelper */ -CommandCost CmdBuildSignalTrack(DoCommandFlag flags, TileIndex tile, TileIndex end_tile, Track track, SignalType sigtype, SignalVariant sigvar, bool mode, bool autofill, bool minimise_gaps, byte signal_density) +CommandCost CmdBuildSignalTrack(DoCommandFlag flags, TileIndex tile, TileIndex end_tile, Track track, SignalType sigtype, SignalVariant sigvar, bool mode, bool autofill, bool minimise_gaps, uint8_t signal_density) { return CmdSignalTrackHelper(flags, tile, end_tile, track, sigtype, sigvar, mode, false, autofill, minimise_gaps, signal_density); } @@ -2379,7 +2379,7 @@ static void DrawTrackBits(TileInfo *ti, TrackBits track) DrawGroundSprite(image, pal, &(_halftile_sub_sprite[halftile_corner])); if (_game_mode != GM_MENU && _settings_client.gui.show_track_reservation && HasReservedTracks(ti->tile, CornerToTrackBits(halftile_corner))) { - static const byte _corner_to_track_sprite[] = {3, 1, 2, 0}; + static const uint8_t _corner_to_track_sprite[] = {3, 1, 2, 0}; DrawGroundSprite(_corner_to_track_sprite[halftile_corner] + rti->base_sprites.single_n, PALETTE_CRASH, nullptr, 0, -(int)TILE_HEIGHT); } } @@ -2387,7 +2387,7 @@ static void DrawTrackBits(TileInfo *ti, TrackBits track) static void DrawSignals(TileIndex tile, TrackBits rails, const RailTypeInfo *rti) { - auto MAYBE_DRAW_SIGNAL = [&](byte signalbit, SignalOffsets image, uint pos, Track track) { + auto MAYBE_DRAW_SIGNAL = [&](uint8_t signalbit, SignalOffsets image, uint pos, Track track) { if (IsSignalPresent(tile, signalbit)) DrawSingleSignal(tile, rti, track, GetSingleSignalState(tile, signalbit), image, pos); }; @@ -2667,7 +2667,7 @@ static void TileLoop_Track(TileIndex tile) TrackBits rail = GetTrackBits(tile); Owner owner = GetTileOwner(tile); - byte fences = 0; + uint8_t fences = 0; for (DiagDirection d = DIAGDIR_BEGIN; d < DIAGDIR_END; d++) { static const TrackBits dir_to_trackbits[DIAGDIR_END] = {TRACK_BIT_3WAY_NE, TRACK_BIT_3WAY_SE, TRACK_BIT_3WAY_SW, TRACK_BIT_3WAY_NW}; @@ -2736,7 +2736,7 @@ static TrackStatus GetTileTrackStatus_Track(TileIndex tile, TransportType mode, case RAIL_TILE_SIGNALS: { trackbits = GetTrackBits(tile); - byte a = GetPresentSignals(tile); + uint8_t a = GetPresentSignals(tile); uint b = GetSignalStates(tile); b &= a; @@ -2899,8 +2899,8 @@ static void ChangeTileOwner_Track(TileIndex tile, Owner old_owner, Owner new_own } } -static const byte _fractcoords_behind[4] = { 0x8F, 0x8, 0x80, 0xF8 }; -static const byte _fractcoords_enter[4] = { 0x8A, 0x48, 0x84, 0xA8 }; +static const uint8_t _fractcoords_behind[4] = { 0x8F, 0x8, 0x80, 0xF8 }; +static const uint8_t _fractcoords_enter[4] = { 0x8A, 0x48, 0x84, 0xA8 }; static const int8_t _deltacoord_leaveoffset[8] = { -1, 0, 1, 0, /* x */ 0, 1, 0, -1 /* y */ @@ -2939,7 +2939,7 @@ static VehicleEnterTileStatus VehicleEnter_Track(Vehicle *u, TileIndex tile, int /* Depot direction. */ DiagDirection dir = GetRailDepotDirection(tile); - byte fract_coord = (x & 0xF) + ((y & 0xF) << 4); + uint8_t fract_coord = (x & 0xF) + ((y & 0xF) << 4); /* Make sure a train is not entering the tile from behind. */ if (_fractcoords_behind[dir] == fract_coord) return VETSB_CANNOT_ENTER; @@ -2951,7 +2951,7 @@ static VehicleEnterTileStatus VehicleEnter_Track(Vehicle *u, TileIndex tile, int /* Calculate the point where the following wagon should be activated. */ int length = v->CalcNextVehicleOffset(); - byte fract_coord_leave = + uint8_t fract_coord_leave = ((_fractcoords_enter[dir] & 0x0F) + // x (length + 1) * _deltacoord_leaveoffset[dir]) + (((_fractcoords_enter[dir] >> 4) + // y diff --git a/src/rail_cmd.h b/src/rail_cmd.h index 38a5e5c30a..b9f6c0cc03 100644 --- a/src/rail_cmd.h +++ b/src/rail_cmd.h @@ -20,10 +20,10 @@ CommandCost CmdRemoveRailroadTrack(DoCommandFlag flags, TileIndex end_tile, Tile CommandCost CmdBuildSingleRail(DoCommandFlag flags, TileIndex tile, RailType railtype, Track track, bool auto_remove_signals); CommandCost CmdRemoveSingleRail(DoCommandFlag flags, TileIndex tile, Track track); CommandCost CmdBuildTrainDepot(DoCommandFlag flags, TileIndex tile, RailType railtype, DiagDirection dir); -CommandCost CmdBuildSingleSignal(DoCommandFlag flags, TileIndex tile, Track track, SignalType sigtype, SignalVariant sigvar, bool convert_signal, bool skip_existing_signals, bool ctrl_pressed, SignalType cycle_start, SignalType cycle_stop, uint8_t num_dir_cycle, byte signals_copy); +CommandCost CmdBuildSingleSignal(DoCommandFlag flags, TileIndex tile, Track track, SignalType sigtype, SignalVariant sigvar, bool convert_signal, bool skip_existing_signals, bool ctrl_pressed, SignalType cycle_start, SignalType cycle_stop, uint8_t num_dir_cycle, uint8_t signals_copy); CommandCost CmdRemoveSingleSignal(DoCommandFlag flags, TileIndex tile, Track track); CommandCost CmdConvertRail(DoCommandFlag flags, TileIndex tile, TileIndex area_start, RailType totype, bool diagonal); -CommandCost CmdBuildSignalTrack(DoCommandFlag flags, TileIndex tile, TileIndex end_tile, Track track, SignalType sigtype, SignalVariant sigvar, bool mode, bool autofill, bool minimise_gaps, byte signal_density); +CommandCost CmdBuildSignalTrack(DoCommandFlag flags, TileIndex tile, TileIndex end_tile, Track track, SignalType sigtype, SignalVariant sigvar, bool mode, bool autofill, bool minimise_gaps, uint8_t signal_density); CommandCost CmdRemoveSignalTrack(DoCommandFlag flags, TileIndex tile, TileIndex end_tile, Track track, bool autofill); DEF_CMD_TRAIT(CMD_BUILD_RAILROAD_TRACK, CmdBuildRailroadTrack, CMD_AUTO | CMD_NO_WATER, CMDT_LANDSCAPE_CONSTRUCTION) diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index a89080e011..dce5f61b91 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -202,8 +202,8 @@ static void PlaceRail_Station(TileIndex tile) RailStationGUISettings params = _railstation; RailType rt = _cur_railtype; - byte numtracks = _settings_client.gui.station_numtracks; - byte platlength = _settings_client.gui.station_platlength; + uint8_t numtracks = _settings_client.gui.station_numtracks; + uint8_t platlength = _settings_client.gui.station_platlength; bool adjacent = _ctrl_pressed; auto proc = [=](bool test, StationID to_join) -> bool { diff --git a/src/rail_map.h b/src/rail_map.h index 5f93314f00..5ff2fb9ec3 100644 --- a/src/rail_map.h +++ b/src/rail_map.h @@ -194,7 +194,7 @@ inline Track GetRailDepotTrack(Tile t) inline TrackBits GetRailReservationTrackBits(Tile t) { assert(IsPlainRailTile(t)); - byte track_b = GB(t.m2(), 8, 3); + uint8_t track_b = GB(t.m2(), 8, 3); Track track = (Track)(track_b - 1); // map array saves Track+1 if (track_b == 0) return TRACK_BIT_NONE; return (TrackBits)(TrackToTrackBits(track) | (HasBit(t.m2(), 11) ? TrackToTrackBits(TrackToOppositeTrack(track)) : 0)); @@ -213,7 +213,7 @@ inline void SetTrackReservation(Tile t, TrackBits b) assert(!TracksOverlap(b)); Track track = RemoveFirstTrack(&b); SB(t.m2(), 8, 3, track == INVALID_TRACK ? 0 : track + 1); - SB(t.m2(), 11, 1, (byte)(b != TRACK_BIT_NONE)); + SB(t.m2(), 11, 1, (uint8_t)(b != TRACK_BIT_NONE)); } /** @@ -270,7 +270,7 @@ inline bool HasDepotReservation(Tile t) inline void SetDepotReservation(Tile t, bool b) { assert(IsRailDepot(t)); - SB(t.m5(), 4, 1, (byte)b); + SB(t.m5(), 4, 1, (uint8_t)b); } /** @@ -293,14 +293,14 @@ inline bool IsPbsSignal(SignalType s) inline SignalType GetSignalType(Tile t, Track track) { assert(GetRailTileType(t) == RAIL_TILE_SIGNALS); - byte pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 4 : 0; + uint8_t pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 4 : 0; return (SignalType)GB(t.m2(), pos, 3); } inline void SetSignalType(Tile t, Track track, SignalType s) { assert(GetRailTileType(t) == RAIL_TILE_SIGNALS); - byte pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 4 : 0; + uint8_t pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 4 : 0; SB(t.m2(), pos, 3, s); if (track == INVALID_TRACK) SB(t.m2(), 4, 3, s); } @@ -323,8 +323,8 @@ inline bool IsOnewaySignal(Tile t, Track track) inline void CycleSignalSide(Tile t, Track track) { - byte sig; - byte pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 4 : 6; + uint8_t sig; + uint8_t pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 4 : 6; sig = GB(t.m3(), pos, 2); if (--sig == 0) sig = IsPbsSignal(GetSignalType(t, track)) ? 2 : 3; @@ -333,13 +333,13 @@ inline void CycleSignalSide(Tile t, Track track) inline SignalVariant GetSignalVariant(Tile t, Track track) { - byte pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 7 : 3; + uint8_t pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 7 : 3; return (SignalVariant)GB(t.m2(), pos, 1); } inline void SetSignalVariant(Tile t, Track track, SignalVariant v) { - byte pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 7 : 3; + uint8_t pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 7 : 3; SB(t.m2(), pos, 1, v); if (track == INVALID_TRACK) SB(t.m2(), 7, 1, v); } @@ -370,7 +370,7 @@ inline uint GetSignalStates(Tile tile) * @param signalbit the signal * @return the state of the signal */ -inline SignalState GetSingleSignalState(Tile t, byte signalbit) +inline SignalState GetSingleSignalState(Tile t, uint8_t signalbit) { return (SignalState)HasBit(GetSignalStates(t), signalbit); } @@ -401,7 +401,7 @@ inline uint GetPresentSignals(Tile tile) * @param signalbit the signal * @return true if and only if the signal is present */ -inline bool IsSignalPresent(Tile t, byte signalbit) +inline bool IsSignalPresent(Tile t, uint8_t signalbit) { return HasBit(GetPresentSignals(t), signalbit); } diff --git a/src/rail_type.h b/src/rail_type.h index ec44021f5d..c72f4583da 100644 --- a/src/rail_type.h +++ b/src/rail_type.h @@ -24,7 +24,7 @@ static const RailTypeLabel RAILTYPE_LABEL_MAGLEV = 'MGLV'; * * This enumeration defines all 4 possible railtypes. */ -enum RailType : byte { +enum RailType : uint8_t { RAILTYPE_BEGIN = 0, ///< Used for iterations RAILTYPE_RAIL = 0, ///< Standard non-electric rails RAILTYPE_ELECTRIC = 1, ///< Electric rails diff --git a/src/random_access_file.cpp b/src/random_access_file.cpp index 37f51530df..c02e9b46eb 100644 --- a/src/random_access_file.cpp +++ b/src/random_access_file.cpp @@ -98,7 +98,7 @@ void RandomAccessFile::SeekTo(size_t pos, int mode) * Read a byte from the file. * @return Read byte. */ -byte RandomAccessFile::ReadByte() +uint8_t RandomAccessFile::ReadByte() { if (this->buffer == this->buffer_end) { this->buffer = this->buffer_start; @@ -117,7 +117,7 @@ byte RandomAccessFile::ReadByte() */ uint16_t RandomAccessFile::ReadWord() { - byte b = this->ReadByte(); + uint8_t b = this->ReadByte(); return (this->ReadByte() << 8) | b; } diff --git a/src/random_access_file_type.h b/src/random_access_file_type.h index caf58a9ba8..38b4148247 100644 --- a/src/random_access_file_type.h +++ b/src/random_access_file_type.h @@ -29,9 +29,9 @@ class RandomAccessFile { FILE *file_handle; ///< File handle of the open file. size_t pos; ///< Position in the file of the end of the read buffer. - byte *buffer; ///< Current position within the local buffer. - byte *buffer_end; ///< Last valid byte of buffer. - byte buffer_start[BUFFER_SIZE]; ///< Local buffer when read from file. + uint8_t *buffer; ///< Current position within the local buffer. + uint8_t *buffer_end; ///< Last valid byte of buffer. + uint8_t buffer_start[BUFFER_SIZE]; ///< Local buffer when read from file. public: RandomAccessFile(const std::string &filename, Subdirectory subdir); @@ -46,7 +46,7 @@ public: size_t GetPos() const; void SeekTo(size_t pos, int mode); - byte ReadByte(); + uint8_t ReadByte(); uint16_t ReadWord(); uint32_t ReadDword(); diff --git a/src/rev.cpp.in b/src/rev.cpp.in index a2270c2c1d..1df8b84898 100644 --- a/src/rev.cpp.in +++ b/src/rev.cpp.in @@ -63,14 +63,14 @@ const char _openttd_revision_year[] = "${REV_YEAR}"; * (compiling from sources without any version control software) * and 2 is for modified revision. */ -const byte _openttd_revision_modified = ${REV_MODIFIED}; +const uint8_t _openttd_revision_modified = ${REV_MODIFIED}; /** * Indicate whether this is a tagged version. * If this is non-0, then _openttd_revision is the name of the tag, * and the version is likely a beta, release candidate, or real release. */ -const byte _openttd_revision_tagged = ${REV_ISTAG}; +const uint8_t _openttd_revision_tagged = ${REV_ISTAG}; /** * To check compatibility of BaNaNaS content, this version string is used. diff --git a/src/rev.h b/src/rev.h index b7b9c4412f..450a8984ba 100644 --- a/src/rev.h +++ b/src/rev.h @@ -14,8 +14,8 @@ extern const char _openttd_revision[]; extern const char _openttd_build_date[]; extern const char _openttd_revision_hash[]; extern const char _openttd_revision_year[]; -extern const byte _openttd_revision_modified; -extern const byte _openttd_revision_tagged; +extern const uint8_t _openttd_revision_modified; +extern const uint8_t _openttd_revision_tagged; extern const char _openttd_content_version[]; extern const uint32_t _openttd_newgrf_version; diff --git a/src/road.h b/src/road.h index f192c2bd6d..9328dd72c4 100644 --- a/src/road.h +++ b/src/road.h @@ -154,7 +154,7 @@ public: /** * Colour on mini-map */ - byte map_colour; + uint8_t map_colour; /** * Introduction date. @@ -179,7 +179,7 @@ public: /** * The sorting order of this roadtype for the toolbar dropdown. */ - byte sorting_order; + uint8_t sorting_order; /** * NewGRF providing the Action3 for the roadtype. nullptr if not available. diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 8fd98d6703..e575f1e0db 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -1285,8 +1285,8 @@ static CommandCost ClearTile_Road(TileIndex tile, DoCommandFlag flags) struct DrawRoadTileStruct { uint16_t image; - byte subcoord_x; - byte subcoord_y; + uint8_t subcoord_x; + uint8_t subcoord_y; }; #include "table/road_land.h" @@ -1320,7 +1320,7 @@ static Foundation GetRoadFoundation(Slope tileh, RoadBits bits) return (bits == ROAD_X ? FOUNDATION_INCLINED_X : FOUNDATION_INCLINED_Y); } -const byte _road_sloped_sprites[14] = { +const uint8_t _road_sloped_sprites[14] = { 0, 0, 2, 0, 0, 1, 0, 0, 3, 0, 0, 0, @@ -2232,7 +2232,7 @@ static void GetTileDesc_Road(TileIndex tile, TileDesc *td) * Given the direction the road depot is pointing, this is the direction the * vehicle should be travelling in in order to enter the depot. */ -static const byte _roadveh_enter_depot_dir[4] = { +static const uint8_t _roadveh_enter_depot_dir[4] = { TRACKDIR_X_SW, TRACKDIR_Y_NW, TRACKDIR_X_NE, TRACKDIR_Y_SE }; diff --git a/src/road_cmd.h b/src/road_cmd.h index 6eb0c997a3..3a957f2a15 100644 --- a/src/road_cmd.h +++ b/src/road_cmd.h @@ -14,7 +14,7 @@ #include "road_type.h" #include "command_type.h" -enum RoadStopClassID : byte; +enum RoadStopClassID : uint8_t; void DrawRoadDepotSprite(int x, int y, DiagDirection dir, RoadType rt); void UpdateNearestTownForRoadTiles(bool invalidate); diff --git a/src/road_type.h b/src/road_type.h index e36f023d44..96be7b858e 100644 --- a/src/road_type.h +++ b/src/road_type.h @@ -22,7 +22,7 @@ static const RoadTypeLabel ROADTYPE_LABEL_TRAM = 'ELRL'; * * @note currently only ROADTYPE_ROAD and ROADTYPE_TRAM are supported. */ -enum RoadType : byte { +enum RoadType : uint8_t { ROADTYPE_BEGIN = 0, ///< Used for iterations ROADTYPE_ROAD = 0, ///< Basic road type ROADTYPE_TRAM = 1, ///< Trams @@ -49,7 +49,7 @@ DECLARE_ENUM_AS_BIT_SET(RoadTypes) * This enumeration defines the possible road parts which * can be build on a tile. */ -enum RoadBits : byte { +enum RoadBits : uint8_t { ROAD_NONE = 0U, ///< No road-part is build ROAD_NW = 1U, ///< North-west part ROAD_SW = 2U, ///< South-west part @@ -70,7 +70,7 @@ enum RoadBits : byte { DECLARE_ENUM_AS_BIT_SET(RoadBits) /** Which directions are disallowed ? */ -enum DisallowedRoadDirections : byte { +enum DisallowedRoadDirections : uint8_t { DRD_NONE, ///< None of the directions are disallowed DRD_SOUTHBOUND, ///< All southbound traffic is disallowed DRD_NORTHBOUND, ///< All northbound traffic is disallowed diff --git a/src/roadstop_base.h b/src/roadstop_base.h index 768b54282d..6bd3c268d8 100644 --- a/src/roadstop_base.h +++ b/src/roadstop_base.h @@ -65,7 +65,7 @@ struct RoadStop : RoadStopPool::PoolItem<&_roadstop_pool> { }; TileIndex xy; ///< Position on the map - byte status; ///< Current status of the Stop, @see RoadStopSatusFlag. Access using *Bay and *Busy functions. + uint8_t status; ///< Current status of the Stop, @see RoadStopSatusFlag. Access using *Bay and *Busy functions. struct RoadStop *next; ///< Next stop of the given type at this station /** Initializes a RoadStop */ diff --git a/src/roadveh.h b/src/roadveh.h index 19ba64d1d6..47e333999e 100644 --- a/src/roadveh.h +++ b/src/roadveh.h @@ -76,7 +76,7 @@ static const uint RVC_DRIVE_THROUGH_STOP_FRAME = 11; static const uint RVC_DEPOT_STOP_FRAME = 11; /** The number of ticks a vehicle has for overtaking. */ -static const byte RV_OVERTAKE_TIMEOUT = 35; +static const uint8_t RV_OVERTAKE_TIMEOUT = 35; void RoadVehUpdateCache(RoadVehicle *v, bool same_length = false); void GetRoadVehSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type); @@ -105,13 +105,13 @@ struct RoadVehPathCache { */ struct RoadVehicle final : public GroundVehicle { RoadVehPathCache path; ///< Cached path. - byte state; ///< @see RoadVehicleStates - byte frame; + uint8_t state; ///< @see RoadVehicleStates + uint8_t frame; uint16_t blocked_ctr; - byte overtaking; ///< Set to #RVSB_DRIVE_SIDE when overtaking, otherwise 0. - byte overtaking_ctr; ///< The length of the current overtake attempt. + uint8_t overtaking; ///< Set to #RVSB_DRIVE_SIDE when overtaking, otherwise 0. + uint8_t overtaking_ctr; ///< The length of the current overtake attempt. uint16_t crashed_ctr; ///< Animation counter when the vehicle has crashed. @see RoadVehIsCrashed - byte reverse_ctr; + uint8_t reverse_ctr; RoadType roadtype; //!< Roadtype of this vehicle. RoadTypes compatible_roadtypes; //!< Roadtypes this consist is powered on. @@ -201,7 +201,7 @@ protected: // These functions should not be called outside acceleration code. * Allows to know the tractive effort value that this vehicle will use. * @return Tractive effort value from the engine. */ - inline byte GetTractiveEffort() const + inline uint8_t GetTractiveEffort() const { /* The tractive effort coefficient is in units of 1/256. */ return GetVehicleProperty(this, PROP_ROADVEH_TRACTIVE_EFFORT, RoadVehInfo(this->engine_type)->tractive_effort); @@ -211,7 +211,7 @@ protected: // These functions should not be called outside acceleration code. * Gets the area used for calculating air drag. * @return Area of the engine in m^2. */ - inline byte GetAirDragArea() const + inline uint8_t GetAirDragArea() const { return 6; } @@ -220,7 +220,7 @@ protected: // These functions should not be called outside acceleration code. * Gets the air drag coefficient of this vehicle. * @return Air drag value from the engine. */ - inline byte GetAirDrag() const + inline uint8_t GetAirDrag() const { return RoadVehInfo(this->engine_type)->air_drag; } diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 32150cc714..734059d580 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -1005,7 +1005,7 @@ found_best_track:; } struct RoadDriveEntry { - byte x, y; + uint8_t x, y; }; #include "table/roadveh_movement.h" @@ -1066,7 +1066,7 @@ static Trackdir FollowPreviousRoadVehicle(const RoadVehicle *v, const RoadVehicl return _road_reverse_table[entry_dir]; } - byte prev_state = prev->state; + uint8_t prev_state = prev->state; Trackdir dir; if (prev_state == RVSB_WORMHOLE || prev_state == RVSB_IN_DEPOT) { @@ -1338,7 +1338,7 @@ again: TileIndex old_tile = v->tile; v->tile = tile; - v->state = (byte)dir; + v->state = (uint8_t)dir; v->frame = start_frame; RoadTramType rtt = GetRoadTramType(v->roadtype); if (GetRoadType(old_tile, rtt) != GetRoadType(tile, rtt)) { diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index a28d61eb6c..cfa3ddfbc5 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -188,7 +188,7 @@ static void UpdateExclusiveRights() */ } -static const byte convert_currency[] = { +static const uint8_t convert_currency[] = { 0, 1, 12, 8, 3, 10, 14, 19, 4, 5, 9, 11, 13, 6, 17, @@ -490,12 +490,12 @@ static uint FixVehicleInclination(Vehicle *v, Direction dir) case INVALID_DIR: break; default: NOT_REACHED(); } - byte entry_z = GetSlopePixelZ(entry_x, entry_y, true); + uint8_t entry_z = GetSlopePixelZ(entry_x, entry_y, true); /* Compute middle of the tile. */ int middle_x = (v->x_pos & ~TILE_UNIT_MASK) + TILE_SIZE / 2; int middle_y = (v->y_pos & ~TILE_UNIT_MASK) + TILE_SIZE / 2; - byte middle_z = GetSlopePixelZ(middle_x, middle_y, true); + uint8_t middle_z = GetSlopePixelZ(middle_x, middle_y, true); /* middle_z == entry_z, no height change. */ if (middle_z == entry_z) return 0; @@ -2129,7 +2129,7 @@ bool AfterLoadGame() } /* Use old layout randomizer code */ - byte layout = TileHash(TileX(t->xy), TileY(t->xy)) % 6; + uint8_t layout = TileHash(TileX(t->xy), TileY(t->xy)) % 6; switch (layout) { default: break; case 5: layout = 1; break; @@ -2365,8 +2365,8 @@ bool AfterLoadGame() /* Airport tile animation uses animation frame instead of other graphics id */ if (IsSavegameVersionBefore(SLV_137)) { struct AirportTileConversion { - byte old_start; - byte num_frames; + uint8_t old_start; + uint8_t num_frames; }; static const AirportTileConversion atc[] = { {31, 12}, // APT_RADAR_GRASS_FENCE_SW @@ -2382,7 +2382,7 @@ bool AfterLoadGame() for (auto t : Map::Iterate()) { if (IsAirportTile(t)) { StationGfx old_gfx = GetStationGfx(t); - byte offset = 0; + uint8_t offset = 0; for (uint i = 0; i < lengthof(atc); i++) { if (old_gfx < atc[i].old_start) { SetStationGfx(t, old_gfx - offset); @@ -2535,9 +2535,9 @@ bool AfterLoadGame() const DiagDirection vdir = DirToDiagDir(v->direction); /* Have we passed the visibility "switch" state already? */ - byte pos = (DiagDirToAxis(vdir) == AXIS_X ? v->x_pos : v->y_pos) & TILE_UNIT_MASK; - byte frame = (vdir == DIAGDIR_NE || vdir == DIAGDIR_NW) ? TILE_SIZE - 1 - pos : pos; - extern const byte _tunnel_visibility_frame[DIAGDIR_END]; + uint8_t pos = (DiagDirToAxis(vdir) == AXIS_X ? v->x_pos : v->y_pos) & TILE_UNIT_MASK; + uint8_t frame = (vdir == DIAGDIR_NE || vdir == DIAGDIR_NW) ? TILE_SIZE - 1 - pos : pos; + extern const uint8_t _tunnel_visibility_frame[DIAGDIR_END]; /* Should the vehicle be hidden or not? */ bool hidden; @@ -2583,7 +2583,7 @@ bool AfterLoadGame() bool loading = rv->current_order.IsType(OT_LOADING) || rv->current_order.IsType(OT_LEAVESTATION); if (HasBit(rv->state, RVS_IN_ROAD_STOP)) { - extern const byte _road_stop_stop_frame[]; + extern const uint8_t _road_stop_stop_frame[]; SB(rv->state, RVS_ENTERED_STOP, 1, loading || rv->frame > _road_stop_stop_frame[rv->state - RVSB_IN_ROAD_STOP + (_settings_game.vehicle.road_side << RVS_DRIVE_SIDE)]); } else if (HasBit(rv->state, RVS_IN_DT_ROAD_STOP)) { SB(rv->state, RVS_ENTERED_STOP, 1, loading || rv->frame > RVC_DRIVE_THROUGH_STOP_FRAME); diff --git a/src/saveload/gamelog_sl.cpp b/src/saveload/gamelog_sl.cpp index 7eb059414a..c3354a1d97 100644 --- a/src/saveload/gamelog_sl.cpp +++ b/src/saveload/gamelog_sl.cpp @@ -348,7 +348,7 @@ public: void Load(LoggedAction *la) const override { if (IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY)) { - byte type; + uint8_t type; while ((type = SlReadByte()) != GLCT_NONE) { if (type >= GLCT_END) SlErrorCorrupt("Invalid gamelog change type"); LoadChange(la, (GamelogChangeType)type); @@ -384,7 +384,7 @@ struct GLOGChunkHandler : ChunkHandler { const std::vector slt = SlCompatTableHeader(_gamelog_desc, _gamelog_sl_compat); if (IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY)) { - byte type; + uint8_t type; while ((type = SlReadByte()) != GLAT_NONE) { if (type >= GLAT_END) SlErrorCorrupt("Invalid gamelog action type"); diff --git a/src/saveload/map_sl.cpp b/src/saveload/map_sl.cpp index f5407dd04e..3ce23a42b2 100644 --- a/src/saveload/map_sl.cpp +++ b/src/saveload/map_sl.cpp @@ -71,7 +71,7 @@ struct MAPTChunkHandler : ChunkHandler { void Load() const override { - std::array buf; + std::array buf; uint size = Map::Size(); for (TileIndex i = 0; i != size;) { @@ -82,7 +82,7 @@ struct MAPTChunkHandler : ChunkHandler { void Save() const override { - std::array buf; + std::array buf; uint size = Map::Size(); SlSetLength(size); @@ -98,7 +98,7 @@ struct MAPHChunkHandler : ChunkHandler { void Load() const override { - std::array buf; + std::array buf; uint size = Map::Size(); for (TileIndex i = 0; i != size;) { @@ -109,7 +109,7 @@ struct MAPHChunkHandler : ChunkHandler { void Save() const override { - std::array buf; + std::array buf; uint size = Map::Size(); SlSetLength(size); @@ -125,7 +125,7 @@ struct MAPOChunkHandler : ChunkHandler { void Load() const override { - std::array buf; + std::array buf; uint size = Map::Size(); for (TileIndex i = 0; i != size;) { @@ -136,7 +136,7 @@ struct MAPOChunkHandler : ChunkHandler { void Save() const override { - std::array buf; + std::array buf; uint size = Map::Size(); SlSetLength(size); @@ -182,7 +182,7 @@ struct M3LOChunkHandler : ChunkHandler { void Load() const override { - std::array buf; + std::array buf; uint size = Map::Size(); for (TileIndex i = 0; i != size;) { @@ -193,7 +193,7 @@ struct M3LOChunkHandler : ChunkHandler { void Save() const override { - std::array buf; + std::array buf; uint size = Map::Size(); SlSetLength(size); @@ -209,7 +209,7 @@ struct M3HIChunkHandler : ChunkHandler { void Load() const override { - std::array buf; + std::array buf; uint size = Map::Size(); for (TileIndex i = 0; i != size;) { @@ -220,7 +220,7 @@ struct M3HIChunkHandler : ChunkHandler { void Save() const override { - std::array buf; + std::array buf; uint size = Map::Size(); SlSetLength(size); @@ -236,7 +236,7 @@ struct MAP5ChunkHandler : ChunkHandler { void Load() const override { - std::array buf; + std::array buf; uint size = Map::Size(); for (TileIndex i = 0; i != size;) { @@ -247,7 +247,7 @@ struct MAP5ChunkHandler : ChunkHandler { void Save() const override { - std::array buf; + std::array buf; uint size = Map::Size(); SlSetLength(size); @@ -263,7 +263,7 @@ struct MAPEChunkHandler : ChunkHandler { void Load() const override { - std::array buf; + std::array buf; uint size = Map::Size(); if (IsSavegameVersionBefore(SLV_42)) { @@ -287,7 +287,7 @@ struct MAPEChunkHandler : ChunkHandler { void Save() const override { - std::array buf; + std::array buf; uint size = Map::Size(); SlSetLength(size); @@ -303,7 +303,7 @@ struct MAP7ChunkHandler : ChunkHandler { void Load() const override { - std::array buf; + std::array buf; uint size = Map::Size(); for (TileIndex i = 0; i != size;) { @@ -314,7 +314,7 @@ struct MAP7ChunkHandler : ChunkHandler { void Save() const override { - std::array buf; + std::array buf; uint size = Map::Size(); SlSetLength(size); diff --git a/src/saveload/misc_sl.cpp b/src/saveload/misc_sl.cpp index f72ad09dbc..3cc21c083f 100644 --- a/src/saveload/misc_sl.cpp +++ b/src/saveload/misc_sl.cpp @@ -28,7 +28,7 @@ extern TileIndex _cur_tileloop_tile; extern uint16_t _disaster_delay; -extern byte _trees_tick_ctr; +extern uint8_t _trees_tick_ctr; /* Keep track of current game position */ int _saved_scrollpos_x; @@ -76,7 +76,7 @@ void ResetViewportAfterLoadGame() MarkWholeScreenDirty(); } -byte _age_cargo_skip_counter; ///< Skip aging of cargo? Used before savegame version 162. +uint8_t _age_cargo_skip_counter; ///< Skip aging of cargo? Used before savegame version 162. extern TimeoutTimer _new_competitor_timeout; static const SaveLoad _date_desc[] = { diff --git a/src/saveload/oldloader.cpp b/src/saveload/oldloader.cpp index 324866cf29..8ec6f803c4 100644 --- a/src/saveload/oldloader.cpp +++ b/src/saveload/oldloader.cpp @@ -33,10 +33,10 @@ static inline OldChunkType GetOldChunkType(OldChunkType type) {return (OldCh static inline OldChunkType GetOldChunkVarType(OldChunkType type) {return (OldChunkType)(GB(type, 8, 8) << 8);} static inline OldChunkType GetOldChunkFileType(OldChunkType type) {return (OldChunkType)(GB(type, 16, 8) << 16);} -static inline byte CalcOldVarLen(OldChunkType type) +static inline uint8_t CalcOldVarLen(OldChunkType type) { - static const byte type_mem_size[] = {0, 1, 1, 2, 2, 4, 4, 8}; - byte length = GB(type, 8, 8); + static const uint8_t type_mem_size[] = {0, 1, 1, 2, 2, 4, 4, 8}; + uint8_t length = GB(type, 8, 8); assert(length != 0 && length < lengthof(type_mem_size)); return type_mem_size[length]; } @@ -46,7 +46,7 @@ static inline byte CalcOldVarLen(OldChunkType type) * Reads a byte from a file (do not call yourself, use ReadByte()) * */ -static byte ReadByteFromFile(LoadgameState *ls) +static uint8_t ReadByteFromFile(LoadgameState *ls) { /* To avoid slow reads, we read BUFFER_SIZE of bytes per time and just return a byte per time */ @@ -73,7 +73,7 @@ static byte ReadByteFromFile(LoadgameState *ls) * Reads a byte from the buffer and decompress if needed * */ -byte ReadByte(LoadgameState *ls) +uint8_t ReadByte(LoadgameState *ls) { /* Old savegames have a nice compression algorithm (RLE) which means that we have a chunk, which starts with a length @@ -116,8 +116,8 @@ bool LoadChunk(LoadgameState *ls, void *base, const OldChunks *chunks) continue; } - byte *ptr = (byte*)chunk->ptr; - if (chunk->type & OC_DEREFERENCE_POINTER) ptr = *(byte**)ptr; + uint8_t *ptr = (uint8_t*)chunk->ptr; + if (chunk->type & OC_DEREFERENCE_POINTER) ptr = *(uint8_t**)ptr; for (uint i = 0; i < chunk->amount; i++) { /* Handle simple types */ @@ -155,7 +155,7 @@ bool LoadChunk(LoadgameState *ls, void *base, const OldChunks *chunks) if (base == nullptr && chunk->ptr == nullptr) continue; /* Chunk refers to a struct member, get address in base. */ - if (chunk->ptr == nullptr) ptr = (byte *)chunk->offset(base); + if (chunk->ptr == nullptr) ptr = (uint8_t *)chunk->offset(base); /* Write the data */ switch (GetOldChunkVarType(chunk->type)) { diff --git a/src/saveload/oldloader.h b/src/saveload/oldloader.h index 6043fb8071..fe4a6812c4 100644 --- a/src/saveload/oldloader.h +++ b/src/saveload/oldloader.h @@ -22,11 +22,11 @@ struct LoadgameState { uint chunk_size; bool decoding; - byte decode_char; + uint8_t decode_char; uint buffer_count; uint buffer_cur; - byte buffer[BUFFER_SIZE]; + uint8_t buffer[BUFFER_SIZE]; uint total_read; }; @@ -94,7 +94,7 @@ struct OldChunks { }; extern uint _bump_assert_value; -byte ReadByte(LoadgameState *ls); +uint8_t ReadByte(LoadgameState *ls); bool LoadChunk(LoadgameState *ls, void *base, const OldChunks *chunks); bool LoadTTDMain(LoadgameState *ls); @@ -102,7 +102,7 @@ bool LoadTTOMain(LoadgameState *ls); inline uint16_t ReadUint16(LoadgameState *ls) { - byte x = ReadByte(ls); + uint8_t x = ReadByte(ls); return x | ReadByte(ls) << 8; } diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 8448367c9e..b9d4d632e4 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -41,7 +41,7 @@ static bool _read_ttdpatch_flags; ///< Have we (tried to) read TTDPatch extra flags? static uint16_t _old_extra_chunk_nums; ///< Number of extra TTDPatch chunks -static byte _old_vehicle_multiplier; ///< TTDPatch vehicle multiplier +static uint8_t _old_vehicle_multiplier; ///< TTDPatch vehicle multiplier void FixOldMapArray() { @@ -111,7 +111,7 @@ static void FixTTDDepots() #define FIXNUM(x, y, z) (((((x) << 16) / (y)) + 1) << z) -static uint32_t RemapOldTownName(uint32_t townnameparts, byte old_town_name_type) +static uint32_t RemapOldTownName(uint32_t townnameparts, uint8_t old_town_name_type) { switch (old_town_name_type) { case 0: case 3: // English, American @@ -304,7 +304,7 @@ static bool FixTTOMapArray() case MP_TUNNELBRIDGE: if (HasBit(tile.m5(), 7)) { // bridge - byte m5 = tile.m5(); + uint8_t m5 = tile.m5(); tile.m5() = m5 & 0xE1; // copy bits 7..5, 1 if (GB(m5, 1, 2) == 1) tile.m5() |= 0x02; // road bridge if (GB(m5, 1, 2) == 3) tile.m2() |= 0xA0; // monorail bridge -> tubular, steel bridge @@ -1281,7 +1281,7 @@ bool LoadOldVehicle(LoadgameState *ls, int num) switch (v->type) { case VEH_TRAIN: { - static const byte spriteset_rail[] = { + static const uint8_t spriteset_rail[] = { 0, 2, 4, 4, 8, 10, 12, 14, 16, 18, 20, 22, 40, 42, 44, 46, 48, 52, 54, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140 @@ -1508,7 +1508,7 @@ static bool LoadOldMapPart1(LoadgameState *ls, int) } auto range = Map::Iterate(); for (auto it = range.begin(); it != range.end(); /* nothing. */) { - byte b = ReadByte(ls); + uint8_t b = ReadByte(ls); for (int i = 0; i < 8; i += 2, ++it) (*it).m6() = GB(b, i, 2); } } @@ -1586,8 +1586,8 @@ static bool LoadTTDPatchExtraChunks(LoadgameState *ls, int) extern TileIndex _cur_tileloop_tile; extern uint16_t _disaster_delay; -extern byte _trees_tick_ctr; -extern byte _age_cargo_skip_counter; // From misc_sl.cpp +extern uint8_t _trees_tick_ctr; +extern uint8_t _age_cargo_skip_counter; // From misc_sl.cpp extern uint8_t _old_diff_level; extern uint8_t _old_units; static const OldChunks main_chunk[] = { @@ -1808,7 +1808,7 @@ bool LoadTTOMain(LoadgameState *ls) _read_ttdpatch_flags = false; - std::array engines; // we don't want to call Engine constructor here + std::array engines; // we don't want to call Engine constructor here _old_engines = (Engine *)engines.data(); std::array vehnames; _old_vehicle_names = vehnames.data(); diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 09209ddd4a..af4dfc63a6 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -61,7 +61,7 @@ FileToSaveLoad _file_to_saveload; ///< File to save or load in the openttd loop. uint32_t _ttdp_version; ///< version of TTDP savegame (if applicable) SaveLoadVersion _sl_version; ///< the major savegame version identifier -byte _sl_minor_version; ///< the minor savegame version, DO NOT USE! +uint8_t _sl_minor_version; ///< the minor savegame version, DO NOT USE! std::string _savegame_format; ///< how to compress savegames bool _do_autosave; ///< are we doing an autosave at the moment? @@ -85,9 +85,9 @@ static const size_t MEMORY_CHUNK_SIZE = 128 * 1024; /** A buffer for reading (and buffering) savegame data. */ struct ReadBuffer { - byte buf[MEMORY_CHUNK_SIZE]; ///< Buffer we're going to read from. - byte *bufp; ///< Location we're at reading the buffer. - byte *bufe; ///< End of the buffer we can read from. + uint8_t buf[MEMORY_CHUNK_SIZE]; ///< Buffer we're going to read from. + uint8_t *bufp; ///< Location we're at reading the buffer. + uint8_t *bufe; ///< End of the buffer we can read from. std::shared_ptr reader; ///< The filter used to actually read. size_t read; ///< The amount of read bytes so far from the filter. @@ -99,7 +99,7 @@ struct ReadBuffer { { } - inline byte ReadByte() + inline uint8_t ReadByte() { if (this->bufp == this->bufe) { size_t len = this->reader->Read(this->buf, lengthof(this->buf)); @@ -126,9 +126,9 @@ struct ReadBuffer { /** Container for dumping the savegame (quickly) to memory. */ struct MemoryDumper { - std::vector blocks; ///< Buffer with blocks of allocated memory. - byte *buf; ///< Buffer we're going to write to. - byte *bufe; ///< End of the buffer we write to. + std::vector blocks; ///< Buffer with blocks of allocated memory. + uint8_t *buf; ///< Buffer we're going to write to. + uint8_t *bufe; ///< End of the buffer we write to. /** Initialise our variables. */ MemoryDumper() : buf(nullptr), bufe(nullptr) @@ -146,11 +146,11 @@ struct MemoryDumper { * Write a single byte into the dumper. * @param b The byte to write. */ - inline void WriteByte(byte b) + inline void WriteByte(uint8_t b) { /* Are we at the end of this chunk? */ if (this->buf == this->bufe) { - this->buf = CallocT(MEMORY_CHUNK_SIZE); + this->buf = CallocT(MEMORY_CHUNK_SIZE); this->blocks.push_back(this->buf); this->bufe = this->buf + MEMORY_CHUNK_SIZE; } @@ -191,7 +191,7 @@ struct MemoryDumper { struct SaveLoadParams { SaveLoadAction action; ///< are we doing a save or a load atm. NeedLength need_length; ///< working in NeedLength (Autolength) mode? - byte block_mode; ///< ??? + uint8_t block_mode; ///< ??? bool error; ///< did an error occur or not size_t obj_len; ///< the length of the current object we are busy with @@ -402,7 +402,7 @@ void ProcessAsyncSaveFinish() * Wrapper for reading a byte from the buffer. * @return The read byte. */ -byte SlReadByte() +uint8_t SlReadByte() { return _sl.reader->ReadByte(); } @@ -411,7 +411,7 @@ byte SlReadByte() * Wrapper for writing a byte to the dumper. * @param b The byte to write. */ -void SlWriteByte(byte b) +void SlWriteByte(uint8_t b) { _sl.dumper->WriteByte(b); } @@ -511,21 +511,21 @@ static void SlWriteSimpleGamma(size_t i) if (i >= (1 << 21)) { if (i >= (1 << 28)) { assert(i <= UINT32_MAX); // We can only support 32 bits for now. - SlWriteByte((byte)(0xF0)); - SlWriteByte((byte)(i >> 24)); + SlWriteByte((uint8_t)(0xF0)); + SlWriteByte((uint8_t)(i >> 24)); } else { - SlWriteByte((byte)(0xE0 | (i >> 24))); + SlWriteByte((uint8_t)(0xE0 | (i >> 24))); } - SlWriteByte((byte)(i >> 16)); + SlWriteByte((uint8_t)(i >> 16)); } else { - SlWriteByte((byte)(0xC0 | (i >> 16))); + SlWriteByte((uint8_t)(0xC0 | (i >> 16))); } - SlWriteByte((byte)(i >> 8)); + SlWriteByte((uint8_t)(i >> 8)); } else { - SlWriteByte((byte)(0x80 | (i >> 8))); + SlWriteByte((uint8_t)(0x80 | (i >> 8))); } } - SlWriteByte((byte)i); + SlWriteByte((uint8_t)i); } /** Return how many bytes used to encode a gamma value */ @@ -599,7 +599,7 @@ static uint8_t GetSavegameFileType(const SaveLoad &sld) */ static inline uint SlCalcConvMemLen(VarType conv) { - static const byte conv_mem_size[] = {1, 1, 1, 2, 2, 4, 4, 8, 8, 0}; + static const uint8_t conv_mem_size[] = {1, 1, 1, 2, 2, 4, 4, 8, 8, 0}; switch (GetVarMemType(conv)) { case SLE_VAR_STR: @@ -619,9 +619,9 @@ static inline uint SlCalcConvMemLen(VarType conv) * @param conv VarType type of variable that is used for calculating the size * @return Return the size of this type in bytes */ -static inline byte SlCalcConvFileLen(VarType conv) +static inline uint8_t SlCalcConvFileLen(VarType conv) { - static const byte conv_file_size[] = {0, 1, 1, 2, 2, 4, 4, 8, 8, 2}; + static const uint8_t conv_file_size[] = {0, 1, 1, 2, 2, 4, 4, 8, 8, 2}; switch (GetVarFileType(conv)) { case SLE_FILE_STRING: @@ -761,7 +761,7 @@ void SlSetLength(size_t length) */ static void SlCopyBytes(void *ptr, size_t length) { - byte *p = (byte *)ptr; + uint8_t *p = (uint8_t *)ptr; switch (_sl.action) { case SLA_LOAD_CHECK: @@ -793,7 +793,7 @@ int64_t ReadValue(const void *ptr, VarType conv) switch (GetVarMemType(conv)) { case SLE_VAR_BL: return (*(const bool *)ptr != 0); case SLE_VAR_I8: return *(const int8_t *)ptr; - case SLE_VAR_U8: return *(const byte *)ptr; + case SLE_VAR_U8: return *(const uint8_t *)ptr; case SLE_VAR_I16: return *(const int16_t *)ptr; case SLE_VAR_U16: return *(const uint16_t*)ptr; case SLE_VAR_I32: return *(const int32_t *)ptr; @@ -817,7 +817,7 @@ void WriteValue(void *ptr, VarType conv, int64_t val) switch (GetVarMemType(conv)) { case SLE_VAR_BL: *(bool *)ptr = (val != 0); break; case SLE_VAR_I8: *(int8_t *)ptr = val; break; - case SLE_VAR_U8: *(byte *)ptr = val; break; + case SLE_VAR_U8: *(uint8_t *)ptr = val; break; case SLE_VAR_I16: *(int16_t *)ptr = val; break; case SLE_VAR_U16: *(uint16_t*)ptr = val; break; case SLE_VAR_I32: *(int32_t *)ptr = val; break; @@ -865,7 +865,7 @@ static void SlSaveLoadConv(void *ptr, VarType conv) /* Read a value from the file */ switch (GetVarFileType(conv)) { case SLE_FILE_I8: x = (int8_t )SlReadByte(); break; - case SLE_FILE_U8: x = (byte )SlReadByte(); break; + case SLE_FILE_U8: x = (uint8_t )SlReadByte(); break; case SLE_FILE_I16: x = (int16_t )SlReadUint16(); break; case SLE_FILE_U16: x = (uint16_t)SlReadUint16(); break; case SLE_FILE_I32: x = (int32_t )SlReadUint32(); break; @@ -1006,8 +1006,8 @@ static void SlCopyInternal(void *object, size_t length, VarType conv) if (conv == SLE_INT8 || conv == SLE_UINT8) { SlCopyBytes(object, length); } else { - byte *a = (byte*)object; - byte mem_size = SlCalcConvMemLen(conv); + uint8_t *a = (uint8_t*)object; + uint8_t mem_size = SlCalcConvMemLen(conv); for (; length != 0; length --) { SlSaveLoadConv(a, conv); @@ -1052,7 +1052,7 @@ static inline size_t SlCalcArrayLen(size_t length, VarType conv) * Save/Load the length of the array followed by the array of SL_VAR elements. * @param array The array being manipulated * @param length The length of the array in elements - * @param conv VarType type of the atomic array (int, byte, uint64_t, etc.) + * @param conv VarType type of the atomic array (int, uint8_t, uint64_t, etc.) */ static void SlArray(void *array, size_t length, VarType conv) { @@ -1962,7 +1962,7 @@ void ChunkHandler::LoadCheck(size_t len) const */ static void SlLoadChunk(const ChunkHandler &ch) { - byte m = SlReadByte(); + uint8_t m = SlReadByte(); _sl.block_mode = m & CH_TYPE_MASK; _sl.obj_len = 0; @@ -2015,7 +2015,7 @@ static void SlLoadChunk(const ChunkHandler &ch) */ static void SlLoadCheckChunk(const ChunkHandler &ch) { - byte m = SlReadByte(); + uint8_t m = SlReadByte(); _sl.block_mode = m & CH_TYPE_MASK; _sl.obj_len = 0; @@ -2189,7 +2189,7 @@ struct FileReader : LoadFilter { this->file = nullptr; } - size_t Read(byte *buf, size_t size) override + size_t Read(uint8_t *buf, size_t size) override { /* We're in the process of shutting down, i.e. in "failure" mode. */ if (this->file == nullptr) return 0; @@ -2224,7 +2224,7 @@ struct FileWriter : SaveFilter { this->Finish(); } - void Write(byte *buf, size_t size) override + void Write(uint8_t *buf, size_t size) override { /* We're in the process of shutting down, i.e. in "failure" mode. */ if (this->file == nullptr) return; @@ -2263,18 +2263,18 @@ struct LZOLoadFilter : LoadFilter { if (lzo_init() != LZO_E_OK) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "cannot initialize decompressor"); } - size_t Read(byte *buf, size_t ssize) override + size_t Read(uint8_t *buf, size_t ssize) override { assert(ssize >= LZO_BUFFER_SIZE); /* Buffer size is from the LZO docs plus the chunk header size. */ - byte out[LZO_BUFFER_SIZE + LZO_BUFFER_SIZE / 16 + 64 + 3 + sizeof(uint32_t) * 2]; + uint8_t out[LZO_BUFFER_SIZE + LZO_BUFFER_SIZE / 16 + 64 + 3 + sizeof(uint32_t) * 2]; uint32_t tmp[2]; uint32_t size; lzo_uint len = ssize; /* Read header*/ - if (this->chain->Read((byte*)tmp, sizeof(tmp)) != sizeof(tmp)) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE, "File read failed"); + if (this->chain->Read((uint8_t*)tmp, sizeof(tmp)) != sizeof(tmp)) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE, "File read failed"); /* Check if size is bad */ ((uint32_t*)out)[0] = size = tmp[1]; @@ -2305,17 +2305,17 @@ struct LZOSaveFilter : SaveFilter { * Initialise this filter. * @param chain The next filter in this chain. */ - LZOSaveFilter(std::shared_ptr chain, byte) : SaveFilter(chain) + LZOSaveFilter(std::shared_ptr chain, uint8_t) : SaveFilter(chain) { if (lzo_init() != LZO_E_OK) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "cannot initialize compressor"); } - void Write(byte *buf, size_t size) override + void Write(uint8_t *buf, size_t size) override { const lzo_bytep in = buf; /* Buffer size is from the LZO docs plus the chunk header size. */ - byte out[LZO_BUFFER_SIZE + LZO_BUFFER_SIZE / 16 + 64 + 3 + sizeof(uint32_t) * 2]; - byte wrkmem[LZO1X_1_MEM_COMPRESS]; + uint8_t out[LZO_BUFFER_SIZE + LZO_BUFFER_SIZE / 16 + 64 + 3 + sizeof(uint32_t) * 2]; + uint8_t wrkmem[LZO1X_1_MEM_COMPRESS]; lzo_uint outlen; do { @@ -2349,7 +2349,7 @@ struct NoCompLoadFilter : LoadFilter { { } - size_t Read(byte *buf, size_t size) override + size_t Read(uint8_t *buf, size_t size) override { return this->chain->Read(buf, size); } @@ -2361,11 +2361,11 @@ struct NoCompSaveFilter : SaveFilter { * Initialise this filter. * @param chain The next filter in this chain. */ - NoCompSaveFilter(std::shared_ptr chain, byte) : SaveFilter(chain) + NoCompSaveFilter(std::shared_ptr chain, uint8_t) : SaveFilter(chain) { } - void Write(byte *buf, size_t size) override + void Write(uint8_t *buf, size_t size) override { this->chain->Write(buf, size); } @@ -2381,7 +2381,7 @@ struct NoCompSaveFilter : SaveFilter { /** Filter using Zlib compression. */ struct ZlibLoadFilter : LoadFilter { z_stream z; ///< Stream state we are reading from. - byte fread_buf[MEMORY_CHUNK_SIZE]; ///< Buffer for reading from the file. + uint8_t fread_buf[MEMORY_CHUNK_SIZE]; ///< Buffer for reading from the file. /** * Initialise this filter. @@ -2399,7 +2399,7 @@ struct ZlibLoadFilter : LoadFilter { inflateEnd(&this->z); } - size_t Read(byte *buf, size_t size) override + size_t Read(uint8_t *buf, size_t size) override { this->z.next_out = buf; this->z.avail_out = (uint)size; @@ -2425,14 +2425,14 @@ struct ZlibLoadFilter : LoadFilter { /** Filter using Zlib compression. */ struct ZlibSaveFilter : SaveFilter { z_stream z; ///< Stream state we are writing to. - byte fwrite_buf[MEMORY_CHUNK_SIZE]; ///< Buffer for writing to the file. + uint8_t fwrite_buf[MEMORY_CHUNK_SIZE]; ///< Buffer for writing to the file. /** * Initialise this filter. * @param chain The next filter in this chain. * @param compression_level The requested level of compression. */ - ZlibSaveFilter(std::shared_ptr chain, byte compression_level) : SaveFilter(chain) + ZlibSaveFilter(std::shared_ptr chain, uint8_t compression_level) : SaveFilter(chain) { memset(&this->z, 0, sizeof(this->z)); if (deflateInit(&this->z, compression_level) != Z_OK) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "cannot initialize compressor"); @@ -2450,7 +2450,7 @@ struct ZlibSaveFilter : SaveFilter { * @param len Amount of bytes to write. * @param mode Mode for deflate. */ - void WriteLoop(byte *p, size_t len, int mode) + void WriteLoop(uint8_t *p, size_t len, int mode) { uint n; this->z.next_in = p; @@ -2478,7 +2478,7 @@ struct ZlibSaveFilter : SaveFilter { } while (this->z.avail_in || !this->z.avail_out); } - void Write(byte *buf, size_t size) override + void Write(uint8_t *buf, size_t size) override { this->WriteLoop(buf, size, 0); } @@ -2510,7 +2510,7 @@ static const lzma_stream _lzma_init = LZMA_STREAM_INIT; /** Filter without any compression. */ struct LZMALoadFilter : LoadFilter { lzma_stream lzma; ///< Stream state that we are reading from. - byte fread_buf[MEMORY_CHUNK_SIZE]; ///< Buffer for reading from the file. + uint8_t fread_buf[MEMORY_CHUNK_SIZE]; ///< Buffer for reading from the file. /** * Initialise this filter. @@ -2528,7 +2528,7 @@ struct LZMALoadFilter : LoadFilter { lzma_end(&this->lzma); } - size_t Read(byte *buf, size_t size) override + size_t Read(uint8_t *buf, size_t size) override { this->lzma.next_out = buf; this->lzma.avail_out = size; @@ -2553,14 +2553,14 @@ struct LZMALoadFilter : LoadFilter { /** Filter using LZMA compression. */ struct LZMASaveFilter : SaveFilter { lzma_stream lzma; ///< Stream state that we are writing to. - byte fwrite_buf[MEMORY_CHUNK_SIZE]; ///< Buffer for writing to the file. + uint8_t fwrite_buf[MEMORY_CHUNK_SIZE]; ///< Buffer for writing to the file. /** * Initialise this filter. * @param chain The next filter in this chain. * @param compression_level The requested level of compression. */ - LZMASaveFilter(std::shared_ptr chain, byte compression_level) : SaveFilter(chain), lzma(_lzma_init) + LZMASaveFilter(std::shared_ptr chain, uint8_t compression_level) : SaveFilter(chain), lzma(_lzma_init) { if (lzma_easy_encoder(&this->lzma, compression_level, LZMA_CHECK_CRC32) != LZMA_OK) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "cannot initialize compressor"); } @@ -2577,7 +2577,7 @@ struct LZMASaveFilter : SaveFilter { * @param len Amount of bytes to write. * @param action Action for lzma_code. */ - void WriteLoop(byte *p, size_t len, lzma_action action) + void WriteLoop(uint8_t *p, size_t len, lzma_action action) { size_t n; this->lzma.next_in = p; @@ -2597,7 +2597,7 @@ struct LZMASaveFilter : SaveFilter { } while (this->lzma.avail_in || !this->lzma.avail_out); } - void Write(byte *buf, size_t size) override + void Write(uint8_t *buf, size_t size) override { this->WriteLoop(buf, size, LZMA_RUN); } @@ -2621,11 +2621,11 @@ struct SaveLoadFormat { uint32_t tag; ///< the 4-letter tag by which it is identified in the savegame std::shared_ptr (*init_load)(std::shared_ptr chain); ///< Constructor for the load filter. - std::shared_ptr (*init_write)(std::shared_ptr chain, byte compression); ///< Constructor for the save filter. + std::shared_ptr (*init_write)(std::shared_ptr chain, uint8_t compression); ///< Constructor for the save filter. - byte min_compression; ///< the minimum compression level of this format - byte default_compression; ///< the default compression level of this format - byte max_compression; ///< the maximum compression level of this format + uint8_t min_compression; ///< the minimum compression level of this format + uint8_t default_compression; ///< the default compression level of this format + uint8_t max_compression; ///< the maximum compression level of this format }; /** The different saveload formats known/understood by OpenTTD. */ @@ -2665,7 +2665,7 @@ static const SaveLoadFormat _saveload_formats[] = { * @param compression_level Output for telling what compression level we want. * @return Pointer to SaveLoadFormat struct giving all characteristics of this type of savegame */ -static const SaveLoadFormat *GetSavegameFormat(const std::string &full_name, byte *compression_level) +static const SaveLoadFormat *GetSavegameFormat(const std::string &full_name, uint8_t *compression_level) { const SaveLoadFormat *def = lastof(_saveload_formats); @@ -2786,12 +2786,12 @@ static void SaveFileError() static SaveOrLoadResult SaveFileToDisk(bool threaded) { try { - byte compression; + uint8_t compression; const SaveLoadFormat *fmt = GetSavegameFormat(_savegame_format, &compression); /* We have written our stuff to memory, now write it to file! */ uint32_t hdr[2] = { fmt->tag, TO_BE32(SAVEGAME_VERSION << 16) }; - _sl.sf->Write((byte*)hdr, sizeof(hdr)); + _sl.sf->Write((uint8_t*)hdr, sizeof(hdr)); _sl.sf = fmt->init_write(_sl.sf, compression); _sl.dumper->Flush(_sl.sf); @@ -2902,7 +2902,7 @@ static SaveOrLoadResult DoLoad(std::shared_ptr reader, bool load_che } uint32_t hdr[2]; - if (_sl.lf->Read((byte*)hdr, sizeof(hdr)) != sizeof(hdr)) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE); + if (_sl.lf->Read((uint8_t*)hdr, sizeof(hdr)) != sizeof(hdr)) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE); /* see if we have any loader for this type. */ const SaveLoadFormat *fmt = _saveload_formats; diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index d270d10827..4349f038fb 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -674,7 +674,7 @@ enum VarTypes { typedef uint32_t VarType; /** Type of data saved. */ -enum SaveLoadType : byte { +enum SaveLoadType : uint8_t { SL_VAR = 0, ///< Save/load a variable. SL_REF = 1, ///< Save/load a reference. SL_STRUCT = 2, ///< Save/load a struct. @@ -1212,10 +1212,10 @@ inline constexpr bool SlCheckVarSize(SaveLoadType cmd, VarType type, size_t leng * @param minor Minor number of the version to check against. If \a minor is 0 or not specified, only the major number is checked. * @return Savegame version is earlier than the specified version. */ -inline bool IsSavegameVersionBefore(SaveLoadVersion major, byte minor = 0) +inline bool IsSavegameVersionBefore(SaveLoadVersion major, uint8_t minor = 0) { extern SaveLoadVersion _sl_version; - extern byte _sl_minor_version; + extern uint8_t _sl_minor_version; return _sl_version < major || (minor > 0 && _sl_version == major && _sl_minor_version < minor); } @@ -1278,8 +1278,8 @@ void SlSetLength(size_t length); size_t SlCalcObjMemberLength(const void *object, const SaveLoad &sld); size_t SlCalcObjLength(const void *object, const SaveLoadTable &slt); -byte SlReadByte(); -void SlWriteByte(byte b); +uint8_t SlReadByte(); +void SlWriteByte(uint8_t b); void SlGlobList(const SaveLoadTable &slt); void SlCopy(void *object, size_t length, VarType conv); diff --git a/src/saveload/saveload_filter.h b/src/saveload/saveload_filter.h index 445208f041..13702f34f5 100644 --- a/src/saveload/saveload_filter.h +++ b/src/saveload/saveload_filter.h @@ -34,7 +34,7 @@ struct LoadFilter { * @param len The number of bytes to read. * @return The number of actually read bytes. */ - virtual size_t Read(byte *buf, size_t len) = 0; + virtual size_t Read(uint8_t *buf, size_t len) = 0; /** * Reset this filter to read from the beginning of the file. @@ -78,7 +78,7 @@ struct SaveFilter { * @param buf The bytes to write. * @param len The number of bytes to write. */ - virtual void Write(byte *buf, size_t len) = 0; + virtual void Write(uint8_t *buf, size_t len) = 0; /** * Prepare everything to finish writing the savegame. @@ -95,7 +95,7 @@ struct SaveFilter { * @param compression_level The requested level of compression. * @tparam T The type of save filter to create. */ -template std::shared_ptr CreateSaveFilter(std::shared_ptr chain, byte compression_level) +template std::shared_ptr CreateSaveFilter(std::shared_ptr chain, uint8_t compression_level) { return std::make_shared(chain, compression_level); } diff --git a/src/saveload/strings_sl.cpp b/src/saveload/strings_sl.cpp index 3d9a315f0d..88f9ffd1cd 100644 --- a/src/saveload/strings_sl.cpp +++ b/src/saveload/strings_sl.cpp @@ -70,7 +70,7 @@ std::string CopyFromOldName(StringID id) std::ostringstream tmp; std::ostreambuf_iterator strto(tmp); for (; *strfrom != '\0'; strfrom++) { - char32_t c = (byte)*strfrom; + char32_t c = (uint8_t)*strfrom; /* Map from non-ISO8859-15 characters to UTF-8. */ switch (c) { diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 302af3c517..2ae6e6ed3f 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -249,7 +249,7 @@ static void CheckValidVehicles() } } -extern byte _age_cargo_skip_counter; // From misc_sl.cpp +extern uint8_t _age_cargo_skip_counter; // From misc_sl.cpp /** Called after load to update coordinates */ void AfterLoadVehicles(bool part_of_load) diff --git a/src/screenshot.cpp b/src/screenshot.cpp index 3fa8681021..6a591afcc2 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -99,7 +99,7 @@ static_assert(sizeof(BitmapInfoHeader) == 40); /** Format of palette data in BMP header */ struct RgbQuad { - byte blue, green, red, reserved; + uint8_t blue, green, red, reserved; }; static_assert(sizeof(RgbQuad) == 4); @@ -201,7 +201,7 @@ static bool MakeBMPImage(const char *name, ScreenshotCallback *callb, void *user /* Convert from 'native' 32bpp to BMP-like 24bpp. * Works for both big and little endian machines */ Colour *src = ((Colour *)buff) + n * w; - byte *dst = line; + uint8_t *dst = line; for (uint i = 0; i < w; i++) { dst[i * 3 ] = src[i].b; dst[i * 3 + 1] = src[i].g; @@ -407,21 +407,21 @@ static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *user /** Definition of a PCX file header. */ struct PcxHeader { - byte manufacturer; - byte version; - byte rle; - byte bpp; + uint8_t manufacturer; + uint8_t version; + uint8_t rle; + uint8_t bpp; uint32_t unused; uint16_t xmax, ymax; uint16_t hdpi, vdpi; - byte pal_small[16 * 3]; - byte reserved; - byte planes; + uint8_t pal_small[16 * 3]; + uint8_t reserved; + uint8_t planes; uint16_t pitch; uint16_t cpal; uint16_t width; uint16_t height; - byte filler[54]; + uint8_t filler[54]; }; static_assert(sizeof(PcxHeader) == 128); @@ -496,7 +496,7 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user /* write them to pcx */ for (i = 0; i != n; i++) { const uint8_t *bufp = buff + i * w; - byte runchar = bufp[0]; + uint8_t runchar = bufp[0]; uint runcount = 1; uint j; @@ -548,7 +548,7 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user } /* Palette is word-aligned, copy it to a temporary byte array */ - byte tmp[256 * 3]; + uint8_t tmp[256 * 3]; for (uint i = 0; i < 256; i++) { tmp[i * 3 + 0] = palette[i].r; @@ -818,7 +818,7 @@ static bool MakeLargeWorldScreenshot(ScreenshotType t, uint32_t width = 0, uint3 */ static void HeightmapCallback(void *, void *buffer, uint y, uint, uint n) { - byte *buf = (byte *)buffer; + uint8_t *buf = (uint8_t *)buffer; while (n > 0) { TileIndex ti = TileXY(Map::MaxX(), y); for (uint x = Map::MaxX(); true; x--) { @@ -1002,7 +1002,7 @@ static void MinimapScreenCallback(void *, void *buf, uint y, uint pitch, uint n) uint col = (Map::SizeX() - 1) - (i % pitch); TileIndex tile = TileXY(col, row); - byte val = GetSmallMapOwnerPixels(tile, GetTileType(tile), IncludeHeightmap::Never) & 0xFF; + uint8_t val = GetSmallMapOwnerPixels(tile, GetTileType(tile), IncludeHeightmap::Never) & 0xFF; uint32_t colour_buf = 0; colour_buf = (_cur_palette.palette[val].b << 0); diff --git a/src/script/api/script_bridgelist.cpp b/src/script/api/script_bridgelist.cpp index bc78e7bf36..711ba609c3 100644 --- a/src/script/api/script_bridgelist.cpp +++ b/src/script/api/script_bridgelist.cpp @@ -16,14 +16,14 @@ ScriptBridgeList::ScriptBridgeList() { - for (byte j = 0; j < MAX_BRIDGES; j++) { + for (uint8_t j = 0; j < MAX_BRIDGES; j++) { if (ScriptBridge::IsValidBridge(j)) this->AddItem(j); } } ScriptBridgeList_Length::ScriptBridgeList_Length(SQInteger length) { - for (byte j = 0; j < MAX_BRIDGES; j++) { + for (uint8_t j = 0; j < MAX_BRIDGES; j++) { if (ScriptBridge::IsValidBridge(j)) { if (length >= ScriptBridge::GetMinLength(j) && length <= ScriptBridge::GetMaxLength(j)) this->AddItem(j); } diff --git a/src/script/api/script_company.cpp b/src/script/api/script_company.cpp index 881af1ec05..842a51c9fc 100644 --- a/src/script/api/script_company.cpp +++ b/src/script/api/script_company.cpp @@ -32,7 +32,7 @@ { if (company == COMPANY_SELF) { if (!::Company::IsValidID(_current_company)) return COMPANY_INVALID; - return (CompanyID)((byte)_current_company); + return (CompanyID)((uint8_t)_current_company); } return ::Company::IsValidID(company) ? company : COMPANY_INVALID; diff --git a/src/script/api/script_company.hpp b/src/script/api/script_company.hpp index bfdc2a70c2..ab330296c6 100644 --- a/src/script/api/script_company.hpp +++ b/src/script/api/script_company.hpp @@ -99,7 +99,7 @@ public: * Types of expenses. * @api -ai */ - enum ExpensesType : byte { + enum ExpensesType : uint8_t { EXPENSES_CONSTRUCTION = ::EXPENSES_CONSTRUCTION, ///< Construction costs. EXPENSES_NEW_VEHICLES = ::EXPENSES_NEW_VEHICLES, ///< New vehicles. EXPENSES_TRAIN_RUN = ::EXPENSES_TRAIN_RUN, ///< Running costs trains. diff --git a/src/script/api/script_goal.hpp b/src/script/api/script_goal.hpp index d956d75ba7..acd27e387d 100644 --- a/src/script/api/script_goal.hpp +++ b/src/script/api/script_goal.hpp @@ -36,7 +36,7 @@ public: /** * Goal types that can be given to a goal. */ - enum GoalType : byte { + enum GoalType : uint8_t { /* Note: these values represent part of the in-game GoalType enum */ GT_NONE = ::GT_NONE, ///< Destination is not linked. GT_TILE = ::GT_TILE, ///< Destination is a tile. diff --git a/src/script/api/script_industry.cpp b/src/script/api/script_industry.cpp index 86f5a85e40..f55948d91b 100644 --- a/src/script/api/script_industry.cpp +++ b/src/script/api/script_industry.cpp @@ -262,7 +262,7 @@ auto company_id = ::Industry::Get(industry_id)->exclusive_supplier; if (!::Company::IsValidID(company_id)) return ScriptCompany::COMPANY_INVALID; - return (ScriptCompany::CompanyID)((byte)company_id); + return (ScriptCompany::CompanyID)((uint8_t)company_id); } /* static */ bool ScriptIndustry::SetExclusiveSupplier(IndustryID industry_id, ScriptCompany::CompanyID company_id) @@ -282,7 +282,7 @@ auto company_id = ::Industry::Get(industry_id)->exclusive_consumer; if (!::Company::IsValidID(company_id)) return ScriptCompany::COMPANY_INVALID; - return (ScriptCompany::CompanyID)((byte)company_id); + return (ScriptCompany::CompanyID)((uint8_t)company_id); } /* static */ bool ScriptIndustry::SetExclusiveConsumer(IndustryID industry_id, ScriptCompany::CompanyID company_id) diff --git a/src/script/api/script_league.hpp b/src/script/api/script_league.hpp index 7da4074a27..d57e5a484a 100644 --- a/src/script/api/script_league.hpp +++ b/src/script/api/script_league.hpp @@ -42,7 +42,7 @@ public: /** * The type of a link. */ - enum LinkType : byte { + enum LinkType : uint8_t { LINK_NONE = ::LT_NONE, ///< No link LINK_TILE = ::LT_TILE, ///< Link a tile LINK_INDUSTRY = ::LT_INDUSTRY, ///< Link an industry diff --git a/src/script/api/script_rail.hpp b/src/script/api/script_rail.hpp index da0edb04c0..b17b86d7a3 100644 --- a/src/script/api/script_rail.hpp +++ b/src/script/api/script_rail.hpp @@ -40,7 +40,7 @@ public: /** * Types of rail known to the game. */ - enum RailType : byte { + enum RailType : uint8_t { /* Note: these values represent part of the in-game static values */ RAILTYPE_INVALID = ::INVALID_RAILTYPE, ///< Invalid RailType. }; diff --git a/src/script/api/script_road.cpp b/src/script/api/script_road.cpp index 2be3dac282..bff546e8ce 100644 --- a/src/script/api/script_road.cpp +++ b/src/script/api/script_road.cpp @@ -245,13 +245,13 @@ static int32_t LookupWithBuildOnSlopes(::Slope slope, const Array<> &existing, i SLOPE_W, SLOPE_EW, SLOPE_SW, SLOPE_WSE, SLOPE_W, SLOPE_SW, SLOPE_EW, SLOPE_WSE, SLOPE_SW, SLOPE_WSE, SLOPE_WSE}; - static const byte base_rotates[] = {0, 0, 1, 0, 2, 0, 1, 0, 3, 3, 2, 3, 2, 2, 1}; + static const uint8_t base_rotates[] = {0, 0, 1, 0, 2, 0, 1, 0, 3, 3, 2, 3, 2, 2, 1}; if (slope >= (::Slope)lengthof(base_slopes)) { /* This slope is an invalid slope, so ignore it. */ return -1; } - byte base_rotate = base_rotates[slope]; + uint8_t base_rotate = base_rotates[slope]; slope = base_slopes[slope]; /* Some slopes don't need rotating, so return early when we know we do diff --git a/src/script/api/script_story_page.hpp b/src/script/api/script_story_page.hpp index 4e16876664..4213f5afe6 100644 --- a/src/script/api/script_story_page.hpp +++ b/src/script/api/script_story_page.hpp @@ -57,7 +57,7 @@ public: /** * Story page element types. */ - enum StoryPageElementType : byte { + enum StoryPageElementType : uint8_t { SPET_TEXT = ::SPET_TEXT, ///< An element that displays a block of text. SPET_LOCATION = ::SPET_LOCATION, ///< An element that displays a single line of text along with a button to view the referenced location. SPET_GOAL = ::SPET_GOAL, ///< An element that displays a goal. @@ -75,7 +75,7 @@ public: * Formatting and layout flags for story page buttons. * The SPBF_FLOAT_LEFT and SPBF_FLOAT_RIGHT flags can not be combined. */ - enum StoryPageButtonFlags : byte { + enum StoryPageButtonFlags : uint8_t { SPBF_NONE = ::SPBF_NONE, ///< No special formatting for button. SPBF_FLOAT_LEFT = ::SPBF_FLOAT_LEFT, ///< Button is placed to the left of the following paragraph. SPBF_FLOAT_RIGHT = ::SPBF_FLOAT_RIGHT, ///< Button is placed to the right of the following paragraph. @@ -84,7 +84,7 @@ public: /** * Mouse cursors usable by story page buttons. */ - enum StoryPageButtonCursor : byte { + enum StoryPageButtonCursor : uint8_t { SPBC_MOUSE = ::SPBC_MOUSE, SPBC_ZZZ = ::SPBC_ZZZ, SPBC_BUOY = ::SPBC_BUOY, @@ -146,7 +146,7 @@ public: * Colour codes usable for story page button elements. * Place a colour value in the lowest 8 bits of the \c reference parameter to the button. */ - enum StoryPageButtonColour : byte { + enum StoryPageButtonColour : uint8_t { SPBC_DARK_BLUE = ::COLOUR_DARK_BLUE, SPBC_PALE_GREEN = ::COLOUR_PALE_GREEN, SPBC_PINK = ::COLOUR_PINK, diff --git a/src/script/api/script_subsidy.cpp b/src/script/api/script_subsidy.cpp index 14b964878e..8d80ae4019 100644 --- a/src/script/api/script_subsidy.cpp +++ b/src/script/api/script_subsidy.cpp @@ -47,7 +47,7 @@ { if (!IsAwarded(subsidy_id)) return ScriptCompany::COMPANY_INVALID; - return (ScriptCompany::CompanyID)((byte)::Subsidy::Get(subsidy_id)->awarded); + return (ScriptCompany::CompanyID)((uint8_t)::Subsidy::Get(subsidy_id)->awarded); } /* static */ ScriptDate::Date ScriptSubsidy::GetExpireDate(SubsidyID subsidy_id) diff --git a/src/script/api/script_tile.cpp b/src/script/api/script_tile.cpp index 508ca201a7..e4286dd9f1 100644 --- a/src/script/api/script_tile.cpp +++ b/src/script/api/script_tile.cpp @@ -209,7 +209,7 @@ if (::IsTileType(tile, MP_HOUSE)) return ScriptCompany::COMPANY_INVALID; if (::IsTileType(tile, MP_INDUSTRY)) return ScriptCompany::COMPANY_INVALID; - return ScriptCompany::ResolveCompanyID((ScriptCompany::CompanyID)(byte)::GetTileOwner(tile)); + return ScriptCompany::ResolveCompanyID((ScriptCompany::CompanyID)(uint8_t)::GetTileOwner(tile)); } /* static */ bool ScriptTile::HasTransportType(TileIndex tile, TransportType transport_type) diff --git a/src/script/api/script_town.cpp b/src/script/api/script_town.cpp index 3b700c98f1..3a4e302667 100644 --- a/src/script/api/script_town.cpp +++ b/src/script/api/script_town.cpp @@ -294,7 +294,7 @@ EnforcePrecondition(false, layout >= ROAD_LAYOUT_ORIGINAL && layout <= ROAD_LAYOUT_RANDOM); } else { /* The layout parameter is ignored for AIs when custom layouts is disabled. */ - layout = (RoadLayout) (byte)_settings_game.economy.town_layout; + layout = (RoadLayout) (uint8_t)_settings_game.economy.town_layout; } std::string text; diff --git a/src/script/api/script_types.hpp b/src/script/api/script_types.hpp index d353cc291d..ca525a9ede 100644 --- a/src/script/api/script_types.hpp +++ b/src/script/api/script_types.hpp @@ -87,7 +87,7 @@ /* Define all types here, so we don't have to include the whole _type.h maze */ typedef uint BridgeType; ///< Internal name, not of any use for you. -typedef byte CargoID; ///< The ID of a cargo. +typedef uint8_t CargoID; ///< The ID of a cargo. class CommandCost; ///< The cost of a command. typedef uint16_t EngineID; ///< The ID of an engine. typedef uint16_t GoalID; ///< The ID of a goal. diff --git a/src/script/api/script_vehicle.cpp b/src/script/api/script_vehicle.cpp index 05d02a79bf..1fd0857bc4 100644 --- a/src/script/api/script_vehicle.cpp +++ b/src/script/api/script_vehicle.cpp @@ -353,7 +353,7 @@ if (!IsValidVehicle(vehicle_id)) return ScriptVehicle::VS_INVALID; const Vehicle *v = ::Vehicle::Get(vehicle_id); - byte vehstatus = v->vehstatus; + uint8_t vehstatus = v->vehstatus; if (vehstatus & ::VS_CRASHED) return ScriptVehicle::VS_CRASHED; if (v->breakdown_ctr != 0) return ScriptVehicle::VS_BROKEN; diff --git a/src/script/script_instance.cpp b/src/script/script_instance.cpp index 1371fbc821..e26d29cdf6 100644 --- a/src/script/script_instance.cpp +++ b/src/script/script_instance.cpp @@ -344,7 +344,7 @@ ScriptLogTypes::LogData &ScriptInstance::GetLogData() * - null: No data. */ -static byte _script_sl_byte; ///< Used as source/target by the script saveload code to store/load a single byte. +static uint8_t _script_sl_byte; ///< Used as source/target by the script saveload code to store/load a single byte. /** SaveLoad array that saves/loads exactly one byte. */ static const SaveLoad _script_byte[] = { @@ -386,7 +386,7 @@ static const SaveLoad _script_byte[] = { return false; } if (!test) { - _script_sl_byte = (byte)len; + _script_sl_byte = (uint8_t)len; SlObject(nullptr, _script_byte); SlCopy(const_cast(buf), len, SLE_CHAR); } diff --git a/src/settings.cpp b/src/settings.cpp index 0fc581443e..840196347c 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -307,7 +307,7 @@ static bool LoadIntList(const char *str, void *array, int nelems, VarType type) case SLE_VAR_BL: case SLE_VAR_I8: case SLE_VAR_U8: - for (i = 0; i != nitems; i++) ((byte*)array)[i] = items[i]; + for (i = 0; i != nitems; i++) ((uint8_t*)array)[i] = items[i]; break; case SLE_VAR_I16: @@ -337,7 +337,7 @@ static bool LoadIntList(const char *str, void *array, int nelems, VarType type) */ std::string ListSettingDesc::FormatValue(const void *object) const { - const byte *p = static_cast(GetVariableAddress(object, this->save)); + const uint8_t *p = static_cast(GetVariableAddress(object, this->save)); std::string result; for (size_t i = 0; i != this->save.length; i++) { diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 80a6f1056f..4caed877d7 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -820,7 +820,7 @@ struct GameOptionsWindow : Window { case WID_GO_BASE_SFX_VOLUME: case WID_GO_BASE_MUSIC_VOLUME: { - byte &vol = (widget == WID_GO_BASE_MUSIC_VOLUME) ? _settings_client.music.music_vol : _settings_client.music.effect_vol; + uint8_t &vol = (widget == WID_GO_BASE_MUSIC_VOLUME) ? _settings_client.music.music_vol : _settings_client.music.effect_vol; if (ClickSliderWidget(this->GetWidget(widget)->GetCurrentRect(), pt, 0, INT8_MAX, vol)) { if (widget == WID_GO_BASE_MUSIC_VOLUME) { MusicDriver::GetInstance()->SetVolume(vol); @@ -1224,13 +1224,13 @@ struct SettingFilter { /** Data structure describing a single setting in a tab */ struct BaseSettingEntry { - byte flags; ///< Flags of the setting entry. @see SettingEntryFlags - byte level; ///< Nesting level of this setting entry + uint8_t flags; ///< Flags of the setting entry. @see SettingEntryFlags + uint8_t level; ///< Nesting level of this setting entry BaseSettingEntry() : flags(0), level(0) {} virtual ~BaseSettingEntry() = default; - virtual void Init(byte level = 0); + virtual void Init(uint8_t level = 0); virtual void FoldAll() {} virtual void UnFoldAll() {} virtual void ResetAll() = 0; @@ -1268,13 +1268,13 @@ struct SettingEntry : BaseSettingEntry { SettingEntry(const char *name); - void Init(byte level = 0) override; + void Init(uint8_t level = 0) override; void ResetAll() override; uint Length() const override; uint GetMaxHelpHeight(int maxw) override; bool UpdateFilterState(SettingFilter &filter, bool force_visible) override; - void SetButtons(byte new_val); + void SetButtons(uint8_t new_val); protected: void DrawSetting(GameSettings *settings_ptr, int left, int right, int y, bool highlight) const override; @@ -1295,7 +1295,7 @@ struct SettingsContainer { return item; } - void Init(byte level = 0); + void Init(uint8_t level = 0); void ResetAll(); void FoldAll(); void UnFoldAll(); @@ -1318,7 +1318,7 @@ struct SettingsPage : BaseSettingEntry, SettingsContainer { SettingsPage(StringID title); - void Init(byte level = 0) override; + void Init(uint8_t level = 0) override; void ResetAll() override; void FoldAll() override; void UnFoldAll() override; @@ -1343,7 +1343,7 @@ protected: * Initialization of a setting entry * @param level Page nesting level of this entry */ -void BaseSettingEntry::Init(byte level) +void BaseSettingEntry::Init(uint8_t level) { this->level = level; } @@ -1453,7 +1453,7 @@ SettingEntry::SettingEntry(const char *name) * Initialization of a setting entry * @param level Page nesting level of this entry */ -void SettingEntry::Init(byte level) +void SettingEntry::Init(uint8_t level) { BaseSettingEntry::Init(level); this->setting = GetSettingFromName(this->name)->AsIntSetting(); @@ -1470,7 +1470,7 @@ void SettingEntry::ResetAll() * @param new_val New value for the button flags * @see SettingEntryFlags */ -void SettingEntry::SetButtons(byte new_val) +void SettingEntry::SetButtons(uint8_t new_val) { assert((new_val & ~SEF_BUTTONS_MASK) == 0); // Should not touch any flags outside the buttons this->flags = (this->flags & ~SEF_BUTTONS_MASK) | new_val; @@ -1627,7 +1627,7 @@ void SettingEntry::DrawSetting(GameSettings *settings_ptr, int left, int right, * Initialization of an entire setting page * @param level Nesting level of this page (internal variable, do not provide a value for it when calling) */ -void SettingsContainer::Init(byte level) +void SettingsContainer::Init(uint8_t level) { for (auto &it : this->entries) { it->Init(level); @@ -1785,7 +1785,7 @@ SettingsPage::SettingsPage(StringID title) * Initialization of an entire setting page * @param level Nesting level of this page (internal variable, do not provide a value for it when calling) */ -void SettingsPage::Init(byte level) +void SettingsPage::Init(uint8_t level) { BaseSettingEntry::Init(level); SettingsContainer::Init(level + 1); @@ -2907,7 +2907,7 @@ void ShowGameSettings() * @param clickable_left is the left button clickable? * @param clickable_right is the right button clickable? */ -void DrawArrowButtons(int x, int y, Colours button_colour, byte state, bool clickable_left, bool clickable_right) +void DrawArrowButtons(int x, int y, Colours button_colour, uint8_t state, bool clickable_left, bool clickable_right) { int colour = GetColourGradient(button_colour, SHADE_DARKER); Dimension dim = NWidgetScrollbar::GetHorizontalDimension(); diff --git a/src/settings_gui.h b/src/settings_gui.h index 335dd65285..b0ad28862f 100644 --- a/src/settings_gui.h +++ b/src/settings_gui.h @@ -18,7 +18,7 @@ /** Height of setting buttons */ #define SETTING_BUTTON_HEIGHT ((int)NWidgetScrollbar::GetHorizontalDimension().height) -void DrawArrowButtons(int x, int y, Colours button_colour, byte state, bool clickable_left, bool clickable_right); +void DrawArrowButtons(int x, int y, Colours button_colour, uint8_t state, bool clickable_left, bool clickable_right); void DrawDropDownButton(int x, int y, Colours button_colour, bool state, bool clickable); void DrawBoolButton(int x, int y, bool state, bool clickable); diff --git a/src/settings_type.h b/src/settings_type.h index 0ec5785d8b..12100ac9ec 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -246,11 +246,11 @@ struct SoundSettings { /** Settings related to music. */ struct MusicSettings { - byte playlist; ///< The playlist (number) to play - byte music_vol; ///< The requested music volume - byte effect_vol; ///< The requested effects volume - byte custom_1[33]; ///< The order of the first custom playlist - byte custom_2[33]; ///< The order of the second custom playlist + uint8_t playlist; ///< The playlist (number) to play + uint8_t music_vol; ///< The requested music volume + uint8_t effect_vol; ///< The requested effects volume + uint8_t custom_1[33]; ///< The order of the first custom playlist + uint8_t custom_2[33]; ///< The order of the second custom playlist bool playing; ///< Whether music is playing bool shuffle; ///< Whether to shuffle the music }; diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index c1bc6fb6b9..d674d4d919 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -467,8 +467,8 @@ static uint ShipAccelerate(Vehicle *v) const uint advance_speed = v->GetAdvanceSpeed(speed); const uint number_of_steps = (advance_speed + v->progress) / v->GetAdvanceDistance(); const uint remainder = (advance_speed + v->progress) % v->GetAdvanceDistance(); - assert(remainder <= std::numeric_limits::max()); - v->progress = static_cast(remainder); + assert(remainder <= std::numeric_limits::max()); + v->progress = static_cast(remainder); return number_of_steps; } @@ -556,8 +556,8 @@ static inline TrackBits GetAvailShipTracks(TileIndex tile, DiagDirection dir) /** Structure for ship sub-coordinate data for moving into a new tile via a Diagdir onto a Track. */ struct ShipSubcoordData { - byte x_subcoord; ///< New X sub-coordinate on the new tile - byte y_subcoord; ///< New Y sub-coordinate on the new tile + uint8_t x_subcoord; ///< New X sub-coordinate on the new tile + uint8_t y_subcoord; ///< New Y sub-coordinate on the new tile Direction dir; ///< New Direction to move in on the new track }; /** Ship sub-coordinate data for moving into a new tile via a Diagdir onto a Track. diff --git a/src/signal_func.h b/src/signal_func.h index 3521c43850..575ab5def6 100644 --- a/src/signal_func.h +++ b/src/signal_func.h @@ -19,9 +19,9 @@ * Maps a trackdir to the bit that stores its status in the map arrays, in the * direction along with the trackdir. */ -inline byte SignalAlongTrackdir(Trackdir trackdir) +inline uint8_t SignalAlongTrackdir(Trackdir trackdir) { - extern const byte _signal_along_trackdir[TRACKDIR_END]; + extern const uint8_t _signal_along_trackdir[TRACKDIR_END]; return _signal_along_trackdir[trackdir]; } @@ -29,9 +29,9 @@ inline byte SignalAlongTrackdir(Trackdir trackdir) * Maps a trackdir to the bit that stores its status in the map arrays, in the * direction against the trackdir. */ -inline byte SignalAgainstTrackdir(Trackdir trackdir) +inline uint8_t SignalAgainstTrackdir(Trackdir trackdir) { - extern const byte _signal_against_trackdir[TRACKDIR_END]; + extern const uint8_t _signal_against_trackdir[TRACKDIR_END]; return _signal_against_trackdir[trackdir]; } @@ -39,9 +39,9 @@ inline byte SignalAgainstTrackdir(Trackdir trackdir) * Maps a Track to the bits that store the status of the two signals that can * be present on the given track. */ -inline byte SignalOnTrack(Track track) +inline uint8_t SignalOnTrack(Track track) { - extern const byte _signal_on_track[TRACK_END]; + extern const uint8_t _signal_on_track[TRACK_END]; return _signal_on_track[track]; } diff --git a/src/signal_type.h b/src/signal_type.h index 294790fae7..c2cadd66ed 100644 --- a/src/signal_type.h +++ b/src/signal_type.h @@ -13,14 +13,14 @@ #include "core/enum_type.hpp" /** Variant of the signal, i.e. how does the signal look? */ -enum SignalVariant : byte { +enum SignalVariant : uint8_t { SIG_ELECTRIC = 0, ///< Light signal SIG_SEMAPHORE = 1, ///< Old-fashioned semaphore signal }; /** Type of signal, i.e. how does the signal behave? */ -enum SignalType : byte { +enum SignalType : uint8_t { SIGTYPE_BLOCK = 0, ///< block signal SIGTYPE_ENTRY = 1, ///< presignal block entry SIGTYPE_EXIT = 2, ///< presignal block exit diff --git a/src/slope_func.h b/src/slope_func.h index 2d78faea3b..7478512ee8 100644 --- a/src/slope_func.h +++ b/src/slope_func.h @@ -414,7 +414,7 @@ inline Foundation SpecialRailFoundation(Corner corner) */ inline uint SlopeToSpriteOffset(Slope s) { - extern const byte _slope_to_sprite_offset[32]; + extern const uint8_t _slope_to_sprite_offset[32]; return _slope_to_sprite_offset[s]; } diff --git a/src/slope_type.h b/src/slope_type.h index 1870db2272..fa67d073d6 100644 --- a/src/slope_type.h +++ b/src/slope_type.h @@ -45,7 +45,7 @@ enum Corner { * slopes would mean that it is not a steep slope as halftile * slopes only span one height level. */ -enum Slope : byte { +enum Slope : uint8_t { SLOPE_FLAT = 0x00, ///< a flat tile SLOPE_W = 0x01, ///< the west corner of the tile is raised SLOPE_S = 0x02, ///< the south corner of the tile is raised diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 83afc1516d..068881cb5d 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -406,7 +406,7 @@ static const AndOr _smallmap_vehicles_andor[] = { }; /** Mapping of tile type to importance of the tile (higher number means more interesting to show). */ -static const byte _tiletype_importance[] = { +static const uint8_t _tiletype_importance[] = { 2, // MP_CLEAR 8, // MP_RAILWAY 7, // MP_ROAD @@ -607,12 +607,12 @@ uint32_t GetSmallMapOwnerPixels(TileIndex tile, TileType t, IncludeHeightmap inc } /** Vehicle colours in #SMT_VEHICLES mode. Indexed by #VehicleType. */ -static const byte _vehicle_type_colours[6] = { +static const uint8_t _vehicle_type_colours[6] = { PC_RED, PC_YELLOW, PC_LIGHT_BLUE, PC_WHITE, PC_BLACK, PC_RED }; /** Types of legends in the #WID_SM_LEGEND widget. */ -enum SmallMapType : byte { +enum SmallMapType : uint8_t { SMT_CONTOUR, SMT_VEHICLES, SMT_INDUSTRY, @@ -972,7 +972,7 @@ protected: } /* Calculate pointer to pixel and the colour */ - byte colour = (this->map_type == SMT_VEHICLES) ? _vehicle_type_colours[v->type] : PC_WHITE; + uint8_t colour = (this->map_type == SMT_VEHICLES) ? _vehicle_type_colours[v->type] : PC_WHITE; /* And draw either one or two pixels depending on clipping */ blitter->SetPixel(dpi->dst_ptr, x, y, colour); diff --git a/src/sortlist_type.h b/src/sortlist_type.h index e0fd01c740..c0fc465525 100644 --- a/src/sortlist_type.h +++ b/src/sortlist_type.h @@ -29,12 +29,12 @@ DECLARE_ENUM_AS_BIT_SET(SortListFlags) /** Data structure describing how to show the list (what sort direction and criteria). */ struct Listing { bool order; ///< Ascending/descending - byte criteria; ///< Sorting criteria + uint8_t criteria; ///< Sorting criteria }; /** Data structure describing what to show in the list (filter criteria). */ struct Filtering { bool state; ///< Filter on/off - byte criteria; ///< Filtering criteria + uint8_t criteria; ///< Filtering criteria }; /** diff --git a/src/sound.cpp b/src/sound.cpp index 09b6e13cbc..78b4cc80de 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -194,10 +194,10 @@ static void StartSound(SoundID sound_id, float pan, uint volume) } -static const byte _vol_factor_by_zoom[] = {255, 255, 255, 190, 134, 87}; +static const uint8_t _vol_factor_by_zoom[] = {255, 255, 255, 190, 134, 87}; static_assert(lengthof(_vol_factor_by_zoom) == ZOOM_LVL_END); -static const byte _sound_base_vol[] = { +static const uint8_t _sound_base_vol[] = { 128, 90, 128, 128, 128, 128, 128, 128, 128, 90, 90, 128, 128, 128, 128, 128, 128, 128, 128, 80, 128, 128, 128, 128, @@ -210,7 +210,7 @@ static const byte _sound_base_vol[] = { 90, }; -static const byte _sound_idx[] = { +static const uint8_t _sound_idx[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, diff --git a/src/sound_type.h b/src/sound_type.h index 7113da9947..aa841059a9 100644 --- a/src/sound_type.h +++ b/src/sound_type.h @@ -19,7 +19,7 @@ struct SoundEntry { uint8_t channels; uint8_t volume; uint8_t priority; - byte grf_container_ver; ///< NewGRF container version if the sound is from a NewGRF. + uint8_t grf_container_ver; ///< NewGRF container version if the sound is from a NewGRF. }; /** diff --git a/src/sprite.h b/src/sprite.h index 9c6c1bca64..fe55acc1c6 100644 --- a/src/sprite.h +++ b/src/sprite.h @@ -26,9 +26,9 @@ struct DrawTileSeqStruct { int8_t delta_x; ///< \c 0x80 is sequence terminator int8_t delta_y; int8_t delta_z; ///< \c 0x80 identifies child sprites - byte size_x; - byte size_y; - byte size_z; + uint8_t size_x; + uint8_t size_y; + uint8_t size_z; PalSpriteID image; /** Make this struct a sequence terminator. */ @@ -40,13 +40,13 @@ struct DrawTileSeqStruct { /** Check whether this is a sequence terminator. */ bool IsTerminator() const { - return (byte)this->delta_x == 0x80; + return (uint8_t)this->delta_x == 0x80; } /** Check whether this is a parent sprite with a boundingbox. */ bool IsParentSprite() const { - return (byte)this->delta_z != 0x80; + return (uint8_t)this->delta_z != 0x80; } }; @@ -67,12 +67,12 @@ struct DrawTileSprites { struct DrawBuildingsTileStruct { PalSpriteID ground; PalSpriteID building; - byte subtile_x; - byte subtile_y; - byte width; - byte height; - byte dz; - byte draw_proc; // this allows to specify a special drawing procedure. + uint8_t subtile_x; + uint8_t subtile_y; + uint8_t width; + uint8_t height; + uint8_t dz; + uint8_t draw_proc; // this allows to specify a special drawing procedure. }; /** Iterate through all DrawTileSeqStructs in DrawTileSprites. */ diff --git a/src/spritecache.cpp b/src/spritecache.cpp index 0762e905bf..3c5ce15e6b 100644 --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -94,7 +94,7 @@ SpriteFile &OpenCachedSpriteFile(const std::string &filename, Subdirectory subdi struct MemBlock { size_t size; - byte data[]; + uint8_t data[]; }; static uint _sprite_lru_counter; @@ -110,7 +110,7 @@ static void CompactSpriteCache(); * @param num the amount of sprites to skip * @return true if the data could be correctly skipped. */ -bool SkipSpriteData(SpriteFile &file, byte type, uint16_t num) +bool SkipSpriteData(SpriteFile &file, uint8_t type, uint16_t num) { if (type & 2) { file.SkipBytes(num); @@ -419,10 +419,10 @@ static void *ReadRecolourSprite(SpriteFile &file, uint num) * GRFs which are the same as 257 byte recolour sprites, but with the last * 240 bytes zeroed. */ static const uint RECOLOUR_SPRITE_SIZE = 257; - byte *dest = (byte *)AllocSprite(std::max(RECOLOUR_SPRITE_SIZE, num)); + uint8_t *dest = (uint8_t *)AllocSprite(std::max(RECOLOUR_SPRITE_SIZE, num)); if (file.NeedsPaletteRemap()) { - byte *dest_tmp = new byte[std::max(RECOLOUR_SPRITE_SIZE, num)]; + uint8_t *dest_tmp = new uint8_t[std::max(RECOLOUR_SPRITE_SIZE, num)]; /* Only a few recolour sprites are less than 257 bytes */ if (num < RECOLOUR_SPRITE_SIZE) memset(dest_tmp, 0, RECOLOUR_SPRITE_SIZE); @@ -501,7 +501,7 @@ static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_ty s->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs; SpriteLoader::CommonPixel *src = sprite[ZOOM_LVL_NORMAL].data; - byte *dest = s->data; + uint8_t *dest = s->data; while (num-- > 0) { *dest++ = src->m; src++; @@ -530,7 +530,7 @@ static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_ty struct GrfSpriteOffset { size_t file_pos; - byte control_flags; + uint8_t control_flags; }; /** Map from sprite numbers to position in the GRF file. */ @@ -574,10 +574,10 @@ void ReadGRFSpriteOffsets(SpriteFile &file) prev_id = id; uint length = file.ReadDword(); if (length > 0) { - byte colour = file.ReadByte() & SCC_MASK; + uint8_t colour = file.ReadByte() & SCC_MASK; length--; if (length > 0) { - byte zoom = file.ReadByte(); + uint8_t zoom = file.ReadByte(); length--; if (colour != 0 && zoom == 0) { // ZOOM_LVL_OUT_4X (normal zoom) SetBit(offset.control_flags, (colour != SCC_PAL) ? SCCF_ALLOW_ZOOM_MIN_1X_32BPP : SCCF_ALLOW_ZOOM_MIN_1X_PAL); @@ -613,11 +613,11 @@ bool LoadNextSprite(int load_index, SpriteFile &file, uint file_sprite_id) /* Read sprite header. */ uint32_t num = file.GetContainerVersion() >= 2 ? file.ReadDword() : file.ReadWord(); if (num == 0) return false; - byte grf_type = file.ReadByte(); + uint8_t grf_type = file.ReadByte(); SpriteType type; void *data = nullptr; - byte control_flags = 0; + uint8_t control_flags = 0; if (grf_type == 0xFF) { /* Some NewGRF files have "empty" pseudo-sprites which are 1 * byte long. Catch these so the sprites won't be displayed. */ @@ -704,7 +704,7 @@ static_assert((sizeof(size_t) & (sizeof(size_t) - 1)) == 0); static inline MemBlock *NextBlock(MemBlock *block) { - return (MemBlock*)((byte*)block + (block->size & ~S_FREE_MASK)); + return (MemBlock*)((uint8_t*)block + (block->size & ~S_FREE_MASK)); } static size_t GetSpriteCacheUsage() @@ -879,7 +879,7 @@ void *AllocSprite(size_t mem_req) */ void *SimpleSpriteAlloc(size_t size) { - return MallocT(size); + return MallocT(size); } /** @@ -906,9 +906,9 @@ static void *HandleInvalidSpriteRequest(SpriteID sprite, SpriteType requested, S return GetRawSprite(sprite, sc->type, allocator); } - byte warning_level = sc->warned ? 6 : 0; + uint8_t warning_level = sc->warned ? 6 : 0; sc->warned = true; - Debug(sprite, warning_level, "Tried to load {} sprite #{} as a {} sprite. Probable cause: NewGRF interference", sprite_types[static_cast(available)], sprite, sprite_types[static_cast(requested)]); + Debug(sprite, warning_level, "Tried to load {} sprite #{} as a {} sprite. Probable cause: NewGRF interference", sprite_types[static_cast(available)], sprite, sprite_types[static_cast(requested)]); switch (requested) { case SpriteType::Normal: @@ -979,19 +979,19 @@ static void GfxInitSpriteCache() static uint last_alloc_attempt = 0; if (_spritecache_ptr == nullptr || (_allocated_sprite_cache_size != target_size && target_size != last_alloc_attempt)) { - delete[] reinterpret_cast(_spritecache_ptr); + delete[] reinterpret_cast(_spritecache_ptr); last_alloc_attempt = target_size; _allocated_sprite_cache_size = target_size; do { /* Try to allocate 50% more to make sure we do not allocate almost all available. */ - _spritecache_ptr = reinterpret_cast(new(std::nothrow) byte[_allocated_sprite_cache_size + _allocated_sprite_cache_size / 2]); + _spritecache_ptr = reinterpret_cast(new(std::nothrow) uint8_t[_allocated_sprite_cache_size + _allocated_sprite_cache_size / 2]); if (_spritecache_ptr != nullptr) { /* Allocation succeeded, but we wanted less. */ - delete[] reinterpret_cast(_spritecache_ptr); - _spritecache_ptr = reinterpret_cast(new byte[_allocated_sprite_cache_size]); + delete[] reinterpret_cast(_spritecache_ptr); + _spritecache_ptr = reinterpret_cast(new uint8_t[_allocated_sprite_cache_size]); } else if (_allocated_sprite_cache_size < 2 * 1024 * 1024) { UserError("Cannot allocate spritecache"); } else { diff --git a/src/spritecache.h b/src/spritecache.h index 10a9df4149..48af9a54e4 100644 --- a/src/spritecache.h +++ b/src/spritecache.h @@ -19,7 +19,7 @@ struct Sprite { uint16_t width; ///< Width of the sprite. int16_t x_offs; ///< Number of pixels to shift the sprite to the right. int16_t y_offs; ///< Number of pixels to shift the sprite downwards. - byte data[]; ///< Sprite data. + uint8_t data[]; ///< Sprite data. }; enum SpriteCacheCtrlFlags { @@ -50,10 +50,10 @@ inline const Sprite *GetSprite(SpriteID sprite, SpriteType type) return (Sprite*)GetRawSprite(sprite, type); } -inline const byte *GetNonSprite(SpriteID sprite, SpriteType type) +inline const uint8_t *GetNonSprite(SpriteID sprite, SpriteType type) { assert(type == SpriteType::Recolour); - return (byte*)GetRawSprite(sprite, type); + return (uint8_t*)GetRawSprite(sprite, type); } void GfxInitSpriteMem(); @@ -66,7 +66,7 @@ SpriteFile &OpenCachedSpriteFile(const std::string &filename, Subdirectory subdi void ReadGRFSpriteOffsets(SpriteFile &file); size_t GetGRFSpriteOffset(uint32_t id); bool LoadNextSprite(int load_index, SpriteFile &file, uint file_sprite_id); -bool SkipSpriteData(SpriteFile &file, byte type, uint16_t num); +bool SkipSpriteData(SpriteFile &file, uint8_t type, uint16_t num); void DupSprite(SpriteID old_spr, SpriteID new_spr); #endif /* SPRITECACHE_H */ diff --git a/src/spritecache_internal.h b/src/spritecache_internal.h index 5acf7b8937..5c49c54aed 100644 --- a/src/spritecache_internal.h +++ b/src/spritecache_internal.h @@ -28,7 +28,7 @@ struct SpriteCache { int16_t lru; SpriteType type; ///< In some cases a single sprite is misused by two NewGRFs. Once as real sprite and once as recolour sprite. If the recolour sprite gets into the cache it might be drawn as real sprite which causes enormous trouble. bool warned; ///< True iff the user has been warned about incorrect use of this sprite - byte control_flags; ///< Control flags, see SpriteCacheCtrlFlags + uint8_t control_flags; ///< Control flags, see SpriteCacheCtrlFlags }; inline bool IsMapgenSpriteID(SpriteID sprite) diff --git a/src/spriteloader/grf.cpp b/src/spriteloader/grf.cpp index f88182935a..a34e4e8428 100644 --- a/src/spriteloader/grf.cpp +++ b/src/spriteloader/grf.cpp @@ -22,7 +22,7 @@ #include "../safeguards.h" -extern const byte _palmap_w2d[]; +extern const uint8_t _palmap_w2d[]; /** * We found a corrupted sprite. This means that the sprite itself @@ -34,7 +34,7 @@ extern const byte _palmap_w2d[]; */ static bool WarnCorruptSprite(const SpriteFile &file, size_t file_pos, int line) { - static byte warning_level = 0; + static uint8_t warning_level = 0; if (warning_level == 0) { SetDParamStr(0, file.GetSimplifiedFilename()); ShowErrorMessage(STR_NEWGRF_ERROR_CORRUPT_SPRITE, INVALID_STRING_ID, WL_ERROR); @@ -57,7 +57,7 @@ static bool WarnCorruptSprite(const SpriteFile &file, size_t file_pos, int line) * @param container_format Container format of the GRF this sprite is in. * @return True if the sprite was successfully loaded. */ -bool DecodeSingleSprite(SpriteLoader::Sprite *sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, int64_t num, byte type, ZoomLevel zoom_lvl, byte colour_fmt, byte container_format) +bool DecodeSingleSprite(SpriteLoader::Sprite *sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, int64_t num, uint8_t type, ZoomLevel zoom_lvl, uint8_t colour_fmt, uint8_t container_format) { /* * Original sprite height was max 255 pixels, with 4x extra zoom => 1020 pixels. @@ -68,8 +68,8 @@ bool DecodeSingleSprite(SpriteLoader::Sprite *sprite, SpriteFile &file, size_t f */ if (num < 0 || num > 64 * 1024 * 1024) return WarnCorruptSprite(file, file_pos, __LINE__); - std::unique_ptr dest_orig(new byte[num]); - byte *dest = dest_orig.get(); + std::unique_ptr dest_orig(new uint8_t[num]); + uint8_t *dest = dest_orig.get(); const int64_t dest_size = num; /* Read the file, which has some kind of compression */ @@ -165,7 +165,7 @@ bool DecodeSingleSprite(SpriteLoader::Sprite *sprite, SpriteFile &file, size_t f if (colour_fmt & SCC_PAL) { switch (sprite_type) { case SpriteType::Normal: data->m = file.NeedsPaletteRemap() ? _palmap_w2d[*dest] : *dest; break; - case SpriteType::Font: data->m = std::min(*dest, 2u); break; + case SpriteType::Font: data->m = std::min(*dest, 2u); break; default: data->m = *dest; break; } /* Magic blue. */ @@ -183,7 +183,7 @@ bool DecodeSingleSprite(SpriteLoader::Sprite *sprite, SpriteFile &file, size_t f } if (dest_size > sprite_size) { - static byte warning_level = 0; + static uint8_t warning_level = 0; Debug(sprite, warning_level, "Ignoring {} unused extra bytes from the sprite from {} at position {}", dest_size - sprite_size, file.GetSimplifiedFilename(), file_pos); warning_level = 6; } @@ -191,7 +191,7 @@ bool DecodeSingleSprite(SpriteLoader::Sprite *sprite, SpriteFile &file, size_t f dest = dest_orig.get(); for (int i = 0; i < sprite->width * sprite->height; i++) { - byte *pixel = &dest[i * bpp]; + uint8_t *pixel = &dest[i * bpp]; if (colour_fmt & SCC_RGB) { sprite->data[i].r = *pixel++; @@ -202,7 +202,7 @@ bool DecodeSingleSprite(SpriteLoader::Sprite *sprite, SpriteFile &file, size_t f if (colour_fmt & SCC_PAL) { switch (sprite_type) { case SpriteType::Normal: sprite->data[i].m = file.NeedsPaletteRemap() ? _palmap_w2d[*pixel] : *pixel; break; - case SpriteType::Font: sprite->data[i].m = std::min(*pixel, 2u); break; + case SpriteType::Font: sprite->data[i].m = std::min(*pixel, 2u); break; default: sprite->data[i].m = *pixel; break; } /* Magic blue. */ @@ -225,7 +225,7 @@ uint8_t LoadSpriteV1(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, s /* Read the size and type */ int num = file.ReadWord(); - byte type = file.ReadByte(); + uint8_t type = file.ReadByte(); /* Type 0xFF indicates either a colourmap or some other non-sprite info; we do not handle them here */ if (type == 0xFF) return 0; @@ -252,7 +252,7 @@ uint8_t LoadSpriteV1(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, s return 0; } -uint8_t LoadSpriteV2(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, byte control_flags) +uint8_t LoadSpriteV2(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, uint8_t control_flags) { static const ZoomLevel zoom_lvl_map[6] = {ZOOM_LVL_OUT_4X, ZOOM_LVL_NORMAL, ZOOM_LVL_OUT_2X, ZOOM_LVL_OUT_8X, ZOOM_LVL_OUT_16X, ZOOM_LVL_OUT_32X}; @@ -268,13 +268,13 @@ uint8_t LoadSpriteV2(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, s do { int64_t num = file.ReadDword(); size_t start_pos = file.GetPos(); - byte type = file.ReadByte(); + uint8_t type = file.ReadByte(); /* Type 0xFF indicates either a colourmap or some other non-sprite info; we do not handle them here. */ if (type == 0xFF) return 0; - byte colour = type & SCC_MASK; - byte zoom = file.ReadByte(); + uint8_t colour = type & SCC_MASK; + uint8_t zoom = file.ReadByte(); bool is_wanted_colour_depth = (colour != 0 && (load_32bpp ? colour != SCC_PAL : colour == SCC_PAL)); bool is_wanted_zoom_lvl; @@ -350,7 +350,7 @@ uint8_t LoadSpriteV2(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, s return loaded_sprites; } -uint8_t SpriteLoaderGrf::LoadSprite(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, byte control_flags) +uint8_t SpriteLoaderGrf::LoadSprite(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, uint8_t control_flags) { if (this->container_ver >= 2) { return LoadSpriteV2(sprite, file, file_pos, sprite_type, load_32bpp, control_flags); diff --git a/src/spriteloader/grf.hpp b/src/spriteloader/grf.hpp index 338714401b..82b962d8b0 100644 --- a/src/spriteloader/grf.hpp +++ b/src/spriteloader/grf.hpp @@ -14,10 +14,10 @@ /** Sprite loader for graphics coming from a (New)GRF. */ class SpriteLoaderGrf : public SpriteLoader { - byte container_ver; + uint8_t container_ver; public: - SpriteLoaderGrf(byte container_ver) : container_ver(container_ver) {} - uint8_t LoadSprite(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, byte control_flags) override; + SpriteLoaderGrf(uint8_t container_ver) : container_ver(container_ver) {} + uint8_t LoadSprite(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, uint8_t control_flags) override; }; #endif /* SPRITELOADER_GRF_HPP */ diff --git a/src/spriteloader/sprite_file.cpp b/src/spriteloader/sprite_file.cpp index be7160628b..e5a701ecba 100644 --- a/src/spriteloader/sprite_file.cpp +++ b/src/spriteloader/sprite_file.cpp @@ -11,13 +11,13 @@ #include "sprite_file_type.hpp" /** Signature of a container version 2 GRF. */ -extern const byte _grf_cont_v2_sig[8] = {'G', 'R', 'F', 0x82, 0x0D, 0x0A, 0x1A, 0x0A}; +extern const uint8_t _grf_cont_v2_sig[8] = {'G', 'R', 'F', 0x82, 0x0D, 0x0A, 0x1A, 0x0A}; /** * Get the container version of the currently opened GRF file. * @return Container version of the GRF file or 0 if the file is corrupt/no GRF file. */ -static byte GetGRFContainerVersion(SpriteFile &file) +static uint8_t GetGRFContainerVersion(SpriteFile &file) { size_t pos = file.GetPos(); diff --git a/src/spriteloader/sprite_file_type.hpp b/src/spriteloader/sprite_file_type.hpp index b7492afade..cf2cbefa22 100644 --- a/src/spriteloader/sprite_file_type.hpp +++ b/src/spriteloader/sprite_file_type.hpp @@ -18,7 +18,7 @@ */ class SpriteFile : public RandomAccessFile { bool palette_remap; ///< Whether or not a remap of the palette is required for this file. - byte container_version; ///< Container format of the sprite file. + uint8_t container_version; ///< Container format of the sprite file. size_t content_begin; ///< The begin of the content of the sprite file, i.e. after the container metadata. public: SpriteFile(const std::string &filename, Subdirectory subdir, bool palette_remap); @@ -35,7 +35,7 @@ public: * Get the version number of container type used by the file. * @return The version. */ - byte GetContainerVersion() const { return this->container_version; } + uint8_t GetContainerVersion() const { return this->container_version; } /** * Seek to the begin of the content, i.e. the position just after the container version has been determined. diff --git a/src/spriteloader/spriteloader.hpp b/src/spriteloader/spriteloader.hpp index a835fbc5bb..afb7baa48c 100644 --- a/src/spriteloader/spriteloader.hpp +++ b/src/spriteloader/spriteloader.hpp @@ -80,7 +80,7 @@ public: * @param control_flags Control flags, see SpriteCacheCtrlFlags. * @return Bit mask of the zoom levels successfully loaded or 0 if no sprite could be loaded. */ - virtual uint8_t LoadSprite(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, byte control_flags) = 0; + virtual uint8_t LoadSprite(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, uint8_t control_flags) = 0; virtual ~SpriteLoader() = default; }; diff --git a/src/station.cpp b/src/station.cpp index 242de9fb50..efb767d50b 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -168,7 +168,7 @@ void BaseStation::PostDestructor(size_t) InvalidateWindowData(WC_SELECT_STATION, 0, 0); } -void BaseStation::SetRoadStopTileData(TileIndex tile, byte data, bool animation) +void BaseStation::SetRoadStopTileData(TileIndex tile, uint8_t data, bool animation) { for (RoadStopTileData &tile_data : this->custom_roadstop_tile_data) { if (tile_data.tile == tile) { diff --git a/src/station_base.h b/src/station_base.h index f3f19fc382..17e2147e21 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -214,7 +214,7 @@ struct GoodsEntry { NodeID node{INVALID_NODE}; ///< ID of node in link graph referring to this goods entry. LinkGraphID link_graph{INVALID_LINK_GRAPH}; ///< Link graph this station belongs to. - byte status{0}; ///< Status of this cargo, see #GoodsEntryStatus. + uint8_t status{0}; ///< Status of this cargo, see #GoodsEntryStatus. /** * Number of rating-intervals (up to 255) since the last vehicle tried to load this cargo. @@ -291,8 +291,8 @@ struct Airport : public TileArea { Airport() : TileArea(INVALID_TILE, 0, 0) {} uint64_t flags; ///< stores which blocks on the airport are taken. was 16 bit earlier on, then 32 - byte type; ///< Type of this airport, @see AirportTypes - byte layout; ///< Airport layout number. + uint8_t type; ///< Type of this airport, @see AirportTypes + uint8_t layout; ///< Airport layout number. Direction rotation; ///< How this airport is rotated. PersistentStorage *psa; ///< Persistent storage for NewGRF airports. @@ -463,10 +463,10 @@ public: StationHadVehicleOfType had_vehicle_of_type; - byte time_since_load; - byte time_since_unload; + uint8_t time_since_load; + uint8_t time_since_unload; - byte last_vehicle_type; + uint8_t last_vehicle_type; std::list loading_vehicles; GoodsEntry goods[NUM_CARGO]; ///< Goods at this station CargoTypes always_accepted; ///< Bitmask of always accepted cargo types (by houses, HQs, industry tiles when industry doesn't accept cargo) @@ -519,7 +519,7 @@ public: return IsAirportTile(tile) && GetStationIndex(tile) == this->index; } - uint32_t GetNewGRFVariable(const ResolverObject &object, byte variable, byte parameter, bool *available) const override; + uint32_t GetNewGRFVariable(const ResolverObject &object, uint8_t variable, uint8_t parameter, bool *available) const override; void GetTileArea(TileArea *ta, StationType type) const override; }; diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 0dfee76c83..9f79a1ef4d 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -877,7 +877,7 @@ static CommandCost CheckFlatLandAirport(AirportTileTableIterator tile_iter, DoCo * @param numtracks Number of platforms. * @return The cost in case of success, or an error code if it failed. */ -static CommandCost CheckFlatLandRailStation(TileArea tile_area, DoCommandFlag flags, Axis axis, StationID *station, RailType rt, std::vector &affected_vehicles, StationClassID spec_class, uint16_t spec_index, byte plat_len, byte numtracks) +static CommandCost CheckFlatLandRailStation(TileArea tile_area, DoCommandFlag flags, Axis axis, StationID *station, RailType rt, std::vector &affected_vehicles, StationClassID spec_class, uint16_t spec_index, uint8_t plat_len, uint8_t numtracks) { CommandCost cost(EXPENSES_CONSTRUCTION); int allowed_z = -1; @@ -1096,7 +1096,7 @@ CommandCost CanExpandRailStation(const BaseStation *st, TileArea &new_ta) return CommandCost(); } -static inline byte *CreateSingle(byte *layout, int n) +static inline uint8_t *CreateSingle(uint8_t *layout, int n) { int i = n; do *layout++ = 0; while (--i); @@ -1104,7 +1104,7 @@ static inline byte *CreateSingle(byte *layout, int n) return layout; } -static inline byte *CreateMulti(byte *layout, int n, byte b) +static inline uint8_t *CreateMulti(uint8_t *layout, int n, uint8_t b) { int i = n; do *layout++ = b; while (--i); @@ -1122,7 +1122,7 @@ static inline byte *CreateMulti(byte *layout, int n, byte b) * @param plat_len The length of the platforms. * @param statspec The specification of the station to (possibly) get the layout from. */ -void GetStationLayout(byte *layout, uint numtracks, uint plat_len, const StationSpec *statspec) +void GetStationLayout(uint8_t *layout, uint numtracks, uint plat_len, const StationSpec *statspec) { if (statspec != nullptr && statspec->layouts.size() >= plat_len && statspec->layouts[plat_len - 1].size() >= numtracks && @@ -1260,11 +1260,11 @@ static void RestoreTrainReservation(Train *v) * @param numtracks Number of platforms. * @return The cost in case of success, or an error code if it failed. */ -static CommandCost CalculateRailStationCost(TileArea tile_area, DoCommandFlag flags, Axis axis, StationID *station, RailType rt, std::vector &affected_vehicles, StationClassID spec_class, uint16_t spec_index, byte plat_len, byte numtracks) +static CommandCost CalculateRailStationCost(TileArea tile_area, DoCommandFlag flags, Axis axis, StationID *station, RailType rt, std::vector &affected_vehicles, StationClassID spec_class, uint16_t spec_index, uint8_t plat_len, uint8_t numtracks) { CommandCost cost(EXPENSES_CONSTRUCTION); bool length_price_ready = true; - byte tracknum = 0; + uint8_t tracknum = 0; for (TileIndex cur_tile : tile_area) { /* Clear the land below the station. */ CommandCost ret = CheckFlatLandRailStation(TileArea(cur_tile, 1, 1), flags, axis, station, rt, affected_vehicles, spec_class, spec_index, plat_len, numtracks); @@ -1309,7 +1309,7 @@ static CommandCost CalculateRailStationCost(TileArea tile_area, DoCommandFlag fl * @param adjacent allow stations directly adjacent to other stations. * @return the cost of this operation or an error */ -CommandCost CmdBuildRailStation(DoCommandFlag flags, TileIndex tile_org, RailType rt, Axis axis, byte numtracks, byte plat_len, StationClassID spec_class, uint16_t spec_index, StationID station_to_join, bool adjacent) +CommandCost CmdBuildRailStation(DoCommandFlag flags, TileIndex tile_org, RailType rt, Axis axis, uint8_t numtracks, uint8_t plat_len, StationClassID spec_class, uint16_t spec_index, StationID station_to_join, bool adjacent) { /* Does the authority allow this? */ CommandCost ret = CheckIfAuthorityAllowsNewStation(tile_org, flags); @@ -1383,7 +1383,7 @@ CommandCost CmdBuildRailStation(DoCommandFlag flags, TileIndex tile_org, RailTyp if (flags & DC_EXEC) { TileIndexDiff tile_delta; - byte numtracks_orig; + uint8_t numtracks_orig; Track track; st->train_station = new_location; @@ -1400,7 +1400,7 @@ CommandCost CmdBuildRailStation(DoCommandFlag flags, TileIndex tile_org, RailTyp tile_delta = (axis == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1)); track = AxisToTrack(axis); - std::vector layouts(numtracks * plat_len); + std::vector layouts(numtracks * plat_len); GetStationLayout(layouts.data(), numtracks, plat_len, statspec); numtracks_orig = numtracks; @@ -1412,7 +1412,7 @@ CommandCost CmdBuildRailStation(DoCommandFlag flags, TileIndex tile_org, RailTyp TileIndex tile = tile_track; int w = plat_len; do { - byte layout = layouts[layout_idx++]; + uint8_t layout = layouts[layout_idx++]; if (IsRailStationTile(tile) && HasStationReservation(tile)) { /* Check for trains having a reservation for this tile. */ Train *v = GetTrainForReservation(tile, AxisToTrack(GetRailStationAxis(tile))); @@ -1430,7 +1430,7 @@ CommandCost CmdBuildRailStation(DoCommandFlag flags, TileIndex tile_org, RailTyp /* Remove animation if overbuilding */ DeleteAnimatedTile(tile); - byte old_specindex = HasStationTileRail(tile) ? GetCustomStationSpecIndex(tile) : 0; + uint8_t old_specindex = HasStationTileRail(tile) ? GetCustomStationSpecIndex(tile) : 0; MakeRailStation(tile, st->owner, st->index, axis, layout & ~1, rt); /* Free the spec if we overbuild something */ DeallocateSpecFromStation(st, old_specindex); @@ -2384,7 +2384,7 @@ void UpdateAirportsNoise() * @param allow_adjacent allow airports directly adjacent to other airports. * @return the cost of this operation or an error */ -CommandCost CmdBuildAirport(DoCommandFlag flags, TileIndex tile, byte airport_type, byte layout, StationID station_to_join, bool allow_adjacent) +CommandCost CmdBuildAirport(DoCommandFlag flags, TileIndex tile, uint8_t airport_type, uint8_t layout, StationID station_to_join, bool allow_adjacent) { bool reuse = (station_to_join != NEW_STATION); if (!reuse) station_to_join = INVALID_STATION; @@ -2638,8 +2638,8 @@ static const TileIndexDiffC _dock_tileoffs_chkaround[] = { { 0, 0}, { 0, -1} }; -static const byte _dock_w_chk[4] = { 2, 1, 2, 1 }; -static const byte _dock_h_chk[4] = { 1, 2, 1, 2 }; +static const uint8_t _dock_w_chk[4] = { 2, 1, 2, 1 }; +static const uint8_t _dock_h_chk[4] = { 1, 2, 1, 2 }; /** * Build a dock/haven. @@ -2866,7 +2866,7 @@ static CommandCost RemoveDock(TileIndex tile, DoCommandFlag flags) #include "table/station_land.h" -const DrawTileSprites *GetStationTileLayout(StationType st, byte gfx) +const DrawTileSprites *GetStationTileLayout(StationType st, uint8_t gfx) { return &_station_display_datas[st][gfx]; } @@ -3597,9 +3597,9 @@ static bool StationHandleBigTick(BaseStation *st) return true; } -static inline void byte_inc_sat(byte *p) +static inline void byte_inc_sat(uint8_t *p) { - byte b = *p + 1; + uint8_t b = *p + 1; if (b != 0) *p = b; } @@ -3698,7 +3698,7 @@ static void UpdateStationRating(Station *st) int b = ge->last_speed - 85; if (b >= 0) rating += b >> 2; - byte waittime = ge->time_since_pickup; + uint8_t waittime = ge->time_since_pickup; if (st->last_vehicle_type == VEH_SHIP) waittime >>= 2; if (waittime <= 21) rating += 25; if (waittime <= 12) rating += 25; @@ -3715,7 +3715,7 @@ static void UpdateStationRating(Station *st) if (Company::IsValidID(st->owner) && HasBit(st->town->statues, st->owner)) rating += 26; - byte age = ge->last_age; + uint8_t age = ge->last_age; if (age < 3) rating += 10; if (age < 2) rating += 10; if (age < 1) rating += 13; @@ -3983,7 +3983,7 @@ static void StationHandleSmallTick(BaseStation *st) { if ((st->facilities & FACIL_WAYPOINT) != 0 || !st->IsInUse()) return; - byte b = st->delete_ctr + 1; + uint8_t b = st->delete_ctr + 1; if (b >= Ticks::STATION_RATING_TICKS) b = 0; st->delete_ctr = b; diff --git a/src/station_cmd.h b/src/station_cmd.h index ed3a117653..ef566af5fd 100644 --- a/src/station_cmd.h +++ b/src/station_cmd.h @@ -13,15 +13,15 @@ #include "command_type.h" #include "station_type.h" -enum StationClassID : byte; -enum RoadStopClassID : byte; +enum StationClassID : uint8_t; +enum RoadStopClassID : uint8_t; extern Town *AirportGetNearestTown(const struct AirportSpec *as, Direction rotation, TileIndex tile, TileIterator &&it, uint &mindist); extern uint8_t GetAirportNoiseLevelForDistance(const struct AirportSpec *as, uint distance); -CommandCost CmdBuildAirport(DoCommandFlag flags, TileIndex tile, byte airport_type, byte layout, StationID station_to_join, bool allow_adjacent); +CommandCost CmdBuildAirport(DoCommandFlag flags, TileIndex tile, uint8_t airport_type, uint8_t layout, StationID station_to_join, bool allow_adjacent); CommandCost CmdBuildDock(DoCommandFlag flags, TileIndex tile, StationID station_to_join, bool adjacent); -CommandCost CmdBuildRailStation(DoCommandFlag flags, TileIndex tile_org, RailType rt, Axis axis, byte numtracks, byte plat_len, StationClassID spec_class, uint16_t spec_index, StationID station_to_join, bool adjacent); +CommandCost CmdBuildRailStation(DoCommandFlag flags, TileIndex tile_org, RailType rt, Axis axis, uint8_t numtracks, uint8_t plat_len, StationClassID spec_class, uint16_t spec_index, StationID station_to_join, bool adjacent); CommandCost CmdRemoveFromRailStation(DoCommandFlag flags, TileIndex start, TileIndex end, bool keep_rail); CommandCost CmdBuildRoadStop(DoCommandFlag flags, TileIndex tile, uint8_t width, uint8_t length, RoadStopType stop_type, bool is_drive_through, DiagDirection ddir, RoadType rt, RoadStopClassID spec_class, uint16_t spec_index, StationID station_to_join, bool adjacent); CommandCost CmdRemoveRoadStop(DoCommandFlag flags, TileIndex tile, uint8_t width, uint8_t height, RoadStopType stop_type, bool remove_road); diff --git a/src/station_func.h b/src/station_func.h index cbc6a10920..b71130f5d8 100644 --- a/src/station_func.h +++ b/src/station_func.h @@ -33,7 +33,7 @@ void UpdateStationAcceptance(Station *st, bool show_msg); CargoTypes GetAcceptanceMask(const Station *st); CargoTypes GetEmptyMask(const Station *st); -const DrawTileSprites *GetStationTileLayout(StationType st, byte gfx); +const DrawTileSprites *GetStationTileLayout(StationType st, uint8_t gfx); void StationPickerDrawSprite(int x, int y, StationType st, RailType railtype, RoadType roadtype, int image); bool HasStationInUse(StationID station, bool include_company, CompanyID company); diff --git a/src/station_gui.cpp b/src/station_gui.cpp index bc081bd685..3215b72500 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -172,7 +172,7 @@ void CheckRedrawWaypointCoverage(const Window *) * @param amount Cargo amount * @param rating ratings data for that particular cargo */ -static void StationsWndShowStationRating(int left, int right, int y, CargoID type, uint amount, byte rating) +static void StationsWndShowStationRating(int left, int right, int y, CargoID type, uint amount, uint8_t rating) { static const uint units_full = 576; ///< number of units to show station as 'full' static const uint rating_full = 224; ///< rating needed so it is shown as 'full' @@ -220,7 +220,7 @@ protected: /* Runtime saved values */ struct FilterState { Listing last_sorting; - byte facilities; ///< types of stations of interest + uint8_t facilities; ///< types of stations of interest bool include_no_rating; ///< Whether we should include stations with no cargo rating. CargoTypes cargoes; ///< bitmap of cargo types to include }; @@ -332,8 +332,8 @@ protected: /** Sort stations by their rating */ static bool StationRatingMaxSorter(const Station * const &a, const Station * const &b, const CargoTypes &cargo_filter) { - byte maxr1 = 0; - byte maxr2 = 0; + uint8_t maxr1 = 0; + uint8_t maxr2 = 0; for (CargoID j : SetCargoBitIterator(cargo_filter)) { if (a->goods[j].HasRating()) maxr1 = std::max(maxr1, a->goods[j].rating); @@ -346,8 +346,8 @@ protected: /** Sort stations by their rating */ static bool StationRatingMinSorter(const Station * const &a, const Station * const &b, const CargoTypes &cargo_filter) { - byte minr1 = 255; - byte minr2 = 255; + uint8_t minr1 = 255; + uint8_t minr2 = 255; for (CargoID j : SetCargoBitIterator(cargo_filter)) { if (a->goods[j].HasRating()) minr1 = std::min(minr1, a->goods[j].rating); @@ -849,7 +849,7 @@ enum SortOrder { class CargoDataEntry; -enum class CargoSortType : byte { +enum class CargoSortType : uint8_t { AsGrouping, ///< by the same principle the entries are being grouped Count, ///< by amount of cargo StationString, ///< by station name diff --git a/src/station_map.h b/src/station_map.h index b255da7a05..34228e9ecf 100644 --- a/src/station_map.h +++ b/src/station_map.h @@ -17,7 +17,7 @@ #include "rail.h" #include "road.h" -typedef byte StationGfx; ///< Index of station graphics. @see _station_display_datas +typedef uint8_t StationGfx; ///< Index of station graphics. @see _station_display_datas /** * Get StationID from a tile @@ -534,7 +534,7 @@ inline bool IsCustomStationSpecIndex(Tile t) * @param specindex The new spec. * @pre HasStationTileRail(t) */ -inline void SetCustomStationSpecIndex(Tile t, byte specindex) +inline void SetCustomStationSpecIndex(Tile t, uint8_t specindex) { assert(HasStationTileRail(t)); t.m4() = specindex; @@ -570,7 +570,7 @@ inline bool IsCustomRoadStopSpecIndex(Tile t) * @param specindex The new spec. * @pre IsRoadStopTile(t) */ -inline void SetCustomRoadStopSpecIndex(Tile t, byte specindex) +inline void SetCustomRoadStopSpecIndex(Tile t, uint8_t specindex) { assert(IsRoadStopTile(t)); SB(t.m8(), 0, 6, specindex); @@ -594,7 +594,7 @@ inline uint GetCustomRoadStopSpecIndex(Tile t) * @param random_bits The random bits. * @pre IsTileType(t, MP_STATION) */ -inline void SetStationTileRandomBits(Tile t, byte random_bits) +inline void SetStationTileRandomBits(Tile t, uint8_t random_bits) { assert(IsTileType(t, MP_STATION)); SB(t.m3(), 4, 4, random_bits); @@ -606,7 +606,7 @@ inline void SetStationTileRandomBits(Tile t, byte random_bits) * @pre IsTileType(t, MP_STATION) * @return The random bits for this station tile. */ -inline byte GetStationTileRandomBits(Tile t) +inline uint8_t GetStationTileRandomBits(Tile t) { assert(IsTileType(t, MP_STATION)); return GB(t.m3(), 4, 4); @@ -621,7 +621,7 @@ inline byte GetStationTileRandomBits(Tile t) * @param section the StationGfx to be used for this tile * @param wc The water class of the station */ -inline void MakeStation(Tile t, Owner o, StationID sid, StationType st, byte section, WaterClass wc = WATER_CLASS_INVALID) +inline void MakeStation(Tile t, Owner o, StationID sid, StationType st, uint8_t section, WaterClass wc = WATER_CLASS_INVALID) { SetTileType(t, MP_STATION); SetTileOwner(t, o); @@ -646,7 +646,7 @@ inline void MakeStation(Tile t, Owner o, StationID sid, StationType st, byte sec * @param section the StationGfx to be used for this tile * @param rt the railtype of this tile */ -inline void MakeRailStation(Tile t, Owner o, StationID sid, Axis a, byte section, RailType rt) +inline void MakeRailStation(Tile t, Owner o, StationID sid, Axis a, uint8_t section, RailType rt) { MakeStation(t, o, sid, STATION_RAIL, section + a); SetRailType(t, rt); @@ -662,7 +662,7 @@ inline void MakeRailStation(Tile t, Owner o, StationID sid, Axis a, byte section * @param section the StationGfx to be used for this tile * @param rt the railtype of this tile */ -inline void MakeRailWaypoint(Tile t, Owner o, StationID sid, Axis a, byte section, RailType rt) +inline void MakeRailWaypoint(Tile t, Owner o, StationID sid, Axis a, uint8_t section, RailType rt) { MakeStation(t, o, sid, STATION_WAYPOINT, section + a); SetRailType(t, rt); @@ -715,7 +715,7 @@ inline void MakeDriveThroughRoadStop(Tile t, Owner station, Owner road, Owner tr * @param section the StationGfx to be used for this tile * @param wc the type of water on this tile */ -inline void MakeAirport(Tile t, Owner o, StationID sid, byte section, WaterClass wc) +inline void MakeAirport(Tile t, Owner o, StationID sid, uint8_t section, WaterClass wc) { MakeStation(t, o, sid, STATION_AIRPORT, section, wc); } diff --git a/src/station_type.h b/src/station_type.h index 345e900536..4e6968ac31 100644 --- a/src/station_type.h +++ b/src/station_type.h @@ -40,14 +40,14 @@ enum StationType { }; /** Types of RoadStops */ -enum RoadStopType : byte { +enum RoadStopType : uint8_t { ROADSTOP_BUS, ///< A standard stop for buses ROADSTOP_TRUCK, ///< A standard stop for trucks ROADSTOP_END, ///< End of valid types }; /** The facilities a station might be having */ -enum StationFacility : byte { +enum StationFacility : uint8_t { FACIL_NONE = 0, ///< The station has no facilities at all FACIL_TRAIN = 1 << 0, ///< Station with train station FACIL_TRUCK_STOP = 1 << 1, ///< Station with truck stops @@ -59,7 +59,7 @@ enum StationFacility : byte { DECLARE_ENUM_AS_BIT_SET(StationFacility) /** The vehicles that may have visited a station */ -enum StationHadVehicleOfType : byte { +enum StationHadVehicleOfType : uint8_t { HVOT_NONE = 0, ///< Station has seen no vehicles HVOT_TRAIN = 1 << 1, ///< Station has seen a train HVOT_BUS = 1 << 2, ///< Station has seen a bus diff --git a/src/stdafx.h b/src/stdafx.h index e486f04db0..096e8e6829 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -262,8 +262,6 @@ #define debug_inline inline #endif -typedef uint8_t byte; - /* This is already defined in unix, but not in QNX Neutrino (6.x) or Cygwin. */ #if (!defined(UNIX) && !defined(__HAIKU__)) || defined(__QNXNTO__) || defined(__CYGWIN__) typedef unsigned int uint; diff --git a/src/story.cpp b/src/story.cpp index 5a4f224410..44898ffab8 100644 --- a/src/story.cpp +++ b/src/story.cpp @@ -178,7 +178,7 @@ bool StoryPageButtonData::ValidateColour() const bool StoryPageButtonData::ValidateFlags() const { - byte flags = GB(this->referenced_id, 24, 8); + uint8_t flags = GB(this->referenced_id, 24, 8); /* Don't allow float left and right together */ if ((flags & SPBF_FLOAT_LEFT) && (flags & SPBF_FLOAT_RIGHT)) return false; /* Don't allow undefined flags */ @@ -195,7 +195,7 @@ bool StoryPageButtonData::ValidateCursor() const /** Verity that the data stored a valid VehicleType value */ bool StoryPageButtonData::ValidateVehicleType() const { - byte vehtype = GB(this->referenced_id, 16, 8); + uint8_t vehtype = GB(this->referenced_id, 16, 8); return vehtype == VEH_INVALID || vehtype < VEH_COMPANY_END; } diff --git a/src/story_base.h b/src/story_base.h index f7da7c9930..6978ad3a42 100644 --- a/src/story_base.h +++ b/src/story_base.h @@ -27,7 +27,7 @@ extern uint32_t _story_page_next_sort_value; /* * Each story page element is one of these types. */ -enum StoryPageElementType : byte { +enum StoryPageElementType : uint8_t { SPET_TEXT = 0, ///< A text element. SPET_LOCATION, ///< An element that references a tile along with a one-line text. SPET_GOAL, ///< An element that references a goal. @@ -39,7 +39,7 @@ enum StoryPageElementType : byte { }; /** Flags available for buttons */ -enum StoryPageButtonFlags : byte { +enum StoryPageButtonFlags : uint8_t { SPBF_NONE = 0, SPBF_FLOAT_LEFT = 1 << 0, SPBF_FLOAT_RIGHT = 1 << 1, @@ -47,7 +47,7 @@ enum StoryPageButtonFlags : byte { DECLARE_ENUM_AS_BIT_SET(StoryPageButtonFlags) /** Mouse cursors usable by story page buttons. */ -enum StoryPageButtonCursor : byte { +enum StoryPageButtonCursor : uint8_t { SPBC_MOUSE, SPBC_ZZZ, SPBC_BUOY, diff --git a/src/story_type.h b/src/story_type.h index 5df99c34c7..773c1a4404 100644 --- a/src/story_type.h +++ b/src/story_type.h @@ -16,7 +16,7 @@ typedef uint16_t StoryPageElementID; ///< ID of a story page element typedef uint16_t StoryPageID; ///< ID of a story page struct StoryPageElement; struct StoryPage; -enum StoryPageElementType : byte; +enum StoryPageElementType : uint8_t; static const StoryPageElementID INVALID_STORY_PAGE_ELEMENT = 0xFFFF; ///< Constant representing a non-existing story page element. static const StoryPageID INVALID_STORY_PAGE = 0xFFFF; ///< Constant representing a non-existing story page. diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index 6b65b60cfb..254d566af3 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -295,7 +295,7 @@ struct LanguageFileWriter : LanguageWriter, FileWriter { void WriteHeader(const LanguagePackHeader *header) override { - this->Write((const byte *)header, sizeof(*header)); + this->Write((const uint8_t *)header, sizeof(*header)); } void Finalise() override @@ -304,7 +304,7 @@ struct LanguageFileWriter : LanguageWriter, FileWriter { this->FileWriter::Finalise(); } - void Write(const byte *buffer, size_t length) override + void Write(const uint8_t *buffer, size_t length) override { this->output_stream.write((const char *)buffer, length); } diff --git a/src/strgen/strgen.h b/src/strgen/strgen.h index b7ff9ef4cb..99594b2019 100644 --- a/src/strgen/strgen.h +++ b/src/strgen/strgen.h @@ -118,7 +118,7 @@ struct LanguageWriter { * @param buffer The buffer to write. * @param length The amount of byte to write. */ - virtual void Write(const byte *buffer, size_t length) = 0; + virtual void Write(const uint8_t *buffer, size_t length) = 0; /** * Finalise writing the file. diff --git a/src/strgen/strgen_base.cpp b/src/strgen/strgen_base.cpp index e021a9b1ff..419ccad61b 100644 --- a/src/strgen/strgen_base.cpp +++ b/src/strgen/strgen_base.cpp @@ -175,12 +175,12 @@ static ParsedCommandStruct _cur_pcs; static int _cur_argidx; /** The buffer for writing a single string. */ -struct Buffer : std::vector { +struct Buffer : std::vector { /** * Convenience method for adding a byte. * @param value The value to add. */ - void AppendByte(byte value) + void AppendByte(uint8_t value) { this->push_back(value); } @@ -318,7 +318,7 @@ static int TranslateArgumentIdx(int arg, int offset = 0); static void EmitWordList(Buffer *buffer, const std::vector &words, uint nw) { buffer->AppendByte(nw); - for (uint i = 0; i < nw; i++) buffer->AppendByte((byte)strlen(words[i]) + 1); + for (uint i = 0; i < nw; i++) buffer->AppendByte((uint8_t)strlen(words[i]) + 1); for (uint i = 0; i < nw; i++) { for (uint j = 0; words[i][j] != '\0'; j++) buffer->AppendByte(words[i][j]); buffer->AppendByte(0); @@ -881,7 +881,7 @@ void LanguageWriter::WriteLength(uint length) buffer[offs++] = (length >> 8) | 0xC0; } buffer[offs++] = length & 0xFF; - this->Write((byte*)buffer, offs); + this->Write((uint8_t*)buffer, offs); } /** @@ -953,7 +953,7 @@ void LanguageWriter::WriteLang(const StringData &data) * <0x9E> * Each LEN is printed using 2 bytes in big endian order. */ buffer.AppendUtf8(SCC_SWITCH_CASE); - buffer.AppendByte((byte)ls->translated_cases.size()); + buffer.AppendByte((uint8_t)ls->translated_cases.size()); /* Write each case */ for (const Case &c : ls->translated_cases) { diff --git a/src/string.cpp b/src/string.cpp index 394a24fab0..ea77a74508 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -85,7 +85,7 @@ char *strecpy(char *dst, const char *src, const char *last) * @param data Array to format * @return Converted string. */ -std::string FormatArrayAsHex(std::span data) +std::string FormatArrayAsHex(std::span data) { std::string str; str.reserve(data.size() * 2 + 1); diff --git a/src/string_func.h b/src/string_func.h index d7ec094a64..6a2984e05d 100644 --- a/src/string_func.h +++ b/src/string_func.h @@ -19,7 +19,7 @@ char *strecpy(char *dst, const char *src, const char *last) NOACCESS(3); -std::string FormatArrayAsHex(std::span data); +std::string FormatArrayAsHex(std::span data); void StrMakeValidInPlace(char *str, const char *last, StringValidationSettings settings = SVS_REPLACE_WITH_QUESTION_MARK) NOACCESS(2); [[nodiscard]] std::string StrMakeValid(std::string_view str, StringValidationSettings settings = SVS_REPLACE_WITH_QUESTION_MARK); diff --git a/src/strings.cpp b/src/strings.cpp index c5a9547fac..0b40014476 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -690,11 +690,11 @@ static int DeterminePluralForm(int64_t count, int plural_form) static const char *ParseStringChoice(const char *b, uint form, StringBuilder &builder) { /* {Length of each string} {each string} */ - uint n = (byte)*b++; + uint n = (uint8_t)*b++; uint pos, i, mypos = 0; for (i = pos = 0; i != n; i++) { - uint len = (byte)*b++; + uint len = (uint8_t)*b++; if (i == form) mypos = pos; pos += len; } @@ -847,7 +847,7 @@ static const Units _units_time_years_or_minutes[] = { */ static const Units GetVelocityUnits(VehicleType type) { - byte setting = (type == VEH_SHIP || type == VEH_AIRCRAFT) ? _settings_game.locale.units_velocity_nautical : _settings_game.locale.units_velocity; + uint8_t setting = (type == VEH_SHIP || type == VEH_AIRCRAFT) ? _settings_game.locale.units_velocity_nautical : _settings_game.locale.units_velocity; assert(setting < lengthof(_units_velocity_calendar)); assert(setting < lengthof(_units_velocity_realtime)); @@ -1064,7 +1064,7 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara case SCC_GENDER_LIST: { // {G 0 Der Die Das} /* First read the meta data from the language file. */ - size_t offset = orig_offset + (byte)*str++; + size_t offset = orig_offset + (uint8_t)*str++; int gender = 0; if (!dry_run && args.GetTypeAtOffset(offset) != 0) { /* Now we need to figure out what text to resolve, i.e. @@ -1087,7 +1087,7 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara const char *s = buffer.c_str(); char32_t c = Utf8Consume(&s); /* Does this string have a gender, if so, set it */ - if (c == SCC_GENDER_INDEX) gender = (byte)s[0]; + if (c == SCC_GENDER_INDEX) gender = (uint8_t)s[0]; } str = ParseStringChoice(str, gender, builder); break; @@ -1106,30 +1106,30 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara case SCC_PLURAL_LIST: { // {P} int plural_form = *str++; // contains the plural form for this string - size_t offset = orig_offset + (byte)*str++; + size_t offset = orig_offset + (uint8_t)*str++; int64_t v = args.GetParam(offset); // contains the number that determines plural str = ParseStringChoice(str, DeterminePluralForm(v, plural_form), builder); break; } case SCC_ARG_INDEX: { // Move argument pointer - args.SetOffset(orig_offset + (byte)*str++); + args.SetOffset(orig_offset + (uint8_t)*str++); break; } case SCC_SET_CASE: { // {SET_CASE} /* This is a pseudo command, it's outputted when someone does {STRING.ack} * The modifier is added to all subsequent GetStringWithArgs that accept the modifier. */ - next_substr_case_index = (byte)*str++; + next_substr_case_index = (uint8_t)*str++; break; } case SCC_SWITCH_CASE: { // {Used to implement case switching} /* <0x9E> * Each LEN is printed using 2 bytes in big endian order. */ - uint num = (byte)*str++; + uint num = (uint8_t)*str++; while (num) { - if ((byte)str[0] == case_index) { + if ((uint8_t)str[0] == case_index) { /* Found the case, adjust str pointer and continue */ str += 3; break; @@ -1939,17 +1939,17 @@ bool ReadLanguagePack(const LanguageMetadata *lang) /* Fill offsets */ char *s = lang_pack->data; - len = (byte)*s++; + len = (uint8_t)*s++; for (uint i = 0; i < count; i++) { if (s + len >= end) return false; if (len >= 0xC0) { - len = ((len & 0x3F) << 8) + (byte)*s++; + len = ((len & 0x3F) << 8) + (uint8_t)*s++; if (s + len >= end) return false; } offs[i] = s; s += len; - len = (byte)*s; + len = (uint8_t)*s; *s++ = '\0'; // zero terminate the string } @@ -2041,7 +2041,7 @@ const char *GetCurrentLocale(const char *param); * @param newgrflangid NewGRF languages ID to check. * @return The language's metadata, or nullptr if it is not known. */ -const LanguageMetadata *GetLanguage(byte newgrflangid) +const LanguageMetadata *GetLanguage(uint8_t newgrflangid) { for (const LanguageMetadata &lang : _languages) { if (newgrflangid == lang.newgrflangid) return ⟨ diff --git a/src/subsidy_type.h b/src/subsidy_type.h index cc5435ad87..2f613c4e90 100644 --- a/src/subsidy_type.h +++ b/src/subsidy_type.h @@ -13,7 +13,7 @@ #include "core/enum_type.hpp" /** What part of a subsidy is something? */ -enum PartOfSubsidy : byte { +enum PartOfSubsidy : uint8_t { POS_NONE = 0, ///< nothing POS_SRC = 1 << 0, ///< bit 0 set -> town/industry is source of subsidised path POS_DST = 1 << 1, ///< bit 1 set -> town/industry is destination of subsidised path diff --git a/src/table/airport_movement.h b/src/table/airport_movement.h index 3ab00002f4..10e213718a 100644 --- a/src/table/airport_movement.h +++ b/src/table/airport_movement.h @@ -16,10 +16,10 @@ * Finite sTate mAchine --> FTA */ struct AirportFTAbuildup { - byte position; ///< The position that an airplane is at. - byte heading; ///< The current orders (eg. TAKEOFF, HANGAR, ENDLANDING, etc.). + uint8_t position; ///< The position that an airplane is at. + uint8_t heading; ///< The current orders (eg. TAKEOFF, HANGAR, ENDLANDING, etc.). uint64_t block; ///< The block this position is on on the airport (st->airport.flags). - byte next; ///< Next position from this position. + uint8_t next; ///< Next position from this position. }; /////////////////////////////////////////////////////////////////////// @@ -407,7 +407,7 @@ static const AirportMovingData _airport_moving_data_oilrig[9] = { /////////////////////////////////////////////////////////////////////// /////**********Movement Machine on Airports*********************/////// -static const byte _airport_entries_dummy[] = {0, 1, 2, 3}; +static const uint8_t _airport_entries_dummy[] = {0, 1, 2, 3}; static const AirportFTAbuildup _airport_fta_dummy[] = { { 0, TO_ALL, 0, 3}, { 1, TO_ALL, 0, 0}, @@ -419,8 +419,8 @@ static const AirportFTAbuildup _airport_fta_dummy[] = { /* First element of terminals array tells us how many depots there are (to know size of array) * this may be changed later when airports are moved to external file */ static const HangarTileTable _airport_depots_country[] = { {{3, 0}, DIR_SE, 0} }; -static const byte _airport_terminal_country[] = {1, 2}; -static const byte _airport_entries_country[] = {16, 15, 18, 17}; +static const uint8_t _airport_terminal_country[] = {1, 2}; +static const uint8_t _airport_entries_country[] = {16, 15, 18, 17}; static const AirportFTAbuildup _airport_fta_country[] = { { 0, HANGAR, NOTHING_block, 1 }, { 1, TERMGROUP, AIRPORT_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TERM1, TERM1_block, 2 }, { 1, TERM2, 0, 4 }, { 1, HELITAKEOFF, 0, 19 }, { 1, TO_ALL, 0, 6 }, @@ -451,8 +451,8 @@ static const AirportFTAbuildup _airport_fta_country[] = { }; static const HangarTileTable _airport_depots_commuter[] = { {{4, 0}, DIR_SE, 0} }; -static const byte _airport_terminal_commuter[] = { 1, 3 }; -static const byte _airport_entries_commuter[] = {22, 21, 24, 23}; +static const uint8_t _airport_terminal_commuter[] = { 1, 3 }; +static const uint8_t _airport_entries_commuter[] = {22, 21, 24, 23}; static const AirportFTAbuildup _airport_fta_commuter[] = { { 0, HANGAR, NOTHING_block, 1 }, { 0, HELITAKEOFF, TAXIWAY_BUSY_block, 1 }, { 0, TO_ALL, 0, 1 }, { 1, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TAKEOFF, 0, 11 }, { 1, TERM1, TAXIWAY_BUSY_block, 10 }, { 1, TERM2, TAXIWAY_BUSY_block, 10 }, { 1, TERM3, TAXIWAY_BUSY_block, 10 }, { 1, HELIPAD1, TAXIWAY_BUSY_block, 10 }, { 1, HELIPAD2, TAXIWAY_BUSY_block, 10 }, { 1, HELITAKEOFF, TAXIWAY_BUSY_block, 37 }, { 1, TO_ALL, 0, 0 }, @@ -502,8 +502,8 @@ static const AirportFTAbuildup _airport_fta_commuter[] = { }; static const HangarTileTable _airport_depots_city[] = { {{5, 0}, DIR_SE, 0} }; -static const byte _airport_terminal_city[] = { 1, 3 }; -static const byte _airport_entries_city[] = {26, 29, 27, 28}; +static const uint8_t _airport_terminal_city[] = { 1, 3 }; +static const uint8_t _airport_entries_city[] = {26, 29, 27, 28}; static const AirportFTAbuildup _airport_fta_city[] = { { 0, HANGAR, NOTHING_block, 1 }, { 0, TAKEOFF, OUT_WAY_block, 1 }, { 0, TO_ALL, 0, 1 }, { 1, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TERM2, 0, 6 }, { 1, TERM3, 0, 6 }, { 1, TO_ALL, 0, 7 }, // for all else, go to 7 @@ -543,8 +543,8 @@ static const AirportFTAbuildup _airport_fta_city[] = { }; static const HangarTileTable _airport_depots_metropolitan[] = { {{5, 0}, DIR_SE, 0} }; -static const byte _airport_terminal_metropolitan[] = { 1, 3 }; -static const byte _airport_entries_metropolitan[] = {20, 19, 22, 21}; +static const uint8_t _airport_terminal_metropolitan[] = { 1, 3 }; +static const uint8_t _airport_entries_metropolitan[] = {20, 19, 22, 21}; static const AirportFTAbuildup _airport_fta_metropolitan[] = { { 0, HANGAR, NOTHING_block, 1 }, { 1, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TERM2, 0, 6 }, { 1, TERM3, 0, 6 }, { 1, TO_ALL, 0, 7 }, // for all else, go to 7 @@ -582,8 +582,8 @@ static const AirportFTAbuildup _airport_fta_metropolitan[] = { }; static const HangarTileTable _airport_depots_international[] = { {{0, 3}, DIR_SE, 0}, {{6, 1}, DIR_SE, 1} }; -static const byte _airport_terminal_international[] = { 2, 3, 3 }; -static const byte _airport_entries_international[] = { 38, 37, 40, 39 }; +static const uint8_t _airport_terminal_international[] = { 2, 3, 3 }; +static const uint8_t _airport_entries_international[] = { 38, 37, 40, 39 }; static const AirportFTAbuildup _airport_fta_international[] = { { 0, HANGAR, NOTHING_block, 2 }, { 0, TERMGROUP, TERM_GROUP1_block, 0 }, { 0, TERMGROUP, TERM_GROUP2_ENTER1_block, 1 }, { 0, HELITAKEOFF, AIRPORT_ENTRANCE_block, 2 }, { 0, TO_ALL, 0, 2 }, { 1, HANGAR, NOTHING_block, 3 }, { 1, TERMGROUP, HANGAR2_AREA_block, 1 }, { 1, HELITAKEOFF, HANGAR2_AREA_block, 3 }, { 1, TO_ALL, 0, 3 }, @@ -649,8 +649,8 @@ static const AirportFTAbuildup _airport_fta_international[] = { /* intercontinental */ static const HangarTileTable _airport_depots_intercontinental[] = { {{0, 5}, DIR_SE, 0}, {{8, 4}, DIR_SE, 1} }; -static const byte _airport_terminal_intercontinental[] = { 2, 4, 4 }; -static const byte _airport_entries_intercontinental[] = { 44, 43, 46, 45 }; +static const uint8_t _airport_terminal_intercontinental[] = { 2, 4, 4 }; +static const uint8_t _airport_entries_intercontinental[] = { 44, 43, 46, 45 }; static const AirportFTAbuildup _airport_fta_intercontinental[] = { { 0, HANGAR, NOTHING_block, 2 }, { 0, TERMGROUP, HANGAR1_AREA_block | TERM_GROUP1_block, 0 }, { 0, TERMGROUP, HANGAR1_AREA_block | TERM_GROUP1_block, 1 }, { 0, TAKEOFF, HANGAR1_AREA_block | TERM_GROUP1_block, 2 }, { 0, TO_ALL, 0, 2 }, { 1, HANGAR, NOTHING_block, 3 }, { 1, TERMGROUP, HANGAR2_AREA_block, 1 }, { 1, TERMGROUP, HANGAR2_AREA_block, 0 }, { 1, TO_ALL, 0, 3 }, @@ -742,7 +742,7 @@ static const AirportFTAbuildup _airport_fta_intercontinental[] = { /* heliports, oilrigs don't have depots */ -static const byte _airport_entries_heliport[] = { 7, 7, 7, 7 }; +static const uint8_t _airport_entries_heliport[] = { 7, 7, 7, 7 }; static const AirportFTAbuildup _airport_fta_heliport[] = { { 0, HELIPAD1, HELIPAD1_block, 1 }, { 1, HELITAKEOFF, NOTHING_block, 0 }, // takeoff @@ -761,7 +761,7 @@ static const AirportFTAbuildup _airport_fta_heliport[] = { /* helidepots */ static const HangarTileTable _airport_depots_helidepot[] = { {{1, 0}, DIR_SE, 0} }; -static const byte _airport_entries_helidepot[] = { 4, 4, 4, 4 }; +static const uint8_t _airport_entries_helidepot[] = { 4, 4, 4, 4 }; static const AirportFTAbuildup _airport_fta_helidepot[] = { { 0, HANGAR, NOTHING_block, 1 }, { 1, TERMGROUP, HANGAR2_AREA_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, HELIPAD1, HELIPAD1_block, 14 }, { 1, HELITAKEOFF, 0, 15 }, { 1, TO_ALL, 0, 0 }, @@ -790,7 +790,7 @@ static const AirportFTAbuildup _airport_fta_helidepot[] = { /* helistation */ static const HangarTileTable _airport_depots_helistation[] = { {{0, 0}, DIR_SE, 0} }; -static const byte _airport_entries_helistation[] = { 25, 25, 25, 25 }; +static const uint8_t _airport_entries_helistation[] = { 25, 25, 25, 25 }; static const AirportFTAbuildup _airport_fta_helistation[] = { { 0, HANGAR, NOTHING_block, 8 }, { 0, HELIPAD1, 0, 1 }, { 0, HELIPAD2, 0, 1 }, { 0, HELIPAD3, 0, 1 }, { 0, HELITAKEOFF, 0, 1 }, { 0, TO_ALL, 0, 0 }, { 1, TERMGROUP, HANGAR2_AREA_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, HELITAKEOFF, 0, 3 }, { 1, TO_ALL, 0, 4 }, diff --git a/src/table/clear_land.h b/src/table/clear_land.h index bc6718c6b5..3101e27040 100644 --- a/src/table/clear_land.h +++ b/src/table/clear_land.h @@ -18,28 +18,28 @@ static const SpriteID _landscape_clear_sprites_rough[8] = { SPR_FLAT_ROUGH_LAND_2, }; -static const byte _fence_mod_by_tileh_sw[32] = { +static const uint8_t _fence_mod_by_tileh_sw[32] = { 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 4, 4, 0, 2, 4, 2, 0, 2, 4, 0, }; -static const byte _fence_mod_by_tileh_se[32] = { +static const uint8_t _fence_mod_by_tileh_se[32] = { 1, 1, 5, 5, 3, 3, 1, 1, 1, 1, 5, 5, 3, 3, 1, 1, 1, 1, 5, 5, 3, 3, 1, 5, 1, 1, 5, 5, 3, 3, 3, 1, }; -static const byte _fence_mod_by_tileh_ne[32] = { +static const uint8_t _fence_mod_by_tileh_ne[32] = { 0, 0, 0, 0, 4, 4, 4, 4, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 2, 2, 2, 2, 0, 2, 4, 0, }; -static const byte _fence_mod_by_tileh_nw[32] = { +static const uint8_t _fence_mod_by_tileh_nw[32] = { 1, 5, 1, 5, 1, 5, 1, 5, 3, 1, 3, 1, 3, 1, 3, 1, 1, 5, 1, 5, 1, 5, 1, 5, diff --git a/src/table/elrail_data.h b/src/table/elrail_data.h index 5b14eb2de3..33dd53493f 100644 --- a/src/table/elrail_data.h +++ b/src/table/elrail_data.h @@ -40,7 +40,7 @@ enum TileSource { static const uint NUM_TRACKS_AT_PCP = 6; /** Which PPPs are possible at all on a given PCP */ -static const byte AllowedPPPonPCP[DIAGDIR_END] = { +static const uint8_t AllowedPPPonPCP[DIAGDIR_END] = { 1 << DIR_N | 1 << DIR_E | 1 << DIR_SE | 1 << DIR_S | 1 << DIR_W | 1 << DIR_NW, 1 << DIR_N | 1 << DIR_NE | 1 << DIR_E | 1 << DIR_S | 1 << DIR_SW | 1 << DIR_W, 1 << DIR_N | 1 << DIR_E | 1 << DIR_SE | 1 << DIR_S | 1 << DIR_W | 1 << DIR_NW, @@ -52,7 +52,7 @@ static const byte AllowedPPPonPCP[DIAGDIR_END] = { * the following system is used: if you rotate the PCP so that it is in the * north, the eastern PPP belongs to the tile. */ -static const byte OwnedPPPonPCP[DIAGDIR_END] = { +static const uint8_t OwnedPPPonPCP[DIAGDIR_END] = { 1 << DIR_SE | 1 << DIR_S | 1 << DIR_SW | 1 << DIR_W, 1 << DIR_N | 1 << DIR_SW | 1 << DIR_W | 1 << DIR_NW, 1 << DIR_N | 1 << DIR_NE | 1 << DIR_E | 1 << DIR_NW, @@ -76,7 +76,7 @@ static const DiagDirection PCPpositions[TRACK_END][2] = { * which are not on either end of the track are fully preferred. * @see PCPpositions */ -static const byte PreferredPPPofTrackAtPCP[TRACK_END][DIAGDIR_END] = { +static const uint8_t PreferredPPPofTrackAtPCP[TRACK_END][DIAGDIR_END] = { { // X 1 << DIR_NE | 1 << DIR_SE | 1 << DIR_NW, // NE PCP_NOT_ON_TRACK, // SE @@ -119,7 +119,7 @@ static const byte PreferredPPPofTrackAtPCP[TRACK_END][DIAGDIR_END] = { * so there are certain tiles which we ignore. A straight line is found if * we have exactly two PPPs. */ -static const byte IgnoredPCP[NUM_IGNORE_GROUPS][TLG_END][DIAGDIR_END] = { +static const uint8_t IgnoredPCP[NUM_IGNORE_GROUPS][TLG_END][DIAGDIR_END] = { { // Ignore group 1, X and Y tracks { // X even, Y even IGNORE_NONE, @@ -194,7 +194,7 @@ static const byte IgnoredPCP[NUM_IGNORE_GROUPS][TLG_END][DIAGDIR_END] = { #undef NO_IGNORE /** Which pylons can definitely NOT be built */ -static const byte DisallowedPPPofTrackAtPCP[TRACK_END][DIAGDIR_END] = { +static const uint8_t DisallowedPPPofTrackAtPCP[TRACK_END][DIAGDIR_END] = { {1 << DIR_SW | 1 << DIR_NE, 0, 1 << DIR_SW | 1 << DIR_NE, 0 }, // X {0, 1 << DIR_NW | 1 << DIR_SE, 0, 1 << DIR_NW | 1 << DIR_SE}, // Y {1 << DIR_W | 1 << DIR_E, 0, 0, 1 << DIR_W | 1 << DIR_E }, // UPPER diff --git a/src/table/industry_land.h b/src/table/industry_land.h index c0c50fa7d5..a8cae114c7 100644 --- a/src/table/industry_land.h +++ b/src/table/industry_land.h @@ -17,9 +17,9 @@ */ struct DrawIndustryAnimationStruct { int x; ///< coordinate x of the first image offset - byte image_1; ///< image offset 1 - byte image_2; ///< image offset 2 - byte image_3; ///< image offset 3 + uint8_t image_1; ///< image offset 1 + uint8_t image_2; ///< image offset 2 + uint8_t image_3; ///< image offset 3 }; /** @@ -27,8 +27,8 @@ struct DrawIndustryAnimationStruct { * industries animations */ struct DrawIndustryCoordinates { - byte x; ///< coordinate x of the pair - byte y; ///< coordinate y of the pair + uint8_t x; ///< coordinate x of the pair + uint8_t y; ///< coordinate y of the pair }; /** @@ -924,7 +924,7 @@ static const DrawIndustryAnimationStruct _industry_anim_offs_toys[] = { #undef MD /* this is ONLY used for Toffee Quarry*/ -static const byte _industry_anim_offs_toffee[] = { +static const uint8_t _industry_anim_offs_toffee[] = { 255, 0, 0, 0, 2, 4, 6, 8, 10, 9, 7, 5, 3, 1, 255, 0, 0, 0, 2, 4, 6, 8, 10, 9, 7, 5, 3, 1, 255, 0, @@ -935,7 +935,7 @@ static const byte _industry_anim_offs_toffee[] = { }; /* this is ONLY used for the Bubble Generator*/ -static const byte _industry_anim_offs_bubbles[] = { +static const uint8_t _industry_anim_offs_bubbles[] = { 68, 69, 71, 74, 77, 80, 83, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 85, 84, 83, 82, 81, 80, 79, 78, diff --git a/src/table/palette_convert.h b/src/table/palette_convert.h index 0a3e3d4a4e..2a4ed36dda 100644 --- a/src/table/palette_convert.h +++ b/src/table/palette_convert.h @@ -8,7 +8,7 @@ /** @file palette_convert.h Translation tables from one GRF to another GRF. */ /** Converting from the Windows palette to the DOS palette */ -extern const byte _palmap_w2d[] = { +extern const uint8_t _palmap_w2d[] = { 0, 1, 2, 3, 4, 5, 6, 7, // 0..7 8, 9, 10, 11, 12, 13, 14, 15, // 8..15 16, 17, 18, 19, 20, 21, 22, 23, // 16..23 @@ -44,7 +44,7 @@ extern const byte _palmap_w2d[] = { }; /** Converting from the DOS palette to the Windows palette */ -static const byte _palmap_d2w[] = { +static const uint8_t _palmap_d2w[] = { 0, 215, 216, 136, 88, 106, 32, 33, // 0..7 40, 245, 10, 11, 12, 13, 14, 15, // 8..15 16, 17, 18, 19, 20, 21, 22, 23, // 16..23 diff --git a/src/table/roadveh_movement.h b/src/table/roadveh_movement.h index bb4c5df3b2..809a973ee8 100644 --- a/src/table/roadveh_movement.h +++ b/src/table/roadveh_movement.h @@ -1084,7 +1084,7 @@ static const RoadDriveEntry * const _road_road_drive_data[] = { }; /** Table of road stop stop frames, when to stop at a road stop. */ -extern const byte _road_stop_stop_frame[] = { +extern const uint8_t _road_stop_stop_frame[] = { /* Duplicated left and right because of "entered stop" bit */ 20, 20, 16, 16, 20, 20, 16, 16, 19, 19, 15, 15, 19, 19, 15, 15, diff --git a/src/table/string_colours.h b/src/table/string_colours.h index 3af980bae4..cc6347d56b 100644 --- a/src/table/string_colours.h +++ b/src/table/string_colours.h @@ -8,7 +8,7 @@ /** @file string_colours.h The colour translation of GRF's strings. */ /** Colour mapping for #TextColour. */ -static const byte _string_colourmap[17] = { +static const uint8_t _string_colourmap[17] = { 150, // TC_BLUE 12, // TC_SILVER 189, // TC_GOLD diff --git a/src/table/train_sprites.h b/src/table/train_sprites.h index 5811ec7f32..36dfba1785 100644 --- a/src/table/train_sprites.h +++ b/src/table/train_sprites.h @@ -22,7 +22,7 @@ static const SpriteID _engine_sprite_base[] = { /* For how many directions do we have sprites? (8 or 4; if 4, the other 4 * directions are symmetric. */ -static const byte _engine_sprite_and[] = { +static const uint8_t _engine_sprite_and[] = { 7, 7, 7, 7, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 7, 7, 3, 7, 3, 7, 7, 7, @@ -36,7 +36,7 @@ static const byte _engine_sprite_and[] = { }; /* Non-zero for multihead trains. */ -static const byte _engine_sprite_add[] = { +static const uint8_t _engine_sprite_add[] = { 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 4, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 0, @@ -50,7 +50,7 @@ static const byte _engine_sprite_add[] = { }; -static const byte _wagon_full_adder[] = { +static const uint8_t _wagon_full_adder[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, diff --git a/src/table/tree_land.h b/src/table/tree_land.h index b64365f861..6769066477 100644 --- a/src/table/tree_land.h +++ b/src/table/tree_land.h @@ -10,8 +10,8 @@ #ifndef TREE_LAND_H #define TREE_LAND_H -static const byte _tree_base_by_landscape[4] = {0, 12, 20, 32}; -static const byte _tree_count_by_landscape[4] = {12, 8, 12, 9}; +static const uint8_t _tree_base_by_landscape[4] = {0, 12, 20, 32}; +static const uint8_t _tree_count_by_landscape[4] = {12, 8, 12, 9}; struct TreePos { uint8_t x; diff --git a/src/table/unicode.h b/src/table/unicode.h index 0f978b4756..82bda7221c 100644 --- a/src/table/unicode.h +++ b/src/table/unicode.h @@ -9,10 +9,10 @@ struct DefaultUnicodeMapping { char32_t code; ///< Unicode value - byte key; ///< Character index of sprite + uint8_t key; ///< Character index of sprite }; -static const byte CLRA = 0; ///< Identifier to clear all glyphs at this codepoint +static const uint8_t CLRA = 0; ///< Identifier to clear all glyphs at this codepoint /* Default unicode mapping table for sprite based glyphs. * This table allows us use unicode characters even though the glyphs don't diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp index 61751ec06a..6da19b9037 100644 --- a/src/terraform_gui.cpp +++ b/src/terraform_gui.cpp @@ -388,7 +388,7 @@ Window *ShowTerraformToolbar(Window *link) return w; } -static byte _terraform_size = 1; +static uint8_t _terraform_size = 1; /** * Raise/Lower a bigger chunk of land at the same time in the editor. When diff --git a/src/tests/string_func.cpp b/src/tests/string_func.cpp index cc5b624250..6086cad075 100644 --- a/src/tests/string_func.cpp +++ b/src/tests/string_func.cpp @@ -338,9 +338,9 @@ TEST_CASE("StrEndsWithIgnoreCase - std::string_view") TEST_CASE("FormatArrayAsHex") { - CHECK(FormatArrayAsHex(std::array{}) == ""); - CHECK(FormatArrayAsHex(std::array{0x12}) == "12"); - CHECK(FormatArrayAsHex(std::array{0x13, 0x38, 0x42, 0xAF}) == "133842AF"); + CHECK(FormatArrayAsHex(std::array{}) == ""); + CHECK(FormatArrayAsHex(std::array{0x12}) == "12"); + CHECK(FormatArrayAsHex(std::array{0x13, 0x38, 0x42, 0xAF}) == "133842AF"); } TEST_CASE("ConvertHexToBytes") diff --git a/src/textbuf.cpp b/src/textbuf.cpp index 60b839e326..1c94f74f1c 100644 --- a/src/textbuf.cpp +++ b/src/textbuf.cpp @@ -177,7 +177,7 @@ bool Textbuf::InsertString(const char *str, bool marked, const char *caret, cons for (const char *ptr = str; (c = Utf8Consume(&ptr)) != '\0';) { if (!IsValidChar(c, this->afilter)) break; - byte len = Utf8CharLen(c); + uint8_t len = Utf8CharLen(c); if (this->bytes + bytes + len > this->max_bytes) break; if (this->chars + chars + 1 > this->max_chars) break; diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index 018c1c4f3e..5976fff1b1 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -664,10 +664,10 @@ void TextfileWindow::ScrollToLine(size_t line) * When decompressing fails, *bufp is set to nullptr and *sizep to 0. The * compressed buffer passed in is still freed in this case. */ -static void Gunzip(byte **bufp, size_t *sizep) +static void Gunzip(uint8_t **bufp, size_t *sizep) { static const int BLOCKSIZE = 8192; - byte *buf = nullptr; + uint8_t *buf = nullptr; size_t alloc_size = 0; z_stream z; int res; @@ -720,10 +720,10 @@ static void Gunzip(byte **bufp, size_t *sizep) * When decompressing fails, *bufp is set to nullptr and *sizep to 0. The * compressed buffer passed in is still freed in this case. */ -static void Xunzip(byte **bufp, size_t *sizep) +static void Xunzip(uint8_t **bufp, size_t *sizep) { static const int BLOCKSIZE = 8192; - byte *buf = nullptr; + uint8_t *buf = nullptr; size_t alloc_size = 0; lzma_stream z = LZMA_STREAM_INIT; int res; @@ -789,12 +789,12 @@ static void Xunzip(byte **bufp, size_t *sizep) #if defined(WITH_ZLIB) /* In-place gunzip */ - if (textfile.ends_with(".gz")) Gunzip((byte**)&buf, &filesize); + if (textfile.ends_with(".gz")) Gunzip((uint8_t**)&buf, &filesize); #endif #if defined(WITH_LIBLZMA) /* In-place xunzip */ - if (textfile.ends_with(".xz")) Xunzip((byte**)&buf, &filesize); + if (textfile.ends_with(".xz")) Xunzip((uint8_t**)&buf, &filesize); #endif if (buf == nullptr) return; diff --git a/src/tgp.cpp b/src/tgp.cpp index 5a66c69de8..d250f252d0 100644 --- a/src/tgp.cpp +++ b/src/tgp.cpp @@ -579,7 +579,7 @@ static void HeightMapCurves(uint level) float factor = sqrt((float)_height_map.size_x / (float)_height_map.size_y); uint sx = Clamp((int)(((1 << level) * factor) + 0.5), 1, 128); uint sy = Clamp((int)(((1 << level) / factor) + 0.5), 1, 128); - std::vector c(static_cast(sx) * sy); + std::vector c(static_cast(sx) * sy); for (uint i = 0; i < sx * sy; i++) { c[i] = Random() % lengthof(curve_maps); @@ -880,7 +880,7 @@ static void HeightMapNormalize() HeightMapAdjustWaterLevel(water_percent, h_max_new); - byte water_borders = _settings_game.construction.freeform_edges ? _settings_game.game_creation.water_borders : 0xF; + uint8_t water_borders = _settings_game.construction.freeform_edges ? _settings_game.game_creation.water_borders : 0xF; if (water_borders == BORDERS_RANDOM) water_borders = GB(Random(), 0, 4); HeightMapCoastLines(water_borders); diff --git a/src/tile_map.h b/src/tile_map.h index a4bd524b2f..687963270b 100644 --- a/src/tile_map.h +++ b/src/tile_map.h @@ -247,7 +247,7 @@ inline TropicZone GetTropicZone(Tile tile) * @pre IsTileType(t, MP_HOUSE) || IsTileType(t, MP_OBJECT) || IsTileType(t, MP_INDUSTRY) ||IsTileType(t, MP_STATION) * @return frame number */ -inline byte GetAnimationFrame(Tile t) +inline uint8_t GetAnimationFrame(Tile t) { assert(IsTileType(t, MP_HOUSE) || IsTileType(t, MP_OBJECT) || IsTileType(t, MP_INDUSTRY) ||IsTileType(t, MP_STATION)); return t.m7(); @@ -259,7 +259,7 @@ inline byte GetAnimationFrame(Tile t) * @param frame the new frame number * @pre IsTileType(t, MP_HOUSE) || IsTileType(t, MP_OBJECT) || IsTileType(t, MP_INDUSTRY) ||IsTileType(t, MP_STATION) */ -inline void SetAnimationFrame(Tile t, byte frame) +inline void SetAnimationFrame(Tile t, uint8_t frame) { assert(IsTileType(t, MP_HOUSE) || IsTileType(t, MP_OBJECT) || IsTileType(t, MP_INDUSTRY) ||IsTileType(t, MP_STATION)); t.m7() = frame; diff --git a/src/tilehighlight_type.h b/src/tilehighlight_type.h index 929d49c4e4..a19eef5aac 100644 --- a/src/tilehighlight_type.h +++ b/src/tilehighlight_type.h @@ -55,11 +55,11 @@ struct TileHighlightData { Point new_pos; ///< New value for \a pos; used to determine whether to redraw the selection. Point new_size; ///< New value for \a size; used to determine whether to redraw the selection. Point new_outersize; ///< New value for \a outersize; used to determine whether to redraw the selection. - byte dirty; ///< Whether the build station window needs to redraw due to the changed selection. + uint8_t dirty; ///< Whether the build station window needs to redraw due to the changed selection. Point selstart; ///< The location where the dragging started. Point selend; ///< The location where the drag currently ends. - byte sizelimit; ///< Whether the selection is limited in length, and what the maximum length is. + uint8_t sizelimit; ///< Whether the selection is limited in length, and what the maximum length is. HighLightStyle drawstyle; ///< Lower bits 0-3 are reserved for detailed highlight information. HighLightStyle next_drawstyle; ///< Queued, but not yet drawn style. diff --git a/src/town.h b/src/town.h index f096bfa530..618093dec4 100644 --- a/src/town.h +++ b/src/town.h @@ -59,7 +59,7 @@ struct Town : TownPool::PoolItem<&_town_pool> { std::string name; ///< Custom town name. If empty, the town was not renamed and uses the generated name. mutable std::string cached_name; ///< NOSAVE: Cache of the resolved name of the town, if not using a custom town name - byte flags; ///< See #TownFlags. + uint8_t flags; ///< See #TownFlags. uint16_t noise_reached; ///< level of noise that all the airports are generating @@ -78,7 +78,7 @@ struct Town : TownPool::PoolItem<&_town_pool> { std::string text; ///< General text with additional information. - inline byte GetPercentTransported(CargoID cid) const + inline uint8_t GetPercentTransported(CargoID cid) const { if (!IsValidCargoID(cid)) return 0; return this->supplied[cid].old_act * 256 / (this->supplied[cid].old_max + 1); @@ -91,8 +91,8 @@ struct Town : TownPool::PoolItem<&_town_pool> { uint16_t grow_counter; ///< counter to count when to grow, value is smaller than or equal to growth_rate uint16_t growth_rate; ///< town growth rate - byte fund_buildings_months; ///< fund buildings program in action? - byte road_build_months; ///< fund road reconstruction in action? + uint8_t fund_buildings_months; ///< fund buildings program in action? + uint8_t road_build_months; ///< fund road reconstruction in action? bool larger_town; ///< if this is a larger town and should grow more quickly TownLayout layout; ///< town specific road layout @@ -238,7 +238,7 @@ TownActions GetMaskOfTownActions(CompanyID cid, const Town *t); bool GenerateTowns(TownLayout layout); const CargoSpec *FindFirstCargoWithTownAcceptanceEffect(TownAcceptanceEffect effect); -extern const byte _town_action_costs[TACT_COUNT]; +extern const uint8_t _town_action_costs[TACT_COUNT]; /** * Set the default name for a depot/waypoint diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index d69335f857..3ebe90087e 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -1303,7 +1303,7 @@ static bool GrowTownWithBridge(const Town *t, const TileIndex tile, const DiagDi if (slope != SLOPE_FLAT && CircularTileSearch(&search, bridge_length, 0, 0, RedundantBridgeExistsNearby, &direction_to_match)) return false; for (uint8_t times = 0; times <= 22; times++) { - byte bridge_type = RandomRange(MAX_BRIDGES - 1); + uint8_t bridge_type = RandomRange(MAX_BRIDGES - 1); /* Can we actually build the bridge? */ RoadType rt = GetTownRoadType(); @@ -2092,12 +2092,12 @@ std::tuple CmdFoundTown(DoCommandFlag flags, TileInd if (ret.Failed()) return { ret, 0, INVALID_TOWN }; } - static const byte price_mult[][TSZ_RANDOM + 1] = {{ 15, 25, 40, 25 }, { 20, 35, 55, 35 }}; + static const uint8_t price_mult[][TSZ_RANDOM + 1] = {{ 15, 25, 40, 25 }, { 20, 35, 55, 35 }}; /* multidimensional arrays have to have defined length of non-first dimension */ static_assert(lengthof(price_mult[0]) == 4); CommandCost cost(EXPENSES_OTHER, _price[PR_BUILD_TOWN]); - byte mult = price_mult[city][size]; + uint8_t mult = price_mult[city][size]; cost.MultiplyCost(mult); @@ -2318,7 +2318,7 @@ static Town *CreateRandomTown(uint attempts, uint32_t townnameparts, TownSize si return nullptr; } -static const byte _num_initial_towns[4] = {5, 11, 23, 46}; // very low, low, normal, high +static const uint8_t _num_initial_towns[4] = {5, 11, 23, 46}; // very low, low, normal, high /** * Generate a number of towns with a given layout. @@ -2407,7 +2407,7 @@ HouseZonesBits GetTownRadiusGroup(const Town *t, TileIndex tile) * @param random_bits Random bits for newgrf houses to use. * @pre The house can be built here. */ -static inline void ClearMakeHouseTile(TileIndex tile, Town *t, byte counter, byte stage, HouseID type, byte random_bits) +static inline void ClearMakeHouseTile(TileIndex tile, Town *t, uint8_t counter, uint8_t stage, HouseID type, uint8_t random_bits) { [[maybe_unused]] CommandCost cc = Command::Do(DC_EXEC | DC_AUTO | DC_NO_WATER, tile); assert(cc.Succeeded()); @@ -2430,7 +2430,7 @@ static inline void ClearMakeHouseTile(TileIndex tile, Town *t, byte counter, byt * @param random_bits Random bits for newgrf houses to use. * @pre The house can be built here. */ -static void MakeTownHouse(TileIndex tile, Town *t, byte counter, byte stage, HouseID type, byte random_bits) +static void MakeTownHouse(TileIndex tile, Town *t, uint8_t counter, uint8_t stage, HouseID type, uint8_t random_bits) { BuildingFlags size = HouseSpec::Get(type)->building_flags; @@ -2742,7 +2742,7 @@ static bool BuildTownHouse(Town *t, TileIndex tile) /* 1x1 house checks are already done */ } - byte random_bits = Random(); + uint8_t random_bits = Random(); if (HasBit(hs->callback_mask, CBM_HOUSE_ALLOW_CONSTRUCTION)) { uint16_t callback_res = GetHouseCallback(CBID_HOUSE_ALLOW_CONSTRUCTION, 0, 0, house, t, tile, true, random_bits); @@ -2755,8 +2755,8 @@ static bool BuildTownHouse(Town *t, TileIndex tile) /* Special houses that there can be only one of. */ t->flags |= oneof; - byte construction_counter = 0; - byte construction_stage = 0; + uint8_t construction_counter = 0; + uint8_t construction_stage = 0; if (_generating_world || _game_mode == GM_EDITOR) { uint32_t construction_random = Random(); @@ -3168,7 +3168,7 @@ CommandCost CmdDeleteTown(DoCommandFlag flags, TownID town_id) * Factor in the cost of each town action. * @see TownActions */ -const byte _town_action_costs[TACT_COUNT] = { +const uint8_t _town_action_costs[TACT_COUNT] = { 2, 4, 9, 35, 48, 53, 117, 175 }; diff --git a/src/town_cmd.h b/src/town_cmd.h index b422c22f17..edabfd0433 100644 --- a/src/town_cmd.h +++ b/src/town_cmd.h @@ -14,7 +14,7 @@ #include "company_type.h" #include "town_type.h" -enum TownAcceptanceEffect : byte; +enum TownAcceptanceEffect : uint8_t; std::tuple CmdFoundTown(DoCommandFlag flags, TileIndex tile, TownSize size, bool city, TownLayout layout, bool random_location, uint32_t townnameparts, const std::string &text); CommandCost CmdRenameTown(DoCommandFlag flags, TownID town_id, const std::string &text); diff --git a/src/town_map.h b/src/town_map.h index c7683ae9bc..39131c5ec1 100644 --- a/src/town_map.h +++ b/src/town_map.h @@ -91,7 +91,7 @@ inline bool LiftHasDestination(Tile t) * @param t the tile * @param dest new destination */ -inline void SetLiftDestination(Tile t, byte dest) +inline void SetLiftDestination(Tile t, uint8_t dest) { SetBit(t.m7(), 0); SB(t.m7(), 1, 3, dest); @@ -102,7 +102,7 @@ inline void SetLiftDestination(Tile t, byte dest) * @param t the tile * @return destination */ -inline byte GetLiftDestination(Tile t) +inline uint8_t GetLiftDestination(Tile t) { return GB(t.m7(), 1, 3); } @@ -123,7 +123,7 @@ inline void HaltLift(Tile t) * @param t the tile * @return position, from 0 to 36 */ -inline byte GetLiftPosition(Tile t) +inline uint8_t GetLiftPosition(Tile t) { return GB(t.m6(), 2, 6); } @@ -133,7 +133,7 @@ inline byte GetLiftPosition(Tile t) * @param t the tile * @param pos position, from 0 to 36 */ -inline void SetLiftPosition(Tile t, byte pos) +inline void SetLiftPosition(Tile t, uint8_t pos) { SB(t.m6(), 2, 6, pos); } @@ -181,10 +181,10 @@ inline void SetHouseCompleted(Tile t, bool status) * @pre IsTileType(t, MP_HOUSE) * @return the building stage of the house */ -inline byte GetHouseBuildingStage(Tile t) +inline uint8_t GetHouseBuildingStage(Tile t) { assert(IsTileType(t, MP_HOUSE)); - return IsHouseCompleted(t) ? (byte)TOWN_HOUSE_COMPLETED : GB(t.m5(), 3, 2); + return IsHouseCompleted(t) ? (uint8_t)TOWN_HOUSE_COMPLETED : GB(t.m5(), 3, 2); } /** @@ -193,7 +193,7 @@ inline byte GetHouseBuildingStage(Tile t) * @pre IsTileType(t, MP_HOUSE) * @return the construction stage of the house */ -inline byte GetHouseConstructionTick(Tile t) +inline uint8_t GetHouseConstructionTick(Tile t) { assert(IsTileType(t, MP_HOUSE)); return IsHouseCompleted(t) ? 0 : GB(t.m5(), 0, 3); @@ -260,7 +260,7 @@ inline TimerGameCalendar::Year GetHouseAge(Tile t) * @param random the new random bits * @pre IsTileType(t, MP_HOUSE) */ -inline void SetHouseRandomBits(Tile t, byte random) +inline void SetHouseRandomBits(Tile t, uint8_t random) { assert(IsTileType(t, MP_HOUSE)); t.m1() = random; @@ -273,7 +273,7 @@ inline void SetHouseRandomBits(Tile t, byte random) * @pre IsTileType(t, MP_HOUSE) * @return random bits */ -inline byte GetHouseRandomBits(Tile t) +inline uint8_t GetHouseRandomBits(Tile t) { assert(IsTileType(t, MP_HOUSE)); return t.m1(); @@ -286,7 +286,7 @@ inline byte GetHouseRandomBits(Tile t) * @param triggers the activated triggers * @pre IsTileType(t, MP_HOUSE) */ -inline void SetHouseTriggers(Tile t, byte triggers) +inline void SetHouseTriggers(Tile t, uint8_t triggers) { assert(IsTileType(t, MP_HOUSE)); SB(t.m3(), 0, 5, triggers); @@ -299,7 +299,7 @@ inline void SetHouseTriggers(Tile t, byte triggers) * @pre IsTileType(t, MP_HOUSE) * @return triggers */ -inline byte GetHouseTriggers(Tile t) +inline uint8_t GetHouseTriggers(Tile t) { assert(IsTileType(t, MP_HOUSE)); return GB(t.m3(), 0, 5); @@ -311,7 +311,7 @@ inline byte GetHouseTriggers(Tile t) * @pre IsTileType(t, MP_HOUSE) * @return time remaining */ -inline byte GetHouseProcessingTime(Tile t) +inline uint8_t GetHouseProcessingTime(Tile t) { assert(IsTileType(t, MP_HOUSE)); return GB(t.m6(), 2, 6); @@ -323,7 +323,7 @@ inline byte GetHouseProcessingTime(Tile t) * @param time the time to be set * @pre IsTileType(t, MP_HOUSE) */ -inline void SetHouseProcessingTime(Tile t, byte time) +inline void SetHouseProcessingTime(Tile t, uint8_t time) { assert(IsTileType(t, MP_HOUSE)); SB(t.m6(), 2, 6, time); @@ -350,7 +350,7 @@ inline void DecHouseProcessingTime(Tile t) * @param random_bits required for newgrf houses * @pre IsTileType(t, MP_CLEAR) */ -inline void MakeHouseTile(Tile t, TownID tid, byte counter, byte stage, HouseID type, byte random_bits) +inline void MakeHouseTile(Tile t, TownID tid, uint8_t counter, uint8_t stage, HouseID type, uint8_t random_bits) { assert(IsTileType(t, MP_CLEAR)); diff --git a/src/town_type.h b/src/town_type.h index db2f9a2256..ebfa229bcc 100644 --- a/src/town_type.h +++ b/src/town_type.h @@ -16,7 +16,7 @@ typedef uint16_t TownID; struct Town; /** Supported initial town sizes */ -enum TownSize : byte { +enum TownSize : uint8_t { TSZ_SMALL, ///< Small town. TSZ_MEDIUM, ///< Medium town. TSZ_LARGE, ///< Large town. @@ -77,7 +77,7 @@ enum Ratings { }; /** Town Layouts. It needs to be 8bits, because we save and load it as such */ -enum TownLayout : byte { +enum TownLayout : uint8_t { TL_BEGIN = 0, TL_ORIGINAL = 0, ///< Original algorithm (min. 1 distance between roads) TL_BETTER_ROADS, ///< Extended original algorithm (min. 2 distance between roads) @@ -91,7 +91,7 @@ enum TownLayout : byte { DECLARE_ENUM_AS_ADDABLE(TownLayout) /** Town founding setting values. It needs to be 8bits, because we save and load it as such */ -enum TownFounding : byte { +enum TownFounding : uint8_t { TF_BEGIN = 0, ///< Used for iterations and limit testing TF_FORBIDDEN = 0, ///< Forbidden TF_ALLOWED, ///< Allowed @@ -100,7 +100,7 @@ enum TownFounding : byte { }; /** Town cargo generation modes */ -enum TownCargoGenMode : byte { +enum TownCargoGenMode : uint8_t { TCGM_BEGIN = 0, TCGM_ORIGINAL = 0, ///< Original algorithm (quadratic cargo by population) TCGM_BITCOUNT, ///< Bit-counted algorithm (normal distribution from individual house population) diff --git a/src/townname.cpp b/src/townname.cpp index d518b66605..74a2ef3ffe 100644 --- a/src/townname.cpp +++ b/src/townname.cpp @@ -166,7 +166,7 @@ bool GenerateTownName(Randomizer &randomizer, uint32_t *townnameparts, TownNames * @param seed seed * @return seed transformed to a number from given range */ -static inline uint32_t SeedChance(byte shift_by, int max, uint32_t seed) +static inline uint32_t SeedChance(uint8_t shift_by, int max, uint32_t seed) { return (GB(seed, shift_by, 16) * max) >> 16; } @@ -179,7 +179,7 @@ static inline uint32_t SeedChance(byte shift_by, int max, uint32_t seed) * @param seed seed * @return seed transformed to a number from given range */ -static inline uint32_t SeedModChance(byte shift_by, int max, uint32_t seed) +static inline uint32_t SeedModChance(uint8_t shift_by, int max, uint32_t seed) { /* This actually gives *MUCH* more even distribution of the values * than SeedChance(), which is absolutely horrible in that. If @@ -202,7 +202,7 @@ static inline uint32_t SeedModChance(byte shift_by, int max, uint32_t seed) * @param bias minimum value that can be returned * @return seed transformed to a number from given range */ -static inline int32_t SeedChanceBias(byte shift_by, int max, uint32_t seed, int bias) +static inline int32_t SeedChanceBias(uint8_t shift_by, int max, uint32_t seed, int bias) { return SeedChance(shift_by, max + bias, seed) - bias; } diff --git a/src/townname_type.h b/src/townname_type.h index 85fbf069a1..0384a7ca0a 100644 --- a/src/townname_type.h +++ b/src/townname_type.h @@ -33,7 +33,7 @@ struct TownNameParams { * Initializes this struct from language ID * @param town_name town name 'language' ID */ - TownNameParams(byte town_name) + TownNameParams(uint8_t town_name) { bool grf = town_name >= BUILTIN_TOWNNAME_GENERATOR_COUNT; this->grfid = grf ? GetGRFTownNameId(town_name - BUILTIN_TOWNNAME_GENERATOR_COUNT) : 0; diff --git a/src/track_type.h b/src/track_type.h index b93fe97d60..e3c3f22b67 100644 --- a/src/track_type.h +++ b/src/track_type.h @@ -16,7 +16,7 @@ * These are used to specify a single track. * Can be translated to a trackbit with TrackToTrackbit */ -enum Track : byte { +enum Track : uint8_t { TRACK_BEGIN = 0, ///< Used for iterations TRACK_X = 0, ///< Track along the x-axis (north-east to south-west) TRACK_Y = 1, ///< Track along the y-axis (north-west to south-east) @@ -32,7 +32,7 @@ enum Track : byte { DECLARE_POSTFIX_INCREMENT(Track) /** Bitfield corresponding to Track */ -enum TrackBits : byte { +enum TrackBits : uint8_t { TRACK_BIT_NONE = 0U, ///< No track TRACK_BIT_X = 1U << TRACK_X, ///< X-axis track TRACK_BIT_Y = 1U << TRACK_Y, ///< Y-axis track @@ -64,7 +64,7 @@ DECLARE_ENUM_AS_BIT_SET(TrackBits) * reversing track dirs are not considered to be 'valid' except in a small * corner in the road vehicle controller. */ -enum Trackdir : byte { +enum Trackdir : uint8_t { TRACKDIR_BEGIN = 0, ///< Used for iterations TRACKDIR_X_NE = 0, ///< X-axis and direction to north-east TRACKDIR_Y_SE = 1, ///< Y-axis and direction to south-east diff --git a/src/train.h b/src/train.h index ae584e78d1..d637d92d37 100644 --- a/src/train.h +++ b/src/train.h @@ -34,7 +34,7 @@ enum VehicleRailFlags { }; /** Modes for ignoring signals. */ -enum TrainForceProceeding : byte { +enum TrainForceProceeding : uint8_t { TFP_NONE = 0, ///< Normal operation. TFP_STUCK = 1, ///< Proceed till next signal, but ignore being stuck till then. This includes force leaving depots. TFP_SIGNAL = 2, ///< Ignore next signal, after the signal ignore being stuck. @@ -54,7 +54,7 @@ enum ConsistChangeFlags { }; DECLARE_ENUM_AS_BIT_SET(ConsistChangeFlags) -byte FreightWagonMult(CargoID cargo); +uint8_t FreightWagonMult(CargoID cargo); void CheckTrainsLengths(); @@ -77,7 +77,7 @@ struct TrainCache { bool cached_tilt; ///< train can tilt; feature provides a bonus in curves int cached_curve_speed_mod; ///< curve speed modifier of the entire train - byte user_def_data; ///< Cached property 0x25. Can be set by Callback 0x36. + uint8_t user_def_data; ///< Cached property 0x25. Can be set by Callback 0x36. /* cached max. speed / acceleration data */ int cached_max_curve_speed; ///< max consist speed limited by curves @@ -243,7 +243,7 @@ protected: // These functions should not be called outside acceleration code. * Allows to know the tractive effort value that this vehicle will use. * @return Tractive effort value from the engine. */ - inline byte GetTractiveEffort() const + inline uint8_t GetTractiveEffort() const { return GetVehicleProperty(this, PROP_TRAIN_TRACTIVE_EFFORT, RailVehInfo(this->engine_type)->tractive_effort); } @@ -252,7 +252,7 @@ protected: // These functions should not be called outside acceleration code. * Gets the area used for calculating air drag. * @return Area of the engine in m^2. */ - inline byte GetAirDragArea() const + inline uint8_t GetAirDragArea() const { /* Air drag is higher in tunnels due to the limited cross-section. */ return (this->track == TRACK_BIT_WORMHOLE && this->vehstatus & VS_HIDDEN) ? 28 : 14; @@ -262,7 +262,7 @@ protected: // These functions should not be called outside acceleration code. * Gets the air drag coefficient of this vehicle. * @return Air drag value from the engine. */ - inline byte GetAirDrag() const + inline uint8_t GetAirDrag() const { return RailVehInfo(this->engine_type)->air_drag; } diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 7de169d526..f969f0203e 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -52,8 +52,8 @@ static TileIndex TrainApproachingCrossingTile(const Train *v); static void CheckIfTrainNeedsService(Train *v); static void CheckNextTrainTile(Train *v); -static const byte _vehicle_initial_x_fract[4] = {10, 8, 4, 8}; -static const byte _vehicle_initial_y_fract[4] = { 8, 4, 8, 10}; +static const uint8_t _vehicle_initial_x_fract[4] = {10, 8, 4, 8}; +static const uint8_t _vehicle_initial_y_fract[4] = { 8, 4, 8, 10}; template <> bool IsValidImageIndex(uint8_t image_index) @@ -67,7 +67,7 @@ bool IsValidImageIndex(uint8_t image_index) * @param cargo Cargo type to get multiplier for * @return Cargo weight multiplier */ -byte FreightWagonMult(CargoID cargo) +uint8_t FreightWagonMult(CargoID cargo) { if (!CargoSpec::Get(cargo)->is_freight) return 1; return _settings_game.vehicle.freight_trains; @@ -2449,7 +2449,7 @@ void FreeTrainTrackReservation(const Train *v) } } -static const byte _initial_tile_subcoord[6][4][3] = { +static const uint8_t _initial_tile_subcoord[6][4][3] = { {{ 15, 8, 1 }, { 0, 0, 0 }, { 0, 8, 5 }, { 0, 0, 0 }}, {{ 0, 0, 0 }, { 8, 0, 3 }, { 0, 0, 0 }, { 8, 15, 7 }}, {{ 0, 0, 0 }, { 7, 0, 2 }, { 0, 7, 6 }, { 0, 0, 0 }}, @@ -3037,10 +3037,10 @@ static inline bool CheckCompatibleRail(const Train *v, TileIndex tile) /** Data structure for storing engine speed changes of an acceleration type. */ struct AccelerationSlowdownParams { - byte small_turn; ///< Speed change due to a small turn. - byte large_turn; ///< Speed change due to a large turn. - byte z_up; ///< Fraction to remove when moving up. - byte z_down; ///< Fraction to add when moving down. + uint8_t small_turn; ///< Speed change due to a small turn. + uint8_t large_turn; ///< Speed change due to a large turn. + uint8_t z_up; ///< Fraction to remove when moving up. + uint8_t z_down; ///< Fraction to add when moving down. }; /** Speed update fractions for each acceleration type. */ @@ -3442,7 +3442,7 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse) chosen_track == TRACK_BIT_LEFT || chosen_track == TRACK_BIT_RIGHT); /* Update XY to reflect the entrance to the new tile, and select the direction to use */ - const byte *b = _initial_tile_subcoord[FindFirstBit(chosen_track)][enterdir]; + const uint8_t *b = _initial_tile_subcoord[FindFirstBit(chosen_track)][enterdir]; gp.x = (gp.x & ~0xF) | b[0]; gp.y = (gp.y & ~0xF) | b[1]; Direction chosen_dir = (Direction)b[2]; diff --git a/src/transparency.h b/src/transparency.h index 2d1816ea13..782c009f22 100644 --- a/src/transparency.h +++ b/src/transparency.h @@ -37,7 +37,7 @@ typedef uint TransparencyOptionBits; ///< transparency option bits extern TransparencyOptionBits _transparency_opt; extern TransparencyOptionBits _transparency_lock; extern TransparencyOptionBits _invisibility_opt; -extern byte _display_opt; +extern uint8_t _display_opt; /** * Check if the transparency option bit is set diff --git a/src/transparency_gui.cpp b/src/transparency_gui.cpp index ec437ebe2a..1a0c3a713f 100644 --- a/src/transparency_gui.cpp +++ b/src/transparency_gui.cpp @@ -23,7 +23,7 @@ TransparencyOptionBits _transparency_opt; ///< The bits that should be transparent. TransparencyOptionBits _transparency_lock; ///< Prevent these bits from flipping with X. TransparencyOptionBits _invisibility_opt; ///< The bits that should be invisible. -byte _display_opt; ///< What do we want to draw/do? +uint8_t _display_opt; ///< What do we want to draw/do? class TransparenciesWindow : public Window { diff --git a/src/transport_type.h b/src/transport_type.h index 5ad7202020..c3b8705176 100644 --- a/src/transport_type.h +++ b/src/transport_type.h @@ -16,7 +16,7 @@ typedef uint16_t UnitID; /** Available types of transport */ -enum TransportType : byte { +enum TransportType : uint8_t { /* These constants are for now linked to the representation of bridges * and tunnels, so they can be used by GetTileTrackStatus_TunnelBridge. * In an ideal world, these constants would be used everywhere when diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp index 0c888c831b..1a58c6c2e1 100644 --- a/src/tree_cmd.cpp +++ b/src/tree_cmd.cpp @@ -52,7 +52,7 @@ enum ExtraTreePlacement { }; /** Determines when to consider building more trees. */ -byte _trees_tick_ctr; +uint8_t _trees_tick_ctr; static const uint16_t DEFAULT_TREE_STEPS = 1000; ///< Default number of attempts for placing trees. static const uint16_t DEFAULT_RAINFOREST_TREE_STEPS = 15000; ///< Default number of attempts for placing extra trees at rainforest in tropic. @@ -166,7 +166,7 @@ static void PlaceTree(TileIndex tile, uint32_t r) TreeType tree = GetRandomTreeType(tile, GB(r, 24, 8)); if (tree != TREE_INVALID) { - PlantTreesOnTile(tile, tree, GB(r, 22, 2), std::min(GB(r, 16, 3), 6)); + PlantTreesOnTile(tile, tree, GB(r, 22, 2), std::min(GB(r, 16, 3), 6)); MarkTileDirtyByTile(tile); /* Rerandomize ground, if neither snow nor shore */ @@ -385,7 +385,7 @@ void GenerateTrees() * @param diagonal Whether to use the Orthogonal (false) or Diagonal (true) iterator. * @return the cost of this operation or an error */ -CommandCost CmdPlantTree(DoCommandFlag flags, TileIndex tile, TileIndex start_tile, byte tree_to_plant, bool diagonal) +CommandCost CmdPlantTree(DoCommandFlag flags, TileIndex tile, TileIndex start_tile, uint8_t tree_to_plant, bool diagonal) { StringID msg = INVALID_STRING_ID; CommandCost cost(EXPENSES_OTHER); @@ -512,7 +512,7 @@ CommandCost CmdPlantTree(DoCommandFlag flags, TileIndex tile, TileIndex start_ti } struct TreeListEnt : PalSpriteID { - byte x, y; + uint8_t x, y; }; static void DrawTile_Trees(TileInfo *ti) @@ -819,10 +819,10 @@ static void TileLoop_Trees(TileIndex tile) bool DecrementTreeCounter() { /* Ensure _trees_tick_ctr can be decremented past zero only once for the largest map size. */ - static_assert(2 * (MAX_MAP_SIZE_BITS - MIN_MAP_SIZE_BITS) - 4 <= std::numeric_limits::digits); + static_assert(2 * (MAX_MAP_SIZE_BITS - MIN_MAP_SIZE_BITS) - 4 <= std::numeric_limits::digits); /* byte underflow */ - byte old_trees_tick_ctr = _trees_tick_ctr; + uint8_t old_trees_tick_ctr = _trees_tick_ctr; _trees_tick_ctr -= Map::ScaleBySize(1); return old_trees_tick_ctr <= _trees_tick_ctr; } diff --git a/src/tree_cmd.h b/src/tree_cmd.h index d730cf74ae..fd85dec319 100644 --- a/src/tree_cmd.h +++ b/src/tree_cmd.h @@ -12,7 +12,7 @@ #include "command_type.h" -CommandCost CmdPlantTree(DoCommandFlag flags, TileIndex tile, TileIndex start_tile, byte tree_to_plant, bool diagonal); +CommandCost CmdPlantTree(DoCommandFlag flags, TileIndex tile, TileIndex start_tile, uint8_t tree_to_plant, bool diagonal); DEF_CMD_TRAIT(CMD_PLANT_TREE, CmdPlantTree, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION) diff --git a/src/tree_gui.cpp b/src/tree_gui.cpp index c0202513b6..f8dd8f6bad 100644 --- a/src/tree_gui.cpp +++ b/src/tree_gui.cpp @@ -258,13 +258,13 @@ public: */ static std::unique_ptr MakeTreeTypeButtons() { - const byte type_base = _tree_base_by_landscape[_settings_game.game_creation.landscape]; - const byte type_count = _tree_count_by_landscape[_settings_game.game_creation.landscape]; + const uint8_t type_base = _tree_base_by_landscape[_settings_game.game_creation.landscape]; + const uint8_t type_count = _tree_count_by_landscape[_settings_game.game_creation.landscape]; /* Toyland has 9 tree types, which look better in 3x3 than 4x3 */ const int num_columns = type_count == 9 ? 3 : 4; const int num_rows = CeilDiv(type_count, num_columns); - byte cur_type = type_base; + uint8_t cur_type = type_base; auto vstack = std::make_unique(NC_EQUALSIZE); vstack->SetPIP(0, 1, 0); diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 080dd6f68b..1631cf1d02 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -258,7 +258,7 @@ static Money TunnelBridgeClearCost(TileIndex tile, Price base_price) * @param road_rail_type rail type or road types. * @return the cost of this operation or an error */ -CommandCost CmdBuildBridge(DoCommandFlag flags, TileIndex tile_end, TileIndex tile_start, TransportType transport_type, BridgeType bridge_type, byte road_rail_type) +CommandCost CmdBuildBridge(DoCommandFlag flags, TileIndex tile_end, TileIndex tile_start, TransportType transport_type, BridgeType bridge_type, uint8_t road_rail_type) { CompanyID company = _current_company; @@ -620,7 +620,7 @@ CommandCost CmdBuildBridge(DoCommandFlag flags, TileIndex tile_end, TileIndex ti * @param road_rail_type railtype or roadtype * @return the cost of this operation or an error */ -CommandCost CmdBuildTunnel(DoCommandFlag flags, TileIndex start_tile, TransportType transport_type, byte road_rail_type) +CommandCost CmdBuildTunnel(DoCommandFlag flags, TileIndex start_tile, TransportType transport_type, uint8_t road_rail_type) { CompanyID company = _current_company; @@ -1880,7 +1880,7 @@ static void PrepareToEnterBridge(T *gv) * frame on a tile, so the sound is played shortly after entering the tunnel * tile, while the vehicle is still visible. */ -static const byte TUNNEL_SOUND_FRAME = 1; +static const uint8_t TUNNEL_SOUND_FRAME = 1; /** * Frame when a vehicle should be hidden in a tunnel with a certain direction. @@ -1890,7 +1890,7 @@ static const byte TUNNEL_SOUND_FRAME = 1; * When leaving a tunnel, show the vehicle when it is one frame further * to the 'outside', i.e. at (TILE_SIZE-1) - (frame) + 1 */ -extern const byte _tunnel_visibility_frame[DIAGDIR_END] = {12, 8, 8, 12}; +extern const uint8_t _tunnel_visibility_frame[DIAGDIR_END] = {12, 8, 8, 12}; static VehicleEnterTileStatus VehicleEnter_TunnelBridge(Vehicle *v, TileIndex tile, int x, int y) { @@ -1902,9 +1902,9 @@ static VehicleEnterTileStatus VehicleEnter_TunnelBridge(Vehicle *v, TileIndex ti /* Direction of the vehicle */ const DiagDirection vdir = DirToDiagDir(v->direction); /* New position of the vehicle on the tile */ - byte pos = (DiagDirToAxis(vdir) == AXIS_X ? x : y) & TILE_UNIT_MASK; + uint8_t pos = (DiagDirToAxis(vdir) == AXIS_X ? x : y) & TILE_UNIT_MASK; /* Number of units moved by the vehicle since entering the tile */ - byte frame = (vdir == DIAGDIR_NE || vdir == DIAGDIR_NW) ? TILE_SIZE - 1 - pos : pos; + uint8_t frame = (vdir == DIAGDIR_NE || vdir == DIAGDIR_NW) ? TILE_SIZE - 1 - pos : pos; if (IsTunnel(tile)) { if (v->type == VEH_TRAIN) { diff --git a/src/tunnelbridge_cmd.h b/src/tunnelbridge_cmd.h index d49131263d..3c6f945044 100644 --- a/src/tunnelbridge_cmd.h +++ b/src/tunnelbridge_cmd.h @@ -14,12 +14,12 @@ #include "transport_type.h" #include "bridge.h" -CommandCost CmdBuildBridge(DoCommandFlag flags, TileIndex tile_end, TileIndex tile_start, TransportType transport_type, BridgeType bridge_type, byte road_rail_type); -CommandCost CmdBuildTunnel(DoCommandFlag flags, TileIndex start_tile, TransportType transport_type, byte road_rail_type); +CommandCost CmdBuildBridge(DoCommandFlag flags, TileIndex tile_end, TileIndex tile_start, TransportType transport_type, BridgeType bridge_type, uint8_t road_rail_type); +CommandCost CmdBuildTunnel(DoCommandFlag flags, TileIndex start_tile, TransportType transport_type, uint8_t road_rail_type); DEF_CMD_TRAIT(CMD_BUILD_BRIDGE, CmdBuildBridge, CMD_DEITY | CMD_AUTO | CMD_NO_WATER, CMDT_LANDSCAPE_CONSTRUCTION) DEF_CMD_TRAIT(CMD_BUILD_TUNNEL, CmdBuildTunnel, CMD_DEITY | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION) -void CcBuildBridge(Commands cmd, const CommandCost &result, TileIndex end_tile, TileIndex tile_start, TransportType transport_type, BridgeType, byte); +void CcBuildBridge(Commands cmd, const CommandCost &result, TileIndex end_tile, TileIndex tile_start, TransportType transport_type, BridgeType, uint8_t); #endif /* TUNNELBRIDGE_CMD_H */ diff --git a/src/vehicle.cpp b/src/vehicle.cpp index ca5780140d..ccd259cb36 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1300,7 +1300,7 @@ void DecreaseVehicleValue(Vehicle *v) SetWindowDirty(WC_VEHICLE_DETAILS, v->index); } -static const byte _breakdown_chance[64] = { +static const uint8_t _breakdown_chance[64] = { 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, @@ -1905,7 +1905,7 @@ UnitID GetFreeUnitNumber(VehicleType type) * @return true if there is any reason why you may build * the infrastructure for the given vehicle type */ -bool CanBuildVehicleInfrastructure(VehicleType type, byte subtype) +bool CanBuildVehicleInfrastructure(VehicleType type, uint8_t subtype) { assert(IsCompanyBuildableVehicleType(type)); @@ -2047,7 +2047,7 @@ LiveryScheme GetEngineLiveryScheme(EngineID engine_type, EngineID parent_engine_ * @param livery_setting The livery settings to use for acquiring the livery information. * @return livery to use */ -const Livery *GetEngineLivery(EngineID engine_type, CompanyID company, EngineID parent_engine_type, const Vehicle *v, byte livery_setting) +const Livery *GetEngineLivery(EngineID engine_type, CompanyID company, EngineID parent_engine_type, const Vehicle *v, uint8_t livery_setting) { const Company *c = Company::Get(company); LiveryScheme scheme = LS_DEFAULT; @@ -2643,7 +2643,7 @@ void Vehicle::UpdateVisualEffect(bool allow_power_change) const Engine *e = this->GetEngine(); /* Evaluate properties */ - byte visual_effect; + uint8_t visual_effect; switch (e->type) { case VEH_TRAIN: visual_effect = e->u.rail.visual_effect; break; case VEH_ROAD: visual_effect = e->u.road.visual_effect; break; diff --git a/src/vehicle_base.h b/src/vehicle_base.h index 8ffd0701bd..adf2c0d610 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -124,7 +124,7 @@ struct VehicleCache { uint16_t cached_max_speed; ///< Maximum speed of the consist (minimum of the max speed of all vehicles in the consist). uint16_t cached_cargo_age_period; ///< Number of ticks before carried cargo is aged. - byte cached_vis_effect; ///< Visual effect to show (see #VisualEffect) + uint8_t cached_vis_effect; ///< Visual effect to show (see #VisualEffect) }; /** Sprite sequence for a vehicle part. */ @@ -292,10 +292,10 @@ public: TimerGameCalendar::Date date_of_last_service_newgrf; ///< Last calendar date the vehicle had a service at a depot, unchanged by the date cheat to protect against unsafe NewGRF behavior. uint16_t reliability; ///< Reliability. uint16_t reliability_spd_dec; ///< Reliability decrease speed. - byte breakdown_ctr; ///< Counter for managing breakdown events. @see Vehicle::HandleBreakdown - byte breakdown_delay; ///< Counter for managing breakdown length. - byte breakdowns_since_last_service; ///< Counter for the amount of breakdowns. - byte breakdown_chance; ///< Current chance of breakdowns. + uint8_t breakdown_ctr; ///< Counter for managing breakdown events. @see Vehicle::HandleBreakdown + uint8_t breakdown_delay; ///< Counter for managing breakdown length. + uint8_t breakdowns_since_last_service; ///< Counter for the amount of breakdowns. + uint8_t breakdown_chance; ///< Current chance of breakdowns. int32_t x_pos; ///< x coordinate. int32_t y_pos; ///< y coordinate. @@ -308,10 +308,10 @@ public: * 0xfd == custom sprite, 0xfe == custom second head sprite * 0xff == reserved for another custom sprite */ - byte spritenum; - byte x_extent; ///< x-extent of vehicle bounding box - byte y_extent; ///< y-extent of vehicle bounding box - byte z_extent; ///< z-extent of vehicle bounding box + uint8_t spritenum; + uint8_t x_extent; ///< x-extent of vehicle bounding box + uint8_t y_extent; ///< y-extent of vehicle bounding box + uint8_t z_extent; ///< z-extent of vehicle bounding box int8_t x_bb_offs; ///< x offset of vehicle bounding box int8_t y_bb_offs; ///< y offset of vehicle bounding box int8_t x_offs; ///< x offset for vehicle sprite @@ -322,31 +322,31 @@ public: UnitID unitnumber; ///< unit number, for display purposes only uint16_t cur_speed; ///< current speed - byte subspeed; ///< fractional speed - byte acceleration; ///< used by train & aircraft + uint8_t subspeed; ///< fractional speed + uint8_t acceleration; ///< used by train & aircraft uint32_t motion_counter; ///< counter to occasionally play a vehicle sound. - byte progress; ///< The percentage (if divided by 256) this vehicle already crossed the tile unit. + uint8_t progress; ///< The percentage (if divided by 256) this vehicle already crossed the tile unit. uint16_t random_bits; ///< Bits used for randomized variational spritegroups. - byte waiting_triggers; ///< Triggers to be yet matched before rerandomizing the random bits. + uint8_t waiting_triggers; ///< Triggers to be yet matched before rerandomizing the random bits. StationID last_station_visited; ///< The last station we stopped at. StationID last_loading_station; ///< Last station the vehicle has stopped at and could possibly leave from with any cargo loaded. TimerGameTick::TickCounter last_loading_tick; ///< Last TimerGameTick::counter tick that the vehicle has stopped at a station and could possibly leave with any cargo loaded. CargoID cargo_type; ///< type of cargo this vehicle is carrying - byte cargo_subtype; ///< Used for livery refits (NewGRF variations) + uint8_t cargo_subtype; ///< Used for livery refits (NewGRF variations) uint16_t cargo_cap; ///< total capacity uint16_t refit_cap; ///< Capacity left over from before last refit. VehicleCargoList cargo; ///< The cargo this vehicle is carrying uint16_t cargo_age_counter; ///< Ticks till cargo is aged next. int8_t trip_occupancy; ///< NOSAVE: Occupancy of vehicle of the current trip (updated after leaving a station). - byte day_counter; ///< Increased by one for each day - byte tick_counter; ///< Increased by one for each tick - byte running_ticks; ///< Number of ticks this vehicle was not stopped this day + uint8_t day_counter; ///< Increased by one for each day + uint8_t tick_counter; ///< Increased by one for each tick + uint8_t running_ticks; ///< Number of ticks this vehicle was not stopped this day - byte vehstatus; ///< Status + uint8_t vehstatus; ///< Status Order current_order; ///< The current order (+ status, like: loading) union { @@ -356,7 +356,7 @@ public: uint16_t load_unload_ticks; ///< Ticks to wait before starting next cycle. GroupID group_id; ///< Index of group Pool array - byte subtype; ///< subtype (Filled with values from #AircraftSubType/#DisasterSubType/#EffectVehicleType/#GroundVehicleSubtypeFlags) + uint8_t subtype; ///< subtype (Filled with values from #AircraftSubType/#DisasterSubType/#EffectVehicleType/#GroundVehicleSubtypeFlags) NewGRFCache grf_cache; ///< Cache of often used calculated NewGRF values VehicleCache vcache; ///< Cache of often used vehicle values. diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 57a66b5cb6..6d22d56b0a 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -267,7 +267,7 @@ CommandCost CmdSellVehicle(DoCommandFlag flags, VehicleID v_id, bool sell_chain, * @param[out] auto_refit_allowed The refit is allowed as an auto-refit. * @return Price for refitting */ -static int GetRefitCostFactor(const Vehicle *v, EngineID engine_type, CargoID new_cid, byte new_subtype, bool *auto_refit_allowed) +static int GetRefitCostFactor(const Vehicle *v, EngineID engine_type, CargoID new_cid, uint8_t new_subtype, bool *auto_refit_allowed) { /* Prepare callback param with info about the new cargo type. */ const Engine *e = Engine::Get(engine_type); @@ -299,7 +299,7 @@ static int GetRefitCostFactor(const Vehicle *v, EngineID engine_type, CargoID ne * @param[out] auto_refit_allowed The refit is allowed as an auto-refit. * @return Price for refitting */ -static CommandCost GetRefitCost(const Vehicle *v, EngineID engine_type, CargoID new_cid, byte new_subtype, bool *auto_refit_allowed) +static CommandCost GetRefitCost(const Vehicle *v, EngineID engine_type, CargoID new_cid, uint8_t new_subtype, bool *auto_refit_allowed) { ExpensesType expense_type; const Engine *e = Engine::Get(engine_type); @@ -341,7 +341,7 @@ struct RefitResult { Vehicle *v; ///< Vehicle to refit uint capacity; ///< New capacity of vehicle uint mail_capacity; ///< New mail capacity of aircraft - byte subtype; ///< cargo subtype to refit to + uint8_t subtype; ///< cargo subtype to refit to }; /** @@ -356,7 +356,7 @@ struct RefitResult { * @param auto_refit Refitting is done as automatic refitting outside a depot. * @return Refit cost + refittet capacity + mail capacity (aircraft). */ -static std::tuple RefitVehicle(Vehicle *v, bool only_this, uint8_t num_vehicles, CargoID new_cid, byte new_subtype, DoCommandFlag flags, bool auto_refit) +static std::tuple RefitVehicle(Vehicle *v, bool only_this, uint8_t num_vehicles, CargoID new_cid, uint8_t new_subtype, DoCommandFlag flags, bool auto_refit) { CommandCost cost(v->GetExpenseType(false)); uint total_capacity = 0; @@ -374,7 +374,7 @@ static std::tuple RefitVehicle(Vehicle std::vector refit_result; v->InvalidateNewGRFCacheOfChain(); - byte actual_subtype = new_subtype; + uint8_t actual_subtype = new_subtype; for (; v != nullptr; v = (only_this ? nullptr : v->Next())) { /* Reset actual_subtype for every new vehicle */ if (!v->IsArticulatedPart()) actual_subtype = new_subtype; @@ -400,7 +400,7 @@ static std::tuple RefitVehicle(Vehicle /* Back up the vehicle's cargo type */ CargoID temp_cid = v->cargo_type; - byte temp_subtype = v->cargo_subtype; + uint8_t temp_subtype = v->cargo_subtype; if (refittable) { v->cargo_type = new_cid; v->cargo_subtype = actual_subtype; @@ -487,7 +487,7 @@ static std::tuple RefitVehicle(Vehicle * Only used if "refit only this vehicle" is false. * @return the cost of this operation or an error */ -std::tuple CmdRefitVehicle(DoCommandFlag flags, VehicleID veh_id, CargoID new_cid, byte new_subtype, bool auto_refit, bool only_this, uint8_t num_vehicles) +std::tuple CmdRefitVehicle(DoCommandFlag flags, VehicleID veh_id, CargoID new_cid, uint8_t new_subtype, bool auto_refit, bool only_this, uint8_t num_vehicles) { Vehicle *v = Vehicle::GetIfValid(veh_id); if (v == nullptr) return { CMD_ERROR, 0, 0, {} }; @@ -778,7 +778,7 @@ static void CloneVehicleName(const Vehicle *src, Vehicle *dst) /* Format buffer and determine starting number. */ long num; - byte padding = 0; + uint8_t padding = 0; if (number_position == src->name.length()) { /* No digit at the end, so start at number 2. */ buf = src->name; @@ -790,7 +790,7 @@ static void CloneVehicleName(const Vehicle *src, Vehicle *dst) buf = src->name.substr(0, number_position); auto num_str = src->name.substr(number_position); - padding = (byte)num_str.length(); + padding = (uint8_t)num_str.length(); std::istringstream iss(num_str); iss >> num; @@ -944,7 +944,7 @@ std::tuple CmdCloneVehicle(DoCommandFlag flags, TileInde assert(w != nullptr); /* Find out what's the best sub type */ - byte subtype = GetBestFittingSubType(v, w, v->cargo_type); + uint8_t subtype = GetBestFittingSubType(v, w, v->cargo_type); if (w->cargo_type != v->cargo_type || w->cargo_subtype != subtype) { CommandCost cost = std::get<0>(Command::Do(flags, w->index, v->cargo_type, subtype, false, true, 0)); if (cost.Succeeded()) total_cost.AddCost(cost); diff --git a/src/vehicle_cmd.h b/src/vehicle_cmd.h index 9e989516fc..a6d3767cbf 100644 --- a/src/vehicle_cmd.h +++ b/src/vehicle_cmd.h @@ -19,7 +19,7 @@ std::tuple CmdBuildVehicle(DoCommandFlag flags, TileIndex tile, EngineID eid, bool use_free_vehicles, CargoID cargo, ClientID client_id); CommandCost CmdSellVehicle(DoCommandFlag flags, VehicleID v_id, bool sell_chain, bool backup_order, ClientID client_id); -std::tuple CmdRefitVehicle(DoCommandFlag flags, VehicleID veh_id, CargoID new_cid, byte new_subtype, bool auto_refit, bool only_this, uint8_t num_vehicles); +std::tuple CmdRefitVehicle(DoCommandFlag flags, VehicleID veh_id, CargoID new_cid, uint8_t new_subtype, bool auto_refit, bool only_this, uint8_t num_vehicles); CommandCost CmdSendVehicleToDepot(DoCommandFlag flags, VehicleID veh_id, DepotCommand depot_cmd, const VehicleListIdentifier &vli); CommandCost CmdChangeServiceInt(DoCommandFlag flags, VehicleID veh_id, uint16_t serv_int, bool is_custom, bool is_percent); CommandCost CmdRenameVehicle(DoCommandFlag flags, VehicleID veh_id, const std::string &text); diff --git a/src/vehicle_func.h b/src/vehicle_func.h index add2d48e16..8047a1952e 100644 --- a/src/vehicle_func.h +++ b/src/vehicle_func.h @@ -53,7 +53,7 @@ void VehicleLengthChanged(const Vehicle *u); void ResetVehicleHash(); void ResetVehicleColourMap(); -byte GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for, CargoID dest_cargo_type); +uint8_t GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for, CargoID dest_cargo_type); void ViewportAddVehicles(DrawPixelInfo *dpi); @@ -71,7 +71,7 @@ UnitID GetFreeUnitNumber(VehicleType type); void VehicleEnterDepot(Vehicle *v); -bool CanBuildVehicleInfrastructure(VehicleType type, byte subtype = 0); +bool CanBuildVehicleInfrastructure(VehicleType type, uint8_t subtype = 0); /** Position information of a vehicle after it moved */ struct GetNewVehiclePosResult { @@ -112,7 +112,7 @@ inline bool IsCompanyBuildableVehicleType(const BaseVehicle *v) } LiveryScheme GetEngineLiveryScheme(EngineID engine_type, EngineID parent_engine_type, const Vehicle *v); -const struct Livery *GetEngineLivery(EngineID engine_type, CompanyID company, EngineID parent_engine_type, const Vehicle *v, byte livery_setting); +const struct Livery *GetEngineLivery(EngineID engine_type, CompanyID company, EngineID parent_engine_type, const Vehicle *v, uint8_t livery_setting); SpriteID GetEnginePalette(EngineID engine_type, CompanyID company); SpriteID GetVehiclePalette(const Vehicle *v); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 6ed05fc076..de65786ee5 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -515,7 +515,7 @@ static const uint MAX_REFIT_CYCLE = 256; * @param dest_cargo_type Destination cargo type. * @return the best sub type */ -byte GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for, CargoID dest_cargo_type) +uint8_t GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for, CargoID dest_cargo_type) { v_from = v_from->GetFirstEnginePart(); v_for = v_for->GetFirstEnginePart(); @@ -529,7 +529,7 @@ byte GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for, CargoID dest_cargo_t include(subtypes, GetCargoSubtypeText(v_from)); } - byte ret_refit_cyc = 0; + uint8_t ret_refit_cyc = 0; bool success = false; if (!subtypes.empty()) { /* Check whether any articulated part is refittable to 'dest_cargo_type' with a subtype listed in 'subtypes' */ @@ -539,7 +539,7 @@ byte GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for, CargoID dest_cargo_t if (!HasBit(e->info.refit_mask, dest_cargo_type) && v->cargo_type != dest_cargo_type) continue; CargoID old_cargo_type = v->cargo_type; - byte old_cargo_subtype = v->cargo_subtype; + uint8_t old_cargo_subtype = v->cargo_subtype; /* Set the 'destination' cargo */ v->cargo_type = dest_cargo_type; @@ -581,7 +581,7 @@ byte GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for, CargoID dest_cargo_t /** Option to refit a vehicle chain */ struct RefitOption { CargoID cargo; ///< Cargo to refit to - byte subtype; ///< Subcargo to use + uint8_t subtype; ///< Subcargo to use StringID string; ///< GRF-local String to display for the cargo /** @@ -709,7 +709,7 @@ struct RefitWindow : public Window { if (v->type == VEH_TRAIN && std::find(vehicles_to_refit.begin(), vehicles_to_refit.end(), v->index) == vehicles_to_refit.end()) continue; const Engine *e = v->GetEngine(); CargoTypes cmask = e->info.refit_mask; - byte callback_mask = e->info.callback_mask; + uint8_t callback_mask = e->info.callback_mask; /* Skip this engine if it does not carry anything */ if (!e->CanCarryCargo()) continue; @@ -737,7 +737,7 @@ struct RefitWindow : public Window { /* Make a note of the original cargo type. It has to be * changed to test the cargo & subtype... */ CargoID temp_cargo = v->cargo_type; - byte temp_subtype = v->cargo_subtype; + uint8_t temp_subtype = v->cargo_subtype; v->cargo_type = cid; diff --git a/src/vehicle_gui.h b/src/vehicle_gui.h index 52eb17e35c..ebd0d3fde8 100644 --- a/src/vehicle_gui.h +++ b/src/vehicle_gui.h @@ -22,7 +22,7 @@ void ShowVehicleRefitWindow(const Vehicle *v, VehicleOrderID order, Window *parent, bool auto_refit = false); /** The tabs in the train details window */ -enum TrainDetailsWindowTabs : byte { +enum TrainDetailsWindowTabs : uint8_t { TDW_TAB_CARGO = 0, ///< Tab with cargo carried by the vehicles TDW_TAB_INFO, ///< Tab with name and value of the vehicles TDW_TAB_CAPACITY, ///< Tab with cargo capacity of the vehicles diff --git a/src/vehicle_gui_base.h b/src/vehicle_gui_base.h index 9815d01529..3b63484494 100644 --- a/src/vehicle_gui_base.h +++ b/src/vehicle_gui_base.h @@ -66,7 +66,7 @@ typedef GUIList GUIVehicleGroupList; struct BaseVehicleListWindow : public Window { - enum GroupBy : byte { + enum GroupBy : uint8_t { GB_NONE, GB_SHARED_ORDERS, @@ -77,7 +77,7 @@ struct BaseVehicleListWindow : public Window { VehicleList vehicles; ///< List of vehicles. This is the buffer for `vehgroups` to point into; if this is structurally modified, `vehgroups` must be rebuilt. GUIVehicleGroupList vehgroups; ///< List of (groups of) vehicles. This stores iterators of `vehicles`, and should be rebuilt if `vehicles` is structurally changed. Listing *sorting; ///< Pointer to the vehicle type related sorting. - byte unitnumber_digits; ///< The number of digits of the highest unit number. + uint8_t unitnumber_digits; ///< The number of digits of the highest unit number. Scrollbar *vscroll; VehicleListIdentifier vli; ///< Identifier of the vehicle list we want to currently show. VehicleID vehicle_sel; ///< Selected vehicle @@ -116,7 +116,7 @@ struct BaseVehicleListWindow : public Window { void UpdateVehicleGroupBy(GroupBy group_by); void SortVehicleList(); void BuildVehicleList(); - void SetCargoFilter(byte index); + void SetCargoFilter(uint8_t index); void SetCargoFilterArray(); void FilterVehicleList(); StringID GetCargoFilterLabel(CargoID cid) const; diff --git a/src/vehicle_type.h b/src/vehicle_type.h index e61223ba3a..89003224e4 100644 --- a/src/vehicle_type.h +++ b/src/vehicle_type.h @@ -18,7 +18,7 @@ typedef uint32_t VehicleID; static const int GROUND_ACCELERATION = 9800; ///< Acceleration due to gravity, 9.8 m/s^2 /** Available vehicle types. It needs to be 8bits, because we save and load it as such */ -enum VehicleType : byte { +enum VehicleType : uint8_t { VEH_BEGIN, VEH_TRAIN = VEH_BEGIN, ///< %Train vehicle type. @@ -61,7 +61,7 @@ enum VehiclePathFinders { }; /** Flags for goto depot commands. */ -enum class DepotCommand : byte { +enum class DepotCommand : uint8_t { None = 0, ///< No special flags. Service = (1U << 0), ///< The vehicle will leave the depot right after arrival (service only) MassSend = (1U << 1), ///< Tells that it's a mass send to depot command (type in VLW flag) diff --git a/src/vehiclelist.cpp b/src/vehiclelist.cpp index 31c494e9a6..f6295681ad 100644 --- a/src/vehiclelist.cpp +++ b/src/vehiclelist.cpp @@ -22,7 +22,7 @@ */ uint32_t VehicleListIdentifier::Pack() const { - byte c = this->company == OWNER_NONE ? 0xF : (byte)this->company; + uint8_t c = this->company == OWNER_NONE ? 0xF : (uint8_t)this->company; assert(c < (1 << 4)); assert(this->vtype < (1 << 2)); assert(this->index < (1 << 20)); @@ -39,7 +39,7 @@ uint32_t VehicleListIdentifier::Pack() const */ bool VehicleListIdentifier::UnpackIfValid(uint32_t data) { - byte c = GB(data, 28, 4); + uint8_t c = GB(data, 28, 4); this->company = c == 0xF ? OWNER_NONE : (CompanyID)c; this->type = (VehicleListType)GB(data, 23, 3); this->vtype = (VehicleType)GB(data, 26, 2); diff --git a/src/vehiclelist.h b/src/vehiclelist.h index 87a8912642..037953f25d 100644 --- a/src/vehiclelist.h +++ b/src/vehiclelist.h @@ -15,7 +15,7 @@ #include "tile_type.h" /** Vehicle List type flags */ -enum VehicleListType : byte { +enum VehicleListType : uint8_t { VL_STANDARD, VL_SHARED_ORDERS, VL_STATION_LIST, diff --git a/src/video/allegro_v.cpp b/src/video/allegro_v.cpp index a2ac32c117..716c46b773 100644 --- a/src/video/allegro_v.cpp +++ b/src/video/allegro_v.cpp @@ -200,7 +200,7 @@ static bool CreateMainSurface(uint w, uint h) _allegro_screen = create_bitmap_ex(bpp, screen->cr - screen->cl, screen->cb - screen->ct); _screen.width = _allegro_screen->w; _screen.height = _allegro_screen->h; - _screen.pitch = ((byte*)screen->line[1] - (byte*)screen->line[0]) / (bpp / 8); + _screen.pitch = ((uint8_t*)screen->line[1] - (uint8_t*)screen->line[0]) / (bpp / 8); _screen.dst_ptr = _allegro_screen->line[0]; /* Initialise the screen so we don't blit garbage to the screen */ @@ -247,8 +247,8 @@ std::vector VideoDriver_Allegro::GetListOfMonitorRefreshRates() struct AllegroVkMapping { uint16_t vk_from; - byte vk_count; - byte map_to; + uint8_t vk_count; + uint8_t map_to; }; #define AS(x, z) {x, 0, z} diff --git a/src/video/cocoa/cocoa_keys.h b/src/video/cocoa/cocoa_keys.h index dff4f881a9..2c658ce4c5 100644 --- a/src/video/cocoa/cocoa_keys.h +++ b/src/video/cocoa/cocoa_keys.h @@ -134,7 +134,7 @@ struct CocoaVkMapping { unsigned short vk_from; - byte map_to; + uint8_t map_to; }; #define AS(x, z) {x, z} diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp index c56896eb8a..06998d1bf1 100644 --- a/src/video/dedicated_v.cpp +++ b/src/video/dedicated_v.cpp @@ -108,7 +108,7 @@ const char *VideoDriver_Dedicated::Start(const StringList &) this->UpdateAutoResolution(); int bpp = BlitterFactory::GetCurrentBlitter()->GetScreenDepth(); - _dedicated_video_mem = (bpp == 0) ? nullptr : MallocT(static_cast(_cur_resolution.width) * _cur_resolution.height * (bpp / 8)); + _dedicated_video_mem = (bpp == 0) ? nullptr : MallocT(static_cast(_cur_resolution.width) * _cur_resolution.height * (bpp / 8)); _screen.width = _screen.pitch = _cur_resolution.width; _screen.height = _cur_resolution.height; diff --git a/src/video/opengl.cpp b/src/video/opengl.cpp index 641ebaca54..4889fb5ca2 100644 --- a/src/video/opengl.cpp +++ b/src/video/opengl.cpp @@ -194,8 +194,8 @@ static bool IsOpenGLExtensionSupported(const char *extension) return false; } -static byte _gl_major_ver = 0; ///< Major OpenGL version. -static byte _gl_minor_ver = 0; ///< Minor OpenGL version. +static uint8_t _gl_major_ver = 0; ///< Major OpenGL version. +static uint8_t _gl_minor_ver = 0; ///< Minor OpenGL version. /** * Check if the current OpenGL version is equal or higher than a given one. @@ -204,7 +204,7 @@ static byte _gl_minor_ver = 0; ///< Minor OpenGL version. * @pre OpenGL was initialized. * @return True if the OpenGL version is equal or higher than the requested one. */ -bool IsOpenGLVersionAtLeast(byte major, byte minor) +bool IsOpenGLVersionAtLeast(uint8_t major, uint8_t minor) { return (_gl_major_ver > major) || (_gl_major_ver == major && _gl_minor_ver >= minor); } @@ -944,10 +944,10 @@ bool OpenGLBackend::Resize(int w, int h, bool force) } } else if (bpp == 8) { if (_glClearBufferSubData != nullptr) { - byte b = 0; + uint8_t b = 0; _glClearBufferSubData(GL_PIXEL_UNPACK_BUFFER, GL_R8, 0, line_pixel_count, GL_RED, GL_UNSIGNED_BYTE, &b); } else { - ClearPixelBuffer(line_pixel_count, 0); + ClearPixelBuffer(line_pixel_count, 0); } } @@ -975,10 +975,10 @@ bool OpenGLBackend::Resize(int w, int h, bool force) /* Initialize buffer as 0 == no remap. */ if (_glClearBufferSubData != nullptr) { - byte b = 0; + uint8_t b = 0; _glClearBufferSubData(GL_PIXEL_UNPACK_BUFFER, GL_R8, 0, line_pixel_count, GL_RED, GL_UNSIGNED_BYTE, &b); } else { - ClearPixelBuffer(line_pixel_count, 0); + ClearPixelBuffer(line_pixel_count, 0); } _glBindTexture(GL_TEXTURE_2D, this->anim_texture); diff --git a/src/video/opengl.h b/src/video/opengl.h index 7c5c0f70be..9354afa1aa 100644 --- a/src/video/opengl.h +++ b/src/video/opengl.h @@ -19,7 +19,7 @@ typedef void (*OGLProc)(); typedef OGLProc (*GetOGLProcAddressProc)(const char *proc); -bool IsOpenGLVersionAtLeast(byte major, byte minor); +bool IsOpenGLVersionAtLeast(uint8_t major, uint8_t minor); const char *FindStringInExtensionList(const char *string, const char *substring); class OpenGLSprite; diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index 2bb381f5ec..4bbe30de66 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -241,15 +241,15 @@ std::vector VideoDriver_SDL_Base::GetListOfMonitorRefreshRates() struct SDLVkMapping { SDL_Keycode vk_from; - byte vk_count; - byte map_to; + uint8_t vk_count; + uint8_t map_to; bool unprintable; }; #define AS(x, z) {x, 0, z, false} -#define AM(x, y, z, w) {x, (byte)(y - x), z, false} +#define AM(x, y, z, w) {x, (uint8_t)(y - x), z, false} #define AS_UP(x, z) {x, 0, z, true} -#define AM_UP(x, y, z, w) {x, (byte)(y - x), z, true} +#define AM_UP(x, y, z, w) {x, (uint8_t)(y - x), z, true} static const SDLVkMapping _vk_mapping[] = { /* Pageup stuff + up/down */ diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index 54819eb9e3..a950d4d65d 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -374,12 +374,12 @@ bool VideoDriver_SDL::ClaimMousePointer() struct SDLVkMapping { uint16_t vk_from; - byte vk_count; - byte map_to; + uint8_t vk_count; + uint8_t map_to; }; #define AS(x, z) {x, 0, z} -#define AM(x, y, z, w) {x, (byte)(y - x), z} +#define AM(x, y, z, w) {x, (uint8_t)(y - x), z} static const SDLVkMapping _vk_mapping[] = { /* Pageup stuff + up/down */ diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index 23287b04a8..b820842966 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -56,9 +56,9 @@ bool VideoDriver_Win32Base::ClaimMousePointer() } struct Win32VkMapping { - byte vk_from; - byte vk_count; - byte map_to; + uint8_t vk_from; + uint8_t vk_count; + uint8_t map_to; }; #define AS(x, z) {x, 0, z} diff --git a/src/viewport.cpp b/src/viewport.cpp index 2b2e5611db..fefe970aab 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1694,7 +1694,7 @@ static void ViewportDrawDirtyBlocks() dst = dpi->dst_ptr; - byte bo = UnScaleByZoom(dpi->left + dpi->top, dpi->zoom) & 1; + uint8_t bo = UnScaleByZoom(dpi->left + dpi->top, dpi->zoom) & 1; do { for (int i = (bo ^= 1); i < right; i += 2) blitter->SetPixel(dst, i, 0, (uint8_t)colour); dst = blitter->MoveTo(dst, 0, 1); @@ -2892,7 +2892,7 @@ static int CalcHeightdiff(HighLightStyle style, uint distance, TileIndex start_t /* In the case of an area we can determine whether we were dragging south or * east by checking the X-coordinates of the tiles */ - byte style_t = (byte)(TileX(end_tile) > TileX(start_tile)); + uint8_t style_t = (uint8_t)(TileX(end_tile) > TileX(start_tile)); start_tile = TileAdd(start_tile, ToTileIndexDiff(heightdiff_area_by_dir[style_t])); end_tile = TileAdd(end_tile, ToTileIndexDiff(heightdiff_area_by_dir[2 + style_t])); [[fallthrough]]; @@ -2926,7 +2926,7 @@ static int CalcHeightdiff(HighLightStyle style, uint distance, TileIndex start_t if (swap && distance == 0) style = flip_style_direction[style]; /* Use lookup table for start-tile based on HighLightStyle direction */ - byte style_t = style * 2; + uint8_t style_t = style * 2; assert(style_t < lengthof(heightdiff_line_by_dir) - 13); h0 = TileHeight(TileAdd(start_tile, ToTileIndexDiff(heightdiff_line_by_dir[style_t]))); uint ht = TileHeight(TileAdd(start_tile, ToTileIndexDiff(heightdiff_line_by_dir[style_t + 1]))); @@ -3168,7 +3168,7 @@ static void CalcRaildirsDrawstyle(int x, int y, int method) TileIndex t0 = TileVirtXY(_thd.selstart.x, _thd.selstart.y); TileIndex t1 = TileVirtXY(x, y); uint distance = DistanceManhattan(t0, t1) + 1; - byte index = 0; + uint8_t index = 0; if (distance != 1) { int heightdiff = CalcHeightdiff(b, distance, t0, t1); @@ -3264,7 +3264,7 @@ calc_heightdiff_single_direction:; TileIndex t0 = TileVirtXY(sx, sy); TileIndex t1 = TileVirtXY(x, y); uint distance = DistanceManhattan(t0, t1) + 1; - byte index = 0; + uint8_t index = 0; if (distance != 1) { /* With current code passing a HT_LINE style to calculate the height @@ -3298,7 +3298,7 @@ calc_heightdiff_single_direction:; TileIndex t1 = TileVirtXY(x, y); uint dx = Delta(TileX(t0), TileX(t1)) + 1; uint dy = Delta(TileY(t0), TileY(t1)) + 1; - byte index = 0; + uint8_t index = 0; /* If dragging an area (eg dynamite tool) and it is actually a single * row/column, change the type to 'line' to get proper calculation for height */ diff --git a/src/viewport_type.h b/src/viewport_type.h index 234edadc7c..007528f436 100644 --- a/src/viewport_type.h +++ b/src/viewport_type.h @@ -139,7 +139,7 @@ enum ViewportDragDropSelectionProcess { /** * Target of the viewport scrolling GS method */ -enum ViewportScrollTarget : byte { +enum ViewportScrollTarget : uint8_t { VST_EVERYONE, ///< All players VST_COMPANY, ///< All players in specific company VST_CLIENT, ///< Single player diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index 249dfb9ac2..5a0a94d172 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -892,7 +892,7 @@ void DrawShoreTile(Slope tileh) { /* Converts the enum Slope into an offset based on SPR_SHORE_BASE. * This allows to calculate the proper sprite to display for this Slope */ - static const byte tileh_to_shoresprite[32] = { + static const uint8_t tileh_to_shoresprite[32] = { 0, 1, 2, 3, 4, 16, 6, 7, 8, 9, 17, 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 10, 15, 0, }; diff --git a/src/water_map.h b/src/water_map.h index e32780d39d..116a37f228 100644 --- a/src/water_map.h +++ b/src/water_map.h @@ -44,7 +44,7 @@ enum WaterTileType { }; /** classes of water (for #WATER_TILE_CLEAR water tile type). */ -enum WaterClass : byte { +enum WaterClass : uint8_t { WATER_CLASS_SEA, ///< Sea. WATER_CLASS_CANAL, ///< Canal. WATER_CLASS_RIVER, ///< River. @@ -326,7 +326,7 @@ inline DiagDirection GetLockDirection(Tile t) * @return The part. * @pre IsTileType(t, MP_WATER) && IsLock(t) */ -inline byte GetLockPart(Tile t) +inline uint8_t GetLockPart(Tile t) { assert(IsLock(t)); return GB(t.m5(), WBL_LOCK_PART_BEGIN, WBL_LOCK_PART_COUNT); @@ -338,7 +338,7 @@ inline byte GetLockPart(Tile t) * @return Random bits of the tile. * @pre IsTileType(t, MP_WATER) */ -inline byte GetWaterTileRandomBits(Tile t) +inline uint8_t GetWaterTileRandomBits(Tile t) { assert(IsTileType(t, MP_WATER)); return t.m4(); diff --git a/src/waypoint_base.h b/src/waypoint_base.h index 87f5d55c93..f431958e6e 100644 --- a/src/waypoint_base.h +++ b/src/waypoint_base.h @@ -32,7 +32,7 @@ struct Waypoint final : SpecializedStation { return IsRailWaypointTile(tile) && GetStationIndex(tile) == this->index; } - uint32_t GetNewGRFVariable(const struct ResolverObject &object, byte variable, byte parameter, bool *available) const override; + uint32_t GetNewGRFVariable(const struct ResolverObject &object, uint8_t variable, uint8_t parameter, bool *available) const override; void GetTileArea(TileArea *ta, StationType type) const override; diff --git a/src/waypoint_cmd.cpp b/src/waypoint_cmd.cpp index 31ee1f496d..52e0ca725c 100644 --- a/src/waypoint_cmd.cpp +++ b/src/waypoint_cmd.cpp @@ -155,7 +155,7 @@ static CommandCost IsValidTileForWaypoint(TileIndex tile, Axis axis, StationID * return CommandCost(); } -extern void GetStationLayout(byte *layout, uint numtracks, uint plat_len, const StationSpec *statspec); +extern void GetStationLayout(uint8_t *layout, uint numtracks, uint plat_len, const StationSpec *statspec); extern CommandCost FindJoiningWaypoint(StationID existing_station, StationID station_to_join, bool adjacent, TileArea ta, Waypoint **wp); extern CommandCost CanExpandRailStation(const BaseStation *st, TileArea &new_ta); @@ -173,7 +173,7 @@ extern CommandCost CanExpandRailStation(const BaseStation *st, TileArea &new_ta) * @param adjacent allow waypoints directly adjacent to other waypoints. * @return the cost of this operation or an error */ -CommandCost CmdBuildRailWaypoint(DoCommandFlag flags, TileIndex start_tile, Axis axis, byte width, byte height, StationClassID spec_class, uint16_t spec_index, StationID station_to_join, bool adjacent) +CommandCost CmdBuildRailWaypoint(DoCommandFlag flags, TileIndex start_tile, Axis axis, uint8_t width, uint8_t height, StationClassID spec_class, uint16_t spec_index, StationID station_to_join, bool adjacent) { if (!IsValidAxis(axis)) return CMD_ERROR; /* Check if the given station class is valid */ @@ -181,7 +181,7 @@ CommandCost CmdBuildRailWaypoint(DoCommandFlag flags, TileIndex start_tile, Axis if (spec_index >= StationClass::Get(spec_class)->GetSpecCount()) return CMD_ERROR; /* The number of parts to build */ - byte count = axis == AXIS_X ? height : width; + uint8_t count = axis == AXIS_X ? height : width; if ((axis == AXIS_X ? width : height) != 1) return CMD_ERROR; if (count == 0 || count > _settings_game.station.station_spread) return CMD_ERROR; @@ -258,17 +258,17 @@ CommandCost CmdBuildRailWaypoint(DoCommandFlag flags, TileIndex start_tile, Axis wp->UpdateVirtCoord(); const StationSpec *spec = StationClass::Get(spec_class)->GetSpec(spec_index); - std::vector layout(count); + std::vector layout(count); if (spec != nullptr) { /* For NewGRF waypoints we like to have their style. */ GetStationLayout(layout.data(), count, 1, spec); } - byte map_spec_index = AllocateSpecToStation(spec, wp, true); + uint8_t map_spec_index = AllocateSpecToStation(spec, wp, true); Company *c = Company::Get(wp->owner); for (int i = 0; i < count; i++) { TileIndex tile = start_tile + i * offset; - byte old_specindex = HasStationTileRail(tile) ? GetCustomStationSpecIndex(tile) : 0; + uint8_t old_specindex = HasStationTileRail(tile) ? GetCustomStationSpecIndex(tile) : 0; if (!HasStationTileRail(tile)) c->infrastructure.station++; bool reserved = IsTileType(tile, MP_RAILWAY) ? HasBit(GetRailReservationTrackBits(tile), AxisToTrack(axis)) : diff --git a/src/waypoint_cmd.h b/src/waypoint_cmd.h index 213bd8d6c6..b64ef0496c 100644 --- a/src/waypoint_cmd.h +++ b/src/waypoint_cmd.h @@ -13,9 +13,9 @@ #include "command_type.h" #include "station_type.h" -enum StationClassID : byte; +enum StationClassID : uint8_t; -CommandCost CmdBuildRailWaypoint(DoCommandFlag flags, TileIndex start_tile, Axis axis, byte width, byte height, StationClassID spec_class, uint16_t spec_index, StationID station_to_join, bool adjacent); +CommandCost CmdBuildRailWaypoint(DoCommandFlag flags, TileIndex start_tile, Axis axis, uint8_t width, uint8_t height, StationClassID spec_class, uint16_t spec_index, StationID station_to_join, bool adjacent); CommandCost CmdRemoveFromRailWaypoint(DoCommandFlag flags, TileIndex start, TileIndex end, bool keep_rail); CommandCost CmdBuildBuoy(DoCommandFlag flags, TileIndex tile); CommandCost CmdRenameWaypoint(DoCommandFlag flags, StationID waypoint_id, const std::string &text); diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp index ee8649fcb4..a4a1d9953c 100644 --- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -44,7 +44,7 @@ struct DropdownWindow : Window { Rect wi_rect; ///< Rect of the button that opened the dropdown. DropDownList list; ///< List with dropdown menu items. int selected_result; ///< Result value of the selected item in the list. - byte click_delay = 0; ///< Timer to delay selection. + uint8_t click_delay = 0; ///< Timer to delay selection. bool drag_mode = true; bool instant_close; ///< Close the window when the mouse button is raised. bool persist; ///< Persist dropdown menu. diff --git a/src/widgets/slider_func.h b/src/widgets/slider_func.h index 652a6c5c2d..fc2c9f8113 100644 --- a/src/widgets/slider_func.h +++ b/src/widgets/slider_func.h @@ -16,7 +16,7 @@ void DrawSliderWidget(Rect r, int min_value, int max_value, int value, const std::map &labels); bool ClickSliderWidget(Rect r, Point pt, int min_value, int max_value, int &value); -inline bool ClickSliderWidget(Rect r, Point pt, int min_value, int max_value, byte &value) +inline bool ClickSliderWidget(Rect r, Point pt, int min_value, int max_value, uint8_t &value) { int tmp_value = value; if (!ClickSliderWidget(r, pt, min_value, max_value, tmp_value)) return false; diff --git a/src/window.cpp b/src/window.cpp index b12d9e11a1..1e92885755 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -85,7 +85,7 @@ Point _cursorpos_drag_start; int _scrollbar_start_pos; int _scrollbar_size; -byte _scroller_click_timeout = 0; +uint8_t _scroller_click_timeout = 0; bool _scrolling_viewport; ///< A viewport is being scrolled with the mouse. bool _mouse_hovering; ///< The mouse is hovering over the same point. diff --git a/src/window_gui.h b/src/window_gui.h index 3f6b15104f..19bf4d0334 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -476,7 +476,7 @@ public: * Marks a widget as raised and dirty (redraw), when it is marked as lowered. * @param widget_index index of this widget in the window */ - inline void RaiseWidgetWhenLowered(byte widget_index) + inline void RaiseWidgetWhenLowered(uint8_t widget_index) { if (this->IsWidgetLowered(widget_index)) { this->RaiseWidget(widget_index); @@ -1025,7 +1025,7 @@ extern Point _cursorpos_drag_start; extern int _scrollbar_start_pos; extern int _scrollbar_size; -extern byte _scroller_click_timeout; +extern uint8_t _scroller_click_timeout; extern bool _scrolling_viewport; extern bool _mouse_hovering; diff --git a/src/zoom_type.h b/src/zoom_type.h index 38fd8bc112..bc6d58d8be 100644 --- a/src/zoom_type.h +++ b/src/zoom_type.h @@ -16,7 +16,7 @@ static uint const ZOOM_LVL_SHIFT = 2; static uint const ZOOM_LVL_BASE = 1 << ZOOM_LVL_SHIFT; /** All zoom levels we know. */ -enum ZoomLevel : byte { +enum ZoomLevel : uint8_t { /* Our possible zoom-levels */ ZOOM_LVL_BEGIN = 0, ///< Begin for iteration. ZOOM_LVL_NORMAL = 0, ///< The normal zoom level. From a886bd96661a602f813424021b964da5c0e240d5 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 17 Mar 2024 00:42:38 +0100 Subject: [PATCH 135/695] Fix #12319, 3a676a5: Some SSE blitters were broken due to ODR violations (#12322) --- src/blitter/32bpp_sse_func.hpp | 27 +++++++++++++++++---------- src/blitter/32bpp_sse_type.h | 6 ++++++ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/blitter/32bpp_sse_func.hpp b/src/blitter/32bpp_sse_func.hpp index e02a232648..77c2bec954 100644 --- a/src/blitter/32bpp_sse_func.hpp +++ b/src/blitter/32bpp_sse_func.hpp @@ -10,10 +10,17 @@ #ifndef BLITTER_32BPP_SSE_FUNC_HPP #define BLITTER_32BPP_SSE_FUNC_HPP +/* ATTENTION + * This file is compiled multiple times with different defines for SSE_VERSION and MARGIN_NORMAL_THRESHOLD. + * Be careful when declaring things with external linkage. + * Use internal linkage instead, i.e. "static". + */ +#define INTERNAL_LINKAGE static + #ifdef WITH_SSE GNU_TARGET(SSE_TARGET) -inline void InsertFirstUint32(const uint32_t value, __m128i &into) +INTERNAL_LINKAGE inline void InsertFirstUint32(const uint32_t value, __m128i &into) { #if (SSE_VERSION >= 4) into = _mm_insert_epi32(into, value, 0); @@ -24,7 +31,7 @@ inline void InsertFirstUint32(const uint32_t value, __m128i &into) } GNU_TARGET(SSE_TARGET) -inline void InsertSecondUint32(const uint32_t value, __m128i &into) +INTERNAL_LINKAGE inline void InsertSecondUint32(const uint32_t value, __m128i &into) { #if (SSE_VERSION >= 4) into = _mm_insert_epi32(into, value, 1); @@ -35,7 +42,7 @@ inline void InsertSecondUint32(const uint32_t value, __m128i &into) } GNU_TARGET(SSE_TARGET) -inline void LoadUint64(const uint64_t value, __m128i &into) +INTERNAL_LINKAGE inline void LoadUint64(const uint64_t value, __m128i &into) { #ifdef POINTER_IS_64BIT into = _mm_cvtsi64_si128(value); @@ -50,7 +57,7 @@ inline void LoadUint64(const uint64_t value, __m128i &into) } GNU_TARGET(SSE_TARGET) -inline __m128i PackUnsaturated(__m128i from, const __m128i &mask) +INTERNAL_LINKAGE inline __m128i PackUnsaturated(__m128i from, const __m128i &mask) { #if (SSE_VERSION == 2) from = _mm_and_si128(from, mask); // PAND, wipe high bytes to keep low bytes when packing @@ -61,7 +68,7 @@ inline __m128i PackUnsaturated(__m128i from, const __m128i &mask) } GNU_TARGET(SSE_TARGET) -inline __m128i DistributeAlpha(const __m128i from, const __m128i &mask) +INTERNAL_LINKAGE inline __m128i DistributeAlpha(const __m128i from, const __m128i &mask) { #if (SSE_VERSION == 2) __m128i alphaAB = _mm_shufflelo_epi16(from, 0x3F); // PSHUFLW, put alpha1 in front of each rgb1 @@ -73,7 +80,7 @@ inline __m128i DistributeAlpha(const __m128i from, const __m128i &mask) } GNU_TARGET(SSE_TARGET) -inline __m128i AlphaBlendTwoPixels(__m128i src, __m128i dst, const __m128i &distribution_mask, const __m128i &pack_mask, const __m128i &alpha_mask) +INTERNAL_LINKAGE inline __m128i AlphaBlendTwoPixels(__m128i src, __m128i dst, const __m128i &distribution_mask, const __m128i &pack_mask, const __m128i &alpha_mask) { __m128i srcAB = _mm_unpacklo_epi8(src, _mm_setzero_si128()); // PUNPCKLBW, expand each uint8_t into uint16 __m128i dstAB = _mm_unpacklo_epi8(dst, _mm_setzero_si128()); @@ -97,7 +104,7 @@ inline __m128i AlphaBlendTwoPixels(__m128i src, __m128i dst, const __m128i &dist * rgb = rgb * ((256/4) * 4 - (alpha/4)) / ((256/4) * 4) */ GNU_TARGET(SSE_TARGET) -inline __m128i DarkenTwoPixels(__m128i src, __m128i dst, const __m128i &distribution_mask, const __m128i &tr_nom_base) +INTERNAL_LINKAGE inline __m128i DarkenTwoPixels(__m128i src, __m128i dst, const __m128i &distribution_mask, const __m128i &tr_nom_base) { __m128i srcAB = _mm_unpacklo_epi8(src, _mm_setzero_si128()); __m128i dstAB = _mm_unpacklo_epi8(dst, _mm_setzero_si128()); @@ -111,7 +118,7 @@ inline __m128i DarkenTwoPixels(__m128i src, __m128i dst, const __m128i &distribu IGNORE_UNINITIALIZED_WARNING_START GNU_TARGET(SSE_TARGET) -static Colour ReallyAdjustBrightness(Colour colour, uint8_t brightness) +INTERNAL_LINKAGE Colour ReallyAdjustBrightness(Colour colour, uint8_t brightness) { uint64_t c16 = colour.b | (uint64_t) colour.g << 16 | (uint64_t) colour.r << 32; c16 *= brightness; @@ -145,7 +152,7 @@ IGNORE_UNINITIALIZED_WARNING_STOP /** ReallyAdjustBrightness() is not called that often. * Inlining this function implies a far jump, which has a huge latency. */ -inline Colour AdjustBrightneSSE(Colour colour, uint8_t brightness) +INTERNAL_LINKAGE inline Colour AdjustBrightneSSE(Colour colour, uint8_t brightness) { /* Shortcut for normal brightness. */ if (brightness == Blitter_32bppBase::DEFAULT_BRIGHTNESS) return colour; @@ -154,7 +161,7 @@ inline Colour AdjustBrightneSSE(Colour colour, uint8_t brightness) } GNU_TARGET(SSE_TARGET) -inline __m128i AdjustBrightnessOfTwoPixels([[maybe_unused]] __m128i from, [[maybe_unused]] uint32_t brightness) +INTERNAL_LINKAGE inline __m128i AdjustBrightnessOfTwoPixels([[maybe_unused]] __m128i from, [[maybe_unused]] uint32_t brightness) { #if (SSE_VERSION < 3) NOT_REACHED(); diff --git a/src/blitter/32bpp_sse_type.h b/src/blitter/32bpp_sse_type.h index d3a73df1c3..e8662e4949 100644 --- a/src/blitter/32bpp_sse_type.h +++ b/src/blitter/32bpp_sse_type.h @@ -10,6 +10,12 @@ #ifndef BLITTER_32BPP_SSE_TYPE_H #define BLITTER_32BPP_SSE_TYPE_H +/* ATTENTION + * This file is compiled multiple times with different defines for SSE_VERSION. + * Be careful when declaring things with external linkage. + * Use internal linkage instead, i.e. "static". + */ + #ifdef WITH_SSE #include "32bpp_simple.hpp" From 6c5a8f55df8113b294651e63784825fd0b8bd417 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 17 Mar 2024 04:40:30 +0000 Subject: [PATCH 136/695] Update: Translations from eints norwegian (bokmal): 58 changes by eriksorngard vietnamese: 45 changes by KhoiCanDev greek: 21 changes by Xertoveizer ukrainian: 5 changes by StepanIvasyn tamil: 24 changes by merni-ns lithuanian: 7 changes by dziugas1959 portuguese (brazilian): 61 changes by pasantoro polish: 21 changes by aefoes --- src/lang/brazilian_portuguese.txt | 122 +++++++++++++++--------------- src/lang/greek.txt | 21 +++++ src/lang/lithuanian.txt | 8 +- src/lang/norwegian_bokmal.txt | 116 ++++++++++++++-------------- src/lang/polish.txt | 42 +++++----- src/lang/tamil.txt | 27 ++++++- src/lang/ukrainian.txt | 9 ++- src/lang/vietnamese.txt | 82 +++++++++++--------- 8 files changed, 242 insertions(+), 185 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 6d01f8d923..536f11a225 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -881,14 +881,14 @@ STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL :{BIG_FONT}{BLAC STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM :{BIG_FONT}{BLACK}Métodos agrícolas aperfeiçoados na {INDUSTRY} deverão duplicar a produção! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}Produção de {STRING} n{G o a} {INDUSTRY} aumenta {COMMA}%! STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}A produção de {INDUSTRY} foi reduzida em 50% -STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Infestação de insetos causa destruição {G no na} {INDUSTRY}!{}Produção diminui 50% +STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Infestação de insetos causa destruição n{G o a} {INDUSTRY}!{}Produção diminui 50% STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}Produção de {STRING} n{G o a} {INDUSTRY} diminui {COMMA}%! ###length VEHICLE_TYPES STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} está aguardando no depósito STR_NEWS_ROAD_VEHICLE_IS_WAITING :{WHITE}{VEHICLE} está aguardando no depósito STR_NEWS_SHIP_IS_WAITING :{WHITE}{VEHICLE} está aguardando no depósito -STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE} está aguardando no hangar +STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE} está aguardando no hangar de aeronaves ###next-name-looks-similar # Order review system / warnings @@ -910,23 +910,23 @@ STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} parou porque uma ordem de adaptação falhou STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Renovação automática falhou para {VEHICLE}{}{STRING} -STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}Novo {STRING} já disponível! +STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}Nov{G o a} {STRING} já disponível! STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} -STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Novo {STRING} já disponível! - {ENGINE} +STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G o a} {STRING} já disponível! - {ENGINE} STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Abrir a janela de grupos focada no grupo do veículo STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}{STATION} não aceita mais: {CARGO_LIST} STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION} agora aceita: {CARGO_LIST} -STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Oferta do subsídio expirou:{}{}{STRING} d{G o a} {STRING} para {STRING} agora não será subsidiado -STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsídio retirado:{}{}Transportar {STRING} d{G o a} {STRING} para {STRING} não é mais subsidiado -STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subsídio de serviço oferecido:{}{}Primeiro transporte de {STRING} d{G o a} {STRING} para {STRING} irá receber {UNITS_YEARS_OR_MINUTES} de subsídio da autoridade local! +STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Oferta de subsídio expirou:{}{}{STRING} d{G e a} {STRING} para {STRING} agora não será subsidiado +STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsídio retirado:{}{}Transportar {STRING} d{G e a} {STRING} para {STRING} não é mais subsidiado +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subsídio de serviço oferecido:{}{}Primeiro transporte de {STRING} d{G e a} {STRING} para {STRING} receberá {UNITS_YEARS_OR_MINUTES} de subsídio da autoridade local! ###length 4 -STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} d{G o a} {STRING} para {STRING} será pago a 150% pelos próximos {UNITS_YEARS_OR_MINUTES}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} d{G o a} {STRING} para {STRING} será pago a 200% pelos próximos {UNITS_YEARS_OR_MINUTES}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} d{G o a} {STRING} para {STRING} será pago a 300% pelos próximos {UNITS_YEARS_OR_MINUTES}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} d{G o a} {STRING} para {STRING} será pago a 400% pelos próximos {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} d{G e a} {STRING} para {STRING} será pago a 150% pelos próximos {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} d{G e a} {STRING} para {STRING} será pago a 200% pelos próximos {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} d{G e a} {STRING} para {STRING} será pago a 300% pelos próximos {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} d{G e a} {STRING} para {STRING} será pago a 400% pelos próximos {UNITS_YEARS_OR_MINUTES}! STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Tráfego caótico em {TOWN}!{}{}Programa de reconstrução de estradas financiado por {STRING} provoca 6 meses de sofrimento aos motoristas! STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}Tráfego caótico em {TOWN}!{}{}Programa de reconstrução de estradas financiado por {STRING} provoca 6 minutos de sofrimento aos motoristas! @@ -1066,7 +1066,7 @@ STR_GAME_OPTIONS_GUI_SCALE_4X :4x STR_GAME_OPTIONS_GUI_SCALE_5X :5x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Pesquisa automatizada -STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participar de pesquisa automatizada +STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participar da pesquisa automatizada STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Quando ativado, o OpenTTD enviará uma pesquisa ao sair de um jogo STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}Sobre pesquisa e privacidade STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Abrir um navegador com mais informações sobre a pesquisa automatizada @@ -1405,7 +1405,7 @@ STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Mostrar janela STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Se ativado, a janela de finanças será exibida no fim de cada ano, permitindo uma inspeção fácil da situação financeira da empresa STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Se ativado, a janela de finanças será exibida no fim de cada período, permitindo uma inspeção fácil da situação financeira da empresa -STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Novas ordens, por padrão, são 'sem parar' : {STRING} +STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Novas ordens são 'sem parar', por padrão: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalmente, um veículo irá parar em cada estação por onde passa. Ativando esta configuração, o veículo passará por todas as estações na sua rota, sem parar, até o destino final. Esta opção só define um modo padrão para novas ordens. Ordens individuais podem ser definidas explicitamente para qualquer um dos dois comportamentos STR_CONFIG_SETTING_STOP_LOCATION :Novas ordens de trem, por padrão, têm parada no {STRING} da plataforma @@ -1547,7 +1547,7 @@ STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as carg STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Se ativado, a carga transportável pelo veículo aparecerá acima dele nas listas de veículos STR_CONFIG_SETTING_LANDSCAPE :Clima: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os climas definem a jogabilidade básica dos cenários, com diferentes cargas e necessidades para o crescimento das localidades. NewGRFs e Scripts de Jogo permitem um controle mais preciso sobre isso +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os climas definem a jogabilidade básica dos cenários, com diferentes cargas e requisitos para crescimento das localidades. NewGRFs e Scripts de Jogo permitem um controle mais preciso sobre isso STR_CONFIG_SETTING_LAND_GENERATOR :Gerador de Terreno: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :O gerador 'Original' depende do conjunto gráfico base e produz formas de terreno pré-definidas. 'TerraGenesis' é um gerador baseado no algoritmo de ruído de Perlin, que permite configurações mais refinadas @@ -1565,14 +1565,14 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distância máx STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limite de distância entre a borda do mapa e o local de construção de refinarias e plataformas de petróleo. Em mapas de ilhas isso garante que elas fiquem perto da costa. Em mapas com mais de 256 quadrados esse valor é aumentado STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altura da linha de neve: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Escolher em que latitude a neve começa na paisagem subártica. A neve também afeta a geração de indústrias e os requisitos de crescimento das localidades. Só pode ser modificado no Editor de Cenário ou então é calculado usando a "cobertura de neve" +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Escolher em que latitude a neve começa na paisagem subártica. A neve também afeta a geração de indústrias e os requisitos para crescimento das localidades. Só pode ser modificado no Editor de Cenário ou então é calculado usando a "cobertura de neve" STR_CONFIG_SETTING_SNOW_COVERAGE :Cobertura de neve: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de neve na paisagem subártica. A neve também afeta a geração de indústrias e os requisitos para crescimento das localidades. Usado apenas durante a geração do mapa. O nível do mar e as suas encostas nunca têm neve +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de neve na paisagem subártica. A neve também afeta a geração de indústrias e os requisitos para crescimento das localidades. Usado somente durante a geração do mapa. O nível do mar e as suas encostas nunca têm neve STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Cobertura do deserto: {STRING} -STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de deserto na paisagem tropical. O deserto também afeta a geração de indústrias. Usado somente durante a geração do mapa +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de deserto na paisagem tropical. O deserto também afeta a geração de indústrias e os requisitos para crescimento das localidades. Usado somente durante a geração do mapa STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Irregularidade do terreno: {STRING} @@ -1663,10 +1663,10 @@ STR_CONFIG_SETTING_PREFER_TEAMCHAT :Preferência de STR_CONFIG_SETTING_PREFER_TEAMCHAT_HELPTEXT :Trocar o mapeamento entre o chat interno da empresa e o chat público para e , respectivamente STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :Velocidade da roda do mouse no mapa: {STRING} -STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Controlar a sensibilidade da roda do mouse na rolagem +STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Controlar a sensibilidade do deslocamento com a roda do mouse STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING :Função da roda do mouse: {STRING} -STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING_HELPTEXT :Ativar o rolamento com rodas de mouse bidimensionais +STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING_HELPTEXT :Permitir o deslocamento com rodas de mouse bidimensionais ###length 3 STR_CONFIG_SETTING_SCROLLWHEEL_ZOOM :Ampliar o mapa STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Mover o mapa @@ -1802,16 +1802,16 @@ STR_CONFIG_SETTING_MAX_SHIPS :Número máximo STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT :Número máximo de embarcações que uma empresa pode ter STR_CONFIG_SETTING_AI_BUILDS_TRAINS :Desativar trens para o computador: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT :Quando ativada, esta configuração não permite a construção de trens por um competidor controlado por IA +STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT :Ativando esta configuração, um competidor controlado por IA não poderá construir trens STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :Desativar veículos para o computador: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :Quando ativada, esta configuração não permite a construção de veículos rodoviários por um competidor controlado por IA +STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :Ativando esta configuração, um competidor controlado por IA não poderá construir veículos rodoviários STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :Desativar aeronaves para o computador: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Quando ativada, esta configuração não permite a construção de aeronaves por um competidor controlado por IA +STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Ativando esta configuração, um competidor controlado por IA não poderá construir aeronaves STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desativar embarcações para o computador: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Quando ativada, esta configuração não permite a construção de embarcações por um competidor controlado por IA +STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Ativando esta configuração, um competidor controlado por IA não poderá construir embarcações STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permitir IAs em multijogador: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permitir que competidores controlados por IA participem de jogos multijogador @@ -1847,7 +1847,7 @@ STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ativar limite d STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Quando ativado, usa o limite de velocidade dos vagões para definir a velocidade máxima de um trem STR_CONFIG_SETTING_DISABLE_ELRAILS :Desativar ferrovias elétricas: {STRING} -STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Quando ativada, esta configuração elimina a necessidade de eletrificar os trilhos para que locomotivas elétricas possam utilizá-los +STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Ativando esta configuração, não será necessário eletrificar os trilhos para que locomotivas elétricas possam utilizá-los STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Chegada do primeiro veículo na estação do jogador: {STRING} STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Mostrar um jornal quando o primeiro veículo chegar a uma estação nova do jogador @@ -1954,13 +1954,13 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Aleatória STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Localidades podem construir estradas: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Permitir que localidades construam estradas para crescimento. Desative para prevenir a construção de estradas pelas autoridades locais STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Localidades podem construir passagens de nível: {STRING} -STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Quando ativada, esta configuração permite que as localidades construam passagens de nível +STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Ativando esta configuração, as localidades poderão construir passagens de nível STR_CONFIG_SETTING_NOISE_LEVEL :Limitar a localização do aeroporto em função do nível de ruído: {STRING} STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Permitir que as localidades impeçam a construção de aeroportos em função do nível de aceitação de ruído, que é baseado no total de habitantes da localidade e no tamanho e distância do aeroporto. Se esta configuração estiver desativada, as localidades permitirão somente dois aeroportos, a menos que a atitude da autoridade local esteja definida como "Permissiva" STR_CONFIG_SETTING_TOWN_FOUNDING :Fundar localidades no jogo: {STRING} -STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Quando ativada, esta configuração permite aos jogadores fundar novas localidades no jogo +STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Ativando esta configuração, os jogadores poderão fundar novas localidades no jogo ###length 3 STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Proibido STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permitido @@ -1996,7 +1996,7 @@ STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :desativado STR_CONFIG_SETTING_ZOOM_MIN :Nível máximo de ampliação: {STRING} -STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Nível máximo de ampliação para visualizações. Níveis de ampliação muito grandes aumentam os requisitos de memória +STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Nível máximo de ampliação para visualizações. Níveis de ampliação muito grandes aumentam o uso de memória STR_CONFIG_SETTING_ZOOM_MAX :Nível máximo de redução: {STRING} STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Nível máximo de redução para visualizações. Níveis de redução muito grandes podem causar atrasos quando utilizados ###length 6 @@ -2058,11 +2058,11 @@ STR_CONFIG_SETTING_DEMAND_SIZE :Quantidade de c STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Definir isto para menos de 100% faz com que a distribuição simétrica comporte-se mais como a assimétrica. Menos carga será forçadamente devolvida se uma certa quantidade for enviada a uma estação. Se você definir em 0% a distribuição simétrica se comportará exatamente como a assimétrica STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturação de rotas curtas antes de usar rotas de grande capacidade: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequentemente há diversas rotas entre duas estações. Cargodist irá saturar a rota mais curta primeiro, depois usar a segunda rota mais curta até saturá-la, e assim por diante. A saturação é determinada por uma estimativa da capacidade e da utilização prevista. Ao saturar todas as rotas, se ainda existir demanda não atendida, Cargodist irá sobrecarregar todas as rotas, dando preferência àquelas de maior capacidade. Entretanto, na maioria das vezes o algoritmo não irá estimar corretamente a capacidade. Esta configuração permite definir até que porcentagem uma rota mais curta deverá ser saturada na primeira passada antes do algoritmo selecionar a próxima rota mais longa. Defina-o para menos de 100% para evitar estações sobrecarregadas no caso de capacidade superestimada +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequentemente há diversas rotas entre duas estações. Cargodist irá saturar a rota mais curta primeiro, depois usar a segunda rota mais curta até saturá-la, e assim por diante. A saturação é determinada por uma estimativa da capacidade e da utilização prevista. Ao saturar todas as rotas, se ainda existir demanda não atendida, Cargodist irá sobrecarregar todas as rotas, dando preferência àquelas de maior capacidade. Entretanto, na maioria das vezes o algoritmo não irá estimar corretamente a capacidade. Esta configuração permite definir até que porcentagem uma rota mais curta deverá ser saturada na primeira passada, antes do algoritmo selecionar a próxima rota mais longa. Defina para menos de 100% para evitar estações sobrecarregadas no caso de capacidade superestimada STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unidades de velocidade (terrestre): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Unidades de velocidade (náutica): {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Sempre que uma velocidade for exibida na interface do usuário, mostrar na unidade selecionada +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Sempre que uma velocidade for exibida na interface do usuário, mostrar nessas unidades STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Métrico (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) @@ -2071,35 +2071,35 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_SECS :Unidades do jog STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :Nós STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Unidade de potência veicular: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Sempre que a potência de um veículo for exibida na interface de usuário, mostrar na unidade selecionada +STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Sempre que a potência de um veículo for exibida na interface de usuário, mostrar nessas unidades ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL :Imperial (hp) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_METRIC :Métrico (hp) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_SI :SI (kW) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT :Unidades de peso: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT :Sempre que um peso for exibido na interface de usuário, mostrar na unidade selecionada +STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT :Sempre que um peso for exibido na interface de usuário, mostrar nessas unidades ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL :Imperial (t/ton curta) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_METRIC :Métrico (t/tonelada) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_SI :SI (kg) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME :Unidades volumétricas: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_HELPTEXT :Sempre que um volume for exibido na interface de usuário, mostrar na unidade selecionada +STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_HELPTEXT :Sempre que um volume for exibido na interface de usuário, mostrar nessas unidades ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL :Imperial (gal) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_METRIC :Métrico (l) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_SI :SI (m³) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Unidade de força de tração: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Sempre que o esforço de tração (ou força de tração) for exibido na interface de usuário, mostrar na unidade selecionada +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Sempre que o esforço de tração (ou força de tração) for exibido na interface de usuário, mostrar nessas unidades ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL :Imperial (lbf) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_METRIC :Métrico (kgf) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_SI :SI (kN) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT :Unidades de altura: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT :Sempre que uma altura for exibida na interface do usuário, mostrar na unidade selecionada +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT :Sempre que uma altura for exibida na interface do usuário, mostrar nessas unidades ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :Imperial (ft) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :Métrico (m) @@ -2134,11 +2134,11 @@ STR_CONFIG_SETTING_AI_NPC :Competidores IA STR_CONFIG_SETTING_NETWORK :Rede STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Gerador de rotas para trens: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Algoritmo usado para gerar as rotas dos trens +STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Algoritmo usado para estabelecer as rotas dos trens STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Gerador de rotas para veículos: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Algoritmo usado para gerar as rotas dos veículos rodoviários +STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Algoritmo usado para estabelecer as rotas dos veículos rodoviários STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Gerador de rotas para embarcações: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Algoritmo usado para gerar as rotas das embarcações +STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Algoritmo usado para estabelecer as rotas das embarcações STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Reversão automática em sinais: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permitir que os trens invertam a direção em um sinal, se eles esperaram lá muito tempo ###length 2 @@ -2165,7 +2165,7 @@ STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... igno STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ignorando conjunto de Sons Base '{STRING}': não encontrado STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ignorando conjunto de Músicas Base '{STRING}': não encontrado STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Memória insuficiente -STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Falha ao alocar {BYTES} de memória para sprites. A memória reservada para sprites foi reduzida para {BYTES}. Isto irá reduzir o desempenho do OpenTTD. Para diminuir os requisitos de memória você pode desabilitar gráficos de 32bpp e/ou diminuir os níveis de ampliação das visualizações +STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Falha ao alocar {BYTES} de memória para sprites. A memória reservada para sprites foi reduzida para {BYTES}. Isto irá reduzir o desempenho do OpenTTD. Para diminuir o uso de memória você pode desabilitar gráficos de 32bpp e/ou diminuir os níveis de ampliação das visualizações # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Erro nas configurações de vídeo... @@ -2176,7 +2176,7 @@ STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... O co STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} STR_INTRO_NEW_GAME :{BLACK}Novo Jogo -STR_INTRO_LOAD_GAME :{BLACK}Abrir um Jogo +STR_INTRO_LOAD_GAME :{BLACK}Abrir Jogo STR_INTRO_PLAY_SCENARIO :{BLACK}Jogar em Cenário STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Jogar em Mapa Topográfico STR_INTRO_SCENARIO_EDITOR :{BLACK}Editor de Cenário @@ -2525,8 +2525,8 @@ STR_NETWORK_ASK_RELAY_NO :{BLACK}Não STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Sim, desta vez STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Sim, não perguntar novamente -STR_NETWORK_ASK_SURVEY_CAPTION :Participar de pesquisa automatizada? -STR_NETWORK_ASK_SURVEY_TEXT :Você gostaria de participar da pesquisa automatizada?{}O OpenTTD enviará uma pesquisa ao sair de um jogo.{}Você pode alterar isso a qualquer momento em "Opções do Jogo". +STR_NETWORK_ASK_SURVEY_CAPTION :Participar da pesquisa automatizada? +STR_NETWORK_ASK_SURVEY_TEXT :Você gostaria de participar da pesquisa automatizada?{}O OpenTTD enviará uma pesquisa quando sair de um jogo.{}Você pode alterar isso a qualquer momento em "Opções do Jogo". STR_NETWORK_ASK_SURVEY_PREVIEW :Pré-visualizar resultado da pesquisa STR_NETWORK_ASK_SURVEY_LINK :Sobre pesquisa e privacidade STR_NETWORK_ASK_SURVEY_NO :Não @@ -3618,10 +3618,10 @@ STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Populaç STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} no último mês: {ORANGE}{COMMA}{BLACK} máx: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}{CARGO_LIST} no último minuto: {ORANGE}{COMMA}{BLACK} máx: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Carga necessária para o crescimento da localidade: -STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} é necessário -STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} é necessário no inverno -STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} foi entregado -STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (ainda é necessário) +STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} necessário +STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} necessário no inverno +STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} entregado +STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (ainda necessário) STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (entregado) STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Localidade cresce a cada {ORANGE}{UNITS_DAYS_OR_SECONDS} STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Localidade cresce a cada {ORANGE}{UNITS_DAYS_OR_SECONDS} (financiada) @@ -3647,8 +3647,8 @@ STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Classifi STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Ações disponíveis: STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista de ações disponíveis nesta localidade - Clique no item para mais detalhes -STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Aplicar -STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Realizar a ação selecionada na lista acima +STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Executar +STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Executar a ação selecionada na lista acima ###length 8 STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN :Campanha publicitária pequena @@ -4255,16 +4255,16 @@ STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Você e STR_ENGINE_PREVIEW_CAPTION :{WHITE}Mensagem de um fabricante de veículos STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Desenvolvemos um novo modelo de {STRING} - você gostaria de ter um ano de uso exclusivo deste veículo, para que possamos avaliar o desempenho dele antes de ser globalmente disponibilizado? -STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :locomotiva ferroviária -STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :locomotiva ferroviária eletrificada -STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :locomotiva monotrilho -STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :locomotiva maglev +STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :{G=f}locomotiva ferroviária +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :{G=f}locomotiva ferroviária elétrica +STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :{G=f}locomotiva monotrilho +STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :{G=f}locomotiva maglev -STR_ENGINE_PREVIEW_ROAD_VEHICLE :veículo rodoviário -STR_ENGINE_PREVIEW_TRAM_VEHICLE :bonde +STR_ENGINE_PREVIEW_ROAD_VEHICLE :{G=m}veículo rodoviário +STR_ENGINE_PREVIEW_TRAM_VEHICLE :{G=m}bonde -STR_ENGINE_PREVIEW_AIRCRAFT :aeronave -STR_ENGINE_PREVIEW_SHIP :embarcação +STR_ENGINE_PREVIEW_AIRCRAFT :{G=f}aeronave +STR_ENGINE_PREVIEW_SHIP :{G=f}embarcação STR_ENGINE_PREVIEW_TEXT3 :{BLACK}{STRING}{}{5:STRING}{}{STRING} STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING}{}{STRING}{}{STRING}{}{STRING} @@ -4624,8 +4624,8 @@ STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Mostrar STR_ORDER_GO_TO_WAYPOINT :Ir via {WAYPOINT} STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Ir, sem parar, via {WAYPOINT} -STR_ORDER_SERVICE_AT :Manutenção em -STR_ORDER_SERVICE_NON_STOP_AT :Manutenção, sem parar, em +STR_ORDER_SERVICE_AT :Manutenção no +STR_ORDER_SERVICE_NON_STOP_AT :Manutenção, sem parar, no STR_ORDER_NEAREST_DEPOT :o mais próximo STR_ORDER_NEAREST_HANGAR :o hangar mais próximo @@ -4708,9 +4708,9 @@ STR_TIMETABLE_TRAVEL_FOR :Viajar por {STR STR_TIMETABLE_TRAVEL_FOR_SPEED :Viajar por {STRING} no máximo a {VELOCITY} STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Viajar (por {STRING}, não programado) STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Viajar (por {STRING}, não programado) no máximo a {VELOCITY} -STR_TIMETABLE_STAY_FOR_ESTIMATED :(aguardar por {STRING}, não programado) +STR_TIMETABLE_STAY_FOR_ESTIMATED :(ficar por {STRING}, não programado) STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(viajar por {STRING}, não programado) -STR_TIMETABLE_STAY_FOR :e aguardar por {STRING} +STR_TIMETABLE_STAY_FOR :e ficar por {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :e viajar por {STRING} STR_TIMETABLE_TOTAL_TIME :{BLACK}Este horário levará {STRING} para ser concluído @@ -4817,7 +4817,7 @@ STR_AI_CONFIG_CONFIGURE :{BLACK}Configur STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configurar os parâmetros do Script # Available AIs window -STR_AI_LIST_CAPTION :{WHITE}Disponíveis {STRING} +STR_AI_LIST_CAPTION :{WHITE}{STRING} Disponíveis STR_AI_LIST_CAPTION_AI :IAs STR_AI_LIST_CAPTION_GAMESCRIPT :Scripts de jogo STR_AI_LIST_TOOLTIP :{BLACK}Clique para selecionar um script @@ -5320,7 +5320,7 @@ STR_ERROR_NO_DOCK :{WHITE}Não exi STR_ERROR_NO_AIRPORT :{WHITE}Não existe um aeroporto/heliporto STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Não existem paradas com um tipo de estrada compatível STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Não existem paradas com um tipo de bonde compatível -STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Não existem paradas adequadas para veículos rodoviários articulados.{}Os veículos rodoviários articulados precisam parar em estações de passagem e não em estações padrão +STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Não existem paradas adequadas para veículos rodoviários articulados.{}Os veículos rodoviários articulados só podem parar em estações de passagem e não em estações padrão STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Este avião não pode pousar neste heliporto STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Este helicóptero não pode pousar neste aeroporto STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Não existe um ponto de controle ferroviário diff --git a/src/lang/greek.txt b/src/lang/greek.txt index cf2d3459b2..c2e494b892 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -253,6 +253,8 @@ STR_COLOUR_RANDOM :Τυχαία ###length 17 STR_COLOUR_SECONDARY_DARK_BLUE :Σκούρο Μπλε STR_COLOUR_SECONDARY_PALE_GREEN :Ανοικτό Πράσινο +STR_COLOUR_SECONDARY_SECONDARY_PINK :Ροζ +STR_COLOUR_SECONDARY_YELLOW :Κίτρινο STR_COLOUR_SECONDARY_RED :Κόκκινο STR_COLOUR_SECONDARY_LIGHT_BLUE :Γαλάζιο STR_COLOUR_SECONDARY_GREEN :Πράσινο @@ -264,6 +266,7 @@ STR_COLOUR_SECONDARY_PURPLE :Πορφυρό STR_COLOUR_SECONDARY_ORANGE :Πορτοκαλί STR_COLOUR_SECONDARY_BROWN :Καφέ STR_COLOUR_SECONDARY_GREY :Γκρι +STR_COLOUR_SECONDARY_WHITE :Άσπρο STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Ίδιο με το πρωταρχικό @@ -975,6 +978,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ένα STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Ανοίξτε το παράθυρο ομάδων εστιασμένος στην ομάδα του οχήματος +STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}{STATION} δεν δέχεται πλέον: {CARGO_LIST} STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Έληξε η προσφορά επιδότησης:{}{}{STRING} από {G τον τη το} {STRING} πρός {G τον τη το} {STRING} δεν θα επιδοτείται πλέον. STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Η επιδότηση αποσύρθηκε:{}{}Η υπηρεσια για {STRING.subs} απο το {STRING} προς το {STRING} δεν επιδοτείται πλέον. @@ -1123,7 +1127,10 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Βασι STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Επιλέξτε το βασικό σετ μουσικής για χρήση STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Επιπλέον πληροφορίες σχετικά με το βασικό σετ μουσικής +STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(δεν έχουν εγκατασταθεί plugins για ενοποίηση με πλατφόρμες κοινωνικής δικτύωσης) +STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :{BLACK}Πλατφόρμα: +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Plugin state: @@ -1138,6 +1145,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Μείω STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Αυξήστε το ποσό της ισοτιμίας σας για μία Λίρα (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Ρυθμίστε τη συναλλαγματική ισοτιμία του νομίσματος για μια λίρα (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Διαχωριστής: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Ορίστε το διαχωριστικό για το νόμισμά σας STR_CURRENCY_PREFIX :{LTBLUE}Πρόθεμα: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Ορίστε το πρόθεμα για το νόμισμά σας @@ -2710,6 +2719,8 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}υπερφορτωμένο # Linkgraph tooltip +STR_LINKGRAPH_STATS_TOOLTIP_MONTH :{BLACK}{CARGO_LONG} προς μεταφορά ανά μήνα από {STATION} προς {STATION} ({COMMA}% of capacity){STRING} +STR_LINKGRAPH_STATS_TOOLTIP_MINUTE :{BLACK}{CARGO_LONG} προς μεταφορά ανά λεπτό από {STATION} προς {STATION} ({COMMA}% of capacity){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} προς μεταφορά πίσω ({COMMA}% της χωρητικότητας) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Μέσος χρόνος ταξιδιού: {UNITS_DAYS_OR_SECONDS} @@ -3235,10 +3246,12 @@ STR_MAPGEN_MAPSIZE :{BLACK}Διάσ STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Επιλέξτε το μέγεθος του χάρτη σε τετραγωνίδια. Ο αριθμός των τετραγωνίδιων διαθέσιμα για κτίσιμο θα είναι λίγο χαμηλότερος STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Αριθμός πόλεων: +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :Επιλέξτε την πυκνότητα των πόλεων ή έναν προσαρμοσμένο αριθμό STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Ονόματα πόλεων: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Επιλογή στυλ ονομάτων πόλεων STR_MAPGEN_DATE :{BLACK}Ημερομηνία: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Αριθμός βιομηχανιών: +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Επιλέξτε την πυκνότητα των βιομηχανιών ή έναν προσαρμοσμένο αριθμό STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Υψηλότερη κορυφή: STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Αύξηση του μέγιστου ύψους της υψηλότερης κορυφής στον χάρτη κατά ένα STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Μειώστε το μέγιστο ύψος της υψηλότερης κορυφής στον χάρτη κατά ένα @@ -3598,6 +3611,8 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Ένα STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Έναρξη μεγάλης τοπικής διαφημιστικής καμπάνιας, για να προσελκύσετε περισσότερους επιβάτες και εμπορεύματα στις μεταφορικές σας υπηρεσίες.{}Παρέχει μία προσωρινή ώθηση στην βαθμολογία σταθμού σε μία μεγάλη ακτίνα γύρω από το κέντρο της πόλης.{}{POP_COLOUR} Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Χτίστε ένα άγαλμα προς τιμήν της εταιρίας σας.{}Παρέχει μία μόνιμη ώθηση στην βαθμολογία σταθμών σε αυτή την πόλη.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Χρηματοδοτήστε την κατασκευή νέων κτιρίων στην πόλη.{}Παρέχει μία προσωρινή ώθηση στην ανάπτυξη αυτής της πόλης.{} Κόστος: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Αγοράστε αποκλειστικά δικαιώματα μεταφοράς στην πόλη για 12 μήνες.{}Η δημοτική αρχή δεν θα επιτρέψει στους επιβάτες και στο φορτίο να χρησιμοποιούν τους σταθμούς των ανταγωνιστών σας. Μια επιτυχημένη δωροδοκία από έναν ανταγωνιστή θα ακυρώσει αυτό το συμβόλαιο.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Αγοράστε αποκλειστικά δικαιώματα μεταφοράς στην πόλη για 12 λεπτά.{}Η δημοτική αρχή δεν θα επιτρέψει στους επιβάτες και στο φορτίο να χρησιμοποιούν τους σταθμούς των ανταγωνιστών σας. Μια επιτυχημένη δωροδοκία από έναν ανταγωνιστή θα ακυρώσει αυτό το συμβόλαιο.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Δωροδοκήστε τις τοπικές αρχές για να αυξήσετε τα ποσοστά αποδοχής σας, με ρίσκο ένα μεγάλο πρόστιμο εάν συλληφθείτε.{}Κόστος: {CURRENCY_LONG} # Goal window @@ -4347,6 +4362,7 @@ STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Διάσ STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Διάστημα επισκευών: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :Μειώστε το διάστημα μεταξύ των σέρβις κατά 10 ημέρες. Ctrl+Click για να μειώσετε το διάστημα συντήρησης κατά 5 ημέρες STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :Μειώστε το διάστημα μεταξύ των σέρβις κατά 5 λεπτά. Ctrl+Click για να μειώσετε το διάστημα συντήρησης κατά 1 λεπτό +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :Μειώστε το διάστημα μεταξύ των σέρβις κατά 10 τοις εκατό. Ctrl+Click για να μειώσετε το διάστημα συντήρησης κατά 5 τοις εκατό. STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Αλλάξτε τον τύπο διαστήματος επισκευών STR_VEHICLE_DETAILS_DEFAULT :Προκαθορισμένο @@ -4888,6 +4904,7 @@ STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... μπ STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... μπορεί να κτιστεί μόνο κάτω από τη γραμμή του χιονιού STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}Η χρηματοδότηση απέτυχε να προσκομήσει αποτελέσματα λόγω κακής τύχης· δοκιμάστε ξάνα +STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Δεν υπήρχαν κατάλληλα μέρη για προοπτική για αυτόν τον κλάδο STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Δεν υπήρχαν διαθέσιμες τοποθεσίες για βιομηχανίες τύπου '{STRING}' STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Αλλαγή παραμέτρων δημιουργίας χάρτη για καλύτερα αποτελέσματα @@ -5656,6 +5673,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}m +STR_CURRENCY_SHORT_GIGA :{NBSP}Δις +STR_CURRENCY_SHORT_TERA :{NBSP}tn STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index b362a60834..e8ea2d2590 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -682,6 +682,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Pašalinti visa # About menu STR_ABOUT_MENU_LAND_BLOCK_INFO :Žemės ploto informacija +STR_ABOUT_MENU_HELP :Pagalba ir gidai STR_ABOUT_MENU_TOGGLE_CONSOLE :Perjungti konsolę STR_ABOUT_MENU_AI_DEBUG :AI / GameScript derinimas STR_ABOUT_MENU_SCREENSHOT :Ekrano nuotrauka @@ -1067,6 +1068,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Naujas{S STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Atverti grupių langą, susijusį su šia transporto priemone +STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION} dabar priima: {CARGO_LIST} STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Subsidijų pasiūlymas baigėsi:{}{}{STRING.ko} pervežimas iš {STRING.ko} į {STRING.ka} daugiau nebesubsidijuojamas. STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidijų laikas baigėsi:{}{}{STRING.ko} transportavimas iš {STRING} į {STRING} daugiau nebesubsidijuojamas. @@ -2501,6 +2503,7 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Per rel STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Atjungti STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Blokuoti +STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Ištrinti/Pašalinti STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Administratoriaus veiksmas STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Ar tikrai norite iš naujo nustatyti įmonės slaptažodį '{COMPANY}'? @@ -3152,7 +3155,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Kompanijos žem STR_ABOUT_OPENTTD :{WHITE}Apie OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Pradinės versijos teisės priklauso {COPYRIGHT} 1995 Chris Sawyer, Visos teisės saugomos STR_ABOUT_VERSION :{BLACK}OpenTTD versija {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} OpenTTD komanda +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}„OpenTTD“ {COPYRIGHT}2002-{STRING} „OpenTTD“ komanda # Framerate display window STR_FRAMERATE_CAPTION :Kadrų dažniai @@ -3678,6 +3681,8 @@ STR_STATION_LIST_STATION :{YELLOW}{STATIO STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- Nieko - STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Pažymėti visus pastatus +STR_STATION_LIST_CARGO_FILTER_ALL_AND_NO_RATING :Visi kargo tipai ir jokio reitingo +STR_STATION_LIST_CARGO_FILTER_EXPAND :Rodyti daugiau... # Station view window STR_STATION_VIEW_CAPTION :{WHITE}{STATION} {STATION_FEATURES} @@ -5188,6 +5193,7 @@ STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... per STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... lėktuvui paskirties vieta yra per toli # Extra messages which go on the third line of errors, explaining why orders failed +STR_ERROR_NO_AIRPORT :{WHITE}Nėra jokio oro ar sraigtasparnio uosto # Timetable related errors STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Neįmanoma sudaryti grafiko... diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 4ef26062a3..8c1d2dd9eb 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -572,18 +572,18 @@ STR_DAY_NUMBER_30TH :30. STR_DAY_NUMBER_31ST :31. ###length 12 -STR_MONTH_ABBREV_JAN :Jan -STR_MONTH_ABBREV_FEB :Feb -STR_MONTH_ABBREV_MAR :Mar -STR_MONTH_ABBREV_APR :Apr -STR_MONTH_ABBREV_MAY :Mai -STR_MONTH_ABBREV_JUN :Jun -STR_MONTH_ABBREV_JUL :Jul -STR_MONTH_ABBREV_AUG :Aug -STR_MONTH_ABBREV_SEP :Sep -STR_MONTH_ABBREV_OCT :Okt -STR_MONTH_ABBREV_NOV :Nov -STR_MONTH_ABBREV_DEC :Des +STR_MONTH_ABBREV_JAN :jan +STR_MONTH_ABBREV_FEB :feb +STR_MONTH_ABBREV_MAR :mar +STR_MONTH_ABBREV_APR :apr +STR_MONTH_ABBREV_MAY :mai +STR_MONTH_ABBREV_JUN :jun +STR_MONTH_ABBREV_JUL :jul +STR_MONTH_ABBREV_AUG :aug +STR_MONTH_ABBREV_SEP :sep +STR_MONTH_ABBREV_OCT :okt +STR_MONTH_ABBREV_NOV :nov +STR_MONTH_ABBREV_DEC :des ###length 12 STR_MONTH_JAN :januar @@ -908,8 +908,8 @@ STR_NEWS_VEHICLE_UNPROFITABLE_YEAR :{WHITE}{VEHICLE STR_NEWS_VEHICLE_UNPROFITABLE_PERIOD :{WHITE}{VEHICLE}s fortjeneste forrige periode var {CURRENCY_LONG} STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} kan ikke kjøre til neste destinasjon fordi den er utenfor rekkevidde -STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} stoppet fordi ombyggingsordre feilet -STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Kunne ikke autofornye {VEHICLE}{}{STRING} +STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} stoppet fordi ombyggingsordre mislyktes +STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Kunne ikke fornye {VEHICLE}{}{STRING} automatisk STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}Ny{G "" "" tt} {STRING} er nå tilgjengelig! STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} @@ -971,7 +971,7 @@ STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRI ###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Britiske pund -STR_GAME_OPTIONS_CURRENCY_USD :Amerikansk dollar +STR_GAME_OPTIONS_CURRENCY_USD :Amerikanske dollar STR_GAME_OPTIONS_CURRENCY_EUR :Euro STR_GAME_OPTIONS_CURRENCY_JPY :Japanske yen STR_GAME_OPTIONS_CURRENCY_ATS :Østerrikske shilling @@ -1049,7 +1049,7 @@ STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Aktiv dr STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Grensesnittstørrelse STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Dra for å endre grensesnittstørrelse. Ctrl+dra for kontinuerlig justering -STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Autodetekter størrelse +STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Detekter størrelse automatisk STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Kryss av denne knappen for å detektere grensesnittstørrelsen automatisk STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Skaler faser @@ -1093,7 +1093,7 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Musikkse STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Velg musikksett som skal brukes STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Ytterligere informasjon om det originale musikksettet -STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(ingen tillegg for integrere med sosiale plattformer er installert) +STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(ingen moduler for integrasjon med sosiale plattformer er installert) STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{BLACK}{STRING} ({STRING}) STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :{BLACK}Plattform: @@ -1515,10 +1515,10 @@ STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Skaler en indus STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skaler vareproduksjonen til industrier med denne prosenten STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% -STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Forny transportmiddel automatisk når den blir gammel: {STRING} +STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Forny transportmiddel automatisk når det blir gammelt: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Når aktivert, blir et transportmiddel som nærmer seg slutten av sin levetid automatisk erstattet når betingelsene for fornyelse er oppfylt -STR_CONFIG_SETTING_AUTORENEW_MONTHS :Forny transportmiddel automatisk når den er {STRING} høyeste alder +STR_CONFIG_SETTING_AUTORENEW_MONTHS :Forny transportmiddel automatisk når det er {STRING} høyeste alder STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Relativ alder når et transportmiddel bør bli vurdert fornyet automatisk ###length 2 STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} måned{P 0 "" er} før @@ -1723,7 +1723,7 @@ STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Alle handlinger STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Bruk grupper i kjøretøyliste: {STRING} STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Aktiver bruk av avanserte kjøretøylister for guppering av kjøretøy -STR_CONFIG_SETTING_LOADING_INDICATORS :Bruk lastingsindikatorer: {STRING} +STR_CONFIG_SETTING_LOADING_INDICATORS :Bruk lasteindikatorer: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Velg hvorvidt lasteindikatorer vises over kjøretøy som lastes eller losses STR_CONFIG_SETTING_TIMETABLE_MODE :Tidsenhet for rutetabeller: {STRING} @@ -2166,7 +2166,7 @@ STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... igno STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ignorerer Grunn Lyd set '{STRING}': ikke funnet STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ignorerer Grunn Musikk set '{STRING}': ikke funnet STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Tomt for minne -STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Tildeling av {BYTES} fra spritecachen feilet. Spritecachen ble redusert til {BYTES}. Dette senke ytelsen av OpenTTD. For å redusere minneforbruken kan du forsøke å slå av 32bpp grafikk og/eller zoomnivå. +STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Tildeling av {BYTES} fra spritecachen mislyktes. Spritecachen ble redusert til {BYTES}. Dette senke ytelsen av OpenTTD. For å redusere minneforbruken kan du forsøke å slå av 32bpp grafikk og/eller zoomnivå. # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Feil med skjerminstillingene... @@ -2567,7 +2567,7 @@ STR_NETWORK_CHAT_OSKTITLE :{BLACK}Skriv in STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Ingen nettverksadapter funnet STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Tilkoblingen til tjeneren ble tidsavbrutt eller avslått STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Kunne ikke koble til pga. ulike versjoner av NewGRF -STR_NETWORK_ERROR_DESYNC :{WHITE}Synkronisering av nettverksspill feilet. +STR_NETWORK_ERROR_DESYNC :{WHITE}Synkronisering av nettverksspill mislyktes STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Mistet tilkobling til nettverksspill STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Kunne ikke laste inn lagret spill STR_NETWORK_ERROR_SERVER_START :{WHITE}Kunne ikke starte tjeneren @@ -2724,7 +2724,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Ja, last ned grafikken STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Nei, avslutt OpenTTD -STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}Nedlasting feilet +STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}Nedlasting mislyktes STR_MISSING_GRAPHICS_ERROR :{BLACK}Kunne ikke laste ned grafikkpakken.{}Vennligst last den ned manuelt. STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Avslutt OpenTTD @@ -3325,27 +3325,27 @@ STR_MAPGEN_GS_SETTINGS :{BLACK}Game Scr STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Åpne Game Script-innstillinger ###length 21 -STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Engelsk (Original) -STR_MAPGEN_TOWN_NAME_FRENCH :Fransk -STR_MAPGEN_TOWN_NAME_GERMAN :Tysk -STR_MAPGEN_TOWN_NAME_ADDITIONAL_ENGLISH :Engelsk (utvidet) -STR_MAPGEN_TOWN_NAME_LATIN_AMERICAN :Latinamerikansk +STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Engelske (Original) +STR_MAPGEN_TOWN_NAME_FRENCH :Franske +STR_MAPGEN_TOWN_NAME_GERMAN :Tyske +STR_MAPGEN_TOWN_NAME_ADDITIONAL_ENGLISH :Engelske (Utvidet) +STR_MAPGEN_TOWN_NAME_LATIN_AMERICAN :Latinamerikanske STR_MAPGEN_TOWN_NAME_SILLY :Tåpelige -STR_MAPGEN_TOWN_NAME_SWEDISH :Svensk -STR_MAPGEN_TOWN_NAME_DUTCH :Nederlandsk -STR_MAPGEN_TOWN_NAME_FINNISH :Finsk -STR_MAPGEN_TOWN_NAME_POLISH :Polsk -STR_MAPGEN_TOWN_NAME_SLOVAK :Slovakisk -STR_MAPGEN_TOWN_NAME_NORWEGIAN :Norsk -STR_MAPGEN_TOWN_NAME_HUNGARIAN :Ungarsk -STR_MAPGEN_TOWN_NAME_AUSTRIAN :Østeriske -STR_MAPGEN_TOWN_NAME_ROMANIAN :Rumensk -STR_MAPGEN_TOWN_NAME_CZECH :Tsjekkisk -STR_MAPGEN_TOWN_NAME_SWISS :Sveitsisk -STR_MAPGEN_TOWN_NAME_DANISH :Dansk -STR_MAPGEN_TOWN_NAME_TURKISH :Tyrkisk -STR_MAPGEN_TOWN_NAME_ITALIAN :Italiensk -STR_MAPGEN_TOWN_NAME_CATALAN :Katalansk +STR_MAPGEN_TOWN_NAME_SWEDISH :Svenske +STR_MAPGEN_TOWN_NAME_DUTCH :Nederlandske +STR_MAPGEN_TOWN_NAME_FINNISH :Finske +STR_MAPGEN_TOWN_NAME_POLISH :Polske +STR_MAPGEN_TOWN_NAME_SLOVAK :Slovakiske +STR_MAPGEN_TOWN_NAME_NORWEGIAN :Norske +STR_MAPGEN_TOWN_NAME_HUNGARIAN :Ungarske +STR_MAPGEN_TOWN_NAME_AUSTRIAN :Østerrikske +STR_MAPGEN_TOWN_NAME_ROMANIAN :Rumenske +STR_MAPGEN_TOWN_NAME_CZECH :Tsjekkiske +STR_MAPGEN_TOWN_NAME_SWISS :Sveitsiske +STR_MAPGEN_TOWN_NAME_DANISH :Danske +STR_MAPGEN_TOWN_NAME_TURKISH :Tyrkiske +STR_MAPGEN_TOWN_NAME_ITALIAN :Italienske +STR_MAPGEN_TOWN_NAME_CATALAN :Katalanske # Strings for map borders at game generation STR_MAPGEN_BORDER_TYPE :{BLACK}Kartkanter: @@ -3357,8 +3357,8 @@ STR_MAPGEN_SOUTHWEST :{BLACK}Sørvest STR_MAPGEN_BORDER_FREEFORM :{BLACK}Frihånds STR_MAPGEN_BORDER_WATER :{BLACK}Sjø STR_MAPGEN_BORDER_RANDOM :{BLACK}Tilfeldig -STR_MAPGEN_BORDER_RANDOMIZE :{BLACK}Tilfeldig -STR_MAPGEN_BORDER_MANUAL :{BLACK}Manuell +STR_MAPGEN_BORDER_RANDOMIZE :{BLACK}Tilfeldige +STR_MAPGEN_BORDER_MANUAL :{BLACK}Manuelle STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Høydekartrotering: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Høydekartnavn: @@ -4137,10 +4137,10 @@ STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Endre na STR_BUY_VEHICLE_AIRCRAFT_RENAME_BUTTON :{BLACK}Endre navn ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Gi nytt navn til jernbanemateriellet -STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Gi nytt navn til kjøretøytypen -STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Gi nytt navn til skipstypen -STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Gi nytt navn til luftfartøytypen +STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Endre navn på jernbanemateriell +STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Endre navn på kjøretøytype +STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Endre navn på skipstype +STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Endre navn på luftfartøytype ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON :{BLACK}Skjul @@ -4169,7 +4169,7 @@ STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Gi luftf # Depot window STR_DEPOT_CAPTION :{WHITE}{DEPOT} -STR_DEPOT_RENAME_TOOLTIP :{BLACK}Endre navn på garasje/stall/hangar/dokk +STR_DEPOT_RENAME_TOOLTIP :{BLACK}Gi nytt navn til garasje/stall/hangar/dokk STR_DEPOT_RENAME_DEPOT_CAPTION :Endre navn på garasje/stall/hangar/dokk STR_DEPOT_NO_ENGINE :{BLACK}- @@ -4196,10 +4196,10 @@ STR_DEPOT_SELL_ALL_BUTTON_SHIP_TOOLTIP :{BLACK}Selg all STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TOOLTIP :{BLACK}Selg alle luftfartøy i hangaren ###length VEHICLE_TYPES -STR_DEPOT_AUTOREPLACE_TRAIN_TOOLTIP :{BLACK}Autoerstatt alle tog i togstallen -STR_DEPOT_AUTOREPLACE_ROAD_VEHICLE_TOOLTIP :{BLACK}Autoerstatt alle kjøretøy i garasjen -STR_DEPOT_AUTOREPLACE_SHIP_TOOLTIP :{BLACK}Autoerstatt alle skip i skipsdokken -STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}Autoerstatt alle luftfartøy i hangaren +STR_DEPOT_AUTOREPLACE_TRAIN_TOOLTIP :{BLACK}Erstatt alle tog i togstallen automatisk +STR_DEPOT_AUTOREPLACE_ROAD_VEHICLE_TOOLTIP :{BLACK}Erstatt alle kjøretøy i garasjen automatisk +STR_DEPOT_AUTOREPLACE_SHIP_TOOLTIP :{BLACK}Erstatt alle skip i skipsdokken automatisk +STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}Erstatt alle luftfartøy i hangaren automatisk ###length VEHICLE_TYPES STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON :{BLACK}Nytt jernbanemateriell @@ -4897,11 +4897,11 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Anslått # Saveload messages STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Lagring pågår enda,{}vennligst vent til den er klar! -STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autolagring feilet +STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatisk lagring mislyktes STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan ikke lese fra disk STR_ERROR_GAME_SAVE_FAILED :{WHITE}Lagring av spillet mislyktes{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan ikke slette fil -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Feil ved lasting av spill{}{STRING} +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Lasting av spill mislyktes{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Intern feil: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Ødelagt lagret spill - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spillet er lagret i en nyere versjon @@ -5121,10 +5121,10 @@ STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... kan # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} er for langt etter utskiftning -STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Ingen autoerstatt/fornyelseregler satt. +STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Ingen autoerstatning/fornyelseregler satt STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(pengegrense) STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Nytt kjøretøy kan ikke frakte {STRING} -STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Nytt kjøretøy kan ikke bygges på nytt {NUM} +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Nytt transportmiddel kan ikke bygges om i ordre {NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Umulig sporkombinasjon diff --git a/src/lang/polish.txt b/src/lang/polish.txt index f02052db39..739003bf28 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1851,7 +1851,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Początkowy kol STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Wybierz początkowy kolor dla firmy STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Początkowy kolor dodatkowy firmy: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Wybierz początkowy kolor dodatkowy dla firmy, jeśli używany jest NewGRF, który go wykorzystuje. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Wybierz początkowy kolor dodatkowy dla firmy, jeśli używany jest NewGRF, który go wykorzystuje STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Pozwól budować stare lotniska: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Włączona opcja sprawia, że każdy typ lotniska będzie dostępny na zawsze od chwili wprowadzenia @@ -1881,16 +1881,16 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalendarz STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Tarcza zegara STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minuty na rok: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Wybierz liczbę minut trwania jednego roku kalendarzowego. Domyślnie jest to 12 minut. Ustaw na 0, aby wstrzymać zmianę daty kalendarza. To ustawienie nie ma wpływu na symulację ekonomiczną gry i jest dostępne tylko w przypadku korzystania z zegarowej miary czasu. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Wybierz liczbę minut trwania jednego roku kalendarzowego. Domyślnie jest to 12 minut. Ustaw na 0, aby wstrzymać zmianę daty kalendarza. To ustawienie nie ma wpływu na symulację ekonomiczną gry i jest dostępne tylko w przypadku korzystania z zegarowej miary czasu STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (zamrożenie czasu kalendarza) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Skala produkcji w miastach: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Skaluj produkcję ładunków w miastach w oparciu o ten procent. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Skaluj produkcję ładunków w miastach w oparciu o ten procent STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Skala produkcji w przedsiębiorstwach: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skaluj produkcję ładunków w przedsiębiorstwach w oparciu o ten procent. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skaluj produkcję ładunków w przedsiębiorstwach w oparciu o ten procent STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatyczne odnawianie pojazdów, gdy stają się stare: {STRING} @@ -1921,7 +1921,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Grubość linii STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Grubość linii na wykresach. Cienka linia jest dokładniejsza, grubsza linia jest bardziej widoczna a kolory łatwiejsze do odróżnienia STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Pokaż nazwę NewGRF-a w oknie budowy pojazdu: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Dodaj wiersz do okna budowy pojazdów, pokazujący z którego NewGRF-a wybrany pojazd pochodzi. +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Dodaj wiersz do okna budowy pojazdów, pokazujący z którego NewGRF-a wybrany pojazd pochodzi STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Pokaż w oknach list jakie ładunki mogą być przewożone przez pojazdy: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Jeśli włączone, ładunek możliwy do przewiezienia przez pojazd będzie wyświetlany nad nim na listach pojazdów. @@ -1955,7 +1955,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Wybierz przybli STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Gładkość terenu: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Wybierz kształt i ilość wzniesień. Łagodny teren ma mniejszą liczbę szerszych wzniesień, natomiast teren pofałdowany ma więcej mniejszych wzniesień. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Wybierz kształt i ilość wzniesień. Łagodny teren ma mniejszą liczbę szerszych wzniesień, natomiast teren pofałdowany ma więcej mniejszych wzniesień ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Bardzo łagodny STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Łagodny @@ -2010,7 +2010,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :ciemnozielony STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :fioletowy STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Kolorystyka przepływu ładunków: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Ustaw kolorystykę używaną do wyświetlania przepływu ładunków. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Ustaw kolorystykę używaną do wyświetlania przepływu ładunków ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Od zielonego do czerwonego (oryginalna) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Od zielonego do niebieskiego @@ -2131,7 +2131,7 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Pozostaw aktywn STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Zachowaj narzędzia budowy mostów, tuneli, itp. po użyciu STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatycznie usuwaj sygnały podczas budowy torów: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatycznie usuwaj sygnały, które przeszkadzają w budowie toru. Pamiętaj, że może to doprowadzić do zderzenia pociągów, w przypadku usunięcia ważnych sygnałów. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatycznie usuwaj sygnały, które przeszkadzają w budowie toru. Pamiętaj, że może to doprowadzić do zderzenia pociągów, w przypadku usunięcia ważnych sygnałów STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Ograniczenie prędkości przyspieszonego czasu w grze: {STRING} STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Ograniczenie prędkości gry, kiedy przyspieszenie czasu jest włączone. 0 = bez ograniczenia (tak szybko, jak pozwoli na to komputer). Wartości poniżej 100% spowolnią grę. Górny limit jest zależny od specyfikacji komputera i może się różnić w zależności od rozgrywki. @@ -2220,7 +2220,7 @@ STR_CONFIG_SETTING_NOSERVICE :Wyłącz serwis STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Kiedy włączone, pojazdy nie są serwisowane, jeśli nie mogą się popsuć STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Obniżenie prędkości załadunku pociągów dłuższych niż stacja: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Gdy opcja ta jest włączona, pociągi dłuższe od stacji ładują się wolniej niż pociągi, które mieszczą się na stacji. To ustawienie nie wpływa na znajdowanie tras. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Gdy opcja ta jest włączona, pociągi dłuższe od stacji ładują się wolniej niż pociągi, które mieszczą się na stacji. To ustawienie nie wpływa na znajdowanie tras STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Włącz limity prędkości wagonów: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Kiedy włączone, użyj także ograniczenia prędkości dla wagonów do obliczenia maksymalnej prędkości pociągu @@ -2346,7 +2346,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Dozwolone STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Dozwolone, dowolny układ miasta STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Generowanie ładunku przez miasta: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Ilość ładunku produkowana przez domy w mieście względem ogólnej populacji miasta.{}Wzrost kwadratowy: miasto o podwojonej wielkości generuje czterokrotnie więcej pasażerów.{}Wzrost liniowy: miasto o podwojonej wielkości generuje dwukrotnie więcej pasażerów. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Ilość ładunku produkowana przez domy w mieście względem ogólnej populacji miasta.{}Wzrost kwadratowy: miasto o podwojonej wielkości generuje czterokrotnie więcej pasażerów.{}Wzrost liniowy: miasto o podwojonej wielkości generuje dwukrotnie więcej pasażerów ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kwadratowy (originalny) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Liniowy @@ -2387,7 +2387,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Najwyższa używana rozdzielczość sprite'ów: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Ogranicz maksymalną rozdzielczość dla sprite'ów. Ograniczenie rozdzielczości sprite'ów spowoduje brak użycia grafiki w wysokiej rozdzielczości, nawet, jeśli jest ona dostępna. Może to pomóc w utrzymaniu jednolitego wyglądu gry, gdy używasz mieszanki plików GRF z grafiką w wysokiej rozdzielczości i bez niej. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Ogranicz maksymalną rozdzielczość dla sprite'ów. Ograniczenie rozdzielczości sprite'ów spowoduje brak użycia grafiki w wysokiej rozdzielczości, nawet, jeśli jest ona dostępna. Może to pomóc w utrzymaniu jednolitego wyglądu gry, gdy używasz mieszanki plików GRF z grafiką w wysokiej rozdzielczości i bez niej ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2411,9 +2411,9 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Początkowy mno STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Średni rozmiar metropolii w porównaniu do normalnych miast na początku gry STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Aktualizuj graf dystrybucji co {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Czas pomiędzy kolejnymi przeliczeniami grafu połączeń. Każde przeliczenie oblicza plany dla jednego komponentu grafu. Wartość X dla tego ustawienia nie oznacza, że cały graf będzie aktualizowany co X sekund. Aktualizowane będą tylko niektóre komponenty. Im mniejszą wartość ustawisz, tym więcej czasu będzie potrzebował procesor, aby wykonać obliczenia. Im większą wartość ustawisz, tym więcej czasu upłynie, zanim rozpocznie się dystrybucja ładunków po nowych trasach. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Czas pomiędzy kolejnymi przeliczeniami grafu połączeń. Każde przeliczenie oblicza plany dla jednego komponentu grafu. Wartość X dla tego ustawienia nie oznacza, że cały graf będzie aktualizowany co X sekund. Aktualizowane będą tylko niektóre komponenty. Im mniejszą wartość ustawisz, tym więcej czasu będzie potrzebował procesor, aby wykonać obliczenia. Im większą wartość ustawisz, tym więcej czasu upłynie, zanim rozpocznie się dystrybucja ładunków po nowych trasach STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Przeznacz {STRING} na przeliczenie grafu dystrybucji -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Czas potrzebny na każde przeliczenie komponentu grafu połączeń. Po rozpoczęciu przeliczania, tworzony jest wątek, który może działać przez podaną liczbę sekund. Im mniejszą wartość ustawisz, tym większe prawdopodobieństwo, że wątek nie zostanie ukończony w wyznaczonym czasie. Wtedy gra zatrzymuje się do czasu jego zakończenia („lag”). Im większą wartość ustawisz, tym dłużej będzie trwała aktualizacja dystrybucji, gdy zmienią się trasy. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Czas potrzebny na każde przeliczenie komponentu grafu połączeń. Po rozpoczęciu przeliczania, tworzony jest wątek, który może działać przez podaną liczbę sekund. Im mniejszą wartość ustawisz, tym większe prawdopodobieństwo, że wątek nie zostanie ukończony w wyznaczonym czasie. Wtedy gra zatrzymuje się do czasu jego zakończenia („lag”). Im większą wartość ustawisz, tym dłużej będzie trwała aktualizacja dystrybucji, gdy zmienią się trasy STR_CONFIG_SETTING_DISTRIBUTION_PAX :Tryb dystrybucji dla pasażerów: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :Tryb „symetryczny” oznacza, że mniej więcej tyle samo pasażerów będzie podróżować ze stacji A do stacji B, co z B do A. Tryb „asymetryczny” oznacza, że w obu kierunkach może podróżować różna liczba pasażerów. Tryb „ręczny” oznacza, że dla pasażerów nie będzie przeprowadzana dystrybucja automatyczna. @@ -2429,12 +2429,12 @@ STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymetryczny STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :symetryczny STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Dokładność dystrybucji: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Im wyższą wartość ustawisz, tym więcej czasu procesor będzie potrzebował na obliczenie grafu połączeń. Jeśli będzie to trwało zbyt długo, możesz zauważyć opóźnienia. Jeśli jednak ustawisz niską wartość, dystrybucja będzie niedokładna i możesz zauważyć, że ładunki nie są wysyłane do miejsc, gdzie się ich spodziewasz. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Im wyższą wartość ustawisz, tym więcej czasu procesor będzie potrzebował na obliczenie grafu połączeń. Jeśli będzie to trwało zbyt długo, możesz zauważyć opóźnienia. Jeśli jednak ustawisz niską wartość, dystrybucja będzie niedokładna i możesz zauważyć, że ładunki nie są wysyłane do miejsc, gdzie się ich spodziewasz STR_CONFIG_SETTING_DEMAND_DISTANCE :Wpływ odległości na dystrybucję: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Jeśli ładunki z jednej stacji trafiają na kilka różnych stacji, na ich dystrybucję wpływ ma odległość. Im wyższą wartość ustawisz, tym bliższe stacje będą preferowane. Zerowa wartość ustawienia sprawi, że odległość nie będzie wpływała na podział dystrybucji. STR_CONFIG_SETTING_DEMAND_SIZE :Ilość powracającego ładunku dla trybu symetrycznego: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Ustawienie tego na mniej niż 100% powoduje, że symetryczna dystrybucja zachowuje się podobnie do asymetrycznej. Mniej ładunku będzie zwróconego jeśli określona ilość zostanie wysłana do stacji. Jeśli ustawisz to na 0%, to symetryczna dystrybucja zachowuje się jak asymetryczna. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Ustawienie tego na mniej niż 100% powoduje, że symetryczna dystrybucja zachowuje się podobnie do asymetrycznej. Mniej ładunku będzie zwróconego jeśli określona ilość zostanie wysłana do stacji. Jeśli ustawisz to na 0%, to symetryczna dystrybucja zachowuje się jak asymetryczna STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Nasycenie krótkich tras przed wybraniem tras o dużej przepustowości: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Często istnieje wiele możliwych tras pomiędzy dwiema danymi stacjami. Mechanizm dystrybucji ładunków najpierw nasyci najkrótszą trasę, następnie użyje drugiej najkrótszej trasy, aż do jej nasycenia itd. Nasycenie jest ustalane na podstawie szacunkowej oceny przepustowości i planowanego wykorzystania. Po nasyceniu wszystkich tras, jeśli nadal istnieje zapotrzebowanie, algorytm przeciąży wszystkie trasy, preferując te o dużej przepustowości. W większości przypadków algorytm nie oszacuje jednak dokładnie przepustowości. To ustawienie pozwala określić, do jakiej wartości procentowej krótsza trasa musi zostać nasycona w pierwszym kroku, zanim zostanie wybrana kolejna, dłuższa trasa. Ustaw wartość mniejszą niż 100%, aby uniknąć przepełnionych stacji w przypadku przeszacowania przepustowości. @@ -3359,11 +3359,11 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Posadź STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Losowe drzewa STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Pokryj losowo krajobraz drzewami STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normalny -STR_TREES_MODE_NORMAL_TOOLTIP :Sadź pojedyncze drzewa, przeciągając nad terenem. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Sadź pojedyncze drzewa, przeciągając nad terenem STR_TREES_MODE_FOREST_SM_BUTTON :Zagajnik -STR_TREES_MODE_FOREST_SM_TOOLTIP :Sadź niewielkie lasy, przeciągając nad terenem. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Sadź niewielkie lasy, przeciągając nad terenem STR_TREES_MODE_FOREST_LG_BUTTON :Las -STR_TREES_MODE_FOREST_LG_TOOLTIP :Sadź duże lasy, przeciągając nad terenem. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Sadź duże lasy, przeciągając nad terenem # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Tworzenie terenu @@ -3578,9 +3578,9 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Klatkaż STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Tempo symulacji: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Liczba ticków gry symulowanych na sekundę. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Liczba ticków gry symulowanych na sekundę STR_FRAMERATE_RATE_BLITTER :{BLACK}Klatki na sekundę: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Liczba renderowanych klatek wideo na sekundę. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Liczba renderowanych klatek wideo na sekundę STR_FRAMERATE_SPEED_FACTOR :{BLACK}Obecny współczynnik szybkości gry: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Jak szybko gra obecnie działa, w porównaniu do oczekiwanej prędkości przy normalnym tempie symulacji. STR_FRAMERATE_CURRENT :{WHITE}Obecny @@ -4406,7 +4406,7 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Samoloty bez gr STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupy - kliknij na grupę, aby wyświetlić wszystkie pojazdy z grupy. Przeciągnij i upuść grupy, aby dostosować hierarchię. +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupy - kliknij na grupę, aby wyświetlić wszystkie pojazdy z grupy. Przeciągnij i upuść grupy, aby dostosować hierarchię STR_GROUP_CREATE_TOOLTIP :{BLACK}Kliknij aby stworzyć grupę STR_GROUP_DELETE_TOOLTIP :{BLACK}Usuń zaznaczoną grupę STR_GROUP_RENAME_TOOLTIP :{BLACK}Zmień nazwę zaznaczonej grupy diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index c3f1be4026..3029dc33b7 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -920,7 +920,9 @@ STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}பொ STR_GAME_OPTIONS_TAB_GRAPHICS :அசைவூட்டங்கள் STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}அசைவூட்ட அமைப்புகளைத் தேர்ந்தெடு STR_GAME_OPTIONS_TAB_SOUND :ஒலி +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}ஒலி மற்றும் இசை அமைப்புகளைத் தேர்ந்தெடு STR_GAME_OPTIONS_TAB_SOCIAL :சமூக +STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}சமூக இணைப்பு அமைப்புகளைத் தேர்ந்தெடு STR_GAME_OPTIONS_VOLUME :ஒலி அளவு STR_GAME_OPTIONS_SFX_VOLUME :ஒலி விளைவுகள் @@ -1355,12 +1357,15 @@ STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :முக்க STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :முக்கிய திரைபார்வை STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :ஒவ்வொரு திரைபார்வையும் -STR_CONFIG_SETTING_BRIBE :நகராட்சிக்கு கையூட்டுத் தர அனுமதி: {STRING} +STR_CONFIG_SETTING_BRIBE :நகராட்சிக்கு லஞ்சம் தர அனுமதி: {STRING} ###length 2 -STR_CONFIG_SETTING_BRIBE_HELPTEXT :உள்ளூர் நகர அதிகாரத்திற்கு லஞ்சம் கொடுக்க நிறுவனங்களை அனுமதிக்கவும். லஞ்சம் ஒரு ஆய்வாளரால் கவனிக்கப்பட்டால், நிறுவனம் ஆறு மாதங்களுக்கு நகரத்தில் செயல்பட முடியாது +STR_CONFIG_SETTING_BRIBE_HELPTEXT :நகராட்சிக்கு லஞ்சம் கொடுக்க நிறுவனங்களை அனுமதிக்கவும். லஞ்சம் ஒரு ஆய்வாளரால் கவனிக்கப்பட்டால், நிறுவனம் ஆறு மாதங்களுக்கு நகரத்தில் நடவடிக்கை எடுக்க முடியாது +STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :நகராட்சிக்கு லஞ்சம் கொடுக்க நிறுவனங்களை அனுமதிக்கவும். லஞ்சம் ஒரு ஆய்வாளரால் கவனிக்கப்பட்டால், நிறுவனம் ஆறு நிமிடங்களுக்கு நகரத்தில் நடவடிக்கை எடுக்க முடியாது STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :போக்குவரத்து உரிமைகளை விற்க அனுமதிக்கவும்: {STRING} ###length 2 +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :ஒரு நிருவனம் நகரத்தில் பிரத்தியேக போக்குவரத்து உரிமைகளை வாங்கினால், எதிராளிகளின் நிலையங்கள் 12 மாதங்களுக்கு எந்த பயணிகள் அல்லது சரக்குகளையும் பெறாது +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT_MINUTES :ஒரு நிருவனம் நகரத்தில் பிரத்தியேக போக்குவரத்து உரிமைகளை வாங்கினால், எதிராளிகளின் நிலையங்கள் 12 நிமிடங்களுக்கு எந்த பயணிகள் அல்லது சரக்குகளையும் பெறாது STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :கட்டடங்களை கட்ட அனுமதி: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :நிறுவனங்கள் நகரங்களுக்கு பணம் வழங்க அனுமதிக்கவும், புதிய வீடுகள் கட்ட @@ -1991,6 +1996,7 @@ STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}அம STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF அமைப்புகள் STR_INTRO_ONLINE_CONTENT :{BLACK}கோப்புகளை இணையத்தில் தேடு STR_INTRO_AI_SETTINGS :{BLACK}செயற்கை நுண்ணறிவு அமைப்புகள் +STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}விளையாட்டு ஸ்கிரிப்ட் அமைப்புகள் STR_INTRO_QUIT :{BLACK}வெளியேறு STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}புதிய ஆட்டத்தினைத் தொடங்கும். Ctrl+Click அழுத்தினால் வரைபட அமைப்புவடிவாக்கம் தவிர்க்கப்படும் @@ -2015,6 +2021,7 @@ STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}AI அ STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}விளையாட்டு ஸ்கிரிப்ட் அமைப்புகளைத் திற STR_INTRO_TOOLTIP_QUIT :{BLACK} 'OpenTTD'ஐ விட்டு வெளியேறு +STR_INTRO_BASESET :{BLACK}தேர்ந்தெடுக்கப்பட்ட அடிப்படை வரைகலை தொகுப்பில் {NUM}{P படம் படங்கள்} காணவில்லை. தயவுசெய்து அடிப்படை வரைகலை தொகுப்பிற்கான மேம்படுத்தல்களுக்கு தேடவும். STR_INTRO_TRANSLATION :{BLACK}இந்த மொழிபெயர்ப்பில் {NUM} இல்லை {P "" s}.மொழிபெயர்பாளராக பதிவு செய்து OpenTTDவிற்கு உதவவும். மேலும் விவரங்கள் அறிய readme.txt ஐ பார்க்கவும்.. # Quit window @@ -2437,6 +2444,7 @@ STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}அன STR_CONTENT_SEARCH_EXTERNAL :{BLACK}வெளி இணையதளங்களில் தேடு STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}OpenTTDஇன் கோப்பு சேவையில் கிடைக்காத கோப்புகளுக்கு OpenTTDஉடன் தொடர்பில்லாத இணையதளங்களில் தேடவும் STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}நீங்கள் OpenTTD ஐ விட்டு வெளியேறுகிறீர்கள்! +STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}வெளி இணையதளங்களிரிந்து கோப்புகளை பதிவிறக்குவதற்கான விதிமுறைகள் மற்றும் நிபந்தனைகள் மாறுபடலாம்.{}நீங்கள் கோப்புகளை நிறுவுவதற்கான வழிமுறைகளுக்கு அந்த வெளி இணையதளங்களை பார்க்க வேண்டும்.{}தொடர விருப்பமா? STR_CONTENT_FILTER_TITLE :{BLACK}குறியீடு/பெயர் வடிகட்டி: STR_CONTENT_OPEN_URL :{BLACK}இணையதளத்தினை பார்வையிடு STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}இந்த கோப்பின் விவரங்களினை அதன் இணையதளத்தில் பார்க்க @@ -2501,8 +2509,10 @@ STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}OpenTTD- # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}ஒளி அமைப்புகள் STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}வீடுகளுக்கான வெளிப்படைத்தன்மையை நிலைமாற்று. Ctrl+Click செய்தால் அதனைப் பூட்டும் +STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}நிறுத்தங்கள், பணிமனைகள், வழிப்புள்ளிகள் போன்ற கட்டிகங்களுக்கான வெளிப்படைத்தன்மையை நிலைமாற்று. Ctrl+Click செய்தால் அதனைப் பூட்டும் STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}பாலத்திற்கான வெளிப்படைத்தன்மையை நிலைமாற்று. Ctrl+Click செய்தால் அதனைப் பூட்டும் STR_TRANSPARENT_STRUCTURES_TOOLTIP :கலங்கரைவிளக்கம் மற்றும் ஆண்டெனா போல கட்டடங்களின் வெளிப்படைத்தன்மையை நிலைமாற்று. Ctrl+கிளிக் பூட்ட செய்ய +STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}மின்சார இரயில் கம்பிக்ளுக்கான வெளிப்படைத்தன்மையை நிலைமாற்று. Ctrl+Click செய்தால் அதனைப் பூட்டும் STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}வெளிப்படையானதற்கு பதிலாக கண்ணுக்கு தெரியாததாக பொருட்களை அமைக்கவும் # Linkgraph legend window @@ -3243,10 +3253,16 @@ STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}பய STR_NEWGRF_LIST_MISSING :{RED}கோப்புகள் இல்லை # NewGRF 'it's broken' warnings +STR_NEWGRF_BROKEN :{WHITE}'{0:STRING} என்ற NewGRFஇன் நடத்தையால் இணைப்பு பீழைகள் மற்றும் செயலிழப்புகள் ஏற்பட வாய்ப்புள்ளது +STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}பணிமனையின் வெளியே '{1:ENGINE}'இன் இயங்கும் நிலையை மாற்றியது +STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}பணிமனையின் வெளியே '{1:ENGINE}'இன் வாகன நீளத்தை மாற்றியது +STR_NEWGRF_BROKEN_CAPACITY :{WHITE}பணிமனை அல்லது மாற்றியமைப்பின் வெளியே '{1:ENGINE}'இன் வாகன கொள்ளளவை மாற்றியது +STR_BROKEN_VEHICLE_LENGTH :{WHITE}{1:COMPANY}உடன் இரயில் {0:VEHICLE}இன் நீளம் செல்லாது. இதற்கான காரணம் அநேகமாக NewGRFகளுடன் சிக்கல் இருக்கலாம். இணைப்பு பிழை அல்லது செயலிழப்பு ஏற்படலாம். STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' தவரான தகவல்களினைத் தருகின்றது STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' தயாரிப்பு பின் அழைப்பில் முடிவில்லாத வட்டத்தினை உண்டாக்கியது STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}பின் அழைப்பு {1:HEX} திருப்பட்டது தெரியவில்லை/செல்லுபடியாகாத முடிவு {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}{2:HEX}ல் உற்பத்தி பின் அழைப்பில் {1:STRING} செல்லுபடியாகாத சரக்கு விதம் வழங்கியது # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO :<செல்லுபடியாகாத சரக்கு> @@ -3328,13 +3344,16 @@ STR_LOCAL_AUTHORITY_ACTION_ROAD_RECONSTRUCTION :நகர ச STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :நிறுவன தலைவரின் சிலையினை கட்டு STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :புதிய கட்டடங்களை கட்ட நிதியுதவி செய் STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :சிறப்பு போக்குவரத்து உரிமைகளை வாங்கு -STR_LOCAL_AUTHORITY_ACTION_BRIBE :நகராட்சியிற்கு கையூட்டு கொடு +STR_LOCAL_AUTHORITY_ACTION_BRIBE :நகராட்சியிற்கு லஞ்சம் கொடு ###next-name-looks-similar STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}சிறிய விளம்பர பிரசாரத்தினைத் தொடங்கு, இதனால் பயணிகள் மற்றும் சரக்குகள் உங்களது போக்குவரத்து நிறுவனத்தினைப் பயன்படுத்துவர்.{}செலவு: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}சராசரி விளம்பர பிரசாரத்தினைத் தொடங்கு, இதனால் பயணிகள் மற்றும் சரக்குகள் உங்களது போக்குவரத்து நிறுவனத்தினைப் பயன்படுத்துவர்.{}செலவு: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}பெரிய விளம்பர பிரசாரத்தினைத் தொடங்கு, இதனால் பயணிகள் மற்றும் சரக்குகள் உங்களது போக்குவரத்து நிறுவனத்தினைப் பயன்படுத்துவர்.{}செலவு: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}தங்கள் நிறுவனத்தின் பெருமைக்காக ஓர் சிலையினைக் கட்டவும்.{}நிலையத்திற்கு நிரந்தர ஊக்கத்தை அளிக்கிறது.{}செலவு: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}12 மாதங்களுக்கு நகரத்தில் பிரத்தியேக போக்குவரத்து உரிமை வாங்கவும்.{}நகராட்சி பயணிகள் மற்றும் சரக்குகளை உங்கள் எதிராளிகளின் நிலையங்களை பயன்படுத்த அனுமதிக்காது. எதிராளியின் வெற்றிகரமான லஞ்சம் இந்த ஒப்பந்தத்தை ரத்து செய்யும்.{}{POP_COLOUR}செலவு: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}12 நிமிடங்களுக்கு நகரத்தில் பிரத்தியேக போக்குவரத்து உரிமை வாங்கவும்.{}நகராட்சி பயணிகள் மற்றும் சரக்குகளை உங்கள் எதிராளிகளின் நிலையங்களை பயன்படுத்த அனுமதிக்காது. எதிராளியின் வெற்றிகரமான லஞ்சம் இந்த ஒப்பந்தத்தை ரத்து செய்யும்.{}{POP_COLOUR}செலவு: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}மாட்டிக்கொண்டால் கடுமையான அபராதம் ஆபத்தில், உங்கள் மதிப்பீட்டை அதிகரிக்க மற்றும் எதிராளியின் பிரத்தியேக போக்குவரத்து உரிமைகளின் ரத்து செய்ய நகராட்சிக்கு லஞ்சம் தரவும்.{}{POP_COLOUR}செலவு: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} குறிக்கோள்கள் @@ -3593,6 +3612,7 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} மற்றும் {NUM} மேலும்... +STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}தொழிற்சாலைகளின் பெயர்கள் - தொழிற்சாலயை முக்கிய காட்சியில் நடுவில் காட்ட பெயரில் கிளிக் செய்யவும். தொழிற்சாலையின் இடத்தில் புதிய காட்சியை திறக்க Ctrl+கிளிக் செய்யவும். STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}ஏற்றுக்கொள்ளப்படும் சரக்குகள்: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}உற்பத்தி செய்யப்பட்ட சரக்குகள்: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :அனைத்து சரக்கு வகைகள் @@ -4142,6 +4162,7 @@ STR_ORDER_GO_TO :இங்கே STR_ORDER_GO_NON_STOP_TO :எங்கும் நிற்காமல் இங்கே செல் STR_ORDER_GO_VIA :இதன் வழியாக இங்கே செல் STR_ORDER_GO_NON_STOP_VIA :எங்கும் நிற்காமல் இதன் வழியாக செல் +STR_ORDER_TOOLTIP_NON_STOP :{BLACK}இந்தக் கட்டளையின் நிறுத்துதல் நடத்தையை மாற்றவும் STR_ORDER_TOGGLE_FULL_LOAD :{BLACK}எந்த சரக்கினையும் முழுமையாக ஏற்று STR_ORDER_DROP_LOAD_IF_POSSIBLE :கிடைத்தால் ஏற்று diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 95a22362c4..9e99e76294 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -4660,7 +4660,7 @@ STR_ORDERS_CAPTION :{WHITE}{VEHICLE STR_ORDERS_TIMETABLE_VIEW :{BLACK}Розклад STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Переключитись на розклад -STR_ORDERS_LIST_TOOLTIP :{BLACK}Маршрутний лист - клацніть на завданні для його вибору. Ctrl+клац мишою показує станцію призначення +STR_ORDERS_LIST_TOOLTIP :{BLACK}Маршрутний лист - клацніть на завданні для його вибору. Ctrl+клац переміщує головний екран на пункт призначення STR_ORDER_INDEX :{COMMA}:{NBSP} STR_ORDER_TEXT :{STRING} {STRING} {STRING} {STRING} @@ -4699,6 +4699,7 @@ STR_ORDER_DROP_REFIT_AUTO_ANY :Доступн STR_ORDER_DROP_GO_ALWAYS_DEPOT :Завжди прямувати STR_ORDER_DROP_SERVICE_DEPOT :Прямувати при потребі в техогляді STR_ORDER_DROP_HALT_DEPOT :Прямувати і зупинитись +STR_ORDER_DROP_UNBUNCH :Звільнити # Depot action tooltips, one per vehicle type ###length VEHICLE_TYPES @@ -4736,13 +4737,13 @@ STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}Знач STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Введіть значення для порівняння STR_ORDERS_SKIP_BUTTON :{BLACK}Пропуск -STR_ORDERS_SKIP_TOOLTIP :{BLACK}Пропустити поточний наказ, і виконувати наступний. Ctrl+клац мишою переходить до вибраного наказу +STR_ORDERS_SKIP_TOOLTIP :{BLACK}Пропустити поточний наказ, і виконувати наступний. Ctrl+клац для переходу до обраного наказу 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_TOOLTIP :{BLACK}Припинити використовути спільні накази. Ctrl+клац мишою видаляє всі накази для цього транспорту +STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Припинити використовути спільні накази. Ctrl+клац видаляє всі накази для цього транспорту STR_ORDERS_GO_TO_BUTTON :{BLACK}Прямувати STR_ORDER_GO_TO_NEAREST_DEPOT :Прямувати до найближчого депо @@ -4863,7 +4864,7 @@ STR_TIMETABLE_START :{BLACK}Поча STR_TIMETABLE_START_SECONDS_QUERY :Секунд до початку розкладу STR_TIMETABLE_CHANGE_TIME :{BLACK}Змінити час -STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Змінити час, впродовж якого має виконуватись наказ. Ctrl+клац змінить час в усіх завданнях +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Змінити час, впродовж якого має виконуватись наказ. Ctrl+клац змінить час в усіх наказах STR_TIMETABLE_CLEAR_TIME :{BLACK}Скасувати час STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Скасувати час виконання виділеного наказу. Ctrl+клац скасує обмеження часу в усіх наказах diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 723d5e8206..1791df5591 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1011,6 +1011,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Rupee Ấn Đ STR_GAME_OPTIONS_CURRENCY_IDR :Rupiah Indonesia STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit Malaysia STR_GAME_OPTIONS_CURRENCY_LVL :Lát-vi-a Lats +STR_GAME_OPTIONS_CURRENCY_PTE :Escudo Bồ Đào Nha STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Lưu tự động STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Lựa chọn khoảng thời gian tự động lưu @@ -1053,7 +1054,7 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :Tỷ lệ góc STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Đánh dấu vào ô này để điều chỉnh tỷ lệ góc xiên theo kích thước giao diện STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Sử dụng sprite phông truyền thống -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Tuỳ chọn này nếu bạn muốn sử dụng sprite phông cố định truyền thống. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Tuỳ chọn này nếu bạn muốn sử dụng sprite phông cố định truyền thống STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Phông chữ chống răng cưa STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Tuỳ chọn này để chống răng cưa phông chữ co dãn được @@ -1117,6 +1118,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Giảm t STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Tăng tỉ giá tiền của bạn đối với 1 Pound (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Điều chỉnh tỉ giá tiền của bạn đối với 1 Pound (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Ký tự phân cách: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Thiết lập ký tự phân cách cho tiền tệ của bạn STR_CURRENCY_PREFIX :{LTBLUE}Tiền tố: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Chỉnh tiếp đầu ngữ cho tiền tệ của bạn @@ -1272,7 +1275,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Tiền vô hạ STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Cho phép chi tiêu không giới hạn và tắt bỏ việc phá sản của các công ty STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Khoảng vay khởi nghiệp tối đa: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Hạn mức vay khởi nghiệp tối đa một công ty có thể vay (không tính lạm phát). Nếu chọn "Không có khoản vay", tiền sẽ không có sẵn trừ khi được cung cấp bằng Game Script hoặc thiêt lập "Tiền vô hạn". +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Hạn mức vay khởi nghiệp tối đa một công ty có thể vay (không tính lạm phát). Nếu chọn "Không có khoản vay", tiền sẽ không có sẵn trừ khi được cung cấp bằng Game Script hoặc thiêt lập "Tiền vô hạn" STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Không có khoản vay @@ -1356,7 +1359,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Sự giảm t STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Sự giảm tốc cho ôtô tại một ô dốc. Giá trị càng cao thì càng khó leo dốc STR_CONFIG_SETTING_FORBID_90_DEG :Ngăn tàu hỏa chuyển hướng 90 độ: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Chuyển hướng 90 độ chỉ xảy ra khi một ray ngang nối với một ray dọc ở 2 ô liền kề, khiến cho tàu hỏa cua 90 độ khi đến ô rẽ thay vì 45 độ như bình thường. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Chuyển hướng 90 độ chỉ xảy ra khi một ray ngang nối với một ray dọc ở 2 ô liền kề, khiến cho tàu hỏa cua 90 độ khi đến ô rẽ thay vì 45 độ như bình thường STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Cho phép gộp ga, bến, cảng không sát nhau: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Cho phép thêm đoạn vào ga mà không phải sửa cái hiện có. Phải bấm Ctrl+Click để thêm đoạn vào ga @@ -1468,7 +1471,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Màu chủ đ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Thay đổi màu sắc chủ đạo của công ty STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Màu phụ của công ty: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Thay đổi màu sắc phụ khi bắt đầu công ty, nếu sử dụng NewGRF bật tính năng này +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Thay đổi màu sắc phụ khi bắt đầu công ty, nếu sử dụng NewGRF có bật tính năng này STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Sân bay không bao giờ hết hạn sử dụng: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Bật tùy chọn này cho phép tất cả các loại sân bay không bị lỗi thời @@ -1492,22 +1495,22 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Phương tiện STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Nếu bật, tất cả các model phương tiện sẽ không bị lỗi thời STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Giữ nhịp: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Lựa chọn đơn vị giữ nhịp thời gian trong trò chơi. Điều này không thể thay đổi sau đó.{}{}Dựa trên lịch là kiểu cổ điển của OpenTTD, với mỗi năm là 12 tháng, và mỗi tháng có 28-31 ngày.{}{}Theo kiểu nhịp đồng hồ, thì dịch chuyển xe cộ, sản lượng vận tải, và các chỉ số tài chính sẽ theo nhịp mỗi phút tăng lên, nó tương đương với 30 ngày trong tháng của kiểu lịch. Những nhịp này sẽ nhóm thành kỳ 12 phút, tương đương một năm của kiểu lịch.{}{}Ở cả 2 chế độ thì luôn áp dụng lịch cổ điển cho ngày giới thiệu xe mới, nhà và các hạ tầng khác. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Lựa chọn đơn vị giữ nhịp thời gian trong trò chơi. Điều này không thể thay đổi sau đó.{}{}Dựa trên lịch là kiểu cổ điển của OpenTTD, với mỗi năm là 12 tháng, và mỗi tháng có 28-31 ngày.{}{}Theo kiểu nhịp đồng hồ, thì dịch chuyển xe cộ, sản lượng vận tải, và các chỉ số tài chính sẽ theo nhịp mỗi phút tăng lên, nó tương đương với 30 ngày trong tháng của kiểu lịch. Những nhịp này sẽ nhóm thành kỳ 12 phút, tương đương một năm của kiểu lịch.{}{}Ở cả 2 chế độ thì luôn áp dụng lịch cổ điển cho ngày giới thiệu xe mới, nhà và các hạ tầng khác ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Lịch STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Đồng hồ tính giờ STR_CONFIG_SETTING_MINUTES_PER_YEAR :Số phút tính cho mỗi năm: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Chọn số phút trong mỗi lịch năm. Mặc định là 12 phút/năm. Đặt bằng 0 để ngưng lịch thời gian. Tuỳ chọn này sẽ không ảnh hưởng đến việc giả lập kinh tế trong trò chơi, và nó chỉ sẵn có khi sử dụng đồng hồ giữ nhịp. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Chọn số phút trong mỗi lịch năm. Mặc định là 12 phút/năm. Đặt bằng 0 để ngưng lịch thời gian. Tuỳ chọn này sẽ không ảnh hưởng đến việc giả lập kinh tế trong trò chơi, và nó chỉ sẵn có khi sử dụng đồng hồ giữ nhịp STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (lịch thời gian ngưng đọng) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Co dãn sản lượng vận tải địa phương: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Co dãn sản lượng vận tải của các địa phương bởi tỉ lệ phần trăm này. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Co dãn sản lượng vận tải của các địa phương bởi tỉ lệ phần trăm này STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Dãn tỉ lệ vận chuyển sản lượng của nhà máy: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Dãn sản lượng vận chuyển của các nhà máy bằng tỉ lệ phần trăm này. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Dãn sản lượng vận chuyển của các nhà máy bằng tỉ lệ phần trăm này STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Tự thay mới phương tiện nếu hết hạn sử dụng: {STRING} @@ -1526,7 +1529,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Khoảng thời STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Khoảng thời gian hiện thị thông báo trong cửa sổ màu đỏ. Lưu ý rằng cửa sổ thông báo sẽ tự đóng khi sau khoảng thời gian này, hoặc là được đóng bằng tay STR_CONFIG_SETTING_HOVER_DELAY :Hiện chú thích: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Khoảng thời gian trễ mà hướng dẫn hiện lên khi di chuột tới đối tượng, có thể hiện hướng dẫn bằng bấm nút phải chuột khi giá trị này bằng 0. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Khoảng thời gian trễ mà hướng dẫn hiện lên khi di chuột tới đối tượng, có thể hiện hướng dẫn bằng bấm nút phải chuột khi giá trị này bằng 0 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Thời gian để con trỏ lên đối tượng {COMMA} mili giây ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Bấm phải chuột @@ -1538,8 +1541,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Độ đậm c STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Độ đậm của đường vẽ trên đồ thị. Một đường mảnh sẽ chính xác hơn, trong khi đó đường đậm sẽ dễ nhìn hơn và màu sắc dễ phân biệt hơn STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Hiển thị tên NewGRF trong cửa sổ xây phương tiện: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Thêm một dòng vào cửa sổ xây phương tiện, hiển thị phương tiện đến từ NewGRF nào. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Liệt kê hàng hoá mà phương tiện có thể chuyên chở trong cửa sổ danh sách {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Thêm một dòng vào cửa sổ xây phương tiện, hiển thị phương tiện đến từ NewGRF nào +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Liệt kê hàng hoá mà phương tiện có thể chuyên chở trong cửa sổ danh sách: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Nếu được bật, những hàng hóa có thể vận chuyển của phương tiện sẽ được hiển thị phía trên chúng trong danh sách phương tiện STR_CONFIG_SETTING_LANDSCAPE :Nền đất: {STRING} @@ -1572,7 +1575,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Điều chỉnh STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Độ gồ ghề của địa chất: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Chọn hình dạng và số lượng đồi núi. Địa hình bằng phẳng có ít núi nhưng chúng sẽ rộng hơn, trong khi địa hình gồ ghề có nhiều núi với kích cỡ nhỏ. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Chọn hình dạng và số lượng đồi núi. Địa hình bằng phẳng có ít núi nhưng chúng sẽ rộng hơn, trong khi địa hình gồ ghề có nhiều núi với kích cỡ nhỏ ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Rất Phẳng STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Phẳng @@ -1580,7 +1583,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Gồ Ghề STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Rất Gồ Ghề STR_CONFIG_SETTING_VARIETY :Phân bổ sự đa dạng: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Điều chỉnh liệu rằng bản đồ gồm cả vùng núi cao và vùng đồng bằng. Độ đa dạng càng cao thì sự chênh lệch về độ cao giữa vùng núi và vùng đồng bằng càng nhiều. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Điều chỉnh liệu rằng bản đồ gồm cả vùng núi cao và vùng đồng bằng. Độ đa dạng càng cao thì sự chênh lệch về độ cao giữa vùng núi và vùng đồng bằng càng nhiều STR_CONFIG_SETTING_RIVER_AMOUNT :Số lượng sông ngòi: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Chọn số lượng sông ngòi được khởi tạo @@ -1748,10 +1751,10 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Vẫn giữ cô STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Giữ cho công cụ xây dựng đối với cầu, hầm... vẫn mở sau khi dùng. STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Tự động loại bỏ đèn tín hiệu khi xây dựng đường ray: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Tự động loại bỏ đèn tín hiệu trên đường khi xây dựng đường ray. Lưu ý điều này có khả năng gây ra tai nạn tàu hỏa. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Tự động loại bỏ đèn tín hiệu trên đường khi xây dựng đường ray. Lưu ý điều này có khả năng gây ra tai nạn tàu hỏa STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Giới hạn tốc độ tua nhanh: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Giới hạn tốc độ của trò chơi khi dùng chế độ tua nhanh. 0 = không có giới hạn (dùng tốc độ nhanh nhất mà máy tính cho phép). Giá trị dưới 100% sẽ làm chậm trò chơi lại. Cận trên phụ thuộc vào cấu hình máy tính và tùy thuộc vào ván chơi. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Giới hạn tốc độ của trò chơi khi dùng chế độ tua nhanh. 0 = không có giới hạn (dùng tốc độ nhanh nhất mà máy tính cho phép). Giá trị dưới 100% sẽ làm chậm trò chơi lại. Cận trên phụ thuộc vào cấu hình máy tính và tùy thuộc vào ván chơi STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% tốc độ bình thường của trò chơi ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Không giới hạn (theo tốc độ của máy tính cho phép) @@ -1815,11 +1818,11 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Cho phép ngư STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#mã lệnh trước kịch bản tạm ngưng: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Số lượng tối đa các tính toán mà một kịch bản AI được phép chạy mỗi lần STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Bộ nhớ sử dụng tối đa mỗi kích bản: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Số lượng bộ nhớ tối đa mà kịch bản có thể tiêu thụ trước khi nó bị từ chối hoạt động. Số lượng này có thể phải tăng lên nếu bản đồ lớn hơn. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Số lượng bộ nhớ tối đa mà kịch bản có thể tiêu thụ trước khi nó bị từ chối hoạt động. Số lượng này có thể phải tăng lên nếu bản đồ lớn hơn STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Tần suất bảo trì theo đơn vị phần trăm: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Khi được bật, việc bảo trì phương tiện sẽ được thực thực hiện khi độ tin cậy của phương tiện giảm xuống so với độ tin cậy tối đa.{}{}Ví dụ, nếu độ tin cậy tối đa của phương tiện là 90% và tần suất bảo trì là 20%, phương tiện sẽ được bảo trì khi độ tin cậy giảm xuống 72%. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Khi được bật, việc bảo trì phương tiện sẽ được thực thực hiện khi độ tin cậy của phương tiện giảm xuống so với độ tin cậy tối đa.{}{}Ví dụ, nếu độ tin cậy tối đa của phương tiện là 90% và tần suất bảo trì là 20%, phương tiện sẽ được bảo trì khi độ tin cậy giảm xuống 72% STR_CONFIG_SETTING_SERVINT_TRAINS :Tần suất bảo trì mặc định đối với tàu hỏa: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Thiết lập khoảng thời gian bảo trì tùy chọn đối với các tàu hỏa, nếu phương tiện không có riêng thời gian bảo trì này @@ -1837,7 +1840,7 @@ STR_CONFIG_SETTING_NOSERVICE :Tắt bảo tr STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Nếu bật, phương tiện sẽ không cần bảo trì nếu chúng không thể bị hỏng STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Tốc độ nạp hàng bị suy giảm cho tàu hoả dài hơn độ dài của ga tàu: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Khi bật, đoàn tàu quá dài sẽ nạp hàng chậm hơn một đoàn tàu dài vừa với độ dài ga tàu. Tuỳ chọn. này không ảnh hưởng tới việc tìm đường. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Khi bật, đoàn tàu quá dài sẽ nạp hàng chậm hơn một đoàn tàu dài vừa với độ dài ga tàu. Tuỳ chọn. này không ảnh hưởng tới việc tìm đường STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Bật giới hạn tốc độ toa tàu: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Nếu bật, sử dụng giới hạn tốc độ của toa xe để hạn chế tốc độ của cả đoàn tàu @@ -1902,13 +1905,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Năm mà các b STR_CONFIG_SETTING_STARTING_YEAR :Năm bắt đầu: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Năm kết thúc để tính điểm: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Năm mà ván chơi sẽ kết thúc và tính điểm. Khi năm đó kết thúc, điểm số của công ty sẽ được lưu lại và hiển thị bảng điểm chơi cao nhất, sau đó người chơi vẫn có thể tiếp tục ván chơi.{} Nếu năm được đặt nhỏ hơn năm bắt đầu, bảng điểm chơi cao nhất sẽ không bao giờ được hiển thị. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Năm mà ván chơi sẽ kết thúc và tính điểm. Khi năm đó kết thúc, điểm số của công ty sẽ được lưu lại và hiển thị bảng điểm chơi cao nhất, sau đó người chơi vẫn có thể tiếp tục ván chơi.{} Nếu năm được đặt nhỏ hơn năm bắt đầu, bảng điểm chơi cao nhất sẽ không bao giờ được hiển thị STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Không bao giờ STR_CONFIG_SETTING_ECONOMY_TYPE :Nền kinh tế: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Nền kinh tế vận hành trơn tru sẽ có nhiều thay đổi về mặt sản xuất, ở từng bước nhỏ. Nền kinh tế đóng băng sẽ không có thay đổi về mặt sản xuất và nhà máy sẽ không đóng cửa. Thiết lập này có thể không có tác dụng nếu các loại hình công nghiệp được cung cấp bởi NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Nền kinh tế vận hành trơn tru sẽ có nhiều thay đổi về mặt sản xuất, ở từng bước nhỏ. Nền kinh tế đóng băng sẽ không có thay đổi về mặt sản xuất và nhà máy sẽ không đóng cửa. Thiết lập này có thể không có tác dụng nếu các loại hình công nghiệp được cung cấp bởi NewGRF ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Nguyên gốc STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Vận hành trơn tru @@ -1963,7 +1966,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :cho phép STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :cho phép, tùy chọn bố trí đô thị STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Nhu cầu vận chuyển hàng đô thị: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Lượng hàng hoá cần vận chuyển ở trong đô thị, tỉ lệ với tổng dân số của độ thị.{}Tăng tỉ lệ bình phương: một đô thị to gấp 2 sẽ tăng 4 lần số hành khách.{}Tăng tỉ lệ thuận: một đô thị tăng gấp 2 sẽ tăng gấp 2 lần số hành khách. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Lượng hàng hoá cần vận chuyển ở trong đô thị, tỉ lệ với tổng dân số của độ thị.{}Tăng tỉ lệ bình phương: một đô thị to gấp 2 sẽ tăng 4 lần số hành khách.{}Tăng tỉ lệ thuận: một đô thị tăng gấp 2 sẽ tăng gấp 2 lần số hành khách ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Tỉ lệ bình phương (nguyên bản) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Tuyến tính @@ -2004,7 +2007,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Độ phân giải sprite lớn nhất sẽ dùng: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Giới hạn độ phân giải tối đa sử dụng cho sprite. Giới hạn độ phân giải của sprite sẽ ngưng việc sử dụng các gói đồ họa phân giải cao ngay cả khi đã cài. Điều này có thể giúp cho đồ họa của trò chơi được đồng nhất khi sử dụng lẫn lộn các GRF có và không có phân giải cao. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Giới hạn độ phân giải tối đa sử dụng cho sprite. Giới hạn độ phân giải của sprite sẽ ngưng việc sử dụng các gói đồ họa phân giải cao ngay cả khi đã cài. Điều này có thể giúp cho đồ họa của trò chơi được đồng nhất khi sử dụng lẫn lộn các GRF có và không có phân giải cao ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2028,33 +2031,33 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Hệ số quy m STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Kích thước trung bình của thành phố tỉ lệ với đô thị lúc bắt đầu trò chơi STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Cập nhật biểu đồ phân phối mỗi {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Thời gian giữa các lần tính toán lại tiếp theo của biểu đồ liên kết. Mỗi lần tính toán lại sẽ tính toán các kế hoạch cho một thành phần của biểu đồ. Điều đó có nghĩa là giá trị X cho cài đặt này không có nghĩa là toàn bộ biểu đồ sẽ được cập nhật X giây một lần. Chỉ một số thành phần sẽ làm như vậy. Bạn đặt nó càng ngắn thì càng cần nhiều thời gian CPU để tính toán nó. Bạn đặt càng lâu thì càng mất nhiều thời gian cho đến khi việc phân phối hàng hóa bắt đầu trên các tuyến đường mới. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Thời gian giữa các lần tính toán lại tiếp theo của biểu đồ liên kết. Mỗi lần tính toán lại sẽ tính toán các kế hoạch cho một thành phần của biểu đồ. Điều đó có nghĩa là giá trị X cho cài đặt này không có nghĩa là toàn bộ biểu đồ sẽ được cập nhật X giây một lần. Chỉ một số thành phần sẽ làm như vậy. Bạn đặt nó càng ngắn thì càng cần nhiều thời gian CPU để tính toán nó. Bạn đặt càng lâu thì càng mất nhiều thời gian cho đến khi việc phân phối hàng hóa bắt đầu trên các tuyến đường mới STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Mất {STRING} để tính toán lại biểu đồ phân phối -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Thời gian tiêu tốn cho mỗi lần tính toán lại một thành phần biểu đồ liên kết. Khi bắt đầu tính toán lại, một luồng sẽ được sinh ra và chạy trong số giây được thiết lập. Bạn đặt thông số này càng ngắn thì càng có nhiều khả luồng được tạo chưa hoàn thành công việc của nó. Sau đó, trò chơi dừng lại cho đến khi nó ("lag"). Bạn đặt càng lâu thì biểu đồ phân phối càng mất nhiều thời gian để cập nhật khi các tuyến thay đổi. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Thời gian tiêu tốn cho mỗi lần tính toán lại một thành phần biểu đồ liên kết. Khi bắt đầu tính toán lại, một luồng sẽ được sinh ra và chạy trong số giây được thiết lập. Bạn đặt thông số này càng ngắn thì càng có nhiều khả luồng được tạo chưa hoàn thành công việc của nó. Sau đó, trò chơi dừng lại cho đến khi nó ("lag"). Bạn đặt càng lâu thì biểu đồ phân phối càng mất nhiều thời gian để cập nhật khi các tuyến thay đổi STR_CONFIG_SETTING_DISTRIBUTION_PAX :Chế độ phân phối đối với hành khách: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Đối xứng" có nghĩa là số lượng hành khách đi từ nhà ga A đến nhà ga B và từ B đến A sẽ tương đương nhau . "Không đối xứng" có nghĩa là số lượng hành khách tùy ý có thể đi theo một trong hai hướng. "Thủ công" có nghĩa là hành khách sẽ không được phân phối tự động. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Đối xứng" có nghĩa là số lượng hành khách đi từ nhà ga A đến nhà ga B và từ B đến A sẽ tương đương nhau . "Không đối xứng" có nghĩa là số lượng hành khách tùy ý có thể đi theo một trong hai hướng. "Thủ công" có nghĩa là hành khách sẽ không được phân phối tự động STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Chế độ phân phối đối với thư tín: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Đối xứng" có nghĩa là cùng một lượng thư sẽ được gửi từ trạm A đến trạm B cũng như từ B đến A. "Không đối xứng" có nghĩa là lượng thư tùy ý có thể được gửi theo một trong hai hướng. "Thủ công" có nghĩa là thư sẽ không được phân phối tự động. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Đối xứng" có nghĩa là cùng một lượng thư sẽ được gửi từ trạm A đến trạm B cũng như từ B đến A. "Không đối xứng" có nghĩa là lượng thư tùy ý có thể được gửi theo một trong hai hướng. "Thủ công" có nghĩa là thư sẽ không được phân phối tự động STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Chế độ phân phối đối với hàng hóa đóng két: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Loại hàng hóa "ARMORED" chứa các vật có giá trị ở vùng ôn đới, kim cương ở vùng cận nhiệt đới hoặc vàng ở vùng khí hậu cận Bắc Cực. NewGRF có thể thay đổi điều đó. "Đối xứng" có nghĩa là cùng một lượng hàng hóa đó sẽ được gửi từ nhà ga A đến nhà ga B cũng như từ B đến A. "Không đối xứng" có nghĩa là lượng hàng hóa đó có thể được gửi tùy ý theo một trong hai hướng. "Thủ công" có nghĩa là sẽ không có hoạt động phân phối tự động nào đối với hàng hóa đó. Bạn nên đặt chế độ này thành bất đối xứng hoặc thủ công khi chơi ở vùng cận Bắc cực hoặc cận nhiệt đới, vì các ngân hàng chỉ nhận hàng ở những vùng khí hậu này. Đối với ôn hòa, bạn cũng có thể chọn đối xứng vì các ngân hàng sẽ gửi các vật có giá trị trở lại ngân hàng gốc. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Loại hàng hóa "ARMORED" chứa các vật có giá trị ở vùng ôn đới, kim cương ở vùng cận nhiệt đới hoặc vàng ở vùng khí hậu cận Bắc Cực. NewGRF có thể thay đổi điều đó. "Đối xứng" có nghĩa là cùng một lượng hàng hóa đó sẽ được gửi từ nhà ga A đến nhà ga B cũng như từ B đến A. "Không đối xứng" có nghĩa là lượng hàng hóa đó có thể được gửi tùy ý theo một trong hai hướng. "Thủ công" có nghĩa là sẽ không có hoạt động phân phối tự động nào đối với hàng hóa đó. Bạn nên đặt chế độ này thành bất đối xứng hoặc thủ công khi chơi ở vùng cận Bắc cực hoặc cận nhiệt đới, vì các ngân hàng chỉ nhận hàng ở những vùng khí hậu này. Đối với ôn hòa, bạn cũng có thể chọn đối xứng vì các ngân hàng sẽ gửi các vật có giá trị trở lại ngân hàng gốc STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Chế độ phân phối đối với các loại hàng hóa mặc định: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Không đối xứng" có nghĩa là số lượng hàng hóa tùy ý có thể được gửi theo một trong hai hướng. "Thủ công" có nghĩa là những loại hàng hóa đó sẽ không được phân phối tự động. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Không đối xứng" có nghĩa là số lượng hàng hóa tùy ý có thể được gửi theo một trong hai hướng. "Thủ công" có nghĩa là những loại hàng hóa đó sẽ không được phân phối tự động ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :bằng tay STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :bất đối xứng STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :đối xứng STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Độ chính xác phân phối: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Mức chính xác tính toán đồ thị, nếu giá trị càng cao càng tốn CPU và trò chơi có thể chậm phản ứng, tuy nhiên giá trị thấp sẽ khiến việc phân phối sẽ giảm sự chính xác và bạn sẽ thấy sự khác biệt là hàng hóa không gửi đến chỗ cần đến. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Mức chính xác tính toán đồ thị, nếu giá trị càng cao càng tốn CPU và trò chơi có thể chậm phản ứng, tuy nhiên giá trị thấp sẽ khiến việc phân phối sẽ giảm sự chính xác và bạn sẽ thấy sự khác biệt là hàng hóa không gửi đến chỗ cần đến STR_CONFIG_SETTING_DEMAND_DISTANCE :Ảnh hưởng bởi khoảng cách đến nhu cầu gửi: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Nếu bạn đặt giá trị này lớn hơn 0, thì khoảng chênh lượng hàng hóa gửi từ ga A đến B sẽ ảnh hưởng bởi khoảng cách, giá trị càng cao thì càng ít hàng gửi đến ga xa và nhiều hàng gửi đến ga gần và ngược lại. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Nếu bạn đặt giá trị này lớn hơn 0, thì khoảng chênh lượng hàng hóa gửi từ ga A đến B sẽ ảnh hưởng bởi khoảng cách, giá trị càng cao thì càng ít hàng gửi đến ga xa và nhiều hàng gửi đến ga gần và ngược lại STR_CONFIG_SETTING_DEMAND_SIZE :Khối lượng hàng hóa trả về đối với chế độ đối xứng: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Thiết lập giá trị này ít hơn 100% sẽ khiến vận tải hai chiều đối xứng sẽ giống như bất đối xứng. Sẽ có ít hàng hóa hơn chuyển ngược lại nếu như số lượng hàng chuyển tới vượt ngưỡng nào đó. Nếu đặt là 0% thì là bất đối xứng hoàn toàn. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Thiết lập giá trị này ít hơn 100% sẽ khiến vận tải hai chiều đối xứng sẽ giống như bất đối xứng. Sẽ có ít hàng hóa hơn chuyển ngược lại nếu như số lượng hàng chuyển tới vượt ngưỡng nào đó. Nếu đặt là 0% thì là bất đối xứng hoàn toàn STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Tỉ lệ bảo hòa (hết tải) của đường tắt trước khi chuyển sang đường khác dài hơn: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Thường sẽ có nhiều con đường giữa 2 ga/bến. Việc vận tải hàng hóa sẽ chọn con đường ngắn nhất trước cho đến khi hết tải. Sau đó chọn con đường ngắn thứ 2, 3... cho đến khi hết tải. Việc hết tải được tính toán bằng khối lượng vận chuyển thực tế so với dự tính. Khi hết tải tất cả các con đường, nếu vẫn còn hàng hóa cần chuyển, thì nó có thể gây quá tải. Dầu vậy thuật toán này không phải lúc nào cũng chính xác trong việc tính toán năng lực vận tải. Thiết lập này cho phép bạn tinh chỉnh tỉ lệ mà một con đường sẽ hết tải trước khi chọn con đường kế tiếp. Nhỏ hơn 100% sẽ giúp tránh việc một ga bến quá đông đúc và bù trừ việc tính toán sai lệch này. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Thường sẽ có nhiều con đường giữa 2 ga/bến. Việc vận tải hàng hóa sẽ chọn con đường ngắn nhất trước cho đến khi hết tải. Sau đó chọn con đường ngắn thứ 2, 3... cho đến khi hết tải. Việc hết tải được tính toán bằng khối lượng vận chuyển thực tế so với dự tính. Khi hết tải tất cả các con đường, nếu vẫn còn hàng hóa cần chuyển, thì nó có thể gây quá tải. Dầu vậy thuật toán này không phải lúc nào cũng chính xác trong việc tính toán năng lực vận tải. Thiết lập này cho phép bạn tinh chỉnh tỉ lệ mà một con đường sẽ hết tải trước khi chọn con đường kế tiếp. Nhỏ hơn 100% sẽ giúp tránh việc một ga bến quá đông đúc và bù trừ việc tính toán sai lệch này STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Đơn vị tốc độ (đất liền): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Đơn vị tốc độ (hàng hải): {STRING} @@ -2978,9 +2981,9 @@ STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Trồng STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Bình thường STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Trồng cây bằng cách kéo giữ chuột trên khoảnh đất STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Lùm cây -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Trồng các bụi rừng nhỏ bằng cách kéo giữ chuột trên khoảnh đất. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Trồng các bụi rừng nhỏ bằng cách kéo giữ chuột trên khoảnh đất STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Rừng -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Trồng rừng lớn bằng cách kéo giữ chuột trên khoảnh đất. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Trồng rừng lớn bằng cách kéo giữ chuột trên khoảnh đất # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}San Lấp Đất @@ -3077,6 +3080,7 @@ STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Chủ đ STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Thuộc về địa phương: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Không STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Toạ độ: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Chỉ mục của ô: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Xây/tân trang ngày: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Loại ga,bến: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Kiểu ga,bến: {LTBLUE}{STRING} @@ -3196,7 +3200,7 @@ STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Tốc độ khung giả lập game: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Số nhịp đếm giả lập trong mỗi giây STR_FRAMERATE_RATE_BLITTER :{BLACK}Tốc độ khung hình: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Số khu hình vẽ lại mỗi giây. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Số khung hình vẽ lại mỗi giây STR_FRAMERATE_SPEED_FACTOR :{BLACK}Chỉ số vận tốc game hiện tại: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Tốc độ chạy game hiện tại, so với tốc độ bình thường STR_FRAMERATE_CURRENT :{WHITE}Hiện tại @@ -4022,12 +4026,12 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Máy bay chưa STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Nhóm - chọn nhóm để hiển thị các phương tiện thuộc nhóm. Kéo thả nhóm để sắp xếp lại danh sách. +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Nhóm - chọn nhóm để hiển thị các phương tiện thuộc nhóm. Kéo thả nhóm để sắp xếp lại danh sách STR_GROUP_CREATE_TOOLTIP :{BLACK}Ấn vào để tạo nhóm STR_GROUP_DELETE_TOOLTIP :{BLACK}Xoá nhóm đã chọn STR_GROUP_RENAME_TOOLTIP :{BLACK}Đổi tên nhóm STR_GROUP_LIVERY_TOOLTIP :{BLACK}Thay đổi phục trang cho nhóm được chọn -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Không để nhóm này tự thay thế (thiết lập chung) khi hết hạn. Ctrl+Click để áp dụng lên nhóm con. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Không để nhóm này tự thay thế (thiết lập chung) khi hết hạn. Ctrl+Click để áp dụng lên nhóm con STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Xóa Nhóm STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Bạn có chắc chắn muốn xóa nhóm này và tất cả con của nó? @@ -5806,6 +5810,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}tr +STR_CURRENCY_SHORT_GIGA :{NBSP}tỷ +STR_CURRENCY_SHORT_TERA :{NBSP}ktỷ STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} From ab94c8b511b0bcf635cb502f9149ae75031b7c88 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 17 Mar 2024 09:34:28 +0000 Subject: [PATCH 137/695] Codechange: Iterate order lists instead of vehicles to find if any vehicle visits a station. (#12315) This reduces the search time as shared orders are only searched once and non-front vehicles are skipped. --- src/station_cmd.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 9f79a1ef4d..75367ce5b6 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2620,12 +2620,14 @@ CommandCost CmdOpenCloseAirport(DoCommandFlag flags, StationID station_id) */ bool HasStationInUse(StationID station, bool include_company, CompanyID company) { - for (const Vehicle *v : Vehicle::Iterate()) { - if ((v->owner == company) == include_company) { - for (const Order *order : v->Orders()) { - if ((order->IsType(OT_GOTO_STATION) || order->IsType(OT_GOTO_WAYPOINT)) && order->GetDestination() == station) { - return true; - } + for (const OrderList *orderlist : OrderList::Iterate()) { + const Vehicle *v = orderlist->GetFirstSharedVehicle(); + assert(v != nullptr); + if ((v->owner == company) != include_company) continue; + + for (const Order *order = orderlist->GetFirstOrder(); order != nullptr; order = order->next) { + if (order->GetDestination() == station && (order->IsType(OT_GOTO_STATION) || order->IsType(OT_GOTO_WAYPOINT))) { + return true; } } } From f08da1d37398e69104e0a1b5e810b9559553f6c7 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 17 Mar 2024 14:17:35 +0100 Subject: [PATCH 138/695] Codechange: the "no revision detected" string is with four zeros (norev0000) (#12328) --- src/network/core/tcp_game.h | 2 +- src/rev.cpp.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/network/core/tcp_game.h b/src/network/core/tcp_game.h index 7aed964d51..14310f0017 100644 --- a/src/network/core/tcp_game.h +++ b/src/network/core/tcp_game.h @@ -165,7 +165,7 @@ protected: /** * Try to join the server: - * string OpenTTD revision (norev000 if no revision). + * string OpenTTD revision (norev0000 if no revision). * uint32_t NewGRF version (added in 1.2). * string Name of the client (max NETWORK_NAME_LENGTH) (removed in 15). * uint8_t ID of the company to play as (1..MAX_COMPANIES) (removed in 15). diff --git a/src/rev.cpp.in b/src/rev.cpp.in index 1df8b84898..50e2ee0347 100644 --- a/src/rev.cpp.in +++ b/src/rev.cpp.in @@ -28,7 +28,7 @@ bool IsReleasedVersion() * - "", like "..[-RC]", * - "-g" in "master", * - "--g" in other branches, or - * - "norev000", if the version is unknown. + * - "norev0000", if the version is unknown. * * The major, minor and build are the numbers that describe releases of * OpenTTD (like 0.5.3). "-RC" is used to flag release candidates. From 3fc7b3b9a0a4cc34ae45a75a89a799b665a7bb09 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 14 Mar 2024 20:40:32 +0000 Subject: [PATCH 139/695] Codechange: Cache train curve speed limit can be stored in 16 bits. Cache curve speed modifier and max curve speed are both 16 bit values so can be stored in 16 bit types instead of 32 bit types. --- src/train.h | 10 ++++------ src/train_cmd.cpp | 6 +++--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/train.h b/src/train.h index d637d92d37..75fd0e259d 100644 --- a/src/train.h +++ b/src/train.h @@ -75,12 +75,10 @@ struct TrainCache { /* cached values, recalculated on load and each time a vehicle is added to/removed from the consist. */ bool cached_tilt; ///< train can tilt; feature provides a bonus in curves - int cached_curve_speed_mod; ///< curve speed modifier of the entire train - uint8_t user_def_data; ///< Cached property 0x25. Can be set by Callback 0x36. - /* cached max. speed / acceleration data */ - int cached_max_curve_speed; ///< max consist speed limited by curves + int16_t cached_curve_speed_mod; ///< curve speed modifier of the entire train + uint16_t cached_max_curve_speed; ///< max consist speed limited by curves }; /** @@ -132,7 +130,7 @@ struct Train final : public GroundVehicle { void ReserveTrackUnderConsist() const; - int GetCurveSpeedLimit() const; + uint16_t GetCurveSpeedLimit() const; void ConsistChanged(ConsistChangeFlags allowed_changes); @@ -328,7 +326,7 @@ protected: // These functions should not be called outside acceleration code. * Returns the curve speed modifier of this vehicle. * @return Current curve speed modifier, in fixed-point binary representation with 8 fractional bits. */ - inline int GetCurveSpeedModifier() const + inline int16_t GetCurveSpeedModifier() const { return GetVehicleProperty(this, PROP_TRAIN_CURVE_SPEED_MOD, RailVehInfo(this->engine_type)->curve_speed_mod, true); } diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index f969f0203e..4413a2e777 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -120,7 +120,7 @@ void Train::ConsistChanged(ConsistChangeFlags allowed_changes) this->compatible_railtypes = RAILTYPES_NONE; bool train_can_tilt = true; - int min_curve_speed_mod = INT_MAX; + int16_t min_curve_speed_mod = INT16_MAX; for (Train *u = this; u != nullptr; u = u->Next()) { const RailVehicleInfo *rvi_u = RailVehInfo(u->engine_type); @@ -305,7 +305,7 @@ int GetTrainStopLocation(StationID station_id, TileIndex tile, const Train *v, i * Computes train speed limit caused by curves * @return imposed speed limit */ -int Train::GetCurveSpeedLimit() const +uint16_t Train::GetCurveSpeedLimit() const { assert(this->First() == this); @@ -372,7 +372,7 @@ int Train::GetCurveSpeedLimit() const max_speed = Clamp(max_speed, 2, absolute_max_speed); } - return max_speed; + return static_cast(max_speed); } /** From 322ca6ef54c935fb6e17d2ed1162b591e67b0a6a Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 14 Mar 2024 20:40:33 +0000 Subject: [PATCH 140/695] Codechange: Shuffle members of Vehicle to reduce size. This reduces space wasted due to member alignment. --- src/roadveh.h | 5 ++--- src/ship.h | 2 +- src/train.h | 13 ++++++------- src/vehicle_base.h | 14 +++++++------- 4 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/roadveh.h b/src/roadveh.h index 47e333999e..0907d2f3bd 100644 --- a/src/roadveh.h +++ b/src/roadveh.h @@ -113,10 +113,9 @@ struct RoadVehicle final : public GroundVehicle { uint16_t crashed_ctr; ///< Animation counter when the vehicle has crashed. @see RoadVehIsCrashed uint8_t reverse_ctr; - RoadType roadtype; //!< Roadtype of this vehicle. - RoadTypes compatible_roadtypes; //!< Roadtypes this consist is powered on. - + RoadType roadtype; ///< NOSAVE: Roadtype of this vehicle. VehicleID disaster_vehicle = INVALID_VEHICLE; ///< NOSAVE: Disaster vehicle targetting this vehicle. + RoadTypes compatible_roadtypes; ///< NOSAVE: Roadtypes this consist is powered on. /** We don't want GCC to zero our struct! It already is zeroed and has an index! */ RoadVehicle() : GroundVehicleBase() {} diff --git a/src/ship.h b/src/ship.h index 5335deefeb..c47be05436 100644 --- a/src/ship.h +++ b/src/ship.h @@ -22,8 +22,8 @@ typedef std::deque ShipPathCache; * All ships have this type. */ struct Ship final : public SpecializedVehicle { - TrackBits state; ///< The "track" the ship is following. ShipPathCache path; ///< Cached path. + TrackBits state; ///< The "track" the ship is following. Direction rotation; ///< Visible direction. int16_t rotation_x_pos; ///< NOSAVE: X Position before rotation. int16_t rotation_y_pos; ///< NOSAVE: Y Position before rotation. diff --git a/src/train.h b/src/train.h index 75fd0e259d..fd7b5f7656 100644 --- a/src/train.h +++ b/src/train.h @@ -85,21 +85,20 @@ struct TrainCache { * 'Train' is either a loco or a wagon. */ struct Train final : public GroundVehicle { + uint16_t flags; + uint16_t crash_anim_pos; ///< Crash animation counter. + uint16_t wait_counter; ///< Ticks waiting in front of a signal, ticks being stuck or a counter for forced proceeding through signals. + TrainCache tcache; /* Link between the two ends of a multiheaded engine */ Train *other_multiheaded_part; - uint16_t crash_anim_pos; ///< Crash animation counter. + RailTypes compatible_railtypes; + RailType railtype; - uint16_t flags; TrackBits track; TrainForceProceeding force_proceed; - RailType railtype; - RailTypes compatible_railtypes; - - /** Ticks waiting in front of a signal, ticks being stuck or a counter for forced proceeding through signals. */ - uint16_t wait_counter; /** We don't want GCC to zero our struct! It already is zeroed and has an index! */ Train() : GroundVehicleBase() {} diff --git a/src/vehicle_base.h b/src/vehicle_base.h index adf2c0d610..3c4e2ea65f 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -191,8 +191,8 @@ struct VehicleSpriteSeq { struct MutableSpriteCache { Direction last_direction; ///< Last direction we obtained sprites for bool revalidate_before_draw; ///< We need to do a GetImage() and check bounds before drawing this sprite - Rect old_coord; ///< Co-ordinates from the last valid bounding box bool is_viewport_candidate; ///< This vehicle can potentially be drawn on a viewport + Rect old_coord; ///< Co-ordinates from the last valid bounding box VehicleSpriteSeq sprite_seq; ///< Vehicle appearance. }; @@ -327,26 +327,28 @@ public: uint32_t motion_counter; ///< counter to occasionally play a vehicle sound. uint8_t progress; ///< The percentage (if divided by 256) this vehicle already crossed the tile unit. - uint16_t random_bits; ///< Bits used for randomized variational spritegroups. uint8_t waiting_triggers; ///< Triggers to be yet matched before rerandomizing the random bits. + uint16_t random_bits; ///< Bits used for randomized variational spritegroups. StationID last_station_visited; ///< The last station we stopped at. StationID last_loading_station; ///< Last station the vehicle has stopped at and could possibly leave from with any cargo loaded. TimerGameTick::TickCounter last_loading_tick; ///< Last TimerGameTick::counter tick that the vehicle has stopped at a station and could possibly leave with any cargo loaded. + VehicleCargoList cargo; ///< The cargo this vehicle is carrying CargoID cargo_type; ///< type of cargo this vehicle is carrying uint8_t cargo_subtype; ///< Used for livery refits (NewGRF variations) uint16_t cargo_cap; ///< total capacity uint16_t refit_cap; ///< Capacity left over from before last refit. - VehicleCargoList cargo; ///< The cargo this vehicle is carrying uint16_t cargo_age_counter; ///< Ticks till cargo is aged next. int8_t trip_occupancy; ///< NOSAVE: Occupancy of vehicle of the current trip (updated after leaving a station). uint8_t day_counter; ///< Increased by one for each day uint8_t tick_counter; ///< Increased by one for each tick uint8_t running_ticks; ///< Number of ticks this vehicle was not stopped this day + uint16_t load_unload_ticks; ///< Ticks to wait before starting next cycle. uint8_t vehstatus; ///< Status + uint8_t subtype; ///< subtype (Filled with values from #AircraftSubType/#DisasterSubType/#EffectVehicleType/#GroundVehicleSubtypeFlags) Order current_order; ///< The current order (+ status, like: loading) union { @@ -354,13 +356,11 @@ public: Order *old_orders; ///< Only used during conversion of old save games }; - uint16_t load_unload_ticks; ///< Ticks to wait before starting next cycle. - GroupID group_id; ///< Index of group Pool array - uint8_t subtype; ///< subtype (Filled with values from #AircraftSubType/#DisasterSubType/#EffectVehicleType/#GroundVehicleSubtypeFlags) - NewGRFCache grf_cache; ///< Cache of often used calculated NewGRF values VehicleCache vcache; ///< Cache of often used vehicle values. + GroupID group_id; ///< Index of group Pool array + mutable MutableSpriteCache sprite_cache; ///< Cache of sprites and values related to recalculating them, see #MutableSpriteCache /** From 88cf99017a26f887230d2c14d057a97bbf077f7c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 17 Mar 2024 16:23:14 +0000 Subject: [PATCH 141/695] Fix #12302: Allow empty train engines to use an invalid cargo type. (#12325) The cargo type will be forced to the first available type (usually passengers) instead of the engine being disabled. --- src/newgrf.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 9f558a1a5e..20ac05431a 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -9161,6 +9161,14 @@ static void CalculateRefitMasks() ei->cargo_type = (CargoID)FindFirstBit(ei->refit_mask); } } + if (!IsValidCargoID(ei->cargo_type) && e->type == VEH_TRAIN && e->u.rail.railveh_type != RAILVEH_WAGON && e->u.rail.capacity == 0) { + /* For train engines which do not carry cargo it does not matter if their cargo type is invalid. + * Fallback to the first available instead, if the cargo type has not been changed (as indicated by + * cargo_label not being CT_INVALID). */ + if (GetActiveCargoLabel(ei->cargo_label) != CT_INVALID) { + ei->cargo_type = static_cast(FindFirstBit(_standard_cargo_mask)); + } + } if (!IsValidCargoID(ei->cargo_type)) ei->climates = 0; /* Clear refit_mask for not refittable ships */ From fb9d4afa5c5115b39afb06b09ffb8d8ccd11fba0 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Thu, 14 Mar 2024 20:07:31 +0100 Subject: [PATCH 142/695] Codechange: add set of classes providing authentication and encryption --- src/network/CMakeLists.txt | 3 + src/network/network_crypto.cpp | 474 ++++++++++++++++++++++++++ src/network/network_crypto.h | 287 ++++++++++++++++ src/network/network_crypto_internal.h | 341 ++++++++++++++++++ src/tests/CMakeLists.txt | 1 + src/tests/test_network_crypto.cpp | 199 +++++++++++ 6 files changed, 1305 insertions(+) create mode 100644 src/network/network_crypto.cpp create mode 100644 src/network/network_crypto.h create mode 100644 src/network/network_crypto_internal.h create mode 100644 src/tests/test_network_crypto.cpp diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt index 5b97de5cd2..b78142f457 100644 --- a/src/network/CMakeLists.txt +++ b/src/network/CMakeLists.txt @@ -16,6 +16,9 @@ add_files( network_content_gui.h network_coordinator.cpp network_coordinator.h + network_crypto.cpp + network_crypto.h + network_crypto_internal.h network_func.h network_gamelist.cpp network_gamelist.h diff --git a/src/network/network_crypto.cpp b/src/network/network_crypto.cpp new file mode 100644 index 0000000000..7c56a1d988 --- /dev/null +++ b/src/network/network_crypto.cpp @@ -0,0 +1,474 @@ +/* + * 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 network_crypto.cpp Implementation of the network specific cryptography helpers. */ + +#include "../stdafx.h" + +#include "network_crypto_internal.h" +#include "core/packet.h" + +#include "../3rdparty/monocypher/monocypher.h" +#include "../core/random_func.hpp" +#include "../debug.h" +#include "../string_func.h" + +#include "../safeguards.h" + +/** + * Call \c crypto_wipe for all the data in the given span. + * @param span The span to cryptographically wipe. + */ +static void crypto_wipe(std::span span) +{ + crypto_wipe(span.data(), span.size()); +} + +/** Ensure the derived keys do not get leaked when we're done with it. */ +X25519DerivedKeys::~X25519DerivedKeys() +{ + crypto_wipe(keys); +} + +/** + * Get the key to encrypt or decrypt a message sent from the client to the server. + * @return The raw bytes of the key. + */ +std::span X25519DerivedKeys::ClientToServer() const +{ + return std::span(this->keys.data(), X25519_KEY_SIZE); +} + +/** + * Get the key to encrypt or decrypt a message sent from the server to the client. + * @return The raw bytes of the key. + */ +std::span X25519DerivedKeys::ServerToClient() const +{ + return std::span(this->keys.data() + X25519_KEY_SIZE, X25519_KEY_SIZE); +} + +/** + * Perform the actual key exchange. + * @param peer_public_key The public key chosen by the other participant of the key exchange. + * @param side Whether we are the client or server; used to hash the public key of us and the peer in the right order. + * @param our_secret_key The secret key of us. + * @param our_public_key The public key of us. + * @param extra_payload Extra payload to put into the hash function to create the derived keys. + * @return True when the key exchange has succeeded, false when an illegal public key was given. + */ +bool X25519DerivedKeys::Exchange(const X25519PublicKey &peer_public_key, X25519KeyExchangeSide side, + const X25519SecretKey &our_secret_key, const X25519PublicKey &our_public_key, std::string_view extra_payload) +{ + X25519Key shared_secret; + crypto_x25519(shared_secret.data(), our_secret_key.data(), peer_public_key.data()); + if (std::all_of(shared_secret.begin(), shared_secret.end(), [](auto v) { return v == 0; })) { + /* A shared secret of all zeros means that the peer tried to force the shared secret to a known constant. */ + return false; + } + + crypto_blake2b_ctx ctx; + crypto_blake2b_init(&ctx, this->keys.size()); + crypto_blake2b_update(&ctx, shared_secret.data(), shared_secret.size()); + switch (side) { + case X25519KeyExchangeSide::SERVER: + crypto_blake2b_update(&ctx, our_public_key.data(), our_public_key.size()); + crypto_blake2b_update(&ctx, peer_public_key.data(), peer_public_key.size()); + break; + case X25519KeyExchangeSide::CLIENT: + crypto_blake2b_update(&ctx, peer_public_key.data(), peer_public_key.size()); + crypto_blake2b_update(&ctx, our_public_key.data(), our_public_key.size()); + break; + default: + NOT_REACHED(); + } + crypto_blake2b_update(&ctx, reinterpret_cast(extra_payload.data()), extra_payload.size()); + crypto_blake2b_final(&ctx, this->keys.data()); + return true; +} + +/** + * Encryption handler implementation for monocypther encryption after a X25519 key exchange. + */ +class X25519EncryptionHandler : public NetworkEncryptionHandler { +private: + crypto_aead_ctx context; ///< The actual encryption context. + +public: + /** + * Create the encryption handler. + * @param key The key used for the encryption. + * @param nonce The nonce used for the encryption. + */ + X25519EncryptionHandler(const std::span key, const X25519Nonce &nonce) + { + assert(key.size() == X25519_KEY_SIZE); + crypto_aead_init_x(&this->context, key.data(), nonce.data()); + } + + /** Ensure the encryption context is wiped! */ + ~X25519EncryptionHandler() + { + crypto_wipe(&this->context, sizeof(this->context)); + } + + size_t MACSize() const override + { + return X25519_MAC_SIZE; + } + + bool Decrypt(std::span mac, std::span message) override + { + return crypto_aead_read(&this->context, message.data(), mac.data(), nullptr, 0, message.data(), message.size()) == 0; + } + + void Encrypt(std::span mac, std::span message) override + { + crypto_aead_write(&this->context, message.data(), mac.data(), nullptr, 0, message.data(), message.size()); + } +}; + +/** Ensure the key does not get leaked when we're done with it. */ +X25519Key::~X25519Key() +{ + crypto_wipe(*this); +} + +/** + * Create a new secret key that's filled with random bytes. + * @return The randomly filled key. + */ +/* static */ X25519SecretKey X25519SecretKey::CreateRandom() +{ + X25519SecretKey secret_key; + RandomBytesWithFallback(secret_key); + return secret_key; +} + +/** + * Create the public key associated with this secret key. + * @return The public key. + */ +X25519PublicKey X25519SecretKey::CreatePublicKey() const +{ + X25519PublicKey public_key; + crypto_x25519_public_key(public_key.data(), this->data()); + return public_key; +} + +/** + * Create a new nonce that's filled with random bytes. + * @return The randomly filled nonce. + */ +/* static */ X25519Nonce X25519Nonce::CreateRandom() +{ + X25519Nonce nonce; + RandomBytesWithFallback(nonce); + return nonce; +} + +/** Ensure the nonce does not get leaked when we're done with it. */ +X25519Nonce::~X25519Nonce() +{ + crypto_wipe(*this); +} + +/** + * Create the handler, and generate the public keys accordingly. + * @param secret_key The secret key to use for this handler. Defaults to secure random data. + */ +X25519AuthenticationHandler::X25519AuthenticationHandler(const X25519SecretKey &secret_key) : + our_secret_key(secret_key), our_public_key(secret_key.CreatePublicKey()), nonce(X25519Nonce::CreateRandom()) +{ +} + +/* virtual */ void X25519AuthenticationHandler::SendRequest(Packet &p) +{ + p.Send_bytes(this->our_public_key); + p.Send_bytes(this->nonce); +} + +/** + * Read the key exchange data from a \c Packet that came from the server, + * @param p The packet that has been received. + * @return True when the data seems correct. + */ +bool X25519AuthenticationHandler::ReceiveRequest(Packet &p) +{ + if (p.RemainingBytesToTransfer() != X25519_KEY_SIZE + X25519_NONCE_SIZE) { + Debug(net, 1, "[crypto] Received auth response of illegal size; authentication aborted."); + return false; + } + + p.Recv_bytes(this->peer_public_key); + p.Recv_bytes(this->nonce); + return true; +} + +/** + * Perform the key exchange, and when that is correct fill the \c Packet with the appropriate data. + * @param p The packet that has to be sent. + * @param derived_key_extra_payload The extra payload to pass to the key exchange. + * @return Whether the key exchange was successful or not. + */ +bool X25519AuthenticationHandler::SendResponse(Packet &p, std::string_view derived_key_extra_payload) +{ + if (!this->derived_keys.Exchange(this->peer_public_key, X25519KeyExchangeSide::CLIENT, + this->our_secret_key, this->our_public_key, derived_key_extra_payload)) { + Debug(net, 0, "[crypto] Peer sent an illegal public key; authentication aborted."); + return false; + } + + X25519KeyExchangeMessage message; + RandomBytesWithFallback(message); + X25519Mac mac; + + crypto_aead_lock(message.data(), mac.data(), this->derived_keys.ClientToServer().data(), nonce.data(), + this->our_public_key.data(), this->our_public_key.size(), message.data(), message.size()); + + p.Send_bytes(this->our_public_key); + p.Send_bytes(mac); + p.Send_bytes(message); + return true; +} + +/** + * Get the public key the peer provided for the key exchange. + * @return The hexadecimal string representation of the peer's public key. + */ +std::string X25519AuthenticationHandler::GetPeerPublicKey() const +{ + return FormatArrayAsHex(this->peer_public_key); +} + +std::unique_ptr X25519AuthenticationHandler::CreateClientToServerEncryptionHandler() const +{ + return std::make_unique(this->derived_keys.ClientToServer(), this->nonce); +} + +std::unique_ptr X25519AuthenticationHandler::CreateServerToClientEncryptionHandler() const +{ + return std::make_unique(this->derived_keys.ServerToClient(), this->nonce); +} + +/** + * Read the key exchange data from a \c Packet that came from the client, and check whether the client passes the key + * exchange successfully. + * @param p The packet that has been received. + * @param derived_key_extra_payload The extra payload to pass to the key exchange. + * @return Whether the authentication was successful or not. + */ +NetworkAuthenticationServerHandler::ResponseResult X25519AuthenticationHandler::ReceiveResponse(Packet &p, std::string_view derived_key_extra_payload) +{ + if (p.RemainingBytesToTransfer() != X25519_KEY_SIZE + X25519_MAC_SIZE + X25519_KEY_EXCHANGE_MESSAGE_SIZE) { + Debug(net, 1, "[crypto] Received auth response of illegal size; authentication aborted."); + return NetworkAuthenticationServerHandler::NOT_AUTHENTICATED; + } + + X25519KeyExchangeMessage message{}; + X25519Mac mac; + + p.Recv_bytes(this->peer_public_key); + p.Recv_bytes(mac); + p.Recv_bytes(message); + + if (!this->derived_keys.Exchange(this->peer_public_key, X25519KeyExchangeSide::SERVER, + this->our_secret_key, this->our_public_key, derived_key_extra_payload)) { + Debug(net, 0, "[crypto] Peer sent an illegal public key; authentication aborted."); + return NetworkAuthenticationServerHandler::NOT_AUTHENTICATED; + } + + if (crypto_aead_unlock(message.data(), mac.data(), this->derived_keys.ClientToServer().data(), nonce.data(), + this->peer_public_key.data(), this->peer_public_key.size(), message.data(), message.size()) != 0) { + /* + * The ciphertext and the message authentication code do not match with the encryption key. + * This is most likely an invalid password, or possibly a bug in the client. + */ + return NetworkAuthenticationServerHandler::NOT_AUTHENTICATED; + } + + return NetworkAuthenticationServerHandler::AUTHENTICATED; +} + + +/* virtual */ NetworkAuthenticationClientHandler::RequestResult X25519PAKEClientHandler::ReceiveRequest(struct Packet &p) +{ + bool success = this->X25519AuthenticationHandler::ReceiveRequest(p); + if (!success) return NetworkAuthenticationClientHandler::INVALID; + + this->handler->AskUserForPassword(this->handler); + return NetworkAuthenticationClientHandler::AWAIT_USER_INPUT; +} + +/** + * Get the secret key from the given string. If that is not a valid secret key, reset it with a random one. + * Furthermore update the public key so it is always in sync with the private key. + * @param secret_key The secret key to read/validate/fix. + * @param public_key The public key to update. + * @return The valid secret key. + */ +/* static */ X25519SecretKey X25519AuthorizedKeyClientHandler::GetValidSecretKeyAndUpdatePublicKey(std::string &secret_key, std::string &public_key) +{ + X25519SecretKey key{}; + if (!ConvertHexToBytes(secret_key, key)) { + if (secret_key.empty()) { + Debug(net, 3, "[crypto] Creating a new random key"); + } else { + Debug(net, 0, "[crypto] Found invalid secret key, creating a new random key"); + } + key = X25519SecretKey::CreateRandom(); + secret_key = FormatArrayAsHex(key); + } + + public_key = FormatArrayAsHex(key.CreatePublicKey()); + return key; +} + +/* virtual */ NetworkAuthenticationServerHandler::ResponseResult X25519AuthorizedKeyServerHandler::ReceiveResponse(Packet &p) +{ + ResponseResult result = this->X25519AuthenticationHandler::ReceiveResponse(p, {}); + if (result != AUTHENTICATED) return result; + + std::string peer_public_key = this->GetPeerPublicKey(); + return this->authorized_key_handler->IsAllowed(peer_public_key) ? AUTHENTICATED : NOT_AUTHENTICATED; +} + + +/* virtual */ NetworkAuthenticationClientHandler::RequestResult CombinedAuthenticationClientHandler::ReceiveRequest(struct Packet &p) +{ + NetworkAuthenticationMethod method = static_cast(p.Recv_uint8()); + + auto is_of_method = [method](Handler &handler) { return handler->GetAuthenticationMethod() == method; }; + auto it = std::find_if(handlers.begin(), handlers.end(), is_of_method); + if (it == handlers.end()) return INVALID; + + this->current_handler = it->get(); + + Debug(net, 9, "Received {} authentication request", this->GetName()); + return this->current_handler->ReceiveRequest(p); +} + +/* virtual */ bool CombinedAuthenticationClientHandler::SendResponse(struct Packet &p) +{ + Debug(net, 9, "Sending {} authentication response", this->GetName()); + + return this->current_handler->SendResponse(p); +} + +/* virtual */ std::string_view CombinedAuthenticationClientHandler::GetName() const +{ + return this->current_handler != nullptr ? this->current_handler->GetName() : "Unknown"; +} + +/* virtual */ NetworkAuthenticationMethod CombinedAuthenticationClientHandler::GetAuthenticationMethod() const +{ + return this->current_handler != nullptr ? this->current_handler->GetAuthenticationMethod() : NETWORK_AUTH_METHOD_END; +} + + +/** + * Add the given sub-handler to this handler, if the handler can be used (e.g. there are authorized keys or there is a password). + * @param handler The handler to add. + */ +void CombinedAuthenticationServerHandler::Add(CombinedAuthenticationServerHandler::Handler &&handler) +{ + /* Is the handler configured correctly, e.g. does it have a password? */ + if (!handler->CanBeUsed()) return; + + this->handlers.push_back(std::move(handler)); +} + +/* virtual */ void CombinedAuthenticationServerHandler::SendRequest(struct Packet &p) +{ + Debug(net, 9, "Sending {} authentication request", this->GetName()); + + p.Send_uint8(this->handlers.back()->GetAuthenticationMethod()); + this->handlers.back()->SendRequest(p); +} + +/* virtual */ NetworkAuthenticationServerHandler::ResponseResult CombinedAuthenticationServerHandler::ReceiveResponse(struct Packet &p) +{ + Debug(net, 9, "Receiving {} authentication response", this->GetName()); + + ResponseResult result = this->handlers.back()->ReceiveResponse(p); + if (result != NOT_AUTHENTICATED) return result; + + this->handlers.pop_back(); + return this->CanBeUsed() ? RETRY_NEXT_METHOD : NOT_AUTHENTICATED; +} + +/* virtual */ std::string_view CombinedAuthenticationServerHandler::GetName() const +{ + return this->CanBeUsed() ? this->handlers.back()->GetName() : "Unknown"; +} + +/* virtual */ NetworkAuthenticationMethod CombinedAuthenticationServerHandler::GetAuthenticationMethod() const +{ + return this->CanBeUsed() ? this->handlers.back()->GetAuthenticationMethod() : NETWORK_AUTH_METHOD_END; +} + +/* virtual */ bool CombinedAuthenticationServerHandler::CanBeUsed() const +{ + return !this->handlers.empty(); +} + + +/* virtual */ void NetworkAuthenticationPasswordRequestHandler::Reply(const std::string &password) +{ + this->password = password; + this->SendResponse(); +} + +/* virtual */ bool NetworkAuthenticationDefaultAuthorizedKeyHandler::IsAllowed(std::string_view peer_public_key) const +{ + for (const auto &allowed : *this->authorized_keys) { + if (StrEqualsIgnoreCase(allowed, peer_public_key)) return true; + } + return false; +} + + +/** + * Create a NetworkAuthenticationClientHandler. + * @param password_handler The handler for when a request for password needs to be passed on to the user. + * @param secret_key The location where the secret key is stored; can be overwritten when invalid. + * @param public_key The location where the public key is stored; can be overwritten when invalid. + */ +/* static */ std::unique_ptr NetworkAuthenticationClientHandler::Create(std::shared_ptr password_handler, std::string &secret_key, std::string &public_key) +{ + auto secret = X25519AuthorizedKeyClientHandler::GetValidSecretKeyAndUpdatePublicKey(secret_key, public_key); + auto handler = std::make_unique(); + handler->Add(std::make_unique(secret)); + handler->Add(std::make_unique(secret, std::move(password_handler))); + handler->Add(std::make_unique(secret)); + return handler; +} + +/** + * Create a NetworkAuthenticationServerHandler. + * @param password_provider Callback to provide the password handling. Must remain valid until the authentication has succeeded or failed. Can be \c nullptr to skip password checks. + * @param authorized_key_handler Callback to provide the authorized key handling. Must remain valid until the authentication has succeeded or failed. Can be \c nullptr to skip authorized key checks. + * @param client_supported_method_mask Bitmask of the methods that are supported by the client. Defaults to support of all methods. + */ +std::unique_ptr NetworkAuthenticationServerHandler::Create(const NetworkAuthenticationPasswordProvider *password_provider, const NetworkAuthenticationAuthorizedKeyHandler *authorized_key_handler, NetworkAuthenticationMethodMask client_supported_method_mask) +{ + auto secret = X25519SecretKey::CreateRandom(); + auto handler = std::make_unique(); + if (password_provider != nullptr && HasBit(client_supported_method_mask, NETWORK_AUTH_METHOD_X25519_PAKE)) { + handler->Add(std::make_unique(secret, password_provider)); + } + + if (authorized_key_handler != nullptr && HasBit(client_supported_method_mask, NETWORK_AUTH_METHOD_X25519_AUTHORIZED_KEY)) { + handler->Add(std::make_unique(secret, authorized_key_handler)); + } + + if (!handler->CanBeUsed() && HasBit(client_supported_method_mask, NETWORK_AUTH_METHOD_X25519_KEY_EXCHANGE_ONLY)) { + /* Fall back to the plain handler when neither password, nor authorized keys are configured. */ + handler->Add(std::make_unique(secret)); + } + return handler; +} diff --git a/src/network/network_crypto.h b/src/network/network_crypto.h new file mode 100644 index 0000000000..60e2b6b71b --- /dev/null +++ b/src/network/network_crypto.h @@ -0,0 +1,287 @@ +/* + * 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 network_crypto.h Crypto specific bits of the network handling. + * + * This provides a set of functionality to perform authentication combined with a key exchange, + * to create a shared secret as well as encryption using those shared secrets. + * + * For the authentication/key exchange, the server determines the available methods and creates + * the appropriate \c NetworkAuthenticationServerHandler. This will be used to create a request + * for the client, which instantiates a \c NetworkAuthenticationClientHandler to handle that + * request. + * At the moment there are three types of request: key exchange only, password-authenticated key + * exchange (PAKE) and authorized keys. When the request is for a password, the user is asked + * for the password via an essentially asynchronous callback from the client handler. For the + * other requests no input from the user is needed, and these are immediately ready to generate + * the response for the server. + * + * The server will validate the response resulting in either the user being authenticated or not. + * When the user failed authentication, there might be a possibility to retry. For example when + * the server has configured authorized keys and passwords; when the client fails with the + * authorized keys, it will retry with the password. + * + * Once the key exchange/authentication has been done, the server can signal the client to + * upgrade the network connection to use encryption using the shared secret of the key exchange. + */ + +#ifndef NETWORK_CRYPTO_H +#define NETWORK_CRYPTO_H + +/** + * Base class for handling the encryption (or decryption) of a network connection. + */ +class NetworkEncryptionHandler { +public: + virtual ~NetworkEncryptionHandler() {} + + /** + * Get the size of the MAC (Message Authentication Code) used by the underlying encryption protocol. + * @return The size, in bytes, of the MACs. + */ + virtual size_t MACSize() const = 0; + + /** + * Decrypt the given message in-place, validating against the given MAC. + * @param mac The message authentication code (MAC). + * @param message The location of the message to decrypt. + * @return Whether decryption and authentication/validation of the message succeeded. + */ + virtual bool Decrypt(std::span mac, std::span message) = 0; + + /** + * Encrypt the given message in-place, and write the associated MAC. + * @param mac The location to write the message authentication code (MAC) to. + * @param message The location of the message to encrypt. + */ + virtual void Encrypt(std::span mac, std::span message) = 0; +}; + + +/** + * Callback interface for requests for passwords in the context of network authentication. + */ +class NetworkAuthenticationPasswordRequest { +public: + virtual ~NetworkAuthenticationPasswordRequest() {} + + /** + * Reply to the request with the given password. + */ + virtual void Reply(const std::string &password) = 0; +}; + +/** + * Callback interface for client implementations to provide the handling of the password requests. + */ +class NetworkAuthenticationPasswordRequestHandler : public NetworkAuthenticationPasswordRequest { +protected: + friend class X25519PAKEClientHandler; + + std::string password; ///< The entered password. +public: + + virtual void Reply(const std::string &password) override; + + /** + * Callback to trigger sending the response for the password request. + */ + virtual void SendResponse() = 0; + + /** + * Callback to trigger asking the user for the password. + * @param request The request to the user, to which it can reply with the password. + */ + virtual void AskUserForPassword(std::shared_ptr request) = 0; +}; + + +/** + * Callback interface for server implementations to provide the current password. + */ +class NetworkAuthenticationPasswordProvider { +public: + virtual ~NetworkAuthenticationPasswordProvider() {} + + /** + * Callback to return the password where to validate against. + * @return \c std::string_view of the current password; an empty view means no password check will be performed. + */ + virtual std::string_view GetPassword() const = 0; +}; + +/** + * Default implementation of the password provider. + */ +class NetworkAuthenticationDefaultPasswordProvider : public NetworkAuthenticationPasswordProvider { +private: + const std::string *password; ///< The password to check against. +public: + /** + * Create the provider with the pointer to the password that is to be used. A pointer, so this can handle + * situations where the password gets changed over time. + * @param password The reference to the configured password. + */ + NetworkAuthenticationDefaultPasswordProvider(const std::string &password) : password(&password) {} + + std::string_view GetPassword() const override { return *this->password; }; +}; + +/** + * Callback interface for server implementations to provide the authorized key validation. + */ +class NetworkAuthenticationAuthorizedKeyHandler { +public: + virtual ~NetworkAuthenticationAuthorizedKeyHandler() {} + + /** + * Check whether the key handler can be used, i.e. whether there are authorized keys to check against. + * @return \c true when it can be used, otherwise \c false. + */ + virtual bool CanBeUsed() const = 0; + + /** + * Check whether the given public key of the peer is allowed in. + * @param peer_public_key The public key of the peer to check against. + * @return \c true when the key is allowed, otherwise \c false. + */ + virtual bool IsAllowed(std::string_view peer_public_key) const = 0; +}; + +/** + * Default implementation for the authorized key handler. + */ +class NetworkAuthenticationDefaultAuthorizedKeyHandler : public NetworkAuthenticationAuthorizedKeyHandler { +private: + const std::vector *authorized_keys; ///< The authorized keys to check against. +public: + /** + * Create the handler that uses the given authorized keys to check against. + * @param authorized_keys The reference to the authorized keys to check against. + */ + NetworkAuthenticationDefaultAuthorizedKeyHandler(const std::vector &authorized_keys) : authorized_keys(&authorized_keys) {} + + bool CanBeUsed() const override { return !this->authorized_keys->empty(); } + bool IsAllowed(std::string_view peer_public_key) const override; +}; + + +/** The authentication method that can be used. */ +enum NetworkAuthenticationMethod : uint8_t { + NETWORK_AUTH_METHOD_X25519_KEY_EXCHANGE_ONLY, ///< No actual authentication is taking place, just perform a x25519 key exchange. + NETWORK_AUTH_METHOD_X25519_PAKE, ///< Authentication using x25519 password-authenticated key agreement. + NETWORK_AUTH_METHOD_X25519_AUTHORIZED_KEY, ///< Authentication using x22519 key exchange and authorized keys. + NETWORK_AUTH_METHOD_END, ///< Must ALWAYS be on the end of this list!! (period) +}; + +/** The mask of authentication methods that can be used. */ +using NetworkAuthenticationMethodMask = uint16_t; + +/** + * Base class for cryptographic authentication handlers. + */ +class NetworkAuthenticationHandler { +public: + virtual ~NetworkAuthenticationHandler() {} + + /** + * Get the name of the handler for debug messages. + * @return The name of the handler. + */ + virtual std::string_view GetName() const = 0; + + /** + * Get the method this handler is providing functionality for. + * @return The \c NetworkAuthenticationMethod. + */ + virtual NetworkAuthenticationMethod GetAuthenticationMethod() const = 0; + + /** + * Create a \a NetworkEncryptionHandler to encrypt or decrypt messages from the client to the server. + * @return The handler for the client to server encryption. + */ + virtual std::unique_ptr CreateClientToServerEncryptionHandler() const = 0; + + /** + * Create a \a NetworkEncryptionHandler to encrypt or decrypt messages from the server to the client. + * @return The handler for the server to client encryption. + */ + virtual std::unique_ptr CreateServerToClientEncryptionHandler() const = 0; +}; + +/** + * Base class for client side cryptographic authentication handlers. + */ +class NetworkAuthenticationClientHandler : public NetworkAuthenticationHandler { +public: + /** The processing result of receiving a request. */ + enum RequestResult { + AWAIT_USER_INPUT, ///< We have requested some user input, but must wait on that. + READY_FOR_RESPONSE, ///< We do not have to wait for user input, and can immediately respond to the server. + INVALID, ///< We have received an invalid request. + }; + + /** + * Read a request from the server. + * @param p The packet to read the request from. + * @return True when valid, otherwise false. + */ + virtual RequestResult ReceiveRequest(struct Packet &p) = 0; + + /** + * Create the response to send to the server. + * @param p The packet to write the response from. + * @return True when a valid packet was made, otherwise false. + */ + virtual bool SendResponse(struct Packet &p) = 0; + + static std::unique_ptr Create(std::shared_ptr password_handler, std::string &secret_key, std::string &public_key); +}; + +/** + * Base class for server side cryptographic authentication handlers. + */ +class NetworkAuthenticationServerHandler : public NetworkAuthenticationHandler { +public: + /** The processing result of receiving a response. */ + enum ResponseResult { + AUTHENTICATED, ///< The client was authenticated successfully. + NOT_AUTHENTICATED, ///< All authentications for this handler have been exhausted. + RETRY_NEXT_METHOD, ///< The client failed to authenticate, but there is another method to try. + }; + + /** + * Create the request to send to the client. + * @param p The packet to write the request to. + */ + virtual void SendRequest(struct Packet &p) = 0; + + /** + * Read the response from the client. + * @param p The packet to read the response from. + * @return The \c ResponseResult describing the result. + */ + virtual ResponseResult ReceiveResponse(struct Packet &p) = 0; + + /** + * Checks whether this handler can be used with the current configuration. + * For example when there is no password, the handler cannot be used. + * @return True when this handler can be used. + */ + virtual bool CanBeUsed() const = 0; + + /** + * Get the public key the peer provided during the authentication. + * @return The hexadecimal string representation of the peer's public key. + */ + virtual std::string GetPeerPublicKey() const = 0; + + static std::unique_ptr Create(const NetworkAuthenticationPasswordProvider *password_provider, const NetworkAuthenticationAuthorizedKeyHandler *authorized_key_handler, NetworkAuthenticationMethodMask client_supported_method_mask = ~static_cast(0)); +}; + +#endif /* NETWORK_CRYPTO_H */ diff --git a/src/network/network_crypto_internal.h b/src/network/network_crypto_internal.h new file mode 100644 index 0000000000..a073e0931b --- /dev/null +++ b/src/network/network_crypto_internal.h @@ -0,0 +1,341 @@ +/* + * 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 network_crypto_internal.h Internal bits to the crypto of the network handling. */ + +#ifndef NETWORK_CRYPTO_INTERNAL_H +#define NETWORK_CRYPTO_INTERNAL_H + +#include "network_crypto.h" + +/** The number of bytes the public and secret keys are in X25519. */ +constexpr size_t X25519_KEY_SIZE = 32; +/** The number of bytes the nonces are in X25519. */ +constexpr size_t X25519_NONCE_SIZE = 24; +/** The number of bytes the message authentication codes are in X25519. */ +constexpr size_t X25519_MAC_SIZE = 16; +/** The number of bytes the (random) payload of the authentication message has. */ +constexpr size_t X25519_KEY_EXCHANGE_MESSAGE_SIZE = 8; + +/** Container for a X25519 key that is automatically crypto-wiped when destructed. */ +struct X25519Key : std::array { + ~X25519Key(); +}; + +/** Container for a X25519 public key. */ +struct X25519PublicKey : X25519Key { +}; + +/** Container for a X25519 secret key. */ +struct X25519SecretKey : X25519Key { + static X25519SecretKey CreateRandom(); + X25519PublicKey CreatePublicKey() const; +}; + +/** Container for a X25519 nonce that is automatically crypto-wiped when destructed. */ +struct X25519Nonce : std::array { + static X25519Nonce CreateRandom(); + ~X25519Nonce(); +}; + +/** Container for a X25519 message authentication code. */ +using X25519Mac = std::array; + +/** Container for a X25519 key exchange message. */ +using X25519KeyExchangeMessage = std::array; + +/** The side of the key exchange. */ +enum class X25519KeyExchangeSide { + CLIENT, ///< We are the client. + SERVER, ///< We are the server. +}; + +/** + * Container for the keys that derived from the X25519 key exchange mechanism. This mechanism derives + * a key to encrypt both the client-to-server and a key to encrypt server-to-client communication. + */ +class X25519DerivedKeys { +private: + /** Single contiguous buffer to store the derived keys in, as they are generated as a single hash. */ + std::array keys; +public: + ~X25519DerivedKeys(); + std::span ClientToServer() const; + std::span ServerToClient() const; + bool Exchange(const X25519PublicKey &peer_public_key, X25519KeyExchangeSide side, + const X25519SecretKey &our_secret_key, const X25519PublicKey &our_public_key, std::string_view extra_payload); +}; + +/** + * Base for handlers using a X25519 key exchange to perform authentication. + * + * In general this works as follows: + * 1) the client and server have or generate a secret and public X25519 key. + * 2) the X25519 key exchange is performed at both the client and server, with their own secret key and their peer's public key. + * 3) a pair of derived keys is created by BLAKE2b-hashing the following into 64 bytes, in this particular order: + * - the shared secret from the key exchange; + * - the public key of the server; + * - the public key of the client; + * - optional extra payload, e.g. a password in the case of PAKE. + * The first of the pair of derived keys is usually used to encrypt client-to-server communication, and the second of the pair + * is usually used to encrypt server-to-client communication. + * 4) a XChaCha20-Poly1305 (authenticated) encryption is performed using: + * - the first of the pair of derived keys as encryption key; + * - a 24 byte nonce; + * - the public key of the client as additional authenticated data. + * - a 8 byte random number as content/message. + * + * The server initiates the request by sending its public key and a 24 byte nonce that is randomly generated. Normally the side + * that sends the encrypted data sends the nonce in their packet, which would be the client on our case. However, there are + * many implementations of clients due to the admin-protocol where this is used, and we cannot guarantee that they generate a + * good enough nonce. As such the server sends one instead. The server will create a new set of keys for each session. + * + * The client receives the request, performs the key exchange, generates the derived keys and then encrypts the message. This + * message must contain some content, so it has to be filled with 8 random bytes. Once the message has been encrypted, the + * client sends their public key, the encrypted message and the message authentication code (MAC) to the server in a response. + * + * The server receives the response, performs the key exchange, generates the derived keys, decrypts the message and validates the + * message authentication code, and finally the message. It is up to the sub class to perform the final authentication checks. + */ +class X25519AuthenticationHandler { +private: + X25519SecretKey our_secret_key; ///< The secret key used by us. + X25519PublicKey our_public_key; ///< The public key used by us. + X25519Nonce nonce; ///< The nonce to prevent replay attacks. + X25519DerivedKeys derived_keys; ///< Keys derived from the authentication process. + X25519PublicKey peer_public_key; ///< The public key used by our peer. + +protected: + X25519AuthenticationHandler(const X25519SecretKey &secret_key); + + void SendRequest(struct Packet &p); + bool ReceiveRequest(struct Packet &p); + bool SendResponse(struct Packet &p, std::string_view derived_key_extra_payload); + NetworkAuthenticationServerHandler::ResponseResult ReceiveResponse(struct Packet &p, std::string_view derived_key_extra_payload); + + std::string GetPeerPublicKey() const; + + std::unique_ptr CreateClientToServerEncryptionHandler() const; + std::unique_ptr CreateServerToClientEncryptionHandler() const; +}; + +/** + * Client side handler for using X25519 without actual authentication. + * + * This follows the method described in \c X25519AuthenticationHandler, without an extra payload. + */ +class X25519KeyExchangeOnlyClientHandler : protected X25519AuthenticationHandler, public NetworkAuthenticationClientHandler { +public: + /** + * Create the handler that that one does the key exchange. + * @param secret_key The secret key to initialize this handler with. + */ + X25519KeyExchangeOnlyClientHandler(const X25519SecretKey &secret_key) : X25519AuthenticationHandler(secret_key) {} + + virtual RequestResult ReceiveRequest(struct Packet &p) override { return this->X25519AuthenticationHandler::ReceiveRequest(p) ? READY_FOR_RESPONSE : INVALID; } + virtual bool SendResponse(struct Packet &p) override { return this->X25519AuthenticationHandler::SendResponse(p, {}); } + + virtual std::string_view GetName() const override { return "X25519-KeyExchangeOnly-client"; } + virtual NetworkAuthenticationMethod GetAuthenticationMethod() const override { return NETWORK_AUTH_METHOD_X25519_KEY_EXCHANGE_ONLY; } + + virtual std::unique_ptr CreateClientToServerEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateClientToServerEncryptionHandler(); } + virtual std::unique_ptr CreateServerToClientEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateServerToClientEncryptionHandler(); } +}; + +/** + * Server side handler for using X25519 without actual authentication. + * + * This follows the method described in \c X25519AuthenticationHandler, without an extra payload. + */ +class X25519KeyExchangeOnlyServerHandler : protected X25519AuthenticationHandler, public NetworkAuthenticationServerHandler { +public: + /** + * Create the handler that that one does the key exchange. + * @param secret_key The secret key to initialize this handler with. + */ + X25519KeyExchangeOnlyServerHandler(const X25519SecretKey &secret_key) : X25519AuthenticationHandler(secret_key) {} + + virtual void SendRequest(struct Packet &p) override { this->X25519AuthenticationHandler::SendRequest(p); } + virtual ResponseResult ReceiveResponse(struct Packet &p) override { return this->X25519AuthenticationHandler::ReceiveResponse(p, {}); } + + virtual std::string_view GetName() const override { return "X25519-KeyExchangeOnly-server"; } + virtual NetworkAuthenticationMethod GetAuthenticationMethod() const override { return NETWORK_AUTH_METHOD_X25519_KEY_EXCHANGE_ONLY; } + virtual bool CanBeUsed() const override { return true; } + + virtual std::string GetPeerPublicKey() const override { return this->X25519AuthenticationHandler::GetPeerPublicKey(); } + virtual std::unique_ptr CreateClientToServerEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateClientToServerEncryptionHandler(); } + virtual std::unique_ptr CreateServerToClientEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateServerToClientEncryptionHandler(); } +}; + +/** + * Client side handler for using X25519 with a password-authenticated key exchange. + * + * This follows the method described in \c X25519AuthenticationHandler, were the password is the extra payload. + */ +class X25519PAKEClientHandler : protected X25519AuthenticationHandler, public NetworkAuthenticationClientHandler { +private: + std::shared_ptr handler; + +public: + /** + * Create the handler with the given password handler. + * @param secret_key The secret key to initialize this handler with. + * @param handler The handler requesting the password from the user, if required. + */ + X25519PAKEClientHandler(const X25519SecretKey &secret_key, std::shared_ptr handler) : X25519AuthenticationHandler(secret_key), handler(handler) {} + + virtual RequestResult ReceiveRequest(struct Packet &p) override; + virtual bool SendResponse(struct Packet &p) override { return this->X25519AuthenticationHandler::SendResponse(p, this->handler->password); } + + virtual std::string_view GetName() const override { return "X25519-PAKE-client"; } + virtual NetworkAuthenticationMethod GetAuthenticationMethod() const override { return NETWORK_AUTH_METHOD_X25519_PAKE; } + + virtual std::unique_ptr CreateClientToServerEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateClientToServerEncryptionHandler(); } + virtual std::unique_ptr CreateServerToClientEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateServerToClientEncryptionHandler(); } +}; + +/** + * Server side handler for using X25519 with a password-authenticated key exchange. + * + * This follows the method described in \c X25519AuthenticationHandler, were the password is the extra payload. + */ +class X25519PAKEServerHandler : protected X25519AuthenticationHandler, public NetworkAuthenticationServerHandler { +private: + const NetworkAuthenticationPasswordProvider *password_provider; ///< The password to check against. +public: + /** + * Create the handler with the given password provider. + * @param secret_key The secret key to initialize this handler with. + * @param password_provider The provider for the passwords. + */ + X25519PAKEServerHandler(const X25519SecretKey &secret_key, const NetworkAuthenticationPasswordProvider *password_provider) : X25519AuthenticationHandler(secret_key), password_provider(password_provider) {} + + virtual void SendRequest(struct Packet &p) override { this->X25519AuthenticationHandler::SendRequest(p); } + virtual ResponseResult ReceiveResponse(struct Packet &p) override { return this->X25519AuthenticationHandler::ReceiveResponse(p, this->password_provider->GetPassword()); } + + virtual std::string_view GetName() const override { return "X25519-PAKE-server"; } + virtual NetworkAuthenticationMethod GetAuthenticationMethod() const override { return NETWORK_AUTH_METHOD_X25519_PAKE; } + virtual bool CanBeUsed() const override { return !this->password_provider->GetPassword().empty(); } + + virtual std::string GetPeerPublicKey() const override { return this->X25519AuthenticationHandler::GetPeerPublicKey(); } + virtual std::unique_ptr CreateClientToServerEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateClientToServerEncryptionHandler(); } + virtual std::unique_ptr CreateServerToClientEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateServerToClientEncryptionHandler(); } +}; + + +/** + * Handler for clients using a X25519 key exchange to perform authentication via a set of authorized (public) keys of clients. + * + * This follows the method described in \c X25519AuthenticationHandler. Once all these checks have succeeded, it will + * check whether the public key of the client is in the list of authorized keys to login. + */ +class X25519AuthorizedKeyClientHandler : protected X25519AuthenticationHandler, public NetworkAuthenticationClientHandler { +public: + /** + * Create the handler that uses the given password to check against. + * @param secret_key The secret key to initialize this handler with. + */ + X25519AuthorizedKeyClientHandler(const X25519SecretKey &secret_key) : X25519AuthenticationHandler(secret_key) {} + + virtual RequestResult ReceiveRequest(struct Packet &p) override { return this->X25519AuthenticationHandler::ReceiveRequest(p) ? READY_FOR_RESPONSE : INVALID; } + virtual bool SendResponse(struct Packet &p) override { return this->X25519AuthenticationHandler::SendResponse(p, {}); } + + virtual std::string_view GetName() const override { return "X25519-AuthorizedKey-client"; } + virtual NetworkAuthenticationMethod GetAuthenticationMethod() const override { return NETWORK_AUTH_METHOD_X25519_AUTHORIZED_KEY; } + + virtual std::unique_ptr CreateClientToServerEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateClientToServerEncryptionHandler(); } + virtual std::unique_ptr CreateServerToClientEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateServerToClientEncryptionHandler(); } + + static X25519SecretKey GetValidSecretKeyAndUpdatePublicKey(std::string &secret_key, std::string &public_key); +}; + +/** + * Handler for servers using a X25519 key exchange to perform authentication via a set of authorized (public) keys of clients. + * + * This follows the method described in \c X25519AuthenticationHandler. Once all these checks have succeeded, it will + * check whether the public key of the client is in the list of authorized keys to login. + */ +class X25519AuthorizedKeyServerHandler : protected X25519AuthenticationHandler, public NetworkAuthenticationServerHandler { +private: + const NetworkAuthenticationAuthorizedKeyHandler *authorized_key_handler; ///< The handler of the authorized keys. +public: + /** + * Create the handler that uses the given authorized keys to check against. + * @param secret_key The secret key to initialize this handler with. + * @param authorized_key_handler The handler of the authorized keys. + */ + X25519AuthorizedKeyServerHandler(const X25519SecretKey &secret_key, const NetworkAuthenticationAuthorizedKeyHandler *authorized_key_handler) : X25519AuthenticationHandler(secret_key), authorized_key_handler(authorized_key_handler) {} + + virtual void SendRequest(struct Packet &p) override { this->X25519AuthenticationHandler::SendRequest(p); } + virtual ResponseResult ReceiveResponse(struct Packet &p) override; + + virtual std::string_view GetName() const override { return "X25519-AuthorizedKey-server"; } + virtual NetworkAuthenticationMethod GetAuthenticationMethod() const override { return NETWORK_AUTH_METHOD_X25519_AUTHORIZED_KEY; } + virtual bool CanBeUsed() const override { return this->authorized_key_handler->CanBeUsed(); } + + virtual std::string GetPeerPublicKey() const override { return this->X25519AuthenticationHandler::GetPeerPublicKey(); } + virtual std::unique_ptr CreateClientToServerEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateClientToServerEncryptionHandler(); } + virtual std::unique_ptr CreateServerToClientEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateServerToClientEncryptionHandler(); } +}; + + +/** + * Handler for combining a number of authentication handlers, where the failure of one of the handlers will retry with + * another handler. For example when authorized keys fail, it can still fall back to a password. + */ +class CombinedAuthenticationClientHandler : public NetworkAuthenticationClientHandler { +public: + using Handler = std::unique_ptr; ///< The type of the inner handlers. + +private: + std::vector handlers; ///< The handlers that we can authenticate with. + NetworkAuthenticationClientHandler *current_handler = nullptr; ///< The currently active handler. + +public: + /** + * Add the given sub-handler to this handler. + * @param handler The handler to add. + */ + void Add(Handler &&handler) { this->handlers.push_back(std::move(handler)); } + + virtual RequestResult ReceiveRequest(struct Packet &p) override; + virtual bool SendResponse(struct Packet &p) override; + + virtual std::string_view GetName() const override; + virtual NetworkAuthenticationMethod GetAuthenticationMethod() const override; + + virtual std::unique_ptr CreateClientToServerEncryptionHandler() const override { return this->current_handler->CreateClientToServerEncryptionHandler(); } + virtual std::unique_ptr CreateServerToClientEncryptionHandler() const override { return this->current_handler->CreateServerToClientEncryptionHandler(); } +}; + +/** + * Handler for combining a number of authentication handlers, where the failure of one of the handlers will retry with + * another handler. For example when authorized keys fail, it can still fall back to a password. + */ +class CombinedAuthenticationServerHandler : public NetworkAuthenticationServerHandler { +public: + using Handler = std::unique_ptr; ///< The type of the inner handlers. + +private: + std::vector handlers; ///< The handlers that we can (still) authenticate with. + +public: + void Add(Handler &&handler); + + virtual void SendRequest(struct Packet &p) override; + virtual ResponseResult ReceiveResponse(struct Packet &p) override; + + virtual std::string_view GetName() const override; + virtual NetworkAuthenticationMethod GetAuthenticationMethod() const override; + virtual bool CanBeUsed() const override; + + virtual std::string GetPeerPublicKey() const override { return this->handlers.back()->GetPeerPublicKey(); } + virtual std::unique_ptr CreateClientToServerEncryptionHandler() const override { return this->handlers.back()->CreateClientToServerEncryptionHandler(); } + virtual std::unique_ptr CreateServerToClientEncryptionHandler() const override { return this->handlers.back()->CreateServerToClientEncryptionHandler(); } +}; + +#endif /* NETWORK_CRYPTO_INTERNAL_H */ diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index 53884be7d7..475174379d 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -9,6 +9,7 @@ add_test_files( string_func.cpp strings_func.cpp test_main.cpp + test_network_crypto.cpp test_script_admin.cpp test_window_desc.cpp ) diff --git a/src/tests/test_network_crypto.cpp b/src/tests/test_network_crypto.cpp new file mode 100644 index 0000000000..0438a6ca65 --- /dev/null +++ b/src/tests/test_network_crypto.cpp @@ -0,0 +1,199 @@ +/* + * 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 test_network_crypto.cpp Tests for network related crypto functions. */ + +#include "../stdafx.h" + +#include "../3rdparty/catch2/catch.hpp" + +#include "../core/format.hpp" +#include "../network/network_crypto_internal.h" +#include "../network/core/packet.h" +#include "../string_func.h" + +class MockNetworkSocketHandler : public NetworkSocketHandler { +}; + +static MockNetworkSocketHandler mock_socket_handler; + +static Packet CreatePacketForReading(Packet &source) +{ + source.PrepareToSend(); + + Packet dest(&mock_socket_handler, COMPAT_MTU, source.Size()); + + auto transfer_in = [](Packet &source, char *dest_data, size_t length) { + auto transfer_out = [](char *dest_data, const char *source_data, size_t length) { + std::copy(source_data, source_data + length, dest_data); + return length; + }; + return source.TransferOutWithLimit(transfer_out, length, dest_data); + }; + dest.TransferIn(transfer_in, source); + + dest.PrepareToRead(); + dest.Recv_uint8(); // Ignore the type + return dest; +} + +class TestPasswordRequestHandler : public NetworkAuthenticationPasswordRequestHandler { +private: + std::string password; +public: + TestPasswordRequestHandler(std::string &password) : password(password) {} + void SendResponse() override {} + void AskUserForPassword(std::shared_ptr request) override { request->Reply(this->password); } +}; + +static void TestAuthentication(NetworkAuthenticationServerHandler &server, NetworkAuthenticationClientHandler &client, + NetworkAuthenticationServerHandler::ResponseResult expected_response_result, + NetworkAuthenticationClientHandler::RequestResult expected_request_result) +{ + Packet request(&mock_socket_handler, PacketType{}); + server.SendRequest(request); + + request = CreatePacketForReading(request); + CHECK(client.ReceiveRequest(request) == expected_request_result); + + Packet response(&mock_socket_handler, PacketType{}); + client.SendResponse(response); + + response = CreatePacketForReading(response); + CHECK(server.ReceiveResponse(response) == expected_response_result); +} + + +TEST_CASE("Authentication_KeyExchangeOnly") +{ + X25519KeyExchangeOnlyServerHandler server(X25519SecretKey::CreateRandom()); + X25519KeyExchangeOnlyClientHandler client(X25519SecretKey::CreateRandom()); + + TestAuthentication(server, client, NetworkAuthenticationServerHandler::AUTHENTICATED, NetworkAuthenticationClientHandler::READY_FOR_RESPONSE); +} + + +static void TestAuthenticationPAKE(std::string server_password, std::string client_password, + NetworkAuthenticationServerHandler::ResponseResult expected_response_result) +{ + NetworkAuthenticationDefaultPasswordProvider server_password_provider(server_password); + X25519PAKEServerHandler server(X25519SecretKey::CreateRandom(), &server_password_provider); + X25519PAKEClientHandler client(X25519SecretKey::CreateRandom(), std::make_shared(client_password)); + + TestAuthentication(server, client, expected_response_result, NetworkAuthenticationClientHandler::AWAIT_USER_INPUT); +} + +TEST_CASE("Authentication_PAKE") +{ + SECTION("Correct password") { + TestAuthenticationPAKE("sikrit", "sikrit", NetworkAuthenticationServerHandler::AUTHENTICATED); + } + + SECTION("Empty password") { + TestAuthenticationPAKE("", "", NetworkAuthenticationServerHandler::AUTHENTICATED); + } + + SECTION("Wrong password") { + TestAuthenticationPAKE("sikrit", "secret", NetworkAuthenticationServerHandler::NOT_AUTHENTICATED); + } +} + + +static void TestAuthenticationAuthorizedKey(const X25519SecretKey &client_secret_key, const X25519PublicKey &server_expected_public_key, + NetworkAuthenticationServerHandler::ResponseResult expected_response_result) +{ + std::vector authorized_keys; + authorized_keys.emplace_back(FormatArrayAsHex(server_expected_public_key)); + + NetworkAuthenticationDefaultAuthorizedKeyHandler authorized_key_handler(authorized_keys); + X25519AuthorizedKeyServerHandler server(X25519SecretKey::CreateRandom(), &authorized_key_handler); + X25519AuthorizedKeyClientHandler client(client_secret_key); + + TestAuthentication(server, client, expected_response_result, NetworkAuthenticationClientHandler::READY_FOR_RESPONSE); +} + +TEST_CASE("Authentication_AuthorizedKey") +{ + auto client_secret_key = X25519SecretKey::CreateRandom(); + auto valid_client_public_key = client_secret_key.CreatePublicKey(); + auto invalid_client_public_key = X25519SecretKey::CreateRandom().CreatePublicKey(); + + SECTION("Correct public key") { + TestAuthenticationAuthorizedKey(client_secret_key, valid_client_public_key, NetworkAuthenticationServerHandler::AUTHENTICATED); + } + + SECTION("Incorrect public key") { + TestAuthenticationAuthorizedKey(client_secret_key, invalid_client_public_key, NetworkAuthenticationServerHandler::NOT_AUTHENTICATED); + } +} + + +TEST_CASE("Authentication_Combined") +{ + auto client_secret_key = X25519SecretKey::CreateRandom(); + std::string client_secret_key_str = FormatArrayAsHex(client_secret_key); + auto client_public_key = client_secret_key.CreatePublicKey(); + std::string client_public_key_str = FormatArrayAsHex(client_public_key); + + std::vector valid_authorized_keys; + valid_authorized_keys.emplace_back(client_public_key_str); + NetworkAuthenticationDefaultAuthorizedKeyHandler valid_authorized_key_handler(valid_authorized_keys); + + std::vector invalid_authorized_keys; + invalid_authorized_keys.emplace_back("not-a-valid-authorized-key"); + NetworkAuthenticationDefaultAuthorizedKeyHandler invalid_authorized_key_handler(invalid_authorized_keys); + + std::vector no_authorized_keys; + NetworkAuthenticationDefaultAuthorizedKeyHandler no_authorized_key_handler(no_authorized_keys); + + std::string no_password = ""; + NetworkAuthenticationDefaultPasswordProvider no_password_provider(no_password); + std::string valid_password = "sikrit"; + NetworkAuthenticationDefaultPasswordProvider valid_password_provider(valid_password); + std::string invalid_password = "secret"; + NetworkAuthenticationDefaultPasswordProvider invalid_password_provider(invalid_password); + + auto client = NetworkAuthenticationClientHandler::Create(std::make_shared(valid_password), client_secret_key_str, client_public_key_str); + + SECTION("Invalid authorized keys, invalid password") { + auto server = NetworkAuthenticationServerHandler::Create(&invalid_password_provider, &invalid_authorized_key_handler); + + TestAuthentication(*server, *client, NetworkAuthenticationServerHandler::RETRY_NEXT_METHOD, NetworkAuthenticationClientHandler::READY_FOR_RESPONSE); + TestAuthentication(*server, *client, NetworkAuthenticationServerHandler::NOT_AUTHENTICATED, NetworkAuthenticationClientHandler::AWAIT_USER_INPUT); + } + + SECTION("Invalid authorized keys, valid password") { + auto server = NetworkAuthenticationServerHandler::Create(&valid_password_provider, &invalid_authorized_key_handler); + + TestAuthentication(*server, *client, NetworkAuthenticationServerHandler::RETRY_NEXT_METHOD, NetworkAuthenticationClientHandler::READY_FOR_RESPONSE); + TestAuthentication(*server, *client, NetworkAuthenticationServerHandler::AUTHENTICATED, NetworkAuthenticationClientHandler::AWAIT_USER_INPUT); + } + + SECTION("Valid authorized keys, valid password") { + auto server = NetworkAuthenticationServerHandler::Create(&valid_password_provider, &valid_authorized_key_handler); + + TestAuthentication(*server, *client, NetworkAuthenticationServerHandler::AUTHENTICATED, NetworkAuthenticationClientHandler::READY_FOR_RESPONSE); + } + + SECTION("No authorized keys, invalid password") { + auto server = NetworkAuthenticationServerHandler::Create(&invalid_password_provider, &no_authorized_key_handler); + + TestAuthentication(*server, *client, NetworkAuthenticationServerHandler::NOT_AUTHENTICATED, NetworkAuthenticationClientHandler::AWAIT_USER_INPUT); + } + + SECTION("No authorized keys, valid password") { + auto server = NetworkAuthenticationServerHandler::Create(&valid_password_provider, &no_authorized_key_handler); + + TestAuthentication(*server, *client, NetworkAuthenticationServerHandler::AUTHENTICATED, NetworkAuthenticationClientHandler::AWAIT_USER_INPUT); + } + + SECTION("No authorized keys, no password") { + auto server = NetworkAuthenticationServerHandler::Create(&no_password_provider, &no_authorized_key_handler); + + TestAuthentication(*server, *client, NetworkAuthenticationServerHandler::AUTHENTICATED, NetworkAuthenticationClientHandler::READY_FOR_RESPONSE); + } +} From dd532cbc77a70c49078522827052931daee7a5e8 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Fri, 15 Mar 2024 22:36:58 +0100 Subject: [PATCH 143/695] Codechange: add setting for authorized/secret/public keys --- src/network/core/config.h | 6 ++++++ src/settings.cpp | 2 ++ src/settings_type.h | 3 +++ .../settings/network_secrets_settings.ini | 18 ++++++++++++++++++ src/tests/test_network_crypto.cpp | 3 +++ 5 files changed, 32 insertions(+) diff --git a/src/network/core/config.h b/src/network/core/config.h index b03f96cdaa..e74cfb2fff 100644 --- a/src/network/core/config.h +++ b/src/network/core/config.h @@ -91,4 +91,10 @@ static const uint NETWORK_GRF_NAME_LENGTH = 80; ///< Maxim */ static const uint NETWORK_MAX_GRF_COUNT = 255; +/** + * The maximum length of the hexadecimal encoded secret keys, in bytes including '\0'. + * This is related to \c X25519_KEY_SIZE in the network crypto internals. + */ +static const uint NETWORK_SECRET_KEY_LENGTH = 32 * 2 + 1; + #endif /* NETWORK_CORE_CONFIG_H */ diff --git a/src/settings.cpp b/src/settings.cpp index 840196347c..29e168bf19 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -137,6 +137,7 @@ private: "newgrf", "servers", "server_bind_addresses", + "server_authorized_keys", }; public: @@ -1285,6 +1286,7 @@ static void HandleSettingDescs(IniFile &generic_ini, IniFile &private_ini, IniFi proc_list(private_ini, "server_bind_addresses", _network_bind_list); proc_list(private_ini, "servers", _network_host_list); proc_list(private_ini, "bans", _network_ban_list); + proc_list(private_ini, "server_authorized_keys", _settings_client.network.server_authorized_keys); } } diff --git a/src/settings_type.h b/src/settings_type.h index 12100ac9ec..9181e59dbe 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -313,9 +313,12 @@ struct NetworkSettings { std::string server_invite_code_secret; ///< Secret to proof we got this invite code from the Game Coordinator. std::string server_name; ///< name of the server std::string server_password; ///< password for joining this server + std::vector server_authorized_keys; ///< Public keys of clients that are authorized to connect to the game. std::string rcon_password; ///< password for rconsole (server side) std::string admin_password; ///< password for the admin network std::string client_name; ///< name of the player (as client) + std::string client_secret_key; ///< The secret key of the client for authorized key logins. + std::string client_public_key; ///< The public key of the client for authorized key logins. std::string default_company_pass; ///< default password for new companies in encrypted form std::string connect_to_ip; ///< default for the "Add server" query std::string network_id; ///< network ID for servers diff --git a/src/table/settings/network_secrets_settings.ini b/src/table/settings/network_secrets_settings.ini index 4613636a86..3d7908e75a 100644 --- a/src/table/settings/network_secrets_settings.ini +++ b/src/table/settings/network_secrets_settings.ini @@ -61,6 +61,24 @@ flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY def = nullptr cat = SC_BASIC +[SDTC_SSTR] +var = network.client_secret_key +type = SLE_STR +length = NETWORK_SECRET_KEY_LENGTH +flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC +def = nullptr +; Prevent the user from setting the secret key from the console using 'setting' +pre_cb = [](auto) { return false; } + +[SDTC_SSTR] +var = network.client_public_key +type = SLE_STR +length = NETWORK_SECRET_KEY_LENGTH +flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC +def = nullptr +; Prevent the user from setting the public key from the console using 'setting' +pre_cb = [](auto) { return false; } + [SDTC_SSTR] var = network.default_company_pass type = SLE_STR diff --git a/src/tests/test_network_crypto.cpp b/src/tests/test_network_crypto.cpp index 0438a6ca65..7258c09150 100644 --- a/src/tests/test_network_crypto.cpp +++ b/src/tests/test_network_crypto.cpp @@ -16,6 +16,9 @@ #include "../network/core/packet.h" #include "../string_func.h" +/* The length of the hexadecimal representation of a X25519 key must fit in the key length. */ +static_assert(NETWORK_SECRET_KEY_LENGTH >= X25519_KEY_SIZE * 2 + 1); + class MockNetworkSocketHandler : public NetworkSocketHandler { }; From 5706801ea7fa08b4e7e60538122f90a010ea6af4 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Thu, 14 Mar 2024 21:08:21 +0100 Subject: [PATCH 144/695] Feature: authenticate to the server without sending the password Either using password-authentication key exchange or via authorized keys --- src/lang/english.txt | 4 +- src/network/core/tcp_game.cpp | 10 ++-- src/network/core/tcp_game.h | 34 +++++++---- src/network/network.cpp | 1 + src/network/network_client.cpp | 75 +++++++++++++++++++----- src/network/network_client.h | 9 ++- src/network/network_gui.cpp | 14 ++--- src/network/network_gui.h | 2 +- src/network/network_server.cpp | 104 +++++++++++++++++++++++---------- src/network/network_server.h | 9 ++- src/network/network_type.h | 1 + 11 files changed, 184 insertions(+), 79 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 6832c13636..3fff8c6939 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2574,6 +2574,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Your pla STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Your server name has not been set. The name can be set at the top of the Multiplayer window STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}The revision of this client does not match the server's revision STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Wrong password +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}You are not on the list of allowed clients STR_NETWORK_ERROR_SERVER_FULL :{WHITE}The server is full STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}You are banned from this server STR_NETWORK_ERROR_KICKED :{WHITE}You were kicked out of the game @@ -2589,7 +2590,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Your pla STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Possible connection loss STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}The last {NUM} second{P "" s} no data has arrived from the server -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :general error STR_NETWORK_ERROR_CLIENT_DESYNC :desync error STR_NETWORK_ERROR_CLIENT_SAVEGAME :could not load map @@ -2601,6 +2602,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :received invali STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :wrong revision STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :name already in use STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :wrong password +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :not on allow list STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :wrong company in DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :kicked by server STR_NETWORK_ERROR_CLIENT_CHEATER :was trying to use a cheat diff --git a/src/network/core/tcp_game.cpp b/src/network/core/tcp_game.cpp index f1b4b05e2a..9e179362bc 100644 --- a/src/network/core/tcp_game.cpp +++ b/src/network/core/tcp_game.cpp @@ -82,9 +82,10 @@ NetworkRecvStatus NetworkGameSocketHandler::HandlePacket(Packet &p) case PACKET_SERVER_GAME_INFO: return this->Receive_SERVER_GAME_INFO(p); case PACKET_SERVER_CLIENT_INFO: return this->Receive_SERVER_CLIENT_INFO(p); case PACKET_CLIENT_IDENTIFY: return this->Receive_CLIENT_IDENTIFY(p); - case PACKET_SERVER_NEED_GAME_PASSWORD: return this->Receive_SERVER_NEED_GAME_PASSWORD(p); + case PACKET_SERVER_AUTH_REQUEST: return this->Receive_SERVER_AUTH_REQUEST(p); case PACKET_SERVER_NEED_COMPANY_PASSWORD: return this->Receive_SERVER_NEED_COMPANY_PASSWORD(p); - case PACKET_CLIENT_GAME_PASSWORD: return this->Receive_CLIENT_GAME_PASSWORD(p); + case PACKET_CLIENT_AUTH_RESPONSE: return this->Receive_CLIENT_AUTH_RESPONSE(p); + case PACKET_SERVER_AUTH_COMPLETED: return this->Receive_SERVER_AUTH_COMPLETED(p); case PACKET_CLIENT_COMPANY_PASSWORD: return this->Receive_CLIENT_COMPANY_PASSWORD(p); case PACKET_SERVER_WELCOME: return this->Receive_SERVER_WELCOME(p); case PACKET_CLIENT_GETMAP: return this->Receive_CLIENT_GETMAP(p); @@ -164,9 +165,10 @@ NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_GAME_INFO(Packet &) { NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_GAME_INFO(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_GAME_INFO); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_CLIENT_INFO(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_CLIENT_INFO); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_IDENTIFY(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_IDENTIFY); } -NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_NEED_GAME_PASSWORD(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_NEED_GAME_PASSWORD); } +NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_AUTH_REQUEST(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_AUTH_REQUEST); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_NEED_COMPANY_PASSWORD(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_NEED_COMPANY_PASSWORD); } -NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_GAME_PASSWORD(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_GAME_PASSWORD); } +NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_AUTH_RESPONSE(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_AUTH_RESPONSE); } +NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_AUTH_COMPLETED(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_AUTH_COMPLETED); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_COMPANY_PASSWORD(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_COMPANY_PASSWORD); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_WELCOME(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_WELCOME); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_GETMAP(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_GETMAP); } diff --git a/src/network/core/tcp_game.h b/src/network/core/tcp_game.h index 14310f0017..2e5f33dfdb 100644 --- a/src/network/core/tcp_game.h +++ b/src/network/core/tcp_game.h @@ -15,6 +15,7 @@ #include "os_abstraction.h" #include "tcp.h" #include "../network_type.h" +#include "../network_crypto.h" #include "../../core/pool_type.hpp" #include @@ -56,16 +57,19 @@ enum PacketGameType : uint8_t { * the map and other important data. */ - /* After the initial join, the next step is identification. */ + /* After the join step, the first perform game authentication and enabling encryption. */ + PACKET_SERVER_AUTH_REQUEST, ///< The server requests the client to authenticate using a number of methods. + PACKET_CLIENT_AUTH_RESPONSE, ///< The client responds to the authentication request. + PACKET_SERVER_AUTH_COMPLETED, ///< The server indicates the authentication is completed. + + /* After the authentication is done, the next step is identification. */ PACKET_CLIENT_IDENTIFY, ///< Client telling the server the client's name and requested company. /* After the identify step, the next is checking NewGRFs. */ PACKET_SERVER_CHECK_NEWGRFS, ///< Server sends NewGRF IDs and MD5 checksums for the client to check. PACKET_CLIENT_NEWGRFS_CHECKED, ///< Client acknowledges that it has all required NewGRFs. - /* Checking the game, and then company passwords. */ - PACKET_SERVER_NEED_GAME_PASSWORD, ///< Server requests the (hashed) game password. - PACKET_CLIENT_GAME_PASSWORD, ///< Clients sends the (hashed) game password. + /* Checking the company passwords. */ PACKET_SERVER_NEED_COMPANY_PASSWORD, ///< Server requests the (hashed) company password. PACKET_CLIENT_COMPANY_PASSWORD, ///< Client sends the (hashed) company password. @@ -214,10 +218,13 @@ protected: virtual NetworkRecvStatus Receive_CLIENT_IDENTIFY(Packet &p); /** - * Indication to the client that the server needs a game password. + * Indication to the client that it needs to authenticate: + * bool Whether to use the password in the key exchange. + * 32 * uint8_t Public key of the server. + * 24 * uint8_t Nonce for the key exchange. * @param p The packet that was just received. */ - virtual NetworkRecvStatus Receive_SERVER_NEED_GAME_PASSWORD(Packet &p); + virtual NetworkRecvStatus Receive_SERVER_AUTH_REQUEST(Packet &p); /** * Indication to the client that the server needs a company password: @@ -228,12 +235,19 @@ protected: virtual NetworkRecvStatus Receive_SERVER_NEED_COMPANY_PASSWORD(Packet &p); /** - * Send a password to the server to authorize: - * uint8_t Password type (see NetworkPasswordType). - * string The password. + * Send the response to the authentication request: + * 32 * uint8_t Public key of the client. + * 8 * uint8_t Random message that got encoded and signed. + * 16 * uint8_t Message authentication code. * @param p The packet that was just received. */ - virtual NetworkRecvStatus Receive_CLIENT_GAME_PASSWORD(Packet &p); + virtual NetworkRecvStatus Receive_CLIENT_AUTH_RESPONSE(Packet &p); + + /** + * Indication to the client that authentication has completed. + * @param p The packet that was just received. + */ + virtual NetworkRecvStatus Receive_SERVER_AUTH_COMPLETED(Packet &p); /** * Send a password to the server to authorize diff --git a/src/network/network.cpp b/src/network/network.cpp index 9d47c2f964..784c5a8f37 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -321,6 +321,7 @@ StringID GetNetworkErrorMsg(NetworkErrorCode err) STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP, STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN, STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME, + STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST, }; static_assert(lengthof(network_error_strings) == NETWORK_ERROR_END); diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 43eb46cb5c..f3fd5fe6f0 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -349,7 +349,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendJoin() p->Send_uint32(_openttd_newgrf_version); my_client->SendPacket(std::move(p)); - return ClientNetworkGameSocketHandler::SendIdentify(); + return NETWORK_RECV_STATUS_OKAY; } NetworkRecvStatus ClientNetworkGameSocketHandler::SendIdentify() @@ -377,13 +377,14 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendNewGRFsOk() * Set the game password as requested. * @param password The game password. */ -NetworkRecvStatus ClientNetworkGameSocketHandler::SendGamePassword(const std::string &password) +NetworkRecvStatus ClientNetworkGameSocketHandler::SendAuthResponse() { - Debug(net, 9, "Client::SendGamePassword()"); + Debug(net, 9, "Client::SendAuthResponse()"); - auto p = std::make_unique(my_client, PACKET_CLIENT_GAME_PASSWORD); - p->Send_string(password); + auto p = std::make_unique(my_client, PACKET_CLIENT_AUTH_RESPONSE); + my_client->authentication_handler->SendResponse(*p); my_client->SendPacket(std::move(p)); + return NETWORK_RECV_STATUS_OKAY; } @@ -680,6 +681,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_ERROR(Packet &p STR_NETWORK_ERROR_TIMEOUT_MAP, // NETWORK_ERROR_TIMEOUT_MAP STR_NETWORK_ERROR_TIMEOUT_JOIN, // NETWORK_ERROR_TIMEOUT_JOIN STR_NETWORK_ERROR_INVALID_CLIENT_NAME, // NETWORK_ERROR_INVALID_CLIENT_NAME + STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST, // NETWORK_ERROR_NOT_ON_ALLOW_LIST }; static_assert(lengthof(network_error_strings) == NETWORK_ERROR_END); @@ -705,7 +707,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_ERROR(Packet &p NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CHECK_NEWGRFS(Packet &p) { - if (this->status != STATUS_JOIN) return NETWORK_RECV_STATUS_MALFORMED_PACKET; + if (this->status != STATUS_AUTHENTICATED) return NETWORK_RECV_STATUS_MALFORMED_PACKET; uint grf_count = p.Recv_uint8(); NetworkRecvStatus ret = NETWORK_RECV_STATUS_OKAY; @@ -736,26 +738,67 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CHECK_NEWGRFS(P return ret; } -NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_NEED_GAME_PASSWORD(Packet &) +class ClientGamePasswordRequestHandler : public NetworkAuthenticationPasswordRequestHandler { + virtual void SendResponse() override { MyClient::SendAuthResponse(); } + virtual void AskUserForPassword(std::shared_ptr request) override + { + if (!_network_join.server_password.empty()) { + request->Reply(_network_join.server_password); + } else { + ShowNetworkNeedPassword(NETWORK_GAME_PASSWORD, request); + } + } +}; + +NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_AUTH_REQUEST(Packet &p) { - if (this->status < STATUS_JOIN || this->status >= STATUS_AUTH_GAME) return NETWORK_RECV_STATUS_MALFORMED_PACKET; + if (this->status != STATUS_JOIN && this->status != STATUS_AUTH_GAME) return NETWORK_RECV_STATUS_MALFORMED_PACKET; Debug(net, 9, "Client::status = AUTH_GAME"); this->status = STATUS_AUTH_GAME; - Debug(net, 9, "Client::Receive_SERVER_NEED_GAME_PASSWORD()"); + Debug(net, 9, "Client::Receive_SERVER_AUTH_REQUEST()"); - if (!_network_join.server_password.empty()) { - return SendGamePassword(_network_join.server_password); + if (this->authentication_handler == nullptr) { + this->authentication_handler = NetworkAuthenticationClientHandler::Create(std::make_shared(), + _settings_client.network.client_secret_key, _settings_client.network.client_public_key); } + switch (this->authentication_handler->ReceiveRequest(p)) { + case NetworkAuthenticationClientHandler::READY_FOR_RESPONSE: + return SendAuthResponse(); - ShowNetworkNeedPassword(NETWORK_GAME_PASSWORD); + case NetworkAuthenticationClientHandler::AWAIT_USER_INPUT: + return NETWORK_RECV_STATUS_OKAY; - return NETWORK_RECV_STATUS_OKAY; + case NetworkAuthenticationClientHandler::INVALID: + default: + return NETWORK_RECV_STATUS_MALFORMED_PACKET; + } } +NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_AUTH_COMPLETED(Packet &) +{ + if (this->status != STATUS_AUTH_GAME || this->authentication_handler == nullptr) return NETWORK_RECV_STATUS_MALFORMED_PACKET; + + Debug(net, 9, "Client::Receive_SERVER_AUTH_COMPLETED()"); + + this->authentication_handler = nullptr; + + Debug(net, 9, "Client::status = AUTHENTICATED"); + this->status = STATUS_AUTHENTICATED; + + return this->SendIdentify(); +} + +class CompanyPasswordRequest : public NetworkAuthenticationPasswordRequest { + virtual void Reply(const std::string &password) override + { + MyClient::SendCompanyPassword(password); + } +}; + NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_NEED_COMPANY_PASSWORD(Packet &p) { - if (this->status < STATUS_JOIN || this->status >= STATUS_AUTH_COMPANY) return NETWORK_RECV_STATUS_MALFORMED_PACKET; + if (this->status < STATUS_AUTHENTICATED || this->status >= STATUS_AUTH_COMPANY) return NETWORK_RECV_STATUS_MALFORMED_PACKET; Debug(net, 9, "Client::status = AUTH_COMPANY"); this->status = STATUS_AUTH_COMPANY; @@ -769,14 +812,14 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_NEED_COMPANY_PA return SendCompanyPassword(_network_join.company_password); } - ShowNetworkNeedPassword(NETWORK_COMPANY_PASSWORD); + ShowNetworkNeedPassword(NETWORK_COMPANY_PASSWORD, std::make_shared()); return NETWORK_RECV_STATUS_OKAY; } NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_WELCOME(Packet &p) { - if (this->status < STATUS_JOIN || this->status >= STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET; + if (this->status < STATUS_AUTHENTICATED || this->status >= STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET; Debug(net, 9, "Client::status = AUTHORIZED"); this->status = STATUS_AUTHORIZED; diff --git a/src/network/network_client.h b/src/network/network_client.h index f6c0eb8a61..ac80393651 100644 --- a/src/network/network_client.h +++ b/src/network/network_client.h @@ -15,6 +15,7 @@ /** Class for handling the client side of the game connection. */ class ClientNetworkGameSocketHandler : public ZeroedMemoryAllocator, public NetworkGameSocketHandler { private: + std::unique_ptr authentication_handler; ///< The handler for the authentication. std::string connection_string; ///< Address we are connected to. std::shared_ptr savegame; ///< Packet reader for reading the savegame. uint8_t token; ///< The token we need to send back to the server to prove we're the right client. @@ -23,8 +24,9 @@ private: enum ServerStatus { STATUS_INACTIVE, ///< The client is not connected nor active. STATUS_JOIN, ///< We are trying to join a server. - STATUS_NEWGRFS_CHECK, ///< Last action was checking NewGRFs. STATUS_AUTH_GAME, ///< Last action was requesting game (server) password. + STATUS_AUTHENTICATED, ///< The game authentication has completed. + STATUS_NEWGRFS_CHECK, ///< Last action was checking NewGRFs. STATUS_AUTH_COMPANY, ///< Last action was requesting company password. STATUS_AUTHORIZED, ///< The client is authorized at the server. STATUS_MAP_WAIT, ///< The client is waiting as someone else is downloading the map. @@ -44,7 +46,8 @@ protected: NetworkRecvStatus Receive_SERVER_BANNED(Packet &p) override; NetworkRecvStatus Receive_SERVER_ERROR(Packet &p) override; NetworkRecvStatus Receive_SERVER_CLIENT_INFO(Packet &p) override; - NetworkRecvStatus Receive_SERVER_NEED_GAME_PASSWORD(Packet &p) override; + NetworkRecvStatus Receive_SERVER_AUTH_REQUEST(Packet &p) override; + NetworkRecvStatus Receive_SERVER_AUTH_COMPLETED(Packet &p) override; NetworkRecvStatus Receive_SERVER_NEED_COMPANY_PASSWORD(Packet &p) override; NetworkRecvStatus Receive_SERVER_WELCOME(Packet &p) override; NetworkRecvStatus Receive_SERVER_WAIT(Packet &p) override; @@ -86,7 +89,7 @@ public: static NetworkRecvStatus SendQuit(); static NetworkRecvStatus SendAck(); - static NetworkRecvStatus SendGamePassword(const std::string &password); + static NetworkRecvStatus SendAuthResponse(); static NetworkRecvStatus SendCompanyPassword(const std::string &password); static NetworkRecvStatus SendChat(NetworkAction action, DestType type, int dest, const std::string &msg, int64_t data); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 4c21dec535..29b6c18433 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -2103,7 +2103,7 @@ uint32_t _network_join_bytes; ///< The number of bytes we already do uint32_t _network_join_bytes_total; ///< The total number of bytes to download. struct NetworkJoinStatusWindow : Window { - NetworkPasswordType password_type; + std::shared_ptr request; NetworkJoinStatusWindow(WindowDesc *desc) : Window(desc) { @@ -2199,16 +2199,12 @@ struct NetworkJoinStatusWindow : Window { void OnQueryTextFinished(char *str) override { - if (StrEmpty(str)) { + if (StrEmpty(str) || this->request == nullptr) { NetworkDisconnect(); return; } - switch (this->password_type) { - case NETWORK_GAME_PASSWORD: MyClient::SendGamePassword (str); break; - case NETWORK_COMPANY_PASSWORD: MyClient::SendCompanyPassword(str); break; - default: NOT_REACHED(); - } + this->request->Reply(str); } }; @@ -2236,11 +2232,11 @@ void ShowJoinStatusWindow() new NetworkJoinStatusWindow(&_network_join_status_window_desc); } -void ShowNetworkNeedPassword(NetworkPasswordType npt) +void ShowNetworkNeedPassword(NetworkPasswordType npt, std::shared_ptr request) { NetworkJoinStatusWindow *w = (NetworkJoinStatusWindow *)FindWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); if (w == nullptr) return; - w->password_type = npt; + w->request = request; StringID caption; switch (npt) { diff --git a/src/network/network_gui.h b/src/network/network_gui.h index 74d6d153e6..02283e9ae7 100644 --- a/src/network/network_gui.h +++ b/src/network/network_gui.h @@ -17,7 +17,7 @@ #include "network_type.h" #include "network_gamelist.h" -void ShowNetworkNeedPassword(NetworkPasswordType npt); +void ShowNetworkNeedPassword(NetworkPasswordType npt, std::shared_ptr request); void ShowNetworkChatQueryWindow(DestType type, int dest); void ShowJoinStatusWindow(); void ShowNetworkGameWindow(); diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index eb3a1e3b18..6c7d4192ee 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -58,6 +58,10 @@ INSTANTIATE_POOL_METHODS(NetworkClientSocket) /** Instantiate the listen sockets. */ template SocketList TCPListenHandler::sockets; +static NetworkAuthenticationDefaultPasswordProvider _password_provider(_settings_client.network.server_password); ///< Provides the password validation for the game's password. +static NetworkAuthenticationDefaultAuthorizedKeyHandler _authorized_key_handler(_settings_client.network.server_authorized_keys); ///< Provides the authorized key handling for the game authentication. + + /** Writing a savegame directly to a number of packets. */ struct PacketWriter : SaveFilter { ServerNetworkGameSocketHandler *cs; ///< Socket we are associated with. @@ -407,8 +411,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGRFCheck() this->status = STATUS_NEWGRFS_CHECK; if (_grfconfig == nullptr) { - /* There are no NewGRFs, continue with the game password. */ - return this->SendNeedGamePassword(); + /* There are no NewGRFs, continue with the company password. */ + return this->SendNeedCompanyPassword(); } auto p = std::make_unique(this, PACKET_SERVER_CHECK_NEWGRFS, TCP_MTU); @@ -429,25 +433,39 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGRFCheck() } /** Request the game password. */ -NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedGamePassword() +NetworkRecvStatus ServerNetworkGameSocketHandler::SendAuthRequest() { - Debug(net, 9, "client[{}] SendNeedGamePassword()", this->client_id); + Debug(net, 9, "client[{}] SendAuthRequest()", this->client_id); - /* Invalid packet when status is anything but STATUS_NEWGRFS_CHECK. */ - if (this->status != STATUS_NEWGRFS_CHECK) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); + /* Invalid packet when status is anything but STATUS_INACTIVE or STATUS_AUTH_GAME. */ + if (this->status != STATUS_INACTIVE && status != STATUS_AUTH_GAME) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); Debug(net, 9, "client[{}] status = AUTH_GAME", this->client_id); this->status = STATUS_AUTH_GAME; - if (_settings_client.network.server_password.empty()) { - /* Do not actually need a game password, continue with the company password. */ - return this->SendNeedCompanyPassword(); - } - /* Reset 'lag' counters */ this->last_frame = this->last_frame_server = _frame_counter; - auto p = std::make_unique(this, PACKET_SERVER_NEED_GAME_PASSWORD); + if (this->authentication_handler == nullptr) { + this->authentication_handler = NetworkAuthenticationServerHandler::Create(&_password_provider, &_authorized_key_handler); + } + + auto p = std::make_unique(this, PACKET_SERVER_AUTH_REQUEST); + this->authentication_handler->SendRequest(*p); + + this->SendPacket(std::move(p)); + return NETWORK_RECV_STATUS_OKAY; +} + +/** Notify the client that the authentication has completed. */ +NetworkRecvStatus ServerNetworkGameSocketHandler::SendAuthCompleted() +{ + Debug(net, 9, "client[{}] SendAuthCompleted()", this->client_id); + + /* Invalid packet when status is anything but STATUS_AUTH_GAME. */ + if (this->status != STATUS_AUTH_GAME) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); + + auto p = std::make_unique(this, PACKET_SERVER_AUTH_COMPLETED); this->SendPacket(std::move(p)); return NETWORK_RECV_STATUS_OKAY; } @@ -457,8 +475,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedCompanyPassword() { Debug(net, 9, "client[{}] SendNeedCompanyPassword()", this->client_id); - /* Invalid packet when status is anything but STATUS_AUTH_GAME. */ - if (this->status != STATUS_AUTH_GAME) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); + /* Invalid packet when status is anything but STATUS_NEWGRFS_CHECK. */ + if (this->status != STATUS_NEWGRFS_CHECK) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); Debug(net, 9, "client[{}] status = AUTH_COMPANY", this->client_id); this->status = STATUS_AUTH_COMPANY; @@ -865,7 +883,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_NEWGRFS_CHECKED Debug(net, 9, "client[{}] Receive_CLIENT_NEWGRFS_CHECKED()", this->client_id); - return this->SendNeedGamePassword(); + return this->SendNeedCompanyPassword(); } NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_JOIN(Packet &p) @@ -891,13 +909,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_JOIN(Packet &p) return this->SendError(NETWORK_ERROR_WRONG_REVISION); } - Debug(net, 9, "client[{}] status = IDENTIFY", this->client_id); - this->status = STATUS_IDENTIFY; - - /* Reset 'lag' counters */ - this->last_frame = this->last_frame_server = _frame_counter; - - return NETWORK_RECV_STATUS_OKAY; + return this->SendAuthRequest(); } NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_IDENTIFY(Packet &p) @@ -953,24 +965,52 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_IDENTIFY(Packet return this->SendNewGRFCheck(); } -NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_GAME_PASSWORD(Packet &p) +static NetworkErrorCode GetErrorForAuthenticationMethod(NetworkAuthenticationMethod method) +{ + switch (method) { + case NETWORK_AUTH_METHOD_X25519_PAKE: + return NETWORK_ERROR_WRONG_PASSWORD; + case NETWORK_AUTH_METHOD_X25519_AUTHORIZED_KEY: + return NETWORK_ERROR_NOT_ON_ALLOW_LIST; + + default: + NOT_REACHED(); + } +} + +NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_AUTH_RESPONSE(Packet &p) { if (this->status != STATUS_AUTH_GAME) { return this->SendError(NETWORK_ERROR_NOT_EXPECTED); } - Debug(net, 9, "client[{}] Receive_CLIENT_GAME_PASSWORD()", this->client_id); + Debug(net, 9, "client[{}] Receive_CLIENT_AUTH_RESPONSE()", this->client_id); - std::string password = p.Recv_string(NETWORK_PASSWORD_LENGTH); + auto authentication_method = this->authentication_handler->GetAuthenticationMethod(); + switch (this->authentication_handler->ReceiveResponse(p)) { + case NetworkAuthenticationServerHandler::AUTHENTICATED: + break; - /* Check game password. Allow joining if we cleared the password meanwhile */ - if (!_settings_client.network.server_password.empty() && - _settings_client.network.server_password.compare(password) != 0) { - /* Password is invalid */ - return this->SendError(NETWORK_ERROR_WRONG_PASSWORD); + case NetworkAuthenticationServerHandler::RETRY_NEXT_METHOD: + return this->SendAuthRequest(); + + case NetworkAuthenticationServerHandler::NOT_AUTHENTICATED: + default: + return this->SendError(GetErrorForAuthenticationMethod(authentication_method)); } - return this->SendNeedCompanyPassword(); + NetworkRecvStatus status = this->SendAuthCompleted(); + if (status != NETWORK_RECV_STATUS_OKAY) return status; + + this->authentication_handler = nullptr; + + Debug(net, 9, "client[{}] status = IDENTIFY", this->client_id); + this->status = STATUS_IDENTIFY; + + /* Reset 'lag' counters */ + this->last_frame = this->last_frame_server = _frame_counter; + + return NETWORK_RECV_STATUS_OKAY; } NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_COMPANY_PASSWORD(Packet &p) @@ -1978,9 +2018,9 @@ void NetworkServerShowStatusToConsole() { static const char * const stat_str[] = { "inactive", + "authorizing (server password)", "identifing client", "checking NewGRFs", - "authorizing (server password)", "authorizing (company password)", "authorized", "waiting", diff --git a/src/network/network_server.h b/src/network/network_server.h index f4ce50842a..b0e21f26f6 100644 --- a/src/network/network_server.h +++ b/src/network/network_server.h @@ -23,10 +23,12 @@ extern NetworkClientSocketPool _networkclientsocket_pool; /** Class for handling the server side of the game connection. */ class ServerNetworkGameSocketHandler : public NetworkClientSocketPool::PoolItem<&_networkclientsocket_pool>, public NetworkGameSocketHandler, public TCPListenHandler { protected: + std::unique_ptr authentication_handler; ///< The handler for the authentication. + NetworkRecvStatus Receive_CLIENT_JOIN(Packet &p) override; NetworkRecvStatus Receive_CLIENT_IDENTIFY(Packet &p) override; NetworkRecvStatus Receive_CLIENT_GAME_INFO(Packet &p) override; - NetworkRecvStatus Receive_CLIENT_GAME_PASSWORD(Packet &p) override; + NetworkRecvStatus Receive_CLIENT_AUTH_RESPONSE(Packet &p) override; NetworkRecvStatus Receive_CLIENT_COMPANY_PASSWORD(Packet &p) override; NetworkRecvStatus Receive_CLIENT_GETMAP(Packet &p) override; NetworkRecvStatus Receive_CLIENT_MAP_OK(Packet &p) override; @@ -44,16 +46,17 @@ protected: NetworkRecvStatus SendGameInfo(); NetworkRecvStatus SendNewGRFCheck(); NetworkRecvStatus SendWelcome(); - NetworkRecvStatus SendNeedGamePassword(); + NetworkRecvStatus SendAuthRequest(); + NetworkRecvStatus SendAuthCompleted(); NetworkRecvStatus SendNeedCompanyPassword(); public: /** Status of a client */ enum ClientStatus { STATUS_INACTIVE, ///< The client is not connected nor active. + STATUS_AUTH_GAME, ///< The client is authorizing with game (server) password. STATUS_IDENTIFY, ///< The client is identifying itself. STATUS_NEWGRFS_CHECK, ///< The client is checking NewGRFs. - STATUS_AUTH_GAME, ///< The client is authorizing with game (server) password. STATUS_AUTH_COMPANY, ///< The client is authorizing with company password. STATUS_AUTHORIZED, ///< The client is authorized. STATUS_MAP_WAIT, ///< The client is waiting as someone else is downloading the map. diff --git a/src/network/network_type.h b/src/network/network_type.h index 40a990d472..faa81a8d35 100644 --- a/src/network/network_type.h +++ b/src/network/network_type.h @@ -145,6 +145,7 @@ enum NetworkErrorCode { NETWORK_ERROR_TIMEOUT_MAP, NETWORK_ERROR_TIMEOUT_JOIN, NETWORK_ERROR_INVALID_CLIENT_NAME, + NETWORK_ERROR_NOT_ON_ALLOW_LIST, NETWORK_ERROR_END, }; From d26629c15bd8b1f412964a3d973a51e2fd492656 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 17 Mar 2024 00:20:25 +0100 Subject: [PATCH 145/695] Codechange: make encoded length of packet size and type more explicit --- src/network/core/packet.cpp | 12 ++++++------ src/network/core/packet.h | 4 +++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/network/core/packet.cpp b/src/network/core/packet.cpp index 2319b8adb1..d2fe0b4cde 100644 --- a/src/network/core/packet.cpp +++ b/src/network/core/packet.cpp @@ -223,7 +223,7 @@ bool Packet::CanReadFromPacket(size_t bytes_to_read, bool close_connection) */ bool Packet::HasPacketSizeData() const { - return this->pos >= sizeof(PacketSize); + return this->pos >= EncodedLengthOfPacketSize(); } /** @@ -250,10 +250,10 @@ bool Packet::ParsePacketSize() /* If the size of the packet is less than the bytes required for the size and type of * the packet, or more than the allowed limit, then something is wrong with the packet. * In those cases the packet can generally be regarded as containing garbage data. */ - if (size < sizeof(PacketSize) + sizeof(PacketType) || size > this->limit) return false; + if (size < EncodedLengthOfPacketSize() + EncodedLengthOfPacketType() || size > this->limit) return false; this->buffer.resize(size); - this->pos = sizeof(PacketSize); + this->pos = static_cast(EncodedLengthOfPacketSize()); return true; } @@ -263,7 +263,7 @@ bool Packet::ParsePacketSize() void Packet::PrepareToRead() { /* Put the position on the right place */ - this->pos = sizeof(PacketSize); + this->pos = static_cast(EncodedLengthOfPacketSize()); } /** @@ -272,8 +272,8 @@ void Packet::PrepareToRead() */ PacketType Packet::GetPacketType() const { - assert(this->Size() >= sizeof(PacketSize) + sizeof(PacketType)); - return static_cast(buffer[sizeof(PacketSize)]); + assert(this->Size() >= EncodedLengthOfPacketSize() + EncodedLengthOfPacketType()); + return static_cast(buffer[EncodedLengthOfPacketSize()]); } /** diff --git a/src/network/core/packet.h b/src/network/core/packet.h index beff95431d..2631173cce 100644 --- a/src/network/core/packet.h +++ b/src/network/core/packet.h @@ -40,6 +40,8 @@ typedef uint8_t PacketType; ///< Identifier for the packet * (year % 4 == 0) and ((year % 100 != 0) or (year % 400 == 0)) */ struct Packet { + static constexpr size_t EncodedLengthOfPacketSize() { return sizeof(PacketSize); } + static constexpr size_t EncodedLengthOfPacketType() { return sizeof(PacketType); } private: /** The current read/write position in the packet */ PacketSize pos; @@ -52,7 +54,7 @@ private: NetworkSocketHandler *cs; public: - Packet(NetworkSocketHandler *cs, size_t limit, size_t initial_read_size = sizeof(PacketSize)); + Packet(NetworkSocketHandler *cs, size_t limit, size_t initial_read_size = EncodedLengthOfPacketSize()); Packet(NetworkSocketHandler *cs, PacketType type, size_t limit = COMPAT_MTU); /* Sending/writing of packets */ From 1cf8799810277e544f12c4159d00016634225938 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Thu, 14 Mar 2024 21:36:28 +0100 Subject: [PATCH 146/695] Feature: encrypt the connection between game server and client --- src/network/core/core.h | 6 +++ src/network/core/packet.cpp | 32 +++++++++++-- src/network/core/packet.h | 2 +- src/network/core/tcp.cpp | 6 ++- src/network/core/tcp_game.cpp | 4 +- src/network/core/tcp_game.h | 7 ++- src/network/core/udp.cpp | 5 +- src/network/network_client.cpp | 16 ++++--- src/network/network_client.h | 4 +- src/network/network_server.cpp | 12 +++-- src/network/network_server.h | 2 +- src/tests/test_network_crypto.cpp | 80 ++++++++++++++++++++++++++++--- 12 files changed, 143 insertions(+), 33 deletions(-) diff --git a/src/network/core/core.h b/src/network/core/core.h index 712687022a..a9d12b1f11 100644 --- a/src/network/core/core.h +++ b/src/network/core/core.h @@ -13,6 +13,7 @@ #define NETWORK_CORE_CORE_H #include "../../newgrf_config.h" +#include "../network_crypto.h" #include "config.h" bool NetworkCoreInitialize(); @@ -43,6 +44,11 @@ class NetworkSocketHandler { private: bool has_quit; ///< Whether the current client has quit/send a bad packet +protected: + friend struct Packet; + std::unique_ptr receive_encryption_handler; ///< The handler for decrypting received packets. + std::unique_ptr send_encryption_handler; ///< The handler for encrypting sent packets. + public: /** Create a new unbound socket */ NetworkSocketHandler() { this->has_quit = false; } diff --git a/src/network/core/packet.cpp b/src/network/core/packet.cpp index d2fe0b4cde..974630c63d 100644 --- a/src/network/core/packet.cpp +++ b/src/network/core/packet.cpp @@ -48,7 +48,14 @@ Packet::Packet(NetworkSocketHandler *cs, size_t limit, size_t initial_read_size) Packet::Packet(NetworkSocketHandler *cs, PacketType type, size_t limit) : pos(0), limit(limit), cs(cs) { /* Allocate space for the the size so we can write that in just before sending the packet. */ - this->Send_uint16(0); + size_t size = EncodedLengthOfPacketSize(); + if (cs != nullptr && cs->send_encryption_handler != nullptr) { + /* Allocate some space for the message authentication code of the encryption. */ + size += cs->send_encryption_handler->MACSize(); + } + assert(this->CanWriteToPacket(size)); + this->buffer.resize(size, 0); + this->Send_uint8(type); } @@ -64,6 +71,13 @@ void Packet::PrepareToSend() this->buffer[0] = GB(this->Size(), 0, 8); this->buffer[1] = GB(this->Size(), 8, 8); + if (cs != nullptr && cs->send_encryption_handler != nullptr) { + size_t offset = EncodedLengthOfPacketSize(); + size_t mac_size = cs->send_encryption_handler->MACSize(); + size_t message_offset = offset + mac_size; + cs->send_encryption_handler->Encrypt(std::span(&this->buffer[offset], mac_size), std::span(&this->buffer[message_offset], this->buffer.size() - message_offset)); + } + this->pos = 0; // We start reading from here this->buffer.shrink_to_fit(); } @@ -259,11 +273,21 @@ bool Packet::ParsePacketSize() /** * Prepares the packet so it can be read + * @return True when the packet was valid, otherwise false. */ -void Packet::PrepareToRead() +bool Packet::PrepareToRead() { /* Put the position on the right place */ this->pos = static_cast(EncodedLengthOfPacketSize()); + + if (cs == nullptr || cs->receive_encryption_handler == nullptr) return true; + + size_t mac_size = cs->receive_encryption_handler->MACSize(); + if (this->buffer.size() <= pos + mac_size) return false; + + bool valid = cs->receive_encryption_handler->Decrypt(std::span(&this->buffer[pos], mac_size), std::span(&this->buffer[pos + mac_size], this->buffer.size() - pos - mac_size)); + this->pos += static_cast(mac_size); + return valid; } /** @@ -273,7 +297,9 @@ void Packet::PrepareToRead() PacketType Packet::GetPacketType() const { assert(this->Size() >= EncodedLengthOfPacketSize() + EncodedLengthOfPacketType()); - return static_cast(buffer[EncodedLengthOfPacketSize()]); + size_t offset = EncodedLengthOfPacketSize(); + if (cs != nullptr && cs->send_encryption_handler != nullptr) offset += cs->send_encryption_handler->MACSize(); + return static_cast(buffer[offset]); } /** diff --git a/src/network/core/packet.h b/src/network/core/packet.h index 2631173cce..839f8d4740 100644 --- a/src/network/core/packet.h +++ b/src/network/core/packet.h @@ -74,7 +74,7 @@ public: bool HasPacketSizeData() const; bool ParsePacketSize(); size_t Size() const; - void PrepareToRead(); + [[nodiscard]] bool PrepareToRead(); PacketType GetPacketType() const; bool CanReadFromPacket(size_t bytes_to_read, bool close_connection = false); diff --git a/src/network/core/tcp.cpp b/src/network/core/tcp.cpp index b01b8cd075..8bd7b44f2f 100644 --- a/src/network/core/tcp.cpp +++ b/src/network/core/tcp.cpp @@ -188,7 +188,11 @@ std::unique_ptr NetworkTCPSocketHandler::ReceivePacket() } } - p.PrepareToRead(); + if (!p.PrepareToRead()) { + Debug(net, 0, "Invalid packet received (too small / decryption error)"); + this->CloseConnection(); + return nullptr; + } return std::move(this->packet_recv); } diff --git a/src/network/core/tcp_game.cpp b/src/network/core/tcp_game.cpp index 9e179362bc..5b7ef1dfca 100644 --- a/src/network/core/tcp_game.cpp +++ b/src/network/core/tcp_game.cpp @@ -85,7 +85,7 @@ NetworkRecvStatus NetworkGameSocketHandler::HandlePacket(Packet &p) case PACKET_SERVER_AUTH_REQUEST: return this->Receive_SERVER_AUTH_REQUEST(p); case PACKET_SERVER_NEED_COMPANY_PASSWORD: return this->Receive_SERVER_NEED_COMPANY_PASSWORD(p); case PACKET_CLIENT_AUTH_RESPONSE: return this->Receive_CLIENT_AUTH_RESPONSE(p); - case PACKET_SERVER_AUTH_COMPLETED: return this->Receive_SERVER_AUTH_COMPLETED(p); + case PACKET_SERVER_ENABLE_ENCRYPTION: return this->Receive_SERVER_ENABLE_ENCRYPTION(p); case PACKET_CLIENT_COMPANY_PASSWORD: return this->Receive_CLIENT_COMPANY_PASSWORD(p); case PACKET_SERVER_WELCOME: return this->Receive_SERVER_WELCOME(p); case PACKET_CLIENT_GETMAP: return this->Receive_CLIENT_GETMAP(p); @@ -168,7 +168,7 @@ NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_IDENTIFY(Packet &) { NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_AUTH_REQUEST(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_AUTH_REQUEST); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_NEED_COMPANY_PASSWORD(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_NEED_COMPANY_PASSWORD); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_AUTH_RESPONSE(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_AUTH_RESPONSE); } -NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_AUTH_COMPLETED(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_AUTH_COMPLETED); } +NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_ENABLE_ENCRYPTION(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_ENABLE_ENCRYPTION); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_COMPANY_PASSWORD(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_COMPANY_PASSWORD); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_WELCOME(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_WELCOME); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_GETMAP(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_GETMAP); } diff --git a/src/network/core/tcp_game.h b/src/network/core/tcp_game.h index 2e5f33dfdb..cf1b8b92b2 100644 --- a/src/network/core/tcp_game.h +++ b/src/network/core/tcp_game.h @@ -15,7 +15,6 @@ #include "os_abstraction.h" #include "tcp.h" #include "../network_type.h" -#include "../network_crypto.h" #include "../../core/pool_type.hpp" #include @@ -60,7 +59,7 @@ enum PacketGameType : uint8_t { /* After the join step, the first perform game authentication and enabling encryption. */ PACKET_SERVER_AUTH_REQUEST, ///< The server requests the client to authenticate using a number of methods. PACKET_CLIENT_AUTH_RESPONSE, ///< The client responds to the authentication request. - PACKET_SERVER_AUTH_COMPLETED, ///< The server indicates the authentication is completed. + PACKET_SERVER_ENABLE_ENCRYPTION, ///< The server tells that authentication has completed and requests to enable encryption with the keys of the last \c PACKET_CLIENT_AUTH_RESPONSE. /* After the authentication is done, the next step is identification. */ PACKET_CLIENT_IDENTIFY, ///< Client telling the server the client's name and requested company. @@ -244,10 +243,10 @@ protected: virtual NetworkRecvStatus Receive_CLIENT_AUTH_RESPONSE(Packet &p); /** - * Indication to the client that authentication has completed. + * Indication to the client that authentication is complete and encryption has to be used from here on forward. * @param p The packet that was just received. */ - virtual NetworkRecvStatus Receive_SERVER_AUTH_COMPLETED(Packet &p); + virtual NetworkRecvStatus Receive_SERVER_ENABLE_ENCRYPTION(Packet &p); /** * Send a password to the server to authorize diff --git a/src/network/core/udp.cpp b/src/network/core/udp.cpp index 04324e0098..c7acbd21a1 100644 --- a/src/network/core/udp.cpp +++ b/src/network/core/udp.cpp @@ -137,7 +137,10 @@ void NetworkUDPSocketHandler::ReceivePackets() Debug(net, 1, "Received a packet with mismatching size from {}", address.GetAddressAsString()); continue; } - p.PrepareToRead(); + if (!p.PrepareToRead()) { + Debug(net, 1, "Invalid packet received (too small / decryption error)"); + continue; + } /* Handle the packet */ this->HandleUDPPacket(p, address); diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index f3fd5fe6f0..698b2975dd 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -707,7 +707,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_ERROR(Packet &p NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CHECK_NEWGRFS(Packet &p) { - if (this->status != STATUS_AUTHENTICATED) return NETWORK_RECV_STATUS_MALFORMED_PACKET; + if (this->status != STATUS_ENCRYPTED) return NETWORK_RECV_STATUS_MALFORMED_PACKET; uint grf_count = p.Recv_uint8(); NetworkRecvStatus ret = NETWORK_RECV_STATUS_OKAY; @@ -775,16 +775,18 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_AUTH_REQUEST(Pa } } -NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_AUTH_COMPLETED(Packet &) +NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_ENABLE_ENCRYPTION(Packet &) { if (this->status != STATUS_AUTH_GAME || this->authentication_handler == nullptr) return NETWORK_RECV_STATUS_MALFORMED_PACKET; - Debug(net, 9, "Client::Receive_SERVER_AUTH_COMPLETED()"); + Debug(net, 9, "Client::Receive_SERVER_ENABLE_ENCRYPTION()"); + this->receive_encryption_handler = this->authentication_handler->CreateServerToClientEncryptionHandler(); + this->send_encryption_handler = this->authentication_handler->CreateClientToServerEncryptionHandler(); this->authentication_handler = nullptr; - Debug(net, 9, "Client::status = AUTHENTICATED"); - this->status = STATUS_AUTHENTICATED; + Debug(net, 9, "Client::status = ENCRYPTED"); + this->status = STATUS_ENCRYPTED; return this->SendIdentify(); } @@ -798,7 +800,7 @@ class CompanyPasswordRequest : public NetworkAuthenticationPasswordRequest { NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_NEED_COMPANY_PASSWORD(Packet &p) { - if (this->status < STATUS_AUTHENTICATED || this->status >= STATUS_AUTH_COMPANY) return NETWORK_RECV_STATUS_MALFORMED_PACKET; + if (this->status < STATUS_ENCRYPTED || this->status >= STATUS_AUTH_COMPANY) return NETWORK_RECV_STATUS_MALFORMED_PACKET; Debug(net, 9, "Client::status = AUTH_COMPANY"); this->status = STATUS_AUTH_COMPANY; @@ -819,7 +821,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_NEED_COMPANY_PA NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_WELCOME(Packet &p) { - if (this->status < STATUS_AUTHENTICATED || this->status >= STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET; + if (this->status < STATUS_ENCRYPTED || this->status >= STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET; Debug(net, 9, "Client::status = AUTHORIZED"); this->status = STATUS_AUTHORIZED; diff --git a/src/network/network_client.h b/src/network/network_client.h index ac80393651..8d68b8d8ba 100644 --- a/src/network/network_client.h +++ b/src/network/network_client.h @@ -25,7 +25,7 @@ private: STATUS_INACTIVE, ///< The client is not connected nor active. STATUS_JOIN, ///< We are trying to join a server. STATUS_AUTH_GAME, ///< Last action was requesting game (server) password. - STATUS_AUTHENTICATED, ///< The game authentication has completed. + STATUS_ENCRYPTED, ///< The game authentication has completed and from here on the connection to the server is encrypted. STATUS_NEWGRFS_CHECK, ///< Last action was checking NewGRFs. STATUS_AUTH_COMPANY, ///< Last action was requesting company password. STATUS_AUTHORIZED, ///< The client is authorized at the server. @@ -47,7 +47,7 @@ protected: NetworkRecvStatus Receive_SERVER_ERROR(Packet &p) override; NetworkRecvStatus Receive_SERVER_CLIENT_INFO(Packet &p) override; NetworkRecvStatus Receive_SERVER_AUTH_REQUEST(Packet &p) override; - NetworkRecvStatus Receive_SERVER_AUTH_COMPLETED(Packet &p) override; + NetworkRecvStatus Receive_SERVER_ENABLE_ENCRYPTION(Packet &p) override; NetworkRecvStatus Receive_SERVER_NEED_COMPANY_PASSWORD(Packet &p) override; NetworkRecvStatus Receive_SERVER_WELCOME(Packet &p) override; NetworkRecvStatus Receive_SERVER_WAIT(Packet &p) override; diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 6c7d4192ee..3a792504dd 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -457,15 +457,15 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendAuthRequest() return NETWORK_RECV_STATUS_OKAY; } -/** Notify the client that the authentication has completed. */ -NetworkRecvStatus ServerNetworkGameSocketHandler::SendAuthCompleted() +/** Notify the client that the authentication has completed and tell that for the remainder of this socket encryption is enabled. */ +NetworkRecvStatus ServerNetworkGameSocketHandler::SendEnableEncryption() { - Debug(net, 9, "client[{}] SendAuthCompleted()", this->client_id); + Debug(net, 9, "client[{}] SendEnableEncryption()", this->client_id); /* Invalid packet when status is anything but STATUS_AUTH_GAME. */ if (this->status != STATUS_AUTH_GAME) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); - auto p = std::make_unique(this, PACKET_SERVER_AUTH_COMPLETED); + auto p = std::make_unique(this, PACKET_SERVER_ENABLE_ENCRYPTION); this->SendPacket(std::move(p)); return NETWORK_RECV_STATUS_OKAY; } @@ -999,9 +999,11 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_AUTH_RESPONSE(P return this->SendError(GetErrorForAuthenticationMethod(authentication_method)); } - NetworkRecvStatus status = this->SendAuthCompleted(); + NetworkRecvStatus status = this->SendEnableEncryption(); if (status != NETWORK_RECV_STATUS_OKAY) return status; + this->receive_encryption_handler = this->authentication_handler->CreateClientToServerEncryptionHandler(); + this->send_encryption_handler = this->authentication_handler->CreateServerToClientEncryptionHandler(); this->authentication_handler = nullptr; Debug(net, 9, "client[{}] status = IDENTIFY", this->client_id); diff --git a/src/network/network_server.h b/src/network/network_server.h index b0e21f26f6..47b8777578 100644 --- a/src/network/network_server.h +++ b/src/network/network_server.h @@ -47,7 +47,7 @@ protected: NetworkRecvStatus SendNewGRFCheck(); NetworkRecvStatus SendWelcome(); NetworkRecvStatus SendAuthRequest(); - NetworkRecvStatus SendAuthCompleted(); + NetworkRecvStatus SendEnableEncryption(); NetworkRecvStatus SendNeedCompanyPassword(); public: diff --git a/src/tests/test_network_crypto.cpp b/src/tests/test_network_crypto.cpp index 7258c09150..34cbefaf27 100644 --- a/src/tests/test_network_crypto.cpp +++ b/src/tests/test_network_crypto.cpp @@ -20,15 +20,21 @@ static_assert(NETWORK_SECRET_KEY_LENGTH >= X25519_KEY_SIZE * 2 + 1); class MockNetworkSocketHandler : public NetworkSocketHandler { +public: + MockNetworkSocketHandler(std::unique_ptr &&receive = {}, std::unique_ptr &&send = {}) + { + this->receive_encryption_handler = std::move(receive); + this->send_encryption_handler = std::move(send); + } }; static MockNetworkSocketHandler mock_socket_handler; -static Packet CreatePacketForReading(Packet &source) +static std::tuple CreatePacketForReading(Packet &source, MockNetworkSocketHandler *socket_handler) { source.PrepareToSend(); - Packet dest(&mock_socket_handler, COMPAT_MTU, source.Size()); + Packet dest(socket_handler, COMPAT_MTU, source.Size()); auto transfer_in = [](Packet &source, char *dest_data, size_t length) { auto transfer_out = [](char *dest_data, const char *source_data, size_t length) { @@ -39,9 +45,9 @@ static Packet CreatePacketForReading(Packet &source) }; dest.TransferIn(transfer_in, source); - dest.PrepareToRead(); + bool valid = dest.PrepareToRead(); dest.Recv_uint8(); // Ignore the type - return dest; + return { dest, valid }; } class TestPasswordRequestHandler : public NetworkAuthenticationPasswordRequestHandler { @@ -60,13 +66,16 @@ static void TestAuthentication(NetworkAuthenticationServerHandler &server, Netwo Packet request(&mock_socket_handler, PacketType{}); server.SendRequest(request); - request = CreatePacketForReading(request); + bool valid; + std::tie(request, valid) = CreatePacketForReading(request, &mock_socket_handler); + CHECK(valid); CHECK(client.ReceiveRequest(request) == expected_request_result); Packet response(&mock_socket_handler, PacketType{}); client.SendResponse(response); - response = CreatePacketForReading(response); + std::tie(response, valid) = CreatePacketForReading(response, &mock_socket_handler); + CHECK(valid); CHECK(server.ReceiveResponse(response) == expected_response_result); } @@ -200,3 +209,62 @@ TEST_CASE("Authentication_Combined") TestAuthentication(*server, *client, NetworkAuthenticationServerHandler::AUTHENTICATED, NetworkAuthenticationClientHandler::READY_FOR_RESPONSE); } } + + +static void CheckEncryption(MockNetworkSocketHandler *sending_socket_handler, MockNetworkSocketHandler *receiving_socket_handler) +{ + PacketType sent_packet_type{ 1 }; + uint64_t sent_value = 0x1234567890ABCDEF; + std::set encrypted_packet_types; + + for (int i = 0; i < 10; i++) { + Packet request(sending_socket_handler, sent_packet_type); + request.Send_uint64(sent_value); + + auto [response, valid] = CreatePacketForReading(request, receiving_socket_handler); + CHECK(valid); + CHECK(response.Recv_uint64() == sent_value); + + encrypted_packet_types.insert(request.GetPacketType()); + } + /* + * Check whether it looks like encryption has happened. This is done by checking the value + * of the packet type after encryption. If after a few iterations more than one encrypted + * value has been seen, then we know that some type of encryption/scrambling is happening. + * + * Technically this check could fail erroneously when 16 subsequent encryptions yield the + * same encrypted packet type. However, with encryption that byte should have random value + * value, so the chance of this happening are tiny given enough iterations. + * Roughly in the order of 2**((iterations - 1) * 8), which with 10 iterations is in the + * one-in-sextillion (10**21) order of magnitude. + */ + CHECK(encrypted_packet_types.size() != 1); + +} + +TEST_CASE("Encryption handling") +{ + X25519KeyExchangeOnlyServerHandler server(X25519SecretKey::CreateRandom()); + X25519KeyExchangeOnlyClientHandler client(X25519SecretKey::CreateRandom()); + + TestAuthentication(server, client, NetworkAuthenticationServerHandler::AUTHENTICATED, NetworkAuthenticationClientHandler::READY_FOR_RESPONSE); + + MockNetworkSocketHandler server_socket_handler(server.CreateClientToServerEncryptionHandler(), server.CreateServerToClientEncryptionHandler()); + MockNetworkSocketHandler client_socket_handler(client.CreateServerToClientEncryptionHandler(), client.CreateClientToServerEncryptionHandler()); + + SECTION("Encyption happening client -> server") { + CheckEncryption(&client_socket_handler, &server_socket_handler); + } + + SECTION("Encyption happening server -> client") { + CheckEncryption(&server_socket_handler, &client_socket_handler); + } + + SECTION("Unencrypted packet sent causes invalid read packet") { + Packet request(&mock_socket_handler, PacketType{}); + request.Send_uint64(0); + + auto [response, valid] = CreatePacketForReading(request, &client_socket_handler); + CHECK(!valid); + } +} From b7dfa3eb900afa3494882bb6deb8597dc61fe81f Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 17 Mar 2024 11:18:37 +0100 Subject: [PATCH 147/695] Feature: authorized key authentication for rcon --- src/console_cmds.cpp | 1 + src/network/network_server.cpp | 10 +++++++--- src/network/network_server.h | 1 + src/settings.cpp | 2 ++ src/settings_type.h | 1 + 5 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index d74446be5a..3b797005cc 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -836,6 +836,7 @@ DEF_CONSOLE_CMD(ConRcon) if (argc == 0) { IConsolePrint(CC_HELP, "Remote control the server from another client. Usage: 'rcon '."); IConsolePrint(CC_HELP, "Remember to enclose the command in quotes, otherwise only the first parameter is sent."); + IConsolePrint(CC_HELP, "When your client's public key is in the 'authorized keys' for 'rcon', the password is not checked and may be '*'."); return true; } diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 3a792504dd..6166376b11 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -60,6 +60,7 @@ template SocketList TCPListenHandlerSendEnableEncryption(); if (status != NETWORK_RECV_STATUS_OKAY) return status; + this->peer_public_key = this->authentication_handler->GetPeerPublicKey(); this->receive_encryption_handler = this->authentication_handler->CreateClientToServerEncryptionHandler(); this->send_encryption_handler = this->authentication_handler->CreateServerToClientEncryptionHandler(); this->authentication_handler = nullptr; @@ -1503,14 +1505,16 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_RCON(Packet &p) { if (this->status != STATUS_ACTIVE) return this->SendError(NETWORK_ERROR_NOT_EXPECTED); - if (_settings_client.network.rcon_password.empty()) return NETWORK_RECV_STATUS_OKAY; - Debug(net, 9, "client[{}] Receive_CLIENT_RCON()", this->client_id); std::string password = p.Recv_string(NETWORK_PASSWORD_LENGTH); std::string command = p.Recv_string(NETWORK_RCONCOMMAND_LENGTH); - if (_settings_client.network.rcon_password.compare(password) != 0) { + if (_rcon_authorized_key_handler.IsAllowed(this->peer_public_key)) { + /* We are allowed, nothing more to validate. */ + } else if (_settings_client.network.rcon_password.empty()) { + return NETWORK_RECV_STATUS_OKAY; + } else if (_settings_client.network.rcon_password.compare(password) != 0) { Debug(net, 1, "[rcon] Wrong password from client-id {}", this->client_id); return NETWORK_RECV_STATUS_OKAY; } diff --git a/src/network/network_server.h b/src/network/network_server.h index 47b8777578..d41ef4756c 100644 --- a/src/network/network_server.h +++ b/src/network/network_server.h @@ -24,6 +24,7 @@ extern NetworkClientSocketPool _networkclientsocket_pool; class ServerNetworkGameSocketHandler : public NetworkClientSocketPool::PoolItem<&_networkclientsocket_pool>, public NetworkGameSocketHandler, public TCPListenHandler { protected: std::unique_ptr authentication_handler; ///< The handler for the authentication. + std::string peer_public_key; ///< The public key of our client. NetworkRecvStatus Receive_CLIENT_JOIN(Packet &p) override; NetworkRecvStatus Receive_CLIENT_IDENTIFY(Packet &p) override; diff --git a/src/settings.cpp b/src/settings.cpp index 29e168bf19..88d96c0b48 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -138,6 +138,7 @@ private: "servers", "server_bind_addresses", "server_authorized_keys", + "rcon_authorized_keys", }; public: @@ -1287,6 +1288,7 @@ static void HandleSettingDescs(IniFile &generic_ini, IniFile &private_ini, IniFi proc_list(private_ini, "servers", _network_host_list); proc_list(private_ini, "bans", _network_ban_list); proc_list(private_ini, "server_authorized_keys", _settings_client.network.server_authorized_keys); + proc_list(private_ini, "rcon_authorized_keys", _settings_client.network.rcon_authorized_keys); } } diff --git a/src/settings_type.h b/src/settings_type.h index 9181e59dbe..17941ae0a4 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -315,6 +315,7 @@ struct NetworkSettings { std::string server_password; ///< password for joining this server std::vector server_authorized_keys; ///< Public keys of clients that are authorized to connect to the game. std::string rcon_password; ///< password for rconsole (server side) + std::vector rcon_authorized_keys; ///< Public keys of clients that are authorized to use the rconsole (server side). std::string admin_password; ///< password for the admin network std::string client_name; ///< name of the player (as client) std::string client_secret_key; ///< The secret key of the client for authorized key logins. From 4af089b9be8f56418cc96447b3ca26f037f7888b Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 17 Mar 2024 19:11:55 +0100 Subject: [PATCH 148/695] Feature: console command to change authorized keys --- src/console_cmds.cpp | 98 ++++++++++++++++++++++++++++++++++ src/network/network_func.h | 1 + src/network/network_server.cpp | 12 +++++ src/network/network_server.h | 1 + 4 files changed, 112 insertions(+) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 3b797005cc..10e6810f14 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1956,6 +1956,101 @@ DEF_CONSOLE_CMD(ConCompanyPassword) return true; } +/** All the known authorized keys with their name. */ +static std::vector *>> _console_cmd_authorized_keys{ + { "rcon", &_settings_client.network.rcon_authorized_keys }, + { "server", &_settings_client.network.server_authorized_keys }, +}; + +/** + * Simple helper to find the location of the given authorized key in the authorized keys. + * @param authorized_keys The keys to look through. + * @param authorized_key The key to look for. + * @return The iterator to the location of the authorized key, or \c authorized_keys.end(). + */ +static auto FindKey(std::vector *authorized_keys, std::string_view authorized_key) +{ + return std::find_if(authorized_keys->begin(), authorized_keys->end(), [authorized_key](auto &value) { return StrEqualsIgnoreCase(value, authorized_key); }); +} + +DEF_CONSOLE_CMD(ConNetworkAuthorizedKey) +{ + if (argc <= 2) { + IConsolePrint(CC_HELP, "List and update authorized keys. Usage: 'authorized_key list [type]|add [type] [key]|remove [type] [key]'."); + IConsolePrint(CC_HELP, " list: list all the authorized keys of the given type."); + IConsolePrint(CC_HELP, " add: add the given key to the authorized keys of the given type."); + IConsolePrint(CC_HELP, " remove: remove the given key from the authorized keys of the given type; use 'all' to remove all authorized keys."); + IConsolePrint(CC_HELP, "Instead of a key, use 'client:' to add/remove the key of that given client."); + + std::string buffer; + for (auto [name, _] : _console_cmd_authorized_keys) fmt::format_to(std::back_inserter(buffer), ", {}", name); + IConsolePrint(CC_HELP, "The supported types are: all{}.", buffer); + return true; + } + + bool valid_type = false; ///< Whether a valid type was given. + + for (auto [name, authorized_keys] : _console_cmd_authorized_keys) { + if (!StrEqualsIgnoreCase(argv[2], name) && !StrEqualsIgnoreCase(argv[2], "all")) continue; + + valid_type = true; + + if (StrEqualsIgnoreCase(argv[1], "list")) { + IConsolePrint(CC_WHITE, "The authorized keys for {} are:", name); + for (auto &authorized_key : *authorized_keys) IConsolePrint(CC_INFO, " {}", authorized_key); + continue; + } + + if (argc <= 3) { + IConsolePrint(CC_ERROR, "You must enter the key."); + return false; + } + + std::string authorized_key = argv[3]; + if (StrStartsWithIgnoreCase(authorized_key, "client:")) { + std::string id_string(authorized_key.substr(7)); + authorized_key = NetworkGetPublicKeyOfClient(static_cast(std::stoi(id_string))); + if (authorized_key.empty()) { + IConsolePrint(CC_ERROR, "You must enter a valid client id; see 'clients'."); + return false; + } + } + + auto iter = FindKey(authorized_keys, authorized_key); + + if (StrEqualsIgnoreCase(argv[1], "add")) { + if (iter == authorized_keys->end()) { + authorized_keys->push_back(authorized_key); + IConsolePrint(CC_INFO, "Added {} to {}.", authorized_key, name); + } else { + IConsolePrint(CC_WARNING, "Not added {} to {} as it already exists.", authorized_key, name); + } + continue; + } + + if (StrEqualsIgnoreCase(argv[1], "remove")) { + if (iter != authorized_keys->end()) { + authorized_keys->erase(iter); + IConsolePrint(CC_INFO, "Removed {} from {}.", authorized_key, name); + } else { + IConsolePrint(CC_WARNING, "Not removed {} from {} as it does not exist.", authorized_key, name); + } + continue; + } + + IConsolePrint(CC_WARNING, "No valid action was given."); + return false; + } + + if (!valid_type) { + IConsolePrint(CC_WARNING, "No valid type was given."); + return false; + } + + return true; +} + + /* Content downloading only is available with ZLIB */ #if defined(WITH_ZLIB) #include "network/network_content.h" @@ -2723,6 +2818,9 @@ void IConsoleStdLibRegister() IConsole::CmdRegister("pause", ConPauseGame, ConHookServerOrNoNetwork); IConsole::CmdRegister("unpause", ConUnpauseGame, ConHookServerOrNoNetwork); + IConsole::CmdRegister("authorized_key", ConNetworkAuthorizedKey, ConHookServerOnly); + IConsole::AliasRegister("ak", "authorized_key %+"); + IConsole::CmdRegister("company_pw", ConCompanyPassword, ConHookNeedNetwork); IConsole::AliasRegister("company_password", "company_pw %+"); diff --git a/src/network/network_func.h b/src/network/network_func.h index 37a4a81fd6..66b4660169 100644 --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -61,6 +61,7 @@ bool NetworkCompanyIsPassworded(CompanyID company_id); uint NetworkMaxCompaniesAllowed(); bool NetworkMaxCompaniesReached(); void NetworkPrintClients(); +std::string_view NetworkGetPublicKeyOfClient(ClientID client_id); void NetworkHandlePauseChange(PauseMode prev_mode, PauseMode changed_mode); /*** Commands ran by the server ***/ diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 6166376b11..39bd2aa540 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -2243,6 +2243,18 @@ void NetworkPrintClients() } } +/** + * Get the public key of the client with the given id. + * @param client_id The id of the client. + * @return View of the public key, which is empty when the client does not exist. + */ +std::string_view NetworkGetPublicKeyOfClient(ClientID client_id) +{ + auto socket = NetworkClientSocket::GetByClientID(client_id); + return socket == nullptr ? "" : socket->GetPeerPublicKey(); +} + + /** * Perform all the server specific administration of a new company. * @param c The newly created company; can't be nullptr. diff --git a/src/network/network_server.h b/src/network/network_server.h index d41ef4756c..6b75a123f9 100644 --- a/src/network/network_server.h +++ b/src/network/network_server.h @@ -121,6 +121,7 @@ public: } const std::string &GetClientIP(); + std::string_view GetPeerPublicKey() const { return this->peer_public_key; } static ServerNetworkGameSocketHandler *GetByClientID(ClientID client_id); }; From ec3c8d346277a8c7044f5963cfe488edfd9ef23a Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 18 Mar 2024 04:40:36 +0000 Subject: [PATCH 149/695] Update: Translations from eints ukrainian: 12 changes by StepanIvasyn portuguese (brazilian): 21 changes by pasantoro polish: 52 changes by pAter-exe --- src/lang/afrikaans.txt | 2 +- src/lang/arabic_egypt.txt | 2 +- src/lang/basque.txt | 2 +- src/lang/belarusian.txt | 2 +- src/lang/brazilian_portuguese.txt | 44 ++++++------- src/lang/bulgarian.txt | 2 +- src/lang/catalan.txt | 2 +- src/lang/chuvash.txt | 2 +- src/lang/croatian.txt | 2 +- src/lang/czech.txt | 2 +- src/lang/danish.txt | 2 +- src/lang/dutch.txt | 2 +- src/lang/english_AU.txt | 2 +- src/lang/english_US.txt | 2 +- src/lang/esperanto.txt | 2 +- src/lang/estonian.txt | 2 +- src/lang/faroese.txt | 2 +- src/lang/finnish.txt | 2 +- src/lang/french.txt | 2 +- src/lang/frisian.txt | 2 +- src/lang/gaelic.txt | 2 +- src/lang/galician.txt | 2 +- src/lang/german.txt | 2 +- src/lang/greek.txt | 2 +- src/lang/hebrew.txt | 2 +- src/lang/hindi.txt | 2 +- src/lang/hungarian.txt | 2 +- src/lang/icelandic.txt | 2 +- src/lang/ido.txt | 2 +- src/lang/indonesian.txt | 2 +- src/lang/irish.txt | 2 +- src/lang/italian.txt | 2 +- src/lang/japanese.txt | 2 +- src/lang/korean.txt | 2 +- src/lang/latin.txt | 2 +- src/lang/latvian.txt | 2 +- src/lang/lithuanian.txt | 2 +- src/lang/luxembourgish.txt | 2 +- src/lang/macedonian.txt | 2 +- src/lang/malay.txt | 2 +- src/lang/maltese.txt | 2 +- src/lang/marathi.txt | 2 +- src/lang/norwegian_bokmal.txt | 2 +- src/lang/norwegian_nynorsk.txt | 2 +- src/lang/persian.txt | 2 +- src/lang/polish.txt | 106 +++++++++++++++--------------- src/lang/portuguese.txt | 2 +- src/lang/romanian.txt | 2 +- src/lang/russian.txt | 2 +- src/lang/serbian.txt | 2 +- src/lang/simplified_chinese.txt | 2 +- src/lang/slovak.txt | 2 +- src/lang/slovenian.txt | 2 +- src/lang/spanish.txt | 2 +- src/lang/spanish_MX.txt | 2 +- src/lang/swedish.txt | 2 +- src/lang/tamil.txt | 2 +- src/lang/thai.txt | 2 +- src/lang/traditional_chinese.txt | 2 +- src/lang/turkish.txt | 2 +- src/lang/ukrainian.txt | 23 ++++--- src/lang/urdu.txt | 2 +- src/lang/vietnamese.txt | 2 +- src/lang/welsh.txt | 2 +- 64 files changed, 149 insertions(+), 146 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 6dfc2ef2a4..1464775f3b 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -2203,7 +2203,7 @@ STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Jou reke STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Moontlike verbinding verlore STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Die laaste {NUM} seconde{P "" s} geen data het van die bediener gekom nie -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :algemeen fout STR_NETWORK_ERROR_CLIENT_DESYNC :desync fout STR_NETWORK_ERROR_CLIENT_SAVEGAME :kan nie kaart laai nie diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index ecb87db871..8372a2ecfa 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -2070,7 +2070,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}اسم STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}احتمال فقد الاتصال STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}اخر {NUM} ثواني لم تصل بيانات من السيرفر -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :خطاء عام STR_NETWORK_ERROR_CLIENT_DESYNC :خطأ في DESYNC STR_NETWORK_ERROR_CLIENT_SAVEGAME :لايمكن تحميل الخريطة diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 623a5da581..1cf05d136b 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -2088,7 +2088,7 @@ STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Zure ord STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Konexio galera posiblea STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Azkeneko {NUM} segunduetan ez da zerbitzaritik daturik jaso -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :Akats orokorra STR_NETWORK_ERROR_CLIENT_DESYNC :Sinkronizazio akatsa STR_NETWORK_ERROR_CLIENT_SAVEGAME :Ezin izan da mapa kargatu diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index a3bc2cbaf6..70152eab27 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2902,7 +2902,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Ваша STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Злучэньне згублена STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}На працягу {NUM} сэкунд{P ы аў аў} не атрымана ніякіх дадзеных з боку сэрвэра -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :агульная памылка STR_NETWORK_ERROR_CLIENT_DESYNC :памылка сынхранізацыі STR_NETWORK_ERROR_CLIENT_SAVEGAME :не ўдалося загрузіць мапу diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 536f11a225..78ad63e829 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -833,8 +833,8 @@ STR_NEWS_FIRST_BUS_ARRIVAL :{BIG_FONT}{BLAC STR_NEWS_FIRST_TRUCK_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeiro caminhão chega em {STATION}! STR_NEWS_FIRST_PASSENGER_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeiro bonde de passageiros chega em {STATION}! STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeiro bonde de carga chega em {STATION}! -STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeira embarcação chega nas {STATION}! -STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeira aeronave chega no {STATION}! +STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeira embarcação chega em {STATION}! +STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeira aeronave chega em {STATION}! STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Acidente de Trem!{}{COMMA} morrem na explosão após a colisão STR_NEWS_ROAD_VEHICLE_CRASH_DRIVER :{BIG_FONT}{BLACK}Acidente Rodoviário!{}Condutor morre na explosão após a colisão com um trem @@ -868,7 +868,7 @@ STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLAC STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Nov{G o a} {STRING} sendo plantada perto de {TOWN}! STR_NEWS_INDUSTRY_CLOSURE_GENERAL :{BIG_FONT}{BLACK}{STRING} anuncia o fechamento iminente! -STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS :{BIG_FONT}{BLACK}Problemas de abastecimento levam {STRING} a anunciar o fechamento iminente! +STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS :{BIG_FONT}{BLACK}Problemas de abastecimento fazem {STRING} anunciar o fechamento iminente! STR_NEWS_INDUSTRY_CLOSURE_LACK_OF_TREES :{BIG_FONT}{BLACK}Falta de árvores nas proximidades faz {STRING} anunciar o fechamento iminente! STR_NEWS_EURO_INTRODUCTION :{BIG_FONT}{BLACK}União Monetária Europeia!{}{}O Euro é introduzido como moeda única para as operações diárias em seu país! @@ -900,7 +900,7 @@ STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE} está ficando velho STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE} está ficando muito velho -STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} está ficando muito velho e necessita urgentemente ser substituído +STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} está ficando muito velho e precisa urgentemente ser substituído STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} não consegue encontrar um caminho para continuar STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} está perdido STR_NEWS_VEHICLE_UNPROFITABLE_YEAR :{WHITE}{VEHICLE} gerou um lucro de {CURRENCY_LONG} no último ano @@ -921,12 +921,12 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Oferta de subsídio expirou:{}{}{STRING} d{G e a} {STRING} para {STRING} agora não será subsidiado STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsídio retirado:{}{}Transportar {STRING} d{G e a} {STRING} para {STRING} não é mais subsidiado -STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subsídio de serviço oferecido:{}{}Primeiro transporte de {STRING} d{G e a} {STRING} para {STRING} receberá {UNITS_YEARS_OR_MINUTES} de subsídio da autoridade local! +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subsídio oferecido:{}{}Primeiro transporte de {STRING} d{G e a} {STRING} para {STRING} receberá {UNITS_YEARS_OR_MINUTES} de subsídio da autoridade local! ###length 4 -STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} d{G e a} {STRING} para {STRING} será pago a 150% pelos próximos {UNITS_YEARS_OR_MINUTES}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} d{G e a} {STRING} para {STRING} será pago a 200% pelos próximos {UNITS_YEARS_OR_MINUTES}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} d{G e a} {STRING} para {STRING} será pago a 300% pelos próximos {UNITS_YEARS_OR_MINUTES}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subsídio de serviço concedido a {STRING}!{}{}{STRING} d{G e a} {STRING} para {STRING} será pago a 400% pelos próximos {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subsídio concedido a {STRING}!{}{}{STRING} d{G e a} {STRING} para {STRING} será pago a 150% durante {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subsídio concedido a {STRING}!{}{}{STRING} d{G e a} {STRING} para {STRING} será pago a 200% durante {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subsídio concedido a {STRING}!{}{}{STRING} d{G e a} {STRING} para {STRING} será pago a 300% durante {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subsídio concedido a {STRING}!{}{}{STRING} d{G e a} {STRING} para {STRING} será pago a 400% durante {UNITS_YEARS_OR_MINUTES}! STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Tráfego caótico em {TOWN}!{}{}Programa de reconstrução de estradas financiado por {STRING} provoca 6 meses de sofrimento aos motoristas! STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}Tráfego caótico em {TOWN}!{}{}Programa de reconstrução de estradas financiado por {STRING} provoca 6 minutos de sofrimento aos motoristas! @@ -2252,7 +2252,7 @@ STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Editar STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Editar a altura máxima das montanhas no mapa STR_CHEAT_CHANGE_DATE :{LTBLUE}Alterar data: {ORANGE}{DATE_SHORT} STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Alterar ano atual -STR_CHEAT_SETUP_PROD :{LTBLUE}Ativar alteração de valores de produção: {ORANGE}{STRING} +STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir modificar os valores de produção: {ORANGE}{STRING} STR_CHEAT_STATION_RATING :{LTBLUE}Fixar classificações da estação em 100%: {ORANGE}{STRING} # Livery window @@ -2590,7 +2590,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Seu nome STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Possível perda de conexão STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Nos últimos {NUM} segundo{P "" s} nenhum dado chegou do servidor -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :erro geral STR_NETWORK_ERROR_CLIENT_DESYNC :erro/falha de sincronização STR_NETWORK_ERROR_CLIENT_SAVEGAME :não foi possível carregar o mapa @@ -3617,7 +3617,7 @@ STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} ( STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}População: {ORANGE}{COMMA}{BLACK} Casas: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} no último mês: {ORANGE}{COMMA}{BLACK} máx: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}{CARGO_LIST} no último minuto: {ORANGE}{COMMA}{BLACK} máx: {ORANGE}{COMMA} -STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Carga necessária para o crescimento da localidade: +STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Requisitos para o crescimento da localidade: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} necessário STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} necessário no inverno STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} entregado @@ -3647,7 +3647,7 @@ STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Classifi STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Ações disponíveis: STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista de ações disponíveis nesta localidade - Clique no item para mais detalhes -STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Executar +STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Fazer isto STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Executar a ação selecionada na lista acima ###length 8 @@ -3715,14 +3715,14 @@ STR_GOAL_QUESTION_BUTTON_CLOSE :Fechar # Subsidies window STR_SUBSIDIES_CAPTION :{WHITE}Subsídios -STR_SUBSIDIES_OFFERED_TITLE :{BLACK}Oferta de subsídios para execução de serviços: -STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING} d{G o a} {STRING} para {STRING}{YELLOW} ({STRING}) +STR_SUBSIDIES_OFFERED_TITLE :{BLACK}Subsídios oferecidos para serviços de transporte: +STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING} d{G e a} {STRING} para {STRING}{YELLOW} ({STRING}) STR_SUBSIDIES_NONE :{ORANGE}- Nenhum - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Serviços já subsidiados: -STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} d{G o a} {STRING} para {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) +STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} d{G e a} {STRING} para {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique em um serviço para centralizar visualização principal em uma indústria/localidade. Ctrl+Clique para abrir uma nova visualização na localização da indústria/localidade STR_SUBSIDIES_OFFERED_EXPIRY_DATE :até {DATE_SHORT} -STR_SUBSIDIES_OFFERED_EXPIRY_TIME :por {UNITS_MONTHS_OR_MINUTES} +STR_SUBSIDIES_OFFERED_EXPIRY_TIME :durante {UNITS_MONTHS_OR_MINUTES} STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :até {DATE_SHORT} STR_SUBSIDIES_SUBSIDISED_EXPIRY_TIME :{UNITS_MONTHS_OR_MINUTES} restante{P "" s} @@ -4549,7 +4549,7 @@ STR_ORDER_DROP_NO_LOADING :Não carregar STR_ORDER_TOOLTIP_FULL_LOAD :{BLACK}Alterar o modo de carregar da ordem selecionada STR_ORDER_TOGGLE_UNLOAD :{BLACK}Descarregar tudo -STR_ORDER_DROP_UNLOAD_IF_ACCEPTED :Descarregar se aceito +STR_ORDER_DROP_UNLOAD_IF_ACCEPTED :Descarregar se aceitado STR_ORDER_DROP_UNLOAD :Descarregar tudo STR_ORDER_DROP_TRANSFER :Transferir STR_ORDER_DROP_NO_UNLOADING :Não descarregar @@ -4583,7 +4583,7 @@ STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE :Porcentagem de STR_ORDER_CONDITIONAL_RELIABILITY :Confiabilidade STR_ORDER_CONDITIONAL_MAX_SPEED :Velocidade máxima STR_ORDER_CONDITIONAL_AGE :Idade (anos) -STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Necessita manutenção +STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Precisa de manutenção STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Sempre STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Tempo de vida restante (anos) STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Confiabilidade máxima @@ -4716,9 +4716,9 @@ STR_TIMETABLE_AND_TRAVEL_FOR :e viajar por {S STR_TIMETABLE_TOTAL_TIME :{BLACK}Este horário levará {STRING} para ser concluído STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Este horário levará pelo menos {STRING} para ser concluído (nem tudo está programado) -STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Atualmente este veículo está circulando pontualmente -STR_TIMETABLE_STATUS_LATE :{BLACK}Atualmente este veículo está circulando {STRING} atrasado -STR_TIMETABLE_STATUS_EARLY :{BLACK}Atualmente este veículo está circulando {STRING} adiantado +STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Atualmente este veículo está pontual +STR_TIMETABLE_STATUS_LATE :{BLACK}Atualmente este veículo está {STRING} atrasado +STR_TIMETABLE_STATUS_EARLY :{BLACK}Atualmente este veículo está {STRING} adiantado STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Este horário ainda não começou STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Este horário irá iniciar em {STRING} STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Este horário irá iniciar em {COMMA} segundos diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 39d3ccb9a2..b87e821ef3 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -2278,7 +2278,7 @@ STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Отне STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Възможна загуба на връзката STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Последните {NUM} сек. не се е получила информация от сървъра -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :обща грешка STR_NETWORK_ERROR_CLIENT_DESYNC :загуба на синхронизация STR_NETWORK_ERROR_CLIENT_SAVEGAME :не може да зареди картата diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 12d4c34e32..d48c497b8f 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -2590,7 +2590,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}El vostr STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Possible pèrdua de connexió STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Durant el darrer {NUM} segon{P "" s} no han arribat dades del servidor -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :error general STR_NETWORK_ERROR_CLIENT_DESYNC :error de sincronització STR_NETWORK_ERROR_CLIENT_SAVEGAME :no es pot carregar el mapa diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index a894b4fd55..36c2e5f642 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -1007,7 +1007,7 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Вырн # Network messages -###length 21 +###length 22 # Network related errors STR_NETWORK_SERVER_MESSAGE :*** {1:STRING} diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 832119df26..724e182ef3 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -2344,7 +2344,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Tvoje im STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Moguć gubitak veze STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Zadnjih {NUM} sekundi nisu primljeni podaci sa servera -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :opća greška STR_NETWORK_ERROR_CLIENT_DESYNC :greška u sinkronizaciji STR_NETWORK_ERROR_CLIENT_SAVEGAME :nije moguće učitati kartu diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 38ded0e973..7789f85d76 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -2673,7 +2673,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Jméno v STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Pravděpodobná ztráta spojení STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Během poslední{P 0 "" ch ch} {NUM} sekund{P y "" ""} nepřišla ze serveru žádná data -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :všeobecná chyba STR_NETWORK_ERROR_CLIENT_DESYNC :chyba v synchronizaci STR_NETWORK_ERROR_CLIENT_SAVEGAME :nelze nahrát hru diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 646c39d02c..1770c0772a 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -2589,7 +2589,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Dit spil STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Mulig forbindelses tab STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}De{P 0 t ""} sidste {NUM} sekund{P "" er} er der ikke ankommet data fra serveren -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :generel fejl STR_NETWORK_ERROR_CLIENT_DESYNC :synkroniseringsfejl STR_NETWORK_ERROR_CLIENT_SAVEGAME :kunne ikke hente kortet diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index b82bf6b157..57822bf0ed 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -2589,7 +2589,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Je spele STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Mogelijk verbinding verbroken STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}In de afgelopen {NUM} seconde{P "" n} is er geen data ontvangen van de server -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :algemene fout STR_NETWORK_ERROR_CLIENT_DESYNC :desynchronisatiefout STR_NETWORK_ERROR_CLIENT_SAVEGAME :kan kaart niet laden diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index ee9400f76f..f79c32acec 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -2589,7 +2589,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Your pla STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Possible connection loss STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}The last {NUM} second{P "" s} no data has arrived from the server -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :general error STR_NETWORK_ERROR_CLIENT_DESYNC :desync error STR_NETWORK_ERROR_CLIENT_SAVEGAME :could not load map diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index dfd6ca2bff..87fa19c2fe 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -2589,7 +2589,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Your pla STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Possible connection loss STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}The last {NUM} second{P "" s} no data has arrived from the server -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :general error STR_NETWORK_ERROR_CLIENT_DESYNC :desync error STR_NETWORK_ERROR_CLIENT_SAVEGAME :could not load map diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 3954ffda51..56e91dbcf5 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -2555,7 +2555,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Via luda STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Ebla konektoperdo STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Ne alvenis datumoj de la servilo dum la pasinta{P 0 "" j} {NUM} sekundo{P 0 "" j} -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :ĝenerala eraro STR_NETWORK_ERROR_CLIENT_DESYNC :sensinkroneca eraro STR_NETWORK_ERROR_CLIENT_SAVEGAME :ne povis ŝarĝi mapon diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 27a9885bbe..db972c203b 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -2646,7 +2646,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Sinu mä STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Võimalik ühenduse katkemine STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Viimase {NUM} sekundi jooksul pole serverilt andmeid saabunud -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :üldine viga STR_NETWORK_ERROR_CLIENT_DESYNC :sünkroniseerimise viga STR_NETWORK_ERROR_CLIENT_SAVEGAME :ei saa kaarti laadida diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 3a2cf44873..64d5129a6b 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -2000,7 +2000,7 @@ STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Tín tel STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Møguligt sambands slit STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Tey síðstu {NUM} sekundini eru eingin dáta komin fram frá seraranum -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :almenn villa STR_NETWORK_ERROR_CLIENT_DESYNC :desync villa STR_NETWORK_ERROR_CLIENT_SAVEGAME :eydnaðist ikki at heinta kort diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 2abe6c5861..f7a52f4d97 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -2589,7 +2589,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Pelaajan STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Mahdollinen yhteyden menetys STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Viimeisen {NUM} sekunnin{P "" ""} aikana palvelimelta ei ole vastaanotettu tietoja -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :yleinen virhe STR_NETWORK_ERROR_CLIENT_DESYNC :tahdistusvirhe STR_NETWORK_ERROR_CLIENT_SAVEGAME :karttaa ei voitu ladata diff --git a/src/lang/french.txt b/src/lang/french.txt index 1c7cf1b157..0f70007496 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -2590,7 +2590,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Votre no STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Possible perte de connexion STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Aucunes données reçues du serveur depuis {NUM} seconde{P "" s} -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :erreur générale STR_NETWORK_ERROR_CLIENT_DESYNC :erreur de désynchronisation STR_NETWORK_ERROR_CLIENT_SAVEGAME :chargement de la carte impossible diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index 99adc3b497..fd4860a2ac 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -2120,7 +2120,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Disse na STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Mooglik ferbinning kwyt STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}De lêste{NUM} seconde{P "" s} is gjin data oankom fan e server -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :algemiene flater STR_NETWORK_ERROR_CLIENT_SAVEGAME :koe it lân net lade STR_NETWORK_ERROR_CLIENT_CONNECTION_LOST :ferbining kwyt diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index c579931255..c164597285 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -2374,7 +2374,7 @@ STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Bha an c STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Dh'fhaoidte gun deach ceangal air chall STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Cha tàinig dàta sam bith on fhrithealaiche fad {NUM} {P diog dhiog diogan diog} -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :mearachd choitcheann STR_NETWORK_ERROR_CLIENT_DESYNC :mearachd sioncronachaidh STR_NETWORK_ERROR_CLIENT_SAVEGAME :cha b' urrainn dhuinn am mapa a luchdadh diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 55de166b87..dfd284472d 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -2590,7 +2590,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}O teu no STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Posible perda da conexión STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Nos últimos {NUM} segundo{P "" s} non chegaron datos do servidor -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :erro xeral STR_NETWORK_ERROR_CLIENT_DESYNC :erro de descincronización STR_NETWORK_ERROR_CLIENT_SAVEGAME :no se puido carga-lo mapa diff --git a/src/lang/german.txt b/src/lang/german.txt index c3c1d8e400..7cfc2bc775 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -2590,7 +2590,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Ihr Spie STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Möglicher Verbindungsabbruch STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Die letzte{P 0 "" n} {NUM} Sekunde{P "" n} wurden keine Daten vom Server empfangen -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :Allgemeiner Fehler STR_NETWORK_ERROR_CLIENT_DESYNC :Synchronisationsfehler STR_NETWORK_ERROR_CLIENT_SAVEGAME :Spielfeld konnte nicht geladen werden diff --git a/src/lang/greek.txt b/src/lang/greek.txt index c2e494b892..6cad1496a2 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -2556,7 +2556,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Το ό STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Πιθανή απώλεια σύνδεσης STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}T{P 0 ο α} τελευταί{P 0 ο α} {NUM} δευτερόλεπτ{P ο α} δεν έχουν παραληφθεί καθόλου δεδομένα από τον διακομιστή -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :γενικό πρόβλημα STR_NETWORK_ERROR_CLIENT_DESYNC :πρόβλημα συγχρονισμού STR_NETWORK_ERROR_CLIENT_SAVEGAME :δεν ήταν δυνατή η φόρτωση του χάρτη diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index d43a62efbd..61153d52f4 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -2258,7 +2258,7 @@ STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}למחש STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}איבוד קשר אפשרי STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}ב- {NUM} שני{P "יה" "ות"} האחרוות לא התקבל מידע מהשרת -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :שגיאה כללית STR_NETWORK_ERROR_CLIENT_DESYNC :שגירת סינכרון STR_NETWORK_ERROR_CLIENT_SAVEGAME :טעינת מפה נכשלה diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index bbb0a4c6ff..30c1dabb8e 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -811,7 +811,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :गलत प STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}संपर्क विच्छेद संभावित -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :सामान्य त्रुटि STR_NETWORK_ERROR_CLIENT_SAVEGAME :मानचित्र लोड नहीं हो सका diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 99162f2193..b36d8f0d3f 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -2652,7 +2652,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}A játé STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Lehetséges, hogy elveszett a kapcsolat STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Az elmúlt {NUM} másodpercben nem érkezett adat a szervertől -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :általános hiba STR_NETWORK_ERROR_CLIENT_DESYNC :szinkronizálási hiba STR_NETWORK_ERROR_CLIENT_SAVEGAME :térkép betöltési hiba diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 179333a8a2..1c647aa56c 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -2038,7 +2038,7 @@ STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Tölvan STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Hefur líklega misst sambandið STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Síðustu {NUM} sekúndu{P "" r} hafa engin gögn borist frá þjóninum -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :almenn villa STR_NETWORK_ERROR_CLIENT_DESYNC :samstillingarvilla STR_NETWORK_ERROR_CLIENT_SAVEGAME :gat ekki opnað kort diff --git a/src/lang/ido.txt b/src/lang/ido.txt index 4b1ec30266..0ba0d4e163 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -893,7 +893,7 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Tu sendis tro multa imperi ad la servero -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_TOO_MANY_COMMANDS :sendinta tro multa imperi # Network related errors diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index b6477b02ac..1b86a05322 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -2539,7 +2539,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Nama pem STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Koneksi mungkin terputus STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Dalam {NUM} detik tak ada data diterima dari server -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :Kesalahan umum STR_NETWORK_ERROR_CLIENT_DESYNC :Kesalahan de-sinkronisasi STR_NETWORK_ERROR_CLIENT_SAVEGAME :Tak dapat memuat peta diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 225345e1c5..0c924c4744 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -2349,7 +2349,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Níl d'a STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Seans gur cailleadh an nasc STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Le {NUM} {P sh sh s s s} ní bhfuarthas aon sonraí ón bhfreastalaí -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :earráid ghinearálta STR_NETWORK_ERROR_CLIENT_DESYNC :earráid dísioncronaithe STR_NETWORK_ERROR_CLIENT_SAVEGAME :níorbh fhéidir an léarscáil a lódáil diff --git a/src/lang/italian.txt b/src/lang/italian.txt index b34770530e..c9169f681e 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -2624,7 +2624,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Il nome STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Possibile perdita di connessione STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Per {NUM} second{P o i} non sono stati ricevuti dati dal server -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :errore generale STR_NETWORK_ERROR_CLIENT_DESYNC :errore di sincronizzazione STR_NETWORK_ERROR_CLIENT_SAVEGAME :impossibile caricare la mappa diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 7e308f8b10..0e03d0d796 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -2421,7 +2421,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}プレ STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}接続切断の可能性 STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}過去{NUM}秒間にわたりサーバーからデータを受信できていません -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :一般エラー STR_NETWORK_ERROR_CLIENT_DESYNC :同期エラー STR_NETWORK_ERROR_CLIENT_SAVEGAME :マップロード失敗 diff --git a/src/lang/korean.txt b/src/lang/korean.txt index dc39605707..9a7d68d4ae 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2590,7 +2590,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}사용 STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}가능한 연결 손실 STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}마지막 {NUM}초간 서버로부터 데이터를 받지 못했습니다 -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :일반 오류 STR_NETWORK_ERROR_CLIENT_DESYNC :비동기화 오류 STR_NETWORK_ERROR_CLIENT_SAVEGAME :지도 불러오기 실패 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 92c47b87ae..c7d49e4dee 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -2376,7 +2376,7 @@ STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Computat STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Connexus forsitan amissus STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}In {NUM} prior{P e ibus} secund{P o is} nulla data e servatro accipitur -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :error generalis STR_NETWORK_ERROR_CLIENT_DESYNC :error desync STR_NETWORK_ERROR_CLIENT_SAVEGAME :non potuit legere tabulam diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 49f2bc92d4..8e550a35e6 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -2593,7 +2593,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Jūsu sp STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Iespējams savienojuma zudums STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Nav datu no servera jau {NUM} sekund{P i es ""} -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :galvenā kļūda STR_NETWORK_ERROR_CLIENT_DESYNC :asinhronizācijas kļūda STR_NETWORK_ERROR_CLIENT_SAVEGAME :nevar ielādēt karti diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index e8ea2d2590..5a5bdacd65 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -2571,7 +2571,7 @@ STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Per ilga STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Galimas ryšio praradimas STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Paskutines {NUM} sekund{P ė ės žių} jokių duomenų iš serverio -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :klaida STR_NETWORK_ERROR_CLIENT_DESYNC :sinchronizacijos klaida STR_NETWORK_ERROR_CLIENT_SAVEGAME :negali užkrauti žemėlapio diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index f00b751abb..c792bcc4c0 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -2588,7 +2588,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Däi Spi STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Méigleche Verbindungsverloscht STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Déi lescht {NUM} Sekonn{P "" e} si keng Date vum Server komm -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :generellen Feeler STR_NETWORK_ERROR_CLIENT_DESYNC :desync Feeler STR_NETWORK_ERROR_CLIENT_SAVEGAME :konnt d'Kaart net lueden diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index 637ddfa540..44bd9b1723 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -1226,7 +1226,7 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Ти беше испраќање премногу команди на серверот -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_TOO_MANY_COMMANDS :испраќа премногу команди # Network related errors diff --git a/src/lang/malay.txt b/src/lang/malay.txt index a5d391f1b2..ed6e37ed7a 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1935,7 +1935,7 @@ STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Komputer STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Mungkin kehilangan penyambungan STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Tiada data diterima pada beberapa {NUM} saat yang terakhir -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :kesilapan am STR_NETWORK_ERROR_CLIENT_DESYNC :kesilapan sinkronisasi (desync) STR_NETWORK_ERROR_CLIENT_SAVEGAME :tidak boleh membuka peta diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index 986f8e4d1b..4c41075122 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -821,7 +821,7 @@ STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES} # Network messages -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :reviżjoni ħażina STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :isem diġa qed jintuża STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :password ħażin diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index 5477d99f17..dac56fa193 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -1147,7 +1147,7 @@ STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES} STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE} संपर्क तुटला असण्याची शक्यता STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE} गेल्या {NUM} सेकंदांत सर्वरकडून काहीच माहिती आलेली नाही -###length 21 +###length 22 # Network related errors STR_NETWORK_SERVER_MESSAGE :*** {1:STRING} diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 8c1d2dd9eb..671d576a71 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -2591,7 +2591,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Spillern STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Mulig tap av tilkobling STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE} Siste {NUM} sekund{P "" er} har ingen data ankommet fra tjeneren -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :generell feil STR_NETWORK_ERROR_CLIENT_DESYNC :synkroniseringsfeil STR_NETWORK_ERROR_CLIENT_SAVEGAME :kunne ikke åpne kartet diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 2ce907387b..5cc21b2d1b 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -2095,7 +2095,7 @@ STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Datamask STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Mogleg tilkoblingsbrot STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Dei siste {NUM} sekund er ingen data mottatt frå serveren -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :generell feil STR_NETWORK_ERROR_CLIENT_DESYNC :synkroniseringsfeil STR_NETWORK_ERROR_CLIENT_SAVEGAME :klarte ikkje å laste inn kartet diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 80d7668f65..68274b0bdf 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -1924,7 +1924,7 @@ STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}شما STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}اتصال مورد استفاده قطع شد STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}در {NUM} ثانیه گذشته هیچ داده ای از سرویس دهنده دریافت نگردیده -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :خطای اصلی STR_NETWORK_ERROR_CLIENT_DESYNC :خطای ناهمگام سازی STR_NETWORK_ERROR_CLIENT_SAVEGAME :نمی توان نقشه را بارگزاری کرد diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 739003bf28..9105a3c14a 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1190,11 +1190,11 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Wyświet # Status bar messages STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Pokaż ostatnią wiadomość lub ogłoszenie -STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - -STR_STATUSBAR_PAUSED :{YELLOW}* * PAUZA * * -STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * PAUZA (oczekiwanie na aktualizację wykresów) * * +STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - +STR_STATUSBAR_PAUSED :{YELLOW}* * PAUZA * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * PAUZA (aktualizowanie grafu połączeń) * * STR_STATUSBAR_AUTOSAVE :{RED}AUTOZAPIS -STR_STATUSBAR_SAVING_GAME :{RED}* * ZAPISYWANIE GRY * * +STR_STATUSBAR_SAVING_GAME :{RED}* * ZAPISYWANIE GRY * * STR_STATUSBAR_SPECTATOR :{WHITE}(obserwator) STR_STATUSBAR_INFINITE_MONEY :{WHITE}(nieskończone pieniądze) @@ -1434,9 +1434,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Skaluj f STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Zaznacz to pole, aby skalować fazy krawędzi zgodnie z rozmiarem interfejsu STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Użyj tradycyjnego fonta typu sprite -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Zaznacz to pole, jeśli wolisz używać tradycyjnego fonta typu sprite o stałym rozmiarze. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Zaznacz to pole, jeśli wolisz używać tradycyjnego fonta typu sprite o stałym rozmiarze STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Antyaliasing fontów -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Zaznacz to pole, aby wygładzać fonty o zmiennym rozmiarze. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Zaznacz to pole, aby wygładzać fonty o zmiennym rozmiarze STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1739,7 +1739,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Nachylenie stok STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Pochylenie pola stoku dla pojazdów drogowych. Wyższa wartość utrudnia podjazd pod górę STR_CONFIG_SETTING_FORBID_90_DEG :Zabroń pociągom skręcać o 90 stopni: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90-stopniowy zakręt występuje wtedy, gdy bezpośrednio po poziomym odcinku toru występuje odcinek pionowy (lub na odwrót), zmuszając pociąg do ostrzejszego skrętu (zamiast normalnego, 45-stopniowego skrętu w innych kombinacjach torów) +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Zakręty o 90 stopni mają miejsce, gdy po torze o kierunku poziomym na sąsiednim polu występuje bezpośrednio tor o kierunku pionowym - co sprawia, że pociąg podczas przechodzenia przez krawędź pola skręca o 90 stopni, zamiast zwykłych 45 stopni w przypadku innych kombinacji torów STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Pozwól na łączenie stacji nie sąsiadujących bezpośrednio: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Pozwól na dodawanie części do stacji bez bezpośredniego stykania się z istniejącymi częściami, używając Ctrl podczas umieszczania nowych części @@ -1875,7 +1875,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Pojazdy nigdy n STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kiedy włączone, wszystkie modele pojazdów pozostają dostępne na zawsze od daty ich wprowadzenia STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Miara czasu: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Wybierz jednostki pomiaru czasu w grze. Nie można tego zmienić później.{}{}Kalendarz jest klasycznym trybem OpenTTD, z rokiem składającym się z 12 miesięcy, a każdy miesiąc ma 28-31 dni.{}{}W trybie zegarowym produkcja ładunków oraz finanse są oparte na jednominutowych przyrostach, czyli mniej więcej tak długo, jak trwa 30-dniowy miesiąc w trybie kalendarzowym. Są one pogrupowane w 12-minutowe okresy, co z kolei odpowiada rokowi w trybie kalendarzowym.{}{}W obu metodach zawsze funkcjonuje klasyczny kalendarz, który jest używany do dat wprowadzenia pojazdów, domów i innej infrastruktury. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Wybierz jednostki pomiaru czasu w grze. Nie można tego zmienić później.{}{}Kalendarz jest klasycznym trybem OpenTTD, z rokiem składającym się z 12 miesięcy, a każdy miesiąc ma 28-31 dni.{}{}W trybie zegarowym produkcja ładunków oraz finanse są oparte na jednominutowych przyrostach, czyli mniej więcej tak długo, jak trwa 30-dniowy miesiąc w trybie kalendarzowym. Są one pogrupowane w 12-minutowe okresy, co z kolei odpowiada rokowi w trybie kalendarzowym.{}{}W obu metodach zawsze funkcjonuje klasyczny kalendarz, który jest używany do dat wprowadzenia pojazdów, domów i innej infrastruktury ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalendarz STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Tarcza zegara @@ -1909,7 +1909,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Czas wyświetla STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Czas wyświetlania komunikatów o błędach w czerwonym oknie. Niektóre (krytyczne) komunikaty o błędach nie zamykają się automatycznie po tym czasie, tylko muszą zostać zamknięte ręcznie STR_CONFIG_SETTING_HOVER_DELAY :Pokaż podpowiedzi: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Opóźnienie wyświetlania podpowiedzi po najechaniu myszą na element interfejsu. Ewentualnie podpowiedzi mogą być przypisane do prawego przycisku myszy, jeśli wartość ta będzie ustawiona na 0. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Opóźnienie wyświetlania podpowiedzi po najechaniu myszą na element interfejsu. Ewentualnie podpowiedzi mogą być przypisane do prawego przycisku myszy, jeśli wartość ta będzie ustawiona na 0 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Zatrzymaj kursor przez {COMMA} milisekund{P ę y ""} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :prawy klik @@ -1940,8 +1940,8 @@ STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Wybierz wysoko STR_CONFIG_SETTING_INDUSTRY_DENSITY :Liczba przedsiębiorstw: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Określa liczbę przedsiębiorstw na początku i w trakcie gry -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maksymalna odległość od krawędzi dla rafinerii: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Rafinerie są budowane tylko w pobliżu krawędzi map, to znaczy na wybrzeżach dla map wyspiarskich. To ustawienie pozwala ograniczyć jak daleko od krawędzi mapy mogą być budowane rafinerie i platformy wiertnicze. Na mapach większych niż 256 pól, wartość ta jest skalowana w górę. +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maksymalna odległość rafinerii i platform wiertniczych od krawędzi mapy: {STRING} +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limit odległości rafinerii i platform wiertniczych od krawędzi mapy. Na mapach wyspiarskich wartość ta umożliwia budowanie ich w pobliżu wybrzeża. Na mapach większych niż 256 pól wartość ta jest odpowiednio zwiększana STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Wysokość granicy wiecznych śniegów: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Wybierz, na jakiej wysokości zaczyna zalegać śnieg w krajobrazie arktycznym. Poziom pokrywy śnieżnej wpływa na rozmieszczenie przedsiębiorstw i na warunki rozwoju miast. Może być zmodyfikowana poprzez Edytor Scenariuszy, w innym przypadku jest obliczana za pomocą ustawienia „pokrycie śniegiem” @@ -1963,7 +1963,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Pofałdowany STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Bardzo pofałdowany STR_CONFIG_SETTING_VARIETY :Różnorodność terenu: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Wybierz, czy mapa ma zawierać zarówno obszary górskie, jak i płaskie. Im większa różnorodność, tym większe różnice wysokości między obszarami górskimi i płaskimi. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Wybierz, czy mapa ma zawierać zarówno obszary górskie, jak i płaskie. Im większa różnorodność, tym większe różnice wysokości między obszarami górskimi i płaskimi STR_CONFIG_SETTING_RIVER_AMOUNT :Liczba rzek: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Określa liczbę rzek na mapie @@ -2134,10 +2134,10 @@ STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatycznie u STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatycznie usuwaj sygnały, które przeszkadzają w budowie toru. Pamiętaj, że może to doprowadzić do zderzenia pociągów, w przypadku usunięcia ważnych sygnałów STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Ograniczenie prędkości przyspieszonego czasu w grze: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Ograniczenie prędkości gry, kiedy przyspieszenie czasu jest włączone. 0 = bez ograniczenia (tak szybko, jak pozwoli na to komputer). Wartości poniżej 100% spowolnią grę. Górny limit jest zależny od specyfikacji komputera i może się różnić w zależności od rozgrywki. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Ograniczenie prędkości gry, kiedy przyspieszenie czasu jest włączone. 0 = bez ograniczenia (tak szybko, jak pozwala na to komputer). Wartości poniżej 100% spowalniają grę. Górny limit jest zależny od specyfikacji komputera i może się różnić w zależności od rozgrywki STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normalnej prędkości gry ###setting-zero-is-special -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Brak ograniczenia (tak szybko, jak pozwoli na to komputer) +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Brak ograniczenia (tak szybko, jak pozwala na to komputer) STR_CONFIG_SETTING_SOUND_TICKER :Pasek informacji: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Odtwarzaj dźwięk dla podsumowania wiadomości @@ -2198,11 +2198,11 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Pozwól kompute STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Liczba wysyłanych kodów instrukcji przed zawieszeniem skryptów: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maksymalna liczba kroków obliczeniowych, jakie skrypt może zrobić w jednej kolejce STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maksymalne zużycie pamięci na skrypt: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Ilość pamięci jaką może zużywać pojedynczy skrypt zanim zostanie przymusowo zakończony. Może wymagać zwiększenia dla większych map. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Ile pamięci może wykorzystać pojedynczy skrypt, zanim zostanie przymusowo zakończony. Może być konieczne zwiększenie tej wartości dla dużych map STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Okres między serwisowaniami w procentach: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Kiedy włączone, pojazdy podejmują próbę serwisowania, gdy ich niezawodność spadnie o dany procent maksymalnej niezawodności.{}{}Na przykład, jeśli maksymalna niezawodność pojazdu wynosi 90%, a interwał serwisowy wynosi 20%, pojazd podejmie próbę serwisowania, gdy osiągnie 72% niezawodności. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Kiedy włączone, pojazdy podejmują próbę serwisowania, gdy ich niezawodność spadnie o dany procent maksymalnej niezawodności.{}{}Na przykład, jeśli maksymalna niezawodność pojazdu wynosi 90%, a interwał serwisowy wynosi 20%, pojazd podejmie próbę serwisowania, gdy osiągnie 72% niezawodności STR_CONFIG_SETTING_SERVINT_TRAINS :Domyślny interwał serwisowania pociągów: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Ustaw domyślny okres serwisowania dla nowych pojazdów kolejowych, jeśli takowy nie istnieje dla określonego pojazdu @@ -2285,13 +2285,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Rok, w którym STR_CONFIG_SETTING_STARTING_YEAR :Data rozpoczęcia gry: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Punktacja na koniec roku: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Rok, w którym gra się kończy na cel punktacji. Na koniec tego roku, punkty firmy są zarejestrowane i ekran wyników najwyższych jest pokazywany, ale gracze mogą po tym dalej grać.{}Jeżeli jest to przed rokiem startowym, ekran wyników najwyższych nie jest nigdy pokazywany. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Rok zakończenia gry do celów klasyfikacji punktowej. Na koniec podanego roku wynik firmy jest rejestrowany i zostaje wyświetlony ekran z najwyższymi wynikami, ale gracze mogą grać dalej.{}Jeśli jest to rok przed datą rozpoczęcia, ekran z najwyższymi wynikami w ogóle nie jest wyświetlany STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nigdy STR_CONFIG_SETTING_ECONOMY_TYPE :Typ ekonomii: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Płynna ekonomia oznacza, że zmiany w produkcji zachodzą częściej i w mniejszych krokach. Zamrożona gospodarka zatrzymuje zmiany w produkcji i zamykanie przedsiębiorstw. To ustawienie może nie mieć żadnego wpływu, jeśli przemysł jest regulowany przez NewGRF-y. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Płynna ekonomia oznacza, że zmiany w produkcji zachodzą częściej i w mniejszych krokach. Zamrożona gospodarka zatrzymuje zmiany w produkcji i zamykanie przedsiębiorstw. To ustawienie może nie mieć żadnego wpływu, jeśli przemysł jest regulowany przez NewGRF-y ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Oryginalna STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Płynna @@ -2346,7 +2346,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Dozwolone STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Dozwolone, dowolny układ miasta STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Generowanie ładunku przez miasta: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Ilość ładunku produkowana przez domy w mieście względem ogólnej populacji miasta.{}Wzrost kwadratowy: miasto o podwojonej wielkości generuje czterokrotnie więcej pasażerów.{}Wzrost liniowy: miasto o podwojonej wielkości generuje dwukrotnie więcej pasażerów +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Ilość ładunku produkowanego przez domy w mieście względem ogólnej populacji miasta.{}Wzrost kwadratowy: miasto dwa razy większe generuje czterokrotnie więcej pasażerów.{}Wzrost liniowy: miasto dwa razy większe generuje dwukrotnie więcej pasażerów ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kwadratowy (originalny) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Liniowy @@ -2387,7 +2387,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Najwyższa używana rozdzielczość sprite'ów: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Ogranicz maksymalną rozdzielczość dla sprite'ów. Ograniczenie rozdzielczości sprite'ów spowoduje brak użycia grafiki w wysokiej rozdzielczości, nawet, jeśli jest ona dostępna. Może to pomóc w utrzymaniu jednolitego wyglądu gry, gdy używasz mieszanki plików GRF z grafiką w wysokiej rozdzielczości i bez niej +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Ogranicz maksymalną rozdzielczość dla sprite'ów. Ograniczenie rozdzielczości sprite'ów spowoduje brak użycia grafiki w wysokiej rozdzielczości, nawet jeśli jest ona dostępna. Może to pomóc w zachowaniu jednolitego wyglądu gry, jeśli używasz mieszanki plików GRF z grafiką w wysokiej rozdzielczości i bez niej ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2416,13 +2416,13 @@ STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Przeznacz {STRI STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Czas potrzebny na każde przeliczenie komponentu grafu połączeń. Po rozpoczęciu przeliczania, tworzony jest wątek, który może działać przez podaną liczbę sekund. Im mniejszą wartość ustawisz, tym większe prawdopodobieństwo, że wątek nie zostanie ukończony w wyznaczonym czasie. Wtedy gra zatrzymuje się do czasu jego zakończenia („lag”). Im większą wartość ustawisz, tym dłużej będzie trwała aktualizacja dystrybucji, gdy zmienią się trasy STR_CONFIG_SETTING_DISTRIBUTION_PAX :Tryb dystrybucji dla pasażerów: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :Tryb „symetryczny” oznacza, że mniej więcej tyle samo pasażerów będzie podróżować ze stacji A do stacji B, co z B do A. Tryb „asymetryczny” oznacza, że w obu kierunkach może podróżować różna liczba pasażerów. Tryb „ręczny” oznacza, że dla pasażerów nie będzie przeprowadzana dystrybucja automatyczna. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :Tryb „symetryczny” oznacza, że mniej więcej tyle samo pasażerów będzie podróżować ze stacji A do stacji B, co z B do A. Tryb „asymetryczny” oznacza, że w obu kierunkach może podróżować różna liczba pasażerów. Tryb „ręczny” oznacza, że dla pasażerów nie będzie przeprowadzana dystrybucja automatyczna STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Tryb dystrybucji dla poczty: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :Tryb „symetryczny” oznacza, że mniej więcej taka sama ilość poczty zostanie wysłana ze stacji A do stacji B, co z B do A. Tryb „asymetryczny” oznacza, że w obu kierunkach może być wysyłana różna ilość poczty. Tryb „ręczny” oznacza, że dla poczty nie będzie przeprowadzana dystrybucja automatyczna. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :Tryb „symetryczny” oznacza, że mniej więcej taka sama ilość poczty zostanie wysłana ze stacji A do stacji B, co z B do A. Tryb „asymetryczny” oznacza, że w obu kierunkach może być wysyłana różna ilość poczty. Tryb „ręczny” oznacza, że dla poczty nie będzie przeprowadzana dystrybucja automatyczna STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Tryb dystrybucji dla klasy ładunków CHRONIONYCH: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Klasa ładunków CHRONIONYCH zawiera kosztowności w klimacie umiarkowanym, diamenty w tropikalnym lub złoto w klimacie arktycznym. NewGRF-y mogą to zmienić. Tryb „symetryczny” oznacza, że mniej więcej taka sama ilość danego ładunku zostanie wysłana ze stacji A do stacji B, co z B do A. Tryb „asymetryczny” oznacza, że w obu kierunkach mogą być wysyłane różne ilości danego ładunku. Tryb „ręczny” oznacza, że dla danego ładunku nie będzie przeprowadzana dystrybucja automatyczna. Zaleca się ustawienie tej opcji na asymetryczną lub ręczną w klimacie arktycznym lub tropikalnym, ponieważ tam banki jedynie odbierają ładunek. Dla klimatu umiarkowanego możesz wybrać symetryczny, aby banki odsyłały kosztowności do pierwotnego banku. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Klasa ładunków CHRONIONYCH zawiera kosztowności w klimacie umiarkowanym, diamenty w tropikalnym lub złoto w klimacie arktycznym. NewGRF-y mogą to zmienić. Tryb „symetryczny” oznacza, że mniej więcej taka sama ilość danego ładunku zostanie wysłana ze stacji A do stacji B, co z B do A. Tryb „asymetryczny” oznacza, że w obu kierunkach mogą być wysyłane różne ilości danego ładunku. Tryb „ręczny” oznacza, że dla danego ładunku nie będzie przeprowadzana dystrybucja automatyczna. Zaleca się ustawienie tej opcji na asymetryczną lub ręczną w klimacie arktycznym lub tropikalnym, ponieważ tam banki jedynie odbierają ładunek. Dla klimatu umiarkowanego możesz wybrać symetryczny, aby banki odsyłały kosztowności do pierwotnego banku STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Tryb dystrybucji dla pozostałych klas ładunków: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :Tryb „asymetryczny” oznacza, że w obu kierunkach mogą być wysyłane różne ilości ładunków. Tryb „ręczny” oznacza, że dla takich ładunków nie będzie przeprowadzana dystrybucja automatyczna. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :Tryb „asymetryczny” oznacza, że w obu kierunkach mogą być wysyłane różne ilości ładunków. Tryb „ręczny” oznacza, że dla takich ładunków nie będzie przeprowadzana dystrybucja automatyczna ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :ręczny STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymetryczny @@ -2432,12 +2432,12 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Dokładność d STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Im wyższą wartość ustawisz, tym więcej czasu procesor będzie potrzebował na obliczenie grafu połączeń. Jeśli będzie to trwało zbyt długo, możesz zauważyć opóźnienia. Jeśli jednak ustawisz niską wartość, dystrybucja będzie niedokładna i możesz zauważyć, że ładunki nie są wysyłane do miejsc, gdzie się ich spodziewasz STR_CONFIG_SETTING_DEMAND_DISTANCE :Wpływ odległości na dystrybucję: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Jeśli ładunki z jednej stacji trafiają na kilka różnych stacji, na ich dystrybucję wpływ ma odległość. Im wyższą wartość ustawisz, tym bliższe stacje będą preferowane. Zerowa wartość ustawienia sprawi, że odległość nie będzie wpływała na podział dystrybucji. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Jeśli ładunki z jednej stacji trafiają na kilka różnych stacji, na ich dystrybucję wpływ ma odległość. Im wyższą wartość ustawisz, tym bliższe stacje będą preferowane. Zerowa wartość ustawienia sprawi, że odległość nie będzie wpływała na podział dystrybucji STR_CONFIG_SETTING_DEMAND_SIZE :Ilość powracającego ładunku dla trybu symetrycznego: {STRING} STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Ustawienie tego na mniej niż 100% powoduje, że symetryczna dystrybucja zachowuje się podobnie do asymetrycznej. Mniej ładunku będzie zwróconego jeśli określona ilość zostanie wysłana do stacji. Jeśli ustawisz to na 0%, to symetryczna dystrybucja zachowuje się jak asymetryczna STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Nasycenie krótkich tras przed wybraniem tras o dużej przepustowości: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Często istnieje wiele możliwych tras pomiędzy dwiema danymi stacjami. Mechanizm dystrybucji ładunków najpierw nasyci najkrótszą trasę, następnie użyje drugiej najkrótszej trasy, aż do jej nasycenia itd. Nasycenie jest ustalane na podstawie szacunkowej oceny przepustowości i planowanego wykorzystania. Po nasyceniu wszystkich tras, jeśli nadal istnieje zapotrzebowanie, algorytm przeciąży wszystkie trasy, preferując te o dużej przepustowości. W większości przypadków algorytm nie oszacuje jednak dokładnie przepustowości. To ustawienie pozwala określić, do jakiej wartości procentowej krótsza trasa musi zostać nasycona w pierwszym kroku, zanim zostanie wybrana kolejna, dłuższa trasa. Ustaw wartość mniejszą niż 100%, aby uniknąć przepełnionych stacji w przypadku przeszacowania przepustowości. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Często istnieje wiele możliwych tras pomiędzy dwiema danymi stacjami. Mechanizm dystrybucji ładunków najpierw nasyci najkrótszą trasę, następnie użyje drugiej najkrótszej trasy, aż do jej nasycenia itd. Nasycenie jest ustalane na podstawie szacunkowej oceny przepustowości i planowanego wykorzystania. Po nasyceniu wszystkich tras, jeśli nadal istnieje zapotrzebowanie, algorytm przeciąży wszystkie trasy, preferując te o dużej przepustowości. W większości przypadków algorytm nie oszacuje jednak dokładnie przepustowości. To ustawienie pozwala określić, do jakiej wartości procentowej krótsza trasa musi zostać nasycona w pierwszym kroku, zanim zostanie wybrana kolejna, dłuższa trasa. Ustaw wartość mniejszą niż 100%, aby uniknąć przepełnionych stacji w przypadku przeszacowania przepustowości STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Jednostki prędkości (lądowe): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Jednostki prędkości (morskie): {STRING} @@ -2969,7 +2969,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Twoja na STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Możliwa utrata połączenia STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Przez ostatni{P 0 ą e e} {NUM} sekund{P ę y ""} nie otrzymano żadnych danych z serwera -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :błąd ogólny STR_NETWORK_ERROR_CLIENT_DESYNC :błąd synchronizacji STR_NETWORK_ERROR_CLIENT_SAVEGAME :nie można załadować mapy @@ -3359,11 +3359,11 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Posadź STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Losowe drzewa STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Pokryj losowo krajobraz drzewami STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normalny -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Sadź pojedyncze drzewa, przeciągając nad terenem +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Sadź pojedyncze drzewa, rysując po terenie STR_TREES_MODE_FOREST_SM_BUTTON :Zagajnik -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Sadź niewielkie lasy, przeciągając nad terenem +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Sadź niewielkie lasy, rysując po terenie STR_TREES_MODE_FOREST_LG_BUTTON :Las -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Sadź duże lasy, przeciągając nad terenem +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Sadź duże lasy, rysując po terenie # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Tworzenie terenu @@ -3419,7 +3419,7 @@ STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Wybierz STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Utwórz losowe przedsiębiorstwa STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Pokryj mapę losowo położonymi przedsiębiorstwami STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Utwórz losowe przedsiębiorstwa -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Czy na pewno chcesz ufundować wiele losowych przedsiębiorstw? +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Czy na pewno chcesz wybudować wiele losowych przedsiębiorstw? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Koszt: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Zleć poszukiwanie STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Zbuduj @@ -3578,11 +3578,11 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Klatkaż STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Tempo symulacji: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Liczba ticków gry symulowanych na sekundę +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Liczba symulowanych tyknięć gry na sekundę STR_FRAMERATE_RATE_BLITTER :{BLACK}Klatki na sekundę: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Liczba renderowanych klatek wideo na sekundę STR_FRAMERATE_SPEED_FACTOR :{BLACK}Obecny współczynnik szybkości gry: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Jak szybko gra obecnie działa, w porównaniu do oczekiwanej prędkości przy normalnym tempie symulacji. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Jak szybko gra obecnie działa, w porównaniu do oczekiwanej prędkości przy normalnym tempie symulacji STR_FRAMERATE_CURRENT :{WHITE}Obecny STR_FRAMERATE_AVERAGE :{WHITE}Średnia STR_FRAMERATE_MEMORYUSE :{WHITE}Pamięć @@ -4111,7 +4111,7 @@ STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Ogólny STR_STORY_BOOK_SPECTATOR :Ogólny przewodnik STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Strona {NUM} -STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Skocz na właściwą stronę wybierając ją z listy. +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Przejdź do określonej strony, wybierając ją z rozwijanej listy STR_STORY_BOOK_PREV_PAGE :{BLACK}Wstecz STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Idź na poprzednią stronę STR_STORY_BOOK_NEXT_PAGE :{BLACK}Dalej @@ -4406,7 +4406,7 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Samoloty bez gr STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupy - kliknij na grupę, aby wyświetlić wszystkie pojazdy z grupy. Przeciągnij i upuść grupy, aby dostosować hierarchię +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupy - kliknij na grupę, aby wyświetlić listę wszystkich pojazdów należących do tej grupy. Przeciągnij i upuść grupę, aby uporządkować hierarchię STR_GROUP_CREATE_TOOLTIP :{BLACK}Kliknij aby stworzyć grupę STR_GROUP_DELETE_TOOLTIP :{BLACK}Usuń zaznaczoną grupę STR_GROUP_RENAME_TOOLTIP :{BLACK}Zmień nazwę zaznaczonej grupy @@ -5908,25 +5908,25 @@ STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MIGHTYMOVER_CHOO_CHOO :MightyMover Cho STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_DIESEL :Ploddyphut Diesel STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_DIESEL :Powernaut Diesel STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_WILLS_2_8_0_STEAM :Wills 2-8-0 (Parowóz) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :Chaney 'Jubilee' (Parowóz) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu 'A4' (Parowóz) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH '8P' (Parowóz) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :Chaney „Jubilee” (Parowóz) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu „A4” (Parowóz) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH „8P” (Parowóz) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MANLEY_MOREL_DMU_DIESEL :Manley-Morel DMU (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :'Dash' (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Hendry '25' (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_UU_37_DIESEL :UU '37' (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_FLOSS_47_DIESEL :Floss '47' (Diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :„Dash” (Diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Hendry „25” (Diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_UU_37_DIESEL :UU „37” (Diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_FLOSS_47_DIESEL :Floss „47” (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_4000_DIESEL :CS 4000 (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_2400_DIESEL :CS 2400 (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CENTENNIAL_DIESEL :Centennial (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KELLING_3100_DIESEL :Kelling 3100 (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_TURNER_TURBO_DIESEL :Turner Turbo (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_1000_DIESEL :MJS 1000 (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_125_DIESEL :SH '125' (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH '30' (Elektrowóz) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH '40' (Elektrowóz) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :'T.I.M.' (Elektrowóz) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :'AsiaStar' (Elektrowóz) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_125_DIESEL :SH „125” (Diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH „30” (Elektrowóz) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH „40” (Elektrowóz) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :„T.I.M.” (Elektrowóz) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :„AsiaStar” (Elektrowóz) STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PASSENGER_CAR :Wagon pasażerski STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_MAIL_VAN :Wagon pocztowy STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COAL_CAR :Wagon na węgiel @@ -5954,8 +5954,8 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOY_VAN :Wagon na zabawk STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BATTERY_TRUCK :Wagon na baterie STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FIZZY_DRINK_TRUCK :Wagon na napoje gazowane STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PLASTIC_TRUCK :Wagon na plastik -STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (Elektrowóz) -STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :'Millennium Z1' (Elektrowóz) +STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :„X2001” (Elektrowóz) +STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :„Millennium Z1” (Elektrowóz) STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_WIZZOWOW_Z99 :Wizzowow Z99 STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PASSENGER_CAR :Wagon pasażerski STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_MAIL_VAN :Wagon pocztowy @@ -5984,10 +5984,10 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :Wagon na zabawk STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BATTERY_TRUCK :Wagon na baterie STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FIZZY_DRINK_TRUCK :Wagon na napoje gazowane STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PLASTIC_TRUCK :Wagon na plastik -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (Elektrowóz) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (Elektrowóz) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 'Pegasus' (Elektrowóz) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 'Chimaera' (Elektrowóz) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 „Leviathan” (Elektrowóz) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 „Cyclops” (Elektrowóz) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 „Pegasus” (Elektrowóz) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 „Chimaera” (Elektrowóz) STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_WIZZOWOW_ROCKETEER :Wizzowow Rocketeer STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PASSENGER_CAR :Wagon pasażerski STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_MAIL_VAN :Wagon pocztowy diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index c41f7622b5..c6fca58bb0 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -2590,7 +2590,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}O seu no STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Possível perda de conexão STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}No{P 0 "" s} último{P 0 "" s} {NUM} segundo{P "" s} nenhum dado foi recebido do servidor -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :erro geral STR_NETWORK_ERROR_CLIENT_DESYNC :erro de dessincronização STR_NETWORK_ERROR_CLIENT_SAVEGAME :não foi possível carregar o mapa diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 9b04d671eb..ae588cd4d6 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -2586,7 +2586,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Numele t STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Posibilă pierdere a conexiunii STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}În ultimele {NUM} secunde nu s-au mai primit date de la server -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :eroare generală STR_NETWORK_ERROR_CLIENT_DESYNC :eroare de desincronizare STR_NETWORK_ERROR_CLIENT_SAVEGAME :nu pot încărca harta diff --git a/src/lang/russian.txt b/src/lang/russian.txt index c6b64f9e65..61444f8bbd 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2740,7 +2740,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Неве STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Подключение утеряно STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}В течение {NUM} секунд{P ы "" ""} от сервера не поступало никаких данных -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :общая ошибка STR_NETWORK_ERROR_CLIENT_DESYNC :ошибка синхронизации STR_NETWORK_ERROR_CLIENT_SAVEGAME :не смог загрузить карту diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 4fe54e4c1c..a46c855be2 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -2733,7 +2733,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Tvoje im STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Moguć gubitak veze STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}U poslednj{P 0 oj e ih} {NUM} sekund{P i e i} nije primljen nijedan podatak sa servera -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :opšta greška STR_NETWORK_ERROR_CLIENT_DESYNC :desinhronizacija STR_NETWORK_ERROR_CLIENT_SAVEGAME :neuspešno učitavanje terena diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 9e7800f547..9e00518369 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -2589,7 +2589,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}您的 STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}失去链接 STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}已经有 {NUM} 秒没有从服务器收到任何数据 -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :一般错误 STR_NETWORK_ERROR_CLIENT_DESYNC :同步错误 STR_NETWORK_ERROR_CLIENT_SAVEGAME :不能读取地图 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 147bd899bf..591057b241 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -2656,7 +2656,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Meno va STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Možná strata pripojenia STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Posledných {NUM} sekúnd nedorazili zo servera žiadne dáta -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :všeobecná chyba STR_NETWORK_ERROR_CLIENT_DESYNC :chyba synchronizácie STR_NETWORK_ERROR_CLIENT_SAVEGAME :nemôžem načítať mapu diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index eb56bc720b..de8be0e05c 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -2328,7 +2328,7 @@ STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Priklop STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Povezava je mogoče prekinjena STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Zadnj{P 0 o i e ih} {NUM} sekund{P o i e ""} ni bilo prejetih nobenih podatkov s strežnika -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :splošna napaka STR_NETWORK_ERROR_CLIENT_DESYNC :desinhronizacijska napaka STR_NETWORK_ERROR_CLIENT_SAVEGAME :ni mogoče naložiti zemljevida diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 1fed3fbbb9..3677726ee4 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -2590,7 +2590,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Tu nombr STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Posible pérdida de conexión STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}No se han recibido datos del servidor desde hace {NUM} segundo{P "" s} -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :error general STR_NETWORK_ERROR_CLIENT_DESYNC :error de desincronización STR_NETWORK_ERROR_CLIENT_SAVEGAME :no se puede cargar el mapa diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 58e27b0e37..50a9e83b44 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2515,7 +2515,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Tu nombr STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Posible pérdida de conexión STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}No se han recibido datos del servidor desde hace {NUM} segundo{P "" s} -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :error general STR_NETWORK_ERROR_CLIENT_DESYNC :error de desincronización STR_NETWORK_ERROR_CLIENT_SAVEGAME :no se puede cargar el mapa diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index b57bf598d8..dbc3c03fac 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -2589,7 +2589,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Ditt spe STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Anslutningen har troligtvis försvunnit STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}De senaste {NUM} sekunderna har inget data mottagits från servern -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :allmänt fel STR_NETWORK_ERROR_CLIENT_DESYNC :synkroniseringsfel STR_NETWORK_ERROR_CLIENT_SAVEGAME :kunde inte ladda kartan diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 3029dc33b7..4ff1227a29 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -2374,7 +2374,7 @@ STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}சர STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}தொடர்பு துண்டிக்கப்பட வாய்ப்பு உள்ளது STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}கடந்த {NUM} வினாடி{P "" களில்} சர்வரிலிருந்து சர்வரிலிருந்து எந்த டேட்டாவும் கிடைக்கவில்லை -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :பொதுவான பிழை STR_NETWORK_ERROR_CLIENT_DESYNC :இணைப்பு பிழை STR_NETWORK_ERROR_CLIENT_SAVEGAME :வரைபடத்தை ஏற்ற முடியவில்லை diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 7e59b31d3d..274479bae1 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -2217,7 +2217,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}ชื STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}การเชื่อมต่อล้มเหลว STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}{NUM} วินาทีสุดท้ายไม่มีข้อมูลส่งถึงเครื่องแม่ข่าย -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :การผิดพลาดทั่วไป STR_NETWORK_ERROR_CLIENT_DESYNC :desync ผิดพลาด STR_NETWORK_ERROR_CLIENT_SAVEGAME :ไม่สามารถโหลดแผนที่ได้ diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 9fd72d21ac..e25c202054 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -2493,7 +2493,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}你的 STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}可能發生連線中斷 STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}最後 {NUM} 秒沒有資料從伺服器過來 -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :一般錯誤 STR_NETWORK_ERROR_CLIENT_DESYNC :失去同步 STR_NETWORK_ERROR_CLIENT_SAVEGAME :無法載入地圖 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 72bfe53144..6d2ab610d8 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -2590,7 +2590,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}İsminiz STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Olası bağlantı kaybı STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Son {NUM} saniyedir sunucudan hiç veri gelmedi -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :genel hata STR_NETWORK_ERROR_CLIENT_DESYNC :desync hatası STR_NETWORK_ERROR_CLIENT_SAVEGAME :harita yüklenemiyor diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 9e99e76294..ad41942019 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -423,7 +423,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Нати STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Розмір вікна великий/малий STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Смуга прокрутки - прокручує список вверх/вниз STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Смуга прокрутки - прокручує список вліво/вправо -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Зруйнувати будинки, дороги і т.п. Утримуйте Ctrl для виділення клітинок по діагоналі, або Shift - для показу витрат на руйнування +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Зруйнувати будинки, дороги тощо у квадраті суходолу. Ctrl+клац+протягування для виділення клітинок по діагоналі. Утримуйте Shift для показу витрат на руйнування # Show engines button ###length VEHICLE_TYPES @@ -521,12 +521,12 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Пока STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Показати міста STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Показати субсидії STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Показати список станцій компанії -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Фінансова інформація -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Головна інформація +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Покаже фінансову інформацію про компанію +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Покаже загальну інформацію про компанію STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Показати історію -STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Показати список завдань +STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Покаже список завдань STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Показати графіки -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Показати таблицю компаній +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Покаже таблицю компаній STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Фінансувати будівництво нової промисловості STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Показати список поїздів компанії. Ctrl+клац мишою переключає відкриття звичайного/розширенного списку STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Показати список дорожнього транспорту компанії. Ctrl+клац мишою переключає відкриття звичайного/розширенного списку @@ -1538,6 +1538,7 @@ STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Показув ###length 2 STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :При включенні наприкінці кожного року виринає вікно фінансів для легшого огляду фінансового стану компанії. +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :При включенні наприкінці кожного періоду виринає вікно фінансів для легшого огляду фінансового стану компанії. STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Створювати накази з поміткою «без зупинки»: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Якщо в завданні транспортного засобу не вказана помітка «без зупинки», то воно зупиняєтся на всіх станціях на своєму шляху. Включення цієї опції призводить до того, що нові завдання будуть автоматично створюватися з поміткою «без зупинки» і транспортний засіб буде зупинятися лише на заданних станціях. Звичайно, при необхідності помітку можна зняти або встановити власноруч. @@ -2721,7 +2722,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Непр STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Можлива втрата з'єднання STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}На протязі {NUM} секунд{P и "" ""} не надійшло жодної інформації від сервера -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :фатальна помилка STR_NETWORK_ERROR_CLIENT_DESYNC :помилка синхронізації STR_NETWORK_ERROR_CLIENT_SAVEGAME :неможливо завантажити карту @@ -2925,7 +2926,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Буду STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Перетворити колію на точку маршруту. Ctrl дозволяє об'єднання точок маршруту. Утримуйте Shift для показу очікуваних витрат STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Будувати станцію. Ctrl дозволяє об'єднання станцій. Утримуйте Shift для показу витрат на будівництво STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Будувати залізничні сигнали. Ctrl переключає семафори/світлові сигнали{}Протяжка мишою будує сигнали вздовж прямої ділянки рейок. Ctrl будує сигнали до наступної розв'язки чи сигналу{}Ctrl+клац мишою вмикає показ вікна вибору сигналів. Утримуйте Shift для показу витрат на будівництво -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Будувати міст. Утримуйте Shift для показу витрат на будівництво +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Будувати залізничний міст. Утримуйте Shift для показу витрат на будівництво STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Будувати тунель. Утримуйте Shift для показу витрат на будівництво STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Будувати/демонтувати колію, сигнали, точки маршруту і станції. Утримання Ctrl також демонтує колію з точок маршрутів і станцій STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Модернізувати колію. Утримуйте Shift для показу витрат на модернізацію @@ -3185,8 +3186,8 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Приб STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Ви дійсно бажаєте видалити всі підприємства? # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Ланцюг вантажних перевезень для {STRING} -STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Ланцюг вантажних перевезень для {STRING} +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Ланцюг підприємств - {STRING} +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Ланцюг вантажів - {STRING} STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Виробники STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Споживачі STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Будинки @@ -3875,7 +3876,7 @@ STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Невір # Station list window STR_STATION_LIST_TOOLTIP :{BLACK}Назви станцій - натисніть на назву, щоб показати станцію в центрі екрану. Ctrl+клац мишою відкриває нове вікно з видом на станцію -STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Утримуйте Ctrl для вибору декількох пунктів +STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Ctrl+клац для вибору кількох пунктів STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} станці{P я ї й} STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} @@ -4860,6 +4861,7 @@ STR_TIMETABLE_STATUS_START_IN_SECONDS.r :{BLACK}Цей STR_TIMETABLE_STATUS_START_IN_SECONDS.d :{BLACK}Цей розклад почнеться після {COMMA} секунд STR_TIMETABLE_START :{BLACK}Початок розкладу +STR_TIMETABLE_START_TOOLTIP :{BLACK}Обрати початок розкладу. Ctrl+клац для рівного розподілу початку руху транспорту зі спільним наказом. Якщо наказ із розкладом, транспорт розподілиться за відносним порядком STR_TIMETABLE_START_SECONDS_QUERY :Секунд до початку розкладу @@ -4985,6 +4987,7 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN # Textfile window STR_TEXTFILE_JUMPLIST :{WHITE}Зміст +STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}Швидко перейти до фрагменту в переглядуваному файлі з цього списку STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING} STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Крок назад в історії навігації STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Крок вперед в історії навігації diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index 679571b7a2..3f097904a3 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -1797,7 +1797,7 @@ STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}آپ ک STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}ممکنہ طور پر کنکشن کا خاتمہ STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}آخری {NUM} سیکنڈ{P "" وں} سے سرور سے کوئی معلومات نہیں ملیں -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :عمومی خرابی STR_NETWORK_ERROR_CLIENT_DESYNC :desync خرابی STR_NETWORK_ERROR_CLIENT_SAVEGAME :نقشہ لوڈ نہیں ہوسکا diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 1791df5591..fcff61c8ca 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -2589,7 +2589,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Tên ng STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Kết nối có thể đã bị mất STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Trong khoảng{NUM} giây gần đây, không có dữ liệu nào được nhận từ máy chủ -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :lỗi chung STR_NETWORK_ERROR_CLIENT_DESYNC :lỗi mất đồng bộ STR_NETWORK_ERROR_CLIENT_SAVEGAME :không nạp được bản đồ diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 8b067abc58..cba03ab154 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -2589,7 +2589,7 @@ STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Nid yw e STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Colled cysylltiad o bosib STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Am y {NUM} eiliad diwethaf nid oes data wedi cyrraedd o'r gweinydd -###length 21 +###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :gwall cyffredinol STR_NETWORK_ERROR_CLIENT_DESYNC :gwall dadgydamseru STR_NETWORK_ERROR_CLIENT_SAVEGAME :methwyd llwytho'r map From 107c208d87b1d094e636022013a8bd4e06edf23c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 18 Mar 2024 17:49:51 +0000 Subject: [PATCH 150/695] Codechange: Use single list for hierarchical group lists. (#12330) Replace both group list implementations (vehicle group list and company colour group list) with a single implementation, using a struct to hold the group and indentation level instead of two separate lists. Parts that were previously duplicated are now shared. --- src/company_gui.cpp | 73 +++++--------------- src/group_gui.cpp | 162 ++++++++++++++++++++++++-------------------- src/group_gui.h | 11 +++ 3 files changed, 116 insertions(+), 130 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 7896f2bb9a..253bc187ed 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -40,6 +40,7 @@ #include "company_cmd.h" #include "economy_cmd.h" #include "group_cmd.h" +#include "group_gui.h" #include "misc_cmd.h" #include "object_cmd.h" #include "timer/timer.h" @@ -591,8 +592,6 @@ public: } }; -typedef GUIList GUIGroupList; - /** Company livery colour scheme window. */ struct SelectCompanyLiveryWindow : public Window { private: @@ -602,7 +601,6 @@ private: uint rows; uint line_height; GUIGroupList groups; - std::vector indents; Scrollbar *vscroll; void ShowColourDropDownMenu(uint32_t widget) @@ -660,57 +658,15 @@ private: ShowDropDownList(this, std::move(list), sel, widget); } - void AddChildren(GUIGroupList &source, GroupID parent, int indent) - { - for (const Group *g : source) { - if (g->parent != parent) continue; - this->groups.push_back(g); - this->indents.push_back(indent); - AddChildren(source, g->index, indent + 1); - } - } - void BuildGroupList(CompanyID owner) { if (!this->groups.NeedRebuild()) return; this->groups.clear(); - this->indents.clear(); if (this->livery_class >= LC_GROUP_RAIL) { - GUIGroupList list; VehicleType vtype = (VehicleType)(this->livery_class - LC_GROUP_RAIL); - - for (const Group *g : Group::Iterate()) { - if (g->owner == owner && g->vehicle_type == vtype) { - list.push_back(g); - } - } - - list.ForceResort(); - - /* Sort the groups by their name */ - const Group *last_group[2] = { nullptr, nullptr }; - std::string last_name[2] = { {}, {} }; - list.Sort([&](const Group * const &a, const Group * const &b) -> bool { - if (a != last_group[0]) { - last_group[0] = a; - SetDParam(0, a->index); - last_name[0] = GetString(STR_GROUP_NAME); - } - - if (b != last_group[1]) { - last_group[1] = b; - SetDParam(0, b->index); - last_name[1] = GetString(STR_GROUP_NAME); - } - - int r = StrNaturalCompare(last_name[0], last_name[1]); // Sort by name (natural sorting). - if (r == 0) return a->index < b->index; - return r < 0; - }); - - AddChildren(list, INVALID_GROUP, 0); + BuildGuiGroupList(this->groups, false, owner, vtype); } this->groups.shrink_to_fit(); @@ -774,7 +730,7 @@ public: /* Position scrollbar to selected group */ for (uint i = 0; i < this->rows; i++) { - if (this->groups[i]->index == sel) { + if (this->groups[i].group->index == sel) { this->vscroll->SetPosition(i - this->vscroll->GetCapacity() / 2); break; } @@ -944,11 +900,11 @@ public: } } } else { - uint max = static_cast(std::min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->groups.size())); - for (uint i = this->vscroll->GetPosition(); i < max; ++i) { - const Group *g = this->groups[i]; + auto [first, last] = this->vscroll->GetVisibleRangeIterators(this->groups); + for (auto it = first; it != last; ++it) { + const Group *g = it->group; SetDParam(0, g->index); - draw_livery(STR_GROUP_NAME, g->livery, this->sel == g->index, false, this->indents[i] * WidgetDimensions::scaled.hsep_indent); + draw_livery(STR_GROUP_NAME, g->livery, this->sel == g->index, false, it->indent * WidgetDimensions::scaled.hsep_indent); } if (this->vscroll->GetCount() == 0) { @@ -991,7 +947,7 @@ public: this->BuildGroupList((CompanyID)this->window_number); if (!this->groups.empty()) { - this->sel = this->groups[0]->index; + this->sel = this->groups[0].group->index; } } @@ -1008,10 +964,10 @@ public: break; case WID_SCL_MATRIX: { - uint row = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_SCL_MATRIX); - if (row >= this->rows) return; - if (this->livery_class < LC_GROUP_RAIL) { + uint row = this->vscroll->GetScrolledRowFromWidget(pt.y, this, widget); + if (row >= this->rows) return; + LiveryScheme j = (LiveryScheme)row; for (LiveryScheme scheme = LS_BEGIN; scheme <= j && scheme < LS_END; scheme++) { @@ -1025,7 +981,10 @@ public: this->sel = 1 << j; } } else { - this->sel = this->groups[row]->index; + auto it = this->vscroll->GetScrolledItemFromWidget(this->groups, pt.y, this, widget); + if (it == std::end(this->groups)) return; + + this->sel = it->group->index; } this->SetDirty(); break; @@ -1078,7 +1037,7 @@ public: if (!Group::IsValidID(this->sel)) { this->sel = INVALID_GROUP; - if (!this->groups.empty()) this->sel = this->groups[0]->index; + if (!this->groups.empty()) this->sel = this->groups[0].group->index; } this->SetDirty(); diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 5083da047a..812f7a9e86 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -27,6 +27,7 @@ #include "company_gui.h" #include "gui.h" #include "group_cmd.h" +#include "group_gui.h" #include "vehicle_cmd.h" #include "gfx_func.h" @@ -36,8 +37,6 @@ #include "safeguards.h" -typedef GUIList GUIGroupList; - static constexpr NWidgetPart _nested_group_widgets[] = { NWidget(NWID_HORIZONTAL), // Window header NWidget(WWT_CLOSEBOX, COLOUR_GREY), @@ -111,6 +110,73 @@ static constexpr NWidgetPart _nested_group_widgets[] = { EndContainer(), }; +/** + * Add children to GUI group list to build a hierarchical tree. + * @param dst Destination list. + * @param src Source list. + * @param fold Whether to handle group folding/hiding. + * @param parent Current tree parent (set by self with recursion). + * @param indent Current tree indentation level (set by self with recursion). + */ +static void GuiGroupListAddChildren(GUIGroupList &dst, const GUIGroupList &src, bool fold, GroupID parent, int indent) +{ + for (const auto &item : src) { + if (item.group->parent != parent) continue; + + dst.emplace_back(item.group, indent); + + if (fold && item.group->folded) { + /* Test if this group has children at all. If not, the folded flag should be cleared to avoid lingering unfold buttons in the list. */ + GroupID groupid = item.group->index; + bool has_children = std::any_of(src.begin(), src.end(), [groupid](const auto &child) { return child.group->parent == groupid; }); + Group::Get(item.group->index)->folded = has_children; + } else { + GuiGroupListAddChildren(dst, src, fold, item.group->index, indent + 1); + } + } +} + +/** + * Build GUI group list, a sorted hierarchical list of groups for owner and vehicle type. + * @param dst Destination list, owned by the caller. + * @param fold Whether to handle group folding/hiding. + * @param owner Owner of groups. + * @param veh_type Vehicle type of groups. + */ +void BuildGuiGroupList(GUIGroupList &dst, bool fold, Owner owner, VehicleType veh_type) +{ + GUIGroupList list; + + for (const Group *g : Group::Iterate()) { + if (g->owner == owner && g->vehicle_type == veh_type) { + list.emplace_back(g, 0); + } + } + + list.ForceResort(); + + /* Sort the groups by their name */ + std::array, 2> last_group{}; + + list.Sort([&last_group](const GUIGroupListItem &a, const GUIGroupListItem &b) -> bool { + if (a.group != last_group[0].first) { + SetDParam(0, a.group->index); + last_group[0] = {a.group, GetString(STR_GROUP_NAME)}; + } + + if (b.group != last_group[1].first) { + SetDParam(0, b.group->index); + last_group[1] = {b.group, GetString(STR_GROUP_NAME)}; + } + + int r = StrNaturalCompare(last_group[0].second, last_group[1].second); // Sort by name (natural sorting). + if (r == 0) return a.group->index < b.group->index; + return r < 0; + }); + + GuiGroupListAddChildren(dst, list, fold, INVALID_GROUP, 0); +} + class VehicleGroupWindow : public BaseVehicleListWindow { private: /* Columns in the group list */ @@ -133,26 +199,8 @@ private: uint tiny_step_height; ///< Step height for the group list Scrollbar *group_sb; - std::vector indents; ///< Indentation levels - Dimension column_size[VGC_END]; ///< Size of the columns in the group list. - void AddChildren(GUIGroupList &source, GroupID parent, int indent) - { - for (const Group *g : source) { - if (g->parent != parent) continue; - this->groups.push_back(g); - this->indents.push_back(indent); - if (g->folded) { - /* Test if this group has children at all. If not, the folded flag should be cleared to avoid lingering unfold buttons in the list. */ - bool has_children = std::any_of(source.begin(), source.end(), [g](const Group *child){ return child->parent == g->index; }); - Group::Get(g->index)->folded = has_children; - } else { - AddChildren(source, g->index, indent + 1); - } - } - } - /** * (Re)Build the group list. * @@ -163,40 +211,8 @@ private: if (!this->groups.NeedRebuild()) return; this->groups.clear(); - this->indents.clear(); - GUIGroupList list; - - for (const Group *g : Group::Iterate()) { - if (g->owner == owner && g->vehicle_type == this->vli.vtype) { - list.push_back(g); - } - } - - list.ForceResort(); - - /* Sort the groups by their name */ - const Group *last_group[2] = { nullptr, nullptr }; - std::string last_name[2] = { {}, {} }; - list.Sort([&](const Group * const &a, const Group * const &b) { - if (a != last_group[0]) { - last_group[0] = a; - SetDParam(0, a->index); - last_name[0] = GetString(STR_GROUP_NAME); - } - - if (b != last_group[1]) { - last_group[1] = b; - SetDParam(0, b->index); - last_name[1] = GetString(STR_GROUP_NAME); - } - - int r = StrNaturalCompare(last_name[0], last_name[1]); // Sort by name (natural sorting). - if (r == 0) return a->index < b->index; - return r < 0; - }); - - AddChildren(list, INVALID_GROUP, 0); + BuildGuiGroupList(this->groups, true, owner, this->vli.vtype); this->groups.shrink_to_fit(); this->groups.RebuildDone(); @@ -602,13 +618,13 @@ public: case WID_GL_LIST_GROUP: { int y1 = r.top; - size_t max = std::min(this->group_sb->GetPosition() + this->group_sb->GetCapacity(), this->groups.size()); - for (size_t i = this->group_sb->GetPosition(); i < max; ++i) { - const Group *g = this->groups[i]; + auto [first, last] = this->group_sb->GetVisibleRangeIterators(this->groups); + for (auto it = first; it != last; ++it) { + const Group *g = it->group; assert(g->owner == this->owner); - DrawGroupInfo(y1, r.left, r.right, g->index, this->indents[i] * WidgetDimensions::scaled.hsep_indent, HasBit(g->flags, GroupFlags::GF_REPLACE_PROTECTION), g->folded || (i + 1 < this->groups.size() && indents[i + 1] > this->indents[i])); + DrawGroupInfo(y1, r.left, r.right, g->index, it->indent * WidgetDimensions::scaled.hsep_indent, HasBit(g->flags, GroupFlags::GF_REPLACE_PROTECTION), g->folded || (std::next(it) != std::end(this->groups) && std::next(it)->indent > it->indent)); y1 += this->tiny_step_height; } @@ -690,27 +706,26 @@ public: auto it = this->group_sb->GetScrolledItemFromWidget(this->groups, pt.y, this, WID_GL_LIST_GROUP); if (it == this->groups.end()) return; - size_t id_g = it - this->groups.begin(); - if ((*it)->folded || (id_g + 1 < this->groups.size() && this->indents[id_g + 1] > this->indents[id_g])) { + if (it->group->folded || (std::next(it) != std::end(this->groups) && std::next(it)->indent > it->indent)) { /* The group has children, check if the user clicked the fold / unfold button. */ NWidgetCore *group_display = this->GetWidget(widget); int x = _current_text_dir == TD_RTL ? - group_display->pos_x + group_display->current_x - WidgetDimensions::scaled.framerect.right - this->indents[id_g] * WidgetDimensions::scaled.hsep_indent - this->column_size[VGC_FOLD].width : - group_display->pos_x + WidgetDimensions::scaled.framerect.left + this->indents[id_g] * WidgetDimensions::scaled.hsep_indent; + group_display->pos_x + group_display->current_x - WidgetDimensions::scaled.framerect.right - it->indent * WidgetDimensions::scaled.hsep_indent - this->column_size[VGC_FOLD].width : + group_display->pos_x + WidgetDimensions::scaled.framerect.left + it->indent * WidgetDimensions::scaled.hsep_indent; if (click_count > 1 || (pt.x >= x && pt.x < (int)(x + this->column_size[VGC_FOLD].width))) { GroupID g = this->vli.index; if (!IsAllGroupID(g) && !IsDefaultGroupID(g)) { do { g = Group::Get(g)->parent; - if (g == groups[id_g]->index) { + if (g == it->group->index) { this->vli.index = g; break; } } while (g != INVALID_GROUP); } - Group::Get(groups[id_g]->index)->folded = !groups[id_g]->folded; + Group::Get(it->group->index)->folded = !it->group->folded; this->groups.ForceRebuild(); this->SetDirty(); @@ -718,7 +733,7 @@ public: } } - this->group_sel = this->vli.index = this->groups[id_g]->index; + this->group_sel = this->vli.index = it->group->index; SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this); @@ -843,7 +858,7 @@ public: case WID_GL_LIST_GROUP: { // Matrix group auto it = this->group_sb->GetScrolledItemFromWidget(this->groups, pt.y, this, WID_GL_LIST_GROUP); - GroupID new_g = it == this->groups.end() ? INVALID_GROUP : (*it)->index; + GroupID new_g = it == this->groups.end() ? INVALID_GROUP : it->group->index; if (this->group_sel != new_g && g->parent != new_g) { Command::Post(STR_ERROR_GROUP_CAN_T_SET_PARENT, AlterGroupMode::SetParent, this->group_sel, new_g, {}); @@ -876,7 +891,7 @@ public: this->SetDirty(); auto it = this->group_sb->GetScrolledItemFromWidget(this->groups, pt.y, this, WID_GL_LIST_GROUP); - GroupID new_g = it == this->groups.end() ? NEW_GROUP : (*it)->index; + GroupID new_g = it == this->groups.end() ? NEW_GROUP : it->group->index; Command::Post(STR_ERROR_GROUP_CAN_T_ADD_VEHICLE, new_g == NEW_GROUP ? CcAddVehicleNewGroup : nullptr, new_g, vindex, _ctrl_pressed || this->grouping == GB_SHARED_ORDERS, VehicleListIdentifier{}); break; @@ -1025,7 +1040,7 @@ public: case WID_GL_LIST_GROUP: { // ... the list of custom groups. auto it = this->group_sb->GetScrolledItemFromWidget(this->groups, pt.y, this, WID_GL_LIST_GROUP); - new_group_over = it == this->groups.end() ? NEW_GROUP : (*it)->index; + new_group_over = it == this->groups.end() ? NEW_GROUP : it->group->index; break; } } @@ -1080,18 +1095,19 @@ public: this->vli.index = g_id; if (g_id != ALL_GROUP && g_id != DEFAULT_GROUP) { const Group *g = Group::Get(g_id); - int id_g = find_index(this->groups, g); - // The group's branch is maybe collapsed, so try to expand it - if (id_g == -1) { + + auto found = std::find_if(std::begin(this->groups), std::end(this->groups), [g](const auto &item) { return item.group == g; }); + if (found == std::end(this->groups)) { + /* The group's branch is maybe collapsed, so try to expand it. */ for (auto pg = Group::GetIfValid(g->parent); pg != nullptr; pg = Group::GetIfValid(pg->parent)) { pg->folded = false; } this->groups.ForceRebuild(); this->BuildGroupList(this->owner); this->group_sb->SetCount(this->groups.size()); - id_g = find_index(this->groups, g); + found = std::find_if(std::begin(this->groups), std::end(this->groups), [g](const auto &item) { return item.group == g; }); } - this->group_sb->ScrollTowards(id_g); + if (found != std::end(this->groups)) this->group_sb->ScrollTowards(std::distance(std::begin(this->groups), found)); } this->vehgroups.ForceRebuild(); this->SetDirty(); @@ -1121,7 +1137,7 @@ static WindowDesc _train_group_desc( * @param group The group to be selected. Defaults to INVALID_GROUP. * @param need_existing_window Whether the existing window is needed. Defaults to false. */ -void ShowCompanyGroup(CompanyID company, VehicleType vehicle_type, GroupID group = INVALID_GROUP, bool need_existing_window = false) +void ShowCompanyGroup(CompanyID company, VehicleType vehicle_type, GroupID group, bool need_existing_window) { if (!Company::IsValidID(company)) return; diff --git a/src/group_gui.h b/src/group_gui.h index d42704663e..ec5f790d84 100644 --- a/src/group_gui.h +++ b/src/group_gui.h @@ -17,4 +17,15 @@ void ShowCompanyGroup(CompanyID company, VehicleType veh, GroupID group = INVALI void ShowCompanyGroupForVehicle(const Vehicle *v); void DeleteGroupHighlightOfVehicle(const Vehicle *v); +struct GUIGroupListItem { + const Group *group; + int8_t indent; ///< Display indentation level. + + constexpr GUIGroupListItem(const Group *group, int8_t indent) : group(group), indent(indent) {} +}; + +using GUIGroupList = GUIList; + +void BuildGuiGroupList(GUIGroupList &dst, bool fold, Owner owner, VehicleType veh_type); + #endif /* GROUP_GUI_H */ From 2485de9462ae02fd6fd2256970e2019795dc4fba Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 18 Mar 2024 20:32:38 +0000 Subject: [PATCH 151/695] Codefix: Widget should be passed as WidgetID type. (#12332) --- src/window_gui.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/window_gui.h b/src/window_gui.h index 19bf4d0334..0993b4c95f 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -476,7 +476,7 @@ public: * Marks a widget as raised and dirty (redraw), when it is marked as lowered. * @param widget_index index of this widget in the window */ - inline void RaiseWidgetWhenLowered(uint8_t widget_index) + inline void RaiseWidgetWhenLowered(WidgetID widget_index) { if (this->IsWidgetLowered(widget_index)) { this->RaiseWidget(widget_index); From 7580eac2d5437f6a131466d14cd68f08db4400d3 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Mon, 18 Mar 2024 18:56:46 +0100 Subject: [PATCH 152/695] Codechange: create helper class for useful NetworkAuthorizedKeys functions --- src/console_cmds.cpp | 21 ++----------- src/network/network.cpp | 51 +++++++++++++++++++++++++++++++ src/network/network_crypto.cpp | 8 ----- src/network/network_crypto.h | 8 +++-- src/network/network_type.h | 13 ++++++++ src/settings_type.h | 4 +-- src/tests/test_network_crypto.cpp | 14 ++++----- 7 files changed, 81 insertions(+), 38 deletions(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 10e6810f14..6b88247dfb 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1957,22 +1957,11 @@ DEF_CONSOLE_CMD(ConCompanyPassword) } /** All the known authorized keys with their name. */ -static std::vector *>> _console_cmd_authorized_keys{ +static std::vector> _console_cmd_authorized_keys{ { "rcon", &_settings_client.network.rcon_authorized_keys }, { "server", &_settings_client.network.server_authorized_keys }, }; -/** - * Simple helper to find the location of the given authorized key in the authorized keys. - * @param authorized_keys The keys to look through. - * @param authorized_key The key to look for. - * @return The iterator to the location of the authorized key, or \c authorized_keys.end(). - */ -static auto FindKey(std::vector *authorized_keys, std::string_view authorized_key) -{ - return std::find_if(authorized_keys->begin(), authorized_keys->end(), [authorized_key](auto &value) { return StrEqualsIgnoreCase(value, authorized_key); }); -} - DEF_CONSOLE_CMD(ConNetworkAuthorizedKey) { if (argc <= 2) { @@ -2016,11 +2005,8 @@ DEF_CONSOLE_CMD(ConNetworkAuthorizedKey) } } - auto iter = FindKey(authorized_keys, authorized_key); - if (StrEqualsIgnoreCase(argv[1], "add")) { - if (iter == authorized_keys->end()) { - authorized_keys->push_back(authorized_key); + if (authorized_keys->Add(authorized_key)) { IConsolePrint(CC_INFO, "Added {} to {}.", authorized_key, name); } else { IConsolePrint(CC_WARNING, "Not added {} to {} as it already exists.", authorized_key, name); @@ -2029,8 +2015,7 @@ DEF_CONSOLE_CMD(ConNetworkAuthorizedKey) } if (StrEqualsIgnoreCase(argv[1], "remove")) { - if (iter != authorized_keys->end()) { - authorized_keys->erase(iter); + if (authorized_keys->Remove(authorized_key)) { IConsolePrint(CC_INFO, "Removed {} from {}.", authorized_key, name); } else { IConsolePrint(CC_WARNING, "Not removed {} from {} as it does not exist.", authorized_key, name); diff --git a/src/network/network.cpp b/src/network/network.cpp index 784c5a8f37..717cf077dc 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -134,6 +134,57 @@ NetworkClientInfo::~NetworkClientInfo() return nullptr; } + +/** + * Simple helper to find the location of the given authorized key in the authorized keys. + * @param authorized_keys The keys to look through. + * @param authorized_key The key to look for. + * @return The iterator to the location of the authorized key, or \c authorized_keys.end(). + */ +static auto FindKey(auto *authorized_keys, std::string_view authorized_key) +{ + return std::find_if(authorized_keys->begin(), authorized_keys->end(), [authorized_key](auto &value) { return StrEqualsIgnoreCase(value, authorized_key); }); +} + +/** + * Check whether the given key is contains in these authorized keys. + * @param key The key to look for. + * @return \c true when the key has been found, otherwise \c false. + */ +bool NetworkAuthorizedKeys::Contains(std::string_view key) const +{ + return FindKey(this, key) != this->end(); +} + +/** + * Add the given key to the authorized keys, when it is not already contained. + * @param key The key to add. + * @return \c true when the key was added, \c false when the key already existed. + */ +bool NetworkAuthorizedKeys::Add(std::string_view key) +{ + auto iter = FindKey(this, key); + if (iter != this->end()) return false; + + this->emplace_back(key); + return true; +} + +/** + * Remove the given key from the authorized keys, when it is exists. + * @param key The key to remove. + * @return \c true when the key was removed, \c false when the key did not exist. + */ +bool NetworkAuthorizedKeys::Remove(std::string_view key) +{ + auto iter = FindKey(this, key); + if (iter == this->end()) return false; + + this->erase(iter); + return true; +} + + uint8_t NetworkSpectatorCount() { uint8_t count = 0; diff --git a/src/network/network_crypto.cpp b/src/network/network_crypto.cpp index 7c56a1d988..03ee988bb7 100644 --- a/src/network/network_crypto.cpp +++ b/src/network/network_crypto.cpp @@ -423,14 +423,6 @@ void CombinedAuthenticationServerHandler::Add(CombinedAuthenticationServerHandle this->SendResponse(); } -/* virtual */ bool NetworkAuthenticationDefaultAuthorizedKeyHandler::IsAllowed(std::string_view peer_public_key) const -{ - for (const auto &allowed : *this->authorized_keys) { - if (StrEqualsIgnoreCase(allowed, peer_public_key)) return true; - } - return false; -} - /** * Create a NetworkAuthenticationClientHandler. diff --git a/src/network/network_crypto.h b/src/network/network_crypto.h index 60e2b6b71b..d2fc604cd0 100644 --- a/src/network/network_crypto.h +++ b/src/network/network_crypto.h @@ -33,6 +33,8 @@ #ifndef NETWORK_CRYPTO_H #define NETWORK_CRYPTO_H +#include "network_type.h" + /** * Base class for handling the encryption (or decryption) of a network connection. */ @@ -158,16 +160,16 @@ public: */ class NetworkAuthenticationDefaultAuthorizedKeyHandler : public NetworkAuthenticationAuthorizedKeyHandler { private: - const std::vector *authorized_keys; ///< The authorized keys to check against. + const NetworkAuthorizedKeys *authorized_keys; ///< The authorized keys to check against. public: /** * Create the handler that uses the given authorized keys to check against. * @param authorized_keys The reference to the authorized keys to check against. */ - NetworkAuthenticationDefaultAuthorizedKeyHandler(const std::vector &authorized_keys) : authorized_keys(&authorized_keys) {} + NetworkAuthenticationDefaultAuthorizedKeyHandler(const NetworkAuthorizedKeys &authorized_keys) : authorized_keys(&authorized_keys) {} bool CanBeUsed() const override { return !this->authorized_keys->empty(); } - bool IsAllowed(std::string_view peer_public_key) const override; + bool IsAllowed(std::string_view peer_public_key) const override { return authorized_keys->Contains(peer_public_key); } }; diff --git a/src/network/network_type.h b/src/network/network_type.h index faa81a8d35..a3c0f47e74 100644 --- a/src/network/network_type.h +++ b/src/network/network_type.h @@ -150,4 +150,17 @@ enum NetworkErrorCode { NETWORK_ERROR_END, }; +/** + * Simple helper to (more easily) manage authorized keys. + * + * The authorized keys are hexadecimal representations of their binary form. + * The authorized keys are case insensitive. + */ +class NetworkAuthorizedKeys : public std::vector { +public: + bool Contains(std::string_view key) const; + bool Add(std::string_view key); + bool Remove(std::string_view key); +}; + #endif /* NETWORK_TYPE_H */ diff --git a/src/settings_type.h b/src/settings_type.h index 17941ae0a4..017a74664e 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -313,9 +313,9 @@ struct NetworkSettings { std::string server_invite_code_secret; ///< Secret to proof we got this invite code from the Game Coordinator. std::string server_name; ///< name of the server std::string server_password; ///< password for joining this server - std::vector server_authorized_keys; ///< Public keys of clients that are authorized to connect to the game. + NetworkAuthorizedKeys server_authorized_keys; ///< Public keys of clients that are authorized to connect to the game. std::string rcon_password; ///< password for rconsole (server side) - std::vector rcon_authorized_keys; ///< Public keys of clients that are authorized to use the rconsole (server side). + NetworkAuthorizedKeys rcon_authorized_keys; ///< Public keys of clients that are authorized to use the rconsole (server side). std::string admin_password; ///< password for the admin network std::string client_name; ///< name of the player (as client) std::string client_secret_key; ///< The secret key of the client for authorized key logins. diff --git a/src/tests/test_network_crypto.cpp b/src/tests/test_network_crypto.cpp index 34cbefaf27..33838a6ac9 100644 --- a/src/tests/test_network_crypto.cpp +++ b/src/tests/test_network_crypto.cpp @@ -118,8 +118,8 @@ TEST_CASE("Authentication_PAKE") static void TestAuthenticationAuthorizedKey(const X25519SecretKey &client_secret_key, const X25519PublicKey &server_expected_public_key, NetworkAuthenticationServerHandler::ResponseResult expected_response_result) { - std::vector authorized_keys; - authorized_keys.emplace_back(FormatArrayAsHex(server_expected_public_key)); + NetworkAuthorizedKeys authorized_keys; + authorized_keys.Add(FormatArrayAsHex(server_expected_public_key)); NetworkAuthenticationDefaultAuthorizedKeyHandler authorized_key_handler(authorized_keys); X25519AuthorizedKeyServerHandler server(X25519SecretKey::CreateRandom(), &authorized_key_handler); @@ -151,15 +151,15 @@ TEST_CASE("Authentication_Combined") auto client_public_key = client_secret_key.CreatePublicKey(); std::string client_public_key_str = FormatArrayAsHex(client_public_key); - std::vector valid_authorized_keys; - valid_authorized_keys.emplace_back(client_public_key_str); + NetworkAuthorizedKeys valid_authorized_keys; + valid_authorized_keys.Add(client_public_key_str); NetworkAuthenticationDefaultAuthorizedKeyHandler valid_authorized_key_handler(valid_authorized_keys); - std::vector invalid_authorized_keys; - invalid_authorized_keys.emplace_back("not-a-valid-authorized-key"); + NetworkAuthorizedKeys invalid_authorized_keys; + invalid_authorized_keys.Add("not-a-valid-authorized-key"); NetworkAuthenticationDefaultAuthorizedKeyHandler invalid_authorized_key_handler(invalid_authorized_keys); - std::vector no_authorized_keys; + NetworkAuthorizedKeys no_authorized_keys; NetworkAuthenticationDefaultAuthorizedKeyHandler no_authorized_key_handler(no_authorized_keys); std::string no_password = ""; From 737e3feaf024f2ccebc4fdee9ec468a8f6c133de Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 18 Mar 2024 23:39:42 +0000 Subject: [PATCH 153/695] Codechange: Don't delete news items or NewGRF window when EffectVehicle is deleted. (#12334) EffectVehicles never create news and can't be debugged, so searching for news items and windows to delete just wastes time. --- src/vehicle.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index ccd259cb36..044c8013c9 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -908,8 +908,10 @@ Vehicle::~Vehicle() UpdateVehicleTileHash(this, true); UpdateVehicleViewportHash(this, INVALID_COORD, 0, this->sprite_cache.old_coord.left, this->sprite_cache.old_coord.top); - DeleteVehicleNews(this->index, INVALID_STRING_ID); - DeleteNewGRFInspectWindow(GetGrfSpecFeature(this->type), this->index); + if (this->type != VEH_EFFECT) { + DeleteVehicleNews(this->index, INVALID_STRING_ID); + DeleteNewGRFInspectWindow(GetGrfSpecFeature(this->type), this->index); + } } /** From 3a3d8f3b538d38da263b08a60a91a1f48cb22412 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 19 Mar 2024 04:41:12 +0000 Subject: [PATCH 154/695] Update: Translations from eints english (au): 2 changes by krysclarke norwegian (bokmal): 2 changes by eriksorngard chinese (simplified): 31 changes by lysinelai greek: 7 changes by Xertoveizer ukrainian: 14 changes by StepanIvasyn danish: 2 changes by bscargo lithuanian: 15 changes by dziugas1959 spanish: 2 changes by MontyMontana french: 2 changes by glx22 portuguese (brazilian): 52 changes by pasantoro polish: 2 changes by pAter-exe --- src/lang/brazilian_portuguese.txt | 102 +++++++++++++++--------------- src/lang/danish.txt | 2 + src/lang/english_AU.txt | 2 + src/lang/french.txt | 2 + src/lang/greek.txt | 7 ++ src/lang/lithuanian.txt | 16 ++++- src/lang/norwegian_bokmal.txt | 2 + src/lang/polish.txt | 2 + src/lang/simplified_chinese.txt | 60 +++++++++--------- src/lang/spanish.txt | 2 + src/lang/ukrainian.txt | 26 ++++---- 11 files changed, 131 insertions(+), 92 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 78ad63e829..1ff4c07c7e 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -107,7 +107,7 @@ STR_QUANTITY_STEEL :{WEIGHT_LONG} d STR_QUANTITY_VALUABLES :{COMMA}{NBSP}saco{P "" s} de objetos de valor STR_QUANTITY_COPPER_ORE :{WEIGHT_LONG} de minério de cobre STR_QUANTITY_MAIZE :{WEIGHT_LONG} de milho -STR_QUANTITY_FRUIT :{WEIGHT_LONG} de fruta +STR_QUANTITY_FRUIT :{WEIGHT_LONG} de frutas STR_QUANTITY_DIAMONDS :{COMMA}{NBSP}saco{P "" s} de diamantes STR_QUANTITY_FOOD :{WEIGHT_LONG} de alimentos STR_QUANTITY_PAPER :{WEIGHT_LONG} de papel @@ -275,7 +275,7 @@ STR_LIST_FILTER_TOOLTIP :{BLACK}Digitar STR_TOOLTIP_GROUP_ORDER :{BLACK}Escolher a ordem de agrupamento STR_TOOLTIP_SORT_ORDER :{BLACK}Escolher a ordenação (descendente/ascendente) STR_TOOLTIP_SORT_CRITERIA :{BLACK}Escolher o critério de ordenação -STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Escolher o critério de procura +STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Escolher o critério de pesquisa STR_BUTTON_SORT_BY :{BLACK}Ordenar por STR_BUTTON_CATCHMENT :{BLACK}Cobertura STR_TOOLTIP_CATCHMENT :{BLACK}Mostrar/Ocultar a área de cobertura @@ -446,13 +446,13 @@ STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Configurações STR_SETTINGS_MENU_AI_SETTINGS :Configurações de IA STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Configurações de Script de Jogo STR_SETTINGS_MENU_NEWGRF_SETTINGS :Configurações de NewGRF -STR_SETTINGS_MENU_SANDBOX_OPTIONS :Opções das trapaças +STR_SETTINGS_MENU_SANDBOX_OPTIONS :Opções de trapaças STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Opções de transparência STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Mostrar nomes de localidades STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Mostrar nomes de estações STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Mostrar nomes dos pontos de controle STR_SETTINGS_MENU_SIGNS_DISPLAYED :Mostrar placas -STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Mostrar placas e nomes dos concorrentes +STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Mostrar placas/nomes dos concorrentes STR_SETTINGS_MENU_FULL_ANIMATION :Animação completa STR_SETTINGS_MENU_FULL_DETAIL :Máximo de detalhes STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Edifícios transparentes @@ -919,20 +919,20 @@ STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Abrir a STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}{STATION} não aceita mais: {CARGO_LIST} STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION} agora aceita: {CARGO_LIST} -STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Oferta de subsídio expirou:{}{}{STRING} d{G e a} {STRING} para {STRING} agora não será subsidiado -STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsídio retirado:{}{}Transportar {STRING} d{G e a} {STRING} para {STRING} não é mais subsidiado -STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subsídio oferecido:{}{}Primeiro transporte de {STRING} d{G e a} {STRING} para {STRING} receberá {UNITS_YEARS_OR_MINUTES} de subsídio da autoridade local! +STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Oferta de subsídio expirou:{}{}Transporte de {STRING} d{G e a} {STRING} para {STRING} agora não será subsidiado +STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsídio retirado:{}{}Transporte de {STRING} d{G e a} {STRING} para {STRING} não é mais subsidiado +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subsídio oferecido:{}{}Primeiro transporte de {STRING} d{G e a} {STRING} para {STRING} receberá subsídio da autoridade local durante {UNITS_YEARS_OR_MINUTES}! ###length 4 -STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subsídio concedido a {STRING}!{}{}{STRING} d{G e a} {STRING} para {STRING} será pago a 150% durante {UNITS_YEARS_OR_MINUTES}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subsídio concedido a {STRING}!{}{}{STRING} d{G e a} {STRING} para {STRING} será pago a 200% durante {UNITS_YEARS_OR_MINUTES}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subsídio concedido a {STRING}!{}{}{STRING} d{G e a} {STRING} para {STRING} será pago a 300% durante {UNITS_YEARS_OR_MINUTES}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subsídio concedido a {STRING}!{}{}{STRING} d{G e a} {STRING} para {STRING} será pago a 400% durante {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subsídio concedido a {STRING}!{}{}Transporte de {STRING} d{G e a} {STRING} para {STRING} receberá um adicional de 50% durante {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subsídio concedido a {STRING}!{}{}Transporte de {STRING} d{G e a} {STRING} para {STRING} receberá o dobro da tarifa durante {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subsídio concedido a {STRING}!{}{}Transporte de {STRING} d{G e a} {STRING} para {STRING} receberá o triplo da tarifa durante {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subsídio concedido a {STRING}!{}{}Transporte de {STRING} d{G e a} {STRING} para {STRING} receberá o quádruplo da tarifa durante {UNITS_YEARS_OR_MINUTES}! STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Tráfego caótico em {TOWN}!{}{}Programa de reconstrução de estradas financiado por {STRING} provoca 6 meses de sofrimento aos motoristas! STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}Tráfego caótico em {TOWN}!{}{}Programa de reconstrução de estradas financiado por {STRING} provoca 6 minutos de sofrimento aos motoristas! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Monopólio de transporte! -STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLACK}A autoridade local de {TOWN} assinou um contrato com {STRING} por 12 meses de direitos exclusivos de transporte! -STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}A autoridade local de {TOWN} assinou um contrato com {STRING} por 12 minutos de direitos exclusivos de transporte! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLACK}A autoridade local de {TOWN} assinou um contrato com {STRING} concedendo 12 meses de direitos exclusivos de transporte! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}A autoridade local de {TOWN} assinou um contrato com {STRING} concedendo 12 minutos de direitos exclusivos de transporte! # Extra view window STR_EXTRA_VIEWPORT_TITLE :{WHITE}Janela de visualização {COMMA} @@ -1056,8 +1056,8 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Marque e STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Usar a fonte fixa tradicional STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marque esta caixa se preferir usar o tipo de fonte tradicional de tamanho fixo -STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Fontes com bordas suaves -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marque esta caixa para fontes redimensionáveis com contornos suaves +STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Fontes com contornos suaves +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marque esta caixa para usar fontes redimensionáveis com contornos suaves STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -2112,7 +2112,7 @@ STR_CONFIG_SETTING_INTERFACE :Interface STR_CONFIG_SETTING_INTERFACE_GENERAL :Geral STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :Visualizações STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :Construção -STR_CONFIG_SETTING_ADVISORS :Notícias / Conselheiros +STR_CONFIG_SETTING_ADVISORS :Notícias / Avisos STR_CONFIG_SETTING_COMPANY :Empresa STR_CONFIG_SETTING_ACCOUNTING :Contabilidade STR_CONFIG_SETTING_VEHICLES :Veículos @@ -2575,6 +2575,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Seu nome STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}O nome do seu servidor não foi definido. O nome pode ser definido na parte superior da janela de Multijogador STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}A versão deste cliente é incompatível com a versão do servidor STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Senha incorreta +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Você não está na lista de clientes permitidos STR_NETWORK_ERROR_SERVER_FULL :{WHITE}O servidor está cheio STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Você foi banido deste servidor STR_NETWORK_ERROR_KICKED :{WHITE}Você foi expulso do jogo @@ -2602,6 +2603,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :um pacote invá STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :versão incorreta STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :nome já está em uso STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :senha incorreta +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :não está na lista de permissões STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :empresa errada em DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :expulso pelo servidor STR_NETWORK_ERROR_CLIENT_CHEATER :estava tentando trapacear @@ -3718,7 +3720,7 @@ STR_SUBSIDIES_CAPTION :{WHITE}Subsídi STR_SUBSIDIES_OFFERED_TITLE :{BLACK}Subsídios oferecidos para serviços de transporte: STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING} d{G e a} {STRING} para {STRING}{YELLOW} ({STRING}) STR_SUBSIDIES_NONE :{ORANGE}- Nenhum - -STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Serviços já subsidiados: +STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Serviços de transporte já subsidiados: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} d{G e a} {STRING} para {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique em um serviço para centralizar visualização principal em uma indústria/localidade. Ctrl+Clique para abrir uma nova visualização na localização da indústria/localidade STR_SUBSIDIES_OFFERED_EXPIRY_DATE :até {DATE_SHORT} @@ -4627,8 +4629,8 @@ STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Ir, sem parar, STR_ORDER_SERVICE_AT :Manutenção no STR_ORDER_SERVICE_NON_STOP_AT :Manutenção, sem parar, no -STR_ORDER_NEAREST_DEPOT :o mais próximo -STR_ORDER_NEAREST_HANGAR :o hangar mais próximo +STR_ORDER_NEAREST_DEPOT :mais próximo +STR_ORDER_NEAREST_HANGAR :hangar mais próximo ###length 3 STR_ORDER_TRAIN_DEPOT :Depósito Ferroviário STR_ORDER_ROAD_VEHICLE_DEPOT :Depósito Rodoviário @@ -4704,14 +4706,14 @@ STR_TIMETABLE_NO_TRAVEL :Não viajar STR_TIMETABLE_NOT_TIMETABLEABLE :Viajar (automático; programado pela próxima ordem manual) STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Viajar (não programado) STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Viajar (não programado) no máximo a {2:VELOCITY} -STR_TIMETABLE_TRAVEL_FOR :Viajar por {STRING} -STR_TIMETABLE_TRAVEL_FOR_SPEED :Viajar por {STRING} no máximo a {VELOCITY} -STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Viajar (por {STRING}, não programado) -STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Viajar (por {STRING}, não programado) no máximo a {VELOCITY} +STR_TIMETABLE_TRAVEL_FOR :Viajar durante {STRING} +STR_TIMETABLE_TRAVEL_FOR_SPEED :Viajar durante {STRING} no máximo a {VELOCITY} +STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Viajar (durante {STRING}, não programado) +STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Viajar (durante {STRING}, não programado) no máximo a {VELOCITY} STR_TIMETABLE_STAY_FOR_ESTIMATED :(ficar por {STRING}, não programado) -STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(viajar por {STRING}, não programado) +STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(viajar durante {STRING}, não programado) STR_TIMETABLE_STAY_FOR :e ficar por {STRING} -STR_TIMETABLE_AND_TRAVEL_FOR :e viajar por {STRING} +STR_TIMETABLE_AND_TRAVEL_FOR :e viajar durante {STRING} STR_TIMETABLE_TOTAL_TIME :{BLACK}Este horário levará {STRING} para ser concluído STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Este horário levará pelo menos {STRING} para ser concluído (nem tudo está programado) @@ -5399,7 +5401,7 @@ STR_INDUSTRY_NAME_POWER_STATION :{G=f}Usina de E STR_INDUSTRY_NAME_SAWMILL :{G=f}Serraria STR_INDUSTRY_NAME_FOREST :{G=f}Floresta STR_INDUSTRY_NAME_OIL_REFINERY :{G=f}Refinaria de Petróleo -STR_INDUSTRY_NAME_OIL_RIG :{G=f}Plataforma de Petróleo +STR_INDUSTRY_NAME_OIL_RIG :{G=f}Plataforma Petrolífera STR_INDUSTRY_NAME_FACTORY :{G=f}Fábrica STR_INDUSTRY_NAME_PRINTING_WORKS :{G=f}Gráfica STR_INDUSTRY_NAME_STEEL_MILL :{G=f}Siderúrgica @@ -5445,33 +5447,33 @@ STR_SV_AIRCRAFT_NAME :Aeronave #{COMM ###length 27 STR_SV_STNAME :{STRING} -STR_SV_STNAME_NORTH :{STRING}, Norte -STR_SV_STNAME_SOUTH :{STRING}, Sul -STR_SV_STNAME_EAST :{STRING}, Leste -STR_SV_STNAME_WEST :{STRING}, Oeste -STR_SV_STNAME_CENTRAL :{STRING}, Centro -STR_SV_STNAME_TRANSFER :{STRING}, Transbordo -STR_SV_STNAME_HALT :{STRING}, Parada -STR_SV_STNAME_VALLEY :Vale de {STRING} -STR_SV_STNAME_HEIGHTS :Colinas de {STRING} -STR_SV_STNAME_WOODS :Bosque de {STRING} -STR_SV_STNAME_LAKESIDE :Litoral de {STRING} -STR_SV_STNAME_EXCHANGE :{STRING}, Intercâmbio -STR_SV_STNAME_AIRPORT :Aeroporto de {STRING} -STR_SV_STNAME_OILFIELD :Petrolífera de {STRING} -STR_SV_STNAME_MINES :Minas de {STRING} -STR_SV_STNAME_DOCKS :Docas de {STRING} +STR_SV_STNAME_NORTH :{STRING} Norte +STR_SV_STNAME_SOUTH :{STRING} Sul +STR_SV_STNAME_EAST :{STRING} Leste +STR_SV_STNAME_WEST :{STRING} Oeste +STR_SV_STNAME_CENTRAL :{STRING} Centro +STR_SV_STNAME_TRANSFER :{STRING} Transbordo +STR_SV_STNAME_HALT :{STRING} Parada +STR_SV_STNAME_VALLEY :{STRING} Vale +STR_SV_STNAME_HEIGHTS :{STRING} Colinas +STR_SV_STNAME_WOODS :{STRING} Bosque +STR_SV_STNAME_LAKESIDE :{STRING} Margens +STR_SV_STNAME_EXCHANGE :{STRING} Intercâmbio +STR_SV_STNAME_AIRPORT :{STRING} Aeroporto +STR_SV_STNAME_OILFIELD :{STRING} Petrolífera +STR_SV_STNAME_MINES :{STRING} Minas +STR_SV_STNAME_DOCKS :{STRING} Docas STR_SV_STNAME_BUOY :{STRING} STR_SV_STNAME_WAYPOINT :{STRING} ##id 0x6020 -STR_SV_STNAME_ANNEXE :{STRING}, Anexo -STR_SV_STNAME_SIDINGS :{STRING}, Desvios -STR_SV_STNAME_BRANCH :{STRING}, Ramal -STR_SV_STNAME_UPPER :Acima de {STRING} -STR_SV_STNAME_LOWER :Abaixo de {STRING} -STR_SV_STNAME_HELIPORT :Heliporto de {STRING} -STR_SV_STNAME_FOREST :Floresta de {STRING} -STR_SV_STNAME_FALLBACK :{STRING}, Estação #{NUM} +STR_SV_STNAME_ANNEXE :{STRING} Anexo +STR_SV_STNAME_SIDINGS :{STRING} Desvio +STR_SV_STNAME_BRANCH :{STRING} Ramal +STR_SV_STNAME_UPPER :{STRING} Superior +STR_SV_STNAME_LOWER :{STRING} Inferior +STR_SV_STNAME_HELIPORT :{STRING} Heliporto +STR_SV_STNAME_FOREST :{STRING} Floresta +STR_SV_STNAME_FALLBACK :{STRING} Estação #{NUM} ############ end of savegame specific region! diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 1770c0772a..6439fbb633 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -2574,6 +2574,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Dit spil STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Dit servernavn er ikke indstillet. Navnet kan indstilles øverst i Netværksspil vinduet STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Revisionen af denne klient passer ikke sammen med serverens revision STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Forkert kodeord +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Du er ikke på listen over tilladte klienter STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Serveren er fuld STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Du er udelukket fra denne server STR_NETWORK_ERROR_KICKED :{WHITE}Du blev smidt ud af spillet @@ -2601,6 +2602,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :modtog en ikke STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :forkert revision STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :navnet er allerede i brug STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :forkert spil kodeord +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :ikke på listen over tilladelser STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :forkert firma-id i DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :smidt ud af serveren STR_NETWORK_ERROR_CLIENT_CHEATER :prøvede at snyde diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index f79c32acec..3427437456 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -2574,6 +2574,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Your pla STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Your server name has not been set. The name can be set at the top of the Multiplayer window STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}The revision of this client does not match the server's revision STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Wrong password +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}You are not on the list of allowed clients STR_NETWORK_ERROR_SERVER_FULL :{WHITE}The server is full STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}You are banned from this server STR_NETWORK_ERROR_KICKED :{WHITE}You were kicked out of the game @@ -2601,6 +2602,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :received invali STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :wrong revision STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :name already in use STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :wrong password +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :not on allow list STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :wrong company in DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :kicked by server STR_NETWORK_ERROR_CLIENT_CHEATER :was trying to use a cheat diff --git a/src/lang/french.txt b/src/lang/french.txt index 0f70007496..503c99c91b 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -2575,6 +2575,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Vous n'a STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Le nom de serveur n'a pas été défini. Le nom peut être défini en haut de la fenêtre multijoueur STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Le numéro de version/révision de ce client ne correspond pas à celui du serveur STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Mot de passe incorrect +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Vous n'êtes pas sur la liste des clients autorisés STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Le serveur est complet STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Vous êtes banni de ce serveur STR_NETWORK_ERROR_KICKED :{WHITE}Vous avez été exclu de la partie @@ -2602,6 +2603,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :paquet invalide STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :n° de version/révision incorrect STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :nom déjà utilisé STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :mot de passe de partie incorrect +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :pas sur la liste d'autorisation STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :mauvais company-id dans DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :exclu par le serveur STR_NETWORK_ERROR_CLIENT_CHEATER :a tenté de tricher diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 6cad1496a2..b317bf0f12 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -314,6 +314,7 @@ STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP} # Time units used in string control characters +STR_UNITS_MINUTES :{NUM}{NBSP}λεπτ{P ό ά} # Common window strings @@ -997,7 +998,13 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Επικ STR_GAME_OPTIONS_CAPTION :{WHITE}Επιλογές Παιχνιδιού STR_GAME_OPTIONS_TAB_GENERAL :Γενικά +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Επιλέξτε γενικές ρυθμίσεις +STR_GAME_OPTIONS_TAB_GRAPHICS :Γραφικά +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Επιλέξτε ρυθμίσεις γραφικών STR_GAME_OPTIONS_TAB_SOUND :Ήχος +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Επιλέξτε ρυθμίσεις ήχου και μουσικής +STR_GAME_OPTIONS_TAB_SOCIAL :Κοινωνικά +STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}Επιλέξτε ρυθμίσεις κοινωνικής ενσωμάτωσης diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 5a5bdacd65..4c761c6713 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -2287,9 +2287,11 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Rodyti t STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Rodyti automobilių spalvas STR_LIVERY_SHIP_TOOLTIP :{BLACK}Rodyti laivų spalvas STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Rodyti lėktuvų spalvas +STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Rodyti traukinių grupių spalvas STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Pasirinkite pirminę spalvą pasirinktai schemai. Spustelėjus laikant nuspaustą Ctrl klavišą, pasirinkta spava bus nustatyta visoms schemoms. STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Pasirinkite antrinę spalvą pasirinktai schemai. Spustelėjus laikant nuspaustą Ctrl klavišą, pasirinkta spava bus nustatyta visoms schemoms. STR_LIVERY_PANEL_TOOLTIP :{BLACK}Pasirinkite objektą, kurio spalvas norite pakeisti. Spragsint laikant nuspaustą Ctrl klavišą, galėsite pasirinkti iškart kelis objektus. +STR_LIVERY_TRAIN_GROUP_EMPTY :Nėra nustatytų traukinių grupių ###length 23 STR_LIVERY_DEFAULT :Numatytosios spalvos @@ -2514,6 +2516,10 @@ STR_NETWORK_ASK_RELAY_NO :{BLACK}Ne STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Taip, bet tik šįkart STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Taip, ir prašau nebeklausti +STR_NETWORK_ASK_SURVEY_CAPTION :Dalyvauti automatinėje apklausoje? +STR_NETWORK_ASK_SURVEY_PREVIEW :Peržiūrėti apklausos rezultatus +STR_NETWORK_ASK_SURVEY_LINK :Apie apklausą ir privatumą +STR_NETWORK_ASK_SURVEY_NO :Ne STR_NETWORK_SPECTATORS :Stebėtojai @@ -3251,10 +3257,12 @@ STR_MAPGEN_MAPSIZE :{BLACK}Žemėla STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Pasirinkite žemėlapio dydį langeliais. Prieinamų langelių skaičius bus šiek tiek mažesnis. STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Miestų kiekis: +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Pasirinkti gyvenviečių tankumą, arba pasirinktinę reikšmę STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Miestų pavadinimai: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Pasirink miestų pavadinimų tipą STR_MAPGEN_DATE :{BLACK}Pradžios data: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Pramonės įmonių kiekis: +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Pasirinkti pramonės tankumą, arba pasirinktinę reikšmę STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Didžiausias aukštis STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Padidinti didžiausią galimą reljefo aukštį vienetu STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Sumažinti didžiausią galimą reljefo aukštį vienetu @@ -3274,6 +3282,7 @@ STR_MAPGEN_VARIETY :{BLACK}Įvairov STR_MAPGEN_GENERATE :{WHITE}Sukurti STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF Nustatymai STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Rodyti NewGRF nustatymus +STR_MAPGEN_AI_SETTINGS :{BLACK}DI nustatymai STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Rodyti DI nustatymus STR_MAPGEN_GS_SETTINGS :{BLACK}Žaidimo scenarijaus nustatymai STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Rodyti žaidimo scenarijaus nustatymus @@ -3330,6 +3339,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Lygi že STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Sukurti lygią žemę STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Atsitiktinis reljefas STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Lygumos aukštis: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Pasirinkite žemės aukštį virš jūros lygio STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Pakeisti lygumos aukštį vienu žemyn STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Pakelti žemės lygį vienu aukščiu @@ -3767,10 +3777,11 @@ STR_FINANCES_CAPITAL_EXPENSES_TITLE :{WHITE}Kapitali STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Konstrukcijos STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Nauja technika STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Traukinių sąnaudos -STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Automobilių sąnaudos +STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Kelio transporto priemonės STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Lėktuvų sąnaudos STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Laivų sąnaudos STR_FINANCES_SECTION_TRAIN_REVENUE :{GOLD}Traukiniai +STR_FINANCES_SECTION_ROAD_VEHICLE_REVENUE :{GOLD}Transporto priemonės STR_FINANCES_SECTION_AIRCRAFT_REVENUE :{GOLD}Lėktuvas STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Paskolos palūkanos STR_FINANCES_SECTION_OTHER :{GOLD}Kita @@ -3781,6 +3792,7 @@ STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURREN STR_FINANCES_PROFIT :{WHITE}Pelnas STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Sąskaitos balansas STR_FINANCES_LOAN_TITLE :{WHITE}Paskola +STR_FINANCES_INTEREST_RATE :{WHITE}Paskolų palūkanos: {BLACK}{NUM}% STR_FINANCES_MAX_LOAN :{WHITE}Didžiausia paskola: {BLACK}{CURRENCY_LONG} STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG} @@ -5194,6 +5206,8 @@ STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... lėk # Extra messages which go on the third line of errors, explaining why orders failed STR_ERROR_NO_AIRPORT :{WHITE}Nėra jokio oro ar sraigtasparnio uosto +STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Nėra jokių stabdymų su palaikomu keliu (tipu) +STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Nėra jokių stabdymų su palaikomu tramvajaus tipu # Timetable related errors STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Neįmanoma sudaryti grafiko... diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 671d576a71..43722b0af0 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -2576,6 +2576,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Spillern STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Du har ikke valgt tjenernavn. Navnet kan velges øverst i flerspillervinduet STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Klientversjonen er ikke den samme som tjenerversjonen STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Feil passord +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Du står ikke på listen over tillatte klienter STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Tjeneren er full STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Du er bannlyst fra denne tjeneren STR_NETWORK_ERROR_KICKED :{WHITE}Du ble kastet ut av spillet @@ -2603,6 +2604,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :mottok ugyldig STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :feil versjon STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :navnet er allerede i bruk STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :feil passord +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :ikke på tillattliste STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :feil selskap i DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :kastet ut av tjeneren STR_NETWORK_ERROR_CLIENT_CHEATER :prøvde å jukse diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 9105a3c14a..e579023bd2 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2954,6 +2954,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Twoja na STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Nazwa twojego serwera nie została ustawiona. Nazwę można ustawić w górnej części okna Gra wieloosobowa STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Wersja gry nie zgadza się z wersją gry na serwerze STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Złe hasło +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Nie ma cię na liście dopuszczonych klientów STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Serwer jest pełny STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Masz zabroniony dostęp do tego serwera STR_NETWORK_ERROR_KICKED :{WHITE}Zostałeś wyrzucony z serwera @@ -2981,6 +2982,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :odebrany niezna STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :zła wersja STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :nazwa już w użyciu STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :złe hasło gry +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :brak na liście dopuszczonych STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :zła nazwa firmy w DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :wyrzucony przez serwer STR_NETWORK_ERROR_CLIENT_CHEATER :próbował użyć ułatwień diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 9e00518369..13193a82a0 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1054,9 +1054,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}适应 STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}选中此框使边框大小随界面大小而缩放 STR_GAME_OPTIONS_GUI_FONT_SPRITE :使用位图字体 -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}如果您想使用固定大小的传统位图字体,请勾选此框。 +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}如果您想使用固定大小的传统位图字体,请勾选此框 STR_GAME_OPTIONS_GUI_FONT_AA :字体抗锯齿 -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :勾选此框以对游戏字体应用抗锯齿。 +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}勾选此框以对游戏字体应用抗锯齿 STR_GAME_OPTIONS_GUI_SCALE_1X :1倍 STR_GAME_OPTIONS_GUI_SCALE_2X :2倍 @@ -1275,7 +1275,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :无限资金: { STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :允许无限制的支出并禁止公司破产 STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :最大初始贷款: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :公司最大贷款额(不考虑通货膨胀的影响)。如果此项被设为“无贷款”则开局时不会有任何金钱提供。此时金钱需要由沙盒选项、无限金钱或者游戏脚本提供。 +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :公司最大贷款额(不考虑通货膨胀的影响)。如果此项被设为“无贷款”则开局时不会有任何金钱提供,此时金钱需要由“无限金钱”选项或者游戏脚本提供 STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :无贷款 @@ -1359,7 +1359,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :汽车斜坡坡 STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :设置对汽车而言,一格斜坡的坡度大小。数值越高,坡度越大,汽车越难爬上斜坡。 STR_CONFIG_SETTING_FORBID_90_DEG :禁止列车直角转向:{STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :当水平方向轨道与垂直方向轨道交叉时,没有采用45度的轨道组合连接,而是采用轨道90度直接连接时,列车通过时需要90度转弯,当本设置”打开“时,将禁止火车90度转弯。 +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :当相邻的两个方块上有一条水平轨道和一条垂直轨道相接时,就会形成一个90度的转角,火车在穿越此方块边界时将转弯90度,而不是像其他形式的轨道转弯时形成的45度转角。如果打开此选项,那么火车将无法在这样的转角转弯 STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :允许非毗邻站台合并:{STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :启用时允许玩家用 键操作以合并不相邻的站台与车站。 @@ -1471,7 +1471,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :公司初始主 STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :选定公司的初始配色方案 STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :公司初始副色调: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :选择公司初始副色调,需要使用支持副色调的NewGRF。 +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :选择公司初始副色调,需要使用支持副色调的NewGRF STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :总允许建设小型机场: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :“打开”此选项,每种类型机场出现后一直是可用的 @@ -1495,22 +1495,22 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :载具永不过 STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :启用时,所有载具一经面世,就可以永远选择购买使用。 STR_CONFIG_SETTING_TIMEKEEPING_UNITS :时间模式:{STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :选择游戏的计时模式。 请注意此项无法在游戏进行时更改{}{}日历模式为经典的 OpenTTD 体验,在此模式中,一年由 12 个月组成,每个月有 28-31 天。{}{}在挂钟模式中,车辆移动、货物生产和财务计算等都以分钟为单位,一分钟约等于日历模式中的一个月,即 30 天。此模式下每 12 分钟即日历模式下的一年。{}{}两种模式都包含一个用来记录载具、房屋与其他基础设施引入日期的计时器。 +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :选择游戏的计时模式。 请注意此项无法在游戏进行时更改{}{}日历模式为经典的 OpenTTD 体验,在此模式中,一年由 12 个月组成,每个月有 28-31 天。{}{}在挂钟模式中,车辆移动、货物生产和财务计算等都以分钟为单位,一分钟约等于日历模式中的一个月,即 30 天。此模式下每 12 分钟即日历模式下的一年。{}{}两种模式都包含一个用来记录载具、房屋与其他基础设施引入日期的计时器 ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :日历 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :挂钟 STR_CONFIG_SETTING_MINUTES_PER_YEAR :一年分钟数:{STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :选择在使用挂钟模式时,一年的分钟数。默认为 12 分钟,设置为 0 可停止日历时间的变化。此设置不影响游戏的经济模拟。 +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :选择游戏内一自然年的现实时间长度,默认为12分钟。设置为0则日期不会变化。此设定不会影响游戏的经济模拟系统,而且仅在启用挂钟计时模式时生效 STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0(日期停止) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :城镇货物产出倍数:{STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :按此比例扩大城镇的货物生产规模。 +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :按此比例扩大城镇的货物生产规模 STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :工业货物产出倍数:{STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :按此比例扩大工业的货物生产规模。 +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :按此比例扩大工业的货物生产规模 STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :当车辆报废时自动更新:{STRING} @@ -1529,7 +1529,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :错误信息持 STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :红色窗口显示错误信息的持续时间,在这个时间内一些紧急的错误信息不会自动关闭,必须手动关闭 STR_CONFIG_SETTING_HOVER_DELAY :显示提示信息:{STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :此设置决定鼠标停留在图标、按键或功能时显示提示信息的时间。如果此设置被赋值为 0,您必须揿住鼠标右键来显示图标、按键或功能的提示信息。 +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :此设置决定鼠标停留在图标、按键或功能时显示提示信息的时间。如果此设置为 0,您就必须按鼠标右键来显示图标、按键或功能的提示信息 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :停留 {COMMA} 毫秒 ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :右键点击 @@ -1541,8 +1541,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :图表曲线宽 STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :图表中曲线的宽度,细线清晰易读,粗线容易分辨颜色 STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :在购买载具窗口中显示 NewGRF 的名字:{STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :在购买载具窗口中添加一行,显示选中载具的 NewGRF。 -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :在列表窗口中显示车辆可以携带的货物 {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :在购买载具窗口中添加一行,显示选中的载具来自哪个 NewGRF +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :在列表窗口中显示车辆可以运载的货物种类 {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :如果启用,车辆的可运输负载将出现在车辆列表的上方 STR_CONFIG_SETTING_LANDSCAPE :景观: {STRING} @@ -1561,7 +1561,7 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :工业布局: { STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :设置地图生成过程中,工业数量及一、二级工业比例。 STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :石油工业距地图边缘的最大距离:{STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :限制炼油厂和油井到地图边缘或海岛海岸的最大距离。对于大于 256 格的地图,该值将按比例放大。 +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :限制炼油厂和油井到地图边缘或海岛海岸的最大距离。对于大于 256 格的地图,该值将按比例放大 STR_CONFIG_SETTING_SNOWLINE_HEIGHT :雪线高度:{STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :控制在寒带气候中雪线高度。大雪会影响工业和城镇发展需求。只能在场景编辑器中更改或由“雪地比率”计算得到。 @@ -1575,7 +1575,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :控制热带气 STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :地面粗糙度:{STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :选择在地图上的山丘密度。光滑的地形会包含较少且相互之间较分散的山丘;粗糙的地形的山丘较密集,但可能会使地图显得重复 +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :选择在地图上的山丘密度和形状。光滑的地形会包含较少且较为广阔的山丘;粗糙的地形会包含更多,但是更小一些的山丘 ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :非常光滑 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :光滑 @@ -1583,7 +1583,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :粗糙 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :非常粗糙 STR_CONFIG_SETTING_VARIETY :多样地形: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :此设置控制地图是否同时包含多山及平坦的地带。由于此设置只会使地图的一部份変得较平坦,请把其他相关设置(如 "地形特点")的值设为 "山地" +STR_CONFIG_SETTING_VARIETY_HELPTEXT :此设置控制地图是否同时包含多山及平坦的地带。多样性越丰富,山地和平地之间的海拔差距就越大 STR_CONFIG_SETTING_RIVER_AMOUNT :河流数量: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :选择生成河流的数量 @@ -1754,7 +1754,7 @@ STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :建造铁路时 STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :建造铁路时自动移除路过的信号灯。注意,这可能导致火车事故。 STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :快进速度上限:{STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :限制快进时的最大速度。0 = 无限制(在您计算机允许的范围内)。低于 100% 的值将使游戏变慢。上限取决于您计算机的配置,并随着游戏情况浮动。 +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :限制快进时的最大速度。0 = 无限制(即电脑性能允许的最快速度)。低于 100% 的值将使游戏变慢。上限取决于您计算机的配置,并可能随着游戏情况浮动 STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% 正常游戏速度 ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :无限制(在您计算机允许的范围内) @@ -1818,7 +1818,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :“打开”时 STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :不令脚本停运的最大代码数量:{STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :设定在每个计算循环中,脚本(AI与游戏脚本)的每一句代码最多可进行多少个计算步骤。 STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :每个脚本的内存上限: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :单个脚本(AI与游戏脚本)可使用的最大内存量,在游玩大型地图时可能需要增加。 +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :单个脚本(AI与游戏脚本)可使用的最大内存量,在游玩大型地图时可能需要增加 STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :维护间隔以百分比(%)计算: {STRING} @@ -1840,7 +1840,7 @@ STR_CONFIG_SETTING_NOSERVICE :在无故障模 STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :“打开”时,在无故障模式下,车辆禁用保养周期 STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :站台长度装卸惩罚:{STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :启用站台长度装卸惩罚。过长的火车将会在站台中装卸得更慢。此项设置不会影响寻路。 +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :启用站台长度装卸惩罚。过长的火车将会在站台中装卸得更慢。此项设置不会影响寻路 STR_CONFIG_SETTING_WAGONSPEEDLIMITS :列车车厢速度限制:{STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :启用时,列车的最高速度将取决于车厢的速度上限。 @@ -1905,13 +1905,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :从这一年开 STR_CONFIG_SETTING_STARTING_YEAR :开始年份:{STRING} STR_CONFIG_SETTING_ENDING_YEAR :结束计分年份:{STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :游戏结束计分的年份。在这一年的年底,公司的分数将被记录,并展示高分榜;在此之后玩家仍可继续游戏。{}如果该年份早于游戏开始年份,则高分榜将不会展示。 +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :游戏结束计分的年份。在这一年的年底,公司的分数将被记录,并展示高分榜;在此之后玩家仍可继续游戏。{}如果该年份早于游戏开始年份,则高分榜将不会展示 STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :从不 STR_CONFIG_SETTING_ECONOMY_TYPE :经济类型:{STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :平滑经济产生更小幅度更频繁的产量变动。冻结经济停止产量变动和工业倒闭。该设置可能对 NewGRF 提供的工业不起作用。 +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :平滑经济产生更小幅度更频繁的产量变动。冻结经济停止产量变动和工业倒闭。该设置可能对 NewGRF 提供的工业不起作用 ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :原版 STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :平滑 @@ -1966,7 +1966,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :允许 STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :允许,自定义城镇布局 STR_CONFIG_SETTING_TOWN_CARGOGENMODE :城镇货物生成:{STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :城镇客货产出与人口的关系。{}平方增长:两倍大小的城镇生产四倍的旅客。{}线性增长:两倍大小的城镇生产两倍的旅客。 +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :城镇房屋的客货产出与人口的关系。{}平方增长:两倍大小的城镇生产四倍的旅客。{}线性增长:两倍大小的城镇生产两倍的旅客 ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :四倍(原版) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :线性 @@ -2007,7 +2007,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4 倍 STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8 倍 STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :贴图的最高分辨率:{STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :限制贴图的最高分辨率。限制贴图分辨率将避免使用高分辨率贴图,即使它们可用。有助于在混用有/无高分辨率图形的 GRF 文件时保持游戏外观的统一。 +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :限制贴图的最高分辨率。限制贴图分辨率将避免使用高分辨率贴图,即使它们可用。有助于在混用有/无高分辨率图形的 GRF 文件时保持游戏外观的统一 ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4 倍 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2 倍 @@ -2057,7 +2057,7 @@ STR_CONFIG_SETTING_DEMAND_SIZE :在对称模式 STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :如果把此设定赋一个少于100%的值,则到达某站的货物不会全部被送回始发站。{}如果此设定被赋值为0%,則“对称”模式的表现跟“不对称”模式完全一样 STR_CONFIG_SETTING_SHORT_PATH_SATURATION :如果最短路径的饱和度超过{STRING},把货物改派往容量较大的路径 -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :货物分配功能在派送货物时,会优先使用最短路径,当它饱和后改用第二短的路径,如此类推。当所有路径皆饱和但仍未满足需求,系统會由容量较大的路径开始继续加载货物。{}由于路径饱和度难以准确估算,此设定容许您定义一值,使短路径达到该饱和度后,系统便开始加载容量较大的路径。{}如果此设定的值少於100%,就算系统高估路径容量,也不會使过多的货物滞留在站台上。 +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :在两个给定的站点之间常常会会有多条不同的路径。货物分配算法会优先使用最短的路径,在其饱和后再使用第二短的路径,依此类推。路径的饱和度是用运载容量和计划使用量估算的。在所有路径都饱和的时候,算法会向所有路径超额装载货物,优先使用容量较高的路径。但是在多数场合算法无法准确计算容量。此设定允许您设定在较短的路径的饱和度达到设定值之后再装载下一条路径。将此值设定为小于100%,就可避免因过量估算容量而导致的站点超载 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :速度单位(陆地):{STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :速度单位(航海):{STRING} @@ -2574,6 +2574,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}你没 STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}你没有设置服务器名。玩家名可在联机游戏窗口的上面设置 STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}此客户端版本与服务器端不匹配 STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}密码错误 +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}你不在白名单所允许的客户端范围内 STR_NETWORK_ERROR_SERVER_FULL :{WHITE}服务器已经满员 STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}您已被该服务器封禁 STR_NETWORK_ERROR_KICKED :{WHITE}您已被踢出服务器 @@ -2601,6 +2602,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :收到异常数 STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :错误的版本 STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :已经有人用这个名字了 STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :错误的密码 +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :不在允许列表内 STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :错误的公司ID于DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :被服务器踢出 STR_NETWORK_ERROR_CLIENT_CHEATER :正在尝试作弊 @@ -3190,7 +3192,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :公司所有土 # About OpenTTD window STR_ABOUT_OPENTTD :{WHITE}关于 OpenTTD -STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}原始版权由 {COPYRIGHT} 1995 Chris Sawyer 所有,保留一切权力。 +STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}原始版权由 {COPYRIGHT} 1995 Chris Sawyer 所有,保留所有权利 STR_ABOUT_VERSION :{BLACK}OpenTTD 版本 {REV} STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD 团队 @@ -3198,11 +3200,11 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}帧率 STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}模拟速率: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}每秒模拟的游戏时刻数。 +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}每秒模拟的游戏刻数 STR_FRAMERATE_RATE_BLITTER :{BLACK}帧率:{STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}每秒渲染更新的图像帧。 +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}每秒渲染更新的图像帧 STR_FRAMERATE_SPEED_FACTOR :{BLACK}当前游戏速度:{DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}当前游戏运行速度,与正常速度之比率 +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}当前游戏运行速度与正常速度相比的比值 STR_FRAMERATE_CURRENT :{WHITE}当前 STR_FRAMERATE_AVERAGE :{WHITE}平均 STR_FRAMERATE_MEMORYUSE :{WHITE}内存 @@ -3731,7 +3733,7 @@ STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}全域 STR_STORY_BOOK_SPECTATOR :全域历史纪录 STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :第{NUM}页 -STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}从下拉选单中选择想要查看的页面. +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}从下拉选单中选择想要查看的页面 STR_STORY_BOOK_PREV_PAGE :{BLACK}上一个 STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}转到上一页 STR_STORY_BOOK_NEXT_PAGE :{BLACK}下一个 @@ -4026,7 +4028,7 @@ STR_GROUP_DEFAULT_AIRCRAFTS :未分组飞机 STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}组 - 点击一个组别以显示所有隶属此组的车辆。拖曳组别标签以重新排列组别的次序和层级。 +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}组 - 点击一个组别以显示所有隶属此组的车辆。拖曳组别标签以重新排列组别的次序和层级 STR_GROUP_CREATE_TOOLTIP :{BLACK}创建分组 STR_GROUP_DELETE_TOOLTIP :{BLACK}删除分组 STR_GROUP_RENAME_TOOLTIP :{BLACK}重命名该分组 diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 3677726ee4..e6782944b2 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -2575,6 +2575,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}No se ha STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}No se ha establecido el nombre de tu servidor. El nombre se puede establecer en la parte superior de la ventana de Multijugador STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}La versión de este cliente no corresponde con la versión del servidor STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Contraseña incorrecta +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}No estás en la lista de clientes permitidos STR_NETWORK_ERROR_SERVER_FULL :{WHITE}El servidor está completo STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Se ha prohibido tu acceso al servidor STR_NETWORK_ERROR_KICKED :{WHITE}Has sido expulsado del servidor @@ -2602,6 +2603,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :recibido paquet STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :versión incorrecta STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :nombre en uso STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :contraseña incorrecta +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :no está en la lista de permitidos STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :empresa incorrecta en un DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :expulsado por el servidor STR_NETWORK_ERROR_CLIENT_CHEATER :ha intentado usar un truco diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index ad41942019..16f36d1cff 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -525,13 +525,13 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Пока STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Покаже загальну інформацію про компанію STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Показати історію STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Покаже список завдань -STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Показати графіки +STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Показати графіки компаній і тарифи доставки вантажів STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Покаже таблицю компаній STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Фінансувати будівництво нової промисловості -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Показати список поїздів компанії. Ctrl+клац мишою переключає відкриття звичайного/розширенного списку -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Показати список дорожнього транспорту компанії. Ctrl+клац мишою переключає відкриття звичайного/розширенного списку -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Показати список кораблів компанії. Ctrl+клац мишою переключає відкриття звичайного/розширенного списку -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Показати список повітряного транспорту компанії. Ctrl+клац мишою переключає відкриття звичайного/розширенного списку +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Показує список поїздів компанії. Ctrl+клац показує або приховує групи, протилежно до обраного налаштування +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Показує список дорожнього транспорту компанії. Ctrl+клац показує або приховує групи, протилежно до обраного налаштування +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Показати список кораблів компанії. Ctrl+клац показує або приховує групи, протилежно до обраного налаштування +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Показує список повітряного транспорту компанії. Ctrl+клац показує або приховує групи, протилежно до обраного налаштування STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Збільшити STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Зменшити STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Будувати залізницю @@ -750,7 +750,7 @@ STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Варт STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Останні 72 хвилини -STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Тарифи на доставку вантажів +STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Тарифи доставки вантажів STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Днів у русі STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Секунд у русі STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Плата за доставку 10 одиниць (або 10,000 літрів) вантажу на відстань 20 квадратів @@ -1541,7 +1541,7 @@ STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :При вклю STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :При включенні наприкінці кожного періоду виринає вікно фінансів для легшого огляду фінансового стану компанії. STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Створювати накази з поміткою «без зупинки»: {STRING} -STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Якщо в завданні транспортного засобу не вказана помітка «без зупинки», то воно зупиняєтся на всіх станціях на своєму шляху. Включення цієї опції призводить до того, що нові завдання будуть автоматично створюватися з поміткою «без зупинки» і транспортний засіб буде зупинятися лише на заданних станціях. Звичайно, при необхідності помітку можна зняти або встановити власноруч. +STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Якщо в завданні транспортного засобу не вказана помітка «без зупинки», то він зупиняєтся на всіх станціях на своєму шляху. Якщо увімкнути це налаштування, то нові завдання будуть автоматично створюватися з поміткою «без зупинки» і транспортний засіб буде зупинятися лише на вказаних станціях. При необхідності помітку можна зняти або встановити власноруч. STR_CONFIG_SETTING_STOP_LOCATION :Створювати накази для поїздів з зупинкою {STRING} платформи STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Задайте, який кінець платформи для зупинки поїздів вказувати у нових завданнях.{}- на початку: початок платформи в напрямку руху;{}- посередині: середина платформи;{}- наприкінці: кінець платформи в напрямку руху. @@ -1594,8 +1594,8 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Нормаль STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Дозволити переїзди на дорогах або залізницях, якими володіють конкуренти: {STRING} STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Дозволяє будівництво переїздів на дорогах або залізницях, якими володіють конкуренти -STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Дозволити встановлення зупинок на дорогах міста: {STRING} -STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Дозволяє встановлення зупинок на дорогах, якими володіє місто. +STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Дозволити встановлення проїзних зупинок на дорогах міста: {STRING} +STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Дозволяє встановлення проїзних зупинок на дорогах, якими володіють міста STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Дозволити встановлення зупинок на дорогах конкурентів: {STRING} STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Дозволяє встановлення зупинок на дорогах, якими володіють конкуренти. STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Цю настройку не можливо змінити при наявності транспорту у грі @@ -1636,6 +1636,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Календа STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Настінний годинник STR_CONFIG_SETTING_MINUTES_PER_YEAR :Хвилин у році: {STRING} +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Оберіть кількість хвилин у календарному році. Базово 12 хвилин. Щоб зупинити зміни календаря, встановіть 0. Налаштування не вплине на симуляцію економіки у грі. Налаштування доступне тільки з годинниковим розкладом STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special @@ -1952,7 +1953,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Дозволя STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Максимально допустима кількість #opcodes: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Максимально допустима кількість розрахунків, які може виконати скрипт впродовж одного ходу STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Максимальне використання пам'яті скриптом: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Скільки пам'яті може зайняти один скрипт до примусового припинення. Це може знадобитися збільшити для великих карт. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Який обсяг пам'яті може зайняти один скрипт до примусового припинення. Можливо розмір треба збільшити для великих мап. STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MБ STR_CONFIG_SETTING_SERVINT_ISPERCENT :Інтервали техогляду вказано у відсотках: {STRING} @@ -2734,6 +2735,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :отриман STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :невірна версія гри STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :таке ім'я вже є STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :пароль невірний +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :не у списку доступного STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :неправильний company-id в DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :відключено сервером від гри STR_NETWORK_ERROR_CLIENT_CHEATER :спроба грати нечесно @@ -4081,7 +4083,7 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} і {NUM} ще... -STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Назви підприємств - клацніть мишею на назву, щоб показати підприємство у центрі екрану. Ctrl+клац мишею відкриває нове вікно з видом на підприємство +STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Назви підприємств - клацніть мишею на назву, щоб показати підприємство у центрі екрану. Ctrl+клац мишею відкриє додаткове вікно з підприємством у центрі STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Приймається вантаж: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Виробництво: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Усі вантажі @@ -4476,7 +4478,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Пока ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити поїзд у депо -STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити авто в депо +STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити авто в депо. Ctrl+клац тільки для техогляду STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити корабель в депо STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити літак в ангар. Ctrl+клац тільки для техогляду From d4a6ee95549d9c07d8e9ba0724040597deb9e444 Mon Sep 17 00:00:00 2001 From: Owen Rudge Date: Wed, 13 Mar 2024 14:13:09 +0000 Subject: [PATCH 155/695] Change: [CI] Use Azure Code Signing for Windows build --- .github/workflows/release-windows.yml | 43 ++++++++++++--------------- cmake/InstallAndPackage.cmake | 4 +-- os/windows/sign.bat | 18 +---------- os/windows/sign_azure.ps1 | 40 +++++++++++++++++++++++++ 4 files changed, 62 insertions(+), 43 deletions(-) create mode 100644 os/windows/sign_azure.ps1 diff --git a/.github/workflows/release-windows.yml b/.github/workflows/release-windows.yml index a574a28f01..d47b3645e5 100644 --- a/.github/workflows/release-windows.yml +++ b/.github/workflows/release-windows.yml @@ -100,21 +100,6 @@ jobs: with: arch: ${{ matrix.host }} - - name: Import code signing certificate - shell: powershell - # If this is run on a fork, there may not be a certificate set up - continue in this case - continue-on-error: true - run: | - $tempFile = [System.IO.Path]::GetTempFileName() - $bytes = [System.Convert]::FromBase64String($env:WINDOWS_CERTIFICATE_P12) - [IO.File]::WriteAllBytes($tempFile, $bytes) - $pwd = ConvertTo-SecureString $env:WINDOWS_CERTIFICATE_PASSWORD -AsPlainText -Force - Import-PfxCertificate -FilePath $tempFile -CertStoreLocation Cert:\CurrentUser\My -Password $pwd - Remove-Item $tempFile - env: - WINDOWS_CERTIFICATE_P12: ${{ secrets.WINDOWS_CERTIFICATE_P12 }} - WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} - - name: Build (with installer) if: inputs.is_tag == 'true' shell: bash @@ -131,7 +116,6 @@ jobs: -DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DOPTION_SURVEY_KEY=${{ inputs.survey_key }} \ - -DWINDOWS_CERTIFICATE_COMMON_NAME="${WINDOWS_CERTIFICATE_COMMON_NAME}" \ # EOF echo "::endgroup::" @@ -139,7 +123,12 @@ jobs: cmake --build . --target openttd echo "::endgroup::" env: - WINDOWS_CERTIFICATE_COMMON_NAME: ${{ secrets.WINDOWS_CERTIFICATE_COMMON_NAME }} + AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} + AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} + AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} + AZURE_CODESIGN_ACCOUNT_NAME: ${{ secrets.AZURE_CODESIGN_ACCOUNT_NAME }} + AZURE_CODESIGN_ENDPOINT: ${{ secrets.AZURE_CODESIGN_ENDPOINT }} + AZURE_CODESIGN_PROFILE_NAME: ${{ secrets.AZURE_CODESIGN_PROFILE_NAME }} - name: Build (without installer) if: inputs.is_tag != 'true' @@ -156,7 +145,6 @@ jobs: -DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DOPTION_SURVEY_KEY=${{ inputs.survey_key }} \ - -DWINDOWS_CERTIFICATE_COMMON_NAME="${WINDOWS_CERTIFICATE_COMMON_NAME}" \ # EOF echo "::endgroup::" @@ -164,7 +152,12 @@ jobs: cmake --build . --target openttd echo "::endgroup::" env: - WINDOWS_CERTIFICATE_COMMON_NAME: ${{ secrets.WINDOWS_CERTIFICATE_COMMON_NAME }} + AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} + AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} + AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} + AZURE_CODESIGN_ACCOUNT_NAME: ${{ secrets.AZURE_CODESIGN_ACCOUNT_NAME }} + AZURE_CODESIGN_ENDPOINT: ${{ secrets.AZURE_CODESIGN_ENDPOINT }} + AZURE_CODESIGN_PROFILE_NAME: ${{ secrets.AZURE_CODESIGN_PROFILE_NAME }} - name: Create breakpad symbols shell: bash @@ -198,13 +191,15 @@ jobs: - name: Sign installer if: inputs.is_tag == 'true' shell: bash - # If this is run on a fork, there may not be a certificate set up - continue in this case - continue-on-error: true run: | - cd ${GITHUB_WORKSPACE}/build/bundles - ../../os/windows/sign.bat *.exe "${WINDOWS_CERTIFICATE_COMMON_NAME}" + ${GITHUB_WORKSPACE}/os/windows/sign.bat "${GITHUB_WORKSPACE}/build/bundles" env: - WINDOWS_CERTIFICATE_COMMON_NAME: ${{ secrets.WINDOWS_CERTIFICATE_COMMON_NAME }} + AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} + AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} + AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} + AZURE_CODESIGN_ACCOUNT_NAME: ${{ secrets.AZURE_CODESIGN_ACCOUNT_NAME }} + AZURE_CODESIGN_ENDPOINT: ${{ secrets.AZURE_CODESIGN_ENDPOINT }} + AZURE_CODESIGN_PROFILE_NAME: ${{ secrets.AZURE_CODESIGN_PROFILE_NAME }} - name: Store bundles uses: actions/upload-artifact@v4 diff --git a/cmake/InstallAndPackage.cmake b/cmake/InstallAndPackage.cmake index 9c9071fd00..feb0004d85 100644 --- a/cmake/InstallAndPackage.cmake +++ b/cmake/InstallAndPackage.cmake @@ -172,10 +172,10 @@ elseif(WIN32) set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-windows-${CPACK_SYSTEM_NAME}") - if(WINDOWS_CERTIFICATE_COMMON_NAME) + if(DEFINED ENV{AZURE_CODESIGN_PROFILE_NAME}) add_custom_command(TARGET openttd POST_BUILD - COMMAND "${CMAKE_SOURCE_DIR}/os/windows/sign.bat" "$" "${WINDOWS_CERTIFICATE_COMMON_NAME}" + COMMAND "${CMAKE_SOURCE_DIR}/os/windows/sign.bat" "${BINARY_DESTINATION_DIR}" ) endif() elseif(UNIX) diff --git a/os/windows/sign.bat b/os/windows/sign.bat index 3954d4618c..b438127ae8 100644 --- a/os/windows/sign.bat +++ b/os/windows/sign.bat @@ -1,18 +1,2 @@ @echo off -REM Signing script -REM Arguments: sign.bat exe_to_sign certificate_subject_name - -REM This is a loose wrapper around the Microsoft signtool application (included in the Windows SDK). -REM See https://docs.microsoft.com/en-us/dotnet/framework/tools/signtool-exe for more details. - -REM Path to signtool.exe -IF NOT DEFINED SIGNTOOL_PATH (SET SIGNTOOL_PATH=signtool) - -REM URL of the timestamp server -IF NOT DEFINED SIGNTOOL_TIMESTAMP_URL (SET SIGNTOOL_TIMESTAMP_URL=http://timestamp.digicert.com) - -REM Sign with SHA-1 for Windows 7 and below -"%SIGNTOOL_PATH%" sign -v -n %2 -t %SIGNTOOL_TIMESTAMP_URL% -fd sha1 %1 - -REM Sign with SHA-256 for Windows 8 and above -"%SIGNTOOL_PATH%" sign -v -n %2 -tr %SIGNTOOL_TIMESTAMP_URL% -fd sha256 -td sha256 -as %1 +pwsh -File "%~dp0sign_azure.ps1" %1 diff --git a/os/windows/sign_azure.ps1 b/os/windows/sign_azure.ps1 new file mode 100644 index 0000000000..e19476fa6d --- /dev/null +++ b/os/windows/sign_azure.ps1 @@ -0,0 +1,40 @@ +# Signing script for Azure Code Signing +# Arguments: sign_azure.ps1 path_to_sign +# +# Environment variables must be set up before use: +# +# AZURE_TENANT_ID +# AZURE_CLIENT_ID +# AZURE_CLIENT_SECRET +# AZURE_CODESIGN_ACCOUNT_NAME +# AZURE_CODESIGN_ENDPOINT +# AZURE_CODESIGN_PROFILE_NAME + +Param +( + # Files folder + [Parameter(Mandatory=$true, Position=0)] + $FilesFolder +) + +if (!$Env:AZURE_CODESIGN_ENDPOINT -or !$Env:AZURE_CODESIGN_ACCOUNT_NAME -or !$Env:AZURE_CODESIGN_PROFILE_NAME -or + !$Env:AZURE_TENANT_ID -or !$Env:AZURE_CLIENT_ID -or !$Env:AZURE_CLIENT_SECRET) +{ + "Code signing variables not found; most likely running in a fork. Skipping signing." + exit +} + +Install-Module -Name AzureCodeSigning -Scope CurrentUser -RequiredVersion 0.3.0 -Force -Repository PSGallery + +$params = @{} + +$params["Endpoint"] = $Env:AZURE_CODESIGN_ENDPOINT +$params["CodeSigningAccountName"] = $Env:AZURE_CODESIGN_ACCOUNT_NAME +$params["CertificateProfileName"] = $Env:AZURE_CODESIGN_PROFILE_NAME +$params["FilesFolder"] = $FilesFolder +$params["FilesFolderFilter"] = "exe" +$params["FileDigest"] = "SHA256" +$params["TimestampRfc3161"] = "http://timestamp.acs.microsoft.com" +$params["TimestampDigest"] = "SHA256" + +Invoke-AzureCodeSigning @params From 00a09af1fda7a00bc9a88a53c02638f1a2ce4526 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 20 Mar 2024 04:40:30 +0000 Subject: [PATCH 156/695] Update: Translations from eints english (us): 2 changes by 2TallTyler vietnamese: 2 changes by KhoiCanDev german: 2 changes by Wuzzy2 ukrainian: 2 changes by StepanIvasyn portuguese (brazilian): 9 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 18 +++++++++--------- src/lang/english_US.txt | 2 ++ src/lang/german.txt | 2 ++ src/lang/ukrainian.txt | 4 ++-- src/lang/vietnamese.txt | 2 ++ 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 1ff4c07c7e..4eb80d3630 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -935,7 +935,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}A autoridade local de {TOWN} assinou um contrato com {STRING} concedendo 12 minutos de direitos exclusivos de transporte! # Extra view window -STR_EXTRA_VIEWPORT_TITLE :{WHITE}Janela de visualização {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Visualização {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Mudar a visualização STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copiar a localização da visualização principal para esta visualização STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Mudar a visualização principal @@ -1838,7 +1838,7 @@ STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Di STR_CONFIG_SETTING_SERVINT_DISABLED :Desativado STR_CONFIG_SETTING_NOSERVICE :Desativar manutenção quando as quebras estão desativadas: {STRING} -STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Quando ativado, veículos não recebem manutenção se não puderem quebrar +STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Quando ativado, veículos não recebem manutenção se não podem quebrar STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Penalidade de velocidade de carregamento para trens que são mais longos que a estação: {STRING} STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quando ativado, os trens que são muito compridos para a estação demoram mais tempo para carregar do que um trem que cabe na estação. Esta configuração não afeta a geração de rotas @@ -1883,7 +1883,7 @@ STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Mudanças na pr STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Mostrar um jornal quando ocorre alteração no nível de produção das indústrias que não são atendidas pela empresa ou por concorrentes STR_CONFIG_SETTING_NEWS_ADVICE :Avisos / informações sobre os veículos da empresa: {STRING} -STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Mostrar mensagens sobre veículos que requerem atenção +STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Mostrar mensagens sobre veículos que precisam de atenção STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Novos veículos: {STRING} STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Mostrar um jornal quando um novo tipo de veículo é disponibilizado @@ -3622,9 +3622,9 @@ STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}{CARGO_L STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Requisitos para o crescimento da localidade: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} necessário STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} necessário no inverno -STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} entregado +STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} entregue STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (ainda necessário) -STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (entregado) +STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (entregue) STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Localidade cresce a cada {ORANGE}{UNITS_DAYS_OR_SECONDS} STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Localidade cresce a cada {ORANGE}{UNITS_DAYS_OR_SECONDS} (financiada) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Localidade {RED}não{BLACK} está crescendo @@ -3762,9 +3762,9 @@ STR_STATION_VIEW_CAPTION :{WHITE}{STATION STR_STATION_VIEW_WAITING_CARGO :{WHITE}{CARGO_LONG} STR_STATION_VIEW_RESERVED :{YELLOW}({CARGO_SHORT} reservado para carregamento) -STR_STATION_VIEW_ACCEPTS_BUTTON :{BLACK}Aceitas +STR_STATION_VIEW_ACCEPTS_BUTTON :{BLACK}Aceita STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Mostrar lista de cargas que são aceitas -STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Aceitas: {WHITE}{CARGO_LIST} +STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Aceita: {WHITE}{CARGO_LIST} STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Esta estação tem direitos exclusivos de transporte nesta localidade. STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} adquiriu direitos exclusivos de transporte nesta localidade. @@ -5451,9 +5451,9 @@ STR_SV_STNAME_NORTH :{STRING} Norte STR_SV_STNAME_SOUTH :{STRING} Sul STR_SV_STNAME_EAST :{STRING} Leste STR_SV_STNAME_WEST :{STRING} Oeste -STR_SV_STNAME_CENTRAL :{STRING} Centro +STR_SV_STNAME_CENTRAL :{STRING} Central STR_SV_STNAME_TRANSFER :{STRING} Transbordo -STR_SV_STNAME_HALT :{STRING} Parada +STR_SV_STNAME_HALT :{STRING} Terminal STR_SV_STNAME_VALLEY :{STRING} Vale STR_SV_STNAME_HEIGHTS :{STRING} Colinas STR_SV_STNAME_WOODS :{STRING} Bosque diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 87fa19c2fe..29ece3c052 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -2574,6 +2574,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Your pla STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Your server name has not been set. The name can be set at the top of the Multiplayer window STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}The revision of this client does not match the server's revision STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Wrong password +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}You are not on the list of allowed clients STR_NETWORK_ERROR_SERVER_FULL :{WHITE}The server is full STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}You are banned from this server STR_NETWORK_ERROR_KICKED :{WHITE}You were kicked out of the game @@ -2601,6 +2602,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :received invali STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :wrong revision STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :name already in use STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :wrong game-password +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :not on allow list STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :wrong company-id in DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :kicked by server STR_NETWORK_ERROR_CLIENT_CHEATER :was trying to use a cheat diff --git a/src/lang/german.txt b/src/lang/german.txt index 7cfc2bc775..eb1555b68f 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -2575,6 +2575,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Ihr Spie STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Ihr Servername wurde nicht gesetzt. Der Name kann oben im Mehrspielerfenster gesetzt werden STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Diese Version des Spiels entspricht nicht der des Servers STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Falsches Passwort +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Sie sind nicht auf der Liste der erlaubten Clients STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Der Server ist voll STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Sie sind auf diesem Server gesperrt STR_NETWORK_ERROR_KICKED :{WHITE}Sie wurden vom Server hinausgeworfen @@ -2602,6 +2603,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :Ungültiges ode STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :Falsche Version STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :Name wird bereits verwendet STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :Falsches Spielpasswort +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :nicht auf Erlaubnisliste STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :Falsche Firmen-ID in DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :vom Server hinausgeworfen STR_NETWORK_ERROR_CLIENT_CHEATER :hat versucht zu mogeln diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 16f36d1cff..7d86a875e8 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1633,7 +1633,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :При вклю STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Дотримання розкладу: {STRING} ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Календар -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Настінний годинник +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Годинник STR_CONFIG_SETTING_MINUTES_PER_YEAR :Хвилин у році: {STRING} STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Оберіть кількість хвилин у календарному році. Базово 12 хвилин. Щоб зупинити зміни календаря, встановіть 0. Налаштування не вплине на симуляцію економіки у грі. Налаштування доступне тільки з годинниковим розкладом @@ -4314,7 +4314,7 @@ STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} т STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Поїзди - перетягніть транспорт (вагон) лівою кнопкою миші, щоб додати/вилучити з поїзда. Натисніть праву кнопку миші для інформації. Утримуйте Ctrl для застосування обох функцій до всього ланцюга +STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Потяги - перетягніть транспорт (вагон) лівою кнопкою миші, щоб додати/вилучити з потяга. Натисніть праву кнопку миші для інформації. Ctrl+клац для застосування обох функцій до всього ланцюга STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Авто - натисніть на авто для інформації STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Кораблі - натисніть для інформації STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Літаки - натисніть на літак для інформації diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index fcff61c8ca..3dd328d84b 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -2574,6 +2574,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Bạn ch STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Bạn chưa đặt tên server. Bạn có thể đặt tên này tại phía trên của cửa sổ Chơi trên mạng STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Phiên bản của máy trạm không hợp với phiên bản máy server STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Sai mật khẩu +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Bạn không có trong danh sách máy khách được cho phép STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Server bị đầy STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Bạn bị từ chối ở server này STR_NETWORK_ERROR_KICKED :{WHITE}Bạn bị đá khỏi ván chơi @@ -2601,6 +2602,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :nhận được STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :sai phiên bản STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :tên đã dùng rồi STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :sai mật khẩu +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :không có trong danh sách cho phép STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :sai công ty trong DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :bí đá bởi server STR_NETWORK_ERROR_CLIENT_CHEATER :đã cố sử dụng cheat From 704d3b8a9b4c13e4c99caf1317774b12f7670a19 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Wed, 20 Mar 2024 16:32:38 -0400 Subject: [PATCH 157/695] Fix #12342: Add missing ellipsis to town generation error string (#12343) --- src/lang/english.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 3fff8c6939..9263705e4b 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -4995,7 +4995,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Can't bu STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Can't build company headquarters... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Can't build any towns +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Can't build any towns... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Can't rename town... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Can't found town here... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Can't expand town... From 0eaeeaabb6eab4581f77b4493adecbbe708e600c Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 21 Mar 2024 04:40:53 +0000 Subject: [PATCH 158/695] Update: Translations from eints russian: 2 changes by Ln-Wolf catalan: 2 changes by J0anJosep portuguese (brazilian): 23 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 46 +++++++++++++++---------------- src/lang/catalan.txt | 2 ++ src/lang/russian.txt | 2 ++ 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 4eb80d3630..61466fd43a 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -399,8 +399,8 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Abrir li STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Abrir lista de veículos da empresa. Ctrl+Clique para mostrar ou ocultar grupos de veículos, oposto da configuração escolhida STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Abrir lista de embarcações da empresa. Ctrl+Clique para mostrar ou ocultar grupos de veículos, oposto da configuração escolhida STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Abrir lista de aeronaves da empresa. Ctrl+Clique para mostrar ou ocultar grupos de veículos, oposto da configuração escolhida -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Aproximar a visão -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Afastar a visão +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Ampliar +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Reduzir STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir infraestrutura ferroviária STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Construir infraestrutura rodoviária STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Construir infraestrutura para bondes @@ -856,7 +856,7 @@ STR_NEWS_COMPANY_MERGER_TITLE :{BIG_FONT}{BLAC STR_NEWS_COMPANY_MERGER_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} foi vendida para {STRING} por {CURRENCY_LONG}! STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLACK}Falência! STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} foi fechada pelos credores e todos os seus bens foram vendidos! -STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Nova empresa de transportes foi lançada! +STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Nova empresa de transportes! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} inicia construção perto de {TOWN}! STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} foi comprada por {STRING} por um valor não revelado! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Gerente) @@ -880,7 +880,7 @@ STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL :{BIG_FONT}{BLAC STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL :{BIG_FONT}{BLACK}Novas reservas de petróleo encontradas n{G o a} {INDUSTRY}!{}A produção deverá duplicar! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM :{BIG_FONT}{BLACK}Métodos agrícolas aperfeiçoados na {INDUSTRY} deverão duplicar a produção! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}Produção de {STRING} n{G o a} {INDUSTRY} aumenta {COMMA}%! -STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}A produção de {INDUSTRY} foi reduzida em 50% +STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}A produção de {INDUSTRY} diminui 50% STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Infestação de insetos causa destruição n{G o a} {INDUSTRY}!{}Produção diminui 50% STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}Produção de {STRING} n{G o a} {INDUSTRY} diminui {COMMA}%! @@ -1918,8 +1918,8 @@ STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Suave STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Congelada -STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentagem do lucro da etapa a pagar em sistemas de transbordo: {STRING} -STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentagem da receita dada às etapas intermediárias em sistemas de transbordo, dando maior controle sobre a renda +STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentagem da renda da etapa a ser paga em sistemas de transbordo: {STRING} +STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentagem da receita dada às etapas intermediárias em sistemas de transbordo, proporcionando maior controle sobre a receita STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Quando arrastar, colocar sinais a cada: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Definir a distância na qual os sinais serão construídos em uma linha até o próximo obstáculo (sinal, junção), quando colocar sinais arrastando @@ -1956,7 +1956,7 @@ STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Permitir que lo STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Localidades podem construir passagens de nível: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Ativando esta configuração, as localidades poderão construir passagens de nível -STR_CONFIG_SETTING_NOISE_LEVEL :Limitar a localização do aeroporto em função do nível de ruído: {STRING} +STR_CONFIG_SETTING_NOISE_LEVEL :Limitar a colocação de aeroportos com base no nível de ruído: {STRING} STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Permitir que as localidades impeçam a construção de aeroportos em função do nível de aceitação de ruído, que é baseado no total de habitantes da localidade e no tamanho e distância do aeroporto. Se esta configuração estiver desativada, as localidades permitirão somente dois aeroportos, a menos que a atitude da autoridade local esteja definida como "Permissiva" STR_CONFIG_SETTING_TOWN_FOUNDING :Fundar localidades no jogo: {STRING} @@ -1996,9 +1996,9 @@ STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :desativado STR_CONFIG_SETTING_ZOOM_MIN :Nível máximo de ampliação: {STRING} -STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Nível máximo de ampliação para visualizações. Níveis de ampliação muito grandes aumentam o uso de memória +STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Limite de ampliação para visualizações. Níveis de ampliação muito grandes aumentam o uso de memória STR_CONFIG_SETTING_ZOOM_MAX :Nível máximo de redução: {STRING} -STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Nível máximo de redução para visualizações. Níveis de redução muito grandes podem causar atrasos quando utilizados +STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Limite de redução para visualizações. Níveis de redução muito grandes podem causar atrasos quando utilizados ###length 6 STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2x @@ -2008,7 +2008,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Resolução máxima de sprites: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limita a resolução máxima a ser usada para sprites. Limitar a resolução de sprites evitará o uso de gráficos de alta resolução, mesmo quando estiverem disponíveis. Isso pode ajudar a manter o jogo com uma aparência unificada quando usar uma mistura de arquivos GRF com e sem gráficos de alta resolução +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limite de resolução máxima a ser usada para sprites. Limitar a resolução de sprites evitará o uso de gráficos de alta resolução, mesmo quando estiverem disponíveis. Isso pode ajudar a manter o jogo com uma aparência unificada quando usar uma mistura de arquivos GRF com e sem gráficos de alta resolução ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2170,7 +2170,7 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Falha ao # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Erro nas configurações de vídeo... STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... nenhuma GPU compatível encontrada. Aceleração por hardware desativada -STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... O controlador gráfico (GPU) travou o jogo. Aceleração por hardware desativada +STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... o controlador gráfico (GPU) travou o jogo. Aceleração por hardware desativada # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -2639,7 +2639,7 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {0:STRING} STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} entrou como espectador STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {0:STRING} iniciou uma nova empresa (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {0:STRING} saiu do jogo ({2:STRING}) -STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} mudou seu nome para {STRING} +STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} mudou o nome para {STRING} STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} deu {2:CURRENCY_LONG} para {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}O servidor fechou a sessão STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}O servidor está reiniciando...{}Aguarde... @@ -2715,7 +2715,7 @@ STR_CONTENT_DOWNLOAD_COMPLETE :{WHITE}Concluí STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES} de {BYTES} foram baixados ({NUM} %) # Content downloading error messages -STR_CONTENT_ERROR_COULD_NOT_CONNECT :{WHITE}Não foi possível conectar ao servidor... +STR_CONTENT_ERROR_COULD_NOT_CONNECT :{WHITE}Não foi possível conectar ao servidor de conteúdo... STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD :{WHITE}O download falhou... STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... arquivo não pode ser gravado STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}Falha na descompactação do arquivo @@ -4987,7 +4987,7 @@ STR_ERROR_CAN_T_CHANGE_PRESIDENT :{WHITE}Não é STR_ERROR_MAXIMUM_PERMITTED_LOAN :{WHITE}... o valor máximo de empréstimo permitido é {CURRENCY_LONG} STR_ERROR_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Não é possível pedir mais dinheiro emprestado... -STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... não há empréstimo para pagar +STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... não existe empréstimo para pagar STR_ERROR_CURRENCY_REQUIRED :{WHITE}... é necessário {CURRENCY_LONG} STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Não é possível pagar empréstimo... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Não é possível doar dinheiro proveniente de empréstimo bancário... @@ -4996,14 +4996,14 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Não é STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Não é possível construir sede da empresa... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Não é possível construir localidades +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Não é possível construir localidades... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Não é possível renomear a localidade... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Não é possível fundar uma localidade aqui... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Não é possível expandir a localidade... STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... muito perto da borda do mapa STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... muito perto de outra localidade STR_ERROR_TOO_MANY_TOWNS :{WHITE}... há localidades demais -STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... não existe mais espaço no mapa +STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... não há mais espaço no mapa STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Trabalhos sendo realizados na estrada STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Não é possível remover esta localidade...{}Uma estação ou depósito refere-se à localidade ou não é possível remover um quadrado que pertence à mesma STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... não há local adequado para uma estátua no centro desta localidade @@ -5064,7 +5064,7 @@ STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Não é STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Não é possível remover estação de bondes de passageiros... STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Não é possível remover estação de bondes de carga... STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}É necessário remover o ponto de parada rodoviária primeiro -STR_ERROR_THERE_IS_NO_STATION :{WHITE}...não há estação aqui +STR_ERROR_THERE_IS_NO_STATION :{WHITE}...não existe uma estação aqui STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}É necessário demolir a estação ferroviária primeiro STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}É necessário demolir a estação de ônibus primeiro @@ -5140,8 +5140,8 @@ STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Não é STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Não é possível remover ferrovia daqui... STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Não é possível remover sinais daqui... STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Não é possível converter os sinais daqui... -STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}...não há ferrovia -STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}...não há sinais +STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}...não existe uma ferrovia +STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}...não existem sinais STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Não é possível converter o tipo de trilho daqui... @@ -5152,8 +5152,8 @@ STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Não é STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Não é possível construir linha de bonde aqui... STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Não é possível remover estrada daqui... STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Não é possível remover linha de bonde daqui... -STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... não há estrada -STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... não há linha de bonde +STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... não existe uma estrada +STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... não existe uma linha de bonde STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Não é possível converter o tipo de estrada daqui... STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Não é possível converter o tipo de linha de bonde daqui... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Estrada não adequada @@ -5275,7 +5275,7 @@ STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Não é STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Há veículos demais no jogo STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Não é possível alterar o intervalo de manutenção... -STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... o veículo está destruído +STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... veículo está destruído STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... nem todos os veículos são idênticos @@ -5322,7 +5322,7 @@ STR_ERROR_NO_DOCK :{WHITE}Não exi STR_ERROR_NO_AIRPORT :{WHITE}Não existe um aeroporto/heliporto STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Não existem paradas com um tipo de estrada compatível STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Não existem paradas com um tipo de bonde compatível -STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Não existem paradas adequadas para veículos rodoviários articulados.{}Os veículos rodoviários articulados só podem parar em estações de passagem e não em estações padrão +STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Não existem paradas adequadas para veículos rodoviários articulados.{}Veículos rodoviários articulados só podem parar em estações de passagem, não em estações padrão STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Este avião não pode pousar neste heliporto STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Este helicóptero não pode pousar neste aeroporto STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Não existe um ponto de controle ferroviário diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index d48c497b8f..03de11cf9a 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -2575,6 +2575,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}No s'ha STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}No s'ha establit un nom per al vostre servidor. El nom s'estableix a la part superior de la finestra multijugador. STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}La revisió d'aquest client no concorda amb la revisió del servidor STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Contrasenya incorrecta +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}No esteu en la llista de clients permesos STR_NETWORK_ERROR_SERVER_FULL :{WHITE}El servidor està ple STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Estàs exclòs d'aquest servidor STR_NETWORK_ERROR_KICKED :{WHITE}T'han fet fora de la partida @@ -2602,6 +2603,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :s'ha rebut un p STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :revisió incorrecta STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :nom ja utilitzat STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :contrasenya incorrecta +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :no en la llista de permesos STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :id-companyia erroni en DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :tret pel servidor STR_NETWORK_ERROR_CLIENT_CHEATER :s'ha intentat utilitzar una trampa diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 61444f8bbd..a9bd38bb6a 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2725,6 +2725,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Не у STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Не указано имя сервера. Его можно ввести в верхней части окна «Сетевая игра». STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Версия этого клиента не совместима с версией сервера STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Неверный пароль +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Ваш клиент отсутствует в списке разрешённых STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Сервер переполнен STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Вас заблокировали на этом сервере STR_NETWORK_ERROR_KICKED :{WHITE}Вас отключили от игры @@ -2752,6 +2753,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :получен STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :версии не совпадают STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :это имя уже используется STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :неверный пароль +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :нет в списке разрешённых STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :неправильный параметр company в DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :вас выкинул сервер STR_NETWORK_ERROR_CLIENT_CHEATER :попытался применить чит From e42aec5a89ea90f45fb554dff2563a0c234ced17 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 16 Mar 2024 15:45:14 +0000 Subject: [PATCH 159/695] Fix #12305: Crash with large positive sprite x offset in engine preview window --- src/engine_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp index a6423be3a7..b24f902363 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -98,7 +98,7 @@ struct EnginePreviewWindow : Window { } this->vehicle_space = std::max(ScaleSpriteTrad(40), y - y_offs); - size->width = std::max(size->width, x - x_offs); + size->width = std::max(size->width, x + std::abs(x_offs)); SetDParam(0, GetEngineCategoryName(engine)); size->height = GetStringHeight(STR_ENGINE_PREVIEW_MESSAGE, size->width) + WidgetDimensions::scaled.vsep_wide + GetCharacterHeight(FS_NORMAL) + this->vehicle_space; SetDParam(0, engine); From 2189607c34518494b912f21b4ba754aabb0f3051 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 11 Mar 2024 23:11:19 +0000 Subject: [PATCH 160/695] Codechange: Reduce size of class WaterRegion The tile patch array is 256 bytes and is not needed for the majority of water regions, change it to be optional via std::unique_ptr --- src/pathfinder/water_regions.cpp | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/src/pathfinder/water_regions.cpp b/src/pathfinder/water_regions.cpp index df4da633df..e34f3ad47e 100644 --- a/src/pathfinder/water_regions.cpp +++ b/src/pathfinder/water_regions.cpp @@ -38,6 +38,8 @@ static inline int GetWaterRegionMapSizeY() { return Map::SizeY() / WATER_REGION_ static inline TWaterRegionIndex GetWaterRegionIndex(int region_x, int region_y) { return GetWaterRegionMapSizeX() * region_y + region_x; } static inline TWaterRegionIndex GetWaterRegionIndex(TileIndex tile) { return GetWaterRegionIndex(GetWaterRegionX(tile), GetWaterRegionY(tile)); } +using TWaterRegionPatchLabelArray = std::array; + /** * Represents a square section of the map of a fixed size. Within this square individual unconnected patches of water are * identified using a Connected Component Labeling (CCL) algorithm. Note that all information stored in this class applies @@ -49,10 +51,10 @@ class WaterRegion private: std::array edge_traversability_bits{}; bool has_cross_region_aqueducts = false; + bool initialized = false; TWaterRegionPatchLabel number_of_patches = 0; // 0 = no water, 1 = one single patch of water, etc... const OrthogonalTileArea tile_area; - std::array tile_patch_labels{}; - bool initialized = false; + std::unique_ptr tile_patch_labels; ///< Tile patch labels, this may be nullptr in the following trivial cases: region is invalid, region is only land (0 patches), region is only water (1 patch) /** * Returns the local index of the tile within the region. The N corner represents 0, @@ -110,7 +112,10 @@ public: TWaterRegionPatchLabel GetLabel(TileIndex tile) const { assert(this->tile_area.Contains(tile)); - return this->tile_patch_labels[GetLocalIndex(tile)]; + if (this->tile_patch_labels == nullptr) { + return this->NumberOfPatches() == 0 ? INVALID_WATER_REGION_PATCH : 1; + } + return (*this->tile_patch_labels)[GetLocalIndex(tile)]; } /** @@ -122,7 +127,12 @@ public: Debug(map, 3, "Updating water region ({},{})", GetWaterRegionX(this->tile_area.tile), GetWaterRegionY(this->tile_area.tile)); this->has_cross_region_aqueducts = false; - this->tile_patch_labels.fill(INVALID_WATER_REGION_PATCH); + /* Acquire a tile patch label array if this region does not already have one */ + if (this->tile_patch_labels == nullptr) { + this->tile_patch_labels = std::make_unique(); + } + + this->tile_patch_labels->fill(INVALID_WATER_REGION_PATCH); this->edge_traversability_bits.fill(0); TWaterRegionPatchLabel current_label = 1; @@ -143,9 +153,10 @@ public: const TrackdirBits valid_dirs = TrackBitsToTrackdirBits(GetWaterTracks(tile)); if (valid_dirs == TRACKDIR_BIT_NONE) continue; - if (this->tile_patch_labels[GetLocalIndex(tile)] != INVALID_WATER_REGION_PATCH) continue; + TWaterRegionPatchLabel &tile_patch = (*this->tile_patch_labels)[GetLocalIndex(tile)]; + if (tile_patch != INVALID_WATER_REGION_PATCH) continue; - this->tile_patch_labels[GetLocalIndex(tile)] = current_label; + tile_patch = current_label; highest_assigned_label = current_label; increase_label = true; @@ -172,6 +183,12 @@ public: this->number_of_patches = highest_assigned_label; this->initialized = true; + + if (this->number_of_patches == 0 || (this->number_of_patches == 1 && + std::all_of(this->tile_patch_labels->begin(), this->tile_patch_labels->end(), [](TWaterRegionPatchLabel label) { return label == 1; }))) { + /* No need for patch storage: trivial cases */ + this->tile_patch_labels.reset(); + } } /** @@ -196,7 +213,7 @@ public: for (int y = 0; y < WATER_REGION_EDGE_LENGTH; ++y) { std::string line{}; for (int x = 0; x < WATER_REGION_EDGE_LENGTH; ++x) { - const auto label = this->tile_patch_labels[x + y * WATER_REGION_EDGE_LENGTH]; + const auto label = this->GetLabel(TileAddXY(tile_area.tile, x, y)); const std::string label_str = label == INVALID_WATER_REGION_PATCH ? "." : std::to_string(label); line = fmt::format("{:{}}", label_str, max_element_width) + " " + line; } From e141734e54661b6d2995522b801804689c57e5da Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 22 Mar 2024 04:41:18 +0000 Subject: [PATCH 161/695] Update: Translations from eints english (au): 1 change by krysclarke norwegian (bokmal): 1 change by eriksorngard english (us): 1 change by 2TallTyler korean: 3 changes by telk5093 german: 1 change by Wuzzy2 finnish: 3 changes by hpiirai ukrainian: 12 changes by StepanIvasyn portuguese (brazilian): 81 changes by pasantoro polish: 1 change by pAter-exe --- src/lang/brazilian_portuguese.txt | 162 +++++++++++++++--------------- src/lang/english_AU.txt | 2 +- src/lang/english_US.txt | 2 +- src/lang/finnish.txt | 4 +- src/lang/german.txt | 2 +- src/lang/korean.txt | 4 +- src/lang/norwegian_bokmal.txt | 2 +- src/lang/polish.txt | 2 +- src/lang/ukrainian.txt | 23 +++-- 9 files changed, 104 insertions(+), 99 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 61466fd43a..9733189049 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -281,8 +281,8 @@ STR_BUTTON_CATCHMENT :{BLACK}Cobertur STR_TOOLTIP_CATCHMENT :{BLACK}Mostrar/Ocultar a área de cobertura STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Fechar janela -STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Título da janela - Clique+Arraste isto para mover a janela -STR_TOOLTIP_SHADE :{BLACK}Encolher janela - mostrar somente a barra de título +STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Título da janela - arraste isto para mover a janela +STR_TOOLTIP_SHADE :{BLACK}Encolher janela - somente a barra de título fica visível STR_TOOLTIP_DEBUG :{BLACK}Mostrar informação de depuração de NewGRF STR_TOOLTIP_DEFSIZE :{BLACK}Redimensionar a janela para o tamanho padrão. Ctrl+Clique para salvar o tamanho atual como padrão STR_TOOLTIP_STICKY :{BLACK}Fixar esta janela para ela não ser fechada pela tecla 'Fechar Todas as Janelas'. Ctrl+Clique para salvar o estado como padrão @@ -472,7 +472,7 @@ STR_MAP_MENU_SIGN_LIST :Lista de placas # Town menu STR_TOWN_MENU_TOWN_DIRECTORY :Lista de localidades -STR_TOWN_MENU_FOUND_TOWN :Fundar localidade +STR_TOWN_MENU_FOUND_TOWN :Fundar uma localidade # Subsidies menu STR_SUBSIDIES_MENU_SUBSIDIES :Subsídios @@ -482,7 +482,7 @@ STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Gráfico do luc STR_GRAPH_MENU_INCOME_GRAPH :Gráfico de rendimentos STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Gráfico da carga entregada STR_GRAPH_MENU_PERFORMANCE_HISTORY_GRAPH :Gráfico do histórico de desempenho -STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Gráfico do valor da empresa +STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Gráfico de valor da empresa STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Receitas por carga # Company league menu @@ -534,8 +534,8 @@ STR_ABOUT_MENU_SHOW_FRAMERATE :Mostrar taxa de STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre o 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Alinhador de sprites STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Mostrar/Ocultar as caixas delimitadoras -STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Ativar/Desativar a coloração dos blocos sujos -STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Mostrar/Ocultar contornos do elemento +STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Ativar/Desativar coloração dos blocos sujos +STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Mostrar/Ocultar contornos dos widgets ###length 31 STR_DAY_NUMBER_1ST :1 @@ -676,7 +676,7 @@ STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Quantia STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Unidades de carga entregada nos últimos quatro trimestres STR_PERFORMANCE_DETAIL_CARGO_TOOLTIP :{BLACK}Número de tipos de carga entregada no último trimestre STR_PERFORMANCE_DETAIL_MONEY_TOOLTIP :{BLACK}Quantia de dinheiro que esta empresa tem no banco -STR_PERFORMANCE_DETAIL_LOAN_TOOLTIP :{BLACK}A quantia de dinheiro que esta empresa tomou por empréstimo +STR_PERFORMANCE_DETAIL_LOAN_TOOLTIP :{BLACK}O montante que esta empresa tomou por empréstimo STR_PERFORMANCE_DETAIL_TOTAL_TOOLTIP :{BLACK}Total de pontos de pontos possíveis # Music window @@ -851,12 +851,12 @@ STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLAC STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Inundações!{}Pelo menos {COMMA} desaparecidos, supostamente mortos após terríveis inundações! STR_NEWS_COMPANY_IN_TROUBLE_TITLE :{BIG_FONT}{BLACK}Empresa de transporte em dificuldades! -STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} será vendida ou declarada falida, a menos que aumente o desempenho em breve! +STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} será vendida ou declarada falida se não aumentar o desempenho em breve! STR_NEWS_COMPANY_MERGER_TITLE :{BIG_FONT}{BLACK}Fusão de empresas de transportes! STR_NEWS_COMPANY_MERGER_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} foi vendida para {STRING} por {CURRENCY_LONG}! STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLACK}Falência! STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} foi fechada pelos credores e todos os seus bens foram vendidos! -STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Nova empresa de transportes! +STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Lançada nova empresa de transportes! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} inicia construção perto de {TOWN}! STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} foi comprada por {STRING} por um valor não revelado! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Gerente) @@ -888,7 +888,7 @@ STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLAC STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} está aguardando no depósito STR_NEWS_ROAD_VEHICLE_IS_WAITING :{WHITE}{VEHICLE} está aguardando no depósito STR_NEWS_SHIP_IS_WAITING :{WHITE}{VEHICLE} está aguardando no depósito -STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE} está aguardando no hangar de aeronaves +STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE} está aguardando no hangar ###next-name-looks-similar # Order review system / warnings @@ -905,14 +905,14 @@ STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} está perdido STR_NEWS_VEHICLE_UNPROFITABLE_YEAR :{WHITE}{VEHICLE} gerou um lucro de {CURRENCY_LONG} no último ano STR_NEWS_VEHICLE_UNPROFITABLE_PERIOD :{WHITE}{VEHICLE} gerou um lucro de {CURRENCY_LONG} no último período -STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} não pode chegar no próximo destino porque ele está além da autonomia +STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} não consegue chegar no próximo destino porque está fora de alcance STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} parou porque uma ordem de adaptação falhou STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Renovação automática falhou para {VEHICLE}{}{STRING} -STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}Nov{G o a} {STRING} já disponível! +STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}Nov{G o a} {STRING} disponível! STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} -STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G o a} {STRING} já disponível! - {ENGINE} +STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G o a} {STRING} disponível! - {ENGINE} STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Abrir a janela de grupos focada no grupo do veículo @@ -945,13 +945,13 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copiar a STR_GAME_OPTIONS_CAPTION :{WHITE}Opções do Jogo STR_GAME_OPTIONS_TAB_GENERAL :Geral -STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Selecionar as configurações gerais +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Escolher as definições gerais STR_GAME_OPTIONS_TAB_GRAPHICS :Gráficos -STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Selecionar as configurações gráficas +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Escolher as definições gráficas STR_GAME_OPTIONS_TAB_SOUND :Som -STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Selecionar as configurações de sons e música +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Escolher as definições de sons e música STR_GAME_OPTIONS_TAB_SOCIAL :Social -STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}Selecionar as configurações de integração social +STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}Escolher as definições de integração social STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Efeitos sonoros @@ -1048,11 +1048,11 @@ STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Controla STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Tamanho da interface STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Arraste o controle deslizante para definir o tamanho da interface. Ctrl+Arraste para um ajuste contínuo -STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Detetar automaticamente o tamanho -STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Marque esta caixa para detetar automaticamente o tamanho da interface +STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Detectar automaticamente o tamanho +STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Marque esta caixa para detectar automaticamente o tamanho da interface -STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Escalar chanfros -STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Marque esta caixa para dimensionar os chanfros pelo tamanho de interface +STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Escalar bordas +STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Marque esta caixa para dimensionar as bordas pelo tamanho de interface STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Usar a fonte fixa tradicional STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marque esta caixa se preferir usar o tipo de fonte tradicional de tamanho fixo @@ -1433,7 +1433,7 @@ STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Permitir compra STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Se uma empresa comprar direitos exclusivos de transporte para uma localidade, as estações dos concorrentes (passageiros e carga) não receberão carga durante doze meses STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT_MINUTES :Se uma empresa comprar direitos exclusivos de transporte para uma localidade, as estações dos concorrentes (passageiros e carga) não receberão carga durante doze minutos -STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permitir financiar edifícios: {STRING} +STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permitir financiar edificações: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Permitir que empresas doem dinheiro às localidades para custear novas casas STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Permitir financiar a reconstrução de estradas locais:{STRING} @@ -1481,7 +1481,7 @@ STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Avisar se o ve STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :Mostrar mensagens sobre veículos que não conseguem encontrar um caminho para o destino programado STR_CONFIG_SETTING_ORDER_REVIEW :Revisar as ordens dos veículos: {STRING} -STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Quando ativado, as ordens dos veículos são periodicamente verificadas e alguns problemas evidentes, quando detetados, são relatados com uma mensagem de aviso +STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Quando ativado, as ordens dos veículos são periodicamente verificadas e alguns problemas evidentes, quando detectados, são relatados com uma mensagem de aviso ###length 3 STR_CONFIG_SETTING_ORDER_REVIEW_OFF :Não STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :Sim, mas excluir veículos parados @@ -1527,7 +1527,7 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY :Quantia mínima STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Quantia mínima de dinheiro que deve existir na conta bancária para a renovação automática de veículos ser considerada STR_CONFIG_SETTING_ERRMSG_DURATION :Duração da mensagem de erro: {STRING} -STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duração da visualização de mensagens de erro em uma janela vermelha. Algumas mensagens de erro (crítico) não são fechadas automaticamente após este tempo, mas precisam ser fechadas manualmente +STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duração da visualização de mensagens de erro em uma janela vermelha. Algumas mensagens de erro (crítico) não são fechadas automaticamente após este tempo e precisam ser fechadas manualmente STR_CONFIG_SETTING_HOVER_DELAY :Mostrar textos de ajuda: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tempo que o cursor deve ficar sobre algum elemento da interface para que os textos de ajuda sejam mostrados. Quando este valor está definido como 0, os textos de ajuda podem ser mostrados com o botão direito do mouse @@ -1638,8 +1638,8 @@ STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Verde para azul STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :Cinza para vermelho STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Escala de cinza -STR_CONFIG_SETTING_SCROLLMODE :Comportamento do deslocamento da visualização: {STRING} -STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Comportamento da movimentação do mapa. A opção "posição do mouse travada" não funciona em todos os sistemas, tais como versões baseadas na web, telas sensíveis ao toque, Linux com Wayland e outros +STR_CONFIG_SETTING_SCROLLMODE :Comportamento de rolagem da visualização: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Comportamento de movimentação do mapa. A opção "posição do mouse travada" não funciona em todos os sistemas, tais como versões baseadas na web, telas sensíveis ao toque, Linux com Wayland e outros ###length 4 STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Mover visualização com o Botão Direito, posição do mouse travada STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Mover mapa com o Botão Direito, posição do mouse travada @@ -2015,7 +2015,7 @@ STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x STR_CONFIG_SETTING_TOWN_GROWTH :Ritmo de crescimento das localidades: {STRING} -STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Velocidade do crescimento das localidades +STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Velocidade de crescimento das localidades ###length 5 STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Nenhum STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Devagar @@ -2027,7 +2027,7 @@ STR_CONFIG_SETTING_LARGER_TOWNS :Proporção de STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Quantidade de localidades que se tornarão cidades. Assim, uma localidade que começa maior crescerá mais rápido STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 a cada {COMMA} ###setting-zero-is-special -STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Nenhum +STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Nenhuma STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador de tamanho inicial da cidade: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamanho médio das cidades em relação às localidades normais no início do jogo @@ -2251,7 +2251,7 @@ STR_CHEAT_NO_JETCRASH :{LTBLUE}Aeronav STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Editar a altura máxima do mapa: {ORANGE}{NUM} STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Editar a altura máxima das montanhas no mapa STR_CHEAT_CHANGE_DATE :{LTBLUE}Alterar data: {ORANGE}{DATE_SHORT} -STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Alterar ano atual +STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Alterar o ano atual STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir modificar os valores de produção: {ORANGE}{STRING} STR_CHEAT_STATION_RATING :{LTBLUE}Fixar classificações da estação em 100%: {ORANGE}{STRING} @@ -2593,7 +2593,7 @@ STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Nos últ ###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :erro geral -STR_NETWORK_ERROR_CLIENT_DESYNC :erro/falha de sincronização +STR_NETWORK_ERROR_CLIENT_DESYNC :erro de sincronização STR_NETWORK_ERROR_CLIENT_SAVEGAME :não foi possível carregar o mapa STR_NETWORK_ERROR_CLIENT_CONNECTION_LOST :conexão perdida STR_NETWORK_ERROR_CLIENT_PROTOCOL_ERROR :erro de protocolo @@ -2658,15 +2658,15 @@ STR_CONTENT_NAME_CAPTION :{BLACK}Nome STR_CONTENT_NAME_CAPTION_TOOLTIP :{BLACK}Nome do conteúdo STR_CONTENT_MATRIX_TOOLTIP :{BLACK}Clique em uma linha para ver os detalhes{}Clique na caixa de seleção para marcar e fazer o download STR_CONTENT_SELECT_ALL_CAPTION :{BLACK}Selecionar tudo -STR_CONTENT_SELECT_ALL_CAPTION_TOOLTIP :{BLACK}Marcar todo o conteúdo para ser baixado +STR_CONTENT_SELECT_ALL_CAPTION_TOOLTIP :{BLACK}Marcar todo o conteúdo para download STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Selecionar atualizações -STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Marcar para baixar todo conteúdo que seja atualização para um conteúdo existente +STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Marcar para download todo conteúdo que seja atualização para um conteúdo existente STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}Desmarcar tudo STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Desmarcar todo o conteúdo selecionado STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Procurar em sites externos STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Procurar conteúdo, que não está disponível no servidor de conteúdo do OpenTTD, em sites não associados ao OpenTTD STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Você está saindo do OpenTTD! -STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Os termos e condições ao baixar conteúdo de fontes externas pode variar.{}Você deverá consultar as fontes para obter instruções de como instalar o conteúdo no OpenTTD.{}Você deseja continuar? +STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Os termos e condições para download de conteúdo de fontes externas pode variar.{}Você deverá consultar as fontes para obter instruções de como instalar o conteúdo no OpenTTD.{}Você deseja continuar? STR_CONTENT_FILTER_TITLE :{BLACK}Filtrar por etiqueta/nome: STR_CONTENT_OPEN_URL :{BLACK}Página da internet STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Visitar o site desse conteúdo @@ -2676,11 +2676,11 @@ STR_CONTENT_TOTAL_DOWNLOAD_SIZE :{SILVER}Tamanho STR_CONTENT_DETAIL_TITLE :{SILVER}INFORMAÇÕES DO CONTEÚDO ###length 5 -STR_CONTENT_DETAIL_SUBTITLE_UNSELECTED :{SILVER}Você não selecionou isto para ser baixado -STR_CONTENT_DETAIL_SUBTITLE_SELECTED :{SILVER}Você selecionou isto para ser baixado -STR_CONTENT_DETAIL_SUBTITLE_AUTOSELECTED :{SILVER}Esta dependência foi selecionada para ser baixada +STR_CONTENT_DETAIL_SUBTITLE_UNSELECTED :{SILVER}Você não selecionou isto para download +STR_CONTENT_DETAIL_SUBTITLE_SELECTED :{SILVER}Você selecionou isto para download +STR_CONTENT_DETAIL_SUBTITLE_AUTOSELECTED :{SILVER}Esta dependência foi selecionada para download STR_CONTENT_DETAIL_SUBTITLE_ALREADY_HERE :{SILVER}Você já tem isto -STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER}Esse conteúdo é desconhecido e não pode ser baixado pelo OpenTTD +STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER}Esse conteúdo é desconhecido e o OpenTTD não pode fazer o download STR_CONTENT_DETAIL_UPDATE :{SILVER}Isto é uma atualização para {STRING} STR_CONTENT_DETAIL_NAME :{SILVER}Nome: {WHITE}{STRING} @@ -2708,11 +2708,11 @@ STR_CONTENT_TYPE_GAME_SCRIPT :Script de jogo STR_CONTENT_TYPE_GS_LIBRARY :Biblioteca de SJ # Content downloading progress window -STR_CONTENT_DOWNLOAD_TITLE :{WHITE}Baixando conteúdo... +STR_CONTENT_DOWNLOAD_TITLE :{WHITE}Fazendo download de conteúdo... STR_CONTENT_DOWNLOAD_INITIALISE :{WHITE}Requisitando arquivos... -STR_CONTENT_DOWNLOAD_FILE :{WHITE}Baixando {STRING} ({NUM} de {NUM}) +STR_CONTENT_DOWNLOAD_FILE :{WHITE}Fazendo download de {STRING} ({NUM} de {NUM}) STR_CONTENT_DOWNLOAD_COMPLETE :{WHITE}Concluído -STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES} de {BYTES} foram baixados ({NUM} %) +STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES} de {BYTES} foram transferidos ({NUM} %) # Content downloading error messages STR_CONTENT_ERROR_COULD_NOT_CONNECT :{WHITE}Não foi possível conectar ao servidor de conteúdo... @@ -2722,11 +2722,11 @@ STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}Falha na STR_MISSING_GRAPHICS_SET_CAPTION :{WHITE}Gráficos não instalados STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD precisa de gráficos para funcionar, mas nenhum foi encontrado. Você permite que o OpenTTD faça o download e instale esses gráficos? -STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Sim, obter os gráficos pela rede +STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Sim, fazer o download dos gráficos STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Não, sair do OpenTTD STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}O download falhou -STR_MISSING_GRAPHICS_ERROR :{BLACK}O download de gráficos falhou.{}Por favor, obtenha os gráficos manualmente +STR_MISSING_GRAPHICS_ERROR :{BLACK}O download dos gráficos falhou.{}Por favor, faça o download dos gráficos manualmente. STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Sair do OpenTTD # Transparency settings window @@ -2809,7 +2809,7 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Escolher # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Ponto de controle -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Escolher tipo de ponto de controle +STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Escolher um tipo de ponto de controle # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Seleção de Estação Ferroviária @@ -2820,7 +2820,7 @@ STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Escolher STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Comprimento da plataforma STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Escolher o comprimento da estação ferroviária STR_STATION_BUILD_DRAG_DROP :{BLACK}Arrastar & Soltar -STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construir estação usando arrastar & soltar +STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construir estação usando arrastar e soltar STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Escolher uma classe de estação para mostrar STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Escolher um tipo de estação para construir @@ -2854,7 +2854,7 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Aumentar # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Selecionar Ponte Ferroviária STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Selecionar Ponte Rodoviária -STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Seleção de ponte - Clique na ponte de sua preferência para construí-la +STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Seleção de ponte - clique na ponte de sua preferência para construí-la 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} @@ -2966,7 +2966,7 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Seleção de Objeto -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Escolher objeto para construir. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para só mostrar o custo estimado +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Escolher um objeto para construir. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para só mostrar o custo estimado STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Escolher a classe do objeto para construir STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Pré-visualização do objeto STR_OBJECT_BUILD_SIZE :{BLACK}Tamanho: {GOLD}{NUM} x {NUM} quadrados @@ -3028,7 +3028,7 @@ STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Escolher STR_FOUND_TOWN_CITY :{BLACK}Cidade STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Cidades crescem mais depressa do que as localidades normais{}Dependendo das configurações, elas são maiores quando fundadas -STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Disposição de estradas na localidade: +STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Disposição das estradas na localidade: STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Selecionar disposição das estradas utilizada nesta localidade STR_FOUND_TOWN_SELECT_LAYOUT_ORIGINAL :{BLACK}Original STR_FOUND_TOWN_SELECT_LAYOUT_BETTER_ROADS :{BLACK}Estradas melhores @@ -3193,7 +3193,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno que per # About OpenTTD window STR_ABOUT_OPENTTD :{WHITE}Sobre o OpenTTD... -STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Todos os direitos reservados +STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Direitos autorais originais {COPYRIGHT} 1995 Chris Sawyer, Todos os direitos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versão {REV} STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} A equipe do OpenTTD @@ -3267,7 +3267,7 @@ STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Lista de unidades, diretórios e arquivos de jogos gravados STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Nome selecionado para salvar o jogo STR_SAVELOAD_DELETE_BUTTON :{BLACK}Apagar -STR_SAVELOAD_DELETE_TOOLTIP :{BLACK}Apagar o jogo salvo selecionado +STR_SAVELOAD_DELETE_TOOLTIP :{BLACK}Excluir o jogo salvo selecionado STR_SAVELOAD_SAVE_BUTTON :{BLACK}Salvar STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Salvar o jogo atual usando o nome escolhido STR_SAVELOAD_LOAD_BUTTON :{BLACK}Abrir @@ -3372,7 +3372,7 @@ STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Altura d STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Pico mais elevado STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Cobertura com neve (em %) STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Cobertura com deserto (em %) -STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Alterar ano de início +STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Alterar o ano de início # SE Map generation STR_SE_MAPGEN_CAPTION :{WHITE}Tipo de cenário @@ -3435,7 +3435,7 @@ STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Ativar/D STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Ativar/Desativar a paleta do NewGRF selecionado.{}Faça isso quando os gráficos deste NewGRF ficarem cor de rosa no jogo STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Aplicar modificações -STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Procurar conteúdo que falta online +STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Procurar conteúdo em falta online STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP :{BLACK}Verificar se o conteúdo em falta pode ser encontrado online STR_NEWGRF_SETTINGS_FILENAME :{BLACK}Nome do arquivo: {SILVER}{STRING} @@ -3497,7 +3497,7 @@ STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Ir para STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Sprite anterior STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Ir para o sprite normal anterior, pulando quaisquer sprites falsos/recoloridos/tipo de letra, retornando do primeiro sprite para o último STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representação do sprite atualmente selecionado. O alinhamento é ignorado ao desenhar este sprite -STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move o sprite, alterando os deslocamentos X e Y. Ctrl+Clique para mover o sprite 8 unidades por vez +STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Mover o sprite, alterando os deslocamentos X e Y. Ctrl+Clique para mover o sprite 8 unidades por vez ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Deslocamento centralizado @@ -3610,7 +3610,7 @@ STR_TOWN_DIRECTORY_CAPTION :{WHITE}Localida STR_TOWN_DIRECTORY_NONE :{ORANGE}- Nenhum - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Cidade){BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Nomes das localidades - Clique no nome para centralizar visualização principal na cidade. Ctrl+Clique para abrir uma nova visualização na localização da localidade +STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Nomes das localidades - clique em um nome para centralizar a visualização principal na cidade. Ctrl+Clique para abrir uma nova visualização na localização da localidade STR_TOWN_POPULATION :{BLACK}População mundial: {COMMA} # Town view window @@ -3643,12 +3643,12 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Renomear Locali # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Autoridade local de {TOWN} -STR_LOCAL_AUTHORITY_ZONE :{BLACK}Região +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Área STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Mostrar a região dentro dos limites da autoridade local STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Classificações das empresas de transporte: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Ações disponíveis: -STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista de ações disponíveis nesta localidade - Clique no item para mais detalhes +STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista de ações disponíveis nesta localidade - clique em um item para mais detalhes STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Fazer isto STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Executar a ação selecionada na lista acima @@ -3669,7 +3669,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Financiar a reconstrução da rede urbana de estradas.{}Provoca uma perturbação considerável no tráfego por até 6 meses.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}Financiar a reconstrução da rede urbana de estradas.{}Provoca uma perturbação considerável no tráfego por até 6 minutos.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Construir uma estátua em homenagem à sua empresa.{}Produz um aumento permanente na classificação da estação nesta localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Financiar a construção de novos edifícios na localidade.{}Produz um aumento temporário no crescimento desta localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Financiar a construção de novos imóveis na localidade.{}Produz um aumento temporário no crescimento desta localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Comprar os direitos exclusivos de transporte na localidade por 12 meses.{}A autoridade local não permitirá que passageiros e cargas usem as estações dos concorrentes. Um suborno bem sucedido feito por um concorrente irá cancelar este contrato.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Comprar os direitos exclusivos de transporte na localidade por 12 minutos.{}A autoridade local não permitirá que passageiros e cargas usem as estações dos concorrentes. Um suborno bem sucedido feito por um concorrente irá cancelar este contrato.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Subornar a autoridade local para aumentar a sua avaliação e anular um direito exclusivo de transporte de um concorrente, correndo o risco de uma penalidade severa se for apanhado.{}{POP_COLOUR}Custo: {CURRENCY_LONG} @@ -3686,7 +3686,7 @@ STR_GOALS_TEXT :{ORANGE}{STRING STR_GOALS_NONE :{ORANGE}- Nenhum - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique no objetivo para centralizar visualização principal na indústria/localidade/quadrado. Ctrl+Clique para abrir uma nova visualização na localização da indústria/localidade/quadrado +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique no objetivo para centralizar a visualização principal na indústria/localidade/quadrado. Ctrl+Clique para abrir uma nova visualização na localização da indústria/localidade/quadrado # Goal question window STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Pergunta @@ -3722,7 +3722,7 @@ STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_NONE :{ORANGE}- Nenhum - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Serviços de transporte já subsidiados: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} d{G e a} {STRING} para {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) -STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique em um serviço para centralizar visualização principal em uma indústria/localidade. Ctrl+Clique para abrir uma nova visualização na localização da indústria/localidade +STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique em um serviço para centralizar a visualização principal em uma indústria/localidade. Ctrl+Clique para abrir uma nova visualização na localização da indústria/localidade STR_SUBSIDIES_OFFERED_EXPIRY_DATE :até {DATE_SHORT} STR_SUBSIDIES_OFFERED_EXPIRY_TIME :durante {UNITS_MONTHS_OR_MINUTES} STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :até {DATE_SHORT} @@ -3734,7 +3734,7 @@ STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Livro de STR_STORY_BOOK_SPECTATOR :Livro de Histórias Global STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Página {NUM} -STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Saltar para uma página específica escolhendo-a nesta lista +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Ir para uma página específica escolhendo-a nesta lista STR_STORY_BOOK_PREV_PAGE :{BLACK}Anterior STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Ir para a página anterior STR_STORY_BOOK_NEXT_PAGE :{BLACK}Próxima @@ -3742,7 +3742,7 @@ STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Ir para STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Referência de objetivo inválida # Station list window -STR_STATION_LIST_TOOLTIP :{BLACK}Nomes das estações - Clique no nome para centralizar visualização principal na estação. Ctrl+Clique para abrir uma nova visualização na localização da estação +STR_STATION_LIST_TOOLTIP :{BLACK}Nomes das estações - clique em um nome para centralizar a visualização principal na estação. Ctrl+Clique para abrir uma nova visualização na localização da estação STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Ctrl+Clique para selecionar vários itens STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} Estaç{P ão ões} STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} @@ -3897,11 +3897,11 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Nenhum STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Construir sede -STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Construir sede da empresa +STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Construir a sede da empresa STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Ver sede -STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Mostrar sede da empresa +STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Mostrar a sede da empresa STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Mover sede -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Reconstruir sede da empresa em outro local por 1% do valor da empresa. Pressione também Shift para só mostrar o custo estimado +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Reconstruir a sede da empresa em outro local por 1% do valor da empresa. Pressione também Shift para só mostrar o custo estimado STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detalhes STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Ver contagens detalhadas da infraestrutura STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Dar dinheiro @@ -3910,7 +3910,7 @@ STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Aquisiç STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Fazer a aquisição hostil desta empresa STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nova Face -STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Escolher nova face para o presidente +STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Escolher uma face nova para o presidente STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Esquema de Cores STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Alterar a cor dos veículos da empresa STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Nome da Empresa @@ -3923,7 +3923,7 @@ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nome do Preside STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Digitar a quantia de dinheiro que você quer dar STR_BUY_COMPANY_MESSAGE :{WHITE}Estamos procurando uma empresa de transportes para comprar a nossa empresa.{}{}Você deseja comprar {COMPANY} por {CURRENCY_LONG}? -STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Na aquisição hostil de {COMPANY} você irá adquirir todos os ativos, liquidar todos os empréstimos e pagar o valor de 2 anos de lucros.{}{}O total estimado é de {CURRENCY_LONG}.{}{}Você deseja continuar esta aquisição hostil? +STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Na aquisição hostil de {COMPANY} você irá adquirir todos os ativos, liquidar todos os empréstimos e pagar dois anos de lucros.{}{}O total estimado é de {CURRENCY_LONG}.{}{}Você deseja continuar esta aquisição hostil? # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infraestrutura de {COMPANY} @@ -3948,7 +3948,7 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} e mais {NUM} ... -STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nomes de indústrias - Clique no nome para centralizar visualização principal na indústria. Ctrl+Clique para abrir uma nova visualização na localização da indústria +STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nomes de indústrias - clique em um nome para centralizar a visualização principal na indústria. Ctrl+Clique para abrir uma nova visualização na localização da indústria STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Carga aceita: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Carga produzida: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Todos os tipos de carga @@ -3971,7 +3971,7 @@ STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessit STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} aguardando{STRING} -STR_CONFIG_GAME_PRODUCTION :{WHITE}Alterar produção (múltiplo de 8, até 2040) +STR_CONFIG_GAME_PRODUCTION :{WHITE}Alterar a produção (múltiplo de 8, até 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Alterar o nível de produção (porcentagem, até 800%) # Vehicle lists @@ -3982,10 +3982,10 @@ STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} Aeronave{P "" s} ###length VEHICLE_TYPES -STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Trens - Clique em um trem para informações -STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Veículos - Clique em um veículo para informações -STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Embarcações - Clique em uma embarcação para informações -STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Aeronaves - Clique em uma aeronave para informações +STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Trens - clique em um trem para informações +STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Veículos - clique em um veículo para informações +STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Embarcações - clique em uma embarcação para informações +STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Aeronaves - clique em uma aeronave para informações ###length VEHICLE_TYPES STR_VEHICLE_LIST_AVAILABLE_TRAINS :Trens Disponíveis @@ -4029,7 +4029,7 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Aeronaves sem g STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - Clique em um grupo para listar todos os veículos do grupo. Clique+Arraste para organizar a hierarquia +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - clique em um grupo para listar todos os veículos do grupo. Clique+Arraste para organizar a hierarquia STR_GROUP_CREATE_TOOLTIP :{BLACK}Clique para criar um grupo STR_GROUP_DELETE_TOOLTIP :{BLACK}Excluir o grupo selecionado STR_GROUP_RENAME_TOOLTIP :{BLACK}Alterar o nome do grupo selecionado @@ -4180,9 +4180,9 @@ STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Trens - arraste o veículo com o botão esquerdo do mouse para acrescentar/retirar do trem. Clique com o botão direito para informações. Ctrl+Clique para aplicar uma das funções à cadeia seguinte -STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Veículos - Clique com o botão direito em um veículo para informações -STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Embarcações - Clique com o botão direito em uma embarcação para informações -STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Aeronaves - Clique com o botão direito em uma aeronave para informações +STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Veículos - clique com o botão direito em um veículo para informações +STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Embarcações - clique com o botão direito em uma embarcação para informações +STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Aeronaves - clique com o botão direito em uma aeronave para informações ###length VEHICLE_TYPES STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Arraste o veículo ferroviário até aqui para vendê-lo @@ -4377,10 +4377,10 @@ STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Mostrar STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Mostrar detalhes da aeronave ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Estado atual do trem - Clique para iniciar/parar o trem -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Estado atual do veículo - Clique para iniciar/parar o veículo -STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Estado atual da embarcação - Clique para iniciar/parar a embarcação -STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Estado atual da aeronave - Clique para iniciar/parar a aeronave +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Estado atual do trem - clique para iniciar/parar o trem +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Estado atual do veículo - clique para iniciar/parar o veículo +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Estado atual da embarcação - clique para iniciar/parar a embarcação +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Estado atual da aeronave - clique para iniciar/parar a aeronave # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Carregando / descarregando @@ -4528,7 +4528,7 @@ STR_ORDERS_CAPTION :{WHITE}{VEHICLE STR_ORDERS_TIMETABLE_VIEW :{BLACK}Horários STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Mudar para a visualização de horários -STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de ordens - Clique em uma ordem para selecioná-la. Ctrl+Clique para mostrar o destino da ordem +STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de ordens - clique em uma ordem para selecioná-la. Ctrl+Clique para mostrar o destino da ordem STR_ORDER_INDEX :{COMMA}:{NBSP} STR_ORDER_TEXT :{STRING} {STRING} {STRING} {STRING} @@ -4700,7 +4700,7 @@ STR_TIMETABLE_TITLE :{WHITE}{VEHICLE STR_TIMETABLE_ORDER_VIEW :{BLACK}Ordens STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Mudar para visualização de ordens -STR_TIMETABLE_TOOLTIP :{BLACK}Horários - Clique em uma ordem para selecioná-la +STR_TIMETABLE_TOOLTIP :{BLACK}Horários - clique em uma ordem para selecioná-la STR_TIMETABLE_NO_TRAVEL :Não viajar STR_TIMETABLE_NOT_TIMETABLEABLE :Viajar (automático; programado pela próxima ordem manual) diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 3427437456..e84cc263ee 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -4995,7 +4995,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Can't bu STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Can't build company headquarters... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Can't build any towns +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Can't build any towns... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Can't rename town... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Can't found town here... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Can't expand town... diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 29ece3c052..fcb8d3e559 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -4995,7 +4995,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Can't bu STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Can't build company headquarters... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Can't build any towns +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Can't build any towns... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Can't rename town... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Can't found town here... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Can't expand town... diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index f7a52f4d97..ac950a5fa3 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -2574,6 +2574,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Et ole a STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Et ole asettanut palvelimesi nimeä. Nimen voi asettaa moninpeli-ikkunan ylälaidassa. STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Tämän asiakkaan versio ei vastaa palvelimen versiota STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Väärä salasana +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Et ole sallittujen asiakkaiden listalla STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Palvelin on täynnä STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Sinut on estetty palvelimelta STR_NETWORK_ERROR_KICKED :{WHITE}Sinut potkittiin pihalle palvelimelta @@ -2601,6 +2602,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :vastaanotettiin STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :väärä revisio STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :nimi on jo käytössä STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :väärä salasana +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :ei sallittujen listalla STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :väärä company-id DoCommandissa STR_NETWORK_ERROR_CLIENT_KICKED :palvelin potki pihalle STR_NETWORK_ERROR_CLIENT_CHEATER :yritti käyttää huijausta @@ -4993,7 +4995,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Yhtiöt STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Yhtiön päärakennusta ei voi rakentaa... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Kuntia ei voi luoda +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Kuntia ei voida luoda… STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Kunnan nimeä ei voi vaihtaa... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Kuntaa ei voi perustaa tähän... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Kuntaa ei voi laajentaa... diff --git a/src/lang/german.txt b/src/lang/german.txt index eb1555b68f..db7508884e 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -4996,7 +4996,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Firmenka STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Firmensitz kann nicht gebaut werden ... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Bau von Städten unmöglich +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Bau von Städten unmöglich … STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Die Stadt kann nicht umbenannt werden ... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Stadt kann hier nicht gegründet werden ... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Stadt kann nicht vergrößert werden ... diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 9a7d68d4ae..25b8d1f611 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2575,6 +2575,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}접속 STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}서버 이름을 지정하지 않았습니다. 서버 이름은 멀티플레이 창 맨 위에서 설정할 수 있습니다. STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}이 접속자의 게임 버전이 서버의 버전과 일치하지 않습니다 STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}잘못된 비밀번호입니다 +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}접속이 허용된 접속자가 아닙니다 STR_NETWORK_ERROR_SERVER_FULL :{WHITE}서버에 인원이 가득 찼습니다 STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}서버 관리자에 의해 접속이 차단되었습니다 STR_NETWORK_ERROR_KICKED :{WHITE}서버에서 강제로 추방되었습니다 @@ -2602,6 +2603,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :잘못된 패 STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :잘못된 버전 STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :이미 사용중인 이름 STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :잘못된 비밀번호 +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :접속이 허용되지 않음 STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :DoCommand 구문 내의 잘못된 회사 STR_NETWORK_ERROR_CLIENT_KICKED :강제추방 STR_NETWORK_ERROR_CLIENT_CHEATER :치트 사용 시도 @@ -4994,7 +4996,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}회사 STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}본사를 건설할 수 없습니다... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}도시를 만들 수 없습니다 +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}도시를 만들 수 없습니다... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}도시 이름을 바꿀 수 없습니다... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}여기에 도시를 건설할 수 없습니다... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}도시를 확장할 수 없습니다... diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 43722b0af0..e5555a8b89 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -4997,7 +4997,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Kan ikke STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Kan ikke bygge selskapets hovedkontor... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Kan ikke grunnlegge noen byer +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Kan ikke grunnlegge noen byer... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Kan ikke endre navn på byen... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Kan ikke grunnlegge by her... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Kan ikke utvide byen... diff --git a/src/lang/polish.txt b/src/lang/polish.txt index e579023bd2..4df0d47163 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -5381,7 +5381,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Nie moż STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Nie można zbudować siedziby firmy... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Nie można wybudować miasta +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Nie można zbudować żadnego miasta... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Nie można zmienić nazwy miasta... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Nie można tutaj zbudować miasta... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Nie można rozszerzyć miasta... diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 7d86a875e8..7a9df710f9 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1630,7 +1630,8 @@ STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :При вклю STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Транспортні засоби не застарівають: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :При включенні будь-яка модель транспортного засобу буде доступна для придбання безстроково після її впровадження. -STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Дотримання розкладу: {STRING} +STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Вимір часу: {STRING} +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Оберіть вимір часу. Це налаштування неможливо змінити в грі.{}{}Календарний час, у якому рік складається з 12 місяців, а кожен місяць має 28-31 день, базовий в OpenTTD.{}{}Годинниковий час складається з однохвилинних зростань виробництва товарів і фінансових потоків, які відповідають 30-денному місяцю у календарному часі. Зростання об'єднані у 12-хвилинні періоди, які відповідають 1му року в календарному часі.{}{}У будь-якому варіанті використовуються базові дати появи транспорту, будиків та іншої інфраструктури. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Календар STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Годинник @@ -1677,7 +1678,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Товщина STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Показувати назву NewGRF у вікні придбання транспорту: {STRING} STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Додати рядок у вікні придбання транспорту, який показуватиме назву NewGRF обраного транспорту. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Показати вантажі, які може перевозити транспорт, у віконному списку{STRING} +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Показати у віконному списку вантажі, які може перевозити транспорт:{STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :При включенні придатний вантаж для транспортних засобів показано нижче у списку транспорту STR_CONFIG_SETTING_LANDSCAPE :Ландшафт: {STRING} @@ -1696,7 +1697,7 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Густота STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Встановіть кількість підприємств, що будуть створені і кількість підприємств, що існуватимуть впродовж гри STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Макс. відстань від краю карти до нафтопереробних заводів: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Обмеження того, наскільки далеко може бути побудований кордон нафтопереробних заводів та нафтових установок. На островних картах це гарантує, що вони знаходяться біля узбережжя. На картах більше 256 плиток це значення збільшується. +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Обмеження віддалення від меж мапи будівництва нафтопереробних заводів та нафтових установок. На острівних мапах це гарантує розташування біля узбережжя. На мапах понад 256 клітинок це значення збільшиться. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Рівень снігової шапки: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Контроль висоти, вище якої лежить сніг в субарктичному ландшафті. Сніг впливає на генерування підприємств та на умови росту міст. Можливо змінити лише в редакторі сценаріїв, інакше вираховується за параметром "покриття снігом" @@ -2191,7 +2192,7 @@ STR_CONFIG_SETTING_DEMAND_SIZE :Кількіс STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Встановивши це на менше ніж 100% можна зробити симетричну доставку схожою на асиметричну. Менше вантажу буде примусово повертатися назад, якщо певна його кількість надсилається на станцію. При 0% - симетрична доставка поводить себе зовсім як асиметрична. STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Рівень заповнення коротких маршрутів перед переходом до містких: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Часто між двома заданими станціями є більше, ніж один шлях. Cargodist заповнить спочатку найкоротший маршрут, потім другий після найкоротшого і т. д. Рівень заповнення визначається за допомогою оцінки місткості та запланованого використання. Якщо всі маршрути буде заповнено, а джерело вантажу не вичерпається, алгоритм почне переповнювати маршрути, починаючи з наймісткіших. Ця настройка дозволяє задати рівень заповнення в процентах, якого треба досягнути на першому маршруті перед тим, як перейти до заповнення наступного. Варто встановити цей рівень меншим за 100%, щоб уникнути переповнення станцій в разі переоцінки місткості маршруту. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Часто між двома заданими станціями є кілька шляхів. Cargodist заповнить спочатку найкоротший маршрут, потім другий після найкоротшого тощо. Рівень заповнення визначається оцінкою місткості та запланованого використання. Якщо всі маршрути буде заповнено, а джерело вантажу не вичерпається, алгоритм почне переповнювати маршрути, починаючи з наймісткіших. Налаштування дозволяє вказати рівень заповнення у відсотках, якого треба досягти на першому маршруті перед заповненням наступного. Встановлення рівня меншим за 100% дозводить уникнути переповнення станцій у випадку переоцінки місткості. STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Одиниці швидкості (на суші): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Одиниці швидкості (на воді): {STRING} @@ -2564,7 +2565,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Назв STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Встановити пароль STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Захистіть вашу гру паролем, якщо не бажаєте загального доступу -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Видимість +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Видимість: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Чи бачитимуть інші твій сервер у загальному списку STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клієнт{P "" а ів} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Макс. клієнтів: @@ -3095,7 +3096,7 @@ STR_STATION_BUILD_NOISE :{BLACK}Ріве # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Ландшафт STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Опустити край ділянки землі. Протягування мишею опускає вибраний край і вирівнює вибрану ділянку до його нової висоти. Утримуйте Ctrl для виділення клітинок по діагоналі, або Shift - для показу очікуваних витрат -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Підняти край ділянки землі. Протягування мишею піднімає вибраний край і вирівнює вибрану ділянку до його нової висоти. Утримуйте Ctrl для виділення клітинок по діагоналі, або Shift - для показу очікуваних витрат +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Підняти край ділянки землі. Протягування мишею піднімає вибраний край і вирівнює вибрану ділянку до його нової висоти. Ctrl+клац+протягування для виділення клітинок по діагоналі. Утримуйте Shift для показу очікуваних витрат STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Вирівняти ділянку землі до висоти першого обраного краю. Утримуйте Ctrl для виділення клітинок по діагоналі, або Shift - для показу очікуваних витрат STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Купити ділянку для використання у майбутньому. Утримуйте Ctrl для виділення діагональної ділянки. Утримуйте Shift для показу вартості ділянки @@ -3958,7 +3959,7 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Забо # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} -STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Показати точку маршруту в центрі екрану. Ctrl+клац мишею відкриє нове вікно у місці розташування точки маршруту +STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Показати точку маршруту в центрі екрану. Ctrl+клац мишею відкриє нове вікно з видом на точку маршруту STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Перейменувати точку маршруту STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Показати буй в центрі екрану. Ctrl+клац мишею відкриє нове вікно у місці розташування буя STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Перейменувати буй @@ -4036,7 +4037,7 @@ STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Побу STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Показати Офіс STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Показати офіс компанії STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Перенести Офіс -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Перенесення Офісу в інше місце. Коштує 1% від вартості компанії. Утримуйте Shift для показу очікуваних витрат на перенесення +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Перенесення офісу в інше місце. Коштує 1% від вартості компанії. Утримуйте Shift для показу очікуваних витрат на перенесення STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Деталі STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Переглянути детальну інформацію про інфраструктуру STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Дати грошей @@ -4263,7 +4264,7 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Купи ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбайте та переобладнайте виділений поїзд. Shift+клац показує орієнтовну вартість без покупки STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбайте та переобладнайте авто. Shift+клац показує орієнтовну вартість без покупки -STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбайте та переобладнайте виділене судно. Shift+клац показує орієнтовну вартість без покупки +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбати та переобладнати виділене судно. Утримуйте Shift, щоб побачити тільки орієнтовну вартість STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбайте та переобладнайте виділений повітряний апарат. Утримуйте Shift, щоб побачити тільки орієнтовну вартість ###length VEHICLE_TYPES @@ -4365,7 +4366,7 @@ STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Купи STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Показати залізничне депо у центрі екрану. Ctrl+клац мишею відкриє нове вікно з видом на залізничне депо STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Показати гараж у центрі екрану. Ctrl+клац мишею відкриє нове вікно з видом на гараж STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Показати док у центрі екрану. Ctrl+клац мишею відкриє нове вікно з видом на док -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Показати ангар в центрі екрану. Ctrl+клац мишею відкриє нове вікно з видом на ангар +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Показати ангар у центрі екрану. Ctrl+клац мишею відкриє нове вікно з видом на ангар ###length VEHICLE_TYPES STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Отримати список усіх поїздів, що заходять до цього депо @@ -5133,7 +5134,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Немо STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Неможливо збудувати Офіс... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Не можна створити місто +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Неможливо створити місто... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Неможливо перейменувати... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Тут не можна будувати місто... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Неможливо розширити місто... From 5751da78093bb689f0fbec89dbcf19437cc19632 Mon Sep 17 00:00:00 2001 From: raddari Date: Sat, 23 Mar 2024 00:03:16 +1030 Subject: [PATCH 162/695] Fix #7982: Show existing coverage with unambiguous adjacent station (#12346) When hovering a tile containing a station, show existing coverage for that station even when adjacent to a different station. Co-authored-by: Peter Nelson --- src/station_gui.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 3215b72500..414b48a466 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -92,6 +92,15 @@ void FindStationsAroundSelection() /* Tile area for TileHighlightData */ TileArea location(TileVirtXY(_thd.pos.x, _thd.pos.y), _thd.size.x / TILE_SIZE - 1, _thd.size.y / TILE_SIZE - 1); + /* If the current tile is already a station, then it must be the nearest station. */ + if (IsTileType(location.tile, MP_STATION) && GetTileOwner(location.tile) == _local_company) { + T* st = T::GetByTile(location.tile); + if (st != nullptr) { + SetViewportCatchmentSpecializedStation(st, true); + return; + } + } + /* Extended area by one tile */ uint x = TileX(location.tile); uint y = TileY(location.tile); From 7457f8d0ffa1cf345b80a5a386b54968f9a7dd29 Mon Sep 17 00:00:00 2001 From: merni-ns <66267867+merni-ns@users.noreply.github.com> Date: Sat, 23 Mar 2024 00:49:29 +0530 Subject: [PATCH 163/695] Codefix: Incorrect pluralisation in last service/service interval texts (#12352) --- src/lang/english.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 9263705e4b..39d9cb6432 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -4449,10 +4449,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Capacity STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Transfer Credits: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Servicing interval: {LTBLUE}{COMMA}{NBSP}days{BLACK} {STRING1} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Servicing interval: {LTBLUE}{COMMA}{NBSP}minutes{BLACK} {STRING1} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Servicing interval: {LTBLUE}{COMMA}{NBSP}minute{P "" s}{BLACK} {STRING1} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Servicing interval: {LTBLUE}{COMMA}%{BLACK} {STRING1} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Last service: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Last service: {LTBLUE}{NUM} minutes ago +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Last service: {LTBLUE}{NUM} minute{P "" s} ago STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Increase servicing interval by 10 days. Ctrl+Click to increase servicing interval by 5 days STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Increase servicing interval by 5 minutes. Ctrl+Click to increase servicing interval by 1 minute STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Increase servicing interval by 10 percent. Ctrl+Click to increase servicing interval by 5 percent From e904122441430b704439164d45f5ead198dcb119 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Fri, 22 Mar 2024 21:30:44 +0100 Subject: [PATCH 164/695] Codefix: follow coding style --- src/newgrf_text.cpp | 10 +++++----- src/station_gui.cpp | 2 +- src/tile_map.h | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/newgrf_text.cpp b/src/newgrf_text.cpp index 40ef28c9a2..967af68196 100644 --- a/src/newgrf_text.cpp +++ b/src/newgrf_text.cpp @@ -269,7 +269,7 @@ std::string TranslateTTDPatchCodes(uint32_t grfid, uint8_t language_id, bool all continue; } } else { - c = (uint8_t)*src++; + c = static_cast(*src++); } if (c == '\0') break; @@ -305,8 +305,8 @@ std::string TranslateTTDPatchCodes(uint32_t grfid, uint8_t language_id, bool all { if (src[0] == '\0' || src[1] == '\0') goto string_end; StringID string; - string = ((uint8_t)* src++); - string |= ((uint8_t)* src++) << 8; + string = static_cast(*src++); + string |= static_cast(*src++) << 8; Utf8Encode(d, SCC_NEWGRF_STRINL); Utf8Encode(d, MapGRFStringID(grfid, string)); break; @@ -350,8 +350,8 @@ std::string TranslateTTDPatchCodes(uint32_t grfid, uint8_t language_id, bool all case 0x03: { if (src[0] == '\0' || src[1] == '\0') goto string_end; - uint16_t tmp = ((uint8_t)* src++); - tmp |= ((uint8_t)* src++) << 8; + uint16_t tmp = static_cast(*src++); + tmp |= static_cast(*src++) << 8; Utf8Encode(d, SCC_NEWGRF_PUSH_WORD); Utf8Encode(d, tmp); break; diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 414b48a466..098be7a228 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -94,7 +94,7 @@ void FindStationsAroundSelection() /* If the current tile is already a station, then it must be the nearest station. */ if (IsTileType(location.tile, MP_STATION) && GetTileOwner(location.tile) == _local_company) { - T* st = T::GetByTile(location.tile); + T *st = T::GetByTile(location.tile); if (st != nullptr) { SetViewportCatchmentSpecializedStation(st, true); return; diff --git a/src/tile_map.h b/src/tile_map.h index 687963270b..6fbb3a53fa 100644 --- a/src/tile_map.h +++ b/src/tile_map.h @@ -244,12 +244,12 @@ inline TropicZone GetTropicZone(Tile tile) /** * Get the current animation frame * @param t the tile - * @pre IsTileType(t, MP_HOUSE) || IsTileType(t, MP_OBJECT) || IsTileType(t, MP_INDUSTRY) ||IsTileType(t, MP_STATION) + * @pre IsTileType(t, MP_HOUSE) || IsTileType(t, MP_OBJECT) || IsTileType(t, MP_INDUSTRY) || IsTileType(t, MP_STATION) * @return frame number */ inline uint8_t GetAnimationFrame(Tile t) { - assert(IsTileType(t, MP_HOUSE) || IsTileType(t, MP_OBJECT) || IsTileType(t, MP_INDUSTRY) ||IsTileType(t, MP_STATION)); + assert(IsTileType(t, MP_HOUSE) || IsTileType(t, MP_OBJECT) || IsTileType(t, MP_INDUSTRY) || IsTileType(t, MP_STATION)); return t.m7(); } @@ -257,11 +257,11 @@ inline uint8_t GetAnimationFrame(Tile t) * Set a new animation frame * @param t the tile * @param frame the new frame number - * @pre IsTileType(t, MP_HOUSE) || IsTileType(t, MP_OBJECT) || IsTileType(t, MP_INDUSTRY) ||IsTileType(t, MP_STATION) + * @pre IsTileType(t, MP_HOUSE) || IsTileType(t, MP_OBJECT) || IsTileType(t, MP_INDUSTRY) || IsTileType(t, MP_STATION) */ inline void SetAnimationFrame(Tile t, uint8_t frame) { - assert(IsTileType(t, MP_HOUSE) || IsTileType(t, MP_OBJECT) || IsTileType(t, MP_INDUSTRY) ||IsTileType(t, MP_STATION)); + assert(IsTileType(t, MP_HOUSE) || IsTileType(t, MP_OBJECT) || IsTileType(t, MP_INDUSTRY) || IsTileType(t, MP_STATION)); t.m7() = frame; } From df2ee7b06cfa074706a40905e2dd7dc1e67860aa Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 23 Mar 2024 00:12:35 +0000 Subject: [PATCH 165/695] Cleanup: Remove old SaveLoad workarounds for MS VS 2017. (#12355) --- src/saveload/station_sl.cpp | 17 ++--------------- src/saveload/vehicle_sl.cpp | 34 ++++------------------------------ 2 files changed, 6 insertions(+), 45 deletions(-) diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index 35d9b7e81a..8c5b962ead 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -329,17 +329,7 @@ public: class SlStationGoods : public DefaultSaveLoadHandler { public: -#if defined(_MSC_VER) && (_MSC_VER == 1915 || _MSC_VER == 1916) - /* This table access private members of other classes; they have this - * class as friend. For MSVC CL 19.15 and 19.16 this doesn't work for - * "inline static const", so we are forced to wrap the table in a - * function. CL 19.16 is the latest for VS2017. */ - inline static const SaveLoad description[] = {{}}; - SaveLoadTable GetDescription() const override { -#else - inline -#endif - static const SaveLoad description[] = { + inline static const SaveLoad description[] = { SLEG_CONDVAR("waiting_acceptance", _waiting_acceptance, SLE_UINT16, SL_MIN_VERSION, SLV_68), SLE_CONDVAR(GoodsEntry, status, SLE_UINT8, SLV_68, SL_MAX_VERSION), SLE_VAR(GoodsEntry, time_since_pickup, SLE_UINT8), @@ -363,10 +353,7 @@ public: SLEG_CONDSTRUCTLIST("flow", SlStationFlow, SLV_183, SL_MAX_VERSION), SLEG_CONDSTRUCTLIST("cargo", SlStationCargo, SLV_183, SL_MAX_VERSION), }; -#if defined(_MSC_VER) && (_MSC_VER == 1915 || _MSC_VER == 1916) - return description; - } -#endif + inline const static SaveLoadCompatTable compat_description = _station_goods_sl_compat; /** diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 2ae6e6ed3f..4e42de3962 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -634,17 +634,7 @@ static Money _cargo_feeder_share; class SlVehicleCommon : public DefaultSaveLoadHandler { public: -#if defined(_MSC_VER) && (_MSC_VER == 1915 || _MSC_VER == 1916) - /* This table access private members of other classes; they have this - * class as friend. For MSVC CL 19.15 and 19.16 this doesn't work for - * "inline static const", so we are forced to wrap the table in a - * function. CL 19.16 is the latest for VS2017. */ - inline static const SaveLoad description[] = {{}}; - SaveLoadTable GetDescription() const override { -#else - inline -#endif - static const SaveLoad description[] = { + inline static const SaveLoad description[] = { SLE_VAR(Vehicle, subtype, SLE_UINT8), SLE_REF(Vehicle, next, REF_VEHICLE_OLD), @@ -773,10 +763,7 @@ public: SLE_CONDVAR(Vehicle, depot_unbunching_next_departure, SLE_UINT64, SLV_DEPOT_UNBUNCHING, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, round_trip_time, SLE_INT32, SLV_DEPOT_UNBUNCHING, SL_MAX_VERSION), }; -#if defined(_MSC_VER) && (_MSC_VER == 1915 || _MSC_VER == 1916) - return description; - } -#endif + inline const static SaveLoadCompatTable compat_description = _vehicle_common_sl_compat; void Save(Vehicle *v) const override @@ -982,17 +969,7 @@ public: class SlVehicleDisaster : public DefaultSaveLoadHandler { public: -#if defined(_MSC_VER) && (_MSC_VER == 1915 || _MSC_VER == 1916) - /* This table access private members of other classes; they have this - * class as friend. For MSVC CL 19.15 and 19.16 this doesn't work for - * "inline static const", so we are forced to wrap the table in a - * function. CL 19.16 is the latest for VS2017. */ - inline static const SaveLoad description[] = {{}}; - SaveLoadTable GetDescription() const override { -#else - inline -#endif - static const SaveLoad description[] = { + inline static const SaveLoad description[] = { SLE_REF(Vehicle, next, REF_VEHICLE_OLD), SLE_VAR(Vehicle, subtype, SLE_UINT8), @@ -1026,10 +1003,7 @@ public: SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_UINT32, SLV_191, SL_MAX_VERSION), SLE_CONDVAR(DisasterVehicle, flags, SLE_UINT8, SLV_194, SL_MAX_VERSION), }; -#if defined(_MSC_VER) && (_MSC_VER == 1915 || _MSC_VER == 1916) - return description; - } -#endif + inline const static SaveLoadCompatTable compat_description = _vehicle_disaster_sl_compat; void Save(Vehicle *v) const override From 4321cca5fbada9b7ad43587b462539bb3e22f300 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 23 Mar 2024 04:41:01 +0000 Subject: [PATCH 166/695] Update: Translations from eints vietnamese: 1 change by KhoiCanDev chinese (simplified): 1 change by WenSimEHRP ukrainian: 11 changes by StepanIvasyn catalan: 1 change by J0anJosep danish: 1 change by bscargo dutch: 3 changes by Afoklala portuguese (brazilian): 58 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 116 +++++++++++++++--------------- src/lang/catalan.txt | 2 +- src/lang/danish.txt | 2 +- src/lang/dutch.txt | 4 +- src/lang/simplified_chinese.txt | 2 +- src/lang/ukrainian.txt | 22 +++--- src/lang/vietnamese.txt | 2 +- 7 files changed, 76 insertions(+), 74 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 9733189049..1524cfccc3 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -433,8 +433,8 @@ STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar ###length 7 STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO :Salvar cenário STR_SCENEDIT_FILE_MENU_LOAD_SCENARIO :Abrir cenário -STR_SCENEDIT_FILE_MENU_SAVE_HEIGHTMAP :Salvar mapa topográfico -STR_SCENEDIT_FILE_MENU_LOAD_HEIGHTMAP :Abrir mapa topográfico +STR_SCENEDIT_FILE_MENU_SAVE_HEIGHTMAP :Salvar mapa de altitudes +STR_SCENEDIT_FILE_MENU_LOAD_HEIGHTMAP :Abrir mapa de altitudes STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Sair do editor de cenários STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Sair @@ -800,10 +800,10 @@ STR_SMALLMAP_COMPANY :{TINY_FONT}{COM STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN} STR_SMALLMAP_DISABLE_ALL :{BLACK}Desabilitar tudo STR_SMALLMAP_ENABLE_ALL :{BLACK}Habilitar tudo -STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Mostrar altura +STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Mostrar altitudes STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Não mostrar indústrias no mapa STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Mostrar todas as indústrias no mapa -STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Mostrar/Ocultar mapa topográfico +STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Mostrar/Ocultar mapa de altitudes STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Mostrar no mapa as propriedades que não pertencem às empresas STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Mostrar no mapa as propriedades de todas as empresas STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Não mostrar as cargas no mapa @@ -1198,8 +1198,8 @@ STR_TERRAIN_TYPE_FLAT :Plano STR_TERRAIN_TYPE_HILLY :Acidentado STR_TERRAIN_TYPE_MOUNTAINOUS :Montanhoso STR_TERRAIN_TYPE_ALPINIST :Alpinismo -STR_TERRAIN_TYPE_CUSTOM :Altura personalizada -STR_TERRAIN_TYPE_CUSTOM_VALUE :Altura personalizada ({NUM}) +STR_TERRAIN_TYPE_CUSTOM :Altitude personalizada +STR_TERRAIN_TYPE_CUSTOM_VALUE :Altitude personalizada ({NUM}) ###length 4 STR_CITY_APPROVAL_LENIENT :Leniente @@ -1320,12 +1320,12 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Ativar desastre STR_CONFIG_SETTING_CITY_APPROVAL :Atitude da autoridade local: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Escolher de que modo o ruído sonoro e os danos ambientais, causados pelas empresas, afetam a classificação delas na localidade e as ações futuras de construção na localidade -STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Limite de altura do mapa: {STRING} -STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Definir a altura máxima do terreno do mapa. Com "(automático)" um valor adequado será escolhido após a geração do terreno +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Limite de altitude do mapa: {STRING} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Definir a altitude máxima do terreno do mapa. Com "(automático)" um valor adequado será escolhido após a geração do terreno STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(automático) -STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Você não pode definir o limite de altura do mapa para este valor. Pelo menos uma montanha no mapa é mais alta +STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Você não pode definir o limite de altitude do mapa para este valor. Pelo menos uma montanha no mapa é mais alta STR_CONFIG_SETTING_AUTOSLOPE :Permitir paisagismo sob edifícios, vias, etc.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permitir paisagismo sob edifícios e vias sem precisar removê-lo(a)s @@ -1527,7 +1527,7 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY :Quantia mínima STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Quantia mínima de dinheiro que deve existir na conta bancária para a renovação automática de veículos ser considerada STR_CONFIG_SETTING_ERRMSG_DURATION :Duração da mensagem de erro: {STRING} -STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duração da visualização de mensagens de erro em uma janela vermelha. Algumas mensagens de erro (crítico) não são fechadas automaticamente após este tempo e precisam ser fechadas manualmente +STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duração da exibição de mensagens de erro em uma janela vermelha. Algumas mensagens de erro (crítico) não são fechadas automaticamente após este tempo e precisam ser fechadas manualmente STR_CONFIG_SETTING_HOVER_DELAY :Mostrar textos de ajuda: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tempo que o cursor deve ficar sobre algum elemento da interface para que os textos de ajuda sejam mostrados. Quando este valor está definido como 0, os textos de ajuda podem ser mostrados com o botão direito do mouse @@ -1556,7 +1556,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Tipo de terreno: {STRING} -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Escolher a altura das colinas e montanhas da paisagem +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Escolher a altitude das colinas e montanhas da paisagem STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densidade de indústrias: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Definir quantas indústrias devem ser geradas e que nível deve ser mantido durante o jogo @@ -1603,13 +1603,13 @@ STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Escolher o lado STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Conduzir pela esquerda STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Conduzir pela direita -STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotação do mapa topográfico: {STRING} -STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Escolher em que sentido a imagem do mapa topográfico será girada para caber no mundo do jogo +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotação do mapa de altitudes: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Escolher em que sentido a imagem do mapa de altitudes será girada para caber no mundo do jogo ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Sentido Anti-horário STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Sentido Horário -STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :Altura de um mapa de cenário plano: {STRING} +STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :Altitude para um mapa de cenário plano: {STRING} ###length 2 STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}Um ou mais quadrados na borda norte não estão vazios STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}Um ou mais quadrados em um dos cantos não é água @@ -2178,7 +2178,7 @@ STR_INTRO_CAPTION :{WHITE}OpenTTD STR_INTRO_NEW_GAME :{BLACK}Novo Jogo STR_INTRO_LOAD_GAME :{BLACK}Abrir Jogo STR_INTRO_PLAY_SCENARIO :{BLACK}Jogar em Cenário -STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Jogar em Mapa Topográfico +STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Jogar em Mapa de Altitudes STR_INTRO_SCENARIO_EDITOR :{BLACK}Editor de Cenário STR_INTRO_MULTIPLAYER :{BLACK}Multijogador @@ -2194,7 +2194,7 @@ STR_INTRO_QUIT :{BLACK}Sair do STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Iniciar um novo jogo. Ctrl+Clique para saltar a configuração do mapa STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Abrir um jogo salvo -STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Iniciar um novo jogo, usando um mapa topográfico como terreno +STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Iniciar um novo jogo, usando um mapa de altitudes como terreno STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Iniciar um novo jogo, usando um cenário personalizado STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Criar um cenário de jogo personalizado STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Iniciar um jogo multijogador @@ -2248,8 +2248,8 @@ STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Jogando STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Escavadeira mágica (remove indústrias, objetos estáticos): {ORANGE}{STRING} STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Os túneis podem se cruzar: {ORANGE}{STRING} STR_CHEAT_NO_JETCRASH :{LTBLUE}Aeronaves a jato não irão se acidentar (frequentemente) em aeroportos pequenos: {ORANGE}{STRING} -STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Editar a altura máxima do mapa: {ORANGE}{NUM} -STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Editar a altura máxima das montanhas no mapa +STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Editar a altitude máxima do mapa: {ORANGE}{NUM} +STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Editar a altitude máxima das montanhas no mapa STR_CHEAT_CHANGE_DATE :{LTBLUE}Alterar data: {ORANGE}{DATE_SHORT} STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Alterar o ano atual STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir modificar os valores de produção: {ORANGE}{STRING} @@ -2701,7 +2701,7 @@ STR_CONTENT_TYPE_NEWGRF :NewGRF STR_CONTENT_TYPE_AI :IA STR_CONTENT_TYPE_AI_LIBRARY :Biblioteca de IA STR_CONTENT_TYPE_SCENARIO :Cenário -STR_CONTENT_TYPE_HEIGHTMAP :Mapa topográfico +STR_CONTENT_TYPE_HEIGHTMAP :Mapa de altitudes STR_CONTENT_TYPE_BASE_SOUNDS :Sons base STR_CONTENT_TYPE_BASE_MUSIC :Músicas base STR_CONTENT_TYPE_GAME_SCRIPT :Script de jogo @@ -3260,8 +3260,8 @@ STR_SAVELOAD_SAVE_CAPTION :{WHITE}Salvar J STR_SAVELOAD_LOAD_CAPTION :{WHITE}Abrir Jogo STR_SAVELOAD_SAVE_SCENARIO :{WHITE}Salvar Cenário STR_SAVELOAD_LOAD_SCENARIO :{WHITE}Abrir Cenário -STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Abrir mapa topográfico -STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Salvar mapa topográfico +STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Abrir mapa de altitudes +STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Salvar mapa de altitudes STR_SAVELOAD_HOME_BUTTON :{BLACK}Acessar o diretório padrão atual onde salvar/abrir jogos STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} livres STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Lista de unidades, diretórios e arquivos de jogos gravados @@ -3272,7 +3272,7 @@ STR_SAVELOAD_SAVE_BUTTON :{BLACK}Salvar STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Salvar o jogo atual usando o nome escolhido STR_SAVELOAD_LOAD_BUTTON :{BLACK}Abrir STR_SAVELOAD_LOAD_TOOLTIP :{BLACK}Carregar o jogo selecionado -STR_SAVELOAD_LOAD_HEIGHTMAP_TOOLTIP :{BLACK}Carregar o mapa topográfico selecionado +STR_SAVELOAD_LOAD_HEIGHTMAP_TOOLTIP :{BLACK}Carregar o mapa de altitudes selecionado STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detalhes do Jogo STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nenhuma informação disponível STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} @@ -3361,14 +3361,14 @@ STR_MAPGEN_BORDER_RANDOM :{BLACK}Aleatór STR_MAPGEN_BORDER_RANDOMIZE :{BLACK}Aleatório STR_MAPGEN_BORDER_MANUAL :{BLACK}Manual -STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotação do mapa topográfico: -STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nome do mapa topográfico: -STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}O nome do arquivo de imagem do mapa topográfico +STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotação do mapa de altitudes: +STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nome do mapa de altitudes: +STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}O nome do arquivo de imagem do mapa de altitudes STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Tamanho: -STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}O tamanho da imagem original do mapa topográfico. Para obter melhores resultados, cada lado deve corresponder a um comprimento de lado de mapa disponível no OpenTTD, tais como 256, 512, 1024, etc. +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}O tamanho da imagem original do mapa de altitudes. Para obter melhores resultados, cada lado deve corresponder a um comprimento de lado de mapa disponível no OpenTTD, tais como 256, 512, 1024, etc. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Altura desejada do pico +STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Altitude desejada para o pico STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Pico mais elevado STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Cobertura com neve (em %) STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Cobertura com deserto (em %) @@ -3379,12 +3379,12 @@ STR_SE_MAPGEN_CAPTION :{WHITE}Tipo de STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Terreno plano STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Gerar um terreno plano STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Terreno aleatório -STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Altura do terreno plano: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Altitude do terreno plano: STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Escolher a elevação do terreno acima do nível do mar STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Mover altura do terreno plano um nível abaixo STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Mover altura do terreno plano um nível acima -STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Modificar a altura do terreno plano +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Modificar a altitude do terreno plano # Map generation progress STR_GENERATION_WORLD :{WHITE}Gerando Mundo... @@ -3617,8 +3617,8 @@ STR_TOWN_POPULATION :{BLACK}Populaç STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Cidade) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}População: {ORANGE}{COMMA}{BLACK} Casas: {ORANGE}{COMMA} -STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} no último mês: {ORANGE}{COMMA}{BLACK} máx: {ORANGE}{COMMA} -STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}{CARGO_LIST} no último minuto: {ORANGE}{COMMA}{BLACK} máx: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} no último mês: {ORANGE}{COMMA}{BLACK} máx.: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}{CARGO_LIST} no último minuto: {ORANGE}{COMMA}{BLACK} máx.: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Requisitos para o crescimento da localidade: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} necessário STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} necessário no inverno @@ -3628,7 +3628,7 @@ STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_ STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Localidade cresce a cada {ORANGE}{UNITS_DAYS_OR_SECONDS} STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Localidade cresce a cada {ORANGE}{UNITS_DAYS_OR_SECONDS} (financiada) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Localidade {RED}não{BLACK} está crescendo -STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Limite de ruído na localidade: {ORANGE}{COMMA}{BLACK} máx: {ORANGE}{COMMA} +STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Limite de ruído na localidade: {ORANGE}{COMMA}{BLACK} máx.: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização da localidade. Ctrl+Clique para abrir uma nova visualização na localização da localidade STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Autoridade Local STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Mostrar informações sobre a autoridade local @@ -4179,7 +4179,7 @@ STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} ve STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Trens - arraste o veículo com o botão esquerdo do mouse para acrescentar/retirar do trem. Clique com o botão direito para informações. Ctrl+Clique para aplicar uma das funções à cadeia seguinte +STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Trens - arraste o veículo com o botão esquerdo do mouse para acrescentar/retirar do trem, clique com o botão direito para informações. Ctrl+Clique para aplicar uma das funções à cadeia seguinte STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Veículos - clique com o botão direito em um veículo para informações STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Embarcações - clique com o botão direito em uma embarcação para informações STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Aeronaves - clique com o botão direito em uma aeronave para informações @@ -4329,7 +4329,7 @@ STR_REPLACE_ROAD_VEHICLES :Veículos Rodov STR_REPLACE_TRAM_VEHICLES :Bondes STR_REPLACE_REMOVE_WAGON :{BLACK}Remoção de vagões ({STRING}): {ORANGE}{STRING} -STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Fazer a substituição automática mantendo o comprimento do trem, removendo vagões (começando pela frente), se a substituição da locomotiva aumentar o comprimento do trem +STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Fazer a substituição automática sem modificar o comprimento do trem, removendo vagões (começando pela frente), se a substituição da locomotiva aumentar o comprimento do trem STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl+Clique para também aplicar aos subgrupos # Vehicle view @@ -4342,10 +4342,10 @@ STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Centrali STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Centralizar visualização principal na localização da aeronave. Clique duplo para seguir a aeronave na visualização principal. Ctrl+Clique para abrir uma nova visualização na localização da aeronave ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar trem para o depósito. Ctrl+Clique para fazer apenas manutenção -STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar veículo para o depósito. Ctrl+Clique para fazer apenas manutenção -STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar embarcação para o depósito. Ctrl+Clique para fazer apenas manutenção -STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar aeronave para o hangar. Ctrl+Clique para fazer apenas manutenção +STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar o trem para o depósito. Ctrl+Clique para fazer apenas manutenção +STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar o veículo para o depósito. Ctrl+Clique para fazer apenas manutenção +STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar a embarcação para o depósito. Ctrl+Clique para fazer apenas manutenção +STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar a aeronave para o hangar. Ctrl+Clique para fazer apenas manutenção ###length VEHICLE_TYPES STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Comprar uma cópia do trem, incluindo todos os vagões. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado @@ -4365,10 +4365,10 @@ STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Adaptar STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Adaptar aeronave para transportar um tipo de carga diferente ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Mostrar ordens do trem. Ctrl+Clique para mostrar a tabela de horários do trem -STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Mostrar ordens do veículo. Ctrl+Clique para mostrar a tabela de horários do veículo -STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Mostrar ordens da embarcação. Ctrl+Clique para mostrar a tabela de horários da embarcação -STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Mostrar ordens da aeronave. Ctrl+Clique para mostrar a tabela de horários da aeronave +STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Mostrar as ordens do trem. Ctrl+Clique para mostrar a tabela de horários do trem +STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Mostrar as ordens do veículo. Ctrl+Clique para mostrar a tabela de horários do veículo +STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Mostrar as ordens da embarcação. Ctrl+Clique para mostrar a tabela de horários da embarcação +STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Mostrar as ordens da aeronave. Ctrl+Clique para mostrar a tabela de horários da aeronave ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Mostrar detalhes do trem @@ -4432,8 +4432,8 @@ STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Idade: { STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Velocidade máx.: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Velocidade máx.: {LTBLUE}{VELOCITY} {BLACK}Tipo de aeronave: {LTBLUE}{STRING} STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Velocidade máx.: {LTBLUE}{VELOCITY} {BLACK}Tipo de aeronave: {LTBLUE}{STRING} {BLACK}Autonomia: {LTBLUE}{COMMA} quadrados -STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Velocidade máx: {LTBLUE}{VELOCITY} -STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Velocidade máx: {LTBLUE}{VELOCITY} {BLACK}Força de Tração máx.: {LTBLUE}{FORCE} +STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Velocidade máx.: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Velocidade máx.: {LTBLUE}{VELOCITY} {BLACK}Força de Tração máx.: {LTBLUE}{FORCE} STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucro neste ano: {LTBLUE}{CURRENCY_LONG} (último ano: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Lucro neste ano: {LTBLUE}{CURRENCY_LONG} (último ano: {CURRENCY_LONG}) {BLACK}Desempenho mín.: {LTBLUE}{POWER_TO_WEIGHT} @@ -4565,7 +4565,7 @@ STR_ORDER_DROP_REFIT_AUTO :Carga fixa STR_ORDER_DROP_REFIT_AUTO_ANY :Carga disponível STR_ORDER_DROP_GO_ALWAYS_DEPOT :Ir sempre -STR_ORDER_DROP_SERVICE_DEPOT :Manutenção, se necessária +STR_ORDER_DROP_SERVICE_DEPOT :Manutenção, se precisar STR_ORDER_DROP_HALT_DEPOT :Parar STR_ORDER_DROP_UNBUNCH :Desagrupar @@ -4687,7 +4687,7 @@ STR_ORDER_STOP_LOCATION_NEAR_END :[início] STR_ORDER_STOP_LOCATION_MIDDLE :[meio] STR_ORDER_STOP_LOCATION_FAR_END :[final] -STR_ORDER_OUT_OF_RANGE :{RED} (Próximo destino está além da autonomia) +STR_ORDER_OUT_OF_RANGE :{RED} (Próximo destino está fora de alcance) STR_ORDER_CONDITIONAL_UNCONDITIONAL :Saltar para a ordem {COMMA} STR_ORDER_CONDITIONAL_NUM :Saltar para a ordem {COMMA} quando {STRING} {STRING} {COMMA} @@ -4783,7 +4783,7 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Diferenc STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Ativar/Desativar correspondência de maiúsculas/minúsculas quando comparar as mensagens de registro da IA com a sequência de caracteres de parada STR_AI_DEBUG_CONTINUE :{BLACK}Continuar STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Sair da pausa e continuar a IA -STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Mostrar saída de depuração desta IA. Ctrl+Clique para abrir em uma nova janela +STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Mostrar a saída de depuração desta IA. Ctrl+Clique para abrir em uma nova janela STR_AI_GAME_SCRIPT :{BLACK}Script de Jogo STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Verificar o registro do Script de Jogo. Ctrl+Clique para abrir em uma nova janela @@ -4829,7 +4829,7 @@ STR_AI_LIST_VERSION :{LTBLUE}Versão STR_AI_LIST_URL :{LTBLUE}URL: {ORANGE}{STRING} STR_AI_LIST_ACCEPT :{BLACK}Aceitar -STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Aceitar o script selecionado +STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Usar o script selecionado STR_AI_LIST_CANCEL :{BLACK}Cancelar STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Não mudar o script @@ -4838,13 +4838,13 @@ STR_SCREENSHOT_SCREENSHOT :{BLACK}Captura STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Captura de tela com ampliação máxima STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Captura de tela com ampliação padrão STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Captura de tela do mapa completo -STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captura de tela do mapa topográfico +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captura de tela do mapa de altitudes STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captura de tela do minimapa # Script Parameters -STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parâmetros -STR_AI_SETTINGS_CAPTION_AI :IA -STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de Jogo +STR_AI_SETTINGS_CAPTION :{WHITE}Parâmetros d{G o a} {STRING} +STR_AI_SETTINGS_CAPTION_AI :{G=f}IA +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :{G=m}Script de Jogo STR_AI_SETTINGS_CLOSE :{BLACK}Fechar STR_AI_SETTINGS_RESET :{BLACK}Restaurar STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} @@ -4857,7 +4857,7 @@ STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING} STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Retornar no histórico de navegação STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Avançar no histórico de navegação STR_TEXTFILE_WRAP_TEXT :{WHITE}Quebrar linhas do texto -STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Ajustar o comprimento das linhas para o texto preencher a janela e não precisar rolar o conteúdo +STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Ajustar o comprimento das linhas à largura da janela para facilitar a leitura do texto STR_TEXTFILE_VIEW_README :{BLACK}Leia-me STR_TEXTFILE_VIEW_README_TOOLTIP :Ver o arquivo Leia-me para este conteúdo STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Registro de modificações @@ -4937,7 +4937,7 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Somente STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Captura tela enorme STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}A captura de tela terá uma resolução de {COMMA}x{COMMA} pixels. Essa captura pode demorar. Deseja continuar? -STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Mapa topográfico '{STRING}' gravado com sucesso. O pico mais alto tem {NUM} +STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Mapa de altitudes '{STRING}' gravado com sucesso. O pico mais alto tem {NUM} STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Captura de tela '{STRING}' gravada com sucesso STR_ERROR_SCREENSHOT_FAILED :{WHITE}A captura de tela falhou! @@ -4952,7 +4952,7 @@ STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Dinheiro STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}É necessário terreno plano STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Terreno inclinado na direção errada STR_ERROR_CAN_T_DO_THIS :{WHITE}Não é possível fazer isto... -STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Edifício deve ser demolido primeiro +STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}O imóvel deve ser demolido primeiro STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Não é possível limpar esta área... STR_ERROR_SITE_UNSUITABLE :{WHITE}... local inadequado STR_ERROR_ALREADY_BUILT :{WHITE}... já construído @@ -5064,7 +5064,7 @@ STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Não é STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Não é possível remover estação de bondes de passageiros... STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Não é possível remover estação de bondes de carga... STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}É necessário remover o ponto de parada rodoviária primeiro -STR_ERROR_THERE_IS_NO_STATION :{WHITE}...não existe uma estação aqui +STR_ERROR_THERE_IS_NO_STATION :{WHITE}... não existe uma estação aqui STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}É necessário demolir a estação ferroviária primeiro STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}É necessário demolir a estação de ônibus primeiro @@ -5140,8 +5140,8 @@ STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Não é STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Não é possível remover ferrovia daqui... STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Não é possível remover sinais daqui... STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Não é possível converter os sinais daqui... -STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}...não existe uma ferrovia -STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}...não existem sinais +STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}... não existe uma ferrovia +STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}... não existem sinais STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Não é possível converter o tipo de trilho daqui... diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 03de11cf9a..8dfe187a17 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -4996,7 +4996,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}No pots STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}No es pot construir la seu de la companyia... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Impossible construir poblacions +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Impossible construir poblacions... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}No es pot canviar el nom de la població... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}No es pot construir una població aquí... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}No es pot expandir la població... diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 6439fbb633..c19d052d86 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -4995,7 +4995,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Kan ikke STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Kan ikke bygge selskabets hovedkvarter... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Kan ikke bygge nogen byer +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Kan ikke bygge nogen byer... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Kan ikke omdøbe byen... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Kan ikke bygge en by her... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Kan ikke udvide byen... diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 57822bf0ed..15636e70d3 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -2574,6 +2574,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Je spele STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Je servernaam is niet ingesteld. Je kunt de naam instellen bovenin het venster Netwerkspel STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}De revisie van deze client komt niet overeen met de revisie van de server STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Ongeldig wachtwoord +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Je staat niet op de lijst met toegestane clients STR_NETWORK_ERROR_SERVER_FULL :{WHITE}De server is vol STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Je bent verbannen van deze server STR_NETWORK_ERROR_KICKED :{WHITE}Je bent van de server geschopt @@ -2601,6 +2602,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :ongeldig of onv STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :foute revisie STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :naam al in gebruik STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :fout spelwachtwoord +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :niet op toegestane lijst STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :verkeerd bedrijfsnummer in verstuurd commando STR_NETWORK_ERROR_CLIENT_KICKED :eruit geschopt door server STR_NETWORK_ERROR_CLIENT_CHEATER :probeerde vals te spelen @@ -4993,7 +4995,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Kan het STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Kan bedrijfshoofdkantoor niet bouwen... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Kan geen steden bouwen +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Kan geen steden bouwen... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Kan stad niet hernoemen... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Kan hier geen nieuwe stad bouwen... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Kan dorp niet uitbreiden... diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 13193a82a0..745aded6e7 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -4995,7 +4995,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}不能 STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}不能设置公司总部 # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}不能建设任何城镇 +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}无法建设城镇…… STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}不能重命名城镇…… STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}不能在这里建设城镇…… STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}无法扩展城镇... diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 7a9df710f9..9502d5a9ff 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -517,13 +517,13 @@ STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Пауз STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Прискорити гру STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Опції STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Зберегти гру, покинути гру, вихід -STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Показати карту +STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Показує мапу, додаткове вікно, легенду вантажопотоку або список позначок STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Показати міста -STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Показати субсидії +STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Показує субсидії STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Показати список станцій компанії STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Покаже фінансову інформацію про компанію STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Покаже загальну інформацію про компанію -STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Показати історію +STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Показує історію STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Покаже список завдань STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Показати графіки компаній і тарифи доставки вантажів STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Покаже таблицю компаній @@ -1691,7 +1691,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :стандар STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Тип ландшафту: {STRING} -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Тільки TerraGenesis) Горбистість ландшафту +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Оберіть висоту пагорбів і гір ландшафту STR_CONFIG_SETTING_INDUSTRY_DENSITY :Густота підприємств: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Встановіть кількість підприємств, що будуть створені і кількість підприємств, що існуватимуть впродовж гри @@ -2925,7 +2925,7 @@ STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Будівни STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Будувати колію. Ctrl переключає побудову/знесення для будівництва колії. Утримуйте Shift для показу витрат на будівництво STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Будувати колію, використовуючи авторежим. Ctrl переключає побудову/знесення для будівництва колії. Утримуйте Shift для показу витрат на будівництво -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Будувати залізничне депо (для купівлі та обслуговування поїздів). Утримуйте Shift для показу витрат на будівництво +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Будувати залізничне депо (для купівлі та обслуговування потягів). Утримуйте Shift для показу витрат на будівництво STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Перетворити колію на точку маршруту. Ctrl дозволяє об'єднання точок маршруту. Утримуйте Shift для показу очікуваних витрат STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Будувати станцію. Ctrl дозволяє об'єднання станцій. Утримуйте Shift для показу витрат на будівництво STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Будувати залізничні сигнали. Ctrl переключає семафори/світлові сигнали{}Протяжка мишою будує сигнали вздовж прямої ділянки рейок. Ctrl будує сигнали до наступної розв'язки чи сигналу{}Ctrl+клац мишою вмикає показ вікна вибору сигналів. Утримуйте Shift для показу витрат на будівництво @@ -3016,7 +3016,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Буду STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Будувати трамвайне депо (для будівництва та обслуговування трамваїв). Утримуйте Shift для показу витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Будувати автобусну зупинку. Ctrl+клац щоб обрати іншу зупинку для приєднання. Утримуйте Shift для показу тільки витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Будувати пасажирську трамвайну станцію. Ctrl дозволяє об'єднувати станції. Утримуйте Shift для показу витрат на будівництво -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Будувати вантажний майданчик. Ctrl дозволяє об'єднувати станції. Утримуйте Shift для показу витрат на будівництво +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Будувати вантажну станцію. Ctrl+клац щоб обрати іншу станцію для при'єднання. Утримуйте Shift для показу витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Побудувати вантажну трамвайну станцію. Ctrl+клац щоб обрати іншу зупинку для приєднання. Утримуйте Shift для показу тільки витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Вкл./відкл. односторонні дороги STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Будувати дорожній міст. Утримуйте Shift для показу тільки витрат на придбання @@ -3056,8 +3056,8 @@ STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Буду STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Будувати док. Ctrl дозволяє об'єднувати станції. Утримуйте Shift для показу витрат на будівництво STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Розмістити бакен, який можна використовувати як точку маршруту. Утримуйте Shift для показу витрат на розміщення STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Побудувати акведук. Утримуйте Shift для показу витрат на будівництво -STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Позначити, де буде вода.{}Робити канал, поки не натиснений Ctrl на рівні моря, - тоді будуть затоплені околиці -STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Прокласти річки. Ctrl для вибору діагональних ділянок +STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Будувати канал. Ctrl+клац на рівні моря для затоплення морською водою +STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Прокласти річки. Ctrl+клац для вибору діагональних ділянок # Ship depot construction window STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Орієнтація елінга @@ -3858,7 +3858,7 @@ STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}Пер STR_SUBSIDIES_NONE :{ORANGE}- немає - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Призначені субсидії: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}Перевезення {STRING.r} з {STRING} до {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) -STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Натисніть на субсидії, щоб показати підприємство/місто у центрі екрану. Ctrl+клац мишою відкриває нове вікно з видом на підприємство/місто +STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Натисніть на субсидії, щоб показати підприємство/місто у центрі екрану. Ctrl+клац мишею відкриває нове вікно з видом на підприємство/місто STR_SUBSIDIES_OFFERED_EXPIRY_DATE :до {DATE_SHORT} STR_SUBSIDIES_OFFERED_EXPIRY_TIME :впродовж {UNITS_MONTHS_OR_MINUTES} STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :до {DATE_SHORT} @@ -4359,7 +4359,7 @@ STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Клон ###length VEHICLE_TYPES STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Купити копію поїзда, включно з усіма автомобілями. Натисніть на цю кнопку, а потім на поїзд в депо або ззовні. Ctrl+клац мишею дозволить поділитися спільними завданнями. Shift+клац мишею покаже орієнтовні витрати на придбання STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Купити копію авто. Натисніть на цю кнопку і потім на авто в депо або ззовні. Утримуйте Ctrl для спільного завдання. Утримуйте Shift для показу витрат на придбання -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Купити копію корабля. Натисніть на цю кнопку, і потім на корабель в депо або ззовні. Утримуйте Ctrl для спільного завдання. Утримуйте Shift для показу витрат на придбання +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Купити копію корабля. Натисніть на цю кнопку, і потім на корабель в елінгу або ззовні. Ctrl+клац для копіювання спільного завдання. Утримуйте Shift для показу витрат на придбання STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Купити копію літака. Натисніть на цю кнопку і потім на літак в ангарі або ззовні. Утримуйте Ctrl для спільного завдання. Утримуйте Shift для показу витрат на придбання ###length VEHICLE_TYPES @@ -4480,7 +4480,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Пока ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити поїзд у депо STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити авто в депо. Ctrl+клац тільки для техогляду -STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити корабель в депо +STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити корабель в елінг. Ctrl+клац тільки для техогляду STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити літак в ангар. Ctrl+клац тільки для техогляду ###length VEHICLE_TYPES diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 3dd328d84b..e2f8d89799 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -4995,7 +4995,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Không m STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Không thể xây trụ sở công ty... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Không thể xây thêm đô thị +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Không thể xây thêm đô thị... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Không thể đổi tên đô thị... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Không thấy thị trấn ở đây... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Không thể mở rộng thành phố... From f599108c164735ec1e43a564aadf1c8a7f53ed9e Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 23 Mar 2024 09:35:28 +0100 Subject: [PATCH 167/695] Codechange: move 'months_empty' to CompanyProperties --- src/company_base.h | 1 + src/network/network_server.cpp | 18 +++++++++--------- src/network/network_type.h | 1 - 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/company_base.h b/src/company_base.h index ea4565a808..356a5fe058 100644 --- a/src/company_base.h +++ b/src/company_base.h @@ -91,6 +91,7 @@ struct CompanyProperties { TimerGameEconomy::Year inaugurated_year; ///< Economy year of starting the company. + uint8_t months_empty = 0; ///< NOSAVE: Number of months this company has not had a client in multiplayer. uint8_t months_of_bankruptcy; ///< Number of months that the company is unable to pay its debts CompanyMask bankrupt_asked; ///< which companies were asked about buying it? int16_t bankrupt_timeout; ///< If bigger than \c 0, amount of time to wait for an answer on an offer to buy this company. diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 39bd2aa540..f63c79bd65 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -961,7 +961,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_IDENTIFY(Packet Debug(desync, 1, "client: {:08x}; {:02x}; {:02x}; {:02x}", TimerGameEconomy::date, TimerGameEconomy::date_fract, (int)ci->client_playas, (int)ci->index); /* Make sure companies to which people try to join are not autocleaned */ - if (Company::IsValidID(playas)) _network_company_states[playas].months_empty = 0; + Company *c = Company::GetIfValid(playas); + if (c != nullptr) c->months_empty = 0; return this->SendNewGRFCheck(); } @@ -1643,37 +1644,37 @@ static void NetworkAutoCleanCompanies() } /* Go through all the companies */ - for (const Company *c : Company::Iterate()) { + for (Company *c : Company::Iterate()) { /* Skip the non-active once */ if (c->is_ai) continue; if (!HasBit(has_clients, c->index)) { /* The company is empty for one month more */ - _network_company_states[c->index].months_empty++; + if (c->months_empty != std::numeric_limitsmonths_empty)>::max()) c->months_empty++; /* Is the company empty for autoclean_unprotected-months, and is there no protection? */ - if (_settings_client.network.autoclean_unprotected != 0 && _network_company_states[c->index].months_empty > _settings_client.network.autoclean_unprotected && _network_company_states[c->index].password.empty()) { + if (_settings_client.network.autoclean_unprotected != 0 && c->months_empty > _settings_client.network.autoclean_unprotected && _network_company_states[c->index].password.empty()) { /* Shut the company down */ Command::Post(CCA_DELETE, c->index, CRR_AUTOCLEAN, INVALID_CLIENT_ID); IConsolePrint(CC_INFO, "Auto-cleaned company #{} with no password.", c->index + 1); } /* Is the company empty for autoclean_protected-months, and there is a protection? */ - if (_settings_client.network.autoclean_protected != 0 && _network_company_states[c->index].months_empty > _settings_client.network.autoclean_protected && !_network_company_states[c->index].password.empty()) { + if (_settings_client.network.autoclean_protected != 0 && c->months_empty > _settings_client.network.autoclean_protected && !_network_company_states[c->index].password.empty()) { /* Unprotect the company */ _network_company_states[c->index].password.clear(); IConsolePrint(CC_INFO, "Auto-removed protection from company #{}.", c->index + 1); - _network_company_states[c->index].months_empty = 0; + c->months_empty = 0; NetworkServerUpdateCompanyPassworded(c->index, false); } /* Is the company empty for autoclean_novehicles-months, and has no vehicles? */ - if (_settings_client.network.autoclean_novehicles != 0 && _network_company_states[c->index].months_empty > _settings_client.network.autoclean_novehicles && !HasBit(has_vehicles, c->index)) { + if (_settings_client.network.autoclean_novehicles != 0 && c->months_empty > _settings_client.network.autoclean_novehicles && !HasBit(has_vehicles, c->index)) { /* Shut the company down */ Command::Post(CCA_DELETE, c->index, CRR_AUTOCLEAN, INVALID_CLIENT_ID); IConsolePrint(CC_INFO, "Auto-cleaned company #{} with no vehicles.", c->index + 1); } } else { /* It is not empty, reset the date */ - _network_company_states[c->index].months_empty = 0; + c->months_empty = 0; } } } @@ -2266,7 +2267,6 @@ void NetworkServerNewCompany(const Company *c, NetworkClientInfo *ci) if (!_network_server) return; - _network_company_states[c->index].months_empty = 0; _network_company_states[c->index].password.clear(); NetworkServerUpdateCompanyPassworded(c->index, false); diff --git a/src/network/network_type.h b/src/network/network_type.h index a3c0f47e74..4f8617ff37 100644 --- a/src/network/network_type.h +++ b/src/network/network_type.h @@ -73,7 +73,6 @@ struct NetworkCompanyStats { /** Some state information of a company, especially for servers */ struct NetworkCompanyState { std::string password; ///< The password for the company - uint16_t months_empty; ///< How many months the company is empty }; struct NetworkClientInfo; From ea74ca0a7606d12b5ccd7cb97798a85aa87eb87d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 23 Mar 2024 12:03:59 +0000 Subject: [PATCH 168/695] Fix #12347: Crash attempting to find catchment tiles of a station with no catchment area. (#12348) --- src/script/api/script_tilelist.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/script/api/script_tilelist.cpp b/src/script/api/script_tilelist.cpp index 7b3d101490..db5aafddaf 100644 --- a/src/script/api/script_tilelist.cpp +++ b/src/script/api/script_tilelist.cpp @@ -152,7 +152,10 @@ ScriptTileList_StationCoverage::ScriptTileList_StationCoverage(StationID station { if (!ScriptStation::IsValidStation(station_id)) return; - BitmapTileIterator it(::Station::Get(station_id)->catchment_tiles); + const BitmapTileArea &ta = ::Station::Get(station_id)->catchment_tiles; + if (ta.tile == INVALID_TILE) return; + + BitmapTileIterator it(ta); for (TileIndex tile = it; tile != INVALID_TILE; tile = ++it) { this->AddTile(tile); } From 2732b3d6c6581da690d094149d76dda8213f533d Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Sat, 23 Mar 2024 08:23:13 -0400 Subject: [PATCH 169/695] Change: Show unbunching action in timetable window (#12351) --- src/order_gui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 44fbdea6ac..84d7f3e443 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -337,8 +337,8 @@ void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int SetDParam(6, CargoSpec::Get(order->GetRefitCargo())->name); } - /* Do not show unbunching in the depot in the timetable window. */ - if (!timetable && (order->GetDepotActionType() & ODATFB_UNBUNCH)) { + /* Show unbunching depot in both order and timetable windows. */ + if (order->GetDepotActionType() & ODATFB_UNBUNCH) { SetDParam(8, STR_ORDER_WAIT_TO_UNBUNCH); } From 515303b8becc566c33049af87dc25d547096d12a Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 23 Mar 2024 11:27:58 +0000 Subject: [PATCH 170/695] Fix #12092: Incorrect x-axis in cargo payment graph window --- src/graph_gui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index a9fc671d90..743bf8bda8 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -173,8 +173,8 @@ protected: static const int GRAPH_ZERO_LINE_COLOUR = GREY_SCALE(8); static const int GRAPH_YEAR_LINE_COLOUR = GREY_SCALE(5); static const int GRAPH_NUM_MONTHS = 24; ///< Number of months displayed in the graph. - static const int PAYMENT_GRAPH_X_STEP_DAYS = 20; ///< X-axis step label for cargo payment rates "Days in transit". - static const int PAYMENT_GRAPH_X_STEP_SECONDS = 10; ///< X-axis step label for cargo payment rates "Seconds in transit". + static const int PAYMENT_GRAPH_X_STEP_DAYS = 10; ///< X-axis step label for cargo payment rates "Days in transit". + static const int PAYMENT_GRAPH_X_STEP_SECONDS = 20; ///< X-axis step label for cargo payment rates "Seconds in transit". static const int ECONOMY_QUARTER_MINUTES = 3; ///< Minutes per economic quarter. static const TextColour GRAPH_AXIS_LABEL_COLOUR = TC_BLACK; ///< colour of the graph axis label. From 0f25eaa27165ebc293de38c8e4b6dd67b7a53485 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Fri, 22 Mar 2024 19:50:27 +0100 Subject: [PATCH 171/695] Fix: crash to desktop when attempting to join a company while not joined (yet) --- src/console_cmds.cpp | 8 +++++++- src/network/network.cpp | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 6b88247dfb..ad940cd425 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -921,13 +921,19 @@ DEF_CONSOLE_CMD(ConJoinCompany) CompanyID company_id = (CompanyID)(atoi(argv[1]) <= MAX_COMPANIES ? atoi(argv[1]) - 1 : atoi(argv[1])); + const NetworkClientInfo *info = NetworkClientInfo::GetByClientID(_network_own_client_id); + if (info == nullptr) { + IConsolePrint(CC_ERROR, "You have not joined the game yet!"); + return true; + } + /* Check we have a valid company id! */ if (!Company::IsValidID(company_id) && company_id != COMPANY_SPECTATOR) { IConsolePrint(CC_ERROR, "Company does not exist. Company-id must be between 1 and {}.", MAX_COMPANIES); return true; } - if (NetworkClientInfo::GetByClientID(_network_own_client_id)->client_playas == company_id) { + if (info->client_playas == company_id) { IConsolePrint(CC_ERROR, "You are already there!"); return true; } diff --git a/src/network/network.cpp b/src/network/network.cpp index 717cf077dc..2b0a79ba16 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -798,6 +798,7 @@ public: Debug(net, 9, "Client::OnConnect(): connection_string={}", this->connection_string); _networking = true; + _network_own_client_id = ClientID{}; new ClientNetworkGameSocketHandler(s, this->connection_string); IConsoleCmdExec("exec scripts/on_client.scr 0"); NetworkClient_Connected(); From 603154899a25ad2dbafc0818e8afb6c1f6f4fde4 Mon Sep 17 00:00:00 2001 From: frosch Date: Sat, 23 Mar 2024 20:48:26 +0100 Subject: [PATCH 172/695] Add: [SDL2] Driver parameter 'no_mouse_capture' to ease interactive debugging (#12336) --- src/video/sdl2_v.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index 4bbe30de66..585571385d 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -534,6 +534,15 @@ const char *VideoDriver_SDL_Base::Start(const StringList ¶m) const char *error = this->Initialize(); if (error != nullptr) return error; +#ifdef SDL_HINT_MOUSE_AUTO_CAPTURE + if (GetDriverParamBool(param, "no_mouse_capture")) { + /* By default SDL captures the mouse, while a button is pressed. + * This is annoying during debugging, when OpenTTD is suspended while the button was pressed. + */ + if (!SDL_SetHint(SDL_HINT_MOUSE_AUTO_CAPTURE, "0")) return SDL_GetError(); + } +#endif + this->startup_display = FindStartupDisplay(GetDriverParamInt(param, "display", -1)); if (!CreateMainSurface(_cur_resolution.width, _cur_resolution.height, false)) { From 704e871a0eec119d27df1a5a21abb6f9da1cb8da Mon Sep 17 00:00:00 2001 From: glx22 Date: Sat, 23 Mar 2024 17:41:13 +0100 Subject: [PATCH 173/695] Revert bbdbf9a: ScriptTimeMode was not the best solution for economy/calendar support --- src/script/api/CMakeLists.txt | 2 -- src/script/api/ai_changelog.hpp | 1 - src/script/api/game_changelog.hpp | 1 - src/script/api/script_date.cpp | 31 ++++---------------- src/script/api/script_object.cpp | 10 ------- src/script/api/script_object.hpp | 14 ---------- src/script/api/script_timemode.cpp | 29 ------------------- src/script/api/script_timemode.hpp | 45 ------------------------------ src/script/script_storage.hpp | 2 -- 9 files changed, 5 insertions(+), 130 deletions(-) delete mode 100644 src/script/api/script_timemode.cpp delete mode 100644 src/script/api/script_timemode.hpp diff --git a/src/script/api/CMakeLists.txt b/src/script/api/CMakeLists.txt index 6a8cb66d9c..f41efd068c 100644 --- a/src/script/api/CMakeLists.txt +++ b/src/script/api/CMakeLists.txt @@ -151,7 +151,6 @@ add_files( script_basestation.hpp script_bridge.hpp script_bridgelist.hpp - script_timemode.hpp script_cargo.hpp script_cargolist.hpp script_cargomonitor.hpp @@ -226,7 +225,6 @@ add_files( script_basestation.cpp script_bridge.cpp script_bridgelist.cpp - script_timemode.cpp script_cargo.cpp script_cargolist.cpp script_cargomonitor.cpp diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index e6b524a857..39037efd06 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -20,7 +20,6 @@ * \b 14.0 * * API additions: - * \li AITimeMode * \li AITown::ROAD_LAYOUT_RANDOM * \li AIVehicle::IsPrimaryVehicle * \li AITileList_StationCoverage diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index 8ebf05310c..8963190e26 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -24,7 +24,6 @@ * \li GSAsyncMode * \li GSCompanyMode::IsValid * \li GSCompanyMode::IsDeity - * \li GSTimeMode * \li GSTown::ROAD_LAYOUT_RANDOM * \li GSVehicle::IsPrimaryVehicle * \li GSOrder::SetOrderJumpTo diff --git a/src/script/api/script_date.cpp b/src/script/api/script_date.cpp index 076f196cd4..4d3a3866cf 100644 --- a/src/script/api/script_date.cpp +++ b/src/script/api/script_date.cpp @@ -9,9 +9,7 @@ #include "../../stdafx.h" #include "script_date.hpp" -#include "script_timemode.hpp" #include "../../timer/timer_game_calendar.h" -#include "../../timer/timer_game_economy.h" #include @@ -24,21 +22,14 @@ /* static */ ScriptDate::Date ScriptDate::GetCurrentDate() { - if (ScriptTimeMode::IsCalendarMode()) return (ScriptDate::Date)TimerGameCalendar::date.base(); - - return (ScriptDate::Date)TimerGameEconomy::date.base(); + return (ScriptDate::Date)TimerGameCalendar::date.base(); } /* static */ SQInteger ScriptDate::GetYear(ScriptDate::Date date) { if (date < 0) return DATE_INVALID; - if (ScriptTimeMode::IsCalendarMode()) { - ::TimerGameCalendar::YearMonthDay ymd = ::TimerGameCalendar::ConvertDateToYMD(date); - return ymd.year.base(); - } - - ::TimerGameEconomy::YearMonthDay ymd = ::TimerGameEconomy::ConvertDateToYMD(date); + ::TimerGameCalendar::YearMonthDay ymd = ::TimerGameCalendar::ConvertDateToYMD(date); return ymd.year.base(); } @@ -46,12 +37,7 @@ { if (date < 0) return DATE_INVALID; - if (ScriptTimeMode::IsCalendarMode()) { - ::TimerGameCalendar::YearMonthDay ymd = ::TimerGameCalendar::ConvertDateToYMD(date); - return ymd.month + 1; - } - - ::TimerGameEconomy::YearMonthDay ymd = ::TimerGameEconomy::ConvertDateToYMD(date); + ::TimerGameCalendar::YearMonthDay ymd = ::TimerGameCalendar::ConvertDateToYMD(date); return ymd.month + 1; } @@ -59,12 +45,7 @@ { if (date < 0) return DATE_INVALID; - if (ScriptTimeMode::IsCalendarMode()) { - ::TimerGameCalendar::YearMonthDay ymd = ::TimerGameCalendar::ConvertDateToYMD(date); - return ymd.day; - } - - ::TimerGameEconomy::YearMonthDay ymd = ::TimerGameEconomy::ConvertDateToYMD(date); + ::TimerGameCalendar::YearMonthDay ymd = ::TimerGameCalendar::ConvertDateToYMD(date); return ymd.day; } @@ -74,9 +55,7 @@ if (day_of_month < 1 || day_of_month > 31) return DATE_INVALID; if (year < 0 || year > CalendarTime::MAX_YEAR) return DATE_INVALID; - if (ScriptTimeMode::IsCalendarMode()) return (ScriptDate::Date)::TimerGameCalendar::ConvertYMDToDate(year, month - 1, day_of_month).base(); - - return (ScriptDate::Date)::TimerGameEconomy::ConvertYMDToDate(year, month - 1, day_of_month).base(); + return (ScriptDate::Date)::TimerGameCalendar::ConvertYMDToDate(year, month - 1, day_of_month).base(); } /* static */ SQInteger ScriptDate::GetSystemTime() diff --git a/src/script/api/script_object.cpp b/src/script/api/script_object.cpp index 9b0f6bd259..8e3a684240 100644 --- a/src/script/api/script_object.cpp +++ b/src/script/api/script_object.cpp @@ -200,16 +200,6 @@ ScriptObject::ActiveInstance::~ActiveInstance() return GetStorage()->allow_do_command; } -/* static */ void ScriptObject::SetTimeMode(bool calendar) -{ - GetStorage()->time_mode = calendar; -} - -/* static */ bool ScriptObject::IsCalendarTimeMode() -{ - return GetStorage()->time_mode; -} - /* static */ void ScriptObject::SetCompany(CompanyID company) { if (GetStorage()->root_company == INVALID_OWNER) GetStorage()->root_company = company; diff --git a/src/script/api/script_object.hpp b/src/script/api/script_object.hpp index c9bf1a4fb4..28cac81d59 100644 --- a/src/script/api/script_object.hpp +++ b/src/script/api/script_object.hpp @@ -244,20 +244,6 @@ protected: */ static bool GetAllowDoCommand(); - /** - * Set if the script is running in calendar time or economy time mode. - * Calendar time is used by OpenTTD for technology like vehicle introductions and expiration, and variable snowline. It can be sped up or slowed down by the player. - * Economy time always runs at the same pace and handles things like cargo production, everything related to money, etc. - * @param Calendar Should we use calendar time mode? (Set to false for economy time mode.) - */ - static void SetTimeMode(bool calendar); - - /** - * Check if the script is operating in calendar time mode, or in economy time mode. See SetTimeMode() for more information. - * @return True if we are in calendar time mode, false if we are in economy time mode. - */ - static bool IsCalendarTimeMode(); - /** * Set the current company to execute commands for or request * information about. diff --git a/src/script/api/script_timemode.cpp b/src/script/api/script_timemode.cpp deleted file mode 100644 index f927368f8a..0000000000 --- a/src/script/api/script_timemode.cpp +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 script_timemode.cpp Implementation of ScriptTimeMode. */ - -#include "../../stdafx.h" -#include "script_timemode.hpp" - -#include "../../safeguards.h" - -ScriptTimeMode::ScriptTimeMode(bool calendar) -{ - this->last_time_mode = ScriptObject::IsCalendarTimeMode(); - ScriptObject::SetTimeMode(calendar); -} - -ScriptTimeMode::~ScriptTimeMode() -{ - ScriptObject::SetTimeMode(this->last_time_mode); -} - -/* static */ bool ScriptTimeMode::IsCalendarMode() -{ - return ScriptObject::IsCalendarTimeMode(); -} diff --git a/src/script/api/script_timemode.hpp b/src/script/api/script_timemode.hpp deleted file mode 100644 index eb03b0b3f9..0000000000 --- a/src/script/api/script_timemode.hpp +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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 script_timemode.hpp Switch the time mode. */ - -#ifndef SCRIPT_TIMEMODE_HPP -#define SCRIPT_TIMEMODE_HPP - -#include "script_object.hpp" - -/** - * Class to switch the current time. - * If you create an instance of this class, the mode will be switched to either calendar time or economy time mode. - * @note Destroying this object will restore the previous time mode. - * @api ai game - */ -class ScriptTimeMode : public ScriptObject { -private: - bool last_time_mode; ///< The last time mode we were using. -public: - /** - * Creating an instance of this class switches the time mode used for queries and commands. - * Calendar time is used by OpenTTD for technology like vehicle introductions and expiration, and variable snowline. It can be sped up or slowed down by the player. - * Economy time always runs at the same pace and handles things like cargo production, everything related to money, etc. - * @param Calendar Should we use calendar time mode? (Set to false for economy time mode.) - */ - ScriptTimeMode(bool calendar); - - /** - * Destroying this instance resets the time mode to the mode it was in when the instance was created. - */ - ~ScriptTimeMode(); - - /** - * Check if the script is operating in calendar time mode, or in economy time mode. See ScriptTimeMode() for more information. - * @return True if we are in calendar time mode, false if we are in economy time mode. - */ - static bool IsCalendarMode(); -}; - -#endif /* SCRIPT_TIMEMODE_HPP */ diff --git a/src/script/script_storage.hpp b/src/script/script_storage.hpp index a2d7d91dc2..6f856908d5 100644 --- a/src/script/script_storage.hpp +++ b/src/script/script_storage.hpp @@ -41,7 +41,6 @@ private: class ScriptObject *mode_instance; ///< The instance belonging to the current build mode. ScriptAsyncModeProc *async_mode; ///< The current command async mode we are in. class ScriptObject *async_mode_instance; ///< The instance belonging to the current command async mode. - bool time_mode; ///< True if we in calendar time mode, or false (default) if we are in economy time mode. CompanyID root_company; ///< The root company, the company that the script really belongs to. CompanyID company; ///< The current company. @@ -71,7 +70,6 @@ public: mode_instance (nullptr), async_mode (nullptr), async_mode_instance (nullptr), - time_mode (false), root_company (INVALID_OWNER), company (INVALID_OWNER), delay (1), From 02c00f3e3ebebb17f00f979a41e6d55d69d11b0d Mon Sep 17 00:00:00 2001 From: glx22 Date: Sat, 23 Mar 2024 18:06:22 +0100 Subject: [PATCH 174/695] Change: [Script] Use economy time for ScriptDate --- src/script/api/script_date.cpp | 14 +++++++------- src/script/api/script_date.hpp | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/script/api/script_date.cpp b/src/script/api/script_date.cpp index 4d3a3866cf..cffa57fea9 100644 --- a/src/script/api/script_date.cpp +++ b/src/script/api/script_date.cpp @@ -9,7 +9,7 @@ #include "../../stdafx.h" #include "script_date.hpp" -#include "../../timer/timer_game_calendar.h" +#include "../../timer/timer_game_economy.h" #include @@ -22,14 +22,14 @@ /* static */ ScriptDate::Date ScriptDate::GetCurrentDate() { - return (ScriptDate::Date)TimerGameCalendar::date.base(); + return (ScriptDate::Date)TimerGameEconomy::date.base(); } /* static */ SQInteger ScriptDate::GetYear(ScriptDate::Date date) { if (date < 0) return DATE_INVALID; - ::TimerGameCalendar::YearMonthDay ymd = ::TimerGameCalendar::ConvertDateToYMD(date); + ::TimerGameEconomy::YearMonthDay ymd = ::TimerGameEconomy::ConvertDateToYMD(date); return ymd.year.base(); } @@ -37,7 +37,7 @@ { if (date < 0) return DATE_INVALID; - ::TimerGameCalendar::YearMonthDay ymd = ::TimerGameCalendar::ConvertDateToYMD(date); + ::TimerGameEconomy::YearMonthDay ymd = ::TimerGameEconomy::ConvertDateToYMD(date); return ymd.month + 1; } @@ -45,7 +45,7 @@ { if (date < 0) return DATE_INVALID; - ::TimerGameCalendar::YearMonthDay ymd = ::TimerGameCalendar::ConvertDateToYMD(date); + ::TimerGameEconomy::YearMonthDay ymd = ::TimerGameEconomy::ConvertDateToYMD(date); return ymd.day; } @@ -53,9 +53,9 @@ { if (month < 1 || month > 12) return DATE_INVALID; if (day_of_month < 1 || day_of_month > 31) return DATE_INVALID; - if (year < 0 || year > CalendarTime::MAX_YEAR) return DATE_INVALID; + if (year < 0 || year > EconomyTime::MAX_YEAR) return DATE_INVALID; - return (ScriptDate::Date)::TimerGameCalendar::ConvertYMDToDate(year, month - 1, day_of_month).base(); + return (ScriptDate::Date)::TimerGameEconomy::ConvertYMDToDate(year, month - 1, day_of_month).base(); } /* static */ SQInteger ScriptDate::GetSystemTime() diff --git a/src/script/api/script_date.hpp b/src/script/api/script_date.hpp index 43d197226f..5c7ddec042 100644 --- a/src/script/api/script_date.hpp +++ b/src/script/api/script_date.hpp @@ -11,7 +11,7 @@ #define SCRIPT_DATE_HPP #include "script_object.hpp" -#include "../../timer/timer_game_calendar.h" +#include "../../timer/timer_game_economy.h" /** * Class that handles all date related (calculation) functions. @@ -31,7 +31,7 @@ public: * compose valid date values for a known year, month and day. */ enum Date { - DATE_INVALID = ::CalendarTime::INVALID_DATE.base(), ///< A value representing an invalid date. + DATE_INVALID = ::EconomyTime::INVALID_DATE.base(), ///< A value representing an invalid date. }; /** From ff35288ddfa3b746412569aed7dfc2eedb1b2094 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 23 Mar 2024 20:18:31 +0000 Subject: [PATCH 175/695] Fix: Don't let CT_INVALID map to valid cargo type. (#12364) --- src/cargotype.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cargotype.cpp b/src/cargotype.cpp index bca7e368b5..98d53a9d1c 100644 --- a/src/cargotype.cpp +++ b/src/cargotype.cpp @@ -95,7 +95,7 @@ void BuildCargoLabelMap() CargoSpec::label_map.clear(); for (const CargoSpec &cs : CargoSpec::array) { /* During initialization, CargoSpec can be marked valid before the label has been set. */ - if (!cs.IsValid() || cs.label == CargoLabel{0}) continue; + if (!cs.IsValid() || cs.label == CargoLabel{0} || cs.label == CT_INVALID) continue; /* Label already exists, don't addd again. */ if (CargoSpec::label_map.count(cs.label) != 0) continue; From 668186ca5b065d0ef10bf929bee0c84007e09940 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 23 Mar 2024 21:55:50 +0000 Subject: [PATCH 176/695] Codechange: Remove macros involved with NewGRFClass. (#12363) Use direct class instantiation instead. --- src/newgrf_airport.cpp | 11 ++++---- src/newgrf_airport.h | 2 +- src/newgrf_class.h | 2 +- src/newgrf_class_func.h | 62 ++++++++++++++++------------------------- src/newgrf_object.cpp | 11 ++++---- src/newgrf_object.h | 4 +-- src/newgrf_roadstop.cpp | 11 ++++---- src/newgrf_roadstop.h | 2 +- src/newgrf_station.cpp | 11 ++++---- src/newgrf_station.h | 4 +-- 10 files changed, 55 insertions(+), 65 deletions(-) diff --git a/src/newgrf_airport.cpp b/src/newgrf_airport.cpp index 2c0012141d..bdac26abaf 100644 --- a/src/newgrf_airport.cpp +++ b/src/newgrf_airport.cpp @@ -23,8 +23,8 @@ * This includes initialising the defaults classes with an empty * entry, for standard airports. */ -template -/* static */ void NewGRFClass::InsertDefaults() +template <> +/* static */ void AirportClass::InsertDefaults() { AirportClass::Get(AirportClass::Allocate('SMAL'))->name = STR_AIRPORT_CLASS_SMALL; AirportClass::Get(AirportClass::Allocate('LARG'))->name = STR_AIRPORT_CLASS_LARGE; @@ -32,13 +32,14 @@ template AirportClass::Get(AirportClass::Allocate('HELI'))->name = STR_AIRPORT_CLASS_HELIPORTS; } -template -bool NewGRFClass::IsUIAvailable(uint) const +template <> +bool AirportClass::IsUIAvailable(uint) const { return true; } -INSTANTIATE_NEWGRF_CLASS_METHODS(AirportClass, AirportSpec, AirportClassID, APC_MAX) +/* Instantiate AirportClass. */ +template class NewGRFClass; AirportOverrideManager _airport_mngr(NEW_AIRPORT_OFFSET, NUM_AIRPORTS, AT_INVALID); diff --git a/src/newgrf_airport.h b/src/newgrf_airport.h index 5d031f7c56..7099e42e47 100644 --- a/src/newgrf_airport.h +++ b/src/newgrf_airport.h @@ -141,7 +141,7 @@ private: }; /** Information related to airport classes. */ -typedef NewGRFClass AirportClass; +using AirportClass = NewGRFClass; void BindAirportSpecs(); diff --git a/src/newgrf_class.h b/src/newgrf_class.h index 6e375e5515..38e068a881 100644 --- a/src/newgrf_class.h +++ b/src/newgrf_class.h @@ -17,7 +17,7 @@ * Struct containing information relating to NewGRF classes for stations and airports. */ template -struct NewGRFClass { +class NewGRFClass { private: uint ui_count; ///< Number of specs in this class potentially available to the user. std::vector spec; ///< List of specifications. diff --git a/src/newgrf_class_func.h b/src/newgrf_class_func.h index 4e41915916..b3de6ba9c1 100644 --- a/src/newgrf_class_func.h +++ b/src/newgrf_class_func.h @@ -11,20 +11,13 @@ #include "table/strings.h" -/** - * Helper for defining the class method's signatures. - * @param type The type of the class. - */ -#define DEFINE_NEWGRF_CLASS_METHOD(type) \ - template \ - type NewGRFClass - /** Instantiate the array. */ template NewGRFClass NewGRFClass::classes[Tmax]; /** Reset the class, i.e. clear everything. */ -DEFINE_NEWGRF_CLASS_METHOD(void)::ResetClass() +template +void NewGRFClass::ResetClass() { this->global_id = 0; this->name = STR_EMPTY; @@ -34,7 +27,8 @@ DEFINE_NEWGRF_CLASS_METHOD(void)::ResetClass() } /** Reset the classes, i.e. clear everything. */ -DEFINE_NEWGRF_CLASS_METHOD(void)::Reset() +template +void NewGRFClass::Reset() { for (Tid i = (Tid)0; i < Tmax; i++) { classes[i].ResetClass(); @@ -50,7 +44,8 @@ DEFINE_NEWGRF_CLASS_METHOD(void)::Reset() * @note Upon allocating the same global class ID for a * second time, this first allocation will be given. */ -DEFINE_NEWGRF_CLASS_METHOD(Tid)::Allocate(uint32_t global_id) +template +Tid NewGRFClass::Allocate(uint32_t global_id) { for (Tid i = (Tid)0; i < Tmax; i++) { if (classes[i].global_id == global_id) { @@ -71,7 +66,8 @@ DEFINE_NEWGRF_CLASS_METHOD(Tid)::Allocate(uint32_t global_id) * Insert a spec into the class. * @param spec The spec to insert. */ -DEFINE_NEWGRF_CLASS_METHOD(void)::Insert(Tspec *spec) +template +void NewGRFClass::Insert(Tspec *spec) { this->spec.push_back(spec); @@ -83,7 +79,8 @@ DEFINE_NEWGRF_CLASS_METHOD(void)::Insert(Tspec *spec) * @param spec The spec to assign. * @note The spec must have a valid class id set. */ -DEFINE_NEWGRF_CLASS_METHOD(void)::Assign(Tspec *spec) +template +void NewGRFClass::Assign(Tspec *spec) { assert(spec->cls_id < Tmax); Get(spec->cls_id)->Insert(spec); @@ -105,7 +102,8 @@ NewGRFClass *NewGRFClass::Get(Tid cls_id) * Get the number of allocated classes. * @return The number of classes. */ -DEFINE_NEWGRF_CLASS_METHOD(uint)::GetClassCount() +template +uint NewGRFClass::GetClassCount() { uint i; for (i = 0; i < Tmax && classes[i].global_id != 0; i++) {} @@ -116,7 +114,8 @@ DEFINE_NEWGRF_CLASS_METHOD(uint)::GetClassCount() * Get the number of classes available to the user. * @return The number of classes. */ -DEFINE_NEWGRF_CLASS_METHOD(uint)::GetUIClassCount() +template +uint NewGRFClass::GetUIClassCount() { uint cnt = 0; for (uint i = 0; i < Tmax && classes[i].global_id != 0; i++) { @@ -130,7 +129,8 @@ DEFINE_NEWGRF_CLASS_METHOD(uint)::GetUIClassCount() * @param index UI index of a class. * @return The class ID of the class. */ -DEFINE_NEWGRF_CLASS_METHOD(Tid)::GetUIClass(uint index) +template +Tid NewGRFClass::GetUIClass(uint index) { for (uint i = 0; i < Tmax && classes[i].global_id != 0; i++) { if (classes[i].GetUISpecCount() == 0) continue; @@ -144,7 +144,8 @@ DEFINE_NEWGRF_CLASS_METHOD(Tid)::GetUIClass(uint index) * @param index The index where to find the spec. * @return The spec at given location. */ -DEFINE_NEWGRF_CLASS_METHOD(const Tspec *)::GetSpec(uint index) const +template +const Tspec *NewGRFClass::GetSpec(uint index) const { /* If the custom spec isn't defined any more, then the GRF file probably was not loaded. */ return index < this->GetSpecCount() ? this->spec[index] : nullptr; @@ -155,7 +156,8 @@ DEFINE_NEWGRF_CLASS_METHOD(const Tspec *)::GetSpec(uint index) const * @param ui_index UI index of the spec. * @return index of the spec, or -1 if out of range. */ -DEFINE_NEWGRF_CLASS_METHOD(int)::GetIndexFromUI(int ui_index) const +template +int NewGRFClass::GetIndexFromUI(int ui_index) const { if (ui_index < 0) return -1; for (uint i = 0; i < this->GetSpecCount(); i++) { @@ -170,7 +172,8 @@ DEFINE_NEWGRF_CLASS_METHOD(int)::GetIndexFromUI(int ui_index) const * @param index index of the spec. * @return UI index of the spec, or -1 if out of range. */ -DEFINE_NEWGRF_CLASS_METHOD(int)::GetUIFromIndex(int index) const +template +int NewGRFClass::GetUIFromIndex(int index) const { if ((uint)index >= this->GetSpecCount()) return -1; uint ui_index = 0; @@ -187,7 +190,8 @@ DEFINE_NEWGRF_CLASS_METHOD(int)::GetUIFromIndex(int index) const * @param index Pointer to return the index of the spec in its class. If nullptr then not used. * @return The spec. */ -DEFINE_NEWGRF_CLASS_METHOD(const Tspec *)::GetByGrf(uint32_t grfid, uint16_t local_id, int *index) +template +const Tspec *NewGRFClass::GetByGrf(uint32_t grfid, uint16_t local_id, int *index) { uint j; @@ -205,21 +209,3 @@ DEFINE_NEWGRF_CLASS_METHOD(const Tspec *)::GetByGrf(uint32_t grfid, uint16_t loc return nullptr; } - -#undef DEFINE_NEWGRF_CLASS_METHOD - -/** Force instantiation of the methods so we don't get linker errors. */ -#define INSTANTIATE_NEWGRF_CLASS_METHODS(name, Tspec, Tid, Tmax) \ - template void name::ResetClass(); \ - template void name::Reset(); \ - template Tid name::Allocate(uint32_t global_id); \ - template void name::Insert(Tspec *spec); \ - template void name::Assign(Tspec *spec); \ - template NewGRFClass *name::Get(Tid cls_id); \ - template uint name::GetClassCount(); \ - template uint name::GetUIClassCount(); \ - template Tid name::GetUIClass(uint index); \ - template const Tspec *name::GetSpec(uint index) const; \ - template int name::GetUIFromIndex(int index) const; \ - template int name::GetIndexFromUI(int ui_index) const; \ - template const Tspec *name::GetByGrf(uint32_t grfid, uint16_t local_id, int *index); diff --git a/src/newgrf_object.cpp b/src/newgrf_object.cpp index 8e47c650ef..d938bb4930 100644 --- a/src/newgrf_object.cpp +++ b/src/newgrf_object.cpp @@ -136,20 +136,21 @@ void ResetObjects() _object_specs[OBJECT_TRANSMITTER].cls_id = ObjectClass::Allocate('TRNS'); } -template -/* static */ void NewGRFClass::InsertDefaults() +template <> +/* static */ void ObjectClass::InsertDefaults() { ObjectClass::Get(ObjectClass::Allocate('LTHS'))->name = STR_OBJECT_CLASS_LTHS; ObjectClass::Get(ObjectClass::Allocate('TRNS'))->name = STR_OBJECT_CLASS_TRNS; } -template -bool NewGRFClass::IsUIAvailable(uint index) const +template <> +bool ObjectClass::IsUIAvailable(uint index) const { return this->GetSpec(index)->IsEverAvailable(); } -INSTANTIATE_NEWGRF_CLASS_METHODS(ObjectClass, ObjectSpec, ObjectClassID, OBJECT_CLASS_MAX) +/* Instantiate ObjectClass. */ +template class NewGRFClass; /* virtual */ uint32_t ObjectScopeResolver::GetRandomBits() const { diff --git a/src/newgrf_object.h b/src/newgrf_object.h index e55f9b8511..0d224410ab 100644 --- a/src/newgrf_object.h +++ b/src/newgrf_object.h @@ -163,8 +163,8 @@ private: TownScopeResolver *GetTown(); }; -/** Struct containing information relating to object classes. */ -typedef NewGRFClass ObjectClass; +/** Class containing information relating to object classes. */ +using ObjectClass = NewGRFClass; static const size_t OBJECT_SPRITE_GROUP_DEFAULT = 0; static const size_t OBJECT_SPRITE_GROUP_PURCHASE = 1; diff --git a/src/newgrf_roadstop.cpp b/src/newgrf_roadstop.cpp index 557b771ac8..482bce1e6a 100644 --- a/src/newgrf_roadstop.cpp +++ b/src/newgrf_roadstop.cpp @@ -27,8 +27,8 @@ #include "safeguards.h" -template -void NewGRFClass::InsertDefaults() +template <> +void RoadStopClass::InsertDefaults() { /* Set up initial data */ RoadStopClass::Get(RoadStopClass::Allocate('DFLT'))->name = STR_STATION_CLASS_DFLT; @@ -37,13 +37,14 @@ void NewGRFClass::InsertDefaults() RoadStopClass::Get(RoadStopClass::Allocate('WAYP'))->Insert(nullptr); } -template -bool NewGRFClass::IsUIAvailable(uint) const +template <> +bool RoadStopClass::IsUIAvailable(uint) const { return true; } -INSTANTIATE_NEWGRF_CLASS_METHODS(RoadStopClass, RoadStopSpec, RoadStopClassID, ROADSTOP_CLASS_MAX) +/* Instantiate RoadStopClass. */ +template class NewGRFClass; static const uint NUM_ROADSTOPSPECS_PER_STATION = 63; ///< Maximum number of parts per station. diff --git a/src/newgrf_roadstop.h b/src/newgrf_roadstop.h index 7c47f74bb8..8c231dc4ca 100644 --- a/src/newgrf_roadstop.h +++ b/src/newgrf_roadstop.h @@ -161,7 +161,7 @@ struct RoadStopSpec { static const RoadStopSpec *Get(uint16_t index); }; -typedef NewGRFClass RoadStopClass; +using RoadStopClass = NewGRFClass; void DrawRoadStopTile(int x, int y, RoadType roadtype, const RoadStopSpec *spec, StationType type, int view); diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index 4a3bae2abb..f6c68eaa10 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -28,8 +28,8 @@ #include "safeguards.h" -template -/* static */ void NewGRFClass::InsertDefaults() +template <> +/* static */ void StationClass::InsertDefaults() { /* Set up initial data */ StationClass::Get(StationClass::Allocate('DFLT'))->name = STR_STATION_CLASS_DFLT; @@ -38,13 +38,14 @@ template StationClass::Get(StationClass::Allocate('WAYP'))->Insert(nullptr); } -template -bool NewGRFClass::IsUIAvailable(uint) const +template <> +bool StationClass::IsUIAvailable(uint) const { return true; } -INSTANTIATE_NEWGRF_CLASS_METHODS(StationClass, StationSpec, StationClassID, STAT_CLASS_MAX) +/* Instantiate StationClass. */ +template class NewGRFClass; static const uint NUM_STATIONSSPECS_PER_STATION = 255; ///< Maximum number of parts per station. diff --git a/src/newgrf_station.h b/src/newgrf_station.h index 08fcaf8efd..be9fa03dfe 100644 --- a/src/newgrf_station.h +++ b/src/newgrf_station.h @@ -175,8 +175,8 @@ struct StationSpec { std::vector>> layouts; }; -/** Struct containing information relating to station classes. */ -typedef NewGRFClass StationClass; +/** Class containing information relating to station classes. */ +using StationClass = NewGRFClass; const StationSpec *GetStationSpec(TileIndex t); From 018944dc20082aba7f2aa0872f8fdf2e70fc5977 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 24 Mar 2024 04:41:07 +0000 Subject: [PATCH 177/695] Update: Translations from eints english (au): 2 changes by krysclarke vietnamese: 1 change by KhoiCanDev chinese (simplified): 9 changes by WenSimEHRP greek: 152 changes by gh658804 russian: 3 changes by Ln-Wolf finnish: 2 changes by hpiirai ukrainian: 9 changes by StepanIvasyn danish: 2 changes by bscargo portuguese: 5 changes by azulcosta portuguese (brazilian): 35 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 70 ++++++------- src/lang/danish.txt | 4 +- src/lang/english_AU.txt | 4 +- src/lang/finnish.txt | 4 +- src/lang/greek.txt | 168 +++++++++++++++++++++++++++--- src/lang/portuguese.txt | 8 +- src/lang/russian.txt | 6 +- src/lang/simplified_chinese.txt | 18 ++-- src/lang/ukrainian.txt | 18 ++-- src/lang/vietnamese.txt | 2 +- 10 files changed, 220 insertions(+), 82 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 1524cfccc3..f3f13f97a6 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -483,12 +483,12 @@ STR_GRAPH_MENU_INCOME_GRAPH :Gráfico de ren STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Gráfico da carga entregada STR_GRAPH_MENU_PERFORMANCE_HISTORY_GRAPH :Gráfico do histórico de desempenho STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Gráfico de valor da empresa -STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Receitas por carga +STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Tarifas por carga # Company league menu STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Tabela de classificação das empresas -STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Classificação detalhada de desempenho -STR_GRAPH_MENU_HIGHSCORE :Tabela de classificações +STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Avaliação detalhada de desempenho +STR_GRAPH_MENU_HIGHSCORE :Painel de classificação # Industry menu STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Lista de indústrias @@ -614,7 +614,7 @@ STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Gráfico STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Últimos 72 minutos -STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Receitas por carga +STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Tarifas por Carga STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Dias em trânsito STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Segundos em trânsito STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Pagamento por entregar 10 unidades (ou 10 mil litros) de carga em uma distância de 20 quadrados @@ -628,7 +628,7 @@ STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLA STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Mostrar avaliações detalhadas de desempenho # Graph key window -STR_GRAPH_KEY_CAPTION :{WHITE}Chave para gráficos da empresa +STR_GRAPH_KEY_CAPTION :{WHITE}Chave dos gráficos da empresa STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Clique aqui para mostrar/ocultar empresa no gráfico # Company league window @@ -646,7 +646,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :Presidente STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Magnata # Performance detail window -STR_PERFORMANCE_DETAIL :{WHITE}Classificação Detalhada de Desempenho +STR_PERFORMANCE_DETAIL :{WHITE}Avaliação Detalhada de Desempenho STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detalhes STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) @@ -798,8 +798,8 @@ STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STR STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN} -STR_SMALLMAP_DISABLE_ALL :{BLACK}Desabilitar tudo -STR_SMALLMAP_ENABLE_ALL :{BLACK}Habilitar tudo +STR_SMALLMAP_DISABLE_ALL :{BLACK}Desativar tudo +STR_SMALLMAP_ENABLE_ALL :{BLACK}Ativar tudo STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Mostrar altitudes STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Não mostrar indústrias no mapa STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Mostrar todas as indústrias no mapa @@ -856,7 +856,7 @@ STR_NEWS_COMPANY_MERGER_TITLE :{BIG_FONT}{BLAC STR_NEWS_COMPANY_MERGER_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} foi vendida para {STRING} por {CURRENCY_LONG}! STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLACK}Falência! STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} foi fechada pelos credores e todos os seus bens foram vendidos! -STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Lançada nova empresa de transportes! +STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Nova empresa de transportes! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} inicia construção perto de {TOWN}! STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} foi comprada por {STRING} por um valor não revelado! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Gerente) @@ -1198,8 +1198,8 @@ STR_TERRAIN_TYPE_FLAT :Plano STR_TERRAIN_TYPE_HILLY :Acidentado STR_TERRAIN_TYPE_MOUNTAINOUS :Montanhoso STR_TERRAIN_TYPE_ALPINIST :Alpinismo -STR_TERRAIN_TYPE_CUSTOM :Altitude personalizada -STR_TERRAIN_TYPE_CUSTOM_VALUE :Altitude personalizada ({NUM}) +STR_TERRAIN_TYPE_CUSTOM :Altura personalizada +STR_TERRAIN_TYPE_CUSTOM_VALUE :Altura personalizada ({NUM}) ###length 4 STR_CITY_APPROVAL_LENIENT :Leniente @@ -1556,7 +1556,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Tipo de terreno: {STRING} -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Escolher a altitude das colinas e montanhas da paisagem +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Escolher a altura das colinas e montanhas da paisagem STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densidade de indústrias: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Definir quantas indústrias devem ser geradas e que nível deve ser mantido durante o jogo @@ -2177,13 +2177,13 @@ STR_INTRO_CAPTION :{WHITE}OpenTTD STR_INTRO_NEW_GAME :{BLACK}Novo Jogo STR_INTRO_LOAD_GAME :{BLACK}Abrir Jogo -STR_INTRO_PLAY_SCENARIO :{BLACK}Jogar em Cenário -STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Jogar em Mapa de Altitudes +STR_INTRO_PLAY_SCENARIO :{BLACK}Jogar Cenário +STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Jogar Mapa de Altitudes STR_INTRO_SCENARIO_EDITOR :{BLACK}Editor de Cenário STR_INTRO_MULTIPLAYER :{BLACK}Multijogador STR_INTRO_GAME_OPTIONS :{BLACK}Opções de Jogo -STR_INTRO_HIGHSCORE :{BLACK}Tabela de Classificações +STR_INTRO_HIGHSCORE :{BLACK}Painel de Classificação STR_INTRO_HELP :{BLACK}Ajuda & Manuais STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Configurações STR_INTRO_NEWGRF_SETTINGS :{BLACK}Configurações de NewGRF @@ -2205,7 +2205,7 @@ STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Selecion STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Selecionar paisagem 'Terra dos brinquedos' STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Abrir opções de jogo -STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Abrir tabela de classificações +STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Abrir tabela de classificação STR_INTRO_TOOLTIP_HELP :{BLACK}Acessar a documentação e recursos online STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Abrir configurações STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Abrir configurações de NewGRF @@ -2249,7 +2249,7 @@ STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Escavad STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Os túneis podem se cruzar: {ORANGE}{STRING} STR_CHEAT_NO_JETCRASH :{LTBLUE}Aeronaves a jato não irão se acidentar (frequentemente) em aeroportos pequenos: {ORANGE}{STRING} STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Editar a altitude máxima do mapa: {ORANGE}{NUM} -STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Editar a altitude máxima das montanhas no mapa +STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Editar a altura máxima das montanhas no mapa STR_CHEAT_CHANGE_DATE :{LTBLUE}Alterar data: {ORANGE}{DATE_SHORT} STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Alterar o ano atual STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir modificar os valores de produção: {ORANGE}{STRING} @@ -2755,9 +2755,9 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}sobrecarregado # Linkgraph tooltip -STR_LINKGRAPH_STATS_TOOLTIP_MONTH :{BLACK}{CARGO_LONG} para ser transportado por mês de {STATION} para {STATION} ({COMMA}% da capacidade){STRING} -STR_LINKGRAPH_STATS_TOOLTIP_MINUTE :{BLACK}{CARGO_LONG} para ser transportado por minuto de {STATION} para {STATION} ({COMMA}% da capacidade){STRING} -STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} para ser transportado de volta ({COMMA}% da capacidade) +STR_LINKGRAPH_STATS_TOOLTIP_MONTH :{BLACK}{CARGO_LONG} para se transportar, por mês, de {STATION} para {STATION} ({COMMA}% da capacidade){STRING} +STR_LINKGRAPH_STATS_TOOLTIP_MINUTE :{BLACK}{CARGO_LONG} para se transportar, por minuto, de {STATION} para {STATION} ({COMMA}% da capacidade){STRING} +STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} para se transportar de volta ({COMMA}% da capacidade) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Tempo médio de viagem: {UNITS_DAYS_OR_SECONDS} # Base for station construction window(s) @@ -3368,7 +3368,7 @@ STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Tamanho: STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}O tamanho da imagem original do mapa de altitudes. Para obter melhores resultados, cada lado deve corresponder a um comprimento de lado de mapa disponível no OpenTTD, tais como 256, 512, 1024, etc. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Altitude desejada para o pico +STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Altura do pico mais elevado STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Pico mais elevado STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Cobertura com neve (em %) STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Cobertura com deserto (em %) @@ -3595,7 +3595,7 @@ STR_NEWGRF_SCAN_ARCHIVES :Procurando por # Sign list window STR_SIGN_LIST_CAPTION :{WHITE}Lista de Placas - {COMMA} Placa{P "" s} STR_SIGN_LIST_MATCH_CASE :{BLACK}Diferenciar maiúsculas/minúsculas -STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Ativar/Desativar correspondência de maiúsculas/minúsculas quando comparar os nomes das placas com a sequência de caracteres fornecida +STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Ativar/Desativar correspondência de maiúsculas/minúsculas quando comparar os nomes das placas com a palavra-chave fornecida # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Editar texto da placa @@ -3643,7 +3643,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Renomear Locali # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Autoridade local de {TOWN} -STR_LOCAL_AUTHORITY_ZONE :{BLACK}Área +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Região STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Mostrar a região dentro dos limites da autoridade local STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Classificações das empresas de transporte: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} @@ -4450,7 +4450,7 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Capacida STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Créditos de Transferência: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Intervalo de manutenção: {LTBLUE}{COMMA}{NBSP}dias{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Intervalo de manutenção: {LTBLUE}{COMMA}{NBSP}minutos{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Intervalo de manutenção: {LTBLUE}{COMMA}{NBSP}minuto{P "" s}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Intervalo de manutenção: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Última manutenção: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Última manutenção: {LTBLUE}{NUM} minuto{P "" s} atrás @@ -4592,14 +4592,14 @@ STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Confiabilidade ###next-name-looks-similar STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Como comparar os dados do veículo com o valor passado -STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :é igual a -STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :é diferente de -STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :é menor que -STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :é menor que ou igual a -STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :é maior que -STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :é maior que ou igual a -STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :é verdadeiro -STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :é falso +STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :for igual a +STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :for diferente de +STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :for menor que +STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :for menor que ou igual a +STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :for maior que +STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :for maior que ou igual a +STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :for verdadeiro +STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :for falso STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}O valor para comparar com os dados do veículo STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Digitar um valor para comparar @@ -4821,7 +4821,7 @@ STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configur # Available AIs window STR_AI_LIST_CAPTION :{WHITE}{STRING} Disponíveis STR_AI_LIST_CAPTION_AI :IAs -STR_AI_LIST_CAPTION_GAMESCRIPT :Scripts de jogo +STR_AI_LIST_CAPTION_GAMESCRIPT :Scripts de Jogo STR_AI_LIST_TOOLTIP :{BLACK}Clique para selecionar um script STR_AI_LIST_AUTHOR :{LTBLUE}Autor: {ORANGE}{STRING} @@ -4856,7 +4856,7 @@ STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}Acesso r STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING} STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Retornar no histórico de navegação STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Avançar no histórico de navegação -STR_TEXTFILE_WRAP_TEXT :{WHITE}Quebrar linhas do texto +STR_TEXTFILE_WRAP_TEXT :{WHITE}Quebrar linhas STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Ajustar o comprimento das linhas à largura da janela para facilitar a leitura do texto STR_TEXTFILE_VIEW_README :{BLACK}Leia-me STR_TEXTFILE_VIEW_README_TOOLTIP :Ver o arquivo Leia-me para este conteúdo @@ -4865,7 +4865,7 @@ STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Ver o registro STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licença STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Ver a licença para este conteúdo ###length 5 -STR_TEXTFILE_README_CAPTION :{WHITE}Leia-me {STRING} de {STRING} +STR_TEXTFILE_README_CAPTION :{WHITE}Leia-me de {STRING} de {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Registro de modificações em {STRING} de {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}Licença de {STRING} de {STRING} STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Pré-visualização do resultado da pesquisa diff --git a/src/lang/danish.txt b/src/lang/danish.txt index c19d052d86..3aa4f20c61 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -4449,10 +4449,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kapacite STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Værdi af overført fragt: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Serviceinterval: {LTBLUE}{COMMA}{NBSP}dage{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Serviceinterval: {LTBLUE}{COMMA}{NBSP}minutter{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Serviceinterval: {LTBLUE}{COMMA}{NBSP}minut{P "" ter}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Serviceinterval: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Sidste service: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Last service: {LTBLUE}{NUM} minutter siden +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :sidste service: {LTBLUE}{NUM} minut{P "" ter} siden STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Forøg serviceintervallet med 10 dage. Ctrl+klik for at øge serviceintervallet med 5 dage STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Forøg serviceintervallet med 5 minutter. Ctrl+klik for at øge serviceintervallet med 1 minut STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Forøg serviceintervallet med 10 procent. Ctrl+klik for at øge serviceintervallet med 5 procent diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index e84cc263ee..63d2bc12d3 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -4449,10 +4449,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Capacity STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Transfer Credits: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Servicing interval: {LTBLUE}{COMMA}{NBSP}days{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Servicing interval: {LTBLUE}{COMMA}{NBSP}minutes{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Servicing interval: {LTBLUE}{COMMA}{NBSP}minute{P "" s}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Servicing interval: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Last service: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Last service: {LTBLUE}{NUM} minutes ago +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Last service: {LTBLUE}{NUM} minute{P "" s} ago STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Increase servicing interval by 10 days. Ctrl+Click to increase servicing interval by 5 days STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Increase servicing interval by 5 minutes. Ctrl+Click to increase servicing interval by 1 minute STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Increase servicing interval by 10 percent. Ctrl+Click to increase servicing interval by 5 percent diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index ac950a5fa3..ce187a16f2 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -4449,10 +4449,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kapasite STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Siirron arvo: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Huoltoväli: {LTBLUE}{COMMA}{NBSP}vrk{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Huoltoväli: {LTBLUE}{COMMA}{NBSP}minuuttia{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Huoltoväli: {LTBLUE}{COMMA}{NBSP}minuutti{P "" a}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Huoltoväli: {LTBLUE}{COMMA}{NBSP}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Viimeksi huollettu: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Viimeksi huollettu: {LTBLUE}{NUM} minuuttia sitten +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Viimeksi huollettu: {LTBLUE}{NUM} minuutti{P "" a} sitten STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Pidennä huoltoväliä 10 vuorokaudella. Ctrl+napsautus pidentää väliä 5 vuorokaudella STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Pidennä huoltoväliä 5 minuutilla. Ctrl+napsautus pidentää väliä 1 minuutilla STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Pidennä huoltoväliä 10 prosentilla. Ctrl+napsautus pidentää väliä 5 prosentilla diff --git a/src/lang/greek.txt b/src/lang/greek.txt index b317bf0f12..24bced900b 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -274,6 +274,9 @@ STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Ίδιο με STR_UNITS_VELOCITY_IMPERIAL :{DECIMAL}{NBSP}μίλια/ώρα STR_UNITS_VELOCITY_METRIC :{DECIMAL}{NBSP}χλμ/ώρα STR_UNITS_VELOCITY_SI :{DECIMAL}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS_DAY :{DECIMAL}{NBSP}τετραγωνίδια/ημέρα +STR_UNITS_VELOCITY_GAMEUNITS_SEC :{DECIMAL}{NBSP}τετραγωνίδια/δευτερόλεπτο +STR_UNITS_VELOCITY_KNOTS :{DECIMAL}{NBSP}κόμβοι STR_UNITS_POWER_IMPERIAL :{DECIMAL}{NBSP}hp STR_UNITS_POWER_METRIC :{DECIMAL}{NBSP}hp @@ -281,6 +284,7 @@ STR_UNITS_POWER_SI :{DECIMAL}{NBSP} STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t +STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg @@ -313,9 +317,15 @@ STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m # Time units used in string control characters +STR_UNITS_DAYS :{COMMA}{NBSP}ημέρ{P 0 α ες} +STR_UNITS_SECONDS :{COMMA}{NBSP}δευτερόλεπτ{P 0 ο α} +STR_UNITS_TICKS :{COMMA}{NBSP}τικ{P "" ς} +STR_UNITS_MONTHS :{NUM}{NBSP}μήν{P 0 α ες} STR_UNITS_MINUTES :{NUM}{NBSP}λεπτ{P ό ά} +STR_UNITS_YEARS :{NUM}{NBSP}έτ{P 0 ος η} +STR_UNITS_PERIODS :{NUM}{NBSP}περίοδ{P 0 ος οι} # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Φιλτράρισμα λίστας: @@ -736,6 +746,8 @@ STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Δάνε STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Σύνολο: ###next-name-looks-similar +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}Αριθμός οχημάτων που είχαν κέρδη το προηγούμενο έτος. Αυτό περιλαμβάνει οδικά οχήματα, τρένα, πλοία και αεροσκάφη +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Αριθμός οχημάτων που είχαν κέρδη την προηγούμενη περίοδο. Αυτό περιλαμβάνει οδικά οχήματα, τρένα, πλοία και αεροσκάφη STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Αριθμός των πρόσφατα επισκευασμένων σταθμών. Σταθμοί τρένων, στάσεις λεωφορείων, αεροδρόμια, κ.ο.κ. προσμετρώνται ξεχωριστά, ακόμα κι αν ανήκουν στον ίδιο σταθμό. STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Το ποσό των χρημάτων που έγιναν σε ένα τρίμηνο με το μικρότερο κέρδος των τελευταίων 12 τριμήνων STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Το ποσό των χρημάτων που έγιναν σε ένα τρίμηνο με το μεγαλύτερο κέρδος των τελευταίων 12 τριμήνων @@ -983,7 +995,12 @@ STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}{STATION STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Έληξε η προσφορά επιδότησης:{}{}{STRING} από {G τον τη το} {STRING} πρός {G τον τη το} {STRING} δεν θα επιδοτείται πλέον. STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Η επιδότηση αποσύρθηκε:{}{}Η υπηρεσια για {STRING.subs} απο το {STRING} προς το {STRING} δεν επιδοτείται πλέον. +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Προσφορά επιδότησης υπηρεσίας:{}{}Η πρώτη {STRING} από {STRING} έως {STRING} θα προσελκύσει επιδότηση {UNITS_YEARS_OR_MINUTES} από την τοπική αρχή! ###length 4 +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Η επιχορήγηση υπηρεσίας που δόθηκε στην {STRING}!{}{}{STRING} από {STRING} έως {STRING} θα πληρώνει 50% έξτρα για το/α επόμενο/α {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Η επιχορήγηση υπηρεσίας που δόθηκε στην {STRING}!{}{}{STRING} από {STRING} έως {STRING} θα πληρώνει διπλά ποσά για το επόμενο/α {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Η επιχορήγηση υπηρεσία που δόθηκε στην {STRING}!{}{}{STRING} από {STRING} έως {STRING} θα πληρώνει τριπλές τιμές για το/α επόμενο/α {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Η επιχορήγηση υπηρεσίας που δόθηκε στην {STRING}!{}{}{STRING} από {STRING} έως {STRING} θα πληρώνει τετραπλές τιμές για το/α επόμενο/α {UNITS_YEARS_OR_MINUTES}! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Μονοπώλιο μεταφορών! @@ -1006,11 +1023,20 @@ STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Επιλ STR_GAME_OPTIONS_TAB_SOCIAL :Κοινωνικά STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}Επιλέξτε ρυθμίσεις κοινωνικής ενσωμάτωσης +STR_GAME_OPTIONS_VOLUME :Ένταση Ήχου +STR_GAME_OPTIONS_SFX_VOLUME :Ηχητικά εφέ +STR_GAME_OPTIONS_MUSIC_VOLUME :Μουσική +STR_GAME_OPTIONS_VOLUME_0 :0% +STR_GAME_OPTIONS_VOLUME_25 :25% +STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Νομισματικές μονάδες STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Επιλογή νομισματικών μονάδων +STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) ###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Στερλίνα Ηνωμένου Βασιλείου @@ -1055,6 +1081,8 @@ STR_GAME_OPTIONS_CURRENCY_HKD :Δολάριο STR_GAME_OPTIONS_CURRENCY_INR :Ρουπία Ινδίας STR_GAME_OPTIONS_CURRENCY_IDR :Ινδονησιακή Ρουπία STR_GAME_OPTIONS_CURRENCY_MYR :Ρινγκίτ Μαλαισίας +STR_GAME_OPTIONS_CURRENCY_LVL :Λετονικά Λατς +STR_GAME_OPTIONS_CURRENCY_PTE :Πορτογαλικό Εσκούδο STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Αυτόματη αποθήκευση STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Επιλογή διάκενου ανάμεσα στις αυτόματες αποθηκεύσεις @@ -1139,6 +1167,13 @@ STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(δεν STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :{BLACK}Πλατφόρμα: STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Plugin state: +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_RUNNING :{GREEN}Τρέχει +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_FAILED :{RED}Αποτυχία αρχικοποίησης +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_PLATFORM_NOT_RUNNING :{ORANGE}{STRING} δεν τρέχει +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNLOADED :{RED}Ξεφορτώθηκε +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :Διπλό πρόσθετο +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNSUPPORTED_API :{RED}Μη υποστηριζόμενη έκδοση +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Άκυρη υπογραφή STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Αποτυχία ανάκτησης λίστας υποστηριζόμενων αναλύσεων @@ -1425,9 +1460,11 @@ STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Στα δεξι ###length 2 STR_CONFIG_SETTING_SHOWFINANCES :Εμφάνιση παράθυρου οικονομικών στο τέλος του έτους: {STRING} +STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Εμφάνιση παραθύρου οικονομικών στο τέλος της περιόδου: {STRING} ###length 2 STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Όταν ενεργοποιείται, το παράθυρο των οικονομικών πληροφοριών εμφανίζεται στο τέλος κάθε χρόνου για ευκολότερο έλεγχο της οικονομικής κατάστασης της εταιρείας +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Εάν είναι ενεργοποιημένο, το παράθυρο οικονομικών αναδύεται στο τέλος κάθε περιόδου για να επιτρέψει την εύκολη επιθεώρηση της οικονομικής κατάστασης της εταιρείας STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Οι νέες οδηγίες είναι «χωρίς στάση» από προεπιλογή: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Κανονικά, τα οχήματα σταματούν σε κάθε σταθμό που περνούν. Ενεργοποιώντας αυτήν τη ρύθμιση, δεν θα σταματούν σε κανένα σταθμό που θα βρει στη διαδρομή τους προς τον τελικό προορισμό. Σημείωστε πως αυτή η ρύθμιση ορίζει μόνο μια καθορισμένη τιμή για νέες εντολές. Ειδικές εντολές μπορούν να δοθούν για οποιαδήποτε συμπεριφορά, άσχετα από την προκαθορισμένη @@ -1453,7 +1490,8 @@ STR_CONFIG_SETTING_BRIBE_HELPTEXT :Επιτρέπ STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Επιτρέπεται η αγορά αποκλειστικών δικαιωμάτων μεταφοράς: {STRING} ###length 2 -STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Αν μια εταιρεία αγοράσει τα αποκλειστικά δικαιώματα μεταφορών σε μια πόλη, οι σταθμοί των αντιπάλων δεν θα λαμβάνουν φορτία (επιβάτες και εμπορεύματα) για έναν ολόκληρο χρόνο +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Αν μια εταιρεία αγοράσει τα αποκλειστικά δικαιώματα μεταφορών σε μια πόλη, οι σταθμοί των αντιπάλων δεν θα λαμβάνουν φορτία (επιβάτες και εμπορεύματα) για δώδεκα μήνες +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT_MINUTES :Εάν μια εταιρεία αγοράσει αποκλειστικά δικαιώματα μεταφοράς για μια πόλη, οι αντίπαλοι σταθμοί (επιβάτες και φορτίο) δεν θα λάβουν κανένα φορτίο για δώδεκα λεπτά STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Επιτρέπεται η κατασκευή κτιρίων: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Επιτρέπεται στις εταιρείες να δίνουν χρήματα στις πόλεις για να χρηματοδοτήσουν νέα σπίτια @@ -1478,6 +1516,8 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Κανένα* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Μειωμένη STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Κανονική +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Επιτρέπονται ισόπεδες διαβάσεις με δρόμους που ανήκουν σε ανταγωνιστές: {STRING} +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Επιτρέπεται η κατασκευή ισόπεδων διαβάσεων με δρόμους ή σιδηροτροχιές που ανήκουν σε ανταγωνιστές STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Επιτρέπονται οι στάσεις σε δρόμους που είναι ιδιοκτησία των πόλεων : {STRING} STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Επιτρέπεται η κατασκευή στάσεων πάνω σε δρόμους που είναι ιδιοκτησία των πόλεων @@ -1491,6 +1531,8 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Όταν είν STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Αρχικό χρώμα εταιρίας: {STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Επιλογή του αρχικού χρώματος της εταιρίας +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Δευτερεύον χρώμα εταιρίας: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Επιλέξτε το δευτερεύον χρώμα της εταιρίας, αν χρησιμοποιείτε ένα NewGRF που να το υποστηρίζει STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Τα αεροδρόμια δεν λήγουν ποτέ: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ενεργοποιώντας αυτήν τη ρύθμιση κάθε τύπος αεροδρομίου παραμένει διαθέσιμο για πάντα μετά την παρουσίασή του @@ -1519,7 +1561,10 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Ημερολό ###setting-zero-is-special -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Κλιμακώστε την παραγωγή φορτίου των πόλεων κατά αυτό το ποσοστό. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Κλίμακα παραγωγής φορτίου πόλης: {STRING} +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Κλιμάκωση της παραγωγής φορτίου των πόλεων κατά αυτό το ποσοστό +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Κλιμάκωση της παραγωγής φορτίου των βιομηχανιών: {STRING} +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Κλιμάκωση της παραγωγής φορτίου των βιομηχανιών κατά αυτό το ποσοστό STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Αυτόματη ανανέωση όταν ένα όχημα παλιώνει: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Όταν είναι ενεργοποιημένη, τα οχήματα που πλησιάζουν το τέλος της ζωής τους αντικαθίσταται αυτόματα όταν πληρούνται οι προϋποθέσεις αντικατάστασής του @@ -1731,7 +1776,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ενεργοπ STR_CONFIG_SETTING_LOADING_INDICATORS :Χρήση δεικτών φόρτωσης: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Επιλέξτε εάν οι δείκτες φόρτωσης εμφανίζονται πάνω από τα οχήματα που φορτώνουν ή ξεφορτώνουν +STR_CONFIG_SETTING_TIMETABLE_MODE :Μονάδες μέτρησης στα χρονοδιαγράμματα δρομολογίων: {STRING} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Επιλέξτε τις μονάδες μέτρησης χρόνου που χρησιμοποιούνται στα χρονοδιαγράμματα δρομολογίων οχημάτων ###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Ημέρες +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Δευτερόλεπτα +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Τικς STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Εμφάνιση αφίξεων και αναχωρήσεων στα δρομολόγια: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Εμφάνιση αναμενόμενης ώρας άφιξης και αναχώρησης στα χρονοδιαγράμματα @@ -1769,9 +1819,11 @@ STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Παίζει ή ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR :Στο τέλος του χρόνου: {STRING} +STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Τέλος περιόδου: {STRING} ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Παίζει ηχητικό εφέ στο τέλος του χρόνου που συνοψίζει την επίδοση της εταιρείας κατά την διάρκεια αυτού του χρόνου σε σχέση με τον προηγούμενο χρόνο +STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Παίζει ηχητικό εφέ στο τέλος του χρόνου που συνοψίζει την επίδοση της εταιρείας κατά την διάρκεια αυτής της περιόδου σε σχέση με την προηγούμεη περίοδο STR_CONFIG_SETTING_SOUND_CONFIRM :Οικοδομή: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Παίζει ηχητικό εφέ σε επιτυχής οικοδομές ή άλλες δράσεις @@ -1839,6 +1891,8 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Απενεργ STR_CONFIG_SETTING_NOSERVICE :Απενεργοποίηση επισκευών όταν οι καταρρεύσεις είναι απενεργοποιημένες: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Όταν είναι ενεργοποιημένη, τα οχήματα δεν συντηρούνται όταν δεν είναι δυνατό να χαλάσουν +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Ποινή ταχύτητας φόρτωσης για τρένα που είναι μεγαλύτερα από τον σταθμό: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Όταν είναι ενεργοποιημένο, τα τρένα που είναι πολύ μακριά για τον σταθμό φορτώνουν πιο αργά από ένα τρένο που ταιριάζει στο σταθμό. Αυτή η ρύθμιση δεν επηρεάζει την διαδικασία εύρεσης διαδρομής STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ενεργοποίηση ορίων ταχύτητας βαγονιών: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Όταν είναι ενεργοποιημένο, χρησιμοποιούνται και τα όρια ταχύτητας των βαγονιών όταν αποφασίζεται η μέγιστη ταχύτητα ενός τρένου @@ -1930,6 +1984,7 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Ορίζετα STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Περιήγηση στους τύπους σηματοδότησης: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Επιλέξτε τους τύπους σημάτων μεταξύ των οποίων θα γίνονται οι αλλαγές όταν πατάτε σε ένα τοποθετημένο σήμα κρατώντας πατημένο το Ctrl ###length 2 +STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :Μόνο τρέχουσα ομάδα STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Όλα ορατά STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Εμφάνιση τύπων σημάτων: {STRING} @@ -1963,7 +2018,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Επιτρέπ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Επιτρέπεται, προσαρμοσμένο σχέδιο πόλης STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Δημιουργία εμπορευμάτων πόλης: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Η ποσότητα εμπορευμάτων που παράγεται απο σπίτια σε πόλεις, σε σχέση με τον πληθυσμό της πόλης.{}Τετραγωνική ανάπτυξη: Μια πόλη διπλού μεγέθους παράγει τετραπλάσιο αριθμό επιβατών.{}Γραμμική ανάπτυξη: Μια πόλη διπλού μεγέθους παράγει διπλάσιο αριθμό επιβατών. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Η ποσότητα εμπορευμάτων που παράγεται απο σπίτια σε πόλεις, σε σχέση με τον συνολικό πληθυσμό της πόλης.{}Τετραγωνική ανάπτυξη: Μια πόλη διπλού μεγέθους παράγει τετραπλάσιο αριθμό επιβατών.{}Γραμμική ανάπτυξη: Μια πόλη διπλού μεγέθους παράγει διπλάσιο αριθμό επιβατών ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Τετραγωνικός (αρχική έκδοση) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Γραμμικό @@ -2027,6 +2082,10 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Καμία STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Αρχικός πολλαπλασιαστής μεγέθους πόλης: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Μέσο μέγεθος μεγάλων πόλεων σε σχέση με τις κανονικές στην αρχή του παιχνιδιού +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Ανανέωση του γραφήματος κατανομής κάθε {STRING} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Χρόνος μεταξύ των επακόλουθων επανυπολογισμών του γραφήματος σύνδεσης. Κάθε επανυπολογισμός υπολογίζει τα σχέδια για ένα στοιχείο του γραφήματος. Αυτό σημαίνει ότι μια τιμή X για αυτήν τη ρύθμιση δεν σημαίνει ότι ολόκληρο το γράφημα θα ενημερώνεται κάθε Χ δευτερόλεπτα. Μόνο κάποιο συστατικό του θα ανανεωθεί. Σε όσο πιο μικρή τιμή το ρυθμίσετε, τόσο περισσότερη επεξεργαστική ισχύς θα χρειαστεί για τον υπολογισμό του. Σε όσο πιο μεγάλη τιμή το ρυθμίσετε, τόσο περισσότερος χρόνος θα χρειαστεί μέχρι να ξεκινήσει η διανομή φορτίου σε νέα δρομολόγια +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Χρήση του {STRING} για τον επαναυπολογισμό του γραφήματος κατανομής +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Χρόνος που απαιτείται για κάθε επανυπολογισμό ενός στοιχείου γραφήματος συνδέσμου. Όταν ξεκινά ένας επανυπολογισμός, δημιουργείται ένα νήμα στο οποίο επιτρέπεται να τρέξει για αυτόν τον αριθμό δευτερολέπτων. Σε όσο πιο μικρή τιμή το ορίσετε, τόσο πιο πιθανό είναι να μην έχει τελειώσει το νήμα στον χρόνο που έχει προβλεφθεί. Στη συνέχεια, το παιχνίδι σταματά μέχρι να είναι σε "καθυστέρηση" ("lag"). Σε όσο πιο μεγάλη τιμή το ορίσετε, τόσο περισσότερος χρόνος θα χρειαστεί για να ενημερωθεί η διανομή όταν αλλάζουν οι διαδρομές STR_CONFIG_SETTING_DISTRIBUTION_PAX :Τρόπος διανομής επιβατών: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :Το «συμμετρικό» σημαίνει ότι περίπου ο ίδιος αριθμός επιβατών θα σταλέι από έναν σταθμό Α σε ένα σταθμό Β όσο από τον Β στον Α. Το «ασυμμετρικό» σημαίνει ότι αυθαίρετος αριθμός επιβατών μπορεί να σταλούν σε οποιαδήποτε εκ των δύο κατευθύνσεων. Το «χειροκίνητο» σημαίνει ότι καμία αυτόματη διανομή δε θα γίνεται για τους επιβάτες. @@ -2050,7 +2109,7 @@ STR_CONFIG_SETTING_DEMAND_SIZE :Ποσότητ STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Θέτοντας αυτή τη ρύθμιση σε τιμή λιγότερη του 100% κάνετε τη συμμετρική διανομή να συμπεριφέρεται πιο πολύ σαν την ασυμμετρική. Λιγότερο φορτίο θα στέλνεται πίσω εαν μια συγκεκριμένη ποσότητα έχει σταλεί σε έναν σταθμό. Αν τεθεί στο 0% η συμμετρική διανομή συμπεριφέρεται ακριβώς όπως η ασυμμετρική. STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Κορεσμός σύντομων οδών πριν τη χρήση οδών μεγάλης χωρητικότητας: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Συχνά υπάρχουν πολλαπλές οδοί μεατξύ δύο σταθμών. Η διανομή φορτίων θα κορέσει την πιο σύντομη οδό πρώτα, και μετέπειτα θα χρησιμοποιήσει τη δεύτερ συντομότερη οδό μέχρι αυτή να κορεστεί και τα λοιπά. Ο κορεσμός εξαρτάται από μια εκτίμηση της χωρητικότητας και ενδεχόμενης χρήσης. Όταν έχει κορεστεί όλες οι οδοί, θα υπερφορτώσει όλες τισ οδούς, προτιμώντας αυτές με μεγάλη χωρητικότητα. Τις περισσότερες φορές όμως ο αλγόριθμος δεν εκτιμά σωστά την χωριτικότητα. Αυτή η ρύθμιση επιτρέπει τον προσδιορισμό μέχρι ποιό ποσοστό μια σύντομοτερη οδός πρέπει να κορεστεί τη πρώτη φορά πριν διαλέξει μια μακρύτερη. Θέστε τη σε λιγότερο απο το 100% για την αποφυγή υπερφορτωμένων σταθμών σε περίπτωση υπερεκτιμημένης χωρητικότητας. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Συχνά υπάρχουν πολλαπλές οδοί μεταξύ δύο σταθμών. Η διανομή φορτίων θα κορέσει την πιο σύντομη οδό πρώτα, και μετέπειτα θα χρησιμοποιήσει τη δεύτερη συντομότερη οδό μέχρι αυτή να κορεστεί και τα λοιπά. Ο κορεσμός εξαρτάται από μια εκτίμηση της χωρητικότητας και ενδεχόμενης χρήσης. Όταν έχουν κορεστεί όλες οι οδοί, αν εξακολουθεί και υπάρχει ζήτηση, θα υπερφορτώσει όλες τις οδούς, προτιμώντας αυτές με μεγάλη χωρητικότητα. Τις περισσότερες φορές όμως, ο αλγόριθμος δεν εκτιμά σωστά την χωρητικότητα. Αυτή η ρύθμιση σάς επιτρέπει να καθορίσετε μέχρι ποιο ποσοστό πρέπει να κορεσθεί μια μικρότερη διαδρομή στο πρώτο πέρασμα πριν επιλεγεί η επόμενη μεγαλύτερη. Ρυθμίστε τη σε λιγότερο από 100% για να αποφύγετε υπερπληθυσμένους σταθμούς σε περίπτωση υπερεκτιμημένης χωρητικότητας STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Μονάδες μέτρησης ταχύτητας (ξηράς): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Μονάδες ταχύτητας (ναυτικές): {STRING} @@ -2114,10 +2173,12 @@ STR_CONFIG_SETTING_LIMITATIONS :Περιορι STR_CONFIG_SETTING_ACCIDENTS :Καταστροφές/Ατυχήματα STR_CONFIG_SETTING_GENWORLD :Δημιουργία Κόσμου STR_CONFIG_SETTING_ENVIRONMENT :Περιβάλλον +STR_CONFIG_SETTING_ENVIRONMENT_TIME :Χρόνος STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :Αρχές STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :Πόλεις STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Βιομηχανίες STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Κατανομή φορτίων +STR_CONFIG_SETTING_ENVIRONMENT_TREES :Δέντρα STR_CONFIG_SETTING_AI :Ανταγωνιστές STR_CONFIG_SETTING_AI_NPC :Παίκτες υπολογιστή STR_CONFIG_SETTING_NETWORK :Δίκτυο @@ -2194,10 +2255,11 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Επιλ STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Εμφάνιση επιλογών παιχνιδιού STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Εμφάνιση του πίνακα βαθμολογιών -STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Ρυθμίσεις οθόνης +STR_INTRO_TOOLTIP_HELP :{BLACK}Αποκτήστε πρόσβαση στην τεκμηρίωση και σε διαδικτυακούς πόρους +STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Εμφάνιση ρυθμίσεων STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Εμφάνιση ρυθμίσεων NewGRF STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Έλεγχος για νέο και ανανεωμένο περιεχόμενο για λήψη -STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Εμφάνιση ρυθμίσεων ΑΙ +STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Εμφάνιση ρυθμίσεων ΤΝ STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Εμφάνιση ρυθμίσεων σενάριου παιχνιδιού STR_INTRO_TOOLTIP_QUIT :{BLACK}Έξοδος από το «OpenTTD» @@ -2248,9 +2310,15 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Εμφά STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Εμφάνιση χρωματικών μοτίβων οχημάτων δρόμου STR_LIVERY_SHIP_TOOLTIP :{BLACK}Εμφάνιση χρωματικών μοτίβων πλοίων STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Εμφάνιση χρωματικών μοτίβων αεροσκαφών +STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Εμφάνιση χρωμάτων ομάδων τραίνων +STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Εμφάνιση χρωμάτων ομάδων οχημάτων δρόμου +STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Εμφάνιση χρωμάτων ομάδων πλοίων STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Επιλογή του βασικού χρώματος για το επιλεγμένο θέμα. Με Ctrl+Κλικ ορίζεται το χρώμα σε κάθε θέμα STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Επιλογή του δευτερεύοντος χρώματος για το επιλεγμένο μοτίβο. Με Ctrl+Κλικ ορίζεται το χρώμα για κάθε θέμα STR_LIVERY_PANEL_TOOLTIP :{BLACK}Επιλέξτε το χρωματικό μοτίβο για αλλαγή ή πολλαπλά μοτίβα με Ctrl+Κλικ. Πατήστε στο κουτάκι για να επιλέξετε τη χρήση του μοτίβου +STR_LIVERY_TRAIN_GROUP_EMPTY :Δεν έχουν οριστεί ομάδες τραίνων +STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Δεν έχουν οριστεί ομάδες οχημάτων δρόμου +STR_LIVERY_SHIP_GROUP_EMPTY :Δεν έχουν οριστεί ομάδες πλοίων ###length 23 STR_LIVERY_DEFAULT :Πρότυπο Μοτίβου Χρωμάτων @@ -2575,6 +2643,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :έγινε λή STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :λάθος έκδοση STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :το όνομα είναι ήδη σε χρήση STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :λανθασμένος κωδικός +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :δεν βρίσκεται στη λίστα επιτρεπτών τιμών STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :λάθος εταιρία στο DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :εκδιωχθήκατε από τον διακομιστή STR_NETWORK_ERROR_CLIENT_CHEATER :προσπάθησε να χρησιμοποιησει cheat @@ -2796,8 +2865,11 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Φτιά STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Επιλογή τύπου σταθμών για εμφάνιση STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Επιλέξτε τον τύπο του σταθμού προς κτίσιμο -STR_STATION_CLASS_DFLT :Εξ ορισμού σταθμός +STR_STATION_CLASS_DFLT :Προεπιλεγμένος +STR_STATION_CLASS_DFLT_STATION :Προεπιλεγμένος σταθμός +STR_STATION_CLASS_DFLT_ROADSTOP :Προεπιλεγμένη οδική στάση STR_STATION_CLASS_WAYP :Σημείο καθοδηγήσης +STR_STATION_CLASS_WAYP_WAYPOINT :Προεπιλεγμένο σημείο διαδρομής # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Επιλογή Σηματοδότη @@ -3046,6 +3118,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Ιδιο STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Ιδιοκτήτης του σιδηροδρόμου: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Τοπική αρχή: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Καμιά +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Συντεταγμένες: {LTBLUE}{NUM} x {NUM} x {NUM} STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Κατασκευή: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Κατηγορία σταθμού: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Τύπος σταθμού: {LTBLUE}{STRING} @@ -3260,6 +3333,7 @@ STR_MAPGEN_DATE :{BLACK}Ημερ STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Αριθμός βιομηχανιών: STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Επιλέξτε την πυκνότητα των βιομηχανιών ή έναν προσαρμοσμένο αριθμό STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Υψηλότερη κορυφή: +STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Επιλέξτε την υψηλότερη κορυφή που θα προσπαθήσει να δημιουργήσει το παιχνίδι, μετρημένη σε υψόμετρο πάνω από την επιφάνεια της θάλασσας STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Αύξηση του μέγιστου ύψους της υψηλότερης κορυφής στον χάρτη κατά ένα STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Μειώστε το μέγιστο ύψος της υψηλότερης κορυφής στον χάρτη κατά ένα STR_MAPGEN_SNOW_COVERAGE :{BLACK}Κάλυψη χιονιού: @@ -3272,6 +3346,7 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Μείω STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Τύπος εδάφους: STR_MAPGEN_SEA_LEVEL :{BLACK}Επίπεδο θάλασσας: +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Επιλογή του επιπέδου θάλασσας STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Ποτάμια: STR_MAPGEN_SMOOTHNESS :{BLACK}Ομαλότητα: STR_MAPGEN_VARIETY :{BLACK}Διανομή ποικιλομορφίας: @@ -3280,7 +3355,7 @@ STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Δημι STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Ρυθμίσεις NewGRF STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Εμφάνιση ρυθμίσεων NewGRF STR_MAPGEN_AI_SETTINGS :{BLACK}Ρυθμίσεις AI -STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Εμφάνιση ρυθμίσεων AI +STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Εμφάνιση ρυθμίσεων ΤΝ STR_MAPGEN_GS_SETTINGS :{BLACK}Ρυθμίσεις σενάριου παιχνιδιού STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Εμφάνιση ρυθμίσεων σενάριου παιχνιδιού @@ -3322,7 +3397,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Χειρ STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Περιστροφή χάρτη υψομετρίας: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Όνομα χάρτη υψομετρίας: +STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}Το όνομα του αρχείου χάρτη υψομετρίας STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Μέγεθος: +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}Το μέγεθος της εικόνας χάρτη υψομετρίας. Για καλύτερα αποτελέσματα, κάθε διάσταση πρέπει να ταιριάζει με μια διαθέσιμη διάσταση χάρτη του OpenTTD, όπως 256, 512, 1024 κλπ. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} × {NUM} STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Αναμενόμενο ύψος κορυφής @@ -3577,6 +3654,8 @@ STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} παραδόθηκε STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (ακόμη απαιτείται) STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (παραδόθηκε) +STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Η πόλη επεκτείνεται κάθε {ORANGE}{UNITS_DAYS_OR_SECONDS} +STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Η πόλη επεκτείνεται κάθε {ORANGE}{UNITS_DAYS_OR_SECONDS} (χρηματοδοτούμενη) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Η πόλη {RED}δεν{BLACK} επεκτείνεται STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Επίπεδο θορύβου στη πόλη: {ORANGE}{COMMA}{BLACK} μέγιστο: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Κεντράρισμα της εικόνας στην τοποθεσία της πόλης. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία της πόλης @@ -3616,6 +3695,8 @@ STR_LOCAL_AUTHORITY_ACTION_BRIBE :Δωροδοκ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Έναρξη μικρής τοπικής διαφημιστικής καμπάνιας, για να προσελκύσετε περισσότερους επιβάτες και εμπορεύματα στις μεταφορικές σας υπηρεσίες.{}Παρέχει μία προσωρινή ώθηση στην βαθμολογία σταθμών σε μία μικρή ακτίνα γύρω από το κέντρο της πόλης.{} Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Έναρξη μεσαίας τοπικής διαφημιστικής καμπάνιας, για να προσελκύσετε περισσότερους επιβάτες και εμπορεύματα στις μεταφορικές σας υπηρεσίες.{}Παρέχει μία προσωρινή ώθηση στην βαθμολογία σταθμών σε μία μεσαία ακτίνα γύρω από το κέντρο της πόλης.{} Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Έναρξη μεγάλης τοπικής διαφημιστικής καμπάνιας, για να προσελκύσετε περισσότερους επιβάτες και εμπορεύματα στις μεταφορικές σας υπηρεσίες.{}Παρέχει μία προσωρινή ώθηση στην βαθμολογία σταθμού σε μία μεγάλη ακτίνα γύρω από το κέντρο της πόλης.{}{POP_COLOUR} Κόστος: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Χρηματοδοτήστε την ανακατασκευή του αστικού οδικού δικτύου.{}Προκαλεί σημαντική αναστάτωση της οδικής κυκλοφορίας για έως και 6 μήνες.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}Χρηματοδοτήστε την ανακατασκευή του αστικού οδικού δικτύου.{}Προκαλεί σημαντική αναστάτωση της οδικής κυκλοφορίας για έως και 6 λεπτά.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Χτίστε ένα άγαλμα προς τιμήν της εταιρίας σας.{}Παρέχει μία μόνιμη ώθηση στην βαθμολογία σταθμών σε αυτή την πόλη.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Χρηματοδοτήστε την κατασκευή νέων κτιρίων στην πόλη.{}Παρέχει μία προσωρινή ώθηση στην ανάπτυξη αυτής της πόλης.{} Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Αγοράστε αποκλειστικά δικαιώματα μεταφοράς στην πόλη για 12 μήνες.{}Η δημοτική αρχή δεν θα επιτρέψει στους επιβάτες και στο φορτίο να χρησιμοποιούν τους σταθμούς των ανταγωνιστών σας. Μια επιτυχημένη δωροδοκία από έναν ανταγωνιστή θα ακυρώσει αυτό το συμβόλαιο.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} @@ -3669,8 +3750,11 @@ STR_SUBSIDIES_OFFERED_TITLE :{BLACK}Τρέχ STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING} από {STRING} προς {STRING}{YELLOW} ({STRING}) STR_SUBSIDIES_NONE :{ORANGE}- Καμία - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Υπηρεσίες που έχουν χρηματοδοτηθεί: +STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} από τον σταθμό {STRING} προς τον σταθμό {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Πατήστε στην υπηρεσία για κεντράρισμα στην βιομηχανία/πόλη. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία της βιομηχανίας/πόλης STR_SUBSIDIES_OFFERED_EXPIRY_DATE :ανά {DATE_SHORT} +STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :έως {DATE_SHORT} +STR_SUBSIDIES_SUBSIDISED_EXPIRY_TIME :{UNITS_MONTHS_OR_MINUTES} απομένουν # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Βιβλίο Ιστορίας @@ -3693,6 +3777,7 @@ STR_STATION_LIST_STATION :{YELLOW}{STATIO STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- Κανένας - STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Επιλογή όλων των εγκαταστάσεων +STR_STATION_LIST_CARGO_FILTER_ALL_AND_NO_RATING :Όλα τα είδη φορτίων και χωρίς βαθμολογία # Station view window STR_STATION_VIEW_CAPTION :{WHITE}{STATION} {STATION_FEATURES} @@ -3708,6 +3793,8 @@ STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :Η {YELLOW}{COM STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Βαθμολογίες STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Εμφάνιση στατιστικών σταθμού +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MONTH :{BLACK}Προμήθεια ανά μήνα και τοπική βαθμολογία: +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MINUTE :{BLACK}Προμήθεια ανά λεπτό και τοπική βαθμολογία: STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) STR_STATION_VIEW_GROUP :{BLACK}Ομαδοποίηση από @@ -3768,6 +3855,8 @@ STR_EDIT_WAYPOINT_NAME :{WHITE}Διαμ # Finances window STR_FINANCES_CAPTION :{WHITE}{COMPANY} Οικονομικά {BLACK}{COMPANY_NUM} STR_FINANCES_YEAR :{WHITE}{NUM} +STR_FINANCES_YEAR_CAPTION :{WHITE}Έτος +STR_FINANCES_PERIOD_CAPTION :{WHITE}Περίοδος ###length 3 STR_FINANCES_REVENUE_TITLE :{WHITE}Έσοδα @@ -3779,7 +3868,7 @@ STR_FINANCES_CAPITAL_EXPENSES_TITLE :{WHITE}Έξοδ STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Κατασκευές STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Νέα Οχήματα STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Λειτουργικά Έξοδα Τρένων -STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Λειτουργικά Έξοδα Οχημάτων +STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Οχήματα STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Αεροσκάφη STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Λειτουργικά Έξοδα Πλοίων STR_FINANCES_SECTION_INFRASTRUCTURE :{GOLD}Υποδομές @@ -3794,7 +3883,7 @@ STR_FINANCES_SECTION_OTHER :{GOLD}Άλλα STR_FINANCES_TOTAL_CAPTION :{WHITE}Σύνολο STR_FINANCES_NEGATIVE_INCOME :-{CURRENCY_LONG} STR_FINANCES_ZERO_INCOME :{CURRENCY_LONG} -STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG} +STR_FINANCES_POSITIVE_INCOME :+{CURRENCY_LONG} STR_FINANCES_PROFIT :{WHITE}Κέρδος STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Υπόλοιπο Τραπέζης STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Τα χρήματα σου @@ -3806,7 +3895,7 @@ STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENC STR_FINANCES_BORROW_BUTTON :{BLACK}Δανεισμός {CURRENCY_LONG} STR_FINANCES_BORROW_TOOLTIP :{BLACK}Αύξηση του ποσού του δανείου. Πατήστε Ctrl+Κλικ για να δανειστείτε όσο περισσότερο γίνεται STR_FINANCES_REPAY_BUTTON :{BLACK}Αποπληρωμή {CURRENCY_LONG} -STR_FINANCES_REPAY_TOOLTIP :{BLACK}Αποπληρωμή μέρους του δανείου. Με Ctrl+Κλικ αποπληρώνετε όσο περισσότερο γίνεται +STR_FINANCES_REPAY_TOOLTIP :{BLACK}Αποπληρωμή μέρους του δανείου. Πατήστε Ctrl+Κλικ για να αποπληρώσετε όσο περισσότερο γίνεται STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Υποδομή # Company view @@ -3840,6 +3929,8 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Λεπτ STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Προβολή λεπτομερούς μέτρησης υποδομών STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Δώστε χρήματα STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Δώστε χρήματα σε αυτή την εταρία +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Εχθρική εξαγορά +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Κάντε μια εχθρική εξαγορά αυτής της εταιρείας STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Νέο Πρόσωπο STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Επιλογή νέου προσώπου διευθυντή @@ -3867,6 +3958,8 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Κανά STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Σταθμοί: STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Τετραγωνίδια σταθμού STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Αεροδρόμια +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR :{WHITE}{CURRENCY_LONG}/έτος +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD :{WHITE}{CURRENCY_LONG}/περίοδο # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Βιομηχανίες @@ -3926,6 +4019,9 @@ 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_PROFIT_THIS_PERIOD_LAST_PERIOD :{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 :Στείλτε στο Αμαξοστάσιο @@ -3969,7 +4065,9 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Αφαίρεσ STR_GROUP_RENAME_CAPTION :{BLACK}Μετονομασία μίας ομάδας STR_GROUP_PROFIT_THIS_YEAR :Κέρδος τρέχοντος έτους: +STR_GROUP_PROFIT_THIS_PERIOD :Κέρδος τρέχουσας περιόδου: STR_GROUP_PROFIT_LAST_YEAR :Κέρδος προηγούμενου έτους +STR_GROUP_PROFIT_LAST_PERIOD :Κέρδος προηγούμενης περιόδου: STR_GROUP_OCCUPANCY :Τρέσουσα χρήση: STR_GROUP_OCCUPANCY_VALUE :{NUM}% @@ -3996,6 +4094,8 @@ STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Ταχύ STR_PURCHASE_INFO_SPEED :{BLACK}Ταχύτητα: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Ταχύτητα στον ωκεανό: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Ταχύτητα σε κανάλι/ποταμό: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_RUNNINGCOST_YEAR :{BLACK}Τρέχον κόστος: {GOLD}{CURRENCY_LONG}/έτος +STR_PURCHASE_INFO_RUNNINGCOST_PERIOD :{BLACK}Τρέχον κόστος: {GOLD}{CURRENCY_LONG}/περίοδο STR_PURCHASE_INFO_CAPACITY :{BLACK}Χωρητικότητα: {GOLD}{CARGO_LONG} {STRING} STR_PURCHASE_INFO_REFITTABLE :(μετατρέψιμο) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Έτος σχεδίασης: {GOLD}{NUM}{BLACK} Χρόνος ζωής: {GOLD}{COMMA} χρόν{P ο ια} @@ -4345,6 +4445,7 @@ STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Ονομ STR_VEHICLE_INFO_AGE :{COMMA} χρόν{P ος ια} ({COMMA}) STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} χρόν{P ος ια} ({COMMA}) STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Ηλικία: {LTBLUE}{STRING}{BLACK} Λειτουργικό Κόστος: {LTBLUE}{CURRENCY_LONG}/έτος +STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Ηλικία: {LTBLUE}{STRING}{BLACK} Λειτουργικό Κόστος: {LTBLUE}{CURRENCY_LONG}/περίοδο STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Μέγ. ταχύτητα: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Μεγ. ταχύτητα: {LTBLUE}{VELOCITY} {BLACK}Τύπος αεροσκάφους: {LTBLUE}{STRING} @@ -4367,6 +4468,10 @@ STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Έσοδ STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Διάστημα μεταξύ επισκευών: {LTBLUE}{COMMA}{NBSP}ημέρες{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Διάστημα μεταξύ επισκευών: {LTBLUE}{COMMA}{NBSP}λεπτά{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Διάστημα επισκευών: {LTBLUE}{COMMA}%{BLACK} {STRING} +STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Τελευταίο service: {LTBLUE}{DATE_LONG} +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Τελευταίο service: {LTBLUE}{NUM} λεπτ{P 0 ό ά} πριν +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Αύξηση του διαστήματος συντήρησης κατά 10 ημέρες. Ctrl+Click για αύξηση του διαστήματος συντήρησης κατά 5 ημέρες +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Αύξηση του διαστήματος συντήρησης κατά 5 λεπτά. Ctrl+Click για αύξηση του διαστήματος συντήρησης κατά 1 λεπτό STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :Μειώστε το διάστημα μεταξύ των σέρβις κατά 10 ημέρες. Ctrl+Click για να μειώσετε το διάστημα συντήρησης κατά 5 ημέρες STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :Μειώστε το διάστημα μεταξύ των σέρβις κατά 5 λεπτά. Ctrl+Click για να μειώσετε το διάστημα συντήρησης κατά 1 λεπτό STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :Μειώστε το διάστημα μεταξύ των σέρβις κατά 10 τοις εκατό. Ctrl+Click για να μειώσετε το διάστημα συντήρησης κατά 5 τοις εκατό. @@ -4650,6 +4755,9 @@ STR_TIMETABLE_SCHEDULED :{BLACK}Προγ STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Εναλλαγή μεταξύ αναμενόμενης και προγραμματισμένης STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} δευτ. +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :D: {COLOUR}{COMMA} δευτ. # Date window (for timetable) @@ -4677,7 +4785,7 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Ταύτ STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Μεταβολή της ταύτισης μεγέθους όταν η γίνεται σύγκριση μιας καταχώρησης της ΑΙ με το αλφαριθμητικό παύσης STR_AI_DEBUG_CONTINUE :{BLACK}Συνέχεια STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Συνέχιση του παιχνιδιού και της λειτουργίας της AI -STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Εμφάνιση της εξόδου αποσφαλμάτωσης αυτής της AI +STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Εμφάνιση της εξόδου αποσφαλμάτωσης αυτής της AI. Με Ctrl+Κλικ ανοίγει νέο παράθυρο εμφάνισης STR_AI_GAME_SCRIPT :{BLACK}Δέσμη Ενεργειών Παιχνιδιού STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Έλεγχος ιστορικού δέσμης ενεργειών παιχνιδιού @@ -4686,14 +4794,16 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Μια STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Το παράθυρο αποσφαλμάτωσης ΑΙ και δέσμης ενεργειών είναι διαθέσιμο μόνο για τον διακομιστή # AI configuration window -STR_AI_CONFIG_CAPTION_AI :{WHITE}Ρύθμιση ΤΝ -STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Ρύθμηση δέσμης ενεργειών παιχνιδιού +STR_AI_CONFIG_CAPTION_AI :{WHITE}Ρυθμίσεις ΤΝ +STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Ρυθμίσεις δέσμης ενεργειών παιχνιδιού STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Η Δέσμη Ενεργειών παιχνιδιού που θα φορτωθεί στο επόμενο παιχνίδι STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Οι AIs που θα φορτωθούν στο επόμενο παιχνίδι STR_AI_CONFIG_HUMAN_PLAYER :Ανθρώπινος παίκτης STR_AI_CONFIG_RANDOM_AI :Τυχαία AI STR_AI_CONFIG_NONE :{G=f}(καμία) +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 0 ό ά} STR_AI_CONFIG_MOVE_UP :{BLACK}Μετακίνηση Πάνω STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Μετακίνηση της επιλεγμένης AI πάνω στη λίστα @@ -4706,7 +4816,7 @@ STR_AI_CONFIG_AI :{SILVER}AI 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}Ρύθμιση των παραμέτρων της Δέσμης Ενεργειών @@ -4743,15 +4853,25 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN # Textfile window +STR_TEXTFILE_JUMPLIST :{WHITE}Πίνακας περιεχομένων +STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}Γρήγορη μετάβαση σε μια ενότητα του εμφανιζόμενου αρχείου μέσω αυτής της λίστας +STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING} +STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Πάει προς τα πίσω στο ιστορικό πλοήγησης +STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Παει προς τα εμπρός στο ιστορικό πλοήγησης STR_TEXTFILE_WRAP_TEXT :{WHITE}Αναδίπλωση κειμένου STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Αναδίπλωση του κειμένου του παραθύρου ώστε να χωρά χωρίς να απαιτέιται κύλιση -STR_TEXTFILE_VIEW_README :{BLACK}Εμφάνιση readme +STR_TEXTFILE_VIEW_README :{BLACK}Readme +STR_TEXTFILE_VIEW_README_TOOLTIP :Προβολή αρχείου readme για αυτό το περιεχόμενο STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Ιστορικό αλλαγών +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Προβολή αρχείου καταγραφής αλλαγών για αυτό το περιεχόμενο STR_TEXTFILE_VIEW_LICENCE :{BLACK}Άδεια +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Προβολή άδειας για αυτό το περιεχόμενο ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} readme του {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{G=m}{WHITE}{STRING} ιστορικό αλλαγών του {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} άδεια του {STRING} +STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Προεπισκόπηση του αποτελέσματος της έρευνας +STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}Έγγραφο OpenTTD '{STRING}' # Vehicle loading indicators @@ -5192,11 +5312,23 @@ 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_RAIL_STATION :{WHITE}Δεν υπάρχει σταθμός τραίνου +STR_ERROR_NO_BUS_STATION :{WHITE}Δεν υπάρχει σταθμός λεωφορείων +STR_ERROR_NO_TRUCK_STATION :{WHITE}Δεν υπάρχει σταθμός φορτηγών +STR_ERROR_NO_DOCK :{WHITE}Δεν υπάρχει λιμάνι +STR_ERROR_NO_AIRPORT :{WHITE}Δεν υπάρχει αεροδρόμιο/ελικοδρόμιο +STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Δεν υπάρχουν στάσεις με συμβατό τύπο δρόμου +STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Δεν υπάρχουν στάσεις με συμβατό τύπο τραμ +STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Δεν υπάρχουν στάσεις που να είναι κατάλληλες για αρθρωτά οδικά οχήματα.{}Τα αρθρωτά οδικά οχήματα απαιτούν μια στάση-πέρασμα (drive-through) και όχι κλειστή στάση +STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Δεν υπάρχει σιδηροδρομικό σημείο +STR_ERROR_NO_BUOY :{WHITE}Δεν υπάρχει σημαδούρα # Timetable related errors STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Δεν μπορεί να δρομολογηθεί το όχημα... STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Τα οχήματα μπορούν να περιμένουν μόνο στους σταθμούς STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Αυτό το όχημα δεν σταματάει σε αυτόν τον σταθμό +STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... το χρονοδιάγραμμα δρομολογίων είναι ελλιπές +STR_ERROR_TIMETABLE_NOT_STARTED :{WHITE}... το χρονοδιάγραμμα δρομολογίων δεν έχει ξεκινήσει ακόμα # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... πάρα πολλά σήματα @@ -5686,17 +5818,21 @@ STR_CURRENCY_SHORT_GIGA :{NBSP}Δις STR_CURRENCY_SHORT_TERA :{NBSP}tn 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} STR_JUST_DATE_LONG :{DATE_LONG} STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} +STR_JUST_STRING1 :{STRING} +STR_JUST_STRING2 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index c6fca58bb0..6a34cdf651 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -2575,6 +2575,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}O seu no STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}O seu nome do seu servidor não foi definido. O nome pode ser definido no topo da janela de Multi-jogador STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}A revisão deste cliente não condiz com a revisão do servidor STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Palavra-chave incorrecta +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Você não está na lista de clientes permitidos STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Servidor cheio STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Foi banido deste servidor STR_NETWORK_ERROR_KICKED :{WHITE}Você foi expulso do jogo @@ -2602,6 +2603,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :foi recebido um STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :revisão incorrecta STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :nome já está a ser utilizado STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :palavra-chave incorrecta +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :não está na lista de permissões STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :ID da empresa errado na aplicação de rede STR_NETWORK_ERROR_CLIENT_KICKED :avisado pelo servidor STR_NETWORK_ERROR_CLIENT_CHEATER :estava a tentar usar batota @@ -4448,10 +4450,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Capacida STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Créditos de Transferência: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Intervalo de manutenção: {LTBLUE}{COMMA}{NBSP}dias{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Intervalo de manutenção: {LTBLUE}{COMMA}{NBSP}minutos{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Intervalo de manutenção: {LTBLUE}{COMMA}{NBSP}minuto{P "" s}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Intervalo de manutenção: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Última manutenção: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Última manutenção: {LTBLUE}{NUM} minutos atrás +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Última manutenção: {LTBLUE}{NUM} minuto{P "" s} atrás STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Aumentar o intervalo de manutenção em 10 dias. Ctrl+Clique para aumentar o intervalo de manutenção em 5 dias STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Aumentar o intervalo de manutenção em 5 minutos. Ctrl+Clique para aumentar o intervalo de manutenção em 1 minuto STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Aumentar o intervalo de manutenção em 10%. Ctrl+Clique para aumentar o intervalo de manutenção em 5% @@ -4994,7 +4996,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Não é STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Não é possível construir sede da empresa... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Não é possível construir localidades +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Não é possível construir localidades... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Não é possível renomear localidade... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Não é possível construir uma localidade aqui... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Não é possível expandir localidade... diff --git a/src/lang/russian.txt b/src/lang/russian.txt index a9bd38bb6a..e517458adf 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -4636,10 +4636,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Ёмко STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Выручка перевозки: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}ТО каждые {LTBLUE}{COMMA}{NBSP}дней{BLACK}. {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}ТО каждые {LTBLUE}{COMMA}{NBSP}минут{BLACK}. {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}ТО кажд{P 0 ую ые ые} {LTBLUE}{COMMA}{NBSP}минут{P у ы ""}{BLACK}. {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}ТО при сниж. на {LTBLUE}{COMMA}%{BLACK}. {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :ТО: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :ТО: {LTBLUE}{NUM}{NBSP}мин. назад +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :ТО: {LTBLUE}{NUM} мин. назад STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Увеличить интервал ТО на 10{NBSP}дней. Ctrl+щелчок{NBSP}- увеличить на 5{NBSP}дней. STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Увеличить интервал ТО на 5{NBSP}минут. Ctrl+щелчок{NBSP}- увеличить на 1{NBSP}минуту. STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Увеличить интервал ТО на 10%. Ctrl+щелчок{NBSP}- увеличить на 5%. @@ -5459,7 +5459,7 @@ STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Нево STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Невозможно продать самолёт... STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Слишком много транспорта в игре -STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Невозможно изменить частоту тех. обслуживания... +STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Невозможно изменить частоту технического обслуживания... STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... транспортное средство уничтожено diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 745aded6e7..f6bed665f7 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1359,7 +1359,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :汽车斜坡坡 STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :设置对汽车而言,一格斜坡的坡度大小。数值越高,坡度越大,汽车越难爬上斜坡。 STR_CONFIG_SETTING_FORBID_90_DEG :禁止列车直角转向:{STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :当相邻的两个方块上有一条水平轨道和一条垂直轨道相接时,就会形成一个90度的转角,火车在穿越此方块边界时将转弯90度,而不是像其他形式的轨道转弯时形成的45度转角。如果打开此选项,那么火车将无法在这样的转角转弯 +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :常见的转角均为 45 度,而相邻的两个方块上互相垂直的两条轨道相接会形成一个 90 度弯,从而使列车在穿越两方块边界时进行 90 度转向。如启用此设定,所有列车均不会进行 90 度转向。 STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :允许非毗邻站台合并:{STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :启用时允许玩家用 键操作以合并不相邻的站台与车站。 @@ -1501,7 +1501,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :日历 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :挂钟 STR_CONFIG_SETTING_MINUTES_PER_YEAR :一年分钟数:{STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :选择游戏内一自然年的现实时间长度,默认为12分钟。设置为0则日期不会变化。此设定不会影响游戏的经济模拟系统,而且仅在启用挂钟计时模式时生效 +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :选择在挂钟模式下一年所对应的现实时间长度。默认为 12 分钟。设置为 0 则日期不会变化。此设定不会影响游戏的经济模拟系统,而且仅在启用挂钟计时模式时生效 STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special @@ -1529,7 +1529,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :错误信息持 STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :红色窗口显示错误信息的持续时间,在这个时间内一些紧急的错误信息不会自动关闭,必须手动关闭 STR_CONFIG_SETTING_HOVER_DELAY :显示提示信息:{STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :此设置决定鼠标停留在图标、按键或功能时显示提示信息的时间。如果此设置为 0,您就必须按鼠标右键来显示图标、按键或功能的提示信息 +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :设定将鼠标悬停在某些按钮上时显示工具使用提示前的延迟时间。选项设置为 0 时则必须按鼠标右键以显示工具提示 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :停留 {COMMA} 毫秒 ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :右键点击 @@ -1575,7 +1575,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :控制热带气 STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :地面粗糙度:{STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :选择在地图上的山丘密度和形状。光滑的地形会包含较少且较为广阔的山丘;粗糙的地形会包含更多,但是更小一些的山丘 +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :选择在地图上的山丘密度和形态。光滑的地形会包含较少且较为广阔的山丘;粗糙的地形则会包含更多且更小的山丘 ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :非常光滑 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :光滑 @@ -1754,7 +1754,7 @@ STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :建造铁路时 STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :建造铁路时自动移除路过的信号灯。注意,这可能导致火车事故。 STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :快进速度上限:{STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :限制快进时的最大速度。0 = 无限制(即电脑性能允许的最快速度)。低于 100% 的值将使游戏变慢。上限取决于您计算机的配置,并可能随着游戏情况浮动 +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :限制快进时的最大速度。0 = 无限制(即电脑性能允许的最快速度)。低于 100% 的值将使游戏变慢。游戏速度上限取决于计算机的配置,并可能随游戏当前状态浮动 STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% 正常游戏速度 ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :无限制(在您计算机允许的范围内) @@ -1966,7 +1966,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :允许 STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :允许,自定义城镇布局 STR_CONFIG_SETTING_TOWN_CARGOGENMODE :城镇货物生成:{STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :城镇房屋的客货产出与人口的关系。{}平方增长:两倍大小的城镇生产四倍的旅客。{}线性增长:两倍大小的城镇生产两倍的旅客 +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :城镇建筑的客货产出与人口的关系。{}平方增长:两倍大小的城镇生产四倍的旅客。{}线性增长:两倍大小的城镇生产两倍的旅客 ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :四倍(原版) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :线性 @@ -2574,7 +2574,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}你没 STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}你没有设置服务器名。玩家名可在联机游戏窗口的上面设置 STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}此客户端版本与服务器端不匹配 STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}密码错误 -STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}你不在白名单所允许的客户端范围内 +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}你不在白名单内 STR_NETWORK_ERROR_SERVER_FULL :{WHITE}服务器已经满员 STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}您已被该服务器封禁 STR_NETWORK_ERROR_KICKED :{WHITE}您已被踢出服务器 @@ -2602,7 +2602,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :收到异常数 STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :错误的版本 STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :已经有人用这个名字了 STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :错误的密码 -STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :不在允许列表内 +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :不在白名单内 STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :错误的公司ID于DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :被服务器踢出 STR_NETWORK_ERROR_CLIENT_CHEATER :正在尝试作弊 @@ -4449,7 +4449,7 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}运载 STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}联运账面收入:{LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}每 {LTBLUE}{COMMA}{NBSP}天进行维护{BLACK} 上次维护日期:{LTBLUE}{STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}维修间隔:{LTBLUE}{COMMA}{NBSP}分钟{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}维修间隔:{LTBLUE}{COMMA}{NBSP}分钟{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}维护间隔:{LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :最近保养:{LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :最近保养:{LTBLUE}{NUM}{NBSP}分钟前 diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 9502d5a9ff..502d461854 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1968,7 +1968,7 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Інтерва STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Налаштування інтервалу техогляду для нового повітряного транспорту (встановлений інтервал може бути змінено окремо для кожного транспортного засобу в його інтерфейсі). STR_CONFIG_SETTING_SERVINT_SHIPS :Інтервал техогляду водного транспорту: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Налаштування інтервалу техогляду для нового водного транспорту (встановлений інтервал може бути змінено окремо для кожного транспортного засобу в його інтерфейсі). -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}д{P 0 "ень" "ні" "нів"}/% +STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}д{P 0 "ень" "ні" "нів"}/хвилин{P 0 а и ""}/% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Відключено @@ -2410,7 +2410,7 @@ STR_LIVERY_SHIP_GROUP_EMPTY :Групи ко STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Не налаштовано груп повітряного транспорту ###length 23 -STR_LIVERY_DEFAULT :Стандартний колір +STR_LIVERY_DEFAULT :Базовий колір STR_LIVERY_STEAM :Паровоз STR_LIVERY_DIESEL :Тепловоз STR_LIVERY_ELECTRIC :Електровоз @@ -2930,7 +2930,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Пере STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Будувати станцію. Ctrl дозволяє об'єднання станцій. Утримуйте Shift для показу витрат на будівництво STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Будувати залізничні сигнали. Ctrl переключає семафори/світлові сигнали{}Протяжка мишою будує сигнали вздовж прямої ділянки рейок. Ctrl будує сигнали до наступної розв'язки чи сигналу{}Ctrl+клац мишою вмикає показ вікна вибору сигналів. Утримуйте Shift для показу витрат на будівництво STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Будувати залізничний міст. Утримуйте Shift для показу витрат на будівництво -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Будувати тунель. Утримуйте Shift для показу витрат на будівництво +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Будування тунелю. Утримуйте Shift для показу витрат на будівництво STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Будувати/демонтувати колію, сигнали, точки маршруту і станції. Утримання Ctrl також демонтує колію з точок маршрутів і станцій STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Модернізувати колію. Утримуйте Shift для показу витрат на модернізацію @@ -3009,7 +3009,7 @@ STR_BRIDGE_TUBULAR_SILICON :Трубчас STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Автомобільне будівництво STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Будівництво трамвайних колій STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Будувати дорогу. Ctrl+клац для знесення доріг. Утримуйте Shift для показу тільки витрат -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Будувати трамвайну колію. Ctrl переключає побудову/знесення для будівництва трамвайної колії. Утримуйте Shift для показу витрат на будівництво +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Будувати трамвайну колію. Ctrl+клац для знесення трамвайної колії. Утримуйте Shift для показу витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Будувати дорогу в режимі Автобудування. Ctrl+клац для знесення доріг. Утримуйте Shift для показу тільки витрат STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Будувати трамвайну колію в режимі Автобудування. Ctrl+клац для знесення колій. Утримуйте Shift для показу тільки витрат STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Будувати гараж (для будівництва і обслуговування автомобілів). Утримуйте Shift для показу витрат на будівництво @@ -3020,9 +3020,9 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Буду STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Побудувати вантажну трамвайну станцію. Ctrl+клац щоб обрати іншу зупинку для приєднання. Утримуйте Shift для показу тільки витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Вкл./відкл. односторонні дороги STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Будувати дорожній міст. Утримуйте Shift для показу тільки витрат на придбання -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Побудувати трамвайний міст. Утримуйте Shift для показу витрат на придбання +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Побудувати трамвайний міст. Утримуйте Shift для показу витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Будувати дорожній тунель. Утримуйте Shift для показу тільки витрат на придбання -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Побудувати трамвайний тунель. Утримуйте Shift для показу витрат на придбання +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Будування трамвайного тунелю. Утримуйте Shift для показу витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Будувати/зруйнувати дорогу STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Будувати/демонтувати колію STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Модернізувати дорогу. Утримуйте Shift для показу витрат на модернізацію @@ -3341,7 +3341,7 @@ STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Кіль STR_FRAMERATE_RATE_BLITTER :{BLACK}Виведення на екран: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Кількість кадрів побудованих за секунду STR_FRAMERATE_SPEED_FACTOR :{BLACK}Наявна швидкість гри: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK} Як швидко гра біжить в даний час, в порівнянні з очікуваною швидкістю при звичайній швидкості моделювання. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Швидкість перебігу гри в поточний момент, порівняно з очікуваною швидкістю при звичайному перебігу STR_FRAMERATE_CURRENT :{WHITE}Зараз STR_FRAMERATE_AVERAGE :{WHITE}Середнє STR_FRAMERATE_MEMORYUSE :{WHITE}Пам'ять @@ -3457,7 +3457,7 @@ STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Ство STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Налаштування NewGRF STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Показати налаштування NewGRF STR_MAPGEN_AI_SETTINGS :{BLACK}Налаштування ШІ -STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Показати усі налаштування +STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Показати налаштування ШІ STR_MAPGEN_GS_SETTINGS :{BLACK}Налаштування скрипту гри STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Показати налаштування ігрового скрипту @@ -3822,7 +3822,7 @@ STR_GOALS_TEXT :{ORANGE}{STRING STR_GOALS_NONE :{ORANGE}- нема - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Клац мишею на цілі (меті) відобразить по центру виробництва/місто/клітинку у головному вікні. Ctrl+клац мишею відкриє міні-вікно +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Клац мишею на цілі відобразить по центру головного вікна виробництво/місто/клітинку. Ctrl+клац мишею відкриє нове вікно з видом на підприємство/місто/клітинку # Goal question window STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Питання diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index e2f8d89799..b23f17c21b 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -4449,7 +4449,7 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Sức ch STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Cước trung chuyển: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Tần suất bảo trì: {LTBLUE}{COMMA}{NBSP}ngày{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Tần suất phục vụ: {LTBLUE}{COMMA}{NBSP}phút{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Tần suất phục vụ: {LTBLUE}{COMMA}{NBSP}phút{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Tần suất bảo trì: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Lần bảo trì gần nhất: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Lần bảo trì gần nhất: {LTBLUE}{NUM} phút trước From c01bf06ee17cbd2442f8a662226742c0fe3762fb Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 23 Mar 2024 22:01:57 +0100 Subject: [PATCH 178/695] Codefix: some minor errors in tcp-game protocol documentation --- src/network/core/tcp_game.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/network/core/tcp_game.h b/src/network/core/tcp_game.h index cf1b8b92b2..a381f6aa3b 100644 --- a/src/network/core/tcp_game.h +++ b/src/network/core/tcp_game.h @@ -211,14 +211,14 @@ protected: /** * The client tells the server about the identity of the client: * string Name of the client (max NETWORK_NAME_LENGTH). - * uint8_t ID of the company to play as (1..MAX_COMPANIES). + * uint8_t ID of the company to play as (1..MAX_COMPANIES, or COMPANY_SPECTATOR). * @param p The packet that was just received. */ virtual NetworkRecvStatus Receive_CLIENT_IDENTIFY(Packet &p); /** * Indication to the client that it needs to authenticate: - * bool Whether to use the password in the key exchange. + * uint8_t The \c NetworkAuthenticationMethod to use. * 32 * uint8_t Public key of the server. * 24 * uint8_t Nonce for the key exchange. * @param p The packet that was just received. @@ -236,8 +236,8 @@ protected: /** * Send the response to the authentication request: * 32 * uint8_t Public key of the client. - * 8 * uint8_t Random message that got encoded and signed. * 16 * uint8_t Message authentication code. + * 8 * uint8_t Random message that got encoded and signed. * @param p The packet that was just received. */ virtual NetworkRecvStatus Receive_CLIENT_AUTH_RESPONSE(Packet &p); @@ -267,7 +267,6 @@ protected: /** * Request the map from the server. - * uint32_t NewGRF version (release versions of OpenTTD only). * @param p The packet that was just received. */ virtual NetworkRecvStatus Receive_CLIENT_GETMAP(Packet &p); From d09b5aaebafe1ef89195851a532f3f6d502437d6 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 25 Feb 2024 19:42:28 +0100 Subject: [PATCH 179/695] Codechange: use int32_t instead of uint16_t for scroll bar position/size/capacity --- src/airport_gui.cpp | 4 ++-- src/depot_gui.cpp | 4 ++-- src/framerate_gui.cpp | 10 ++++----- src/newgrf_debug_gui.cpp | 4 ++-- src/newgrf_gui.cpp | 18 ++++++++-------- src/order_gui.cpp | 4 ++-- src/settings_gui.cpp | 4 ++-- src/story_gui.cpp | 4 ++-- src/timetable_gui.cpp | 4 ++-- src/widget.cpp | 8 +++---- src/widget_type.h | 46 ++++++++++++++++++++++------------------ 11 files changed, 57 insertions(+), 53 deletions(-) diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index 6f942428f9..e0e1adf461 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -495,8 +495,8 @@ public: break; case WID_AP_AIRPORT_LIST: { - int num_clicked = this->vscroll->GetScrolledRowFromWidget(pt.y, this, widget, 0, this->line_height); - if (num_clicked == INT_MAX) break; + int32_t num_clicked = this->vscroll->GetScrolledRowFromWidget(pt.y, this, widget, 0, this->line_height); + if (num_clicked == INT32_MAX) break; const AirportSpec *as = AirportClass::Get(_selected_airport_class)->GetSpec(num_clicked); if (as->IsAvailable()) this->SelectOtherAirport(num_clicked); break; diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index a630bf26e4..ec1595460a 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -459,10 +459,10 @@ struct DepotWindow : Window { } ym = (y - matrix_widget->pos_y) % this->resize.step_height; - int row = this->vscroll->GetScrolledRowFromWidget(y, this, WID_D_MATRIX); + int32_t row = this->vscroll->GetScrolledRowFromWidget(y, this, WID_D_MATRIX); uint pos = (row * this->num_columns) + xt; - if (row == INT_MAX || this->vehicle_list.size() + this->wagon_list.size() <= pos) { + if (row == INT32_MAX || this->vehicle_list.size() + this->wagon_list.size() <= pos) { /* Clicking on 'line' / 'block' without a vehicle */ if (this->type == VEH_TRAIN) { /* End the dragging */ diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index 6ffacd73bd..7e32bd611b 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -601,7 +601,7 @@ struct FramerateWindow : Window { void DrawElementTimesColumn(const Rect &r, StringID heading_str, const CachedDecimal *values) const { const Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR); - uint16_t skip = sb->GetPosition(); + int32_t skip = sb->GetPosition(); int drawable = this->num_displayed; int y = r.top; DrawString(r.left, r.right, y, heading_str, TC_FROMSTRING, SA_CENTER, true); @@ -623,7 +623,7 @@ struct FramerateWindow : Window { void DrawElementAllocationsColumn(const Rect &r) const { const Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR); - uint16_t skip = sb->GetPosition(); + int32_t skip = sb->GetPosition(); int drawable = this->num_displayed; int y = r.top; DrawString(r.left, r.right, y, STR_FRAMERATE_MEMORYUSE, TC_FROMSTRING, SA_CENTER, true); @@ -657,7 +657,7 @@ struct FramerateWindow : Window { case WID_FRW_TIMES_NAMES: { /* Render a column of titles for performance element names */ const Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR); - uint16_t skip = sb->GetPosition(); + int32_t skip = sb->GetPosition(); int drawable = this->num_displayed; int y = r.top + GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal; // first line contains headings in the value columns for (PerformanceElement e : DISPLAY_ORDER_PFE) { @@ -701,8 +701,8 @@ struct FramerateWindow : Window { case WID_FRW_TIMES_AVERAGE: { /* Open time graph windows when clicking detail measurement lines */ const Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR); - int line = sb->GetScrolledRowFromWidget(pt.y, this, widget, WidgetDimensions::scaled.vsep_normal + GetCharacterHeight(FS_NORMAL)); - if (line != INT_MAX) { + int32_t line = sb->GetScrolledRowFromWidget(pt.y, this, widget, WidgetDimensions::scaled.vsep_normal + GetCharacterHeight(FS_NORMAL)); + if (line != INT32_MAX) { line++; /* Find the visible line that was clicked */ for (PerformanceElement e : DISPLAY_ORDER_PFE) { diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index b5135b552c..e470e55c71 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -589,8 +589,8 @@ struct NewGRFInspectWindow : Window { if (nif->variables == nullptr) return; /* Get the line, make sure it's within the boundaries. */ - int line = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_NGRFI_MAINPANEL, WidgetDimensions::scaled.frametext.top); - if (line == INT_MAX) return; + int32_t line = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_NGRFI_MAINPANEL, WidgetDimensions::scaled.frametext.top); + if (line == INT32_MAX) return; /* Find the variable related to the line */ for (const NIVariable *niv = nif->variables; niv->name != nullptr; niv++, line--) { diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 695cad546a..f534996a6b 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -146,11 +146,11 @@ static void ShowNewGRFInfo(const GRFConfig *c, const Rect &r, bool show_params) struct NewGRFParametersWindow : public Window { static GRFParameterInfo dummy_parameter_info; ///< Dummy info in case a newgrf didn't provide info about some parameter. GRFConfig *grf_config; ///< Set the parameters of this GRFConfig. - uint clicked_button; ///< The row in which a button was clicked or UINT_MAX. + int32_t clicked_button; ///< The row in which a button was clicked or INT_MAX when none is selected. bool clicked_increase; ///< True if the increase button was clicked, false for the decrease button. bool clicked_dropdown; ///< Whether the dropdown is open. bool closing_dropdown; ///< True, if the dropdown list is currently closing. - uint clicked_row; ///< The selected parameter + int32_t clicked_row; ///< The selected parameter, or INT_MAX when none is selected. int line_height; ///< Height of a row in the matrix widget. Scrollbar *vscroll; bool action14present; ///< True if action14 information is present. @@ -158,10 +158,10 @@ struct NewGRFParametersWindow : public Window { NewGRFParametersWindow(WindowDesc *desc, bool is_baseset, GRFConfig *c, bool editable) : Window(desc), grf_config(c), - clicked_button(UINT_MAX), + clicked_button(INT32_MAX), clicked_dropdown(false), closing_dropdown(false), - clicked_row(UINT_MAX), + clicked_row(INT32_MAX), editable(editable) { this->action14present = (c->num_valid_params != c->param.size() || !c->param_info.empty()); @@ -282,7 +282,7 @@ struct NewGRFParametersWindow : public Window { int button_y_offset = (this->line_height - SETTING_BUTTON_HEIGHT) / 2; int text_y_offset = (this->line_height - GetCharacterHeight(FS_NORMAL)) / 2; - for (uint i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < this->vscroll->GetCount(); i++) { + for (int32_t i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < this->vscroll->GetCount(); i++) { GRFParameterInfo &par_info = this->GetParameterInfo(i); uint32_t current_value = par_info.GetValue(this->grf_config); bool selected = (i == this->clicked_row); @@ -354,7 +354,7 @@ struct NewGRFParametersWindow : public Window { case WID_NP_BACKGROUND: { if (!this->editable) break; - uint num = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_NP_BACKGROUND); + int32_t num = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_NP_BACKGROUND); if (num >= this->vscroll->GetCount()) break; if (this->clicked_row != num) { @@ -493,15 +493,15 @@ struct NewGRFParametersWindow : public Window { } this->vscroll->SetCount(this->action14present ? this->grf_config->num_valid_params : this->grf_config->num_params); - if (this->clicked_row != UINT_MAX && this->clicked_row >= this->vscroll->GetCount()) { - this->clicked_row = UINT_MAX; + if (this->clicked_row != INT32_MAX && this->clicked_row >= this->vscroll->GetCount()) { + this->clicked_row = INT32_MAX; this->CloseChildWindows(WC_QUERY_STRING); } } /** When reset, unclick the button after a small timeout. */ TimeoutTimer unclick_timeout = {std::chrono::milliseconds(150), [this]() { - this->clicked_button = UINT_MAX; + this->clicked_button = INT32_MAX; this->SetDirty(); }}; }; diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 84d7f3e443..137fd1b76c 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -600,8 +600,8 @@ private: */ VehicleOrderID GetOrderFromPt(int y) { - int sel = this->vscroll->GetScrolledRowFromWidget(y, this, WID_O_ORDER_LIST, WidgetDimensions::scaled.framerect.top); - if (sel == INT_MAX) return INVALID_VEH_ORDER_ID; + int32_t sel = this->vscroll->GetScrolledRowFromWidget(y, this, WID_O_ORDER_LIST, WidgetDimensions::scaled.framerect.top); + if (sel == INT32_MAX) return INVALID_VEH_ORDER_ID; /* One past the orders is the 'End of Orders' line. */ assert(IsInsideBS(sel, 0, vehicle->GetNumOrders() + 1)); return sel; diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 4caed877d7..29f10e21f6 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2560,8 +2560,8 @@ struct GameSettingsWindow : Window { if (widget != WID_GS_OPTIONSPANEL) return; - uint btn = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_GS_OPTIONSPANEL, WidgetDimensions::scaled.framerect.top); - if (btn == INT_MAX || (int)btn < this->warn_lines) return; + int32_t btn = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_GS_OPTIONSPANEL, WidgetDimensions::scaled.framerect.top); + if (btn == INT32_MAX || btn < this->warn_lines) return; btn -= this->warn_lines; uint cur_row = 0; diff --git a/src/story_gui.cpp b/src/story_gui.cpp index 05d6bc44cc..f3ec75a53a 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -495,12 +495,12 @@ protected: * Get the total height of the content displayed in this window. * @return the height in pixels */ - uint GetContentHeight() + int32_t GetContentHeight() { this->EnsureStoryPageElementLayout(); /* The largest bottom coordinate of any element is the height of the content */ - uint max_y = std::accumulate(this->layout_cache.begin(), this->layout_cache.end(), 0, [](uint max_y, const LayoutCacheElement &ce) -> uint { return std::max(max_y, ce.bounds.bottom); }); + int32_t max_y = std::accumulate(this->layout_cache.begin(), this->layout_cache.end(), 0, [](int32_t max_y, const LayoutCacheElement &ce) -> int32_t { return std::max(max_y, ce.bounds.bottom); }); return max_y; } diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index 5f4f99758d..d55b7dc711 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -277,8 +277,8 @@ struct TimetableWindow : Window { int GetOrderFromTimetableWndPt(int y, [[maybe_unused]] const Vehicle *v) { - int sel = this->vscroll->GetScrolledRowFromWidget(y, this, WID_VT_TIMETABLE_PANEL, WidgetDimensions::scaled.framerect.top); - if (sel == INT_MAX) return INVALID_ORDER; + int32_t sel = this->vscroll->GetScrolledRowFromWidget(y, this, WID_VT_TIMETABLE_PANEL, WidgetDimensions::scaled.framerect.top); + if (sel == INT32_MAX) return INVALID_ORDER; assert(IsInsideBS(sel, 0, v->GetNumOrders() * 2)); return sel; } diff --git a/src/widget.cpp b/src/widget.cpp index 0e4f8cda46..dd91856b05 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -2262,13 +2262,13 @@ void NWidgetViewport::UpdateViewportCoordinates(Window *w) * @param widget Widget number of the widget clicked in. * @param padding Amount of empty space between the widget edge and the top of the first row. Default value is \c 0. * @param line_height Height of a single row. A negative value means using the vertical resize step of the widget. - * @return Row number clicked at. If clicked at a wrong position, #INT_MAX is returned. + * @return Row number clicked at. If clicked at a wrong position, #Scrollbar::npos is returned. */ -int Scrollbar::GetScrolledRowFromWidget(int clickpos, const Window * const w, WidgetID widget, int padding, int line_height) const +Scrollbar::size_type Scrollbar::GetScrolledRowFromWidget(int clickpos, const Window * const w, WidgetID widget, int padding, int line_height) const { - uint pos = w->GetRowFromWidget(clickpos, widget, padding, line_height); + int pos = w->GetRowFromWidget(clickpos, widget, padding, line_height); if (pos != INT_MAX) pos += this->GetPosition(); - return (pos >= this->GetCount()) ? INT_MAX : pos; + return (pos < 0 || pos >= this->GetCount()) ? Scrollbar::npos : pos; } /** diff --git a/src/widget_type.h b/src/widget_type.h index b7a8393fca..fad56477e3 100644 --- a/src/widget_type.h +++ b/src/widget_type.h @@ -678,12 +678,16 @@ public: * Scrollbar data structure */ class Scrollbar { +public: + using size_type = int32_t; + static constexpr size_type max_size_type = std::numeric_limits::max(); + static constexpr size_type npos = max_size_type; private: const bool is_vertical; ///< Scrollbar has vertical orientation. - uint16_t count; ///< Number of elements in the list. - uint16_t cap; ///< Number of visible elements of the scroll bar. - uint16_t pos; ///< Index of first visible item of the list. - uint16_t stepsize; ///< Distance to scroll, when pressing the buttons or using the wheel. + size_type count; ///< Number of elements in the list. + size_type cap; ///< Number of visible elements of the scroll bar. + size_type pos; ///< Index of first visible item of the list. + size_type stepsize; ///< Distance to scroll, when pressing the buttons or using the wheel. public: /** Stepping sizes when scrolling */ @@ -701,7 +705,7 @@ public: * Gets the number of elements in the list * @return the number of elements */ - inline uint16_t GetCount() const + inline size_type GetCount() const { return this->count; } @@ -710,7 +714,7 @@ public: * Gets the number of visible elements of the scrollbar * @return the number of visible elements */ - inline uint16_t GetCapacity() const + inline size_type GetCapacity() const { return this->cap; } @@ -719,7 +723,7 @@ public: * Gets the position of the first visible element in the list * @return the position of the element */ - inline uint16_t GetPosition() const + inline size_type GetPosition() const { return this->pos; } @@ -729,7 +733,7 @@ public: * @param item to check * @return true iff the item is visible */ - inline bool IsVisible(uint16_t item) const + inline bool IsVisible(size_type item) const { return IsInsideBS(item, this->GetPosition(), this->GetCapacity()); } @@ -751,7 +755,7 @@ public: { assert(stepsize > 0); - this->stepsize = ClampTo(stepsize); + this->stepsize = ClampTo(stepsize); } /** @@ -761,9 +765,9 @@ public: */ void SetCount(size_t num) { - assert(num <= MAX_UVALUE(uint16_t)); + assert(num < Scrollbar::max_size_type); - this->count = ClampTo(num); + this->count = ClampTo(num); /* Ensure position is within bounds */ this->SetPosition(this->pos); } @@ -775,9 +779,9 @@ public: */ void SetCapacity(size_t capacity) { - assert(capacity <= MAX_UVALUE(uint16_t)); + assert(capacity < Scrollbar::max_size_type); - this->cap = ClampTo(capacity); + this->cap = ClampTo(capacity); /* Ensure position is within bounds */ this->SetPosition(this->pos); } @@ -789,9 +793,9 @@ public: * @param position the position of the element * @return true iff the position has changed */ - bool SetPosition(int position) + bool SetPosition(size_type position) { - uint16_t old_pos = this->pos; + size_type old_pos = this->pos; this->pos = Clamp(position, 0, std::max(this->count - this->cap, 0)); return this->pos != old_pos; } @@ -820,7 +824,7 @@ public: * the window depending on where in the list it was. * @param position the position to scroll towards. */ - void ScrollTowards(int position) + void ScrollTowards(size_type position) { if (position < this->GetPosition()) { /* scroll up to the item */ @@ -831,7 +835,7 @@ public: } } - int GetScrolledRowFromWidget(int clickpos, const Window * const w, WidgetID widget, int padding = 0, int line_height = -1) const; + size_type GetScrolledRowFromWidget(int clickpos, const Window * const w, WidgetID widget, int padding = 0, int line_height = -1) const; /** * Get a pair of iterators for the range of visible elements in a container. @@ -841,7 +845,7 @@ public: template auto GetVisibleRangeIterators(Tcontainer &container) const { - assert(this->GetCount() == container.size()); // Scrollbar and container size must match. + assert((size_t)this->GetCount() == container.size()); // Scrollbar and container size must match. auto first = std::next(std::begin(container), this->GetPosition()); auto last = std::next(first, std::min(this->GetCapacity(), this->GetCount() - this->GetPosition())); return std::make_pair(first, last); @@ -860,9 +864,9 @@ public: template typename Tcontainer::iterator GetScrolledItemFromWidget(Tcontainer &container, int clickpos, const Window * const w, WidgetID widget, int padding = 0, int line_height = -1) const { - assert(this->GetCount() == container.size()); // Scrollbar and container size must match. - int row = this->GetScrolledRowFromWidget(clickpos, w, widget, padding, line_height); - if (row == INT_MAX) return std::end(container); + assert((size_t)this->GetCount() == container.size()); // Scrollbar and container size must match. + size_type row = this->GetScrolledRowFromWidget(clickpos, w, widget, padding, line_height); + if (row == Scrollbar::npos) return std::end(container); typename Tcontainer::iterator it = std::begin(container); std::advance(it, row); From caa7c44052bc213c3c99c2994dd34ae88e399243 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Fri, 22 Mar 2024 23:36:56 +0100 Subject: [PATCH 180/695] Cleanup: remove checks for old MSVC versions --- src/os/windows/win32.cpp | 2 +- src/stdafx.h | 27 ++++++--------------------- 2 files changed, 7 insertions(+), 22 deletions(-) diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index b198ed92c4..e5ddba94c0 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -259,7 +259,7 @@ void CreateConsole() return; } -#if defined(_MSC_VER) && _MSC_VER >= 1900 +#if defined(_MSC_VER) freopen("CONOUT$", "a", stdout); freopen("CONIN$", "r", stdin); freopen("CONOUT$", "a", stderr); diff --git a/src/stdafx.h b/src/stdafx.h index 096e8e6829..850d18adba 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -28,6 +28,12 @@ #if defined(__APPLE__) # include "os/macosx/osx_stdafx.h" +#else +/* It seems that we need to include stdint.h before anything else + * We need INT64_MAX, which for most systems comes from stdint.h. + * For OSX the inclusion is already done in osx_stdafx.h. */ +# define __STDC_LIMIT_MACROS +# include #endif /* __APPLE__ */ #if defined(__HAIKU__) @@ -37,15 +43,6 @@ # define _GNU_SOURCE #endif -/* It seems that we need to include stdint.h before anything else - * We need INT64_MAX, which for most systems comes from stdint.h. However, MSVC - * does not have stdint.h. - * For OSX the inclusion is already done in osx_stdafx.h. */ -#if !defined(__APPLE__) && (!defined(_MSC_VER) || _MSC_VER >= 1600) -# define __STDC_LIMIT_MACROS -# include -#endif - #include #include #include @@ -115,9 +112,6 @@ # pragma warning(disable: 4200) // nonstandard extension used : zero-sized array in struct/union # pragma warning(disable: 4355) // 'this' : used in base member initializer list -# if (_MSC_VER < 1400) // MSVC 2005 safety checks -# error "Only MSVC 2005 or higher are supported. MSVC 2003 and earlier are not! Upgrade your compiler." -# endif /* (_MSC_VER < 1400) */ # pragma warning(disable: 4291) // no matching operator delete found; memory will not be freed if initialization throws an exception (reason: our overloaded functions never throw an exception) # pragma warning(disable: 4996) // 'function': was declared deprecated # pragma warning(disable: 6308) // code analyzer: 'realloc' might return null pointer: assigning null pointer to 't_ptr', which is passed as an argument to 'realloc', will cause the original memory block to be leaked @@ -126,15 +120,6 @@ # pragma warning(disable: 6031) // code analyzer: Return value ignored: 'ReadFile' # pragma warning(disable: 6246) // code analyzer: Local declaration of 'statspec' hides declaration of the same name in outer scope. For additional information, see previous declaration at ... -# if (_MSC_VER == 1500) // Addresses item #13 on http://blogs.msdn.com/b/vcblog/archive/2008/08/11/tr1-fixes-in-vc9-sp1.aspx, for Visual Studio 2008 -# define _DO_NOT_DECLARE_INTERLOCKED_INTRINSICS_IN_MEMORY -# include -# endif - -# if (_MSC_VER < 1900) -# define inline __forceinline -# endif - # define CDECL _cdecl # if defined(_WIN32) && !defined(_WIN64) From 8928f4979af683003943b093952ad9a871d87bb1 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Sun, 24 Mar 2024 07:44:25 -0400 Subject: [PATCH 181/695] Change: Add dividers in vehicle group action dropdown (#12284) --- src/vehicle_gui.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index de65786ee5..99bb9dd9e5 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -454,17 +454,26 @@ DropDownList BaseVehicleListWindow::BuildActionDropdownList(bool show_autoreplac { DropDownList list; - if (show_autoreplace) list.push_back(std::make_unique(STR_VEHICLE_LIST_REPLACE_VEHICLES, ADI_REPLACE, false)); - list.push_back(std::make_unique(STR_VEHICLE_LIST_SEND_FOR_SERVICING, ADI_SERVICE, false)); - list.push_back(std::make_unique(this->vehicle_depot_name[this->vli.vtype], ADI_DEPOT, false)); + /* Autoreplace actions. */ + if (show_autoreplace) { + list.push_back(std::make_unique(STR_VEHICLE_LIST_REPLACE_VEHICLES, ADI_REPLACE, false)); + list.push_back(std::make_unique(-1, false)); + } + /* Group actions. */ if (show_group) { list.push_back(std::make_unique(STR_GROUP_ADD_SHARED_VEHICLE, ADI_ADD_SHARED, false)); list.push_back(std::make_unique(STR_GROUP_REMOVE_ALL_VEHICLES, ADI_REMOVE_ALL, false)); + list.push_back(std::make_unique(-1, false)); } else if (show_create) { list.push_back(std::make_unique(STR_VEHICLE_LIST_CREATE_GROUP, ADI_CREATE_GROUP, false)); + list.push_back(std::make_unique(-1, false)); } + /* Depot actions. */ + list.push_back(std::make_unique(STR_VEHICLE_LIST_SEND_FOR_SERVICING, ADI_SERVICE, false)); + list.push_back(std::make_unique(this->vehicle_depot_name[this->vli.vtype], ADI_DEPOT, false)); + return list; } From eebfb83aa206de90df220d2629812a026795aa4d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 24 Mar 2024 15:53:26 +0000 Subject: [PATCH 182/695] Fix 2fd9096: Label for fruit incorrectly changed to `FRUI` from `FRUT`. (#12367) --- src/cargo_type.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cargo_type.h b/src/cargo_type.h index 3b0380f429..27dc09cbe9 100644 --- a/src/cargo_type.h +++ b/src/cargo_type.h @@ -47,7 +47,7 @@ static constexpr CargoLabel CT_FOOD = CargoLabel{'FOOD'}; /* Tropic */ static constexpr CargoLabel CT_RUBBER = CargoLabel{'RUBR'}; -static constexpr CargoLabel CT_FRUIT = CargoLabel{'FRUI'}; +static constexpr CargoLabel CT_FRUIT = CargoLabel{'FRUT'}; static constexpr CargoLabel CT_MAIZE = CargoLabel{'MAIZ'}; static constexpr CargoLabel CT_COPPER_ORE = CargoLabel{'CORE'}; static constexpr CargoLabel CT_WATER = CargoLabel{'WATR'}; From 97c173854106b7e901146d6f15ef155aefac81f5 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 24 Mar 2024 18:35:33 +0000 Subject: [PATCH 183/695] Fix #12368: Incorrect offset for click position within industry chain window. (#12370) --- src/industry_gui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index cf185cd3cb..70c83ccf73 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -3040,7 +3040,7 @@ struct IndustryCargoesWindow : public Window { pt.x -= nw->pos_x; pt.y -= nw->pos_y; - int vpos = WidgetDimensions::scaled.framerect.top + CargoesField::small_height - this->vscroll->GetPosition() * nw->resize_y; + int vpos = WidgetDimensions::scaled.frametext.top + CargoesField::small_height - this->vscroll->GetPosition() * nw->resize_y; if (pt.y < vpos) return false; int row = (pt.y - vpos) / CargoesField::normal_height; // row is relative to row 1. @@ -3048,7 +3048,7 @@ struct IndustryCargoesWindow : public Window { vpos = pt.y - vpos - row * CargoesField::normal_height; // Position in the row + 1 field row++; // rebase row to match index of this->fields. - int xpos = 2 * WidgetDimensions::scaled.framerect.left + ((this->ind_cargo < NUM_INDUSTRYTYPES) ? 0 : (CargoesField::industry_width + CargoesField::cargo_field_width) / 2); + int xpos = 2 * WidgetDimensions::scaled.frametext.left + ((this->ind_cargo < NUM_INDUSTRYTYPES) ? 0 : (CargoesField::industry_width + CargoesField::cargo_field_width) / 2); if (pt.x < xpos) return false; int column; for (column = 0; column <= 5; column++) { From 40a75e0b8dc317ada600a895633b8919eca0e7f4 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 25 Mar 2024 04:40:35 +0000 Subject: [PATCH 184/695] Update: Translations from eints swedish: 19 changes by joeax910 norwegian (bokmal): 2 changes by eriksorngard ukrainian: 6 changes by StepanIvasyn french: 3 changes by ottdfevr portuguese (brazilian): 23 changes by pasantoro polish: 1 change by pAter-exe --- src/lang/brazilian_portuguese.txt | 46 +++++++++++++++---------------- src/lang/french.txt | 6 ++-- src/lang/norwegian_bokmal.txt | 4 +-- src/lang/polish.txt | 2 +- src/lang/swedish.txt | 36 ++++++++++++------------ src/lang/ukrainian.txt | 11 ++++---- 6 files changed, 54 insertions(+), 51 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index f3f13f97a6..bc2ff500c0 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -241,7 +241,7 @@ STR_UNITS_WEIGHT_LONG_METRIC :{DECIMAL}{NBSP} STR_UNITS_WEIGHT_LONG_SI :{DECIMAL}{NBSP}kg STR_UNITS_VOLUME_SHORT_IMPERIAL :{DECIMAL}{NBSP}gal -STR_UNITS_VOLUME_SHORT_METRIC :{DECIMAL}{NBSP}l +STR_UNITS_VOLUME_SHORT_METRIC :{DECIMAL}{NBSP}L STR_UNITS_VOLUME_SHORT_SI :{DECIMAL}{NBSP}m³ STR_UNITS_VOLUME_LONG_IMPERIAL :{DECIMAL}{NBSP}gal{P ão ões} @@ -609,7 +609,7 @@ STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COM STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Gráfico do Lucro Operacional STR_GRAPH_INCOME_CAPTION :{WHITE}Gráfico de Rendimentos STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Unidades de carga entregada -STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Classificações do desempenho da empresa (máximo=1000) +STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Classificação do desempenho das empresas (máximo=1000) STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Gráfico de Valor da Empresa STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Últimos 72 minutos @@ -618,8 +618,8 @@ STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Tarifas STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Dias em trânsito STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Segundos em trânsito STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Pagamento por entregar 10 unidades (ou 10 mil litros) de carga em uma distância de 20 quadrados -STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Habilitar tudo -STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Desabilitar tudo +STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Ativar tudo +STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Desativar tudo STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Mostrar todas as cargas no gráfico de receitas por carga STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Não mostrar cargas no gráfico de receitas por carga STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostrar/Ocultar gráfico para o tipo de carga @@ -758,9 +758,9 @@ STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Mostrar STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Mostrar rotas de transporte no mapa STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Mostrar vegetação no mapa STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Mostrar proprietários dos terrenos no mapa -STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Clique em um tipo de indústria para mostrar/ocultar a indústria. Ctrl+Clique para desabilitar todos os tipos, exceto o selecionado. Ctrl+Clique novamente para habilitar todos os tipos de indústrias -STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Clique em uma empresa para mostrar/ocultar suas propriedades. Ctrl+Clique para desabilitar todas as empresas, exceto a selecionada. Ctrl+Clique novamente para habilitar todas as empresas -STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Clique em uma carga para mostrar/ocultar suas propriedades. Ctrl+Clique para desabilitar todas as cargas, exceto a selecionada. Ctrl+Clique novamente para habilitar todas as cargas +STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Clique em um tipo de indústria para mostrar/ocultar a indústria. Ctrl+Clique para desativar todos os tipos, exceto o selecionado. Ctrl+Clique novamente para ativar todos os tipos de indústrias +STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Clique em uma empresa para mostrar/ocultar suas propriedades. Ctrl+Clique para desativar todas as empresas, exceto a selecionada. Ctrl+Clique novamente para ativar todas as empresas +STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Clique em uma carga para mostrar/ocultar sua propriedade. Ctrl+Clique para desativar todas as cargas, exceto a selecionada. Ctrl+Clique novamente para ativar todas as cargas STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Estradas STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Ferrovias @@ -880,7 +880,7 @@ STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL :{BIG_FONT}{BLAC STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL :{BIG_FONT}{BLACK}Novas reservas de petróleo encontradas n{G o a} {INDUSTRY}!{}A produção deverá duplicar! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM :{BIG_FONT}{BLACK}Métodos agrícolas aperfeiçoados na {INDUSTRY} deverão duplicar a produção! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}Produção de {STRING} n{G o a} {INDUSTRY} aumenta {COMMA}%! -STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}A produção de {INDUSTRY} diminui 50% +STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}{INDUSTRY} diminui a produção em 50% STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Infestação de insetos causa destruição n{G o a} {INDUSTRY}!{}Produção diminui 50% STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}Produção de {STRING} n{G o a} {INDUSTRY} diminui {COMMA}%! @@ -1543,7 +1543,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Espessura da li STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostrar o nome do NewGRF na janela de comprar veículos: {STRING} STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Adicionar uma linha na janela de aquisição de veículos, mostrando a qual NewGRF pertence o veículo selecionado -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as cargas que os veículos podem transportar nas janelas de listagem: {STRING} +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar nas janelas de listagem as cargas que os veículos podem transportar: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Se ativado, a carga transportável pelo veículo aparecerá acima dele nas listas de veículos STR_CONFIG_SETTING_LANDSCAPE :Clima: {STRING} @@ -1561,7 +1561,7 @@ STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Escolher a altu STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densidade de indústrias: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Definir quantas indústrias devem ser geradas e que nível deve ser mantido durante o jogo -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distância máxima entre a borda do mapa para Refinarias de Petróleo: {STRING} +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distância máxima entre Refinarias de Petróleo e a borda do mapa: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limite de distância entre a borda do mapa e o local de construção de refinarias e plataformas de petróleo. Em mapas de ilhas isso garante que elas fiquem perto da costa. Em mapas com mais de 256 quadrados esse valor é aumentado STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altura da linha de neve: {STRING} @@ -1840,8 +1840,8 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Desativado STR_CONFIG_SETTING_NOSERVICE :Desativar manutenção quando as quebras estão desativadas: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Quando ativado, veículos não recebem manutenção se não podem quebrar -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Penalidade de velocidade de carregamento para trens que são mais longos que a estação: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quando ativado, os trens que são muito compridos para a estação demoram mais tempo para carregar do que um trem que cabe na estação. Esta configuração não afeta a geração de rotas +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Penalizar a velocidade de carregamento para trens que são mais longos que a estação: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quando ativado, os trens que são muito compridos para a estação são carregados mais lentamente do que um trem que cabe na estação. Esta configuração não afeta a geração de rotas STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ativar limite de velocidade para vagões: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Quando ativado, usa o limite de velocidade dos vagões para definir a velocidade máxima de um trem @@ -1906,7 +1906,7 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Ano em que os j STR_CONFIG_SETTING_STARTING_YEAR :Data de início: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Pontuação no fim do ano: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Ano em que o jogo termina para fins de pontuação. No fim desse ano, a pontuação da empresa é registrada e a tela de pontuação máxima é exibida, mas os jogadores podem continuar jogando depois disso.{}Se isso for antes do ano de início, a tela de pontuação máxima nunca será exibida +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Ano em que o jogo termina para fins de pontuação. No fim desse ano, a pontuação da empresa é registrada e o painel de classificação é exibido, mas os jogadores podem continuar jogando depois disso.{}Se isso for antes do ano de início, o painel de classificação nunca será exibido STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nunca @@ -2205,7 +2205,7 @@ STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Selecion STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Selecionar paisagem 'Terra dos brinquedos' STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Abrir opções de jogo -STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Abrir tabela de classificação +STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Mostrar classificação das melhores empresas STR_INTRO_TOOLTIP_HELP :{BLACK}Acessar a documentação e recursos online STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Abrir configurações STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Abrir configurações de NewGRF @@ -2236,7 +2236,7 @@ STR_HELP_WINDOW_README :{BLACK}Leia-me STR_HELP_WINDOW_CHANGELOG :{BLACK}Registro de modificações STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Erros conhecidos STR_HELP_WINDOW_LICENSE :{BLACK}Licença -STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}Site do OpenTTD +STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Manual / Wiki STR_HELP_WINDOW_BUGTRACKER :{BLACK}Relatar um erro STR_HELP_WINDOW_COMMUNITY :{BLACK}Comunidade @@ -2253,7 +2253,7 @@ STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Editar a STR_CHEAT_CHANGE_DATE :{LTBLUE}Alterar data: {ORANGE}{DATE_SHORT} STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Alterar o ano atual STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir modificar os valores de produção: {ORANGE}{STRING} -STR_CHEAT_STATION_RATING :{LTBLUE}Fixar classificações da estação em 100%: {ORANGE}{STRING} +STR_CHEAT_STATION_RATING :{LTBLUE}Fixar classificação das estações em 100%: {ORANGE}{STRING} # Livery window STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Esquema de cores @@ -3365,7 +3365,7 @@ STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotaçã STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nome do mapa de altitudes: STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}O nome do arquivo de imagem do mapa de altitudes STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Tamanho: -STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}O tamanho da imagem original do mapa de altitudes. Para obter melhores resultados, cada lado deve corresponder a um comprimento de lado de mapa disponível no OpenTTD, tais como 256, 512, 1024, etc. +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}O tamanho da imagem original do mapa de altitudes. Para obter resultados melhores, cada lado deve corresponder a um comprimento de lado de mapa disponível no OpenTTD, tais como 256, 512, 1024, etc. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Altura do pico mais elevado @@ -3645,7 +3645,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Renomear Locali STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Autoridade local de {TOWN} STR_LOCAL_AUTHORITY_ZONE :{BLACK}Região STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Mostrar a região dentro dos limites da autoridade local -STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Classificações das empresas de transporte: +STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Classificação das empresas de transporte: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Ações disponíveis: STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista de ações disponíveis nesta localidade - clique em um item para mais detalhes @@ -4398,13 +4398,13 @@ STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELO STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Sem ordens STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Indo para {0:WAYPOINT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Indo para {0:DEPOT} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Manutenção em {0:DEPOT} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Desagrupar e manutenção em {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Manutenção no {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Desagrupar e manutenção no {0:DEPOT} STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - Não é possível chegar em {0:STATION} STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Não é possível chegar em {0:WAYPOINT} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Não é possível chegar em {0:DEPOT} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Não é possível chegar em {0:DEPOT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Não é possível chegar no {0:DEPOT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Não é possível chegar no {0:DEPOT} # Vehicle stopped/started animations ###length 2 @@ -4851,7 +4851,7 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN # Textfile window -STR_TEXTFILE_JUMPLIST :{WHITE}Tabela de Conteúdo +STR_TEXTFILE_JUMPLIST :{WHITE}Índice STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}Acesso rápido a uma seção do arquivo mostrado nesta lista STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING} STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Retornar no histórico de navegação diff --git a/src/lang/french.txt b/src/lang/french.txt index 503c99c91b..24d5f06f59 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -4450,10 +4450,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Capacit STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Crédits de transfert{NBSP}: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Intervalle d'entretien{NBSP}: {LTBLUE}{COMMA}{NBSP}jours{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Intervalle de service{NBSP}: {LTBLUE}{COMMA}{NBSP}minutes{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Intervalle de service{NBSP}: {LTBLUE}{COMMA}{NBSP}minute{P "" s}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Intervalle d'entretien{NBSP}: {LTBLUE}{COMMA}{NBSP}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Dernier entretien{NBSP}: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Dernier entretien{NBSP}: {LTBLUE}il y a {NUM} minutes +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Dernier entretien{NBSP}: {LTBLUE}il y a {NUM} minute{P "" s} STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Augmenter l'intervalle d'entretien de 10 jours. Ctrl-clic pour l'augmenter de 5 jours STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Augmenter l'intervalle d'entretien de 5 minutes. Ctrl-clic pour l'augmenter de 1 minute STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Augmenter l'intervalle d'entretien de 10%. Ctrl-clic pour l'augmenter de 5% @@ -4996,7 +4996,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Impossib STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Impossible de construire le siège... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Ne peut plus bâtir de villes +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Ne peut plus bâtir de villes... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Impossible de renommer la ville... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Impossible de construire une ville ici... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Impossible d'étendre la ville... diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index e5555a8b89..07d1eb9841 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -4451,10 +4451,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kapasite STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Overføringskreditt: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Vedlikeholdsintervall: {LTBLUE}{COMMA}{NBSP}dager{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Vedlikeholdsintervall: {LTBLUE}{COMMA}{NBSP}minutter{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Vedlikeholdsintervall: {LTBLUE}{COMMA}{NBSP}minutt{P "" er}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Vedlikeholdsintervall: {LTBLUE}{COMMA}{NBSP}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Forrige vedlikehold: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Forrige vedlikehold: {LTBLUE}{NUM} minutter siden +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Forrige vedlikehold: {LTBLUE}{NUM} minutt{P "" er} siden STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Øk vedlikeholdsintervall med 10 dager. Ctrl+klikk for å øke vedlikeholdsintervall med 5 dager STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Reduser vedlikeholdsintervall med 5 minutter. Ctrl+klikk for å øke vedlikeholdsintervall med 1 minutt STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Øk vedlikeholdsintervall med 10 prosent. Ctrl+klikk for å øke vedlikeholdsintervall med 5 prosent diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 4df0d47163..fb7c10d992 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -4835,7 +4835,7 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Ładowno STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Wartość ładunku: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Okres między serwisami: {LTBLUE}{COMMA}{NBSP}dni{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Interwał serwisowania: {LTBLUE}{COMMA}{NBSP}minut{P a y ""}{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Interwał serwisowania: {LTBLUE}{COMMA}{NBSP}minut{P a y ""}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Okres między serwisami: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Ostatni serwis: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Ostatni serwis: {LTBLUE}{NUM} minut{P a y ""} temu diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index dbc3c03fac..4ee31f9b94 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1054,7 +1054,7 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Skala b STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Kryssa i den här rutan för att skala bården efter gränssnittets storlek STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Använd traditionellt sprite-typsnitt -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Kryssa i den här rutan om du föredrar att använda det traditionella sprite-typsnittet med fast storlek. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Kryssa i den här rutan om du föredrar att använda det traditionella sprite-typsnittet med fast storlek STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias-typsnitt STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Kryssa i den här rutan för anti-aliasing av typsnitt med justerbar storlek. @@ -1275,7 +1275,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Obegränsat kap STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Tillåt obegränsat spenderande och inaktivera konkurser av företag STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximalt startlån: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximalt belopp ett företag kan låna (där inflationen inte tas med i beräkningen). Om inställt på "Inga lån" kommer inga pengar finnas tillgängliga såvida inte utdelat av ett spelskript eller inställningen "Obegränsat kapital". +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximalt belopp ett företag kan låna (där inflationen inte tas med i beräkningen). Om inställt på "Inga lån" kommer inga pengar finnas tillgängliga såvida inte utdelat av ett spelskript eller inställningen "Obegränsat kapital" STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Inga lån @@ -1359,7 +1359,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Sluttningars lu STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Lutningsgrad för lutande rutor för vägfordon. Högre värden gör det svårare att komma upp för en backe STR_CONFIG_SETTING_FORBID_90_DEG :Förbjud tåg att göra 90°-svängar: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90-graderssvängar inträffar då ett horisontellt spår följs direkt av ett vertikalt spår på angränsande ruta, vilket tvingar tåget att svänga 90 grader om det kör utefter spåret. Detta i motsats till andra kombinationer av spårbitar där tåget svänger 45 grader i taget. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90-graderssvängar inträffar då ett horisontellt spår följs direkt av ett vertikalt spår på angränsande ruta, vilket tvingar tåget att svänga 90 grader om det kör utefter spåret. Detta i motsats till andra kombinationer av spårbitar där tåget svänger 45 grader i taget STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Tillåt att stationer som inte är byggda direkt brevid varandra slås ihop: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Tillåt tillägg av stationsdelar till en station utan direktkontakt med existerande delar genom Ctrl+Klick vid utplacering av nya delar. @@ -1508,9 +1508,9 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (kalendertid frusen) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Skala godsproduktionen för städer: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Skala godsproduktionen för städer med detta procentantal. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Skala godsproduktionen för städer med detta procenttal STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Skala godsproduktionen för industrier: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skala godsproduktionen för industrier med detta procentantal. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skala godsproduktionen för industrier med detta procenttal STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Förnya fordon automatiskt när de blir gamla: {STRING} @@ -1541,7 +1541,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Linjetjocklek i STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Linjernas bredd i grafernas kurvor. En tunn linje är lättare att läsa av mer precist, medan en tjockare linje är lättare att se och gör det lättare att skilja mellan de olika färgerna STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Visa NewGRF:ens namn i fordonsbyggnadsfönstret: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Lägg till en rad i fordonsbyggnadsfönstret som visar vilken NewGRF det valda fordonet kommer ifrån. +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Lägg till en rad i fordonsbyggnadsfönstret som visar vilken NewGRF det valda fordonet kommer ifrån STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Visa godstyper som fordonen kan transportera i listorna {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Om det är aktiverat kommer fordonets transportabla last att visas ovanför den i fordonslistor @@ -1818,7 +1818,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Tillåt datorst STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes innan skript sätts i viloläge: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximalt antal beräkningssteg ett skript kan utföra i en omgång STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maximal minnesanvändning per skript: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Hur mycket minne ett enda skript kan konsumera innan det tvingas avslutas. Det kan behöva ökas för stora kartor. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Hur mycket minne ett enda skript kan konsumera innan det tvingas avslutas. Det kan behöva utökas för stora kartor STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Visa serviceintervall i procent: {STRING} @@ -1911,7 +1911,7 @@ STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Aldrig STR_CONFIG_SETTING_ECONOMY_TYPE :Typ av ekonomi: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Jämn ekonomi gör att produktionen ändrar sig oftare i mindre steg. Frusen ekonomi förhindrar produktions ändringar och att industrier stänger. Denna inställning har ingen effekt om industrien kommer från en NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Jämn ekonomi gör att produktionen ändrar sig oftare och i mindre steg. Frusen ekonomi förhindrar produktionsändringar och att industrier stänger. Denna inställning kan vara verkningslös om en NewGRF bidrar med industrityper ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Jämn @@ -2036,13 +2036,13 @@ STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Ta {STRING} fö STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tid som det tar för varje omräkning av en länkdiagramkomponent. När en omräkning startas skapas en tråd som tillåts köra i detta antal sekunder. Ju kortare du ställer in detta desto mer sannolikt är det att tråden inte är färdig när den ska. Sedan stannar spelet tills det är ("lag"). Ju längre du ställer in den desto längre tid tar det för distributionen att uppdateras när rutter ändras. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distributionssätt för passagerare: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetriskt" innebär att ungefär samma antal passagerare färdas från station A till station B som från B till A. "Asymmetriskt" innebär att en godtycklig mängd passagerare kan färdas i vardera riktningen. "Manuellt" innebär att ingen automatisk distribution av passagerare sker. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetriskt" innebär att ungefär samma antal passagerare färdas från station A till station B som från B till A. "Asymmetriskt" innebär att en godtycklig mängd passagerare kan färdas i vardera riktningen. "Manuellt" innebär att ingen automatisk distribution av passagerare sker STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distributionssätt för post: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetriskt" innebär att ungefär samma mängd post skickas från station A till station B som från B till A. "Asymmetriskt" innebär att en godtycklig mängd post kan skickas i vardera riktningen. "Manuellt" innebär att ingen automatisk distribution av post sker. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetriskt" innebär att ungefär samma mängd post skickas från station A till station B som från B till A. "Asymmetriskt" innebär att en godtycklig mängd post kan skickas i vardera riktningen. "Manuellt" innebär att ingen automatisk distribution av post sker STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distributionssätt för den BEPANSRADE godsklassen: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Den BEPANSRADE godsklassen innehåller värdesaker i det tempererade, diamanter i det subtropiska eller guld i det subarktiska klimatet. NewGRFer kan ändra detta. "Symmetriskt" innebär att ungefär samma mängd av detta gods skickas från station A till station B som från B till A. "Asymmetriskt" innebär att en godtycklig mängd av detta gods kan skickas i vardera riktningen. "Manuellt" innebär att ingen automatisk distribution av denna godstyp sker. Det är rekommenderat att välja "asymmetriskt" eller "manuellt" vid subarktiskt eller subtropiskt klimat, då banker endast tar emot gods i dessa klimat. Vid tempererat klimat kan även "symmetriskt" väljas, då banker kan skicka tillbaka värdesaker till den bank de kom ifrån. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Den BEPANSRADE godsklassen innehåller värdesaker i det tempererade, diamanter i det subtropiska eller guld i det subarktiska klimatet. NewGRFer kan ändra detta. "Symmetriskt" innebär att ungefär samma mängd av detta gods skickas från station A till station B som från B till A. "Asymmetriskt" innebär att en godtycklig mängd av detta gods kan skickas i vardera riktningen. "Manuellt" innebär att ingen automatisk distribution av denna godstyp sker. Det är rekommenderat att välja "asymmetriskt" eller "manuellt" vid subarktiskt eller subtropiskt klimat, då banker endast tar emot gods i dessa klimat. Vid tempererat klimat kan även "symmetriskt" väljas, då banker kan skicka tillbaka värdesaker till den bank de kom ifrån STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distributionssätt för övriga godsklasser: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetriskt" innebär att en godtycklig mängd gods kan skickas i vardera riktningen. "Manuellt" innebär att ingen automatisk distribution av dessa godstyper sker. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetriskt" innebär att en godtycklig mängd gods kan skickas i vardera riktningen. "Manuellt" innebär att ingen automatisk distribution av dessa godstyper sker ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuellt STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetriskt @@ -2574,6 +2574,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Du har i STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Du har inte angivit något servernamn. Namninställning kan göras högst upp i flerspelarfönstret STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Servern har en annan version än denna klient STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Fel lösenord +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Du finns ej med på listan över tillåtna klienter STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Servern är full STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Du är bannlyst från den här servern STR_NETWORK_ERROR_KICKED :{WHITE}Du blev utkastad från spelet @@ -2601,6 +2602,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :mottog felaktig STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :fel revision STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :namnet används redan STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :fel lösenord +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :ej på tillåt-listan STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :fel företags-id i DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :utkastad av servern STR_NETWORK_ERROR_CLIENT_CHEATER :försökte fuska @@ -2981,9 +2983,9 @@ STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plantera STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plantera träd genom att dra över landskapet. STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Skogsdunge -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plantera mindre skogar genom att dra över landskapet. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plantera mindre skogar genom att dra över landskapet STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Skog -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantera större skogar genom att dra över landskapet. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantera större skogar genom att dra över landskapet # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Skapa mark @@ -4031,7 +4033,7 @@ STR_GROUP_CREATE_TOOLTIP :{BLACK}Klicka f STR_GROUP_DELETE_TOOLTIP :{BLACK}Ta bort vald grupp STR_GROUP_RENAME_TOOLTIP :{BLACK}Byt namn på vald grupp STR_GROUP_LIVERY_TOOLTIP :{BLACK}Byt färgschema på vald grupp -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klicka för att skydda denna grupp mot allmän automatisk förnyelse. Ctrl+klicka för att också skydda undergrupper. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klicka för att skydda denna grupp mot allmän automatisk förnyelse. Ctrl+klicka för att också skydda undergrupper STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Ta bort grupp STR_GROUP_DELETE_QUERY_TEXT :{WHITE} Är du säker på att du vill ta bort denna grupp och alla efterkommande? @@ -4221,7 +4223,7 @@ STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Klona fl STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Köp en kopia av ett tåg inklusive alla vagnar. Klicka på denna knapp och sen på ett tåg i eller utanför depån. Ctrl+Klick för att dela ordrar. Håll även in Shift för att endast visa uppskattad kostnad STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Köp en kopia av ett vägfordon. Klicka på denna knapp och sen på ett vägfordon i eller utanför depån. Ctrl+Klick för att dela ordrar. Håll även in Shift för att endast visa uppskattad kostnad STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Köp en kopia av ett skepp. Klicka på denna knapp och sen på ett skepp i eller utanför depån. Ctrl+Klick för att dela ordrar. Håll även in Shift för att endast visa uppskattad kostnad -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Köp en kopia av en flygfarkost. Klicka på denna knapp och sen på en flygfarkost i eller utanför hangaren. Ctrl+Klick för att dela ordrar. Håll även in Shift för att endast visa uppskattad kostnad +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Köp en kopia av en flygfarkost. Klicka på denna knapp och sedan på en flygfarkost i eller utanför hangaren. Ctrl+klicka för att dela ordrar. Håll även in Shift för att endast visa uppskattad kostnad ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför depån. Ctrl+Klick för att öppna en ny fönstervy över tågdepåns läge @@ -4993,7 +4995,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Kan inte STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Kan inte bygga huvudkontor här... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Kan inte bygga några städer +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Kan inte bygga några städer... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Kan inte byta namn på stad... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Kan inte grunda stad här... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Kan inte expandera stad... diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 502d461854..2df685a55a 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -2091,7 +2091,7 @@ STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Дозволя STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Міська влада може будувати переїзди: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Дозволяє містам самостійно будувати залізничні переїзди. -STR_CONFIG_SETTING_NOISE_LEVEL :Міська влада може контролювати рівень шуму аеропортів: {STRING} +STR_CONFIG_SETTING_NOISE_LEVEL :Обмеження розміщення аеропортів залежно від рівня шуму: {STRING} STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :При відключенні дозволяється будувати два аеропорти у кожному місті. При увімкненні кількість аеропортів залежить від допустимого рівня шуму, що в свою чергу залежить від кількості населення міста, розміру аеропорта та відстані STR_CONFIG_SETTING_TOWN_FOUNDING :Засновування нових міст під час гри: {STRING} @@ -2167,8 +2167,9 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Множник STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Середньостатистичне відношення початкового розміру мегаполісів порівняно зі звичайними містами. STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Оновлення обрахунку зв'язків, час {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Час між перерозрахунками графа зв'язків. Кожен розрахунок обчислює однин компонент графа, тобто лише деякі компоненти оновляться після закінчення кожного проміжку часу, а не весь граф. Чим менше це значення, тим більше часу процесора буде витрачатися. Чим більше це значення, тим довше буде очікувати розподілення вантажів на нових маршрутах +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Час між перерозрахунками графа зв'язків. Кожен розрахунок обчислює один компонент графа, тобто лише деякі компоненти оновляться після закінчення кожного проміжку часу, а не весь граф. Чим менше це значення, тим більше часу процесора буде витрачатися. Чим більше це значення, тим довше доведеться очікувати розподілення вантажів на нових маршрутах STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Час між перерахунками графа зв'язків: {STRING} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Час між перерозрахунками компонента графа зв'язків. На початку перерозрахунку утворюється з'єднання, яке існує обраний час. Чим менше це значення, тим більша вірогідність, що з'єднання розірветься раніше очікуваного, після чого гра зупиниться. Чим більше це значення, тим довше обраховуватиметься розподілення вантажів при зміні маршрутів STR_CONFIG_SETTING_DISTRIBUTION_PAX :Режим розподілу для пасажирів: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :В "симетричному" режимі від станції A до станції B відправлятиметься приблизно стільки ж пасажирів, як від B до A. В "асиметричному" режимі дозволяється відправляти довільну кількість пасажирів в обох напрямках. Ручний режим означає, що розподіл пасажирів не здійснюватиметься автоматично. @@ -3013,9 +3014,9 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Буду STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Будувати дорогу в режимі Автобудування. Ctrl+клац для знесення доріг. Утримуйте Shift для показу тільки витрат STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Будувати трамвайну колію в режимі Автобудування. Ctrl+клац для знесення колій. Утримуйте Shift для показу тільки витрат STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Будувати гараж (для будівництва і обслуговування автомобілів). Утримуйте Shift для показу витрат на будівництво -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Будувати трамвайне депо (для будівництва та обслуговування трамваїв). Утримуйте Shift для показу витрат на будівництво -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Будувати автобусну зупинку. Ctrl+клац щоб обрати іншу зупинку для приєднання. Утримуйте Shift для показу тільки витрат на будівництво -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Будувати пасажирську трамвайну станцію. Ctrl дозволяє об'єднувати станції. Утримуйте Shift для показу витрат на будівництво +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Будування трамвайного депо (для будівництва та обслуговування трамваїв). Утримуйте Shift для показу витрат на будівництво +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Будування автобусної зупинки. Ctrl+клац щоб обрати іншу зупинку для приєднання. Утримуйте Shift для показу витрат на будівництво +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Будування пасажирської трамвайної станції. Ctrl+клац щоб обрати іншу станцію для приєднання. Утримуйте Shift для показу витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Будувати вантажну станцію. Ctrl+клац щоб обрати іншу станцію для при'єднання. Утримуйте Shift для показу витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Побудувати вантажну трамвайну станцію. Ctrl+клац щоб обрати іншу зупинку для приєднання. Утримуйте Shift для показу тільки витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Вкл./відкл. односторонні дороги From f845b4bbc3c0d81e9f24aa453e619aee0299da6e Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Mon, 25 Mar 2024 16:28:16 +0000 Subject: [PATCH 185/695] Fix: Changing NPF max search nodes while in-game had no effect (#12194) --- src/pathfinder/npf/npf.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp index 33d5927991..5ac43cd8c9 100644 --- a/src/pathfinder/npf/npf.cpp +++ b/src/pathfinder/npf/npf.cpp @@ -1040,6 +1040,10 @@ static NPFFoundTargetData NPFRouteInternal(AyStarNode *start1, bool ignore_start /* Initialize user_data */ _npf_aystar.user_data = user; + /* We will limit the number of nodes for now, until we have a better + * solution to really fix performance */ + _npf_aystar.max_search_nodes = _settings_game.pf.npf.npf_max_search_nodes; + /* GO! */ [[maybe_unused]] int r = _npf_aystar.Main(); assert(r != AYSTAR_STILL_BUSY); @@ -1113,9 +1117,6 @@ void InitializeNPF() } _npf_aystar.loops_per_tick = 0; _npf_aystar.max_path_cost = 0; - /* We will limit the number of nodes for now, until we have a better - * solution to really fix performance */ - _npf_aystar.max_search_nodes = _settings_game.pf.npf.npf_max_search_nodes; } static void NPFFillWithOrderData(NPFFindStationOrTileData *fstd, const Vehicle *v, bool reserve_path = false) From f71ada4f30c113851fedf37f20643a0706f7f791 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Mon, 25 Mar 2024 13:46:03 -0400 Subject: [PATCH 186/695] Fix #12268: Capitalize "Wait to unbunch" order string (#12375) --- src/lang/english.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 39d9cb6432..c2a4755d59 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -4643,7 +4643,7 @@ STR_ORDER_REFIT_ORDER :(Refit to {STRI STR_ORDER_REFIT_STOP_ORDER :(Refit to {STRING} and stop) STR_ORDER_STOP_ORDER :(Stop) -STR_ORDER_WAIT_TO_UNBUNCH :(wait to unbunch) +STR_ORDER_WAIT_TO_UNBUNCH :(Wait to unbunch) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING1} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Can't use station){POP_COLOUR} {STRING} {STATION} {STRING1} From 84bbe235e4aea9c987bd37dc9477bfbf6fb3f05e Mon Sep 17 00:00:00 2001 From: Rubidium Date: Mon, 25 Mar 2024 21:00:28 +0100 Subject: [PATCH 187/695] Fix: do not send chat to clients that have not authorized yet --- src/network/network_server.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index f63c79bd65..88698226d8 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -1316,7 +1316,7 @@ void NetworkServerSendChat(NetworkAction action, DestType desttype, int dest, co } else { /* Else find the client to send the message to */ for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { - if (cs->client_id == (ClientID)dest) { + if (cs->client_id == (ClientID)dest && cs->status >= ServerNetworkGameSocketHandler::STATUS_AUTHORIZED) { cs->SendChat(action, from_id, false, msg, data); break; } @@ -1333,7 +1333,7 @@ void NetworkServerSendChat(NetworkAction action, DestType desttype, int dest, co } } else { for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { - if (cs->client_id == from_id) { + if (cs->client_id == from_id && cs->status >= ServerNetworkGameSocketHandler::STATUS_AUTHORIZED) { cs->SendChat(action, (ClientID)dest, true, msg, data); break; } @@ -1348,7 +1348,7 @@ void NetworkServerSendChat(NetworkAction action, DestType desttype, int dest, co ci_to = nullptr; for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { ci = cs->GetInfo(); - if (ci != nullptr && ci->client_playas == (CompanyID)dest) { + if (ci != nullptr && ci->client_playas == (CompanyID)dest && cs->status >= ServerNetworkGameSocketHandler::STATUS_AUTHORIZED) { cs->SendChat(action, from_id, false, msg, data); if (cs->client_id == from_id) show_local = false; ci_to = ci; // Remember a client that is in the company for company-name @@ -1380,7 +1380,7 @@ void NetworkServerSendChat(NetworkAction action, DestType desttype, int dest, co NetworkTextMessage(action, GetDrawStringCompanyColour(ci_own->client_playas), true, name, msg, data); } else { for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { - if (cs->client_id == from_id) { + if (cs->client_id == from_id && cs->status >= ServerNetworkGameSocketHandler::STATUS_AUTHORIZED) { cs->SendChat(action, ci_to->client_id, true, msg, data); } } @@ -1394,7 +1394,7 @@ void NetworkServerSendChat(NetworkAction action, DestType desttype, int dest, co case DESTTYPE_BROADCAST: for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { - cs->SendChat(action, from_id, false, msg, data); + if (cs->status >= ServerNetworkGameSocketHandler::STATUS_AUTHORIZED) cs->SendChat(action, from_id, false, msg, data); } NetworkAdminChat(action, desttype, from_id, msg, data, from_admin); @@ -1417,7 +1417,7 @@ void NetworkServerSendChat(NetworkAction action, DestType desttype, int dest, co void NetworkServerSendExternalChat(const std::string &source, TextColour colour, const std::string &user, const std::string &msg) { for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { - cs->SendExternalChat(source, colour, user, msg); + if (cs->status >= ServerNetworkGameSocketHandler::STATUS_AUTHORIZED) cs->SendExternalChat(source, colour, user, msg); } NetworkTextMessage(NETWORK_ACTION_EXTERNAL_CHAT, colour, false, user, msg, 0, source); } From 9aa6669266efd1e17cb9a157e32a11e0b0304e0e Mon Sep 17 00:00:00 2001 From: Rubidium Date: Mon, 25 Mar 2024 21:03:18 +0100 Subject: [PATCH 188/695] Fix: inconsistent check for client authorized status --- src/network/network_server.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 88698226d8..cbbe81184e 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -251,7 +251,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::CloseConnection(NetworkRecvSta /* Inform other clients of this... strange leaving ;) */ for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) { - if (new_cs->status > STATUS_AUTHORIZED && this != new_cs) { + if (new_cs->status >= STATUS_AUTHORIZED && this != new_cs) { new_cs->SendErrorQuit(this->client_id, NETWORK_ERROR_CONNECTION_LOST); } } @@ -369,7 +369,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendError(NetworkErrorCode err StringID strid = GetNetworkErrorMsg(error); /* Only send when the current client was in game */ - if (this->status > STATUS_AUTHORIZED) { + if (this->status >= STATUS_AUTHORIZED) { std::string client_name = this->GetClientName(); Debug(net, 1, "'{}' made an error and has been disconnected: {}", client_name, GetString(strid)); From 4751179dc5169538c0dd06dc6b1222618c929813 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 25 Mar 2024 21:35:31 +0000 Subject: [PATCH 189/695] Codefix: Remove unused class member and extraneous spaces. (#12378) --- src/industry_gui.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 70c83ccf73..fcb3b247e3 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -2655,9 +2655,7 @@ struct IndustryCargoesWindow : public Window { } } - - CargoesFieldType type; ///< Type of field. - void SetStringParameters (WidgetID widget) const override + void SetStringParameters(WidgetID widget) const override { if (widget != WID_IC_CAPTION) return; From 8e12bd35aed324feefe5e0e275eaaa48f10abdbb Mon Sep 17 00:00:00 2001 From: Rubidium Date: Mon, 25 Mar 2024 21:59:04 +0100 Subject: [PATCH 190/695] Fix: server shutdown and newgame packets should be stable The server sends shutdown and newgame (reboot) packets to any connected client. This can be useful, so you can tell clients that are trying to join that the server is restarting. However, that means that packets can be sent before a version check has been done. So, these packets should be in the stable packet range instead of the one that is unstable and guarded by a version check. --- src/network/core/tcp_game.h | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/network/core/tcp_game.h b/src/network/core/tcp_game.h index a381f6aa3b..24cb9c941c 100644 --- a/src/network/core/tcp_game.h +++ b/src/network/core/tcp_game.h @@ -24,10 +24,9 @@ */ enum PacketGameType : uint8_t { /* - * These first four pair of packets (thus eight in - * total) must remain in this order for backward - * and forward compatibility between clients that - * are trying to join directly. + * These first ten packets must remain in this order for backward and forward compatibility + * between clients that are trying to join directly. These packets can be received and/or sent + * by the server before the server has processed the 'join' packet from the client. */ /* Packets sent by socket accepting code without ever constructing a client socket instance. */ @@ -46,6 +45,10 @@ enum PacketGameType : uint8_t { PACKET_SERVER_GAME_INFO, ///< Information about the server. PACKET_CLIENT_GAME_INFO, ///< Request information about the server. + /* A server quitting this game. */ + PACKET_SERVER_NEWGAME, ///< The server is preparing to start a new game. + PACKET_SERVER_SHUTDOWN, ///< The server is shutting down. + /* * Packets after here assume that the client * and server are running the same version. As @@ -121,10 +124,6 @@ enum PacketGameType : uint8_t { PACKET_SERVER_COMPANY_UPDATE, ///< Information (password) of a company changed. PACKET_SERVER_CONFIG_UPDATE, ///< Some network configuration important to the client changed. - /* A server quitting this game. */ - PACKET_SERVER_NEWGAME, ///< The server is preparing to start a new game. - PACKET_SERVER_SHUTDOWN, ///< The server is shutting down. - /* A client quitting. */ PACKET_CLIENT_QUIT, ///< A client tells the server it is going to quit. PACKET_SERVER_QUIT, ///< A server tells that a client has quit. From 575336ef434e5708cb32c3f3d198fbf9492a4bcf Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 26 Mar 2024 04:40:35 +0000 Subject: [PATCH 191/695] Update: Translations from eints swedish: 20 changes by joeax910 greek: 182 changes by gh658804 ukrainian: 11 changes by StepanIvasyn slovak: 45 changes by puco lithuanian: 14 changes by dziugas1959 portuguese (brazilian): 11 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 22 +-- src/lang/greek.txt | 260 +++++++++++++++++++++--------- src/lang/lithuanian.txt | 14 ++ src/lang/slovak.txt | 87 +++++----- src/lang/swedish.txt | 40 ++--- src/lang/ukrainian.txt | 21 +-- 6 files changed, 283 insertions(+), 161 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index bc2ff500c0..1433e179fb 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -392,7 +392,7 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Abrir in STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Abrir informações gerais da empresa STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Abrir livro de história STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Abrir lista de objetivos -STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Abrir gráficos da empresa e receitas por carga +STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Abrir gráficos da empresa e tarifas por carga STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Abrir tabela de classificação das empresas STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Abrir lista de indústrias, cadeia industrial ou financiar a construção de uma nova indústria STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Abrir lista de trens da empresa. Ctrl+Clique para mostrar ou ocultar grupos de veículos, oposto da configuração escolhida @@ -620,8 +620,8 @@ STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLA STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Pagamento por entregar 10 unidades (ou 10 mil litros) de carga em uma distância de 20 quadrados STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Ativar tudo STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Desativar tudo -STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Mostrar todas as cargas no gráfico de receitas por carga -STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Não mostrar cargas no gráfico de receitas por carga +STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Mostrar todas as cargas no gráfico de tarifas por carga +STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Não mostrar cargas no gráfico de tarifas por carga STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostrar/Ocultar gráfico para o tipo de carga STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} @@ -1543,8 +1543,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Espessura da li STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostrar o nome do NewGRF na janela de comprar veículos: {STRING} STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Adicionar uma linha na janela de aquisição de veículos, mostrando a qual NewGRF pertence o veículo selecionado -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar nas janelas de listagem as cargas que os veículos podem transportar: {STRING} -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Se ativado, a carga transportável pelo veículo aparecerá acima dele nas listas de veículos +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as cargas que os veículos podem transportar nas janelas de listagem: {STRING} +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Se ativado, a carga que o veículo pode transportar aparecerá acima dele nas listas de veículos STR_CONFIG_SETTING_LANDSCAPE :Clima: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os climas definem a jogabilidade básica dos cenários, com diferentes cargas e requisitos para crescimento das localidades. NewGRFs e Scripts de Jogo permitem um controle mais preciso sobre isso @@ -1584,7 +1584,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Irregular STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Muito Irregular STR_CONFIG_SETTING_VARIETY :Distribuição de variedade: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Escolher se o mapa conterá tanto áreas montanhosas como áreas planas. Quanto maior a variedade, maiores as diferenças de altura entre as áreas montanhosas e as planas +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Escolher se o mapa conterá tanto áreas montanhosas como áreas planas. Quanto maior a variedade, maiores as diferenças de altura entre as áreas montanhosas e as áreas planas STR_CONFIG_SETTING_RIVER_AMOUNT :Quantidade de rios: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Escolher quantos rios serão gerados @@ -1620,8 +1620,8 @@ STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Área máxima q STR_CONFIG_SETTING_SERVICEATHELIPAD :Manutenção automática de helicópteros em heliportos: {STRING} STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Efetuar manutenção de helicópteros após cada pouso, mesmo se não existir um depósito no aeroporto -STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Ligar ferramentas de paisagismo com ferramentas de trilhos/estradas/água/aeroportos: {STRING} -STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Quando abrir uma barra de ferramentas para um tipo de transporte, também abrir a barra de terraplanagem +STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Ligar ferramentas de paisagismo com construção de trilhos/estradas/água/aeroportos: {STRING} +STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Ao abrir a barra de ferramentas de construção para um tipo de transporte, abrir também a barra de ferramentas de paisagismo STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :Cor do solo usada no minimapa: {STRING} STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Cor do terreno no minimapa @@ -4526,7 +4526,7 @@ STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Adaptar # Order view STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (Ordens) STR_ORDERS_TIMETABLE_VIEW :{BLACK}Horários -STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Mudar para a visualização de horários +STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Mudar para a visuallização de horários STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de ordens - clique em uma ordem para selecioná-la. Ctrl+Clique para mostrar o destino da ordem STR_ORDER_INDEX :{COMMA}:{NBSP} @@ -4698,7 +4698,7 @@ STR_INVALID_ORDER :{RED} (Ordem In # Time table window STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Horários) STR_TIMETABLE_ORDER_VIEW :{BLACK}Ordens -STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Mudar para visualização de ordens +STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Mudar para a visualização de ordens STR_TIMETABLE_TOOLTIP :{BLACK}Horários - clique em uma ordem para selecioná-la @@ -5031,7 +5031,7 @@ STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... só STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}O financiamento falhou em prospectar devido ao azar; tente novamente STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Não havia locais adequados para prospectar por esta indústria STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Não havia locais adequados para indústrias do tipo '{STRING}' -STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Modificar os parâmetros de geração do mapa para obter um mapa melhor +STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Modifique os parâmetros de geração do mapa para obter um mapa melhor # Station construction related errors STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Não é possível construir estação ferroviária aqui... diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 24bced900b..0c423ab12c 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -392,7 +392,9 @@ STR_SORT_BY_TYPE :Τύπος STR_SORT_BY_TRANSPORTED :Μεταφέρθηκαν STR_SORT_BY_NUMBER :Αριθμός STR_SORT_BY_PROFIT_LAST_YEAR :Κέρδος προηγούμενου χρόνου +STR_SORT_BY_PROFIT_LAST_PERIOD :Κέρδος προηγούμενης περιόδου STR_SORT_BY_PROFIT_THIS_YEAR :Κέρδος τρέχοντος έτους +STR_SORT_BY_PROFIT_THIS_PERIOD :Κέρδος τρέχουσας περιόδου STR_SORT_BY_AGE :Ηλικία STR_SORT_BY_RELIABILITY :Αξιοπιστία STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Συνολική χωρητικότητα ανά τύπο φορτίου @@ -424,7 +426,9 @@ STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD :Συνολικ STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Συνολικό κέρδος τρέχοντος έτους STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Συνολικό κέρδος τρέχοντος έτους STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Μέσο κέρδος τελευταίου έτους +STR_SORT_BY_AVERAGE_PROFIT_LAST_PERIOD :Μέσος όρος κέρδους προηγούμενης περιόδου STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Μέσος όρος κέρδους τρέχοντος έτους +STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Μέσος όρος κέρδους τρέχουσας περιόδου # Group by options for vehicle list STR_GROUP_BY_NONE :Καμία @@ -440,27 +444,27 @@ STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Παύσ STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Γρήγορη ταχύτητα παιχνιδιού STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Επιλογές STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Αποθήκευση, εγκατάλειψη, έξοδος -STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Εμφάνιση χάρτη -STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Εμφάνιση του καταλόγου πόλεων -STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Εμφάνιση χρηματοδοτήσεων +STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Εμφάνιση χάρτη, επιπλέον παραθύρου προβολής, ροής εμπορευμάτων ή λίστας πινακίδων +STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Εμφάνιση καταλόγου πόλεων ή ίδρυση πόλης +STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Εμφάνιση λίστας χρηματοδοτήσεων STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Εμφάνιση λίστας σταθμών της εταιρίας STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Εμφάνιση οικονομικών πληροφοριών εταιρίας STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Εμφάνιση γενικών πληροφοριών της εταιρίας STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Εμφάνιση βιβλίου ιστορίας STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Εμφάνιση λίστας στόχων -STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Εμφάνιση γραφημάτων +STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Εμφάνιση εταιρικών γραφημάτων και ποσοστών πληρωμής φορτίου STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Εμφάνιση πίνακα κατάταξης των εταιριών STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Χρηματοδοτήστε την κατασκευή νέας βιομηχανίας -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Εμφάνιση λίστας τρένων της εταιρίας. Με Ctrl+Κλικ εναλλάσσεται το άνοιγμα της λίστας ομάδων/οχημάτων -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Εμφάνιση λίστας με τα οδικά οχήματα της εταιρίας. Με Ctrl+Κλικ εναλλάσσεται το άνοιγμα της λίστας ομάδων/οχημάτων -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Εμφάνιση λίστας με τα πλοία της εταιρίας. Με Ctrl+Κλικ εναλλάσσει το άνοιγμα της λίστας ομάδων/οχημάτων -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Εμφανίστε λίστα με τα αεροσκάφη της εταιρίας. Με Ctrl+Κλικ εναλλάσσεται το άνοιγμα της λίστας ομάδων/οχημάτων +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Εμφάνιση λίστας με τα τραίνα της εταιρίας. Με Ctrl+Κλικ εναλλάσσεται η εμφάνιση/απόκρυψη των ομάδων οχημάτων +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Εμφάνιση λίστας με τα οχήματα δρόμου της εταιρίας. Με Ctrl+Κλικ εναλλάσσεται η εμφάνιση/απόκρυψη των ομάδων οχημάτων +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Εμφάνιση λίστας με τα πλοία της εταιρίας. Με Ctrl+Κλικ εναλλάσσεται η εμφάνιση/απόκρυψη των ομάδων οχημάτων +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Εμφάνιση λίστας με τα αεροσκάφη της εταιρίας. Με Ctrl+Κλικ εναλλάσσεται η εμφάνιση/απόκρυψη των ομάδων οχημάτων STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Μεγέθυνση εικόνας STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Σμίκρυνση εικόνας STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Κατασκευή σιδηροτροχιάς -STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Κατασκευάστε δρόμους -STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Κτίσιμο τραχιοδρόμων -STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Κατασκευή λιμένων +STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Κατασκευή δρόμου +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Κατασκευή τροχιοδρόμων +STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Κατασκευή υδάτινης διαδρομής STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Κατασκευάστε αεροδρόμια STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Ανοίξτε την μπάρα εργαλείων μορφοποίησης εδάφους για ανύψωση/βύθιση γης, δενδροφύτευση, κλπ. STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Εμφάνιση παραθύρου ήχου/μουσικής @@ -475,15 +479,15 @@ STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Πρό STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Μετακίνηση ημ/νίας εκκίνησης 1 χρόνο πίσω STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Μετακινήστε την ημερομηνία εκκίνησης 1 χρόνο μπροστά STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Πατήστε εδώ για να εισάγετε την χρονιά έναρξης -STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Εμφάνιση χάρτη, καταλόγου πόλεων -STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Δημιουργία τοπίου +STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Εμφάνιση χάρτη, επιπλέον παραθύρου προβολής, λίστας πινακίδων ή λίστας πόλεων ή βιομηχανιών +STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Εμφάνιση μενού δημιουργίας τοπίου ή δημιουργία νέου κόσμου STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Δημιουργία πόλης STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Δημιουργία βιομηχανίας STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Κατασκευή δρόμου -STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Κατασκευή τροχιάς τραμ -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Φύτευση Δέντρων. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}{BLACK}Κατασκευή τροχιοδρόμου +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Φύτευση Δέντρων. Ctrl+Κλικ για διαγώνια επιλογή περιοχής. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Τοποθέτηση πινακίδας -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Τοποθέτηση αντικειμένου. Ctrl για διαγώνια επιλογή περιοχής. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Τοποθέτηση αντικειμένου. Ctrl+Κλικ για διαγώνια επιλογή περιοχής. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο # Scenario editor file menu ###length 7 @@ -502,6 +506,7 @@ STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Ρυθμίσε STR_SETTINGS_MENU_AI_SETTINGS :Ρυθμίσεις AI STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Ρυθμίσεις σενάριου παιχνιδιού STR_SETTINGS_MENU_NEWGRF_SETTINGS :Ρυθμίσεις NewGRF +STR_SETTINGS_MENU_SANDBOX_OPTIONS :Ρυθμίσεις πεδίου δοκιμών STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Επιλογές διαφάνειας STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Εμφάνιση ονομάτων πόλεων STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Εμφάνιση ονομάτων σταθμών @@ -522,7 +527,7 @@ STR_FILE_MENU_EXIT :Έξοδος # Map menu STR_MAP_MENU_MAP_OF_WORLD :Χάρτης του κόσμου STR_MAP_MENU_EXTRA_VIEWPORT :Πρόσθετη εμφάνιση -STR_MAP_MENU_LINGRAPH_LEGEND :Υπόμνημα Ροής Φορτίου +STR_MAP_MENU_LINGRAPH_LEGEND :Υπόμνημα ροής φορτίου STR_MAP_MENU_SIGN_LIST :Λίστα πινακίδων # Town menu @@ -581,6 +586,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Διαγραφ # About menu STR_ABOUT_MENU_LAND_BLOCK_INFO :Πληροφορίες περιοχής εδάφους +STR_ABOUT_MENU_HELP :Βοήθεια και εγχειρίδια χρήσης STR_ABOUT_MENU_TOGGLE_CONSOLE :Εναλλαγή κονσόλας STR_ABOUT_MENU_AI_DEBUG :Αποσφαλμάτωση AI και δέσμης ενεργειών παιχνιδιού STR_ABOUT_MENU_SCREENSHOT :Στιγμιότυπο οθόνης @@ -589,6 +595,7 @@ STR_ABOUT_MENU_ABOUT_OPENTTD :Σχετικά STR_ABOUT_MENU_SPRITE_ALIGNER :Ευθυγραμμιστής στοιχεών STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Εναλλαγή πλαισίου οριοθέτησης STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Εναλλαγή χρωματισμού λερωμένων τετραγωνίδιων +STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Εναλλαγή περιγραμμάτων γραφικών στοιχείων ###length 31 STR_DAY_NUMBER_1ST :1ος @@ -696,8 +703,11 @@ STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Μονά STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Ποσοστά απόδοσης εταιρίας (μέγιστη τιμή=1000) STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Αξία εταιρίας +STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Τελευταία 72 λεπτά STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Ποσοστά Πληρωμής Φορτίων +STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Ημέρες σε μετάβαση +STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Δευτερόλεπτα σε μετάβαση STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Πληρωμή για την παράδοση 10 μονάδων (ή 10.000 λίτρων) φορτίου σε απόσταση 20 τετραγώνων STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Ενεργοποιήση όλων STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Απενεργοποιήση όλων @@ -715,6 +725,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Πατή # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Πίνακας Πρωταθλήματος Εταιριών STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' +STR_COMPANY_LEAGUE_COMPANY_RANK :{YELLOW}#{NUM} STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Μηχανικός STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Διαχειριστής Κυκλοφορίας STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Συντονιστής Μεταφορών @@ -749,6 +760,8 @@ STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Σύνο STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}Αριθμός οχημάτων που είχαν κέρδη το προηγούμενο έτος. Αυτό περιλαμβάνει οδικά οχήματα, τρένα, πλοία και αεροσκάφη STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Αριθμός οχημάτων που είχαν κέρδη την προηγούμενη περίοδο. Αυτό περιλαμβάνει οδικά οχήματα, τρένα, πλοία και αεροσκάφη STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Αριθμός των πρόσφατα επισκευασμένων σταθμών. Σταθμοί τρένων, στάσεις λεωφορείων, αεροδρόμια, κ.ο.κ. προσμετρώνται ξεχωριστά, ακόμα κι αν ανήκουν στον ίδιο σταθμό. +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}Το κέρδος του οχήματος με το χαμηλότερο εισόδημα (λαμβάνονται υπόψη μόνο οχήματα παλαιότερα των δύο ετών) +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}Το κέρδος του οχήματος με το χαμηλότερο εισόδημα (λαμβάνονται υπόψη μόνο οχήματα παλαιότερα των δύο περιόδων) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Το ποσό των χρημάτων που έγιναν σε ένα τρίμηνο με το μικρότερο κέρδος των τελευταίων 12 τριμήνων STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Το ποσό των χρημάτων που έγιναν σε ένα τρίμηνο με το μεγαλύτερο κέρδος των τελευταίων 12 τριμήνων STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Μονάδες εμπορεύματος που παραδόθηκαν στα τελευταία τέσσερα τρίμηνα @@ -803,6 +816,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Πατή STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Πατήστε στο τραγούδι για να το αφαιρέσετε από το πρόγραμμα (Προσαρμοσμένο 1 ή 2 μόνο) # Highscore window +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Κορυφαίες εταιρείες STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}, STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Επαγγελματίας STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Πρωτοπόρος @@ -980,6 +994,8 @@ STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}Το {VE STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}Το {VEHICLE} πάλιωσε πολύ και χρειάζεται επειγόντως αλλαγή STR_NEWS_TRAIN_IS_STUCK :{WHITE}Το {VEHICLE} δεν μπορεί να βρει δρόμο να συνεχίσει STR_NEWS_VEHICLE_IS_LOST :{WHITE}{G Ο Η Το} {VEHICLE} χάθηκε +STR_NEWS_VEHICLE_UNPROFITABLE_YEAR :{WHITE}{VEHICLE}, το κέρδος του προηγούμενου έτους ήταν {CURRENCY_LONG} +STR_NEWS_VEHICLE_UNPROFITABLE_PERIOD :{WHITE}{VEHICLE}, το κέρδος της προηγούμενης περιόδου ήταν {CURRENCY_LONG} STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{G Ο Η Το} {VEHICLE} δεν μπορεί να μεταβεί στον επόμενο προορισμό λόγω υπερβολικής απόστασης STR_NEWS_ORDER_REFIT_FAILED :{WHITE}Το {VEHICLE} σταμάτησε γιατί μια εντολή μετατροπής απέτυχε @@ -992,6 +1008,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ένα STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Ανοίξτε το παράθυρο ομάδων εστιασμένος στην ομάδα του οχήματος STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}{STATION} δεν δέχεται πλέον: {CARGO_LIST} +STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION} πλέον δέχεται: {CARGO_LIST} STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Έληξε η προσφορά επιδότησης:{}{}{STRING} από {G τον τη το} {STRING} πρός {G τον τη το} {STRING} δεν θα επιδοτείται πλέον. STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Η επιδότηση αποσύρθηκε:{}{}Η υπηρεσια για {STRING.subs} απο το {STRING} προς το {STRING} δεν επιδοτείται πλέον. @@ -1002,7 +1019,11 @@ STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLAC STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Η επιχορήγηση υπηρεσία που δόθηκε στην {STRING}!{}{}{STRING} από {STRING} έως {STRING} θα πληρώνει τριπλές τιμές για το/α επόμενο/α {UNITS_YEARS_OR_MINUTES}! STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Η επιχορήγηση υπηρεσίας που δόθηκε στην {STRING}!{}{}{STRING} από {STRING} έως {STRING} θα πληρώνει τετραπλές τιμές για το/α επόμενο/α {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Κυκλοφοριακό χάος στην {TOWN}!{}{}Το πρόγραμμα ανοικοδόμησης δρόμου που χρηματοδοτείται από το {STRING} φέρνει 6 μήνες δυστυχίας στους αυτοκινητιστές! +STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}Κυκλοφοριακό χάος στην {TOWN}!{}{}Το πρόγραμμα ανοικοδόμησης δρόμου που χρηματοδοτείται από το {STRING} φέρνει 6 λεπτά δυστυχίας στους οδηγούς! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Μονοπώλιο μεταφορών! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLACK}Η τοπική αρχή της {TOWN} υπογράφει σύμβαση με την {STRING} για 12 μήνες αποκλειστικών δικαιωμάτων μεταφοράς! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}Η τοπική αρχή της {TOWN} υπογράφει σύμβαση με την {STRING} για 12 λεπτά αποκλειστικών δικαιωμάτων μεταφοράς! # Extra view window STR_EXTRA_VIEWPORT_TITLE :{WHITE}Εμφάνιση {COMMA} @@ -1164,6 +1185,7 @@ STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Επιπ STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(δεν έχουν εγκατασταθεί plugins για ενοποίηση με πλατφόρμες κοινωνικής δικτύωσης) +STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{BLACK}{STRING} ({STRING}) STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :{BLACK}Πλατφόρμα: STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Plugin state: @@ -1175,6 +1197,7 @@ STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :Διπλό πρ STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNSUPPORTED_API :{RED}Μη υποστηριζόμενη έκδοση STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Άκυρη υπογραφή +STR_BASESET_STATUS :{STRING} {RED}({NUM} λείπει/κατεστραμμένο αρχεί{P ο α}) STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Αποτυχία ανάκτησης λίστας υποστηριζόμενων αναλύσεων STR_ERROR_FULLSCREEN_FAILED :{WHITE}Θέση του παιχνιδιού σε λειτουργία πλήρης οθόνης απέτυχε @@ -1284,6 +1307,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 :Ρύθμιση πελάτη (δεν αποθηκεύεται στα αποθηκευμένα παιχνίδια, επηρεάζει όλα τα παιχνίδια) @@ -1337,11 +1361,16 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Αριστερ STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Κέντρο STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Δεξιά +STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}δευτερόλεπτ{P 0 ο α} +STR_CONFIG_SETTING_INFINITE_MONEY :Απεριόριστα χρήματα: {STRING} +STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Επιτρέπονται απεριόριστες δαπάνες και απενεργοποίηση της χρεοκοπίας εταιρειών STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Μέγιστο αρχικό δάνειο: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Μέγιστο ποσό που μπορεί να δανειστεί μία εταιρία (χωρίς να λαμβάνεται υπόψη ο πληθωρισμός) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Μέγιστο ποσό που μπορεί να δανειστεί μία εταιρία (χωρίς να λαμβάνεται υπόψη ο πληθωρισμός). Εάν οριστεί σε "Χωρίς δάνειο", δεν θα είναι διαθέσιμα χρήματα εκτός εάν παρέχονται από ένα Σενάριο Παιχνιδιού ή τη ρύθμιση "Άπειρα χρήματα" +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Κανένα δάνειο STR_CONFIG_SETTING_INTEREST_RATE :Επιτόκιο: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Επιτόκιο δανείων· επίσης ελέγχεται ο πληθωρισμός αν είναι ενεργοποιημένος @@ -1361,6 +1390,7 @@ STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Θέστε πό STR_CONFIG_SETTING_SUBSIDY_DURATION :Διάρκεια επιδότησης: {STRING} ###length 2 STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Ορίστε τον αριθμό των ετών για τα οποία θα ισχύει η επιδότηση +STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT_PERIODS :Ορίστε τον αριθμό των περιόδων για τα οποία θα ισχύει η επιδότηση STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{UNITS_YEARS_OR_PERIODS} ###setting-zero-is-special @@ -1378,8 +1408,8 @@ STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Όταν είν STR_CONFIG_SETTING_DISASTERS :Καταστροφές: {STRING} STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Εναλλαγή καταστροφών που μπορούν περιστασιακά να εμποδίσουν ή να καταστρέψουν οχήματα ή υποδομές -STR_CONFIG_SETTING_CITY_APPROVAL :Στάση δημοτικού συμβουλίου ως προς τον μετασχηματισμό της περιοχής: {STRING} -STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Επιλογή πόσο ο θόρυβος και η περιβαλλοντικη καταστροφή άπο εταιρίες επηρεάζουν τα ποσοστά αποδοχής και περαιτέρω έργα στη περιοχή +STR_CONFIG_SETTING_CITY_APPROVAL :Στάση τοπικής αρχής: {STRING} +STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Επιλογή πόσο ο θόρυβος και η περιβαλλοντικη καταστροφή άπο εταιρίες επηρεάζουν τα ποσοστά αποδοχής και περαιτέρω έργα στην πόλη STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Όριο ύψους χάρτη: {STRING} STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Ορίστε το μέγιστο ύψος του εδάφους του χάρτη. Επιλέγοντας "αυτόματο" μία καλή τιμή θα επιλεχθεί μετά την παραγωγή του εδάφους @@ -1487,6 +1517,7 @@ STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Κάθε εμφ STR_CONFIG_SETTING_BRIBE :Επιτρέπεται η δωροδοκία της τοπικής αρχής: {STRING} ###length 2 STR_CONFIG_SETTING_BRIBE_HELPTEXT :Επιτρέπεται στις εταιρείες να προσπαθήσουν να δωροδοκήσουν την τοπική αρχή. Αν η δωροδοκία γίνει αντιληπτή από τον ελεγκτή, η εταιρεία δε θα μπορεί να ενεργήσει στην πόλη για έξι μήνες +STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :Επιτρέψτε στις εταιρείες να προσπαθήσουν να δωροδοκήσουν την τοπική αρχή της πόλης. Εάν η δωροδοκία γίνει αντιληπτή από επιθεωρητή, η εταιρεία δεν θα μπορεί να δρα στην πόλη για έξι λεπτά STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Επιτρέπεται η αγορά αποκλειστικών δικαιωμάτων μεταφοράς: {STRING} ###length 2 @@ -1549,22 +1580,30 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :Για όλα STR_CONFIG_SETTING_WARN_INCOME_LESS :Ειδοποίηση όταν τα έσοδα ενός οχήματου είναι αρνητικά: {STRING} ###length 2 -STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Όταν είναι ενεργοποιημένη, στέλνεται μήνυμα ειδήσεων όταν κάποιο όχημα δεν έχει αποφέρει κέρδος εντός ενός ημερολογιακού έτους +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Όταν είναι ενεργοποιημένη, εμφανίζεται ειδοποίηση όταν κάποιο όχημα δεν έχει αποφέρει κέρδος εντός ενός έτους +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Όταν είναι ενεργοποιημένη, εμφανίζεται ειδοποίηση όταν κάποιο όχημα δεν έχει αποφέρει κέρδος εντός μιας περιόδου STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Τα οχήματα δεν λήγουν ποτέ: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Όταν είναι ενεργοποιημένη, όλα τα μοντέλα οχημάτων παραμένουν διαθέσιμα για πάντα μετά την παρουσίασή τους STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Χρονομέτρηση: {STRING} +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Επιλέξτε τις μονάδες χρονομέτρησης του παιχνιδιού. Αυτό δεν μπορεί να αλλάξει αργότερα.{}{}Η λειτουργία "βάσει ημερολογίου" είναι η κλασική εμπειρία του OpenTTD, με το ένα έτος να αποτελείται από 12 μήνες και κάθε μήνα να έχει 28-31 ημέρες.{}{}Εναλλακτικά, στη λειτουργία "βάσει ρολογιού τοίχου", η παραγωγή φορτίου και τα οικονομικά μεγέθη βασίζονται σε προσαυξήσεις ενός λεπτού, που είναι περίπου όσο διαρκεί ένας μήνας 30 ημερών σε λειτουργία "βάσει ημερολογίου". Αυτά ομαδοποιούνται σε περιόδους 12 λεπτών, που ισοδυναμούν με ένα έτος σε λειτουργία "βάσει ημερολογίου".{}{}Σε κάθε λειτουργία υπάρχει πάντα ένα κλασικό ημερολόγιο, το οποίο χρησιμοποιείται για τις ημερομηνίες εισαγωγής οχημάτων, σπιτιών και άλλων υποδομών ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Ημερολόγιο +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Ρολόι τοίχου +STR_CONFIG_SETTING_MINUTES_PER_YEAR :Λεπτά ανά έτος: {STRING} +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Επιλέξτε τον αριθμό των λεπτών σε ένα ημερολογιακό έτος. Η προεπιλογή είναι 12 λεπτά. Ρυθμίστε στο 0 για να σταματήσετε την αλλαγή της ημερολογιακής ώρας. Αυτή η ρύθμιση δεν επηρεάζει την οικονομική προσομοίωση του παιχνιδιού και είναι διαθέσιμη μόνο όταν χρησιμοποιείτε χρονομέτρηση ρολογιού τοίχου +STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special +STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (ο ημερολογιακός χρόνος έχει παγώσει) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Κλίμακα παραγωγής φορτίου πόλης: {STRING} STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Κλιμάκωση της παραγωγής φορτίου των πόλεων κατά αυτό το ποσοστό STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Κλιμάκωση της παραγωγής φορτίου των βιομηχανιών: {STRING} STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Κλιμάκωση της παραγωγής φορτίου των βιομηχανιών κατά αυτό το ποσοστό +STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Αυτόματη ανανέωση όταν ένα όχημα παλιώνει: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Όταν είναι ενεργοποιημένη, τα οχήματα που πλησιάζουν το τέλος της ζωής τους αντικαθίσταται αυτόματα όταν πληρούνται οι προϋποθέσεις αντικατάστασής του @@ -1656,6 +1695,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Οδηγούν STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Οδηγούν από δεξιά STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Περιστροφή χάρτη υψομετρίας: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Επιλέξτε με ποιον τρόπο θα περιστραφεί η εικόνα του ύψους χάρτη, για να ταιριάζει στον κόσμο του παιχνιδιού ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Αριστερόστροφη STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Δεξιόστροφη @@ -1668,8 +1708,8 @@ STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}Ένα STR_CONFIG_SETTING_STATION_SPREAD :Μέγιστη έκταση σταθμού: {STRING} STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Μέγιστη περιοχή στην οποία μπορούν να εκτείνονται τα τμήματα ενός σταθμού. Σημειώστε ότι υψηλές τιμές καθυστερούν το παιχνίδι -STR_CONFIG_SETTING_SERVICEATHELIPAD :Αυτόματη επισκευή ελικοπτέρων στα ελικοδρόμια: {STRING} -STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Επισκευή ελικοπτέρων μετά από κάθε προσγείωση, ακόμη κι αν δεν υπάρχει υπόστεγο στο αεροδρόμιο +STR_CONFIG_SETTING_SERVICEATHELIPAD :Αυτόματη συντήρηση ελικοπτέρων στα ελικοδρόμια: {STRING} +STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Συντήρηση ελικοπτέρων μετά από κάθε προσγείωση, ακόμη κι αν δεν υπάρχει υπόστεγο στο αεροδρόμιο STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Σύνδεση γραμμής εργαλείων τοπίου με γραμμή εργαλείων σιδηροτροχιάς/δρόμου/νερού/αεροδρομίου: {STRING} STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Όταν ανοίγει γραμμή εργαλείων κατασκευής κάποιου τύπου μεταφορικών μέσων, ανοίγει επίσης η γραμμή εργαλείων για τη μορφοποίηση του εδάφους @@ -1803,7 +1843,7 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Διατήρη STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Διατήρηση ανοικτών των εργαλείων για γέφυρες, σήραγγες, κλπ μετά από τη χρήση STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Αυτόματη αφαίρεση των σηματοδοτών κατά τη διάρκεια κατασκευής σιδηροτροχιών: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Αυτόματη αφαίρεση σηματοδοτών κατά τη διάρκεια κατασκευής σιδηροτροχιών εάν οι σηματοδότες είναι στη διαδρομή. Σημειώστε ότι αυτό μπορεί δυνητικά να οδηγήσει σε συγκρούσεις τρένων. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Αυτόματη αφαίρεση σηματοδοτών κατά τη διάρκεια κατασκευής σιδηροτροχιών εάν οι σηματοδότες είναι στη διαδρομή. Σημειώστε ότι αυτό μπορεί δυνητικά να οδηγήσει σε συγκρούσεις τρένων STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Όριο ταχύτητας γρήγορης κίνησης: {STRING} STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Όριο ταχύτητας του παιχνιδιού όταν είναι ενεργοποιημένη η γρήγορη ταχύτητα. 0 = κανένα όριο (όσο γρήγορα επιτρέπει ο υπολογιστής σας). Τιμές κάτω του 100% επιβραδύνουν το παιχνίδι. Το ανώτατο όριο εξαρτάται από τις προδιαγραφές του υπολογιστή σας και μπορεί να μεταβάλλεται ανάλογα με το παιχνίδι. @@ -1880,7 +1920,7 @@ STR_CONFIG_SETTING_SERVINT_TRAINS :Προκαθο STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Ορίστε το προκαθορισμένο διάστημα μεταξύ συντηρήσεων για τα νέα οχήματα τρένων, όταν δεν δίνεται άλλο διάστημα για το όχημα STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Προκαθορισμένο διάστημα μεταξύ συντηρήσεων για οδικά οχήματα: {STRING} STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Ορίστε το προκαθορισμένο διάστημα μεταξύ συντηρήσεων για τα νέα οδικά οχήματα, όταν δεν δίνεται άλλο διάστημα για το όχημα -STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Προκαθορισμένο διάστημα επισκευών αεροσκαφών: {STRING} +STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Προκαθορισμένο διάστημα συντήρησης αεροσκαφών: {STRING} STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Ορίστε το προκαθορισμένο διάστημα μεταξύ συντηρήσεων για τα νέα αεροσκάφη, όταν δεν δίνεται άλλο διάστημα για το αεροσκάφος STR_CONFIG_SETTING_SERVINT_SHIPS :Προκαθορισμένο διάστημα μεταξύ επισκευών για τα πλοία: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Ορίστε το προκαθορισμένο διάστημα μεταξύ συντηρήσεων για τα νέα πλοία, όταν δεν δίνεται άλλο διάστημα για το πλοίο @@ -1957,7 +1997,7 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Το έτος STR_CONFIG_SETTING_STARTING_YEAR :Έτος εκκίνησης: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Χρονιά τέλους σκορ: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Η χρονιά στην οποία το παιχνίδι τελειώνει για λόγους σκορ. Στο τέλος αυτής της χρονιάς, το σκορ της εταιρίας καταγράφεται και η οθόνη με τα κορυφαία σκορ εμφανίζεται, αλλά οι παίκτες μπορούν να συνεχίσουν να παίζουν μετά από αυτή.{}Εάν αυτή είναι πριν από την χρονιά έναρξης, η οθόνη με τα κορυφαία σκορ δεν εμφανίζεται ποτέ. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Η χρονιά στην οποία το παιχνίδι τελειώνει για λόγους σκορ. Στο τέλος αυτής της χρονιάς, το σκορ της εταιρίας καταγράφεται και η οθόνη με τα κορυφαία σκορ εμφανίζεται, αλλά οι παίκτες μπορούν να συνεχίσουν να παίζουν μετά από αυτή.{}Εάν αυτή είναι πριν από την χρονιά έναρξης, η οθόνη με τα κορυφαία σκορ δεν εμφανίζεται ποτέ STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Ποτέ @@ -2169,6 +2209,7 @@ STR_CONFIG_SETTING_ACCOUNTING :Λογιστι STR_CONFIG_SETTING_VEHICLES :Οχήματα STR_CONFIG_SETTING_VEHICLES_PHYSICS :Φυσική STR_CONFIG_SETTING_VEHICLES_ROUTING :Δρομολογήσεις +STR_CONFIG_SETTING_VEHICLES_ORDERS :Εντολές STR_CONFIG_SETTING_LIMITATIONS :Περιορισμοί STR_CONFIG_SETTING_ACCIDENTS :Καταστροφές/Ατυχήματα STR_CONFIG_SETTING_GENWORLD :Δημιουργία Κόσμου @@ -2234,6 +2275,7 @@ STR_INTRO_MULTIPLAYER :{BLACK}Παιχ STR_INTRO_GAME_OPTIONS :{BLACK}Επιλογές Παιχνιδιού STR_INTRO_HIGHSCORE :{BLACK}Πίνακας Βαθμολογιών +STR_INTRO_HELP :{BLACK}Βοήθεια και εγχειρίδια χρήσης STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Ρυθμίσεις STR_INTRO_NEWGRF_SETTINGS :{BLACK}Ρυθμίσεις NewGRF STR_INTRO_ONLINE_CONTENT :{BLACK}Διαδικτυακό Περιεχόμενο @@ -2278,7 +2320,8 @@ STR_ABANDON_GAME_QUERY :{YELLOW}Είσ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Είστε σίγουροι ότι θέλετε να εγκαταλείψετε το σενάριο; # Help window -STR_HELP_WINDOW_CAPTION :{WHITE}Βοήθεια και εγχειρίδια +STR_HELP_WINDOW_CAPTION :{WHITE}Βοήθεια και εγχειρίδια χρήσης +STR_HELP_WINDOW_WEBSITES :{BLACK}Ιστοσελίδες STR_HELP_WINDOW_DOCUMENTS :{BLACK}Έγγραφα STR_HELP_WINDOW_README :{BLACK}Εμφάνιση readme STR_HELP_WINDOW_CHANGELOG :{BLACK}Ιστορικό αλλαγών @@ -2290,7 +2333,7 @@ STR_HELP_WINDOW_BUGTRACKER :{BLACK}Αναφ STR_HELP_WINDOW_COMMUNITY :{BLACK}Κοινότητα # Cheat window -STR_CHEATS :{WHITE}Απατεωνιές +STR_CHEATS :{WHITE}Ρυθμίσεις πεδίου δοκιμών STR_CHEAT_MONEY :{LTBLUE}Αύξηση χρημάτων κατά {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Παίζετε με την εταιρία: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Μαγική μπουλντόζα (αφαιρεί βιομηχανίες, αμετακίνητα αντικείμενα): {ORANGE}{STRING} @@ -2301,6 +2344,7 @@ STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Μετα STR_CHEAT_CHANGE_DATE :{LTBLUE}Αλλαγή ημ/νίας: {ORANGE}{DATE_SHORT} STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Αλλαγή τρέχοντος έτους STR_CHEAT_SETUP_PROD :{LTBLUE}Ενεργοποίηση δυνατότητας αλλαγής τιμών παραγωγής: {ORANGE}{STRING} +STR_CHEAT_STATION_RATING :{LTBLUE}Ορισμός βαθμολογιών σταθμών στο 100%: {ORANGE}{STRING} # Livery window STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Νέος Χρωματισμός @@ -2313,15 +2357,17 @@ STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Εμφά STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Εμφάνιση χρωμάτων ομάδων τραίνων STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Εμφάνιση χρωμάτων ομάδων οχημάτων δρόμου STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Εμφάνιση χρωμάτων ομάδων πλοίων +STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Εμφάνιση χρωμάτων ομάδων αεροσκαφών STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Επιλογή του βασικού χρώματος για το επιλεγμένο θέμα. Με Ctrl+Κλικ ορίζεται το χρώμα σε κάθε θέμα STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Επιλογή του δευτερεύοντος χρώματος για το επιλεγμένο μοτίβο. Με Ctrl+Κλικ ορίζεται το χρώμα για κάθε θέμα STR_LIVERY_PANEL_TOOLTIP :{BLACK}Επιλέξτε το χρωματικό μοτίβο για αλλαγή ή πολλαπλά μοτίβα με Ctrl+Κλικ. Πατήστε στο κουτάκι για να επιλέξετε τη χρήση του μοτίβου STR_LIVERY_TRAIN_GROUP_EMPTY :Δεν έχουν οριστεί ομάδες τραίνων STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Δεν έχουν οριστεί ομάδες οχημάτων δρόμου STR_LIVERY_SHIP_GROUP_EMPTY :Δεν έχουν οριστεί ομάδες πλοίων +STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Δεν έχουν οριστεί ομάδες αεροσκαφών ###length 23 -STR_LIVERY_DEFAULT :Πρότυπο Μοτίβου Χρωμάτων +STR_LIVERY_DEFAULT :Προεπιλεγμένο Μοτίβο Χρωμάτων STR_LIVERY_STEAM :Ατμοκίνητη Μηχανή STR_LIVERY_DIESEL :Πετρελαιοκίνητη Μηχανή STR_LIVERY_ELECTRIC :Ηλεκτροκίνητη Μηχανή @@ -2424,6 +2470,9 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Μέγε STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Μέγεθος χάρτη του παιχνιδιού{}Πατήστε για ταξινόμηση ανά περιοχή STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Ημερομηνία STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Τρέχουσα ημερομηνία +STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}ω {NUM}λ +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}Χρόνος παιχνιδιού +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}Χρόνος παιχνιδιού χωρίς{}το παιχνίδι να βρίσκεται σε παύση STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Γλώσσα, έκδοση διακομιστή, κλπ. STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Πατήστε σε ένα παιχνίδι από τη λίστα για το επιλέξετε @@ -2439,6 +2488,7 @@ STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Διε STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Κωδικός πρόσκλησης: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Ημερομηνία έναρξης: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Τρέχουσα ημερομηνία: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Χρόνος παιχνιδιού: {WHITE}{NUM}ω {NUM}λ STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Script Παιχνιδιού: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Προστατευμένο με κωδικό! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}ΔΙΑΚΟΜΙΣΤΗΣ ΕΚΤΟΣ ΛΕΙΤΟΥΡΓΙΑΣ @@ -2616,6 +2666,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Το ό STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Το όνομα του server σας δεν έχει οριστεί. Το όνομα μπορεί να οριστεί την κορυφή του παραθύρου Multiplayer STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Η έκδοση του πελάτη δεν ταιριάζει με την έκδοση του διακομιστή STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Λανθασμένος κωδικός +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Δεν βρίσκεστε στη λίστα των επιτρεπόμενων πελατών STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Ο διακομιστής είναι γεμάτος STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Έχει απαγορευτεί η είσοδος σας από τον διακομιστή STR_NETWORK_ERROR_KICKED :{WHITE}Έχετε εκδιωχθεί από το παιχνίδι @@ -2674,13 +2725,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :αναμονή STR_NETWORK_MESSAGE_CLIENT_LEAVING :αποχώρηση STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} συμμετέχει στο παιχνίδι -STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} συμμετέχει στο παιχνίδι (Πελάτης #{2:NUM}) -STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} συμμετέχει στην εταιρία #{2:NUM} +STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {0:STRING} συμμετέχει στο παιχνίδι (Πελάτης #{2:NUM}) +STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {0:STRING} συμμετέχει στην εταιρία #{2:NUM} STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} συμμετέχει στους θεατές -STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} ξεκίνησε μια νέα εταιρία (#{2:NUM}) -STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} αποχώρησε από το παιχνίδι ({2:STRING}) +STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {0:STRING} ξεκίνησε μια νέα εταιρία (#{2:NUM}) +STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {0:STRING} αποχώρησε από το παιχνίδι ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} άλλαξαν το όνομά τους σε {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} έδωσε {2:CURRENCY_LONG} σε {1:STRING} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} έδωσε {2:CURRENCY_LONG} στον {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Ο διακομιστής έκλεισε την συνεδρία STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Ο διακομιστής επανεκκινεί...{}Παρακαλώ περιμένετε... STR_NETWORK_MESSAGE_KICKED :*** {STRING} εκδιώχθηκε. Λόγος: ({STRING}) @@ -2827,14 +2878,14 @@ STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Κατασκε STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Κατασκευή Μονοτρόχιου Σιδηρόδρομου STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Κατασκευή Σιδηροδρόμου Maglev -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Κατασκευή σιδηρόδρομου. Με Ctrl εναλλάσσεται η κατασκευή/αφαίρεση σιδηρόδρομου. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Κατασκευή σιδηροδρομικής γραμμής χρησιμοποιώντας την Αυτόματη Σιδηροτροχιά. Με Ctrl εναλλάσσεται η κατασκευή/αφαίρεση σιδηρόδρομου. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Κατασκευή αμαξοστάσιου (για αγορά και επισκευή τρένων). Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Κατασκευή σιδηροτροχιάς. Ctrl+Κλικ για αφαίρεση σιδηροτροχιάς. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Κατασκευή σιδηροτροχιάς με χρήση της Αυτόματης Σιδηροτροχιάς. Ctrl+Κλικ για αφαίρεση σιδηροτροχιάς. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Κατασκευή αμαξοστάσιου (για αγορά και επισκευή τρένων). Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Μετατροπή σιδηροτροχιάς σε σημείο καθοδήγησης. Με Ctrl ενεργοποιείται η συνένωση σημείων καθοδήγησης. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Κατασκευή σταθμού τρένων. Με Ctrl ενεργοποιείται η συνένωση σταθμών. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Κατασκευή σηματοδοτών. Με Ctrl εναλλάσσονται σηματοφόροι/σηματοδότες{}Με σύρσιμο κατασκευάζονται σηματοδότες κατά μήκος μιας ευθείας σιδηροτροχιάς. Με το Ctrl πατημένο, κατασκευάζονται σηματοδότες μέχρι την επομένη διασταύρωση ή τον επόμενο σηματοδότη{}Με Ctrl+Κλικ εναλλάσσεται το άνοιγμα του παραθύρου επιλογής σηματοδοτών. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Κατασκευή γέφυρας σιδηρόδρομου. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Κατασκευή τούνελ σιδηρόδρομου. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Κατασκευή σταθμού τρένων. Ctrl+Κλικ για επιλογή άλλου σταθμού προς συνένωση. Με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Κατασκευή σηματοδοτών. Ctrl+Κλικ για κατασκευή του εναλλακτικού στυλ σηματοδότη{}Με Κλικ+σύρσιμο κατασκευάζονται σηματοδότες κατά μήκος μιας σιδηροτροχιάς ανά το ορισμένο διάστημα. Ctrl+Κλικ+σύρσιμο για κατασκευή σηματοδοτών μέχρι την επομένη διασταύρωση, σταθμό ή σηματοδότη{}Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Κατασκευή γέφυρας σιδηρόδρομου. Επιπρόσθετα πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Κατασκευή τούνελ σιδηρόδρομου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Εναλλαγή κατασκευής/αφαίρεσης για σιδηρόδρομους, σηματοδότες, σημείων καθοδήγησης και σταθμών. Κρατώντας πατημένο το Ctrl αφαιρεί και τον σιδηρόδρομο από τα σημεία καθοδήγησης και σταθμούς STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Μετατροπή/Αναβάθμιση του τύπου γραμμής. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους @@ -2895,6 +2946,10 @@ 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_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_BRIDGE_NAME_SUSPENSION_STEEL :Ατσάλινη, με Αναρτήσεις STR_BRIDGE_NAME_GIRDER_STEEL :Ατσάλινη, με Δοκούς STR_BRIDGE_NAME_CANTILEVER_STEEL :Ατσάλινη, Κρεμαστή @@ -2908,20 +2963,20 @@ STR_BRIDGE_TUBULAR_SILICON :Σιλικόν # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Κατασκευή Δρόμου STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Κατασκευή Τροχιόδρομου -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Κατασκευή κομματιού δρόμου. Με Ctrl εναλλάσσεται η κατασκευή/αφαίρεση δρόμου. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Κατασκευή τμήματος δρόμου. Ctrl+Κλικ για αφαίρεση τμήματος δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Κατασκευή κομματιού τροχιοδρόμου. Με Ctrl εναλλάσσεται η κατασκευή/αφαίρεση τροχιόδρομου. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Κατασκευή οδικού δικτύου με χρήση της λειτουργίας Αυτόματου Δρόμου. Με Ctrl εναλλάσσεται η κατασκευή/αφαίρεση δρόμου. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Κατασκευή τροχιοδρόμου με χρήση της λειτουργίας Αυτόματης Γραμμής. Το Ctrl εναλλάσσει την κατασκευή/αφαίρεση τροχιόδρομου. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Κατασκευή αμαξοστασίου οχημάτων (για αγορά και επισκευή οχημάτων). Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Κατασκευή αμαξοστασίου οχημάτων δρόμου (για αγορά και επισκευή οχημάτων). Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Κατασκευή αμαξοστασίου οχημάτων τραμ (για αγορά και επισκευή οχημάτων). Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Κατασκευή σταθμού λεωφορείων. Με Ctrl ενεργοποιείται η συνένωση σταθμών. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Κατασκευή επιβατικού σταθμού τραμ. Με Ctrl ενεργοποιείται η συνένωση επιβατικών σταθμών. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Κατασκευή σταθμού φόρτωσης φορτηγών. Με Ctrl ενεργοποιείται η συνένωση σταθμών φόρτωσης. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Κατασκευή εμπορευματικού σταθμού τραμ. Με Ctrl ενεργοποιείται συνένωση εμπορευματικών σταθμών. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Ενεργοποίηση/Απενεργοποίηση μονόδρομων -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Κατασκευή γέφυρας δρόμου. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Κατασκευή γέφυρας δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Κατασκευή γέφυρας τροχιοδρόμου. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Κατασκευή τούνελ δρόμου. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Κατασκευή τούνελ δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Κατασκευή τούνελ τροχιοδρόμου. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Εναλλαγή κατασκευής/αφαίρεσης για αυτοκινητόδρομους STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Εναλλαγή κτισίματος/αφαίρεσης της κατασκευής τροχιόδρομου @@ -2995,7 +3050,7 @@ STR_STATION_BUILD_NOISE :{BLACK}Παρα # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Μορφοποίηση εδάφους -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Χαμηλώστε μια γωνία του εδάφους. Με σύρσιμο υποβαθμίζετε την πρώτη επιλεγμένη γωνία και ισοπεδώνετε την επιφάνεια στο νέο ύψος. Με Ctrl επιλέγετε την επιφάνεια διαγώνια. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Χαμήλωμα μιας γωνίας εδάφους. Κλικ+σύρσιμο για χαμήλωμα της πρώτης επιλεγμένης γωνίας και ισοπέδωση της επιφάνειας στο νέο ύψος της γωνίας. Με Ctrl+Κλικ+σύρσιμο επιλέγεται η επιφάνεια διαγώνια. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Ανυψώστε μια γωνία του εδάφους. Με σύρσιμο ανυψώνεται η πρώτη επιλεγμένη γωνία και ισοπεδώνεται η επιφάνεια στο νέο ύψος. Με Ctrl επιλέγετε την επιφάνεια διαγώνια. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστος STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Ισοπέδωση της γης στο ύψος της πρώτης γωνίας. Με Ctrl επιλέγετε την επιφάνεια διαγώνια. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Αγορά γης για μελλοντική χρήση. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους @@ -3107,7 +3162,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Επιλ # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Πληροφορίες Περιοχής Εδάφους -STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Κεντράρετε την κεντρική προβολή στην τοποθεσία του τετραγωνίδιου. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία του τετραγωνίδιου +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της κεντρικής προβολής στην τοποθεσία του τετραγωνίδιου. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία του τετραγωνίδιου STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Κόστος καθαρισμού: {LTBLUE}Μ/Δ STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Κόστος καθαρισμού: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Κέρδος όταν καθαριστεί: {LTBLUE}{CURRENCY_LONG} @@ -3119,7 +3174,8 @@ STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Ιδιο STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Τοπική αρχή: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Καμιά STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Συντεταγμένες: {LTBLUE}{NUM} x {NUM} x {NUM} -STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Κατασκευή: {LTBLUE}{DATE_LONG} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Αρ. τετραγωνιδίου: {LTBLUE}{NUM} ({HEX}) +STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Κατασκευή/Ανακατασκευή: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Κατηγορία σταθμού: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Τύπος σταθμού: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Κατηγορία αεροδρομίου: {LTBLUE}{STRING} @@ -3330,6 +3386,7 @@ STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :Επιλέξτ STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Ονόματα πόλεων: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Επιλογή στυλ ονομάτων πόλεων STR_MAPGEN_DATE :{BLACK}Ημερομηνία: +STR_MAPGEN_DATE_TOOLTIP :{BLACK}Επιλέξτε ημερομηνία έναρξης STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Αριθμός βιομηχανιών: STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Επιλέξτε την πυκνότητα των βιομηχανιών ή έναν προσαρμοσμένο αριθμό STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Υψηλότερη κορυφή: @@ -3414,6 +3471,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Επίπ STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Δημιουργία επίπεδου εδάφους STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Τυχαίο έδαφος STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Ύψος επίπεδης γης: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Επιλέξτε το ύψος της ξηράς πάνω από την επιφάνεια της θάλασσας STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Μετακίνηση του ύψους του επίπεδου εδάφους ένα κάτω STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Μετακίνηση του ύψους του επίπεδου εδάφους ένα πάνω @@ -3500,6 +3558,7 @@ STR_SAVE_PRESET_SAVE :{BLACK}Αποθ STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Αποθήκευση προκαθορισμένου, χρησιμοποιώντας το επιλεγμένο όνομα # NewGRF parameters window +STR_BASEGRF_PARAMETERS_CAPTION :{WHITE}Αλλαγή παραμέτρων βασικού σετ γραφικών STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Αλλαγή παραμέτρων NewGRF STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Κλείσιμο STR_NEWGRF_PARAMETERS_RESET :{BLACK}Επαναφορά @@ -3516,6 +3575,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Επιθ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} στο {HEX} STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Αντικείμενο STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Τύπος σιδηροτροχιάς +STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Τύπος δρόμου STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Μεταβλητή NewGRF 60+x παράμετρος (δεκαεξαδικό) @@ -3534,6 +3594,7 @@ STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Μετα STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Μετατόπιση κέντρου STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Ευθυγραμμισμένα sprite +STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Σταυρός στόχου STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Επαναφορά σχετικού STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Επαναφορά των τρεχούμενων σχετικών στιγμάτων @@ -3648,6 +3709,7 @@ STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Πόλη) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Πληθυσμός: {ORANGE}{COMMA}{BLACK} Σπίτια: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} προηγούμενος μήνας: {ORANGE}{COMMA}{BLACK} μέγιστο: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}{CARGO_LIST} τελευταίο λεπτό: {ORANGE}{COMMA}{BLACK} μεγ.: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Εμπορεύματα που χρειάζονται για την επέκταση της πόλης: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} απαιτείται STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} απαιτείται τον χειμώνα @@ -3753,6 +3815,7 @@ STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Υπηρ STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} από τον σταθμό {STRING} προς τον σταθμό {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Πατήστε στην υπηρεσία για κεντράρισμα στην βιομηχανία/πόλη. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία της βιομηχανίας/πόλης STR_SUBSIDIES_OFFERED_EXPIRY_DATE :ανά {DATE_SHORT} +STR_SUBSIDIES_OFFERED_EXPIRY_TIME :μέσα σε {UNITS_MONTHS_OR_MINUTES} STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :έως {DATE_SHORT} STR_SUBSIDIES_SUBSIDISED_EXPIRY_TIME :{UNITS_MONTHS_OR_MINUTES} απομένουν @@ -3778,6 +3841,12 @@ STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOI STR_STATION_LIST_NONE :{YELLOW}- Κανένας - STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Επιλογή όλων των εγκαταστάσεων STR_STATION_LIST_CARGO_FILTER_ALL_AND_NO_RATING :Όλα τα είδη φορτίων και χωρίς βαθμολογία +STR_STATION_LIST_CARGO_FILTER_MULTIPLE :Πολλαπλά είδη φορτίων +STR_STATION_LIST_CARGO_FILTER_NO_CARGO_TYPES :Κανένα είδος φορτίου +STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :Μόνο καμία βαθμολογία φορτίου +STR_STATION_LIST_CARGO_FILTER_SELECT_ALL :Επιλογή όλων και χωρίς βαθμολογία +STR_STATION_LIST_CARGO_FILTER_NO_RATING :Καμία βαθμολογία φορτίου +STR_STATION_LIST_CARGO_FILTER_EXPAND :Εμφάνιση περισσότερων... # Station view window STR_STATION_VIEW_CAPTION :{WHITE}{STATION} {STATION_FEATURES} @@ -3946,6 +4015,7 @@ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Όνομα Δι STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Εισάγετε το χρηματικό ποσό που θέλετε να δώσετε STR_BUY_COMPANY_MESSAGE :{WHITE}Ψάχνουμε μία εταιρία μεταφορών για να εξαγοράσει την εταιρία μας.{}{}Θέλετε να εξαγοράσετε την {COMPANY} για {CURRENCY_LONG}; +STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Σε μια εχθρική εξαγορά της {COMPANY} θα αγοράσετε όλα τα περιουσιακά στοιχεία, θα εξοφλήσετε όλα τα δάνεια και θα πληρώσετε κέρδη δύο ετών.{}{}Το σύνολο εκτιμάται ότι είναι {CURRENCY_LONG}.{}{}Θέλετε να προχωρήσετε με αυτήν την εχθρική εξαγορά; # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Υποδομή της {COMPANY} @@ -3973,12 +4043,13 @@ STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Ονόματα βιομηχανιών - πατήστε στο όνομα για κεντράρισμα στη βιομηχανία. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία της βιομηχανίας STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Αποδεκτό φορτίο: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Παραγόμενο εμπόρευμα: {SILVER}{STRING} -STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Όλοι οι τύποι φορτίου +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Όλα τα είδη φορτίου STR_INDUSTRY_DIRECTORY_FILTER_NONE :Καμία # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Παραγωγή προηγούμενου μήνα: +STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Παραγωγή τελευταίου λεπτού: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% μεταφέρθηκαν) STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα εικόνας στην περιοχή της βιομηχανίας. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην περιοχή της βιομηχανίας STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Επίπεδο παραγωγής: {YELLOW}{COMMA}% @@ -4017,16 +4088,17 @@ STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Διαθέσι STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Διαχείριση λίστας STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Στείλτε οδηγίες σε όλα τα οχήματα σε αυτήν τη λίστα STR_VEHICLE_LIST_REPLACE_VEHICLES :Αντικατάσταση οχημάτων -STR_VEHICLE_LIST_SEND_FOR_SERVICING :Στείλτε για Επισκευή +STR_VEHICLE_LIST_SEND_FOR_SERVICING :Στείλτε για επισκευή +STR_VEHICLE_LIST_CREATE_GROUP :Δημιουργία ομάδας STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Κέρδος αυτό το έτος: {CURRENCY_LONG} (προηγούμενο έτος: {CURRENCY_LONG}) -STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{TINY_FONT}{BLACK}Κέρδος αυτήν την περίοδο: {CURRENCY_LONG} (τελευταία περίοδος: {CURRENCY_LONG}) +STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{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 :Στείλτε στο Αμαξοστάσιο -STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Στείλε στο Ναυπηγείο -STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Στείλε στο Υπόστεγο +STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Στείλτε στο αμαξοστάσιο +STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Στείλτε στο αμαξοστάσιο +STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Στείλε στο ναυπηγείο +STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Στείλε στο υπόστεγο STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Πατήστε για να σταματήσουν όλα τα οχήματα στη λίστα STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Πατήστε για να ξεκινήσουν όλα τα οχήματα στη λίστα @@ -4117,7 +4189,7 @@ STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Εύρο STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Τύπος αεροσκάφους: {GOLD}{STRING} ###length 3 -STR_CARGO_TYPE_FILTER_ALL :Όλα τα είδη φορτίων +STR_CARGO_TYPE_FILTER_ALL :Όλα τα είδη φορτίου STR_CARGO_TYPE_FILTER_FREIGHT :Φορτίο STR_CARGO_TYPE_FILTER_FREIGHT.geniki :Φορτίου STR_CARGO_TYPE_FILTER_NONE :Κανένα @@ -4149,7 +4221,7 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορ ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου οχήματος τρένου. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου οχήματος δρόμου. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά -STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου πλοίου. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου πλοίου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου αεροσκάφους. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά ###length VEHICLE_TYPES @@ -4245,7 +4317,7 @@ STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Κλων STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Αυτό θα αγοράσει ένα αντίγραφο του τρένου μαζί με τα όλα τα βαγόνια. Πατήστε αυτό το κουμπί και μετά σε κάποιο τρένο μέσα ή έξω από το αμαξοστάσιο. Με Ctrl+Κλικ θα έχει τις ίδιες εντολές. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς να γίνει η αγορά STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Αυτό θα αγοράσει ένα αντίγραφο του οχήματος. Πατήστε αυτό το κουμπί και μετά σε κάποιο όχημα μέσα ή έξω από το αμαξοστάσιο. Με Ctrl+Κλικ θα έχει τις ίδιες εντολές. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς να γίνει η αγορά STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Αυτό θα αγοράσει ένα αντίγραφο ενός πλοίου. Πατήστε αυτό το κουμπί και μετά σε κάποιο πλοίο μέσα ή έξω από το ναυπηγείο. Με Ctrl+Κλικ θα έχει τις ίδιες εντολές. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς να γίνει η αγορά -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Αυτό θα αγοράσει ένα αντίγραφο του αεροσκάφους. Πατήστε αυτό το κουμπί και μετά σε κάποιο αεροσκάφος μέσα στο ή έξω από το υπόστεγο. Με Ctrl+Κλικ θα έχει τις ίδιες εντολές. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς να γίνει η αγορά +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Αγορά αντιγράφου του αεροσκάφους. Πατήστε αυτό το κουμπί και μετά σε κάποιο αεροσκάφος μέσα ή έξω από το υπόστεγο. Με Ctrl+Κλικ θα διαμοιραστούν τις εντολές. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της εικόνας στην τοποθεσία του αμαξοστάσιου. Με Ctrl+Κλικ ανοίγει νέο παράθυρο εμφάνισης στην τοποθεσία του αμαξοστασίου @@ -4295,8 +4367,15 @@ STR_ENGINE_PREVIEW_AIRCRAFT.geniki :αεροσκά STR_ENGINE_PREVIEW_SHIP :{G=n}πλοίου STR_ENGINE_PREVIEW_SHIP.geniki :πλοίου +STR_ENGINE_PREVIEW_TEXT3 :{BLACK}{STRING}{}{5:STRING}{}{STRING} +STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING}{}{STRING}{}{STRING}{}{STRING} STR_ENGINE_PREVIEW_COST_WEIGHT :Κόστος: {CURRENCY_LONG} Βάρος: {WEIGHT_SHORT} STR_ENGINE_PREVIEW_COST_MAX_SPEED :Κόστος: {CURRENCY_LONG} Μεγ. Ταχύτητα: {VELOCITY} +STR_ENGINE_PREVIEW_SPEED_POWER :Ταχύτητα: {VELOCITY} Ισχύς: {POWER} +STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Ταχύτητα: {VELOCITY} Ισχύς: {POWER} Μέγ. Ε.Δ: {FORCE} +STR_ENGINE_PREVIEW_TYPE :Τύπος αεροσκάφους: {STRING} +STR_ENGINE_PREVIEW_TYPE_RANGE :Τύπος αεροσκάφους: {STRING} Εμβέλεια: {COMMA} τετραγωνίδια +STR_ENGINE_PREVIEW_RUNCOST_YEAR :Τρέχον κόστος: {CURRENCY_LONG}/έτος STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Τρέχον κόστος: {CURRENCY_LONG}/περίοδο STR_ENGINE_PREVIEW_CAPACITY :Χωρητικότητα: {CARGO_LONG} STR_ENGINE_PREVIEW_CAPACITY_2 :Χωρητικότητα: {CARGO_LONG}, {CARGO_LONG} @@ -4362,10 +4441,10 @@ STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Κεντ STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Κεντράρετε την κεντρική προβολή στην τοποθεσία του αεροσκάφους. Με διπλό κλικ θα ακολουθηθεί το αεροσκάφος στην κεντρική προβολή. Το Ctrl+Κλικ ανοίγει μία νέα προβολή στην τοποθεσία του αεροσκάφους ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλνει το τρένο στο αμαξοστάσιο. Με Ctrl+Κλικ κάνει μόνο επισκευή -STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλνει το όχημα στο αμαξοστάσιο. Με Ctrl+Κλικ κάνει μόνο επισκευή -STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλνει το πλοίο στο ναυπηγείο. Με Ctrl+Κλικ κάνει μόνο επισκευή -STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλνει το αεροσκάφος στο υπόστεγο. Με Ctrl+Κλικ κάνει μόνο επισκευή +STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλνει το τρένο στο αμαξοστάσιο. Με Ctrl+Κλικ κάνει μόνο συντήρηση +STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλνει το όχημα στο αμαξοστάσιο. Με Ctrl+Κλικ κάνει μόνο συντήρηση +STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλνει το πλοίο στο ναυπηγείο. Με Ctrl+Κλικ κάνει μόνο συντήρηση +STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλνει το αεροσκάφος στο υπόστεγο. Με Ctrl+Κλικ κάνει μόνο συντήρηση ###length VEHICLE_TYPES STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Αυτό θα αγοράσει αντίγραφο του τρένου μαζί με όλα τα βαγόνια. Με Ctrl+Κλικ θα έχει τις ίδιες εντολές. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά @@ -4376,7 +4455,7 @@ STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Αυτό STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Αναγκάστε το τρένο να προχωρήσει χωρίς να περιμένει το σηματοδότη να το επιτρέψει STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Αναστροφή κατεύθυνσης τρένου STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Εξανάγκαση του οχήματος να κάνει αναστροφή -STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στον προορισμό της παραγγελίας. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία του προορισμού της παραγγελίας +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στον προορισμό της εντολής. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία του προορισμού της εντολής ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Μετατροπή του τρένου για μεταφορά διαφορετικού φορτίου @@ -4405,6 +4484,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Τρέχ # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Φόρτωση / Εκφόρτωση STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Αναχωρεί +STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Αναμονή για αποσύνδεση STR_VEHICLE_STATUS_CRASHED :{RED}Καταστράφηκε! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Χαλασμένο STR_VEHICLE_STATUS_STOPPED :{RED}Σταματημένο @@ -4413,16 +4493,17 @@ STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Χωρίς STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Αναμονή για ελεύθερη τροχιά STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Υπερβολικά μακριά από τον επόμενο προορισμό -STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}Πάει προς {STATION}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Κατεύθυνση για το {0:STATION} STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Δεν έχει εντολές, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Πορεία προς {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Κατεύθυνση για το {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Επισκευή στο {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Κατεύθυνση για το {0:WAYPOINT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Κατεύθυνση για το {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Συντήρηση στο {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Αποσύνδεση και συντήρηση στο {0:DEPOT} -STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}Δεν υπάρχει πρόσβαση στο {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}Δεν υπάρχει πρόσβαση στο {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}Δεν υπάρχει πρόσβαση στο {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}Δεν υπάρχει πρόσβαση στο {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - Δεν υπάρχει πρόσβαση στο {0:STATION} +STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Δεν υπάρχει πρόσβαση στο {0:WAYPOINT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Δεν υπάρχει πρόσβαση στο {0:DEPOT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Δεν υπάρχει πρόσβαση στο {0:DEPOT} # Vehicle stopped/started animations ###length 2 @@ -4455,6 +4536,8 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Βάρο STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Κέρδη αυτό το έτος: {LTBLUE}{CURRENCY_LONG} (προηγούμενου έτους: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Φετινό κέρδος: {LTBLUE}{CURRENCY_LONG} (Περσινό: {CURRENCY_LONG}) {BLACK}Ελάχιστη απόδοση: {LTBLUE}{POWER_TO_WEIGHT} +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Κέρδος αυτή την περίοδο: {LTBLUE}{CURRENCY_LONG} (τελευταία περίοδο: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Κέρδος αυτή την περίοδο: {LTBLUE}{CURRENCY_LONG} (τελευταία περίοδο: {CURRENCY_LONG}) {BLACK}Ελάχ. απόδοση: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Αξιοπιστία: {LTBLUE}{COMMA}% {BLACK}Καταρρεύσεις μετά από την τελευταία επισκευή: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Κατασκευή: {LTBLUE}{NUM}{BLACK} Αξία: {LTBLUE}{CURRENCY_LONG} @@ -4466,18 +4549,21 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Χωρη STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Έσοδα μεταφοράς: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Διάστημα μεταξύ επισκευών: {LTBLUE}{COMMA}{NBSP}ημέρες{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Διάστημα μεταξύ επισκευών: {LTBLUE}{COMMA}{NBSP}λεπτά{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Διάστημα μεταξύ συντηρήσεων: {LTBLUE}{COMMA}{NBSP}λεπτ{P ό ά}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Διάστημα επισκευών: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Τελευταίο service: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Τελευταίο service: {LTBLUE}{NUM} λεπτ{P 0 ό ά} πριν STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Αύξηση του διαστήματος συντήρησης κατά 10 ημέρες. Ctrl+Click για αύξηση του διαστήματος συντήρησης κατά 5 ημέρες STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Αύξηση του διαστήματος συντήρησης κατά 5 λεπτά. Ctrl+Click για αύξηση του διαστήματος συντήρησης κατά 1 λεπτό +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Αύξηση του διαστήματος εξυπηρέτησης κατά 10 τοις εκατό. Ctrl+Click για αύξηση του διαστήματος εξυπηρέτησης κατά 5 τοις εκατό STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :Μειώστε το διάστημα μεταξύ των σέρβις κατά 10 ημέρες. Ctrl+Click για να μειώσετε το διάστημα συντήρησης κατά 5 ημέρες STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :Μειώστε το διάστημα μεταξύ των σέρβις κατά 5 λεπτά. Ctrl+Click για να μειώσετε το διάστημα συντήρησης κατά 1 λεπτό STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :Μειώστε το διάστημα μεταξύ των σέρβις κατά 10 τοις εκατό. Ctrl+Click για να μειώσετε το διάστημα συντήρησης κατά 5 τοις εκατό. STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Αλλάξτε τον τύπο διαστήματος επισκευών STR_VEHICLE_DETAILS_DEFAULT :Προκαθορισμένο +STR_VEHICLE_DETAILS_DAYS :Ημέρες +STR_VEHICLE_DETAILS_MINUTES :Λεπτά STR_VEHICLE_DETAILS_PERCENT :Ποσοστό ###length VEHICLE_TYPES @@ -4541,7 +4627,7 @@ STR_ORDERS_CAPTION :{WHITE}{VEHICLE STR_ORDERS_TIMETABLE_VIEW :{BLACK}Δρομολόγια STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Αλλαγή σε προβολή δρομολογίων -STR_ORDERS_LIST_TOOLTIP :{BLACK}Λίστα εντολών - πατήστε σε μια εντολή για να την επιλέξετε. Με Ctrl+Κλικ γίνεται μετακίνηση στον προορισμό της οδηγίας +STR_ORDERS_LIST_TOOLTIP :{BLACK}Λίστα εντολών - πατήστε σε μια εντολή για να την επιλέξετε. Ctrl+Κλικ για μετακίνηση στον προορισμό της εντολής STR_ORDER_INDEX :{COMMA}:{NBSP} STR_ORDER_TEXT :{STRING} {STRING} {STRING} {STRING} @@ -4580,9 +4666,14 @@ STR_ORDER_DROP_REFIT_AUTO_ANY :Διαθέσι STR_ORDER_DROP_GO_ALWAYS_DEPOT :Πάντα πήγαινε STR_ORDER_DROP_SERVICE_DEPOT :Επισκευή εάν χρειάζεται STR_ORDER_DROP_HALT_DEPOT :Στάση +STR_ORDER_DROP_UNBUNCH :Αποδέσμευση # Depot action tooltips, one per vehicle type ###length VEHICLE_TYPES +STR_ORDER_TRAIN_DEPOT_ACTION_TOOLTIP :{BLACK}Επιλέξτε την ενέργεια που θα εκτελεστεί σε αυτό το αμαξοστάσιο +STR_ORDER_ROAD_DEPOT_ACTION_TOOLTIP :{BLACK}Επιλέξτε την ενέργεια που θα εκτελεστεί σε αυτό το αμαξοστάσιο +STR_ORDER_SHIP_DEPOT_ACTION_TOOLTIP :{BLACK}Επιλέξτε την ενέργεια που θα εκτελεστεί σε αυτό το αμαξοστάσιο +STR_ORDER_HANGAR_ACTION_TOOLTIP :{BLACK}Επιλέξτε την ενέργεια που θα εκτελεστεί σε αυτό το υπόστεγο αεροπλάνων ###next-name-looks-similar STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Δεδομένα οχήματος για να βασιστεί το άλμα @@ -4603,7 +4694,7 @@ STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Πως STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :είναι ίσο με STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :δεν είναι ίσο με STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :είναι μικρότερο από -STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :είναι μικρότερο ή ίσο από +STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :είναι μικρότερο από ή ίσο με STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :είναι περισσότερο από STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :είναι περισσότερο από ή ισο με STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :είναι αληθές @@ -4613,20 +4704,20 @@ STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}Η τι STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Δώστε τίμη για να συγκριθεί STR_ORDERS_SKIP_BUTTON :{BLACK}Παράκαμψη -STR_ORDERS_SKIP_TOOLTIP :{BLACK}Παρακάμπτει την τρέχουσα εντολή και ξεκινά την επόμενη. Με Ctrl+Κλικ παρακάμπτεται η επιλεγμένη εντολή +STR_ORDERS_SKIP_TOOLTIP :{BLACK}Παρακάμπτει την τρέχουσα εντολή και ξεκινά την επόμενη. Ctrl+Κλικ για παράκαμψη της επιλεγμένης εντολής 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_TOOLTIP :{BLACK}Διακοπή μοιράσματος της λίστας εντολών. Με Ctrl+Κλικ διαγράφονται επιπλέον όλες τις εντολές από αυτό το όχημα +STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Διακοπή διαμοιρασμού της λίστας εντολών. Με Ctrl+Κλικ επιπλέον διαγράφονται όλες οι εντολές για αυτό το όχημα STR_ORDERS_GO_TO_BUTTON :{BLACK}Πήγαινε Στο STR_ORDER_GO_TO_NEAREST_DEPOT :Πήγαινε στο κοντινότερο αμαξοστάσιο STR_ORDER_GO_TO_NEAREST_HANGAR :Πήγαινε στο κοντινότερο υπόστεγο STR_ORDER_CONDITIONAL :Εκτέλεση εντόλης υπο προυπόθεση STR_ORDER_SHARE :Μοίρασμα εντολών -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Εισάγετε μια νέα εντολή πριν την επιλεγμένη ή προσθέστε στο τέλος της λίστας. Με Ctrl οι εντολές σταθμού γίνονται «πλήρης φόρτωση οποιουδήποτε εμπορεύματος», οι εντολές καθοδήγησης «χωρίς στάση» και οι εντολές αμαξοστασίου «επισκευή». Με «ίδιες εντολές» ή με Ctrl το όχημα θα έχει τις ίδιες εντολές με το επιλεγμένο. Πατώντας πάνω σε κάποιο όχημα αντιγράφονται οι εντολές από αυτό. Μια εντολή για αμαξοστάσιο απενεργοποιεί την αυτόματη επισκευή του οχήματος +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Εισάγετε μια νέα εντολή πριν την επιλεγμένη ή προσθέστε στο τέλος της λίστας. Ctrl+Κλικ σε έναν σταθμό για ορισμό εντολής σε "πλήρης φόρτωση οποιουδήποτε εμπορεύματος", σε σημείο διαδρομής για αντιστροφή εντολής "χωρίς στάση εξ ορισμού" ή σε αμαξοστάσιο για "αποσύνδεση". Κάντε κλικ σε άλλο όχημα για να αντιγράψετε τις εντολές του ή Ctrl+Click για διαμοιρασμό εντολών. Μια εντολή αμαξοστασίου απενεργοποιεί την αυτόματη συντήρηση του οχήματος STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Εμφάνιση όλων των οχημάτων που μοιράζονται αυτό το δρομολόγιο @@ -4652,6 +4743,7 @@ STR_ORDER_REFIT_ORDER :(Μετατρο STR_ORDER_REFIT_STOP_ORDER :(Μετατροπή σε {STRING} και στάση) STR_ORDER_STOP_ORDER :(Στάση) +STR_ORDER_WAIT_TO_UNBUNCH :(αναμονή προς αποσύνδεση) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Δεν μπορείτε να χρησιμοποιήσετε τον σταθμό){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4729,8 +4821,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Αυτό STR_TIMETABLE_STATUS_LATE :{BLACK}Αυτό το όχημα έχει καθυστερήσει κατά {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Το όχημα εκτελεί το δρομολόγιο του κατά {STRING} νωρίτερα STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Αυτό το δρομολόγιο ακόμα δεν έχει ξεκινήσει +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Αυτό το δρομολόγιο θα ξεκινήσει στις {STRING} +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Αυτό το δρομολόγιο θα ξεκινήσει σε {COMMA} δευτερόλεπτα +STR_TIMETABLE_START :{BLACK}Εκκίνηση δρομολογίου +STR_TIMETABLE_START_TOOLTIP :{BLACK}Επιλέξτε πότε ξεκινά αυτό το δρομολόγιο. Ctrl+Click για ομοιόμορφη κατανομή της εκκίνησης όλων των οχημάτων που μοιράζονται αυτήν την εντολή με βάση τη σχετική τους εντολή, εάν η εντολή είναι πλήρως προγραμματισμένη +STR_TIMETABLE_START_SECONDS_QUERY :Δευτερόλεπτα μέχρι την έναρξη του δρομολογίου STR_TIMETABLE_CHANGE_TIME :{BLACK}Αλλαγή Χρόνων STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Αλλάζει ο χρόνος που παίρνει η επιλεγμένη επιλογή για να εκτελεστεί @@ -4739,7 +4836,7 @@ STR_TIMETABLE_CLEAR_TIME :{BLACK}Εκκα STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Εκκαθαρίζει το χρόνο για την επιλεγμένη εντολή. Ctrl+Κλικ σβήνει τον χρόνο για όλες τις εντολές STR_TIMETABLE_CHANGE_SPEED :{BLACK}Αλλαγή Ορίου Ταχύτητας -STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Αλλαγή της μέγιστης ταχύτητας ταξιδιού της επιλεγμένης εντολής +STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Αλλαγή της μέγιστης ταχύτητας ταξιδιού της επιλεγμένης εντολής. Ctrl+Κλικ για ορισμό της ταχύτητας ταξιδιού όλων των εντολών STR_TIMETABLE_CLEAR_SPEED :{BLACK}Εκκαθάριση Ορίου Ταχύτητας STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Καθαρίζει τη μέγιστη ταχύτητα ταξιδιού της επιλεγμένης εντολής @@ -5116,6 +5213,11 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Αδύν STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Λάθος τύπος αμαξοστάσιου # Depot unbunching related errors +STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... μπορεί να έχει μόνο μια εντολή αποσύνδεσης +STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... δεν μπορούν να χρησιμοποιηθούν εντολές πλήρους φόρτωσης, όταν το όχημα έχει εντολή αποδέσμευσης +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... δεν είναι δυνατή η αποδέσμευση οχήματος που έχει εντολή πλήρους φόρτωσης +STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... δεν μπορούν να χρησιμοποιηθούν εντολές υπό όρους, όταν το όχημα έχει εντολή αποδέσμευσης +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... δεν είναι δυνατή η αποδέσμευση οχήματος που έχει εντολές υπό όρους # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}Το {VEHICLE} είναι πολύ μεγάλο μετά την ανανέωση @@ -5320,6 +5422,8 @@ STR_ERROR_NO_AIRPORT :{WHITE}Δεν STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Δεν υπάρχουν στάσεις με συμβατό τύπο δρόμου STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Δεν υπάρχουν στάσεις με συμβατό τύπο τραμ STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Δεν υπάρχουν στάσεις που να είναι κατάλληλες για αρθρωτά οδικά οχήματα.{}Τα αρθρωτά οδικά οχήματα απαιτούν μια στάση-πέρασμα (drive-through) και όχι κλειστή στάση +STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Το αεροπλάνο αυτό δεν μπορεί να προσγειωθεί σε αυτό το ελικοδρόμιο +STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Το ελικόπτερο αυτό δεν μπορεί να προσγειωθεί σε αυτό το αεροδρόμιο STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Δεν υπάρχει σιδηροδρομικό σημείο STR_ERROR_NO_BUOY :{WHITE}Δεν υπάρχει σημαδούρα diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 4c761c6713..606fe189ce 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -385,6 +385,14 @@ STR_COLOUR_WHITE :Balta STR_COLOUR_RANDOM :Atsitiktinė ###length 17 +STR_COLOUR_SECONDARY_DARK_BLUE :Tamsiai mėlynas/-a +STR_COLOUR_SECONDARY_LIGHT_BLUE :Šviesiai mėlynas/-a +STR_COLOUR_SECONDARY_GREEN :Žalias/-a +STR_COLOUR_SECONDARY_DARK_GREEN :Tamsiai žalias/-a +STR_COLOUR_SECONDARY_BLUE :Mėlynas/-a +STR_COLOUR_SECONDARY_CREAM :Kremas +STR_COLOUR_SECONDARY_BROWN :Rudas/-a +STR_COLOUR_SECONDARY_GREY :Pilkas/-a # Units used in OpenTTD @@ -1173,7 +1181,10 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Pažymė STR_GAME_OPTIONS_GUI_SCALE_1X :1x +STR_GAME_OPTIONS_GUI_SCALE_2X :2x +STR_GAME_OPTIONS_GUI_SCALE_3X :3x STR_GAME_OPTIONS_GUI_SCALE_4X :4x +STR_GAME_OPTIONS_GUI_SCALE_5X :5x STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafika @@ -1311,6 +1322,7 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :žaidimo (įra STR_CONFIG_SETTING_TYPE_GAME_INGAME :žaidimo (įrašoma kiekvieną kartą išsaugant žaidimą. Galioja tik šiuo metu aktyviai kompanijai ir tik aktyviam žaidimui) STR_CONFIG_SETTING_TYPE_COMPANY_MENU :kompanijos (įrašoma pradedant naują žaidimą) STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :kompanijos (įrašoma kiekvieną kartą išsaugant žaidimą. Galioja tik šiuo metu aktyviai kompanijai) +STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Atsargiai! STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Šis veiksmas iš naujo nustatys visus žaidimo nustatymus į numatytąsias vertes.{}Ar tikrai norite tęsti? STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Kategorija: @@ -1567,8 +1579,10 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kartą atsirad ###length 2 +STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutės per metus: {STRING} ###setting-zero-is-special +STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (kalendoriaus laikas užšalęs/sustabdytas) STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatiškai atnaujinti transporto priemonę, kai ji pasensta: {STRING} diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 591057b241..4284d488a5 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1079,6 +1079,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Indická rupia STR_GAME_OPTIONS_CURRENCY_IDR :Indonézska rupia STR_GAME_OPTIONS_CURRENCY_MYR :Malajzijský ringgit STR_GAME_OPTIONS_CURRENCY_LVL :Lotyšské Laty +STR_GAME_OPTIONS_CURRENCY_PTE :Portugalské Escudo STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Automatické ukladanie STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Výber intervalu automatického ukladania @@ -1121,9 +1122,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Mierkov STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Začiarknutím tohto políčka zmeníte úkosy podľa veľkosti rozhrania STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Použite tradičné sprite písmo -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Začiarknite toto políčko, ak uprednostňujete použitie tradičného písma sprite s pevnou veľkosťou. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Začiarknite toto políčko, ak uprednostňujete použitie tradičného písma sprite s pevnou veľkosťou STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Vyhladzovacie písma -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Začiarknite toto políčko, ak chcete vyhladiť písma s meniteľnou veľkosťou. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Začiarknite toto políčko, ak chcete vyhladiť písma s meniteľnou veľkosťou STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1342,7 +1343,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Neobmedzené fi STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Umožniť neobmedzené míňanie peňazí, a vypnúť bankrupciu spoločností STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximálny počiatočný úver: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximálna množstvo peňazí ktoré si môže spoločnosť požičať (bez inflácie). Ak je nastavené na "Žiaden úver", žiadne peniaze nebudú dostupné, iba v prípade že ich dodáva herný skript, alebo sú nastavené neobmedzené financie. +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximálna množstvo peňazí ktoré si môže spoločnosť požičať (bez inflácie). Ak je nastavené na "Žiaden úver", žiadne peniaze nebudú dostupné, iba v prípade že ich dodáva herný skript, alebo sú nastavené neobmedzené financie STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Žiadny úver @@ -1426,7 +1427,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Strmosť svahu STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Strmosť svahu na diel pre vozidlá. Vyššia hodnota spôsobuje väčší problém pri prejazde cez vrcholce. STR_CONFIG_SETTING_FORBID_90_DEG :Zakázať vlakom a lodiam otáčanie o 90°: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 stupňové zákruty vznikajú keď sa spojí horizontálna a vertikálna dráha. Týmto vznikne potreba vlaku "otočiť sa" o 90 stupňov pri prechode touto zákrutou namiesto 45 stupňovího prejazdu ako pri ostatných kombináciách trate. Toto isté platí aj pre lode. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 stupňové zákruty vznikajú keď sa spojí horizontálna a vertikálna dráha. Týmto vznikne potreba vlaku "otočiť sa" o 90 stupňov pri prechode touto zákrutou namiesto 45 stupňovího prejazdu ako pri ostatných kombináciách trate STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Povoliť spájať stanice nepriamo hraničiace: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Povoľuje pridanie časti stanice bez priamej manipulácie s existujúcimi časťami. Použite Ctrl+Klik na položenie novej časti. @@ -1538,7 +1539,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Predvolená far STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Zvoľte začiatočnú farbu pre spoločnosť STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Počiatočná sekundárna farba spoločnosti: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Zvoľte počiatočnú sekundárnu farbu spoločnosti, pokiaľ používate NewGRF ktorý to umožňuje. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Zvoľte počiatočnú sekundárnu farbu spoločnosti, pokiaľ používate NewGRF, ktorý to umožňuje STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Letiská nikdy neexiprujú: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Povoluje zachovať vsetky typy letísk navzdy. @@ -1562,20 +1563,20 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Nikdy nepresta STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Ak je zapnuté, všetky vozidlá zostanú k dispozícii navždy. STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Časovač: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Zvoliť jednotky pre časovač. Toto nieje možné neskôr zmeniť.{}{}Kalendárový základ je klasický OpenTTD mód, kde rok má 12 mesiacov, a každý mesiac 28-31 dní.{}{}V hodinovom móde, produkcia tovaru a financie sú založené na minútových krokoch, čo je zhruba tak dlho, ako trvá 30 dní v kalendárovom móde. Zoskupené sú po 12 minútových obdobiach, čo je ekvivalent jedného roka v kalendárovom móde.{}{}V oboch módoch je klasický kalendár, ktorý je použitý na predstavenie nových vozidiel, domov, a inej infraštruktúry. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Zvoliť jednotky pre časovač. Toto nieje možné neskôr zmeniť.{}{}Kalendárový základ je klasický OpenTTD mód, kde rok má 12 mesiacov, a každý mesiac 28-31 dní.{}{}V hodinovom móde, produkcia tovaru a financie sú založené na minútových krokoch, čo je zhruba tak dlho, ako trvá 30 dní v kalendárovom móde. Zoskupené sú po 12 minútových obdobiach, čo je ekvivalent jedného roka v kalendárovom móde.{}{}V oboch módoch je klasický kalendár, ktorý je použitý na predstavenie nových vozidiel, domov, a inej infraštruktúry ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalendár STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Hodiny STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minút za rok: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Zvoľte počet minút za jeden kalendárny rok. Predvolená hodnota je 12. Nastavte 0, aby sa kalendárne obdobie nemenilo. Toto nastavenie neovlivňuje simuláciu ekonómie, a je dostupná len v hodinovom móde. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Zvoľte počet minút za jeden kalendárny rok. Predvolená hodnota je 12. Nastavte 0, aby sa kalendárne obdobie nemenilo. Toto nastavenie neovlivňuje simuláciu ekonómie, a je dostupná len v hodinovom móde STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (čas kalendáru pozastavený) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Škála produkcie tovaru mestom: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Škála produkcie tovaru mestami o toľkoto percent +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Zvýšenie produkcie tovaru mestami o toľkoto percent STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Škála produkcie tovaru priemyslom: {STRING} STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Škála produkcie tovaru priemyslom o toľkoto percent STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% @@ -1596,7 +1597,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Trvanie zobraze STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Trvanie zobrazenia chybovej hlášky v červenom okne. Uvedomte si že niektoré "kritické" správy nezmiznú po uplynutí času, ale musia byť zatvorené ručne. STR_CONFIG_SETTING_HOVER_DELAY :Ukázať nápovedu: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Oneskorenie pred zobrazením nápovedy po prejdení prvku rozhrania myšou. Nápoveda môže byť eventuálne nastavené aj na kliknutie pravým tlačidlom myši pri hodnote 0. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Oneskorenie pred zobrazením nápovedy po prejdení na prvok rozhrania myšou. Ak je hodnota nastavenená na 0, tak je nápoveda zobrazená po kliknutí pravým tlačidlom myši STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Zobrazenie po {COMMA} milisekundách ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Klik pravým tlačidlom @@ -1608,8 +1609,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Hrúbka čiar v STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Hrúbka čiar v grafe. Tenké čiary sú presnejšie, hrubšie zasa lepšie viditeľné STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Zobraziť názov NewGRF v okne vozidiel: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Pridá riadok do zoznamu vozidiel, ktorý ukazuje z akého NewGRF vozidlo pochádza. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Zobraziť náklad, ktorý môžu vozidlá prepravovať v oknách zoznamu {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Pridá riadok do zoznamu vozidiel, ktorý ukazuje z akého NewGRF vozidlo pochádza +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Zobraziť náklad, ktorý môžu vozidlá prepravovať v oknách zoznamu: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Ak je zapnuté, v zoznamoch vozidiel sa nad ňou zobrazí prepravovateľný náklad vozidla STR_CONFIG_SETTING_LANDSCAPE :Krajina: {STRING} @@ -1628,7 +1629,7 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Hustota priemys STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Nastavte, koľko má byť vygenerovaného priemyslu a aká úroveň by mala byť zachovaná v priebehu hry STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximálna vzdialenosť od okrajov mapy pre rafinérie: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Rafinérie ropy sú vybudované len na okrajoch mapy, tzn na pobreží pri ostrovných mapách +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Rafinérie ropy sú vybudované len na okrajoch mapy, tzn na pobreží pri ostrovných mapách. Na mapách väčších ako 256 polí je táto hodnota proporcionálne zväčená STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Úroveň hranice snehu: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Zvoľte, v akej výške začína sneh v subarktickej krajine. Sneh tiež ovplyvňuje generáciu priemyslu a požiadavky rastu mesta. Môže byť upravené iba cez Editor scenára, alebo je vypočítane cez "pokrytie snehom" @@ -1650,7 +1651,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Členitý STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Veľmi členitý STR_CONFIG_SETTING_VARIETY :Rozmanitosť distribúcie: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Zvoliť, či mapa obsahuje oba terény aj horský aj nížinný. Čím väčšia rozmanitosť, tým väčšie budú rozdiely v prevýšeniach medzi rovinami a horami. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Zvoliť, či mapa obsahuje oba terény aj horský aj nížinný. Čím väčšia rozmanitosť, tým väčšie budú rozdiely v prevýšeniach medzi rovinami a horami STR_CONFIG_SETTING_RIVER_AMOUNT :Množstvo riek: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Vyberte koľko riek sa má generovať @@ -1697,7 +1698,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Tmavozelená STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Fialová STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Farby prekrytia toku nákladu: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Nastavte farebnú schému použitú pre prekrytie toku nákladu. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Nastavte farebnú schému pre vrstvu toku nákladu ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Zelenočervená STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Zelenomodrá @@ -1818,7 +1819,7 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Zachovať stave STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Zachovaj okno s nástrojmi na stavbu mostov/tunelov otvorené aj po použití STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automaticky odstraňovať návestidlá pri výstavbe železnice: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automaticky odstraňovať návestidla pri výstavbe železnice, ak návestidlá blokujú výstavbu. To však môže niekedy smerovať k zrážke vlakov. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automaticky odstraňovať návestidlá pri výstavbe železnice, ak návestidlá blokujú výstavbu. Toto však môže niekedy viesť k zrážke vlakov STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Limit zrýchlenia priebehu hry: {STRING} STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limit rýchlosti hry pri zapnutí zrýchlenia priebehu hry. 0 = bez limitu (tak rýchlo, ako to umožní počítač). Hodnoty pod 100% spomalia hru. Horný limit závisí od špecifikácií počítača a môže sa meniť s hrou. @@ -1885,11 +1886,11 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Povoliť AI po STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#op kódov pred uspaním skriptu: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximálny počet krokov skriptu počas 1 ťahu. STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maximálne využitie pamäte na skript: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Koľko pamäte môže jeden skript spotrebovať pred násilným ukončením. Pri veľkých mapách bude možno potrebné túto hodnotu zvýšiť. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Koľko pamäte môže jeden skript spotrebovať pred násilným ukončením. Pri veľkých mapách bude možno potrebné túto hodnotu zvýšiť STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Servisné intervaly v percentách: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Ak je zapnuté, vozidlá sa budú pokúšať navštíviť servis ak ich spoľahlivosť klesne pod nastavenú hodnotu percent maximálnej spoľahlivosti.{}{}Napríklad, ak je maximálna spoľahlivosť 90% a servisný interval je 20%, vozidlo sa pokúsi ísť do servisu keď dosiahne 72%. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Ak je zapnuté, vozidlá sa budú pokúšať navštíviť servis ak ich spoľahlivosť klesne pod nastavenú hodnotu percent maximálnej spoľahlivosti.{}{}Napríklad, ak je maximálna spoľahlivosť 90% a servisný interval je 20%, vozidlo sa pokúsi ísť do servisu keď dosiahne 72% STR_CONFIG_SETTING_SERVINT_TRAINS :Predvolený interval servisu pre vlaky: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Nastav predvolený interval pre nové vlaky. Ak nie je nastavený podrobnejší interval. @@ -1907,7 +1908,7 @@ STR_CONFIG_SETTING_NOSERVICE :Vypnúť servis STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Ak je zapnuté, vozidlá nebudú servisované ak sú vypnuté poruchy. STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Pokuta za rýchlosť nakládky pre vlaky, ktoré sú dlhšie ako stanica: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Keď je táto možnosť povolená, vlaky, ktoré sú pre stanicu príliš dlhé, nakladajú pomalšie ako vlak, ktorý sa do stanice zmestí. Toto nastavenie neovplyvňuje hľadanie cesty. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Keď je táto možnosť povolená, vlaky, ktoré sú pre stanicu príliš dlhé, nakladajú pomalšie ako vlak, ktorý sa do stanice zmestí. Toto nastavenie neovplyvňuje hľadanie cesty STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Obmedzenie rýchlosti pre vagóny: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Ak je zapnuté, použijú sa tiež rýchlostné obmedzenia pre vagóny na obmedzenie celkovej rýchlosti vlakov. @@ -1972,13 +1973,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Rok od ktorého STR_CONFIG_SETTING_STARTING_YEAR :Začiatok hry v roku: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Rok ukončenia skórovania: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Rok v ktorom končí hra pre zaznamenanie skóre. Na konci tohto roku sa nahrá skóre spoločnosti a zobrazí sa tabuľka s najvyšším skóre, avšak hráči môžu v hre naďalej pokračovať.{}Ak je tento rok pred začiatkom hry, tabuľka sa nikdy nezobrazí. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Rok v ktorom končí hra pre zaznamenanie skóre. Na konci tohto roku sa nahrá skóre spoločnosti a zobrazí sa tabuľka s najvyšším skóre, avšak hráči môžu v hre naďalej pokračovať.{}Ak je tento rok pred začiatkom hry, tabuľka sa nikdy nezobrazí STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nikdy STR_CONFIG_SETTING_ECONOMY_TYPE :Typ ekonomiky: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Plynulá ekonomika robí zmeny v produkcii častejšie a v menších krokoch. Zamrznutá ekonomika neumožňuje zmeny v produkcii, ani zatváranie priemyslu. Toto nastavenie nemusí ovplyvňovať priemysel z NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Plynulá ekonomika robí zmeny v produkcii častejšie a v menších krokoch. Zamrznutá ekonomika neumožňuje zmeny v produkcii, ani zatváranie priemyslu. Toto nastavenie nemusí ovplyvňovať priemysel z NewGRF ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Originálna STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Plynulá @@ -2033,7 +2034,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :povolené STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :povolené, vlastné rozloženie mesta STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Generovanie nákladu v mestách: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Množstvo nákladu produkovaného domami v mestách, podmienené celkovou populáciou mesta.{}Kvadratický rast: Mesto s dvojnásobnou veľkosťou produkuje štvornásobné množstvo cestujúcich.{}Lineárny rast: Mesto s dvojnásobnou veľkosťou produkuje dvojnásobné množstvo cestujúcich. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Množstvo nákladu produkovaného domami v mestách, podmienené celkovou populáciou mesta.{}Kvadratický rast: Mesto s dvojnásobnou veľkosťou produkuje štvornásobné množstvo cestujúcich.{}Lineárny rast: Mesto s dvojnásobnou veľkosťou produkuje dvojnásobné množstvo cestujúcich ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kvadratické STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineárne @@ -2074,7 +2075,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4-krát STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8-krát STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Najvyššie rozlíšenie grafických prvkov: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limit maximálneho rozlíšenia grafických prvkov. Limitovanie rozlíšenia prvkov znemožní používanie vysokého rozlíšenia aj keď je dostupné. To pomáha zachovať zjednotený vzhľad hry, ak sa používa mix GRF súborov s a bez vysokého rozlíšenia. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limit maximálneho rozlíšenia grafických prvkov. Limitovanie rozlíšenia prvkov znemožní používanie vysokého rozlíšenia aj keď je dostupné. To pomáha zachovať zjednotený vzhľad hry, ak sa používa mix GRF súborov s a bez vysokého rozlíšenia ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2098,33 +2099,33 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Násobok počia STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Priemerná veľkosť veľkomiest v porovnaní k mestám na začiatku hry. STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Aktualizovať spojovací graf každých {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Čas medzi po sebe idúcimi prepočítavaniami spojovacieho grafu. Každé prepočítanie vypočíta trasu pre jednu komponentu grafu. To znamená, že hodnota X tohoto nastavenia neobnoví celý graf, len niektoré jeho časti. Čím menšia táto hodnota, tým viac procesorového času je potreba na jeho vypočítanie. Čím je hodnota vyššia, tým dlhšie bude trvať začiatok distrubúcie tovaru na nových trasách. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Čas medzi po sebe idúcimi prepočítavaniami spojovacieho grafu. Každé prepočítanie vypočíta trasu pre jednu komponentu grafu. To znamená, že hodnota X tohoto nastavenia neobnoví celý graf, len niektoré jeho časti. Čím menšia táto hodnota, tým viac procesorového času je potreba na jeho vypočítanie. Čím je hodnota vyššia, tým dlhšie bude trvať začiatok distrubúcie tovaru na nových trasách STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Využiť {STRING} na prepočítanie distribučného grafu -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Čas potrebný na prepočítanie komponentov spojovacieho grafu. Keď započne prepočítavanie, vytvorí sa nové vlákno ktorému je umožnené existovať po túto dobu. Čím je hodnota nižšia, tým je väčšia pravdepodobnosť, že vlákno nedobehne kedy má. Hra sa pozastaví ("lag") pokial vlákno nedobehne. Čím je hodnota vyššia, tým dlhšie bude trvať grafu sa aktualizovať v prípade, že sa trasy zmenia. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Čas potrebný na prepočítanie komponentov spojovacieho grafu. Keď započne prepočítavanie, vytvorí sa nové vlákno ktorému je umožnené existovať po túto dobu. Čím je hodnota nižšia, tým je väčšia pravdepodobnosť, že vlákno nedobehne kedy má. Hra sa pozastaví ("lag") pokial vlákno nedobehne. Čím je hodnota vyššia, tým dlhšie bude trvať grafu sa aktualizovať v prípade, že sa trasy zmenia STR_CONFIG_SETTING_DISTRIBUTION_PAX :Druh distribúcie pre cestujúcich: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symetricky" znamená, že približne rovnaké množstvo pasažierov bude cestovať zo stanice A do stanice B ako z B do A. "Asymetricky" znamená, že v oboch smeroch môže cestovať ľubovoľné množstvo pasažierov. "Manuálne" znamená, že sa pre pasažierov nevykoná automatická distribúcia. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symetricky" znamená, že približne rovnaké množstvo pasažierov bude cestovať zo stanice A do stanice B ako z B do A. "Asymetricky" znamená, že v oboch smeroch môže cestovať ľubovoľné množstvo pasažierov. "Manuálne" znamená, že sa pre pasažierov nevykoná automatická distribúcia STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Druh distribúcie pre poštu: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symetricky" znamená, že približne rovnaké množstvo pošty bude odoslané zo stanice A do stanice B ako z B do A. "Asymetricky" znamená, že v oboch smeroch môže byť odoslané ľubovoľné množstvo pošty. "Manuálne" znamená, že sa pre poštu nevykoná automatická distribúcia. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symetricky" znamená, že približne rovnaké množstvo pošty bude odoslané zo stanice A do stanice B ako z B do A. "Asymetricky" znamená, že v oboch smeroch môže byť odoslané ľubovoľné množstvo pošty. "Manuálne" znamená, že sa pre poštu nevykoná automatická distribúcia STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Druh distribúcie pre náklad prevážaný obrnenými vozidlami: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Náklad prevážaný obrnenými vozidlami sú cennosti v miernom, diamanty v subtropickom alebo zlato v subarktickom podnebí. NewGRF to môže zmeniť. "Symetricky" znamená, že rovnaké množstvo nákladu bude odoslané zo stanice A do stanice B a naopak. "Asymetricky" znamená, že v oboch smeroch môže byť odoslané ľubovoľné množstvo nákladu. "Manuálne" znamená, že sa pre náklad nevykoná automatická distribúcia. Doporučuje sa nastaviť na "asymetricky" alebo "manuálne" pri hraní v subarktickom alebo subtropickom, pretože banky prijímajú náklad iba v týchto podnebiach. Pre mierne podnebie si môžete vybrať aj "symetricky", pretože banky budú posielať cennosti späť do pôvodnej banky, ktorá ich odoslala. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Náklad prevážaný obrnenými vozidlami sú cennosti v miernom, diamanty v subtropickom alebo zlato v subarktickom podnebí. NewGRF to môže zmeniť. "Symetricky" znamená, že rovnaké množstvo nákladu bude odoslané zo stanice A do stanice B a naopak. "Asymetricky" znamená, že v oboch smeroch môže byť odoslané ľubovoľné množstvo nákladu. "Manuálne" znamená, že sa pre náklad nevykoná automatická distribúcia. Doporučuje sa nastaviť na "asymetricky" alebo "manuálne" pri hraní v subarktickom alebo subtropickom, pretože banky prijímajú náklad iba v týchto podnebiach. Pre mierne podnebie si môžete vybrať aj "symetricky", pretože banky budú posielať cennosti späť do pôvodnej banky, ktorá ich odoslala STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Druh distribúcie pre ostatné druhy nákladu: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymetricky" znamená, že v oboch smeroch môže byť odoslané ľubovoľné množstvo nákladu. "Manuálne" znamená, že sa pre náklad nevykoná automatická distribúcia. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymetricky" znamená, že v oboch smeroch môže byť odoslané ľubovoľné množstvo nákladu. "Manuálne" znamená, že sa pre náklad nevykoná automatická distribúcia ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuálne STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymetricky STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :symetricky STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Presnosť distribúcie: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Čím viac nastavíte, tým viac procesorového času zaberie vypočítavanie trás spojov. Pokiaľ to bude trvať príliš dlho, môžete si všimnúť oneskorenie. Ak nastavíte nízku hodnotu, rozdelenie bude nepresné a môže sa stať, že náklad nebude odoslaný na miesta, ktoré očakávate. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Čím viac nastavíte, tým viac procesorového času zaberie vypočítavanie trás spojov. Pokiaľ to bude trvať príliš dlho, môžete si všimnúť oneskorenie. Ak nastavíte nízku hodnotu, rozdelenie bude nepresné a môže sa stať, že náklad nebude odoslaný na miesta, ktoré očakávate STR_CONFIG_SETTING_DEMAND_DISTANCE :Vplyv vzdialenosti na požiadavky: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Ak nastavíte toto na hodnotu väčšiu ako 0, tak vzdialenosť medzi východiskovou stanicou A nejakého nákladu a možnou cieľovou stanicou B bude mať vplyv na množstvo nákladu poslaného z A do B. Čím bude B ďalej od A, tým menej nákladu bude odoslaného. Čím viac nastavíte, tým menej nákladu bude odoslaného do vzdialenejších staníc a viac nákladu bude odoslaného do bližších staníc. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Ak nastavíte toto na hodnotu väčšiu ako 0, tak vzdialenosť medzi východiskovou stanicou A nejakého nákladu a možnou cieľovou stanicou B bude mať vplyv na množstvo nákladu poslaného z A do B. Čím bude B ďalej od A, tým menej nákladu bude odoslaného. Čím viac nastavíte, tým menej nákladu bude odoslaného do vzdialenejších staníc a viac nákladu bude odoslaného do bližších staníc STR_CONFIG_SETTING_DEMAND_SIZE :Množstvo vráteného nákladu pre symetrický mód: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Nastavením na menej ako 100% sa bude symetrická distribúcia správať viac asymetricky. Menej nákladu sa bude povinne vracať späť, ak sa určité množstvo pošle do stanice. Ak nastavíte 0%, symetrická distribúcia sa bude správať ako asymetrická. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Nastavením na menej ako 100% sa bude symetrická distribúcia správať viac asymetricky. Menej nákladu sa bude povinne vracať späť, ak sa určité množstvo pošle do stanice. Ak nastavíte 0%, symetrická distribúcia sa bude správať ako asymetrická STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Vyťaženie krátkych ciest pred použitím vysokokapacitných ciest: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Často je viac ciest medzi dvoma stanicami. Cargodist vyťaží najprv najkratšiu cestu, potom využije druhú najkratšiu cestu až kým nebude vyťažená atď. Vyťaženie je určené podľa odhadu kapacity a plánovaného využitia. Ak sú vyťažené všetky trasy a nepostačuje to, preťaží všetky trasy, s preferenciou najkapacitnejšej. Väčšinou algoritmus neodhadne kapacitu presne. Toto nastavenie umožňuje určiť na koľko percent musí byť vyťažená prvá pred výberom nasledujúcej dlhšej. Nastavte na menej ako 100%, aby sa zabránilo preplneniu staníc v prípade nadhodnotenia kapacity. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Často je viac ciest medzi dvoma stanicami. Cargodist vyťaží najprv najkratšiu cestu, potom využije druhú najkratšiu cestu až kým nebude vyťažená atď. Vyťaženie je určené podľa odhadu kapacity a plánovaného využitia. Ak sú vyťažené všetky trasy a nepostačuje to, preťaží všetky trasy, s preferenciou najkapacitnejšej. Väčšinou algoritmus neodhadne kapacitu presne. Toto nastavenie umožňuje určiť na koľko percent musí byť vyťažená prvá pred výberom nasledujúcej dlhšej. Nastavte na menej ako 100%, aby sa zabránilo preplneniu staníc v prípade nadhodnotenia kapacity STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Jednotky rýchlosti (pozemné): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Jednotky rýchlosti (námorné): {STRING} @@ -2641,6 +2642,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Meno va STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Názov vašeho servra nebol nastavený. Názov môžete nastaviť na vrchu okna hry pre viacerých hráčov STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Revizia hry u tohto klienta nezodpoveda revizii hry na serveri. STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Nesprávne heslo +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Nie ste na zozname povolených klientov STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Server je plný STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Si zabanovaný na tomto serveri STR_NETWORK_ERROR_KICKED :{WHITE}Bol si vyhodený z hry @@ -2668,6 +2670,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :prijatý neplat STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :chybná verzia hry STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :meno sa už používa STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :nesprávne heslo +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :nie je na zozname povolených STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :zlá spoločnosť-id in DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :vyhodený zo servera STR_NETWORK_ERROR_CLIENT_CHEATER :sa pokúšal cheatovať @@ -3046,11 +3049,11 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Umiestni STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Náhodné stromy STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Zasadiť stromy náhodne po celej krajine STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normálne -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Sadiť stromy po jednom, ťahaním po krajine. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Sadiť stromy po jednom, ťahaním po krajine STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Porast -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Sadiť malé porasty ťahaním po krajine. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Sadiť malé porasty ťahaním po krajine STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Les -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Sadiť veľké lesy ťahaním po krajine. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Sadiť veľké lesy ťahaním po krajine # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Generovanie územia @@ -3265,11 +3268,11 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Snímková frekvencia STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Frekvencia simulácie: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Počet herných tiknutí simulovaných za sekundu. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Počet herných tiknutí simulovaných za sekundu STR_FRAMERATE_RATE_BLITTER :{BLACK}Snímková frekvencia grafiky: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Počet video snímok vykreslených za sekundu. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Počet video snímok vykreslených za sekundu STR_FRAMERATE_SPEED_FACTOR :{BLACK}Súčasný násobok hernej rýchlosti: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Súčasná rýchlosť hry v porovnaní s rýchlosťou, akou by mala hra normálne bežať. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Súčasná rýchlosť hry v porovnaní s rýchlosťou, akou by mala hra normálne bežať STR_FRAMERATE_CURRENT :{WHITE}Teraz STR_FRAMERATE_AVERAGE :{WHITE}Priemer STR_FRAMERATE_MEMORYUSE :{WHITE}Pamäť @@ -4098,7 +4101,7 @@ STR_GROUP_CREATE_TOOLTIP :{BLACK}Vytvori STR_GROUP_DELETE_TOOLTIP :{BLACK}Zrušiť vybranú skupinu STR_GROUP_RENAME_TOOLTIP :{BLACK}Premenovať vybranú skupinu STR_GROUP_LIVERY_TOOLTIP :{BLACK}Zmeniť farebnú schému vybranej skupiny -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Znemožniť automatické nahradzovanie v skupine. Ctrl+klik znemožní nahradzovanie aj v podskupinách. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Znemožniť automatické nahradzovanie v skupine. Ctrl+klik znemožní nahradzovanie aj v podskupinách STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Vymazať skupinu STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Ste si istý, že chcete vymazať túto skupinu a jej podskupiny? @@ -4514,10 +4517,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kapacita STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Transfer kredity: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Servisný interval: {LTBLUE}{COMMA}{NBSP}dní{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Servisný interval: {LTBLUE}{COMMA}{NBSP}minút{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Servisný interval: {LTBLUE}{COMMA}{NBSP}{P "minúta" "minúty" "minút"}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Servisný interval: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Posledný servis: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Posledný servis: pred {LTBLUE}{NUM} minútami +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Posledný servis: pred {LTBLUE}{NUM} {P "minútou" "minútami" "minútami"} STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Zvýši servisný interval o 10 dní. Ctrl+klik zvýši servisný interval o 5 dní STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Zvýši servisný interval o 5 minút. Ctrl+klik zvýši servisný interval o 1 minútu STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Zvýši servisný interval o 10 percent. Ctrl+klik zvýši servisný interval o 5 percent @@ -5060,7 +5063,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Spoločn STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Nemôžete tu postaviť sídlo spoločnosti... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Nie je možné postaviť viac miest +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Nie je možné postaviť viac miest... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Mesto nemôže byť odstránené... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Nemôžete tu založiť mesto... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Nemožno rozšíriť mesto... diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 4ee31f9b94..d35c4d763b 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1471,7 +1471,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Företagets sta STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Välj startfärg för företaget STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Företagets andravalsstartfärg: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Välj andravalsfärg för företaget att starta med, om du använder en NewGRF som stöder det. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Välj andravalsfärg för företaget att starta med, om du använder en NewGRF som stöder det STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Flygplatser blir aldrig gamla: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Aktivering av denna inställning gör så att alla flygplatstyper finns kvar i obegränsad tid efter att de blivit tillgängliga @@ -1542,7 +1542,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Linjernas bredd STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Visa NewGRF:ens namn i fordonsbyggnadsfönstret: {STRING} STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Lägg till en rad i fordonsbyggnadsfönstret som visar vilken NewGRF det valda fordonet kommer ifrån -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Visa godstyper som fordonen kan transportera i listorna {STRING} +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Visa godstyper som fordonen kan transportera i listfönstren: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Om det är aktiverat kommer fordonets transportabla last att visas ovanför den i fordonslistor STR_CONFIG_SETTING_LANDSCAPE :Landskap: {STRING} @@ -1583,7 +1583,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Svår STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Väldigt svår STR_CONFIG_SETTING_VARIETY :Varierad distribution: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Välj om kartan ska innehålla både berg och flacka områden. Ju större variation desto större höjdskillnad mellan bergiga och flacka områden. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Välj om kartan ska innehålla både berg och flacka områden. Ju större variation desto större höjdskillnad mellan bergiga och flacka områden STR_CONFIG_SETTING_RIVER_AMOUNT :Antal floder: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Välj hur många floder att generera @@ -1630,7 +1630,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Mörkgrön STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violett STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Färger på godsflödesöverlägg: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Ställ in det färgschema som ska användas på godsflödesöverlägget. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Ställ in det färgschema som ska användas på godsflödesöverlägget ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Grön till röd (original) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Grön till blå @@ -1751,10 +1751,10 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Behåll byggnad STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Håll verktygen för byggnation av broar, tunnlar, etc. öppna efter användning STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatiskt ta bort signaler vid byggande av järnväg: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Ta automatiskt bort signaler vid byggande av järnväg om signalerna är i vägen. Notera att detta kan leda till att tåg krockar. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Ta automatiskt bort signaler vid byggande av järnväg om signalerna är i vägen. Notera att detta kan leda till att tåg krockar STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Begränsning av snabbspolning: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Begränsa hur snabbt spelet går när snabbspolning är aktiverad. 0 = ingen begränsning (så snabbt som din dator tillåter). Värden under 100% saktar ner spelet. Den övre begränsningen beror på din dators specifikationer och kan variera beroende på spelet. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Begränsa hur snabbt spelet går när snabbspolning är aktiverad. 0 = ingen begränsning (så snabbt som din dator tillåter). Värden under 100% saktar ner spelet. Den övre begränsningen beror på din dators specifikationer och kan variera beroende på spelet STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normal spelhastighet ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Ingen begränsning (Så snabbt som din dator tillåter) @@ -1822,7 +1822,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Hur mycket minn STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Visa serviceintervall i procent: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :När det är aktiverat försöker fordon bli servade när deras tillförlitlighet har fallit med en viss procentsats av den maximala tillförlitligheten.{}{}Till exempel, om ett fordons maximala tillförlitlighet är 90% och serviceintervallet är 20% kommer fordonet söka service när tillförlitligheten är 72%.Välj om fordonsservice ska triggas av hur lång tid som har gått sedan senaste service eller av att tillförlitligheten faller med +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :När det är aktiverat försöker fordon bli servade när deras tillförlitlighet har fallit med en viss procentsats av den maximala tillförlitligheten.{}{}Till exempel, om ett fordons maximala tillförlitlighet är 90% och serviceintervallet är 20% kommer fordonet söka service när tillförlitligheten är 72% STR_CONFIG_SETTING_SERVINT_TRAINS :Normalt serviceintervall för tåg: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Välj vilket serviceintervall som normalt sett ska användas för nya tåg, om inget annat serviceintervall uttryckligen anges @@ -1905,7 +1905,7 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Årtal då tidn STR_CONFIG_SETTING_STARTING_YEAR :Startår: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Slutår för poängräkning: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Årtal då spelet slutar räkna poäng. Vid slutet av detta år sparas företagets poäng och listan med de bästa spelresultaten visas, men därefter kan spelarna fortsätta att spela.{}Om årtalet är satt till innan startåret visas aldrig de bästa spelresultaten. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Årtal då spelet slutar räkna poäng. Vid slutet av detta år sparas företagets poäng och listan med de bästa spelresultaten visas, men därefter kan spelarna fortsätta att spela.{}Om årtalet är satt till innan startåret visas aldrig de bästa spelresultaten STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Aldrig @@ -1966,7 +1966,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Tillåten STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Tillåten, vanlig stads-layout STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Fraktgods som genereras i staden: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Hur mycket fraktgods som produceras av hus i städer, i förhållande till den totala befolkningen i staden.{}Kvadratisk tillväxt: En dubbelt så stor stad genererar fyra gånger så många passagerare.{}Linjär tillväxt: En dubbelt så stor stad genererar dubbelt så många passagerare. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Hur mycket fraktgods som produceras av hus i städer, i förhållande till den totala befolkningen i staden.{}Kvadratisk tillväxt: En dubbelt så stor stad genererar fyra gånger så många passagerare.{}Linjär tillväxt: En dubbelt så stor stad genererar dubbelt så många passagerare ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kvadratisk (original) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linjär @@ -2052,9 +2052,9 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Distributionsno STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Ju högre du sätter denna, desto längre CPU-tid kommer beräkningen av länkgrafen ta. Om det tar för lång tid kan spelet lagga. Om du däremot sätter den till ett lågt värde kommer distributionen att bli inexakt, vilket kan leda till att godset inte skickas dit du förväntar dig. STR_CONFIG_SETTING_DEMAND_DISTANCE :Avståndets påverkan på efterfrågan: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Om du sätter denna till ett värde högre än 0 kommer avståndet mellan ursprungsstationen A för en viss last och en möjlig destination B påverka mängden last som skickas från A till B. Ju längre B är ifrån A, desto mindre last kommer att skickas. Ju högre du sätter den, desto mindre last kommer att skickas till avlägsna stationer och desto mer last kommer att skickas till närbelägna stationer. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Om du sätter denna till ett värde högre än 0 kommer avståndet mellan ursprungsstationen A för en viss last och en möjlig destination B påverka mängden last som skickas från A till B. Ju längre B är ifrån A, desto mindre last kommer att skickas. Ju högre du sätter den, desto mindre last kommer att skickas till avlägsna stationer och desto mer last kommer att skickas till närbelägna stationer STR_CONFIG_SETTING_DEMAND_SIZE :Mängd återsänd last i symmetriskt läge: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Genom att sätta denna till mindre än 100% får man den symmetriska distributionen att bete sig mer som den asymmetriska. En mindre andel än vanligt av den last som skickas till en station kommer att skickas tillbaka. Sätter du den till 0% beter sig den symmetriska distributionen precis som den asymmetriska. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Genom att sätta denna till mindre än 100% får man den symmetriska distributionen att bete sig mer som den asymmetriska. En mindre andel än vanligt av den last som skickas till en station kommer att skickas tillbaka. Sätter du den till 0% beter sig den symmetriska distributionen precis som den asymmetriska STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Belastning av korta rutter innan rutter med hög kapacitet används: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Ofta finns det flera rutter mellan två givna stationer. Godsdistributionen kommer att fylla upp den första rutten först och därefter den näst kortaste tills den är mättad osv. Mättnadsgraden bestäms utifrån en uppskattning av kapaciteten och planerad användning. När godsdristributionen har belastat samtliga rutter, och om det finns kvarvarande behov, då kommer samtliga rutter att överbelastas med preferens för rutterna med högst kapacitet. Uppskattningen av kapaciteten kommer oftast inte ske med hög noggrannhet. Denna inställning tillåter dig att ställa in hur många procent som en kort rutt ska belastas innan algoritmen ska välja nästa längre rutt. Sätt värdet till under 100 % om du vill undvika överfulla stationer i händelse av överskattad kapacitet. @@ -3200,11 +3200,11 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Bildfrekvens STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulationsfrekvens: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Antal spel-tick som simuleras per sekund. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Antal spel-tick som simuleras per sekund STR_FRAMERATE_RATE_BLITTER :{BLACK}Bildfrekvens för grafik: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Antal bildrutor som återges per sekund. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Antal bildrutor som återges per sekund STR_FRAMERATE_SPEED_FACTOR :{BLACK}Spelets nuvarande hastighetsfaktor: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hur snabbt spelet för närvarande körs, jämfört med förväntad hastighet vid normal simulationsfrekvens. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hur snabbt spelet för närvarande körs, jämfört med förväntad hastighet vid normal simulationsfrekvens STR_FRAMERATE_CURRENT :{WHITE}Nuvarande STR_FRAMERATE_AVERAGE :{WHITE}Genomsnittlig STR_FRAMERATE_MEMORYUSE :{WHITE}Minne @@ -4028,7 +4028,7 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Ogrupperade fly STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupper - klicka på en grupp för att lista alla fordon i gruppen. Dra och släpp grupper för att ordna hierarkin. +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupper - klicka på en grupp för att lista alla fordon i gruppen. Dra och släpp grupper för att ordna hierarkin STR_GROUP_CREATE_TOOLTIP :{BLACK}Klicka för att skapa en grupp STR_GROUP_DELETE_TOOLTIP :{BLACK}Ta bort vald grupp STR_GROUP_RENAME_TOOLTIP :{BLACK}Byt namn på vald grupp @@ -4220,9 +4220,9 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Klona sk STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Klona flygplan ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Köp en kopia av ett tåg inklusive alla vagnar. Klicka på denna knapp och sen på ett tåg i eller utanför depån. Ctrl+Klick för att dela ordrar. Håll även in Shift för att endast visa uppskattad kostnad -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Köp en kopia av ett vägfordon. Klicka på denna knapp och sen på ett vägfordon i eller utanför depån. Ctrl+Klick för att dela ordrar. Håll även in Shift för att endast visa uppskattad kostnad -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Köp en kopia av ett skepp. Klicka på denna knapp och sen på ett skepp i eller utanför depån. Ctrl+Klick för att dela ordrar. Håll även in Shift för att endast visa uppskattad kostnad +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Köp en kopia av ett tåg inklusive alla vagnar. Klicka på denna knapp och sedan på ett tåg i eller utanför depån. Ctrl+klicka för att dela ordrar. Håll även in Shift för att endast visa uppskattad kostnad +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Köp en kopia av ett vägfordon. Klicka på denna knapp och sedan på ett vägfordon i eller utanför depån. Ctrl+klicka för att dela ordrar. Håll även in Shift för att endast visa uppskattad kostnad +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Köp en kopia av ett skepp. Klicka på denna knapp och sedan på ett skepp i eller utanför depån. Ctrl+klicka för att dela ordrar. Håll även in Shift för att endast visa uppskattad kostnad STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Köp en kopia av en flygfarkost. Klicka på denna knapp och sedan på en flygfarkost i eller utanför hangaren. Ctrl+klicka för att dela ordrar. Håll även in Shift för att endast visa uppskattad kostnad ###length VEHICLE_TYPES @@ -4449,10 +4449,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kapacite STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK} Överför kredit: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Serviceintervall: {LTBLUE}{COMMA}{NBSP}dagar{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Serviceintervall: {LTBLUE}{COMMA}{NBSP}minuter{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Serviceintervall: {LTBLUE}{COMMA}{NBSP}minut{P "" er}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Serviceintervall: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Senast servad: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Senast servad: {LTBLUE}{NUM} minuter sedan +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Senast servad: {LTBLUE}{NUM} minut{P "" er} sedan STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Öka serviceintervall med 10 dagar. Ctrl+Klick för att öka serviceintervall med 5 dagar STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Öka serviceintervall med 5 minuter. Ctrl+Klick för att öka serviceintervall med 1 minut STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Öka serviceintervall med 10 procent. Ctrl+Klick för att öka serviceintervall med 5 procent diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 2df685a55a..4fad532d45 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1498,7 +1498,7 @@ STR_CONFIG_SETTING_FORBID_90_DEG :Заборон STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :При включенні прямокутні перетини шляхів не будуть вважатися поворотами. Для повороту необходно прокладати шляхи під кутом 45°. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Станції можуть складатися з не суміжних частин: {STRING} -STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Дозволяє об'єднання в одну станцію частин, що не примикають одна до одної. Щоб приєднати нову станцію до існуючої, необхідно використовувати Ctrl+клац при будівництві +STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Дозволяє додавання до станції частин, що не примикають одна до одної. Для цього використовуйте Ctrl+клац при будівництві нових частин STR_CONFIG_SETTING_INFLATION :Інфляція: {STRING} STR_CONFIG_SETTING_INFLATION_HELPTEXT :Дозволяє інфляцію в економіці. При цьому витрати з часом зростають дещо швидше за прибутки @@ -1700,7 +1700,7 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Макс. ві STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Обмеження віддалення від меж мапи будівництва нафтопереробних заводів та нафтових установок. На острівних мапах це гарантує розташування біля узбережжя. На мапах понад 256 клітинок це значення збільшиться. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Рівень снігової шапки: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Контроль висоти, вище якої лежить сніг в субарктичному ландшафті. Сніг впливає на генерування підприємств та на умови росту міст. Можливо змінити лише в редакторі сценаріїв, інакше вираховується за параметром "покриття снігом" +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Оберіть висоту, вище якої лежить сніг в субарктичному ландшафті. Сніг впливає на генерування підприємств та на умови росту міст. Можливо змінити лише в редакторі сценаріїв, інакше вираховується за параметром "покриття снігом" STR_CONFIG_SETTING_SNOW_COVERAGE :Покриття снігом: {STRING} STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Контроль приблизної частки снігу в субарктичному ландшафті. Сніг впливає на створення підприємств та умови росту міст. Використовується лише при створенні мапи. Території біля моря завжди безсніжні @@ -2710,6 +2710,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Не в STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Не вказано назву сервера. Назва має вказуватись нагорі вікна багатокористувацької гри. STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Версія клієнта не збігається з версією сервера STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Пароль невірний +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Ви не в списку дозволених клієнтів STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Сервер переповнений STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Вас відключено від цього серверу STR_NETWORK_ERROR_KICKED :{WHITE}Вас відключено від гри @@ -2924,16 +2925,16 @@ STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Будівни STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Будівництво монорейкової залізниці STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Будівництво магнітної залізниці -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Будувати колію. Ctrl переключає побудову/знесення для будівництва колії. Утримуйте Shift для показу витрат на будівництво -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Будувати колію, використовуючи авторежим. Ctrl переключає побудову/знесення для будівництва колії. Утримуйте Shift для показу витрат на будівництво +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Будування колії. Ctrl+клац для знесення колії. Утримуйте Shift для показу очікуваних витрат +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Будування колії в авторежимі. Ctrl+клац для знесення колії. Утримуйте Shift для показу очікуваних витрат STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Будувати залізничне депо (для купівлі та обслуговування потягів). Утримуйте Shift для показу витрат на будівництво -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Перетворити колію на точку маршруту. Ctrl дозволяє об'єднання точок маршруту. Утримуйте Shift для показу очікуваних витрат -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Будувати станцію. Ctrl дозволяє об'єднання станцій. Утримуйте Shift для показу витрат на будівництво -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Будувати залізничні сигнали. Ctrl переключає семафори/світлові сигнали{}Протяжка мишою будує сигнали вздовж прямої ділянки рейок. Ctrl будує сигнали до наступної розв'язки чи сигналу{}Ctrl+клац мишою вмикає показ вікна вибору сигналів. Утримуйте Shift для показу витрат на будівництво +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Будування точки маршруту. Ctrl+клац для створення приєднаної точки маршруту. Утримуйте Shift для показу очікуваних витрат +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Будування залізничної станції. Ctrl+клац для приєднання додаткових станцій. Утримуйте Shift для показу очікуваних витрат +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Будувати колійні сигнали. Ctrl+клац переключає семафори/світлофори{}Ctrl+протяжка будує сигнали вздовж ділянки колії з обраним проміжком. Ctrl+клац+протяжка будує сигнали до наступної стрілки, станції чи сигналу. Утримуйте Shift для показу очікуваних витрат STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Будувати залізничний міст. Утримуйте Shift для показу витрат на будівництво STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Будування тунелю. Утримуйте Shift для показу витрат на будівництво STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Будувати/демонтувати колію, сигнали, точки маршруту і станції. Утримання Ctrl також демонтує колію з точок маршрутів і станцій -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Модернізувати колію. Утримуйте Shift для показу витрат на модернізацію +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Модернізація колії. Утримуйте Shift для показу очікуваних витрат STR_RAIL_NAME_RAILROAD :Звичайна колія STR_RAIL_NAME_ELRAIL :Електрифікована колія @@ -3098,7 +3099,7 @@ STR_STATION_BUILD_NOISE :{BLACK}Ріве STR_LANDSCAPING_TOOLBAR :{WHITE}Ландшафт STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Опустити край ділянки землі. Протягування мишею опускає вибраний край і вирівнює вибрану ділянку до його нової висоти. Утримуйте Ctrl для виділення клітинок по діагоналі, або Shift - для показу очікуваних витрат STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Підняти край ділянки землі. Протягування мишею піднімає вибраний край і вирівнює вибрану ділянку до його нової висоти. Ctrl+клац+протягування для виділення клітинок по діагоналі. Утримуйте Shift для показу очікуваних витрат -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Вирівняти ділянку землі до висоти першого обраного краю. Утримуйте Ctrl для виділення клітинок по діагоналі, або Shift - для показу очікуваних витрат +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Вирівнювання ділянки землі до висоти першого обраного краю. Ctrl+клац+протягування для виділення діагональної ділянки. Утримуйте Shift для показу очікуваних витрат STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Купити ділянку для використання у майбутньому. Утримуйте Ctrl для виділення діагональної ділянки. Утримуйте Shift для показу вартості ділянки # Object construction window @@ -4259,7 +4260,7 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купу ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Купити вибраний поїзд. Утримуйте Shift для показу витрат на придбання STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Купити вибране авто. Утримуйте Shift для показу витрат на придбання -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Купити вибраний корабель. Утримуйте Shift для показу витрат на придбання +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Купити обраний корабель. Утримуйте Shift для показу очікуваних витрат STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Купити вибраний літак. Утримуйте Shift для показу витрат на придбання ###length VEHICLE_TYPES From b8b01818ca55ed7a0fd029316a565a72d2f1f1ac Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 27 Mar 2024 04:43:49 +0000 Subject: [PATCH 192/695] Update: Translations from eints english (au): 1 change by krysclarke norwegian (bokmal): 1 change by eriksorngard spanish (mexican): 32 changes by rgonzalez-py english (us): 3 changes by 2TallTyler russian: 3 changes by Ln-Wolf ukrainian: 18 changes by StepanIvasyn lithuanian: 6 changes by dziugas1959 portuguese (brazilian): 11 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 22 +++++++++---------- src/lang/english_AU.txt | 2 +- src/lang/english_US.txt | 6 +++--- src/lang/lithuanian.txt | 6 ++++++ src/lang/norwegian_bokmal.txt | 2 +- src/lang/russian.txt | 6 +++--- src/lang/spanish_MX.txt | 33 ++++++++++++++++++++++++++++- src/lang/ukrainian.txt | 35 ++++++++++++++++--------------- 8 files changed, 75 insertions(+), 37 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 1433e179fb..3b32451592 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -275,14 +275,14 @@ STR_LIST_FILTER_TOOLTIP :{BLACK}Digitar STR_TOOLTIP_GROUP_ORDER :{BLACK}Escolher a ordem de agrupamento STR_TOOLTIP_SORT_ORDER :{BLACK}Escolher a ordenação (descendente/ascendente) STR_TOOLTIP_SORT_CRITERIA :{BLACK}Escolher o critério de ordenação -STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Escolher o critério de pesquisa +STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Escolher o critério de seleção STR_BUTTON_SORT_BY :{BLACK}Ordenar por STR_BUTTON_CATCHMENT :{BLACK}Cobertura STR_TOOLTIP_CATCHMENT :{BLACK}Mostrar/Ocultar a área de cobertura STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Fechar janela STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Título da janela - arraste isto para mover a janela -STR_TOOLTIP_SHADE :{BLACK}Encolher janela - somente a barra de título fica visível +STR_TOOLTIP_SHADE :{BLACK}Encolher janela - manter visível apenas a barra de título STR_TOOLTIP_DEBUG :{BLACK}Mostrar informação de depuração de NewGRF STR_TOOLTIP_DEFSIZE :{BLACK}Redimensionar a janela para o tamanho padrão. Ctrl+Clique para salvar o tamanho atual como padrão STR_TOOLTIP_STICKY :{BLACK}Fixar esta janela para ela não ser fechada pela tecla 'Fechar Todas as Janelas'. Ctrl+Clique para salvar o estado como padrão @@ -1749,7 +1749,7 @@ STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Mostrar caminho STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Usar uma cor diferente nos trajetos reservados para auxiliar na solução de problemas com trens que se recusam a entrar em seções controlados por sinais de caminho STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Manter as ferramentas de construção ativas após o uso: {STRING} -STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Manter ativas as ferramentas de construção para pontes, túneis, etc. após o uso +STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Manter as ferramentas de construção de pontes, túneis, etc. abertas após o uso STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Remover automaticamente os sinais durante a construção de ferrovias: {STRING} STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Remover automaticamente os sinais durante a construção de ferrovias se os sinais estiverem no caminho. Isso pode, potencialmente, causar acidentes de trens @@ -1906,7 +1906,7 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Ano em que os j STR_CONFIG_SETTING_STARTING_YEAR :Data de início: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Pontuação no fim do ano: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Ano em que o jogo termina para fins de pontuação. No fim desse ano, a pontuação da empresa é registrada e o painel de classificação é exibido, mas os jogadores podem continuar jogando depois disso.{}Se isso for antes do ano de início, o painel de classificação nunca será exibido +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Ano em que o jogo termina para fins de pontuação. No fim desse ano, a pontuação da empresa é registrada e a tela de pontuação máxima é exibida, mas os jogadores podem continuar jogando depois disso.{}Se isso for antes do ano de início, a tela de pontuação máxima nunca será exibida STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nunca @@ -2140,12 +2140,12 @@ STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Algoritmo usado STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Gerador de rotas para embarcações: {STRING} STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Algoritmo usado para estabelecer as rotas das embarcações STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Reversão automática em sinais: {STRING} -STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permitir que os trens invertam a direção em um sinal, se eles esperaram lá muito tempo +STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permitir que os trens invertam o sentido em um sinal, se eles tiverem esperado lá muito tempo ###length 2 STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recomendado) -STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Alterar valor da configuração +STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Alterar o valor # Config errors STR_CONFIG_ERROR :{WHITE}Erro no arquivo de configuração... @@ -3063,7 +3063,7 @@ STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING} STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Cadeia Industrial STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Mostrar indústrias que fornecem e aceitam carga STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Ligar ao minimapa -STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Selecionar também as indústrias mostradas no minimapa +STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Selecionar no minimapa as indústrias mostradas STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}Selecionar carga STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}Escolher a carga que você deseja mostrar STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}Selecionar indústria @@ -3663,9 +3663,9 @@ STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Comprar direito STR_LOCAL_AUTHORITY_ACTION_BRIBE :Subornar a autoridade local ###next-name-looks-similar -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma campanha publicitária pequena local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na classificação da estação em um raio pequeno ao redor do centro da localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma campanha publicitária média local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na classificação da estação em um raio médio ao redor do centro da cidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma campanha publicitária grande local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na classificação da estação em um raio grande ao redor do centro da localidade{}{POP_COLOUR}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma pequena campanha publicitária local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na classificação da estação num raio pequeno em torno do centro da localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma média campanha publicitária local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na classificação da estação num raio médio em torno do centro da cidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma grande campanha publicitária local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na classificação da estação num raio grande em torno do centro da localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Financiar a reconstrução da rede urbana de estradas.{}Provoca uma perturbação considerável no tráfego por até 6 meses.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}Financiar a reconstrução da rede urbana de estradas.{}Provoca uma perturbação considerável no tráfego por até 6 minutos.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Construir uma estátua em homenagem à sua empresa.{}Produz um aumento permanente na classificação da estação nesta localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} @@ -4644,7 +4644,7 @@ STR_ORDER_REFIT_ORDER :(Adaptar para { STR_ORDER_REFIT_STOP_ORDER :(Adaptar para {STRING} e parar) STR_ORDER_STOP_ORDER :(Parar) -STR_ORDER_WAIT_TO_UNBUNCH :(aguardar para desagrupar) +STR_ORDER_WAIT_TO_UNBUNCH :(Aguardar para desagrupar) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Não pode usar a estação){POP_COLOUR} {STRING} {STATION} {STRING} diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 63d2bc12d3..7a041367d2 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -4643,7 +4643,7 @@ STR_ORDER_REFIT_ORDER :(Refit to {STRI STR_ORDER_REFIT_STOP_ORDER :(Refit to {STRING} and stop) STR_ORDER_STOP_ORDER :(Stop) -STR_ORDER_WAIT_TO_UNBUNCH :(wait to unbunch) +STR_ORDER_WAIT_TO_UNBUNCH :(Wait to unbunch) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Can't use station){POP_COLOUR} {STRING} {STATION} {STRING} diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index fcb8d3e559..13fba7db15 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -4449,10 +4449,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Capacity STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Transfer Credits: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Maintenance interval: {LTBLUE}{COMMA}{NBSP}days{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Maintenance interval: {LTBLUE}{COMMA}{NBSP}minutes{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Maintenance interval: {LTBLUE}{COMMA}{NBSP}minute{P "" s}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Maintenance interval: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Last maintenance: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Last maintenance: {LTBLUE}{NUM} minutes ago +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Last maintenance: {LTBLUE}{NUM} minute{P "" s} ago STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Increase maintenance interval by 10 days. Ctrl+Click to increase maintenance interval by 5 days STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Increase maintenance interval by 5 minutes. Ctrl+Click to increase maintenance interval by 1 minute STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Increase maintenance interval by 10 percent. Ctrl+Click to increase maintenance interval by 5 percent @@ -4643,7 +4643,7 @@ STR_ORDER_REFIT_ORDER :(Refit to {STRI STR_ORDER_REFIT_STOP_ORDER :(Refit to {STRING} and stop) STR_ORDER_STOP_ORDER :(Stop) -STR_ORDER_WAIT_TO_UNBUNCH :(wait to unbunch) +STR_ORDER_WAIT_TO_UNBUNCH :(Wait to unbunch) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Can't use station){POP_COLOUR} {STRING} {STATION} {STRING} diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 606fe189ce..5775ec7d33 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -4229,6 +4229,12 @@ STR_ENGINE_PREVIEW_SHIP.ka :laivą STR_ENGINE_PREVIEW_SHIP.kuo :laivu STR_ENGINE_PREVIEW_SHIP.kur :laive +STR_ENGINE_PREVIEW_COST_WEIGHT :Kaina: {CURRENCY_LONG} Svoris: {WEIGHT_SHORT} +STR_ENGINE_PREVIEW_COST_MAX_SPEED :Kaina: {CURRENCY_LONG} Maksimalus greitis: {VELOCITY} +STR_ENGINE_PREVIEW_SPEED_POWER :Greitis: {VELOCITY} Galia: {POWER} +STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Greitis: {VELOCITY} Galia: {POWER} Maks. „T.E“.: {FORCE} +STR_ENGINE_PREVIEW_CAPACITY :Talpa: {CARGO_LONG} +STR_ENGINE_PREVIEW_CAPACITY_2 :Talpa: {CARGO_LONG}, {CARGO_LONG} # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Keisti tr. priemones {STRING} - {STRING} diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 07d1eb9841..6654abd5f7 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -4645,7 +4645,7 @@ STR_ORDER_REFIT_ORDER :(Bygg om til {S STR_ORDER_REFIT_STOP_ORDER :(Bygg om til {STRING} og stopp) STR_ORDER_STOP_ORDER :(Stopp) -STR_ORDER_WAIT_TO_UNBUNCH :(vent for å fjerne klumping) +STR_ORDER_WAIT_TO_UNBUNCH :(Vent for å fjerne klumping) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Kan ikke bruke stasjon){POP_COLOUR} {STRING} {STATION} {STRING} diff --git a/src/lang/russian.txt b/src/lang/russian.txt index e517458adf..f4d7f5da4f 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -4571,7 +4571,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Теку # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Разгрузка/Погрузка STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Отъезжает -STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Ожидание развязки +STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Ожидание распределения на маршрут STR_VEHICLE_STATUS_CRASHED :{RED}Попал в аварию! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Поломка STR_VEHICLE_STATUS_STOPPED :{RED}Остановлен @@ -4830,7 +4830,7 @@ STR_ORDER_REFIT_ORDER :(Переобо STR_ORDER_REFIT_STOP_ORDER :(Переоборуд. под {STRING.acc} и стоп) STR_ORDER_STOP_ORDER :(Стоп) -STR_ORDER_WAIT_TO_UNBUNCH :(распределить) +STR_ORDER_WAIT_TO_UNBUNCH :(Распределить) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Неверный тип){POP_COLOUR} {STRING} {STATION} {STRING} @@ -5083,7 +5083,7 @@ STR_MESSAGE_ESTIMATED_COST :{WHITE}Пред STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Предполагаемый доход: {CURRENCY_LONG} # Saveload messages -STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Идёт сохранение,{}пожалуйста, дождитесь завершения! +STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Идёт сохранение;{}пожалуйста, дождитесь завершения! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Ошибка автосохранения STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Не удалось прочитать диск STR_ERROR_GAME_SAVE_FAILED :{WHITE}Невозможно сохранить игру{}{STRING} diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 50a9e83b44..8b127708c1 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -937,6 +937,7 @@ STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}Seleccio STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Divisa STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Elegir divisa +STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) ###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Libra británica @@ -981,6 +982,8 @@ STR_GAME_OPTIONS_CURRENCY_HKD :Dólar hongkon STR_GAME_OPTIONS_CURRENCY_INR :Rupia india STR_GAME_OPTIONS_CURRENCY_IDR :Rupia indonesia STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit malasio +STR_GAME_OPTIONS_CURRENCY_LVL :Lats letón +STR_GAME_OPTIONS_CURRENCY_PTE :Escudo portugués STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Guardado automático STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Elegir el intervalo de guardados automáticos @@ -1086,6 +1089,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Reducir STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Incrementar el valor de la moneda por una libra (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Ajustar el valor de cambio de la moneda por una Libra (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Separador: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Establece el separador para la moneda STR_CURRENCY_PREFIX :{LTBLUE}Prefijo: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Establecer el prefijo de la moneda @@ -1262,7 +1267,9 @@ STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Establecer cuá STR_CONFIG_SETTING_SUBSIDY_DURATION :Duración de subsidio: {STRING} ###length 2 STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Años que durará un subsidio otorgado +STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT_PERIODS :Establezca el número de periodos para los que se concederá un subsidio +STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{UNITS_YEARS_OR_PERIODS} ###setting-zero-is-special STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Sin subsidios @@ -1415,6 +1422,8 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ninguno* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reducida STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Permitir pasos a nivel con carreteras o ferrocarriles propiedad de otras empresas: {STRING} +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Permite construir pasos a nivel en carreteras o ferrocarriles que sean propiedad de otras empresas STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permitir construcción de paradas de paso en localidades: {STRING} STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Se podrán construir paradas de paso en las carreteras que sean propiedad de las localidades @@ -1451,7 +1460,11 @@ STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Mostrar un mens STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Vehículos siempre disponibles: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Todos los modelos de vehículos estarán disponibles para siempre tras haber sido introducidos +STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Cronómetro: {STRING} +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Seleccione las unidades de tiempo del juego. Esto no puede cambiarse más tarde.{}{}El modo basado en el calendario es la experiencia clásica de OpenTTD, con un año que consta de 12 meses, y cada mes tiene de 28 a 31 días.{}{}En cambio, en el modo Reloj de pared, la producción de carga y las finanzas se basan en incrementos de un minuto, que es más o menos lo que dura un mes de 30 días en el modo basado en el calendario.{}{}En cualquiera de los dos modos siempre hay un calendario clásico, que se utiliza para las fechas de introducción de vehículos, casas y otras infraestructuras. ###length 2 +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendario +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Reloj STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutos por año: {STRING} STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Selecciona el número de minutos de un año de calendario. Por defecto es 12 minutos. Introduce 0 para evitar que cambie el tiempo del calendario. Este ajuste no afecta a la simulación de la economía del juego y sólo está disponible cuando se usa el modo "Reloj" . @@ -1974,6 +1987,10 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Ninguno STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador inicial de tamaño de ciudad: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamaño medio de las ciudades relativo a las localidades al inicio del juego +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Actualizar gráfico de distribución cada {STRING} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tiempo entre los recálculos posteriores del gráfico de enlaces. Cada recálculo calcula los planes de un componente del gráfico. Esto significa que un valor X para este ajuste no significa que todo el gráfico se actualizará cada X segundos. Sólo algunos componentes lo harán. Cuanto más corto sea el valor, más tiempo de CPU será necesario para calcularlo. Cuanto más largo sea el valor, más tardará la distribución de la carga en las nuevas rutas. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Utilizar {STRING} para recalcular el gráfico de distribución +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tiempo que tarda cada recálculo de un componente del gráfico de enlaces. Cuando un recálculo se inicia, un proceso es creado y se le permite ejecutarse durante este número de segundos. Cuanto más corto sea este valor, más probable es que el proceso no termine cuando se supone que deba hacerlo. Entonces el juego se detiene hasta que lo haga ("lag"). Cuanto más largo lo establezcas más tardará en actualizarse la distribución cuando cambien las rutas STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribución para pasajeros: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :En una distribución "Simétrica", se envía la misma cantidad de pasajeros de la estación A a la B que de la B a la A. En una distribución "Asimétrica" se pueden enviar cantidades arbitrarias de pasajeros en cualquier direccion. "Manual" significa que no se realiza una distribución automática para los pasajeros. @@ -2527,6 +2544,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :recibido paquet STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :revisión incorrecta STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :nombre en uso STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :contraseña incorrecta +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :no está en la lista de permitidos STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :empresa incorrecta en un DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :expulsado por el servidor STR_NETWORK_ERROR_CLIENT_CHEATER :trataste de usar un truco @@ -2662,6 +2680,7 @@ STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Transpar STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Transparencia de puentes. Ctrl+Clic para bloquear STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Transparencia de estructuras como faros o antenas. Ctrl+Clic para bloquear STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Transparencia de catenaria. Ctrl+Clic para bloquear +STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Ajustar transparencia para el texto que indica la carga, el coste y los ingresos. Ctrl+clic para bloquear STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Ocultar objetos totalmente # Linkgraph legend window @@ -2677,7 +2696,10 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}sobrecargado # Linkgraph tooltip +STR_LINKGRAPH_STATS_TOOLTIP_MONTH :{BLACK}{CARGO_LONG} serán transportad{G 0 o a}s cada mes desde {STATION} a {STATION} ({COMMA}% de capacidad){STRING} +STR_LINKGRAPH_STATS_TOOLTIP_MINUTE :{BLACK}{CARGO_LONG} serán transportad{G 0 o a}s cada minuto desde {STATION} a {STATION} ({COMMA}% de capacidad){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} a ser transportad{G 0 o a}{P 0 "" s}) de vuelta ({COMMA}% de la capacidad) +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Tiempo de viaje promedio: {UNITS_DAYS_OR_SECONDS} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Mostrar área de recolección @@ -4508,6 +4530,7 @@ STR_ORDER_REFIT_ORDER :(Reformar a {ST STR_ORDER_REFIT_STOP_ORDER :(Reformar a {STRING} y detenerse) STR_ORDER_STOP_ORDER :(Detenerse) +STR_ORDER_WAIT_TO_UNBUNCH :(Esperar para desenganchar) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(No se puede usar la estación){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4610,7 +4633,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Esperado STR_TIMETABLE_SCHEDULED :{BLACK}Programado STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Cambiar entre esperado y programado +STR_TIMETABLE_ARRIVAL_DATE :L: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :S: {COLOUR}{DATE_TINY} STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :L: {COLOUR}{COMMA} s +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :S: {COLOUR}{COMMA} s # Date window (for timetable) @@ -4698,7 +4724,8 @@ STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captura # Script Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parámetros -STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parámetros de IA +STR_AI_SETTINGS_CAPTION_AI :Parámetros de IA +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de juego STR_AI_SETTINGS_CLOSE :{BLACK}Cerrar STR_AI_SETTINGS_RESET :{BLACK}Reiniciar STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} @@ -5651,6 +5678,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}M +STR_CURRENCY_SHORT_GIGA :{NBSP}kM +STR_CURRENCY_SHORT_TERA :{NBSP}MM STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CHECKMARK :{CHECKMARK} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 4fad532d45..afcdfbdb64 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -540,7 +540,7 @@ STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Буду STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Будувати порти STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Будувати аеропорти STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Змінити ландшафт -STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Налаштувати звук/музику +STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Налаштування звуків/музики STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Показати останнє повідомлення. Налаштування повідомлень STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Інформація про земельну ділянку, знімки екрану, про гру OpenTTD та інструменти для розробки STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Переключити панелі @@ -1183,7 +1183,7 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Увім STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Поточний драйвер: {STRING} STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Розмір інтерфейсу -STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Перетягніть повзунок для встановлення розміру інтерфейсу. Тримайте Ctrl для закріплення +STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Перетягніть повзунок для встановлення розміру інтерфейсу. Ctrl+протягування для точнішого перетягування STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Автоматично визначений розмір STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Увімкнутий прапорець дозволить автоматично визначити розмір інтерфейсу @@ -1406,6 +1406,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :ліворуч STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :по центру STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :праворуч +STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}секунд{P 0 и "" ""} STR_CONFIG_SETTING_INFINITE_MONEY :Нескінченні гроші: {STRING} STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Дозволяє необмежені витрати і вимикає банкрутство компаній @@ -1703,7 +1704,7 @@ STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Рівень с STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Оберіть висоту, вище якої лежить сніг в субарктичному ландшафті. Сніг впливає на генерування підприємств та на умови росту міст. Можливо змінити лише в редакторі сценаріїв, інакше вираховується за параметром "покриття снігом" STR_CONFIG_SETTING_SNOW_COVERAGE :Покриття снігом: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Контроль приблизної частки снігу в субарктичному ландшафті. Сніг впливає на створення підприємств та умови росту міст. Використовується лише при створенні мапи. Території біля моря завжди безсніжні +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Оберіть приблизну частку снігу в субарктичному ландшафті. Сніг впливає на створення підприємств та умови зростання міст. Використовується лише при створенні мапи. Моря і узбережжя завжди безсніжні STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Покриття пустелею: {STRING} @@ -2724,7 +2725,7 @@ STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Ви д STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Неприпустиме ім'я гравця STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Можлива втрата з'єднання -STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}На протязі {NUM} секунд{P и "" ""} не надійшло жодної інформації від сервера +STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Впродовж {NUM} секунд{P и "" ""} не надійшло жодної інформації від сервера ###length 22 STR_NETWORK_ERROR_CLIENT_GENERAL :фатальна помилка @@ -3043,7 +3044,7 @@ STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Вибе STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Орієнтація зупинки STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Виберіть орієнтацію зупинки STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Орієнтація станції -STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Виберіть орієнтацію вантажної станції +STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Оберіть орієнтацію вантажної станції STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Орієнтація пасажирської трамвайної станції STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Виберіть орієнтацію пасажирської трамвайної станції STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Орієнтація вантажної трамвайної станції @@ -3052,12 +3053,12 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Вибе # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Судноплавне будівництво STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Водні шляхи -STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Будувати канали. Утримуйте Shift для показу витрат на будівництво -STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Будувати шлюз. Утримуйте Shift для показу витрат на будівництво -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Будувати корабельні доки (для будівництва та обслуговування кораблів). Утримуйте Shift для показу витрат на будівництво -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Будувати док. Ctrl дозволяє об'єднувати станції. Утримуйте Shift для показу витрат на будівництво +STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Будування каналів. Утримуйте Shift для показу очікуваних витрат +STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Будування шлюзів. Утримуйте Shift для показу очікуваних витрат +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Будування корабельних елінгів (для будівництва та обслуговування кораблів). Утримуйте Shift для показу орієнтовних витрат +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Будування доку. Ctrl+клац для приєднання додаткових доків. Утримуйте Shift для показу очікуваних витрат STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Розмістити бакен, який можна використовувати як точку маршруту. Утримуйте Shift для показу витрат на розміщення -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Побудувати акведук. Утримуйте Shift для показу витрат на будівництво +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Будування акведука. Утримуйте Shift для показу очікуваних витрат STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Будувати канал. Ctrl+клац на рівні моря для затоплення морською водою STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Прокласти річки. Ctrl+клац для вибору діагональних ділянок @@ -3946,7 +3947,7 @@ STR_CARGO_RATING_VERY_GOOD :дуже доб STR_CARGO_RATING_EXCELLENT :відмінно STR_CARGO_RATING_OUTSTANDING :найкраще -STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Показати станцію в центрі екрану. Ctrl+клац мишою відкриє нове вікно з видом на станцію +STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Показувати станцію в центрі екрану. Ctrl+клац мишею відкриє нове вікно з видом на станцію STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Перейменувати станцію STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Показати всі поїзди, які заходять на цю станцію @@ -4259,13 +4260,13 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купу ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Купити вибраний поїзд. Утримуйте Shift для показу витрат на придбання -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Купити вибране авто. Утримуйте Shift для показу витрат на придбання +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Придбати обраний дорожній транспорт. Утримуйте Shift для показу орієнтовних витрат STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Купити обраний корабель. Утримуйте Shift для показу очікуваних витрат -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Купити вибраний літак. Утримуйте Shift для показу витрат на придбання +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Придбати обраний літальний апарат. Утримуйте Shift для показу орієнтовних витрат ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбайте та переобладнайте виділений поїзд. Shift+клац показує орієнтовну вартість без покупки -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбайте та переобладнайте авто. Shift+клац показує орієнтовну вартість без покупки +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбати та переобладнати дорожній транспорт. Утримуйте Shift для показу орієнтовних витрат STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбати та переобладнати виділене судно. Утримуйте Shift, щоб побачити тільки орієнтовну вартість STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбайте та переобладнайте виділений повітряний апарат. Утримуйте Shift, щоб побачити тільки орієнтовну вартість @@ -4480,14 +4481,14 @@ STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Пока STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Показати авіатранспорт у центрі головного вікна. Подвійний клац для руху за авіатранспортом у головному вікні. Ctrl+клац мишою для показу авіатранспорту в додатковому вікні ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити поїзд у депо +STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити потяг у депо. Ctrl+клац тільки для техогляду STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити авто в депо. Ctrl+клац тільки для техогляду STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити корабель в елінг. Ctrl+клац тільки для техогляду STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити літак в ангар. Ctrl+клац тільки для техогляду ###length VEHICLE_TYPES STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Купити копію поїзда з усіма вагонами. Утримуйте Ctrl для спільного завдання. Утримуйте Shift для показу витрат на придбання -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Купити копію авто. Утримуйте Ctrl для спільного завдання. Утримуйте Shift для показу витрат на придбання +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Купити копію авто. Ctrl+клац для копіювання спільного завдання. Утримуйте Shift для показу орієнтовних витрат STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Купити копію корабля. Утримуйте Ctrl для спільного завдання. Утримуйте Shift для показу витрат на придбання STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Купити копію літака. Утримуйте Ctrl для спільного завдання. Утримуйте Shift для показу витрат на придбання @@ -4925,7 +4926,7 @@ STR_AI_DEBUG_CONTINUE :{BLACK}Прод STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Зняти з паузи і продовжити ШІ STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Відобразити результати зневадження цього ШІ STR_AI_GAME_SCRIPT :{BLACK}Ігровий скрипт -STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Перевірити журнал ігрового скрипту +STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Перевірити журнал ігрового скрипту. Ctrl+клац відкриє журнал у новому вікні STR_ERROR_AI_NO_AI_FOUND :Не знайдено підходящих модулів ШІ.{}Це модуль-заглушка, він нічого не робить.{}Ви можете завантажити різноманітні модулі ШІ через 'Додатковий контент' STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Один із запущених скриптів перестав працювати. Будь ласка, повідомте про це автора скрипту, разом зі знімком вікна зневадження ШІ / ігрового скрипту From 433484cda3c1cecc0441dc0080c1cb1a765cf807 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 27 Mar 2024 20:20:27 +0000 Subject: [PATCH 193/695] Fix #12388: Vehicle::CopyVehicleConfigAndStatistics not releasing unit number (#12389) --- src/train_cmd.cpp | 3 +-- src/vehicle.cpp | 9 +++++++++ src/vehicle_base.h | 3 +++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 4413a2e777..51353c5281 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -1336,8 +1336,7 @@ CommandCost CmdMoveRailVehicle(DoCommandFlag flags, VehicleID src_veh, VehicleID } /* Remove stuff not valid anymore for non-front engines. */ DeleteVehicleOrders(src); - Company::Get(src->owner)->freeunits[src->type].ReleaseID(src->unitnumber); - src->unitnumber = 0; + src->ReleaseUnitNumber(); src->name.clear(); } diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 044c8013c9..7d6e8489ea 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -2401,6 +2401,15 @@ void Vehicle::ResetRefitCaps() for (Vehicle *v = this; v != nullptr; v = v->Next()) v->refit_cap = v->cargo_cap; } +/** + * Release the vehicle's unit number. + */ +void Vehicle::ReleaseUnitNumber() +{ + Company::Get(this->owner)->freeunits[this->type].ReleaseID(this->unitnumber); + this->unitnumber = 0; +} + /** * Handle the loading of the vehicle; when not it skips through dummy * orders and does nothing in all other cases. diff --git a/src/vehicle_base.h b/src/vehicle_base.h index 3c4e2ea65f..592063323c 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -750,6 +750,8 @@ public: void ResetRefitCaps(); + void ReleaseUnitNumber(); + /** * Copy certain configurations and statistics of a vehicle after successful autoreplace/renew * The function shall copy everything that cannot be copied by a command (like orders / group etc), @@ -760,6 +762,7 @@ public: { this->CopyConsistPropertiesFrom(src); + this->ReleaseUnitNumber(); this->unitnumber = src->unitnumber; this->current_order = src->current_order; From ca53e134be6a63b6f528c5eac0476d15bac81323 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 28 Mar 2024 04:40:56 +0000 Subject: [PATCH 194/695] Update: Translations from eints swedish: 14 changes by sereneavatar finnish: 2 changes by hpiirai ukrainian: 18 changes by StepanIvasyn latvian: 4 changes by lexuslatvia portuguese (brazilian): 13 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 26 +++++++++++----------- src/lang/finnish.txt | 4 ++-- src/lang/latvian.txt | 8 +++---- src/lang/swedish.txt | 28 ++++++++++++------------ src/lang/ukrainian.txt | 36 +++++++++++++++---------------- 5 files changed, 51 insertions(+), 51 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 3b32451592..e43718ba29 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -227,7 +227,7 @@ STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP} STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/t STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t -STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/kg +STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/t STR_UNITS_POWER_SI_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}kW/t STR_UNITS_POWER_SI_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}kW/t STR_UNITS_POWER_SI_TO_WEIGHT_SI :{DECIMAL}{NBSP}W/kg @@ -252,7 +252,7 @@ STR_UNITS_FORCE_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_FORCE_METRIC :{DECIMAL}{NBSP}kgf STR_UNITS_FORCE_SI :{DECIMAL}{NBSP}kN -STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP}pé{P "" s} +STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP}ft STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m @@ -269,8 +269,8 @@ STR_UNITS_PERIODS :{NUM}{NBSP}per # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtro: -STR_LIST_FILTER_OSKTITLE :{BLACK}Digitar uma ou mais palavras-chave para procurar na lista -STR_LIST_FILTER_TOOLTIP :{BLACK}Digitar uma ou mais palavras-chave para procurar na lista +STR_LIST_FILTER_OSKTITLE :{BLACK}Inserir uma ou mais palavras-chave para filtrar a lista +STR_LIST_FILTER_TOOLTIP :{BLACK}Digite uma ou mais palavras-chave para procurar na lista STR_TOOLTIP_GROUP_ORDER :{BLACK}Escolher a ordem de agrupamento STR_TOOLTIP_SORT_ORDER :{BLACK}Escolher a ordenação (descendente/ascendente) @@ -282,7 +282,7 @@ STR_TOOLTIP_CATCHMENT :{BLACK}Mostrar/ STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Fechar janela STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Título da janela - arraste isto para mover a janela -STR_TOOLTIP_SHADE :{BLACK}Encolher janela - manter visível apenas a barra de título +STR_TOOLTIP_SHADE :{BLACK}Encolher janela - mostrar apenas a barra de título STR_TOOLTIP_DEBUG :{BLACK}Mostrar informação de depuração de NewGRF STR_TOOLTIP_DEFSIZE :{BLACK}Redimensionar a janela para o tamanho padrão. Ctrl+Clique para salvar o tamanho atual como padrão STR_TOOLTIP_STICKY :{BLACK}Fixar esta janela para ela não ser fechada pela tecla 'Fechar Todas as Janelas'. Ctrl+Clique para salvar o estado como padrão @@ -383,7 +383,7 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Abrir a STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausar o jogo STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Avanço rápido do jogo STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opções e configurações -STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Salvar, abrir ou abandonar jogo, sair do programa +STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Salvar, abrir ou abandonar o jogo, sair do programa STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Abrir mapa, visualização extra, fluxo de cargas ou lista de placas STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Abrir lista de localidades ou encontrar localidade STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Abrir lista de subsídios @@ -703,12 +703,12 @@ STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Passar p STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Parar a reprodução de música STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Iniciar a reprodução de música STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Arraste os controles deslizantes para definir o volume de músicas e efeitos sonoros -STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Selecionar programa 'Todas as faixas' -STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Selecionar músicas 'Estilo Antigo' -STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Selecionar músicas 'Estilo Moderno' -STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Selecionar músicas 'Estilo Ezy Street' -STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Selecionar músicas 'Personalizado 1' (definido pelo usuário) -STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Selecionar músicas 'Personalizado 2' (definido pelo usuário) +STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Selecionar programa 'todas as faixas' +STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Selecionar programa com músicas 'estilo antigo' +STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Selecionar programa com músicas 'estilo moderno' +STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Selecionar programa com músicas 'estilo Ezy Street' +STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Selecionar programa 'Personalizado 1' (definido pelo usuário) +STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Selecionar programa 'Personalizado 2' (definido pelo usuário) STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Ligar/Desligar reprodução aleatória STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Mostrar janela de seleção de faixas de música @@ -758,7 +758,7 @@ STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Mostrar STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Mostrar rotas de transporte no mapa STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Mostrar vegetação no mapa STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Mostrar proprietários dos terrenos no mapa -STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Clique em um tipo de indústria para mostrar/ocultar a indústria. Ctrl+Clique para desativar todos os tipos, exceto o selecionado. Ctrl+Clique novamente para ativar todos os tipos de indústrias +STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Clique em um tipo de indústria para mostrar/ocultar a indústria. Ctrl+Clique para desativar todos os tipos, exceto o selecionado. Ctrl+Clique novamente para ativar todos os tipos de indústria STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Clique em uma empresa para mostrar/ocultar suas propriedades. Ctrl+Clique para desativar todas as empresas, exceto a selecionada. Ctrl+Clique novamente para ativar todas as empresas STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Clique em uma carga para mostrar/ocultar sua propriedade. Ctrl+Clique para desativar todas as cargas, exceto a selecionada. Ctrl+Clique novamente para ativar todas as cargas diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index ce187a16f2..caff3cc9e7 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1832,7 +1832,7 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Lentokoneiden o STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Määritä oletushuoltoväli uusille lentokoneille, mikäli kulkuneuvolle ei ole määritelty erillistä huoltoväliä STR_CONFIG_SETTING_SERVINT_SHIPS :Laivojen oletushuoltoväli: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Määritä oletushuoltoväli uusille laivoille, mikäli kulkuneuvolle ei ole määritelty erillistä huoltoväliä -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Päivä{P 0 "" s}/Minuutti{P 0 "" s}/% +STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}päivä{P 0 "" ä}/minuutti{P 0 "" a}/% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Pois käytöstä @@ -4643,7 +4643,7 @@ STR_ORDER_REFIT_ORDER :(Sovita {STRING STR_ORDER_REFIT_STOP_ORDER :(Sovita rahtityypille {STRING} ja pysähdy) STR_ORDER_STOP_ORDER :(Pysähdy) -STR_ORDER_WAIT_TO_UNBUNCH :(odota suman purkamiseksi) +STR_ORDER_WAIT_TO_UNBUNCH :(Odota suman purkamiseksi) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Asema ei käytettävissä){POP_COLOUR} {STRING} {STATION} {STRING} diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 8e550a35e6..04c0579bfe 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1512,7 +1512,7 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (kalendāra l STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Mērogot pilsētas kravu ražošana: {STRING} STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Mērogojiet pilsētu kravu ražošanu par šo procentu. STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Merogot industrijas kravu ražošanu: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Mērogojiet nozaru kravu ražošanu par šo procentu. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Mērogojiet nozaru kravu ražošanu par šo procentu STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automātiski atjaunot transportlīdzekļus, kad tie ir kļuvuši veci: {STRING} @@ -1544,7 +1544,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Diagrammu līni STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Rādīt jauno NewGRF paplašinājumu nosaukumus uzbūvēto transportlīdzekļu logā: {STRING} STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Uzbūvēto transportlīdzekļu loga pievienot rindu, kurā būtu redzams, no kura NewGRF nāk izvēlētais transportlīdzeklis. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Rādīt kravas, ko transportlīdzekļi var pārvadāt saraksta logos {STRING} +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Rādīt kravas, ko transportlīdzekļi var pārvadāt saraksta logos: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Ja ieslēgts, transportlīdzekļa transportējamā krava parādīsies virs tās transportlīdzekļu sarakstos STR_CONFIG_SETTING_LANDSCAPE :Ainava: {STRING} @@ -2042,7 +2042,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simetrisks" no STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Pasta izplatīšanas režīms: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simetrisks" nozīmē, ka no stacijas A uz staciju B tiks nosūtīts aptuveni tāds pats pasta daudzums kā no B uz A. "Asimetrisks" nozīmē, ka jebkurā virzienā var nosūtīt patvaļīgu pasta daudzumu. "Manuāli" nozīmē, ka pasta automātiska izplatīšana netiks veikta. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Izplatīšanas režīms APSARGĀJAMAI preču klasei: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :APSARGĀJAMĀ kravu klasē ir vērtslietas mērenā klimatā, dimanti subtropu klimatā vai zelts subarktiskajā klimatā. NewGRF to var mainīt. "Simetrisks" nozīmē, ka no stacijas A uz staciju B tiks nosūtīts aptuveni tāds pats šīs kravas daudzums kā no B uz A. "Asimetrisks" nozīmē, ka šīs kravas var nosūtīt jebkurā virzienā patvaļīgi. "Manuāli" nozīmē, ka šai kravai automātiskā sadale nenotiks. Spēlējot subarktisko vai subtropu, ieteicams to iestatīt uz asimetrisku vai manuālu, jo bankas saņem kravas tikai šādos klimatiskajos apstākļos. Mērenam klimatam varat izvēlēties arī simetrisko, jo bankas nosūtīs vērtslietas atpakaļ uz izcelsmes banku. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :APSARGĀJAMĀ kravu klasē ir vērtslietas mērenā klimatā, dimanti subtropu klimatā vai zelts subarktiskajā klimatā. NewGRF to var mainīt. "Simetrisks" nozīmē, ka no stacijas A uz staciju B tiks nosūtīts aptuveni tāds pats šīs kravas daudzums kā no B uz A. "Asimetrisks" nozīmē, ka šīs kravas var nosūtīt jebkurā virzienā patvaļīgi. "Manuāli" nozīmē, ka šai kravai automātiskā sadale nenotiks. Spēlējot subarktisko vai subtropu, ieteicams to iestatīt uz asimetrisku vai manuālu, jo bankas saņem kravas tikai šādos klimatiskajos apstākļos. Mērenam klimatam varat izvēlēties arī simetrisko, jo bankas nosūtīs vērtslietas atpakaļ uz izcelsmes banku STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Izplatīšanas modelis citām kravu klasēm: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asimetrisks" nozīmē, ka jebkurā virzienā var nosūtīt patvaļīgu daudzumu kravas. "Manuāli" nozīmē, ka šīm kravām automātiska sadale nenotiks ###length 3 @@ -2054,7 +2054,7 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Sadales precizi STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Jo lielāku vērtību iestatīsiet, jo vairāk CPU laika aizies saišu grafa aprēķināšanai. Ja tas aizņem pārāk daudz laika, jūs varētu pamanīt spēles iebremzēšanos. Ja iestatīsiet pārāk mazu, izplatīšana būs neprecīza un jūs varētu pamanīt, ka krava tiek nosūtīta uz negaidītām vietām. STR_CONFIG_SETTING_DEMAND_DISTANCE :Attāluma ietekme uz pieprasījumu: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Ja iestatīsiet šo vērtību lielāku kā 0, attālums starp kravas izcelsmes staciju A un iespējamo galastaciju B ietekmēs sūtāmās kravas apjomu. Jo tālāk no stacijas A ir stacija B, jo mazāk kravas tiks nosūtīts. Jo augstāka vērtība, jo mazāk kravas tiks nosūtīts uz tālo staciju un vairāk kravu uz tuvo staciju. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Ja iestatīsiet šo vērtību lielāku kā 0, attālums starp kravas izcelsmes staciju A un iespējamo galastaciju B ietekmēs sūtāmās kravas apjomu. Jo tālāk no stacijas A ir stacija B, jo mazāk kravas tiks nosūtīts. Jo augstāka vērtība, jo mazāk kravas tiks nosūtīts uz tālo staciju un vairāk kravu uz tuvāku staciju. STR_CONFIG_SETTING_DEMAND_SIZE :Atpakaļceļa kravas daudzums simetriskajā režīmā: {STRING} STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Uzstādod šo mazāk par 100% liks simetriskajai sadalei izturēties vairāk kā asimetriskajai. Mazāk kravas ar varu tiks sūtīts atpakaļ ja noteikts daudzums tiks sūtīts uz piestātni. Ja jūs uzstādīsiet to uz 0% simetriskā sadale izturēsies tā pat kā asimetriskā. diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index d35c4d763b..532a9ca307 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1056,7 +1056,7 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Kryssa i STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Använd traditionellt sprite-typsnitt STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Kryssa i den här rutan om du föredrar att använda det traditionella sprite-typsnittet med fast storlek STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias-typsnitt -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Kryssa i den här rutan för anti-aliasing av typsnitt med justerbar storlek. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Kryssa i den här rutan för anti-aliasing av typsnitt med justerbar storlek STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1495,13 +1495,13 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Fordon blir ald STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Om det är aktiverat förblir alla fordonstyper tillgängliga i obegränsad tid efter att de introducerats STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Tidhållning: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Välj enheter för spelets tidhållning. Detta kan inte ändras senare.{}{}Kalenderbaserat spelläge är den klassiska OpenTTD-upplevelsen, där ett år består av 12 månader och varje månad har 28-31 dagar.{}{}I Väggklockbaserat spelläge är godsproduktion och finanser istället baserade på enminutssteg, vilket är ungefär så länge som en 30-dagarsmånad tar i Kalenderbaserat spelläge. Dessa är grupperade i 12-minutersperioder motsvarande ett år i Kalenderbaserat spelläge.{}{}Oavsett spelläge finns det alltid en klassisk kalender som används för introduktionsdatum av fordon, byggnader, och annan infrastruktur. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Välj enheter för spelets tidhållning. Detta kan inte ändras senare.{}{}Kalenderbaserat spelläge är den klassiska OpenTTD-upplevelsen, där ett år består av 12 månader och varje månad har 28-31 dagar.{}{}I Väggklockbaserat spelläge är godsproduktion och finanser istället baserade på enminutssteg, vilket är ungefär så länge som en 30-dagarsmånad tar i Kalenderbaserat spelläge. Dessa är grupperade i 12-minutersperioder motsvarande ett år i Kalenderbaserat spelläge.{}{}Oavsett spelläge finns det alltid en klassisk kalender som används för introduktionsdatum av fordon, byggnader, och annan infrastruktur ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalender STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Väggklocka STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minuter per år: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Välj antalet minuter som går i ett kalenderår. Standard är 12 minuter. Sätt till 0 för att stoppa kalendertiden från att ändras. Denna inställning påverkar inte spelets ekonomiska simulering, och är endast tillgänglig för tidhållning medelst väggklocka. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Välj antalet minuter som går i ett kalenderår. Standard är 12 minuter. Sätt till 0 för att stoppa kalendertiden från att ändras. Denna inställning påverkar inte spelets ekonomiska simulering, och är endast tillgänglig för tidhållning medelst väggklocka STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special @@ -1529,7 +1529,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Visningstid fö STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Tid som felmeddelanden i ett rött fönster ska visas. Notera att vissa (kritiska) felmeddelanden inte stängs automatiskt efter denna tid, utan måste stängas manuellt STR_CONFIG_SETTING_HOVER_DELAY :Visa tooltips: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Fördröjning innan tooltips visas när muspekaren hålls över ett gränssnittselement. Alternativt kan tooltips bindas till den högra musknappen när detta värde är satt till 0. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Fördröjning innan tooltips visas när muspekaren hålls över ett gränssnittselement. Alternativt kan tooltips bindas till den högra musknappen när detta värde är satt till 0 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Håll muspekaren i {COMMA} millisekund{P 0 "" er} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Högerklick @@ -1561,7 +1561,7 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industritäthet STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Ange hur många industrier som ska genereras och vilken nivå som ska bibehållas under spelet STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximalt avstånd mellan oljeindustrier och kartans kant: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Begränsar hur långt från kartans kant oljeraffinaderier och oljeplattformar kan byggas. På ö-kartor säkerställer detta att de är nära kusten. På kartor större än 256 rutor skalas detta värde upp. +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Begränsar hur långt från kartans kant oljeraffinaderier och oljeplattformar kan byggas. På ö-kartor säkerställer detta att de är nära kusten. På kartor större än 256 rutor skalas detta värde upp STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snögränsens höjd: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Välj på vilken höjd snötäcket börjar i det subarktiska landskapet. Snö påverkar även industrigeneration och städers tillväxtkrav. Kan endast modifieras via Scenarioredigeraren eller beräknas via "snötäckning" @@ -1575,7 +1575,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Välj den ungef STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Terrängens svårhetsgrad: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Välj form och frekvens av kullar. Böljande landskap har färre, mer utbredda kullar, medan landskap med tuff terräng har fler, mer låga kullar. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Välj form och frekvens av kullar. Böljande landskap har färre, mer utbredda kullar, medan landskap med tuff terräng har fler, mer låga kullar ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Väldigt lätt STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Lätt @@ -1840,7 +1840,7 @@ STR_CONFIG_SETTING_NOSERVICE :Inaktivera serv STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :När det är aktiverat servas inte fordon om de inte kan få motorstopp STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Straff i lastningshastighet för tåg som är längre än stationen: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Om aktiverad, kommer tåg som är för långa för en station att lastas långsammare än tåg som får plats på stationen. Denna inställning påverkar inte vägfinnare. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Om aktiverad, kommer tåg som är för långa för en station att lastas långsammare än tåg som får plats på stationen. Denna inställning påverkar inte vägfinnare STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Använd hastighetsbegränsningar för tågvagnar: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :När det är aktiverat tas även hänsyn till vagnarnas hastighetsbegränsningar när ett tågs maxhastighet beräknas @@ -2007,7 +2007,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Högsta upplösning som sprites ska använda: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Begränsa den maximala upplösningen för sprites. Begränsning av spritens upplösning hindrar användandet av högre upplösningar även om det finns tillgängligt. Detta kan hjälpa att hålla spelets utseende mer enhetlig vid användandet av flera olika GRF filer med högre och lägre upplösning. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Begränsa den maximala upplösningen för sprites. Begränsning av spritens upplösning hindrar användandet av högre upplösningar även om det finns tillgängligt. Detta kan hjälpa att hålla spelets utseende mer enhetlig vid användandet av flera olika GRF filer med högre och lägre upplösning ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2031,9 +2031,9 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Initial stadsst STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Storstäders genomsnittliga storlek i relation till vanliga städers vid spelets början STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Uppdatera distributionsdiagram var {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tid mellan efterföljande omräkningar av länkgrafen. Varje omräkning beräknar planerna för en komponent i grafen. Det betyder att ett värde X för den här inställningen inte betyder att hela grafen kommer att uppdateras var X:e sekund. Bara viss komponent kommer att göra det. Ju kortare du ställer in den desto mer CPU-tid kommer att behövas för att beräkna den. Ju längre du ställer in den desto längre tid tar det tills lastdistributionen startar på nya rutter. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tid mellan efterföljande omräkningar av länkgrafen. Varje omräkning beräknar planerna för en komponent i grafen. Det betyder att ett värde X för den här inställningen inte betyder att hela grafen kommer att uppdateras var X:e sekund. Bara viss komponent kommer att göra det. Ju kortare du ställer in den desto mer CPU-tid kommer att behövas för att beräkna den. Ju längre du ställer in den desto längre tid tar det tills lastdistributionen startar på nya rutter STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Ta {STRING} för omräkning av distributionsdiagrammet -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tid som det tar för varje omräkning av en länkdiagramkomponent. När en omräkning startas skapas en tråd som tillåts köra i detta antal sekunder. Ju kortare du ställer in detta desto mer sannolikt är det att tråden inte är färdig när den ska. Sedan stannar spelet tills det är ("lag"). Ju längre du ställer in den desto längre tid tar det för distributionen att uppdateras när rutter ändras. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tid som det tar för varje omräkning av en länkdiagramkomponent. När en omräkning startas skapas en tråd som tillåts köra i detta antal sekunder. Ju kortare du ställer in detta desto mer sannolikt är det att tråden inte är färdig när den ska. Sedan stannar spelet tills det är ("lag"). Ju längre du ställer in den desto längre tid tar det för distributionen att uppdateras när rutter ändras STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distributionssätt för passagerare: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetriskt" innebär att ungefär samma antal passagerare färdas från station A till station B som från B till A. "Asymmetriskt" innebär att en godtycklig mängd passagerare kan färdas i vardera riktningen. "Manuellt" innebär att ingen automatisk distribution av passagerare sker @@ -2049,7 +2049,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetriskt STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :symmetriskt STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Distributionsnoggrannhet: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Ju högre du sätter denna, desto längre CPU-tid kommer beräkningen av länkgrafen ta. Om det tar för lång tid kan spelet lagga. Om du däremot sätter den till ett lågt värde kommer distributionen att bli inexakt, vilket kan leda till att godset inte skickas dit du förväntar dig. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Ju högre du sätter denna, desto längre CPU-tid kommer beräkningen av länkgrafen ta. Om det tar för lång tid kan spelet lagga. Om du däremot sätter den till ett lågt värde kommer distributionen att bli inexakt, vilket kan leda till att godset inte skickas dit du förväntar dig STR_CONFIG_SETTING_DEMAND_DISTANCE :Avståndets påverkan på efterfrågan: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Om du sätter denna till ett värde högre än 0 kommer avståndet mellan ursprungsstationen A för en viss last och en möjlig destination B påverka mängden last som skickas från A till B. Ju längre B är ifrån A, desto mindre last kommer att skickas. Ju högre du sätter den, desto mindre last kommer att skickas till avlägsna stationer och desto mer last kommer att skickas till närbelägna stationer @@ -2057,7 +2057,7 @@ STR_CONFIG_SETTING_DEMAND_SIZE :Mängd återsä STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Genom att sätta denna till mindre än 100% får man den symmetriska distributionen att bete sig mer som den asymmetriska. En mindre andel än vanligt av den last som skickas till en station kommer att skickas tillbaka. Sätter du den till 0% beter sig den symmetriska distributionen precis som den asymmetriska STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Belastning av korta rutter innan rutter med hög kapacitet används: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Ofta finns det flera rutter mellan två givna stationer. Godsdistributionen kommer att fylla upp den första rutten först och därefter den näst kortaste tills den är mättad osv. Mättnadsgraden bestäms utifrån en uppskattning av kapaciteten och planerad användning. När godsdristributionen har belastat samtliga rutter, och om det finns kvarvarande behov, då kommer samtliga rutter att överbelastas med preferens för rutterna med högst kapacitet. Uppskattningen av kapaciteten kommer oftast inte ske med hög noggrannhet. Denna inställning tillåter dig att ställa in hur många procent som en kort rutt ska belastas innan algoritmen ska välja nästa längre rutt. Sätt värdet till under 100 % om du vill undvika överfulla stationer i händelse av överskattad kapacitet. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Ofta finns det flera rutter mellan två givna stationer. Godsdistributionen kommer att fylla upp den första rutten först och därefter den näst kortaste tills den är mättad osv. Mättnadsgraden bestäms utifrån en uppskattning av kapaciteten och planerad användning. När godsdristributionen har belastat samtliga rutter, och om det finns kvarvarande behov, då kommer samtliga rutter att överbelastas med preferens för rutterna med högst kapacitet. Uppskattningen av kapaciteten kommer oftast inte ske med hög noggrannhet. Denna inställning tillåter dig att ställa in hur många procent som en kort rutt ska belastas innan algoritmen ska välja nästa längre rutt. Sätt värdet till under 100 % om du vill undvika överfulla stationer i händelse av överskattad kapacitet STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Hastighetsenhet (land)t: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Hastighetsenheter (nautical): {STRING} @@ -2981,7 +2981,7 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Placera STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Slumpmässigt träd STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plantera träd slumpmässigt över landskapet STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plantera träd genom att dra över landskapet. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plantera träd genom att dra över landskapet STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Skogsdunge STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plantera mindre skogar genom att dra över landskapet STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Skog @@ -4643,7 +4643,7 @@ STR_ORDER_REFIT_ORDER :(Anpassa för { STR_ORDER_REFIT_STOP_ORDER :(Anpassa för {STRING} och stanna) STR_ORDER_STOP_ORDER :(Stanna) -STR_ORDER_WAIT_TO_UNBUNCH :(invänta utglesning) +STR_ORDER_WAIT_TO_UNBUNCH :(Invänta utglesning) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Kan ej använda stationen){POP_COLOUR} {STRING} {STATION} {STRING} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index afcdfbdb64..0fff9c160c 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -518,7 +518,7 @@ STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Прис STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Опції STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Зберегти гру, покинути гру, вихід STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Показує мапу, додаткове вікно, легенду вантажопотоку або список позначок -STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Показати міста +STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Показує перелік міст або заснування міста STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Показує субсидії STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Показати список станцій компанії STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Покаже фінансову інформацію про компанію @@ -552,15 +552,15 @@ STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Ред STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Перенести початкову дату на 1 рік назад STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Перенести початкову дату на 1 рік вперед STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Натисніть, щоб ввести рік початку -STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Показати карту, показати міста -STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Створення ландшафту +STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Показати мапу, додаткове вікно, список позначок, або перелік міст чи підприємств +STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Відкрити меню створення ландшафту або нового світу STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Створення міст -STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Створення виробництва -STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Будівництво доріг +STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Створення або будування виробництва +STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Будівництво дорожньої інфраструктури STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Будівництво трамвайних колій -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Насадження дерев. Утримуйте Shift для показу витрат на висаджування +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Насадження дерев. Ctrl+клац+протягування для виділення діагональної ділянки. Утримуйте Shift для показу очікуваних витрат STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Встановити позначку -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Встановити об'єкт. Утримуйте Ctrl для вибору діагональної ділянки. Утримуйте Shift для показу витрат на розміщення +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Встановити об'єкт. Ctrl+клац+протягування для виділення діагональної ділянки. Утримуйте Shift для показу очікуваних витрат # Scenario editor file menu ###length 7 @@ -1708,7 +1708,7 @@ STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Оберіть STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Покриття пустелею: {STRING} -STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Контроль приблизної частки пустель у тропічному ландшафті. Пустелі впливають на створення підприємств. Використовується лише при створенні мапи +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Оберіть приблизну частку пустель у тропічному ландшафті. Пустелі впливають на створення підприємств та умови зростання міст. Використовується лише при створенні мапи STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Грубість ландшафту: {STRING} @@ -2042,7 +2042,7 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Починаю STR_CONFIG_SETTING_STARTING_YEAR :Початкова дата: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Рік закінчення: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Рік закінчення гри для підрахунку очок. У кінці року додають очки компанії і показують загальний результат, але гравці можуть грати далі.{}Якщо встановлено рік раніший початкового, загальний результат не зʼявиться. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Рік закінчення гри для підрахунку очок. У кінці обраного року додаються очки компанії і з'являється загальний результат, але гравці можуть грати далі.{}Якщо встановлено рік раніший від початкового, загальний результат ніколи не зʼявиться. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Ніколи @@ -2189,9 +2189,9 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Точніст STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Чим більше значення буде встановлено, тим більше часу процесора буде витрачатися на розрахунок графа зв’язків. Якщо це буде тривати довго, ви можете зауважити гальмування. Якщо встановити тут мале значення, розподіл буде неточним і вантаж, можливо, надсилатиметься не в ті місця, куди ви очікуєте. STR_CONFIG_SETTING_DEMAND_DISTANCE :Сила впливу відстані на попит: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Якщо це значення встановити більшим за 0, відстань між відправною станцією A якогось вантажу та приймаючою станцією B впливатиме на кількість вантажу, який надсилатиметься від A до B. Чим більша відстань від A до B, тим менше вантажу надсилатиметься. Чим більшим буде це значення, тим менше вантажу буде надсилатися до дальніх станцій і тим більше — до ближніх. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Якщо це значення встановити більшим за 0, відстань між відправною станцією A якогось вантажу та станцією призначення Б впливатиме на кількість вантажу, який надсилатиметься від A до Б. Що більша відстань від A до Б, то менше вантажу надсилатиметься. Що більшим буде це значення, то менше вантажу буде надсилатися до дальніх станцій і більше — до ближніх STR_CONFIG_SETTING_DEMAND_SIZE :Кількість вантажу, що повертається у симетричному режимі: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Встановивши це на менше ніж 100% можна зробити симетричну доставку схожою на асиметричну. Менше вантажу буде примусово повертатися назад, якщо певна його кількість надсилається на станцію. При 0% - симетрична доставка поводить себе зовсім як асиметрична. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Встановивши це значення меншим ніж 100%, можна зробити симетричну доставку схожою на асиметричну. Менше вантажу буде примусово повертатися назад, якщо певна його кількість надсилається на станцію. При 0% симетрична доставка поводить себе зовсім як асиметрична. STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Рівень заповнення коротких маршрутів перед переходом до містких: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Часто між двома заданими станціями є кілька шляхів. Cargodist заповнить спочатку найкоротший маршрут, потім другий після найкоротшого тощо. Рівень заповнення визначається оцінкою місткості та запланованого використання. Якщо всі маршрути буде заповнено, а джерело вантажу не вичерпається, алгоритм почне переповнювати маршрути, починаючи з наймісткіших. Налаштування дозволяє вказати рівень заповнення у відсотках, якого треба досягти на першому маршруті перед заповненням наступного. Встановлення рівня меншим за 100% дозводить уникнути переповнення станцій у випадку переоцінки місткості. @@ -3028,8 +3028,8 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Буду STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Будування трамвайного тунелю. Утримуйте Shift для показу витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Будувати/зруйнувати дорогу STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Будувати/демонтувати колію -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Модернізувати дорогу. Утримуйте Shift для показу витрат на модернізацію -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Convert/Перетворення / оновлення типу трамваю. Shift перемикає будівництво / показ кошторису витрат +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Переобладнання / оновлення дороги. Утримуйте Shift для показу очікуваних витрат +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Переобладнання / оновлення типу трамваю. Утримуйте Shift для показу очікуваних витрат STR_ROAD_NAME_ROAD :Дорога STR_ROAD_NAME_TRAM :Трамвай @@ -3071,7 +3071,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Порт # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Аеропорти -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Будувати аеропорт. Ctrl дозволяє об'єднувати станції. Утримуйте Shift для показу витрат на будівництво +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Будування аеропорту. Ctrl+клац для приєднання додаткових станцій. Утримуйте Shift для показу очікуваних витрат # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Вибір аеропорту @@ -3340,9 +3340,9 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Швидкість гри STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Швидкість прорахунку гри: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Кількість ігрових циклів в секунду. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Кількість ігрових циклів за секунду. STR_FRAMERATE_RATE_BLITTER :{BLACK}Виведення на екран: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Кількість кадрів побудованих за секунду +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Кількість кадрів, створених за секунду STR_FRAMERATE_SPEED_FACTOR :{BLACK}Наявна швидкість гри: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Швидкість перебігу гри в поточний момент, порівняно з очікуваною швидкістю при звичайному перебігу STR_FRAMERATE_CURRENT :{WHITE}Зараз @@ -3458,7 +3458,7 @@ STR_MAPGEN_VARIETY :{BLACK}Розп STR_MAPGEN_GENERATE :{WHITE}Генерувати STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Створити світ для гри в OpenTTD! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Налаштування NewGRF -STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Показати налаштування NewGRF +STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Показує налаштування NewGRF STR_MAPGEN_AI_SETTINGS :{BLACK}Налаштування ШІ STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Показати налаштування ШІ STR_MAPGEN_GS_SETTINGS :{BLACK}Налаштування скрипту гри @@ -4244,7 +4244,7 @@ STR_CARGO_TYPE_FILTER_NONE :нема STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Список поїздів. Клацніть на поїзд для інформації. Ctrl+клац мишею вимикає показ типу транспорту STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Список автомобілів. Клацніть на авто для отримання інформації. Ctrl+клац мишею вимикає показ типу транспорту STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Список кораблів. Клацніть на корабель для отримання інформації. Ctrl+клац мишею вимикає показ типу транспорту -STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Список літальних апаратів. Клацніть на літальному апараті для отримання інформації. Ctrl+клац мишею вимикає показ типу транспорту +STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Список літальних апаратів. Клацніть на літальному апараті для отримання інформації. Ctrl+клац мишею сховає показ цього типу транспорту ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Купити From 71087bb6d39f4f46d7c7cd64086d6c88eedf050b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Thu, 28 Mar 2024 21:22:20 +0100 Subject: [PATCH 195/695] Change: [CI] Always use latest stable Xcode (#12390) --- .github/workflows/ci-macos.yml | 5 +++++ .github/workflows/release-macos.yml | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/.github/workflows/ci-macos.yml b/.github/workflows/ci-macos.yml index e6f5d623de..f4cabfddf5 100644 --- a/.github/workflows/ci-macos.yml +++ b/.github/workflows/ci-macos.yml @@ -26,6 +26,11 @@ jobs: MACOSX_DEPLOYMENT_TARGET: 10.13 steps: + - name: Setup Xcode version + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: latest-stable + - name: Checkout uses: actions/checkout@v4 diff --git a/.github/workflows/release-macos.yml b/.github/workflows/release-macos.yml index afaad467a9..e9cefa0813 100644 --- a/.github/workflows/release-macos.yml +++ b/.github/workflows/release-macos.yml @@ -17,6 +17,11 @@ jobs: MACOSX_DEPLOYMENT_TARGET: 10.13 steps: + - name: Setup Xcode version + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: latest-stable + - name: Download source uses: actions/download-artifact@v4 with: From 69acc132caf1a3d50954860e4c74044fb37ce358 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 24 Mar 2024 16:58:57 +0100 Subject: [PATCH 196/695] Fix #12387, eabb9db: [NewGRF] Wrong tile offset passed to rail station CB 149 (slope check) --- src/station_cmd.cpp | 127 ++++++++++++++++++++++---------------------- 1 file changed, 63 insertions(+), 64 deletions(-) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 75367ce5b6..5e5f7536a4 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -864,8 +864,10 @@ static CommandCost CheckFlatLandAirport(AirportTileTableIterator tile_iter, DoCo } /** - * Checks if a rail station can be built at the given area. - * @param tile_area Area to check. + * Checks if a rail station can be built at the given tile. + * @param tile_cur Tile to check. + * @param north_tile North tile of the area being checked. + * @param allowed_z Height allowed for the tile. If allowed_z is negative, it will be set to the height of this tile. * @param flags Operation to perform. * @param axis Rail station axis. * @param station StationID to be queried and returned if available. @@ -877,75 +879,72 @@ static CommandCost CheckFlatLandAirport(AirportTileTableIterator tile_iter, DoCo * @param numtracks Number of platforms. * @return The cost in case of success, or an error code if it failed. */ -static CommandCost CheckFlatLandRailStation(TileArea tile_area, DoCommandFlag flags, Axis axis, StationID *station, RailType rt, std::vector &affected_vehicles, StationClassID spec_class, uint16_t spec_index, uint8_t plat_len, uint8_t numtracks) +static CommandCost CheckFlatLandRailStation(TileIndex tile_cur, TileIndex north_tile, int &allowed_z, DoCommandFlag flags, Axis axis, StationID *station, RailType rt, std::vector &affected_vehicles, StationClassID spec_class, uint16_t spec_index, uint8_t plat_len, uint8_t numtracks) { CommandCost cost(EXPENSES_CONSTRUCTION); - int allowed_z = -1; uint invalid_dirs = 5 << axis; const StationSpec *statspec = StationClass::Get(spec_class)->GetSpec(spec_index); bool slope_cb = statspec != nullptr && HasBit(statspec->callback_mask, CBM_STATION_SLOPE_CHECK); - for (TileIndex tile_cur : tile_area) { - CommandCost ret = CheckBuildableTile(tile_cur, invalid_dirs, allowed_z, false); + CommandCost ret = CheckBuildableTile(tile_cur, invalid_dirs, allowed_z, false); + if (ret.Failed()) return ret; + cost.AddCost(ret); + + if (slope_cb) { + /* Do slope check if requested. */ + ret = PerformStationTileSlopeCheck(north_tile, tile_cur, statspec, axis, plat_len, numtracks); + if (ret.Failed()) return ret; + } + + /* if station is set, then we have special handling to allow building on top of already existing stations. + * so station points to INVALID_STATION if we can build on any station. + * Or it points to a station if we're only allowed to build on exactly that station. */ + if (station != nullptr && IsTileType(tile_cur, MP_STATION)) { + if (!IsRailStation(tile_cur)) { + return ClearTile_Station(tile_cur, DC_AUTO); // get error message + } else { + StationID st = GetStationIndex(tile_cur); + if (*station == INVALID_STATION) { + *station = st; + } else if (*station != st) { + return_cmd_error(STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING); + } + } + } else { + /* Rail type is only valid when building a railway station; if station to + * build isn't a rail station it's INVALID_RAILTYPE. */ + if (rt != INVALID_RAILTYPE && + IsPlainRailTile(tile_cur) && !HasSignals(tile_cur) && + HasPowerOnRail(GetRailType(tile_cur), rt)) { + /* Allow overbuilding if the tile: + * - has rail, but no signals + * - it has exactly one track + * - the track is in line with the station + * - the current rail type has power on the to-be-built type (e.g. convert normal rail to el rail) + */ + TrackBits tracks = GetTrackBits(tile_cur); + Track track = RemoveFirstTrack(&tracks); + Track expected_track = HasBit(invalid_dirs, DIAGDIR_NE) ? TRACK_X : TRACK_Y; + + if (tracks == TRACK_BIT_NONE && track == expected_track) { + /* Check for trains having a reservation for this tile. */ + if (HasBit(GetRailReservationTrackBits(tile_cur), track)) { + Train *v = GetTrainForReservation(tile_cur, track); + if (v != nullptr) { + affected_vehicles.push_back(v); + } + } + ret = Command::Do(flags, tile_cur, track); + if (ret.Failed()) return ret; + cost.AddCost(ret); + /* With flags & ~DC_EXEC CmdLandscapeClear would fail since the rail still exists */ + return cost; + } + } + ret = Command::Do(flags, tile_cur); if (ret.Failed()) return ret; cost.AddCost(ret); - - if (slope_cb) { - /* Do slope check if requested. */ - ret = PerformStationTileSlopeCheck(tile_area.tile, tile_cur, statspec, axis, plat_len, numtracks); - if (ret.Failed()) return ret; - } - - /* if station is set, then we have special handling to allow building on top of already existing stations. - * so station points to INVALID_STATION if we can build on any station. - * Or it points to a station if we're only allowed to build on exactly that station. */ - if (station != nullptr && IsTileType(tile_cur, MP_STATION)) { - if (!IsRailStation(tile_cur)) { - return ClearTile_Station(tile_cur, DC_AUTO); // get error message - } else { - StationID st = GetStationIndex(tile_cur); - if (*station == INVALID_STATION) { - *station = st; - } else if (*station != st) { - return_cmd_error(STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING); - } - } - } else { - /* Rail type is only valid when building a railway station; if station to - * build isn't a rail station it's INVALID_RAILTYPE. */ - if (rt != INVALID_RAILTYPE && - IsPlainRailTile(tile_cur) && !HasSignals(tile_cur) && - HasPowerOnRail(GetRailType(tile_cur), rt)) { - /* Allow overbuilding if the tile: - * - has rail, but no signals - * - it has exactly one track - * - the track is in line with the station - * - the current rail type has power on the to-be-built type (e.g. convert normal rail to el rail) - */ - TrackBits tracks = GetTrackBits(tile_cur); - Track track = RemoveFirstTrack(&tracks); - Track expected_track = HasBit(invalid_dirs, DIAGDIR_NE) ? TRACK_X : TRACK_Y; - - if (tracks == TRACK_BIT_NONE && track == expected_track) { - /* Check for trains having a reservation for this tile. */ - if (HasBit(GetRailReservationTrackBits(tile_cur), track)) { - Train *v = GetTrainForReservation(tile_cur, track); - if (v != nullptr) { - affected_vehicles.push_back(v); - } - } - ret = Command::Do(flags, tile_cur, track); - if (ret.Failed()) return ret; - cost.AddCost(ret); - /* With flags & ~DC_EXEC CmdLandscapeClear would fail since the rail still exists */ - continue; - } - } - ret = Command::Do(flags, tile_cur); - if (ret.Failed()) return ret; - cost.AddCost(ret); - } } return cost; @@ -1265,9 +1264,10 @@ static CommandCost CalculateRailStationCost(TileArea tile_area, DoCommandFlag fl CommandCost cost(EXPENSES_CONSTRUCTION); bool length_price_ready = true; uint8_t tracknum = 0; + int allowed_z = -1; for (TileIndex cur_tile : tile_area) { /* Clear the land below the station. */ - CommandCost ret = CheckFlatLandRailStation(TileArea(cur_tile, 1, 1), flags, axis, station, rt, affected_vehicles, spec_class, spec_index, plat_len, numtracks); + CommandCost ret = CheckFlatLandRailStation(cur_tile, tile_area.tile, allowed_z, flags, axis, station, rt, affected_vehicles, spec_class, spec_index, plat_len, numtracks); if (ret.Failed()) return ret; /* Only add _price[PR_BUILD_STATION_RAIL_LENGTH] once for each valid plat_len. */ @@ -1280,7 +1280,6 @@ static CommandCost CalculateRailStationCost(TileArea tile_area, DoCommandFlag fl /* AddCost for new or rotated rail stations. */ if (!IsRailStationTile(cur_tile) || (IsRailStationTile(cur_tile) && GetRailStationAxis(cur_tile) != axis)) { - cost.AddCost(ret); cost.AddCost(_price[PR_BUILD_STATION_RAIL]); cost.AddCost(RailBuildCost(rt)); From 8fb7d74dfe7430931f76a7575ed3ab8baa21b1f6 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 24 Mar 2024 17:22:39 +0100 Subject: [PATCH 197/695] Fix eabb9db: Drag building of road stops should not allow mixing z levels. --- src/station_cmd.cpp | 196 ++++++++++++++++++++++---------------------- 1 file changed, 98 insertions(+), 98 deletions(-) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 5e5f7536a4..296df96e50 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -952,7 +952,8 @@ static CommandCost CheckFlatLandRailStation(TileIndex tile_cur, TileIndex north_ /** * Checks if a road stop can be built at the given tile. - * @param tile_area Area to check. + * @param cur_tile Tile to check. + * @param allowed_z Height allowed for the tile. If allowed_z is negative, it will be set to the height of this tile. * @param flags Operation to perform. * @param invalid_dirs Prohibited directions (set of DiagDirections). * @param is_drive_through True if trying to build a drive-through station. @@ -962,108 +963,105 @@ static CommandCost CheckFlatLandRailStation(TileIndex tile_cur, TileIndex north_ * @param rt Road type to build. * @return The cost in case of success, or an error code if it failed. */ -static CommandCost CheckFlatLandRoadStop(TileArea tile_area, DoCommandFlag flags, uint invalid_dirs, bool is_drive_through, bool is_truck_stop, Axis axis, StationID *station, RoadType rt) +static CommandCost CheckFlatLandRoadStop(TileIndex cur_tile, int &allowed_z, DoCommandFlag flags, uint invalid_dirs, bool is_drive_through, bool is_truck_stop, Axis axis, StationID *station, RoadType rt) { CommandCost cost(EXPENSES_CONSTRUCTION); - int allowed_z = -1; - for (TileIndex cur_tile : tile_area) { - CommandCost ret = CheckBuildableTile(cur_tile, invalid_dirs, allowed_z, !is_drive_through); - if (ret.Failed()) return ret; - cost.AddCost(ret); + CommandCost ret = CheckBuildableTile(cur_tile, invalid_dirs, allowed_z, !is_drive_through); + if (ret.Failed()) return ret; + cost.AddCost(ret); - /* If station is set, then we have special handling to allow building on top of already existing stations. - * Station points to INVALID_STATION if we can build on any station. - * Or it points to a station if we're only allowed to build on exactly that station. */ - if (station != nullptr && IsTileType(cur_tile, MP_STATION)) { - if (!IsRoadStop(cur_tile)) { - return ClearTile_Station(cur_tile, DC_AUTO); // Get error message. - } else { - if (is_truck_stop != IsTruckStop(cur_tile) || - is_drive_through != IsDriveThroughStopTile(cur_tile)) { - return ClearTile_Station(cur_tile, DC_AUTO); // Get error message. - } - /* Drive-through station in the wrong direction. */ - if (is_drive_through && IsDriveThroughStopTile(cur_tile) && DiagDirToAxis(GetRoadStopDir(cur_tile)) != axis){ - return_cmd_error(STR_ERROR_DRIVE_THROUGH_DIRECTION); - } - StationID st = GetStationIndex(cur_tile); - if (*station == INVALID_STATION) { - *station = st; - } else if (*station != st) { - return_cmd_error(STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING); - } - } + /* If station is set, then we have special handling to allow building on top of already existing stations. + * Station points to INVALID_STATION if we can build on any station. + * Or it points to a station if we're only allowed to build on exactly that station. */ + if (station != nullptr && IsTileType(cur_tile, MP_STATION)) { + if (!IsRoadStop(cur_tile)) { + return ClearTile_Station(cur_tile, DC_AUTO); // Get error message. } else { - bool build_over_road = is_drive_through && IsNormalRoadTile(cur_tile); - /* Road bits in the wrong direction. */ - RoadBits rb = IsNormalRoadTile(cur_tile) ? GetAllRoadBits(cur_tile) : ROAD_NONE; - if (build_over_road && (rb & (axis == AXIS_X ? ROAD_Y : ROAD_X)) != 0) { - /* Someone was pedantic and *NEEDED* three fracking different error messages. */ - switch (CountBits(rb)) { - case 1: - return_cmd_error(STR_ERROR_DRIVE_THROUGH_DIRECTION); - - case 2: - if (rb == ROAD_X || rb == ROAD_Y) return_cmd_error(STR_ERROR_DRIVE_THROUGH_DIRECTION); - return_cmd_error(STR_ERROR_DRIVE_THROUGH_CORNER); - - default: // 3 or 4 - return_cmd_error(STR_ERROR_DRIVE_THROUGH_JUNCTION); - } + if (is_truck_stop != IsTruckStop(cur_tile) || + is_drive_through != IsDriveThroughStopTile(cur_tile)) { + return ClearTile_Station(cur_tile, DC_AUTO); // Get error message. } + /* Drive-through station in the wrong direction. */ + if (is_drive_through && IsDriveThroughStopTile(cur_tile) && DiagDirToAxis(GetRoadStopDir(cur_tile)) != axis){ + return_cmd_error(STR_ERROR_DRIVE_THROUGH_DIRECTION); + } + StationID st = GetStationIndex(cur_tile); + if (*station == INVALID_STATION) { + *station = st; + } else if (*station != st) { + return_cmd_error(STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING); + } + } + } else { + bool build_over_road = is_drive_through && IsNormalRoadTile(cur_tile); + /* Road bits in the wrong direction. */ + RoadBits rb = IsNormalRoadTile(cur_tile) ? GetAllRoadBits(cur_tile) : ROAD_NONE; + if (build_over_road && (rb & (axis == AXIS_X ? ROAD_Y : ROAD_X)) != 0) { + /* Someone was pedantic and *NEEDED* three fracking different error messages. */ + switch (CountBits(rb)) { + case 1: + return_cmd_error(STR_ERROR_DRIVE_THROUGH_DIRECTION); - if (build_over_road) { - /* There is a road, check if we can build road+tram stop over it. */ - RoadType road_rt = GetRoadType(cur_tile, RTT_ROAD); - if (road_rt != INVALID_ROADTYPE) { - Owner road_owner = GetRoadOwner(cur_tile, RTT_ROAD); - if (road_owner == OWNER_TOWN) { - if (!_settings_game.construction.road_stop_on_town_road) return_cmd_error(STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD); - } else if (!_settings_game.construction.road_stop_on_competitor_road && road_owner != OWNER_NONE) { - ret = CheckOwnership(road_owner); - if (ret.Failed()) return ret; - } - uint num_pieces = CountBits(GetRoadBits(cur_tile, RTT_ROAD)); + case 2: + if (rb == ROAD_X || rb == ROAD_Y) return_cmd_error(STR_ERROR_DRIVE_THROUGH_DIRECTION); + return_cmd_error(STR_ERROR_DRIVE_THROUGH_CORNER); - if (RoadTypeIsRoad(rt) && !HasPowerOnRoad(rt, road_rt)) return_cmd_error(STR_ERROR_NO_SUITABLE_ROAD); + default: // 3 or 4 + return_cmd_error(STR_ERROR_DRIVE_THROUGH_JUNCTION); + } + } - if (GetDisallowedRoadDirections(cur_tile) != DRD_NONE && road_owner != OWNER_TOWN) { - ret = CheckOwnership(road_owner); - if (ret.Failed()) return ret; - } + if (build_over_road) { + /* There is a road, check if we can build road+tram stop over it. */ + RoadType road_rt = GetRoadType(cur_tile, RTT_ROAD); + if (road_rt != INVALID_ROADTYPE) { + Owner road_owner = GetRoadOwner(cur_tile, RTT_ROAD); + if (road_owner == OWNER_TOWN) { + if (!_settings_game.construction.road_stop_on_town_road) return_cmd_error(STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD); + } else if (!_settings_game.construction.road_stop_on_competitor_road && road_owner != OWNER_NONE) { + ret = CheckOwnership(road_owner); + if (ret.Failed()) return ret; + } + uint num_pieces = CountBits(GetRoadBits(cur_tile, RTT_ROAD)); - cost.AddCost(RoadBuildCost(road_rt) * (2 - num_pieces)); - } else if (RoadTypeIsRoad(rt)) { - cost.AddCost(RoadBuildCost(rt) * 2); + if (RoadTypeIsRoad(rt) && !HasPowerOnRoad(rt, road_rt)) return_cmd_error(STR_ERROR_NO_SUITABLE_ROAD); + + if (GetDisallowedRoadDirections(cur_tile) != DRD_NONE && road_owner != OWNER_TOWN) { + ret = CheckOwnership(road_owner); + if (ret.Failed()) return ret; } - /* There is a tram, check if we can build road+tram stop over it. */ - RoadType tram_rt = GetRoadType(cur_tile, RTT_TRAM); - if (tram_rt != INVALID_ROADTYPE) { - Owner tram_owner = GetRoadOwner(cur_tile, RTT_TRAM); - if (Company::IsValidID(tram_owner) && - (!_settings_game.construction.road_stop_on_competitor_road || - /* Disallow breaking end-of-line of someone else - * so trams can still reverse on this tile. */ - HasExactlyOneBit(GetRoadBits(cur_tile, RTT_TRAM)))) { - ret = CheckOwnership(tram_owner); - if (ret.Failed()) return ret; - } - uint num_pieces = CountBits(GetRoadBits(cur_tile, RTT_TRAM)); - - if (RoadTypeIsTram(rt) && !HasPowerOnRoad(rt, tram_rt)) return_cmd_error(STR_ERROR_NO_SUITABLE_ROAD); - - cost.AddCost(RoadBuildCost(tram_rt) * (2 - num_pieces)); - } else if (RoadTypeIsTram(rt)) { - cost.AddCost(RoadBuildCost(rt) * 2); - } - } else { - ret = Command::Do(flags, cur_tile); - if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(RoadBuildCost(road_rt) * (2 - num_pieces)); + } else if (RoadTypeIsRoad(rt)) { cost.AddCost(RoadBuildCost(rt) * 2); } + + /* There is a tram, check if we can build road+tram stop over it. */ + RoadType tram_rt = GetRoadType(cur_tile, RTT_TRAM); + if (tram_rt != INVALID_ROADTYPE) { + Owner tram_owner = GetRoadOwner(cur_tile, RTT_TRAM); + if (Company::IsValidID(tram_owner) && + (!_settings_game.construction.road_stop_on_competitor_road || + /* Disallow breaking end-of-line of someone else + * so trams can still reverse on this tile. */ + HasExactlyOneBit(GetRoadBits(cur_tile, RTT_TRAM)))) { + ret = CheckOwnership(tram_owner); + if (ret.Failed()) return ret; + } + uint num_pieces = CountBits(GetRoadBits(cur_tile, RTT_TRAM)); + + if (RoadTypeIsTram(rt) && !HasPowerOnRoad(rt, tram_rt)) return_cmd_error(STR_ERROR_NO_SUITABLE_ROAD); + + cost.AddCost(RoadBuildCost(tram_rt) * (2 - num_pieces)); + } else if (RoadTypeIsTram(rt)) { + cost.AddCost(RoadBuildCost(rt) * 2); + } + } else { + ret = Command::Do(flags, cur_tile); + if (ret.Failed()) return ret; + cost.AddCost(ret); + cost.AddCost(RoadBuildCost(rt) * 2); } } @@ -1885,17 +1883,19 @@ static CommandCost FindJoiningRoadStop(StationID existing_stop, StationID statio */ static CommandCost CalculateRoadStopCost(TileArea tile_area, DoCommandFlag flags, bool is_drive_through, bool is_truck_stop, Axis axis, DiagDirection ddir, StationID *est, RoadType rt, Money unit_cost) { - CommandCost cost(EXPENSES_CONSTRUCTION); + uint invalid_dirs = 0; + if (is_drive_through) { + SetBit(invalid_dirs, AxisToDiagDir(axis)); + SetBit(invalid_dirs, ReverseDiagDir(AxisToDiagDir(axis))); + } else { + SetBit(invalid_dirs, ddir); + } + /* Check every tile in the area. */ + int allowed_z = -1; + CommandCost cost(EXPENSES_CONSTRUCTION); for (TileIndex cur_tile : tile_area) { - uint invalid_dirs = 0; - if (is_drive_through) { - SetBit(invalid_dirs, AxisToDiagDir(axis)); - SetBit(invalid_dirs, ReverseDiagDir(AxisToDiagDir(axis))); - } else { - SetBit(invalid_dirs, ddir); - } - CommandCost ret = CheckFlatLandRoadStop(TileArea(cur_tile, cur_tile), flags, invalid_dirs, is_drive_through, is_truck_stop, axis, est, rt); + CommandCost ret = CheckFlatLandRoadStop(cur_tile, allowed_z, flags, invalid_dirs, is_drive_through, is_truck_stop, axis, est, rt); if (ret.Failed()) return ret; bool is_preexisting_roadstop = IsTileType(cur_tile, MP_STATION) && IsRoadStop(cur_tile); From 907cb4fc5397f1983555fa7e20cc661876f3469e Mon Sep 17 00:00:00 2001 From: frosch Date: Thu, 28 Mar 2024 23:21:20 +0100 Subject: [PATCH 198/695] Fix: [Script] ScriptSubsidy::GetExpireDate should return an economy-date (#12372) --- src/script/api/script_subsidy.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/script/api/script_subsidy.cpp b/src/script/api/script_subsidy.cpp index 8d80ae4019..02f283d87a 100644 --- a/src/script/api/script_subsidy.cpp +++ b/src/script/api/script_subsidy.cpp @@ -54,15 +54,13 @@ { if (!IsValidSubsidy(subsidy_id)) return ScriptDate::DATE_INVALID; - int year = ScriptDate::GetYear(ScriptDate::GetCurrentDate()); - int month = ScriptDate::GetMonth(ScriptDate::GetCurrentDate()); + TimerGameEconomy::YearMonthDay ymd = TimerGameEconomy::ConvertDateToYMD(TimerGameEconomy::date); + ymd.day = 1; + auto m = ymd.month + ::Subsidy::Get(subsidy_id)->remaining; + ymd.month = (m - 1) % 12 + 1; + ymd.year += (m - 1) / 12; - month += ::Subsidy::Get(subsidy_id)->remaining; - - year += (month - 1) / 12; - month = ((month - 1) % 12) + 1; - - return ScriptDate::GetDate(year, month, 1); + return (ScriptDate::Date)TimerGameEconomy::ConvertYMDToDate(ymd.year, ymd.month, ymd.day).base(); } /* static */ CargoID ScriptSubsidy::GetCargoType(SubsidyID subsidy_id) From 8746be8bf2bc8110fa6478714bfb2bd7f6f2b44d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 28 Mar 2024 22:22:37 +0000 Subject: [PATCH 199/695] Codechange: Use FindVehiclesWithOrder when removing a road stop. (#12144) --- src/station_cmd.cpp | 18 ++++++++++++------ src/vehiclelist_func.h | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 296df96e50..bee14e7bd4 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -10,6 +10,7 @@ #include "stdafx.h" #include "aircraft.h" #include "bridge_map.h" +#include "vehiclelist_func.h" #include "viewport_func.h" #include "viewport_kdtree.h" #include "command_func.h" @@ -2174,13 +2175,18 @@ static CommandCost RemoveRoadStop(TileIndex tile, DoCommandFlag flags, int repla delete cur_stop; - /* Make sure no vehicle is going to the old roadstop */ - for (RoadVehicle *v : RoadVehicle::Iterate()) { - if (v->First() == v && v->current_order.IsType(OT_GOTO_STATION) && - v->dest_tile == tile) { - v->SetDestTile(v->GetOrderStationLocation(st->index)); + /* Make sure no vehicle is going to the old roadstop. Narrow the search to any road vehicles with an order to + * this station, then look for any currently heading to the tile. */ + StationID station_id = st->index; + FindVehiclesWithOrder( + [](const Vehicle *v) { return v->type == VEH_ROAD; }, + [station_id](const Order *order) { return order->IsType(OT_GOTO_STATION) && order->GetDestination() == station_id; }, + [station_id, tile](Vehicle *v) { + if (v->dest_tile == tile) { + v->SetDestTile(v->GetOrderStationLocation(station_id)); + } } - } + ); st->rect.AfterRemoveTile(st, tile); diff --git a/src/vehiclelist_func.h b/src/vehiclelist_func.h index 464bde2ff7..3e44610164 100644 --- a/src/vehiclelist_func.h +++ b/src/vehiclelist_func.h @@ -26,7 +26,7 @@ void FindVehiclesWithOrder(VehiclePredicate veh_pred, OrderPredicate ord_pred, V for (const OrderList *orderlist : OrderList::Iterate()) { /* We assume all vehicles sharing an order list match the condition. */ - const Vehicle *v = orderlist->GetFirstSharedVehicle(); + Vehicle *v = orderlist->GetFirstSharedVehicle(); if (!veh_pred(v)) continue; /* Vehicle is a candidate, search for a matching order. */ From 3e83dcedfd61aebe9ec8a900bf3b49edddfcc31c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 12 Mar 2024 17:28:44 +0000 Subject: [PATCH 200/695] Codechange: Allocate houses dynamically instead of from a fixed array. This uses vectors for HouseSpecs and global/town building counts. --- src/genworld.cpp | 2 + src/house.h | 15 ++------ src/misc.cpp | 1 - src/newgrf_commons.cpp | 6 ++- src/newgrf_house.cpp | 87 ++++++++++++++++++++++++++++++++++-------- src/newgrf_house.h | 1 + src/table/town_land.h | 2 +- src/town.h | 4 +- src/town_cmd.cpp | 15 +------- 9 files changed, 87 insertions(+), 46 deletions(-) diff --git a/src/genworld.cpp b/src/genworld.cpp index d6b8de88ff..d5281a2f81 100644 --- a/src/genworld.cpp +++ b/src/genworld.cpp @@ -26,6 +26,7 @@ #include "void_map.h" #include "town.h" #include "newgrf.h" +#include "newgrf_house.h" #include "core/random_func.hpp" #include "core/backup_type.hpp" #include "progress.h" @@ -311,6 +312,7 @@ void GenerateWorld(GenWorldMode mode, uint size_x, uint size_y, bool reset_setti /* Load the right landscape stuff, and the NewGRFs! */ GfxLoadSprites(); + InitializeBuildingCounts(); LoadStringWidthTable(); /* Re-init the windowing system */ diff --git a/src/house.h b/src/house.h index a463b632ec..65ce03786b 100644 --- a/src/house.h +++ b/src/house.h @@ -31,12 +31,6 @@ static const HouseID INVALID_HOUSE_ID = 0xFFFF; static const uint HOUSE_NUM_ACCEPTS = 16; ///< Max number of cargoes accepted by a tile -/** - * There can only be as many classes as there are new houses, plus one for - * NO_CLASS, as the original houses don't have classes. - */ -static const uint HOUSE_CLASS_MAX = NUM_HOUSES - NEW_HOUSE_OFFSET + 1; - enum BuildingFlags { TILE_NO_FLAG = 0, TILE_SIZE_1x1 = 1U << 0, @@ -123,14 +117,11 @@ struct HouseSpec { uint8_t minimum_life; ///< The minimum number of years this house will survive before the town rebuilds it CargoTypes watched_cargoes; ///< Cargo types watched for acceptance. + HouseID Index() const; Money GetRemovalCost() const; - static inline HouseSpec *Get(size_t house_id) - { - assert(house_id < NUM_HOUSES); - extern HouseSpec _house_specs[]; - return &_house_specs[house_id]; - } + static std::vector &Specs(); + static HouseSpec *Get(size_t house_id); }; /** diff --git a/src/misc.cpp b/src/misc.cpp index d6467a1812..9137c075b6 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -148,7 +148,6 @@ void InitializeGame(uint size_x, uint size_y, bool reset_date, bool reset_settin InitializeTrees(); InitializeIndustries(); InitializeObjects(); - InitializeBuildingCounts(); InitializeNPF(); diff --git a/src/newgrf_commons.cpp b/src/newgrf_commons.cpp index d178920542..9589e31ef4 100644 --- a/src/newgrf_commons.cpp +++ b/src/newgrf_commons.cpp @@ -165,7 +165,11 @@ void HouseOverrideManager::SetEntitySpec(const HouseSpec *hs) return; } - *HouseSpec::Get(house_id) = *hs; + auto &house_specs = HouseSpec::Specs(); + + /* Now that we know we can use the given id, copy the spec to its final destination. */ + if (house_id >= house_specs.size()) house_specs.resize(house_id + 1); + house_specs[house_id] = *hs; /* Now add the overrides. */ for (int i = 0; i < this->max_offset; i++) { diff --git a/src/newgrf_house.cpp b/src/newgrf_house.cpp index 0321ce0fc3..ac18c4fbe2 100644 --- a/src/newgrf_house.cpp +++ b/src/newgrf_house.cpp @@ -24,8 +24,8 @@ #include "safeguards.h" -static BuildingCounts _building_counts; -static std::array _class_mapping; +static BuildingCounts _building_counts{}; +static std::vector _class_mapping{}; HouseOverrideManager _house_mngr(NEW_HOUSE_OFFSET, NUM_HOUSES, INVALID_HOUSE_ID); @@ -40,6 +40,48 @@ static const GRFFile *GetHouseSpecGrf(HouseID house_id) return (hs != nullptr) ? hs->grf_prop.grffile : nullptr; } +extern const HouseSpec _original_house_specs[NEW_HOUSE_OFFSET]; +std::vector _house_specs; + +/** + * Get a reference to all HouseSpecs. + * @return Reference to vector of all HouseSpecs. + */ +std::vector &HouseSpec::Specs() +{ + return _house_specs; +} + +/** + * Get the spec for a house ID. + * @param house_id The ID of the house. + * @return The HouseSpec associated with the ID. + */ +HouseSpec *HouseSpec::Get(size_t house_id) +{ + /* Empty house if index is out of range -- this might happen if NewGRFs are changed. */ + static HouseSpec empty = {}; + + assert(house_id < NUM_HOUSES); + if (house_id >= _house_specs.size()) return ∅ + return &_house_specs[house_id]; +} + +/* Reset and initialise house specs. */ +void ResetHouses() +{ + _house_specs.clear(); + _house_specs.reserve(std::size(_original_house_specs)); + + ResetHouseClassIDs(); + + /* Copy default houses. */ + _house_specs.insert(std::end(_house_specs), std::begin(_original_house_specs), std::end(_original_house_specs)); + + /* Reset any overrides that have been set. */ + _house_mngr.ResetOverride(); +} + /** * Construct a resolver for a house. * @param house_id House to query. @@ -74,32 +116,47 @@ uint32_t HouseResolverObject::GetDebugID() const void ResetHouseClassIDs() { - _class_mapping = {}; + _class_mapping.clear(); + + /* Add initial entry for HOUSE_NO_CLASS. */ + _class_mapping.emplace_back(); } HouseClassID AllocateHouseClassID(uint8_t grf_class_id, uint32_t grfid) { /* Start from 1 because 0 means that no class has been assigned. */ - for (int i = 1; i != lengthof(_class_mapping); i++) { - HouseClassMapping *map = &_class_mapping[i]; + auto it = std::find_if(std::next(std::begin(_class_mapping)), std::end(_class_mapping), [grf_class_id, grfid](const HouseClassMapping &map) { return map.class_id == grf_class_id && map.grfid == grfid; }); - if (map->class_id == grf_class_id && map->grfid == grfid) return (HouseClassID)i; + /* HouseClass not found, allocate a new one. */ + if (it == std::end(_class_mapping)) it = _class_mapping.insert(it, {.grfid = grfid, .class_id = grf_class_id}); - if (map->class_id == 0 && map->grfid == 0) { - map->class_id = grf_class_id; - map->grfid = grfid; - return (HouseClassID)i; - } - } - return HOUSE_NO_CLASS; + return static_cast(std::distance(std::begin(_class_mapping), it)); } +/** + * Initialise building counts for a town. + * @param t Town cache to initialise. + */ +void InitializeBuildingCounts(Town *t) +{ + t->cache.building_counts.id_count.clear(); + t->cache.building_counts.class_count.clear(); + t->cache.building_counts.id_count.resize(HouseSpec::Specs().size()); + t->cache.building_counts.class_count.resize(_class_mapping.size()); +} + +/** + * Initialise global building counts and all town building counts. + */ void InitializeBuildingCounts() { - memset(&_building_counts, 0, sizeof(_building_counts)); + _building_counts.id_count.clear(); + _building_counts.class_count.clear(); + _building_counts.id_count.resize(HouseSpec::Specs().size()); + _building_counts.class_count.resize(_class_mapping.size()); for (Town *t : Town::Iterate()) { - memset(&t->cache.building_counts, 0, sizeof(t->cache.building_counts)); + InitializeBuildingCounts(t); } } diff --git a/src/newgrf_house.h b/src/newgrf_house.h index 868116c7f9..1987406777 100644 --- a/src/newgrf_house.h +++ b/src/newgrf_house.h @@ -91,6 +91,7 @@ void ResetHouseClassIDs(); HouseClassID AllocateHouseClassID(uint8_t grf_class_id, uint32_t grfid); void InitializeBuildingCounts(); +void InitializeBuildingCounts(Town *t); void IncreaseBuildingCount(Town *t, HouseID house_id); void DecreaseBuildingCount(Town *t, HouseID house_id); diff --git a/src/table/town_land.h b/src/table/town_land.h index 2ba1bc173b..586a94b3a8 100644 --- a/src/table/town_land.h +++ b/src/table/town_land.h @@ -1817,7 +1817,7 @@ static_assert(lengthof(_town_draw_tile_data) == (NEW_HOUSE_OFFSET) * 4 * 4); bf, ba, true, GRFFileProps(INVALID_HOUSE_ID), 0, {COLOUR_BEGIN, COLOUR_BEGIN, COLOUR_BEGIN, COLOUR_BEGIN}, \ 16, NO_EXTRA_FLAG, HOUSE_NO_CLASS, {0, 2, 0, 0}, 0, 0, 0} /** House specifications from original data */ -static const HouseSpec _original_house_specs[] = { +extern const HouseSpec _original_house_specs[] = { /** * remove_rating_decrease * | mail_generation diff --git a/src/town.h b/src/town.h index 618093dec4..28ffa5047d 100644 --- a/src/town.h +++ b/src/town.h @@ -19,8 +19,8 @@ template struct BuildingCounts { - T id_count[NUM_HOUSES]; - T class_count[HOUSE_CLASS_MAX]; + std::vector id_count; + std::vector class_count; }; static const uint CUSTOM_TOWN_NUMBER_DIFFICULTY = 4; ///< value for custom town number in difficulty settings diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 3ebe90087e..b85d077d92 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -1941,6 +1941,7 @@ static void DoCreateTown(Town *t, TileIndex tile, uint32_t townnameparts, TownSi UpdateTownRadius(t); t->flags = 0; t->cache.population = 0; + InitializeBuildingCounts(t); /* Spread growth across ticks so even if there are many * similar towns they're unlikely to grow all in one tick */ t->grow_counter = t->index % Ticks::TOWN_GROWTH_TICKS; @@ -3969,17 +3970,3 @@ extern const TileTypeProcs _tile_type_town_procs = { GetFoundation_Town, // get_foundation_proc TerraformTile_Town, // terraform_tile_proc }; - - -HouseSpec _house_specs[NUM_HOUSES]; - -void ResetHouses() -{ - ResetHouseClassIDs(); - - auto insert = std::copy(std::begin(_original_house_specs), std::end(_original_house_specs), std::begin(_house_specs)); - std::fill(insert, std::end(_house_specs), HouseSpec{}); - - /* Reset any overrides that have been set. */ - _house_mngr.ResetOverride(); -} From e16b982b6abf128a1c9e6dbce9cd6a3adc611236 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 12 Mar 2024 17:28:45 +0000 Subject: [PATCH 201/695] Codechange: Use iteration when dealing with all HouseSpecs. --- src/industry_gui.cpp | 18 ++++++++---------- src/newgrf.cpp | 20 +++++++++----------- src/newgrf_house.cpp | 9 +++++++++ src/town_cmd.cpp | 38 +++++++++++++++++--------------------- 4 files changed, 43 insertions(+), 42 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index fcb3b247e3..d4bbf88497 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -2504,12 +2504,11 @@ struct CargoesRow { } else { /* Houses only display what is demanded. */ for (uint i = 0; i < cargo_fld->u.cargo.num_cargoes; i++) { - for (uint h = 0; h < NUM_HOUSES; h++) { - HouseSpec *hs = HouseSpec::Get(h); - if (!hs->enabled) continue; + for (const auto &hs : HouseSpec::Specs()) { + if (!hs.enabled) continue; - for (uint j = 0; j < lengthof(hs->accepts_cargo); j++) { - if (hs->cargo_acceptance[j] > 0 && cargo_fld->u.cargo.vertical_cargoes[i] == hs->accepts_cargo[j]) { + for (uint j = 0; j < lengthof(hs.accepts_cargo); j++) { + if (hs.cargo_acceptance[j] > 0 && cargo_fld->u.cargo.vertical_cargoes[i] == hs.accepts_cargo[j]) { cargo_fld->ConnectCargo(cargo_fld->u.cargo.vertical_cargoes[i], false); goto next_cargo; } @@ -2724,12 +2723,11 @@ struct IndustryCargoesWindow : public Window { for (uint i = 0; i < length; i++) { if (!IsValidCargoID(cargoes[i])) continue; - for (uint h = 0; h < NUM_HOUSES; h++) { - HouseSpec *hs = HouseSpec::Get(h); - if (!hs->enabled || !(hs->building_availability & climate_mask)) continue; + for (const auto &hs : HouseSpec::Specs()) { + if (!hs.enabled || !(hs.building_availability & climate_mask)) continue; - for (uint j = 0; j < lengthof(hs->accepts_cargo); j++) { - if (hs->cargo_acceptance[j] > 0 && cargoes[i] == hs->accepts_cargo[j]) return true; + for (uint j = 0; j < lengthof(hs.accepts_cargo); j++) { + if (hs.cargo_acceptance[j] > 0 && cargoes[i] == hs.accepts_cargo[j]) return true; } } } diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 20ac05431a..021608b843 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -9337,20 +9337,18 @@ static void EnsureEarlyHouse(HouseZones bitmask) { TimerGameCalendar::Year min_year = CalendarTime::MAX_YEAR; - for (int i = 0; i < NUM_HOUSES; i++) { - HouseSpec *hs = HouseSpec::Get(i); - if (hs == nullptr || !hs->enabled) continue; - if ((hs->building_availability & bitmask) != bitmask) continue; - if (hs->min_year < min_year) min_year = hs->min_year; + for (const auto &hs : HouseSpec::Specs()) { + if (!hs.enabled) continue; + if ((hs.building_availability & bitmask) != bitmask) continue; + if (hs.min_year < min_year) min_year = hs.min_year; } if (min_year == 0) return; - for (int i = 0; i < NUM_HOUSES; i++) { - HouseSpec *hs = HouseSpec::Get(i); - if (hs == nullptr || !hs->enabled) continue; - if ((hs->building_availability & bitmask) != bitmask) continue; - if (hs->min_year == min_year) hs->min_year = 0; + for (auto &hs : HouseSpec::Specs()) { + if (!hs.enabled) continue; + if ((hs.building_availability & bitmask) != bitmask) continue; + if (hs.min_year == min_year) hs.min_year = 0; } } @@ -9390,7 +9388,7 @@ static void FinaliseHouseArray() } } - for (size_t i = 0; i < NUM_HOUSES; i++) { + for (size_t i = 0; i < HouseSpec::Specs().size(); i++) { HouseSpec *hs = HouseSpec::Get(i); const HouseSpec *next1 = (i + 1 < NUM_HOUSES ? HouseSpec::Get(i + 1) : nullptr); const HouseSpec *next2 = (i + 2 < NUM_HOUSES ? HouseSpec::Get(i + 2) : nullptr); diff --git a/src/newgrf_house.cpp b/src/newgrf_house.cpp index ac18c4fbe2..e31c49964a 100644 --- a/src/newgrf_house.cpp +++ b/src/newgrf_house.cpp @@ -52,6 +52,15 @@ std::vector &HouseSpec::Specs() return _house_specs; } +/** + * Gets the index of this spec. + * @return The index. + */ +HouseID HouseSpec::Index() const +{ + return static_cast(this - _house_specs.data()); +} + /** * Get the spec for a house ID. * @param house_id The ID of the house. diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index b85d077d92..c44cf48b04 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2658,31 +2658,28 @@ static bool BuildTownHouse(Town *t, TileIndex tile) /* bits 0-4 are used * bits 11-15 are used * bits 5-10 are not used. */ - HouseID houses[NUM_HOUSES]; - uint num = 0; - uint probs[NUM_HOUSES]; + static std::vector> probs; + probs.clear(); + uint probability_max = 0; /* Generate a list of all possible houses that can be built. */ - for (uint i = 0; i < NUM_HOUSES; i++) { - const HouseSpec *hs = HouseSpec::Get(i); - + for (const auto &hs : HouseSpec::Specs()) { /* Verify that the candidate house spec matches the current tile status */ - if ((~hs->building_availability & bitmask) != 0 || !hs->enabled || hs->grf_prop.override != INVALID_HOUSE_ID) continue; + if ((~hs.building_availability & bitmask) != 0 || !hs.enabled || hs.grf_prop.override != INVALID_HOUSE_ID) continue; /* Don't let these counters overflow. Global counters are 32bit, there will never be that many houses. */ - if (hs->class_id != HOUSE_NO_CLASS) { + if (hs.class_id != HOUSE_NO_CLASS) { /* id_count is always <= class_count, so it doesn't need to be checked */ - if (t->cache.building_counts.class_count[hs->class_id] == UINT16_MAX) continue; + if (t->cache.building_counts.class_count[hs.class_id] == UINT16_MAX) continue; } else { /* If the house has no class, check id_count instead */ - if (t->cache.building_counts.id_count[i] == UINT16_MAX) continue; + if (t->cache.building_counts.id_count[hs.Index()] == UINT16_MAX) continue; } - uint cur_prob = hs->probability; + uint cur_prob = hs.probability; probability_max += cur_prob; - probs[num] = cur_prob; - houses[num++] = (HouseID)i; + probs.emplace_back(std::make_pair(hs.Index(), cur_prob)); } TileIndex baseTile = tile; @@ -2697,18 +2694,17 @@ static bool BuildTownHouse(Town *t, TileIndex tile) uint r = RandomRange(probability_max); uint i; - for (i = 0; i < num; i++) { - if (probs[i] > r) break; - r -= probs[i]; + for (i = 0; i < probs.size(); i++) { + if (probs[i].second > r) break; + r -= probs[i].second; } - HouseID house = houses[i]; - probability_max -= probs[i]; + HouseID house = probs[i].first; + probability_max -= probs[i].second; /* remove tested house from the set */ - num--; - houses[i] = houses[num]; - probs[i] = probs[num]; + probs[i] = probs.back(); + probs.pop_back(); const HouseSpec *hs = HouseSpec::Get(house); From e21c12afeb04b5797ccfb9b94effff53d653888f Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 29 Mar 2024 04:41:18 +0000 Subject: [PATCH 202/695] Update: Translations from eints finnish: 39 changes by hpiirai ukrainian: 23 changes by StepanIvasyn danish: 1 change by bscargo french: 1 change by Lishouuu portuguese: 1 change by azulcosta portuguese (brazilian): 100 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 200 +++++++++++++++--------------- src/lang/danish.txt | 2 +- src/lang/finnish.txt | 78 ++++++------ src/lang/french.txt | 2 +- src/lang/portuguese.txt | 2 +- src/lang/ukrainian.txt | 46 +++---- 6 files changed, 165 insertions(+), 165 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index e43718ba29..c755c497a8 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -736,8 +736,8 @@ STR_HIGHSCORE_PERFORMANCE_TITLE_MOGUL :Mandachuva STR_HIGHSCORE_PERFORMANCE_TITLE_TYCOON_OF_THE_CENTURY :Magnata do Século STR_HIGHSCORE_NAME :{PRESIDENT_NAME}, {COMPANY} STR_HIGHSCORE_STATS :{BIG_FONT}'{STRING}' ({COMMA}) -STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{BLACK}{COMPANY} conquista o status de '{STRING}'! -STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{WHITE}{PRESIDENT_NAME} de {COMPANY} conquista o status de '{STRING}'! +STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{BLACK}{COMPANY} conquista o status de '{STRING}'!! +STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{WHITE}{PRESIDENT_NAME} de {COMPANY} conquista o status de '{STRING}'!! # Smallmap window STR_SMALLMAP_CAPTION :{WHITE}Mapa - {STRING} @@ -814,7 +814,7 @@ STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Mostrar STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * PAUSADO * * STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * PAUSADO (aguardando atualização da rede de conexões) * * -STR_STATUSBAR_AUTOSAVE :{RED}Salvo Automaticamente +STR_STATUSBAR_AUTOSAVE :{RED}SALVAR AUTOMÁTICO STR_STATUSBAR_SAVING_GAME :{RED}* * SALVANDO JOGO * * STR_STATUSBAR_SPECTATOR :{WHITE}(espectador) @@ -848,7 +848,7 @@ STR_NEWS_DISASTER_AIRPLANE_OIL_REFINERY :{BIG_FONT}{BLAC STR_NEWS_DISASTER_HELICOPTER_FACTORY :{BIG_FONT}{BLACK}Fábrica destruída em circunstâncias suspeitas perto de {TOWN}! STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLACK}OVNI pousa em {TOWN}! STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}Afundamento da mina de carvão deixa rastro de destruição perto de {TOWN}! -STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Inundações!{}Pelo menos {COMMA} desaparecidos, supostamente mortos após terríveis inundações! +STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Inundações!{}Pelo menos {COMMA} desaparecidos, considerados como mortos após terríveis inundações! STR_NEWS_COMPANY_IN_TROUBLE_TITLE :{BIG_FONT}{BLACK}Empresa de transporte em dificuldades! STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} será vendida ou declarada falida se não aumentar o desempenho em breve! @@ -856,7 +856,7 @@ STR_NEWS_COMPANY_MERGER_TITLE :{BIG_FONT}{BLAC STR_NEWS_COMPANY_MERGER_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} foi vendida para {STRING} por {CURRENCY_LONG}! STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLACK}Falência! STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} foi fechada pelos credores e todos os seus bens foram vendidos! -STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Nova empresa de transportes! +STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Nova empresa de transportes!! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} inicia construção perto de {TOWN}! STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} foi comprada por {STRING} por um valor não revelado! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Gerente) @@ -892,7 +892,7 @@ STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE ###next-name-looks-similar # Order review system / warnings -STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE} tem muito poucas ordens no horário +STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE} tem muito poucas ordens na programação STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}{VEHICLE} tem uma ordem nula STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}{VEHICLE} tem ordens duplicadas STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}{VEHICLE} tem uma estação inválida em suas ordens @@ -910,7 +910,7 @@ STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} parou porque uma ordem de adaptação falhou STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Renovação automática falhou para {VEHICLE}{}{STRING} -STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}Nov{G o a} {STRING} disponível! +STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}Nov{G o a} {STRING} disponível!! STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G o a} {STRING} disponível! - {ENGINE} @@ -921,7 +921,7 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Oferta de subsídio expirou:{}{}Transporte de {STRING} d{G e a} {STRING} para {STRING} agora não será subsidiado STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsídio retirado:{}{}Transporte de {STRING} d{G e a} {STRING} para {STRING} não é mais subsidiado -STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subsídio oferecido:{}{}Primeiro transporte de {STRING} d{G e a} {STRING} para {STRING} receberá subsídio da autoridade local durante {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subsídio de serviço oferecido:{}{}Primeiro transporte de {STRING} d{G e a} {STRING} para {STRING} receberá subsídio da autoridade local durante {UNITS_YEARS_OR_MINUTES}! ###length 4 STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subsídio concedido a {STRING}!{}{}Transporte de {STRING} d{G e a} {STRING} para {STRING} receberá um adicional de 50% durante {UNITS_YEARS_OR_MINUTES}! STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subsídio concedido a {STRING}!{}{}Transporte de {STRING} d{G e a} {STRING} para {STRING} receberá o dobro da tarifa durante {UNITS_YEARS_OR_MINUTES}! @@ -1080,17 +1080,17 @@ STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Selecion STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Taxas de atualização superiores a 60Hz podem interferir no desempenho. -STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos base -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecione um conjunto de gráficos base para usar (não pode ser alterado no jogo, só a partir do menu principal) -STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Informação adicional sobre sobre o conjunto de gráficos base +STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos básicos +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecione um conjunto de gráficos básicos para usar (não pode ser alterado no jogo, só a partir do menu principal) +STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Informação adicional sobre sobre o conjunto de gráficos básicos -STR_GAME_OPTIONS_BASE_SFX :{BLACK}Conjunto de sons base -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Selecione um conjunto de sons base para usar (não pode ser alterado no jogo, só a partir do menu principal) -STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Informação adicional sobre sobre o conjunto de sons base +STR_GAME_OPTIONS_BASE_SFX :{BLACK}Conjunto de sons básicos +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Selecione um conjunto de sons básicos para usar (não pode ser alterado no jogo, só a partir do menu principal) +STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Informação adicional sobre sobre o conjunto de sons básicos -STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Conjunto de músicas base -STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selecione um conjunto de músicas base para usar -STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Informação adicional sobre o conjunto de músicas base +STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Conjunto de músicas básicas +STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selecione um conjunto de músicas básicas para usar +STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Informação adicional sobre o conjunto de músicas básicas STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(não existem plugins instalados para integrar com as plataformas sociais) @@ -1176,8 +1176,8 @@ STR_RIVERS_MODERATE :Alguns STR_RIVERS_LOT :Muitos ###length 3 -STR_DISASTER_NONE :Nenhum -STR_DISASTER_REDUCED :Reduzido +STR_DISASTER_NONE :Nenhuma +STR_DISASTER_REDUCED :Reduzida STR_DISASTER_NORMAL :Normal ###length 4 @@ -1251,8 +1251,8 @@ STR_CONFIG_SETTING_TYPE_HIDES :{BLACK}Mostrar STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Mostrar todos os resultados da pesquisa por configuração{}{SILVER}Categoria {BLACK}para {WHITE}{STRING} {BLACK}e {SILVER}Tipo {BLACK}para {WHITE}Todos os tipos de configuração ###length 3 -STR_CONFIG_SETTING_OFF :Desativado -STR_CONFIG_SETTING_ON :Ativado +STR_CONFIG_SETTING_OFF :Não +STR_CONFIG_SETTING_ON :Sim STR_CONFIG_SETTING_DISABLED :Desativado ###length 3 @@ -1273,7 +1273,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Direita STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}segundo{P 0 "" s} STR_CONFIG_SETTING_INFINITE_MONEY :Dinheiro infinito: {STRING} -STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Permitir gastos ilimitados e desabilitar a falência de empresas +STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Permitir gastos ilimitados e desativar a falência de empresas STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Valor máximo do empréstimo inicial: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Valor máximo que uma empresa pode emprestar (sem considerar a inflação). Se definido como "Sem empréstimo", não haverá dinheiro disponível a menos que seja fornecido por um Script de Jogo ou pela configuração "Dinheiro infinito" @@ -1291,7 +1291,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Velocidade de c STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Limitar a quantidade ações de construção para IAs STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Quebra de veículos: {STRING} -STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Controlar a frequência com que veículos sem manutenção adequada podem quebrar +STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Controlar com que frequência veículos sem manutenção adequada podem quebrar STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Multiplicador de subsídios: {STRING} STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Definir quanto é pago para conexões subsidiadas @@ -1311,7 +1311,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Definir o níve STR_CONFIG_SETTING_RECESSIONS :Recessões: {STRING} STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Se ativado, recessões podem ocorrer periodicamente. Durante uma recessão, toda a produção é significativamente menor (ela retorna ao nível anterior quando a recessão termina) -STR_CONFIG_SETTING_TRAIN_REVERSING :Desabilitar reversão de trens nas estações: {STRING} +STR_CONFIG_SETTING_TRAIN_REVERSING :Não permitir a reversão de trens nas estações: {STRING} STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Se ativado, os trens não podem inverter a direção em estações não-terminais, mesmo se existir um caminho mais curto para o próximo destino com a inversão STR_CONFIG_SETTING_DISASTERS :Desastres: {STRING} @@ -1330,13 +1330,13 @@ STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Você n STR_CONFIG_SETTING_AUTOSLOPE :Permitir paisagismo sob edifícios, vias, etc.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permitir paisagismo sob edifícios e vias sem precisar removê-lo(a)s -STR_CONFIG_SETTING_CATCHMENT :Área de cobertura com dimensões mais realistas: {STRING} +STR_CONFIG_SETTING_CATCHMENT :Permitir áreas de cobertura com dimensões mais realistas: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Usar áreas de cobertura de tamanhos diferentes para diferentes tipos de estações e aeroportos STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Estações de empresas podem servir indústrias com estações neutras próprias: {STRING} STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Quando ativado, indústrias com estações próprias (como as Petrolíferas) podem ser servidas por estações da empresa construídas nas proximidades. Quando desativado, essas indústrias só podem ser servidas pela sua própria estação. Qualquer estação da empresa nas redondezas não poderá servir a indústria e a estação própria não poderá atender outra senão a própria indústria -STR_CONFIG_SETTING_EXTRADYNAMITE :Permitir a remoção de mais estradas, pontes e túneis das cidades: {STRING} +STR_CONFIG_SETTING_EXTRADYNAMITE :Permitir a remoção de mais estradas, pontes e túneis das localidades: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Facilitar a remoção de edifícios e infraestruturas das localidades STR_CONFIG_SETTING_TRAIN_LENGTH :Comprimento máximo de trens: {STRING} @@ -1384,7 +1384,7 @@ STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :Nenhum STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :Como as outras indústrias STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Prospecção -STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Área plana ao redor de indústrias: {STRING} +STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Área plana em torno de indústrias: {STRING} STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Quantidade de terreno plano em volta de uma indústria. Isto garante que um espaço vazio permanecerá disponível em torno da indústria para a construção de linhas, etc. STR_CONFIG_SETTING_MULTIPINDTOWN :Permitir várias indústrias semelhantes por localidade: {STRING} @@ -1452,7 +1452,7 @@ STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Número de acidentes de aeronaves: {STRING} STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Definir a ocorrência aleatória de acidentes aéreos.{}* Aeronaves grandes sempre estão sujeitas a acidentes quando pousam em aeroportos pequenos ###length 3 -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Nenhum +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Nenhum* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reduzido STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal @@ -1502,7 +1502,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendário STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Relógio de parede STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutos por ano: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Escolher o número de minutos para o ano do calendário. O padrão é 12 minutos. Defina como 0 para o tempo do calendário não mudar. Essa configuração não afeta a simulação econômica do jogo e só está disponível quando o tempo é baseado em relógio de parede +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Escolher o número de minutos em um ano do calendário. O padrão é 12 minutos. Defina como 0 para o tempo do calendário não mudar. Essa configuração não afeta a simulação econômica do jogo e só está disponível quando o tempo é baseado em relógio de parede STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special @@ -1527,10 +1527,10 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY :Quantia mínima STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Quantia mínima de dinheiro que deve existir na conta bancária para a renovação automática de veículos ser considerada STR_CONFIG_SETTING_ERRMSG_DURATION :Duração da mensagem de erro: {STRING} -STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duração da exibição de mensagens de erro em uma janela vermelha. Algumas mensagens de erro (crítico) não são fechadas automaticamente após este tempo e precisam ser fechadas manualmente +STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Tempo de exibição de mensagens de erro em uma janela vermelha. Algumas mensagens de erro (crítico) não são fechadas automaticamente após este tempo e precisam ser fechadas manualmente STR_CONFIG_SETTING_HOVER_DELAY :Mostrar textos de ajuda: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tempo que o cursor deve ficar sobre algum elemento da interface para que os textos de ajuda sejam mostrados. Quando este valor está definido como 0, os textos de ajuda podem ser mostrados com o botão direito do mouse +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tempo que o cursor deve ficar sobre algum elemento da interface para que os textos de ajuda sejam mostrados. Quando este valor é igual a 0 (zero), os textos de ajuda podem ser mostrados com o botão direito do mouse STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Manter o cursor por {COMMA} milissegundo{P 0 "" s} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Botão direito @@ -1546,11 +1546,11 @@ STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Adicionar uma l STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as cargas que os veículos podem transportar nas janelas de listagem: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Se ativado, a carga que o veículo pode transportar aparecerá acima dele nas listas de veículos -STR_CONFIG_SETTING_LANDSCAPE :Clima: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os climas definem a jogabilidade básica dos cenários, com diferentes cargas e requisitos para crescimento das localidades. NewGRFs e Scripts de Jogo permitem um controle mais preciso sobre isso +STR_CONFIG_SETTING_LANDSCAPE :Paisagem: {STRING} +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os climas definem cenários básicos de jogo, com diferentes cargas e requisitos de crescimento das localidades. NewGRFs e Scripts de Jogo permitem um controle mais preciso sobre isso STR_CONFIG_SETTING_LAND_GENERATOR :Gerador de Terreno: {STRING} -STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :O gerador 'Original' depende do conjunto gráfico base e produz formas de terreno pré-definidas. 'TerraGenesis' é um gerador baseado no algoritmo de ruído de Perlin, que permite configurações mais refinadas +STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :O gerador 'Original' depende do conjunto de gráficos básicos e produz formas de terreno pré-definidas. 'TerraGenesis' é um gerador baseado no algoritmo de ruído de Perlin, que permite configurações mais refinadas ###length 2 STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis @@ -1571,7 +1571,7 @@ STR_CONFIG_SETTING_SNOW_COVERAGE :Cobertura de ne STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de neve na paisagem subártica. A neve também afeta a geração de indústrias e os requisitos para crescimento das localidades. Usado somente durante a geração do mapa. O nível do mar e as suas encostas nunca têm neve STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% -STR_CONFIG_SETTING_DESERT_COVERAGE :Cobertura do deserto: {STRING} +STR_CONFIG_SETTING_DESERT_COVERAGE :Cobertura de deserto: {STRING} STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Escolher a quantidade aproximada de deserto na paisagem tropical. O deserto também afeta a geração de indústrias e os requisitos para crescimento das localidades. Usado somente durante a geração do mapa STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% @@ -1662,8 +1662,8 @@ STR_CONFIG_SETTING_LIVERIES_ALL :Todas as empres STR_CONFIG_SETTING_PREFER_TEAMCHAT :Preferência de chat em equipe com : {STRING} STR_CONFIG_SETTING_PREFER_TEAMCHAT_HELPTEXT :Trocar o mapeamento entre o chat interno da empresa e o chat público para e , respectivamente -STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :Velocidade da roda do mouse no mapa: {STRING} -STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Controlar a sensibilidade do deslocamento com a roda do mouse +STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :Velocidade de rolagem do mapa com a roda do mouse: {STRING} +STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Controlar a sensibilidade do deslocamento do mapa com a roda do mouse STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING :Função da roda do mouse: {STRING} STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING_HELPTEXT :Permitir o deslocamento com rodas de mouse bidimensionais @@ -2032,9 +2032,9 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador d STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamanho médio das cidades em relação às localidades normais no início do jogo STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Atualizar a distribuição a cada {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo entre recálculos subsequentes da rede de conexões. Cada recálculo atualiza os planos para um componente da rede. Isso significa que um valor X para esta configuração não significa que toda a rede será atualizada a cada X segundos. Apenas algum componente será atualizado. Quanto menor o tempo definido, mais tempo de CPU será necessário para calculá-lo. Quanto maior o valor definido, mais tempo será necessário até que a distribuição de carga inicie nas novas rotas +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo entre recálculos subsequentes da rede de conexões. Cada recálculo atualiza os planos para um componente da rede. Isso significa que um valor X para esta configuração não significa que toda a rede será atualizada a cada X segundos. Apenas algum componente será atualizado. Quanto menor este valor, mais tempo de CPU será necessário para calcular as atualizações. Quanto maior este valor, mais tempo será necessário até que a distribuição de carga inicie nas novas rotas STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Usar {STRING} para recalcular a distribuição -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo gasto em cada recálculo de um componente da rede de conexões. Quando um recálculo é iniciado, uma tarefa é gerada e pode ser executada por esse número de segundos. Quanto menor for esse valor, maior a chance de que a tarefa não seja concluída quando deveria. Então o jogo para até que ela seja completada, causando um atraso. Quanto maior for esse valor, mais tempo será necessário para a distribuição ser atualizada quando as rotas mudam +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo gasto em cada recálculo de um componente da rede de conexões. Quando um recálculo é iniciado, uma tarefa é gerada e pode ser executada por esse número de segundos. Quanto menor este valor, maior a chance de que a tarefa não seja concluída quando deveria. Então o jogo para até que ela seja completada, causando um atraso. Quanto maior este valor, mais tempo será necessário para a distribuição ser atualizada quando as rotas mudam STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribuição para passageiros: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" significa que aproximadamente o mesmo número de passageiros irá de uma estação A para uma estação B, assim como de B para A. "Assimétrico" significa que um número arbitrário de passageiros pode ir em qualquer direção. "Manual" significa que não haverá distribuição automática dos passageiros @@ -2050,10 +2050,10 @@ STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :assimétrico STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simétrico STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Precisão da distribuição: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Quanto maior for esse valor, mais tempo de CPU será necessário para calcular a rede de conexões. Se demorar muito, você poderá notar um atraso. Entretanto, se o valor for muito pequeno, a distribuição será imprecisa e você irá perceber que cargas não estão sendo enviadas para os locais esperados +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Quanto maior este valor, mais tempo de CPU será necessário para calcular a rede de conexões. Se demorar muito, você poderá notar um atraso. Entretanto, se o valor for muito pequeno, a distribuição será imprecisa e você irá perceber que cargas não estão sendo enviadas para os locais esperados STR_CONFIG_SETTING_DEMAND_DISTANCE :Efeito da distância na demanda: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Se for definido um valor maior que 0, a distância entre a estação de origem A (de alguma carga) e um possível destino B terá um efeito na quantidade de carga enviada de A até B. Quanto mais distante B estiver de A, menos carga será enviada. Quanto maior o valor definido, menos carga será transportada para estações distantes e mais carga será enviada para estações mais próximas +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Se este valor for maior que 0, a distância entre a estação de origem A (de alguma carga) e um possível destino B terá um efeito na quantidade de carga enviada de A até B. Quanto mais distante B estiver de A, menos carga será enviada. Quanto maior o valor escolhido, menos carga será transportada para estações distantes e mais carga será enviada para estações mais próximas STR_CONFIG_SETTING_DEMAND_SIZE :Quantidade de carga retornada no modo simétrico: {STRING} STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Definir isto para menos de 100% faz com que a distribuição simétrica comporte-se mais como a assimétrica. Menos carga será forçadamente devolvida se uma certa quantidade for enviada a uma estação. Se você definir em 0% a distribuição simétrica se comportará exatamente como a assimétrica @@ -2070,7 +2070,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_DAYS :Unidades do jog STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_SECS :Unidades do jogo (quadrados/s) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :Nós -STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Unidade de potência veicular: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Unidades de potência de veículos: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Sempre que a potência de um veículo for exibida na interface de usuário, mostrar nessas unidades ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL :Imperial (hp) @@ -2084,14 +2084,14 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL :Imperial (t/ton STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_METRIC :Métrico (t/tonelada) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_SI :SI (kg) -STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME :Unidades volumétricas: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME :Unidades de volume: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_HELPTEXT :Sempre que um volume for exibido na interface de usuário, mostrar nessas unidades ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL :Imperial (gal) -STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_METRIC :Métrico (l) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_METRIC :Métrico (L) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_SI :SI (m³) -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Unidade de força de tração: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Unidades de força de tração: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Sempre que o esforço de tração (ou força de tração) for exibido na interface de usuário, mostrar nessas unidades ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL :Imperial (lbf) @@ -2140,7 +2140,7 @@ STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Algoritmo usado STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Gerador de rotas para embarcações: {STRING} STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Algoritmo usado para estabelecer as rotas das embarcações STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Reversão automática em sinais: {STRING} -STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permitir que os trens invertam o sentido em um sinal, se eles tiverem esperado lá muito tempo +STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permitir que os trens invertam a direção em um sinal, se eles tiverem esperado lá muito tempo ###length 2 STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recomendado) @@ -2161,16 +2161,16 @@ STR_CONFIG_ERROR_INVALID_GRF_INCOMPATIBLE :incompatível c STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN :desconhecido STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_LEVEL :{WHITE}... nível de compressão '{STRING}' não é válido STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}... jogo salvo no formato '{STRING}' está indisponível. Revertendo para '{STRING}' -STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... ignorando conjunto de Gráficos Base '{STRING}': não encontrado -STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ignorando conjunto de Sons Base '{STRING}': não encontrado -STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ignorando conjunto de Músicas Base '{STRING}': não encontrado +STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... ignorando conjunto de Gráficos Básicos '{STRING}': não encontrado +STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ignorando conjunto de Sons Básicos '{STRING}': não encontrado +STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ignorando conjunto de Músicas Básicas '{STRING}': não encontrado STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Memória insuficiente STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Falha ao alocar {BYTES} de memória para sprites. A memória reservada para sprites foi reduzida para {BYTES}. Isto irá reduzir o desempenho do OpenTTD. Para diminuir o uso de memória você pode desabilitar gráficos de 32bpp e/ou diminuir os níveis de ampliação das visualizações # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Erro nas configurações de vídeo... STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... nenhuma GPU compatível encontrada. Aceleração por hardware desativada -STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... o controlador gráfico (GPU) travou o jogo. Aceleração por hardware desativada +STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... controlador gráfico (GPU) travou o jogo. Aceleração por hardware desativada # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -2196,7 +2196,7 @@ STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Iniciar STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Abrir um jogo salvo STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Iniciar um novo jogo, usando um mapa de altitudes como terreno STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Iniciar um novo jogo, usando um cenário personalizado -STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Criar um cenário de jogo personalizado +STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Criar um mundo/cenário de jogo personalizado STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Iniciar um jogo multijogador STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Selecionar paisagem 'clima temperado' @@ -2212,9 +2212,9 @@ STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Abrir co STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Verificar por conteúdo novo e atualizado para download STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Abrir configurações de IA STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Abrir configurações de Script de Jogo -STR_INTRO_TOOLTIP_QUIT :{BLACK}Fechar o 'OpenTTD' +STR_INTRO_TOOLTIP_QUIT :{BLACK}Sair do 'OpenTTD' -STR_INTRO_BASESET :{BLACK}Faltam {NUM} sprite{P "" s} no conjunto de gráficos base selecionado. Por favor, verifique se existem atualizações para o conjunto. +STR_INTRO_BASESET :{BLACK}Faltam {NUM} sprite{P "" s} no conjunto de gráficos básicos selecionado. Por favor, verifique se existem atualizações para o conjunto. STR_INTRO_TRANSLATION :{BLACK}Faltam {NUM} string{P "" s} nesta tradução. Por favor, ajude a melhorar o OpenTTD inscrevendo-se como tradutor. Veja o arquivo readme.txt para mais detalhes. # Quit window @@ -2281,14 +2281,14 @@ STR_LIVERY_STEAM :Locomotiva a Va STR_LIVERY_DIESEL :Locomotiva Diesel STR_LIVERY_ELECTRIC :Locomotiva Elétrica STR_LIVERY_MONORAIL :Locomotiva Monotrilho -STR_LIVERY_MAGLEV :Locomotiva MagLev +STR_LIVERY_MAGLEV :Locomotiva Maglev STR_LIVERY_DMU :DMU STR_LIVERY_EMU :EMU STR_LIVERY_PASSENGER_WAGON_STEAM :Vagão de Passageiros (Vapor) STR_LIVERY_PASSENGER_WAGON_DIESEL :Vagão de Passageiros (Diesel) STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Vagão de Passageiros (Elétrico) STR_LIVERY_PASSENGER_WAGON_MONORAIL :Vagão de Passageiros (Monotrilho) -STR_LIVERY_PASSENGER_WAGON_MAGLEV :Vagão de Passageiros (MagLev) +STR_LIVERY_PASSENGER_WAGON_MAGLEV :Vagão de Passageiros (Maglev) STR_LIVERY_FREIGHT_WAGON :Vagão de Carga STR_LIVERY_BUS :Ônibus STR_LIVERY_TRUCK :Caminhão @@ -2373,7 +2373,7 @@ STR_NETWORK_SERVER_LIST_GAME_NAME :{BLACK}Nome STR_NETWORK_SERVER_LIST_GAME_NAME_TOOLTIP :{BLACK}Nome do jogo STR_NETWORK_SERVER_LIST_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA} STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION :{BLACK}Clientes -STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Clientes conectados / máx. clientes{}Empresas conectadas / máx. empresas +STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Clientes conectados / máx. clientes{}Empresas / máx. empresas STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x{COMMA} STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Tamanho do mapa STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Tamanho do mapa do jogo{}Clique para ordenar por área @@ -2408,7 +2408,7 @@ STR_NETWORK_SERVER_LIST_VERSION_MISMATCH :{SILVER}VERSÃO STR_NETWORK_SERVER_LIST_GRF_MISMATCH :{SILVER}NEWGRF INCOMPATÍVEL STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Entrar no jogo -STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Atualizar informações +STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Atualizar servidor STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Atualizar as informações do servidor STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Procurar na internet @@ -2647,7 +2647,7 @@ STR_NETWORK_MESSAGE_KICKED :*** {STRING} fo STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Falha ao registrar o servidor STR_NETWORK_ERROR_COORDINATOR_REUSE_OF_INVITE_CODE :{WHITE}Outro servidor com o mesmo código de convite foi registrado. Mudando para o tipo de jogo "local". -STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}Seu servidor não permite conexões remotas +STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}O seu servidor não permite conexões remotas STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Outros jogadores não poderão se conectar ao seu servidor # Content downloading window @@ -2689,21 +2689,21 @@ STR_CONTENT_DETAIL_DESCRIPTION :{SILVER}Descri STR_CONTENT_DETAIL_URL :{SILVER}URL: {WHITE}{STRING} STR_CONTENT_DETAIL_TYPE :{SILVER}Tipo: {WHITE}{STRING} STR_CONTENT_DETAIL_FILESIZE :{SILVER}Tamanho: {WHITE}{BYTES} -STR_CONTENT_DETAIL_SELECTED_BECAUSE_OF :{SILVER}Selecionado devido a: {WHITE}{STRING} +STR_CONTENT_DETAIL_SELECTED_BECAUSE_OF :{SILVER}Selecionado para: {WHITE}{STRING} STR_CONTENT_DETAIL_DEPENDENCIES :{SILVER}Dependências: {WHITE}{STRING} STR_CONTENT_DETAIL_TAGS :{SILVER}Etiquetas: {WHITE}{STRING} STR_CONTENT_NO_ZLIB :{WHITE}OpenTTD foi feito sem suporte a "zlib"... STR_CONTENT_NO_ZLIB_SUB :{WHITE}... não é possível fazer o download do conteúdo! # Order of these is important! -STR_CONTENT_TYPE_BASE_GRAPHICS :Gráficos base +STR_CONTENT_TYPE_BASE_GRAPHICS :Gráficos básicos STR_CONTENT_TYPE_NEWGRF :NewGRF STR_CONTENT_TYPE_AI :IA STR_CONTENT_TYPE_AI_LIBRARY :Biblioteca de IA STR_CONTENT_TYPE_SCENARIO :Cenário STR_CONTENT_TYPE_HEIGHTMAP :Mapa de altitudes -STR_CONTENT_TYPE_BASE_SOUNDS :Sons base -STR_CONTENT_TYPE_BASE_MUSIC :Músicas base +STR_CONTENT_TYPE_BASE_SOUNDS :Sons básicos +STR_CONTENT_TYPE_BASE_MUSIC :Músicas básicas STR_CONTENT_TYPE_GAME_SCRIPT :Script de jogo STR_CONTENT_TYPE_GS_LIBRARY :Biblioteca de SJ @@ -2746,7 +2746,7 @@ STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Definir STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Legenda do Fluxo de Carga STR_LINKGRAPH_LEGEND_ALL :{BLACK}Todas STR_LINKGRAPH_LEGEND_NONE :{BLACK}Nenhuma -STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Selecionar as empresas a serem mostradas +STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Selecione as empresas a serem mostradas STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap @@ -2761,7 +2761,7 @@ STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Tempo médio de viagem: {UNITS_DAYS_OR_SECONDS} # Base for station construction window(s) -STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Mostrar área de cobertura +STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Exibir área de cobertura STR_STATION_BUILD_COVERAGE_OFF :{BLACK}Desativado STR_STATION_BUILD_COVERAGE_ON :{BLACK}Ativado STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Não mostrar área de cobertura do local proposto @@ -2779,13 +2779,13 @@ STR_JOIN_WAYPOINT_CAPTION :{WHITE}Unir pon STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Construir um ponto de controle separado # Generic toolbar -STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Desativado porque não existem, atualmente, veículos disponíveis para esta infraestrutura +STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Desativado porque atualmente não existem veículos disponíveis para esta infraestrutura # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construção de Ferrovia STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construção de Ferrovia Eletrificada STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Construção de Monotrilho -STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Construção de MagLev +STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Construção de Maglev STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir ferrovia. Ctrl+Clique para remover a ferrovia. Pressione também Shift para só mostrar o custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construir ferrovia usando o modo Autotrilho. Ctrl+Clique para remover seção da ferrovia. Pressione também Shift para só mostrar o custo estimado @@ -2801,7 +2801,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Converte STR_RAIL_NAME_RAILROAD :Ferrovia STR_RAIL_NAME_ELRAIL :Ferrovia eletrificada STR_RAIL_NAME_MONORAIL :Monotrilho -STR_RAIL_NAME_MAGLEV :MagLev +STR_RAIL_NAME_MAGLEV :Maglev # Rail depot construction window STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Orientação do Depósito Ferroviário @@ -2870,7 +2870,7 @@ STR_BRIDGE_TUBULAR_SILICON :Tubular, Silíc # Road construction toolbar -STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Construção de Estradas +STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Construção de Estrada STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Construção de Linha de Bonde STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Construir seção de estrada. Ctrl+Clique para remover seção da estrada. Pressione também Shift para só mostrar o custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Construir seção de linha de bonde. Ctrl+Clique para remover seção da linha. Pressione também Shift para só mostrar o custo estimado @@ -2990,7 +2990,7 @@ STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantar # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Geração de Terreno -STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Colocar áreas rochosas no terreno +STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Colocar áreas rochosas na paisagem STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Definir área de deserto.{}Ctrl+Clique para remover a área de deserto STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Aumentar área do terreno para abaixar/levantar STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Diminuir área do terreno para abaixar/levantar @@ -3148,7 +3148,7 @@ STR_LAI_TREE_NAME_RAINFOREST :Floresta tropic STR_LAI_TREE_NAME_CACTUS_PLANTS :Plantas de cactos STR_LAI_STATION_DESCRIPTION_RAILROAD_STATION :Estação ferroviária -STR_LAI_STATION_DESCRIPTION_AIRCRAFT_HANGAR :Hangar +STR_LAI_STATION_DESCRIPTION_AIRCRAFT_HANGAR :Hangar para aeronaves STR_LAI_STATION_DESCRIPTION_AIRPORT :Aeroporto STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Estação de caminhões STR_LAI_STATION_DESCRIPTION_BUS_STATION :Estação de ônibus @@ -3160,7 +3160,7 @@ STR_LAI_WATER_DESCRIPTION_WATER :Água STR_LAI_WATER_DESCRIPTION_CANAL :Canal STR_LAI_WATER_DESCRIPTION_LOCK :Eclusa STR_LAI_WATER_DESCRIPTION_RIVER :Rio -STR_LAI_WATER_DESCRIPTION_COAST_OR_RIVERBANK :Costa ou margem +STR_LAI_WATER_DESCRIPTION_COAST_OR_RIVERBANK :Litoral ou margem STR_LAI_WATER_DESCRIPTION_SHIP_DEPOT :Depósito de embarcações # Industries come directly from their industry names @@ -3192,7 +3192,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Sede de Empresa STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno que pertence a uma empresa # About OpenTTD window -STR_ABOUT_OPENTTD :{WHITE}Sobre o OpenTTD... +STR_ABOUT_OPENTTD :{WHITE}Sobre o OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Direitos autorais originais {COPYRIGHT} 1995 Chris Sawyer, Todos os direitos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versão {REV} STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} A equipe do OpenTTD @@ -3264,7 +3264,7 @@ STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Abrir ma STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Salvar mapa de altitudes STR_SAVELOAD_HOME_BUTTON :{BLACK}Acessar o diretório padrão atual onde salvar/abrir jogos STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} livres -STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Lista de unidades, diretórios e arquivos de jogos gravados +STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Lista de unidades, diretórios e arquivos de jogos salvos STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Nome selecionado para salvar o jogo STR_SAVELOAD_DELETE_BUTTON :{BLACK}Apagar STR_SAVELOAD_DELETE_TOOLTIP :{BLACK}Excluir o jogo salvo selecionado @@ -3306,7 +3306,7 @@ STR_MAPGEN_SNOW_COVERAGE :{BLACK}Cobertur STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Aumentar a cobertura de neve em dez por cento STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Diminuir a cobertura de neve em dez por cento STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}% -STR_MAPGEN_DESERT_COVERAGE :{BLACK}Cobertura do deserto: +STR_MAPGEN_DESERT_COVERAGE :{BLACK}Cobertura de deserto: STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}Aumentar a cobertura de deserto em dez por cento STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Diminuir a cobertura de deserto em dez por cento STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% @@ -3370,8 +3370,8 @@ STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Altura do pico mais elevado STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Pico mais elevado -STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Cobertura com neve (em %) -STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Cobertura com deserto (em %) +STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Cobertura de neve (em %) +STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Cobertura de deserto (em %) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Alterar o ano de início # SE Map generation @@ -3441,7 +3441,7 @@ STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP :{BLACK}Verifica STR_NEWGRF_SETTINGS_FILENAME :{BLACK}Nome do arquivo: {SILVER}{STRING} STR_NEWGRF_SETTINGS_GRF_ID :{BLACK}GRF ID: {SILVER}{STRING} STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versão: {SILVER}{NUM} -STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Versão mínima compatível: {SILVER}{NUM} +STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Versão mín. compatível: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}Soma MD5: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Padrão (D) @@ -3460,14 +3460,14 @@ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Incompatí STR_SAVE_PRESET_CAPTION :{WHITE}Salvar predefinição STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lista de predefinições disponíveis, selecione uma para copiar o nome e usar na gravação abaixo STR_SAVE_PRESET_TITLE :{BLACK}Digitar um nome para a predefinição -STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Nome que está selecionado para a gravação da predefinição +STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Nome que está selecionado para salvar a predefinição STR_SAVE_PRESET_CANCEL :{BLACK}Cancelar STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Não alterar a predefinição STR_SAVE_PRESET_SAVE :{BLACK}Salvar STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Salvar a predefinição com o nome selecionado # NewGRF parameters window -STR_BASEGRF_PARAMETERS_CAPTION :{WHITE}Alterar parâmetros dos gráficos base +STR_BASEGRF_PARAMETERS_CAPTION :{WHITE}Alterar parâmetros dos gráficos básicos STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Alterar parâmetros de NewGRF STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Fechar STR_NEWGRF_PARAMETERS_RESET :{BLACK}Restaurar @@ -3879,7 +3879,7 @@ STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Infraest STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY} {BLACK}{COMPANY_NUM} STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Presidente) -STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inauguração: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inaugurada: {WHITE}{NUM} STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Esquema de Cores: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Veículos: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} tre{P m ns} @@ -4056,7 +4056,7 @@ STR_GROUP_OCCUPANCY_VALUE :{NUM}% STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Novos Veículos Ferroviários STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Novos Veículos Ferroviários Elétricos STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Novos Veículos Monotrilho -STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Novos Veículos MagLev +STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Novos Veículos Maglev STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Novos Veículos Rodoviários STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Novos Bondes @@ -4239,16 +4239,16 @@ STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TOOLTIP :{BLACK}Obter um STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Obter uma lista de todas as aeronaves com qualquer hangar deste aeroporto em suas ordens ###length VEHICLE_TYPES -STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP :{BLACK}Clique para todos os trens pararem dentro do depósito -STR_DEPOT_MASS_STOP_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Clique para todos os veículos pararem dentro do depósito -STR_DEPOT_MASS_STOP_DEPOT_SHIP_TOOLTIP :{BLACK}Clique para todos as embarcações pararem dentro do depósito -STR_DEPOT_MASS_STOP_HANGAR_TOOLTIP :{BLACK}Clique para todas as aeronaves pararem dentro do hangar +STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP :{BLACK}Clique para parar todos os trens dentro do depósito +STR_DEPOT_MASS_STOP_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Clique para parar todos os veículos dentro do depósito +STR_DEPOT_MASS_STOP_DEPOT_SHIP_TOOLTIP :{BLACK}Clique para parar todos as embarcações dentro do depósito +STR_DEPOT_MASS_STOP_HANGAR_TOOLTIP :{BLACK}Clique para parar todas as aeronaves dentro do hangar ###length VEHICLE_TYPES -STR_DEPOT_MASS_START_DEPOT_TRAIN_TOOLTIP :{BLACK}Clique para todos os trens saírem do depósito -STR_DEPOT_MASS_START_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Clique para todos os veículos saírem do depósito -STR_DEPOT_MASS_START_DEPOT_SHIP_TOOLTIP :{BLACK}Clique para todas as embarcações saírem do depósito -STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Clique para todas as aeronaves saírem do hangar +STR_DEPOT_MASS_START_DEPOT_TRAIN_TOOLTIP :{BLACK}Clique para iniciar todos os trens do depósito +STR_DEPOT_MASS_START_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Clique para iniciar todos os veículos do depósito +STR_DEPOT_MASS_START_DEPOT_SHIP_TOOLTIP :{BLACK}Clique para iniciar todas as embarcações do depósito +STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Clique para iniciar todas as aeronaves do hangar STR_DEPOT_DRAG_WHOLE_TRAIN_TO_SELL_TOOLTIP :{BLACK}Arraste a locomotiva até aqui para vender todo o trem STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Você está prestes a vender todos os veículos do depósito. Tem certeza? @@ -4273,7 +4273,7 @@ STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING} STR_ENGINE_PREVIEW_COST_WEIGHT :Custo: {CURRENCY_LONG} Peso: {WEIGHT_SHORT} STR_ENGINE_PREVIEW_COST_MAX_SPEED :Custo: {CURRENCY_LONG} Velocidade máx.: {VELOCITY} STR_ENGINE_PREVIEW_SPEED_POWER :Velocidade: {VELOCITY} Potência: {POWER} -STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Velocidade: {VELOCITY} Potência: {POWER} Força de Tração máx.: {FORCE} +STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Velocidade: {VELOCITY} Potência: {POWER} Tração máx.: {FORCE} STR_ENGINE_PREVIEW_TYPE :Tipo de aeronave: {STRING} STR_ENGINE_PREVIEW_TYPE_RANGE :Tipo de aeronave: {STRING} Autonomia: {COMMA} quadrados STR_ENGINE_PREVIEW_RUNCOST_YEAR :Custo de Operação: {CURRENCY_LONG}/ano @@ -4389,7 +4389,7 @@ STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Aguarda STR_VEHICLE_STATUS_CRASHED :{RED}Acidentado! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Quebrado STR_VEHICLE_STATUS_STOPPED :{RED}Parado -STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Parando, {VELOCITY} +STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}{VELOCITY} - Parando STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Sem energia STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Aguardando por caminho livre STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Muito distante do próximo destino @@ -4497,7 +4497,7 @@ STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Mostrar STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Capacidade: {LTBLUE} # Vehicle refit -STR_REFIT_CAPTION :{WHITE}{VEHICLE} (Adaptar) +STR_REFIT_CAPTION :{WHITE}{VEHICLE} (Adaptação) STR_REFIT_TITLE :{GOLD}Selecionar tipo de carga a ser transportada: STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}{}{BLACK}Custo de adaptação: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}{}{BLACK}Receita com a adaptação: {GREEN}{CURRENCY_LONG} @@ -4900,9 +4900,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Receita STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravação ainda sendo executada,{}por favor aguarde até terminar! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Salvamento automático falhou STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Não é possível ler a unidade -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Não foi possível salvar o jogo{}{STRING} +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Salvar Jogo Falhou{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Não é possível apagar o arquivo -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Não foi possível abrir o jogo{}{STRING} +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Abrir Jogo Falhou{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erro interno: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Jogo salvo está corrompido - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Jogo salvo foi feito com uma versão mais recente @@ -4946,13 +4946,13 @@ STR_ERROR_MESSAGE_CAPTION :{YELLOW}Mensage STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY :{YELLOW}Mensagem de {STRING} # Generic construction errors -STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Fora dos limites do mapa +STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Fora do mapa STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Muito perto da borda do mapa STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Dinheiro insuficiente - é necessário {CURRENCY_LONG} STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}É necessário terreno plano STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Terreno inclinado na direção errada STR_ERROR_CAN_T_DO_THIS :{WHITE}Não é possível fazer isto... -STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}O imóvel deve ser demolido primeiro +STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}A construção deve ser demolida primeiro STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Não é possível limpar esta área... STR_ERROR_SITE_UNSUITABLE :{WHITE}... local inadequado STR_ERROR_ALREADY_BUILT :{WHITE}... já construído @@ -4967,8 +4967,8 @@ STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Não é # Local authority errors STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}A autoridade local de {TOWN} recusa-se a permitir isso -STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}A autoridade local de {TOWN} não permite a construção de outro aeroporto nesta localidade -STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}A autoridade local de {TOWN} não autoriza a construção do aeroporto devido à poluição sonora +STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}A autoridade local de {TOWN} recusa-se a permitir que outro aeroporto seja construído nesta localidade +STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}A autoridade local de {TOWN} não concede permissão para aeroporto devido à poluição sonora STR_ERROR_BRIBE_FAILED :{WHITE}A sua tentativa de suborno foi descoberta por um investigador regional # Levelling errors @@ -5025,8 +5025,8 @@ STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... só STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... só pode ser construído em áreas baixas STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... só pode ser colocado perto das bordas do mapa STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... floresta só pode ser plantada acima da linha de neve -STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... só pode ser construído acima da linha da neve -STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... só pode ser construído abaixo da linha da neve +STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... só pode ser construído acima da linha de neve +STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... só pode ser construído abaixo da linha de neve STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}O financiamento falhou em prospectar devido ao azar; tente novamente STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Não havia locais adequados para prospectar por esta indústria diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 3aa4f20c61..144d89d38b 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -4643,7 +4643,7 @@ STR_ORDER_REFIT_ORDER :(Tilpas til {ST STR_ORDER_REFIT_STOP_ORDER :(Tilpas til {STRING} og stop) STR_ORDER_STOP_ORDER :(Stop) -STR_ORDER_WAIT_TO_UNBUNCH :(vent med at pakke ud) +STR_ORDER_WAIT_TO_UNBUNCH :(vent med at afkoble) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Kan ikke bruge station){POP_COLOUR} {STRING} {STATION} {STRING} diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index caff3cc9e7..b2c3a9f219 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -289,7 +289,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Napsauta STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Suurenna/pienennä ikkuna STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Vierityspalkki – luettelon vieritys ylös/alas STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Vierityspalkki – luettelon vieritys vasemmalle/oikealle -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Tuhoa rakennuksia jne. ruudulta. Ctrl+napsautus+veto valitsee alueen vinottain. Paina lisäksi vaihtonäppäintä näyttääksesi vain kustannusarvion +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Tuhoa rakennuksia jne. ruudulta. Ctrl+napsautus+veto valitsee alueen vinottain. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion # Show engines button ###length VEHICLE_TYPES @@ -397,7 +397,7 @@ STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Avaa teo STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Avaa luettelo yhtiön junista. Ctrl+napsautus näyttää tai piilottaa kulkuneuvoryhmät päinvastoin kuin valitussa asetuksessa. STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Avaa luettelo yhtiön ajoneuvoista. Ctrl+napsautus näyttää tai piilottaa ajoneuvoryhmät päinvastoin kuin valitussa asetuksessa STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Avaa luettelo yhtiön laivoista. Ctrl+napsautus näyttää tai piilottaa kulkuneuvoryhmät, päinvastoin kuin valitussa asetuksessa -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Näytä luettelo yhtiön ilma-aluksista. Ctrl+napsautus näyttääksesi näyttää tai piilottaa ajoneuvoryhmiä, päinvastoin kuin valitussa asetuksessa +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Näytä luettelo yhtiön ilma-aluksista. Ctrl+napsautus näyttää tai piilottaa kulkuneuvoryhmät päinvastoin kuin valitussa asetuksessa STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Lähennä STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Loitonna STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Rakenna rautatieinfrastruktuuria @@ -424,9 +424,9 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Kuntien STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Rakenna tai luo teollisuutta STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Tieinfrastruktuurin rakentaminen STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Raitiotieinfrastruktuurin rakentaminen -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Istuta puita. Ctrl+napsautus+veto valitaksesi alueen vinottain. Painettaessa Shift näyttää vain kustannusarvion +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Istuta puita. Ctrl+napsautus+veto valitsee alueen vinottain. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Sijoita kyltti -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Sijoita objekti. Ctrl+napsautus+vedä valitsee alueen vinottain. Painettaessa Shit näyttää vain kustannusarvion +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Sijoita objekti. Ctrl+napsautus+veto valitsee alueen vinottain. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion # Scenario editor file menu ###length 7 @@ -920,7 +920,7 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Tukitarjous päättynyt:{}{}{STRING} välillä {STRING} – {STRING} ei enää tulla tukemaan STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Tuki vedetty pois:{}{}{STRING} välillä {STRING}-{STRING} ei enää tueta -STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Tuki tarjolla:{}{}Paikallisviranomaiset tukevat ensimmäistä {STRING} välillä {STRING} – {STRING} {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Tuki tarjolla:{}{}{STRING} välillä {STRING} – {STRING} ensimmäisenä kuljettava yhtiö saa kunnalta tuen, jonka kesto on {UNITS_YEARS_OR_MINUTES}! ###length 4 STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}{STRING} sai tuen!{}{}{STRING} välillä {STRING} – {STRING} tuottaa puolitoistakertaisesti seuraavat {UNITS_YEARS_OR_MINUTES}! STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}{STRING} sai tuen!{}{}{STRING} välillä {STRING} – {STRING} tuottaa kaksinkertaisesti seuraavat {UNITS_YEARS_OR_MINUTES}! @@ -1180,10 +1180,10 @@ STR_DISASTER_REDUCED :Vähennetty STR_DISASTER_NORMAL :Tavallinen ###length 4 -STR_SUBSIDY_X1_5 :x1.5 -STR_SUBSIDY_X2 :x2 -STR_SUBSIDY_X3 :x3 -STR_SUBSIDY_X4 :x4 +STR_SUBSIDY_X1_5 :× 1,5 +STR_SUBSIDY_X2 :× 2 +STR_SUBSIDY_X3 :× 3 +STR_SUBSIDY_X4 :× 4 ###length 4 STR_CLIMATE_TEMPERATE_LANDSCAPE :lauhkea maasto @@ -1677,7 +1677,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Valitse tapa, j STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :Pois käytöstä STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Kaksoisnapsautus STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Yksi napsautus (kun kohdistettuna) -STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Yksi napsautus (välitön) +STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Yksi napsautus (välittömästi) STR_CONFIG_SETTING_USE_RELAY_SERVICE :Käytä välityspalvelua: {STRING} STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Jos yhteyden muodostaminen palvelimeen epäonnistuu, yhteys voidaan muodostaa välityspalvelun kautta. ”Ei koskaan” estää tämän, ”kysy” kysyy ensin, ”salli” sallii kysymättä. @@ -2787,15 +2787,15 @@ STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Yksiraiteisen r STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Maglevin rakentaminen STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Rakenna rautatietä. Ctrl+napsautus poistaa rautatietä. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Rakenna rautatietä automaattisesti valittuun suuntaan. Ctrl+napsautus poistaaksesi rautatietä. Paina lisäksi vaihtonäppäintä näyttääksesi vain kustannusarvion +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Rakenna rautatietä automaattisesti valittuun suuntaan. Ctrl+napsautus poistaaksesi rautatietä. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Rakenna junavarikko (junien ostamista ja huoltoa varten). Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Rakenna reittipiste rautatielle. Ctrl+napsautus valitsee toisen reittipisteen, johon haluat tämän liitettävän. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion. STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Rakenna rautatieasema. Ctrl+napsautus valitsee toisen aseman, johon haluat tämän liitettävän. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Rakenna opastin rautatielle. Ctrl+napsautus rakentaa vaihtoehtoista opastintyyliä{}Napsautus+veto täyttää valitun rataosuuden opastimilla määrätyin välein. Ctrl+napsautus+veto täyttää seuraavaan risteykseen, asemaan tai opastimeen asti. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Rakenna rautatiesilta. Painettaessa Shift näyttää vain kustannusarvion +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Rakenna rautatiesilta. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Rakenna rautatietunneli. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Rautatien, opastimien, reittipisteiden ja asemien rakentaminen/poisto päälle/pois. Ctrl+napsautus poistaa myös reittipisteiden ja asemien raiteet -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Muunna/päivitä raidetyyppi. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Muunna tai päivitä raidetyyppi. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion STR_RAIL_NAME_RAILROAD :Rautatie STR_RAIL_NAME_ELRAIL :Sähköistetty rautatie @@ -2871,13 +2871,13 @@ STR_BRIDGE_TUBULAR_SILICON :Putkirakenne, p # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Tien rakentaminen STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Raitiotien rakentaminen -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Rakenna tieosuus. Ctrl+napsautus poistaa tieosuuden. Paina lisäksi vaihtonäppäintä näyttääksesi vain kustannusarvion -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Rakenna raitiotietä. Ctrl+napsautus poistaa raitiotieosuuden. Paina lisäksi vaihtonäppäintä näyttääksesi vain kustannusarvion. -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Rakenna tieosuus automaattisesti valittuun suuntaan. Ctrl vaihtaa rakennus-/poistotilan välillä. Shift vaihtaa rakennustilan ja kustannusarvion välillä -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Rakenna raitiotieosuus automaattisesti valittuun suuntaan. Ctrl+napsautus poistaa raitiotieosuuden. Paina lisäksi vaihtonäppäintä näyttääksesi vain kustannusarvion -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Rakenna ajoneuvovarikko (ajoneuvojen ostamista ja huoltoa varten). Painettaessa Shift näyttää vain kustannusarvion -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Rakenna raitiotievarikko (vaunujen ostamiseen ja korjaamiseen). Painettaessa Shift näyttää vain kustannusarvion -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Rakenna linja-autoasema. Ctrl+napsautus liittää asemat. Painettaessa Shift näyttää vain kustannusarvion +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Rakenna tieosuus. Ctrl+napsautus poistaa tieosuuden. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Rakenna raitiotietä. Ctrl+napsautus poistaa raitiotieosuuden. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Rakenna tieosuus automaattisesti valittuun suuntaan. Ctrl+napsautus poistaa tieosuuden. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Rakenna raitiotieosuus automaattisesti valittuun suuntaan. Ctrl+napsautus poistaa raitiotieosuuden. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Rakenna ajoneuvovarikko (ajoneuvojen ostamista ja huoltoa varten). Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Rakenna raitiovaunuvarikko (vaunujen ostamista ja huoltoa varten). Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Rakenna linja-autoasema. Ctrl+napsautus valitsee toisen aseman, johon haluat tämän liitettävän. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Rakenna raitiotien matkustaja-asema. Ctrl+napsautus valitsee toisen aseman, johon haluat tämän liitettävän. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion. STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Rakenna lastauslaituri. Ctrl+napsautus valitsee toisen aseman, johon haluat tämän liitettävän. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion. STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Rakenna raitiotien rahtiasema. Ctrl+napsautus valitaksesi toisen aseman, johon haluat tämän liitettävän. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion. @@ -2885,11 +2885,11 @@ STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Ota yksi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Rakenna maantiesilta. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion. STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Rakenna raitiotiesilta. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion. STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Rakenna maantietunneli. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Rakenna raitiotietunneli. Painettaessa Shift näyttää vain kustannusarvion +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Rakenna raitiotietunneli. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Tien rakentaminen/siirtäminen päälle/pois STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Vaihda raitiotien rakentamisen ja purkamisen välillä STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Muunna tai päivitä tien tyyppi. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion. -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Muunna tai päivitä raitiotien tyyppi. Painettaessa Shift näyttää vain kustannusarvion +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Muunna tai päivitä raitiotien tyyppi. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion STR_ROAD_NAME_ROAD :Tie STR_ROAD_NAME_TRAM :Raitiotie @@ -2958,14 +2958,14 @@ STR_STATION_BUILD_NOISE :{BLACK}Aiheutet # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Maastonmuokkaus -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Laske maaruudun kulmaa. Napsautus+veto laskee ensimmäisenä valittua kulmaa ja tasaa valitun alueen tämän kulman uudelle korkeudelle. Ctrl+napsautus+veto valitsee alueen vinottain. Paina lisäksi vaihtonäppäintä näyttääksesi vain kustannusarvion -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Nosta maaruudun kulmaa. Napsautus+veto nostaa ensimmäisenä valittua kulmaa ja tasaa valitun alueen tämän kulman uudelle korkeudelle. Ctrl+napsautus+veto valitsee alueen vinottain. Paina lisäksi vaihtonäppäintä näyttääksesi vain kustannusarvion -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Tasoita maata ensimmäisen valitun kulman korkeudelle. Ctrl+napsautus+veto valitsee alueen vinottain. Painettaessa Shift näyttää vain kustannusarvion +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Laske maaruudun kulmaa. Napsautus+veto laskee ensimmäisenä valittua kulmaa ja tasaa valitun alueen tämän kulman uudelle korkeudelle. Ctrl+napsautus+veto valitsee alueen vinottain. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Nosta maaruudun kulmaa. Napsautus+veto nostaa ensimmäisenä valittua kulmaa ja tasaa valitun alueen tämän kulman uudelle korkeudelle. Ctrl+napsautus+veto valitsee alueen vinottain. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Tasoita maata ensimmäisen valitun kulman korkeudelle. Ctrl+napsautus+veto valitsee alueen vinottain. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Osta maata tulevaa käyttöä varten. Ctrl+napsautus+veto valitsee alueen vinottain. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objektin valinta -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Valitse rakennettava objekti. Ctrl+napsautus+veto valitaksesi alueen vinottain. Painettaessa Shift näyttää vain kustannusarvion +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Valitse rakennettava objekti. Ctrl+napsautus+veto valitaksesi alueen vinottain. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Valitse rakennettavan objektin luokka STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Objektin esikatselu STR_OBJECT_BUILD_SIZE :{BLACK}Koko: {GOLD}{NUM}×{NUM} ruutua @@ -3685,7 +3685,7 @@ STR_GOALS_TEXT :{ORANGE}{STRING STR_GOALS_NONE :{ORANGE}- Ei mitään - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Keskitä päänäkymä laitokseen/kuntaan/ruutuun napsauttamalla tavoitetta. Ctrl+napsautus avaa uuden näkymäikkunan laitoksen/kunnan/ruudun sijaintiin. +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Keskitä päänäkymä laitokseen/kuntaan/ruutuun napsauttamalla tavoitetta. Ctrl+napsautus avaa uuden näkymäikkunan laitoksen/kunnan/ruudun sijaintiin # Goal question window STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Kysymys @@ -3720,8 +3720,8 @@ STR_SUBSIDIES_OFFERED_TITLE :{BLACK}Tarjotut STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING} välille {STRING} – {STRING}{YELLOW} ({STRING}) STR_SUBSIDIES_NONE :{ORANGE}- Ei mitään - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Käytetyt tuet: -STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} kohteesta {STRING} kohteeseen {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) -STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Napsauta kuljetusyhteyttä keskittääksesi päänäkymän tuotantolaitokseen tai kuntaan. Ctrl+napsautus avaa uuden näkymäikkunan laitoksen tai kunnan sijaintiin. +STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} välillä {STRING} – {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) +STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Napsauta kuljetusyhteyttä keskittääksesi päänäkymän tuotantolaitokseen tai kuntaan. Ctrl+napsautus avaa uuden näkymäikkunan laitoksen tai kunnan sijaintiin STR_SUBSIDIES_OFFERED_EXPIRY_DATE :viimeistään {DATE_SHORT} STR_SUBSIDIES_OFFERED_EXPIRY_TIME :jäljellä {UNITS_MONTHS_OR_MINUTES} STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :{DATE_SHORT} asti @@ -4120,15 +4120,15 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Osta ja ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu raideliikenneväline. Vaihto+napsautus näyttää vain kustannusarvion -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu ajoneuvo. Painettaessa Shift näyyää vain kustannusarvion. -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu laiva. Paina lisäksi vaihtonäppäintä näyttääksesi vain kustannusarvion -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu ilma-alus. Painettaessa Shift näyttää vain kustannusarvion +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu ajoneuvo. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu laiva. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu ilma-alus. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja sovita valittu raideliikenneväline. Painettaessa Shift näyttää vain kustannusarvion +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja sovita valittu raideliikenneväline. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja sovita valittu ajoneuvo. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion -STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja sovita valittu laiva. Paina lisäksi vaihtonäppäintä näyttääksesi vain kustannusarvion -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja sovita valittu ilma-alus. Shift+napsautus näyttää vain kustannusarvion +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja sovita valittu laiva. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja sovita valittu ilma-alus. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Nimeä @@ -4221,7 +4221,7 @@ STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Kloonaa ###length VEHICLE_TYPES STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Osta kopio junasta kaikkine vaunuineen. Napsauta tätä painiketta ja sen jälkeen junaa varikon sisä- tai ulkopuolella. Ctrl+napsautus jakaa käskyt. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Tämä ostaa kopion ajoneuvosta. Napsauta tätä painiketta ja sen jälkeen ajoneuvoa varikon sisä- tai ulkopuolella. Ctrl+napsautus jakaa käskyt. Painettaessa Shift näyttää vain kustannusarvion +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Tämä ostaa kopion ajoneuvosta. Napsauta tätä painiketta ja sen jälkeen ajoneuvoa varikon sisä- tai ulkopuolella. Ctrl+napsautus jakaa käskyt. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Osta laivan kopio. Napsauta tätä painiketta ja sitten laivaa telakan sisä- tai ulkopuolella. Ctrl+napsautus jakaa komennot. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion. STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Osta ilma-aluksen kopio. Napsauta tätä painiketta ja sitten ilma-alusta lentokonehallin sisä- tai ulkopuolella. Ctrl+napsautus jakaa komennot. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion. @@ -4365,9 +4365,9 @@ STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Sovita i ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Näytä junan käskyt. Ctrl+napsautus näyttää junan aikataulun. -STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Näytä ajoneuvon käskyt. Ctrl+napsautus näyttää ajoneuvon aikataulun. -STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Näytä laivan käskyt. Ctrl+Click näyttää laivan aikataulun -STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Näytä ilma-aluksen käskyt. Ctrl+napsautus näyttää ilma-aluksen aikataulun. +STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Näytä ajoneuvon käskyt. Ctrl+napsautus näyttää ajoneuvon aikataulun +STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Näytä laivan käskyt. Ctrl+napsautus näyttää laivan aikataulun +STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Näytä ilma-aluksen käskyt. Ctrl+napsautus näyttää ilma-aluksen aikataulun ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Näytä junan tiedot diff --git a/src/lang/french.txt b/src/lang/french.txt index 24d5f06f59..88351d273f 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -4644,7 +4644,7 @@ STR_ORDER_REFIT_ORDER :(Réaménager p STR_ORDER_REFIT_STOP_ORDER :(Réaménager pour {STRING} et arrêt) STR_ORDER_STOP_ORDER :(Arrêt) -STR_ORDER_WAIT_TO_UNBUNCH :(attendre la répartition) +STR_ORDER_WAIT_TO_UNBUNCH :(Attendre la répartition) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Station inutilisable){POP_COLOUR} {STRING} {STATION} {STRING} diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 6a34cdf651..b9b503ba75 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -4644,7 +4644,7 @@ STR_ORDER_REFIT_ORDER :(Adaptar para { STR_ORDER_REFIT_STOP_ORDER :(Adaptar para {STRING} e parar) STR_ORDER_STOP_ORDER :(Parar) -STR_ORDER_WAIT_TO_UNBUNCH :(esperar por desagrupar) +STR_ORDER_WAIT_TO_UNBUNCH :(Esperar por desagrupar) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Não pode usar a estação){POP_COLOUR} {STRING} {STATION} {STRING} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 0fff9c160c..17a7d092ea 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -527,7 +527,7 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Пока STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Покаже список завдань STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Показати графіки компаній і тарифи доставки вантажів STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Покаже таблицю компаній -STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Фінансувати будівництво нової промисловості +STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Показує перелік підприємств, ланцюг підприємств або фінансування будівництва нової промисловості STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Показує список поїздів компанії. Ctrl+клац показує або приховує групи, протилежно до обраного налаштування STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Показує список дорожнього транспорту компанії. Ctrl+клац показує або приховує групи, протилежно до обраного налаштування STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Показати список кораблів компанії. Ctrl+клац показує або приховує групи, протилежно до обраного налаштування @@ -554,7 +554,7 @@ STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Пере STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Натисніть, щоб ввести рік початку STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Показати мапу, додаткове вікно, список позначок, або перелік міст чи підприємств STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Відкрити меню створення ландшафту або нового світу -STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Створення міст +STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Будування або створення міст STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Створення або будування виробництва STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Будівництво дорожньої інфраструктури STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Будівництво трамвайних колій @@ -1470,7 +1470,7 @@ STR_CONFIG_SETTING_CATCHMENT :Більш ре STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :При включенні розмір зони покриття станції залежить від її типу та розміру STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Підприємства з власними станціями обслуговують станції гравців: {STRING} -STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Якщо увімкнено - підприємства, що мають власні станції завантаження (наприклад, нафтові платформ), зможуть обслуговуватися також і збудованими поруч станціями гравців.{}При відключенні - підприємства будуть виконувати завантаження тільки через свої внутрішні станції, а ці станції будуть обслуговувати лише своє підприємство. +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Якщо увімкнено підприємства, що мають власні станції завантаження (наприклад, нафтові платформ), зможуть обслуговуватися також і збудованими поруч станціями гравців. При відключенні підприємства будуть виконувати завантаження тільки через свої внутрішні станції, а ці станції будуть обслуговувати лише своє підприємство. STR_CONFIG_SETTING_EXTRADYNAMITE :Дозволити видаляти більше міських будівель: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :При включенні видалення міських будівель та інфраструктури стає біль простішим @@ -1712,7 +1712,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Оберіть STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Грубість ландшафту: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Тільки для TerraGenesis) Оберіть частоту пагорбів: Плавний пейзаж має менше пагорбів, вони менш круті. Грубий ландшафт має багато пагорбів, що можуть повторюватись один за одним +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Оберіть форму і кількість пагорбів. Плавний пейзаж має менше пагорбів, вони менш круті. Грубий ландшафт має багато малих пагорбів ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :дуже плавно STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :плавно @@ -1977,7 +1977,7 @@ STR_CONFIG_SETTING_NOSERVICE :Не відпр STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Включення цієї опції дозволяє не проводити автоматичний техогляд у разі, якщо поломки транспорту вимкнено. STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Зменшення швидкості завантаження потягів, які довші за станцію: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Якщо увімкнуто, потяги довші за станцію завантажуються значно повільніше, ніж потяги які вміщуються на станції. Налаштування не впливає на пошук шляху. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Якщо увімкнуто, потяги довші за станцію завантажуються значно повільніше, ніж потяги які вміщуються на станції. Налаштування не впливає на пошук шляху STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Враховувати обмеження швидкості вагонів: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :При включенні максимальна швидкість потяга враховує обмеження швидкості вагонів. @@ -2048,7 +2048,7 @@ STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Ніколи STR_CONFIG_SETTING_ECONOMY_TYPE :Тип економіки: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Плавна економіка здійснює часті зміни обсягів виробництва малими порціями. Заморожена економіка не допускає зміни обсягів виробництва і закриття підприємств. Це налаштування може не працювати, якщо використовується підприємства з NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Плавна економіка здійснює часті зміни обсягів виробництва малими порціями. Заморожена економіка не допускає зміни обсягів виробництва і закриття підприємств. Це налаштування може не працювати, якщо використовуються підприємства з NewGRF. ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Оригінальна STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Плавно @@ -2173,13 +2173,13 @@ STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Час між STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Час між перерозрахунками компонента графа зв'язків. На початку перерозрахунку утворюється з'єднання, яке існує обраний час. Чим менше це значення, тим більша вірогідність, що з'єднання розірветься раніше очікуваного, після чого гра зупиниться. Чим більше це значення, тим довше обраховуватиметься розподілення вантажів при зміні маршрутів STR_CONFIG_SETTING_DISTRIBUTION_PAX :Режим розподілу для пасажирів: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :В "симетричному" режимі від станції A до станції B відправлятиметься приблизно стільки ж пасажирів, як від B до A. В "асиметричному" режимі дозволяється відправляти довільну кількість пасажирів в обох напрямках. Ручний режим означає, що розподіл пасажирів не здійснюватиметься автоматично. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :В "симетричному" режимі від станції A до станції Б відправлятиметься приблизно стільки ж пасажирів, як від 0Ю до A. В "асиметричному" режимі дозволяється відправляти довільну кількість пасажирів в обох напрямках. Ручний режим означає, що розподіл пасажирів не здійснюватиметься автоматично STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Режим розподілу для пошти: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :В "симетричному" режимі від станції A до станції B надсилатиметься приблизно стільки ж пошти, як від B до A. В "асиметричному" режимі дозволяється надсилати довільну кількість пошти в обох напрямках. Ручний режим означає, що розподіл пошти не здійснюватиметься автоматично. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :В "симетричному" режимі від станції A до станції Б надсилатиметься приблизно стільки ж пошти, як від Б до A. В "асиметричному" режимі дозволяється надсилати довільну кількість пошти в обох напрямках. Ручний режим означає, що розподіл пошти не здійснюватиметься автоматично STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Режим розподілу для броньованого транспорту: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :БРОНЬОВАНИЙ клас вантажу містить: коштовності — в помірному ландшафті, діаманти — в субтропічному чи золото — в субарктичному. NewGRF може змінювати це. В "симетричному" режимі від станції A до станції B надсилатиметься приблизно стільки ж вантажів, як від B до A. В "асиметричному" режимі дозволяється надсилати довільну кількість вантажів в обох напрямках. "Ручний" режим означає, що розподіл цих вантажів не здійснюватиметься автоматично. Рекомендується встановити "асиметричний" або "ручний" режим, якщо гра відбувається в субарктичному ландшафті, тому що банки не надсилають золото назад до шахт. В помірному або субтропічному ландшафті можна також вибрати "симетричний" режим, оскільки банки будуть надсилають коштовності назад до оригінального банку у вигляді вантажу з якимись цінностями. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :БРОНЬОВАНИЙ клас вантажу: коштовності — в помірному ландшафті, діаманти — в субтропічному, золото — в субарктичному. NewGRFи можуть змінювати це налаштування. В "симетричному" режимі від станції A до станції Б надсилатиметься приблизно стільки ж вантажів, як від Б до A. В "асиметричному" режимі дозволяється надсилати довільну кількість вантажів в обох напрямках. "Ручний" режим означає, що розподіл цих вантажів не здійснюватиметься автоматично. Рекомендується встановити "асиметричний" або "ручний" режим, якщо гра відбувається в субарктичному або субтропічному ландшафтах, у яких банки тільки отримують золото. В помірному ландшафті можна також вибрати "симетричний" режим, оскільки банки будуть повертати коштовності до банку-відправника STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Режим розподілу для інших видів вантажу: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :«Асиметричний» означає можливість відправки довільної кількості вантажу в будь-якому напрямку. «Ручний» означає, неавтоматичний розподіл для цих вантажів. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :«Асиметричний» означає можливість відправки довільної кількості вантажу в будь-якому напрямку. «Ручний» означає, неавтоматичний розподіл для цих вантажів ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :ручний STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :асиметричний @@ -2934,7 +2934,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Буду STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Будувати колійні сигнали. Ctrl+клац переключає семафори/світлофори{}Ctrl+протяжка будує сигнали вздовж ділянки колії з обраним проміжком. Ctrl+клац+протяжка будує сигнали до наступної стрілки, станції чи сигналу. Утримуйте Shift для показу очікуваних витрат STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Будувати залізничний міст. Утримуйте Shift для показу витрат на будівництво STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Будування тунелю. Утримуйте Shift для показу витрат на будівництво -STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Будувати/демонтувати колію, сигнали, точки маршруту і станції. Утримання Ctrl також демонтує колію з точок маршрутів і станцій +STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Будування/демонтування колії, сигналів, точок маршрутів і станцій. Ctrl+клац демонтує колію з точок маршрутів і станцій STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Модернізація колії. Утримуйте Shift для показу очікуваних витрат STR_RAIL_NAME_RAILROAD :Звичайна колія @@ -3130,7 +3130,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}Створити випадкову ділянку @@ -3199,7 +3199,7 @@ STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Спож STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Будинки STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Натисніть на підприємство аби побачити його постачальників та покупців STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Натисніть на вантаж аби побачити його постачальників та покупців -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Показати ланцюг +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Ланцюг підпримств STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Показати виробників та споживачів STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Приєднати до мінікарти STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Ви також можете вибирати виробництво на мінікарті @@ -4243,7 +4243,7 @@ STR_CARGO_TYPE_FILTER_NONE :нема ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Список поїздів. Клацніть на поїзд для інформації. Ctrl+клац мишею вимикає показ типу транспорту STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Список автомобілів. Клацніть на авто для отримання інформації. Ctrl+клац мишею вимикає показ типу транспорту -STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Список кораблів. Клацніть на корабель для отримання інформації. Ctrl+клац мишею вимикає показ типу транспорту +STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Список кораблів. Клацніть на корабель для отримання інформації. Ctrl+клац сховає показ цього типу кораблів STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Список літальних апаратів. Клацніть на літальному апараті для отримання інформації. Ctrl+клац мишею сховає показ цього типу транспорту ###length VEHICLE_TYPES @@ -4265,7 +4265,7 @@ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Купи STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Придбати обраний літальний апарат. Утримуйте Shift для показу орієнтовних витрат ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбайте та переобладнайте виділений поїзд. Shift+клац показує орієнтовну вартість без покупки +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбайте та переобладнайте виділений потяг. Утримуйте Shift для показу орієнтовних витрат STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбати та переобладнати дорожній транспорт. Утримуйте Shift для показу орієнтовних витрат STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбати та переобладнати виділене судно. Утримуйте Shift, щоб побачити тільки орієнтовну вартість STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Придбайте та переобладнайте виділений повітряний апарат. Утримуйте Shift, щоб побачити тільки орієнтовну вартість @@ -4361,7 +4361,7 @@ STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Клон ###length VEHICLE_TYPES STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Купити копію поїзда, включно з усіма автомобілями. Натисніть на цю кнопку, а потім на поїзд в депо або ззовні. Ctrl+клац мишею дозволить поділитися спільними завданнями. Shift+клац мишею покаже орієнтовні витрати на придбання -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Купити копію авто. Натисніть на цю кнопку і потім на авто в депо або ззовні. Утримуйте Ctrl для спільного завдання. Утримуйте Shift для показу витрат на придбання +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Купити копію дорожнього транспорту. Натисніть на цю кнопку і потім на транспорт в гаражі або ззовні. Ctrl+клац для копіювання спільного завдання. Утримуйте Shift для показу орієнтовних витрат STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Купити копію корабля. Натисніть на цю кнопку, і потім на корабель в елінгу або ззовні. Ctrl+клац для копіювання спільного завдання. Утримуйте Shift для показу витрат на придбання STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Купити копію літака. Натисніть на цю кнопку і потім на літак в ангарі або ззовні. Утримуйте Ctrl для спільного завдання. Утримуйте Shift для показу витрат на придбання @@ -4475,9 +4475,9 @@ STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Показати місце розташування потяга в центрі екрану. Подвійний клац для показу потяга в центрі екрану.Ctrl+клац мишею відкриє нове вікно у місці розташування потяга -STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Показати транспорт у вікні. Подвійний клац для показу транспорту в центрі екрану. Ctrl+клац мишою для руху за транспортом. -STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Показати місце розташування корабля в центрі екрану. Подвійний клац для показу корабля в центрі екрану.Ctrl+клац мишою відкриє нове вікно у місці розташування корабля +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Показує потяг у центрі екрану. Подвійний клац для руху за потягом у головному вікні. Ctrl+клац мишею відкриє додаткове вікно з потягом у центрі +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Показати транспорт у головному вікні. Подвійний клац для руху за транспортом у головному вікні. Ctrl+клац мишею відкриє додаткове вікно з транспортом у центрі +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Показує корабель у головному вікні. Подвійний клац для руху за кораблем у головному вікні. Ctrl+клац мишею відкриє нове вікно з кораблем у центрі STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Показати авіатранспорт у центрі головного вікна. Подвійний клац для руху за авіатранспортом у головному вікні. Ctrl+клац мишою для показу авіатранспорту в додатковому вікні ###length VEHICLE_TYPES @@ -4487,10 +4487,10 @@ STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Напр STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Направити літак в ангар. Ctrl+клац тільки для техогляду ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Купити копію поїзда з усіма вагонами. Утримуйте Ctrl для спільного завдання. Утримуйте Shift для показу витрат на придбання +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Купити копію потяга з усіма вагонами. Ctrl+клац для копіювання спільного завдання. Утримуйте Shift для показу витрат на придбання STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Купити копію авто. Ctrl+клац для копіювання спільного завдання. Утримуйте Shift для показу орієнтовних витрат -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Купити копію корабля. Утримуйте Ctrl для спільного завдання. Утримуйте Shift для показу витрат на придбання -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Купити копію літака. Утримуйте Ctrl для спільного завдання. Утримуйте Shift для показу витрат на придбання +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Купити копію корабля. Ctrl+клац для копіювання спільного завдання. Утримуйте Shift для показу витрат на придбання +STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Купити копію літака. Ctrl+клац для копіювання спільного завдання. Утримуйте Shift для показу орієнтовних витрат STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Примусити проігнорувати сигнал! STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Розвернути поїзд @@ -4924,7 +4924,7 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Регі STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Перемкнути перевірку регістру при порівнянні рядків журналу АІ з сигнальним рядком STR_AI_DEBUG_CONTINUE :{BLACK}Продовжити STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Зняти з паузи і продовжити ШІ -STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Відобразити результати зневадження цього ШІ +STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Відобразити результати зневадження цього ШІ. Ctrl+клац мишею відкриє нове вікно з результатами STR_AI_GAME_SCRIPT :{BLACK}Ігровий скрипт STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Перевірити журнал ігрового скрипту. Ctrl+клац відкриє журнал у новому вікні From 8d312b305bccadcd53cd4c717d274cb76adc4fbf Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 29 Mar 2024 14:49:48 +0000 Subject: [PATCH 203/695] Codechange: Replace currency macros with functions. (#12396) --- src/company_gui.cpp | 2 +- src/currency.cpp | 6 ++--- src/currency.h | 24 ++++++++++++++---- src/graph_gui.cpp | 2 +- src/settings.cpp | 2 +- src/settings_gui.cpp | 60 ++++++++++++++++++++++---------------------- src/strings.cpp | 6 ++--- src/survey.cpp | 2 +- 8 files changed, 59 insertions(+), 45 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 253bc187ed..21743d31f9 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -2568,7 +2568,7 @@ struct CompanyWindow : Window default: NOT_REACHED(); case WID_C_GIVE_MONEY: { - Money money = std::strtoull(str, nullptr, 10) / _currency->rate; + Money money = std::strtoull(str, nullptr, 10) / GetCurrency().rate; Command::Post(STR_ERROR_CAN_T_GIVE_MONEY, money, (CompanyID)this->window_number); break; } diff --git a/src/currency.cpp b/src/currency.cpp index 98a89cda6e..afc735d4d4 100644 --- a/src/currency.cpp +++ b/src/currency.cpp @@ -26,7 +26,7 @@ * | | Euro year | | | | name * | | | | | | | | */ /** The original currency specifications. */ -static const CurrencySpec origin_currency_specs[CURRENCY_END] = { +static const std::array origin_currency_specs = {{ { 1, "", CF_NOEURO, "\u00a3", "", "GBP", 0, STR_GAME_OPTIONS_CURRENCY_GBP }, ///< british pound { 2, "", CF_NOEURO, "$", "", "USD", 0, STR_GAME_OPTIONS_CURRENCY_USD }, ///< american dollar { 2, "", CF_ISEURO, "\u20ac", "", "EUR", 0, STR_GAME_OPTIONS_CURRENCY_EUR }, ///< euro @@ -71,10 +71,10 @@ static const CurrencySpec origin_currency_specs[CURRENCY_END] = { { 5, "", CF_NOEURO, "RM", "", "MYR", 0, STR_GAME_OPTIONS_CURRENCY_MYR }, ///< Malaysian Ringgit { 1, "", 2014, "", NBSP "Ls", "LVL", 1, STR_GAME_OPTIONS_CURRENCY_LVL }, ///< latvian lats { 400, "", 2002, "", "$00", "PTE", 1, STR_GAME_OPTIONS_CURRENCY_PTE }, ///< portuguese escudo -}; +}}; /** Array of currencies used by the system */ -CurrencySpec _currency_specs[CURRENCY_END]; +std::array _currency_specs; /** * This array represent the position of OpenTTD's currencies, diff --git a/src/currency.h b/src/currency.h index 1ae229f772..71d1315aca 100644 --- a/src/currency.h +++ b/src/currency.h @@ -11,7 +11,7 @@ #define CURRENCY_H #include "timer/timer_game_calendar.h" -#include "string_func.h" +#include "settings_type.h" #include "strings_type.h" static constexpr TimerGameCalendar::Year CF_NOEURO = 0; ///< Currency never switches to the Euro (as far as known). @@ -99,11 +99,25 @@ struct CurrencySpec { } }; -extern CurrencySpec _currency_specs[CURRENCY_END]; +extern std::array _currency_specs; -/* XXX small hack, but makes the rest of the code a bit nicer to read */ -#define _custom_currency (_currency_specs[CURRENCY_CUSTOM]) -#define _currency ((const CurrencySpec*)&_currency_specs[GetGameSettings().locale.currency]) +/** + * Get the custom currency. + * @return Reference to custom currency. + */ +inline CurrencySpec &GetCustomCurrency() +{ + return _currency_specs[CURRENCY_CUSTOM]; +} + +/** + * Get the currently selected currency. + * @return Read-only reference to the current currency. + */ +inline const CurrencySpec &GetCurrency() +{ + return _currency_specs[GetGameSettings().locale.currency]; +} uint64_t GetMaskOfAllowedCurrencies(); void ResetCurrencies(bool preserve_custom = true); diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 743bf8bda8..919474d911 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -1252,7 +1252,7 @@ struct PerformanceRatingDetailWindow : Window { * least 999 999 M which roughly is equally long. Furthermore if the * exchange rate is that high, 999 999 k is usually not enough anymore * to show the different currency numbers. */ - if (_currency->rate < 1000) max /= _currency->rate; + if (GetCurrency().rate < 1000) max /= GetCurrency().rate; SetDParam(0, max); SetDParam(1, max); uint score_detail_width = GetStringBoundingBox(STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY).width; diff --git a/src/settings.cpp b/src/settings.cpp index 88d96c0b48..6ba8df735e 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1280,7 +1280,7 @@ static void HandleSettingDescs(IniFile &generic_ini, IniFile &private_ini, IniFi proc(secrets_ini, table, "patches", &_settings_newgame, only_startup); } - proc(generic_ini, _currency_settings, "currency", &_custom_currency, only_startup); + proc(generic_ini, _currency_settings, "currency", &GetCustomCurrency(), only_startup); proc(generic_ini, _company_settings, "company", &_settings_client.company, only_startup); if (!only_startup) { diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 29f10e21f6..ba0ce024f7 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -397,7 +397,7 @@ struct GameOptionsWindow : Window { /* Add non-custom currencies; sorted naturally */ for (const CurrencySpec ¤cy : _currency_specs) { - int i = ¤cy - _currency_specs; + int i = ¤cy - _currency_specs.data(); if (i == CURRENCY_CUSTOM) continue; if (currency.code.empty()) { list.push_back(std::make_unique(currency.name, i, HasBit(disabled, i))); @@ -2689,7 +2689,7 @@ struct GameSettingsWindow : Window { if (this->last_clicked == pe && !sd->IsBoolSetting() && !(sd->flags & SF_GUI_DROPDOWN)) { int64_t value64 = value; /* Show the correct currency-translated value */ - if (sd->flags & SF_GUI_CURRENCY) value64 *= _currency->rate; + if (sd->flags & SF_GUI_CURRENCY) value64 *= GetCurrency().rate; CharSetFilter charset_filter = CS_NUMERAL; //default, only numeric input allowed if (sd->min < 0) charset_filter = CS_NUMERAL_SIGNED; // special case, also allow '-' sign for negative input @@ -2725,7 +2725,7 @@ struct GameSettingsWindow : Window { long long llvalue = atoll(str); /* Save the correct currency-translated value */ - if (sd->flags & SF_GUI_CURRENCY) llvalue /= _currency->rate; + if (sd->flags & SF_GUI_CURRENCY) llvalue /= GetCurrency().rate; value = ClampTo(llvalue); } else { @@ -2979,22 +2979,22 @@ struct CustomCurrencyWindow : Window { void SetButtonState() { - this->SetWidgetDisabledState(WID_CC_RATE_DOWN, _custom_currency.rate == 1); - this->SetWidgetDisabledState(WID_CC_RATE_UP, _custom_currency.rate == UINT16_MAX); - this->SetWidgetDisabledState(WID_CC_YEAR_DOWN, _custom_currency.to_euro == CF_NOEURO); - this->SetWidgetDisabledState(WID_CC_YEAR_UP, _custom_currency.to_euro == CalendarTime::MAX_YEAR); + this->SetWidgetDisabledState(WID_CC_RATE_DOWN, GetCustomCurrency().rate == 1); + this->SetWidgetDisabledState(WID_CC_RATE_UP, GetCustomCurrency().rate == UINT16_MAX); + this->SetWidgetDisabledState(WID_CC_YEAR_DOWN, GetCustomCurrency().to_euro == CF_NOEURO); + this->SetWidgetDisabledState(WID_CC_YEAR_UP, GetCustomCurrency().to_euro == CalendarTime::MAX_YEAR); } void SetStringParameters(WidgetID widget) const override { switch (widget) { case WID_CC_RATE: SetDParam(0, 1); SetDParam(1, 1); break; - case WID_CC_SEPARATOR: SetDParamStr(0, _custom_currency.separator); break; - case WID_CC_PREFIX: SetDParamStr(0, _custom_currency.prefix); break; - case WID_CC_SUFFIX: SetDParamStr(0, _custom_currency.suffix); break; + case WID_CC_SEPARATOR: SetDParamStr(0, GetCustomCurrency().separator); break; + case WID_CC_PREFIX: SetDParamStr(0, GetCustomCurrency().prefix); break; + case WID_CC_SUFFIX: SetDParamStr(0, GetCustomCurrency().suffix); break; case WID_CC_YEAR: - SetDParam(0, (_custom_currency.to_euro != CF_NOEURO) ? STR_CURRENCY_SWITCH_TO_EURO : STR_CURRENCY_SWITCH_TO_EURO_NEVER); - SetDParam(1, _custom_currency.to_euro); + SetDParam(0, (GetCustomCurrency().to_euro != CF_NOEURO) ? STR_CURRENCY_SWITCH_TO_EURO : STR_CURRENCY_SWITCH_TO_EURO_NEVER); + SetDParam(1, GetCustomCurrency().to_euro); break; case WID_CC_PREVIEW: @@ -3039,19 +3039,19 @@ struct CustomCurrencyWindow : Window { switch (widget) { case WID_CC_RATE_DOWN: - if (_custom_currency.rate > 1) _custom_currency.rate--; - if (_custom_currency.rate == 1) this->DisableWidget(WID_CC_RATE_DOWN); + if (GetCustomCurrency().rate > 1) GetCustomCurrency().rate--; + if (GetCustomCurrency().rate == 1) this->DisableWidget(WID_CC_RATE_DOWN); this->EnableWidget(WID_CC_RATE_UP); break; case WID_CC_RATE_UP: - if (_custom_currency.rate < UINT16_MAX) _custom_currency.rate++; - if (_custom_currency.rate == UINT16_MAX) this->DisableWidget(WID_CC_RATE_UP); + if (GetCustomCurrency().rate < UINT16_MAX) GetCustomCurrency().rate++; + if (GetCustomCurrency().rate == UINT16_MAX) this->DisableWidget(WID_CC_RATE_UP); this->EnableWidget(WID_CC_RATE_DOWN); break; case WID_CC_RATE: - SetDParam(0, _custom_currency.rate); + SetDParam(0, GetCustomCurrency().rate); str = STR_JUST_INT; len = 5; line = WID_CC_RATE; @@ -3060,7 +3060,7 @@ struct CustomCurrencyWindow : Window { case WID_CC_SEPARATOR_EDIT: case WID_CC_SEPARATOR: - SetDParamStr(0, _custom_currency.separator); + SetDParamStr(0, GetCustomCurrency().separator); str = STR_JUST_RAW_STRING; len = 7; line = WID_CC_SEPARATOR; @@ -3068,7 +3068,7 @@ struct CustomCurrencyWindow : Window { case WID_CC_PREFIX_EDIT: case WID_CC_PREFIX: - SetDParamStr(0, _custom_currency.prefix); + SetDParamStr(0, GetCustomCurrency().prefix); str = STR_JUST_RAW_STRING; len = 15; line = WID_CC_PREFIX; @@ -3076,26 +3076,26 @@ struct CustomCurrencyWindow : Window { case WID_CC_SUFFIX_EDIT: case WID_CC_SUFFIX: - SetDParamStr(0, _custom_currency.suffix); + SetDParamStr(0, GetCustomCurrency().suffix); str = STR_JUST_RAW_STRING; len = 15; line = WID_CC_SUFFIX; break; case WID_CC_YEAR_DOWN: - _custom_currency.to_euro = (_custom_currency.to_euro <= MIN_EURO_YEAR) ? CF_NOEURO : _custom_currency.to_euro - 1; - if (_custom_currency.to_euro == CF_NOEURO) this->DisableWidget(WID_CC_YEAR_DOWN); + GetCustomCurrency().to_euro = (GetCustomCurrency().to_euro <= MIN_EURO_YEAR) ? CF_NOEURO : GetCustomCurrency().to_euro - 1; + if (GetCustomCurrency().to_euro == CF_NOEURO) this->DisableWidget(WID_CC_YEAR_DOWN); this->EnableWidget(WID_CC_YEAR_UP); break; case WID_CC_YEAR_UP: - _custom_currency.to_euro = Clamp(_custom_currency.to_euro + 1, MIN_EURO_YEAR, CalendarTime::MAX_YEAR); - if (_custom_currency.to_euro == CalendarTime::MAX_YEAR) this->DisableWidget(WID_CC_YEAR_UP); + GetCustomCurrency().to_euro = Clamp(GetCustomCurrency().to_euro + 1, MIN_EURO_YEAR, CalendarTime::MAX_YEAR); + if (GetCustomCurrency().to_euro == CalendarTime::MAX_YEAR) this->DisableWidget(WID_CC_YEAR_UP); this->EnableWidget(WID_CC_YEAR_DOWN); break; case WID_CC_YEAR: - SetDParam(0, _custom_currency.to_euro); + SetDParam(0, GetCustomCurrency().to_euro); str = STR_JUST_INT; len = 7; line = WID_CC_YEAR; @@ -3118,25 +3118,25 @@ struct CustomCurrencyWindow : Window { switch (this->query_widget) { case WID_CC_RATE: - _custom_currency.rate = Clamp(atoi(str), 1, UINT16_MAX); + GetCustomCurrency().rate = Clamp(atoi(str), 1, UINT16_MAX); break; case WID_CC_SEPARATOR: // Thousands separator - _custom_currency.separator = str; + GetCustomCurrency().separator = str; break; case WID_CC_PREFIX: - _custom_currency.prefix = str; + GetCustomCurrency().prefix = str; break; case WID_CC_SUFFIX: - _custom_currency.suffix = str; + GetCustomCurrency().suffix = str; break; case WID_CC_YEAR: { // Year to switch to euro TimerGameCalendar::Year val = atoi(str); - _custom_currency.to_euro = (val < MIN_EURO_YEAR ? CF_NOEURO : std::min(val, CalendarTime::MAX_YEAR)); + GetCustomCurrency().to_euro = (val < MIN_EURO_YEAR ? CF_NOEURO : std::min(val, CalendarTime::MAX_YEAR)); break; } } diff --git a/src/strings.cpp b/src/strings.cpp index 0b40014476..e02ae292a4 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -542,7 +542,7 @@ static void FormatGenericCurrency(StringBuilder &builder, const CurrencySpec *sp } const char *separator = _settings_game.locale.digit_group_separator_currency.c_str(); - if (StrEmpty(separator)) separator = _currency->separator.c_str(); + if (StrEmpty(separator)) separator = GetCurrency().separator.c_str(); if (StrEmpty(separator)) separator = _langpack.langpack->digit_group_separator_currency; FormatNumber(builder, number, separator); if (number_str != STR_NULL) { @@ -1324,11 +1324,11 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara } case SCC_CURRENCY_SHORT: // {CURRENCY_SHORT} - FormatGenericCurrency(builder, _currency, args.GetNextParameter(), true); + FormatGenericCurrency(builder, &GetCurrency(), args.GetNextParameter(), true); break; case SCC_CURRENCY_LONG: // {CURRENCY_LONG} - FormatGenericCurrency(builder, _currency, args.GetNextParameter(), false); + FormatGenericCurrency(builder, &GetCurrency(), args.GetNextParameter(), false); break; case SCC_DATE_TINY: // {DATE_TINY} diff --git a/src/survey.cpp b/src/survey.cpp index f9310c976d..89c699ad0d 100644 --- a/src/survey.cpp +++ b/src/survey.cpp @@ -166,7 +166,7 @@ void SurveySettings(nlohmann::json &survey, bool skip_if_default) for (auto &table : GenericSettingTables()) { SurveySettingsTable(survey, table, &_settings_game, skip_if_default); } - SurveySettingsTable(survey, _currency_settings, &_custom_currency, skip_if_default); + SurveySettingsTable(survey, _currency_settings, &GetCustomCurrency(), skip_if_default); SurveySettingsTable(survey, _company_settings, &_settings_client.company, skip_if_default); } From c0308acb030537e555ed9fa5a041f471be4361b4 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Fri, 29 Mar 2024 23:26:24 +0100 Subject: [PATCH 204/695] Fix: "-q" displays NewGRF IDs in the wrong byte-order (#12397) --- src/openttd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index 504c8d119f..e4b540c45e 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -246,7 +246,7 @@ static void WriteSavegameInfo(const std::string &name) message += "NewGRFs:\n"; if (_load_check_data.HasNewGrfs()) { for (GRFConfig *c = _load_check_data.grfconfig; c != nullptr; c = c->next) { - fmt::format_to(std::back_inserter(message), "{:08X} {} {}\n", c->ident.grfid, + fmt::format_to(std::back_inserter(message), "{:08X} {} {}\n", BSWAP32(c->ident.grfid), FormatArrayAsHex(HasBit(c->flags, GCF_COMPATIBLE) ? c->original_md5sum : c->ident.md5sum), c->filename); } } From e866ca8adca8ab90cb40d7a4a7a40b5357a1632b Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Fri, 29 Mar 2024 23:26:32 +0100 Subject: [PATCH 205/695] Cleanup 69d5b9d3: actually clean up all remnants of "no-thread" builds (#12398) --- COMPILING.md | 3 --- cmake/Options.cmake | 12 ------------ 2 files changed, 15 deletions(-) diff --git a/COMPILING.md b/COMPILING.md index 578b5e4568..dfdcd4ead5 100644 --- a/COMPILING.md +++ b/COMPILING.md @@ -110,9 +110,6 @@ builds. - `-DOPTION_USE_ASSERTS=OFF`: disable asserts. Use with care, as assert statements capture early signs of trouble. Release builds have them disabled by default. -- `-DOPTION_USE_THREADS=OFF`: disable the use of threads. This will block - the interface in many places, and in general gives a worse experience of - the game. Use with care. - `-DOPTION_TOOLS_ONLY=ON`: only build tools like `strgen`. Does not build the game itself. Useful for cross-compiling. diff --git a/cmake/Options.cmake b/cmake/Options.cmake index 3c8692fe4a..38d708c717 100644 --- a/cmake/Options.cmake +++ b/cmake/Options.cmake @@ -57,13 +57,6 @@ function(set_options) option(OPTION_DEDICATED "Build dedicated server only (no GUI)" OFF) option(OPTION_INSTALL_FHS "Install with Filesystem Hierarchy Standard folders" ${DEFAULT_OPTION_INSTALL_FHS}) option(OPTION_USE_ASSERTS "Use assertions; leave enabled for nightlies, betas, and RCs" ON) - if(EMSCRIPTEN) - # Although pthreads is supported, it is not in a way yet that is - # useful for us. - option(OPTION_USE_THREADS "Use threads" OFF) - else() - option(OPTION_USE_THREADS "Use threads" ON) - endif() option(OPTION_USE_NSIS "Use NSIS to create windows installer; enable only for stable releases" OFF) option(OPTION_TOOLS_ONLY "Build only tools target" OFF) option(OPTION_DOCS_ONLY "Build only docs target" OFF) @@ -85,7 +78,6 @@ function(show_options) message(STATUS "Option Dedicated - ${OPTION_DEDICATED}") message(STATUS "Option Install FHS - ${OPTION_INSTALL_FHS}") message(STATUS "Option Use assert - ${OPTION_USE_ASSERTS}") - message(STATUS "Option Use threads - ${OPTION_USE_THREADS}") message(STATUS "Option Use NSIS - ${OPTION_USE_NSIS}") if(OPTION_SURVEY_KEY) @@ -109,10 +101,6 @@ function(add_definitions_based_on_options) add_definitions(-DDEDICATED) endif() - if(NOT OPTION_USE_THREADS) - add_definitions(-DNO_THREADS) - endif() - if(OPTION_USE_ASSERTS) add_definitions(-DWITH_ASSERT) else() From 340c2802da2f5c46655b83ea9e7626b7f82b3ee6 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 30 Mar 2024 04:40:28 +0000 Subject: [PATCH 206/695] Update: Translations from eints ukrainian: 14 changes by StepanIvasyn dutch: 3 changes by Afoklala portuguese (brazilian): 34 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 68 +++++++++++++++---------------- src/lang/dutch.txt | 6 +-- src/lang/ukrainian.txt | 28 ++++++------- 3 files changed, 51 insertions(+), 51 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index c755c497a8..eae0376662 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -349,13 +349,13 @@ STR_SORT_BY_WAITING_TOTAL :Carga total agu STR_SORT_BY_WAITING_AVAILABLE :Carga disponível aguardando STR_SORT_BY_RATING_MAX :Maior classificação de carga STR_SORT_BY_RATING_MIN :Menor classificação de carga -STR_SORT_BY_ENGINE_ID :Locomotiva ID(ordem clássica) +STR_SORT_BY_ENGINE_ID :Motor ID(ordem clássica) STR_SORT_BY_COST :Custo STR_SORT_BY_POWER :Potência STR_SORT_BY_TRACTIVE_EFFORT :Força de tração STR_SORT_BY_INTRO_DATE :Data de introdução -STR_SORT_BY_RUNNING_COST :Custo de operação -STR_SORT_BY_POWER_VS_RUNNING_COST :Potência/Custo de operação +STR_SORT_BY_RUNNING_COST :Custo operacional +STR_SORT_BY_POWER_VS_RUNNING_COST :Potência/Custo operacional STR_SORT_BY_CARGO_CAPACITY :Capacidade de carga STR_SORT_BY_RANGE :Autonomia STR_SORT_BY_POPULATION :População @@ -1098,10 +1098,10 @@ STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{BLACK}{STRING} STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :{BLACK}Plataforma: STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Estado do plugin: -STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_RUNNING :{GREEN}Executando +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_RUNNING :{GREEN}Executando (ativo) STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_FAILED :{RED}Falha ao inicializar -STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_PLATFORM_NOT_RUNNING :{ORANGE}{STRING} não executando -STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNLOADED :{RED}Descarregado +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_PLATFORM_NOT_RUNNING :{ORANGE}{STRING} está parado (inativo) +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNLOADED :{RED}Não carregado STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :{RED}Plugin duplicado STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNSUPPORTED_API :{RED}Versão não suportada STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Assinatura inválida @@ -1281,10 +1281,10 @@ STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sem empréstimo -STR_CONFIG_SETTING_INTEREST_RATE :Taxa de Juros: {STRING} +STR_CONFIG_SETTING_INTEREST_RATE :Taxa de juros: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Taxa de juros do empréstimo; também controla a inflação, se ativado -STR_CONFIG_SETTING_RUNNING_COSTS :Custos de Operação: {STRING} +STR_CONFIG_SETTING_RUNNING_COSTS :Custos operacionais: {STRING} STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Configurar nível de manutenção e custos operacionais de veículos e infraestrutura STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Velocidade de construção: {STRING} @@ -1311,7 +1311,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Definir o níve STR_CONFIG_SETTING_RECESSIONS :Recessões: {STRING} STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Se ativado, recessões podem ocorrer periodicamente. Durante uma recessão, toda a produção é significativamente menor (ela retorna ao nível anterior quando a recessão termina) -STR_CONFIG_SETTING_TRAIN_REVERSING :Não permitir a reversão de trens nas estações: {STRING} +STR_CONFIG_SETTING_TRAIN_REVERSING :Desativar a reversão de trens nas estações: {STRING} STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Se ativado, os trens não podem inverter a direção em estações não-terminais, mesmo se existir um caminho mais curto para o próximo destino com a inversão STR_CONFIG_SETTING_DISASTERS :Desastres: {STRING} @@ -1530,7 +1530,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Duração da me STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Tempo de exibição de mensagens de erro em uma janela vermelha. Algumas mensagens de erro (crítico) não são fechadas automaticamente após este tempo e precisam ser fechadas manualmente STR_CONFIG_SETTING_HOVER_DELAY :Mostrar textos de ajuda: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tempo que o cursor deve ficar sobre algum elemento da interface para que os textos de ajuda sejam mostrados. Quando este valor é igual a 0 (zero), os textos de ajuda podem ser mostrados com o botão direito do mouse +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tempo que o cursor deve ficar sobre algum elemento da interface para que os textos de ajuda sejam mostrados. Outro modo de exibir os textos de ajuda é com o botão direito do mouse quando este valor é fixado em 0. STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Manter o cursor por {COMMA} milissegundo{P 0 "" s} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Botão direito @@ -1547,7 +1547,7 @@ STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as carg STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Se ativado, a carga que o veículo pode transportar aparecerá acima dele nas listas de veículos STR_CONFIG_SETTING_LANDSCAPE :Paisagem: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os climas definem cenários básicos de jogo, com diferentes cargas e requisitos de crescimento das localidades. NewGRFs e Scripts de Jogo permitem um controle mais preciso sobre isso +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os climas definem os cenários básicos de jogo, com diferentes cargas e requisitos de crescimento das localidades. NewGRFs e Scripts de Jogo permitem um controle mais preciso sobre isso STR_CONFIG_SETTING_LAND_GENERATOR :Gerador de Terreno: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :O gerador 'Original' depende do conjunto de gráficos básicos e produz formas de terreno pré-definidas. 'TerraGenesis' é um gerador baseado no algoritmo de ruído de Perlin, que permite configurações mais refinadas @@ -2032,9 +2032,9 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador d STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamanho médio das cidades em relação às localidades normais no início do jogo STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Atualizar a distribuição a cada {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo entre recálculos subsequentes da rede de conexões. Cada recálculo atualiza os planos para um componente da rede. Isso significa que um valor X para esta configuração não significa que toda a rede será atualizada a cada X segundos. Apenas algum componente será atualizado. Quanto menor este valor, mais tempo de CPU será necessário para calcular as atualizações. Quanto maior este valor, mais tempo será necessário até que a distribuição de carga inicie nas novas rotas +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo entre recálculos subsequentes da rede de conexões. Cada recálculo atualiza os planos para um componente da rede. Isso significa que um valor X para esta configuração não significa que toda a rede será atualizada a cada X segundos. Apenas algum componente será atualizado. Quanto menor este valor, mais tempo de CPU será necessário para calcular as atualizações. Quanto maior este valor, mais tempo será necessário até que a distribuição de carga inicie nas rotas novas STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Usar {STRING} para recalcular a distribuição -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo gasto em cada recálculo de um componente da rede de conexões. Quando um recálculo é iniciado, uma tarefa é gerada e pode ser executada por esse número de segundos. Quanto menor este valor, maior a chance de que a tarefa não seja concluída quando deveria. Então o jogo para até que ela seja completada, causando um atraso. Quanto maior este valor, mais tempo será necessário para a distribuição ser atualizada quando as rotas mudam +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo gasto em cada recálculo de um componente da rede de conexões. Quando um recálculo é iniciado, uma tarefa é gerada e pode ser executada durante esse número de segundos. Quanto menor este valor, maior a chance de que a tarefa não seja concluída quando deveria. Neste caso, o jogo para até que ela seja completada, causando um atraso. Quanto maior este valor, mais tempo será necessário para a distribuição ser atualizada quando as rotas mudam STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribuição para passageiros: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" significa que aproximadamente o mesmo número de passageiros irá de uma estação A para uma estação B, assim como de B para A. "Assimétrico" significa que um número arbitrário de passageiros pode ir em qualquer direção. "Manual" significa que não haverá distribuição automática dos passageiros @@ -2669,7 +2669,7 @@ STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Você es STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Os termos e condições para download de conteúdo de fontes externas pode variar.{}Você deverá consultar as fontes para obter instruções de como instalar o conteúdo no OpenTTD.{}Você deseja continuar? STR_CONTENT_FILTER_TITLE :{BLACK}Filtrar por etiqueta/nome: STR_CONTENT_OPEN_URL :{BLACK}Página da internet -STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Visitar o site desse conteúdo +STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Visitar a página web deste conteúdo STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Fazer download STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Iniciar o download do conteúdo selecionado STR_CONTENT_TOTAL_DOWNLOAD_SIZE :{SILVER}Tamanho total do download: {WHITE}{BYTES} @@ -3663,9 +3663,9 @@ STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Comprar direito STR_LOCAL_AUTHORITY_ACTION_BRIBE :Subornar a autoridade local ###next-name-looks-similar -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma pequena campanha publicitária local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na classificação da estação num raio pequeno em torno do centro da localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma média campanha publicitária local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na classificação da estação num raio médio em torno do centro da cidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma grande campanha publicitária local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na classificação da estação num raio grande em torno do centro da localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma pequena campanha publicitária local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na classificação da estação numa distância pequena em torno do centro da localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma média campanha publicitária local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na classificação da estação numa distância média em torno do centro da cidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma grande campanha publicitária local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Produz um aumento temporário na classificação da estação numa distância grande em torno do centro da localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Financiar a reconstrução da rede urbana de estradas.{}Provoca uma perturbação considerável no tráfego por até 6 meses.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}Financiar a reconstrução da rede urbana de estradas.{}Provoca uma perturbação considerável no tráfego por até 6 minutos.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Construir uma estátua em homenagem à sua empresa.{}Produz um aumento permanente na classificação da estação nesta localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} @@ -4074,8 +4074,8 @@ STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Velocida STR_PURCHASE_INFO_SPEED :{BLACK}Velocidade: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Velocidade no oceano: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Velocidade em canais/rios: {GOLD}{VELOCITY} -STR_PURCHASE_INFO_RUNNINGCOST_YEAR :{BLACK}Custo de Operação: {GOLD}{CURRENCY_LONG}/ano -STR_PURCHASE_INFO_RUNNINGCOST_PERIOD :{BLACK}Custo de Operação: {GOLD}{CURRENCY_LONG}/período +STR_PURCHASE_INFO_RUNNINGCOST_YEAR :{BLACK}Custo Operacional: {GOLD}{CURRENCY_LONG}/ano +STR_PURCHASE_INFO_RUNNINGCOST_PERIOD :{BLACK}Custo Operacional: {GOLD}{CURRENCY_LONG}/período STR_PURCHASE_INFO_CAPACITY :{BLACK}Capacidade: {GOLD}{CARGO_LONG} {STRING} STR_PURCHASE_INFO_REFITTABLE :(adaptável) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Desenvolvido: {GOLD}{NUM}{BLACK} Vida útil: {GOLD}{COMMA} ano{P "" s} @@ -4276,8 +4276,8 @@ STR_ENGINE_PREVIEW_SPEED_POWER :Velocidade: {VE STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Velocidade: {VELOCITY} Potência: {POWER} Tração máx.: {FORCE} STR_ENGINE_PREVIEW_TYPE :Tipo de aeronave: {STRING} STR_ENGINE_PREVIEW_TYPE_RANGE :Tipo de aeronave: {STRING} Autonomia: {COMMA} quadrados -STR_ENGINE_PREVIEW_RUNCOST_YEAR :Custo de Operação: {CURRENCY_LONG}/ano -STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Custo de Operação: {CURRENCY_LONG}/período +STR_ENGINE_PREVIEW_RUNCOST_YEAR :Custo Operacional: {CURRENCY_LONG}/ano +STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Custo Operacional: {CURRENCY_LONG}/período STR_ENGINE_PREVIEW_CAPACITY :Capacidade: {CARGO_LONG} STR_ENGINE_PREVIEW_CAPACITY_2 :Capacidade: {CARGO_LONG}, {CARGO_LONG} @@ -4426,8 +4426,8 @@ STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Renomear STR_VEHICLE_INFO_AGE :{COMMA} ano{P "" s} ({COMMA}) STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} ano{P "" s} ({COMMA}) -STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Idade: {LTBLUE}{STRING}{BLACK} Custo de Operação: {LTBLUE}{CURRENCY_LONG}/ano -STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Idade: {LTBLUE}{STRING}{BLACK} Custo de Operação: {LTBLUE}{CURRENCY_LONG}/período +STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Idade: {LTBLUE}{STRING}{BLACK} Custo Operacional: {LTBLUE}{CURRENCY_LONG}/ano +STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Idade: {LTBLUE}{STRING}{BLACK} Custo Operacional: {LTBLUE}{CURRENCY_LONG}/período STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Velocidade máx.: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Velocidade máx.: {LTBLUE}{VELOCITY} {BLACK}Tipo de aeronave: {LTBLUE}{STRING} @@ -4861,7 +4861,7 @@ STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Ajustar STR_TEXTFILE_VIEW_README :{BLACK}Leia-me STR_TEXTFILE_VIEW_README_TOOLTIP :Ver o arquivo Leia-me para este conteúdo STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Registro de modificações -STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Ver o registro de modificações para este conteúdo +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Ver o registro de modificações deste conteúdo STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licença STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Ver a licença para este conteúdo ###length 5 @@ -5029,7 +5029,7 @@ STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... só STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... só pode ser construído abaixo da linha de neve STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}O financiamento falhou em prospectar devido ao azar; tente novamente -STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Não havia locais adequados para prospectar por esta indústria +STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Não havia locais adequados para prospectar esta indústria STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Não havia locais adequados para indústrias do tipo '{STRING}' STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Modifique os parâmetros de geração do mapa para obter um mapa melhor @@ -5106,10 +5106,10 @@ STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Não é STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}... composto por várias unidades STR_ERROR_INCOMPATIBLE_RAIL_TYPES :Tipos de trilhos incompatíveis -STR_ERROR_CAN_T_MOVE_VEHICLE :{WHITE}Não é possível mover veículo... +STR_ERROR_CAN_T_MOVE_VEHICLE :{WHITE}Não é possível mover o veículo... STR_ERROR_REAR_ENGINE_FOLLOW_FRONT :{WHITE}A locomotiva traseira sempre seguirá a sua equivalente dianteira -STR_ERROR_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Não é possível encontrar uma rota para depósito local -STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Não é possível encontrar depósito local +STR_ERROR_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Incapaz de encontrar uma rota para depósito local +STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Incapaz de encontrar um depósito local STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Tipo de depósito errado @@ -5174,15 +5174,15 @@ STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Não é # Tree related errors STR_ERROR_TREE_ALREADY_HERE :{WHITE}... árvore já plantada aqui STR_ERROR_TREE_WRONG_TERRAIN_FOR_TREE_TYPE :{WHITE}... terreno errado para esse tipo de árvore -STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}Não é possível plantar árvores aqui... +STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}Não é possível plantar árvore aqui... # Bridge related errors STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Não é possível construir ponte aqui... STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}É necessário demolir a ponte primeiro STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Não é possível iniciar e terminar no mesmo ponto STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}As extremidades da ponte não estão no mesmo nível -STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}A ponte é muito baixa para este terreno -STR_ERROR_BRIDGE_TOO_HIGH_FOR_TERRAIN :{WHITE}A ponte é muito alta para este terreno +STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}A ponte é muito baixa para o terreno. +STR_ERROR_BRIDGE_TOO_HIGH_FOR_TERRAIN :{WHITE}A ponte é muito alta para este terreno. STR_ERROR_START_AND_END_MUST_BE_IN :{WHITE}Início e final devem estar alinhados STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}... os extremos da ponte devem estar sobre a terra STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... ponte muito longa @@ -5294,7 +5294,7 @@ STR_ERROR_CAN_T_MAKE_ROAD_VEHICLE_TURN :{WHITE}Não é STR_ERROR_AIRCRAFT_IS_IN_FLIGHT :{WHITE}Aeronave está em voo # Order related errors -STR_ERROR_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Não há espaço para mais ordens +STR_ERROR_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Não há mais espaço para ordens STR_ERROR_TOO_MANY_ORDERS :{WHITE}Há ordens demais STR_ERROR_CAN_T_INSERT_NEW_ORDER :{WHITE}Não é possível inserir nova ordem... STR_ERROR_CAN_T_DELETE_THIS_ORDER :{WHITE}Não é possível remover esta ordem... @@ -5332,8 +5332,8 @@ STR_ERROR_NO_BUOY :{WHITE}Não exi STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Não é possível programar o veículo... STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Veículos só podem aguardar em estações STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Este veículo não para nesta estação -STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... horário incompleto -STR_ERROR_TIMETABLE_NOT_STARTED :{WHITE}... o horário ainda não começou +STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... horário está incompleto +STR_ERROR_TIMETABLE_NOT_STARTED :{WHITE}... horário ainda não começou # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... há placas demais diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 15636e70d3..ec62376bf9 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -4449,10 +4449,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Capacite STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Geldoverdracht: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Onderhoudstermijn: {LTBLUE}{COMMA}{NBSP}dagen{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Onderhoudstermijn: {LTBLUE}{COMMA}{NBSP}minuten{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Onderhoudstermijn: {LTBLUE}{COMMA}{NBSP}minu{P ut ten}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Onderhoudstermijn: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Laatste onderhoud: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Laatste onderhoud: {LTBLUE}{NUM} minuten geleden +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Laatste onderhoud: {LTBLUE}{NUM} minu{P ut ten} geleden STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Vergroot de onderhoudstermijn met 10 dagen. Ctrl+klik voor een verhoging met 5 dagen STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Vergroot de onderhoudstermijng met 5 minuten. Ctrl+klik voor een verhoging met 1 minuut STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Vergroot de onderhoudstermijn met 10 procent. Ctrl+klik voor een verhoging met 5 procent @@ -4643,7 +4643,7 @@ STR_ORDER_REFIT_ORDER :(Ombouwen naar STR_ORDER_REFIT_STOP_ORDER :(Ombouwen naar {STRING} en stop) STR_ORDER_STOP_ORDER :(Stop) -STR_ORDER_WAIT_TO_UNBUNCH :(wacht op ontkreukelen) +STR_ORDER_WAIT_TO_UNBUNCH :(Wacht op ontkreukelen) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Kan station niet gebruiken){POP_COLOUR} {STRING} {STATION} {STRING} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 17a7d092ea..54ad0fdda2 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -515,8 +515,8 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Відк ###length 31 STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Пауза STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Прискорити гру -STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Опції -STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Зберегти гру, покинути гру, вихід +STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Опції і налаштування +STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Зберегти гру, завантажити гру, покинути гру, вихід STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Показує мапу, додаткове вікно, легенду вантажопотоку або список позначок STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Показує перелік міст або заснування міста STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Показує субсидії @@ -539,7 +539,7 @@ STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Буду STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Будувати трамвайну колію STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Будувати порти STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Будувати аеропорти -STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Змінити ландшафт +STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Покаже меню створення ландшафту, посадки дерев, створення позначки STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Налаштування звуків/музики STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Показати останнє повідомлення. Налаштування повідомлень STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Інформація про земельну ділянку, знімки екрану, про гру OpenTTD та інструменти для розробки @@ -746,7 +746,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Граф STR_GRAPH_INCOME_CAPTION :{WHITE}Графік доходів STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Кількість перевезеного вантажу STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Рейтинг продуктивності компанії (найбільший рейтинг=1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Вартість компанії +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Графік вартості компанії STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Останні 72 хвилини @@ -1666,7 +1666,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Тривалі STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Тривалість відображення повідомлень про помилки (червоне вікно повідомлень). Деякі (критичні) повідомлення необхідно закривати власноруч. STR_CONFIG_SETTING_HOVER_DELAY :Відображати підказки: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Затримка перед відображенням підказок при наведенні курсором на елементи інтерфейса. Окрім того, відображення підказок можна призначити на праву кнопку миші, якщо це значення поставити на 0. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Затримка перед відображенням підказок при наведенні курсором на елементи інтерфейсу. Окрім того, відображення підказок можна призначити на праву кнопку миші, якщо це значення поставити на 0. STR_CONFIG_SETTING_HOVER_DELAY_VALUE :При наведенні, через {COMMA} мілісекунд{P у и ""} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :По правому клацу миші @@ -3098,10 +3098,10 @@ STR_STATION_BUILD_NOISE :{BLACK}Ріве # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Ландшафт -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Опустити край ділянки землі. Протягування мишею опускає вибраний край і вирівнює вибрану ділянку до його нової висоти. Утримуйте Ctrl для виділення клітинок по діагоналі, або Shift - для показу очікуваних витрат +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Опустити край ділянки землі. Клац+протягування опускає обраний край і вирівнює обрану ділянку до його нової висоти. Ctrl+клац+протягування для виділення діагональної ділянки. Утримуйте Shift для показу очікуваних витрат STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Підняти край ділянки землі. Протягування мишею піднімає вибраний край і вирівнює вибрану ділянку до його нової висоти. Ctrl+клац+протягування для виділення клітинок по діагоналі. Утримуйте Shift для показу очікуваних витрат STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Вирівнювання ділянки землі до висоти першого обраного краю. Ctrl+клац+протягування для виділення діагональної ділянки. Утримуйте Shift для показу очікуваних витрат -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Купити ділянку для використання у майбутньому. Утримуйте Ctrl для виділення діагональної ділянки. Утримуйте Shift для показу вартості ділянки +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Купити ділянку для використання у майбутньому. Ctrl+клац+протягування для виділення діагональної ділянки. Утримуйте Shift для показу очікуваних витрат # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Вибір об'єкта @@ -3117,7 +3117,7 @@ STR_OBJECT_CLASS_TRNS :Ретранс STR_PLANT_TREE_CAPTION :{WHITE}Дерева STR_PLANT_TREE_TOOLTIP :{BLACK}Оберіть тип дерева для посадки. Клітинки, які вже містять дерева, доповнюються новими деревами різного типу незалежно від обраного. STR_TREES_RANDOM_TYPE :{BLACK}Дерева випадкового типу -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Садити дерева випадкового типу. Утримуйте Shift для показу витрат на висаджування +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Саджати дерева випадкового типу. Ctrl+клац+протягування для виділення діагональної ділянки. Утримуйте Shift для показу очікуваних витрат STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Випадкові дерева STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Випадкове насадження дерев по всьому ландшафту STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Нормальна @@ -3176,7 +3176,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}Сітк STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Випадковий # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Нове підприємство +STR_FUND_INDUSTRY_CAPTION :{WHITE}Створити підприємство STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Виберіть необхідне підприємство STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Створити різні підприємства STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Випадково розташувати підприємства по карті @@ -3873,7 +3873,7 @@ STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Світ STR_STORY_BOOK_SPECTATOR :Всесвітня історія STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Стор. {NUM} -STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Перейти до сторінки, вибраної в цьому списку. +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Перейти до сторінки, вибраної в цьому випадному списку. STR_STORY_BOOK_PREV_PAGE :{BLACK}Попередня сторінка STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}На попередню сторінку STR_STORY_BOOK_NEXT_PAGE :{BLACK}Далі @@ -3964,7 +3964,7 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Забо STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Показати точку маршруту в центрі екрану. Ctrl+клац мишею відкриє нове вікно з видом на точку маршруту STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Перейменувати точку маршруту -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Показати буй в центрі екрану. Ctrl+клац мишею відкриє нове вікно у місці розташування буя +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Показати буй в центрі екрану. Ctrl+клац мишею відкриє нове вікно з видом на розташування буя STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Перейменувати буй STR_EDIT_WAYPOINT_NAME :{WHITE}Перейменуйте точку маршруту @@ -4241,8 +4241,8 @@ STR_CARGO_TYPE_FILTER_FREIGHT :Вантаж STR_CARGO_TYPE_FILTER_NONE :нема ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Список поїздів. Клацніть на поїзд для інформації. Ctrl+клац мишею вимикає показ типу транспорту -STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Список автомобілів. Клацніть на авто для отримання інформації. Ctrl+клац мишею вимикає показ типу транспорту +STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Список потягів. Клацніть на потяг для інформації. Ctrl+клац мишею показує або приховує цей тип транспорту +STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Список дорожнього транспорту. Клацніть на трансопорт для отримання інформації. Ctrl+клац мишею показує або приховує цей тип транспорту STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Список кораблів. Клацніть на корабель для отримання інформації. Ctrl+клац сховає показ цього типу кораблів STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Список літальних апаратів. Клацніть на літальному апараті для отримання інформації. Ctrl+клац мишею сховає показ цього типу транспорту @@ -4259,7 +4259,7 @@ STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купі STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купуйте та переобладнайте повітряні апарати ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Купити вибраний поїзд. Утримуйте Shift для показу витрат на придбання +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Купити обраний потяг. Утримуйте Shift для показу орієнтовних витрат STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Придбати обраний дорожній транспорт. Утримуйте Shift для показу орієнтовних витрат STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Купити обраний корабель. Утримуйте Shift для показу очікуваних витрат STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Придбати обраний літальний апарат. Утримуйте Shift для показу орієнтовних витрат From 77f02faf15948b8842d707e2984ce8ce506fbda1 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 30 Mar 2024 13:29:51 +0100 Subject: [PATCH 207/695] Codefix 977aba73be: also update comment about removal of is_random (#12400) --- src/script/script_config.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/script/script_config.hpp b/src/script/script_config.hpp index ef74f08c38..4f171621de 100644 --- a/src/script/script_config.hpp +++ b/src/script/script_config.hpp @@ -73,7 +73,6 @@ public: * @param version The version of the Script to load, or -1 of latest. * @param force_exact_match If true try to find the exact same version * as specified. If false any compatible version is ok. - * @param is_random Is the Script chosen randomly? */ void Change(std::optional name, int version = -1, bool force_exact_match = false); From 9954187680e53739a64e89fdb5b88648b78bb94e Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 31 Mar 2024 04:41:01 +0000 Subject: [PATCH 208/695] Update: Translations from eints greek: 172 changes by gh658804 ukrainian: 18 changes by StepanIvasyn portuguese (brazilian): 9 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 18 +- src/lang/greek.txt | 344 +++++++++++++++--------------- src/lang/ukrainian.txt | 36 ++-- 3 files changed, 199 insertions(+), 199 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index eae0376662..fa95b1a4a2 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -736,8 +736,8 @@ STR_HIGHSCORE_PERFORMANCE_TITLE_MOGUL :Mandachuva STR_HIGHSCORE_PERFORMANCE_TITLE_TYCOON_OF_THE_CENTURY :Magnata do Século STR_HIGHSCORE_NAME :{PRESIDENT_NAME}, {COMPANY} STR_HIGHSCORE_STATS :{BIG_FONT}'{STRING}' ({COMMA}) -STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{BLACK}{COMPANY} conquista o status de '{STRING}'!! -STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{WHITE}{PRESIDENT_NAME} de {COMPANY} conquista o status de '{STRING}'!! +STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{BLACK}{COMPANY} conquista o status de '{STRING}'! +STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{WHITE}{PRESIDENT_NAME} de {COMPANY} conquista o status de '{STRING}'! # Smallmap window STR_SMALLMAP_CAPTION :{WHITE}Mapa - {STRING} @@ -856,7 +856,7 @@ STR_NEWS_COMPANY_MERGER_TITLE :{BIG_FONT}{BLAC STR_NEWS_COMPANY_MERGER_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} foi vendida para {STRING} por {CURRENCY_LONG}! STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLACK}Falência! STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} foi fechada pelos credores e todos os seus bens foram vendidos! -STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Nova empresa de transportes!! +STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Nova empresa de transportes! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} inicia construção perto de {TOWN}! STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} foi comprada por {STRING} por um valor não revelado! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Gerente) @@ -910,7 +910,7 @@ STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} parou porque uma ordem de adaptação falhou STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Renovação automática falhou para {VEHICLE}{}{STRING} -STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}Nov{G o a} {STRING} disponível!! +STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}Nov{G o a} {STRING} disponível! STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G o a} {STRING} disponível! - {ENGINE} @@ -3262,7 +3262,7 @@ STR_SAVELOAD_SAVE_SCENARIO :{WHITE}Salvar C STR_SAVELOAD_LOAD_SCENARIO :{WHITE}Abrir Cenário STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Abrir mapa de altitudes STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Salvar mapa de altitudes -STR_SAVELOAD_HOME_BUTTON :{BLACK}Acessar o diretório padrão atual onde salvar/abrir jogos +STR_SAVELOAD_HOME_BUTTON :{BLACK}Clique aqui para acessar o diretório padrão para salvar/abrir um jogo STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} livres STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Lista de unidades, diretórios e arquivos de jogos salvos STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Nome selecionado para salvar o jogo @@ -3369,7 +3369,7 @@ STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}O tamanh STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Altura do pico mais elevado -STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Pico mais elevado +STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Pico mais alto STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Cobertura de neve (em %) STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Cobertura de deserto (em %) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Alterar o ano de início @@ -3379,12 +3379,12 @@ STR_SE_MAPGEN_CAPTION :{WHITE}Tipo de STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Terreno plano STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Gerar um terreno plano STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Terreno aleatório -STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Altitude do terreno plano: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Altura do terreno plano: STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Escolher a elevação do terreno acima do nível do mar STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Mover altura do terreno plano um nível abaixo STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Mover altura do terreno plano um nível acima -STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Modificar a altitude do terreno plano +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Modificar a altura do terreno plano # Map generation progress STR_GENERATION_WORLD :{WHITE}Gerando Mundo... @@ -4526,7 +4526,7 @@ STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Adaptar # Order view STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (Ordens) STR_ORDERS_TIMETABLE_VIEW :{BLACK}Horários -STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Mudar para a visuallização de horários +STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Mudar para a visualização de horários STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de ordens - clique em uma ordem para selecioná-la. Ctrl+Clique para mostrar o destino da ordem STR_ORDER_INDEX :{COMMA}:{NBSP} diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 0c423ab12c..e03ed82e41 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -329,8 +329,8 @@ STR_UNITS_PERIODS :{NUM}{NBSP}πε # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Φιλτράρισμα λίστας: -STR_LIST_FILTER_OSKTITLE :{BLACK}Εισαγώγη κειμένου για φιλτράρισμα -STR_LIST_FILTER_TOOLTIP :{BLACK}Εισάγετε μια λέξη για φιλτράρισμα της λίστας +STR_LIST_FILTER_OSKTITLE :{BLACK}Εισαγώγη μιας ή περισσότερων λέξεων για φιλτράρισμα +STR_LIST_FILTER_TOOLTIP :{BLACK}Εισαγώγη μιας ή περισσότερων λέξεων για φιλτράρισμα της λίστας STR_TOOLTIP_GROUP_ORDER :{BLACK}Επιλέξτε κατάταξη ομαδοποίησης STR_TOOLTIP_SORT_ORDER :{BLACK}Επιλογή σειράς ταξινόμησης (καθοδικά/ανοδικά) @@ -350,7 +350,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Κάντ STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Εναλλαγή μεγάλου/μικρού παραθύρου STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Μπάρα Κύλισης - μετακινεί την λίστα πάνω/κάτω STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Μπάρα κίνησης - κινεί τη λίστα αριστερά/δεξιά -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Κατεδάφιση κτιρίων κλπ. σε συγκεκριμένο τετράγωνο. Με Ctrl επιλέγεται μια επιφάνεια διαγώνια. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Κατεδάφιση κτιρίων κλπ. σε συγκεκριμένο τετράγωνο. Ctrl+Κλικ για διαγώνια επιλογή. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο # Show engines button ###length VEHICLE_TYPES @@ -442,8 +442,8 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Ανοί ###length 31 STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Παύση παιχνιδιού STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Γρήγορη ταχύτητα παιχνιδιού -STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Επιλογές -STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Αποθήκευση, εγκατάλειψη, έξοδος +STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Επιλογές και ρυθμίσεις +STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Αποθήκευση, φόρτωση ή εγκατάλειψη παιχνιδιού, έξοδος από το πρόγραμμα STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Εμφάνιση χάρτη, επιπλέον παραθύρου προβολής, ροής εμπορευμάτων ή λίστας πινακίδων STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Εμφάνιση καταλόγου πόλεων ή ίδρυση πόλης STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Εμφάνιση λίστας χρηματοδοτήσεων @@ -454,7 +454,7 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Εμφά STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Εμφάνιση λίστας στόχων STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Εμφάνιση εταιρικών γραφημάτων και ποσοστών πληρωμής φορτίου STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Εμφάνιση πίνακα κατάταξης των εταιριών -STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Χρηματοδοτήστε την κατασκευή νέας βιομηχανίας +STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Εμφάνιση λίστας βιομηχανιών ή χρηματοδότηση κατασκευής νέας βιομηχανίας STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Εμφάνιση λίστας με τα τραίνα της εταιρίας. Με Ctrl+Κλικ εναλλάσσεται η εμφάνιση/απόκρυψη των ομάδων οχημάτων STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Εμφάνιση λίστας με τα οχήματα δρόμου της εταιρίας. Με Ctrl+Κλικ εναλλάσσεται η εμφάνιση/απόκρυψη των ομάδων οχημάτων STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Εμφάνιση λίστας με τα πλοία της εταιρίας. Με Ctrl+Κλικ εναλλάσσεται η εμφάνιση/απόκρυψη των ομάδων οχημάτων @@ -466,10 +466,10 @@ STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Κατα STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Κατασκευή τροχιοδρόμων STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Κατασκευή υδάτινης διαδρομής STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Κατασκευάστε αεροδρόμια -STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Ανοίξτε την μπάρα εργαλείων μορφοποίησης εδάφους για ανύψωση/βύθιση γης, δενδροφύτευση, κλπ. +STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Ανοίξτε την μπάρα εργαλείων μορφοποίησης εδάφους, δενδροφύτευσης ή τοποθέτησης σήματος STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Εμφάνιση παραθύρου ήχου/μουσικής -STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Εμφάνιση τελευταίου μηνύματος/αναφοράς ειδήσεων, επιλογές μηνυμάτων -STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Πληροφορίες περιοχής, κονσόλα, αποσφαλμάτωση δέσμης ενεργειών, φωτογραφίες οθόνης, περί του OpenTTD +STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Εμφάνιση τελευταίου μηνύματος/αναφοράς ειδήσεων, ιστορικό μηνυμάτων ή διαγραφή όλων των μηνυμάτων +STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Πληροφορίες περιοχής, μενού φωτογραφίιών οθόνης, περί του OpenTTD ή εργαλεία προγραμματιστή STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Εναλλάγη μπαρών εργασίας # Extra tooltips for the scenario editor toolbar @@ -701,7 +701,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Γράφ STR_GRAPH_INCOME_CAPTION :{WHITE}Γράφημα Εισοδήματος STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Μονάδες φορτίου που παραδόθηκαν STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Ποσοστά απόδοσης εταιρίας (μέγιστη τιμή=1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Αξία εταιρίας +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Γράφημα αξίας εταιρίας STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Τελευταία 72 λεπτά @@ -865,7 +865,7 @@ STR_SMALLMAP_LEGENDA_AIRCRAFT :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_TRANSPORT_ROUTES :{TINY_FONT}{BLACK}Διαδρομές Μεταφορών STR_SMALLMAP_LEGENDA_FOREST :{TINY_FONT}{BLACK}Δάσος STR_SMALLMAP_LEGENDA_RAILROAD_STATION :{TINY_FONT}{BLACK}Σιδηροδρομικός Σταθμός -STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Περιοχή Φόρτωσης Φορτηγών +STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Σταθμός Φορτηγών STR_SMALLMAP_LEGENDA_BUS_STATION :{TINY_FONT}{BLACK}Στάση Λεωφορείου STR_SMALLMAP_LEGENDA_AIRPORT_HELIPORT :{TINY_FONT}{BLACK}Αεροδρόμιο/Ελικοδρόμιο STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLACK}Λιμάνι @@ -949,7 +949,7 @@ STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLAC STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}Η {STRING} κλείστηκε από τους πιστωτές της και όλα τα περιουσιακά στοιχεία της εκποιήθηκαν! STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Ίδρυση νέας εταιρίας μεταφορών! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}Η {STRING} ξεκινά τις κατασκευές κοντά στην πόλη {TOWN}! -STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}Η {STRING} εξαγοράστηκε από την {STRING}! +STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}Η {STRING} εξαγοράστηκε από την {STRING} για ένα μη ανακοινώσιμο ποσό! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}({G 0 Διευθυντής Διευθύντρια ""}) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}Η {STRING} χορήγεισε την κατασκεύη της νέας πόλης {TOWN}! @@ -1138,7 +1138,7 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Τσεκ STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Τρέχον οδηγός: {STRING} STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Μέγεθος διεπαφής -STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Σύρετε το κουμπί για να θέσετε μέγεθος διεπαφής. Κρατήστε πατημένο το Ctrl για συνεχής αλλαγή +STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Σύρετε το κουμπί για να ορίσετε το μέγεθος του περιβάλλοντος διεπαφής. Ctrl+Σύρσιμο για συνεχή προσαρμογή STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Αυτόματη εντόπιση μεγέθους STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Τσεκάρετε αυτό το κουτάκι για να ανιχνεύεται το μέγεθος της διεπαφής αυτόματα @@ -1146,9 +1146,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Κλίσ STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Τσεκάρετε αυτό το κουτί για να αλλάζει μέγεθος το περίγραμμα με βάση το μέγεθος της διεπαφής STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Χρήση παραδοσιακής γραμματοσειράς -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Επιλέξτε αυτό το κουτάκι εάν προτιμάτε να χρησιμοποιήσετε την παραδοσιακή γραμματοσειρά σταθερού μεγέθους. -STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Γραμματοσειρά με εξομάλυνση εμφάνισης -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Τσεκάρετε αυτό το κουτάκι για γραμματοσειρά με εξομάλυνση εμφάνισης. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Τσεκάρετε αυτό το κουτάκι εάν προτιμάτε να χρησιμοποιήσετε την παραδοσιακή γραμματοσειρά σταθερού μεγέθους +STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Εξομάλυνση εμφάνισης γραμματοσειράς +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Τσεκάρετε αυτό το κουτάκι για εξομάλυνση εμφάνισης γραμματοσειράς STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1172,11 +1172,11 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Ρυθμοί ανανέωσης μεγαλύτεροι από 60Hz μπορεί να μειώσουν την απόδοση. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Βασικό σετ γραφικών -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Επιλογή του βασικού σετ γραφικών που θα χρησιμοποιηθεί +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Επιλογή του βασικού σετ γραφικών που θα χρησιμοποιηθεί (δεν αλλάζει μέσα από ένα παιχνίδι, μόνο από το κεντρικό μενού) STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Επιπλέον πληροφορίες σχετικά με το βασικό σετ γραφικών STR_GAME_OPTIONS_BASE_SFX :{BLACK}Σετ βασικών ήχων -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Επιλέξτε τους βασικούς ήχους που θα χρησιμοποιήσετε +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Επιλογή των βασικών ήχων που θα χρησιμοποιηθούν (δεν αλλάζει μέσα από ένα παιχνίδι, μόνο από το κεντρικό μενού) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Επιπλέον πληροφορίες σχετικά με τους βασικούς ήχους STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Βασικό σετ μουσικής @@ -1296,7 +1296,7 @@ STR_TERRAIN_TYPE_CUSTOM_VALUE :Προσαρμ STR_CITY_APPROVAL_LENIENT :Ήπειο STR_CITY_APPROVAL_TOLERANT :Υπομονετική STR_CITY_APPROVAL_HOSTILE :Εχθρική -STR_CITY_APPROVAL_PERMISSIVE :Ανεκτική +STR_CITY_APPROVAL_PERMISSIVE :Ανεκτική (χωρίς επίδραση σε ενέργειες της εταιρίας) STR_WARNING_NO_SUITABLE_AI :{WHITE}Δεν είναι διαθέσιμο κανένα κατάλληλο Al...{}Μπορείτε να κατεβάσετε AIs μέσω του συστήματος «Διαδικτυακού Περιεχομένου» @@ -1400,7 +1400,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Κόστη οι STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Θέτει το επίπεδο κόστους για αγορές και οικοδομές STR_CONFIG_SETTING_RECESSIONS :Υφέσεις: {STRING} -STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Όταν είναι ενεργοποιημένο, μπορεί να υπάρξουν υφέσεις κάθε λίγα χρόνια. Κατά τη διάρκεια μιας ύφεσης, όλη η παραγωγή είναι πολύ χαμηλότερη (επιστρέφει στο προηγούμενο επίπεδο όταν τελειώσει η ύφεση) +STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Όταν είναι ενεργοποιημένο, ενδέχεται περιοδικά να υπάρχουν υφέσεις. Κατά τη διάρκεια μιας ύφεσης, όλη η παραγωγή είναι πολύ χαμηλότερη (επιστρέφει στο προηγούμενο επίπεδο όταν τελειώσει η ύφεση) STR_CONFIG_SETTING_TRAIN_REVERSING :Απαγορεύεται η αντιστροφή τρένων στους σταθμούς: {STRING} STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Όταν είναι ενεργοποιημένο, τα τρένα δεν θα κάνουν όπισθεν σε μη-τελικούς σταθμούς, ακόμα και εάν υπάρχει κοντινότερη διαδρομή προς τον επόμενή τους προορισμό όταν κάνουν όπισθεν @@ -1425,7 +1425,7 @@ STR_CONFIG_SETTING_CATCHMENT :Επιτρέπ STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Διαφορετικοί σταθμοί και αεροδρόμια έχουν περιοχές κάλυψης διαφορετικού μεγέθους STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Οι σταθμοί της εταιρίας μπορούν να εξυπηρετήσεουν βιομηχανίες με κοντινούς ουδέτερους σταθμούς: {STRING} -STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Όταν είναι ενεργοποιημένο, βιομηχανίες με ενσωματωμένους σταθμούς (όπως Πλατφόρμες Πετρελαίου) μπορούν να εξυπηρετούνται από κοντινούς σταθμούς της εταιρίας. Όταν είναι απενεργοποιημένο, οι βιομηχανίες αυτές μπορούν να εξυπηρετούνται μόνο από τους ενσωματωμένους σταθμούς τους. Κοντινοί σταθμοί της εταιρίας δεν θα μπορούν να τους εξυπηρετούν, ούτε και ο ενσωματωμένος σταθμός θα μπορεί να εξυπηρετήσει οτιδήποτε άλλο εκτός από τη βιομηχανία. +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Όταν είναι ενεργοποιημένο, βιομηχανίες με ενσωματωμένους σταθμούς (όπως Πλατφόρμες Πετρελαίου) μπορούν να εξυπηρετούνται από κοντινούς σταθμούς της εταιρίας. Όταν είναι απενεργοποιημένο, οι βιομηχανίες αυτές μπορούν να εξυπηρετούνται μόνο από τους ενσωματωμένους σταθμούς τους. Κοντινοί σταθμοί της εταιρίας δεν θα μπορούν να τους εξυπηρετούν, ούτε και ο ενσωματωμένος σταθμός θα μπορεί να εξυπηρετήσει οτιδήποτε άλλο εκτός από τη βιομηχανία STR_CONFIG_SETTING_EXTRADYNAMITE :Επιτρέπεται η αφαίρεση περισσότερων ιδιοκτησιών των πολέων: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Είναι ευκολότερη η αφαίρεση υποδομών και κτιρίων που κατέχονται από την πόλη @@ -1451,10 +1451,10 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Κλίση εδ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Η κλίση ενός κεκλιμένου τετραγωνίδιου για τα οδικά οχήματα. Μεγαλύτερες τιμές καθιστούν δυσκολότερο το ανέβασμα λόφων STR_CONFIG_SETTING_FORBID_90_DEG :Απαγόρευση στα τρένα να κάνουν στροφές 90°: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Στροφές 90 μοιρών προκύπτουν όταν μια οριζόντια σιδηροτροχιά ακολουθείται από μια κάθετη στο επόμενο τετραγωνίδιο, κάνοντας το τρένο να στρίψει κατά 90 μοίρες όταν αλλάζει τετραγωνίδιο, αντί για τις συνηθισμένες 45 μοίρες σε άλλους συνδυασμούς σιδηροτροχιών. Αυτό έχει επίσης εφαρμογή στην ακτίνα στροφής των πλοίων +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Στροφές 90 μοιρών προκύπτουν όταν μια οριζόντια σιδηροτροχιά ακολουθείται από μια κάθετη στο επόμενο τετραγωνίδιο, κάνοντας το τρένο να στρίψει κατά 90 μοίρες όταν αλλάζει τετραγωνίδιο, αντί για τις συνηθισμένες 45 μοίρες σε άλλους συνδυασμούς σιδηροτροχιών STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Να επιτρέπεται η συνένωση μη παρακείμενων σταθμών: {STRING} -STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Επιτρέπεται η προσθήκη τμημάτων σε σταθμό χωρίς αυτά να αγγίζουν τα ήδη υπάρχοντα τμήματα. Χρειάζεται Ctrl+Κλικ κατά την τοποθέτηση των νέων τμημάτων +STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Επιτρέπεται η προσθήκη τμημάτων σε σταθμό χωρίς αυτά να αγγίζουν τα ήδη υπάρχοντα τμήματα, με Ctrl+Κλικ κατά την τοποθέτηση των νέων τμημάτων STR_CONFIG_SETTING_INFLATION :Πληθωρισμός: {STRING} STR_CONFIG_SETTING_INFLATION_HELPTEXT :Ενεργοποίηση του πληθωρισμού στην οικονομία, όπου τα κόστη αυξάνονται ελάχιστα ταχύτερα από τις πληρωμές @@ -1500,7 +1500,7 @@ STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Οι νέες STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Κανονικά, τα οχήματα σταματούν σε κάθε σταθμό που περνούν. Ενεργοποιώντας αυτήν τη ρύθμιση, δεν θα σταματούν σε κανένα σταθμό που θα βρει στη διαδρομή τους προς τον τελικό προορισμό. Σημείωστε πως αυτή η ρύθμιση ορίζει μόνο μια καθορισμένη τιμή για νέες εντολές. Ειδικές εντολές μπορούν να δοθούν για οποιαδήποτε συμπεριφορά, άσχετα από την προκαθορισμένη STR_CONFIG_SETTING_STOP_LOCATION :Οι εντόλες νέων τρένων διορίζουν ότι σταματάνε εξ ορισμού στο {STRING} της πλατφόρμας -STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Το προεπιλεγμένο σημείο όπου θα σταματούν τα τρένα στην πλατφόρμα . Το «κοντινό άκρο» σημαίνει κοντά στο σημείο εισόδου, «Μέση» σημαίνει στο μέσο της πλατφόρμας και «μακρινό άκρο» σημαίνει στο άλλο άκρο από το σημείο εισόδου. Σημειώστε ότι αυτή η ρύθμιση ορίζει μόνο την προκαθορισμένη τιμή για νέες εντολές. Παρ' όλα αυτά, είναι δυνατό να δοθούν διαφορετικές εντολές για οποιαδήποτε συμπεριφορά. +STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Ορισμός προεπιλεγμένου σημείου που θα σταματούν τα τρένα στην πλατφόρμα. Το «κοντινό άκρο» σημαίνει κοντά στο σημείο εισόδου, «μέση» σημαίνει στο μέσο της πλατφόρμας και «μακρινό άκρο» σημαίνει στο άλλο άκρο από το σημείο εισόδου. Σημειώστε ότι αυτή η ρύθμιση ορίζει μόνο την προεπιλεγμένη τιμή για νέες εντολές. Οι μεμονωμένες εντολές μπορούν να έχουν τη δική τους θέση στάσης κάνοντας κλικ πάνω στο κείμενο της εντολής ###length 3 STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :κοντινό άκρο STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :στη μέση @@ -1550,8 +1550,8 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Κανονικ STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Επιτρέπονται ισόπεδες διαβάσεις με δρόμους που ανήκουν σε ανταγωνιστές: {STRING} STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Επιτρέπεται η κατασκευή ισόπεδων διαβάσεων με δρόμους ή σιδηροτροχιές που ανήκουν σε ανταγωνιστές -STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Επιτρέπονται οι στάσεις σε δρόμους που είναι ιδιοκτησία των πόλεων : {STRING} -STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Επιτρέπεται η κατασκευή στάσεων πάνω σε δρόμους που είναι ιδιοκτησία των πόλεων +STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Επιτρέπονται οι στάσεις διέλευσης σε δρόμους που είναι ιδιοκτησία πόλεων: {STRING} +STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Επιτρέπεται η κατασκευή στάσεων διέλευσης σε δρόμους που είναι ιδιοκτησία πόλεων STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Επιτρέπονται οι στάσεις σε δρόμους που ανήκουν σε ανταγωνιστές: {STRING} STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Επιτρέπεται η κατασκευή στάσεων πάνω σε δρόμους που ανοίκουν σε ανταγωνιστές STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Δεν είναι δυνατή η αλλαγή αυτής της ρύθμισης όταν υπάρχουν οχήματα. @@ -1621,7 +1621,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Διάρκει STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Διάρκεια εμφάνισης μηνύματων σφάλματος σε κόκκινο παράθυρο. Σημειώστε ότι μερικά (κρίσιμα) μηνύματα σφάλματος δεν κλείνουν αυτόματα μετά από αυτόν τον χρόνο, αλλά πρέπει να κλείσουν χειροκίνητα STR_CONFIG_SETTING_HOVER_DELAY :Εμφάνιση αναδυόμενων μηνυμάτων: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Καθυστέρηση πριν την εμφάνιση των επεξηγήσεων όταν ο δείκτης του ποντικιού βρίσκεται πάνω από κάποιο στοιχείο της διεπαφής. Εναλλακτικά, οι επεξηγήσεις συνδέονται με το δεξί κουμπί του ποντικιού όταν η τιμή αυτού του πεδίου είναι 0. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Καθυστέρηση πριν την εμφάνιση των επεξηγήσεων όταν ο δείκτης του ποντικιού βρίσκεται πάνω από κάποιο στοιχείο της διεπαφής. Εναλλακτικά, οι επεξηγήσεις συνδέονται με το δεξί κουμπί του ποντικιού όταν η τιμή αυτού του πεδίου είναι 0 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Ο δείκτης του ποντικιού να βρίσκεται από πάνω για {COMMA} δευτερόλεπτ{P 0 ο α} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Δεξί κουμπί @@ -1633,8 +1633,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Πάχος γρ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Πάχος γραμμών στα γραφήματα. Οι λεπτές γραμμές διαβάζονται με μεγαλύτερη ακρίβεια, οι παχύτερες είναι πιο ευδιάκριτες και τα χρώματα ξεχωρίσουν ευκολότερα STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Εμφάνιση του ονόματος NewGRF στο παράθυρο κατασκευής οχήματος: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Προσθέστε μία γραμμή στο παράθυρο κατασκευής οχήματος, η οποία δείχνει από ποιο NewGRF προέρχεται το επιλεγμένο όχημα. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Εμφάνιση όλων των αποδεκτών φορτίων οχημάτων στις λίστες εικονίδιων {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Προσθήκη μιας γραμμής στο παράθυρο κατασκευής οχήματος, στην οποία εμφανίζεται το NewGRF από το οποίο προέρχεται το επιλεγμένο όχημα +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Εμφάνιση των αποδεκτών φορτίων των οχημάτων στα παράθυρα της λίστας: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Όταν είναι ενεργοποιημένο, το μεταφέρσημο φορτίο του οχήματος θα εμφανίζεται από πάνω του στις λίστες οχημάτων STR_CONFIG_SETTING_LANDSCAPE :Τοπίο: {STRING} @@ -1647,27 +1647,27 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Αυθεντι STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Σχηματισμός εδάφους: {STRING} -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(TerraGenesis μόνο) Λοφώδησ χαρακτήρας του εδάφους +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Επιλογή του ύψους των λόφων και των βουνών του τοπίου STR_CONFIG_SETTING_INDUSTRY_DENSITY :Πυκνότητα βιομηχανιών: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Θέτει πόσες βιομηχανίες θα δημιουργηθούν και σε τι επίπεδο θα μέινουν κάτα τη διάρκεια το παιχνιδιού STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Μέγιστη απόσταση από την άκρη του χάρτη για τα Διυλιστήρια: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Τα Διυλιστήρια κατασκευάζονται κοντά στην άκρη του χάρτη, η οποία είναι ακτή σε νησιωτικούς χάρτες +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Όριο για το πόσο μακριά από τα σύνορα του χάρτη μπορούν να κατασκευαστούν διυλιστήρια και εξέδρες πετρελαίου. Στους χάρτες νησιών, αυτό διασφαλίζει ότι βρίσκονται κοντά στην ακτή. Σε χάρτες μεγαλύτερους από 256 πλακίδια, αυτή η τιμή κλιμακώνεται προς τα πάνω STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Κορυφογραμμή χιονιού: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Έλεγχος του ύψους στο οποίο ξεκινά το χιόνι στο υπαρκτικό τοπίο. Το χιόνι επηρεάζει επίσης τη δημιουργία βιομηχανιών και τις προυποθέσεις επέκτασης πόλης. Μπορεί να μεταβληθεί μόνο μέσω του Συντάκτη Σεναρίων ή αλλιώς υπολογίζεται μέσω της "κάλυψης χιονιού" +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Έλεγχος του ύψους στο οποίο ξεκινά το χιόνι στο υποαρκτικό τοπίο. Το χιόνι επηρεάζει επίσης τη δημιουργία βιομηχανιών και τις προυποθέσεις επέκτασης πόλης. Μπορεί να μεταβληθεί μόνο μέσω του Διαχειριστή Σεναρίων ή αλλιώς υπολογίζεται μέσω της "κάλυψης χιονιού" STR_CONFIG_SETTING_SNOW_COVERAGE :Κάλυψη χιονιού: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Ελέγχει την κατα προσέγγιση ποσότητα χιονιού στα υπο-αρκτικά τοπία. Το χιόνι επιρρεάζει επίσης τις απαιτήσεις παραγωγής βιομηχανιών και ανάπτυξης πόλεων. Χρησιμοποιήται μόνο κατά τη διάρκεια της παραγωγής του χάρτη. Το έδαφος που βρίσκεται κοντά στο επίπεδο της θάλασσας είναι πάντα χωρίς χιόνι +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Ορισμός της κατα προσέγγιση ποσότητας χιονιού στα υποαρκτικά τοπία. Το χιόνι επηρεάζει επίσης τη δημιουργία βιομηχανιών και τα προαπαιτούμενα για την εξέλιξη πόλεων. Χρησιμοποιήται μόνο κατά τη διάρκεια της παραγωγής του χάρτη. Το έδαφος που βρίσκεται στο επίπεδο της θάλασσας και οι ακτές, δεν έχουν ποτέ χιόνι STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Κάλυψη ερήμου: {STRING} -STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Ελέγχει την κατά προσέγγιση ποσότητα ερήμου στα τροπικά τοπία. Η έρημος επιρρεάζει επίσης την παραγωγή βιομηχανιών. Χρησιμοποιείται μόνο κατά τη διάρκεια δημιουργίας του χάρτη +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Επιλογή της κατά προσέγγιση ποσότητας ερήμου στα τροπικά τοπία. Η έρημος επηρεάζει επίσης τη δημιουργία βιομηχανιών και τα προαπαιτούμενα για την εξέλιξη πόλεων. Χρησιμοποιείται μόνο κατά τη διάρκεια δημιουργίας του χάρτη STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Ανωμαλία επιφάνειας (μόνο με TerraGenesis) : {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis μόνο) Επιλογή της συψνότητας των λόφων: Τα λεία τοπία έχουν λιγότερους, πιο πλατείς λόφους. Τα τραχιά τοπία έχουν πολλούς λόφους που μπορεί να δείχνει μονότονο +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Επιλογή του σχήματος και του αριθμού των λόφων: Τα λεία τοπία έχουν λιγότερους, πιο πλατείς λόφους, ενώ τα τραχιά τοπία έχουν πολλούς και μικρούς λόφους ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Πολύ Απαλή STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Απαλή @@ -1675,7 +1675,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Ανώμαλη STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Πολύ Ανώμαλη STR_CONFIG_SETTING_VARIETY :Διανομή ποικιλομορφίας: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :(TerraGenesis μόνο) Ελέγξτε εάν ο χάρτης θα περιέχει και ορεινές και πεδινές εκτάσεις. Μιας και αυτό μονάχα κάνει το χάρτη πιο επίπεδο, οι άλλες ρυθμίσιες θα πρεπει να τεθούν στο ορεινό +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Επιλέξτε αν ο χάρτης περιέχει και βουνά και επίπεδες περιοχές. Όσο μεγαλύτερη είναι η ποικιλία, τόσο περισσότερες οι υψομετρικές διαφορές μεταξύ ορεινών και επίπεδων περιοχών STR_CONFIG_SETTING_RIVER_AMOUNT :Πλήθος ποταμών: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Επιλέξτε πόσα ποτάμια να δημιουργηθούν @@ -1722,7 +1722,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Σκούρο π STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Βιολετί STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Χρώμα επίστρωσης ροής φορτίου: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Θέσημο της παλέτας χρωμάτων που θα χρησιμοποιηθούν για την επίστρωση ροής φορτίου +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Ορισμός της παλέτας χρωμάτων που θα χρησιμοποιηθούν για την επίστρωση ροής φορτίου ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Πράσινο σε κόκκινο (Αρχικό) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Πράσινο σε μπλέ @@ -1730,7 +1730,7 @@ STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :Γκρι σε STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Ασπρόμαυρο STR_CONFIG_SETTING_SCROLLMODE :Συμπεριφορά κύλισης του παραθύρου εμφάνισης: {STRING} -STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Συμπεριφορά κατά την κύλιση του χάρτη +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Συμπεριφορά κατά την κύλιση του χάρτη. Οι επιλογές "κλειδωμένης θέσης ποντικιού" δεν λειτουργούν σε όλα τα συστήματα, όπως εκδόσεις που βασίζονται στον ιστό, οθόνες αφής, Linux με Wayland και άλλα ###length 4 STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Μετακίνηση μικρού χάρτη με ΔΠΠ, θέση ποντικιού κλειδωμένη STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Μετακίνηση χάρτη με ΔΠΠ, θέση ποντικιού κλειδωμένη @@ -1846,7 +1846,7 @@ STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Αυτόματ STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Αυτόματη αφαίρεση σηματοδοτών κατά τη διάρκεια κατασκευής σιδηροτροχιών εάν οι σηματοδότες είναι στη διαδρομή. Σημειώστε ότι αυτό μπορεί δυνητικά να οδηγήσει σε συγκρούσεις τρένων STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Όριο ταχύτητας γρήγορης κίνησης: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Όριο ταχύτητας του παιχνιδιού όταν είναι ενεργοποιημένη η γρήγορη ταχύτητα. 0 = κανένα όριο (όσο γρήγορα επιτρέπει ο υπολογιστής σας). Τιμές κάτω του 100% επιβραδύνουν το παιχνίδι. Το ανώτατο όριο εξαρτάται από τις προδιαγραφές του υπολογιστή σας και μπορεί να μεταβάλλεται ανάλογα με το παιχνίδι. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Όριο ταχύτητας του παιχνιδιού όταν είναι ενεργοποιημένη η γρήγορη ταχύτητα. 0 = κανένα όριο (όσο γρήγορα επιτρέπει ο υπολογιστής σας). Τιμές κάτω του 100% επιβραδύνουν το παιχνίδι. Το ανώτατο όριο εξαρτάται από τις προδιαγραφές του υπολογιστή σας και μπορεί να μεταβάλλεται ανάλογα με το παιχνίδι STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% της κανονικής ταχύτητας παιχνιδιού ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Χωρίς όριο (όσο γρήγορα επιτρέπει ο υπολογιστής σας) @@ -1910,11 +1910,11 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Επιτρέπ STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#εντολών πριν την παύση δεσμών ενεργειών: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Μέγιστος αριθμός βημάτων υπολογισμού που κάνει κάποιο σενάριο σε κάθε σειρά STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Μέγιστη χρήση μνήμης ανά script: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Πόση μνήμη μπορεί να καταναλώσει ένα script προτού τερματιστεί αναγκαστικά. Μπορεί να χρειαστεί να αυξηθεί για μεγαλύτερους χάρτες. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Πόση μνήμη μπορεί να καταναλώσει ένα script προτού τερματιστεί αναγκαστικά. Μπορεί να χρειαστεί να αυξηθεί για μεγαλύτερους χάρτες STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Τα διαστήματα μεταξύ συντήρησης είναι σε ποσοστά: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Επιλέξτε εάν η επισκευή των οχημάτων εξαρτάται από τον χρόνο που πέρασε από την τελευταία επισκευή ή από την μείωση της αξιοπιστίας κατά ένα συγκεκριμένο ποσοστό της μέγιστης αξιοπιστίας +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Όταν είναι ενεργοποιημένο, τα οχήματα προσπαθούν να κάνουν σέρβις όταν η αξιοπιστία τους πέσει κατά ένα συγκεκριμένο ποσοστό της μέγιστης αξιοπιστίας.{}{}Για παράδειγμα, εάν η μέγιστη αξιοπιστία ενός οχήματος είναι 90% και το διάστημα σέρβις είναι 20%, το όχημα θα προσπαθήσει να κάνει σέρβις όταν φτάσει το 72% αξιοπιστίας STR_CONFIG_SETTING_SERVINT_TRAINS :Προκαθορισμένο διάστημα μεταξύ επισκευών για τα τρένα: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Ορίστε το προκαθορισμένο διάστημα μεταξύ συντηρήσεων για τα νέα οχήματα τρένων, όταν δεν δίνεται άλλο διάστημα για το όχημα @@ -1924,7 +1924,7 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Προκαθο STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Ορίστε το προκαθορισμένο διάστημα μεταξύ συντηρήσεων για τα νέα αεροσκάφη, όταν δεν δίνεται άλλο διάστημα για το αεροσκάφος STR_CONFIG_SETTING_SERVINT_SHIPS :Προκαθορισμένο διάστημα μεταξύ επισκευών για τα πλοία: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Ορίστε το προκαθορισμένο διάστημα μεταξύ συντηρήσεων για τα νέα πλοία, όταν δεν δίνεται άλλο διάστημα για το πλοίο -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}ημέρ{P 0 α ες}/% +STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Ημέρ{P 0 α ες}/Λεπτ{P ό ά}/% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Απενεργοποιημένο @@ -2003,7 +2003,7 @@ STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Ποτέ STR_CONFIG_SETTING_ECONOMY_TYPE :Τύπος οικονομίας: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Η ομαλή οικονομία κάνει διαφοροποιήσεις στην παραγωγή πιο συχνά, και σε μικρότερα βήματα. Η παγωμένη οικονομία σταματά τις διαφοροποιήσεις στην παραγωγή και το κλείσιμο των βιομηχανιών. Αυτή η ρύθμιση μπορεί να μην έχει καμία αλλαγή εάν οι τύποι βιομηχανιών προσφέρονται από ένα NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Η ομαλή οικονομία κάνει διαφοροποιήσεις στην παραγωγή πιο συχνά και σε μικρότερα βήματα. Η παγωμένη οικονομία σταματά τις διαφοροποιήσεις στην παραγωγή και το κλείσιμο των βιομηχανιών. Αυτή η ρύθμιση μπορεί να μην έχει καμία αλλαγή εάν οι τύποι βιομηχανιών ορίσονται από ένα NewGRF ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Αρχικό STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Ομαλή @@ -2047,8 +2047,8 @@ STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Επιτρέπ STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Οι πόλεις επιτρέπουν το κτίσιμο ισόπεδων διασταυρώσεων: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Ενεργοποιώντας αυτήν τη ρύθμιση επιτρέπει στις πόλεις να κατασκευάζουν επίπεδες διαβάσεις -STR_CONFIG_SETTING_NOISE_LEVEL :Επιτρέπεται η πόλη να ελέγχει το επίπεδο θορύβου των αεροδρομίων: {STRING} -STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Με αυτήν τη ρύθμιση απενεργοποιημένη, γίνεται να υπάρχουν δύο αεροδρόμια σε κάθε πόλη. Με αυτήν τη ρύθμιση ενεργοποιημένη, ο αριθμός των αεροδρομίων σε μια πόλη περιορίζεται από την αποδοχή του θορύβου από την πόλη, η οποία εξαρτάται από τον πληθυσμό, το μέγεθος του αεροδρομίου και την απόστασή του από την πόλη +STR_CONFIG_SETTING_NOISE_LEVEL :Περιορισμός τοποθέτησης αεροδρομίων ανάλογα με το επίπεδο θορύβου: {STRING} +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Επιτρέπεται στις πόλεις να μπλοκάρουν την κατασκευή αεροδρομίων με βάση το επίπεδο αποδοχής θορύβου, το οποίο βασίζεται στον πληθυσμό της πόλης και στο μέγεθος και την απόσταση του αεροδρομίου. Εάν αυτή η ρύθμιση είναι απενεργοποιημένη, οι πόλεις επιτρέπουν μόνο δύο αεροδρόμια, εκτός εάν η στάση της τοπικής αρχής έχει οριστεί σε "Επιτρεπτή" STR_CONFIG_SETTING_TOWN_FOUNDING :Ίδρυση πόλεων στο παιχνίδι: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Ενεργοποιώντας αυτήν τη ρύθμιση επιτρέπει στους παίκτες να ιδρύσουν νέες πόλεις στο παιχνίδι @@ -2099,7 +2099,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Η μεγαλύτερη ανάλυση που χρησιμοποιούν τα sprites: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Περιορίστε την μέγιστη ανάλυση για τα sprites. Περιορίζοντας την ανάλυση θα αποφύγετε την χρήση γραφικών υψηλής ανάλυσης ακόμα και όταν είναι διαθέσιμα. Αυτό μπορεί να βοηθήσει να κρατήσετε την εμφάνιση του παιχνιδιού ενιαία όταν χρησιμοποιείτε μία μίξη από GRF αρχεία με και χωρίς γραφικά υψηλής ανάλυσης. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Περιορίστε την μέγιστη ανάλυση για τα sprites. Περιορίζοντας την ανάλυση των sprites, θα αποφύγετε την χρήση γραφικών υψηλής ανάλυσης ακόμα και όταν αυτά είναι διαθέσιμα. Αυτό μπορεί να βοηθήσει να κρατήσετε την εμφάνιση του παιχνιδιού ενιαία όταν χρησιμοποιείτε μία μίξη από GRF αρχεία με και χωρίς γραφικά υψηλής ανάλυσης ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2128,25 +2128,25 @@ STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Χρήση το STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Χρόνος που απαιτείται για κάθε επανυπολογισμό ενός στοιχείου γραφήματος συνδέσμου. Όταν ξεκινά ένας επανυπολογισμός, δημιουργείται ένα νήμα στο οποίο επιτρέπεται να τρέξει για αυτόν τον αριθμό δευτερολέπτων. Σε όσο πιο μικρή τιμή το ορίσετε, τόσο πιο πιθανό είναι να μην έχει τελειώσει το νήμα στον χρόνο που έχει προβλεφθεί. Στη συνέχεια, το παιχνίδι σταματά μέχρι να είναι σε "καθυστέρηση" ("lag"). Σε όσο πιο μεγάλη τιμή το ορίσετε, τόσο περισσότερος χρόνος θα χρειαστεί για να ενημερωθεί η διανομή όταν αλλάζουν οι διαδρομές STR_CONFIG_SETTING_DISTRIBUTION_PAX :Τρόπος διανομής επιβατών: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :Το «συμμετρικό» σημαίνει ότι περίπου ο ίδιος αριθμός επιβατών θα σταλέι από έναν σταθμό Α σε ένα σταθμό Β όσο από τον Β στον Α. Το «ασυμμετρικό» σημαίνει ότι αυθαίρετος αριθμός επιβατών μπορεί να σταλούν σε οποιαδήποτε εκ των δύο κατευθύνσεων. Το «χειροκίνητο» σημαίνει ότι καμία αυτόματη διανομή δε θα γίνεται για τους επιβάτες. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :Το «συμμετρικό» σημαίνει ότι περίπου ο ίδιος αριθμός επιβατών θα σταλεί από έναν σταθμό Α σε ένα σταθμό Β όσο και από τον Β στον Α. Το «ασυμμετρικό» σημαίνει ότι αυθαίρετος αριθμός επιβατών μπορεί να σταλούν σε οποιαδήποτε εκ των δύο κατευθύνσεων. Το «χειροκίνητο» σημαίνει ότι καμία αυτόματη διανομή δε θα γίνεται για τους επιβάτες STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Τρόπος διανομής αλληλογραφίας: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :Το «συμμετρικό» σημαίνει ότι περίπου η ίδια ποσότητα αλληλογραφίας θα σταλέι από έναν σταθμό Α σε ένα σταθμό Β όσο από τον Β στον Α. Το «ασυμμετρικό» σημαίνει ότι αυθαίρετες ποσότητες αλληλογραφίας μπορεί να σταλούν σε οποιαδήποτε εκ των δύο κατευθύνσεων. Το «χειροκίνητο» σημαίνει ότι καμία αυτόματη διανομή δε θα γίνεται για την αλληλογραφία. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :Το «συμμετρικό» σημαίνει ότι περίπου η ίδια ποσότητα αλληλογραφίας θα σταλεί από έναν σταθμό Α σε ένα σταθμό Β όσο και από τον Β στον Α. Το «ασυμμετρικό» σημαίνει ότι αυθαίρετες ποσότητες αλληλογραφίας μπορεί να σταλούν σε οποιαδήποτε εκ των δύο κατευθύνσεων. Το «χειροκίνητο» σημαίνει ότι καμία αυτόματη διανομή δε θα γίνεται για την αλληλογραφία STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Τρόπος διανομής για το ΘΩΡΑΚΙΣΜΕΝΟ είδος φορτίου: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Ο ΘΩΡΑΚΙΣΜΕΝΟΣ τύπος φορτίου περιέχει πολύτιμα στο εύκρατο, διαμάντια στο υποτροπικό ή χρυσό στο υποαρκτικό κλίμα. Τα NewGRF μπορούν να το αλλάξουν αυτό. Το «συμμετρικό» σημαίνει ότι περίπου η ίδια ποσότητα φορτίου θα σταλέι από έναν σταθμό Α σε ένα σταθμό Β όσο από τον Β στον Α. Το «ασυμμετρικό» σημαίνει ότι αυθαίρετες ποσότητες αυτού του φορτίου μπορεί να σταλούν σε οποιαδήποτε εκ των δύο κατευθύνσεων. Το «χειροκίνητο» σημαίνει ότι καμία αυτόματη διανομή δε θα γίνεται για το συκγεκριμένο τύπο φορτίου. Συνιστάται η χρήση του ασυμμετρικού ή χειροκίνητου μοντέλου ο΄ταν παίζετε στο υποαρκτικό κλίμα, καθώς οι τράπεζες δε θα στέλνουν χρυσό πίσω στα χρυσωρυχεία. Για το εύκρατο ή υποτροπικό κλίμα μπορείτε επίσης να χρησιμοιήσετε το συμμετρικό καθώς οι τράπεζες θα στέλνουν πολύτιμα πίσω στην τράπεζα προέλευσης. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Ο ΘΩΡΑΚΙΣΜΕΝΟΣ τύπος φορτίου περιέχει πολύτιμα στο εύκρατο, διαμάντια στο υποτροπικό ή χρυσό στο υποαρκτικό κλίμα. Τα NewGRF ενδέχεται να το αλλάξουν αυτό. Το «συμμετρικό» σημαίνει ότι θα σταλεί περίπου η ίδια ποσότητα φορτίου από έναν σταθμό Α σε ένα σταθμό Β όσο και από τον Β στον Α. Το «ασυμμετρικό» σημαίνει ότι αυθαίρετες ποσότητες αυτού του φορτίου μπορεί να σταλούν σε οποιαδήποτε εκ των δύο κατευθύνσεων. Το «χειροκίνητο» σημαίνει ότι καμία αυτόματη διανομή δε θα γίνεται για το συγκεκριμένο τύπο φορτίου. Συνιστάται η χρήση του «ασυμμετρικού» ή «χειροκίνητου» μοντέλου όταν παίζετε στο υποαρκτικό ή υποτροπικό κλίμα, καθώς οι τράπεζες δέχονται μόνο εμπρόρευμα σε αυτά τα κλίματα. Για το εύκρατο κλίμα μπορείτε επίσης να χρησιμοιήσετε το «συμμετρικό» καθώς οι τράπεζες θα στέλνουν πολύτιμα πίσω στην τράπεζα προέλευσης. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Τρόπος διανομής άλλων ειδών φορτίου: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :Το «ασυμμετρικό» σημαίνει ότι αυθαίρετες ποσότητες αυτού του φορτίου μπορεί να σταλούν σε οποιαδήποτε εκ των δύο κατευθύνσεων. Το «χειροκίνητο» σημαίνει ότι καμία αυτόματη διανομή δε θα γίνεται για αυτά τα φορτία. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :Το «ασυμμετρικό» σημαίνει ότι αυθαίρετες ποσότητες φορτίου μπορεί να σταλούν σε οποιαδήποτε εκ των δύο κατευθύνσεων. Το «χειροκίνητο» σημαίνει ότι καμία αυτόματη διανομή δε θα γίνεται για αυτά τα φορτία ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :χειροκίνητη STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :μη συμμετρική STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :συμμετρική STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Ακρίβεια διανομής: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Όσο μεγαλύτερη ή τιμή τόσο περισσότερος χρόνος επεξεργαστή χρειάζεται για τον υπολογσιμό του γραφήματος συνδέσμου. Εάν όμως θέσετε χαμηλή τιμή, η διανομή θα είναι ανακριβής και μπορεί να παρατηρήσετε φορτία να μην στέλνονται στοθς προορισμούς που θα έπρεπε να πηγαίνουν. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Όσο μεγαλύτερη ή τιμή αυτή, τόσο περισσότερος χρόνος επεξεργαστή θα χρειάζεται για τον υπολογισμό του γραφήματος συνδέσμου. Αν το ορίσετε πολύ ψηλά, ενδέχεται να παρατηρήσετε καθυστερήσεις. Εάν όμως θέσετε χαμηλή τιμή, η διανομή θα είναι ανακριβής και μπορεί να παρατηρήσετε φορτία να μην στέλνονται στους προορισμούς που θα έπρεπε να πηγαίνουν STR_CONFIG_SETTING_DEMAND_DISTANCE :Επίδραση της απόστασης στη ζήτηση προϊόντων: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Αν ορίσετε αυτό σε μια τιμή μεγαλύτερη από 0, η απόσταση μεταξύ ενός αρχικού σταθμού Α ενός φορτίου και ενός πιθανού προορισμού Β θα επηρεάσει το ποσό του φορτίου που θα αποσταλεί από τον Α στον Β. Όσο πιο μακριά βρίσκεται ο Β από τον Α, τόσο λιγότερο φορτίο θα αποσταλεί. Όσο πιο μεγάλη τιμή ορίσετε, θα αποστέλλεται λιγότερο φορτίο σε μακρινούς προορισμούς και περισσότερο σε κοντινούς. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Αν το ορίσετε σε μια τιμή μεγαλύτερη από 0, η απόσταση μεταξύ ενός αρχικού σταθμού Α ενός φορτίου και ενός πιθανού προορισμού Β θα επηρεάσει το ποσό του φορτίου που θα αποσταλεί από τον Α στον Β. Όσο πιο μακριά βρίσκεται ο Β από τον Α, τόσο λιγότερο φορτίο θα αποσταλεί. Όσο πιο μεγάλη τιμή ορίσετε, θα αποστέλλεται λιγότερο φορτίο σε μακρινούς προορισμούς και περισσότερο σε κοντινούς STR_CONFIG_SETTING_DEMAND_SIZE :Ποσότητα επιστρεφόμενου φορτίου στη συμμετρική ρύθμιση: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Θέτοντας αυτή τη ρύθμιση σε τιμή λιγότερη του 100% κάνετε τη συμμετρική διανομή να συμπεριφέρεται πιο πολύ σαν την ασυμμετρική. Λιγότερο φορτίο θα στέλνεται πίσω εαν μια συγκεκριμένη ποσότητα έχει σταλεί σε έναν σταθμό. Αν τεθεί στο 0% η συμμετρική διανομή συμπεριφέρεται ακριβώς όπως η ασυμμετρική. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Θέτοντας αυτή τη ρύθμιση σε τιμή λιγότερη του 100% κάνετε τη συμμετρική διανομή να συμπεριφέρεται πιο πολύ σαν την ασυμμετρική. Λιγότερο φορτίο θα στέλνεται πίσω εαν μια συγκεκριμένη ποσότητα έχει σταλεί σε έναν σταθμό. Αν τεθεί στο 0% η συμμετρική διανομή συμπεριφέρεται ακριβώς όπως η ασυμμετρική STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Κορεσμός σύντομων οδών πριν τη χρήση οδών μεγάλης χωρητικότητας: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Συχνά υπάρχουν πολλαπλές οδοί μεταξύ δύο σταθμών. Η διανομή φορτίων θα κορέσει την πιο σύντομη οδό πρώτα, και μετέπειτα θα χρησιμοποιήσει τη δεύτερη συντομότερη οδό μέχρι αυτή να κορεστεί και τα λοιπά. Ο κορεσμός εξαρτάται από μια εκτίμηση της χωρητικότητας και ενδεχόμενης χρήσης. Όταν έχουν κορεστεί όλες οι οδοί, αν εξακολουθεί και υπάρχει ζήτηση, θα υπερφορτώσει όλες τις οδούς, προτιμώντας αυτές με μεγάλη χωρητικότητα. Τις περισσότερες φορές όμως, ο αλγόριθμος δεν εκτιμά σωστά την χωρητικότητα. Αυτή η ρύθμιση σάς επιτρέπει να καθορίσετε μέχρι ποιο ποσοστό πρέπει να κορεσθεί μια μικρότερη διαδρομή στο πρώτο πέρασμα πριν επιλεγεί η επόμενη μεγαλύτερη. Ρυθμίστε τη σε λιγότερο από 100% για να αποφύγετε υπερπληθυσμένους σταθμούς σε περίπτωση υπερεκτιμημένης χωρητικότητας @@ -2358,8 +2358,8 @@ STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Εμφά STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Εμφάνιση χρωμάτων ομάδων οχημάτων δρόμου STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Εμφάνιση χρωμάτων ομάδων πλοίων STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Εμφάνιση χρωμάτων ομάδων αεροσκαφών -STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Επιλογή του βασικού χρώματος για το επιλεγμένο θέμα. Με Ctrl+Κλικ ορίζεται το χρώμα σε κάθε θέμα -STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Επιλογή του δευτερεύοντος χρώματος για το επιλεγμένο μοτίβο. Με Ctrl+Κλικ ορίζεται το χρώμα για κάθε θέμα +STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Επιλογή του βασικού χρώματος για το επιλεγμένο θέμα. Ctrl+Κλικ για ορισμό αυτού του χρώματος για κάθε θέμα +STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Επιλογή του δευτερεύοντος χρώματος για το επιλεγμένο θέμα. Ctrl+Κλικ για ορισμό αυτού του χρώματος για κάθε θέμα STR_LIVERY_PANEL_TOOLTIP :{BLACK}Επιλέξτε το χρωματικό μοτίβο για αλλαγή ή πολλαπλά μοτίβα με Ctrl+Κλικ. Πατήστε στο κουτάκι για να επιλέξετε τη χρήση του μοτίβου STR_LIVERY_TRAIN_GROUP_EMPTY :Δεν έχουν οριστεί ομάδες τραίνων STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Δεν έχουν οριστεί ομάδες οχημάτων δρόμου @@ -2522,7 +2522,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Το ό STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Θέση κωδικού STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Προστατέψτε το παιχνίδι με έναν κωδικό εάν δε θέλετε να είναι δημοσίως προσβάσιμο -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Ορατότητα +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Ορατότητα: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Ορίζει εάν άλλοι άνθρωποι μπορούν να δουν τον server σας στην δημόσια STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} συμπαίκτ{P ης ες} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Μέγιστος αριθμός συμμετεχόντων: @@ -2759,7 +2759,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Ψάξτ STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Φεύγετε από το OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Οι όροι και προϋποθέσεις για τη λήψη περιεχομένου από εξωτερικές ιστοσελίδες διαφέρουν.{}Θα πρέπει να αναφερθείτε στις εξωτερικές ιστοσελίδες για οδηγίες περί της εγκατάστασης του περιεχομένου στο OpenTTD.{}Θέλετε να συνεχίσετε; STR_CONTENT_FILTER_TITLE :{BLACK}Ετικέτα/όνομα φίλτρου: -STR_CONTENT_OPEN_URL :{BLACK}Επισκεφθείτε την ιστοσελίδα +STR_CONTENT_OPEN_URL :{BLACK}Ιστοσελίδα STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Επισκεφθείτε την ιστοσελίδα αυτού του περιεχομένου STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Λήψη STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Έναρξη κατεβάσματος του επιλεγμένου περιεχόμενου @@ -2881,13 +2881,13 @@ STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Κατασκε STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Κατασκευή σιδηροτροχιάς. Ctrl+Κλικ για αφαίρεση σιδηροτροχιάς. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Κατασκευή σιδηροτροχιάς με χρήση της Αυτόματης Σιδηροτροχιάς. Ctrl+Κλικ για αφαίρεση σιδηροτροχιάς. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Κατασκευή αμαξοστάσιου (για αγορά και επισκευή τρένων). Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Μετατροπή σιδηροτροχιάς σε σημείο καθοδήγησης. Με Ctrl ενεργοποιείται η συνένωση σημείων καθοδήγησης. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Κατασκευή σταθμού τρένων. Ctrl+Κλικ για επιλογή άλλου σταθμού προς συνένωση. Με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Μετατροπή σιδηροτροχιάς σε σημείο καθοδήγησης. Ctrl+Κλικ για επιλογή πρόσθετου σημείου καθοδήγησης για συνένωση. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Κατασκευή σταθμού τρένων. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Κατασκευή σηματοδοτών. Ctrl+Κλικ για κατασκευή του εναλλακτικού στυλ σηματοδότη{}Με Κλικ+σύρσιμο κατασκευάζονται σηματοδότες κατά μήκος μιας σιδηροτροχιάς ανά το ορισμένο διάστημα. Ctrl+Κλικ+σύρσιμο για κατασκευή σηματοδοτών μέχρι την επομένη διασταύρωση, σταθμό ή σηματοδότη{}Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Κατασκευή γέφυρας σιδηρόδρομου. Επιπρόσθετα πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Κατασκευή τούνελ σιδηρόδρομου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Εναλλαγή κατασκευής/αφαίρεσης για σιδηρόδρομους, σηματοδότες, σημείων καθοδήγησης και σταθμών. Κρατώντας πατημένο το Ctrl αφαιρεί και τον σιδηρόδρομο από τα σημεία καθοδήγησης και σταθμούς -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Μετατροπή/Αναβάθμιση του τύπου γραμμής. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους +STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Εναλλαγή κατασκευής/αφαίρεσης σιδηροτροχιών, σηματοδοτών, σημείων καθοδήγησης και σταθμών. Ctrl+Κλικ για αφαίρεση και της σιδηροτροχιάς από σημεία καθοδήγησης και σταθμούς +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Μετατροπή/Αναβάθμιση του τύπου γραμμής. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_RAIL_NAME_RAILROAD :Σιδηρόδρομος STR_RAIL_NAME_ELRAIL :Ηλεκτροδοτημένη σιδηροτροχιά @@ -2937,7 +2937,7 @@ STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Σημα STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Συνδυαστικός Σηματοδότης (ηλεκτρικός){}Ο συνδυαστικός σηματοδότης δουλεύει απλά ως σηματοδότης εισόδου και εξόδου ταυτόχρονα. Αυτό σας επιτρέπει το κτίσιμο μεγάλων «δέντρων» με προ-σηματοδότες STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Σηματοδότης Τροχιάς (ηλεκτρικός){}Ένας σηματοδότης τροχιάς επιτρέπει σε περισσότερα από ένα τρένο να είναι σε ένα κομμάτι ελέγχου την ίδια στιγμή, εάν το τρένο μπορεί να δεσμεύσει τροχιά σε ασφαλές σημείο στάσης. Κανονικοί σηματοδότες τροχιάς μπορούν να περαστούν από την πίσω πλευρά STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Μονόδρομος Σηματοδότης Τροχιάς (ηλεκτρικός){}Ένας σηματοδότης τροχιάς επιτρέπει σε περισσότερα από ένα τρένο να είναι σε ένα κομμάτι ελέγχου την ίδια στιγμή, εάν το τρένο μπορεί να δεσμεύσει τροχιά σε ασφαλές σημείο στάσης. Μονόδρομοι σηματοδότες τροχιάς δεν μπορούν να περαστούν από την πίσω πλευρά -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Μετατροπέας Σηματοδότη{}Όταν επιλέγεται, πατώντας σε έναν υπάρχωντα σηματοδότη θα τον μετατρέψει στον επιλεγμένο τύπο και παραλλαγή σηματοδότη. Με Ctrl+Κλικ εναλλάσσεται με την υπάρχουσα παραλλαγή. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος μετατροπής +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Μετατροπή σήματος{}Κάντε κλικ σε ένα υπάρχον σήμα για να το μετατρέψετε στον επιλεγμένο τύπο και παραλλαγή. Ctrl+Click για εναλλαγή της υπάρχουσας παραλλαγής. Το Shift+Click εμφανίζει το εκτιμώμενο κόστος μετατροπής STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Απόσταση μεταξύ σηματοδοτών με σύρσιμο STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Μείωση απόστασης μεταξύ σηματοδοτών με σύρσιμο STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Αύξηση απόστασης μεταξύ σηματοδοτών με σύρσιμο @@ -2964,24 +2964,24 @@ STR_BRIDGE_TUBULAR_SILICON :Σιλικόν STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Κατασκευή Δρόμου STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Κατασκευή Τροχιόδρομου STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Κατασκευή τμήματος δρόμου. Ctrl+Κλικ για αφαίρεση τμήματος δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Κατασκευή κομματιού τροχιοδρόμου. Με Ctrl εναλλάσσεται η κατασκευή/αφαίρεση τροχιόδρομου. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Κατασκευή οδικού δικτύου με χρήση της λειτουργίας Αυτόματου Δρόμου. Με Ctrl εναλλάσσεται η κατασκευή/αφαίρεση δρόμου. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Κατασκευή τροχιοδρόμου με χρήση της λειτουργίας Αυτόματης Γραμμής. Το Ctrl εναλλάσσει την κατασκευή/αφαίρεση τροχιόδρομου. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Κατασκευή κομματιού τροχιοδρόμου. Ctrl+Κλικ για αφαίρεση τροχιόδρομου. Επιπρόσθετα πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Κατασκευή οδικού δικτύου με χρήση της λειτουργίας Αυτόματου Δρόμου. Ctrl+Κλικ για αφαίρεση δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Κατασκευή τροχιοδρόμου με χρήση της λειτουργίας Αυτόματης Γραμμής. Ctrl+Κλικ για αφαίρεση τροχιόδρομου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Κατασκευή αμαξοστασίου οχημάτων δρόμου (για αγορά και επισκευή οχημάτων). Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Κατασκευή αμαξοστασίου οχημάτων τραμ (για αγορά και επισκευή οχημάτων). Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Κατασκευή σταθμού λεωφορείων. Με Ctrl ενεργοποιείται η συνένωση σταθμών. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Κατασκευή επιβατικού σταθμού τραμ. Με Ctrl ενεργοποιείται η συνένωση επιβατικών σταθμών. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Κατασκευή σταθμού φόρτωσης φορτηγών. Με Ctrl ενεργοποιείται η συνένωση σταθμών φόρτωσης. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Κατασκευή εμπορευματικού σταθμού τραμ. Με Ctrl ενεργοποιείται συνένωση εμπορευματικών σταθμών. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Κατασκευή αμαξοστασίου οχημάτων τραμ (για αγορά και συντήρηση οχημάτων). Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Κατασκευή σταθμού λεωφορείων. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Κατασκευή επιβατικού σταθμού τραμ. Ctrl+Κλικ για επιλογή πρόσθετου επιβατικού σταθμού για συνένωση. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Κατασκευή σταθμού φορτηγών. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Κατασκευή εμπορευματικού σταθμού τραμ. Ctrl+Κλικ για επιλογή πρόσθετου εμπορευματικού σταθμού για συνένωση. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Ενεργοποίηση/Απενεργοποίηση μονόδρομων STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Κατασκευή γέφυρας δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Κατασκευή γέφυρας τροχιοδρόμου. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Κατασκευή γέφυρας τροχιοδρόμου. Επιπρόσθετα πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Κατασκευή τούνελ δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Κατασκευή τούνελ τροχιοδρόμου. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Κατασκευή τούνελ τροχιοδρόμου. Επιπρόσθετα πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Εναλλαγή κατασκευής/αφαίρεσης για αυτοκινητόδρομους STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Εναλλαγή κτισίματος/αφαίρεσης της κατασκευής τροχιόδρομου -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Μετατρέψτε/Αναβαθμίστε τον τύπο του δρόμου. To Shift ανοιγοκλέινει το κατασκευαστική/εμφανισιακή εκτίμηση κόστους -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Μετατρέψτε/Αναβαθμίστε τον τύπο του τραμ. Το Shift εναλλάσει την κατασκευαστική/εμφανισιακή εκτίμηση κόστους +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Μετατρέψτε/Αναβαθμίστε τον τύπο του δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Μετατρέψτε/Αναβαθμίστε τον τύπο του τραμ. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_ROAD_NAME_ROAD :Δρόμος STR_ROAD_NAME_TRAM :Τροχιόδρομος @@ -2996,7 +2996,7 @@ STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Επιλ STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Προσανατολισμός Στάσης Λεωφορείου STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Επιλέξτε τον προσανατολισμό της στάσης των λεωφορείων STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Προσανατολισμός Σταθμού Φόρτωσης Φορτηγών -STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Επιλέξτε τον προσανατολισμό του σταθμού φόρτωσης φορτηγών +STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Επιλέξτε τον προσανατολισμό του σταθμού φορτηγών STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Προσανατολισμός Επιβατικού Σταθμού Τραμ STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Επιλέξτε τον προσανατολισμό του επιβατικού σταθμού τραμ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Προσανατολισμός Εμπορευματικού Σταθμού Τραμ @@ -3005,14 +3005,14 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Επιλ # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Κατασκευή Καναλιού Νερού STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Κανάλια Νερού -STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Κτίσιμο καναλιών. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Κατασκευή υδατοφράκτη. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Κατασκευάστε ναυπηγείο πλοίων (για αγορά και επισκευή πλοίων). Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Κατασκευή λιμένα πλοίων. Με Ctrl ενεργοποιείται η συνένωση λιμένων. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Τοποθετήστε μια σημαδούρα που μπορεί να χρησιμοποιηθεί ως σημείο καθοδήγησης. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Κατασκευή καναλιού. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Προσδιορισμός θαλάσσιας επιφάνειας.{}Δημιουργία καναλιού, εκτός εάν το πλήκτρο Ctrl είναι κρατημένο στο επίπεδο της θάλασσας, όπου θα πλημμυρίσει τις παρακείμενες περιοχές -STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Τοποθετήστε ποτάμια. Το Ctrl επιλέγει την περιοχή διαγώνια +STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Κατασκευή καναλιών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Κατασκευή υδατοφράκτη. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Κατασκευή ναυπηγείου πλοίων (για αγορά και επισκευή πλοίων). Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Κατασκευή λιμένα πλοίων. Ctrl+Κλικ για επιλογή πρόσθετου λιμένα για συνένωση. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Τοποθετήστε μια σημαδούρα που μπορεί να χρησιμοποιηθεί ως σημείο καθοδήγησης. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Κατασκευή υδραγωγείου. Επιπρόσθετα πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Κατασκευή καναλιού. Εναλλακτικά, Ctrl+Κλικ στο επίπεδο της θάλασσας για να πλημμυρίσετε με θαλασσινό νερό +STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Τοποθέτηση ποταμιών. Ctrl+Κλικ για διαγώνια επιλογή # Ship depot construction window STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Προσανατολισμός Ναυπηγείου Πλοίων @@ -3023,7 +3023,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Λιμά # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Αεροδρόμια -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Κατασκευή αεροδρομίου. Με Ctrl ενεργοποιείται η συνένωση αεροδρομίων. Με Shift εναλλάσσεται κτίσιμο/εμφάνιση εκτίμησης κόστους +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Κατασκευή αεροδρομίου. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Με Shift εμφανίζεται εκτίμηση κόστους μόνο # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Επιλογή Αεροδρομίου @@ -3050,14 +3050,14 @@ STR_STATION_BUILD_NOISE :{BLACK}Παρα # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Μορφοποίηση εδάφους -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Χαμήλωμα μιας γωνίας εδάφους. Κλικ+σύρσιμο για χαμήλωμα της πρώτης επιλεγμένης γωνίας και ισοπέδωση της επιφάνειας στο νέο ύψος της γωνίας. Με Ctrl+Κλικ+σύρσιμο επιλέγεται η επιφάνεια διαγώνια. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Ανυψώστε μια γωνία του εδάφους. Με σύρσιμο ανυψώνεται η πρώτη επιλεγμένη γωνία και ισοπεδώνεται η επιφάνεια στο νέο ύψος. Με Ctrl επιλέγετε την επιφάνεια διαγώνια. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστος -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Ισοπέδωση της γης στο ύψος της πρώτης γωνίας. Με Ctrl επιλέγετε την επιφάνεια διαγώνια. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Αγορά γης για μελλοντική χρήση. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Χαμήλωμα μιας γωνίας εδάφους. Κλικ+Σύρσιμο για χαμήλωμα της πρώτης επιλεγμένης γωνίας και ισοπέδωση της επιφάνειας στο νέο ύψος της γωνίας. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή της επιφάνειας. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Ανύψωση μιας γωνίας εδάφους. Κλικ+Σύρσιμο για ανύψωση της πρώτης επιλεγμένης γωνίας και ισοπέδωση της επιφάνειας στο νέο ύψος της γωνίας. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή της επιφάνειας. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Ισοπέδωση της γης στο ύψος της πρώτης επιλεγμένης γωνίας. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή της επιφάνειας. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Αγορά γης για μελλοντική χρήση. Ctrl+Κλικ για διαγώνια επιλογή. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Επιλογή Αντικείμενου -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Επιλογή αντικείμενου για κατασκευή. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστος +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Επιλογή αντικείμενου για κατασκευή. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Επιλογή της κατηγορίας του αντικείμενου για κτίσιμο STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Προεπισκόπηση του αντικείμενου STR_OBJECT_BUILD_SIZE :{BLACK}Μέγεθος: {GOLD}{NUM} x {NUM} τετράγωνα @@ -3069,20 +3069,20 @@ STR_OBJECT_CLASS_TRNS :Αναμετα STR_PLANT_TREE_CAPTION :{WHITE}Δέντρα STR_PLANT_TREE_TOOLTIP :{BLACK}Επιλέξτε τύπο δέντρου για φύτευση. Αν το τετραγωνίδιο έχει ήδη ένα δέντρο, αυτό θα προσθέσει περισσότερα δέντρα μεικτών τύπων ανεξάρτητα από τον επιλεγμένο τύπο STR_TREES_RANDOM_TYPE :{BLACK}Δέντρα τυχαίου τύπου -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Τοποθετήστε δέντρα τυχαίου τύπου. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Τοποθέτηση δέντρων τυχαίου τύπου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Τυχαία Δέντρα STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Φυτέψτε δέντρα τυχαία στο έδαφος STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Κανονικό -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Φυτέψτε μοναδικά δέντρα σέρνοντας πάνω από το τοπίο. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Φυτέψτε μεμονωμένα δέντρα σέρνοντας πάνω από το τοπίο STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Άλσος -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Φυτέψτε μικρά δάση σέρνοντας πάνω από το τοπίο. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Φυτέψτε μικρά δάση σέρνοντας πάνω από το τοπίο STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Δάσος -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Φυτέψτε μεγάλα δάση με σύρσιμο του ποντικιού πάνω από το τοπίο. +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}Δημιουργία τυχαίου εδάφους @@ -3096,7 +3096,7 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Είστ # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Δημιουργία Πόλης STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Νέα Πόλη -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Ίδρυση νέας πόλης. Με Shift+Κλικ εμφανίζεται μόνο το εκτιμώμενο κόστος +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Ίδρυση νέας πόλης. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Τυχαία Πόλη STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Ίδρυση πόλης σε τυχαία τοποθεσία STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Πολλές τυχαίες πόλεις @@ -3128,7 +3128,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}Πλέγ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Τυχαίο # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Χρηματοδότηση νέας βιομηχανίας +STR_FUND_INDUSTRY_CAPTION :{WHITE}Χρηματοδότηση βιομηχανίας STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Επιλέξτε την κατάλληλη βιομηχανία από την λίστα STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Δημιουργία τυχαίων βιομηχανιών STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Γέμισε τον χάρτη με τυχαία τοποθετημένες βιομηχανίες @@ -3144,14 +3144,14 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Αφαί STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Σίγουρα θέλετε να αφαιρέσετε όλες τις βιομηχανίες; # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Αλυσίδα βιομηχανιών για τη βιομηχανία {STRING} -STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Αλυσίδα βιομηχανιών για το εμπόρευμα {STRING} +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Αλυσίδα βιομηχανιών - {STRING} +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Αλυσίδα εμπορεύματος - {STRING} STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Βιομηχανίες που παράγουν STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Βιομηχανίες που δέχονται STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Σπιτιά STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Πατήστε στη βιομηχανία για να δείτε τους προμηθευτές και τους πελάτες της STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Πατήστε στο εμπόρευμα για να δείτε τους προμηθευτές και τους πελάτες -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Εμφάνιση αλυσίδας +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Εμφάνιση αλυσίδας βιομηχανιών STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Εμφάνιση βιομηχανιών προμήθειας και αποδοχής για το εμπόρευμα STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Σύνδεση στο μικρό χάρτη STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Επιλογή των εμφανιζόμενων βιομηχανιών και στο μικρό χάρτη @@ -3241,7 +3241,7 @@ STR_LAI_TREE_NAME_CACTUS_PLANTS :Κάκτοι STR_LAI_STATION_DESCRIPTION_RAILROAD_STATION :Σιδηροδρομικός σταθμός STR_LAI_STATION_DESCRIPTION_AIRCRAFT_HANGAR :Υπόστεγο αεροσκαφών STR_LAI_STATION_DESCRIPTION_AIRPORT :Αεροδρόμιο -STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Χώρος φόρτωσης φορτηγών +STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Σταθμός φορτηγών STR_LAI_STATION_DESCRIPTION_BUS_STATION :Στάση λεωφορείων STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :Αποβάθρα πλοίων STR_LAI_STATION_DESCRIPTION_BUOY :Σημαδούρα @@ -3289,14 +3289,14 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} Η ομάδα του OpenTTD # Framerate display window -STR_FRAMERATE_CAPTION :{WHITE}Ρυθμός καρέ γραφικών +STR_FRAMERATE_CAPTION :{WHITE}Ρυθμός καρέ STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Ρυθμός προσομοίωσης: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Αριθμός στιγμών παιχνιδιού που προσομοιώνεται ανά δευτερόλεπτο. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Αριθμός στιγμών παιχνιδιού που προσομοιώνεται ανά δευτερόλεπτο STR_FRAMERATE_RATE_BLITTER :{BLACK}Ρυθμός καρέ γραφικών: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Αριθμος των παραγμενων καρέ ανα δευτερολεπτο +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Αριθμός των παραγόμενων καρέ ανα δευτερόλεπτο STR_FRAMERATE_SPEED_FACTOR :{BLACK}Παράγοντας ταχύτητας τρέχοντος παιχνιδιού: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Πόσο γρήγορα εκτελείται το παιχνίδι αυτήν τη στιγμή, σε σύγκριση με την αναμενόμενη ταχύτητα στον κανονικό ρυθμό εξομοίωσης. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Πόσο γρήγορα εκτελείται το παιχνίδι αυτή τη στιγμή, σε σύγκριση με την αναμενόμενη ταχύτητα στον κανονικό ρυθμό εξομοίωσης STR_FRAMERATE_CURRENT :{WHITE}Τρέχον STR_FRAMERATE_AVERAGE :{WHITE}Μέσο STR_FRAMERATE_MEMORYUSE :{WHITE}Μνήμη @@ -3368,7 +3368,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Λεπτ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Δεν υπάρχουν πληροφορίες. STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} -STR_SAVELOAD_FILTER_TITLE :Φιλτράρισμα κειμένου: +STR_SAVELOAD_FILTER_TITLE :{BLACK}Φίλτρο: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Αντικατάσταση Αρχείου STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Είστε σίγουροι οτι θέλετε να αντικαταστήσετε το υπάρχων αρχείο; STR_SAVELOAD_DIRECTORY :{STRING} (Κατάλογος) @@ -3614,14 +3614,14 @@ STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Το New 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} είναι σχεδιασμένο να δουλέψει με το {STRING} -STR_NEWGRF_ERROR_INVALID_PARAMETER :Λάθος παράμετρος για το {1:STRING}: παράμετρος {STRING} ({NUM}) +STR_NEWGRF_ERROR_UNSET_SWITCH :Το {1:STRING} είναι σχεδιασμένο να δουλέψει με το {2:STRING} +STR_NEWGRF_ERROR_INVALID_PARAMETER :Λάθος παράμετρος για το {1:STRING}: παράμετρος {2:STRING} ({3:NUM}) STR_NEWGRF_ERROR_LOAD_BEFORE :Το {1:STRING} πρέπει να φορτωθεί πριν από το {2:STRING} STR_NEWGRF_ERROR_LOAD_AFTER :Το {1:STRING} πρέπει να φορτωθεί μετά από το {2:STRING} STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :Το {1:STRING} απαιτεί έκδοση OpenTTD {2:STRING} ή υψηλότερη STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :το αρχείο GRF είναι σχεδιασμένο για να μεταφράζει STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Έχουν φορτωθεί πολλά NewGRF -STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Η φόρτωση του {1:STRING} ως στατικό NewGRF με {STRING} μπορεί να προκαλέσει αποσυγχρονισμούς +STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Η φόρτωση του {1:STRING} ως στατικό NewGRF με {2:STRING} μπορεί να προκαλέσει αποσυγχρονισμούς STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Απρόοπτο sprite (sprite {3:NUM}) STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Άγνωστη ιδιότητα Action 0 {4:HEX} (sprite {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Προσπάθεια να χρησιμοποιήσει άκυρο ID (sprite {3:NUM}) @@ -3690,7 +3690,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Εναλ # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Επεξεργασία κειμένου πινακίδας -STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στη τοποθεσία της πινακίδας. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία της πινακίδας +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στη τοποθεσία της πινακίδας. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία της πινακίδας STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Μετάβαση στην επόμενη πινακίδα STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Μετάβαση στη προηγούμενη πινακίδα @@ -3701,7 +3701,7 @@ STR_TOWN_DIRECTORY_CAPTION :{WHITE}Πόλε STR_TOWN_DIRECTORY_NONE :{ORANGE}- Τίποτα - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Πόλη){BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Ονόματα πόλεων - πατήστε στο όνομα για να κεντράρετε την εικόνα στην πόλη. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία της πόλης +STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Ονόματα πόλεων - πατήστε στο όνομα για κεντράρισμα της κύριας προβολής στην πόλη. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία της πόλης STR_TOWN_POPULATION :{BLACK}Παγκόσμιος πληθυσμός: {COMMA} # Town view window @@ -3720,8 +3720,8 @@ STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Η πό STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Η πόλη επεκτείνεται κάθε {ORANGE}{UNITS_DAYS_OR_SECONDS} (χρηματοδοτούμενη) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Η πόλη {RED}δεν{BLACK} επεκτείνεται STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Επίπεδο θορύβου στη πόλη: {ORANGE}{COMMA}{BLACK} μέγιστο: {ORANGE}{COMMA} -STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Κεντράρισμα της εικόνας στην τοποθεσία της πόλης. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία της πόλης -STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Τοπική αρχή +STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία της πόλης. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία της πόλης +STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Τοπική Αρχή STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Εμφάνιση πληροφοριών για την τοπική αρχή STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Αλλαγή του ονόματος της πόλης @@ -3754,16 +3754,16 @@ STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Αγορά απ STR_LOCAL_AUTHORITY_ACTION_BRIBE :Δωροδοκήστε την τοπική αρχή ###next-name-looks-similar -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Έναρξη μικρής τοπικής διαφημιστικής καμπάνιας, για να προσελκύσετε περισσότερους επιβάτες και εμπορεύματα στις μεταφορικές σας υπηρεσίες.{}Παρέχει μία προσωρινή ώθηση στην βαθμολογία σταθμών σε μία μικρή ακτίνα γύρω από το κέντρο της πόλης.{} Κόστος: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Έναρξη μεσαίας τοπικής διαφημιστικής καμπάνιας, για να προσελκύσετε περισσότερους επιβάτες και εμπορεύματα στις μεταφορικές σας υπηρεσίες.{}Παρέχει μία προσωρινή ώθηση στην βαθμολογία σταθμών σε μία μεσαία ακτίνα γύρω από το κέντρο της πόλης.{} Κόστος: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Ξεκινήστε μια μικρή τοπική διαφημιστική καμπάνια, για να προσελκύσετε περισσότερους επιβάτες και φορτίο στις υπηρεσίες μεταφοράς σας.{}Παρέχει μια προσωρινή ώθηση στη βαθμολογία του σταθμού σε μια μικρή ακτίνα γύρω από το κέντρο της πόλης.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Ξεκινήστε μια μεσαία τοπική διαφημιστική καμπάνια, για να προσελκύσετε περισσότερους επιβάτες και φορτίο στις υπηρεσίες μεταφοράς σας.{}Παρέχει μια προσωρινή ώθηση στη βαθμολογία του σταθμού σε μια μέση ακτίνα γύρω από το κέντρο της πόλης.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Έναρξη μεγάλης τοπικής διαφημιστικής καμπάνιας, για να προσελκύσετε περισσότερους επιβάτες και εμπορεύματα στις μεταφορικές σας υπηρεσίες.{}Παρέχει μία προσωρινή ώθηση στην βαθμολογία σταθμού σε μία μεγάλη ακτίνα γύρω από το κέντρο της πόλης.{}{POP_COLOUR} Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Χρηματοδοτήστε την ανακατασκευή του αστικού οδικού δικτύου.{}Προκαλεί σημαντική αναστάτωση της οδικής κυκλοφορίας για έως και 6 μήνες.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}Χρηματοδοτήστε την ανακατασκευή του αστικού οδικού δικτύου.{}Προκαλεί σημαντική αναστάτωση της οδικής κυκλοφορίας για έως και 6 λεπτά.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Χτίστε ένα άγαλμα προς τιμήν της εταιρίας σας.{}Παρέχει μία μόνιμη ώθηση στην βαθμολογία σταθμών σε αυτή την πόλη.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Χρηματοδοτήστε την κατασκευή νέων κτιρίων στην πόλη.{}Παρέχει μία προσωρινή ώθηση στην ανάπτυξη αυτής της πόλης.{} Κόστος: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Χρηματοδοτήστε την κατασκευή νέων κτιρίων στην πόλη.{}Παρέχει μια προσωρινή ώθηση στην ανάπτυξη αυτής της πόλης.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Αγοράστε αποκλειστικά δικαιώματα μεταφοράς στην πόλη για 12 μήνες.{}Η δημοτική αρχή δεν θα επιτρέψει στους επιβάτες και στο φορτίο να χρησιμοποιούν τους σταθμούς των ανταγωνιστών σας. Μια επιτυχημένη δωροδοκία από έναν ανταγωνιστή θα ακυρώσει αυτό το συμβόλαιο.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Αγοράστε αποκλειστικά δικαιώματα μεταφοράς στην πόλη για 12 λεπτά.{}Η δημοτική αρχή δεν θα επιτρέψει στους επιβάτες και στο φορτίο να χρησιμοποιούν τους σταθμούς των ανταγωνιστών σας. Μια επιτυχημένη δωροδοκία από έναν ανταγωνιστή θα ακυρώσει αυτό το συμβόλαιο.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Δωροδοκήστε τις τοπικές αρχές για να αυξήσετε τα ποσοστά αποδοχής σας, με ρίσκο ένα μεγάλο πρόστιμο εάν συλληφθείτε.{}Κόστος: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Δωροδοκήστε την τοπική αρχή για να αυξήσετε την αξιολόγησή σας και να ακυρώσετε τα αποκλειστικά δικαιώματα μεταφοράς ενός ανταγωνιστή, με κίνδυνο αυστηρής ποινής εάν συλληφθείτε.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Στόχοι: @@ -3813,7 +3813,7 @@ STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_NONE :{ORANGE}- Καμία - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Υπηρεσίες που έχουν χρηματοδοτηθεί: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} από τον σταθμό {STRING} προς τον σταθμό {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) -STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Πατήστε στην υπηρεσία για κεντράρισμα στην βιομηχανία/πόλη. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία της βιομηχανίας/πόλης +STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Πατήστε στην υπηρεσία για κεντράρισμα στην βιομηχανία/πόλη. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία της βιομηχανίας/πόλης STR_SUBSIDIES_OFFERED_EXPIRY_DATE :ανά {DATE_SHORT} STR_SUBSIDIES_OFFERED_EXPIRY_TIME :μέσα σε {UNITS_MONTHS_OR_MINUTES} STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :έως {DATE_SHORT} @@ -3825,7 +3825,7 @@ STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Παγκ STR_STORY_BOOK_SPECTATOR :Παγκόσμιο Βιβλίο Ιστορίας STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Σελίδα {NUM} -STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Μεταβείτε σε μια συγκεκριμένη σελίδα επιλέγοντάς την από αυτή τη λίστα. +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Μεταβείτε σε μια συγκεκριμένη σελίδα επιλέγοντάς την από αυτή τη λίστα STR_STORY_BOOK_PREV_PAGE :{BLACK}Προηγούμενη STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Μεταβαίνει στη προηγούμενη σελίδα STR_STORY_BOOK_NEXT_PAGE :{BLACK}Επόμενη @@ -3833,8 +3833,8 @@ STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Μετα STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Μη έγκυρη αναφορά στόχου # Station list window -STR_STATION_LIST_TOOLTIP :{BLACK}Ονόματα σταθμών - πατήστε στο όνομα για κεντράρισμα στο σταθμό. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία του σταθμού -STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Κρατήστε πατημένο το Ctrl για να επιλέξετε περισσότερο από ένα αντικείμενο +STR_STATION_LIST_TOOLTIP :{BLACK}Ονόματα σταθμών - πατήστε στο όνομα για κεντράρισμα της κύριας προβολής στην τοποθεσία του σταθμού. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία του σταθμού +STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Ctrl+Κλικ για επιλογή πολλαπλών αντικειμένων STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} Σταθμ{P ός οί} STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} @@ -3899,7 +3899,7 @@ STR_CARGO_RATING_VERY_GOOD :Πολύ Καλ STR_CARGO_RATING_EXCELLENT :Εξαιρετική STR_CARGO_RATING_OUTSTANDING :Καταπληκτική -STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Κεντράρισμα εικόνας στην τοποθεσία του σταθμού. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία του σταθμού +STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του σταθμού. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία του σταθμού STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Αλλαγή ονόματος του σταθμού STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Εμφάνιση όλων των τρένων που έχουν αυτό τον σταθμό στο δρομολόγιό τους @@ -3914,9 +3914,9 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Αποτ # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} -STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Κεντράρισμα της εικόνας στην τοποθεσία του σημείου καθοδήγησης. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία του σημείου καθοδήγησης +STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του σημείου καθοδήγησης. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία του σημείου καθοδήγησης STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Αλλαγή του ονόματος του σημείου καθοδήγησης -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στη τοποθεσία της σημαδούρας. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία της σημαδούρας +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στη τοποθεσία της σημαδούρας. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία της σημαδούρας STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Αλλαγή ονόματος σημαδούρας STR_EDIT_WAYPOINT_NAME :{WHITE}Διαμόρφωση ονόματος σημείου καθοδήγησης @@ -3936,10 +3936,10 @@ STR_FINANCES_CAPITAL_EXPENSES_TITLE :{WHITE}Έξοδ ###length 13 STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Κατασκευές STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Νέα Οχήματα -STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Λειτουργικά Έξοδα Τρένων +STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Τρένα STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Οχήματα STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Αεροσκάφη -STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Λειτουργικά Έξοδα Πλοίων +STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Πλοία STR_FINANCES_SECTION_INFRASTRUCTURE :{GOLD}Υποδομές STR_FINANCES_SECTION_TRAIN_REVENUE :{GOLD}Τρένα STR_FINANCES_SECTION_ROAD_VEHICLE_REVENUE :{GOLD}Οχήματα δρόμου @@ -3993,7 +3993,7 @@ STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Κτίσ STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Προβολή Αρχηγείου STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Προβολή αρχηγείου εταιρίας STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Ανοικοδόμηση Αρχηγείου -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Εποικοδόμηση της έδρας της εταιρίας σε άλλο μέρος, με κόστος το 1% της αξίας της εταιρίας. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς επανατοποθέτηση της έδρας +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Ανοικοδόμηση της έδρας της εταιρίας σε άλλο μέρος, με κόστος το 1% της αξίας της εταιρίας. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Λεπτομέρειες STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Προβολή λεπτομερούς μέτρησης υποδομών STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Δώστε χρήματα @@ -4040,7 +4040,7 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} και {NUM} περισσότερα... -STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Ονόματα βιομηχανιών - πατήστε στο όνομα για κεντράρισμα στη βιομηχανία. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία της βιομηχανίας +STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Ονόματα βιομηχανιών - πατήστε στο όνομα για κεντράρισμα της κύριας προβολής στη βιομηχανία. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία της βιομηχανίας STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Αποδεκτό φορτίο: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Παραγόμενο εμπόρευμα: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Όλα τα είδη φορτίου @@ -4051,7 +4051,7 @@ STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTR STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Παραγωγή προηγούμενου μήνα: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Παραγωγή τελευταίου λεπτού: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% μεταφέρθηκαν) -STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα εικόνας στην περιοχή της βιομηχανίας. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην περιοχή της βιομηχανίας +STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα εικόνας στην περιοχή της βιομηχανίας. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην περιοχή της βιομηχανίας STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Επίπεδο παραγωγής: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Η βιομηχανία έχει ανακοινώσει άμεσο κλείσιμο! @@ -4060,7 +4060,7 @@ STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Παρά STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Απαιτεί: -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} σε αναμονή{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}Αλλαγή παραγωγής (πολλαπλάσιο του 8, μέχρι το 2040) @@ -4121,12 +4121,12 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Μη ομαδο STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Ομάδες - πατήστε σε μία ομάδα για να δείτε όλα τα οχήματα που της ανήκουν. Σύρετε ομάδες για να ρυθμίσετε την ιεραρχία. +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Ομάδες - πατήστε σε μία ομάδα για να δείτε όλα τα οχήματα που της ανήκουν. Σύρετε ομάδες για να ρυθμίσετε την ιεραρχία STR_GROUP_CREATE_TOOLTIP :{BLACK}Πατήστε για δημιουργήσετε ομάδα STR_GROUP_DELETE_TOOLTIP :{BLACK}Διαγραφή της επιλεγμένης ομάδας STR_GROUP_RENAME_TOOLTIP :{BLACK}Μετονομασία της επιλεγμένης ομάδας STR_GROUP_LIVERY_TOOLTIP :{BLACK}Αλλαγή εμφάνισης της επιλεγμένης ομάδας -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Πατήστε για προστατέψετε αυτήν την ομάδα από την γενική αυτόματη αντικατάσταση. Με Ctrl+Κλικ προστατεύετε επίσης τις υπο-ομάδες. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Πατήστε για προστατέψετε αυτήν την ομάδα από την γενική αυτόματη αντικατάσταση. Με Ctrl+Κλικ προστατεύετε επιπλέον και τις υπο-ομάδες STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Διαγραφή ομάδας STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Είστε σίγουροι ότι θέλετε να διαγράψετε αυτή την ομάδα και οποιουσδήποτε απογόνους; @@ -4195,10 +4195,10 @@ STR_CARGO_TYPE_FILTER_FREIGHT.geniki :Φορτίου STR_CARGO_TYPE_FILTER_NONE :Κανένα ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Λίστα επιλογής βαγονιού τρένου. Πατήστε σε ένα βαγόνι για πληροφορίες. Ctrl+Click για εμφάνιση/απόκρυψη του τύπου βαγονιού -STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Λίστα επιλογής οχήματος δρόμου. Πατήστε σε ένα όχημα για πληροφορίες. Ctrl+Click για εμφάνιση/απόκρυψη του τύπου οχήματος -STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Λίστα επιλογής πλοίου. Πατήστε σε ένα πλοίο για πληροφορίες. Ctrl+Click για εμφάνιση/απόκρυψη του τύπου πλοίου -STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Λίστα επιλογής αεροσκάφους. Πατήστε σε ένα αεροσκάφος για πληροφορίες. Ctrl+Click για εμφάνιση/απόκρυψη του τύπου αεροσκάφους +STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Λίστα επιλογής βαγονιού τρένου. Πατήστε σε ένα βαγόνι για πληροφορίες. Ctrl+Κλικ για εμφάνιση/απόκρυψη αυτού του τύπου βαγονιού +STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Λίστα επιλογής οχήματος δρόμου. Πατήστε σε ένα όχημα για πληροφορίες. Ctrl+Κλικ για εμφάνιση/απόκρυψη αυτού του τύπου οχήματος +STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Λίστα επιλογής πλοίου. Πατήστε σε ένα πλοίο για πληροφορίες. Ctrl+Κλικ για εμφάνιση/απόκρυψη αυτού του τύπου πλοίου +STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Λίστα επιλογής αεροσκάφους. Πατήστε σε ένα αεροσκάφος για πληροφορίες. Ctrl+Κλικ για εμφάνιση/απόκρυψη αυτού του τύπου αεροσκάφους ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Αγορά Οχήματος @@ -4213,16 +4213,16 @@ STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Αγορ STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Αγορά και μετατροπή του αεροσκάφους ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου οχήματος τρένου. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου οχήματος δρόμου. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Αγοράστε το επιλεγμένο πλοίο. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου αεροσκάφους. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου οχήματος τρένου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου οχήματος δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά επιλεγμένου πλοίου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου αεροσκάφους. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου οχήματος τρένου. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου οχήματος δρόμου. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου οχήματος τρένου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου οχήματος δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου πλοίου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου αεροσκάφους. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου αεροσκάφους. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Μετονομασία @@ -4272,7 +4272,7 @@ STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} {P STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Τρένα - τραβήξτε ένα όχημα με αριστερό κλικ για να το προσθέστε/αφαιρέστε από ένα τρένο, δεξί κλικ για πληροφορίες. Κρατήστε πατημένο το Ctrl για να κάνετε και τις δυο λειτουργίες να ισχύσουν για τις ακόλουθες αλυσίδες +STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Τρένα - τραβήξτε ένα όχημα με αριστερό κλικ για να το προσθέστε/αφαιρέστε από ένα τρένο, δεξί κλικ για πληροφορίες. Ctrl+Κλικ για εφαρμογή οποιασδήποτε από τις δύο λειτουργίες στην ακόλουθη αλυσίδα STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Οχήματα δρόμου - δεξί κλικ σε ένα όχημα για πληροφορίες STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Πλοία - δεξί κλικ σε ένα πλοίο για πληροφορίες STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Αεροσκάφη - δεξί κλικ σε ένα αεροσκάφος για πληροφορίες @@ -4314,16 +4314,16 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Κλων STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Κλωνοποίηση Αεροσκάφους ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Αυτό θα αγοράσει ένα αντίγραφο του τρένου μαζί με τα όλα τα βαγόνια. Πατήστε αυτό το κουμπί και μετά σε κάποιο τρένο μέσα ή έξω από το αμαξοστάσιο. Με Ctrl+Κλικ θα έχει τις ίδιες εντολές. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς να γίνει η αγορά -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Αυτό θα αγοράσει ένα αντίγραφο του οχήματος. Πατήστε αυτό το κουμπί και μετά σε κάποιο όχημα μέσα ή έξω από το αμαξοστάσιο. Με Ctrl+Κλικ θα έχει τις ίδιες εντολές. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς να γίνει η αγορά -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Αυτό θα αγοράσει ένα αντίγραφο ενός πλοίου. Πατήστε αυτό το κουμπί και μετά σε κάποιο πλοίο μέσα ή έξω από το ναυπηγείο. Με Ctrl+Κλικ θα έχει τις ίδιες εντολές. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς να γίνει η αγορά +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός τρένου μαζί με τα όλα τα βαγόνια. Πατήστε αυτό το κουμπί και μετά σε κάποιο τρένο μέσα ή έξω από το αμαξοστάσιο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός οχήματος δρόμου. Πατήστε αυτό το κουμπί και μετά σε κάποιο όχημα μέσα ή έξω από το αμαξοστάσιο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός πλοίου. Πατήστε αυτό το κουμπί και μετά σε κάποιο πλοίο μέσα ή έξω από το ναυπηγείο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Αγορά αντιγράφου του αεροσκάφους. Πατήστε αυτό το κουμπί και μετά σε κάποιο αεροσκάφος μέσα ή έξω από το υπόστεγο. Με Ctrl+Κλικ θα διαμοιραστούν τις εντολές. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της εικόνας στην τοποθεσία του αμαξοστάσιου. Με Ctrl+Κλικ ανοίγει νέο παράθυρο εμφάνισης στην τοποθεσία του αμαξοστασίου -STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της εικόνας στην τοποθεσία του αμαξοστάσιου. Με Ctrl+Κλικ ανοίγει νέο παράθυρο εμφάνισης στην τοποθεσία του αμαξοστασίου -STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της εικόνας στην τοποθεσία του ναυπηγείου. Με Ctrl+Κλικ ανοίγει νέο παράθυρο εμφάνισης στην τοποθεσία του ναυπηγείου -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της εικόνας στην τοποθεσία του υπόστεγου. Με Ctrl+Κλικ ανοίγει νέο παράθυρο εμφάνισης στην τοποθεσία του υπόστεγου +STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του αμαξοστάσιου. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία του αμαξοστασίου +STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του αμαξοστάσιου. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία του αμαξοστασίου +STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του ναυπηγείου. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία του ναυπηγείου +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του υπόστεγου. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία του υπόστεγου ###length VEHICLE_TYPES STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Παίρνετε μια λίστα με όλα τα τρένα με το επιλεγμένο αμαξοστάσιο στις εντολές τους @@ -4435,10 +4435,10 @@ STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Πα STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Κεντράρετε την κεντρική προβολή στην τοποθεσία του τρένου. Με διπλό κλικ θα ακολουθηθεί το τρένο στην κεντρική προβολή. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία του τρένου -STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του οχήματος. Με διπλό κλικ θα ακολουθείται το αυτοκίνητο στην κύρια προβολή. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία του οχήματος -STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του πλοίου. Με διπλό κλικ θα ακολουθείται το πλοίο στην κύρια προβολή. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία του πλοίου -STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Κεντράρετε την κεντρική προβολή στην τοποθεσία του αεροσκάφους. Με διπλό κλικ θα ακολουθηθεί το αεροσκάφος στην κεντρική προβολή. Το Ctrl+Κλικ ανοίγει μία νέα προβολή στην τοποθεσία του αεροσκάφους +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του τρένου. Διπλό κλικ για να ακολουθείται το τρένο στην κεντρική προβολή. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία του τρένου +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του οχήματος. Διπλό κλικ για να ακολουθείται το όχημα στην κύρια προβολή. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία του οχήματος +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του πλοίου. Διπλό κλικ για να ακολουθείται το πλοίο στην κύρια προβολή. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία του πλοίου +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του αεροσκάφους. Διπλό κλικ για να ακολουθείται το αεροσκάφος στην κύρια προβολή. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία του αεροσκάφους ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλνει το τρένο στο αμαξοστάσιο. Με Ctrl+Κλικ κάνει μόνο συντήρηση @@ -4447,10 +4447,10 @@ STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλ STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλνει το αεροσκάφος στο υπόστεγο. Με Ctrl+Κλικ κάνει μόνο συντήρηση ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Αυτό θα αγοράσει αντίγραφο του τρένου μαζί με όλα τα βαγόνια. Με Ctrl+Κλικ θα έχει τις ίδιες εντολές. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Αυτό θα αγοράσει αντίγραφο του οχήματος. Με Ctrl+Κλικ θα έχει τις ίδιες εντολές. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς να γίνει αγορά -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Αυτό θα αγοράσει αντίγραφο του πλοίου. Με Ctrl+Κλικ θα έχει τις ίδιες εντολές. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς να γίνει αγορά -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Αυτό θα αγοράσει αντίγραφο του αεροσκάφους. Με Ctrl+Κλικ θα έχει τις ίδιες εντολές. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς να γίνει αγορά +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Αγορά αντιγράφου του τρένου μαζί με όλα τα βαγόνια. Ctrl+Κλικ για διαμοιρασμό εντολών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Αγορά αντιγράφου του οχήματος δρόμου. Ctrl+Κλικ για διαμοιρασμό εντολών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Αγορά αντιγράφου του πλοίου. Ctrl+Κλικ για διαμοιρασμό εντολών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Αγορά αντιγράφου του αεροσκάφους. Ctrl+Κλικ για διαμοιρασμό εντολών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Αναγκάστε το τρένο να προχωρήσει χωρίς να περιμένει το σηματοδότη να το επιτρέψει STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Αναστροφή κατεύθυνσης τρένου @@ -4488,13 +4488,13 @@ STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Ανα STR_VEHICLE_STATUS_CRASHED :{RED}Καταστράφηκε! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Χαλασμένο STR_VEHICLE_STATUS_STOPPED :{RED}Σταματημένο -STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Σταματάει, {VELOCITY} +STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}{VELOCITY} - Σταματάει STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Χωρίς ενέργεια STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Αναμονή για ελεύθερη τροχιά STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Υπερβολικά μακριά από τον επόμενο προορισμό STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Κατεύθυνση για το {0:STATION} -STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Δεν έχει εντολές, {VELOCITY} +STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Χωρίς εντολές STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Κατεύθυνση για το {0:WAYPOINT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Κατεύθυνση για το {0:DEPOT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Συντήρηση στο {0:DEPOT} @@ -4542,8 +4542,8 @@ STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Αξιο STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Κατασκευή: {LTBLUE}{NUM}{BLACK} Αξία: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Χωρητικότητα: {LTBLUE}Τίποτα{STRING} -STR_VEHICLE_INFO_CAPACITY :{BLACK}Χωρητικότητα: {LTBLUE}{CARGO_LONG}{3:STRING} -STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Χωρητικότητα: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM}) +STR_VEHICLE_INFO_CAPACITY :{BLACK}Χωρητικότητα: {LTBLUE}{0:CARGO_LONG}{3:STRING} +STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Χωρητικότητα: {LTBLUE}{0:CARGO_LONG}{3:STRING} (x{4:NUM}) STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Χωρητικότητα: {LTBLUE}{CARGO_LONG}, {CARGO_LONG}{STRING} STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Έσοδα μεταφοράς: {LTBLUE}{CURRENCY_LONG} @@ -4578,7 +4578,7 @@ STR_VEHICLE_DETAILS_TRAIN_WAGON_VALUE :{LTBLUE}{ENGINE STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_TEXT :{BLACK}Συνολική χωρητικότητα φορτίου του τρένου: STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY :{LTBLUE}{CARGO_LONG} ({CARGO_SHORT}) -STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_MULT :{LTBLUE}- {CARGO_LONG} ({CARGO_SHORT}) (x{NUM}) +STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_MULT :{LTBLUE}{CARGO_LONG} ({CARGO_SHORT}) (x{NUM}) STR_VEHICLE_DETAILS_CARGO_EMPTY :{LTBLUE}Άδειο STR_VEHICLE_DETAILS_CARGO_FROM :{LTBLUE}{CARGO_LONG} από τον σταθμό {STATION} @@ -4602,7 +4602,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Νέα STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Νέα χωρητικότητα: {GOLD}{CARGO_LONG}{}{BLACK}Κέρδος από τη μετατροπή: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Νέα χωρητικότητα: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Κόστος μετατροπής: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Νέα χωρητικότητα: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Κέρδος από τη μετατροπή: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Επιλέξτε τα οχήματα για μετατροπή. Σύροντας με το ποντίκι επιτρέπει την επιλογή πολλαπλών οχημάτων. Πατώντας σε άδειο χώρο θα επιλέξει ολόκληρο το όχημα. Με Ctrl+Κλικ θα γίνει επιλογή του οχήματος και της ακολουθούμενης αλυσίδας. +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Επιλέξτε τα οχήματα για μετατροπή. Κλικ+Σύρσιμο για επιλογή πολλαπλών οχημάτων. Κάντε κλικ σε έναν κενό χώρο για να επιλέξετε ολόκληρο το όχημα. Ctrl+Κλικ για να επιλέξετε ένα όχημα και την ακόλουθη αλυσίδα ###length VEHICLE_TYPES STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Επιλέξτε τον τύπο εμπορεύματος που θα μεταφέρει το τρένο @@ -4830,19 +4830,19 @@ STR_TIMETABLE_START_TOOLTIP :{BLACK}Επιλ STR_TIMETABLE_START_SECONDS_QUERY :Δευτερόλεπτα μέχρι την έναρξη του δρομολογίου STR_TIMETABLE_CHANGE_TIME :{BLACK}Αλλαγή Χρόνων -STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Αλλάζει ο χρόνος που παίρνει η επιλεγμένη επιλογή για να εκτελεστεί +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Αλλαγή του χρόνου που παίρνει η επιλεγμένη εντολή για να εκτελεστεί. Ctrl+Κλικ για ορισμό χρόνου όλων των εντολών STR_TIMETABLE_CLEAR_TIME :{BLACK}Εκκαθάριση Χρόνων -STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Εκκαθαρίζει το χρόνο για την επιλεγμένη εντολή. Ctrl+Κλικ σβήνει τον χρόνο για όλες τις εντολές +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Καθαρίζει το χρόνο για την επιλεγμένη εντολή. Ctrl+Κλικ για καθαρισμό χρόνου όλων των εντολών STR_TIMETABLE_CHANGE_SPEED :{BLACK}Αλλαγή Ορίου Ταχύτητας STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Αλλαγή της μέγιστης ταχύτητας ταξιδιού της επιλεγμένης εντολής. Ctrl+Κλικ για ορισμό της ταχύτητας ταξιδιού όλων των εντολών STR_TIMETABLE_CLEAR_SPEED :{BLACK}Εκκαθάριση Ορίου Ταχύτητας -STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Καθαρίζει τη μέγιστη ταχύτητα ταξιδιού της επιλεγμένης εντολής +STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Καθαρίζει τη μέγιστη ταχύτητα ταξιδιού της επιλεγμένης εντολής. Ctrl+Κλικ για καθαρισμό ταχύτητας όλων των εντολών STR_TIMETABLE_RESET_LATENESS :{BLACK}Επαναφορά Μετρητή Καθυστέρησης -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Επαναφορά του μετρητή καθυστέρησης, ώστε το όχημα να είναι στην ώρα του +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Επαναφορά του μετρητή καθυστέρησης, ώστε το όχημα να είναι στην ώρα του. Ctrl+Κλικ για επαναφορά του μετρητή όλης της ομάδας ώστε το τελευταίο όχημα να είναι στην ώρα του και τα υπόλοιπα νωρίτερα STR_TIMETABLE_AUTOFILL :{BLACK}Αυτόματη Γέμιση STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Συμπληρώστε το δρομολόγιο αυτόματα με τις τιμές από το επόμενο ταξίδι. (Ctrl+Κλικ για να προσπαθήσει να κρατήσει τους χρόνους αναμονής) @@ -4884,7 +4884,7 @@ STR_AI_DEBUG_CONTINUE :{BLACK}Συνέ STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Συνέχιση του παιχνιδιού και της λειτουργίας της AI STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Εμφάνιση της εξόδου αποσφαλμάτωσης αυτής της AI. Με Ctrl+Κλικ ανοίγει νέο παράθυρο εμφάνισης STR_AI_GAME_SCRIPT :{BLACK}Δέσμη Ενεργειών Παιχνιδιού -STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Έλεγχος ιστορικού δέσμης ενεργειών παιχνιδιού +STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Έλεγχος ιστορικού δέσμης ενεργειών παιχνιδιού. Ctrl+Κλικ για άνοιγμα σε νέο παράθυρο STR_ERROR_AI_NO_AI_FOUND :Δεν βρέθηκε κατάλληλη AI για φόρτωση.{}Αυτή η AI είναι ψεύτικη και δεν θα κάνει τίποτα.{}Μπορείτε να κατεβάσετε διάφορες AΙ από το σύστημα Διαδικτυακού Περιεχομένου. STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Μια τρέχουσα δέσμη ενεργειών τερμάτισε απότομα. Παρακαλώ ενημερώστε τον συγγραφέα της δέσμης ενεργειών με ένα στιγμιότυπο οθόνης από το παράθυρο αποσφαλμάτωσης AI/Παιχνιδιού @@ -5095,7 +5095,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Αδύν STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Δεν μπορεί να κτιστεί αρχηγείο εταιρίας... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Αδύνατο να κτιστούν πόλεις +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Αδύνατο να κατασκευαστούν πόλεις... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Δεν μπορεί να μετονομαστεί η πόλη... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Αδύνατο να κτιστεί πόλη εδώ... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Δεν μπορεί να γίνει επέκταση της πόλης... @@ -5135,7 +5135,7 @@ STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Αλλα # Station construction related errors STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Δεν μπορεί να κτιστεί σταθμός τρένων εδώ... STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Δεν μπορεί να κτιστεί στάση λεωφορείων... -STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Δεν μπορεί να κτιστεί στάση φορτηγών... +STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Δεν μπορεί να κτιστεί σταθμός φορτηγών... STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Δεν μπορεί να κτιστεί επιβατικός σταθμός τραμ... STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Δεν μπορεί να κτιστεί σταθμός τραμ... STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Δεν μπορεί να κτιστεί λιμένας εδώ... @@ -5150,7 +5150,7 @@ STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Πάρα STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Πολύ κοντά σε άλλη αποβάθρα STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Πολύ κοντά σε άλλο αεροδρόμιο STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Δεν μπορεί να μετονομαστεί ο σταθμός... -STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... αυτός είναι δρόμος ιδιόκτητος από την πόλη +STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... δρόμος ιδιοκτησία μιας πόλης STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... ο δρόμος βλέπει σε λάθος κατεύθυνση STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... οι μη τερματικοί σταθμοί δε μπορούν να έχουν στροφές STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... οι μη τερματικοί σταθμοί δε μπορούν να έχουν διασταυρώσεις diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 54ad0fdda2..e949a75ac8 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1338,10 +1338,10 @@ STR_TERRAIN_TYPE_CUSTOM :Власна в STR_TERRAIN_TYPE_CUSTOM_VALUE :Власна висота ({NUM}) ###length 4 -STR_CITY_APPROVAL_LENIENT :Поблажливо -STR_CITY_APPROVAL_TOLERANT :терпиме +STR_CITY_APPROVAL_LENIENT :поблажливо +STR_CITY_APPROVAL_TOLERANT :терпимо STR_CITY_APPROVAL_HOSTILE :вороже -STR_CITY_APPROVAL_PERMISSIVE :допустиме (не впливає на дії компанії) +STR_CITY_APPROVAL_PERMISSIVE :допустимо (не впливає на дії компанії) STR_WARNING_NO_SUITABLE_AI :{WHITE}Немає підходящих модулів ШІ...{}Ви можете завантажити різноманітні модулі ШІ через 'Додатковий контент' @@ -1545,7 +1545,7 @@ STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Створюв STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Якщо в завданні транспортного засобу не вказана помітка «без зупинки», то він зупиняєтся на всіх станціях на своєму шляху. Якщо увімкнути це налаштування, то нові завдання будуть автоматично створюватися з поміткою «без зупинки» і транспортний засіб буде зупинятися лише на вказаних станціях. При необхідності помітку можна зняти або встановити власноруч. STR_CONFIG_SETTING_STOP_LOCATION :Створювати накази для поїздів з зупинкою {STRING} платформи -STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Задайте, який кінець платформи для зупинки поїздів вказувати у нових завданнях.{}- на початку: початок платформи в напрямку руху;{}- посередині: середина платформи;{}- наприкінці: кінець платформи в напрямку руху. +STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Оберіть кінець платформи для зупинки потягів у нових наказах. "на початку": початок платформи в напрямку руху; "посередині": середина платформи; "наприкінці": кінець платформи в напрямку руху. Окремі накази для зупинки можна встановити клацнувши на текст наказу ###length 3 STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :на початку STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :посередині @@ -1678,7 +1678,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Товщина STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Товщина ліній на графіках. Тонкі лінії дають більш точне відображення, а товстіші - більш розбірливі. STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Показувати назву NewGRF у вікні придбання транспорту: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Додати рядок у вікні придбання транспорту, який показуватиме назву NewGRF обраного транспорту. +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Додати рядок у вікні придбання транспорту, який показуватиме назву NewGRF обраного транспорту STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Показати у віконному списку вантажі, які може перевозити транспорт:{STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :При включенні придатний вантаж для транспортних засобів показано нижче у списку транспорту @@ -1767,7 +1767,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :темно-зе STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :фіолетовий STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Схема кольорів вантажопотоків: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Встановіть схему кольорів для показу вантажних потоків. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Встановіть схему кольорів для показу вантажних потоків ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Від зеленого до червоного (оригінальна) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Від зеленого до синього @@ -2093,7 +2093,7 @@ STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Міська в STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Дозволяє містам самостійно будувати залізничні переїзди. STR_CONFIG_SETTING_NOISE_LEVEL :Обмеження розміщення аеропортів залежно від рівня шуму: {STRING} -STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :При відключенні дозволяється будувати два аеропорти у кожному місті. При увімкненні кількість аеропортів залежить від допустимого рівня шуму, що в свою чергу залежить від кількості населення міста, розміру аеропорта та відстані +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :При увімкненні кількість аеропортів залежить від допустимого рівня шуму, що в свою чергу залежить від кількості населення міста, розміру аеропорта та відстані. При відключенні дозволяється будувати два аеропорти у кожному місті допоки ставлення місцевої влади "допустимо" STR_CONFIG_SETTING_TOWN_FOUNDING :Засновування нових міст під час гри: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Дозволяє заснування нових міст гравцями під час гри. @@ -2144,7 +2144,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Найбільша використовувана роздільна здатність: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Обмеження максимальної роздільної здатності зображень. Не використовуватиметься наявна графіка високої роздільної здатності. Гра працюватиме злагодженіше при використанні кількох графічних файлів з різною роздільною здатністю. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Обмеження максимальної роздільної здатності зображень. Не використовуватиметься наявна графіка високої роздільної здатності. Гра працюватиме злагодженіше при використанні кількох графічних файлів з різною роздільною здатністю ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2170,7 +2170,7 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Середнь STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Оновлення обрахунку зв'язків, час {STRING} STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Час між перерозрахунками графа зв'язків. Кожен розрахунок обчислює один компонент графа, тобто лише деякі компоненти оновляться після закінчення кожного проміжку часу, а не весь граф. Чим менше це значення, тим більше часу процесора буде витрачатися. Чим більше це значення, тим довше доведеться очікувати розподілення вантажів на нових маршрутах STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Час між перерахунками графа зв'язків: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Час між перерозрахунками компонента графа зв'язків. На початку перерозрахунку утворюється з'єднання, яке існує обраний час. Чим менше це значення, тим більша вірогідність, що з'єднання розірветься раніше очікуваного, після чого гра зупиниться. Чим більше це значення, тим довше обраховуватиметься розподілення вантажів при зміні маршрутів +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Час між перерозрахунками компонента графа зв'язків. На початку перерозрахунку утворюється з'єднання, яке існує обраний час. Чим менше це значення, тим більша вірогідність, що з'єднання розірветься раніше очікуваного, після чого гра загальмує. Чим більше це значення, тим довше обраховуватиметься розподілення вантажів при зміні маршрутів STR_CONFIG_SETTING_DISTRIBUTION_PAX :Режим розподілу для пасажирів: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :В "симетричному" режимі від станції A до станції Б відправлятиметься приблизно стільки ж пасажирів, як від 0Ю до A. В "асиметричному" режимі дозволяється відправляти довільну кількість пасажирів в обох напрямках. Ручний режим означає, що розподіл пасажирів не здійснюватиметься автоматично @@ -3057,7 +3057,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Буду STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Будування шлюзів. Утримуйте Shift для показу очікуваних витрат STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Будування корабельних елінгів (для будівництва та обслуговування кораблів). Утримуйте Shift для показу орієнтовних витрат STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Будування доку. Ctrl+клац для приєднання додаткових доків. Утримуйте Shift для показу очікуваних витрат -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Розмістити бакен, який можна використовувати як точку маршруту. Утримуйте Shift для показу витрат на розміщення +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Розмістити бакен, який можна використовувати як точку маршруту. Утримуйте Shift для показу очікуваних витрат STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Будування акведука. Утримуйте Shift для показу очікуваних витрат STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Будувати канал. Ctrl+клац на рівні моря для затоплення морською водою STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Прокласти річки. Ctrl+клац для вибору діагональних ділянок @@ -3105,7 +3105,7 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Купи # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Вибір об'єкта -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Виберіть об'єкт для побудови. Утримуйте Ctrl для вибору діагональної ділянки. Утримуйте Shift для показу витрат на будівництво +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Обрання об'єкту для побудови. Ctrl+клац+протягування для виділення діагональної ділянки. Утримуйте Shift для показу очікуваних витрат STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Вибрати тип об'єкту для будівництва STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Попередній перегляд об'єкта STR_OBJECT_BUILD_SIZE :{BLACK}Розмір: {GOLD}{NUM} x {NUM} клітинок @@ -3749,7 +3749,7 @@ STR_TOWN_DIRECTORY_CAPTION :{WHITE}Міст STR_TOWN_DIRECTORY_NONE :{ORANGE}- немає - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Мегаполіс){BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Назви міст - натисніть на назву, щоб показати місто у центрі екрану. Ctrl+клац мишою відкриває нове вікно з видом на місто +STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Назви міст - натисніть на назву, щоб показати місто у центрі екрану. Ctrl+клац мишею відкриває нове вікно з видом на місто STR_TOWN_POPULATION :{BLACK}Населення світу: {COMMA} # Town view window @@ -3881,7 +3881,7 @@ STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Наст STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Невірне посилання на завдання # Station list window -STR_STATION_LIST_TOOLTIP :{BLACK}Назви станцій - натисніть на назву, щоб показати станцію в центрі екрану. Ctrl+клац мишою відкриває нове вікно з видом на станцію +STR_STATION_LIST_TOOLTIP :{BLACK}Назви станцій - натисніть на назву, щоб показати станцію в центрі екрану. Ctrl+клац мишею відкриває нове вікно з видом на станцію STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Ctrl+клац для вибору кількох пунктів STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} станці{P я ї й} STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} @@ -4173,7 +4173,7 @@ STR_GROUP_CREATE_TOOLTIP :{BLACK}Клац STR_GROUP_DELETE_TOOLTIP :{BLACK}Стерти вибрану групу STR_GROUP_RENAME_TOOLTIP :{BLACK}Перейменувати вибрану групу STR_GROUP_LIVERY_TOOLTIP :{BLACK}Змінити колір вибраної групи -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Клацніть мишею, щоб захистити групу від глобальної автозаміни. Ctrl+клац також діє на підгрупи. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Клацніть мишею, щоб захистити групу від глобальної автозаміни. Ctrl+клац також діє на підгрупи STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Видалити групу STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Ви впевнені, що хочете видалити цю групу та всі вкладені групи? @@ -4360,10 +4360,10 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Клон STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Клонувати ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Купити копію поїзда, включно з усіма автомобілями. Натисніть на цю кнопку, а потім на поїзд в депо або ззовні. Ctrl+клац мишею дозволить поділитися спільними завданнями. Shift+клац мишею покаже орієнтовні витрати на придбання +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Купити копію потяга з усіма вагонами. Натисніть на цю кнопку, а потім на потяг в депо або ззовні. Ctrl+клац для копіювання спільного завдання. Утримуйте Shift для показу орієнтовних витрат STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Купити копію дорожнього транспорту. Натисніть на цю кнопку і потім на транспорт в гаражі або ззовні. Ctrl+клац для копіювання спільного завдання. Утримуйте Shift для показу орієнтовних витрат STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Купити копію корабля. Натисніть на цю кнопку, і потім на корабель в елінгу або ззовні. Ctrl+клац для копіювання спільного завдання. Утримуйте Shift для показу витрат на придбання -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Купити копію літака. Натисніть на цю кнопку і потім на літак в ангарі або ззовні. Утримуйте Ctrl для спільного завдання. Утримуйте Shift для показу витрат на придбання +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Купити копію літального апарата. Натисніть на цю кнопку і потім на авіатранспорт в ангарі або ззовні. Ctrl+клац для копіювання спільного завдання. Утримуйте Shift для показу орієнтовних витрат ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Показати залізничне депо у центрі екрану. Ctrl+клац мишею відкриє нове вікно з видом на залізничне депо @@ -4495,7 +4495,7 @@ STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Купи STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Примусити проігнорувати сигнал! STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Розвернути поїзд STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Розвернути авто -STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Показати пункт призначення в центрі екрану. Ctrl+клац мишою відкриє нове вікно з видом на пункт призначення +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Показати пункт призначення в центрі екрану. Ctrl+клац мишею відкриє нове вікно з видом на пункт призначення ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Переобладнати поїзд для перевезення іншого виду вантажу @@ -4642,7 +4642,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Нова STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Нова місткість: {GOLD}{CARGO_LONG}{}{BLACK}Прибуток від переобладнання: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Нова місткість: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Вартість переобладнання: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Нова місткість: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Прибуток від переобладнання: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Вибрати транспорт для переобладнання. Перетягування мишою дозволяє виділити декілька одиниць транспорту. Клац мишою на порожньому місці виділить усю одиницю транспорту. Ctrl+клац мишою виділить транспорт та ланцюжок перевезень за ним +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Обрати транспортні засоби для переобладнання. Клац+протягування виділить кілька одиниць транспорту. Клац мишею на порожньому місці виділить окрему одиницю транспорту. Ctrl+клац мишею виділить транспорт та ланцюжок за ним ###length VEHICLE_TYPES STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Виберіть вид вантажу для перевезення From d5e28a904dd4836df7bfd978aa239a08e16f8649 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 31 Mar 2024 12:41:28 +0200 Subject: [PATCH 209/695] Fix fb9d4af: use different nonces for key exchange and stream encryption --- src/network/core/tcp_game.h | 2 ++ src/network/network_client.cpp | 4 +++- src/network/network_crypto.cpp | 34 +++++++++++++++++++++------ src/network/network_crypto.h | 12 ++++++++++ src/network/network_crypto_internal.h | 14 ++++++++++- src/network/network_server.cpp | 1 + src/tests/test_network_crypto.cpp | 8 +++++++ 7 files changed, 66 insertions(+), 9 deletions(-) diff --git a/src/network/core/tcp_game.h b/src/network/core/tcp_game.h index 24cb9c941c..ce6f9bdcea 100644 --- a/src/network/core/tcp_game.h +++ b/src/network/core/tcp_game.h @@ -243,6 +243,8 @@ protected: /** * Indication to the client that authentication is complete and encryption has to be used from here on forward. + * The encryption uses the shared keys generated by the last AUTH_REQUEST key exchange. + * 24 * uint8_t Nonce for encrypted connection. * @param p The packet that was just received. */ virtual NetworkRecvStatus Receive_SERVER_ENABLE_ENCRYPTION(Packet &p); diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 698b2975dd..f6302a40e3 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -775,12 +775,14 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_AUTH_REQUEST(Pa } } -NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_ENABLE_ENCRYPTION(Packet &) +NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_ENABLE_ENCRYPTION(Packet &p) { if (this->status != STATUS_AUTH_GAME || this->authentication_handler == nullptr) return NETWORK_RECV_STATUS_MALFORMED_PACKET; Debug(net, 9, "Client::Receive_SERVER_ENABLE_ENCRYPTION()"); + if (!this->authentication_handler->ReceiveEnableEncryption(p)) return NETWORK_RECV_STATUS_MALFORMED_PACKET; + this->receive_encryption_handler = this->authentication_handler->CreateServerToClientEncryptionHandler(); this->send_encryption_handler = this->authentication_handler->CreateClientToServerEncryptionHandler(); this->authentication_handler = nullptr; diff --git a/src/network/network_crypto.cpp b/src/network/network_crypto.cpp index 03ee988bb7..3cea679869 100644 --- a/src/network/network_crypto.cpp +++ b/src/network/network_crypto.cpp @@ -182,14 +182,15 @@ X25519Nonce::~X25519Nonce() * @param secret_key The secret key to use for this handler. Defaults to secure random data. */ X25519AuthenticationHandler::X25519AuthenticationHandler(const X25519SecretKey &secret_key) : - our_secret_key(secret_key), our_public_key(secret_key.CreatePublicKey()), nonce(X25519Nonce::CreateRandom()) + our_secret_key(secret_key), our_public_key(secret_key.CreatePublicKey()), + key_exchange_nonce(X25519Nonce::CreateRandom()), encryption_nonce(X25519Nonce::CreateRandom()) { } /* virtual */ void X25519AuthenticationHandler::SendRequest(Packet &p) { p.Send_bytes(this->our_public_key); - p.Send_bytes(this->nonce); + p.Send_bytes(this->key_exchange_nonce); } /** @@ -205,7 +206,7 @@ bool X25519AuthenticationHandler::ReceiveRequest(Packet &p) } p.Recv_bytes(this->peer_public_key); - p.Recv_bytes(this->nonce); + p.Recv_bytes(this->key_exchange_nonce); return true; } @@ -227,7 +228,7 @@ bool X25519AuthenticationHandler::SendResponse(Packet &p, std::string_view deriv RandomBytesWithFallback(message); X25519Mac mac; - crypto_aead_lock(message.data(), mac.data(), this->derived_keys.ClientToServer().data(), nonce.data(), + crypto_aead_lock(message.data(), mac.data(), this->derived_keys.ClientToServer().data(), this->key_exchange_nonce.data(), this->our_public_key.data(), this->our_public_key.size(), message.data(), message.size()); p.Send_bytes(this->our_public_key); @@ -245,14 +246,33 @@ std::string X25519AuthenticationHandler::GetPeerPublicKey() const return FormatArrayAsHex(this->peer_public_key); } +/** + * Send the initial nonce for the encrypted connection. + * @param p The packet to send the data in. + */ +void X25519AuthenticationHandler::SendEnableEncryption(struct Packet &p) const +{ + p.Send_bytes(this->encryption_nonce); +} + +/** + * Receive the initial nonce for the encrypted connection. + * @param p The packet to read the data from. + * @return \c true when enough bytes could be read for the nonce, otherwise \c false. + */ +bool X25519AuthenticationHandler::ReceiveEnableEncryption(struct Packet &p) +{ + return p.Recv_bytes(this->encryption_nonce) == this->encryption_nonce.size(); +} + std::unique_ptr X25519AuthenticationHandler::CreateClientToServerEncryptionHandler() const { - return std::make_unique(this->derived_keys.ClientToServer(), this->nonce); + return std::make_unique(this->derived_keys.ClientToServer(), this->encryption_nonce); } std::unique_ptr X25519AuthenticationHandler::CreateServerToClientEncryptionHandler() const { - return std::make_unique(this->derived_keys.ServerToClient(), this->nonce); + return std::make_unique(this->derived_keys.ServerToClient(), this->encryption_nonce); } /** @@ -282,7 +302,7 @@ NetworkAuthenticationServerHandler::ResponseResult X25519AuthenticationHandler:: return NetworkAuthenticationServerHandler::NOT_AUTHENTICATED; } - if (crypto_aead_unlock(message.data(), mac.data(), this->derived_keys.ClientToServer().data(), nonce.data(), + if (crypto_aead_unlock(message.data(), mac.data(), this->derived_keys.ClientToServer().data(), this->key_exchange_nonce.data(), this->peer_public_key.data(), this->peer_public_key.size(), message.data(), message.size()) != 0) { /* * The ciphertext and the message authentication code do not match with the encryption key. diff --git a/src/network/network_crypto.h b/src/network/network_crypto.h index d2fc604cd0..b63c90d8a0 100644 --- a/src/network/network_crypto.h +++ b/src/network/network_crypto.h @@ -242,6 +242,12 @@ public: */ virtual bool SendResponse(struct Packet &p) = 0; + /** + * Read the request to enable encryption from the server. + * @param p The request from the server. + */ + virtual bool ReceiveEnableEncryption(struct Packet &p) = 0; + static std::unique_ptr Create(std::shared_ptr password_handler, std::string &secret_key, std::string &public_key); }; @@ -270,6 +276,12 @@ public: */ virtual ResponseResult ReceiveResponse(struct Packet &p) = 0; + /** + * Create the request to enable encryption to the client. + * @param p The packet to write the enable encryption request to. + */ + virtual void SendEnableEncryption(struct Packet &p) = 0; + /** * Checks whether this handler can be used with the current configuration. * For example when there is no password, the handler cannot be used. diff --git a/src/network/network_crypto_internal.h b/src/network/network_crypto_internal.h index a073e0931b..e2b11997c6 100644 --- a/src/network/network_crypto_internal.h +++ b/src/network/network_crypto_internal.h @@ -105,10 +105,12 @@ class X25519AuthenticationHandler { private: X25519SecretKey our_secret_key; ///< The secret key used by us. X25519PublicKey our_public_key; ///< The public key used by us. - X25519Nonce nonce; ///< The nonce to prevent replay attacks. + X25519Nonce key_exchange_nonce; ///< The nonce to prevent replay attacks of the key exchange. X25519DerivedKeys derived_keys; ///< Keys derived from the authentication process. X25519PublicKey peer_public_key; ///< The public key used by our peer. + X25519Nonce encryption_nonce; ///< The nonce to prevent replay attacks the encrypted connection. + protected: X25519AuthenticationHandler(const X25519SecretKey &secret_key); @@ -119,6 +121,8 @@ protected: std::string GetPeerPublicKey() const; + void SendEnableEncryption(struct Packet &p) const; + bool ReceiveEnableEncryption(struct Packet &p); std::unique_ptr CreateClientToServerEncryptionHandler() const; std::unique_ptr CreateServerToClientEncryptionHandler() const; }; @@ -142,6 +146,7 @@ public: virtual std::string_view GetName() const override { return "X25519-KeyExchangeOnly-client"; } virtual NetworkAuthenticationMethod GetAuthenticationMethod() const override { return NETWORK_AUTH_METHOD_X25519_KEY_EXCHANGE_ONLY; } + virtual bool ReceiveEnableEncryption(struct Packet &p) override { return this->X25519AuthenticationHandler::ReceiveEnableEncryption(p); } virtual std::unique_ptr CreateClientToServerEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateClientToServerEncryptionHandler(); } virtual std::unique_ptr CreateServerToClientEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateServerToClientEncryptionHandler(); } }; @@ -167,6 +172,7 @@ public: virtual bool CanBeUsed() const override { return true; } virtual std::string GetPeerPublicKey() const override { return this->X25519AuthenticationHandler::GetPeerPublicKey(); } + virtual void SendEnableEncryption(struct Packet &p) override { this->X25519AuthenticationHandler::SendEnableEncryption(p); } virtual std::unique_ptr CreateClientToServerEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateClientToServerEncryptionHandler(); } virtual std::unique_ptr CreateServerToClientEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateServerToClientEncryptionHandler(); } }; @@ -194,6 +200,7 @@ public: virtual std::string_view GetName() const override { return "X25519-PAKE-client"; } virtual NetworkAuthenticationMethod GetAuthenticationMethod() const override { return NETWORK_AUTH_METHOD_X25519_PAKE; } + virtual bool ReceiveEnableEncryption(struct Packet &p) override { return this->X25519AuthenticationHandler::ReceiveEnableEncryption(p); } virtual std::unique_ptr CreateClientToServerEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateClientToServerEncryptionHandler(); } virtual std::unique_ptr CreateServerToClientEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateServerToClientEncryptionHandler(); } }; @@ -222,6 +229,7 @@ public: virtual bool CanBeUsed() const override { return !this->password_provider->GetPassword().empty(); } virtual std::string GetPeerPublicKey() const override { return this->X25519AuthenticationHandler::GetPeerPublicKey(); } + virtual void SendEnableEncryption(struct Packet &p) override { this->X25519AuthenticationHandler::SendEnableEncryption(p); } virtual std::unique_ptr CreateClientToServerEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateClientToServerEncryptionHandler(); } virtual std::unique_ptr CreateServerToClientEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateServerToClientEncryptionHandler(); } }; @@ -247,6 +255,7 @@ public: virtual std::string_view GetName() const override { return "X25519-AuthorizedKey-client"; } virtual NetworkAuthenticationMethod GetAuthenticationMethod() const override { return NETWORK_AUTH_METHOD_X25519_AUTHORIZED_KEY; } + virtual bool ReceiveEnableEncryption(struct Packet &p) override { return this->X25519AuthenticationHandler::ReceiveEnableEncryption(p); } virtual std::unique_ptr CreateClientToServerEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateClientToServerEncryptionHandler(); } virtual std::unique_ptr CreateServerToClientEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateServerToClientEncryptionHandler(); } @@ -278,6 +287,7 @@ public: virtual bool CanBeUsed() const override { return this->authorized_key_handler->CanBeUsed(); } virtual std::string GetPeerPublicKey() const override { return this->X25519AuthenticationHandler::GetPeerPublicKey(); } + virtual void SendEnableEncryption(struct Packet &p) override { this->X25519AuthenticationHandler::SendEnableEncryption(p); } virtual std::unique_ptr CreateClientToServerEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateClientToServerEncryptionHandler(); } virtual std::unique_ptr CreateServerToClientEncryptionHandler() const override { return this->X25519AuthenticationHandler::CreateServerToClientEncryptionHandler(); } }; @@ -308,6 +318,7 @@ public: virtual std::string_view GetName() const override; virtual NetworkAuthenticationMethod GetAuthenticationMethod() const override; + virtual bool ReceiveEnableEncryption(struct Packet &p) override { return this->current_handler->ReceiveEnableEncryption(p); } virtual std::unique_ptr CreateClientToServerEncryptionHandler() const override { return this->current_handler->CreateClientToServerEncryptionHandler(); } virtual std::unique_ptr CreateServerToClientEncryptionHandler() const override { return this->current_handler->CreateServerToClientEncryptionHandler(); } }; @@ -334,6 +345,7 @@ public: virtual bool CanBeUsed() const override; virtual std::string GetPeerPublicKey() const override { return this->handlers.back()->GetPeerPublicKey(); } + virtual void SendEnableEncryption(struct Packet &p) override { this->handlers.back()->SendEnableEncryption(p); } virtual std::unique_ptr CreateClientToServerEncryptionHandler() const override { return this->handlers.back()->CreateClientToServerEncryptionHandler(); } virtual std::unique_ptr CreateServerToClientEncryptionHandler() const override { return this->handlers.back()->CreateServerToClientEncryptionHandler(); } }; diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index cbbe81184e..8bd2f4c7e4 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -467,6 +467,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendEnableEncryption() if (this->status != STATUS_AUTH_GAME) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); auto p = std::make_unique(this, PACKET_SERVER_ENABLE_ENCRYPTION); + this->authentication_handler->SendEnableEncryption(*p); this->SendPacket(std::move(p)); return NETWORK_RECV_STATUS_OKAY; } diff --git a/src/tests/test_network_crypto.cpp b/src/tests/test_network_crypto.cpp index 33838a6ac9..2c8734e11b 100644 --- a/src/tests/test_network_crypto.cpp +++ b/src/tests/test_network_crypto.cpp @@ -249,6 +249,14 @@ TEST_CASE("Encryption handling") TestAuthentication(server, client, NetworkAuthenticationServerHandler::AUTHENTICATED, NetworkAuthenticationClientHandler::READY_FOR_RESPONSE); + Packet packet(&mock_socket_handler, PacketType{}); + server.SendEnableEncryption(packet); + + bool valid; + std::tie(packet, valid) = CreatePacketForReading(packet, &mock_socket_handler); + CHECK(valid); + CHECK(client.ReceiveEnableEncryption(packet)); + MockNetworkSocketHandler server_socket_handler(server.CreateClientToServerEncryptionHandler(), server.CreateServerToClientEncryptionHandler()); MockNetworkSocketHandler client_socket_handler(client.CreateServerToClientEncryptionHandler(), client.CreateClientToServerEncryptionHandler()); From d683ec01839b709d5b2e3e635f854b7bae874e3a Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 31 Mar 2024 19:37:16 +0100 Subject: [PATCH 210/695] Codechange: Move dropdown and slider out of widgets directory. (#12403) Also shuffle headers to place widget includes near end. This leaves the widgets directory solely for defining Widget IDs. --- src/CMakeLists.txt | 5 +++++ src/airport_gui.cpp | 2 +- src/autoreplace_gui.cpp | 2 +- src/bridge_gui.cpp | 2 +- src/build_vehicle_gui.cpp | 2 +- src/company_cmd.cpp | 3 ++- src/company_gui.cpp | 2 +- src/date_gui.cpp | 2 +- src/{widgets => }/dropdown.cpp | 19 +++++++++---------- src/{widgets => }/dropdown_func.h | 8 ++++---- src/{widgets => }/dropdown_type.h | 22 +++++++++++----------- src/game/game_gui.cpp | 2 +- src/genworld_gui.cpp | 4 ++-- src/ground_vehicle.hpp | 1 + src/group_gui.cpp | 2 +- src/help_gui.cpp | 2 +- src/industry_gui.cpp | 7 ++++--- src/league_gui.cpp | 3 ++- src/music_gui.cpp | 6 +++--- src/network/network_gui.cpp | 4 ++-- src/newgrf_gui.cpp | 4 ++-- src/news_gui.cpp | 2 +- src/order_gui.cpp | 4 ++-- src/rail_gui.cpp | 2 +- src/rail_gui.h | 2 +- src/road_gui.h | 2 +- src/screenshot_gui.cpp | 8 ++++++-- src/script/script_gui.cpp | 2 +- src/settings_gui.cpp | 6 +++--- src/settings_gui.h | 2 +- src/{widgets => }/slider.cpp | 14 +++++++------- src/{widgets => }/slider_func.h | 10 +++++----- src/smallmap_gui.cpp | 3 ++- src/station_cmd.cpp | 3 ++- src/station_gui.cpp | 2 +- src/story_gui.cpp | 4 ++-- src/textfile_gui.cpp | 2 +- src/town_gui.cpp | 2 +- src/vehicle_gui.cpp | 2 +- src/vehicle_gui_base.h | 2 +- src/widgets/CMakeLists.txt | 5 ----- 41 files changed, 96 insertions(+), 87 deletions(-) rename src/{widgets => }/dropdown.cpp (98%) rename src/{widgets => }/dropdown_func.h (87%) rename src/{widgets => }/dropdown_type.h (96%) rename src/{widgets => }/slider.cpp (95%) rename src/{widgets => }/slider_func.h (88%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a55346167a..7951048ee0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -138,6 +138,9 @@ add_files( dock_gui.cpp driver.cpp driver.h + dropdown.cpp + dropdown_func.h + dropdown_type.h economy.cpp economy_base.h economy_cmd.h @@ -393,6 +396,8 @@ add_files( signs_func.h signs_gui.cpp signs_type.h + slider.cpp + slider_func.h slope_func.h slope_type.h smallmap_gui.cpp diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index e0e1adf461..3e40208db1 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -22,7 +22,7 @@ #include "station_type.h" #include "newgrf_airport.h" #include "newgrf_callbacks.h" -#include "widgets/dropdown_type.h" +#include "dropdown_type.h" #include "core/geometry_func.hpp" #include "hotkeys.h" #include "vehicle_func.h" diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index f4586350ee..a69786dc2f 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -24,7 +24,7 @@ #include "core/geometry_func.hpp" #include "rail_gui.h" #include "road_gui.h" -#include "widgets/dropdown_func.h" +#include "dropdown_func.h" #include "autoreplace_cmd.h" #include "group_cmd.h" #include "settings_cmd.h" diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index 9cb6f56c25..97f152457e 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -18,7 +18,7 @@ #include "gfx_func.h" #include "tunnelbridge.h" #include "sortlist_type.h" -#include "widgets/dropdown_func.h" +#include "dropdown_func.h" #include "core/geometry_func.hpp" #include "tunnelbridge_map.h" #include "road_gui.h" diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index a21a139c1a..0b458f3868 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -25,7 +25,7 @@ #include "window_func.h" #include "timer/timer_game_calendar.h" #include "vehicle_func.h" -#include "widgets/dropdown_func.h" +#include "dropdown_func.h" #include "engine_gui.h" #include "cargotype.h" #include "core/geometry_func.hpp" diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index bee3b6032f..2f68a61817 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -34,12 +34,13 @@ #include "game/game.hpp" #include "goal_base.h" #include "story_base.h" -#include "widgets/statusbar_widget.h" #include "company_cmd.h" #include "timer/timer.h" #include "timer/timer_game_economy.h" #include "timer/timer_game_tick.h" +#include "widgets/statusbar_widget.h" + #include "table/strings.h" #include "safeguards.h" diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 21743d31f9..74ce478601 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -23,7 +23,7 @@ #include "company_manager_face.h" #include "strings_func.h" #include "timer/timer_game_economy.h" -#include "widgets/dropdown_type.h" +#include "dropdown_type.h" #include "tilehighlight_func.h" #include "company_base.h" #include "core/geometry_func.hpp" diff --git a/src/date_gui.cpp b/src/date_gui.cpp index 20a6718aeb..e5c2438cd2 100644 --- a/src/date_gui.cpp +++ b/src/date_gui.cpp @@ -14,8 +14,8 @@ #include "window_gui.h" #include "date_gui.h" #include "core/geometry_func.hpp" +#include "dropdown_type.h" -#include "widgets/dropdown_type.h" #include "widgets/date_widget.h" #include "safeguards.h" diff --git a/src/widgets/dropdown.cpp b/src/dropdown.cpp similarity index 98% rename from src/widgets/dropdown.cpp rename to src/dropdown.cpp index a4a1d9953c..2e70120069 100644 --- a/src/widgets/dropdown.cpp +++ b/src/dropdown.cpp @@ -7,19 +7,18 @@ /** @file dropdown.cpp Implementation of the dropdown widget. */ -#include "../stdafx.h" -#include "../window_gui.h" -#include "../string_func.h" -#include "../strings_func.h" -#include "../window_func.h" -#include "../zoom_func.h" -#include "../timer/timer.h" -#include "../timer/timer_window.h" +#include "stdafx.h" #include "dropdown_type.h" +#include "strings_func.h" +#include "timer/timer.h" +#include "timer/timer_window.h" +#include "window_gui.h" +#include "window_func.h" +#include "zoom_func.h" -#include "dropdown_widget.h" +#include "widgets/dropdown_widget.h" -#include "../safeguards.h" +#include "safeguards.h" static constexpr NWidgetPart _nested_dropdown_menu_widgets[] = { diff --git a/src/widgets/dropdown_func.h b/src/dropdown_func.h similarity index 87% rename from src/widgets/dropdown_func.h rename to src/dropdown_func.h index 7cc10f56f2..65e4d272af 100644 --- a/src/widgets/dropdown_func.h +++ b/src/dropdown_func.h @@ -7,12 +7,12 @@ /** @file dropdown_func.h Functions related to the drop down widget. */ -#ifndef WIDGETS_DROPDOWN_FUNC_H -#define WIDGETS_DROPDOWN_FUNC_H +#ifndef DROPDOWN_FUNC_H +#define DROPDOWN_FUNC_H -#include "../window_gui.h" +#include "window_gui.h" /* Show drop down menu containing a fixed list of strings */ void ShowDropDownMenu(Window *w, const StringID *strings, int selected, WidgetID button, uint32_t disabled_mask, uint32_t hidden_mask, uint width = 0); -#endif /* WIDGETS_DROPDOWN_FUNC_H */ +#endif /* DROPDOWN_FUNC_H */ diff --git a/src/widgets/dropdown_type.h b/src/dropdown_type.h similarity index 96% rename from src/widgets/dropdown_type.h rename to src/dropdown_type.h index 89adabde09..fd102b43f2 100644 --- a/src/widgets/dropdown_type.h +++ b/src/dropdown_type.h @@ -7,17 +7,17 @@ /** @file dropdown_type.h Types related to the drop down widget. */ -#ifndef WIDGETS_DROPDOWN_TYPE_H -#define WIDGETS_DROPDOWN_TYPE_H +#ifndef DROPDOWN_TYPE_H +#define DROPDOWN_TYPE_H -#include "../window_type.h" -#include "../gfx_func.h" -#include "../gfx_type.h" -#include "../palette_func.h" -#include "../string_func.h" -#include "../strings_func.h" -#include "../table/strings.h" -#include "../window_gui.h" +#include "window_type.h" +#include "gfx_func.h" +#include "gfx_type.h" +#include "palette_func.h" +#include "string_func.h" +#include "strings_func.h" +#include "table/strings.h" +#include "window_gui.h" /** * Base list item class from which others are derived. @@ -217,4 +217,4 @@ Dimension GetDropDownListDimension(const DropDownList &list); void ReplaceDropDownList(Window *parent, DropDownList &&list); -#endif /* WIDGETS_DROPDOWN_TYPE_H */ +#endif /* DROPDOWN_TYPE_H */ diff --git a/src/game/game_gui.cpp b/src/game/game_gui.cpp index 22f94ef055..b6c6c7588a 100644 --- a/src/game/game_gui.cpp +++ b/src/game/game_gui.cpp @@ -14,7 +14,7 @@ #include "../window_func.h" #include "../network/network.h" #include "../network/network_content.h" -#include "../widgets/dropdown_func.h" +#include "../dropdown_func.h" #include "../timer/timer.h" #include "../timer/timer_window.h" diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index 33689ea80d..d0071b63ca 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -18,8 +18,8 @@ #include "sound_func.h" #include "fios.h" #include "string_func.h" -#include "widgets/dropdown_type.h" -#include "widgets/dropdown_func.h" +#include "dropdown_type.h" +#include "dropdown_func.h" #include "querystring_gui.h" #include "town.h" #include "core/geometry_func.hpp" diff --git a/src/ground_vehicle.hpp b/src/ground_vehicle.hpp index f8bc393b73..6ff4041603 100644 --- a/src/ground_vehicle.hpp +++ b/src/ground_vehicle.hpp @@ -14,6 +14,7 @@ #include "vehicle_gui.h" #include "landscape.h" #include "window_func.h" + #include "widgets/vehicle_widget.h" /** What is the status of our acceleration? */ diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 812f7a9e86..1143de9f0f 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -18,7 +18,7 @@ #include "vehicle_func.h" #include "autoreplace_gui.h" #include "company_func.h" -#include "widgets/dropdown_func.h" +#include "dropdown_func.h" #include "tilehighlight_func.h" #include "vehicle_gui_base.h" #include "core/geometry_func.hpp" diff --git a/src/help_gui.cpp b/src/help_gui.cpp index 8012a880a1..fdf2975393 100644 --- a/src/help_gui.cpp +++ b/src/help_gui.cpp @@ -15,8 +15,8 @@ #include "table/control_codes.h" #include "string_func.h" #include "openttd.h" - #include "help_gui.h" + #include "widgets/help_widget.h" #include "widgets/misc_widget.h" diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index d4bbf88497..e08e391ef1 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -28,15 +28,14 @@ #include "tilehighlight_func.h" #include "string_func.h" #include "sortlist_type.h" -#include "widgets/dropdown_func.h" +#include "dropdown_func.h" #include "company_base.h" #include "core/geometry_func.hpp" #include "core/random_func.hpp" #include "core/backup_type.hpp" #include "genworld.h" #include "smallmap_gui.h" -#include "widgets/dropdown_type.h" -#include "widgets/industry_widget.h" +#include "dropdown_type.h" #include "clear_map.h" #include "zoom_func.h" #include "industry_cmd.h" @@ -46,6 +45,8 @@ #include "timer/timer_window.h" #include "hotkeys.h" +#include "widgets/industry_widget.h" + #include "table/strings.h" #include diff --git a/src/league_gui.cpp b/src/league_gui.cpp index 2e0e6ee9d0..3e9c5ca833 100644 --- a/src/league_gui.cpp +++ b/src/league_gui.cpp @@ -9,7 +9,6 @@ #include "stdafx.h" #include "league_gui.h" - #include "company_base.h" #include "company_gui.h" #include "gui.h" @@ -22,7 +21,9 @@ #include "town.h" #include "viewport_func.h" #include "window_gui.h" + #include "widgets/league_widget.h" + #include "table/strings.h" #include "table/sprites.h" diff --git a/src/music_gui.cpp b/src/music_gui.cpp index 3af86476e2..081cd3650b 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -24,9 +24,9 @@ #include "string_func.h" #include "settings_type.h" #include "settings_gui.h" -#include "widgets/dropdown_func.h" -#include "widgets/dropdown_type.h" -#include "widgets/slider_func.h" +#include "dropdown_func.h" +#include "dropdown_type.h" +#include "slider_func.h" #include "mixer.h" #include "widgets/music_widget.h" diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 29b6c18433..13e1c76eff 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -23,8 +23,8 @@ #include "network_udp.h" #include "../window_func.h" #include "../gfx_func.h" -#include "../widgets/dropdown_type.h" -#include "../widgets/dropdown_func.h" +#include "../dropdown_type.h" +#include "../dropdown_func.h" #include "../querystring_gui.h" #include "../sortlist_type.h" #include "../company_func.h" diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index f534996a6b..d70cfda897 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -16,8 +16,8 @@ #include "gamelog.h" #include "settings_type.h" #include "settings_func.h" -#include "widgets/dropdown_type.h" -#include "widgets/dropdown_func.h" +#include "dropdown_type.h" +#include "dropdown_func.h" #include "network/network.h" #include "network/network_content.h" #include "sortlist_type.h" diff --git a/src/news_gui.cpp b/src/news_gui.cpp index f84676080c..36200d003d 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -21,7 +21,7 @@ #include "town.h" #include "sound_func.h" #include "string_func.h" -#include "widgets/dropdown_func.h" +#include "dropdown_func.h" #include "statusbar_gui.h" #include "company_manager_face.h" #include "company_func.h" diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 137fd1b76c..f6ee4d9421 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -15,8 +15,8 @@ #include "timetable.h" #include "strings_func.h" #include "company_func.h" -#include "widgets/dropdown_type.h" -#include "widgets/dropdown_func.h" +#include "dropdown_type.h" +#include "dropdown_func.h" #include "textbuf_gui.h" #include "string_func.h" #include "tilehighlight_func.h" diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index dce5f61b91..71fc9c6c49 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -21,7 +21,7 @@ #include "window_func.h" #include "sound_func.h" #include "company_func.h" -#include "widgets/dropdown_type.h" +#include "dropdown_type.h" #include "tunnelbridge.h" #include "tilehighlight_func.h" #include "spritecache.h" diff --git a/src/rail_gui.h b/src/rail_gui.h index ef51130e8b..46e91b0430 100644 --- a/src/rail_gui.h +++ b/src/rail_gui.h @@ -11,7 +11,7 @@ #define RAIL_GUI_H #include "rail_type.h" -#include "widgets/dropdown_type.h" +#include "dropdown_type.h" struct Window *ShowBuildRailToolbar(RailType railtype); void ReinitGuiAfterToggleElrail(bool disable); diff --git a/src/road_gui.h b/src/road_gui.h index 580c11e32e..fefce6b534 100644 --- a/src/road_gui.h +++ b/src/road_gui.h @@ -13,7 +13,7 @@ #include "road_type.h" #include "tile_type.h" #include "direction_type.h" -#include "widgets/dropdown_type.h" +#include "dropdown_type.h" struct Window *ShowBuildRoadToolbar(RoadType roadtype); struct Window *ShowBuildRoadScenToolbar(RoadType roadtype); diff --git a/src/screenshot_gui.cpp b/src/screenshot_gui.cpp index 8a91dc7eb3..2505b7cbbe 100644 --- a/src/screenshot_gui.cpp +++ b/src/screenshot_gui.cpp @@ -11,10 +11,14 @@ #include "window_func.h" #include "window_gui.h" #include "screenshot.h" -#include "widgets/screenshot_widget.h" -#include "table/strings.h" #include "gfx_func.h" +#include "widgets/screenshot_widget.h" + +#include "table/strings.h" + +#include "safeguards.h" + struct ScreenshotWindow : Window { ScreenshotWindow(WindowDesc *desc) : Window(desc) { diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp index 40ac7e3cfd..d6855bdd6c 100644 --- a/src/script/script_gui.cpp +++ b/src/script/script_gui.cpp @@ -17,7 +17,7 @@ #include "../company_gui.h" #include "../window_func.h" #include "../network/network.h" -#include "../widgets/dropdown_func.h" +#include "../dropdown_func.h" #include "../hotkeys.h" #include "../company_cmd.h" #include "../misc_cmd.h" diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index ba0ce024f7..2043373dc6 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -19,9 +19,9 @@ #include "strings_func.h" #include "window_func.h" #include "string_func.h" -#include "widgets/dropdown_type.h" -#include "widgets/dropdown_func.h" -#include "widgets/slider_func.h" +#include "dropdown_type.h" +#include "dropdown_func.h" +#include "slider_func.h" #include "highscore.h" #include "base_media_base.h" #include "company_base.h" diff --git a/src/settings_gui.h b/src/settings_gui.h index b0ad28862f..c95345b00a 100644 --- a/src/settings_gui.h +++ b/src/settings_gui.h @@ -11,7 +11,7 @@ #define SETTING_GUI_H #include "gfx_type.h" -#include "widgets/dropdown_type.h" +#include "dropdown_type.h" /** Width of setting buttons */ #define SETTING_BUTTON_WIDTH ((int)NWidgetScrollbar::GetHorizontalDimension().width * 2) diff --git a/src/widgets/slider.cpp b/src/slider.cpp similarity index 95% rename from src/widgets/slider.cpp rename to src/slider.cpp index b5553e56cb..67894a88d2 100644 --- a/src/widgets/slider.cpp +++ b/src/slider.cpp @@ -7,15 +7,15 @@ /** @file slider.cpp Implementation of the horizontal slider widget. */ -#include "../stdafx.h" -#include "../palette_func.h" -#include "../window_gui.h" -#include "../window_func.h" -#include "../strings_func.h" -#include "../zoom_func.h" +#include "stdafx.h" +#include "gfx_func.h" +#include "palette_func.h" #include "slider_func.h" +#include "strings_func.h" +#include "window_gui.h" +#include "zoom_func.h" -#include "../safeguards.h" +#include "safeguards.h" static const int SLIDER_WIDTH = 3; diff --git a/src/widgets/slider_func.h b/src/slider_func.h similarity index 88% rename from src/widgets/slider_func.h rename to src/slider_func.h index fc2c9f8113..0aaa39bf15 100644 --- a/src/widgets/slider_func.h +++ b/src/slider_func.h @@ -7,11 +7,11 @@ /** @file slider_type.h Types related to the horizontal slider widget. */ -#ifndef WIDGETS_SLIDER_TYPE_H -#define WIDGETS_SLIDER_TYPE_H +#ifndef SLIDER_TYPE_H +#define SLIDER_TYPE_H -#include "../window_type.h" -#include "../gfx_func.h" +#include "core/geometry_type.hpp" +#include "strings_type.h" void DrawSliderWidget(Rect r, int min_value, int max_value, int value, const std::map &labels); bool ClickSliderWidget(Rect r, Point pt, int min_value, int max_value, int &value); @@ -24,4 +24,4 @@ inline bool ClickSliderWidget(Rect r, Point pt, int min_value, int max_value, ui return true; } -#endif /* WIDGETS_SLIDER_TYPE_H */ +#endif /* SLIDER_TYPE_H */ diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 068881cb5d..4bfa47b6de 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -26,11 +26,12 @@ #include "strings_func.h" #include "blitter/factory.hpp" #include "linkgraph/linkgraph_gui.h" -#include "widgets/smallmap_widget.h" #include "timer/timer.h" #include "timer/timer_window.h" #include "smallmap_gui.h" +#include "widgets/smallmap_widget.h" + #include "table/strings.h" #include diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index bee14e7bd4..5ae1b6735d 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -55,7 +55,6 @@ #include "company_gui.h" #include "linkgraph/linkgraph_base.h" #include "linkgraph/refresh.h" -#include "widgets/station_widget.h" #include "tunnelbridge_map.h" #include "station_cmd.h" #include "waypoint_cmd.h" @@ -68,6 +67,8 @@ #include "timer/timer_game_tick.h" #include "cheat_type.h" +#include "widgets/station_widget.h" + #include "table/strings.h" #include diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 098be7a228..44b90c0714 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -20,7 +20,7 @@ #include "string_func.h" #include "window_func.h" #include "viewport_func.h" -#include "widgets/dropdown_func.h" +#include "dropdown_func.h" #include "station_base.h" #include "waypoint_base.h" #include "tilehighlight_func.h" diff --git a/src/story_gui.cpp b/src/story_gui.cpp index f3ec75a53a..61e8e20965 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -15,8 +15,8 @@ #include "core/geometry_func.hpp" #include "company_func.h" #include "command_func.h" -#include "widgets/dropdown_type.h" -#include "widgets/dropdown_func.h" +#include "dropdown_type.h" +#include "dropdown_func.h" #include "sortlist_type.h" #include "goal_base.h" #include "viewport_func.h" diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index 5976fff1b1..843a28faac 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -15,7 +15,7 @@ #include "gfx_func.h" #include "string_func.h" #include "textfile_gui.h" -#include "widgets/dropdown_type.h" +#include "dropdown_type.h" #include "gfx_layout.h" #include "debug.h" #include "openttd.h" diff --git a/src/town_gui.cpp b/src/town_gui.cpp index dbe65e3742..14ddaa8619 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -31,7 +31,7 @@ #include "core/geometry_func.hpp" #include "genworld.h" #include "stringfilter_type.h" -#include "widgets/dropdown_func.h" +#include "dropdown_func.h" #include "town_kdtree.h" #include "town_cmd.h" #include "timer/timer.h" diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 99bb9dd9e5..0768c64b49 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -26,7 +26,7 @@ #include "vehicle_func.h" #include "autoreplace_gui.h" #include "string_func.h" -#include "widgets/dropdown_func.h" +#include "dropdown_func.h" #include "timetable.h" #include "articulated_vehicles.h" #include "spritecache.h" diff --git a/src/vehicle_gui_base.h b/src/vehicle_gui_base.h index 3b63484494..c1a9c7a246 100644 --- a/src/vehicle_gui_base.h +++ b/src/vehicle_gui_base.h @@ -17,7 +17,7 @@ #include "vehicle_base.h" #include "vehiclelist.h" #include "window_gui.h" -#include "widgets/dropdown_type.h" +#include "dropdown_type.h" typedef GUIList GUIVehicleList; diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt index dd28f14c8f..933e8c5056 100644 --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -11,9 +11,6 @@ add_files( date_widget.h depot_widget.h dock_widget.h - dropdown.cpp - dropdown_func.h - dropdown_type.h dropdown_widget.h engine_widget.h error_widget.h @@ -48,8 +45,6 @@ add_files( script_widget.h settings_widget.h sign_widget.h - slider.cpp - slider_func.h smallmap_widget.h station_widget.h statusbar_widget.h From 3d2a8fb60c847b7f7b654778dda006885d9c3fd9 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 1 Apr 2024 04:40:15 +0000 Subject: [PATCH 211/695] Update: Translations from eints welsh: 5 changes by Ansbaradigeidfran ukrainian: 11 changes by StepanIvasyn catalan: 1 change by J0anJosep portuguese (brazilian): 69 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 138 +++++++++++++++--------------- src/lang/catalan.txt | 2 +- src/lang/ukrainian.txt | 22 ++--- src/lang/welsh.txt | 8 +- 4 files changed, 86 insertions(+), 84 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index fa95b1a4a2..609943fac6 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -290,7 +290,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Clique e STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Alternar entre janela grande/pequena STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de rolagem - desloca a lista para cima/baixo STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de rolagem - desloca a lista para a esquerda/direita -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolir construções, etc. em um quadrado do terreno. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para só mostrar o custo estimado +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolir construções, etc., num quadrado do terreno. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para só mostrar o custo estimado # Show engines button ###length VEHICLE_TYPES @@ -349,7 +349,7 @@ STR_SORT_BY_WAITING_TOTAL :Carga total agu STR_SORT_BY_WAITING_AVAILABLE :Carga disponível aguardando STR_SORT_BY_RATING_MAX :Maior classificação de carga STR_SORT_BY_RATING_MIN :Menor classificação de carga -STR_SORT_BY_ENGINE_ID :Motor ID(ordem clássica) +STR_SORT_BY_ENGINE_ID :Motor ID (ordem clássica) STR_SORT_BY_COST :Custo STR_SORT_BY_POWER :Potência STR_SORT_BY_TRACTIVE_EFFORT :Força de tração @@ -617,7 +617,7 @@ STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLA STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Tarifas por Carga STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Dias em trânsito STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Segundos em trânsito -STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Pagamento por entregar 10 unidades (ou 10 mil litros) de carga em uma distância de 20 quadrados +STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Pagamento por entregar 10 unidades (ou 10 mil litros) de carga numa distância de 20 quadrados STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Ativar tudo STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Desativar tudo STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Mostrar todas as cargas no gráfico de tarifas por carga @@ -758,9 +758,9 @@ STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Mostrar STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Mostrar rotas de transporte no mapa STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Mostrar vegetação no mapa STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Mostrar proprietários dos terrenos no mapa -STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Clique em um tipo de indústria para mostrar/ocultar a indústria. Ctrl+Clique para desativar todos os tipos, exceto o selecionado. Ctrl+Clique novamente para ativar todos os tipos de indústria -STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Clique em uma empresa para mostrar/ocultar suas propriedades. Ctrl+Clique para desativar todas as empresas, exceto a selecionada. Ctrl+Clique novamente para ativar todas as empresas -STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Clique em uma carga para mostrar/ocultar sua propriedade. Ctrl+Clique para desativar todas as cargas, exceto a selecionada. Ctrl+Clique novamente para ativar todas as cargas +STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Clique num tipo de indústria para mostrar/ocultar a indústria. Ctrl+Clique para desativar todos os tipos, exceto o selecionado. Ctrl+Clique novamente para ativar todos os tipos de indústria +STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Clique numa empresa para mostrar/ocultar suas propriedades. Ctrl+Clique para desativar todas as empresas, exceto a selecionada. Ctrl+Clique novamente para ativar todas as empresas +STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Clique numa carga para mostrar/ocultar sua propriedade. Ctrl+Clique para desativar todas as cargas, exceto a selecionada. Ctrl+Clique novamente para ativar todas as cargas STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Estradas STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Ferrovias @@ -1285,7 +1285,7 @@ STR_CONFIG_SETTING_INTEREST_RATE :Taxa de juros: STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Taxa de juros do empréstimo; também controla a inflação, se ativado STR_CONFIG_SETTING_RUNNING_COSTS :Custos operacionais: {STRING} -STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Configurar nível de manutenção e custos operacionais de veículos e infraestrutura +STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Definir o nível dos custos de manutenção e operacionais de veículos e da infraestrutura STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Velocidade de construção: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Limitar a quantidade ações de construção para IAs @@ -1306,7 +1306,7 @@ STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{UNITS_YEARS_OR STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Sem subsídios STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Custos de construção: {STRING} -STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Definir o nível de construção e custos de aquisição +STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Definir o nível dos custos de construção e de aquisição STR_CONFIG_SETTING_RECESSIONS :Recessões: {STRING} STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Se ativado, recessões podem ocorrer periodicamente. Durante uma recessão, toda a produção é significativamente menor (ela retorna ao nível anterior quando a recessão termina) @@ -1360,7 +1360,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Inclinação do STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Inclinação de um quadrado inclinado para um veículo rodoviário. Valores grandes tornam mais difícil para um veículo subir uma colina STR_CONFIG_SETTING_FORBID_90_DEG :Proibir trens de fazer curvas de 90 graus: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas de 90 graus ocorrem quando uma linha horizontal é seguida diretamente por outra vertical em um quadrado adjacente, fazendo com que o trem vire 90 graus quando passa de um quadrado para o próximo, ao invés dos habituais 45 graus para outras combinações de linhas +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas de 90 graus ocorrem quando uma linha horizontal é seguida diretamente por outra vertical num quadrado adjacente, fazendo com que o trem vire 90 graus quando passa de um quadrado para o próximo, ao invés dos habituais 45 graus para outras combinações de linhas STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permitir a união de estações não adjacentes: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permitir acrescentar partes a uma estação sem tocar diretamente nas partes já existentes, usando Ctrl+Clique enquanto coloca as novas partes @@ -1378,7 +1378,7 @@ STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Comprimento má STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Comprimento máximo para a construção de túneis STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Método manual de construção de indústria primária: {STRING} -STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Método de fundar uma indústria primária. 'Nenhum' significa que não é possível fundar nenhuma; 'Prospecção' significa que é possível fundar, mas a construção ocorre em um local aleatório do mapa e pode até falhar; 'Como as outras indústrias' significa que novas indústrias podem ser construídas em qualquer local escolhido pelas empresas, como se fossem indústrias de processamento +STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Método de fundar uma indústria primária. 'Nenhum' significa que não é possível fundar nenhuma; 'Prospecção' significa que é possível fundar, mas a construção ocorre num local aleatório do mapa e pode até falhar; 'Como as outras indústrias' significa que novas indústrias podem ser construídas em qualquer local escolhido pelas empresas, como se fossem indústrias de processamento ###length 3 STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :Nenhum STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :Como as outras indústrias @@ -1527,10 +1527,10 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY :Quantia mínima STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Quantia mínima de dinheiro que deve existir na conta bancária para a renovação automática de veículos ser considerada STR_CONFIG_SETTING_ERRMSG_DURATION :Duração da mensagem de erro: {STRING} -STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Tempo de exibição de mensagens de erro em uma janela vermelha. Algumas mensagens de erro (crítico) não são fechadas automaticamente após este tempo e precisam ser fechadas manualmente +STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Tempo de exibição de mensagens de erro numa janela vermelha. Algumas mensagens de erro (crítico) não são fechadas automaticamente após este tempo e precisam ser fechadas manualmente STR_CONFIG_SETTING_HOVER_DELAY :Mostrar textos de ajuda: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tempo que o cursor deve ficar sobre algum elemento da interface para que os textos de ajuda sejam mostrados. Outro modo de exibir os textos de ajuda é com o botão direito do mouse quando este valor é fixado em 0. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tempo que o cursor deve ficar sobre algum elemento da interface para que os textos de ajuda sejam mostrados. Outro modo de exibir os textos de ajuda é fixar este valor em 0 e clicar com o botão direito do mouse STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Manter o cursor por {COMMA} milissegundo{P 0 "" s} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Botão direito @@ -1612,7 +1612,7 @@ STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Sentido Horári STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :Altitude para um mapa de cenário plano: {STRING} ###length 2 STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}Um ou mais quadrados na borda norte não estão vazios -STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}Um ou mais quadrados em um dos cantos não é água +STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}Um ou mais quadrados num dos cantos não é água STR_CONFIG_SETTING_STATION_SPREAD :Tamanho máximo de estação: {STRING} STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Área máxima que as partes de uma estação simples podem ocupar. Valores grandes tornam o jogo lento @@ -1922,7 +1922,7 @@ STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentagem da STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentagem da receita dada às etapas intermediárias em sistemas de transbordo, proporcionando maior controle sobre a receita STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Quando arrastar, colocar sinais a cada: {STRING} -STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Definir a distância na qual os sinais serão construídos em uma linha até o próximo obstáculo (sinal, junção), quando colocar sinais arrastando +STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Definir a distância na qual os sinais serão construídos numa linha até o próximo obstáculo (sinal, junção), quando colocar sinais arrastando STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} quadrado{P 0 "" s} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Quando arrastar, manter distância fixa entre os sinais: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Escolher o comportamento da colocação de sinais ao usar Ctrl+Arrastar. Se desativado, sinais são colocados ao redor de túneis ou pontes para evitar seções longas sem sinais. Se ativado, sinais são colocados a cada N quadrados, facilitando o alinhamento de sinais em linhas paralelas @@ -1931,7 +1931,7 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Usar automatica STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Definir o ano em que os sinais elétricos serão usados nas ferrovias. Antes deste ano, sinais não-elétricos serão usados (eles têm a mesma funcionalidade, mas aparência diferente) STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Alternar entre tipos de sinais: {STRING} -STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Selecionar quais os tipos de sinais serão alternados quando usar Ctrl+Clique em um sinal construído com a ferramenta de sinais +STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Selecionar quais os tipos de sinais serão alternados quando usar Ctrl+Clique num sinal construído com a ferramenta de sinais ###length 2 STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :Somente grupo atual STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Todos visíveis @@ -2140,12 +2140,12 @@ STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Algoritmo usado STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Gerador de rotas para embarcações: {STRING} STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Algoritmo usado para estabelecer as rotas das embarcações STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Reversão automática em sinais: {STRING} -STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permitir que os trens invertam a direção em um sinal, se eles tiverem esperado lá muito tempo +STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permitir que os trens invertam a direção num sinal, se eles tiverem esperado lá muito tempo ###length 2 STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recomendado) -STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Alterar o valor +STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Modificar o valor # Config errors STR_CONFIG_ERROR :{WHITE}Erro no arquivo de configuração... @@ -2251,7 +2251,7 @@ STR_CHEAT_NO_JETCRASH :{LTBLUE}Aeronav STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Editar a altitude máxima do mapa: {ORANGE}{NUM} STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Editar a altura máxima das montanhas no mapa STR_CHEAT_CHANGE_DATE :{LTBLUE}Alterar data: {ORANGE}{DATE_SHORT} -STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Alterar o ano atual +STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Mudar o ano atual STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir modificar os valores de produção: {ORANGE}{STRING} STR_CHEAT_STATION_RATING :{LTBLUE}Fixar classificação das estações em 100%: {ORANGE}{STRING} @@ -2384,7 +2384,7 @@ STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}Tempo de STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}Tempo de jogo enquanto{}o jogo não estava pausado STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Idioma, versão do servidor, etc. -STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Clique em um jogo da lista para selecioná-lo +STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Clique num jogo da lista para selecioná-lo STR_NETWORK_SERVER_LIST_LAST_JOINED_SERVER :{BLACK}Servidor no qual você entrou na última vez: STR_NETWORK_SERVER_LIST_CLICK_TO_SELECT_LAST :{BLACK}Clique para selecionar o servidor no qual você jogou na última vez @@ -2656,7 +2656,7 @@ STR_CONTENT_TYPE_CAPTION :{BLACK}Tipo STR_CONTENT_TYPE_CAPTION_TOOLTIP :{BLACK}Tipo do conteúdo STR_CONTENT_NAME_CAPTION :{BLACK}Nome STR_CONTENT_NAME_CAPTION_TOOLTIP :{BLACK}Nome do conteúdo -STR_CONTENT_MATRIX_TOOLTIP :{BLACK}Clique em uma linha para ver os detalhes{}Clique na caixa de seleção para marcar e fazer o download +STR_CONTENT_MATRIX_TOOLTIP :{BLACK}Clique numa linha para ver os detalhes{}Clique na caixa de seleção para marcar e fazer o download STR_CONTENT_SELECT_ALL_CAPTION :{BLACK}Selecionar tudo STR_CONTENT_SELECT_ALL_CAPTION_TOOLTIP :{BLACK}Marcar todo o conteúdo para download STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Selecionar atualizações @@ -2838,15 +2838,15 @@ STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Sinal de STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Sinal de Entrada (semáforo){}Permanece verde enquanto existir um ou mais sinais de saída verdes na seção seguinte da linha. Caso contrário, ficará vermelho STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Sinal de Saída (semáforo){}Funciona do mesmo modo que o sinal de bloqueio, mas é necessário para ativar a cor correta nos pré-sinais de entrada e combinado. STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Sinal Combinado (semáforo){}O sinal combinado funciona simultaneamente como um sinal de entrada e de saída. Isto permite a construção de ramificações complexas de pré-sinais. -STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Sinal de Caminho (semáforo){}Um sinal de caminho que permite mais de um trem entrar em uma seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Sinais de caminho padrões podem ser passados no sentido contrário -STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Sinal de Sentido Único(semáforo){}Um sinal de caminho que permite mais de um trem entrar em uma seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Os sinais de sentido único não podem ser passados no sentido contrário +STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Sinal de Caminho (semáforo){}Um sinal de caminho que permite mais de um trem entrar numa seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Sinais de caminho padrões podem ser passados no sentido contrário +STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Sinal de Sentido Único(semáforo){}Um sinal de caminho que permite mais de um trem entrar numa seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Os sinais de sentido único não podem ser passados no sentido contrário STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Sinal de Bloqueio (elétrico){}Este é o tipo mais básico de sinal e permite que apenas um trem esteja na mesma seção ao mesmo tempo STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Sinal de Entrada (elétrico){}Permanece verde enquanto existir um ou mais sinais de saída verdes na seção seguinte da linha. Caso contrário, ficará vermelho. STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Sinal de Saída (elétrico){}Funciona do mesmo modo que o sinal de bloqueio, mas é necessário para ativar a cor correta nos pré-sinais de entrada e combinado. STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Sinal Combinado (elétrico){}O sinal combinado funciona simultaneamente como um sinal de entrada e de saída. Isto permite construir ramificações complexas de pré-sinais. -STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Sinal de Caminho (elétrico){}Um sinal de caminho que permite mais de um trem entrar em uma seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Sinais de caminho padrões podem ser passados no sentido contrário -STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Sinal de Sentido Único (elétrico){}Um sinal de caminho que permite mais de um trem entrar em uma seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Os sinais de sentido único não podem ser passados no sentido contrário -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Converter sinal{}Clique em um sinal existente para convertê-lo para o tipo e variante de sinal selecionado. Ctrl+Clique para mudar a variante existente. Shift+Clique para só mostrar o custo estimado de conversão +STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Sinal de Caminho (elétrico){}Um sinal de caminho que permite mais de um trem entrar numa seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Sinais de caminho padrões podem ser passados no sentido contrário +STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Sinal de Sentido Único (elétrico){}Um sinal de caminho que permite mais de um trem entrar numa seção sinalizada ao mesmo tempo, se o trem puder reservar um caminho para um ponto de parada seguro. Os sinais de sentido único não podem ser passados no sentido contrário +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Converter sinal{}Clique num sinal existente para convertê-lo para o tipo e variante de sinal selecionado. Ctrl+Clique para mudar a variante existente. Shift+Clique para só mostrar o custo estimado de conversão STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distância entre os sinais quando arrastar STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Diminuir a distância entre os sinais quando arrastar STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Aumentar a distância entre os sinais quando arrastar @@ -3007,7 +3007,7 @@ STR_FOUND_TOWN_CAPTION :{WHITE}Geraçã STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Nova Localidade STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Fundar nova localidade. Pressione também Shift para só mostrar o custo estimado STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Localidade Aleatória -STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Fundar localidade em um local aleatório +STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Fundar localidade num local aleatório STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Várias localidades aleatórias STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Cobrir o mapa com localidades colocadas aleatoriamente STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Expandir todas as localidades @@ -3545,7 +3545,7 @@ STR_NEWGRF_ERROR_INDPROD_CALLBACK :Chamada de prod # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Cuidado! -STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Você está prestes a fazer alterações em um jogo em execução. Isso pode travar o OpenTTD ou interromper o estado do jogo. Não envie relatórios de erros sobre estas questões.{}Você quer mesmo fazer as alterações? +STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Você está prestes a fazer alterações num jogo em execução. Isso pode travar o OpenTTD ou interromper o estado do jogo. Não envie relatórios de erros sobre estas questões.{}Você quer mesmo fazer as alterações? STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Não é possível adicionar o arquivo: GRF ID duplicado STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Arquivo correspondente não encontrado (GRF compatível carregado) @@ -3648,7 +3648,7 @@ STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Mostrar STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Classificação das empresas de transporte: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Ações disponíveis: -STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista de ações disponíveis nesta localidade - clique em um item para mais detalhes +STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista de ações disponíveis nesta localidade - clique no item para mais detalhes STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Fazer isto STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Executar a ação selecionada na lista acima @@ -3722,7 +3722,7 @@ STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_NONE :{ORANGE}- Nenhum - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Serviços de transporte já subsidiados: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} d{G e a} {STRING} para {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) -STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique em um serviço para centralizar a visualização principal em uma indústria/localidade. Ctrl+Clique para abrir uma nova visualização na localização da indústria/localidade +STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique num serviço para centralizar a visualização principal numa indústria/localidade. Ctrl+Clique para abrir uma nova visualização na localização da indústria/localidade STR_SUBSIDIES_OFFERED_EXPIRY_DATE :até {DATE_SHORT} STR_SUBSIDIES_OFFERED_EXPIRY_TIME :durante {UNITS_MONTHS_OR_MINUTES} STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :até {DATE_SHORT} @@ -3982,10 +3982,10 @@ STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} Aeronave{P "" s} ###length VEHICLE_TYPES -STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Trens - clique em um trem para informações -STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Veículos - clique em um veículo para informações -STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Embarcações - clique em uma embarcação para informações -STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Aeronaves - clique em uma aeronave para informações +STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Trens - clique num trem para informações +STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Veículos - clique num veículo para informações +STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Embarcações - clique numa embarcação para informações +STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Aeronaves - clique numa aeronave para informações ###length VEHICLE_TYPES STR_VEHICLE_LIST_AVAILABLE_TRAINS :Trens Disponíveis @@ -4029,7 +4029,7 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Aeronaves sem g STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - clique em um grupo para listar todos os veículos do grupo. Clique+Arraste para organizar a hierarquia +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - clique num grupo para listar todos os veículos do grupo. Clique+Arraste para organizar a hierarquia STR_GROUP_CREATE_TOOLTIP :{BLACK}Clique para criar um grupo STR_GROUP_DELETE_TOOLTIP :{BLACK}Excluir o grupo selecionado STR_GROUP_RENAME_TOOLTIP :{BLACK}Alterar o nome do grupo selecionado @@ -4102,10 +4102,10 @@ STR_CARGO_TYPE_FILTER_FREIGHT :Carga STR_CARGO_TYPE_FILTER_NONE :Nenhum ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista de seleção de veículo ferroviário. Clique em um veículo para informações. Ctrl+Clique para mostrar/ocultar este tipo de veículo -STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Lista de seleção de veículo rodoviário. Clique em um veículo para informações. Ctrl+Clique para mostrar/ocultar este tipo de veículo -STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Lista de seleção de embarcação. Clique em uma embarcação para informações. Ctrl+Clique para mostrar/ocultar este tipo de embarcação -STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lista de seleção de aeronave. Clique em uma aeronave para informações. Ctrl+Clique para mostrar/ocultar este tipo de aeronave +STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista de seleção de veículo ferroviário. Clique num veículo para informações. Ctrl+Clique para mostrar/ocultar este tipo de veículo +STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Lista de seleção de veículo rodoviário. Clique num veículo para informações. Ctrl+Clique para mostrar/ocultar este tipo de veículo +STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Lista de seleção de embarcação. Clique numa embarcação para informações. Ctrl+Clique para mostrar/ocultar este tipo de embarcação +STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lista de seleção de aeronave. Clique numa aeronave para informações. Ctrl+Clique para mostrar/ocultar este tipo de aeronave ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Comprar Veículo @@ -4180,9 +4180,9 @@ STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Trens - arraste o veículo com o botão esquerdo do mouse para acrescentar/retirar do trem, clique com o botão direito para informações. Ctrl+Clique para aplicar uma das funções à cadeia seguinte -STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Veículos - clique com o botão direito em um veículo para informações -STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Embarcações - clique com o botão direito em uma embarcação para informações -STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Aeronaves - clique com o botão direito em uma aeronave para informações +STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Veículos - clique com o botão direito num veículo para informações +STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Embarcações - clique com o botão direito numa embarcação para informações +STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Aeronaves - clique com o botão direito numa aeronave para informações ###length VEHICLE_TYPES STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Arraste o veículo ferroviário até aqui para vendê-lo @@ -4221,10 +4221,10 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Clonar E STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Clonar Aeronave ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Comprar uma cópia de um trem, incluindo todos os vagões. Clique neste botão e depois em um trem que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Comprar uma cópia de um veículo rodoviário. Clique neste botão e depois em um veículo que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Comprar uma cópia de uma embarcação. Clique neste botão e depois em uma embarcação que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Comprar uma cópia de uma aeronave. Clique neste botão e depois em uma aeronave que está dentro ou fora do hangar. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Comprar uma cópia de um trem, incluindo todos os vagões. Clique neste botão e depois num trem que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Comprar uma cópia de um veículo rodoviário. Clique neste botão e depois num veículo que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Comprar uma cópia de uma embarcação. Clique neste botão e depois numa embarcação que está dentro ou fora do depósito. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Comprar uma cópia de uma aeronave. Clique neste botão e depois numa aeronave que está dentro ou fora do hangar. Ctrl+Clique para compartilhar as ordens. Pressione também Shift para só mostrar o custo estimado ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização do depósito ferroviário. Ctrl+Clique para abrir uma nova visualização na localização do depósito ferroviário @@ -4503,7 +4503,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nova cap STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}{}{BLACK}Receita com a adaptação: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Custo de adaptação: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Receita com a adaptação: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Selecionar os veículos para adaptar. Clique+Arraste para selecionar vários veículos. Clique em um espaço vazio para selecionar todo o veículo. Ctrl+Clique para selecionar um veículo e a cadeia seguinte +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Selecionar os veículos para adaptar. Clique+Arraste para selecionar vários veículos. Clique num espaço vazio para selecionar todo o veículo. Ctrl+Clique para selecionar um veículo e a cadeia seguinte ###length VEHICLE_TYPES STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Escolher tipo de carga para o trem transportar @@ -4528,7 +4528,7 @@ STR_ORDERS_CAPTION :{WHITE}{VEHICLE STR_ORDERS_TIMETABLE_VIEW :{BLACK}Horários STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Mudar para a visualização de horários -STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de ordens - clique em uma ordem para selecioná-la. Ctrl+Clique para mostrar o destino da ordem +STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de ordens - clique numa ordem para selecioná-la. Ctrl+Clique para mostrar o destino da ordem STR_ORDER_INDEX :{COMMA}:{NBSP} STR_ORDER_TEXT :{STRING} {STRING} {STRING} {STRING} @@ -4618,7 +4618,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Ir para o depó STR_ORDER_GO_TO_NEAREST_HANGAR :Ir para o hangar mais próximo STR_ORDER_CONDITIONAL :Saltar ordem condicional STR_ORDER_SHARE :Compartilhar ordens -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Inserir uma nova ordem antes da ordem selecionada ou adicionar no final da lista. Ctrl+Clique em uma estação para 'carga completa de qualquer carga', em um ponto de controle para inverter a configuração padrão 'sem parar' ou em um depósito para 'desagrupar'. Clique em outro veículo para copiar suas ordens ou Ctrl+Clique para compartilhar as ordens. Uma ordem de depósito desativa a manutenção automática do veículo +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Inserir uma nova ordem antes da ordem selecionada ou adicionar no final da lista. Ctrl+Clique numa estação para 'carga completa de qualquer carga', num ponto de controle para inverter a configuração padrão 'sem parar' ou num depósito para 'desagrupar'. Clique em outro veículo para copiar suas ordens ou Ctrl+Clique para compartilhar as ordens. Uma ordem de depósito desativa a manutenção automática do veículo STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Mostrar todos os veículos que compartilham esta programação @@ -4700,7 +4700,7 @@ STR_TIMETABLE_TITLE :{WHITE}{VEHICLE STR_TIMETABLE_ORDER_VIEW :{BLACK}Ordens STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Mudar para a visualização de ordens -STR_TIMETABLE_TOOLTIP :{BLACK}Horários - clique em uma ordem para selecioná-la +STR_TIMETABLE_TOOLTIP :{BLACK}Horários - clique numa ordem para selecioná-la STR_TIMETABLE_NO_TRAVEL :Não viajar STR_TIMETABLE_NOT_TIMETABLEABLE :Viajar (automático; programado pela próxima ordem manual) @@ -4911,7 +4911,7 @@ STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Arquivo não gr STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Verificação de integridade de dados falhou STR_GAME_SAVELOAD_ERROR_PATCHPACK :Jogo salvo foi feito com uma versão modificada STR_GAME_SAVELOAD_NOT_AVAILABLE : -STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Jogo foi salvo em uma versão sem suporte a bondes. Todos os bondes foram removidos +STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Jogo foi salvo numa versão sem suporte a bondes. Todos os bondes foram removidos # Map generation messages STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Geração do mapa interrompida...{}... não há locais adequados para localidades @@ -4949,7 +4949,7 @@ STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY :{YELLOW}Mensage STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Fora do mapa STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Muito perto da borda do mapa STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Dinheiro insuficiente - é necessário {CURRENCY_LONG} -STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}É necessário terreno plano +STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}O terreno deve ser plano STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Terreno inclinado na direção errada STR_ERROR_CAN_T_DO_THIS :{WHITE}Não é possível fazer isto... STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}A construção deve ser demolida primeiro @@ -5015,7 +5015,7 @@ STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Não é STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Não é possível construir este tipo de indústria aqui... STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Não é possível prospectar indústria... STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... muito perto de outra indústria -STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... é necessário fundar uma localidade primeiro +STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... precisa fundar uma localidade primeiro STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... só é permitido uma por localidade STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... só pode ser construído em localidades com pelo menos 1200 habitantes STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... só pode ser construído em florestas tropicais @@ -5058,21 +5058,21 @@ STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... esta # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Não é possível remover parte da estação... -STR_ERROR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}É necessário remover a estação ferroviária primeiro +STR_ERROR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Precisa remover a estação ferroviária primeiro STR_ERROR_CAN_T_REMOVE_BUS_STATION :{WHITE}Não é possível remover estação de ônibus... STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Não é possível remover estação de caminhões... STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Não é possível remover estação de bondes de passageiros... STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Não é possível remover estação de bondes de carga... -STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}É necessário remover o ponto de parada rodoviária primeiro +STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Precisa remover o ponto de parada rodoviária primeiro STR_ERROR_THERE_IS_NO_STATION :{WHITE}... não existe uma estação aqui -STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}É necessário demolir a estação ferroviária primeiro -STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}É necessário demolir a estação de ônibus primeiro -STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST :{WHITE}É necessário demolir a estação de caminhões primeiro -STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST :{WHITE}É necessário demolir a estação de bondes de passageiros primeiro -STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST :{WHITE}É necessário demolir a estação de bondes de carga primeiro -STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}É necessário demolir a doca primeiro -STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}É necessário demolir o aeroporto primeiro +STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}Precisa demolir a estação ferroviária primeiro +STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Precisa demolir a estação de ônibus primeiro +STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST :{WHITE}Precisa demolir a estação de caminhões primeiro +STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST :{WHITE}Precisa demolir a estação de bondes de passageiros primeiro +STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST :{WHITE}Precisa demolir a estação de bondes de carga primeiro +STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Precisa demolir a doca primeiro +STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Precisa demolir o aeroporto primeiro # Waypoint related errors STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Adjacente a mais de um ponto de controle existente @@ -5083,7 +5083,7 @@ STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Não é STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Não é possível alterar o nome do ponto de controle... STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Não é possível remover ponto de controle de trem daqui... -STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}É necessário remover o ponto de controle ferroviário primeiro +STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Precisa remover o ponto de controle ferroviário primeiro STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... boia no caminho STR_ERROR_BUOY_IS_IN_USE :{WHITE}... boia está em uso por outra empresa! @@ -5100,7 +5100,7 @@ STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... deve STR_ERROR_SHIP_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... deve estar parado em um depósito STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}... deve estar parado em um hangar -STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Trens só podem ser modificados quando estão parados em um depósito +STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Trens só podem ser modificados quando estão parados num depósito STR_ERROR_TRAIN_TOO_LONG :{WHITE}Trem é muito longo STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Não é possível inverter a direção do veículo... STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}... composto por várias unidades @@ -5129,9 +5129,9 @@ STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}O novo v # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Combinação de linhas impossível -STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}É necessário remover os sinais primeiro +STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Precisa remover os sinais primeiro STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Ferrovia não adequada -STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}É necessário remover a ferrovia primeiro +STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Precisa remover a ferrovia primeiro STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Estrada de sentido único ou bloqueada STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Passagens de nível não são permitidas para este tipo de trilho STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Passagens de nível não são permitidas para este tipo de estrada @@ -5146,7 +5146,7 @@ STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}... não STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Não é possível converter o tipo de trilho daqui... # Road construction errors -STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}É necessário remover a estrada primeiro +STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Precisa remover a estrada primeiro STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... estradas de sentido único não podem ter junções STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Não é possível construir estrada aqui... STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Não é possível construir linha de bonde aqui... @@ -5168,7 +5168,7 @@ STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE}... não STR_ERROR_CAN_T_BUILD_ON_SEA :{WHITE}... não é possível construir em mar aberto STR_ERROR_CAN_T_BUILD_ON_CANAL :{WHITE}... não é possível construir em um canal STR_ERROR_CAN_T_BUILD_ON_RIVER :{WHITE}... não é possível construir em um rio -STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}É necessário demolir o canal primeiro +STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Precisa demolir o canal primeiro STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Não é possível construir aqueduto aqui... # Tree related errors @@ -5178,7 +5178,7 @@ STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}Não é # Bridge related errors STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Não é possível construir ponte aqui... -STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}É necessário demolir a ponte primeiro +STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Precisa demolir a ponte primeiro STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Não é possível iniciar e terminar no mesmo ponto STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}As extremidades da ponte não estão no mesmo nível STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}A ponte é muito baixa para o terreno. @@ -5191,7 +5191,7 @@ STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :{WHITE}A ponte # Tunnel related errors STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Não é possível construir túnel aqui... STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}O local não é adequado para a entrada do túnel -STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}É necessário demolir o túnel primeiro +STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Precisa demolir o túnel primeiro STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Há outro túnel no caminho STR_ERROR_TUNNEL_THROUGH_MAP_BORDER :{WHITE}O túnel terminaria fora do mapa STR_ERROR_UNABLE_TO_EXCAVATE_LAND :{WHITE}Não é possível escavar o terreno para o outro lado do túnel diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 8dfe187a17..d7d186a725 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -4644,7 +4644,7 @@ STR_ORDER_REFIT_ORDER :(Remodela a {ST STR_ORDER_REFIT_STOP_ORDER :(Remodela a {STRING} i para) STR_ORDER_STOP_ORDER :(Para) -STR_ORDER_WAIT_TO_UNBUNCH :(espera per a deixar espai entre vehicles) +STR_ORDER_WAIT_TO_UNBUNCH :(Espera per a deixar espai entre vehicles) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(No pot usar l'estació){POP_COLOUR} {STRING} {STATION} {STRING} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index e949a75ac8..b3d071428f 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -541,7 +541,7 @@ STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Буду STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Будувати аеропорти STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Покаже меню створення ландшафту, посадки дерев, створення позначки STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Налаштування звуків/музики -STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Показати останнє повідомлення. Налаштування повідомлень +STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Подивитись останнє повідомлення або новину, історію повідомлень чи видалити всі повідомлення STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Інформація про земельну ділянку, знімки екрану, про гру OpenTTD та інструменти для розробки STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Переключити панелі @@ -994,7 +994,7 @@ STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLAC STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} була закрита кредиторами і все майно продане! STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Засновано нову компанію! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} починає будівництво біля {TOWN}! -STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} викуплено {STRING}! +STR_NEWS_MERGER_TAKEOVER_TITLE :Компанію {BIG_FONT}{BLACK}{STRING} агресивно захоплено компанією {STRING} з нерозголошеними витратами! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Керівник) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} субсидував спорудження нового міста {TOWN}! @@ -1445,7 +1445,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Вартіст STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Встановити рівень витрат на будівництво та придбання STR_CONFIG_SETTING_RECESSIONS :Рецесії: {STRING} -STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Якщо увімкнено, рецесії можуть відбуватися кожні декілька років. Під час рецессії обсяг виробництва на всіх підприємствах значно знижений (він повертається на попередній рівень, коли рецесія закінчується) +STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Якщо увімкнено, рецесії можуть відбуватися кожні кілька років. Під час рецессії обсяг виробництва на всіх підприємствах значно знижений (він повертається на попередній рівень, коли рецесія закінчується) STR_CONFIG_SETTING_TRAIN_REVERSING :Заборонити поїздам розвертатися на станціях: {STRING} STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Якщо увімкнено, поїзди не будуть розвертатися на некінцевих станціях, навіть якщо є коротший шлях до їх наступного пункту призначення, який вимагає розвороту @@ -1720,7 +1720,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :грубо STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :дуже грубо STR_CONFIG_SETTING_VARIETY :Розподіл різноманітності: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Тільки для TerraGenesis) Перевірка наявності на карті гір і рівнин. Оскільки це робить карту плоскішою, інші налаштування необхідно встановити гірськими +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Оберіть наявність на мапі гір і рівнин. Чим більша різноманітність, тим більша відмінність у висотах між гірськими і пласкими ділянками STR_CONFIG_SETTING_RIVER_AMOUNT :Кількість річок: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Виберіть кількість річок @@ -1775,7 +1775,7 @@ STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :Від сіро STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Відтінки сірого STR_CONFIG_SETTING_SCROLLMODE :Переміщення вікна обзору: {STRING} -STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Спосіб пересування ігрового поля +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Спосіб пересування ігрового поля. Налаштування "зафіксувавши курсор" не працює в усіх системах, наприклад веборієнтованих версіях, на сенсорних екранах, у Linux із Wayland ###length 4 STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Переміщувати ПКМ, зафіксувавши курсор STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Переміщувати карту ПКМ, зафіксувавши курсор @@ -1891,7 +1891,7 @@ STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Автомат STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Автоматично прибирати сигнали на шляху при будівництві колії. Увага: це може спричинити зіткнення потягів! STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Обмеження швидкості прискорення: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Обмеження швидкості гри при увімкнутому прискоренні. 0 = без обмежень (залежить від можливостей компʼютера). Значення понад 100% уповільнить гру. Верхня межа залежить від параметрів компʼютера і може змінитися у грі. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Обмеження швидкості гри при увімкнутому прискоренні. 0 = без обмежень (залежить від можливостей компʼютера). Значення понад 100% уповільнить гру. Верхня межа залежить від параметрів компʼютера і може змінюватися у грі STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% нормальної швидкості гри ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Без обмежень (залежить від можливостей компʼютера) @@ -1959,7 +1959,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Який обс STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MБ STR_CONFIG_SETTING_SERVINT_ISPERCENT :Інтервали техогляду вказано у відсотках: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Налаштування способу визначення необхідності проведення техогляду: через вказаний проміжок часу після попереднього техогляду чи коли поточна надійність транспортного засобу стане нижчою від максимальної його надійності на вказаний процент. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Коли увімкнуто, транспортний засіб намагається проводити техогляд якщо поточна надійність стане нижчою від максимальної надійності на вказаний процент.{}{}Наприклад, iякщо максимальна надійність 90%, а інтервал техогляду 20%, транспортний засіб намагатиметься виконати техогляд якщо поточна надійність сягне 72% STR_CONFIG_SETTING_SERVINT_TRAINS :Інтервал техогляду залізничного транспорту: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Налаштування інтервалу техогляду для нового залізничного транспорту (встановлений інтервал може бути змінено окремо для кожного транспортного засобу в його інтерфейсі). @@ -2985,7 +2985,7 @@ STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Вихі STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Комбінований сигнал (електричний){}Комбінований сигнал працює як об'єднаний вхідний-вихідний сигнал. Це дозволяє будувати великі "дерева" пре-сигналів STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Розширений сигнал (електричний){}Розширений сигнал дозволяє більше ніж одному поїзду одночасно заходити до блоку сигналів, якщо поїзд може зарезервувати шлях до безпечної точки зупинки. Розширені сигнали дозволяють проїжджати їх з обох сторін STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Односторонній розширений сигнал (електричний){}Розширений сигнал дозволяє більше ніж одному поїзду одночасно заходити до блоку сигналів, якщо поїзд може зарезервувати шлях до безпечної точки зупинки. Односторонні розширені сигнали не дозволяють вїжджати з іншої сторони -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Заміна сигналів{}Коли обрано, клац на поточному сигналі замінить його на обраний тип і варіант сигналу, Ctrl+клац замінить поточний варіант. Утримуйте Shift для показу витрат на заміну +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Заміна сигналів{}Клац на поточному сигналі замінить його на обраний тип і варіант сигналу, Ctrl+клац змінить поточний варіант. Утримуйте Shift для показу очікуваних витрат STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Відстань між сигналами при перетаскуванні STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Зменшити відстань між сигналами STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Збільшити відстань між сигналами @@ -3811,7 +3811,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Фінансувати будівництво нових офісів у місті.{}Тимчасово прискорить зростання міста.{}{POP_COLOUR}Вартість: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Придбати ексклюзивні транспортні права в місті на 12 місяців.{}Міська влада заборонить пасажирам і вантажам наповнювати станції конкурентів. Успішний підкуп конкурентом скасує цю угоду.{}{POP_COLOUR}Вартість: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Придбати ексклюзивні транспортні права в місті на 12 хвилин.{}Міська влада заборонить пасажирам і вантажам наповнювати станції конкурентів. Успішний підкуп конкурентом скасує цю угоду.{}{POP_COLOUR}Вартість: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Підкупити місцеву владу для збільшення вашого рейтингу, при викритті загрожує суворим покаранням.{}{POP_COLOUR}Вартість: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Підкуп місцевої влади для збільшення вашого рейтингу і скасування ексклюзивних транспортних прав конкурентів. При викритті загрожує суворим покаранням.{}{POP_COLOUR}Вартість: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}Цілі {COMPANY} @@ -4589,7 +4589,7 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Міст STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Плата за трансфер: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Інтервал техогляду: {LTBLUE}{COMMA}{NBSP}днів{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Інтервал техогляду: {LTBLUE}{COMMA}{NBSP}хвилин{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Інтервал техогляду: {LTBLUE}{COMMA}{NBSP}хвилин{P а и ""}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Інтервал техогляду: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Останній техогляд: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Від останнього техогляду минуло хвилин: {LTBLUE}{NUM} @@ -5110,7 +5110,7 @@ STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Не д STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}Влада міста {TOWN} проти цього STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}Влада міста {TOWN} відмовляє у будівництві ще одного аеропорту. STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}{TOWN}: місцева влада відмовляє у дозволі на аеропорт з міркувань шуму -STR_ERROR_BRIBE_FAILED :{WHITE}Хтось з місцевих сищиків дізнався про твою спробу дати хабар +STR_ERROR_BRIBE_FAILED :{WHITE}Місцевий слідчий дізнався про твою спробу дати хабар # Levelling errors STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}Неможливо підняти ділянку... diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index cba03ab154..1a4deca7a4 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -2574,6 +2574,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Nid yw e STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Nid yw eich enw gweinyd wedi ei osod. Gall yr enw gael ei osod ar frig y ffenestr Amlchwaraewr STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Nid y fersiwn y gwestai yn cyfateb i fersiwn y gweinydd STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Cyfrinair anghywir +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Nid ydych ar y rhestr o westai sydd wedi'u caniatáu STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Mae'r gweinydd yn llawn STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Rydych chi wedi'ch gwahardd o'r gweinydd hwn STR_NETWORK_ERROR_KICKED :{WHITE}Cafoch chi eich cicio o'r gêm @@ -2601,6 +2602,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :wedi derbyn pac STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :fersiwn anghywir STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :enw eisoes mewn defnydd STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :cyfrinair anghywir +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :ddim ar restr caniatáu STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :id-cwmni anghywir yn DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :wedi cael cic gan y gweinydd STR_NETWORK_ERROR_CLIENT_CHEATER :yn ceisio twyllo @@ -4447,10 +4449,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Cynhwyse STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Credydau Trosglwyddo: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Bwlch rhwng gwasanaeth: {LTBLUE}{COMMA}{NBSP}diwrnod{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Ysbaid gwasanaethu: {LTBLUE}{COMMA}{NBSP}munud{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Ysbaid gwasanaethu: {LTBLUE}{COMMA}{NBSP}munud(P "" ""){BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Bwlch rhwng gwasanaethu: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Gwasanaeth diwethaf: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Gwasanaeth diwethaf: {LTBLUE}{NUM} munud yn ôl +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Gwasanaeth diwethaf: {LTBLUE}{NUM} munud{P "" ""} yn ôl STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Cynyddu'r ysbaid gwasanaeth o 10 diwrnod. Mae Ctrl+Clic yn cynyddu'r ysbaid o 5 diwrnod STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Cynyddu'r ysbaid gwasanaeth o 5 munud. Mae Ctrl+Clic yn cynyddu'r ysbaid o 1 funud STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Cynyddu'r ysbaid gwasanaeth o 10 y cant. Mae Ctrl+Clic yn cynyddu'r ysbaid o 5 y cant @@ -4993,7 +4995,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Methu pr STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Methu adeiladu pencadlys cwmni... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Methu adeiladu unrhyw drefi +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Methu adeiladu unrhyw drefi... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Methu ailenwi tref... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Methu adeiladu tref yma... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Methu ehangu'r dref... From d68e5159e15cd6b2f5bc82e5b8f248e8e002c262 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 1 Apr 2024 17:54:42 +0100 Subject: [PATCH 212/695] Feature: Allow base sounds set to be changed mid-game. (#12399) --- src/mixer.cpp | 18 ++++++++++++++++++ src/mixer.h | 1 + src/settings_gui.cpp | 10 ++-------- src/sound.cpp | 28 ++++++++++++++++++++++++++++ src/sound_func.h | 2 ++ 5 files changed, 51 insertions(+), 8 deletions(-) diff --git a/src/mixer.cpp b/src/mixer.cpp index 3b30f3d25d..bcfde64a01 100644 --- a/src/mixer.cpp +++ b/src/mixer.cpp @@ -35,6 +35,7 @@ struct MixerChannel { }; static std::atomic _active_channels; +static std::atomic _stop_channels; static MixerChannel _channels[8]; static uint32_t _play_rate = 11025; static uint32_t _max_size = UINT_MAX; @@ -108,6 +109,16 @@ static void MxCloseChannel(uint8_t channel_index) _active_channels.fetch_and(~(1 << channel_index), std::memory_order_release); } +/** + * Close all mixer channels. + * This signals to the mixer that each channel should be closed even if it has not played all remaining samples. + * This is safe (and designed) to be called from the main thread. + */ +void MxCloseAllChannels() +{ + _stop_channels.fetch_or(~0, std::memory_order_release); +} + void MxMixSamples(void *buffer, uint samples) { PerformanceMeasurer framerate(PFE_SOUND); @@ -126,6 +137,12 @@ void MxMixSamples(void *buffer, uint samples) if (_music_stream) _music_stream((int16_t*)buffer, samples); } + /* Check if any channels should be stopped. */ + uint8_t stop = _stop_channels.load(std::memory_order_acquire); + for (uint8_t idx : SetBitIterator(stop)) { + MxCloseChannel(idx); + } + /* Apply simple x^3 scaling to master effect volume. This increases the * perceived difference in loudness to better match expectations. effect_vol * is expected to be in the range 0-127 hence the division by 127 * 127 to @@ -200,6 +217,7 @@ void MxSetChannelVolume(MixerChannel *mc, uint volume, float pan) void MxActivateChannel(MixerChannel *mc) { uint8_t channel_index = mc - _channels; + _stop_channels.fetch_and(~(1 << channel_index), std::memory_order_release); _active_channels.fetch_or((1 << channel_index), std::memory_order_release); } diff --git a/src/mixer.h b/src/mixer.h index ad94f5440c..3fbcbc4bc8 100644 --- a/src/mixer.h +++ b/src/mixer.h @@ -27,6 +27,7 @@ MixerChannel *MxAllocateChannel(); void MxSetChannelRawSrc(MixerChannel *mc, int8_t *mem, size_t size, uint rate, bool is16bit); void MxSetChannelVolume(MixerChannel *mc, uint volume, float pan); void MxActivateChannel(MixerChannel*); +void MxCloseAllChannels(); uint32_t MxSetMusicSource(MxStreamCallback music_callback); diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 2043373dc6..bdcc5e5fcd 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -47,6 +47,7 @@ #include "network/network_survey.h" #include "video/video_driver.hpp" #include "social_integration.h" +#include "sound_func.h" #include "safeguards.h" @@ -940,13 +941,7 @@ struct GameOptionsWindow : Window { break; case WID_GO_BASE_SFX_DROPDOWN: - if (_game_mode == GM_MENU) { - auto set = BaseSounds::GetSet(index); - BaseSounds::ini_set = set->name; - BaseSounds::SetSet(set); - this->reload = true; - this->InvalidateData(); - } + ChangeSoundSet(index); break; case WID_GO_BASE_MUSIC_DROPDOWN: @@ -982,7 +977,6 @@ struct GameOptionsWindow : Window { #endif /* HAS_TRUETYPE_FONT */ this->SetWidgetDisabledState(WID_GO_BASE_GRF_DROPDOWN, _game_mode != GM_MENU); - this->SetWidgetDisabledState(WID_GO_BASE_SFX_DROPDOWN, _game_mode != GM_MENU); this->SetWidgetDisabledState(WID_GO_BASE_GRF_PARAMETERS, BaseGraphics::GetUsedSet() == nullptr || !BaseGraphics::GetUsedSet()->IsConfigurable()); diff --git a/src/sound.cpp b/src/sound.cpp index 78b4cc80de..02bdf82d04 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -233,6 +233,34 @@ void SndCopyToPool() } } +/** + * Change the configured sound set and reset sounds. + * @param index Index of sound set to switch to. + */ +void ChangeSoundSet(int index) +{ + if (BaseSounds::GetIndexOfUsedSet() == index) return; + + auto set = BaseSounds::GetSet(index); + BaseSounds::ini_set = set->name; + BaseSounds::SetSet(set); + + MxCloseAllChannels(); + InitializeSound(); + + /* Replace baseset sounds in the pool with the updated original sounds. This is safe to do as + * any sound still playing owns its sample data. */ + for (uint i = 0; i < ORIGINAL_SAMPLE_COUNT; i++) { + SoundEntry *sound = GetSound(i); + /* GRF Container 0 means the sound comes from the baseset, and isn't overridden by NewGRF. */ + if (sound == nullptr || sound->grf_container_ver != 0) continue; + + *sound = _original_sounds[_sound_idx[i]]; + sound->volume = _sound_base_vol[i]; + sound->priority = 0; + } +} + /** * Decide 'where' (between left and right speaker) to play the sound effect. * Note: Callers must determine if sound effects are enabled. This plays a sound regardless of the setting. diff --git a/src/sound_func.h b/src/sound_func.h index b378dbdfe2..164df9fc24 100644 --- a/src/sound_func.h +++ b/src/sound_func.h @@ -14,6 +14,8 @@ #include "vehicle_type.h" #include "tile_type.h" +void ChangeSoundSet(int index); + void SndPlayTileFx(SoundID sound, TileIndex tile); void SndPlayVehicleFx(SoundID sound, const Vehicle *v); void SndPlayFx(SoundID sound); From 92a171c3e059eda078e43282dae1a59146110539 Mon Sep 17 00:00:00 2001 From: merni-ns <66267867+merni-ns@users.noreply.github.com> Date: Mon, 1 Apr 2024 22:25:44 +0530 Subject: [PATCH 213/695] Doc: Improve the output and documentation of the font command. (#12392) Now that the default font =/= sprite font, there is a different way to invoke the sprite font, and default size applies to default (not sprite). Also, interface scaling now affects the font size. --- src/console_cmds.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index ad940cd425..8ece62b2f8 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -2179,10 +2179,14 @@ DEF_CONSOLE_CMD(ConFont) IConsolePrint(CC_HELP, "Manage the fonts configuration."); IConsolePrint(CC_HELP, "Usage 'font'."); IConsolePrint(CC_HELP, " Print out the fonts configuration."); - IConsolePrint(CC_HELP, "Usage 'font [medium|small|large|mono] [] [] [aa|noaa]'."); + IConsolePrint(CC_HELP, " The \"Currently active\" configuration is the one actually in effect (after interface scaling and replacing unavailable fonts)."); + IConsolePrint(CC_HELP, " The \"Requested\" configuration is the one requested via console command or config file."); + IConsolePrint(CC_HELP, "Usage 'font [medium|small|large|mono] [] [] [aa|noaa]'."); IConsolePrint(CC_HELP, " Change the configuration for a font."); IConsolePrint(CC_HELP, " Omitting an argument will keep the current value."); - IConsolePrint(CC_HELP, " Set to \"\" for the sprite font (size and aa have no effect on sprite font)."); + IConsolePrint(CC_HELP, " Set to \"\" for the default font. Note that and aa/noaa have no effect if the default font is in use, and fixed defaults are used instead."); + IConsolePrint(CC_HELP, " If the sprite font is enabled in Game Options, it is used instead of the default font."); + IConsolePrint(CC_HELP, " The is automatically multiplied by the current interface scaling."); return true; } @@ -2240,7 +2244,9 @@ DEF_CONSOLE_CMD(ConFont) InitFontCache(fs == FS_MONO); fc = FontCache::Get(fs); } - IConsolePrint(CC_DEFAULT, "{}: \"{}\" {} {} [\"{}\" {} {}]", FontSizeToName(fs), fc->GetFontName(), fc->GetFontSize(), GetFontAAState(fs) ? "aa" : "noaa", setting->font, setting->size, setting->aa ? "aa" : "noaa"); + IConsolePrint(CC_DEFAULT, "{} font:", FontSizeToName(fs)); + IConsolePrint(CC_DEFAULT, "Currently active: \"{}\", size {}, {}", fc->GetFontName(), fc->GetFontSize(), GetFontAAState(fs) ? "aa" : "noaa"); + IConsolePrint(CC_DEFAULT, "Requested: \"{}\", size {}, {}", setting->font, setting->size, setting->aa ? "aa" : "noaa"); } return true; From 6f36f3d714a02a764e505335f8e6af79a7f4814a Mon Sep 17 00:00:00 2001 From: merni-ns <66267867+merni-ns@users.noreply.github.com> Date: Mon, 1 Apr 2024 22:27:03 +0530 Subject: [PATCH 214/695] Fix #11055: Make saveload failure error messages consistent with others (#12247) The save/load error messages were combined using string parameters, rather than using the built-in functionality of error dialogs. --- src/lang/english.txt | 4 ++-- src/openttd.cpp | 9 +++------ src/saveload/saveload.cpp | 23 ++++++++++++----------- src/saveload/saveload.h | 3 ++- 4 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index c2a4755d59..0142ed31d4 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -4899,9 +4899,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Estimate STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Saving still in progress,{}please wait until it is finished! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autosave failed STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Unable to read drive -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Game Save Failed{}{STRING1} +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Game save failed... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Unable to delete file -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Game Load Failed{}{STRING1} +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Game load failed... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Internal error: {RAW_STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Broken savegame - {RAW_STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Savegame is made with newer version diff --git a/src/openttd.cpp b/src/openttd.cpp index e4b540c45e..31b9220bbb 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1132,8 +1132,7 @@ void SwitchToMode(SwitchMode new_mode) ResetWindowSystem(); if (!SafeLoad(_file_to_saveload.name, _file_to_saveload.file_op, _file_to_saveload.detail_ftype, GM_NORMAL, NO_DIRECTORY)) { - SetDParamStr(0, GetSaveLoadErrorString()); - ShowErrorMessage(STR_JUST_RAW_STRING, INVALID_STRING_ID, WL_CRITICAL); + ShowErrorMessage(GetSaveLoadErrorType(), GetSaveLoadErrorMessage(), WL_CRITICAL); } else { if (_file_to_saveload.abstract_ftype == FT_SCENARIO) { OnStartScenario(); @@ -1175,8 +1174,7 @@ void SwitchToMode(SwitchMode new_mode) /* Cancel the saveload pausing */ Command::Post(PM_PAUSED_SAVELOAD, false); } else { - SetDParamStr(0, GetSaveLoadErrorString()); - ShowErrorMessage(STR_JUST_RAW_STRING, INVALID_STRING_ID, WL_CRITICAL); + ShowErrorMessage(GetSaveLoadErrorType(), GetSaveLoadErrorMessage(), WL_CRITICAL); } UpdateSocialIntegration(GM_EDITOR); @@ -1211,8 +1209,7 @@ void SwitchToMode(SwitchMode new_mode) case SM_SAVE_GAME: // Save game. /* Make network saved games on pause compatible to singleplayer mode */ if (SaveOrLoad(_file_to_saveload.name, SLO_SAVE, DFT_GAME_FILE, NO_DIRECTORY) != SL_OK) { - SetDParamStr(0, GetSaveLoadErrorString()); - ShowErrorMessage(STR_JUST_RAW_STRING, INVALID_STRING_ID, WL_ERROR); + ShowErrorMessage(GetSaveLoadErrorType(), GetSaveLoadErrorMessage(), WL_ERROR); } else { CloseWindowById(WC_SAVELOAD, 0); } diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index af4dfc63a6..6c7f68c49c 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -2760,22 +2760,23 @@ void SetSaveLoadError(StringID str) _sl.error_str = str; } -/** Get the string representation of the error message */ -const char *GetSaveLoadErrorString() +/** Return the appropriate initial string for an error depending on whether we are saving or loading. */ +StringID GetSaveLoadErrorType() { - SetDParam(0, _sl.error_str); - SetDParamStr(1, _sl.extra_msg); + return _sl.action == SLA_SAVE ? STR_ERROR_GAME_SAVE_FAILED : STR_ERROR_GAME_LOAD_FAILED; +} - static std::string err_str; - err_str = GetString(_sl.action == SLA_SAVE ? STR_ERROR_GAME_SAVE_FAILED : STR_ERROR_GAME_LOAD_FAILED); - return err_str.c_str(); +/** Return the description of the error. **/ +StringID GetSaveLoadErrorMessage() +{ + SetDParamStr(0, _sl.extra_msg); + return _sl.error_str; } /** Show a gui message when saving has failed */ static void SaveFileError() { - SetDParamStr(0, GetSaveLoadErrorString()); - ShowErrorMessage(STR_JUST_RAW_STRING, INVALID_STRING_ID, WL_ERROR); + ShowErrorMessage(GetSaveLoadErrorType(), GetSaveLoadErrorMessage(), WL_ERROR); SaveFileDone(); } @@ -2810,7 +2811,7 @@ static SaveOrLoadResult SaveFileToDisk(bool threaded) * cancelled due to a client disconnecting. */ if (_sl.error_str != STR_NETWORK_ERROR_LOSTCONNECTION) { /* Skip the "colour" character */ - Debug(sl, 0, "{}", GetSaveLoadErrorString() + 3); + Debug(sl, 0, "{}", GetString(GetSaveLoadErrorType()).substr(3) + GetString(GetSaveLoadErrorMessage())); asfp = SaveFileError; } @@ -3128,7 +3129,7 @@ SaveOrLoadResult SaveOrLoad(const std::string &filename, SaveLoadOperation fop, ClearSaveLoadState(); /* Skip the "colour" character */ - if (fop != SLO_CHECK) Debug(sl, 0, "{}", GetSaveLoadErrorString() + 3); + if (fop != SLO_CHECK) Debug(sl, 0, "{}", GetString(GetSaveLoadErrorType()).substr(3) + GetString(GetSaveLoadErrorMessage())); /* A saver/loader exception!! reinitialize all variables to prevent crash! */ return (fop == SLO_LOAD) ? SL_REINIT : SL_ERROR; diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 4349f038fb..05ffac1c04 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -416,7 +416,8 @@ extern FileToSaveLoad _file_to_saveload; std::string GenerateDefaultSaveName(); void SetSaveLoadError(StringID str); -const char *GetSaveLoadErrorString(); +StringID GetSaveLoadErrorType(); +StringID GetSaveLoadErrorMessage(); SaveOrLoadResult SaveOrLoad(const std::string &filename, SaveLoadOperation fop, DetailedFileType dft, Subdirectory sb, bool threaded = true); void WaitTillSaved(); void ProcessAsyncSaveFinish(); From e4fc8ef595bdd1566c16e31204667e1eb4d18c76 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 24 Mar 2024 15:37:01 +0000 Subject: [PATCH 215/695] Codechange: Use std::span for industry cargo window instead of pointer + length. --- src/industry_gui.cpp | 106 +++++++++++++++++++------------------------ 1 file changed, 46 insertions(+), 60 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index e08e391ef1..66f5ad12b7 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -2089,23 +2089,17 @@ struct CargoesField { /** * Make a piece of cargo column. - * @param cargoes Array of #CargoID (may contain #INVALID_CARGO). - * @param length Number of cargoes in \a cargoes. + * @param cargoes Span of #CargoID (may contain #INVALID_CARGO). * @param count Number of cargoes to display (should be at least the number of valid cargoes, or \c -1 to let the method compute it). * @param top_end This is the first cargo field of this column. * @param bottom_end This is the last cargo field of this column. * @note #supp_cargoes and #cust_cargoes should be filled in later. */ - void MakeCargo(const CargoID *cargoes, uint length, int count = -1, bool top_end = false, bool bottom_end = false) + void MakeCargo(const std::span cargoes, int count = -1, bool top_end = false, bool bottom_end = false) { this->type = CFT_CARGO; - auto insert = std::begin(this->u.cargo.vertical_cargoes); - for (uint i = 0; insert != std::end(this->u.cargo.vertical_cargoes) && i < length; i++) { - if (IsValidCargoID(cargoes[i])) { - *insert = cargoes[i]; - ++insert; - } - } + assert(std::size(cargoes) <= std::size(this->u.cargo.vertical_cargoes)); + auto insert = std::copy_if(std::begin(cargoes), std::end(cargoes), std::begin(this->u.cargo.vertical_cargoes), IsValidCargoID); this->u.cargo.num_cargoes = (count < 0) ? static_cast(insert - std::begin(this->u.cargo.vertical_cargoes)) : count; CargoIDComparator comparator; std::sort(std::begin(this->u.cargo.vertical_cargoes), insert, comparator); @@ -2118,16 +2112,15 @@ struct CargoesField { /** * Make a field displaying cargo type names. - * @param cargoes Array of #CargoID (may contain #INVALID_CARGO). - * @param length Number of cargoes in \a cargoes. + * @param cargoes Span of #CargoID (may contain #INVALID_CARGO). * @param left_align ALign texts to the left (else to the right). */ - void MakeCargoLabel(const CargoID *cargoes, uint length, bool left_align) + void MakeCargoLabel(const std::span cargoes, bool left_align) { this->type = CFT_CARGO_LABEL; - uint i; - for (i = 0; i < MAX_CARGOES && i < length; i++) this->u.cargo_label.cargoes[i] = cargoes[i]; - for (; i < MAX_CARGOES; i++) this->u.cargo_label.cargoes[i] = INVALID_CARGO; + assert(std::size(cargoes) <= std::size(this->u.cargo_label.cargoes)); + auto insert = std::copy(std::begin(cargoes), std::end(cargoes), std::begin(this->u.cargo_label.cargoes)); + std::fill(insert, std::end(this->u.cargo_label.cargoes), INVALID_CARGO); this->u.cargo_label.left_align = left_align; } @@ -2197,7 +2190,7 @@ struct CargoesField { } /* Draw the other_produced/other_accepted cargoes. */ - const CargoID *other_right, *other_left; + std::span other_right, other_left; if (_current_text_dir == TD_RTL) { other_right = this->u.industry.other_accepted; other_left = this->u.industry.other_produced; @@ -2471,7 +2464,7 @@ struct CargoesRow { int col = cargo_fld->ConnectCargo(cargo_fld->u.cargo.vertical_cargoes[i], !accepting); if (col >= 0) cargoes[col] = cargo_fld->u.cargo.vertical_cargoes[i]; } - label_fld->MakeCargoLabel(cargoes, lengthof(cargoes), accepting); + label_fld->MakeCargoLabel(cargoes, accepting); } @@ -2670,34 +2663,29 @@ struct IndustryCargoesWindow : public Window { /** * Do the two sets of cargoes have a valid cargo in common? - * @param cargoes1 Base address of the first cargo array. - * @param length1 Number of cargoes in the first cargo array. - * @param cargoes2 Base address of the second cargo array. - * @param length2 Number of cargoes in the second cargo array. + * @param cargoes1 Span of the first cargo list. + * @param cargoes2 Span of the second cargo list. * @return Arrays have at least one valid cargo in common. */ - static bool HasCommonValidCargo(const CargoID *cargoes1, uint length1, const CargoID *cargoes2, uint length2) + static bool HasCommonValidCargo(const std::span cargoes1, const std::span cargoes2) { - while (length1 > 0) { - if (IsValidCargoID(*cargoes1)) { - for (uint i = 0; i < length2; i++) if (*cargoes1 == cargoes2[i]) return true; + for (const CargoID cid1 : cargoes1) { + if (!IsValidCargoID(cid1)) continue; + for (const CargoID cid2 : cargoes2) { + if (cid1 == cid2) return true; } - cargoes1++; - length1--; } return false; } /** * Can houses be used to supply one of the cargoes? - * @param cargoes Base address of the cargo array. - * @param length Number of cargoes in the array. + * @param cargoes Span of cargo list. * @return Houses can supply at least one of the cargoes. */ - static bool HousesCanSupply(const CargoID *cargoes, uint length) + static bool HousesCanSupply(const std::span cargoes) { - for (uint i = 0; i < length; i++) { - CargoID cid = cargoes[i]; + for (const CargoID cid : cargoes) { if (!IsValidCargoID(cid)) continue; TownProductionEffect tpe = CargoSpec::Get(cid)->town_production_effect; if (tpe == TPE_PASSENGERS || tpe == TPE_MAIL) return true; @@ -2707,11 +2695,10 @@ struct IndustryCargoesWindow : public Window { /** * Can houses be used as customers of the produced cargoes? - * @param cargoes Base address of the cargo array. - * @param length Number of cargoes in the array. + * @param cargoes Span of cargo list. * @return Houses can accept at least one of the cargoes. */ - static bool HousesCanAccept(const CargoID *cargoes, uint length) + static bool HousesCanAccept(const std::span cargoes) { HouseZones climate_mask; switch (_settings_game.game_creation.landscape) { @@ -2721,14 +2708,14 @@ struct IndustryCargoesWindow : public Window { case LT_TOYLAND: climate_mask = HZ_TOYLND; break; default: NOT_REACHED(); } - for (uint i = 0; i < length; i++) { - if (!IsValidCargoID(cargoes[i])) continue; + for (const CargoID cid : cargoes) { + if (!IsValidCargoID(cid)) continue; for (const auto &hs : HouseSpec::Specs()) { if (!hs.enabled || !(hs.building_availability & climate_mask)) continue; for (uint j = 0; j < lengthof(hs.accepts_cargo); j++) { - if (hs.cargo_acceptance[j] > 0 && cargoes[i] == hs.accepts_cargo[j]) return true; + if (hs.cargo_acceptance[j] > 0 && cid == hs.accepts_cargo[j]) return true; } } } @@ -2738,17 +2725,16 @@ struct IndustryCargoesWindow : public Window { /** * Count how many industries have accepted cargoes in common with one of the supplied set. * @param cargoes Cargoes to search. - * @param length Number of cargoes in \a cargoes. * @return Number of industries that have an accepted cargo in common with the supplied set. */ - static int CountMatchingAcceptingIndustries(const CargoID *cargoes, uint length) + static int CountMatchingAcceptingIndustries(const std::span cargoes) { int count = 0; for (IndustryType it = 0; it < NUM_INDUSTRYTYPES; it++) { const IndustrySpec *indsp = GetIndustrySpec(it); if (!indsp->enabled) continue; - if (HasCommonValidCargo(cargoes, length, indsp->accepts_cargo, lengthof(indsp->accepts_cargo))) count++; + if (HasCommonValidCargo(cargoes, indsp->accepts_cargo)) count++; } return count; } @@ -2756,17 +2742,16 @@ struct IndustryCargoesWindow : public Window { /** * Count how many industries have produced cargoes in common with one of the supplied set. * @param cargoes Cargoes to search. - * @param length Number of cargoes in \a cargoes. * @return Number of industries that have a produced cargo in common with the supplied set. */ - static int CountMatchingProducingIndustries(const CargoID *cargoes, uint length) + static int CountMatchingProducingIndustries(const std::span cargoes) { int count = 0; for (IndustryType it = 0; it < NUM_INDUSTRYTYPES; it++) { const IndustrySpec *indsp = GetIndustrySpec(it); if (!indsp->enabled) continue; - if (HasCommonValidCargo(cargoes, length, indsp->produced_cargo, lengthof(indsp->produced_cargo))) count++; + if (HasCommonValidCargo(cargoes, indsp->produced_cargo)) count++; } return count; } @@ -2841,18 +2826,18 @@ struct IndustryCargoesWindow : public Window { first_row.columns[4].MakeHeader(STR_INDUSTRY_CARGOES_CUSTOMERS); const IndustrySpec *central_sp = GetIndustrySpec(displayed_it); - bool houses_supply = HousesCanSupply(central_sp->accepts_cargo, lengthof(central_sp->accepts_cargo)); - bool houses_accept = HousesCanAccept(central_sp->produced_cargo, lengthof(central_sp->produced_cargo)); + bool houses_supply = HousesCanSupply(central_sp->accepts_cargo); + bool houses_accept = HousesCanAccept(central_sp->produced_cargo); /* Make a field consisting of two cargo columns. */ - int num_supp = CountMatchingProducingIndustries(central_sp->accepts_cargo, lengthof(central_sp->accepts_cargo)) + houses_supply; - int num_cust = CountMatchingAcceptingIndustries(central_sp->produced_cargo, lengthof(central_sp->produced_cargo)) + houses_accept; + int num_supp = CountMatchingProducingIndustries(central_sp->accepts_cargo) + houses_supply; + int num_cust = CountMatchingAcceptingIndustries(central_sp->produced_cargo) + houses_accept; int num_indrows = std::max(3, std::max(num_supp, num_cust)); // One is needed for the 'it' industry, and 2 for the cargo labels. for (int i = 0; i < num_indrows; i++) { CargoesRow &row = this->fields.emplace_back(); row.columns[0].MakeEmpty(CFT_EMPTY); - row.columns[1].MakeCargo(central_sp->accepts_cargo, lengthof(central_sp->accepts_cargo)); + row.columns[1].MakeCargo(central_sp->accepts_cargo); row.columns[2].MakeEmpty(CFT_EMPTY); - row.columns[3].MakeCargo(central_sp->produced_cargo, lengthof(central_sp->produced_cargo)); + row.columns[3].MakeCargo(central_sp->produced_cargo); row.columns[4].MakeEmpty(CFT_EMPTY); } /* Add central industry. */ @@ -2872,12 +2857,12 @@ struct IndustryCargoesWindow : public Window { const IndustrySpec *indsp = GetIndustrySpec(it); if (!indsp->enabled) continue; - if (HasCommonValidCargo(central_sp->accepts_cargo, lengthof(central_sp->accepts_cargo), indsp->produced_cargo, lengthof(indsp->produced_cargo))) { + if (HasCommonValidCargo(central_sp->accepts_cargo, indsp->produced_cargo)) { this->PlaceIndustry(1 + supp_count * num_indrows / num_supp, 0, it); _displayed_industries.set(it); supp_count++; } - if (HasCommonValidCargo(central_sp->produced_cargo, lengthof(central_sp->produced_cargo), indsp->accepts_cargo, lengthof(indsp->accepts_cargo))) { + if (HasCommonValidCargo(central_sp->produced_cargo, indsp->accepts_cargo)) { this->PlaceIndustry(1 + cust_count * num_indrows / num_cust, 4, it); _displayed_industries.set(it); cust_count++; @@ -2917,15 +2902,16 @@ struct IndustryCargoesWindow : public Window { first_row.columns[3].MakeEmpty(CFT_SMALL_EMPTY); first_row.columns[4].MakeEmpty(CFT_SMALL_EMPTY); - bool houses_supply = HousesCanSupply(&cid, 1); - bool houses_accept = HousesCanAccept(&cid, 1); - int num_supp = CountMatchingProducingIndustries(&cid, 1) + houses_supply + 1; // Ensure room for the cargo label. - int num_cust = CountMatchingAcceptingIndustries(&cid, 1) + houses_accept; + auto cargoes = std::span(&cid, 1); + bool houses_supply = HousesCanSupply(cargoes); + bool houses_accept = HousesCanAccept(cargoes); + int num_supp = CountMatchingProducingIndustries(cargoes) + houses_supply + 1; // Ensure room for the cargo label. + int num_cust = CountMatchingAcceptingIndustries(cargoes) + houses_accept; int num_indrows = std::max(num_supp, num_cust); for (int i = 0; i < num_indrows; i++) { CargoesRow &row = this->fields.emplace_back(); row.columns[0].MakeEmpty(CFT_EMPTY); - row.columns[1].MakeCargo(&cid, 1); + row.columns[1].MakeCargo(cargoes); row.columns[2].MakeEmpty(CFT_EMPTY); row.columns[3].MakeEmpty(CFT_EMPTY); row.columns[4].MakeEmpty(CFT_EMPTY); @@ -2940,12 +2926,12 @@ struct IndustryCargoesWindow : public Window { const IndustrySpec *indsp = GetIndustrySpec(it); if (!indsp->enabled) continue; - if (HasCommonValidCargo(&cid, 1, indsp->produced_cargo, lengthof(indsp->produced_cargo))) { + if (HasCommonValidCargo(cargoes, indsp->produced_cargo)) { this->PlaceIndustry(1 + supp_count * num_indrows / num_supp, 0, it); _displayed_industries.set(it); supp_count++; } - if (HasCommonValidCargo(&cid, 1, indsp->accepts_cargo, lengthof(indsp->accepts_cargo))) { + if (HasCommonValidCargo(cargoes, indsp->accepts_cargo)) { this->PlaceIndustry(1 + cust_count * num_indrows / num_cust, 2, it); _displayed_industries.set(it); cust_count++; From f6b38e8e06547d39b193cc98b33a9b258347c1fb Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 25 Mar 2024 21:07:34 +0000 Subject: [PATCH 216/695] Codechange: Remove optional MakeCargo() parameters that are never changed. Default values are always used, so don't need to be parameters. --- src/industry_gui.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 66f5ad12b7..6beffe9a73 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -2089,23 +2089,20 @@ struct CargoesField { /** * Make a piece of cargo column. - * @param cargoes Span of #CargoID (may contain #INVALID_CARGO). - * @param count Number of cargoes to display (should be at least the number of valid cargoes, or \c -1 to let the method compute it). - * @param top_end This is the first cargo field of this column. - * @param bottom_end This is the last cargo field of this column. + * @param cargoes Span of #CargoID (may contain #INVALID_CARGO). * @note #supp_cargoes and #cust_cargoes should be filled in later. */ - void MakeCargo(const std::span cargoes, int count = -1, bool top_end = false, bool bottom_end = false) + void MakeCargo(const std::span cargoes) { this->type = CFT_CARGO; assert(std::size(cargoes) <= std::size(this->u.cargo.vertical_cargoes)); auto insert = std::copy_if(std::begin(cargoes), std::end(cargoes), std::begin(this->u.cargo.vertical_cargoes), IsValidCargoID); - this->u.cargo.num_cargoes = (count < 0) ? static_cast(insert - std::begin(this->u.cargo.vertical_cargoes)) : count; + this->u.cargo.num_cargoes = static_cast(std::distance(std::begin(this->u.cargo.vertical_cargoes), insert)); CargoIDComparator comparator; std::sort(std::begin(this->u.cargo.vertical_cargoes), insert, comparator); std::fill(insert, std::end(this->u.cargo.vertical_cargoes), INVALID_CARGO); - this->u.cargo.top_end = top_end; - this->u.cargo.bottom_end = bottom_end; + this->u.cargo.top_end = false; + this->u.cargo.bottom_end = false; this->u.cargo.supp_cargoes = 0; this->u.cargo.cust_cargoes = 0; } From bd2a92331b6cddb1aa885a77173543ac22074e6b Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 29 Nov 2023 22:42:35 +0000 Subject: [PATCH 217/695] Codechange: Use inline and std::array for old industry structures. This avoids separate declaration/definition, and less C-style arrays. --- src/saveload/industry_sl.cpp | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index d55549afe4..0dc09a43c8 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -48,15 +48,11 @@ public: } /* Old array structure used for savegames before SLV_INDUSTRY_CARGO_REORGANISE. */ - static CargoID old_cargo[INDUSTRY_NUM_INPUTS]; - static uint16_t old_waiting[INDUSTRY_NUM_INPUTS]; - static TimerGameEconomy::Date old_last_accepted[INDUSTRY_NUM_INPUTS]; + static inline std::array old_cargo; + static inline std::array old_waiting; + static inline std::array old_last_accepted; }; -/* static */ CargoID SlIndustryAccepted::old_cargo[INDUSTRY_NUM_INPUTS]; -/* static */ uint16_t SlIndustryAccepted::old_waiting[INDUSTRY_NUM_INPUTS]; -/* static */ TimerGameEconomy::Date SlIndustryAccepted::old_last_accepted[INDUSTRY_NUM_INPUTS]; - class SlIndustryProducedHistory : public DefaultSaveLoadHandler { public: inline static const SaveLoad description[] = { @@ -121,23 +117,15 @@ public: } /* Old array structure used for savegames before SLV_INDUSTRY_CARGO_REORGANISE. */ - static CargoID old_cargo[INDUSTRY_NUM_OUTPUTS]; - static uint16_t old_waiting[INDUSTRY_NUM_OUTPUTS]; - static uint8_t old_rate[INDUSTRY_NUM_OUTPUTS]; - static uint16_t old_this_month_production[INDUSTRY_NUM_OUTPUTS]; - static uint16_t old_this_month_transported[INDUSTRY_NUM_OUTPUTS]; - static uint16_t old_last_month_production[INDUSTRY_NUM_OUTPUTS]; - static uint16_t old_last_month_transported[INDUSTRY_NUM_OUTPUTS]; + static inline std::array old_cargo; + static inline std::array old_waiting; + static inline std::array old_rate; + static inline std::array old_this_month_production; + static inline std::array old_this_month_transported; + static inline std::array old_last_month_production; + static inline std::array old_last_month_transported; }; -/* static */ CargoID SlIndustryProduced::old_cargo[INDUSTRY_NUM_OUTPUTS]; -/* static */ uint16_t SlIndustryProduced::old_waiting[INDUSTRY_NUM_OUTPUTS]; -/* static */ uint8_t SlIndustryProduced::old_rate[INDUSTRY_NUM_OUTPUTS]; -/* static */ uint16_t SlIndustryProduced::old_this_month_production[INDUSTRY_NUM_OUTPUTS]; -/* static */ uint16_t SlIndustryProduced::old_this_month_transported[INDUSTRY_NUM_OUTPUTS]; -/* static */ uint16_t SlIndustryProduced::old_last_month_production[INDUSTRY_NUM_OUTPUTS]; -/* static */ uint16_t SlIndustryProduced::old_last_month_transported[INDUSTRY_NUM_OUTPUTS]; - static const SaveLoad _industry_desc[] = { SLE_CONDVAR(Industry, location.tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), SLE_CONDVAR(Industry, location.tile, SLE_UINT32, SLV_6, SL_MAX_VERSION), From f79ec7955ac06d1821f2087f814c65a0e3dfb9a6 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 29 Nov 2023 22:49:34 +0000 Subject: [PATCH 218/695] Codechange: Explicitly reset old industry data before loading games. --- src/saveload/industry_sl.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index 0dc09a43c8..693fe7160f 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -51,6 +51,13 @@ public: static inline std::array old_cargo; static inline std::array old_waiting; static inline std::array old_last_accepted; + + static void ResetOldStructure() + { + SlIndustryAccepted::old_cargo.fill(INVALID_CARGO); + SlIndustryAccepted::old_waiting.fill(0); + SlIndustryAccepted::old_last_accepted.fill(0); + } }; class SlIndustryProducedHistory : public DefaultSaveLoadHandler { @@ -124,6 +131,17 @@ public: static inline std::array old_this_month_transported; static inline std::array old_last_month_production; static inline std::array old_last_month_transported; + + static void ResetOldStructure() + { + SlIndustryProduced::old_cargo.fill(INVALID_CARGO); + SlIndustryProduced::old_waiting.fill(0); + SlIndustryProduced::old_rate.fill(0); + SlIndustryProduced::old_this_month_production.fill(0); + SlIndustryProduced::old_this_month_transported.fill(0); + SlIndustryProduced::old_last_month_production.fill(0); + SlIndustryProduced::old_this_month_production.fill(0); + } }; static const SaveLoad _industry_desc[] = { @@ -223,6 +241,8 @@ struct INDYChunkHandler : ChunkHandler { int index; + SlIndustryAccepted::ResetOldStructure(); + SlIndustryProduced::ResetOldStructure(); Industry::ResetIndustryCounts(); while ((index = SlIterateArray()) != -1) { From 295508fc533a8ce6b8ad9d7ae323ee204011af8e Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 15 Jul 2023 20:44:07 +0100 Subject: [PATCH 219/695] Codechange: Avoid lengthof() on std::array. --- src/saveload/afterload.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index cfa3ddfbc5..f8b9202e6e 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -1708,14 +1708,15 @@ bool AfterLoadGame() } } + /* At version 78, industry cargo types can be changed, and are stored with the industry. For older save versions + * copy the IndustrySpec's cargo types over to the Industry. */ if (IsSavegameVersionBefore(SLV_78)) { - uint j; - for (Industry * i : Industry::Iterate()) { + for (Industry *i : Industry::Iterate()) { const IndustrySpec *indsp = GetIndustrySpec(i->type); - for (j = 0; j < lengthof(i->produced); j++) { + for (uint j = 0; j < std::size(i->produced); j++) { i->produced[j].cargo = indsp->produced_cargo[j]; } - for (j = 0; j < lengthof(i->accepted); j++) { + for (uint j = 0; j < std::size(i->accepted); j++) { i->accepted[j].cargo = indsp->accepts_cargo[j]; } } From 00e0021e3a21f8073a0707ec0c76dfe98625584c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 29 Nov 2023 21:30:19 +0000 Subject: [PATCH 220/695] Codechange: Don't assume accepted/produced slot exists. --- src/industry.h | 22 +++++++++++ src/industry_cmd.cpp | 9 +++-- src/newgrf_industries.cpp | 56 ++++++++++++++-------------- src/saveload/afterload.cpp | 2 +- src/table/newgrf_debug_data.h | 69 +++++++++++++++++++---------------- 5 files changed, 93 insertions(+), 65 deletions(-) diff --git a/src/industry.h b/src/industry.h index 4a8f41bbcf..2747001aea 100644 --- a/src/industry.h +++ b/src/industry.h @@ -139,6 +139,28 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> { return IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == this->index; } + /** + * Safely get a produced cargo slot, or an empty data if the slot does not exist. + * @param slot produced cargo slot to retrieve. + * @return the real slot, or an empty slot. + */ + inline const ProducedCargo &GetProduced(size_t slot) const + { + static const ProducedCargo empty{INVALID_CARGO, 0, 0, {}}; + return slot < this->produced.size() ? this->produced[slot] : empty; + } + + /** + * Safely get an accepted cargo slot, or an empty data if the slot does not exist. + * @param slot accepted cargo slot to retrieve. + * @return the real slot, or an empty slot. + */ + inline const AcceptedCargo &GetAccepted(size_t slot) const + { + static const AcceptedCargo empty{INVALID_CARGO, 0, {}}; + return slot < this->accepted.size() ? this->accepted[slot] : empty; + } + /** * Get produced cargo slot for a specific cargo type. * @param cargo CargoID to find. diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 46e3d79b08..4f1f448ca1 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1125,8 +1125,9 @@ static bool SearchLumberMillTrees(TileIndex tile, void *) */ static void ChopLumberMillTrees(Industry *i) { - /* Skip production if cargo slot is invalid. */ - if (!IsValidCargoID(i->produced[0].cargo)) return; + /* Don't process lumber mill if cargo is not set up correctly. */ + auto itp = std::begin(i->produced); + if (itp == std::end(i->produced) || !IsValidCargoID(itp->cargo)) return; /* We only want to cut trees if all tiles are completed. */ for (TileIndex tile_cur : i->location) { @@ -1137,7 +1138,7 @@ static void ChopLumberMillTrees(Industry *i) TileIndex tile = i->location.tile; if (CircularTileSearch(&tile, 40, SearchLumberMillTrees, nullptr)) { // 40x40 tiles to search. - i->produced[0].waiting = ClampTo(i->produced[0].waiting + ScaleByCargoScale(45, false)); // Found a tree, add according value to waiting cargo. + itp->waiting = ClampTo(itp->waiting + ScaleByCargoScale(45, false)); // Found a tree, add according value to waiting cargo. } } @@ -2847,7 +2848,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) if (original_economy) { if (only_decrease || Chance16(1, 3)) { /* If more than 60% transported, 66% chance of increase, else 33% chance of increase */ - if (!only_decrease && (i->produced[0].history[LAST_MONTH].PctTransported() > PERCENT_TRANSPORTED_60) != Chance16(1, 3)) { + if (!only_decrease && (i->GetProduced(0).history[LAST_MONTH].PctTransported() > PERCENT_TRANSPORTED_60) != Chance16(1, 3)) { mul = 1; // Increase production } else { div = 1; // Decrease production diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp index ed68d35a01..7f574fb9b9 100644 --- a/src/newgrf_industries.cpp +++ b/src/newgrf_industries.cpp @@ -214,9 +214,9 @@ static uint32_t GetCountAndDistanceOfClosestInstance(uint8_t param_setID, uint8_ if (HasBit(callback, CBM_IND_PRODUCTION_CARGO_ARRIVAL) || HasBit(callback, CBM_IND_PRODUCTION_256_TICKS)) { if ((indspec->behaviour & INDUSTRYBEH_PROD_MULTI_HNDLING) != 0) { if (this->industry->prod_level == 0) return 0; - return ClampTo(this->industry->accepted[variable - 0x40].waiting / this->industry->prod_level); + return ClampTo(this->industry->GetAccepted(variable - 0x40).waiting / this->industry->prod_level); } else { - return ClampTo(this->industry->accepted[variable - 0x40].waiting); + return ClampTo(this->industry->GetAccepted(variable - 0x40).waiting); } } else { return 0; @@ -358,40 +358,40 @@ static uint32_t GetCountAndDistanceOfClosestInstance(uint8_t param_setID, uint8_ case 0x87: return this->industry->location.h;// xy dimensions case 0x88: - case 0x89: return this->industry->produced[variable - 0x88].cargo; - case 0x8A: return this->industry->produced[0].waiting; - case 0x8B: return GB(this->industry->produced[0].waiting, 8, 8); - case 0x8C: return this->industry->produced[1].waiting; - case 0x8D: return GB(this->industry->produced[1].waiting, 8, 8); + case 0x89: return this->industry->GetProduced(variable - 0x88).cargo; + case 0x8A: return this->industry->GetProduced(0).waiting; + case 0x8B: return GB(this->industry->GetProduced(0).waiting, 8, 8); + case 0x8C: return this->industry->GetProduced(1).waiting; + case 0x8D: return GB(this->industry->GetProduced(1).waiting, 8, 8); case 0x8E: - case 0x8F: return this->industry->produced[variable - 0x8E].rate; + case 0x8F: return this->industry->GetProduced(variable - 0x8E).rate; case 0x90: case 0x91: - case 0x92: return this->industry->accepted[variable - 0x90].cargo; + case 0x92: return this->industry->GetAccepted(variable - 0x90).cargo; case 0x93: return this->industry->prod_level; /* amount of cargo produced so far THIS month. */ - case 0x94: return this->industry->produced[0].history[THIS_MONTH].production; - case 0x95: return GB(this->industry->produced[0].history[THIS_MONTH].production, 8, 8); - case 0x96: return this->industry->produced[1].history[THIS_MONTH].production; - case 0x97: return GB(this->industry->produced[1].history[THIS_MONTH].production, 8, 8); + case 0x94: return this->industry->GetProduced(0).history[THIS_MONTH].production; + case 0x95: return GB(this->industry->GetProduced(0).history[THIS_MONTH].production, 8, 8); + case 0x96: return this->industry->GetProduced(1).history[THIS_MONTH].production; + case 0x97: return GB(this->industry->GetProduced(1).history[THIS_MONTH].production, 8, 8); /* amount of cargo transported so far THIS month. */ - case 0x98: return this->industry->produced[0].history[THIS_MONTH].transported; - case 0x99: return GB(this->industry->produced[0].history[THIS_MONTH].transported, 8, 8); - case 0x9A: return this->industry->produced[1].history[THIS_MONTH].transported; - case 0x9B: return GB(this->industry->produced[1].history[THIS_MONTH].transported, 8, 8); + case 0x98: return this->industry->GetProduced(0).history[THIS_MONTH].transported; + case 0x99: return GB(this->industry->GetProduced(0).history[THIS_MONTH].transported, 8, 8); + case 0x9A: return this->industry->GetProduced(1).history[THIS_MONTH].transported; + case 0x9B: return GB(this->industry->GetProduced(1).history[THIS_MONTH].transported, 8, 8); /* fraction of cargo transported LAST month. */ case 0x9C: - case 0x9D: return this->industry->produced[variable - 0x9C].history[LAST_MONTH].PctTransported(); + case 0x9D: return this->industry->GetProduced(variable - 0x9C).history[LAST_MONTH].PctTransported(); /* amount of cargo produced LAST month. */ - case 0x9E: return this->industry->produced[0].history[LAST_MONTH].production; - case 0x9F: return GB(this->industry->produced[0].history[LAST_MONTH].production, 8, 8); - case 0xA0: return this->industry->produced[1].history[LAST_MONTH].production; - case 0xA1: return GB(this->industry->produced[1].history[LAST_MONTH].production, 8, 8); + case 0x9E: return this->industry->GetProduced(0).history[LAST_MONTH].production; + case 0x9F: return GB(this->industry->GetProduced(0).history[LAST_MONTH].production, 8, 8); + case 0xA0: return this->industry->GetProduced(1).history[LAST_MONTH].production; + case 0xA1: return GB(this->industry->GetProduced(1).history[LAST_MONTH].production, 8, 8); /* amount of cargo transported last month. */ - case 0xA2: return this->industry->produced[0].history[LAST_MONTH].transported; - case 0xA3: return GB(this->industry->produced[0].history[LAST_MONTH].transported, 8, 8); - case 0xA4: return this->industry->produced[1].history[LAST_MONTH].transported; - case 0xA5: return GB(this->industry->produced[1].history[LAST_MONTH].transported, 8, 8); + case 0xA2: return this->industry->GetProduced(0).history[LAST_MONTH].transported; + case 0xA3: return GB(this->industry->GetProduced(0).history[LAST_MONTH].transported, 8, 8); + case 0xA4: return this->industry->GetProduced(1).history[LAST_MONTH].transported; + case 0xA5: return GB(this->industry->GetProduced(1).history[LAST_MONTH].transported, 8, 8); case 0xA6: return indspec->grf_prop.local_id; case 0xA7: return this->industry->founder; @@ -642,11 +642,11 @@ void IndustryProductionCallback(Industry *ind, int reason) if (group->version < 2) { /* Callback parameters map directly to industry cargo slot indices */ - for (uint i = 0; i < group->num_input; i++) { + for (uint i = 0; i < group->num_input && i < ind->accepted.size(); i++) { if (!IsValidCargoID(ind->accepted[i].cargo)) continue; ind->accepted[i].waiting = ClampTo(ind->accepted[i].waiting - DerefIndProd(group->subtract_input[i], deref) * multiplier); } - for (uint i = 0; i < group->num_output; i++) { + for (uint i = 0; i < group->num_output && i < ind->produced.size(); i++) { if (!IsValidCargoID(ind->produced[i].cargo)) continue; ind->produced[i].waiting = ClampTo(ind->produced[i].waiting + std::max(DerefIndProd(group->add_output[i], deref), 0) * multiplier); } diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index f8b9202e6e..34a9f36d27 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -3058,7 +3058,7 @@ bool AfterLoadGame() * The loading routine should put the original singular value into the first array element. */ for (auto &a : i->accepted) { if (IsValidCargoID(a.cargo)) { - a.last_accepted = i->accepted[0].last_accepted; + a.last_accepted = i->GetAccepted(0).last_accepted; } else { a.last_accepted = 0; } diff --git a/src/table/newgrf_debug_data.h b/src/table/newgrf_debug_data.h index f11a1110a7..127a948635 100644 --- a/src/table/newgrf_debug_data.h +++ b/src/table/newgrf_debug_data.h @@ -274,43 +274,48 @@ static const NIFeature _nif_industrytile = { /*** NewGRF industries ***/ +#define NIP_PRODUCED_CARGO(prop, base, slot, type, name) { name, [] (const void *b) -> const void * { return std::addressof(static_cast(b)->GetProduced(slot).cargo); }, sizeof(CargoID), prop, type } +#define NIP_ACCEPTED_CARGO(prop, base, slot, type, name) { name, [] (const void *b) -> const void * { return std::addressof(static_cast(b)->GetAccepted(slot).cargo); }, sizeof(CargoID), prop, type } static const NIProperty _nip_industries[] = { - NIP(0x25, Industry, produced[ 0].cargo, NIT_CARGO, "produced cargo 0"), - NIP(0x25, Industry, produced[ 1].cargo, NIT_CARGO, "produced cargo 1"), - NIP(0x25, Industry, produced[ 2].cargo, NIT_CARGO, "produced cargo 2"), - NIP(0x25, Industry, produced[ 3].cargo, NIT_CARGO, "produced cargo 3"), - NIP(0x25, Industry, produced[ 4].cargo, NIT_CARGO, "produced cargo 4"), - NIP(0x25, Industry, produced[ 5].cargo, NIT_CARGO, "produced cargo 5"), - NIP(0x25, Industry, produced[ 6].cargo, NIT_CARGO, "produced cargo 6"), - NIP(0x25, Industry, produced[ 7].cargo, NIT_CARGO, "produced cargo 7"), - NIP(0x25, Industry, produced[ 8].cargo, NIT_CARGO, "produced cargo 8"), - NIP(0x25, Industry, produced[ 9].cargo, NIT_CARGO, "produced cargo 9"), - NIP(0x25, Industry, produced[10].cargo, NIT_CARGO, "produced cargo 10"), - NIP(0x25, Industry, produced[11].cargo, NIT_CARGO, "produced cargo 11"), - NIP(0x25, Industry, produced[12].cargo, NIT_CARGO, "produced cargo 12"), - NIP(0x25, Industry, produced[13].cargo, NIT_CARGO, "produced cargo 13"), - NIP(0x25, Industry, produced[14].cargo, NIT_CARGO, "produced cargo 14"), - NIP(0x25, Industry, produced[15].cargo, NIT_CARGO, "produced cargo 15"), - NIP(0x26, Industry, accepted[ 0].cargo, NIT_CARGO, "accepted cargo 0"), - NIP(0x26, Industry, accepted[ 1].cargo, NIT_CARGO, "accepted cargo 1"), - NIP(0x26, Industry, accepted[ 2].cargo, NIT_CARGO, "accepted cargo 2"), - NIP(0x26, Industry, accepted[ 3].cargo, NIT_CARGO, "accepted cargo 3"), - NIP(0x26, Industry, accepted[ 4].cargo, NIT_CARGO, "accepted cargo 4"), - NIP(0x26, Industry, accepted[ 5].cargo, NIT_CARGO, "accepted cargo 5"), - NIP(0x26, Industry, accepted[ 6].cargo, NIT_CARGO, "accepted cargo 6"), - NIP(0x26, Industry, accepted[ 7].cargo, NIT_CARGO, "accepted cargo 7"), - NIP(0x26, Industry, accepted[ 8].cargo, NIT_CARGO, "accepted cargo 8"), - NIP(0x26, Industry, accepted[ 9].cargo, NIT_CARGO, "accepted cargo 9"), - NIP(0x26, Industry, accepted[10].cargo, NIT_CARGO, "accepted cargo 10"), - NIP(0x26, Industry, accepted[11].cargo, NIT_CARGO, "accepted cargo 11"), - NIP(0x26, Industry, accepted[12].cargo, NIT_CARGO, "accepted cargo 12"), - NIP(0x26, Industry, accepted[13].cargo, NIT_CARGO, "accepted cargo 13"), - NIP(0x26, Industry, accepted[14].cargo, NIT_CARGO, "accepted cargo 14"), - NIP(0x26, Industry, accepted[15].cargo, NIT_CARGO, "accepted cargo 15"), + NIP_PRODUCED_CARGO(0x25, Industry, 0, NIT_CARGO, "produced cargo 0"), + NIP_PRODUCED_CARGO(0x25, Industry, 1, NIT_CARGO, "produced cargo 1"), + NIP_PRODUCED_CARGO(0x25, Industry, 2, NIT_CARGO, "produced cargo 2"), + NIP_PRODUCED_CARGO(0x25, Industry, 3, NIT_CARGO, "produced cargo 3"), + NIP_PRODUCED_CARGO(0x25, Industry, 4, NIT_CARGO, "produced cargo 4"), + NIP_PRODUCED_CARGO(0x25, Industry, 5, NIT_CARGO, "produced cargo 5"), + NIP_PRODUCED_CARGO(0x25, Industry, 6, NIT_CARGO, "produced cargo 6"), + NIP_PRODUCED_CARGO(0x25, Industry, 7, NIT_CARGO, "produced cargo 7"), + NIP_PRODUCED_CARGO(0x25, Industry, 8, NIT_CARGO, "produced cargo 8"), + NIP_PRODUCED_CARGO(0x25, Industry, 9, NIT_CARGO, "produced cargo 9"), + NIP_PRODUCED_CARGO(0x25, Industry, 10, NIT_CARGO, "produced cargo 10"), + NIP_PRODUCED_CARGO(0x25, Industry, 11, NIT_CARGO, "produced cargo 11"), + NIP_PRODUCED_CARGO(0x25, Industry, 12, NIT_CARGO, "produced cargo 12"), + NIP_PRODUCED_CARGO(0x25, Industry, 13, NIT_CARGO, "produced cargo 13"), + NIP_PRODUCED_CARGO(0x25, Industry, 14, NIT_CARGO, "produced cargo 14"), + NIP_PRODUCED_CARGO(0x25, Industry, 15, NIT_CARGO, "produced cargo 15"), + NIP_ACCEPTED_CARGO(0x26, Industry, 0, NIT_CARGO, "accepted cargo 0"), + NIP_ACCEPTED_CARGO(0x26, Industry, 1, NIT_CARGO, "accepted cargo 1"), + NIP_ACCEPTED_CARGO(0x26, Industry, 2, NIT_CARGO, "accepted cargo 2"), + NIP_ACCEPTED_CARGO(0x26, Industry, 3, NIT_CARGO, "accepted cargo 3"), + NIP_ACCEPTED_CARGO(0x26, Industry, 4, NIT_CARGO, "accepted cargo 4"), + NIP_ACCEPTED_CARGO(0x26, Industry, 5, NIT_CARGO, "accepted cargo 5"), + NIP_ACCEPTED_CARGO(0x26, Industry, 6, NIT_CARGO, "accepted cargo 6"), + NIP_ACCEPTED_CARGO(0x26, Industry, 7, NIT_CARGO, "accepted cargo 7"), + NIP_ACCEPTED_CARGO(0x26, Industry, 8, NIT_CARGO, "accepted cargo 8"), + NIP_ACCEPTED_CARGO(0x26, Industry, 9, NIT_CARGO, "accepted cargo 9"), + NIP_ACCEPTED_CARGO(0x26, Industry, 10, NIT_CARGO, "accepted cargo 10"), + NIP_ACCEPTED_CARGO(0x26, Industry, 11, NIT_CARGO, "accepted cargo 11"), + NIP_ACCEPTED_CARGO(0x26, Industry, 12, NIT_CARGO, "accepted cargo 12"), + NIP_ACCEPTED_CARGO(0x26, Industry, 13, NIT_CARGO, "accepted cargo 13"), + NIP_ACCEPTED_CARGO(0x26, Industry, 14, NIT_CARGO, "accepted cargo 14"), + NIP_ACCEPTED_CARGO(0x26, Industry, 15, NIT_CARGO, "accepted cargo 15"), NIP_END() }; +#undef NIP_PRODUCED_CARGO +#undef NIP_ACCEPTED_CARGO + #define NICI(cb_id, bit) NIC(cb_id, IndustrySpec, callback_mask, bit) static const NICallback _nic_industries[] = { NICI(CBID_INDUSTRY_PROBABILITY, CBM_IND_PROBABILITY), From 3de8853e2953b086e22c458c6ff625bb526e154c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 14 Jul 2023 11:49:11 +0100 Subject: [PATCH 221/695] Codechange: Store accepted and produced cargo in vector instead of array. Most industries do not use the full 16 slots, so this can save a little memory and iteration time. --- src/industry.h | 16 +++++----- src/industry_cmd.cpp | 57 +++++++++++++++++++++++++++-------- src/saveload/afterload.cpp | 10 ------ src/saveload/industry_sl.cpp | 37 ++++++++++++++--------- src/saveload/oldloader_sl.cpp | 37 ++++++++++++++--------- 5 files changed, 99 insertions(+), 58 deletions(-) diff --git a/src/industry.h b/src/industry.h index 2747001aea..24fe0cef8f 100644 --- a/src/industry.h +++ b/src/industry.h @@ -90,14 +90,14 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> { TimerGameEconomy::Date last_accepted; ///< Last day cargo was accepted by this industry }; - using ProducedCargoArray = std::array; - using AcceptedCargoArray = std::array; + using ProducedCargoes = std::vector; + using AcceptedCargoes = std::vector; TileArea location; ///< Location of the industry Town *town; ///< Nearest town Station *neutral_station; ///< Associated neutral station - ProducedCargoArray produced; ///< INDUSTRY_NUM_OUTPUTS production cargo slots - AcceptedCargoArray accepted; ///< INDUSTRY_NUM_INPUTS input cargo slots + ProducedCargoes produced; ///< produced cargo slots + AcceptedCargoes accepted; ///< accepted cargo slots uint8_t prod_level; ///< general production level uint16_t counter; ///< used for animation and/or production (if available cargo) @@ -166,7 +166,7 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> { * @param cargo CargoID to find. * @return Iterator pointing to produced cargo slot if it exists, or the end iterator. */ - inline ProducedCargoArray::iterator GetCargoProduced(CargoID cargo) + inline ProducedCargoes::iterator GetCargoProduced(CargoID cargo) { if (!IsValidCargoID(cargo)) return std::end(this->produced); return std::find_if(std::begin(this->produced), std::end(this->produced), [&cargo](const auto &p) { return p.cargo == cargo; }); @@ -177,7 +177,7 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> { * @param cargo CargoID to find. * @return Iterator pointing to produced cargo slot if it exists, or the end iterator. */ - inline ProducedCargoArray::const_iterator GetCargoProduced(CargoID cargo) const + inline ProducedCargoes::const_iterator GetCargoProduced(CargoID cargo) const { if (!IsValidCargoID(cargo)) return std::end(this->produced); return std::find_if(std::begin(this->produced), std::end(this->produced), [&cargo](const auto &p) { return p.cargo == cargo; }); @@ -188,7 +188,7 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> { * @param cargo CargoID to find. * @return Iterator pointing to accepted cargo slot if it exists, or the end iterator. */ - inline AcceptedCargoArray::iterator GetCargoAccepted(CargoID cargo) + inline AcceptedCargoes::iterator GetCargoAccepted(CargoID cargo) { if (!IsValidCargoID(cargo)) return std::end(this->accepted); return std::find_if(std::begin(this->accepted), std::end(this->accepted), [&cargo](const auto &a) { return a.cargo == cargo; }); @@ -332,4 +332,6 @@ enum IndustryDirectoryInvalidateWindowData { IDIWD_FORCE_RESORT, }; +void TrimIndustryAcceptedProduced(Industry *ind); + #endif /* INDUSTRY_H */ diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 4f1f448ca1..816e36a5e5 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1788,15 +1788,19 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, i->type = type; Industry::IncIndustryTypeCount(type); - for (auto it = std::begin(i->produced); it != std::end(i->produced); ++it) { - size_t index = it - std::begin(i->produced); - it->cargo = indspec->produced_cargo[index]; - it->rate = indspec->production_rate[index]; + for (size_t index = 0; index < lengthof(indspec->produced_cargo); ++index) { + if (!IsValidCargoID(indspec->produced_cargo[index])) break; + + Industry::ProducedCargo &p = i->produced.emplace_back(); + p.cargo = indspec->produced_cargo[index]; + p.rate = indspec->production_rate[index]; } - for (auto it = std::begin(i->accepted); it != std::end(i->accepted); ++it) { - size_t index = it - std::begin(i->accepted); - it->cargo = indspec->accepts_cargo[index]; + for (size_t index = 0; index < lengthof(indspec->accepts_cargo); ++index) { + if (!IsValidCargoID(indspec->accepts_cargo[index])) break; + + Industry::AcceptedCargo &a = i->accepted.emplace_back(); + a.cargo = indspec->accepts_cargo[index]; } /* Randomize inital production if non-original economy is used and there are no production related callbacks. */ @@ -1870,7 +1874,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, if (HasBit(indspec->callback_mask, CBM_IND_INPUT_CARGO_TYPES)) { /* Clear all input cargo types */ - for (auto &a : i->accepted) a.cargo = INVALID_CARGO; + i->accepted.clear(); /* Query actual types */ uint maxcargoes = (indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED) ? static_cast(i->accepted.size()) : 3; for (uint j = 0; j < maxcargoes; j++) { @@ -1884,7 +1888,12 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, /* Industries without "unlimited" cargo types support depend on the specific order/slots of cargo types. * They need to be able to blank out specific slots without aborting the callback sequence, * and solve this by returning undefined cargo indexes. Skip these. */ - if (!IsValidCargoID(cargo) && !(indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED)) continue; + if (!IsValidCargoID(cargo) && !(indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED)) { + /* As slots are allocated as needed now, this means we do need to add a slot for the invalid cargo. */ + Industry::AcceptedCargo &a = i->accepted.emplace_back(); + a.cargo = INVALID_CARGO; + continue; + } /* Verify valid cargo */ if (std::find(indspec->accepts_cargo, endof(indspec->accepts_cargo), cargo) == endof(indspec->accepts_cargo)) { /* Cargo not in spec, error in NewGRF */ @@ -1896,13 +1905,14 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, ErrorUnknownCallbackResult(indspec->grf_prop.grffile->grfid, CBID_INDUSTRY_INPUT_CARGO_TYPES, res); break; } - i->accepted[j].cargo = cargo; + Industry::AcceptedCargo &a = i->accepted.emplace_back(); + a.cargo = cargo; } } if (HasBit(indspec->callback_mask, CBM_IND_OUTPUT_CARGO_TYPES)) { /* Clear all output cargo types */ - for (auto &p : i->produced) p.cargo = INVALID_CARGO; + i->produced.clear(); /* Query actual types */ uint maxcargoes = (indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED) ? static_cast(i->produced.size()) : 2; for (uint j = 0; j < maxcargoes; j++) { @@ -1914,7 +1924,12 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, } CargoID cargo = GetCargoTranslation(GB(res, 0, 8), indspec->grf_prop.grffile); /* Allow older GRFs to skip slots. */ - if (!IsValidCargoID(cargo) && !(indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED)) continue; + if (!IsValidCargoID(cargo) && !(indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED)) { + /* As slots are allocated as needed now, this means we do need to add a slot for the invalid cargo. */ + Industry::ProducedCargo &p = i->produced.emplace_back(); + p.cargo = INVALID_CARGO; + continue; + } /* Verify valid cargo */ if (std::find(indspec->produced_cargo, endof(indspec->produced_cargo), cargo) == endof(indspec->produced_cargo)) { /* Cargo not in spec, error in NewGRF */ @@ -1926,7 +1941,8 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, ErrorUnknownCallbackResult(indspec->grf_prop.grffile->grfid, CBID_INDUSTRY_OUTPUT_CARGO_TYPES, res); break; } - i->produced[j].cargo = cargo; + Industry::ProducedCargo &p = i->produced.emplace_back(); + p.cargo = cargo; } } @@ -3212,3 +3228,18 @@ bool IndustryCompare::operator() (const IndustryListEntry &lhs, const IndustryLi /* Compare by distance first and use index as a tiebreaker. */ return std::tie(lhs.distance, lhs.industry->index) < std::tie(rhs.distance, rhs.industry->index); } + +/** + * Remove unused industry accepted/produced slots -- entries after the last slot with valid cargo. + * @param ind Industry to trim slots. + */ +void TrimIndustryAcceptedProduced(Industry *ind) +{ + auto ita = std::find_if(std::rbegin(ind->accepted), std::rend(ind->accepted), [](const auto &a) { return IsValidCargoID(a.cargo); }); + ind->accepted.erase(ita.base(), std::end(ind->accepted)); + ind->accepted.shrink_to_fit(); + + auto itp = std::find_if(std::rbegin(ind->produced), std::rend(ind->produced), [](const auto &p) { return IsValidCargoID(p.cargo); }); + ind->produced.erase(itp.base(), std::end(ind->produced)); + ind->produced.shrink_to_fit(); +} diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 34a9f36d27..bc203e16dc 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -3044,16 +3044,6 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_EXTEND_INDUSTRY_CARGO_SLOTS)) { /* Make sure added industry cargo slots are cleared */ for (Industry *i : Industry::Iterate()) { - for (auto it = std::begin(i->produced) + 2; it != std::end(i->produced); ++it) { - it->cargo = INVALID_CARGO; - it->waiting = 0; - it->rate = 0; - it->history = {}; - } - for (auto it = std::begin(i->accepted) + 3; it != std::end(i->accepted); ++it) { - it->cargo = INVALID_CARGO; - it->waiting = 0; - } /* Make sure last_cargo_accepted_at is copied to elements for every valid input cargo. * The loading routine should put the original singular value into the first array element. */ for (auto &a : i->accepted) { diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index 693fe7160f..342f03d807 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -39,11 +39,12 @@ public: void Load(Industry *i) const override { - size_t len = SlGetStructListLength(i->accepted.size()); + size_t len = SlGetStructListLength(INDUSTRY_NUM_INPUTS); - for (auto &a : i->accepted) { - if (--len > i->accepted.size()) break; // unsigned so wraps after hitting zero. - SlObject(&a, this->GetDescription()); + i->accepted.reserve(len); + for (size_t index = 0; index < len; ++index) { + auto &a = i->accepted.emplace_back(); + SlObject(&a, this->GetLoadDescription()); } } @@ -115,11 +116,12 @@ public: void Load(Industry *i) const override { - size_t len = SlGetStructListLength(i->produced.size()); + size_t len = SlGetStructListLength(INDUSTRY_NUM_OUTPUTS); - for (auto &p : i->produced) { - if (--len > i->produced.size()) break; // unsigned so wraps after hitting zero. - SlObject(&p, this->GetDescription()); + i->produced.reserve(len); + for (size_t index = 0; index < len; ++index) { + auto &p = i->produced.emplace_back(); + SlObject(&p, this->GetLoadDescription()); } } @@ -214,17 +216,19 @@ struct INDYChunkHandler : ChunkHandler { } } - void LoadMoveAcceptsProduced(Industry *i) const + void LoadMoveAcceptsProduced(Industry *i, uint inputs, uint outputs) const { - for (uint j = 0; j != INDUSTRY_NUM_INPUTS; ++j) { - auto &a = i->accepted[j]; + i->accepted.reserve(inputs); + for (uint j = 0; j != inputs; ++j) { + auto &a = i->accepted.emplace_back(); a.cargo = SlIndustryAccepted::old_cargo[j]; a.waiting = SlIndustryAccepted::old_waiting[j]; a.last_accepted = SlIndustryAccepted::old_last_accepted[j]; } - for (uint j = 0; j != INDUSTRY_NUM_OUTPUTS; ++j) { - auto &p = i->produced[j]; + i->produced.reserve(outputs); + for (uint j = 0; j != outputs; ++j) { + auto &p = i->produced.emplace_back(); p.cargo = SlIndustryProduced::old_cargo[j]; p.waiting = SlIndustryProduced::old_waiting[j]; p.rate = SlIndustryProduced::old_rate[j]; @@ -256,8 +260,13 @@ struct INDYChunkHandler : ChunkHandler { i->psa = new PersistentStorage(0, 0, 0); std::copy(std::begin(_old_ind_persistent_storage.storage), std::end(_old_ind_persistent_storage.storage), std::begin(i->psa->storage)); } - if (IsSavegameVersionBefore(SLV_INDUSTRY_CARGO_REORGANISE)) LoadMoveAcceptsProduced(i); + if (IsSavegameVersionBefore(SLV_EXTEND_INDUSTRY_CARGO_SLOTS)) { + LoadMoveAcceptsProduced(i, 3, 2); + } else if (IsSavegameVersionBefore(SLV_INDUSTRY_CARGO_REORGANISE)) { + LoadMoveAcceptsProduced(i, INDUSTRY_NUM_INPUTS, INDUSTRY_NUM_OUTPUTS); + } Industry::IncIndustryTypeCount(i->type); + TrimIndustryAcceptedProduced(i); } } diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index b9d4d632e4..c56b68f7da 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -804,6 +804,10 @@ static bool LoadOldStation(LoadgameState *ls, int num) return true; } +/* Old save games always have 3 input and 2 output slots per industry. */ +static std::array _old_accepted{}; +static std::array _old_produced{}; + static const OldChunks industry_chunk[] = { OCL_SVAR( OC_TILE, Industry, location.tile ), OCL_VAR ( OC_UINT32, 1, &_old_town_index ), @@ -811,29 +815,29 @@ static const OldChunks industry_chunk[] = { OCL_SVAR( OC_FILE_U8 | OC_VAR_U16, Industry, location.h ), OCL_NULL( 2 ), ///< used to be industry's produced_cargo - OCL_SVAR( OC_TTD | OC_UINT16, Industry, produced[0].waiting ), - OCL_SVAR( OC_TTD | OC_UINT16, Industry, produced[1].waiting ), - OCL_SVAR( OC_TTO | OC_FILE_U8 | OC_VAR_U16, Industry, produced[0].waiting ), - OCL_SVAR( OC_TTO | OC_FILE_U8 | OC_VAR_U16, Industry, produced[1].waiting ), + OCL_VAR( OC_TTD | OC_UINT16, 1, &_old_produced[0].waiting ), + OCL_VAR( OC_TTD | OC_UINT16, 1, &_old_produced[1].waiting ), + OCL_VAR( OC_TTO | OC_FILE_U8 | OC_VAR_U16, 1, &_old_produced[0].waiting ), + OCL_VAR( OC_TTO | OC_FILE_U8 | OC_VAR_U16, 1, &_old_produced[1].waiting ), - OCL_SVAR( OC_UINT8, Industry, produced[0].rate ), - OCL_SVAR( OC_UINT8, Industry, produced[1].rate ), + OCL_VAR( OC_UINT8, 1, &_old_produced[0].rate ), + OCL_VAR( OC_UINT8, 1, &_old_produced[1].rate ), OCL_NULL( 3 ), ///< used to be industry's accepts_cargo OCL_SVAR( OC_UINT8, Industry, prod_level ), - OCL_SVAR( OC_UINT16, Industry, produced[0].history[THIS_MONTH].production ), - OCL_SVAR( OC_UINT16, Industry, produced[1].history[THIS_MONTH].production ), - OCL_SVAR( OC_UINT16, Industry, produced[0].history[THIS_MONTH].transported ), - OCL_SVAR( OC_UINT16, Industry, produced[1].history[THIS_MONTH].transported ), + OCL_VAR( OC_UINT16, 1, &_old_produced[0].history[THIS_MONTH].production ), + OCL_VAR( OC_UINT16, 1, &_old_produced[1].history[THIS_MONTH].production ), + OCL_VAR( OC_UINT16, 1, &_old_produced[0].history[THIS_MONTH].transported ), + OCL_VAR( OC_UINT16, 1, &_old_produced[1].history[THIS_MONTH].transported ), OCL_NULL( 2 ), ///< last_month_pct_transported, now computed on the fly - OCL_SVAR( OC_UINT16, Industry, produced[0].history[LAST_MONTH].production ), - OCL_SVAR( OC_UINT16, Industry, produced[1].history[LAST_MONTH].production ), - OCL_SVAR( OC_UINT16, Industry, produced[0].history[LAST_MONTH].transported ), - OCL_SVAR( OC_UINT16, Industry, produced[1].history[LAST_MONTH].transported ), + OCL_VAR( OC_UINT16, 1, &_old_produced[0].history[LAST_MONTH].production ), + OCL_VAR( OC_UINT16, 1, &_old_produced[1].history[LAST_MONTH].production ), + OCL_VAR( OC_UINT16, 1, &_old_produced[0].history[LAST_MONTH].transported ), + OCL_VAR( OC_UINT16, 1, &_old_produced[1].history[LAST_MONTH].transported ), OCL_SVAR( OC_UINT8, Industry, type ), OCL_SVAR( OC_TTO | OC_FILE_U8 | OC_VAR_U16, Industry, counter ), @@ -854,6 +858,10 @@ static bool LoadOldIndustry(LoadgameState *ls, int num) if (!LoadChunk(ls, i, industry_chunk)) return false; if (i->location.tile != 0) { + /* Copy data from old fixed arrays to industry. */ + std::copy(std::begin(_old_accepted), std::end(_old_accepted), std::back_inserter(i->accepted)); + std::copy(std::begin(_old_produced), std::end(_old_produced), std::back_inserter(i->produced)); + i->town = RemapTown(i->location.tile); if (_savegame_type == SGT_TTO) { @@ -867,6 +875,7 @@ static bool LoadOldIndustry(LoadgameState *ls, int num) } Industry::IncIndustryTypeCount(i->type); + TrimIndustryAcceptedProduced(i); } else { delete i; } From 11aa3694fa4523d1675708874e8bdea15ade3502 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Mon, 1 Apr 2024 22:59:13 +0200 Subject: [PATCH 222/695] Fix: [Win32] Force font mapper to only use TrueType fonts (#12406) --- src/os/windows/font_win32.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/os/windows/font_win32.cpp b/src/os/windows/font_win32.cpp index 28be70bb02..d2a5420735 100644 --- a/src/os/windows/font_win32.cpp +++ b/src/os/windows/font_win32.cpp @@ -115,10 +115,6 @@ bool SetFallbackFont(FontCacheSettings *settings, const std::string &, int winla } -#ifndef ANTIALIASED_QUALITY -#define ANTIALIASED_QUALITY 4 -#endif - /** * Create a new Win32FontCache. * @param fs The font size that is going to be cached. @@ -171,7 +167,8 @@ void Win32FontCache::SetFontSize(int pixels) /* Create GDI font handle. */ this->logfont.lfHeight = -pixels; this->logfont.lfWidth = 0; - this->logfont.lfOutPrecision = ANTIALIASED_QUALITY; + this->logfont.lfOutPrecision = OUT_TT_ONLY_PRECIS; + this->logfont.lfQuality = ANTIALIASED_QUALITY; if (this->font != nullptr) { SelectObject(dc, this->old_font); From 56cac2108631792b4121242929462eb97d0bc92a Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 31 Mar 2024 17:31:47 +0100 Subject: [PATCH 223/695] Codechange: Use functions to create common drop down list items. --- src/airport_gui.cpp | 3 +- src/autoreplace_gui.cpp | 5 +- src/build_vehicle_gui.cpp | 9 ++-- src/date_gui.cpp | 7 +-- src/dropdown.cpp | 32 ++++++++++++- src/dropdown_func.h | 8 ++++ src/game/game_gui.cpp | 3 +- src/genworld_gui.cpp | 8 ++-- src/industry_gui.cpp | 10 ++-- src/network/network_gui.cpp | 14 +++--- src/newgrf_gui.cpp | 6 +-- src/order_gui.cpp | 2 +- src/rail_gui.cpp | 9 ++-- src/road_gui.cpp | 14 +++--- src/script/script_gui.cpp | 5 +- src/settings_gui.cpp | 40 ++++++++++------ src/settings_gui.h | 12 +---- src/station_gui.cpp | 9 ++-- src/story_gui.cpp | 4 +- src/textfile_gui.cpp | 3 +- src/toolbar_gui.cpp | 96 +++++++++++++++++++------------------ src/vehicle_gui.cpp | 27 ++++++----- 22 files changed, 190 insertions(+), 136 deletions(-) diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index 3e40208db1..a6e4109f59 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -23,6 +23,7 @@ #include "newgrf_airport.h" #include "newgrf_callbacks.h" #include "dropdown_type.h" +#include "dropdown_func.h" #include "core/geometry_func.hpp" #include "hotkeys.h" #include "vehicle_func.h" @@ -241,7 +242,7 @@ class BuildAirportWindow : public PickerWindowBase { DropDownList list; for (uint i = 0; i < AirportClass::GetClassCount(); i++) { - list.push_back(std::make_unique(AirportClass::Get((AirportClassID)i)->name, i, false)); + list.push_back(MakeDropDownListStringItem(AirportClass::Get((AirportClassID)i)->name, i)); } return list; diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index a69786dc2f..93f2ae7825 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -24,6 +24,7 @@ #include "core/geometry_func.hpp" #include "rail_gui.h" #include "road_gui.h" +#include "dropdown_type.h" #include "dropdown_func.h" #include "autoreplace_cmd.h" #include "group_cmd.h" @@ -563,8 +564,8 @@ public: case WID_RV_TRAIN_ENGINEWAGON_DROPDOWN: { DropDownList list; - list.push_back(std::make_unique(STR_REPLACE_ENGINES, 1, false)); - list.push_back(std::make_unique(STR_REPLACE_WAGONS, 0, false)); + list.push_back(MakeDropDownListStringItem(STR_REPLACE_ENGINES, 1)); + list.push_back(MakeDropDownListStringItem(STR_REPLACE_WAGONS, 0)); ShowDropDownList(this, std::move(list), this->replace_engines ? 1 : 0, WID_RV_TRAIN_ENGINEWAGON_DROPDOWN); break; } diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 0b458f3868..50244c24eb 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -25,6 +25,7 @@ #include "window_func.h" #include "timer/timer_game_calendar.h" #include "vehicle_func.h" +#include "dropdown_type.h" #include "dropdown_func.h" #include "engine_gui.h" #include "cargotype.h" @@ -1565,20 +1566,20 @@ struct BuildVehicleWindow : Window { DropDownList list; /* Add item for disabling filtering. */ - list.push_back(std::make_unique(this->GetCargoFilterLabel(CargoFilterCriteria::CF_ANY), CargoFilterCriteria::CF_ANY, false)); + list.push_back(MakeDropDownListStringItem(this->GetCargoFilterLabel(CargoFilterCriteria::CF_ANY), CargoFilterCriteria::CF_ANY)); /* Specific filters for trains. */ if (this->vehicle_type == VEH_TRAIN) { /* Add item for locomotives only in case of trains. */ - list.push_back(std::make_unique(this->GetCargoFilterLabel(CargoFilterCriteria::CF_ENGINES), CargoFilterCriteria::CF_ENGINES, false)); + list.push_back(MakeDropDownListStringItem(this->GetCargoFilterLabel(CargoFilterCriteria::CF_ENGINES), CargoFilterCriteria::CF_ENGINES)); /* Add item for vehicles not carrying anything, e.g. train engines. * This could also be useful for eyecandy vehicles of other types, but is likely too confusing for joe, */ - list.push_back(std::make_unique(this->GetCargoFilterLabel(CargoFilterCriteria::CF_NONE), CargoFilterCriteria::CF_NONE, false)); + list.push_back(MakeDropDownListStringItem(this->GetCargoFilterLabel(CargoFilterCriteria::CF_NONE), CargoFilterCriteria::CF_NONE)); } /* Add cargos */ Dimension d = GetLargestCargoIconSize(); for (const CargoSpec *cs : _sorted_standard_cargo_specs) { - list.push_back(std::make_unique(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index(), false)); + list.push_back(MakeDropDownListIconItem(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index())); } return list; diff --git a/src/date_gui.cpp b/src/date_gui.cpp index e5c2438cd2..57b2c076a8 100644 --- a/src/date_gui.cpp +++ b/src/date_gui.cpp @@ -15,6 +15,7 @@ #include "date_gui.h" #include "core/geometry_func.hpp" #include "dropdown_type.h" +#include "dropdown_func.h" #include "widgets/date_widget.h" @@ -75,14 +76,14 @@ struct SetDateWindow : Window { case WID_SD_DAY: for (uint i = 0; i < 31; i++) { - list.push_back(std::make_unique(STR_DAY_NUMBER_1ST + i, i + 1, false)); + list.push_back(MakeDropDownListStringItem(STR_DAY_NUMBER_1ST + i, i + 1)); } selected = this->date.day; break; case WID_SD_MONTH: for (uint i = 0; i < 12; i++) { - list.push_back(std::make_unique(STR_MONTH_JAN + i, i, false)); + list.push_back(MakeDropDownListStringItem(STR_MONTH_JAN + i, i)); } selected = this->date.month; break; @@ -90,7 +91,7 @@ struct SetDateWindow : Window { case WID_SD_YEAR: for (TimerGameEconomy::Year i = this->min_year; i <= this->max_year; i++) { SetDParam(0, i); - list.push_back(std::make_unique(STR_JUST_INT, i.base(), false)); + list.push_back(MakeDropDownListStringItem(STR_JUST_INT, i.base())); } selected = this->date.year.base(); break; diff --git a/src/dropdown.cpp b/src/dropdown.cpp index 2e70120069..1e334e365e 100644 --- a/src/dropdown.cpp +++ b/src/dropdown.cpp @@ -9,6 +9,7 @@ #include "stdafx.h" #include "dropdown_type.h" +#include "dropdown_func.h" #include "strings_func.h" #include "timer/timer.h" #include "timer/timer_window.h" @@ -20,6 +21,35 @@ #include "safeguards.h" +std::unique_ptr MakeDropDownListDividerItem() +{ + return std::make_unique(-1); +} + +std::unique_ptr MakeDropDownListStringItem(StringID str, int value, bool masked, bool shaded) +{ + return std::make_unique(str, value, masked, shaded); +} + +std::unique_ptr MakeDropDownListStringItem(const std::string &str, int value, bool masked, bool shaded) +{ + return std::make_unique(str, value, masked, shaded); +} + +std::unique_ptr MakeDropDownListIconItem(SpriteID sprite, PaletteID palette, StringID str, int value, bool masked, bool shaded) +{ + return std::make_unique(sprite, palette, str, value, masked, shaded); +} + +std::unique_ptr MakeDropDownListIconItem(const Dimension &dim, SpriteID sprite, PaletteID palette, StringID str, int value, bool masked, bool shaded) +{ + return std::make_unique(dim, sprite, palette, str, value, masked, shaded); +} + +std::unique_ptr MakeDropDownListCheckedItem(bool checked, StringID str, int value, bool masked, bool shaded) +{ + return std::make_unique(checked, str, value, masked, shaded); +} static constexpr NWidgetPart _nested_dropdown_menu_widgets[] = { NWidget(NWID_HORIZONTAL), @@ -408,7 +438,7 @@ void ShowDropDownMenu(Window *w, const StringID *strings, int selected, WidgetID for (uint i = 0; strings[i] != INVALID_STRING_ID; i++) { if (!HasBit(hidden_mask, i)) { - list.push_back(std::make_unique(strings[i], i, HasBit(disabled_mask, i))); + list.push_back(MakeDropDownListStringItem(strings[i], i, HasBit(disabled_mask, i))); } } diff --git a/src/dropdown_func.h b/src/dropdown_func.h index 65e4d272af..dee640e00f 100644 --- a/src/dropdown_func.h +++ b/src/dropdown_func.h @@ -15,4 +15,12 @@ /* Show drop down menu containing a fixed list of strings */ void ShowDropDownMenu(Window *w, const StringID *strings, int selected, WidgetID button, uint32_t disabled_mask, uint32_t hidden_mask, uint width = 0); +/* Helper functions for commonly used drop down list items. */ +std::unique_ptr MakeDropDownListDividerItem(); +std::unique_ptr MakeDropDownListStringItem(StringID str, int value, bool masked = false, bool shaded = false); +std::unique_ptr MakeDropDownListStringItem(const std::string &str, int value, bool masked = false, bool shaded = false); +std::unique_ptr MakeDropDownListIconItem(SpriteID sprite, PaletteID palette, StringID str, int value, bool masked = false, bool shaded = false); +std::unique_ptr MakeDropDownListIconItem(const Dimension &dim, SpriteID sprite, PaletteID palette, StringID str, int value, bool masked = false, bool shaded = false); +std::unique_ptr MakeDropDownListCheckedItem(bool checked, StringID str, int value, bool masked = false, bool shaded = false); + #endif /* DROPDOWN_FUNC_H */ diff --git a/src/game/game_gui.cpp b/src/game/game_gui.cpp index b6c6c7588a..aae47f76e8 100644 --- a/src/game/game_gui.cpp +++ b/src/game/game_gui.cpp @@ -14,6 +14,7 @@ #include "../window_func.h" #include "../network/network.h" #include "../network/network_content.h" +#include "../dropdown_type.h" #include "../dropdown_func.h" #include "../timer/timer.h" #include "../timer/timer_window.h" @@ -317,7 +318,7 @@ struct GSConfigWindow : public Window { DropDownList list; for (int i = config_item.min_value; i <= config_item.max_value; i++) { - list.push_back(std::make_unique(config_item.labels.find(i)->second, i, false)); + list.push_back(MakeDropDownListStringItem(config_item.labels.find(i)->second, i)); } ShowDropDownListAt(this, std::move(list), old_val, WID_GSC_SETTING_DROPDOWN, wi_rect, COLOUR_ORANGE); diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index d0071b63ca..723df35436 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -338,7 +338,7 @@ static DropDownList BuildMapsizeDropDown() for (uint i = MIN_MAP_SIZE_BITS; i <= MAX_MAP_SIZE_BITS; i++) { SetDParam(0, 1LL << i); - list.push_back(std::make_unique(STR_JUST_INT, i, false)); + list.push_back(MakeDropDownListStringItem(STR_JUST_INT, i)); } return list; @@ -351,20 +351,20 @@ static DropDownList BuildTownNameDropDown() /* Add and sort newgrf townnames generators */ const auto &grf_names = GetGRFTownNameList(); for (uint i = 0; i < grf_names.size(); i++) { - list.push_back(std::make_unique(grf_names[i], BUILTIN_TOWNNAME_GENERATOR_COUNT + i, false)); + list.push_back(MakeDropDownListStringItem(grf_names[i], BUILTIN_TOWNNAME_GENERATOR_COUNT + i)); } std::sort(list.begin(), list.end(), DropDownListStringItem::NatSortFunc); size_t newgrf_size = list.size(); /* Insert newgrf_names at the top of the list */ if (newgrf_size > 0) { - list.push_back(std::make_unique(-1, false)); // separator line + list.push_back(MakeDropDownListDividerItem()); // separator line newgrf_size++; } /* Add and sort original townnames generators */ for (uint i = 0; i < BUILTIN_TOWNNAME_GENERATOR_COUNT; i++) { - list.push_back(std::make_unique(STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH + i, i, false)); + list.push_back(MakeDropDownListStringItem(STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH + i, i)); } std::sort(list.begin() + newgrf_size, list.end(), DropDownListStringItem::NatSortFunc); diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 6beffe9a73..7bd64396cf 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1759,14 +1759,14 @@ public: DropDownList list; /* Add item for disabling filtering. */ - list.push_back(std::make_unique(this->GetCargoFilterLabel(CargoFilterCriteria::CF_ANY), CargoFilterCriteria::CF_ANY, false)); + list.push_back(MakeDropDownListStringItem(this->GetCargoFilterLabel(CargoFilterCriteria::CF_ANY), CargoFilterCriteria::CF_ANY)); /* Add item for industries not producing anything, e.g. power plants */ - list.push_back(std::make_unique(this->GetCargoFilterLabel(CargoFilterCriteria::CF_NONE), CargoFilterCriteria::CF_NONE, false)); + list.push_back(MakeDropDownListStringItem(this->GetCargoFilterLabel(CargoFilterCriteria::CF_NONE), CargoFilterCriteria::CF_NONE)); /* Add cargos */ Dimension d = GetLargestCargoIconSize(); for (const CargoSpec *cs : _sorted_standard_cargo_specs) { - list.push_back(std::make_unique(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index(), false)); + list.push_back(MakeDropDownListIconItem(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index())); } return list; @@ -3101,7 +3101,7 @@ struct IndustryCargoesWindow : public Window { DropDownList lst; Dimension d = GetLargestCargoIconSize(); for (const CargoSpec *cs : _sorted_standard_cargo_specs) { - lst.push_back(std::make_unique(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index(), false)); + lst.push_back(MakeDropDownListIconItem(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index())); } if (!lst.empty()) { int selected = (this->ind_cargo >= NUM_INDUSTRYTYPES) ? (int)(this->ind_cargo - NUM_INDUSTRYTYPES) : -1; @@ -3115,7 +3115,7 @@ struct IndustryCargoesWindow : public Window { for (IndustryType ind : _sorted_industry_types) { const IndustrySpec *indsp = GetIndustrySpec(ind); if (!indsp->enabled) continue; - lst.push_back(std::make_unique(indsp->name, ind, false)); + lst.push_back(MakeDropDownListStringItem(indsp->name, ind)); } if (!lst.empty()) { int selected = (this->ind_cargo < NUM_INDUSTRYTYPES) ? (int)this->ind_cargo : -1; diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 13e1c76eff..548c29387b 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -72,9 +72,9 @@ static DropDownList BuildVisibilityDropDownList() { DropDownList list; - list.push_back(std::make_unique(STR_NETWORK_SERVER_VISIBILITY_LOCAL, SERVER_GAME_TYPE_LOCAL, false)); - list.push_back(std::make_unique(STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY, SERVER_GAME_TYPE_INVITE_ONLY, false)); - list.push_back(std::make_unique(STR_NETWORK_SERVER_VISIBILITY_PUBLIC, SERVER_GAME_TYPE_PUBLIC, false)); + list.push_back(MakeDropDownListStringItem(STR_NETWORK_SERVER_VISIBILITY_LOCAL, SERVER_GAME_TYPE_LOCAL)); + list.push_back(MakeDropDownListStringItem(STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY, SERVER_GAME_TYPE_INVITE_ONLY)); + list.push_back(MakeDropDownListStringItem(STR_NETWORK_SERVER_VISIBILITY_PUBLIC, SERVER_GAME_TYPE_PUBLIC)); return list; } @@ -1496,8 +1496,8 @@ private: static void OnClickClientAdmin([[maybe_unused]] NetworkClientListWindow *w, [[maybe_unused]] Point pt, ClientID client_id) { DropDownList list; - list.push_back(std::make_unique(STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK, DD_CLIENT_ADMIN_KICK, false)); - list.push_back(std::make_unique(STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN, DD_CLIENT_ADMIN_BAN, false)); + list.push_back(MakeDropDownListStringItem(STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK, DD_CLIENT_ADMIN_KICK)); + list.push_back(MakeDropDownListStringItem(STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN, DD_CLIENT_ADMIN_BAN)); Rect wi_rect; wi_rect.left = pt.x; @@ -1518,8 +1518,8 @@ private: static void OnClickCompanyAdmin([[maybe_unused]] NetworkClientListWindow *w, [[maybe_unused]] Point pt, CompanyID company_id) { DropDownList list; - list.push_back(std::make_unique(STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET, DD_COMPANY_ADMIN_RESET, NetworkCompanyHasClients(company_id))); - list.push_back(std::make_unique(STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK, DD_COMPANY_ADMIN_UNLOCK, !NetworkCompanyIsPassworded(company_id))); + list.push_back(MakeDropDownListStringItem(STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET, DD_COMPANY_ADMIN_RESET, NetworkCompanyHasClients(company_id))); + list.push_back(MakeDropDownListStringItem(STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK, DD_COMPANY_ADMIN_UNLOCK, !NetworkCompanyIsPassworded(company_id))); Rect wi_rect; wi_rect.left = pt.x; diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index d70cfda897..e311fad3c6 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -394,7 +394,7 @@ struct NewGRFParametersWindow : public Window { DropDownList list; for (uint32_t i = par_info.min_value; i <= par_info.max_value; i++) { - list.push_back(std::make_unique(GetGRFStringFromGRFText(par_info.value_names.find(i)->second), i, false)); + list.push_back(MakeDropDownListStringItem(GetGRFStringFromGRFText(par_info.value_names.find(i)->second), i)); } ShowDropDownListAt(this, std::move(list), old_val, WID_NP_SETTING_DROPDOWN, wi_rect, COLOUR_ORANGE); @@ -955,10 +955,10 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { DropDownList list; /* Add 'None' option for clearing list */ - list.push_back(std::make_unique(STR_NONE, -1, false)); + list.push_back(MakeDropDownListStringItem(STR_NONE, -1)); for (uint i = 0; i < this->grf_presets.size(); i++) { - list.push_back(std::make_unique(this->grf_presets[i], i, false)); + list.push_back(MakeDropDownListStringItem(this->grf_presets[i], i)); } this->CloseChildWindows(WC_QUERY_STRING); // Remove the parameter query window diff --git a/src/order_gui.cpp b/src/order_gui.cpp index f6ee4d9421..95d0d6f941 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -1350,7 +1350,7 @@ public: case WID_O_COND_VARIABLE: { DropDownList list; for (uint i = 0; i < lengthof(_order_conditional_variable); i++) { - list.push_back(std::make_unique(STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE + _order_conditional_variable[i], _order_conditional_variable[i], false)); + list.push_back(MakeDropDownListStringItem(STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE + _order_conditional_variable[i], _order_conditional_variable[i])); } ShowDropDownList(this, std::move(list), this->vehicle->GetOrder(this->OrderGetSel())->GetConditionVariable(), WID_O_COND_VARIABLE); break; diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 71fc9c6c49..16a0e985b6 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -22,6 +22,7 @@ #include "sound_func.h" #include "company_func.h" #include "dropdown_type.h" +#include "dropdown_func.h" #include "tunnelbridge.h" #include "tilehighlight_func.h" #include "spritecache.h" @@ -2385,7 +2386,7 @@ DropDownList GetRailTypeDropDownList(bool for_replacement, bool all_option) DropDownList list; if (all_option) { - list.push_back(std::make_unique(STR_REPLACE_ALL_RAILTYPE, INVALID_RAILTYPE, false)); + list.push_back(MakeDropDownListStringItem(STR_REPLACE_ALL_RAILTYPE, INVALID_RAILTYPE)); } Dimension d = { 0, 0 }; @@ -2407,16 +2408,16 @@ DropDownList GetRailTypeDropDownList(bool for_replacement, bool all_option) SetDParam(0, rti->strings.menu_text); SetDParam(1, rti->max_speed); if (for_replacement) { - list.push_back(std::make_unique(rti->strings.replace_text, rt, !HasBit(avail_railtypes, rt))); + list.push_back(MakeDropDownListStringItem(rti->strings.replace_text, rt, !HasBit(avail_railtypes, rt))); } else { StringID str = rti->max_speed > 0 ? STR_TOOLBAR_RAILTYPE_VELOCITY : STR_JUST_STRING; - list.push_back(std::make_unique(d, rti->gui_sprites.build_x_rail, PAL_NONE, str, rt, !HasBit(avail_railtypes, rt))); + list.push_back(MakeDropDownListIconItem(d, rti->gui_sprites.build_x_rail, PAL_NONE, str, rt, !HasBit(avail_railtypes, rt))); } } if (list.empty()) { /* Empty dropdowns are not allowed */ - list.push_back(std::make_unique(STR_NONE, INVALID_RAILTYPE, true)); + list.push_back(MakeDropDownListStringItem(STR_NONE, INVALID_RAILTYPE, true)); } return list; diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 766a3434c4..e966d9b770 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -27,6 +27,8 @@ #include "hotkeys.h" #include "road_gui.h" #include "zoom_func.h" +#include "dropdown_type.h" +#include "dropdown_func.h" #include "engine_base.h" #include "strings_func.h" #include "core/geometry_func.hpp" @@ -1830,7 +1832,7 @@ DropDownList GetRoadTypeDropDownList(RoadTramTypes rtts, bool for_replacement, b DropDownList list; if (all_option) { - list.push_back(std::make_unique(STR_REPLACE_ALL_ROADTYPE, INVALID_ROADTYPE, false)); + list.push_back(MakeDropDownListStringItem(STR_REPLACE_ALL_ROADTYPE, INVALID_ROADTYPE)); } Dimension d = { 0, 0 }; @@ -1852,16 +1854,16 @@ DropDownList GetRoadTypeDropDownList(RoadTramTypes rtts, bool for_replacement, b SetDParam(0, rti->strings.menu_text); SetDParam(1, rti->max_speed / 2); if (for_replacement) { - list.push_back(std::make_unique(rti->strings.replace_text, rt, !HasBit(avail_roadtypes, rt))); + list.push_back(MakeDropDownListStringItem(rti->strings.replace_text, rt, !HasBit(avail_roadtypes, rt))); } else { StringID str = rti->max_speed > 0 ? STR_TOOLBAR_RAILTYPE_VELOCITY : STR_JUST_STRING; - list.push_back(std::make_unique(d, rti->gui_sprites.build_x_road, PAL_NONE, str, rt, !HasBit(avail_roadtypes, rt))); + list.push_back(MakeDropDownListIconItem(d, rti->gui_sprites.build_x_road, PAL_NONE, str, rt, !HasBit(avail_roadtypes, rt))); } } if (list.empty()) { /* Empty dropdowns are not allowed */ - list.push_back(std::make_unique(STR_NONE, INVALID_ROADTYPE, true)); + list.push_back(MakeDropDownListStringItem(STR_NONE, INVALID_ROADTYPE, true)); } return list; @@ -1894,12 +1896,12 @@ DropDownList GetScenRoadTypeDropDownList(RoadTramTypes rtts) SetDParam(0, rti->strings.menu_text); SetDParam(1, rti->max_speed / 2); StringID str = rti->max_speed > 0 ? STR_TOOLBAR_RAILTYPE_VELOCITY : STR_JUST_STRING; - list.push_back(std::make_unique(d, rti->gui_sprites.build_x_road, PAL_NONE, str, rt, !HasBit(avail_roadtypes, rt))); + list.push_back(MakeDropDownListIconItem(d, rti->gui_sprites.build_x_road, PAL_NONE, str, rt, !HasBit(avail_roadtypes, rt))); } if (list.empty()) { /* Empty dropdowns are not allowed */ - list.push_back(std::make_unique(STR_NONE, -1, true)); + list.push_back(MakeDropDownListStringItem(STR_NONE, -1, true)); } return list; diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp index d6855bdd6c..21d0a5af0a 100644 --- a/src/script/script_gui.cpp +++ b/src/script/script_gui.cpp @@ -15,9 +15,10 @@ #include "../stringfilter_type.h" #include "../company_base.h" #include "../company_gui.h" +#include "../dropdown_type.h" +#include "../dropdown_func.h" #include "../window_func.h" #include "../network/network.h" -#include "../dropdown_func.h" #include "../hotkeys.h" #include "../company_cmd.h" #include "../misc_cmd.h" @@ -467,7 +468,7 @@ struct ScriptSettingsWindow : public Window { DropDownList list; for (int i = config_item.min_value; i <= config_item.max_value; i++) { - list.push_back(std::make_unique(config_item.labels.find(i)->second, i, false)); + list.push_back(MakeDropDownListStringItem(config_item.labels.find(i)->second, i)); } ShowDropDownListAt(this, std::move(list), old_val, WID_SCRS_SETTING_DROPDOWN, wi_rect, COLOUR_ORANGE); diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index bdcc5e5fcd..8c467dc90a 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -126,6 +126,18 @@ void ShowBaseSetTextfileWindow(TextfileType file_type, const TBaseSet *baseset, new BaseSetTextfileWindow(file_type, baseset, content_type); } +template +DropDownList BuildSetDropDownList(int *selected_index) +{ + int n = T::GetNumSets(); + *selected_index = T::GetIndexOfUsedSet(); + DropDownList list; + for (int i = 0; i < n; i++) { + list.push_back(MakeDropDownListStringItem(T::GetSet(i)->GetListLabel(), i)); + } + return list; +} + std::set _refresh_rates = { 30, 60, 75, 90, 100, 120, 144, 240 }; /** @@ -401,18 +413,18 @@ struct GameOptionsWindow : Window { int i = ¤cy - _currency_specs.data(); if (i == CURRENCY_CUSTOM) continue; if (currency.code.empty()) { - list.push_back(std::make_unique(currency.name, i, HasBit(disabled, i))); + list.push_back(MakeDropDownListStringItem(currency.name, i, HasBit(disabled, i))); } else { SetDParam(0, currency.name); SetDParamStr(1, currency.code); - list.push_back(std::make_unique(STR_GAME_OPTIONS_CURRENCY_CODE, i, HasBit(disabled, i))); + list.push_back(MakeDropDownListStringItem(STR_GAME_OPTIONS_CURRENCY_CODE, i, HasBit(disabled, i))); } } std::sort(list.begin(), list.end(), DropDownListStringItem::NatSortFunc); /* Append custom currency at the end */ - list.push_back(std::make_unique(-1, false)); // separator line - list.push_back(std::make_unique(STR_GAME_OPTIONS_CURRENCY_CUSTOM, CURRENCY_CUSTOM, HasBit(disabled, CURRENCY_CUSTOM))); + list.push_back(MakeDropDownListDividerItem()); // separator line + list.push_back(MakeDropDownListStringItem(STR_GAME_OPTIONS_CURRENCY_CUSTOM, CURRENCY_CUSTOM, HasBit(disabled, CURRENCY_CUSTOM))); break; } @@ -426,7 +438,7 @@ struct GameOptionsWindow : Window { const StringID *items = _autosave_dropdown; for (uint i = 0; *items != INVALID_STRING_ID; items++, i++) { - list.push_back(std::make_unique(*items, i, false)); + list.push_back(MakeDropDownListStringItem(*items, i)); } break; } @@ -448,7 +460,7 @@ struct GameOptionsWindow : Window { SetDParamStr(0, _languages[i].name); } SetDParam(1, (LANGUAGE_TOTAL_STRINGS - _languages[i].missing) * 100 / LANGUAGE_TOTAL_STRINGS); - list.push_back(std::make_unique(hide_percentage ? STR_JUST_RAW_STRING : STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE, i, false)); + list.push_back(MakeDropDownListStringItem(hide_percentage ? STR_JUST_RAW_STRING : STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE, i)); } std::sort(list.begin(), list.end(), DropDownListStringItem::NatSortFunc); break; @@ -461,7 +473,7 @@ struct GameOptionsWindow : Window { for (uint i = 0; i < _resolutions.size(); i++) { SetDParam(0, _resolutions[i].width); SetDParam(1, _resolutions[i].height); - list.push_back(std::make_unique(STR_GAME_OPTIONS_RESOLUTION_ITEM, i, false)); + list.push_back(MakeDropDownListStringItem(STR_GAME_OPTIONS_RESOLUTION_ITEM, i)); } break; @@ -470,7 +482,7 @@ struct GameOptionsWindow : Window { auto i = std::distance(_refresh_rates.begin(), it); if (*it == _settings_client.gui.refresh_rate) *selected_index = i; SetDParam(0, *it); - list.push_back(std::make_unique(STR_GAME_OPTIONS_REFRESH_RATE_ITEM, i, false)); + list.push_back(MakeDropDownListStringItem(STR_GAME_OPTIONS_REFRESH_RATE_ITEM, i)); } break; @@ -2447,15 +2459,15 @@ struct GameSettingsWindow : Window { * we don't want to allow comparing with new game's settings. */ bool disabled = mode == RM_CHANGED_AGAINST_NEW && settings_ptr == &_settings_newgame; - list.push_back(std::make_unique(_game_settings_restrict_dropdown[mode], mode, disabled)); + list.push_back(MakeDropDownListStringItem(_game_settings_restrict_dropdown[mode], mode, disabled)); } break; case WID_GS_TYPE_DROPDOWN: - list.push_back(std::make_unique(STR_CONFIG_SETTING_TYPE_DROPDOWN_ALL, ST_ALL, false)); - list.push_back(std::make_unique(_game_mode == GM_MENU ? STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU : STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME, ST_GAME, false)); - list.push_back(std::make_unique(_game_mode == GM_MENU ? STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU : STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME, ST_COMPANY, false)); - list.push_back(std::make_unique(STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT, ST_CLIENT, false)); + list.push_back(MakeDropDownListStringItem(STR_CONFIG_SETTING_TYPE_DROPDOWN_ALL, ST_ALL)); + list.push_back(MakeDropDownListStringItem(_game_mode == GM_MENU ? STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU : STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME, ST_GAME)); + list.push_back(MakeDropDownListStringItem(_game_mode == GM_MENU ? STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU : STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME, ST_COMPANY)); + list.push_back(MakeDropDownListStringItem(STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT, ST_CLIENT)); break; } return list; @@ -2620,7 +2632,7 @@ struct GameSettingsWindow : Window { DropDownList list; for (int i = sd->min; i <= (int)sd->max; i++) { sd->SetValueDParams(0, i); - list.push_back(std::make_unique(STR_JUST_STRING2, i, false)); + list.push_back(MakeDropDownListStringItem(STR_JUST_STRING2, i)); } ShowDropDownListAt(this, std::move(list), value, WID_GS_SETTING_DROPDOWN, wi_rect, COLOUR_ORANGE); diff --git a/src/settings_gui.h b/src/settings_gui.h index c95345b00a..bca6888ac7 100644 --- a/src/settings_gui.h +++ b/src/settings_gui.h @@ -23,17 +23,7 @@ void DrawDropDownButton(int x, int y, Colours button_colour, bool state, bool cl void DrawBoolButton(int x, int y, bool state, bool clickable); template -DropDownList BuildSetDropDownList(int *selected_index) -{ - int n = T::GetNumSets(); - *selected_index = T::GetIndexOfUsedSet(); - DropDownList list; - for (int i = 0; i < n; i++) { - list.push_back(std::make_unique(T::GetSet(i)->GetListLabel(), i, false)); - } - return list; -} - +DropDownList BuildSetDropDownList(int *selected_index); /* Actually implemented in music_gui.cpp */ void ChangeMusicSet(int index); diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 44b90c0714..3f03a1ae68 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -20,6 +20,7 @@ #include "string_func.h" #include "window_func.h" #include "viewport_func.h" +#include "dropdown_type.h" #include "dropdown_func.h" #include "station_base.h" #include "waypoint_base.h" @@ -542,8 +543,8 @@ public: using DropDownListCargoItem = DropDownCheck>; DropDownList list; - list.push_back(std::make_unique(STR_STATION_LIST_CARGO_FILTER_SELECT_ALL, CargoFilterCriteria::CF_SELECT_ALL)); - list.push_back(std::make_unique(-1)); + list.push_back(MakeDropDownListStringItem(STR_STATION_LIST_CARGO_FILTER_SELECT_ALL, CargoFilterCriteria::CF_SELECT_ALL)); + list.push_back(MakeDropDownListDividerItem()); bool any_hidden = false; @@ -565,8 +566,8 @@ public: } if (!expanded && any_hidden) { - if (list.size() > 2) list.push_back(std::make_unique(-1)); - list.push_back(std::make_unique(STR_STATION_LIST_CARGO_FILTER_EXPAND, CargoFilterCriteria::CF_EXPAND_LIST)); + if (list.size() > 2) list.push_back(MakeDropDownListDividerItem()); + list.push_back(MakeDropDownListStringItem(STR_STATION_LIST_CARGO_FILTER_EXPAND, CargoFilterCriteria::CF_EXPAND_LIST)); } return list; diff --git a/src/story_gui.cpp b/src/story_gui.cpp index 61e8e20965..1ed4e950d9 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -253,11 +253,11 @@ protected: for (const StoryPage *p : this->story_pages) { bool current_page = p->index == this->selected_page_id; if (!p->title.empty()) { - list.push_back(std::make_unique(p->title, p->index, current_page)); + list.push_back(MakeDropDownListStringItem(p->title, p->index, current_page)); } else { /* No custom title => use a generic page title with page number. */ SetDParam(0, page_num); - list.push_back(std::make_unique(STR_STORY_BOOK_GENERIC_PAGE_ITEM, p->index, current_page)); + list.push_back(MakeDropDownListStringItem(STR_STORY_BOOK_GENERIC_PAGE_ITEM, p->index, current_page)); } page_num++; } diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index 843a28faac..194c3c6a4c 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -16,6 +16,7 @@ #include "string_func.h" #include "textfile_gui.h" #include "dropdown_type.h" +#include "dropdown_func.h" #include "gfx_layout.h" #include "debug.h" #include "openttd.h" @@ -534,7 +535,7 @@ void TextfileWindow::AfterLoadMarkdown() DropDownList list; for (size_t line : this->jumplist) { SetDParamStr(0, this->lines[line].text); - list.push_back(std::make_unique(STR_TEXTFILE_JUMPLIST_ITEM, (int)line, false)); + list.push_back(MakeDropDownListStringItem(STR_TEXTFILE_JUMPLIST_ITEM, (int)line)); } ShowDropDownList(this, std::move(list), -1, widget); break; diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index c45db8a0b6..04d7387cb9 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -13,6 +13,8 @@ #include "window_func.h" #include "viewport_func.h" #include "command_func.h" +#include "dropdown_type.h" +#include "dropdown_func.h" #include "vehicle_gui.h" #include "rail_gui.h" #include "road.h" @@ -127,9 +129,9 @@ static void PopupMainToolbarMenu(Window *w, WidgetID widget, const std::initiali int i = 0; for (StringID string : strings) { if (string == STR_NULL) { - list.push_back(std::make_unique(-1, false)); + list.push_back(MakeDropDownListDividerItem()); } else { - list.push_back(std::make_unique(string, i, false)); + list.push_back(MakeDropDownListStringItem(string, i)); i++; } } @@ -156,18 +158,18 @@ static void PopupMainCompanyToolbMenu(Window *w, WidgetID widget, CompanyMask gr if (!_networking) break; /* Add the client list button for the companies menu */ - list.push_back(std::make_unique(STR_NETWORK_COMPANY_LIST_CLIENT_LIST, CTMN_CLIENT_LIST, false)); + list.push_back(MakeDropDownListStringItem(STR_NETWORK_COMPANY_LIST_CLIENT_LIST, CTMN_CLIENT_LIST)); if (_local_company != COMPANY_SPECTATOR) { - list.push_back(std::make_unique(STR_NETWORK_COMPANY_LIST_SPECTATE, CTMN_SPECTATE, false)); + list.push_back(MakeDropDownListStringItem(STR_NETWORK_COMPANY_LIST_SPECTATE, CTMN_SPECTATE)); } break; case WID_TN_STORY: - list.push_back(std::make_unique(STR_STORY_BOOK_SPECTATOR, CTMN_SPECTATOR, false)); + list.push_back(MakeDropDownListStringItem(STR_STORY_BOOK_SPECTATOR, CTMN_SPECTATOR)); break; case WID_TN_GOAL: - list.push_back(std::make_unique(STR_GOALS_SPECTATOR, CTMN_SPECTATOR, false)); + list.push_back(MakeDropDownListStringItem(STR_GOALS_SPECTATOR, CTMN_SPECTATOR)); break; } @@ -250,30 +252,30 @@ enum OptionMenuEntries { static CallBackFunction ToolbarOptionsClick(Window *w) { DropDownList list; - list.push_back(std::make_unique(STR_SETTINGS_MENU_GAME_OPTIONS, OME_GAMEOPTIONS, false)); - list.push_back(std::make_unique(STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE, OME_SETTINGS, false)); + list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_GAME_OPTIONS, OME_GAMEOPTIONS)); + list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE, OME_SETTINGS)); /* Changes to the per-AI settings don't get send from the server to the clients. Clients get * the settings once they join but never update it. As such don't show the window at all * to network clients. */ if (!_networking || _network_server) { - list.push_back(std::make_unique(STR_SETTINGS_MENU_AI_SETTINGS, OME_AI_SETTINGS, false)); - list.push_back(std::make_unique(STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS, OME_GAMESCRIPT_SETTINGS, false)); + list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_AI_SETTINGS, OME_AI_SETTINGS)); + list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS, OME_GAMESCRIPT_SETTINGS)); } - list.push_back(std::make_unique(STR_SETTINGS_MENU_NEWGRF_SETTINGS, OME_NEWGRFSETTINGS, false)); + list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_NEWGRF_SETTINGS, OME_NEWGRFSETTINGS)); if (_game_mode != GM_EDITOR && !_networking) { - list.push_back(std::make_unique(STR_SETTINGS_MENU_SANDBOX_OPTIONS, OME_SANDBOX, false)); + list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_SANDBOX_OPTIONS, OME_SANDBOX)); } - list.push_back(std::make_unique(STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS, OME_TRANSPARENCIES, false)); - list.push_back(std::make_unique(-1, false)); - list.push_back(std::make_unique(HasBit(_display_opt, DO_SHOW_TOWN_NAMES), STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED, OME_SHOW_TOWNNAMES, false)); - list.push_back(std::make_unique(HasBit(_display_opt, DO_SHOW_STATION_NAMES), STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED, OME_SHOW_STATIONNAMES, false)); - list.push_back(std::make_unique(HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES), STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED, OME_SHOW_WAYPOINTNAMES, false)); - list.push_back(std::make_unique(HasBit(_display_opt, DO_SHOW_SIGNS), STR_SETTINGS_MENU_SIGNS_DISPLAYED, OME_SHOW_SIGNS, false)); - list.push_back(std::make_unique(HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS), STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS, OME_SHOW_COMPETITOR_SIGNS, false)); - list.push_back(std::make_unique(HasBit(_display_opt, DO_FULL_ANIMATION), STR_SETTINGS_MENU_FULL_ANIMATION, OME_FULL_ANIMATION, false)); - list.push_back(std::make_unique(HasBit(_display_opt, DO_FULL_DETAIL), STR_SETTINGS_MENU_FULL_DETAIL, OME_FULL_DETAILS, false)); - list.push_back(std::make_unique(IsTransparencySet(TO_HOUSES), STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS, OME_TRANSPARENTBUILDINGS, false)); - list.push_back(std::make_unique(IsTransparencySet(TO_SIGNS), STR_SETTINGS_MENU_TRANSPARENT_SIGNS, OME_SHOW_STATIONSIGNS, false)); + list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS, OME_TRANSPARENCIES)); + list.push_back(MakeDropDownListDividerItem()); + list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_TOWN_NAMES), STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED, OME_SHOW_TOWNNAMES)); + list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_STATION_NAMES), STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED, OME_SHOW_STATIONNAMES)); + list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES), STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED, OME_SHOW_WAYPOINTNAMES)); + list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_SIGNS), STR_SETTINGS_MENU_SIGNS_DISPLAYED, OME_SHOW_SIGNS)); + list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS), STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS, OME_SHOW_COMPETITOR_SIGNS)); + list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_FULL_ANIMATION), STR_SETTINGS_MENU_FULL_ANIMATION, OME_FULL_ANIMATION)); + list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_FULL_DETAIL), STR_SETTINGS_MENU_FULL_DETAIL, OME_FULL_DETAILS)); + list.push_back(MakeDropDownListCheckedItem(IsTransparencySet(TO_HOUSES), STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS, OME_TRANSPARENTBUILDINGS)); + list.push_back(MakeDropDownListCheckedItem(IsTransparencySet(TO_SIGNS), STR_SETTINGS_MENU_TRANSPARENT_SIGNS, OME_SHOW_STATIONSIGNS)); ShowDropDownList(w, std::move(list), 0, WID_TN_SETTINGS, 140, true); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); @@ -405,10 +407,10 @@ enum MapMenuEntries { static CallBackFunction ToolbarMapClick(Window *w) { DropDownList list; - list.push_back(std::make_unique(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP, false)); - list.push_back(std::make_unique(STR_MAP_MENU_EXTRA_VIEWPORT, MME_SHOW_EXTRAVIEWPORTS, false)); - list.push_back(std::make_unique(STR_MAP_MENU_LINGRAPH_LEGEND, MME_SHOW_LINKGRAPH, false)); - list.push_back(std::make_unique(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS, false)); + list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP)); + list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_EXTRA_VIEWPORT, MME_SHOW_EXTRAVIEWPORTS)); + list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_LINGRAPH_LEGEND, MME_SHOW_LINKGRAPH)); + list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS)); PopupMainToolbarMenu(w, WID_TN_SMALL_MAP, std::move(list), 0); return CBF_NONE; } @@ -416,11 +418,11 @@ static CallBackFunction ToolbarMapClick(Window *w) static CallBackFunction ToolbarScenMapTownDir(Window *w) { DropDownList list; - list.push_back(std::make_unique(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP, false)); - list.push_back(std::make_unique(STR_MAP_MENU_EXTRA_VIEWPORT, MME_SHOW_EXTRAVIEWPORTS, false)); - list.push_back(std::make_unique(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS, false)); - list.push_back(std::make_unique(STR_TOWN_MENU_TOWN_DIRECTORY, MME_SHOW_TOWNDIRECTORY, false)); - list.push_back(std::make_unique(STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY, MME_SHOW_INDUSTRYDIRECTORY, false)); + list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP)); + list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_EXTRA_VIEWPORT, MME_SHOW_EXTRAVIEWPORTS)); + list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS)); + list.push_back(MakeDropDownListStringItem(STR_TOWN_MENU_TOWN_DIRECTORY, MME_SHOW_TOWNDIRECTORY)); + list.push_back(MakeDropDownListStringItem(STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY, MME_SHOW_INDUSTRYDIRECTORY)); PopupMainToolbarMenu(w, WID_TE_SMALL_MAP, std::move(list), 0); return CBF_NONE; } @@ -628,13 +630,13 @@ static void AddDropDownLeagueTableOptions(DropDownList &list) { if (LeagueTable::GetNumItems() > 0) { for (LeagueTable *lt : LeagueTable::Iterate()) { - list.push_back(std::make_unique(lt->title, lt->index, false)); + list.push_back(MakeDropDownListStringItem(lt->title, lt->index)); } } else { - list.push_back(std::make_unique(STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE, LTMN_PERFORMANCE_LEAGUE, false)); - list.push_back(std::make_unique(STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING, LTMN_PERFORMANCE_RATING, false)); + list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE, LTMN_PERFORMANCE_LEAGUE)); + list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING, LTMN_PERFORMANCE_RATING)); if (!_networking) { - list.push_back(std::make_unique(STR_GRAPH_MENU_HIGHSCORE, LTMN_HIGHSCORE, false)); + list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_HIGHSCORE, LTMN_HIGHSCORE)); } } } @@ -643,12 +645,12 @@ static CallBackFunction ToolbarGraphsClick(Window *w) { DropDownList list; - list.push_back(std::make_unique(STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH, GRMN_OPERATING_PROFIT_GRAPH, false)); - list.push_back(std::make_unique(STR_GRAPH_MENU_INCOME_GRAPH, GRMN_INCOME_GRAPH, false)); - list.push_back(std::make_unique(STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH, GRMN_DELIVERED_CARGO_GRAPH, false)); - list.push_back(std::make_unique(STR_GRAPH_MENU_PERFORMANCE_HISTORY_GRAPH, GRMN_PERFORMANCE_HISTORY_GRAPH, false)); - list.push_back(std::make_unique(STR_GRAPH_MENU_COMPANY_VALUE_GRAPH, GRMN_COMPANY_VALUE_GRAPH, false)); - list.push_back(std::make_unique(STR_GRAPH_MENU_CARGO_PAYMENT_RATES, GRMN_CARGO_PAYMENT_RATES, false)); + list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH, GRMN_OPERATING_PROFIT_GRAPH)); + list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_INCOME_GRAPH, GRMN_INCOME_GRAPH)); + list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH, GRMN_DELIVERED_CARGO_GRAPH)); + list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_PERFORMANCE_HISTORY_GRAPH, GRMN_PERFORMANCE_HISTORY_GRAPH)); + list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_COMPANY_VALUE_GRAPH, GRMN_COMPANY_VALUE_GRAPH)); + list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_CARGO_PAYMENT_RATES, GRMN_CARGO_PAYMENT_RATES)); if (_toolbar_mode != TB_NORMAL) AddDropDownLeagueTableOptions(list); @@ -913,7 +915,7 @@ static CallBackFunction MenuClickBuildTram(int index) static CallBackFunction ToolbarBuildWaterClick(Window *w) { DropDownList list; - list.push_back(std::make_unique(SPR_IMG_BUILD_CANAL, PAL_NONE, STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION, 0, false)); + list.push_back(MakeDropDownListIconItem(SPR_IMG_BUILD_CANAL, PAL_NONE, STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION, 0)); ShowDropDownList(w, std::move(list), 0, WID_TN_WATER, 140, true); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); return CBF_NONE; @@ -935,7 +937,7 @@ static CallBackFunction MenuClickBuildWater(int) static CallBackFunction ToolbarBuildAirClick(Window *w) { DropDownList list; - list.push_back(std::make_unique(SPR_IMG_AIRPORT, PAL_NONE, STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION, 0, false)); + list.push_back(MakeDropDownListIconItem(SPR_IMG_AIRPORT, PAL_NONE, STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION, 0)); ShowDropDownList(w, std::move(list), 0, WID_TN_AIR, 140, true); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); return CBF_NONE; @@ -957,9 +959,9 @@ static CallBackFunction MenuClickBuildAir(int) static CallBackFunction ToolbarForestClick(Window *w) { DropDownList list; - list.push_back(std::make_unique(SPR_IMG_LANDSCAPING, PAL_NONE, STR_LANDSCAPING_MENU_LANDSCAPING, 0, false)); - list.push_back(std::make_unique(SPR_IMG_PLANTTREES, PAL_NONE, STR_LANDSCAPING_MENU_PLANT_TREES, 1, false)); - list.push_back(std::make_unique(SPR_IMG_SIGN, PAL_NONE, STR_LANDSCAPING_MENU_PLACE_SIGN, 2, false)); + list.push_back(MakeDropDownListIconItem(SPR_IMG_LANDSCAPING, PAL_NONE, STR_LANDSCAPING_MENU_LANDSCAPING, 0)); + list.push_back(MakeDropDownListIconItem(SPR_IMG_PLANTTREES, PAL_NONE, STR_LANDSCAPING_MENU_PLANT_TREES, 1)); + list.push_back(MakeDropDownListIconItem(SPR_IMG_SIGN, PAL_NONE, STR_LANDSCAPING_MENU_PLACE_SIGN, 2)); ShowDropDownList(w, std::move(list), 0, WID_TN_LANDSCAPE, 100, true); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); return CBF_NONE; diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 0768c64b49..e0f9e0dee5 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -26,6 +26,7 @@ #include "vehicle_func.h" #include "autoreplace_gui.h" #include "string_func.h" +#include "dropdown_type.h" #include "dropdown_func.h" #include "timetable.h" #include "articulated_vehicles.h" @@ -427,17 +428,17 @@ DropDownList BaseVehicleListWindow::BuildCargoDropDownList(bool full) const DropDownList list; /* Add item for disabling filtering. */ - list.push_back(std::make_unique(this->GetCargoFilterLabel(CargoFilterCriteria::CF_ANY), CargoFilterCriteria::CF_ANY, false)); + list.push_back(MakeDropDownListStringItem(this->GetCargoFilterLabel(CargoFilterCriteria::CF_ANY), CargoFilterCriteria::CF_ANY)); /* Add item for freight (i.e. vehicles with cargo capacity and with no passenger capacity). */ - list.push_back(std::make_unique(this->GetCargoFilterLabel(CargoFilterCriteria::CF_FREIGHT), CargoFilterCriteria::CF_FREIGHT, false)); + list.push_back(MakeDropDownListStringItem(this->GetCargoFilterLabel(CargoFilterCriteria::CF_FREIGHT), CargoFilterCriteria::CF_FREIGHT)); /* Add item for vehicles not carrying anything, e.g. train engines. */ - list.push_back(std::make_unique(this->GetCargoFilterLabel(CargoFilterCriteria::CF_NONE), CargoFilterCriteria::CF_NONE, false)); + list.push_back(MakeDropDownListStringItem(this->GetCargoFilterLabel(CargoFilterCriteria::CF_NONE), CargoFilterCriteria::CF_NONE)); /* Add cargos */ Dimension d = GetLargestCargoIconSize(); for (const CargoSpec *cs : _sorted_cargo_specs) { if (!full && !HasBit(this->used_cargoes, cs->Index())) continue; - list.push_back(std::make_unique(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index(), false, !HasBit(this->used_cargoes, cs->Index()))); + list.push_back(MakeDropDownListIconItem(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index(), false, !HasBit(this->used_cargoes, cs->Index()))); } return list; @@ -456,23 +457,23 @@ DropDownList BaseVehicleListWindow::BuildActionDropdownList(bool show_autoreplac /* Autoreplace actions. */ if (show_autoreplace) { - list.push_back(std::make_unique(STR_VEHICLE_LIST_REPLACE_VEHICLES, ADI_REPLACE, false)); - list.push_back(std::make_unique(-1, false)); + list.push_back(MakeDropDownListStringItem(STR_VEHICLE_LIST_REPLACE_VEHICLES, ADI_REPLACE)); + list.push_back(MakeDropDownListDividerItem()); } /* Group actions. */ if (show_group) { - list.push_back(std::make_unique(STR_GROUP_ADD_SHARED_VEHICLE, ADI_ADD_SHARED, false)); - list.push_back(std::make_unique(STR_GROUP_REMOVE_ALL_VEHICLES, ADI_REMOVE_ALL, false)); - list.push_back(std::make_unique(-1, false)); + list.push_back(MakeDropDownListStringItem(STR_GROUP_ADD_SHARED_VEHICLE, ADI_ADD_SHARED)); + list.push_back(MakeDropDownListStringItem(STR_GROUP_REMOVE_ALL_VEHICLES, ADI_REMOVE_ALL)); + list.push_back(MakeDropDownListDividerItem()); } else if (show_create) { - list.push_back(std::make_unique(STR_VEHICLE_LIST_CREATE_GROUP, ADI_CREATE_GROUP, false)); - list.push_back(std::make_unique(-1, false)); + list.push_back(MakeDropDownListStringItem(STR_VEHICLE_LIST_CREATE_GROUP, ADI_CREATE_GROUP)); + list.push_back(MakeDropDownListDividerItem()); } /* Depot actions. */ - list.push_back(std::make_unique(STR_VEHICLE_LIST_SEND_FOR_SERVICING, ADI_SERVICE, false)); - list.push_back(std::make_unique(this->vehicle_depot_name[this->vli.vtype], ADI_DEPOT, false)); + list.push_back(MakeDropDownListStringItem(STR_VEHICLE_LIST_SEND_FOR_SERVICING, ADI_SERVICE)); + list.push_back(MakeDropDownListStringItem(this->vehicle_depot_name[this->vli.vtype], ADI_DEPOT)); return list; } From 2047c274454090875ad4aab29077370a1f13cdb7 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 31 Mar 2024 17:31:47 +0100 Subject: [PATCH 224/695] Codechange: Move drop down list item definitions to separate header. This reduces the scope of the definitions which are no longer needed to create the common lists. --- src/CMakeLists.txt | 1 + src/company_gui.cpp | 1 + src/dropdown.cpp | 1 + src/dropdown_common_type.h | 178 +++++++++++++++++++++++++++++++++++++ src/dropdown_type.h | 160 --------------------------------- src/genworld_gui.cpp | 1 + src/settings.cpp | 1 + src/settings_gui.cpp | 1 + src/station_gui.cpp | 1 + src/toolbar_gui.cpp | 1 + 10 files changed, 186 insertions(+), 160 deletions(-) create mode 100644 src/dropdown_common_type.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7951048ee0..597c4331f5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -139,6 +139,7 @@ add_files( driver.cpp driver.h dropdown.cpp + dropdown_common_type.h dropdown_func.h dropdown_type.h economy.cpp diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 74ce478601..a72569f1a9 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -24,6 +24,7 @@ #include "strings_func.h" #include "timer/timer_game_economy.h" #include "dropdown_type.h" +#include "dropdown_common_type.h" #include "tilehighlight_func.h" #include "company_base.h" #include "core/geometry_func.hpp" diff --git a/src/dropdown.cpp b/src/dropdown.cpp index 1e334e365e..7c7285a8e8 100644 --- a/src/dropdown.cpp +++ b/src/dropdown.cpp @@ -10,6 +10,7 @@ #include "stdafx.h" #include "dropdown_type.h" #include "dropdown_func.h" +#include "dropdown_common_type.h" #include "strings_func.h" #include "timer/timer.h" #include "timer/timer_window.h" diff --git a/src/dropdown_common_type.h b/src/dropdown_common_type.h new file mode 100644 index 0000000000..a851c216ec --- /dev/null +++ b/src/dropdown_common_type.h @@ -0,0 +1,178 @@ +/* + * 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 dropdown_common_type.h Common drop down list components. */ + +#ifndef DROPDOWN_COMMON_TYPE_H +#define DROPDOWN_COMMON_TYPE_H + +#include "gfx_func.h" +#include "gfx_type.h" +#include "palette_func.h" +#include "string_func.h" +#include "strings_func.h" +#include "table/strings.h" +#include "window_gui.h" + +/** + * Drop down divider component. + * @tparam TBase Base component. + * @tparam TFs Font size -- used to determine height. + */ +template +class DropDownDivider : public TBase { +public: + template + explicit DropDownDivider(Args&&... args) : TBase(std::forward(args)...) {} + + bool Selectable() const override { return false; } + uint Height() const override { return std::max(GetCharacterHeight(TFs), this->TBase::Height()); } + + void Draw(const Rect &full, const Rect &, bool, Colours bg_colour) const override + { + uint8_t c1 = GetColourGradient(bg_colour, SHADE_DARK); + uint8_t c2 = GetColourGradient(bg_colour, SHADE_LIGHTEST); + + int mid = CenterBounds(full.top, full.bottom, 0); + GfxFillRect(full.left, mid - WidgetDimensions::scaled.bevel.bottom, full.right, mid - 1, c1); + GfxFillRect(full.left, mid, full.right, mid + WidgetDimensions::scaled.bevel.top - 1, c2); + } +}; + +/** + * Drop down string component. + * @tparam TBase Base component. + * @tparam TFs Font size. + * @tparam TEnd Position string at end if true, or start if false. + */ +template +class DropDownString : public TBase { + std::string string; ///< String to be drawn. + Dimension dim; ///< Dimensions of string. +public: + template + explicit DropDownString(StringID string, Args&&... args) : TBase(std::forward(args)...) + { + this->SetString(GetString(string)); + } + + template + explicit DropDownString(const std::string &string, Args&&... args) : TBase(std::forward(args)...) + { + SetDParamStr(0, string); + this->SetString(GetString(STR_JUST_RAW_STRING)); + } + + void SetString(std::string &&string) + { + this->string = std::move(string); + this->dim = GetStringBoundingBox(this->string, TFs); + } + + uint Height() const override + { + return std::max(this->dim.height, this->TBase::Height()); + } + + uint Width() const override { return this->dim.width + this->TBase::Width(); } + + void Draw(const Rect &full, const Rect &r, bool sel, Colours bg_colour) const override + { + bool rtl = TEnd ^ (_current_text_dir == TD_RTL); + DrawStringMultiLine(r.WithWidth(this->dim.width, rtl), this->string, this->GetColour(sel), SA_CENTER, false, TFs); + this->TBase::Draw(full, r.Indent(this->dim.width, rtl), sel, bg_colour); + } + + /** + * Natural sorting comparator function for DropDownList::sort(). + * @param first Left side of comparison. + * @param second Right side of comparison. + * @return true if \a first precedes \a second. + * @warning All items in the list need to be derivates of DropDownListStringItem. + */ + static bool NatSortFunc(std::unique_ptr const &first, std::unique_ptr const &second) + { + const std::string &str1 = static_cast(first.get())->string; + const std::string &str2 = static_cast(second.get())->string; + return StrNaturalCompare(str1, str2) < 0; + } +}; + +/** + * Drop down icon component. + * @tparam TBase Base component. + * @tparam TEnd Position icon at end if true, or start if false. + */ +template +class DropDownIcon : public TBase { + SpriteID sprite; ///< Sprite ID to be drawn. + PaletteID palette; ///< Palette ID to use. + Dimension dsprite; ///< Bounding box dimensions of sprite. + Dimension dbounds; ///< Bounding box dimensions of bounds. +public: + template + explicit DropDownIcon(SpriteID sprite, PaletteID palette, Args&&... args) : TBase(std::forward(args)...), sprite(sprite), palette(palette) + { + this->dsprite = GetSpriteSize(this->sprite); + this->dbounds = this->dsprite; + } + + template + explicit DropDownIcon(const Dimension &dim, SpriteID sprite, PaletteID palette, Args&&... args) : TBase(std::forward(args)...), sprite(sprite), palette(palette), dbounds(dim) + { + this->dsprite = GetSpriteSize(this->sprite); + } + + uint Height() const override { return std::max(this->dbounds.height, this->TBase::Height()); } + uint Width() const override { return this->dbounds.width + WidgetDimensions::scaled.hsep_normal + this->TBase::Width(); } + + void Draw(const Rect &full, const Rect &r, bool sel, Colours bg_colour) const override + { + bool rtl = TEnd ^ (_current_text_dir == TD_RTL); + Rect ir = r.WithWidth(this->dbounds.width, rtl); + DrawSprite(this->sprite, this->palette, CenterBounds(ir.left, ir.right, this->dsprite.width), CenterBounds(r.top, r.bottom, this->dsprite.height)); + this->TBase::Draw(full, r.Indent(this->dbounds.width + WidgetDimensions::scaled.hsep_normal, rtl), sel, bg_colour); + } +}; + +/** + * Drop down checkmark component. + * @tparam TBase Base component. + * @tparam TFs Font size. + * @tparam TEnd Position checkmark at end if true, or start if false. + */ +template +class DropDownCheck : public TBase { + bool checked; ///< Is item checked. + Dimension dim; ///< Dimension of checkmark. +public: + template + explicit DropDownCheck(bool checked, Args&&... args) : TBase(std::forward(args)...), checked(checked) + { + this->dim = GetStringBoundingBox(STR_JUST_CHECKMARK, TFs); + } + + uint Height() const override { return std::max(this->dim.height, this->TBase::Height()); } + uint Width() const override { return this->dim.width + WidgetDimensions::scaled.hsep_wide + this->TBase::Width(); } + + void Draw(const Rect &full, const Rect &r, bool sel, Colours bg_colour) const override + { + bool rtl = TEnd ^ (_current_text_dir == TD_RTL); + if (this->checked) { + DrawStringMultiLine(r.WithWidth(this->dim.width, rtl), STR_JUST_CHECKMARK, this->GetColour(sel), SA_CENTER, false, TFs); + } + this->TBase::Draw(full, r.Indent(this->dim.width + WidgetDimensions::scaled.hsep_wide, rtl), sel, bg_colour); + } +}; + +/* Commonly used drop down list items. */ +using DropDownListDividerItem = DropDownDivider; +using DropDownListStringItem = DropDownString; +using DropDownListIconItem = DropDownIcon>; +using DropDownListCheckedItem = DropDownCheck>; + +#endif /* DROPDOWN_COMMON_TYPE_H */ diff --git a/src/dropdown_type.h b/src/dropdown_type.h index fd102b43f2..1a6cb71eb1 100644 --- a/src/dropdown_type.h +++ b/src/dropdown_type.h @@ -14,9 +14,6 @@ #include "gfx_func.h" #include "gfx_type.h" #include "palette_func.h" -#include "string_func.h" -#include "strings_func.h" -#include "table/strings.h" #include "window_gui.h" /** @@ -47,163 +44,6 @@ public: } }; -/** - * Drop down divider component. - * @tparam TBase Base component. - * @tparam TFs Font size -- used to determine height. - */ -template -class DropDownDivider : public TBase { -public: - template - explicit DropDownDivider(Args&&... args) : TBase(std::forward(args)...) {} - - bool Selectable() const override { return false; } - uint Height() const override { return std::max(GetCharacterHeight(TFs), this->TBase::Height()); } - - void Draw(const Rect &full, const Rect &, bool, Colours bg_colour) const override - { - uint8_t c1 = GetColourGradient(bg_colour, SHADE_DARK); - uint8_t c2 = GetColourGradient(bg_colour, SHADE_LIGHTEST); - - int mid = CenterBounds(full.top, full.bottom, 0); - GfxFillRect(full.left, mid - WidgetDimensions::scaled.bevel.bottom, full.right, mid - 1, c1); - GfxFillRect(full.left, mid, full.right, mid + WidgetDimensions::scaled.bevel.top - 1, c2); - } -}; - -/** - * Drop down string component. - * @tparam TBase Base component. - * @tparam TFs Font size. - * @tparam TEnd Position string at end if true, or start if false. - */ -template -class DropDownString : public TBase { - std::string string; ///< String to be drawn. - Dimension dim; ///< Dimensions of string. -public: - template - explicit DropDownString(StringID string, Args&&... args) : TBase(std::forward(args)...) - { - this->SetString(GetString(string)); - } - - template - explicit DropDownString(const std::string &string, Args&&... args) : TBase(std::forward(args)...) - { - SetDParamStr(0, string); - this->SetString(GetString(STR_JUST_RAW_STRING)); - } - - void SetString(std::string &&string) - { - this->string = std::move(string); - this->dim = GetStringBoundingBox(this->string, TFs); - } - - uint Height() const override - { - return std::max(this->dim.height, this->TBase::Height()); - } - - uint Width() const override { return this->dim.width + this->TBase::Width(); } - - void Draw(const Rect &full, const Rect &r, bool sel, Colours bg_colour) const override - { - bool rtl = TEnd ^ (_current_text_dir == TD_RTL); - DrawStringMultiLine(r.WithWidth(this->dim.width, rtl), this->string, this->GetColour(sel), SA_CENTER, false, TFs); - this->TBase::Draw(full, r.Indent(this->dim.width, rtl), sel, bg_colour); - } - - /** - * Natural sorting comparator function for DropDownList::sort(). - * @param first Left side of comparison. - * @param second Right side of comparison. - * @return true if \a first precedes \a second. - * @warning All items in the list need to be derivates of DropDownListStringItem. - */ - static bool NatSortFunc(std::unique_ptr const &first, std::unique_ptr const &second) - { - const std::string &str1 = static_cast(first.get())->string; - const std::string &str2 = static_cast(second.get())->string; - return StrNaturalCompare(str1, str2) < 0; - } -}; - -/** - * Drop down icon component. - * @tparam TBase Base component. - * @tparam TEnd Position icon at end if true, or start if false. - */ -template -class DropDownIcon : public TBase { - SpriteID sprite; ///< Sprite ID to be drawn. - PaletteID palette; ///< Palette ID to use. - Dimension dsprite; ///< Bounding box dimensions of sprite. - Dimension dbounds; ///< Bounding box dimensions of bounds. -public: - template - explicit DropDownIcon(SpriteID sprite, PaletteID palette, Args&&... args) : TBase(std::forward(args)...), sprite(sprite), palette(palette) - { - this->dsprite = GetSpriteSize(this->sprite); - this->dbounds = this->dsprite; - } - - template - explicit DropDownIcon(const Dimension &dim, SpriteID sprite, PaletteID palette, Args&&... args) : TBase(std::forward(args)...), sprite(sprite), palette(palette), dbounds(dim) - { - this->dsprite = GetSpriteSize(this->sprite); - } - - uint Height() const override { return std::max(this->dbounds.height, this->TBase::Height()); } - uint Width() const override { return this->dbounds.width + WidgetDimensions::scaled.hsep_normal + this->TBase::Width(); } - - void Draw(const Rect &full, const Rect &r, bool sel, Colours bg_colour) const override - { - bool rtl = TEnd ^ (_current_text_dir == TD_RTL); - Rect ir = r.WithWidth(this->dbounds.width, rtl); - DrawSprite(this->sprite, this->palette, CenterBounds(ir.left, ir.right, this->dsprite.width), CenterBounds(r.top, r.bottom, this->dsprite.height)); - this->TBase::Draw(full, r.Indent(this->dbounds.width + WidgetDimensions::scaled.hsep_normal, rtl), sel, bg_colour); - } -}; - -/** - * Drop down checkmark component. - * @tparam TBase Base component. - * @tparam TFs Font size. - * @tparam TEnd Position checkmark at end if true, or start if false. - */ -template -class DropDownCheck : public TBase { - bool checked; ///< Is item checked. - Dimension dim; ///< Dimension of checkmark. -public: - template - explicit DropDownCheck(bool checked, Args&&... args) : TBase(std::forward(args)...), checked(checked) - { - this->dim = GetStringBoundingBox(STR_JUST_CHECKMARK, TFs); - } - - uint Height() const override { return std::max(this->dim.height, this->TBase::Height()); } - uint Width() const override { return this->dim.width + WidgetDimensions::scaled.hsep_wide + this->TBase::Width(); } - - void Draw(const Rect &full, const Rect &r, bool sel, Colours bg_colour) const override - { - bool rtl = TEnd ^ (_current_text_dir == TD_RTL); - if (this->checked) { - DrawStringMultiLine(r.WithWidth(this->dim.width, rtl), STR_JUST_CHECKMARK, this->GetColour(sel), SA_CENTER, false, TFs); - } - this->TBase::Draw(full, r.Indent(this->dim.width + WidgetDimensions::scaled.hsep_wide, rtl), sel, bg_colour); - } -}; - -/* Commonly used drop down list items. */ -using DropDownListDividerItem = DropDownDivider; -using DropDownListStringItem = DropDownString; -using DropDownListIconItem = DropDownIcon>; -using DropDownListCheckedItem = DropDownCheck>; - /** * A drop down list is a collection of drop down list items. */ diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index 723df35436..8c34d91f8e 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -19,6 +19,7 @@ #include "fios.h" #include "string_func.h" #include "dropdown_type.h" +#include "dropdown_common_type.h" #include "dropdown_func.h" #include "querystring_gui.h" #include "town.h" diff --git a/src/settings.cpp b/src/settings.cpp index 6ba8df735e..bb4f0966d6 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -32,6 +32,7 @@ #include "command_func.h" #include "console_func.h" #include "genworld.h" +#include "string_func.h" #include "window_func.h" #include "company_func.h" #include "rev.h" diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 8c467dc90a..6304b7771e 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -21,6 +21,7 @@ #include "string_func.h" #include "dropdown_type.h" #include "dropdown_func.h" +#include "dropdown_common_type.h" #include "slider_func.h" #include "highscore.h" #include "base_media_base.h" diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 3f03a1ae68..a9c45fb5da 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -21,6 +21,7 @@ #include "window_func.h" #include "viewport_func.h" #include "dropdown_type.h" +#include "dropdown_common_type.h" #include "dropdown_func.h" #include "station_base.h" #include "waypoint_base.h" diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 04d7387cb9..26fcfa798d 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -15,6 +15,7 @@ #include "command_func.h" #include "dropdown_type.h" #include "dropdown_func.h" +#include "dropdown_common_type.h" #include "vehicle_gui.h" #include "rail_gui.h" #include "road.h" From 72b5c6a5918ebe9568db1c4cd7c648086099ee4f Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 2 Apr 2024 04:41:36 +0000 Subject: [PATCH 225/695] Update: Translations from eints vietnamese: 1 change by KhoiCanDev greek: 83 changes by gh658804 german: 3 changes by Wuzzy2 ukrainian: 54 changes by Quantom2 spanish: 4 changes by MontyMontana portuguese (brazilian): 2 changes by pasantoro --- src/lang/afrikaans.txt | 2 - src/lang/arabic_egypt.txt | 2 - src/lang/basque.txt | 2 - src/lang/belarusian.txt | 2 - src/lang/brazilian_portuguese.txt | 6 +- src/lang/bulgarian.txt | 2 - src/lang/catalan.txt | 2 - src/lang/croatian.txt | 2 - src/lang/czech.txt | 2 - src/lang/danish.txt | 2 - src/lang/dutch.txt | 2 - src/lang/english_AU.txt | 2 - src/lang/english_US.txt | 2 - src/lang/esperanto.txt | 2 - src/lang/estonian.txt | 2 - src/lang/faroese.txt | 2 - src/lang/finnish.txt | 2 - src/lang/french.txt | 2 - src/lang/frisian.txt | 2 - src/lang/gaelic.txt | 2 - src/lang/galician.txt | 2 - src/lang/german.txt | 8 +- src/lang/greek.txt | 168 +++++++++++++++--------------- src/lang/hebrew.txt | 2 - src/lang/hungarian.txt | 2 - src/lang/icelandic.txt | 2 - src/lang/indonesian.txt | 2 - src/lang/irish.txt | 2 - src/lang/italian.txt | 2 - src/lang/japanese.txt | 2 - src/lang/korean.txt | 2 - src/lang/latin.txt | 2 - src/lang/latvian.txt | 2 - src/lang/lithuanian.txt | 2 - src/lang/luxembourgish.txt | 2 - src/lang/malay.txt | 2 - src/lang/norwegian_bokmal.txt | 2 - src/lang/norwegian_nynorsk.txt | 2 - src/lang/persian.txt | 2 - src/lang/polish.txt | 2 - src/lang/portuguese.txt | 2 - src/lang/romanian.txt | 2 - src/lang/russian.txt | 2 - src/lang/serbian.txt | 2 - src/lang/simplified_chinese.txt | 2 - src/lang/slovak.txt | 2 - src/lang/slovenian.txt | 2 - src/lang/spanish.txt | 10 +- src/lang/spanish_MX.txt | 2 - src/lang/swedish.txt | 2 - src/lang/tamil.txt | 2 - src/lang/thai.txt | 2 - src/lang/traditional_chinese.txt | 2 - src/lang/turkish.txt | 2 - src/lang/ukrainian.txt | 110 ++++++++++--------- src/lang/vietnamese.txt | 4 +- src/lang/welsh.txt | 2 - 57 files changed, 147 insertions(+), 261 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 1464775f3b..39c3d41dfa 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -4258,9 +4258,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Beraamde STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Stoor van speletjie is nog besig,{}wag asb tot dit klaar is! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Outostoor het misluk STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan nie skyf lees nie -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Speletjie Spaar Misluk{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan nie lêer uitvee nie -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Speletjie Laai Misluk{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interne fout: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Gebreekte gespaarde spel - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spaarspeletjie is gemaak met nuwer uitgawe diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 8372a2ecfa..9a0bbec625 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -4058,9 +4058,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}الدخ STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}الحفظ مازال جاريا الآن{}الرجاء الأنتظار حتر ينتهي STR_ERROR_AUTOSAVE_FAILED :{WHITE}فشل الحفظ التلقائي STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}لا يمكن قرائة القرص -STR_ERROR_GAME_SAVE_FAILED :{WHITE}فشل حفظ اللعبة{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}لا يمكن حذف الملف -STR_ERROR_GAME_LOAD_FAILED :{WHITE}فشل فتح اللعبة{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :خطأ داخلي: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :لعبه محفوظه غير صالحه - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :اللعبة حفظت بنسخة أحدث diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 1cf05d136b..bfbd18e830 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -4014,9 +4014,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Gutxi go STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Oraindik artxiboa gordetzen,{}mesedez itxaron amaitu arte! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Gordetze automatikoak huts egin du STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Ezin izan da driverra irakurri -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Jokoa gordetzeak huts egin du{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Ezin izan da artxiboa ezabatu -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Jokoa kargatzeak huts egin du{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Barne akatsa: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Gordetako jokoa hautsia dago - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Gordetako jokoa bertsio berriago batekin egin da diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 70152eab27..7f2ed1e1b9 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -5250,9 +5250,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Мерк STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ідзе захаваньне,{}калі ласка, дачакайцеся завяршэньня! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Памылка аўтазахаваньня STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Не атрымалася прачытаць дыск -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Немагчыма захаваць гульню{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Немагчыма выдаліць файл -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Немагчыма загрузіць гульню{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Унутраная памылка: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Файл пашкоджаны — {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Захаваньне зроблена ў больш новай вэрсіі diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 609943fac6..aa8b7d6a99 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -668,7 +668,7 @@ STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Total: STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}Número de veículos que geraram lucro no último ano. Isso inclui veículos rodoviários, trens, embarcações e aeronaves STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Número de veículos que geraram lucro no último período. Isso inclui veículos rodoviários, trens, embarcações e aeronaves -STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Número de estações atendidas recentemente. Estações de trem, paradas de ônibus, aeroportos, etc. são contados separadamente, mesmo que pertençam à mesma estação +STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Número de estações atendidas recentemente. Estações de trem, paradas de ônibus, aeroportos, etc., são contados separadamente, mesmo que pertençam à mesma estação STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}Lucro do veículo com o menor rendimento (apenas veículos com mais de dois anos são considerados) STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}Lucro do veículo com o menor rendimento (apenas veículos com mais de dois períodos são considerados) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Quantia de dinheiro obtida no trimestre com o menor lucro dos últimos 12 trimestres @@ -1749,7 +1749,7 @@ STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Mostrar caminho STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Usar uma cor diferente nos trajetos reservados para auxiliar na solução de problemas com trens que se recusam a entrar em seções controlados por sinais de caminho STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Manter as ferramentas de construção ativas após o uso: {STRING} -STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Manter as ferramentas de construção de pontes, túneis, etc. abertas após o uso +STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Manter as ferramentas de construção de pontes, túneis, etc., abertas após o uso STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Remover automaticamente os sinais durante a construção de ferrovias: {STRING} STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Remover automaticamente os sinais durante a construção de ferrovias se os sinais estiverem no caminho. Isso pode, potencialmente, causar acidentes de trens @@ -4900,9 +4900,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Receita STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravação ainda sendo executada,{}por favor aguarde até terminar! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Salvamento automático falhou STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Não é possível ler a unidade -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Salvar Jogo Falhou{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Não é possível apagar o arquivo -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Abrir Jogo Falhou{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erro interno: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Jogo salvo está corrompido - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Jogo salvo foi feito com uma versão mais recente diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index b87e821ef3..a4d9052309 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -4290,9 +4290,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Приб STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Записването продължава,{}моля изчакайте да сръши! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Автозапазването е неуспешно STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Не може да прочете диска -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Запазването на играта е неуспешно{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Изтриването на файла е неуспешно -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Отварянето на играта е неуспешно{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Вътрешна грешка: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Запазената игра е повредена - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Запазената игра е направена от по-нова версия diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index d7d186a725..113987983f 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -4900,9 +4900,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Ingresso STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Es desa la partida.{}Espera que acabi l'operació! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Ha fallat el desat automàtic STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Impossible llegir la unitat de disc -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Error guardant la partida{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Impossible esborrar l'arxiu -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Error carregant la partida{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Error Intern: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :L'arxiu de la partida està corromput - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :La partida està desada amb una versió més moderna diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 724e182ef3..1b4c9abb6f 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -4444,9 +4444,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Predviđ STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Spremanje još u tijeku,{}molimo pričekajte dok se ne završi! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatsko spremanje neuspješno STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Ne mogu pročitati disk -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Spremanje igre nije uspjelo{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Ne mogu obrisati datoteku -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Učitavanje igre nije uspjelo{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interna greška: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Pokvarena spremljena igra - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spremljena igra je stvorena s novijom verzijom diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 7789f85d76..bab4f69f32 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -4988,9 +4988,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Odhadova STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ukládání ještě běží,{}počkej prosím, než doběhne! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatické uložení selhalo STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Nelze číst z jednotky -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Uložení hry selhalo{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Nelze smazat soubor -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Nelze otevřít hru{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Vnitřní chyba: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Poškozená hra - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Uložená hra je z novější verze diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 144d89d38b..6ac32bfd39 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -4899,9 +4899,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Anslået STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gemmer stadig,{}vent venligst! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Fejl under autogem STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan ikke læse drevet -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Fejl under gemning af spil{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan ikke slette fil -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Fejl under indlæsning af spil{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Intern fejl: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Ødelagt gemt spil - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spillet er gemt med en nyere version diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index ec62376bf9..32c7857259 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -4899,9 +4899,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Verwacht STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Opslaan van spel is nog bezig,{}Wacht tot dit voltooid is! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatisch opslaan mislukt STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan niet lezen van schijf -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Opslaan spel mislukt{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan bestand niet verwijderen -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Laden spel mislukt{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interne fout: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Opgeslagen spel beschadigd - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Opgeslagen spel hoort bij een nieuwere versie diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 7a041367d2..9f4762c403 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -4899,9 +4899,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Estimate STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Saving still in progress,{}please wait until it is finished! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autosave failed STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Unable to read drive -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Game Save Failed{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Unable to delete file -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Game Load Failed{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Internal error: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Broken savegame - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Savegame is made with newer version diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 13fba7db15..f2e68f6a6e 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -4899,9 +4899,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Estimate STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Saving still in progress,{}please wait until it is finished! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autosave failed STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Unable to read drive -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Game Save Failed{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Unable to delete file -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Game Load Failed{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Internal error: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Broken savegame - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Savegame is made with newer version diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 56e91dbcf5..a9c026defe 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -4772,9 +4772,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Atendata STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ankoraŭ konservas,{}bv atendi ĝis finiĝo! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Fiaskis aŭtomate konservi STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Ne eblas legi diskon -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Ludkonservado Fiaskis{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Ne eblas forviŝi dosieron -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Ludŝarĝado Fiaskis{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interna eraro: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Rompa konservludo - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Tiu ĉi ludo estis konservita per pli nova versio diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index db972c203b..da14456b8d 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -4953,9 +4953,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Eeldatav STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ikka salvestamisel,{}palun oota salvestuse lõpuni! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Välpsalvestus ebaõnnestus STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Ei suuda kettalt lugeda -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Mängu salvestamine nurjus{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Faili ei saa kustutada -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Mängu laadimine nurjus{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Süsteemi viga: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Katkine salvestus - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Salvestus on tehtud uuemas osas diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 64d5129a6b..de440942b3 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -3673,9 +3673,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Inntøku STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Goyming er enn í gongd,{}vinarliga bíða til ta er liðugt! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Sjálvgoymsla eydnaðist ikki STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Ikki ført fyri at lesa drev -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Eydnaðist ikki at goyma spæl{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Ikki ført fyri at strika fílu -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Eydnaðist ikki at heinta spæl{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Innanhýsis villa: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Goymda spæli er broti - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Goymda spæli er frá nýggjari útgávu diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index b2c3a9f219..e8dc798d97 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -4899,9 +4899,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Arvioitu STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Tallentaminen käynnissä,{}odota, kunnes se päättyy! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automaattitallennus epäonnistui. STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Asemaa ei voi lukea. -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Tallennus epäonnistui.{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Tiedostoa ei voi poistaa. -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Lataus epäonnistui.{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Sisäinen virhe: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Viallinen tallennus – {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Tallennus on tehty uudemmalla versiolla diff --git a/src/lang/french.txt b/src/lang/french.txt index 88351d273f..bf07d3f45a 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -4900,9 +4900,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Revenu e STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Sauvegarde en cours...{}Veuillez attendre la fin du processus{NBSP}! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Échec de l'enregistrement automatique STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Impossible d'accéder au disque -STR_ERROR_GAME_SAVE_FAILED :{WHITE}La sauvegarde a échoué{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Impossible de supprimer le fichier -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Le chargement a échoué{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erreur interne{NBSP}: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Sauvegarde corrompue − {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Sauvegarde modifiée avec une version plus récente diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index fd4860a2ac..b0c7608282 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -3861,9 +3861,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Dit gjit STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Spul noch an it bewarjen,{}graach nog efkes geduld! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatysk opslaan net slagge STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Koe net fan 'e skiif lêze -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Opslaan Mislearre{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kin bestân net fuortsmite -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Laden Mislearre{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interne flater: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Stikkene savegame - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spul is makke mei in neiere fersje diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index c164597285..59b87fb62d 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -4401,9 +4401,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Tuairmse STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ga shàbhaladh fhathast,{}fuirich greis gus am bi e deiseil! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Dh’fhàillig leis an fhèin-shàbhaladh STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Cha ghabh an draibh leughadh -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Dh’fhàillig le sàbhaladh a’ gheama{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Cha ghabh am faidhle sguabadh às -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Dh’fhàillig le luchdadh a’ gheama{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Mearachd taobh a-staigh: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Tha an geama air shàbhaladh briste - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Chaidh an sàbhaladh seo a dhèanamh le tionndadh as ùire dhen gheama diff --git a/src/lang/galician.txt b/src/lang/galician.txt index dfd284472d..86dd8f30c6 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -4898,9 +4898,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Ingreso STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravación en progreso,{}por favor agarda ata que remate! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autogravado fallido STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}No se pode lee-la unidade -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Gravación da partida fallida{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Non se pode borra-lo arquivo -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Carga da partida fallida{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erro interno: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Partida gravada corrupta - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :A partida gravouse cunha versión máis nova do xogo diff --git a/src/lang/german.txt b/src/lang/german.txt index db7508884e..73a9b4d2b0 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -4450,10 +4450,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kapazit STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Transfer-Einnahmen: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Wartungsintervall: {LTBLUE}{COMMA}{NBSP}Tag{P "" e} {BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Wartungsintervall: {LTBLUE}{COMMA}{NBSP}Minute{P "" n}{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Wartungsintervall: {LTBLUE}{COMMA}{NBSP}Minuten{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Wartungsintervall: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Zuletzt gewartet: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Zuletzt gewartet: vor {LTBLUE}{NUM} Minuten +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Zuletzt gewartet: vor {LTBLUE}{NUM} Minute{P "" n} STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Erhöhe Serviceintervall um 10 Tage. Strg+Klick um das Serviceintervall um 5 Tage zu erhöhen STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Erhöhe Serviceintervall um 5 Minuten. Strg+Klick um das Serviceintervall um 1 Minute zu erhöhen STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Erhöhe Serviceintervall um 10 Prozent. Strg+Klick um das Serviceintervall um 5 Prozent zu erhöhen @@ -4644,7 +4644,7 @@ STR_ORDER_REFIT_ORDER :(auf {STRING} u STR_ORDER_REFIT_STOP_ORDER :(auf {STRING} umrüsten und stoppen) STR_ORDER_STOP_ORDER :(Stopp) -STR_ORDER_WAIT_TO_UNBUNCH :(warte auf Entpulkung) +STR_ORDER_WAIT_TO_UNBUNCH :(Warte auf Entpulkung) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Station unbenutzbar){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4900,9 +4900,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Geschät STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Speichern läuft,{}bitte warten, bis es beendet ist! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autosicherung fehlgeschlagen STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Laufwerk nicht betriebsbereit -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Spielspeicherung fehlgeschlagen{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Datei kann nicht gelöscht werden -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Laden des Spieles fehlgeschlagen{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interner Fehler: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Spielstandsdatei defekt – {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spielstand wurde mit einer neueren Spielversion erstellt diff --git a/src/lang/greek.txt b/src/lang/greek.txt index e03ed82e41..18af4e3dd8 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -344,7 +344,7 @@ STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Κλεί STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Τίτλος παραθύρου - σύρετε το για να το μετακινήσετε STR_TOOLTIP_SHADE :{BLACK}Σκίαση παραθύρου - Εμφάνιση μόνο της μπάρας τιτλου STR_TOOLTIP_DEBUG :{BLACK}Εμφάνιση πληροφοριών αποσφαλμάτωσης για NewGRF -STR_TOOLTIP_DEFSIZE :{BLACK}Κλιμακώνει το παράθυρο στο προκαθορισμένο μέγεθος. Με Ctrl+Click αποθηκεύεται το τρέχον μέγεθος ως προκαθορισμένο +STR_TOOLTIP_DEFSIZE :{BLACK}Κλιμακώνει το παράθυρο στο προκαθορισμένο μέγεθος. Με Ctrl+Κλικ αποθηκεύεται το τρέχον μέγεθος ως προκαθορισμένο STR_TOOLTIP_STICKY :{BLACK}Σημειώστε αυτό το παραθύρο ωστέ να μην κλείνει από το πλήκτρο «Κλείσιμο Όλων των Παραθύρων». Πατήστε Ctrl+Κλικ για να αποθηκεύσετε την κατάσταση απο επιλογή STR_TOOLTIP_RESIZE :{BLACK}Κάντε κλίκ και σύρετε για να αλλάξετε το μέγεθος του παραθύρου STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Εναλλαγή μεγάλου/μικρού παραθύρου @@ -972,7 +972,7 @@ STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL :{BIG_FONT}{BLAC STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM :{BIG_FONT}{BLACK}Βελτιωμένες μέθοδοι καλλιέργειας στην {INDUSTRY} αναμένονται να διπλασιάσουν την παραγωγή! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK} Η παραγωγή {STRING.geniki} στ{G o η ο} {INDUSTRY} αυξήθηκε κατά {COMMA}%! STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}Η παραγωγή στ{G o η ο} {INDUSTRY} μειώθηκε κατά 50% -STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Μόλυνση από έντομα προκαλεί καταστροφή στη {INDUSTRY}!{}Η παραγωγή μειώθηκε κατά 50% +STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Προσβολή από έντομα προκαλεί καταστροφή στη {INDUSTRY}!{}Η παραγωγή μειώθηκε κατά 50% STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK} Η παραγωγή {STRING.geniki} στ{G o η ο} {INDUSTRY} μειώθηκε κατά {COMMA}%! ###length VEHICLE_TYPES @@ -1460,13 +1460,13 @@ STR_CONFIG_SETTING_INFLATION :Πληθωρι STR_CONFIG_SETTING_INFLATION_HELPTEXT :Ενεργοποίηση του πληθωρισμού στην οικονομία, όπου τα κόστη αυξάνονται ελάχιστα ταχύτερα από τις πληρωμές STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Μέγιστο μήκος γέφυρας: {STRING} -STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Μέγιστο μήκος για κτίσιμο γεφυρών +STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Μέγιστο μήκος για κατασκευή γεφυρών STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT :Μέγιστο ύψος γέφυρας: {STRING} -STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Μέγιστο ύψος για το χτίσιμο γεφυρών +STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Μέγιστο ύψος για την κατασκευή γεφυρών STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Μέγιστο μήκος σήραγγας: {STRING} -STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Μέγιστο μήκος για κτίσιμο συράγγων +STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Μέγιστο μήκος για κατασκευή σηράγγων STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Χειροκίνητη μέθοδος κατασκευής βιομηχανιών πρώτων υλών: {STRING} STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Μέθοδος χρηματοδότησης πρωτογενούς βιομηχανίας. «Καμία» σημαίνει ότι δεν γίνεται να χρηματοδοτηθεί καμία βιομηχανία, «Αναζήτηση» σημαίνει ότι η χρηματοδότηση είναι εφικτή, αλλά η κατασκευή πραγματοποιείται σε τυχαίο σημείο του χάρτη και είναι πιθανό να αποτύχει, «Όπως οι άλλες βιομηχανίες» σημαίνει πως οι πρωτογενείς βιομηχανίες είναι εφικτό να κατασκευαστούν από εταιρείες όπως οι δευτερογενείς βιομηχανίες σε οποιαδήποτε θέση θέλουν @@ -1476,7 +1476,7 @@ STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :Όπως οι STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Διερεύνηση προοπτικών STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Επίπεδη περιοχή γύρω από βιομηχανίες: {STRING} -STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Επίπεδος χώρος γύρω από μια βιομηχανία. Αυτό εξασφαλίζει ότι θα παραμείνει διαθέσιμος κενός χώρος γύρω από μια βιομηχανία για να κτισθούν γραμμές, κλπ +STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Επίπεδος χώρος γύρω από μια βιομηχανία. Αυτό εξασφαλίζει ότι θα παραμείνει διαθέσιμος κενός χώρος γύρω από μια βιομηχανία για να κατασκευαστούν γραμμές, κλπ STR_CONFIG_SETTING_MULTIPINDTOWN :Επιτρέπονται πολλαπλές όμοιες βιομηχανίες ανά πόλη: {STRING} STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Συνήθως, μια πόλη δεν επιθυμεί περισσότερες από μία βιομηχανία κάθε είδους. Αυτή η ρύθμιση επιτρέπει περισσότερες βιομηχανίες του ίδιου είδους στην ίδια πόλη. @@ -2018,7 +2018,7 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} τετ STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Όταν σύρετε, διατηρείται σταθερή απόσταση μεταξύ των σημάτων: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Επιλέξτε τη συμπεριφορά της τοποθέτησης σημάτων όταν πατάτε Ctrl και σύρετε. Όταν είναι απενεργοποιημένο, τα σήματα τοποθετούνται γύρω από σήραγγες και γέφυρες για να αποφεύγονται μεγάλα τμήματα χωρίς σήματα. Όταν είναι ενεργοποιημένο, τα σήματα τοποθετούνται κάθε n τετραγωνίδια, κάνοντας ευκολότερη την ευθυγράμμιση των σημάτων σε παράλληλες γραμμές -STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Αυτόματο κτίσιμο σηματοφόρων πριν από το: {STRING} +STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Αυτόματη κατασκευή σηματοφόρων πριν από το: {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Ορίζεται το έτος κατά το οποίο θα χρησιμοποιούνται τα ηλεκτρικά σήματα στις σιδηροτροχιές. Πριν από αυτό, θα χρησιμοποιούνται μηχανικά σήματα (που έχουν ακριβώς την ίδια λειτουργία, αλλά έχουν διαφορετική μορφή) STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Περιήγηση στους τύπους σηματοδότησης: {STRING} @@ -2042,9 +2042,9 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :πλέγμα 2x STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :πλέγμα 3x3 STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Τυχαίο -STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Οι πόλεις επιτρέπεται να χτίσουν δρόμους: {STRING} +STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Οι πόλεις επιτρέπεται να κατασκευάζουν δρόμους: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Επιτρέπεται στις πόλεις να κατασκευάζουν δρόμους για ανάπτυξη. Απενεργοποιήστε για να αποτρέπονται οι τοπικές αρχές από την αυτόνομη κατασκευή δρόμων -STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Οι πόλεις επιτρέπουν το κτίσιμο ισόπεδων διασταυρώσεων: {STRING} +STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Οι πόλεις επιτρέπουν την κατασκευή ισόπεδων διασταυρώσεων: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Ενεργοποιώντας αυτήν τη ρύθμιση επιτρέπει στις πόλεις να κατασκευάζουν επίπεδες διαβάσεις STR_CONFIG_SETTING_NOISE_LEVEL :Περιορισμός τοποθέτησης αεροδρομίων ανάλογα με το επίπεδο θορύβου: {STRING} @@ -2755,7 +2755,7 @@ STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Μαρκ STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}Αποεπιλογή όλων STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Σημείωση όλων των περιεχομένων να μην κατέβουν STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Αναζήτηση εξωτερικών ιστοσελίδων -STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Ψάξτε για περιεχόμενο που δεν είναι διαθέσιμο μέσω την υπηρεσία λήψης περιεχομένου του OpenTTD σε ιστοσελίδες που δεν είναι συνδεδεμένες με το OpenTTD +STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Αναζήτηση για περιεχόμενο που δεν είναι διαθέσιμο μέσω την υπηρεσία λήψης περιεχομένου του OpenTTD σε ιστοσελίδες που δεν σχετίζονται με το OpenTTD STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Φεύγετε από το OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Οι όροι και προϋποθέσεις για τη λήψη περιεχομένου από εξωτερικές ιστοσελίδες διαφέρουν.{}Θα πρέπει να αναφερθείτε στις εξωτερικές ιστοσελίδες για οδηγίες περί της εγκατάστασης του περιεχομένου στο OpenTTD.{}Θέλετε να συνεχίσετε; STR_CONTENT_FILTER_TITLE :{BLACK}Ετικέτα/όνομα φίλτρου: @@ -2773,7 +2773,7 @@ STR_CONTENT_DETAIL_SUBTITLE_AUTOSELECTED :{SILVER}Αυτ STR_CONTENT_DETAIL_SUBTITLE_ALREADY_HERE :{SILVER}Το έχετε ήδη αυτό STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER}Αυτό το περιεχόμενο είναι άγνωστο και δεν γίνεται να κατέβει από το OpenTTD -STR_CONTENT_DETAIL_UPDATE :{SILVER}Αυτό είναι αντικατάσταση ενός υπάρχοντος {STRING} +STR_CONTENT_DETAIL_UPDATE :{SILVER}Αυτό αντικαθιστά ένα υπάρχον {STRING} STR_CONTENT_DETAIL_NAME :{SILVER}Όνομα: {WHITE}{STRING} STR_CONTENT_DETAIL_VERSION :{SILVER}Έκδοση: {WHITE}{STRING} STR_CONTENT_DETAIL_DESCRIPTION :{SILVER}Περιγραφή: {WHITE}{STRING} @@ -2830,7 +2830,7 @@ STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Εναλ STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για γέφυρες. Ctrl+Κλικ για να την κλειδώσετε STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για κτίρια όπως φάρους και κεραίες. Ctrl+Κλικ για να την κλειδώσετε STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για τις συνδέσεις. Ctrl+Κλικ για να την κλειδώσετε -STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για φόρτωση και κείμενο κόστους/εσόδων. Ctrl+Click για να την κλειδώσετε +STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για φόρτωση και κείμενο κόστους/εσόδων. Ctrl+Κλικ για να την κλειδώσετε STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Επιλέξτε τα αντικείμενα που θα είναι αόρατα αντί για διάφανα # Linkgraph legend window @@ -2864,10 +2864,10 @@ STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}Κόστ # Join station window STR_JOIN_STATION_CAPTION :{WHITE}Συνένωση σταθμού -STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Χτίστε ένα ξεχωριστό σταθμό +STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Κατασκευάστε ένα ξεχωριστό σταθμό STR_JOIN_WAYPOINT_CAPTION :{WHITE}Συνένωση σημείου καθοδήγησης -STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Κτίσιμο ενός ξεχωριστού σημείου καθοδήγησης +STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}κατασκευή ενός ξεχωριστού σημείου καθοδήγησης # Generic toolbar STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Απενεργοποιημένο διότι δεν υπάρχουν διαθέσιμα οχήματα για αυτή την υποδομή @@ -2914,7 +2914,7 @@ STR_STATION_BUILD_DRAG_DROP :{BLACK}Σύρε STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Φτιάξε ένα σταθμό χρησιμοποιώντας σύρσιμο και ελευθέρωση STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Επιλογή τύπου σταθμών για εμφάνιση -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Επιλέξτε τον τύπο του σταθμού προς κτίσιμο +STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Επιλέξτε τον τύπο του σταθμού προς κατασκευή STR_STATION_CLASS_DFLT :Προεπιλεγμένος STR_STATION_CLASS_DFLT_STATION :Προεπιλεγμένος σταθμός @@ -2928,16 +2928,16 @@ STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Εναλ STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Σηματοδότες Τμήματος (σηματοφόρος){}Αυτός είναι ο πιο βασικός τύπος σηματοδότη, επιτρέποντας μόνο ένα τρένο να βρίσκεται σε κάθε τμήμα κάθε φορά STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Σηματοδότης-Εισόδου (σηματοφόρος){}Πράσινο όσο υπάρχει ένας ή περισσότεροι πράσινοι σηματοδότες-εξόδου στο επόμενο τμήμα γράμμης. Διαφορετικά δείχνει κόκκινο STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Σηματοδότης-Εξόδου (σηματοφόρος){}Συμπεριφέρεται με τον ίδιο τρόπο οπως οι σηματοδότες τμήματος αλλά είναι απαραίτητο να τεθεί το σωστό χρώμα στους προ-σηματοδότες είσοδου και συνδυαστικούς -STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Συνδυαστικός Σηματοδότης (σηματοφόρος){}Ο συνδυαστικός σηματοδότης απλά λειτουργεί ταυτόχρονα ως σηματοδότης εισόδου και εξόδου. Αυτό επιτρέπει το κτίσιμο μεγάλυτερων «δέντρων» με προ-σηματοδότες +STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Συνδυαστικός Σηματοδότης (σηματοφόρος){}Ο συνδυαστικός σηματοδότης απλά λειτουργεί ταυτόχρονα ως σηματοδότης εισόδου και εξόδου. Αυτό επιτρέπει την κατασκευή μεγάλυτερων «δέντρων» με προ-σηματοδότες STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Σηματοδότης Τροχιάς (σηματοφόρος){}Ένας σηματοδότης τροχιάς επιτρέπει σε περισσότερα από ένα τρένο να είναι σε ένα κομμάτι ελέγχου την ίδια στιγμή, εάν το τρένο μπορεί να δεσμεύσει τροχιά σε ασφαλές σημείο στάσης. Κανονικοί σηματοδότες τροχιάς μπορούν να περαστούν από την πίσω πλευρά STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Μονόδρομος Σηματοδότης Τροχιάς (σηματοφόρος){}Ένας σηματοδότης τροχιάς επιτρέπει σε περισσότερα από ένα τρένο να είναι σε ένα κομμάτι ελέγχου την ίδια στιγμή, εάν το τρένο μπορεί να δεσμεύσει τροχιά σε ασφαλές σημείο στάσης. Μονόδρομοι σηματοδότες τροχιάς δεν μπορούν να περαστούν από την πίσω πλευρά. STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Σηματοδότης Τμήματος (ηλεκτρικός){}Αυτός είναι ο πιο βασικός τύπος σηματοδότη, επιτρέποντας μόνο ένα τρένο να είναι στο ίδιο τμήμα την ίδια στιγμή. STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Σηματοδότης Εισόδου (ηλεκτρικός){}Πράσινο όσο υπάρχει ένας ή περισσότεροι πράσινοι σηματοδότες εξόδου στο επόμενο τμήμα γραμμής. Διαφορετικά είναι κόκκινο STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Σηματοδότης Εξόδου (ηλεκτρικός){}Συμπεριφέρεται με τον ίδιο τρόπο όπως οι σηματοδότες τμήματος αλλά είναι απαραίτητο να θέσει το σωστό χρώμα στους προ-σηματοδότες εισόδου και συνδυαστικούς -STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Συνδυαστικός Σηματοδότης (ηλεκτρικός){}Ο συνδυαστικός σηματοδότης δουλεύει απλά ως σηματοδότης εισόδου και εξόδου ταυτόχρονα. Αυτό σας επιτρέπει το κτίσιμο μεγάλων «δέντρων» με προ-σηματοδότες +STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Συνδυαστικός Σηματοδότης (ηλεκτρικός){}Ο συνδυαστικός σηματοδότης δουλεύει απλά ως σηματοδότης εισόδου και εξόδου ταυτόχρονα. Αυτό σας επιτρέπει την κατασκευή μεγάλων «δέντρων» με προ-σηματοδότες STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Σηματοδότης Τροχιάς (ηλεκτρικός){}Ένας σηματοδότης τροχιάς επιτρέπει σε περισσότερα από ένα τρένο να είναι σε ένα κομμάτι ελέγχου την ίδια στιγμή, εάν το τρένο μπορεί να δεσμεύσει τροχιά σε ασφαλές σημείο στάσης. Κανονικοί σηματοδότες τροχιάς μπορούν να περαστούν από την πίσω πλευρά STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Μονόδρομος Σηματοδότης Τροχιάς (ηλεκτρικός){}Ένας σηματοδότης τροχιάς επιτρέπει σε περισσότερα από ένα τρένο να είναι σε ένα κομμάτι ελέγχου την ίδια στιγμή, εάν το τρένο μπορεί να δεσμεύσει τροχιά σε ασφαλές σημείο στάσης. Μονόδρομοι σηματοδότες τροχιάς δεν μπορούν να περαστούν από την πίσω πλευρά -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Μετατροπή σήματος{}Κάντε κλικ σε ένα υπάρχον σήμα για να το μετατρέψετε στον επιλεγμένο τύπο και παραλλαγή. Ctrl+Click για εναλλαγή της υπάρχουσας παραλλαγής. Το Shift+Click εμφανίζει το εκτιμώμενο κόστος μετατροπής +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Μετατροπή σήματος{}Κάντε κλικ σε ένα υπάρχον σήμα για να το μετατρέψετε στον επιλεγμένο τύπο και παραλλαγή. Ctrl+Κλικ για εναλλαγή της υπάρχουσας παραλλαγής. Το Shift+Κλικ εμφανίζει το εκτιμώμενο κόστος μετατροπής STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Απόσταση μεταξύ σηματοδοτών με σύρσιμο STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Μείωση απόστασης μεταξύ σηματοδοτών με σύρσιμο STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Αύξηση απόστασης μεταξύ σηματοδοτών με σύρσιμο @@ -2979,7 +2979,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Κατα STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Κατασκευή τούνελ δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Κατασκευή τούνελ τροχιοδρόμου. Επιπρόσθετα πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Εναλλαγή κατασκευής/αφαίρεσης για αυτοκινητόδρομους -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Εναλλαγή κτισίματος/αφαίρεσης της κατασκευής τροχιόδρομου +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Εναλλαγή προσθήκης/αφαίρεσης για την κατασκευή τροχιόδρομου STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Μετατρέψτε/Αναβαθμίστε τον τύπο του δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Μετατρέψτε/Αναβαθμίστε τον τύπο του τραμ. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο @@ -3058,7 +3058,7 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Αγορ # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Επιλογή Αντικείμενου STR_OBJECT_BUILD_TOOLTIP :{BLACK}Επιλογή αντικείμενου για κατασκευή. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Επιλογή της κατηγορίας του αντικείμενου για κτίσιμο +STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Επιλογή της κατηγορίας του αντικείμενου για κατασκευή STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Προεπισκόπηση του αντικείμενου STR_OBJECT_BUILD_SIZE :{BLACK}Μέγεθος: {GOLD}{NUM} x {NUM} τετράγωνα @@ -3135,7 +3135,7 @@ STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Γέμι STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Δημιουργία τυχαίων βιομηχανιών STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Σίγουρα θέλετε να δημιουργήσετε πολλές τυχαίες βιομηχανίες; STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Κόστος: {YELLOW}{CURRENCY_LONG} -STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Διερεύνηση +STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Προοπτική STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Κατασκευή STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Χρηματοδότηση STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Αφαίρεση όλων των βιομηχανιών @@ -3379,7 +3379,7 @@ STR_SAVELOAD_OSKTITLE :{BLACK}Δώστ # World generation STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Δημιουργία Κόσμου STR_MAPGEN_MAPSIZE :{BLACK}Διάσταση χάρτη: -STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Επιλέξτε το μέγεθος του χάρτη σε τετραγωνίδια. Ο αριθμός των τετραγωνίδιων διαθέσιμα για κτίσιμο θα είναι λίγο χαμηλότερος +STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Επιλέξτε το μέγεθος του χάρτη σε τετραγωνίδια. Ο αριθμός των τετραγωνίδιων διαθέσιμα για κατασκευή θα είναι λίγο χαμηλότερος STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Αριθμός πόλεων: STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :Επιλέξτε την πυκνότητα των πόλεων ή έναν προσαρμοσμένο αριθμό @@ -3748,7 +3748,7 @@ STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN :Μικρή δι STR_LOCAL_AUTHORITY_ACTION_MEDIUM_ADVERTISING_CAMPAIGN :Μεσαία διαφημιστική καμπάνια STR_LOCAL_AUTHORITY_ACTION_LARGE_ADVERTISING_CAMPAIGN :Μεγάλη διαφημιστική καμπάνια STR_LOCAL_AUTHORITY_ACTION_ROAD_RECONSTRUCTION :Επιχορήγηση ανακατασκευής τοπικού οδικού δικτύου -STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :Κτίσιμο αγάλματος του ιδιοκτήτη της εταιρίας +STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :Κατασκευή αγάλματος του ιδιοκτήτη της εταιρίας STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Επιχορήγηση νέων κτιρίων STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Αγορά αποκλειστικών δικαιωμάτων μεταφοράς STR_LOCAL_AUTHORITY_ACTION_BRIBE :Δωροδοκήστε την τοπική αρχή @@ -3759,7 +3759,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Έναρξη μεγάλης τοπικής διαφημιστικής καμπάνιας, για να προσελκύσετε περισσότερους επιβάτες και εμπορεύματα στις μεταφορικές σας υπηρεσίες.{}Παρέχει μία προσωρινή ώθηση στην βαθμολογία σταθμού σε μία μεγάλη ακτίνα γύρω από το κέντρο της πόλης.{}{POP_COLOUR} Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Χρηματοδοτήστε την ανακατασκευή του αστικού οδικού δικτύου.{}Προκαλεί σημαντική αναστάτωση της οδικής κυκλοφορίας για έως και 6 μήνες.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}Χρηματοδοτήστε την ανακατασκευή του αστικού οδικού δικτύου.{}Προκαλεί σημαντική αναστάτωση της οδικής κυκλοφορίας για έως και 6 λεπτά.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Χτίστε ένα άγαλμα προς τιμήν της εταιρίας σας.{}Παρέχει μία μόνιμη ώθηση στην βαθμολογία σταθμών σε αυτή την πόλη.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Κατασκευάστε ένα άγαλμα προς τιμήν της εταιρίας σας.{}Παρέχει μία μόνιμη ώθηση στην βαθμολογία σταθμών σε αυτή την πόλη.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Χρηματοδοτήστε την κατασκευή νέων κτιρίων στην πόλη.{}Παρέχει μια προσωρινή ώθηση στην ανάπτυξη αυτής της πόλης.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Αγοράστε αποκλειστικά δικαιώματα μεταφοράς στην πόλη για 12 μήνες.{}Η δημοτική αρχή δεν θα επιτρέψει στους επιβάτες και στο φορτίο να χρησιμοποιούν τους σταθμούς των ανταγωνιστών σας. Μια επιτυχημένη δωροδοκία από έναν ανταγωνιστή θα ακυρώσει αυτό το συμβόλαιο.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Αγοράστε αποκλειστικά δικαιώματα μεταφοράς στην πόλη για 12 λεπτά.{}Η δημοτική αρχή δεν θα επιτρέψει στους επιβάτες και στο φορτίο να χρησιμοποιούν τους σταθμούς των ανταγωνιστών σας. Μια επιτυχημένη δωροδοκία από έναν ανταγωνιστή θα ακυρώσει αυτό το συμβόλαιο.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG} @@ -3988,8 +3988,8 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} αεροδρόμι{P ο α} STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Τίποτα -STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Κτίσιμο Αρχηγείου -STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Κτίσιμο αρχηγείου εταιρίας +STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Κατασκευή Αρχηγείου +STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Κατασκευή αρχηγείου εταιρίας STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Προβολή Αρχηγείου STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Προβολή αρχηγείου εταιρίας STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Ανοικοδόμηση Αρχηγείου @@ -4014,7 +4014,7 @@ STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Όνομα Ετ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Όνομα Διευθυντή STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Εισάγετε το χρηματικό ποσό που θέλετε να δώσετε -STR_BUY_COMPANY_MESSAGE :{WHITE}Ψάχνουμε μία εταιρία μεταφορών για να εξαγοράσει την εταιρία μας.{}{}Θέλετε να εξαγοράσετε την {COMPANY} για {CURRENCY_LONG}; +STR_BUY_COMPANY_MESSAGE :{WHITE}Αναζητούμε μια εταιρία μεταφορών για να εξαγοράσει την εταιρία μας.{}{}Θέλετε να εξαγοράσετε την {COMPANY} για {CURRENCY_LONG}; STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Σε μια εχθρική εξαγορά της {COMPANY} θα αγοράσετε όλα τα περιουσιακά στοιχεία, θα εξοφλήσετε όλα τα δάνεια και θα πληρώσετε κέρδη δύο ετών.{}{}Το σύνολο εκτιμάται ότι είναι {CURRENCY_LONG}.{}{}Θέλετε να προχωρήσετε με αυτήν την εχθρική εξαγορά; # Company infrastructure window @@ -4429,7 +4429,7 @@ STR_REPLACE_TRAM_VEHICLES :Οχήματα STR_REPLACE_REMOVE_WAGON :{BLACK}Αφαίρεση βαγονιού: ({STRING}): {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Υποχρεώνει την αυτόματη αντικατάσταση να διατηρεί σταθερό το μήκος του τρένου αφαιρώντας βαγόνια (ξεκινώντας από μπροστά), όταν η αντικατάσταση της μηχανής κάνει το τρένο μεγαλύτερο -STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Πατήστε Ctrl+Click για εφαρμογή επίσης στην υπό-ομάδα +STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Πατήστε Ctrl+Κλικ για εφαρμογή επίσης στην υπό-ομάδα # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} @@ -4553,12 +4553,12 @@ STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Διάσ STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Διάστημα επισκευών: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Τελευταίο service: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Τελευταίο service: {LTBLUE}{NUM} λεπτ{P 0 ό ά} πριν -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Αύξηση του διαστήματος συντήρησης κατά 10 ημέρες. Ctrl+Click για αύξηση του διαστήματος συντήρησης κατά 5 ημέρες -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Αύξηση του διαστήματος συντήρησης κατά 5 λεπτά. Ctrl+Click για αύξηση του διαστήματος συντήρησης κατά 1 λεπτό -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Αύξηση του διαστήματος εξυπηρέτησης κατά 10 τοις εκατό. Ctrl+Click για αύξηση του διαστήματος εξυπηρέτησης κατά 5 τοις εκατό -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :Μειώστε το διάστημα μεταξύ των σέρβις κατά 10 ημέρες. Ctrl+Click για να μειώσετε το διάστημα συντήρησης κατά 5 ημέρες -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :Μειώστε το διάστημα μεταξύ των σέρβις κατά 5 λεπτά. Ctrl+Click για να μειώσετε το διάστημα συντήρησης κατά 1 λεπτό -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :Μειώστε το διάστημα μεταξύ των σέρβις κατά 10 τοις εκατό. Ctrl+Click για να μειώσετε το διάστημα συντήρησης κατά 5 τοις εκατό. +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Αύξηση του διαστήματος συντήρησης κατά 10 ημέρες. Ctrl+Κλικ για αύξηση του διαστήματος συντήρησης κατά 5 ημέρες +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Αύξηση του διαστήματος συντήρησης κατά 5 λεπτά. Ctrl+Κλικ για αύξηση του διαστήματος συντήρησης κατά 1 λεπτό +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Αύξηση του διαστήματος εξυπηρέτησης κατά 10 τοις εκατό. Ctrl+Κλικ για αύξηση του διαστήματος εξυπηρέτησης κατά 5 τοις εκατό +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Μειώστε το διάστημα μεταξύ των σέρβις κατά 10 ημέρες. Ctrl+Κλικ για να μειώσετε το διάστημα συντήρησης κατά 5 ημέρες +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Μειώστε το διάστημα μεταξύ των σέρβις κατά 5 λεπτά. Ctrl+Κλικ για να μειώσετε το διάστημα συντήρησης κατά 1 λεπτό +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Μειώστε το διάστημα μεταξύ των σέρβις κατά 10 τοις εκατό. Ctrl+Κλικ για να μειώσετε το διάστημα συντήρησης κατά 5 τοις εκατό. STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Αλλάξτε τον τύπο διαστήματος επισκευών STR_VEHICLE_DETAILS_DEFAULT :Προκαθορισμένο @@ -4632,7 +4632,7 @@ STR_ORDER_INDEX :{COMMA}:{NBSP} STR_ORDER_TEXT :{STRING} {STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Τέλος Εντολών - - -STR_ORDERS_END_OF_SHARED_ORDERS :- - Τέλος Μοιρασμένων Οδηγιών - - +STR_ORDERS_END_OF_SHARED_ORDERS :- - Τέλος Διαμοιρασμένων Εντολών - - # Order bottom buttons STR_ORDER_NON_STOP :{BLACK}Χωρίς στάση @@ -4717,7 +4717,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Πήγαινε STR_ORDER_GO_TO_NEAREST_HANGAR :Πήγαινε στο κοντινότερο υπόστεγο STR_ORDER_CONDITIONAL :Εκτέλεση εντόλης υπο προυπόθεση STR_ORDER_SHARE :Μοίρασμα εντολών -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Εισάγετε μια νέα εντολή πριν την επιλεγμένη ή προσθέστε στο τέλος της λίστας. Ctrl+Κλικ σε έναν σταθμό για ορισμό εντολής σε "πλήρης φόρτωση οποιουδήποτε εμπορεύματος", σε σημείο διαδρομής για αντιστροφή εντολής "χωρίς στάση εξ ορισμού" ή σε αμαξοστάσιο για "αποσύνδεση". Κάντε κλικ σε άλλο όχημα για να αντιγράψετε τις εντολές του ή Ctrl+Click για διαμοιρασμό εντολών. Μια εντολή αμαξοστασίου απενεργοποιεί την αυτόματη συντήρηση του οχήματος +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Εισάγετε μια νέα εντολή πριν την επιλεγμένη ή προσθέστε στο τέλος της λίστας. Ctrl+Κλικ σε έναν σταθμό για ορισμό εντολής σε "πλήρης φόρτωση οποιουδήποτε εμπορεύματος", σε σημείο διαδρομής για αντιστροφή εντολής "χωρίς στάση εξ ορισμού" ή σε αμαξοστάσιο για "αποσύνδεση". Κάντε κλικ σε άλλο όχημα για να αντιγράψετε τις εντολές του ή Ctrl+Κλικ για διαμοιρασμό εντολών. Μια εντολή αμαξοστασίου απενεργοποιεί την αυτόματη συντήρηση του οχήματος STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Εμφάνιση όλων των οχημάτων που μοιράζονται αυτό το δρομολόγιο @@ -4825,7 +4825,7 @@ STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Αυτό STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Αυτό το δρομολόγιο θα ξεκινήσει σε {COMMA} δευτερόλεπτα STR_TIMETABLE_START :{BLACK}Εκκίνηση δρομολογίου -STR_TIMETABLE_START_TOOLTIP :{BLACK}Επιλέξτε πότε ξεκινά αυτό το δρομολόγιο. Ctrl+Click για ομοιόμορφη κατανομή της εκκίνησης όλων των οχημάτων που μοιράζονται αυτήν την εντολή με βάση τη σχετική τους εντολή, εάν η εντολή είναι πλήρως προγραμματισμένη +STR_TIMETABLE_START_TOOLTIP :{BLACK}Επιλέξτε πότε ξεκινά αυτό το δρομολόγιο. Ctrl+Κλικ για ομοιόμορφη κατανομή της εκκίνησης όλων των οχημάτων που μοιράζονται αυτήν την εντολή με βάση τη σχετική τους εντολή, εάν η εντολή είναι πλήρως προγραμματισμένη STR_TIMETABLE_START_SECONDS_QUERY :Δευτερόλεπτα μέχρι την έναρξη του δρομολογίου @@ -4913,7 +4913,7 @@ STR_AI_CONFIG_AI :{SILVER}AI STR_AI_CONFIG_CHANGE_AI :{BLACK}Διάλεξε ΤΝ STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Δέσμη Ενεργειών -STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Φόρτωση άλλης δέσμης ενεργειών. Ctrl+Click για εμφάνιση όλων των διαθέσιμων εκδόσεων +STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Φόρτωση άλλης δέσμης ενεργειών. Ctrl+Κλικ για εμφάνιση όλων των διαθέσιμων εκδόσεων STR_AI_CONFIG_CONFIGURE :{BLACK}Ρυθμίσεις STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Ρύθμιση των παραμέτρων της Δέσμης Ενεργειών @@ -4999,9 +4999,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Υπολ STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Η αποθήκευση είναι σε εξέλιξη,{}παρακαλώ περιμένετε να τελειώσει! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Η αυτόματη αποθήκευση απέτυχε STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Αδύνατη η ανάγνωση του δίσκου -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Η Αποθήκευση Παιχνιδιού Απέτυχε{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Αδύνατη η διαγραφή του αρχείου -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Η Φόρτωση Παιχνιδιού Απέτυχε{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Εσωτερικό λάθος: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Χαλασμένο αποθηκευμένο παιχνίδι - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Το αποθηκευμένο παιχνίδι είναι φτιαγμένο με νεότερη έκδοση @@ -5054,7 +5052,7 @@ STR_ERROR_CAN_T_DO_THIS :{WHITE}Αυτό STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Το κτίριο πρέπει πρώτα να κατεδαφιστεί STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Είναι αδύνατο να καθαριστεί αυτή η περιοχή... STR_ERROR_SITE_UNSUITABLE :{WHITE}... ακατάλληλη περιοχή -STR_ERROR_ALREADY_BUILT :{WHITE}... ήδη κτισμένο +STR_ERROR_ALREADY_BUILT :{WHITE}... ήδη κατασκευασμένο STR_ERROR_OWNED_BY :{WHITE}... ιδιοκτησία του {STRING} STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... η περιοχή είναι ιδιοκτησία άλλης εταιρίας STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... υπερβαίνει το όριο διαμόρφωσης του εδάφους @@ -5092,12 +5090,12 @@ STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Αδύν STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Δεν είναι δυνατό να δοθούν χρήματα που είναι δανεισμένα από τη τράπεζα... STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Δεν μπορείτε να δώσετε χρήματα σε αυτή την εταιρία... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Αδύνατη η εξαγορά της εταιρίας... -STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Δεν μπορεί να κτιστεί αρχηγείο εταιρίας... +STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Δεν μπορεί να κατασκευαστεί αρχηγείο εταιρίας... # Town related errors STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Αδύνατο να κατασκευαστούν πόλεις... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Δεν μπορεί να μετονομαστεί η πόλη... -STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Αδύνατο να κτιστεί πόλη εδώ... +STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Αδύνατο να ιδρυθεί πόλη εδώ... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Δεν μπορεί να γίνει επέκταση της πόλης... STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... πολύ κοντά στην άκρη του χάρτη STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... πολύ κοντά σε άλλη πόλη @@ -5110,22 +5108,22 @@ STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... δε # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... πάρα πολλές βιομηχανίες STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Δε γίνεται να δημιουργηθούν βιομηχανίες... -STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Δεν μπορεί να κτιστεί {G ο η το} {STRING} εδώ... -STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Δεν είναι δυνατό να κτιστεί αυτός ο τύπος βιομηχανίας εδώ... +STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί {G ο η το} {STRING} εδώ... +STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Δεν είναι δυνατό να κατασκευαστεί αυτός ο τύπος βιομηχανίας εδώ... STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Δεν βρέθηκαν ευκαιρίες για τη βιομηχανία... STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... πολύ κοντά σε άλλη βιομηχανία -STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... πρέπει να κτιστεί πόλη πρώτα +STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... πρέπει να ιδρυθεί πόλη πρώτα STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... επιτρέπεται μόνο μία ανά πόλη -STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... μπορεί να κτιστεί μόνο σε πόλεις με πληθυσμό άνω των 1200 -STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... μπορεί να κτιστεί μόνο σε δασώδεις περιοχές -STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... μπορεί να κτιστεί μόνο σε ερημικές περιοχές -STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... μπορεί να κτιστεί μόνο σε πόλεις (αντικαθιστώντας σπίτια) -STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... μπορεί να κτιστεί μόνο κοντά σε κέντρα πόλεων -STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... μπορεί να κτιστεί μόνο σε χαμηλές περιοχές +STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... μπορεί να κατασκευαστεί μόνο σε πόλεις με πληθυσμό άνω των 1200 +STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... μπορεί να κατασκευαστεί μόνο σε δασώδεις περιοχές +STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... μπορεί να κατασκευαστεί μόνο σε ερημικές περιοχές +STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... μπορεί να κατασκευαστεί μόνο σε πόλεις (αντικαθιστώντας σπίτια) +STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... μπορεί να κατασκευαστεί μόνο κοντά σε κέντρα πόλεων +STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... μπορεί να κατασκευαστεί μόνο σε χαμηλές περιοχές STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... μπορούν να τοποθετηθούν μόνο στις άκρες του χάρτη STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... δάση μπορούν να φυτευτούν μόνο πάνω από τη γραμμή του χιονιού -STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... μπορεί να κτιστεί μόνο πάνω από τη γραμμή του χιονιού -STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... μπορεί να κτιστεί μόνο κάτω από τη γραμμή του χιονιού +STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... μπορεί να κατασκευαστεί μόνο πάνω από τη γραμμή του χιονιού +STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... μπορεί να κατασκευαστεί μόνο κάτω από τη γραμμή του χιονιού STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}Η χρηματοδότηση απέτυχε να προσκομήσει αποτελέσματα λόγω κακής τύχης· δοκιμάστε ξάνα STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Δεν υπήρχαν κατάλληλα μέρη για προοπτική για αυτόν τον κλάδο @@ -5133,13 +5131,13 @@ STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Δεν STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Αλλαγή παραμέτρων δημιουργίας χάρτη για καλύτερα αποτελέσματα # Station construction related errors -STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Δεν μπορεί να κτιστεί σταθμός τρένων εδώ... -STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Δεν μπορεί να κτιστεί στάση λεωφορείων... -STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Δεν μπορεί να κτιστεί σταθμός φορτηγών... -STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Δεν μπορεί να κτιστεί επιβατικός σταθμός τραμ... -STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Δεν μπορεί να κτιστεί σταθμός τραμ... -STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Δεν μπορεί να κτιστεί λιμένας εδώ... -STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Δεν μπορεί να κτιστεί αεροδρόμιο εδώ... +STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Δεν μπορεί να κατασκευαστεί σταθμός τρένων εδώ... +STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Δεν μπορεί να κατασκευαστεί στάση λεωφορείων... +STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Δεν μπορεί να κατασκευαστεί σταθμός φορτηγών... +STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Δεν μπορεί να κατασκευαστεί επιβατικός σταθμός τραμ... +STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Δεν μπορεί να κατασκευαστεί σταθμός τραμ... +STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί λιμένας εδώ... +STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί αεροδρόμιο εδώ... STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Γειτονεύει με περισσότερες από μια υπάρχουσες περιοχές σταθμών/φόρτωσης STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... ο σταθμός είναι υπερβολικά απλωμένος @@ -5177,7 +5175,7 @@ STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Πρέπ STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Προστίθεται σε περισσότερο από ένα υπάρχον σημείο καθοδήγησης STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Πολύ κοντά σε άλλο σημείο καθοδήγησης -STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Δεν μπορεί να χτιστεί σημείο καθοδήγησης τρένου εδώ... +STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Δεν μπορεί να κατασκευαστεί σημείο καθοδήγησης τρένου εδώ... STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Δεν μπορεί να τοποθετηθεί σημαδούρα εδώ... STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Αδύνατο να αλλαχτεί το όνομα του σημείου καθοδήγησης... @@ -5187,10 +5185,10 @@ STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... ση STR_ERROR_BUOY_IS_IN_USE :{WHITE}... σημαδούρα σε χρήση από άλλη εταιρία! # Depot related errors -STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Δεν μπορεί να κτιστεί αμαξοστάσιο εδώ... -STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Δεν μπορεί να κτιστεί σταθμός οχημάτων εδώ... -STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Δεν μπορεί να κτιστεί σταθμαρχείο τραμ εδώ... -STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Δεν μπορεί να κτιστεί ναυπηγείο πλοίων εδώ... +STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Δεν μπορεί να κατασκευαστεί αμαξοστάσιο εδώ... +STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Δεν μπορεί να κατασκευαστεί σταθμός οχημάτων εδώ... +STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Δεν μπορεί να κατασκευαστεί σταθμαρχείο τραμ εδώ... +STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Δεν μπορεί να κατασκευαστεί ναυπηγείο πλοίων εδώ... STR_ERROR_CAN_T_RENAME_DEPOT :{WHITE}Δεν μπορεί να μετονομαστεί το αμαξοστάσιο/ναυπηγείο... @@ -5235,7 +5233,7 @@ STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Η δρ STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Δεν επιτρέπονται ισόπεδες διασταυρώσεις για αυτόν τον τύπο σιδηροδρόμου STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Οι ισόπεδες διαβάσεις δεν επιτρέπονται για αυτό τον τύπο δρόμου STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Δεν μπορούν να τοποθετοηθούν σηματοδότες εδώ... -STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Δεν μπορεί να κτιστεί σιδηρόδρομος εδώ... +STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Δεν μπορεί να κατασκευαστεί σιδηρόδρομος εδώ... STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Δεν μπορεί να αφαιρεθεί σιδηρόδρομος από εδώ... STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Αδύνατο να αφαιρεθούν σηματοδότες από εδώ... STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Δεν μπορούν να μετατραπούν οι σηματοδότες εδώ... @@ -5247,8 +5245,8 @@ STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Δε γ # Road construction errors STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Πρέπει πρώτα να αφαιρεθεί ο δρόμος STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... οι μονόδρομοι δεν μπορούν να έχουν διασταυρώσεις -STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Δεν μπορεί να κτιστεί δρόμος εδώ... -STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Δεν μπορεί να κτιστεί τροχιοδρόμος εδώ... +STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί δρόμος εδώ... +STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί τροχιοδρόμος εδώ... STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Αδύνατο να αφαιρεθεί δρόμος από εδώ... STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Δεν μπορεί να αφαιρεθεί τροχιόδρομος από εδώ... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... δεν υπάρχει δρόμος @@ -5259,16 +5257,16 @@ STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Δεν STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Καμία κατάλληλη γραμμή του τραμ # Waterway construction errors -STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Δεν μπορεί να κτιστεί κανάλι εδώ -STR_ERROR_CAN_T_BUILD_LOCKS :{WHITE}Δεν μπορεί να κτιστεί υδατοφράκτης εδώ... +STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Δεν μπορεί να κατασκευαστεί κανάλι εδώ +STR_ERROR_CAN_T_BUILD_LOCKS :{WHITE}Δεν μπορεί να κατασκευαστεί υδατοφράκτης εδώ... STR_ERROR_CAN_T_PLACE_RIVERS :{WHITE}Δεν μπορούν να τοποθετηθούν ποτάμια εδώ... -STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}... πρέπει να κτιστεί στο νερό -STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE}... αδύνατο να κτιστεί στο νερό -STR_ERROR_CAN_T_BUILD_ON_SEA :{WHITE}... αδύνατο να κτιστεί στην ανοικτή θάλασσα -STR_ERROR_CAN_T_BUILD_ON_CANAL :{WHITE}... αδύνατο να κτιστεί σε κανάλι -STR_ERROR_CAN_T_BUILD_ON_RIVER :{WHITE}... αδύνατο να κτιστεί σε ποτάμι +STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}... πρέπει να κατασκευαστεί στο νερό +STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE}... αδύνατο να κατασκευαστεί στο νερό +STR_ERROR_CAN_T_BUILD_ON_SEA :{WHITE}... αδύνατο να κατασκευαστεί στην ανοικτή θάλασσα +STR_ERROR_CAN_T_BUILD_ON_CANAL :{WHITE}... αδύνατο να κατασκευαστεί σε κανάλι +STR_ERROR_CAN_T_BUILD_ON_RIVER :{WHITE}... αδύνατο να κατασκευαστεί σε ποτάμι STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Πρέπει να κατεδαφιστεί το κανάλι πρώτα -STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Δεν μπορεί να κτιστεί κανάλι εδώ... +STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί κανάλι εδώ... # Tree related errors STR_ERROR_TREE_ALREADY_HERE :{WHITE}... υπάρχει ήδη δέντρο εδώ @@ -5276,7 +5274,7 @@ STR_ERROR_TREE_WRONG_TERRAIN_FOR_TREE_TYPE :{WHITE}... λά STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}Δεν γίνεται να φυτευτεί δέντρο εδώ... # Bridge related errors -STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Δεν μπορεί να κτιστεί γέφυρα εδώ... +STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί γέφυρα εδώ... STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Πρέπει πρώτα να καταστραφεί η γέφυρα STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Δεν γίνεται να ξεκινάει και να τελειώνει στο ίδιο σημείο STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Η γέφυρα δεν καταλήγει στο ίδιο επίπεδο @@ -5288,7 +5286,7 @@ STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... η STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :{WHITE}Η γέφυρα θα καταλήξει εκτός χάρτη # Tunnel related errors -STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Δεν μπορεί να κτιστεί τούνελ εδώ... +STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί τούνελ εδώ... STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Ακατάλληλη τοποθεσία για είσοδο τούνελ STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Πρέπει πρώτα να καταστραφεί το τούνελ STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Υπάρχει άλλο τούνελ στη μέση @@ -5298,10 +5296,10 @@ STR_ERROR_TUNNEL_TOO_LONG :{WHITE}... το # Object related errors STR_ERROR_TOO_MANY_OBJECTS :{WHITE}... πάρα πολλά αντικείμενα -STR_ERROR_CAN_T_BUILD_OBJECT :{WHITE}Δεν μπορεί να κτιστεί το αντικείμενο... +STR_ERROR_CAN_T_BUILD_OBJECT :{WHITE}Δεν μπορεί να κατασκευαστεί το αντικείμενο... STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Αντικείμενο στη μέση STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... κεντρικά γραφεία εταιρίας στη μέση -STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Αδύνατο να αγοραστεί το έδαφος... +STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Αδύνατο να γίνει αγορά αυτής της περιοχής εδάφους... STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... είστε ήδη ιδιοκτήτης! STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}... έχετε φτάσει το όριο οικοδομήσεων @@ -5354,10 +5352,10 @@ STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Δεν STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR :{WHITE}Δεν μπορεί να σταλθεί το αεροσκάφος στο υπόστεγο... ###length VEHICLE_TYPES -STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Δεν μπορεί να αγοραστεί όχημα σιδηρόδρομου... -STR_ERROR_CAN_T_BUY_ROAD_VEHICLE :{WHITE}Δεν μπορεί να αγοραστεί όχημα δρόμου... -STR_ERROR_CAN_T_BUY_SHIP :{WHITE}Δεν μπορεί να αγοραστεί πλοίο... -STR_ERROR_CAN_T_BUY_AIRCRAFT :{WHITE}Δεν μπορεί να αγοραστεί αεροσκάφος... +STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Δεν μπορεί να γίνει αγορά οχήματος σιδηροδρόμου... +STR_ERROR_CAN_T_BUY_ROAD_VEHICLE :{WHITE}Δεν μπορεί να γίνει αγορά οχήματος δρόμου... +STR_ERROR_CAN_T_BUY_SHIP :{WHITE}Δεν μπορεί να γίνει αγορά πλοίου... +STR_ERROR_CAN_T_BUY_AIRCRAFT :{WHITE}Δεν μπορεί να γίνει αγορά αεροσκάφους... ###length VEHICLE_TYPES STR_ERROR_CAN_T_RENAME_TRAIN_TYPE :{WHITE}Δεν μπορεί να μετονομαστεί ο τύπος τρένου... diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 61153d52f4..f0e4e8e050 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -4320,9 +4320,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}{CURRENC STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}!שמירה מתבצעת,{} אנא המתן עד לסיום השמירה STR_ERROR_AUTOSAVE_FAILED :{WHITE}שמירה אוטומטית נכשלה STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}לא ניתן לקרוא מהדיסק -STR_ERROR_GAME_SAVE_FAILED :{WHITE}שמירת המשחק נכשלה{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}לא ניתן למחוק את הקובץ -STR_ERROR_GAME_LOAD_FAILED :{WHITE}טעינת המשחק נכשלה{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :שגיאה פנימית: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :קובץ השמיקה פגום - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :קובץ השמירה נשמר עם גירסא חדישה יותר של המשחק diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index b36d8f0d3f..6a5c4626bc 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -4960,9 +4960,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Becsült STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}A mentés még tart,{}kérlek várd meg a végét! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatikus mentés sikertelen STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Nem olvasható a meghajtó -STR_ERROR_GAME_SAVE_FAILED :{WHITE}A mentés nem sikerült{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Nem sikerült törölni a fájlt -STR_ERROR_GAME_LOAD_FAILED :{WHITE}A betöltés nem sikerült{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Belső hiba: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Hibás játékállás-mentés - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :A játékállást újabb verzió mentette el diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 1c647aa56c..efaa345255 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -3902,9 +3902,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Áætla STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Vistun er enn í gangi,{}vinsamlegast bíddu á meðan hún klárst! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Sjálfvirk vistun mistókst STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Get ekki lesið af drifi -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Vistun leiks mistókst{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Get ekki eytt skrá -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Mistókst að opna leik{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Innri villa: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Bilun í vistuðum leik - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Leikur er vistaður í nýrri útgáfu diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 1b86a05322..fc35a85f1e 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -4785,9 +4785,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Perkiraa STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Penyimpanan sedang berlangsung,{}mohon tunggu hingga selesai STR_ERROR_AUTOSAVE_FAILED :{WHITE}Simpan otomatis gagal STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Tidak dapat membaca drive -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Penyimpanan Game gagal{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Tidak mampu untuk menghapus file/berkas -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Gagal membuka permainan{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Kesalahan Internal: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Berkas simpanan permainan rusak - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Berkas simpanan dibuat dari versi yang lebih baru diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 0c924c4744..80d9f5a895 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -4494,9 +4494,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Ioncam M STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Fós ag sábháil,{}fan go mbeidh sé críochnaithe! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Theip ar uathshábháil STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Ní féidir an tiomántán a léamh -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Theip ar Shábháil Cluiche{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Ní féidir comhad a scriosadh -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Theip ar Lódáil Cluiche{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Earráid inmheánach: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Cluiche sábháilte briste - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Rinneadh an cluiche sábháilte le leagan níos nuaí diff --git a/src/lang/italian.txt b/src/lang/italian.txt index c9169f681e..150c81a623 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -4938,9 +4938,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Ricavo s STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Salvataggio in corso,{}prego attenderne la fine! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Salvataggio automatico non riuscito STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Impossibile leggere dall'unità -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Salvataggio non riuscito{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Impossibile eliminare il file -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Caricamento non riuscito{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Errore interno: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Salvataggio danneggiato - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Salvataggio creato con una versione più recente diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 0e03d0d796..84b2a8ae91 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -4612,9 +4612,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}収益( STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}ゲームを保存しています{}完了までしばらくお待ちください! STR_ERROR_AUTOSAVE_FAILED :{WHITE}自動保存に失敗しました STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}ドライブを読み込めません -STR_ERROR_GAME_SAVE_FAILED :{WHITE}ゲームの保存に失敗しました{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}ファイルを削除できません -STR_ERROR_GAME_LOAD_FAILED :{WHITE}ゲームの読み込みに失敗しました{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :内部エラー: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :破損したセーブゲーム: {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :このファイルは上位のバージョンによって保存されたものです diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 25b8d1f611..45ea38ea68 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -4900,9 +4900,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}예상 STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}저장 중입니다.{}끝날 때까지 기다려주세요! STR_ERROR_AUTOSAVE_FAILED :{WHITE}자동 저장 실패 STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}드라이브를 읽을 수 없습니다 -STR_ERROR_GAME_SAVE_FAILED :{WHITE}게임 저장 실패{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}파일을 삭제할 수 없습니다 -STR_ERROR_GAME_LOAD_FAILED :{WHITE}게임 불러오기 실패{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :내부 오류: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :손상된 게임 저장 파일 - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :상위 버전의 게임 저장 파일입니다 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index c7d49e4dee..0aa15daf06 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -4392,9 +4392,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Reditus STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Adhuc in servando,{}maneas usque ad terminum! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autoservare defecit STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Non poterat discum legere -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Servare Ludum Defecit{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Non poterat fasciculum delere -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Legere Ludum Defecit{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Mendum internum: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Ludus corruptus - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Ludus servatus est in editione noviore diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 04c0579bfe..16c5ab140e 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -4908,9 +4908,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Plānoti STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Notiek saglabāšana,{}lLūdzu uzgaidiet! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automātiskā saglabāšana neizdevās STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Nevar lasīt disku -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Spēles saglabāšana neizdevās{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Nevar dzēst failu -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Spēles ielādēšana neizdevās{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Iekšēja kļūda: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Bojāts saglabātās spēles fails - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spēle ir saglabāta ar jaunāku versiju diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 5775ec7d33..5f5198f4c5 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -4817,9 +4817,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Numatomo STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Vyksta išsaugojimas,{}palaukite kol baigsis! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatinis išsaugojimas nepavyko STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Negali pasiekti disko -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Žaidimo išsaugoti nepavyko{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Failo ištrinti nepavyko -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Žaidimo atverti nepavyko{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Vidinė klaida: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Sugadintas išsaugotas žaidimas - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Išsaugotas žaidimas iš naujesnės versijos diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index c792bcc4c0..3a15cff1eb 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -4896,9 +4896,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Geschät STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Nach amgaangen ze späicheren.{} W.e.g. waarde bis daat fäerdeg ass! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Fehler beim Autospäicheren STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kann net um Laafwierk liesen -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Fehler beim Späicheren{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kann d'Datei net läschen -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Fehler beim Lueden{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interne Feeler: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Futtissen Späicherstand - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spillstand ass mat enger méi neier Versioun gemaach diff --git a/src/lang/malay.txt b/src/lang/malay.txt index ed6e37ed7a..4e8d12693c 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -3808,9 +3808,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Jangkaan STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Penyimpanan sedang berlaku,{}sila tunggu sehingga selesai! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Penyimpanan automatik gagal dilakukan STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Gagal dalam membaca cakera -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Penyimpanan Permainan Gagal{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Tidak boleh memadamkan fail -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Pembukaan Permainan Gagal{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Kesilapan dalaman: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Simpanan permainan yang rosak - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Simpanan permainan ini telah dibuat dengan versi yang lebih baru diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 6654abd5f7..0096ed5655 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -4901,9 +4901,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Anslått STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Lagring pågår enda,{}vennligst vent til den er klar! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatisk lagring mislyktes STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan ikke lese fra disk -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Lagring av spillet mislyktes{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan ikke slette fil -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Lasting av spill mislyktes{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Intern feil: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Ødelagt lagret spill - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spillet er lagret i en nyere versjon diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 5cc21b2d1b..e0adda199c 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -4036,9 +4036,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Berekna STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Lagring foregår framleis,{}ver venleg å vente til det er ferdig! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autolagring gjekk gale STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan ikkje lese frå disk -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Lagring av spelet mislukkast{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan ikkje slette fil -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Feil ved henting av spel{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Intern feil: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Øydelagd lagra spel - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spelet er lagra i ein nyare versjon diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 68274b0bdf..f184fdb6d8 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -3494,9 +3494,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}در آ # Saveload messages STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}درایو خوانده می شود -STR_ERROR_GAME_SAVE_FAILED :{WHITE}بازی ذخیره نشد{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}فایل حذف نمی شود -STR_ERROR_GAME_LOAD_FAILED :{WHITE}بازی بارگزاری نشد{}{STRING} # Map generation messages diff --git a/src/lang/polish.txt b/src/lang/polish.txt index fb7c10d992..2f4ec34ac0 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -5285,9 +5285,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Szacowan STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Zapisywanie trwa,{}proszę zaczekać do zakończenia! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Błąd autozapisu STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Nie można odczytać napędu -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Nie można zapisać gry{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Nie można usunąć pliku -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Nie można wczytać gry{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Błąd wewnętrzny: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Zepsuta zapisana gra - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Zapisana gra zrobiona w nowszej wersji diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index b9b503ba75..e087cf92a8 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -4900,9 +4900,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Lucro Es STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravação ainda em curso,{}por favor aguarde! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Falha ao guardar automaticamente STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Não é possível ler unidade -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Falha ao guardar jogo{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Não é possível eliminar ficheiro -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Falha ao abrir jogo{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erro interno: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Ficheiro corrompido - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Jogo gravado numa versão mais recente do jogo diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index ae588cd4d6..0d7686fa32 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -4892,9 +4892,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Venit es STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Salvarea se efectueaza încã,{}vã rugãm asteptati pânã se încheie! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Auto-salvarea a esuat STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Discul nu a putut fi citit -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Salvarea jocului eșuată{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Ștergerea fișierului a eșuat -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Încărcarea jocului eșuată{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Eroare internă: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Salvare eronată - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Salvarea a fost făcută cu o versiune mai nouă diff --git a/src/lang/russian.txt b/src/lang/russian.txt index f4d7f5da4f..ef7719ce68 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -5086,9 +5086,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Пред STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Идёт сохранение;{}пожалуйста, дождитесь завершения! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Ошибка автосохранения STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Не удалось прочитать диск -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Невозможно сохранить игру{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Невозможно удалить файл -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Невозможно загрузить игру{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Внутренняя ошибка: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Файл повреждён - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Сохранение сделано в более новой версии diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index a46c855be2..0eb1a5fe9c 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -5004,9 +5004,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Procena STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Čuvanje je još u toku,{}molimo sačekaj dok se ne završi! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Neuspešno automatsko čuvanje STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Čitanje sa diska nije uspelo -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Čuvanje pozicije nije uspelo{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Brisanje datoteke nije uspelo -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Učitavanje pozicije nije uspelo{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Unutrašnja greška: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Neispravno sačuvana igra - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Igra je sačuvana sa novijom verzijom igre diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index f6bed665f7..366cbcb7cf 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -4899,9 +4899,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}预计 STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}保存仍在继续{}请耐心等待…… STR_ERROR_AUTOSAVE_FAILED :{WHITE}自动保存失败 STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}不能读取驱动器 -STR_ERROR_GAME_SAVE_FAILED :{WHITE}保存游戏失败{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}不能删除文件 -STR_ERROR_GAME_LOAD_FAILED :{WHITE}游戏存档读取失败{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :内部错误: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :无法识别的存档 - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :该存档是新版本的。当前版本无法读取。 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 4284d488a5..4366fb9c1c 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -4967,9 +4967,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Odhadova STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ukladanie hry ešte beží,{}počkajte prosím na dokončenie! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatické ukladanie zlyhalo STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Zariadenie je nečitateľné -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Uloženie hry zlyhalo{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Súbor sa nedá vymazať -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Nahratie hry zlyhalo{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interná chyba: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Poškodená uložená hra - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Hra bola uložená vo vyššej verzii diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index de8be0e05c..2a88be52f2 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -4285,9 +4285,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Predvide STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Shranjevanje poteka,{}Prosim počakaj, da se zaključi! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Samodejno shranjevanje spodletelo STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Pogona ni mogoče prebrati -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Shranjevanje igre ni uspelo{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Datoteke ni mogoče zbrisati -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Nalaganje igre ni uspelo{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interna napaka: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Napaka v shranjeni igri - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Igra je bila shranjena z novejso razlicico diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index e6782944b2..7c3463a32a 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -4450,10 +4450,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Capacida STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Créditos de Transferencia: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Intervalo de mantenimiento: {LTBLUE}{COMMA}{NBSP}días{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Intervalo de mantenimiento: {LTBLUE}{COMMA}{NBSP}minutos{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Intervalo de mantenimiento: {LTBLUE}{COMMA}{NBSP}minuto{P "" s}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Intervalo de mantenimiento: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Último mantenimiento: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Último mantenimiento: {LTBLUE}hace {NUM} minutos +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Último mantenimiento: {LTBLUE}hace {NUM} minuto{P "" s} STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Incrementar el intervalo de mantenimiento en 10 días. Ctrl+clic para incrementar el período en 5 días STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Incrementar el intervalo de mantenimiento en 5 minutos. Ctrl+clic para incrementar el período en un minuto STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Incrementar el intervalo de mantenimiento en un 10%. Ctrl+clic para incrementar el período en un 5% @@ -4644,7 +4644,7 @@ STR_ORDER_REFIT_ORDER :(Reformar a {ST STR_ORDER_REFIT_STOP_ORDER :(Reformar a {STRING} y detenerse) STR_ORDER_STOP_ORDER :(Detenerse) -STR_ORDER_WAIT_TO_UNBUNCH :(esperar para distanciarse) +STR_ORDER_WAIT_TO_UNBUNCH :(Esperar para distanciarse) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(No puede usar la estación){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4900,9 +4900,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Ingreso STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}El guardado está en progreso,{}¡por favor espera hasta que termine! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Error al autoguardar STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}No es posible leer la unidad -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Error guardando partida{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}No es posible borrar el archivo -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Carga de Partida Errónea{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Error interno: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Partida guardada corrupta - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :La partida guardada ha sido realizada con una versión más nueva @@ -4996,7 +4994,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}No se pu STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}No puede construirse la sede de la empresa... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}No se puede construir ningún municipio +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}No se puede generar ningún municipio... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}No se puede renombrar el municipio... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}No se puede construir un municipio aquí... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}No se puede expandir este municipio... diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 8b127708c1..eec6d84e01 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -4781,9 +4781,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Ingreso STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Se sigue guardando la partida,{}¡por favor espera hasta que termine! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Error en guardado automático STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}No es posible leer la unidad de disco -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Error guardando partida{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}No es posible eliminar el archivo -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Error al cargar partida{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Error interno: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Archivo con errores - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :La partida guardada es de una versión más reciente del juego diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 532a9ca307..4e4c6ec3ab 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -4899,9 +4899,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Uppskatt STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Sparar fortfarande,{}vänta tills det är slutfört! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autosparning misslyckades STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan inte läsa från disk -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Sparandet av spelet misslyckades{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan inte ta bort filen -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Inläsningen av spelet misslyckades{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Internt fel: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Trasig sparfil - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Sparfilen är gjord med en nyare version diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 4ff1227a29..2193062821 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -4498,9 +4498,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}மத STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}பதிவாகிக்கொண்டிருக்கிறது,{}சிறிது நேரம் பொறுங்கள்,! STR_ERROR_AUTOSAVE_FAILED :{WHITE}தானியங்கிபதிவு தோல்வியடைந்தது STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}கணினி சேமிப்பகத்தினை படிக்க இயலவில்லை -STR_ERROR_GAME_SAVE_FAILED :{WHITE}ஆட்டத்தின் படிவு தோல்வியடைந்தது{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}கோப்பினை நீக்க இயலவில்லை -STR_ERROR_GAME_LOAD_FAILED :{WHITE}ஆட்டம் பதிவேறுவது தோல்வியடைந்தது{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :உள்பிழை: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :உடைந்த பதிவுஆட்டம் - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :புதிய பதிப்பினால் பதிவுஆட்டம் உருவாக்கப்பட்டுள்ளது diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 274479bae1..e943336d16 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -4242,9 +4242,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}รา STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}ขณะนี้กำลังบันทึก,{}โปรดรอจนกว่าจะเสร็จ! STR_ERROR_AUTOSAVE_FAILED :{WHITE}บันทึกอัตโนมัติล้มเหลว!!! STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}ไม่สามารถอ่านข้อมูลได้ -STR_ERROR_GAME_SAVE_FAILED :{WHITE}บันทึกเกมล้มเหลว!!!{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}ไม่สามารถทำการลบไฟล์ -STR_ERROR_GAME_LOAD_FAILED :{WHITE}โหลดเกมล้มเหลว{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :ข้อผิดพลาดจากภายใน: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :เกมที่บันทึกไว้ เสีย - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :เกมที่บันทึกไว้ สำหรับเวอร์ชันใหม่ diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index e25c202054..53866eae5f 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -4726,9 +4726,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}預估 STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}遊戲還在儲存中,{}請稍候! STR_ERROR_AUTOSAVE_FAILED :{WHITE}自動儲存失敗 STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}無法讀取磁碟 -STR_ERROR_GAME_SAVE_FAILED :{WHITE}遊戲儲存失敗{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}無法刪除檔案 -STR_ERROR_GAME_LOAD_FAILED :{WHITE}遊戲載入失敗{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :內部錯誤:{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :損壞的存檔 - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :該存檔是由較新版本的遊戲所產生 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 6d2ab610d8..2d5b6fa1a9 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -4898,9 +4898,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Tahmini STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Kayıt işlemi sürüyor,{}lütfen bitene kadar bekleyin! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Otomatik kayıt başarısız STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Sürücü okunamıyor -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Oyun kaydedilemedi{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Dosya silinemedi -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Dosya yüklenemedi{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :İç hata: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Bozuk kayıtlı oyun - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Oyun yeni bir sürümle kaydedilmiş. diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index b3d071428f..e0201cbca5 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1871,7 +1871,7 @@ STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Цоків STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Показувати час прибуття та відправлення у розкладах: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Відображати очікуваний час прибуття та відправлення у розкладі -STR_CONFIG_SETTING_QUICKGOTO :Прискорене створення наказів транспорту: {STRING} +STR_CONFIG_SETTING_QUICKGOTO :Прискорене створення завдань для транспорту: {STRING} STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :При відображенні списка завдань транспортного засобу автоматично натискається кнопка створення нових завдань STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Тип колії на початку нової/завантаженної гри: {STRING} @@ -2227,8 +2227,8 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL :Імперсь STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_METRIC :Метричні (л) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_SI :СІ (м³) -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Одиниці тяглової сили: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Якщо тяглова сила відображається на інтерфейсі: показувати її в обраній одиниці виміру +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Одиниці тягового зусилля: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Якщо тягове зусилля відображається на інтерфейсі: показувати її в обраній одиниці виміру ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL :Імперські (фунт-сили) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_METRIC :Метричні (кгс) @@ -2413,17 +2413,17 @@ STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Не налаш ###length 23 STR_LIVERY_DEFAULT :Базовий колір -STR_LIVERY_STEAM :Паровоз -STR_LIVERY_DIESEL :Тепловоз -STR_LIVERY_ELECTRIC :Електровоз +STR_LIVERY_STEAM :Паротяг +STR_LIVERY_DIESEL :Теплотяг +STR_LIVERY_ELECTRIC :Електротяг STR_LIVERY_MONORAIL :Монорейковий локомотив STR_LIVERY_MAGLEV :Магнітний локомотив -STR_LIVERY_DMU :Багатосекційний тепловоз -STR_LIVERY_EMU :Багатосекційний електровоз -STR_LIVERY_PASSENGER_WAGON_STEAM :Пасажирський вагон (паровоз) -STR_LIVERY_PASSENGER_WAGON_DIESEL :Пасажирський вагон (тепловоз) -STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Пасажирський вагон (електровоз) -STR_LIVERY_PASSENGER_WAGON_MONORAIL :Пасажирський вагон (монорейка) +STR_LIVERY_DMU :Багатосекційний теплотяг +STR_LIVERY_EMU :Багатосекційний електротяг +STR_LIVERY_PASSENGER_WAGON_STEAM :Пасажирський вагон (паротяговий) +STR_LIVERY_PASSENGER_WAGON_DIESEL :Пасажирський вагон (теплотяговий) +STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Пасажирський вагон (електротяговий) +STR_LIVERY_PASSENGER_WAGON_MONORAIL :Пасажирський вагон (монорейковий) STR_LIVERY_PASSENGER_WAGON_MAGLEV :Пасажирський вагон (маглев) STR_LIVERY_FREIGHT_WAGON :Вантажний вагон STR_LIVERY_BUS :Автобус @@ -2907,8 +2907,8 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Не п STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Підсвічувати зону покриття станції STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Приймає: {GOLD}{CARGO_LIST} STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Постачає: {GOLD}{CARGO_LIST} -STR_STATION_BUILD_INFRASTRUCTURE_COST_YEAR :{BLACK} Вартість експлуатації: {GOLD}{CURRENCY_SHORT}/рік -STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK} Вартість експлуатації: {GOLD}{CURRENCY_SHORT}/період +STR_STATION_BUILD_INFRASTRUCTURE_COST_YEAR :{BLACK}Вартість експлуатації: {GOLD}{CURRENCY_SHORT}/рік +STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}Вартість експлуатації: {GOLD}{CURRENCY_SHORT}/період # Join station window STR_JOIN_STATION_CAPTION :{WHITE}Об'єднати станцію @@ -4213,8 +4213,8 @@ STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Швид STR_PURCHASE_INFO_SPEED :{BLACK}Швидкість: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Швидкість в океані: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Швидкість в каналі/річці: {GOLD}{VELOCITY} -STR_PURCHASE_INFO_RUNNINGCOST_YEAR :{BLACK} Вартість експлуатації: {GOLD}{CURRENCY_LONG}/рік -STR_PURCHASE_INFO_RUNNINGCOST_PERIOD :{BLACK} Вартість експлуатації: {GOLD}{CURRENCY_LONG}/період +STR_PURCHASE_INFO_RUNNINGCOST_YEAR :{BLACK}Вартість експлуатації: {GOLD}{CURRENCY_LONG}/рік +STR_PURCHASE_INFO_RUNNINGCOST_PERIOD :{BLACK}Вартість експлуатації: {GOLD}{CURRENCY_LONG}/період STR_PURCHASE_INFO_CAPACITY :{BLACK}Місткість: {GOLD}{CARGO_LONG} {STRING} STR_PURCHASE_INFO_REFITTABLE :(змінюється) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Рік випуску: {GOLD}{NUM}{BLACK} Вік: {GOLD}{COMMA} р{P ік оки оків} @@ -4231,7 +4231,7 @@ STR_PURCHASE_INFO_ALL_TYPES :Всі типи STR_PURCHASE_INFO_NONE :Нема STR_PURCHASE_INFO_ENGINES_ONLY :Тільки локомотиви STR_PURCHASE_INFO_ALL_BUT :Всі, крім {CARGO_LIST} -STR_PURCHASE_INFO_MAX_TE :{BLACK}Максимальна тягова сила: {GOLD}{FORCE} +STR_PURCHASE_INFO_MAX_TE :{BLACK}Максимальне тягове зусилля: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Дальність: {GOLD}{COMMA} клітинок STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Тип літака: {GOLD}{STRING} @@ -4534,7 +4534,7 @@ STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Очі STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Занадто далеко до наступного місця призначення STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Прямує до {0:STATION} -STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Без наказів +STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Без завдань STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Прямує до {0:WAYPOINT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Прямує до {0:DEPOT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Техогляд у {0:DEPOT} @@ -4565,8 +4565,8 @@ STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Назв STR_VEHICLE_INFO_AGE :{COMMA} р{P ік оки оків} ({COMMA}) STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} р{P ік оки оків} ({COMMA}) -STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Вік: {LTBLUE}{STRING}{BLACK} Вартість експлуатації: {LTBLUE}{CURRENCY_LONG}/рік -STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Вік: {LTBLUE}{STRING}{BLACK} Вартість експлуатації: {LTBLUE}{CURRENCY_LONG}/період +STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Вік: {LTBLUE}{STRING}{BLACK}Вартість експлуатації: {LTBLUE}{CURRENCY_LONG}/рік +STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Вік: {LTBLUE}{STRING}{BLACK}Вартість експлуатації: {LTBLUE}{CURRENCY_LONG}/період STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Макс. швидкість: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Макс. швидкість: {LTBLUE}{VELOCITY} {BLACK}Тип: {LTBLUE}{STRING} @@ -4671,8 +4671,8 @@ STR_ORDERS_LIST_TOOLTIP :{BLACK}Марш STR_ORDER_INDEX :{COMMA}:{NBSP} STR_ORDER_TEXT :{STRING} {STRING} {STRING} {STRING} -STR_ORDERS_END_OF_ORDERS :- - Кінець наказів - - -STR_ORDERS_END_OF_SHARED_ORDERS :- - Кінець спільних наказів - - +STR_ORDERS_END_OF_ORDERS :- - Кінець завдань - - +STR_ORDERS_END_OF_SHARED_ORDERS :- - Кінець спільних завдань - - # Order bottom buttons STR_ORDER_NON_STOP :{BLACK}Без зупинки @@ -5041,9 +5041,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Приб STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Збереження...{}зачекайте, доки завершиться! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Помилка автозбереження STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Неможливо прочитати пристрій -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Помилка запису гри{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Неможливо стерти файл -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Помилка завантаження гри{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Внутрішня помилка: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Файл збереженої гри пошкоджений - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Файл збереженої гри зроблений більш новою версією @@ -5435,8 +5433,8 @@ STR_ERROR_CAN_T_MAKE_ROAD_VEHICLE_TURN :{WHITE}Немо STR_ERROR_AIRCRAFT_IS_IN_FLIGHT :{WHITE}Літак у польоті # Order related errors -STR_ERROR_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Немає місця для наказів -STR_ERROR_TOO_MANY_ORDERS :{WHITE}Дуже багато наказів +STR_ERROR_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Немає місця для нових завдань +STR_ERROR_TOO_MANY_ORDERS :{WHITE}Занадто багато завдань STR_ERROR_CAN_T_INSERT_NEW_ORDER :{WHITE}Неможливо додати наказ... STR_ERROR_CAN_T_DELETE_THIS_ORDER :{WHITE}Неможливо видалити наказ... STR_ERROR_CAN_T_MODIFY_THIS_ORDER :{WHITE}Неможливо змінити наказ... @@ -5658,33 +5656,33 @@ STR_SV_STNAME_FALLBACK :{STRING}, ст ##id 0x8000 ###length 116 # Vehicle names -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (паровоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_250_DIESEL :MJS 250 (тепловоз) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (паротяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_250_DIESEL :MJS 250 (теплотяг) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_CHOO_CHOO :Ploddyphut Choo-Choo STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_CHOO_CHOO :Powernaut Choo-Choo STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MIGHTYMOVER_CHOO_CHOO :MightyMover Choo-Choo -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_DIESEL :Ploddyphut (тепловоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_DIESEL :Powernaut (тепловоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_WILLS_2_8_0_STEAM :Wills 2-8-0 (паровоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :Chaney 'Jubilee' (паровоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu 'A4' (паровоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH '8P' (паровоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MANLEY_MOREL_DMU_DIESEL :Manley-Morel DMU (тепловоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :'Dash' (тепловоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Hendry '25' (тепловоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_UU_37_DIESEL :UU '37' (тепловоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_FLOSS_47_DIESEL :Floss '47' (тепловоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_4000_DIESEL :CS 4000 (тепловоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_2400_DIESEL :CS 2400 (тепловоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CENTENNIAL_DIESEL :Centennial (тепловоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KELLING_3100_DIESEL :Kelling 3100 (тепловоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_TURNER_TURBO_DIESEL :Turner Turbo (тепловоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_1000_DIESEL :MJS 1000 (тепловоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_125_DIESEL :SH '125' (тепловоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH '30' (електровоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH '40' (електровоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :'T.I.M.' (електровоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :'AsiaStar' (електровоз) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_DIESEL :Ploddyphut (теплотяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_DIESEL :Powernaut (теплотяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_WILLS_2_8_0_STEAM :Wills 2-8-0 (паротяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :Chaney 'Jubilee' (паротяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu 'A4' (паротяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH '8P' (паротяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MANLEY_MOREL_DMU_DIESEL :Manley-Morel DMU (теплотяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :'Dash' (теплотяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Hendry '25' (теплотяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_UU_37_DIESEL :UU '37' (теплотяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_FLOSS_47_DIESEL :Floss '47' (теплотяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_4000_DIESEL :CS 4000 (теплотяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_2400_DIESEL :CS 2400 (теплотяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CENTENNIAL_DIESEL :Centennial (теплотяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KELLING_3100_DIESEL :Kelling 3100 (теплотяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_TURNER_TURBO_DIESEL :Turner Turbo (теплотяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_1000_DIESEL :MJS 1000 (теплотяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_125_DIESEL :SH '125' (теплотяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH '30' (електротяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH '40' (електротяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :'T.I.M.' (електротяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :'AsiaStar' (електротяг) STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PASSENGER_CAR :Пасажирський вагон STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_MAIL_VAN :Поштовий вагон STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COAL_CAR :Вагон для вугілля @@ -5712,8 +5710,8 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOY_VAN :Вагон дл STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BATTERY_TRUCK :Вагон для батарейок STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FIZZY_DRINK_TRUCK :Вагон для газованої води STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PLASTIC_TRUCK :Вагон для пластиліну -STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (електровоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :'Millennium Z1' (електровоз) +STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (електротяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :'Millennium Z1' (електротяг) STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_WIZZOWOW_Z99 :Wizzowow Z99 STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PASSENGER_CAR :Пасажирський вагон STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_MAIL_VAN :Поштовий вагон @@ -5742,10 +5740,10 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :Вагон дл STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BATTERY_TRUCK :Вагон для батарейок STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FIZZY_DRINK_TRUCK :Вагон для газованої води STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PLASTIC_TRUCK :Вагон для пластиліну -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (електровоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (електровоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 'Pegasus' (електровоз) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 'Chimaera' (електровоз) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (електротяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (електротяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 'Pegasus' (електротяг) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 'Chimaera' (електротяг) STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_WIZZOWOW_ROCKETEER :Wizzowow Rocketeer STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PASSENGER_CAR :Пасажирський вагон STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_MAIL_VAN :Поштовий вагон diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index b23f17c21b..e92e3b05f7 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -4643,7 +4643,7 @@ STR_ORDER_REFIT_ORDER :(Cải biến t STR_ORDER_REFIT_STOP_ORDER :(Cải biến thành {STRING} và dừng) STR_ORDER_STOP_ORDER :(Dừng) -STR_ORDER_WAIT_TO_UNBUNCH :(chờ để gỡ gộp) +STR_ORDER_WAIT_TO_UNBUNCH :(Chờ để gỡ gộp) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Không thể sử dụng trạm){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4899,9 +4899,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Thu nh STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Đang lưu vào đĩa,{}hãy chờ cho đến khi hoàn thành! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Tự lưu gặp lỗi STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Không đọc được đĩa -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Lưu ván chơi có lỗi{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Không thể xoá file -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Nạp ván chơi thất bại{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Lỗi kỹ thuật: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Bản lưu ván chơi bị hỏng - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Bản lưu ván chơi dành cho phiên bản mới hơn diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 1a4deca7a4..c92814a9d1 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -4899,9 +4899,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Amcangyf STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Mae'r gêm wrthi'n cael ei chadw,{}Arhoswch nes y bydd y broses wedi'i chwblhau! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Methodd yr Awtogadw STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Methu darllen y gyriant -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Methwyd â Chadw Gêm{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Methu Dileu Ffeil -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Methwyd â Llwytho Gêm{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Gwall mewnol: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Mae'r gêm a gadwyd wedi torri - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Mae'r gêm a gadwyd wedi ei chadw mewn fersiwn ddiweddarach From 975082659087af55f9da3738cb657334e6111625 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 2 Apr 2024 13:29:15 +0100 Subject: [PATCH 226/695] Fix a29766d: Wrong scrolling dropdown list position with RTL. (#12412) --- src/dropdown.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/dropdown.cpp b/src/dropdown.cpp index 7c7285a8e8..292d524132 100644 --- a/src/dropdown.cpp +++ b/src/dropdown.cpp @@ -192,7 +192,12 @@ struct DropdownWindow : Window { this->position.y = button_rect.bottom + 1; } - this->position.x = (_current_text_dir == TD_RTL) ? button_rect.right + 1 - (int)widget_dim.width : button_rect.left; + if (_current_text_dir == TD_RTL) { + /* In case the list is wider than the parent button, the list should be right aligned to the button and overflow to the left. */ + this->position.x = button_rect.right + 1 - (int)(widget_dim.width + (list_dim.height > widget_dim.height ? NWidgetScrollbar::GetVerticalDimension().width : 0)); + } else { + this->position.x = button_rect.left; + } this->items_dim = widget_dim; this->GetWidget(WID_DM_SHOW_SCROLL)->SetDisplayedPlane(list_dim.height > widget_dim.height ? 0 : SZSP_NONE); From 931aa39018ed740a70cc38acd52991d2a979dc95 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 3 Apr 2024 04:40:31 +0000 Subject: [PATCH 227/695] Update: Translations from eints english (au): 2 changes by krysclarke swedish: 2 changes by joeax910 greek: 2 changes by gh658804 russian: 3 changes by its5Q catalan: 2 changes by J0anJosep spanish: 2 changes by MontyMontana portuguese: 2 changes by azulcosta portuguese (brazilian): 27 changes by pasantoro polish: 2 changes by pAter-exe --- src/lang/brazilian_portuguese.txt | 52 ++++++++++++++++--------------- src/lang/catalan.txt | 2 ++ src/lang/english_AU.txt | 2 ++ src/lang/greek.txt | 2 ++ src/lang/polish.txt | 2 ++ src/lang/portuguese.txt | 2 ++ src/lang/russian.txt | 4 ++- src/lang/spanish.txt | 2 ++ src/lang/swedish.txt | 2 ++ 9 files changed, 44 insertions(+), 26 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index aa8b7d6a99..c341fd49fd 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -405,7 +405,7 @@ STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construi STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Construir infraestrutura rodoviária STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Construir infraestrutura para bondes STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Construir infraestrutura hidroviária -STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Construir aeroportos +STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Construir aeroporto STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Abrir menu de paisagismo, menu de árvores ou colocar uma placa STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Abrir janela de som/música STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Abrir última mensagem/notícia, histórico de mensagens ou apagar todas as mensagens @@ -506,7 +506,7 @@ STR_ROAD_MENU_ROAD_CONSTRUCTION :Construção de STR_ROAD_MENU_TRAM_CONSTRUCTION :Construção de linha de bonde # Waterways construction menu -STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construção de hidrovias +STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construção de hidrovia # Aairport construction menu STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Construção de aeroporto @@ -680,7 +680,7 @@ STR_PERFORMANCE_DETAIL_LOAN_TOOLTIP :{BLACK}O montan STR_PERFORMANCE_DETAIL_TOTAL_TOOLTIP :{BLACK}Total de pontos de pontos possíveis # Music window -STR_MUSIC_JAZZ_JUKEBOX_CAPTION :{WHITE}Jukebox de Jazz +STR_MUSIC_JAZZ_JUKEBOX_CAPTION :{WHITE}Jukebox de Música STR_MUSIC_PLAYLIST_ALL :{TINY_FONT}{BLACK}Todos STR_MUSIC_PLAYLIST_OLD_STYLE :{TINY_FONT}{BLACK}Antigo STR_MUSIC_PLAYLIST_NEW_STYLE :{TINY_FONT}{BLACK}Moderno @@ -1530,8 +1530,8 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Duração da me STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Tempo de exibição de mensagens de erro numa janela vermelha. Algumas mensagens de erro (crítico) não são fechadas automaticamente após este tempo e precisam ser fechadas manualmente STR_CONFIG_SETTING_HOVER_DELAY :Mostrar textos de ajuda: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tempo que o cursor deve ficar sobre algum elemento da interface para que os textos de ajuda sejam mostrados. Outro modo de exibir os textos de ajuda é fixar este valor em 0 e clicar com o botão direito do mouse -STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Manter o cursor por {COMMA} milissegundo{P 0 "" s} +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tempo que o ponteiro do mouse deve ficar sobre algum elemento da interface para que os textos de ajuda sejam mostrados. Outro modo de exibir os textos de ajuda é fixar este valor em 0 e clicar com o botão direito do mouse +STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Manter o ponteiro por {COMMA} milissegundo{P 0 "" s} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Botão direito @@ -1673,7 +1673,7 @@ STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Mover o mapa STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Desativado STR_CONFIG_SETTING_OSK_ACTIVATION :Teclado virtual: {STRING} -STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Escolher o método para mostrar o teclado virtual para inserir texto em caixas de diálogo usando o cursor. Isto é útil para dispositivos pequenos que não possuem teclados +STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Escolher o método para mostrar o teclado virtual para inserir texto em caixas de diálogo usando apenas o cursor. Isto é útil para dispositivos pequenos que não possuem teclados ###length 4 STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :Desativado STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Clique duplo @@ -1736,7 +1736,7 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostrar chegada STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Mostrar os horários previstos de chegada e de partida nos quadros de horários STR_CONFIG_SETTING_QUICKGOTO :Criação rápida de ordens de veículos: {STRING} -STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Pré-selecionar o cursor 'Ir Para' ao abrir a janela de ordens +STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Pré-selecionar o 'cursor Ir para' ao abrir a janela de ordens STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Tipo de trilho padrão (ao iniciar novo/abrir jogo): {STRING} STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Tipo de trilho a ser selecionado ao iniciar novo/abrir um jogo. 'Primeiro disponível' seleciona o tipo de trilho mais antigo. 'Último disponível' seleciona o tipo mais novo de trilho e 'Mais utilizado' seleciona o tipo que é mais usado atualmente @@ -2912,8 +2912,8 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Orienta STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Escolher a orientação da estação de bondes de carga # Waterways toolbar (last two for SE only) -STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Construção de Hidrovias -STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Hidrovias +STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Construção de Hidrovia +STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Hidrovia STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Construir canais. Pressione também Shift para só mostrar o custo estimado STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Construir eclusas. Pressione também Shift para só mostrar o custo estimado STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Construir depósito de embarcações (para compra e manutenção de embarcações). Pressione também Shift para só mostrar o custo estimado @@ -2982,11 +2982,11 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plantar STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Plantar Aleatoriamente STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plantar árvores aleatoriamente no terreno STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plantar árvores isoladas ao arrastar o cursor sobre o terreno +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plantar árvores isoladas ao arrastar o ponteiro sobre o terreno STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Bosque -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plantar florestas pequenas ao arrastar o cursor sobre o terreno +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plantar florestas pequenas ao arrastar o ponteiro sobre o terreno STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Floresta -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantar florestas grandes ao arrastar o cursor sobre o terreno +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantar florestas grandes ao arrastar o ponteiro sobre o terreno # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Geração de Terreno @@ -4900,7 +4900,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Receita STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravação ainda sendo executada,{}por favor aguarde até terminar! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Salvamento automático falhou STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Não é possível ler a unidade +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Falha ao salvar jogo... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Não é possível apagar o arquivo +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Falha ao abrir jogo... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erro interno: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Jogo salvo está corrompido - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Jogo salvo foi feito com uma versão mais recente @@ -4952,7 +4954,7 @@ STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Terreno STR_ERROR_CAN_T_DO_THIS :{WHITE}Não é possível fazer isto... STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}A construção deve ser demolida primeiro STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Não é possível limpar esta área... -STR_ERROR_SITE_UNSUITABLE :{WHITE}... local inadequado +STR_ERROR_SITE_UNSUITABLE :{WHITE}... local não adequado STR_ERROR_ALREADY_BUILT :{WHITE}... já construído STR_ERROR_OWNED_BY :{WHITE}... pertence a {STRING} STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... área pertence a outra empresa @@ -4970,9 +4972,9 @@ STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}A autori STR_ERROR_BRIBE_FAILED :{WHITE}A sua tentativa de suborno foi descoberta por um investigador regional # Levelling errors -STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}Não é possível elevar terreno aqui... -STR_ERROR_CAN_T_LOWER_LAND_HERE :{WHITE}Não é possível abaixar terreno aqui... -STR_ERROR_CAN_T_LEVEL_LAND_HERE :{WHITE}Não é possível nivelar o terreno aqui... +STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}Não é possível elevar este terreno... +STR_ERROR_CAN_T_LOWER_LAND_HERE :{WHITE}Não é possível abaixar este terreno... +STR_ERROR_CAN_T_LEVEL_LAND_HERE :{WHITE}Não é possível nivelar este terreno... STR_ERROR_EXCAVATION_WOULD_DAMAGE :{WHITE}A escavação danificaria o túnel STR_ERROR_ALREADY_AT_SEA_LEVEL :{WHITE}... já está ao nível do mar STR_ERROR_TOO_HIGH :{WHITE}... muito alto @@ -5080,7 +5082,7 @@ STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Não é STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Não é possível colocar boia aqui... STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Não é possível alterar o nome do ponto de controle... -STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Não é possível remover ponto de controle de trem daqui... +STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Não é possível remover ponto de controle de trem aqui... STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Precisa remover o ponto de controle ferroviário primeiro STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... boia no caminho STR_ERROR_BUOY_IS_IN_USE :{WHITE}... boia está em uso por outra empresa! @@ -5135,25 +5137,25 @@ STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Passagen STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Passagens de nível não são permitidas para este tipo de estrada STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Não é possível construir sinais aqui... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Não é possível construir ferrovia aqui... -STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Não é possível remover ferrovia daqui... -STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Não é possível remover sinais daqui... -STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Não é possível converter os sinais daqui... +STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Não é possível remover ferrovia aqui... +STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Não é possível remover sinais aqui... +STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Não é possível converter os sinais aqui... STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}... não existe uma ferrovia STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}... não existem sinais -STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Não é possível converter o tipo de trilho daqui... +STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Não é possível converter o tipo de trilho aqui... # Road construction errors STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Precisa remover a estrada primeiro STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... estradas de sentido único não podem ter junções STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Não é possível construir estrada aqui... STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Não é possível construir linha de bonde aqui... -STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Não é possível remover estrada daqui... -STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Não é possível remover linha de bonde daqui... +STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Não é possível remover estrada aqui... +STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Não é possível remover linha de bonde aqui... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... não existe uma estrada STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... não existe uma linha de bonde -STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Não é possível converter o tipo de estrada daqui... -STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Não é possível converter o tipo de linha de bonde daqui... +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Não é possível converter o tipo de estrada aqui... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Não é possível converter o tipo de linha de bonde aqui... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Estrada não adequada STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Linha de bonde não adequada diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 113987983f..519ab8d79d 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -4900,7 +4900,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Ingresso STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Es desa la partida.{}Espera que acabi l'operació! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Ha fallat el desat automàtic STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Impossible llegir la unitat de disc +STR_ERROR_GAME_SAVE_FAILED :{WHITE}La partida no s'ha pogut desar... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Impossible esborrar l'arxiu +STR_ERROR_GAME_LOAD_FAILED :{WHITE}La partida no s'ha pogut carregar... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Error Intern: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :L'arxiu de la partida està corromput - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :La partida està desada amb una versió més moderna diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 9f4762c403..03b42319c3 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -4899,7 +4899,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Estimate STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Saving still in progress,{}please wait until it is finished! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autosave failed STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Unable to read drive +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Game save failed... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Unable to delete file +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Game load failed... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Internal error: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Broken savegame - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Savegame is made with newer version diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 18af4e3dd8..556f5ee773 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -4999,7 +4999,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Υπολ STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Η αποθήκευση είναι σε εξέλιξη,{}παρακαλώ περιμένετε να τελειώσει! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Η αυτόματη αποθήκευση απέτυχε STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Αδύνατη η ανάγνωση του δίσκου +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Η αποθήκευση του παιχνιδιού απέτυχε... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Αδύνατη η διαγραφή του αρχείου +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Το φόρτωμα του παιχνιδιού απέτυχε... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Εσωτερικό λάθος: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Χαλασμένο αποθηκευμένο παιχνίδι - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Το αποθηκευμένο παιχνίδι είναι φτιαγμένο με νεότερη έκδοση diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 2f4ec34ac0..8ac204df73 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -5285,7 +5285,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Szacowan STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Zapisywanie trwa,{}proszę zaczekać do zakończenia! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Błąd autozapisu STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Nie można odczytać napędu +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Nie można zapisać gry... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Nie można usunąć pliku +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Nie można wczytać gry... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Błąd wewnętrzny: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Zepsuta zapisana gra - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Zapisana gra zrobiona w nowszej wersji diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index e087cf92a8..8fe6e61310 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -4900,7 +4900,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Lucro Es STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravação ainda em curso,{}por favor aguarde! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Falha ao guardar automaticamente STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Não é possível ler unidade +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Falha ao guardar jogo... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Não é possível eliminar ficheiro +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Falha ao carregar jogo... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erro interno: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Ficheiro corrompido - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Jogo gravado numa versão mais recente do jogo diff --git a/src/lang/russian.txt b/src/lang/russian.txt index ef7719ce68..1ced93984e 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2822,7 +2822,7 @@ STR_CONTENT_OPEN_URL :{BLACK}Веб- STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Посетить веб-сайт с информацией об этом модуле STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Скачать STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Начать загрузку выбранного контента -STR_CONTENT_TOTAL_DOWNLOAD_SIZE :{SILVER}Всего для загруки: {WHITE}{BYTES} +STR_CONTENT_TOTAL_DOWNLOAD_SIZE :{SILVER}Всего для загрузки: {WHITE}{BYTES} STR_CONTENT_DETAIL_TITLE :{SILVER}ИНФОРМАЦИЯ О КОНТЕНТЕ ###length 5 @@ -5086,7 +5086,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Пред STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Идёт сохранение;{}пожалуйста, дождитесь завершения! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Ошибка автосохранения STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Не удалось прочитать диск +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Невозможно сохранить игру... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Невозможно удалить файл +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Невозможно загрузить игру... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Внутренняя ошибка: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Файл повреждён - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Сохранение сделано в более новой версии diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 7c3463a32a..76df3cab47 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -4900,7 +4900,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Ingreso STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}El guardado está en progreso,{}¡por favor espera hasta que termine! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Error al autoguardar STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}No es posible leer la unidad +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Error al guardar la partida... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}No es posible borrar el archivo +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Error al cargar la partida... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Error interno: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Partida guardada corrupta - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :La partida guardada ha sido realizada con una versión más nueva diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 4e4c6ec3ab..f7627ee22c 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -4899,7 +4899,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Uppskatt STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Sparar fortfarande,{}vänta tills det är slutfört! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autosparning misslyckades STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan inte läsa från disk +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Sparandet av spelet misslyckades... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan inte ta bort filen +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Inläsningen av spelet misslyckades... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Internt fel: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Trasig sparfil - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Sparfilen är gjord med en nyare version From 243c6bead327f2654455c8da6fc1a1cef4f5cf62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Wed, 3 Apr 2024 23:16:36 +0200 Subject: [PATCH 228/695] Fix #12415, 9c49a61, df400ef: Aircraft::tile is valid only for front vehicle (#12416) --- src/aircraft.h | 1 + src/economy.cpp | 14 +++++++------- src/vehicle_base.h | 2 ++ 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/aircraft.h b/src/aircraft.h index ef33f85898..6c47d6df56 100644 --- a/src/aircraft.h +++ b/src/aircraft.h @@ -111,6 +111,7 @@ struct Aircraft final : public SpecializedVehicle { void OnNewEconomyDay() override; uint Crash(bool flooded = false) override; TileIndex GetOrderStationLocation(StationID station) override; + TileIndex GetCargoTile() const override { return this->First()->tile; } ClosestDepot FindClosestDepot() override; /** diff --git a/src/economy.cpp b/src/economy.cpp index 9e880a51df..868b1acb5a 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1301,7 +1301,7 @@ void PrepareUnload(Vehicle *front_v) front_v->last_station_visited, next_station, front_v->current_order.GetUnloadType(), ge, front_v->cargo_payment, - v->tile); + v->GetCargoTile()); if (v->cargo.UnloadCount() > 0) SetBit(v->vehicle_flags, VF_CARGO_UNLOADING); } } @@ -1441,7 +1441,7 @@ struct ReturnCargoAction */ bool operator()(Vehicle *v) { - v->cargo.Return(UINT_MAX, &this->st->goods[v->cargo_type].cargo, this->next_hop, v->tile); + v->cargo.Return(UINT_MAX, &this->st->goods[v->cargo_type].cargo, this->next_hop, v->GetCargoTile()); return true; } }; @@ -1476,7 +1476,7 @@ struct FinalizeRefitAction { if (this->do_reserve) { this->st->goods[v->cargo_type].cargo.Reserve(v->cargo_cap - v->cargo.RemainingCount(), - &v->cargo, this->next_station, v->tile); + &v->cargo, this->next_station, v->GetCargoTile()); } this->consist_capleft[v->cargo_type] += v->cargo_cap - v->cargo.RemainingCount(); return true; @@ -1567,7 +1567,7 @@ struct ReserveCargoAction { { if (v->cargo_cap > v->cargo.RemainingCount() && MayLoadUnderExclusiveRights(st, v)) { st->goods[v->cargo_type].cargo.Reserve(v->cargo_cap - v->cargo.RemainingCount(), - &v->cargo, *next_station, v->tile); + &v->cargo, *next_station, v->GetCargoTile()); } return true; @@ -1701,7 +1701,7 @@ static void LoadUnloadVehicle(Vehicle *front) uint new_remaining = v->cargo.RemainingCount() + v->cargo.ActionCount(VehicleCargoList::MTA_DELIVER); if (v->cargo_cap < new_remaining) { /* Return some of the reserved cargo to not overload the vehicle. */ - v->cargo.Return(new_remaining - v->cargo_cap, &ge->cargo, INVALID_STATION, v->tile); + v->cargo.Return(new_remaining - v->cargo_cap, &ge->cargo, INVALID_STATION, v->GetCargoTile()); } /* Keep instead of delivering. This may lead to no cargo being unloaded, so ...*/ @@ -1728,7 +1728,7 @@ static void LoadUnloadVehicle(Vehicle *front) } } - amount_unloaded = v->cargo.Unload(amount_unloaded, &ge->cargo, payment, v->tile); + amount_unloaded = v->cargo.Unload(amount_unloaded, &ge->cargo, payment, v->GetCargoTile()); remaining = v->cargo.UnloadCount() > 0; if (amount_unloaded > 0) { dirty_vehicle = true; @@ -1798,7 +1798,7 @@ static void LoadUnloadVehicle(Vehicle *front) if (v->cargo.StoredCount() == 0) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO); if (_settings_game.order.gradual_loading) cap_left = std::min(cap_left, GetLoadAmount(v)); - uint loaded = ge->cargo.Load(cap_left, &v->cargo, next_station, v->tile); + uint loaded = ge->cargo.Load(cap_left, &v->cargo, next_station, v->GetCargoTile()); if (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0) { /* Remember if there are reservations left so that we don't stop * loading before they're loaded. */ diff --git a/src/vehicle_base.h b/src/vehicle_base.h index 592063323c..6accdd7425 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -791,6 +791,8 @@ public: */ virtual TileIndex GetOrderStationLocation([[maybe_unused]] StationID station) { return INVALID_TILE; } + virtual TileIndex GetCargoTile() const { return this->tile; } + /** * Find the closest depot for this vehicle and tell us the location, * DestinationID and whether we should reverse. From 08cf106fc613c56ff8628046440e243b5dcd58c7 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 4 Apr 2024 04:41:30 +0000 Subject: [PATCH 229/695] Update: Translations from eints english (us): 2 changes by 2TallTyler finnish: 2 changes by hpiirai ukrainian: 2 changes by Quantom2 danish: 2 changes by beruic portuguese (brazilian): 22 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 44 +++++++++++++++---------------- src/lang/danish.txt | 2 ++ src/lang/english_US.txt | 2 ++ src/lang/finnish.txt | 2 ++ src/lang/ukrainian.txt | 2 ++ 5 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index c341fd49fd..f14c43a26b 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -270,7 +270,7 @@ STR_UNITS_PERIODS :{NUM}{NBSP}per # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtro: STR_LIST_FILTER_OSKTITLE :{BLACK}Inserir uma ou mais palavras-chave para filtrar a lista -STR_LIST_FILTER_TOOLTIP :{BLACK}Digite uma ou mais palavras-chave para procurar na lista +STR_LIST_FILTER_TOOLTIP :{BLACK}Introduza uma ou mais palavras-chave para procurar na lista STR_TOOLTIP_GROUP_ORDER :{BLACK}Escolher a ordem de agrupamento STR_TOOLTIP_SORT_ORDER :{BLACK}Escolher a ordenação (descendente/ascendente) @@ -418,7 +418,7 @@ STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Editor de Cenário STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Mover a data inicial 1 ano para trás STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Mover a data inicial 1 ano para frente -STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Clique para digitar o ano de início +STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Clique para alterar o ano de início STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Abrir mapa, visualização extra, lista de placas, de localidades ou de indústrias STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Abrir menu de paisagismo ou gerar um novo mundo STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Construir ou gerar localidades @@ -2420,8 +2420,8 @@ STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adiciona STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Iniciar servidor STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Iniciar um servidor próprio -STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Digitar o seu nome -STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Digitar o endereço de servidor ou código de convite +STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Introduza o seu nome +STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Introduza o endereço de servidor ou código de convite # Start new multiplayer server STR_NETWORK_START_SERVER_CAPTION :{WHITE}Iniciar novo jogo multijogador @@ -2440,7 +2440,7 @@ STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} em STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Número máximo de empresas: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limitar o servidor a um certo número de empresas -STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Coloque o nome para o jogo em rede +STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Introduza um nome para o jogo em rede # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Conectando... @@ -2461,8 +2461,8 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Obtendo STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconectar -STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Digite a senha -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Digite a senha +STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Introduza a senha +STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Introduza a senha # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Jogadores conectados @@ -2560,7 +2560,7 @@ STR_NETWORK_CHAT_CLIENT :[Privado] {STRI STR_NETWORK_CHAT_TO_CLIENT :[Privado] Para {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_ALL :[Todos] {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_EXTERNAL :[{3:STRING}] {0:STRING}: {WHITE}{1:STRING} -STR_NETWORK_CHAT_OSKTITLE :{BLACK}Digitar a mensagem para conversar na rede +STR_NETWORK_CHAT_OSKTITLE :{BLACK}Introduza a mensagem para conversar na rede # Network messages STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Não foram encontradas interfaces de rede ou o jogo foi compilado sem ENABLE_NETWORK @@ -2646,14 +2646,14 @@ STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}O servid STR_NETWORK_MESSAGE_KICKED :*** {STRING} foi expulso. Motivo: ({STRING}) STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Falha ao registrar o servidor -STR_NETWORK_ERROR_COORDINATOR_REUSE_OF_INVITE_CODE :{WHITE}Outro servidor com o mesmo código de convite foi registrado. Mudando para o tipo de jogo "local". +STR_NETWORK_ERROR_COORDINATOR_REUSE_OF_INVITE_CODE :{WHITE}Outro servidor com o mesmo código de convite foi registrado. Mudando o jogo para o tipo "local". STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}O seu servidor não permite conexões remotas STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Outros jogadores não poderão se conectar ao seu servidor # Content downloading window STR_CONTENT_TITLE :{WHITE}Download de conteúdo STR_CONTENT_TYPE_CAPTION :{BLACK}Tipo -STR_CONTENT_TYPE_CAPTION_TOOLTIP :{BLACK}Tipo do conteúdo +STR_CONTENT_TYPE_CAPTION_TOOLTIP :{BLACK}Tipo de conteúdo STR_CONTENT_NAME_CAPTION :{BLACK}Nome STR_CONTENT_NAME_CAPTION_TOOLTIP :{BLACK}Nome do conteúdo STR_CONTENT_MATRIX_TOOLTIP :{BLACK}Clique numa linha para ver os detalhes{}Clique na caixa de seleção para marcar e fazer o download @@ -3014,8 +3014,8 @@ STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Expandir STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Fazer com que todas as localidades cresçam ligeiramente STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nome da localidade: -STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Digitar o nome da localidade -STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Clique para digitar o nome da localidade +STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Introduza o nome da localidade +STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Clique para editar o nome da localidade STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Nome aleatório STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Gerar novo nome aleatório @@ -3283,7 +3283,7 @@ STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Você q STR_SAVELOAD_DIRECTORY :{STRING} (Diretório) STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Diretório raiz) -STR_SAVELOAD_OSKTITLE :{BLACK}Digitar um nome para o jogo que será gravado +STR_SAVELOAD_OSKTITLE :{BLACK}Introduza um nome para o jogo que será gravado # World generation STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Geração de Mapas @@ -3459,7 +3459,7 @@ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Incompatí # NewGRF save preset window STR_SAVE_PRESET_CAPTION :{WHITE}Salvar predefinição STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lista de predefinições disponíveis, selecione uma para copiar o nome e usar na gravação abaixo -STR_SAVE_PRESET_TITLE :{BLACK}Digitar um nome para a predefinição +STR_SAVE_PRESET_TITLE :{BLACK}Introduza um nome para a predefinição STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Nome que está selecionado para salvar a predefinição STR_SAVE_PRESET_CANCEL :{BLACK}Cancelar STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Não alterar a predefinição @@ -3603,7 +3603,7 @@ STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Centrali STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Ir para a próxima placa STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Ir para a placa anterior -STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Digitar um nome para a placa +STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Introduza um nome para a placa # Town directory window STR_TOWN_DIRECTORY_CAPTION :{WHITE}Localidades @@ -3920,7 +3920,7 @@ STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Alterar STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nome da Empresa STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nome do Presidente -STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Digitar a quantia de dinheiro que você quer dar +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Introduza o valor que você quer dar STR_BUY_COMPANY_MESSAGE :{WHITE}Estamos procurando uma empresa de transportes para comprar a nossa empresa.{}{}Você deseja comprar {COMPANY} por {CURRENCY_LONG}? STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Na aquisição hostil de {COMPANY} você irá adquirir todos os ativos, liquidar todos os empréstimos e pagar dois anos de lucros.{}{}O total estimado é de {CURRENCY_LONG}.{}{}Você deseja continuar esta aquisição hostil? @@ -4271,9 +4271,9 @@ STR_ENGINE_PREVIEW_SHIP :{G=f}embarcaç STR_ENGINE_PREVIEW_TEXT3 :{BLACK}{STRING}{}{5:STRING}{}{STRING} STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING}{}{STRING}{}{STRING}{}{STRING} STR_ENGINE_PREVIEW_COST_WEIGHT :Custo: {CURRENCY_LONG} Peso: {WEIGHT_SHORT} -STR_ENGINE_PREVIEW_COST_MAX_SPEED :Custo: {CURRENCY_LONG} Velocidade máx.: {VELOCITY} +STR_ENGINE_PREVIEW_COST_MAX_SPEED :Custo: {CURRENCY_LONG} Veloc. máx.: {VELOCITY} STR_ENGINE_PREVIEW_SPEED_POWER :Velocidade: {VELOCITY} Potência: {POWER} -STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Velocidade: {VELOCITY} Potência: {POWER} Tração máx.: {FORCE} +STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Veloc.: {VELOCITY} Potência: {POWER} Tração máx.: {FORCE} STR_ENGINE_PREVIEW_TYPE :Tipo de aeronave: {STRING} STR_ENGINE_PREVIEW_TYPE_RANGE :Tipo de aeronave: {STRING} Autonomia: {COMMA} quadrados STR_ENGINE_PREVIEW_RUNCOST_YEAR :Custo Operacional: {CURRENCY_LONG}/ano @@ -4431,9 +4431,9 @@ STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Idade: { STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Velocidade máx.: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Velocidade máx.: {LTBLUE}{VELOCITY} {BLACK}Tipo de aeronave: {LTBLUE}{STRING} -STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Velocidade máx.: {LTBLUE}{VELOCITY} {BLACK}Tipo de aeronave: {LTBLUE}{STRING} {BLACK}Autonomia: {LTBLUE}{COMMA} quadrados -STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Velocidade máx.: {LTBLUE}{VELOCITY} -STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Velocidade máx.: {LTBLUE}{VELOCITY} {BLACK}Força de Tração máx.: {LTBLUE}{FORCE} +STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Veloc. máx.: {LTBLUE}{VELOCITY} {BLACK}Tipo de aeronave: {LTBLUE}{STRING} {BLACK}Autonomia: {LTBLUE}{COMMA} quadrados +STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Veloc. máx.: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Veloc. máx.: {LTBLUE}{VELOCITY} {BLACK}Tração máx.: {LTBLUE}{FORCE} STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucro neste ano: {LTBLUE}{CURRENCY_LONG} (último ano: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Lucro neste ano: {LTBLUE}{CURRENCY_LONG} (último ano: {CURRENCY_LONG}) {BLACK}Desempenho mín.: {LTBLUE}{POWER_TO_WEIGHT} @@ -4602,7 +4602,7 @@ STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :for verdadeiro STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :for falso STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}O valor para comparar com os dados do veículo -STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Digitar um valor para comparar +STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Introduza um valor para comparar STR_ORDERS_SKIP_BUTTON :{BLACK}Saltar STR_ORDERS_SKIP_TOOLTIP :{BLACK}Saltar a ordem atual e iniciar a próxima. Ctrl+Clique para saltar até a ordem selecionada diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 6ac32bfd39..1e81cb03c9 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -4899,7 +4899,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Anslået STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gemmer stadig,{}vent venligst! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Fejl under autogem STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan ikke læse drevet +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Fejl under lagring af spil... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan ikke slette fil +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Fejl under indlæsning af spil... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Intern fejl: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Ødelagt gemt spil - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spillet er gemt med en nyere version diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index f2e68f6a6e..c2d29d3cd4 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -4899,7 +4899,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Estimate STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Saving still in progress,{}please wait until it is finished! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autosave failed STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Unable to read drive +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Game save failed... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Unable to delete file +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Game load failed... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Internal error: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Broken savegame - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Savegame is made with newer version diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index e8dc798d97..962a27f6e6 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -4899,7 +4899,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Arvioitu STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Tallentaminen käynnissä,{}odota, kunnes se päättyy! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automaattitallennus epäonnistui. STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Asemaa ei voi lukea. +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Pelin tallennus epäonnistui… STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Tiedostoa ei voi poistaa. +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Pelin lataus epäonnistui… STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Sisäinen virhe: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Viallinen tallennus – {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Tallennus on tehty uudemmalla versiolla diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index e0201cbca5..76bc68375b 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -5041,7 +5041,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Приб STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Збереження...{}зачекайте, доки завершиться! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Помилка автозбереження STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Неможливо прочитати пристрій +STR_ERROR_GAME_SAVE_FAILED : STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Неможливо стерти файл +STR_ERROR_GAME_LOAD_FAILED : STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Внутрішня помилка: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Файл збереженої гри пошкоджений - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Файл збереженої гри зроблений більш новою версією From f6a88e40a4540dbf58f664d0c322b39f6a929169 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 4 Apr 2024 07:53:14 +0100 Subject: [PATCH 230/695] Codechange: Use std::list for News Items. (#12338) --- src/crashlog.cpp | 9 +- src/news_func.h | 2 +- src/news_gui.cpp | 329 ++++++++++++++++++------------------------ src/news_gui.h | 2 +- src/news_type.h | 5 +- src/statusbar_gui.cpp | 4 +- 6 files changed, 155 insertions(+), 196 deletions(-) diff --git a/src/crashlog.cpp b/src/crashlog.cpp index dfa029ca44..b728406fd8 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -56,11 +56,12 @@ static void SurveyRecentNews(nlohmann::json &json) json = nlohmann::json::array(); int i = 0; - for (NewsItem *news = _latest_news; i < 32 && news != nullptr; news = news->prev, i++) { - TimerGameCalendar::YearMonthDay ymd = TimerGameCalendar::ConvertDateToYMD(news->date); + for (const auto &news : GetNews()) { + TimerGameCalendar::YearMonthDay ymd = TimerGameCalendar::ConvertDateToYMD(news.date); json.push_back(fmt::format("({}-{:02}-{:02}) StringID: {}, Type: {}, Ref1: {}, {}, Ref2: {}, {}", - ymd.year, ymd.month + 1, ymd.day, news->string_id, news->type, - news->reftype1, news->ref1, news->reftype2, news->ref2)); + ymd.year, ymd.month + 1, ymd.day, news.string_id, news.type, + news.reftype1, news.ref1, news.reftype2, news.ref2)); + if (++i > 32) break; } } diff --git a/src/news_func.h b/src/news_func.h index 614f29cf7e..e24b115258 100644 --- a/src/news_func.h +++ b/src/news_func.h @@ -55,7 +55,7 @@ inline void AddIndustryNewsItem(StringID string, NewsType type, IndustryID indus void NewsLoop(); void InitNewsItemStructs(); -extern const NewsItem *_statusbar_news_item; +const NewsItem *GetStatusbarNews(); void DeleteInvalidEngineNews(); void DeleteVehicleNews(VehicleID vid, StringID news); diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 36200d003d..fe7710ca8d 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -21,7 +21,6 @@ #include "town.h" #include "sound_func.h" #include "string_func.h" -#include "dropdown_func.h" #include "statusbar_gui.h" #include "company_manager_face.h" #include "company_func.h" @@ -44,25 +43,42 @@ #include "safeguards.h" -const NewsItem *_statusbar_news_item = nullptr; +static const uint MIN_NEWS_AMOUNT = 30; ///< preferred minimum amount of news messages. +static const uint MAX_NEWS_AMOUNT = 1U << 10; ///< Do not exceed this number of news messages. -static uint MIN_NEWS_AMOUNT = 30; ///< preferred minimum amount of news messages -static uint MAX_NEWS_AMOUNT = 1 << 10; ///< Do not exceed this number of news messages -static uint _total_news = 0; ///< current number of news items -static NewsItem *_oldest_news = nullptr; ///< head of news items queue -NewsItem *_latest_news = nullptr; ///< tail of news items queue +static NewsContainer _news; ///< List of news, with newest items at the start. /** * Forced news item. * Users can force an item by accessing the history or "last message". - * If the message being shown was forced by the user, a pointer is stored - * in _forced_news. Otherwise, \a _forced_news variable is nullptr. + * If the message being shown was forced by the user, an iterater is stored + * in _forced_news. Otherwise, \a _forced_news variable is the end of \a _news. */ -static const NewsItem *_forced_news = nullptr; +static NewsIterator _forced_news = std::end(_news); /** Current news item (last item shown regularly). */ -static const NewsItem *_current_news = nullptr; +static NewsIterator _current_news = std::end(_news); +/** Current status bar news item. */ +static NewsIterator _statusbar_news = std::end(_news); + +/** + * Get pointer to the current status bar news item. + * @return Pointer to the current status bar news item, or nullptr if there is none. + */ +const NewsItem *GetStatusbarNews() +{ + return (_statusbar_news == std::end(_news)) ? nullptr : &*_statusbar_news; +} + +/** + * Get read-only reference to all news items. + * @return Read-only reference to all news items. + */ +const NewsContainer &GetNews() +{ + return _news; +} /** * Get the position a news-reference is referencing. @@ -484,7 +500,7 @@ struct NewsWindow : Window { case WID_N_CLOSEBOX: NewsWindow::duration = 0; this->Close(); - _forced_news = nullptr; + _forced_news = std::end(_news); break; case WID_N_CAPTION: @@ -622,29 +638,21 @@ static void ShowNewspaper(const NewsItem *ni) } /** Show news item in the ticker */ -static void ShowTicker(const NewsItem *ni) +static void ShowTicker(NewsIterator ni) { if (_settings_client.sound.news_ticker) SndPlayFx(SND_16_NEWS_TICKER); - _statusbar_news_item = ni; + _statusbar_news = ni; InvalidateWindowData(WC_STATUS_BAR, 0, SBI_SHOW_TICKER); } /** Initialize the news-items data structures */ void InitNewsItemStructs() { - for (NewsItem *ni = _oldest_news; ni != nullptr; ) { - NewsItem *next = ni->next; - delete ni; - ni = next; - } - - _total_news = 0; - _oldest_news = nullptr; - _latest_news = nullptr; - _forced_news = nullptr; - _current_news = nullptr; - _statusbar_news_item = nullptr; + _news.clear(); + _forced_news = std::end(_news); + _current_news = std::end(_news); + _statusbar_news = std::end(_news); NewsWindow::duration = 0; } @@ -654,7 +662,7 @@ void InitNewsItemStructs() */ static bool ReadyForNextTickerItem() { - const NewsItem *ni = _statusbar_news_item; + const NewsItem *ni = GetStatusbarNews(); if (ni == nullptr) return true; /* Ticker message @@ -668,8 +676,7 @@ static bool ReadyForNextTickerItem() */ static bool ReadyForNextNewsItem() { - const NewsItem *ni = _forced_news == nullptr ? _current_news : _forced_news; - if (ni == nullptr) return true; + if (_forced_news == std::end(_news) && _current_news == std::end(_news)) return true; /* neither newsticker nor newspaper are running */ return (NewsWindow::duration <= 0 || FindWindowById(WC_NEWS_WINDOW, 0) == nullptr); @@ -678,116 +685,98 @@ static bool ReadyForNextNewsItem() /** Move to the next ticker item */ static void MoveToNextTickerItem() { + assert(!std::empty(_news)); + /* There is no status bar, so no reason to show news; * especially important with the end game screen when * there is no status bar but possible news. */ if (FindWindowById(WC_STATUS_BAR, 0) == nullptr) return; - /* if we're not at the last item, then move on */ - while (_statusbar_news_item != _latest_news) { - _statusbar_news_item = (_statusbar_news_item == nullptr) ? _oldest_news : _statusbar_news_item->next; - const NewsItem *ni = _statusbar_news_item; - const NewsType type = ni->type; + /* if we're not at the latest item, then move on */ + while (_statusbar_news != std::begin(_news)) { + --_statusbar_news; + const NewsType type = _statusbar_news->type; /* check the date, don't show too old items */ - if (TimerGameEconomy::date - _news_type_data[type].age > ni->economy_date) continue; + if (TimerGameEconomy::date - _news_type_data[type].age > _statusbar_news->economy_date) continue; switch (_news_type_data[type].GetDisplay()) { default: NOT_REACHED(); case ND_OFF: // Off - show nothing only a small reminder in the status bar InvalidateWindowData(WC_STATUS_BAR, 0, SBI_SHOW_REMINDER); - break; + return; case ND_SUMMARY: // Summary - show ticker - ShowTicker(ni); - break; + ShowTicker(_statusbar_news); + return; case ND_FULL: // Full - show newspaper, skipped here - continue; + break;; } - return; } } /** Move to the next news item */ static void MoveToNextNewsItem() { + assert(!std::empty(_news)); + /* There is no status bar, so no reason to show news; * especially important with the end game screen when * there is no status bar but possible news. */ if (FindWindowById(WC_STATUS_BAR, 0) == nullptr) return; CloseWindowById(WC_NEWS_WINDOW, 0); // close the newspapers window if shown - _forced_news = nullptr; + _forced_news = std::end(_news); - /* if we're not at the last item, then move on */ - while (_current_news != _latest_news) { - _current_news = (_current_news == nullptr) ? _oldest_news : _current_news->next; - const NewsItem *ni = _current_news; - const NewsType type = ni->type; + /* if we're not at the latest item, then move on */ + while (_current_news != std::begin(_news)) { + --_current_news; + const NewsType type = _current_news->type; /* check the date, don't show too old items */ - if (TimerGameEconomy::date - _news_type_data[type].age > ni->economy_date) continue; + if (TimerGameEconomy::date - _news_type_data[type].age > _current_news->economy_date) continue; switch (_news_type_data[type].GetDisplay()) { default: NOT_REACHED(); case ND_OFF: // Off - show nothing only a small reminder in the status bar, skipped here - continue; + break; case ND_SUMMARY: // Summary - show ticker, skipped here - continue; + break;; case ND_FULL: // Full - show newspaper - ShowNewspaper(ni); - break; + ShowNewspaper(&*_current_news); + return; } - return; } } /** Delete a news item from the queue */ -static void DeleteNewsItem(NewsItem *ni) +static std::list::iterator DeleteNewsItem(std::list::iterator ni) { - /* Delete the news from the news queue. */ - if (ni->prev != nullptr) { - ni->prev->next = ni->next; - } else { - assert(_oldest_news == ni); - _oldest_news = ni->next; - } - - if (ni->next != nullptr) { - ni->next->prev = ni->prev; - } else { - assert(_latest_news == ni); - _latest_news = ni->prev; - } - - _total_news--; - if (_forced_news == ni || _current_news == ni) { /* When we're the current news, go to the previous item first; * we just possibly made that the last news item. */ - if (_current_news == ni) _current_news = ni->prev; + if (_current_news == ni) _current_news = (_current_news == std::begin(_news)) ? std::end(_news) : std::prev(_current_news); /* About to remove the currently forced item (shown as newspapers) || * about to remove the currently displayed item (newspapers) */ MoveToNextNewsItem(); } - if (_statusbar_news_item == ni) { + if (_statusbar_news == ni) { /* When we're the current news, go to the previous item first; * we just possibly made that the last news item. */ - _statusbar_news_item = ni->prev; + if (_statusbar_news == ni) _statusbar_news = (_statusbar_news == std::begin(_news)) ? std::end(_news) : std::prev(_statusbar_news); /* About to remove the currently displayed item (ticker, or just a reminder) */ InvalidateWindowData(WC_STATUS_BAR, 0, SBI_NEWS_DELETED); // invalidate the statusbar MoveToNextTickerItem(); } - delete ni; - - SetWindowDirty(WC_MESSAGE_HISTORY, 0); + /* Delete the news from the news queue. */ + return _news.erase(ni); } /** @@ -829,27 +818,14 @@ void AddNewsItem(StringID string, NewsType type, NewsFlag flags, NewsReferenceTy if (_game_mode == GM_MENU) return; /* Create new news item node */ - NewsItem *ni = new NewsItem(string, type, flags, reftype1, ref1, reftype2, ref2, data); - - if (_total_news++ == 0) { - assert(_oldest_news == nullptr); - _oldest_news = ni; - ni->prev = nullptr; - } else { - assert(_latest_news->next == nullptr); - _latest_news->next = ni; - ni->prev = _latest_news; - } - - ni->next = nullptr; - _latest_news = ni; + _news.emplace_front(string, type, flags, reftype1, ref1, reftype2, ref2, data); /* Keep the number of stored news items to a managable number */ - if (_total_news > MAX_NEWS_AMOUNT) { - DeleteNewsItem(_oldest_news); + if (std::size(_news) > MAX_NEWS_AMOUNT) { + DeleteNewsItem(std::prev(std::end(_news))); } - SetWindowDirty(WC_MESSAGE_HISTORY, 0); + InvalidateWindowData(WC_MESSAGE_HISTORY, 0); } /** @@ -910,6 +886,29 @@ CommandCost CmdCustomNewsItem(DoCommandFlag flags, NewsType type, NewsReferenceT return CommandCost(); } +/** + * Delete news items by predicate, and invalidate the message history if necessary. + * @tparam Tmin Stop if the number of news items remaining reaches \a min items. + * @tparam Tpredicate Condition for a news item to be deleted. + */ +template +void DeleteNews(Tpredicate predicate) +{ + bool dirty = false; + for (auto it = std::rbegin(_news); it != std::rend(_news); /* nothing */) { + if constexpr (Tmin > 0) { + if (std::size(_news) <= Tmin) break; + } + if (predicate(*it)) { + it = std::make_reverse_iterator(DeleteNewsItem(std::prev(it.base()))); + dirty = true; + } else { + ++it; + } + } + if (dirty) InvalidateWindowData(WC_MESSAGE_HISTORY, 0); +} + /** * Delete a news item type about a vehicle. * When the news item type is INVALID_STRING_ID all news about the vehicle gets deleted. @@ -918,16 +917,9 @@ CommandCost CmdCustomNewsItem(DoCommandFlag flags, NewsType type, NewsReferenceT */ void DeleteVehicleNews(VehicleID vid, StringID news) { - NewsItem *ni = _oldest_news; - - while (ni != nullptr) { - NewsItem *next = ni->next; - if (((ni->reftype1 == NR_VEHICLE && ni->ref1 == vid) || (ni->reftype2 == NR_VEHICLE && ni->ref2 == vid)) && - (news == INVALID_STRING_ID || ni->string_id == news)) { - DeleteNewsItem(ni); - } - ni = next; - } + DeleteNews([&](const auto &ni) { + return ((ni.reftype1 == NR_VEHICLE && ni.ref1 == vid) || (ni.reftype2 == NR_VEHICLE && ni.ref2 == vid)) && (news == INVALID_STRING_ID || ni.string_id == news); + }); } /** @@ -937,15 +929,9 @@ void DeleteVehicleNews(VehicleID vid, StringID news) */ void DeleteStationNews(StationID sid) { - NewsItem *ni = _oldest_news; - - while (ni != nullptr) { - NewsItem *next = ni->next; - if ((ni->reftype1 == NR_STATION && ni->ref1 == sid) || (ni->reftype2 == NR_STATION && ni->ref2 == sid)) { - DeleteNewsItem(ni); - } - ni = next; - } + DeleteNews([&](const auto &ni) { + return (ni.reftype1 == NR_STATION && ni.ref1 == sid) || (ni.reftype2 == NR_STATION && ni.ref2 == sid); + }); } /** @@ -954,15 +940,9 @@ void DeleteStationNews(StationID sid) */ void DeleteIndustryNews(IndustryID iid) { - NewsItem *ni = _oldest_news; - - while (ni != nullptr) { - NewsItem *next = ni->next; - if ((ni->reftype1 == NR_INDUSTRY && ni->ref1 == iid) || (ni->reftype2 == NR_INDUSTRY && ni->ref2 == iid)) { - DeleteNewsItem(ni); - } - ni = next; - } + DeleteNews([&](const auto &ni) { + return (ni.reftype1 == NR_INDUSTRY && ni.ref1 == iid) || (ni.reftype2 == NR_INDUSTRY && ni.ref2 == iid); + }); } /** @@ -970,25 +950,17 @@ void DeleteIndustryNews(IndustryID iid) */ void DeleteInvalidEngineNews() { - NewsItem *ni = _oldest_news; - - while (ni != nullptr) { - NewsItem *next = ni->next; - if ((ni->reftype1 == NR_ENGINE && (!Engine::IsValidID(ni->ref1) || !Engine::Get(ni->ref1)->IsEnabled())) || - (ni->reftype2 == NR_ENGINE && (!Engine::IsValidID(ni->ref2) || !Engine::Get(ni->ref2)->IsEnabled()))) { - DeleteNewsItem(ni); - } - ni = next; - } + DeleteNews([](const auto &ni) { + return (ni.reftype1 == NR_ENGINE && (!Engine::IsValidID(ni.ref1) || !Engine::Get(ni.ref1)->IsEnabled())) || + (ni.reftype2 == NR_ENGINE && (!Engine::IsValidID(ni.ref2) || !Engine::Get(ni.ref2)->IsEnabled())); + }); } static void RemoveOldNewsItems() { - NewsItem *next; - for (NewsItem *cur = _oldest_news; _total_news > MIN_NEWS_AMOUNT && cur != nullptr; cur = next) { - next = cur->next; - if (TimerGameEconomy::date - _news_type_data[cur->type].age * _settings_client.gui.news_message_timeout > cur->economy_date) DeleteNewsItem(cur); - } + DeleteNews([](const auto &ni) { + return TimerGameEconomy::date - _news_type_data[ni.type].age * _settings_client.gui.news_message_timeout > ni.economy_date; + }); } /** @@ -999,17 +971,17 @@ static void RemoveOldNewsItems() */ void ChangeVehicleNews(VehicleID from_index, VehicleID to_index) { - for (NewsItem *ni = _oldest_news; ni != nullptr; ni = ni->next) { - if (ni->reftype1 == NR_VEHICLE && ni->ref1 == from_index) ni->ref1 = to_index; - if (ni->reftype2 == NR_VEHICLE && ni->ref2 == from_index) ni->ref2 = to_index; - if (ni->flags & NF_VEHICLE_PARAM0 && ni->params[0].data == from_index) ni->params[0] = to_index; + for (auto &ni : _news) { + if (ni.reftype1 == NR_VEHICLE && ni.ref1 == from_index) ni.ref1 = to_index; + if (ni.reftype2 == NR_VEHICLE && ni.ref2 == from_index) ni.ref2 = to_index; + if (ni.flags & NF_VEHICLE_PARAM0 && ni.params[0].data == from_index) ni.params[0] = to_index; } } void NewsLoop() { /* no news item yet */ - if (_total_news == 0) return; + if (std::empty(_news)) return; static TimerGameEconomy::Month _last_clean_month = 0; @@ -1023,9 +995,9 @@ void NewsLoop() } /** Do a forced show of a specific message */ -static void ShowNewsMessage(const NewsItem *ni) +static void ShowNewsMessage(NewsIterator ni) { - assert(_total_news != 0); + assert(!std::empty(_news)); /* Delete the news window */ CloseWindowById(WC_NEWS_WINDOW, 0); @@ -1033,9 +1005,9 @@ static void ShowNewsMessage(const NewsItem *ni) /* setup forced news item */ _forced_news = ni; - if (_forced_news != nullptr) { + if (_forced_news != std::end(_news)) { CloseWindowById(WC_NEWS_WINDOW, 0); - ShowNewspaper(ni); + ShowNewspaper(&*ni); } } @@ -1054,26 +1026,26 @@ bool HideActiveNewsMessage() /** Show previous news item */ void ShowLastNewsMessage() { - const NewsItem *ni = nullptr; - if (_total_news == 0) { - return; - } else if (_forced_news == nullptr) { + if (std::empty(_news)) return; + + NewsIterator ni; + if (_forced_news == std::end(_news)) { /* Not forced any news yet, show the current one, unless a news window is * open (which can only be the current one), then show the previous item */ - if (_current_news == nullptr) { + if (_current_news == std::end(_news)) { /* No news were shown yet resp. the last shown one was already deleted. - * Threat this as if _forced_news reached _oldest_news; so, wrap around and start anew with the latest. */ - ni = _latest_news; + * Treat this as if _forced_news reached the oldest news; so, wrap around and start anew with the latest. */ + ni = std::begin(_news); } else { const Window *w = FindWindowById(WC_NEWS_WINDOW, 0); - ni = (w == nullptr || (_current_news == _oldest_news)) ? _current_news : _current_news->prev; + ni = (w == nullptr || (std::next(_current_news) == std::end(_news))) ? _current_news : std::next(_current_news); } - } else if (_forced_news == _oldest_news) { + } else if (std::next(_forced_news) == std::end(_news)) { /* We have reached the oldest news, start anew with the latest */ - ni = _latest_news; + ni = std::begin(_news); } else { /* 'Scrolling' through news history show each one in turn */ - ni = _forced_news->prev; + ni = std::next(_forced_news); } bool wrap = false; for (;;) { @@ -1082,11 +1054,11 @@ void ShowLastNewsMessage() break; } - ni = ni->prev; - if (ni == nullptr) { + ++ni; + if (ni == std::end(_news)) { if (wrap) break; /* We have reached the oldest news, start anew with the latest */ - ni = _latest_news; + ni = std::begin(_news); wrap = true; } } @@ -1143,37 +1115,23 @@ struct MessageHistoryWindow : Window { } } - void OnPaint() override - { - this->OnInvalidateData(0); - this->DrawWidgets(); - } - void DrawWidget(const Rect &r, WidgetID widget) const override { - if (widget != WID_MH_BACKGROUND || _total_news == 0) return; - - /* Find the first news item to display. */ - NewsItem *ni = _latest_news; - for (int n = this->vscroll->GetPosition(); n > 0; n--) { - ni = ni->prev; - if (ni == nullptr) return; - } + if (widget != WID_MH_BACKGROUND || std::empty(_news)) return; /* Fill the widget with news items. */ bool rtl = _current_text_dir == TD_RTL; Rect news = r.Shrink(WidgetDimensions::scaled.framerect).Indent(this->date_width + WidgetDimensions::scaled.hsep_wide, rtl); Rect date = r.Shrink(WidgetDimensions::scaled.framerect).WithWidth(this->date_width, rtl); int y = news.top; - for (int n = this->vscroll->GetCapacity(); n > 0; n--) { + + auto [first, last] = this->vscroll->GetVisibleRangeIterators(_news); + for (auto ni = first; ni != last; ++ni) { SetDParam(0, ni->date); DrawString(date.left, date.right, y, STR_JUST_DATE_TINY, TC_WHITE); - DrawNewsString(news.left, news.right, y, TC_WHITE, ni); + DrawNewsString(news.left, news.right, y, TC_WHITE, &*ni); y += this->line_height; - - ni = ni->prev; - if (ni == nullptr) return; } } @@ -1185,19 +1143,18 @@ struct MessageHistoryWindow : Window { void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override { if (!gui_scope) return; - this->vscroll->SetCount(_total_news); + this->vscroll->SetCount(std::size(_news)); } void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override { if (widget == WID_MH_BACKGROUND) { - NewsItem *ni = _latest_news; - if (ni == nullptr) return; - - for (int n = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_MH_BACKGROUND, WidgetDimensions::scaled.framerect.top); n > 0; n--) { - ni = ni->prev; - if (ni == nullptr) return; - } + /* Scheduled window invalidations currently occur after the input loop, which means the scrollbar count + * could be invalid, so ensure it's correct now. Potentially this means that item clicked on might be + * different as well. */ + this->vscroll->SetCount(std::size(_news)); + auto ni = this->vscroll->GetScrolledItemFromWidget(_news, pt.y, this, widget); + if (ni == std::end(_news)) return; ShowNewsMessage(ni); } diff --git a/src/news_gui.h b/src/news_gui.h index 059d51ad32..c7fea6cebd 100644 --- a/src/news_gui.h +++ b/src/news_gui.h @@ -16,6 +16,6 @@ void ShowLastNewsMessage(); void ShowMessageHistory(); bool HideActiveNewsMessage(); -extern NewsItem *_latest_news; +const NewsContainer &GetNews(); #endif /* NEWS_GUI_H */ diff --git a/src/news_type.h b/src/news_type.h index ffe63b6a8e..cbafbef1ce 100644 --- a/src/news_type.h +++ b/src/news_type.h @@ -126,8 +126,6 @@ struct NewsAllocatedData { /** Information about a single item of news. */ struct NewsItem { - NewsItem *prev; ///< Previous news item - NewsItem *next; ///< Next news item StringID string_id; ///< Message text TimerGameCalendar::Date date; ///< Calendar date to show for the news TimerGameEconomy::Date economy_date; ///< Economy date of the news item, never shown but used to calculate age @@ -169,4 +167,7 @@ struct CompanyNewsInformation : NewsAllocatedData { CompanyNewsInformation(const struct Company *c, const struct Company *other = nullptr); }; +using NewsContainer = std::list; ///< Container type for storing news items. +using NewsIterator = NewsContainer::const_iterator; ///< Iterator type for news items. + #endif /* NEWS_TYPE_H */ diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp index 7229ffd803..69f12dbfdd 100644 --- a/src/statusbar_gui.cpp +++ b/src/statusbar_gui.cpp @@ -145,9 +145,9 @@ struct StatusBarWindow : Window { } else if (_pause_mode != PM_UNPAUSED) { StringID msg = (_pause_mode & PM_PAUSED_LINK_GRAPH) ? STR_STATUSBAR_PAUSED_LINK_GRAPH : STR_STATUSBAR_PAUSED; DrawString(tr, msg, TC_FROMSTRING, SA_HOR_CENTER); - } else if (this->ticker_scroll < TICKER_STOP && _statusbar_news_item != nullptr && _statusbar_news_item->string_id != 0) { + } else if (this->ticker_scroll < TICKER_STOP && GetStatusbarNews() != nullptr && GetStatusbarNews()->string_id != 0) { /* Draw the scrolling news text */ - if (!DrawScrollingStatusText(_statusbar_news_item, ScaleGUITrad(this->ticker_scroll), tr.left, tr.right, tr.top, tr.bottom)) { + if (!DrawScrollingStatusText(GetStatusbarNews(), ScaleGUITrad(this->ticker_scroll), tr.left, tr.right, tr.top, tr.bottom)) { InvalidateWindowData(WC_STATUS_BAR, 0, SBI_NEWS_DELETED); if (Company::IsValidID(_local_company)) { /* This is the default text */ From 338def1b06537732f617d388134080cd9d6bbdf9 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 4 Apr 2024 14:39:15 +0100 Subject: [PATCH 231/695] Fix: Segfault when using -q without providing a . character. (#12418) Use std::filesystem::path to find extension instead of strrchr. --- src/openttd.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index 31b9220bbb..7414fe29b1 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -628,7 +628,8 @@ int openttd_main(int argc, char *argv[]) return ret; } - auto [_, title] = FiosGetSavegameListCallback(SLO_LOAD, mgo.opt, strrchr(mgo.opt, '.')); + std::string extension = std::filesystem::path(_file_to_saveload.name).extension().string(); + auto [_, title] = FiosGetSavegameListCallback(SLO_LOAD, mgo.opt, extension); _load_check_data.Clear(); SaveOrLoadResult res = SaveOrLoad(mgo.opt, SLO_CHECK, DFT_GAME_FILE, SAVE_DIR, false); From 197fb00d316370ed67c1a0e62a1b1cfa0c45b6d8 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 4 Apr 2024 17:56:16 +0100 Subject: [PATCH 232/695] Fix #12395: Ensure president name widget is tall enough. (#12419) --- src/company_cmd.cpp | 1 + src/company_gui.cpp | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 2f68a61817..a92ced1154 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -1182,6 +1182,7 @@ CommandCost CmdRenamePresident(DoCommandFlag flags, const std::string &text) } } + InvalidateWindowClassesData(WC_COMPANY, 1); MarkWholeScreenDirty(); CompanyAdminUpdate(c); } diff --git a/src/company_gui.cpp b/src/company_gui.cpp index a72569f1a9..27f014b408 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -2452,6 +2452,14 @@ struct CompanyWindow : Window } } + void OnResize() override + { + NWidgetResizeBase *wid = this->GetWidget(WID_C_FACE_TITLE); + SetDParam(0, this->owner); + int y = GetStringHeight(STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE, wid->current_x); + if (wid->UpdateVerticalSize(y)) this->ReInit(0, 0); + } + void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override { switch (widget) { @@ -2587,6 +2595,14 @@ struct CompanyWindow : Window break; } } + + void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override + { + if (gui_scope && data == 1) { + /* Manually call OnResize to adjust minimum height of president name widget. */ + OnResize(); + } + } }; static WindowDesc _company_desc( From 7c322ebcf109c26a109f896cc45bd72d463862fd Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 4 Apr 2024 20:27:11 +0100 Subject: [PATCH 233/695] Codechange: Define a ZOOM_LVL for minimum text effect visibility. --- src/texteff.cpp | 8 ++++---- src/zoom_type.h | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/texteff.cpp b/src/texteff.cpp index 01dca6087c..930df8421c 100644 --- a/src/texteff.cpp +++ b/src/texteff.cpp @@ -102,10 +102,10 @@ IntervalTimer move_all_text_effects_interval = {std::chrono::millis continue; } - te.MarkDirty(ZOOM_LVL_OUT_8X); + te.MarkDirty(ZOOM_LVL_TEXT_EFFECT); te.duration -= count; te.top -= count * ZOOM_LVL_BASE; - te.MarkDirty(ZOOM_LVL_OUT_8X); + te.MarkDirty(ZOOM_LVL_TEXT_EFFECT); } }}; @@ -118,13 +118,13 @@ void InitTextEffects() void DrawTextEffects(DrawPixelInfo *dpi) { /* Don't draw the text effects when zoomed out a lot */ - if (dpi->zoom > ZOOM_LVL_OUT_8X) return; + if (dpi->zoom > ZOOM_LVL_TEXT_EFFECT) return; if (IsTransparencySet(TO_TEXT)) return; for (TextEffect &te : _text_effects) { if (te.string_id == INVALID_STRING_ID) continue; if (te.mode == TE_RISING || _settings_client.gui.loading_indicators) { CopyInDParam(te.params); - ViewportAddString(dpi, ZOOM_LVL_OUT_8X, &te, te.string_id, te.string_id - 1, STR_NULL); + ViewportAddString(dpi, ZOOM_LVL_TEXT_EFFECT, &te, te.string_id, te.string_id - 1, STR_NULL); } } } diff --git a/src/zoom_type.h b/src/zoom_type.h index bc6d58d8be..f5db67e2fc 100644 --- a/src/zoom_type.h +++ b/src/zoom_type.h @@ -38,7 +38,8 @@ enum ZoomLevel : uint8_t { ZOOM_LVL_ROADVEH = ZOOM_LVL_OUT_4X, ///< Default zoom level for the road vehicle view. ZOOM_LVL_WORLD_SCREENSHOT = ZOOM_LVL_OUT_4X, ///< Default zoom level for the world screen shot. - ZOOM_LVL_DETAIL = ZOOM_LVL_OUT_8X, ///< All zoomlevels below or equal to this, will result in details on the screen, like road-work, ... + ZOOM_LVL_DETAIL = ZOOM_LVL_OUT_8X, ///< All zoom levels below or equal to this will result in details on the screen, like road-work, ... + ZOOM_LVL_TEXT_EFFECT = ZOOM_LVL_OUT_8X, ///< All zoom levels above this will not show text effects. ZOOM_LVL_MIN = ZOOM_LVL_NORMAL, ///< Minimum zoom level. ZOOM_LVL_MAX = ZOOM_LVL_OUT_32X, ///< Maximum zoom level. From 3c94e81665d1f3eaf3c416a48306d7a45ee15ab7 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 4 Apr 2024 18:49:37 +0100 Subject: [PATCH 234/695] Codechange: Use ZOOM_LVL_MIN to refer to first zoom level. Many uses of ZOOM_LVL_NORMAL actually just want the first zoom level slot, so use ZOOM_LVL_MIN to make this clearer. --- src/blitter/32bpp_optimized.cpp | 14 +++---- src/blitter/32bpp_simple.cpp | 14 +++---- src/blitter/32bpp_sse2.cpp | 14 +++---- src/blitter/8bpp_optimized.cpp | 14 +++---- src/blitter/8bpp_simple.cpp | 14 +++---- src/blitter/null.cpp | 8 ++-- src/fontcache/freetypefontcache.cpp | 4 +- src/gfx.cpp | 14 +++---- src/newgrf_debug_gui.cpp | 2 +- src/openttd.cpp | 2 +- src/os/macosx/font_osx.cpp | 4 +- src/os/windows/font_win32.cpp | 4 +- src/spritecache.cpp | 58 +++++++++++++++-------------- src/spriteloader/grf.cpp | 4 +- src/video/opengl.cpp | 12 +++--- src/viewport.cpp | 10 ++--- src/window.cpp | 2 +- src/zoom_func.h | 10 ++--- 18 files changed, 103 insertions(+), 101 deletions(-) diff --git a/src/blitter/32bpp_optimized.cpp b/src/blitter/32bpp_optimized.cpp index 65fa193576..943e9a0297 100644 --- a/src/blitter/32bpp_optimized.cpp +++ b/src/blitter/32bpp_optimized.cpp @@ -306,9 +306,9 @@ template Sprite *Blitter_32bppOptimized::EncodeInternal(const ZoomLevel zoom_min; ZoomLevel zoom_max; - if (sprite[ZOOM_LVL_NORMAL].type == SpriteType::Font) { - zoom_min = ZOOM_LVL_NORMAL; - zoom_max = ZOOM_LVL_NORMAL; + if (sprite[ZOOM_LVL_MIN].type == SpriteType::Font) { + zoom_min = ZOOM_LVL_MIN; + zoom_max = ZOOM_LVL_MIN; } else { zoom_min = _settings_client.gui.zoom_min; zoom_max = _settings_client.gui.zoom_max; @@ -416,10 +416,10 @@ template Sprite *Blitter_32bppOptimized::EncodeInternal(const Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + sizeof(SpriteData) + len); - dest_sprite->height = sprite[ZOOM_LVL_NORMAL].height; - dest_sprite->width = sprite[ZOOM_LVL_NORMAL].width; - dest_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs; - dest_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs; + dest_sprite->height = sprite[ZOOM_LVL_MIN].height; + dest_sprite->width = sprite[ZOOM_LVL_MIN].width; + dest_sprite->x_offs = sprite[ZOOM_LVL_MIN].x_offs; + dest_sprite->y_offs = sprite[ZOOM_LVL_MIN].y_offs; SpriteData *dst = (SpriteData *)dest_sprite->data; memset(dst, 0, sizeof(*dst)); diff --git a/src/blitter/32bpp_simple.cpp b/src/blitter/32bpp_simple.cpp index 00c0497109..653b2a4b38 100644 --- a/src/blitter/32bpp_simple.cpp +++ b/src/blitter/32bpp_simple.cpp @@ -118,17 +118,17 @@ void Blitter_32bppSimple::DrawColourMappingRect(void *dst, int width, int height Sprite *Blitter_32bppSimple::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) { Blitter_32bppSimple::Pixel *dst; - Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + (size_t)sprite[ZOOM_LVL_NORMAL].height * (size_t)sprite[ZOOM_LVL_NORMAL].width * sizeof(*dst)); + Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + (size_t)sprite[ZOOM_LVL_MIN].height * (size_t)sprite[ZOOM_LVL_MIN].width * sizeof(*dst)); - dest_sprite->height = sprite[ZOOM_LVL_NORMAL].height; - dest_sprite->width = sprite[ZOOM_LVL_NORMAL].width; - dest_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs; - dest_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs; + dest_sprite->height = sprite[ZOOM_LVL_MIN].height; + dest_sprite->width = sprite[ZOOM_LVL_MIN].width; + dest_sprite->x_offs = sprite[ZOOM_LVL_MIN].x_offs; + dest_sprite->y_offs = sprite[ZOOM_LVL_MIN].y_offs; dst = (Blitter_32bppSimple::Pixel *)dest_sprite->data; - SpriteLoader::CommonPixel *src = (SpriteLoader::CommonPixel *)sprite[ZOOM_LVL_NORMAL].data; + SpriteLoader::CommonPixel *src = (SpriteLoader::CommonPixel *)sprite[ZOOM_LVL_MIN].data; - for (int i = 0; i < sprite[ZOOM_LVL_NORMAL].height * sprite[ZOOM_LVL_NORMAL].width; i++) { + for (int i = 0; i < sprite[ZOOM_LVL_MIN].height * sprite[ZOOM_LVL_MIN].width; i++) { if (src->m == 0) { dst[i].r = src->r; dst[i].g = src->g; diff --git a/src/blitter/32bpp_sse2.cpp b/src/blitter/32bpp_sse2.cpp index 6c486d1b5e..72919b9bc4 100644 --- a/src/blitter/32bpp_sse2.cpp +++ b/src/blitter/32bpp_sse2.cpp @@ -26,9 +26,9 @@ Sprite *Blitter_32bppSSE_Base::Encode(const SpriteLoader::SpriteCollection &spri * Second uint32_t of a line = the number of transparent pixels from the right. * Then all RGBA then all MV. */ - ZoomLevel zoom_min = ZOOM_LVL_NORMAL; - ZoomLevel zoom_max = ZOOM_LVL_NORMAL; - if (sprite[ZOOM_LVL_NORMAL].type != SpriteType::Font) { + ZoomLevel zoom_min = ZOOM_LVL_MIN; + ZoomLevel zoom_max = ZOOM_LVL_MIN; + if (sprite[ZOOM_LVL_MIN].type != SpriteType::Font) { zoom_min = _settings_client.gui.zoom_min; zoom_max = _settings_client.gui.zoom_max; if (zoom_max == zoom_min) zoom_max = ZOOM_LVL_MAX; @@ -52,10 +52,10 @@ Sprite *Blitter_32bppSSE_Base::Encode(const SpriteLoader::SpriteCollection &spri } Sprite *dst_sprite = (Sprite *) allocator(sizeof(Sprite) + sizeof(SpriteData) + all_sprites_size); - dst_sprite->height = sprite[ZOOM_LVL_NORMAL].height; - dst_sprite->width = sprite[ZOOM_LVL_NORMAL].width; - dst_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs; - dst_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs; + dst_sprite->height = sprite[ZOOM_LVL_MIN].height; + dst_sprite->width = sprite[ZOOM_LVL_MIN].width; + dst_sprite->x_offs = sprite[ZOOM_LVL_MIN].x_offs; + dst_sprite->y_offs = sprite[ZOOM_LVL_MIN].y_offs; memcpy(dst_sprite->data, &sd, sizeof(SpriteData)); /* Copy colours and determine flags. */ diff --git a/src/blitter/8bpp_optimized.cpp b/src/blitter/8bpp_optimized.cpp index 710f117255..3d050744cb 100644 --- a/src/blitter/8bpp_optimized.cpp +++ b/src/blitter/8bpp_optimized.cpp @@ -128,9 +128,9 @@ Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::SpriteCollection &spri ZoomLevel zoom_min; ZoomLevel zoom_max; - if (sprite[ZOOM_LVL_NORMAL].type == SpriteType::Font) { - zoom_min = ZOOM_LVL_NORMAL; - zoom_max = ZOOM_LVL_NORMAL; + if (sprite[ZOOM_LVL_MIN].type == SpriteType::Font) { + zoom_min = ZOOM_LVL_MIN; + zoom_max = ZOOM_LVL_MIN; } else { zoom_min = _settings_client.gui.zoom_min; zoom_max = _settings_client.gui.zoom_max; @@ -221,10 +221,10 @@ Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::SpriteCollection &spri /* Allocate the exact amount of memory we need */ Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + size); - dest_sprite->height = sprite[ZOOM_LVL_NORMAL].height; - dest_sprite->width = sprite[ZOOM_LVL_NORMAL].width; - dest_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs; - dest_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs; + dest_sprite->height = sprite[ZOOM_LVL_MIN].height; + dest_sprite->width = sprite[ZOOM_LVL_MIN].width; + dest_sprite->x_offs = sprite[ZOOM_LVL_MIN].x_offs; + dest_sprite->y_offs = sprite[ZOOM_LVL_MIN].y_offs; memcpy(dest_sprite->data, temp_dst, size); return dest_sprite; diff --git a/src/blitter/8bpp_simple.cpp b/src/blitter/8bpp_simple.cpp index a80ceba115..58c7cb36fa 100644 --- a/src/blitter/8bpp_simple.cpp +++ b/src/blitter/8bpp_simple.cpp @@ -64,16 +64,16 @@ void Blitter_8bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, Zoom Sprite *Blitter_8bppSimple::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) { Sprite *dest_sprite; - dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + (size_t)sprite[ZOOM_LVL_NORMAL].height * (size_t)sprite[ZOOM_LVL_NORMAL].width); + dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + (size_t)sprite[ZOOM_LVL_MIN].height * (size_t)sprite[ZOOM_LVL_MIN].width); - dest_sprite->height = sprite[ZOOM_LVL_NORMAL].height; - dest_sprite->width = sprite[ZOOM_LVL_NORMAL].width; - dest_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs; - dest_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs; + dest_sprite->height = sprite[ZOOM_LVL_MIN].height; + dest_sprite->width = sprite[ZOOM_LVL_MIN].width; + dest_sprite->x_offs = sprite[ZOOM_LVL_MIN].x_offs; + dest_sprite->y_offs = sprite[ZOOM_LVL_MIN].y_offs; /* Copy over only the 'remap' channel, as that is what we care about in 8bpp */ - for (int i = 0; i < sprite[ZOOM_LVL_NORMAL].height * sprite[ZOOM_LVL_NORMAL].width; i++) { - dest_sprite->data[i] = sprite[ZOOM_LVL_NORMAL].data[i].m; + for (int i = 0; i < sprite[ZOOM_LVL_MIN].height * sprite[ZOOM_LVL_MIN].width; i++) { + dest_sprite->data[i] = sprite[ZOOM_LVL_MIN].data[i].m; } return dest_sprite; diff --git a/src/blitter/null.cpp b/src/blitter/null.cpp index f73b5ae331..865c225917 100644 --- a/src/blitter/null.cpp +++ b/src/blitter/null.cpp @@ -20,10 +20,10 @@ Sprite *Blitter_Null::Encode(const SpriteLoader::SpriteCollection &sprite, Alloc Sprite *dest_sprite; dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite)); - dest_sprite->height = sprite[ZOOM_LVL_NORMAL].height; - dest_sprite->width = sprite[ZOOM_LVL_NORMAL].width; - dest_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs; - dest_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs; + dest_sprite->height = sprite[ZOOM_LVL_MIN].height; + dest_sprite->width = sprite[ZOOM_LVL_MIN].width; + dest_sprite->x_offs = sprite[ZOOM_LVL_MIN].x_offs; + dest_sprite->y_offs = sprite[ZOOM_LVL_MIN].y_offs; return dest_sprite; } diff --git a/src/fontcache/freetypefontcache.cpp b/src/fontcache/freetypefontcache.cpp index bcbfbc2a52..00d45a251a 100644 --- a/src/fontcache/freetypefontcache.cpp +++ b/src/fontcache/freetypefontcache.cpp @@ -272,8 +272,8 @@ const Sprite *FreeTypeFontCache::InternalGetGlyph(GlyphID key, bool aa) /* FreeType has rendered the glyph, now we allocate a sprite and copy the image into it */ SpriteLoader::SpriteCollection spritecollection; - SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_NORMAL]; - sprite.AllocateData(ZOOM_LVL_NORMAL, static_cast(width) * height); + SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_MIN]; + sprite.AllocateData(ZOOM_LVL_MIN, static_cast(width) * height); sprite.type = SpriteType::Font; sprite.colours = (aa ? SCC_PAL | SCC_ALPHA : SCC_PAL); sprite.width = width; diff --git a/src/gfx.cpp b/src/gfx.cpp index 595592139f..2731220f0c 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -53,7 +53,7 @@ static uint8_t _stringwidth_table[FS_END][224]; ///< Cache containing width of o DrawPixelInfo *_cur_dpi; static void GfxMainBlitterViewport(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = nullptr, SpriteID sprite_id = SPR_CURSOR_MOUSE); -static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = nullptr, SpriteID sprite_id = SPR_CURSOR_MOUSE, ZoomLevel zoom = ZOOM_LVL_NORMAL); +static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = nullptr, SpriteID sprite_id = SPR_CURSOR_MOUSE, ZoomLevel zoom = ZOOM_LVL_MIN); static ReusableBuffer _cursor_backup; @@ -99,7 +99,7 @@ void GfxScroll(int left, int top, int width, int height, int xo, int yo) /** * Applies a certain FillRectMode-operation to a rectangle [left, right] x [top, bottom] on the screen. * - * @pre dpi->zoom == ZOOM_LVL_NORMAL, right >= left, bottom >= top + * @pre dpi->zoom == ZOOM_LVL_MIN, right >= left, bottom >= top * @param left Minimum X (inclusive) * @param top Minimum Y (inclusive) * @param right Maximum X (inclusive) @@ -118,7 +118,7 @@ void GfxFillRect(int left, int top, int right, int bottom, int colour, FillRectM const int otop = top; const int oleft = left; - if (dpi->zoom != ZOOM_LVL_NORMAL) return; + if (dpi->zoom != ZOOM_LVL_MIN) return; if (left > right || top > bottom) return; if (right < dpi->left || left >= dpi->left + dpi->width) return; if (bottom < dpi->top || top >= dpi->top + dpi->height) return; @@ -198,7 +198,7 @@ static std::vector MakePolygonSegments(const std::vector &sh * The odd-even winding rule is used, i.e. self-intersecting polygons will have holes in them. * Left and top edges are inclusive, right and bottom edges are exclusive. * @note For rectangles the GfxFillRect function will be faster. - * @pre dpi->zoom == ZOOM_LVL_NORMAL + * @pre dpi->zoom == ZOOM_LVL_MIN * @param shape List of points on the polygon. * @param colour An 8 bit palette index (FILLRECT_OPAQUE and FILLRECT_CHECKER) or a recolour spritenumber (FILLRECT_RECOLOUR). * @param mode @@ -210,7 +210,7 @@ void GfxFillPolygon(const std::vector &shape, int colour, FillRectMode mo { Blitter *blitter = BlitterFactory::GetCurrentBlitter(); const DrawPixelInfo *dpi = _cur_dpi; - if (dpi->zoom != ZOOM_LVL_NORMAL) return; + if (dpi->zoom != ZOOM_LVL_MIN) return; std::vector segments = MakePolygonSegments(shape, Point{ dpi->left, dpi->top }); @@ -1565,7 +1565,7 @@ bool FillDrawPixelInfo(DrawPixelInfo *n, int left, int top, int width, int heigh Blitter *blitter = BlitterFactory::GetCurrentBlitter(); const DrawPixelInfo *o = _cur_dpi; - n->zoom = ZOOM_LVL_NORMAL; + n->zoom = ZOOM_LVL_MIN; assert(width > 0); assert(height > 0); @@ -1789,7 +1789,7 @@ void UpdateGUIZoom() _gui_scale = Clamp(_gui_scale_cfg, MIN_INTERFACE_SCALE, MAX_INTERFACE_SCALE); } - int8_t new_zoom = ScaleGUITrad(1) <= 1 ? ZOOM_LVL_OUT_4X : ScaleGUITrad(1) >= 4 ? ZOOM_LVL_MIN : ZOOM_LVL_OUT_2X; + int8_t new_zoom = ScaleGUITrad(1) <= 1 ? ZOOM_LVL_OUT_4X : ScaleGUITrad(1) >= 4 ? ZOOM_LVL_NORMAL : ZOOM_LVL_OUT_2X; /* Font glyphs should not be clamped to min/max zoom. */ _font_zoom = static_cast(new_zoom); /* Ensure the gui_zoom is clamped between min/max. */ diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index e470e55c71..d626296108 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -1078,7 +1078,7 @@ struct SpriteAlignerWindow : Window { } SpriteAlignerWindow::zoom = Clamp(SpriteAlignerWindow::zoom, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max); - for (ZoomLevel z = ZOOM_LVL_NORMAL; z < ZOOM_LVL_END; z++) { + for (ZoomLevel z = ZOOM_LVL_BEGIN; z < ZOOM_LVL_END; z++) { this->SetWidgetsDisabledState(z < _settings_client.gui.zoom_min || z > _settings_client.gui.zoom_max, WID_SA_ZOOM + z); this->SetWidgetsLoweredState(SpriteAlignerWindow::zoom == z, WID_SA_ZOOM + z); } diff --git a/src/openttd.cpp b/src/openttd.cpp index 7414fe29b1..7ae3cba92d 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -770,7 +770,7 @@ int openttd_main(int argc, char *argv[]) InitializeSpriteSorter(); /* Initialize the zoom level of the screen to normal */ - _screen.zoom = ZOOM_LVL_NORMAL; + _screen.zoom = ZOOM_LVL_MIN; /* The video driver is now selected, now initialise GUI zoom */ AdjustGUIZoom(false); diff --git a/src/os/macosx/font_osx.cpp b/src/os/macosx/font_osx.cpp index 3905c3c734..6339f7f64e 100644 --- a/src/os/macosx/font_osx.cpp +++ b/src/os/macosx/font_osx.cpp @@ -241,8 +241,8 @@ const Sprite *CoreTextFontCache::InternalGetGlyph(GlyphID key, bool use_aa) if (width > MAX_GLYPH_DIM || height > MAX_GLYPH_DIM) UserError("Font glyph is too large"); SpriteLoader::SpriteCollection spritecollection; - SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_NORMAL]; - sprite.AllocateData(ZOOM_LVL_NORMAL, width * height); + SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_MIN]; + sprite.AllocateData(ZOOM_LVL_MIN, width * height); sprite.type = SpriteType::Font; sprite.colours = (use_aa ? SCC_PAL | SCC_ALPHA : SCC_PAL); sprite.width = width; diff --git a/src/os/windows/font_win32.cpp b/src/os/windows/font_win32.cpp index d2a5420735..d5c50d0f41 100644 --- a/src/os/windows/font_win32.cpp +++ b/src/os/windows/font_win32.cpp @@ -229,8 +229,8 @@ void Win32FontCache::ClearFontCache() /* GDI has rendered the glyph, now we allocate a sprite and copy the image into it. */ SpriteLoader::SpriteCollection spritecollection; - SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_NORMAL]; - sprite.AllocateData(ZOOM_LVL_NORMAL, width * height); + SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_MIN]; + sprite.AllocateData(ZOOM_LVL_MIN, width * height); sprite.type = SpriteType::Font; sprite.colours = (aa ? SCC_PAL | SCC_ALPHA : SCC_PAL); sprite.width = width; diff --git a/src/spritecache.cpp b/src/spritecache.cpp index 3c5ce15e6b..2ef7784c0f 100644 --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -243,11 +243,11 @@ static bool ResizeSpriteIn(SpriteLoader::SpriteCollection &sprite, ZoomLevel src static void ResizeSpriteOut(SpriteLoader::SpriteCollection &sprite, ZoomLevel zoom) { /* Algorithm based on 32bpp_Optimized::ResizeSprite() */ - sprite[zoom].width = UnScaleByZoom(sprite[ZOOM_LVL_NORMAL].width, zoom); - sprite[zoom].height = UnScaleByZoom(sprite[ZOOM_LVL_NORMAL].height, zoom); - sprite[zoom].x_offs = UnScaleByZoom(sprite[ZOOM_LVL_NORMAL].x_offs, zoom); - sprite[zoom].y_offs = UnScaleByZoom(sprite[ZOOM_LVL_NORMAL].y_offs, zoom); - sprite[zoom].colours = sprite[ZOOM_LVL_NORMAL].colours; + sprite[zoom].width = UnScaleByZoom(sprite[ZOOM_LVL_MIN].width, zoom); + sprite[zoom].height = UnScaleByZoom(sprite[ZOOM_LVL_MIN].height, zoom); + sprite[zoom].x_offs = UnScaleByZoom(sprite[ZOOM_LVL_MIN].x_offs, zoom); + sprite[zoom].y_offs = UnScaleByZoom(sprite[ZOOM_LVL_MIN].y_offs, zoom); + sprite[zoom].colours = sprite[ZOOM_LVL_MIN].colours; sprite[zoom].AllocateData(zoom, static_cast(sprite[zoom].height) * sprite[zoom].width); @@ -375,22 +375,24 @@ static bool ResizeSprites(SpriteLoader::SpriteCollection &sprite, uint8_t sprite { /* Create a fully zoomed image if it does not exist */ ZoomLevel first_avail = static_cast(FindFirstBit(sprite_avail)); - if (first_avail != ZOOM_LVL_NORMAL) { - if (!ResizeSpriteIn(sprite, first_avail, ZOOM_LVL_NORMAL)) return false; - SetBit(sprite_avail, ZOOM_LVL_NORMAL); + if (first_avail != ZOOM_LVL_MIN) { + if (!ResizeSpriteIn(sprite, first_avail, ZOOM_LVL_MIN)) return false; + SetBit(sprite_avail, ZOOM_LVL_MIN); } /* Pad sprites to make sizes match. */ if (!PadSprites(sprite, sprite_avail, encoder)) return false; /* Create other missing zoom levels */ - for (ZoomLevel zoom = ZOOM_LVL_OUT_2X; zoom != ZOOM_LVL_END; zoom++) { + for (ZoomLevel zoom = ZOOM_LVL_BEGIN; zoom != ZOOM_LVL_END; zoom++) { + if (zoom == ZOOM_LVL_MIN) continue; + if (HasBit(sprite_avail, zoom)) { /* Check that size and offsets match the fully zoomed image. */ - assert(sprite[zoom].width == UnScaleByZoom(sprite[ZOOM_LVL_NORMAL].width, zoom)); - assert(sprite[zoom].height == UnScaleByZoom(sprite[ZOOM_LVL_NORMAL].height, zoom)); - assert(sprite[zoom].x_offs == UnScaleByZoom(sprite[ZOOM_LVL_NORMAL].x_offs, zoom)); - assert(sprite[zoom].y_offs == UnScaleByZoom(sprite[ZOOM_LVL_NORMAL].y_offs, zoom)); + assert(sprite[zoom].width == UnScaleByZoom(sprite[ZOOM_LVL_MIN].width, zoom)); + assert(sprite[zoom].height == UnScaleByZoom(sprite[ZOOM_LVL_MIN].height, zoom)); + assert(sprite[zoom].x_offs == UnScaleByZoom(sprite[ZOOM_LVL_MIN].x_offs, zoom)); + assert(sprite[zoom].y_offs == UnScaleByZoom(sprite[ZOOM_LVL_MIN].y_offs, zoom)); } /* Zoom level is not available, or unusable, so create it */ @@ -465,7 +467,7 @@ static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_ty SpriteLoader::SpriteCollection sprite; uint8_t sprite_avail = 0; - sprite[ZOOM_LVL_NORMAL].type = sprite_type; + sprite[ZOOM_LVL_MIN].type = sprite_type; SpriteLoaderGrf sprite_loader(file.GetContainerVersion()); if (sprite_type != SpriteType::MapGen && encoder->Is32BppSupported()) { @@ -492,15 +494,15 @@ static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_ty * Ugly: yes. Other solution: no. Blame the original author or * something ;) The image should really have been a data-stream * (so type = 0xFF basically). */ - uint num = sprite[ZOOM_LVL_NORMAL].width * sprite[ZOOM_LVL_NORMAL].height; + uint num = sprite[ZOOM_LVL_MIN].width * sprite[ZOOM_LVL_MIN].height; Sprite *s = (Sprite *)allocator(sizeof(*s) + num); - s->width = sprite[ZOOM_LVL_NORMAL].width; - s->height = sprite[ZOOM_LVL_NORMAL].height; - s->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs; - s->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs; + s->width = sprite[ZOOM_LVL_MIN].width; + s->height = sprite[ZOOM_LVL_MIN].height; + s->x_offs = sprite[ZOOM_LVL_MIN].x_offs; + s->y_offs = sprite[ZOOM_LVL_MIN].y_offs; - SpriteLoader::CommonPixel *src = sprite[ZOOM_LVL_NORMAL].data; + SpriteLoader::CommonPixel *src = sprite[ZOOM_LVL_MIN].data; uint8_t *dest = s->data; while (num-- > 0) { *dest++ = src->m; @@ -515,14 +517,14 @@ static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_ty return (void*)GetRawSprite(SPR_IMG_QUERY, SpriteType::Normal, allocator, encoder); } - if (sprite[ZOOM_LVL_NORMAL].type == SpriteType::Font && _font_zoom != ZOOM_LVL_NORMAL) { - /* Make ZOOM_LVL_NORMAL be ZOOM_LVL_GUI */ - sprite[ZOOM_LVL_NORMAL].width = sprite[_font_zoom].width; - sprite[ZOOM_LVL_NORMAL].height = sprite[_font_zoom].height; - sprite[ZOOM_LVL_NORMAL].x_offs = sprite[_font_zoom].x_offs; - sprite[ZOOM_LVL_NORMAL].y_offs = sprite[_font_zoom].y_offs; - sprite[ZOOM_LVL_NORMAL].data = sprite[_font_zoom].data; - sprite[ZOOM_LVL_NORMAL].colours = sprite[_font_zoom].colours; + if (sprite[ZOOM_LVL_MIN].type == SpriteType::Font && _font_zoom != ZOOM_LVL_MIN) { + /* Make ZOOM_LVL_MIN be ZOOM_LVL_GUI */ + sprite[ZOOM_LVL_MIN].width = sprite[_font_zoom].width; + sprite[ZOOM_LVL_MIN].height = sprite[_font_zoom].height; + sprite[ZOOM_LVL_MIN].x_offs = sprite[_font_zoom].x_offs; + sprite[ZOOM_LVL_MIN].y_offs = sprite[_font_zoom].y_offs; + sprite[ZOOM_LVL_MIN].data = sprite[_font_zoom].data; + sprite[ZOOM_LVL_MIN].colours = sprite[_font_zoom].colours; } return encoder->Encode(sprite, allocator); diff --git a/src/spriteloader/grf.cpp b/src/spriteloader/grf.cpp index a34e4e8428..0463497c1d 100644 --- a/src/spriteloader/grf.cpp +++ b/src/spriteloader/grf.cpp @@ -230,7 +230,7 @@ uint8_t LoadSpriteV1(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, s /* Type 0xFF indicates either a colourmap or some other non-sprite info; we do not handle them here */ if (type == 0xFF) return 0; - ZoomLevel zoom_lvl = (sprite_type != SpriteType::MapGen) ? ZOOM_LVL_OUT_4X : ZOOM_LVL_NORMAL; + ZoomLevel zoom_lvl = (sprite_type != SpriteType::MapGen) ? ZOOM_LVL_OUT_4X : ZOOM_LVL_MIN; sprite[zoom_lvl].height = file.ReadByte(); sprite[zoom_lvl].width = file.ReadWord(); @@ -299,7 +299,7 @@ uint8_t LoadSpriteV2(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, s } if (is_wanted_colour_depth && is_wanted_zoom_lvl) { - ZoomLevel zoom_lvl = (sprite_type != SpriteType::MapGen) ? zoom_lvl_map[zoom] : ZOOM_LVL_NORMAL; + ZoomLevel zoom_lvl = (sprite_type != SpriteType::MapGen) ? zoom_lvl_map[zoom] : ZOOM_LVL_MIN; if (HasBit(loaded_sprites, zoom_lvl)) { /* We already have this zoom level, skip sprite. */ diff --git a/src/video/opengl.cpp b/src/video/opengl.cpp index 4889fb5ca2..ee9883c169 100644 --- a/src/video/opengl.cpp +++ b/src/video/opengl.cpp @@ -1270,17 +1270,17 @@ void OpenGLBackend::ReleaseAnimBuffer(const Rect &update_rect) Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + sizeof(OpenGLSprite)); OpenGLSprite *gl_sprite = (OpenGLSprite *)dest_sprite->data; - new (gl_sprite) OpenGLSprite(sprite[ZOOM_LVL_NORMAL].width, sprite[ZOOM_LVL_NORMAL].height, sprite[ZOOM_LVL_NORMAL].type == SpriteType::Font ? 1 : ZOOM_LVL_END, sprite[ZOOM_LVL_NORMAL].colours); + new (gl_sprite) OpenGLSprite(sprite[ZOOM_LVL_MIN].width, sprite[ZOOM_LVL_MIN].height, sprite[ZOOM_LVL_MIN].type == SpriteType::Font ? 1 : ZOOM_LVL_END, sprite[ZOOM_LVL_MIN].colours); /* Upload texture data. */ - for (int i = 0; i < (sprite[ZOOM_LVL_NORMAL].type == SpriteType::Font ? 1 : ZOOM_LVL_END); i++) { + for (int i = 0; i < (sprite[ZOOM_LVL_MIN].type == SpriteType::Font ? 1 : ZOOM_LVL_END); i++) { gl_sprite->Update(sprite[i].width, sprite[i].height, i, sprite[i].data); } - dest_sprite->height = sprite[ZOOM_LVL_NORMAL].height; - dest_sprite->width = sprite[ZOOM_LVL_NORMAL].width; - dest_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs; - dest_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs; + dest_sprite->height = sprite[ZOOM_LVL_MIN].height; + dest_sprite->width = sprite[ZOOM_LVL_MIN].width; + dest_sprite->x_offs = sprite[ZOOM_LVL_MIN].x_offs; + dest_sprite->y_offs = sprite[ZOOM_LVL_MIN].y_offs; return dest_sprite; } diff --git a/src/viewport.cpp b/src/viewport.cpp index fefe970aab..d940d52b1f 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1772,7 +1772,7 @@ void ViewportDoDraw(const Viewport *vp, int left, int top, int right, int bottom DrawPixelInfo dp = _vd.dpi; ZoomLevel zoom = _vd.dpi.zoom; - dp.zoom = ZOOM_LVL_NORMAL; + dp.zoom = ZOOM_LVL_MIN; dp.width = UnScaleByZoom(dp.width, zoom); dp.height = UnScaleByZoom(dp.height, zoom); _cur_dpi = &dp; @@ -2006,10 +2006,10 @@ static bool MarkViewportDirty(const Viewport *vp, int left, int top, int right, /** * Mark all viewports that display an area as dirty (in need of repaint). - * @param left Left edge of area to repaint. (viewport coordinates, that is wrt. #ZOOM_LVL_NORMAL) - * @param top Top edge of area to repaint. (viewport coordinates, that is wrt. #ZOOM_LVL_NORMAL) - * @param right Right edge of area to repaint. (viewport coordinates, that is wrt. #ZOOM_LVL_NORMAL) - * @param bottom Bottom edge of area to repaint. (viewport coordinates, that is wrt. #ZOOM_LVL_NORMAL) + * @param left Left edge of area to repaint. (viewport coordinates, that is wrt. #ZOOM_LVL_MIN) + * @param top Top edge of area to repaint. (viewport coordinates, that is wrt. #ZOOM_LVL_MIN) + * @param right Right edge of area to repaint. (viewport coordinates, that is wrt. #ZOOM_LVL_MIN) + * @param bottom Bottom edge of area to repaint. (viewport coordinates, that is wrt. #ZOOM_LVL_MIN) * @return true if at least one viewport has a dirty block * @ingroup dirty */ diff --git a/src/window.cpp b/src/window.cpp index 1e92885755..1df0ccf199 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -905,7 +905,7 @@ static void DrawOverlappedWindow(Window *w, int left, int top, int right, int bo dp->top = top - w->top; dp->pitch = _screen.pitch; dp->dst_ptr = BlitterFactory::GetCurrentBlitter()->MoveTo(_screen.dst_ptr, left, top); - dp->zoom = ZOOM_LVL_NORMAL; + dp->zoom = ZOOM_LVL_MIN; w->OnPaint(); } diff --git a/src/zoom_func.h b/src/zoom_func.h index faaddbc49b..25d8b92e8a 100644 --- a/src/zoom_func.h +++ b/src/zoom_func.h @@ -13,7 +13,7 @@ #include "zoom_type.h" /** - * Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_NORMAL) + * Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_MIN) * When shifting right, value is rounded up * @param value value to shift * @param zoom zoom level to shift to @@ -25,7 +25,7 @@ inline int ScaleByZoom(int value, ZoomLevel zoom) } /** - * Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_NORMAL) + * Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_MIN) * When shifting right, value is rounded up * @param value value to shift * @param zoom zoom level to shift to @@ -48,7 +48,7 @@ inline int AdjustByZoom(int value, int zoom) } /** - * Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_NORMAL) + * Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_MIN) * @param value value to shift * @param zoom zoom level to shift to * @return shifted value @@ -59,7 +59,7 @@ inline int ScaleByZoomLower(int value, ZoomLevel zoom) } /** - * Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_NORMAL) + * Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_MIN) * @param value value to shift * @param zoom zoom level to shift to * @return shifted value @@ -71,7 +71,7 @@ inline int UnScaleByZoomLower(int value, ZoomLevel zoom) /** * Short-hand to apply GUI zoom level. - * @param value Pixel amount at #ZOOM_LVL_BEGIN (full zoom in). + * @param value Pixel amount at #ZOOM_LVL_MIN (full zoom in). * @return Pixel amount at #ZOOM_LVL_GUI (current interface size). */ inline int UnScaleGUI(int value) From 9854553e10f279256e929612c64260650312386f Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 4 Apr 2024 18:27:34 +0100 Subject: [PATCH 235/695] Codechange: ZOOM_LVL_SHIFT/BASE are not actually ZOOM_LVLs. Rename to ZOOM_BASE_SHIFT and ZOOM_BASE respectively, and derive from ZOOM_LVL instead of numeric value. --- src/fontcache/spritefontcache.cpp | 4 ++-- src/gfx.cpp | 2 +- src/landscape.h | 6 ++--- src/saveload/afterload.cpp | 6 ++--- src/signs.cpp | 2 +- src/smallmap_gui.cpp | 2 +- src/station_cmd.cpp | 4 ++-- src/texteff.cpp | 2 +- src/tile_type.h | 10 ++++---- src/town_cmd.cpp | 2 +- src/vehicle.cpp | 20 ++++++++-------- src/viewport.cpp | 40 +++++++++++++++---------------- src/waypoint_cmd.cpp | 2 +- src/widget.cpp | 4 ++-- src/zoom_func.h | 6 ++--- src/zoom_type.h | 7 +++--- 16 files changed, 59 insertions(+), 60 deletions(-) diff --git a/src/fontcache/spritefontcache.cpp b/src/fontcache/spritefontcache.cpp index aa577e1b11..264a691526 100644 --- a/src/fontcache/spritefontcache.cpp +++ b/src/fontcache/spritefontcache.cpp @@ -23,12 +23,12 @@ static const int ASCII_LETTERSTART = 32; ///< First printable ASCII letter. /** * Scale traditional pixel dimensions to font zoom level, for drawing sprite fonts. - * @param value Pixel amount at #ZOOM_LVL_BASE (traditional "normal" interface size). + * @param value Pixel amount at #ZOOM_BASE (traditional "normal" interface size). * @return Pixel amount at _font_zoom (current interface size). */ static int ScaleFontTrad(int value) { - return UnScaleByZoom(value * ZOOM_LVL_BASE, _font_zoom); + return UnScaleByZoom(value * ZOOM_BASE, _font_zoom); } /** diff --git a/src/gfx.cpp b/src/gfx.cpp index 2731220f0c..a4a3267548 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -1210,7 +1210,7 @@ std::unique_ptr DrawSpriteToRgbaBuffer(SpriteID spriteId, ZoomLevel static void GfxMainBlitterViewport(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub, SpriteID sprite_id) { - GfxBlitter(sprite, x, y, mode, sub, sprite_id, _cur_dpi->zoom); + GfxBlitter(sprite, x, y, mode, sub, sprite_id, _cur_dpi->zoom); } static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub, SpriteID sprite_id, ZoomLevel zoom) diff --git a/src/landscape.h b/src/landscape.h index 7d92ce1273..98221c5019 100644 --- a/src/landscape.h +++ b/src/landscape.h @@ -79,8 +79,8 @@ inline std::tuple GetFoundationPixelSlope(TileIndex tile) inline Point RemapCoords(int x, int y, int z) { Point pt; - pt.x = (y - x) * 2 * ZOOM_LVL_BASE; - pt.y = (y + x - z) * ZOOM_LVL_BASE; + pt.x = (y - x) * 2 * ZOOM_BASE; + pt.y = (y + x - z) * ZOOM_BASE; return pt; } @@ -108,7 +108,7 @@ inline Point RemapCoords2(int x, int y) */ inline Point InverseRemapCoords(int x, int y) { - Point pt = {(y * 2 - x) >> (2 + ZOOM_LVL_SHIFT), (y * 2 + x) >> (2 + ZOOM_LVL_SHIFT)}; + Point pt = {(y * 2 - x) >> (2 + ZOOM_BASE_SHIFT), (y * 2 + x) >> (2 + ZOOM_BASE_SHIFT)}; return pt; } diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index bc203e16dc..9bfb99506b 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2838,9 +2838,9 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_165)) { /* Adjust zoom level to account for new levels */ - _saved_scrollpos_zoom = static_cast(_saved_scrollpos_zoom + ZOOM_LVL_SHIFT); - _saved_scrollpos_x *= ZOOM_LVL_BASE; - _saved_scrollpos_y *= ZOOM_LVL_BASE; + _saved_scrollpos_zoom = static_cast(_saved_scrollpos_zoom + ZOOM_BASE_SHIFT); + _saved_scrollpos_x *= ZOOM_BASE; + _saved_scrollpos_y *= ZOOM_BASE; } /* When any NewGRF has been changed the availability of some vehicles might diff --git a/src/signs.cpp b/src/signs.cpp index 0f1d7a78f0..453c55841b 100644 --- a/src/signs.cpp +++ b/src/signs.cpp @@ -50,7 +50,7 @@ void Sign::UpdateVirtCoord() if (this->sign.kdtree_valid) _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeSign(this->index)); SetDParam(0, this->index); - this->sign.UpdatePosition(pt.x, pt.y - 6 * ZOOM_LVL_BASE, STR_WHITE_SIGN); + this->sign.UpdatePosition(pt.x, pt.y - 6 * ZOOM_BASE, STR_WHITE_SIGN); _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeSign(this->index)); } diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 4bfa47b6de..18d25d7083 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -843,7 +843,7 @@ protected: void SetNewScroll(int sx, int sy, int sub) { const NWidgetBase *wi = this->GetWidget(WID_SM_MAP); - Point hv = InverseRemapCoords(wi->current_x * ZOOM_LVL_BASE * TILE_SIZE / 2, wi->current_y * ZOOM_LVL_BASE * TILE_SIZE / 2); + Point hv = InverseRemapCoords(wi->current_x * ZOOM_BASE * TILE_SIZE / 2, wi->current_y * ZOOM_BASE * TILE_SIZE / 2); hv.x *= this->zoom; hv.y *= this->zoom; diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 5ae1b6735d..5385d78887 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -441,8 +441,8 @@ void Station::UpdateVirtCoord() { Point pt = RemapCoords2(TileX(this->xy) * TILE_SIZE, TileY(this->xy) * TILE_SIZE); - pt.y -= 32 * ZOOM_LVL_BASE; - if ((this->facilities & FACIL_AIRPORT) && this->airport.type == AT_OILRIG) pt.y -= 16 * ZOOM_LVL_BASE; + pt.y -= 32 * ZOOM_BASE; + if ((this->facilities & FACIL_AIRPORT) && this->airport.type == AT_OILRIG) pt.y -= 16 * ZOOM_BASE; if (this->sign.kdtree_valid) _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeStation(this->index)); diff --git a/src/texteff.cpp b/src/texteff.cpp index 930df8421c..10b276232e 100644 --- a/src/texteff.cpp +++ b/src/texteff.cpp @@ -104,7 +104,7 @@ IntervalTimer move_all_text_effects_interval = {std::chrono::millis te.MarkDirty(ZOOM_LVL_TEXT_EFFECT); te.duration -= count; - te.top -= count * ZOOM_LVL_BASE; + te.top -= count * ZOOM_BASE; te.MarkDirty(ZOOM_LVL_TEXT_EFFECT); } }}; diff --git a/src/tile_type.h b/src/tile_type.h index 261fe58fc2..d1a7a3eb93 100644 --- a/src/tile_type.h +++ b/src/tile_type.h @@ -14,12 +14,12 @@ static const uint TILE_SIZE = 16; ///< Tile size in world coordinates. static const uint TILE_UNIT_MASK = TILE_SIZE - 1; ///< For masking in/out the inner-tile world coordinate units. -static const uint TILE_PIXELS = 32; ///< Pixel distance between tile columns/rows in #ZOOM_LVL_BASE. -static const uint TILE_HEIGHT = 8; ///< Height of a height level in world coordinate AND in pixels in #ZOOM_LVL_BASE. +static const uint TILE_PIXELS = 32; ///< Pixel distance between tile columns/rows in #ZOOM_BASE. +static const uint TILE_HEIGHT = 8; ///< Height of a height level in world coordinate AND in pixels in #ZOOM_BASE. -static const uint MAX_BUILDING_PIXELS = 200; ///< Maximum height of a building in pixels in #ZOOM_LVL_BASE. (Also applies to "bridge buildings" on the bridge floor.) -static const int MAX_VEHICLE_PIXEL_X = 192; ///< Maximum width of a vehicle in pixels in #ZOOM_LVL_BASE. -static const int MAX_VEHICLE_PIXEL_Y = 96; ///< Maximum height of a vehicle in pixels in #ZOOM_LVL_BASE. +static const uint MAX_BUILDING_PIXELS = 200; ///< Maximum height of a building in pixels in #ZOOM_BASE. (Also applies to "bridge buildings" on the bridge floor.) +static const int MAX_VEHICLE_PIXEL_X = 192; ///< Maximum width of a vehicle in pixels in #ZOOM_BASE. +static const int MAX_VEHICLE_PIXEL_Y = 96; ///< Maximum height of a vehicle in pixels in #ZOOM_BASE. static const uint MAX_TILE_HEIGHT = 255; ///< Maximum allowed tile height diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index c44cf48b04..8634fb0b7a 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -409,7 +409,7 @@ void Town::UpdateVirtCoord() SetDParam(0, this->index); SetDParam(1, this->cache.population); - this->cache.sign.UpdatePosition(pt.x, pt.y - 24 * ZOOM_LVL_BASE, + this->cache.sign.UpdatePosition(pt.x, pt.y - 24 * ZOOM_BASE, _settings_client.gui.population_in_label ? STR_VIEWPORT_TOWN_POP : STR_VIEWPORT_TOWN, STR_VIEWPORT_TOWN_TINY_WHITE); diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 7d6e8489ea..c8fefff234 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -74,13 +74,13 @@ static const uint GEN_HASHX_BUCKET_BITS = 7; static const uint GEN_HASHY_BUCKET_BITS = 6; /* Compute hash for vehicle coord */ -#define GEN_HASHX(x) GB((x), GEN_HASHX_BUCKET_BITS + ZOOM_LVL_SHIFT, GEN_HASHX_BITS) -#define GEN_HASHY(y) (GB((y), GEN_HASHY_BUCKET_BITS + ZOOM_LVL_SHIFT, GEN_HASHY_BITS) << GEN_HASHX_BITS) +#define GEN_HASHX(x) GB((x), GEN_HASHX_BUCKET_BITS + ZOOM_BASE_SHIFT, GEN_HASHX_BITS) +#define GEN_HASHY(y) (GB((y), GEN_HASHY_BUCKET_BITS + ZOOM_BASE_SHIFT, GEN_HASHY_BITS) << GEN_HASHX_BITS) #define GEN_HASH(x, y) (GEN_HASHY(y) + GEN_HASHX(x)) /* Maximum size until hash repeats */ -static const int GEN_HASHX_SIZE = 1 << (GEN_HASHX_BUCKET_BITS + GEN_HASHX_BITS + ZOOM_LVL_SHIFT); -static const int GEN_HASHY_SIZE = 1 << (GEN_HASHY_BUCKET_BITS + GEN_HASHY_BITS + ZOOM_LVL_SHIFT); +static const int GEN_HASHX_SIZE = 1 << (GEN_HASHX_BUCKET_BITS + GEN_HASHX_BITS + ZOOM_BASE_SHIFT); +static const int GEN_HASHY_SIZE = 1 << (GEN_HASHY_BUCKET_BITS + GEN_HASHY_BITS + ZOOM_BASE_SHIFT); /* Increments to reach next bucket in hash table */ static const int GEN_HASHX_INC = 1; @@ -1158,8 +1158,8 @@ void ViewportAddVehicles(DrawPixelInfo *dpi) const int b = dpi->top + dpi->height; /* Border size of MAX_VEHICLE_PIXEL_xy */ - const int xb = MAX_VEHICLE_PIXEL_X * ZOOM_LVL_BASE; - const int yb = MAX_VEHICLE_PIXEL_Y * ZOOM_LVL_BASE; + const int xb = MAX_VEHICLE_PIXEL_X * ZOOM_BASE; + const int yb = MAX_VEHICLE_PIXEL_Y * ZOOM_BASE; /* The hash area to scan */ int xl, xu, yl, yu; @@ -1254,8 +1254,8 @@ Vehicle *CheckClickOnVehicle(const Viewport *vp, int x, int y) y = ScaleByZoom(y, vp->zoom) + vp->virtual_top; /* Border size of MAX_VEHICLE_PIXEL_xy */ - const int xb = MAX_VEHICLE_PIXEL_X * ZOOM_LVL_BASE; - const int yb = MAX_VEHICLE_PIXEL_Y * ZOOM_LVL_BASE; + const int xb = MAX_VEHICLE_PIXEL_X * ZOOM_BASE; + const int yb = MAX_VEHICLE_PIXEL_Y * ZOOM_BASE; /* The hash area to scan */ int xl = GEN_HASHX(x - xb); @@ -1695,8 +1695,8 @@ void Vehicle::UpdateBoundingBoxCoordinates(bool update_cache) const Point pt = RemapCoords(this->x_pos + this->x_offs, this->y_pos + this->y_offs, this->z_pos); new_coord.left += pt.x; new_coord.top += pt.y; - new_coord.right += pt.x + 2 * ZOOM_LVL_BASE; - new_coord.bottom += pt.y + 2 * ZOOM_LVL_BASE; + new_coord.right += pt.x + 2 * ZOOM_BASE; + new_coord.bottom += pt.y + 2 * ZOOM_BASE; if (update_cache) { /* diff --git a/src/viewport.cpp b/src/viewport.cpp index d940d52b1f..3e82735c79 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -106,10 +106,10 @@ ViewportSignKdtree _viewport_sign_kdtree(&Kdtree_ViewportSignXYFunc); static int _viewport_sign_maxwidth = 0; -static const int MAX_TILE_EXTENT_LEFT = ZOOM_LVL_BASE * TILE_PIXELS; ///< Maximum left extent of tile relative to north corner. -static const int MAX_TILE_EXTENT_RIGHT = ZOOM_LVL_BASE * TILE_PIXELS; ///< Maximum right extent of tile relative to north corner. -static const int MAX_TILE_EXTENT_TOP = ZOOM_LVL_BASE * MAX_BUILDING_PIXELS; ///< Maximum top extent of tile relative to north corner (not considering bridges). -static const int MAX_TILE_EXTENT_BOTTOM = ZOOM_LVL_BASE * (TILE_PIXELS + 2 * TILE_HEIGHT); ///< Maximum bottom extent of tile relative to north corner (worst case: #SLOPE_STEEP_N). +static const int MAX_TILE_EXTENT_LEFT = ZOOM_BASE * TILE_PIXELS; ///< Maximum left extent of tile relative to north corner. +static const int MAX_TILE_EXTENT_RIGHT = ZOOM_BASE * TILE_PIXELS; ///< Maximum right extent of tile relative to north corner. +static const int MAX_TILE_EXTENT_TOP = ZOOM_BASE * MAX_BUILDING_PIXELS; ///< Maximum top extent of tile relative to north corner (not considering bridges). +static const int MAX_TILE_EXTENT_BOTTOM = ZOOM_BASE * (TILE_PIXELS + 2 * TILE_HEIGHT); ///< Maximum bottom extent of tile relative to north corner (worst case: #SLOPE_STEEP_N). struct StringSpriteToDraw { std::string string; @@ -570,9 +570,9 @@ void DrawGroundSpriteAt(SpriteID image, PaletteID pal, int32_t x, int32_t y, int if (_vd.foundation[_vd.foundation_part] != -1) { Point pt = RemapCoords(x, y, z); - AddChildSpriteToFoundation(image, pal, sub, _vd.foundation_part, pt.x + extra_offs_x * ZOOM_LVL_BASE, pt.y + extra_offs_y * ZOOM_LVL_BASE); + AddChildSpriteToFoundation(image, pal, sub, _vd.foundation_part, pt.x + extra_offs_x * ZOOM_BASE, pt.y + extra_offs_y * ZOOM_BASE); } else { - AddTileSpriteToDraw(image, pal, _cur_ti.x + x, _cur_ti.y + y, _cur_ti.z + z, sub, extra_offs_x * ZOOM_LVL_BASE, extra_offs_y * ZOOM_LVL_BASE); + AddTileSpriteToDraw(image, pal, _cur_ti.x + x, _cur_ti.y + y, _cur_ti.z + z, sub, extra_offs_x * ZOOM_BASE, extra_offs_y * ZOOM_BASE); } } @@ -614,8 +614,8 @@ void OffsetGroundSprite(int x, int y) /* _vd.last_child == nullptr if foundation sprite was clipped by the viewport bounds */ if (_vd.last_child != nullptr) _vd.foundation[_vd.foundation_part] = (uint)_vd.parent_sprites_to_draw.size() - 1; - _vd.foundation_offset[_vd.foundation_part].x = x * ZOOM_LVL_BASE; - _vd.foundation_offset[_vd.foundation_part].y = y * ZOOM_LVL_BASE; + _vd.foundation_offset[_vd.foundation_part].x = x * ZOOM_BASE; + _vd.foundation_offset[_vd.foundation_part].y = y * ZOOM_BASE; _vd.last_foundation_child[_vd.foundation_part] = _vd.last_child; } @@ -845,8 +845,8 @@ void AddChildSpriteScreen(SpriteID image, PaletteID pal, int x, int y, bool tran cs.image = image; cs.pal = pal; cs.sub = sub; - cs.x = scale ? x * ZOOM_LVL_BASE : x; - cs.y = scale ? y * ZOOM_LVL_BASE : y; + cs.x = scale ? x * ZOOM_BASE : x; + cs.y = scale ? y * ZOOM_BASE : y; cs.relative = relative; cs.next = -1; @@ -892,7 +892,7 @@ static void DrawSelectionSprite(SpriteID image, PaletteID pal, const TileInfo *t AddTileSpriteToDraw(image, pal, ti->x, ti->y, ti->z + z_offset, nullptr, extra_offs_x, extra_offs_y); } else { /* draw on top of foundation */ - AddChildSpriteToFoundation(image, pal, nullptr, foundation_part, extra_offs_x, extra_offs_y - z_offset * ZOOM_LVL_BASE); + AddChildSpriteToFoundation(image, pal, nullptr, foundation_part, extra_offs_x, extra_offs_y - z_offset * ZOOM_BASE); } } @@ -1177,7 +1177,7 @@ draw_inner: static int GetViewportY(Point tile) { /* Each increment in X or Y direction moves down by half a tile, i.e. TILE_PIXELS / 2. */ - return (tile.y * (int)(TILE_PIXELS / 2) + tile.x * (int)(TILE_PIXELS / 2) - TilePixelHeightOutsideMap(tile.x, tile.y)) << ZOOM_LVL_SHIFT; + return (tile.y * (int)(TILE_PIXELS / 2) + tile.x * (int)(TILE_PIXELS / 2) - TilePixelHeightOutsideMap(tile.x, tile.y)) << ZOOM_BASE_SHIFT; } /** @@ -1207,7 +1207,7 @@ static void ViewportAddLandscape() int left_column = (upper_left.y - upper_left.x) / (int)TILE_SIZE - 2; int right_column = (upper_right.y - upper_right.x) / (int)TILE_SIZE + 2; - int potential_bridge_height = ZOOM_LVL_BASE * TILE_HEIGHT * _settings_game.construction.max_bridge_height; + int potential_bridge_height = ZOOM_BASE * TILE_HEIGHT * _settings_game.construction.max_bridge_height; /* Rows overlap with neighbouring rows by a half tile. * The first row that could possibly be visible is the row above upper_left (if it is at height 0). @@ -1267,7 +1267,7 @@ static void ViewportAddLandscape() if (IsBridgeAbove(_cur_ti.tile)) { /* Is the bridge visible? */ TileIndex bridge_tile = GetNorthernBridgeEnd(_cur_ti.tile); - int bridge_height = ZOOM_LVL_BASE * (GetBridgePixelHeight(bridge_tile) - TilePixelHeight(_cur_ti.tile)); + int bridge_height = ZOOM_BASE * (GetBridgePixelHeight(bridge_tile) - TilePixelHeight(_cur_ti.tile)); if (min_visible_height < bridge_height + MAX_TILE_EXTENT_TOP) tile_visible = true; } @@ -1883,7 +1883,7 @@ static inline void ClampViewportToMap(const Viewport *vp, int *scroll_x, int *sc static void ClampSmoothScroll(uint32_t delta_ms, int64_t delta_hi, int64_t delta_lo, int &delta_hi_clamped, int &delta_lo_clamped) { /** A tile is 64 pixels in width at 1x zoom; viewport coordinates are in 4x zoom. */ - constexpr int PIXELS_PER_TILE = TILE_PIXELS * 2 * ZOOM_LVL_BASE; + constexpr int PIXELS_PER_TILE = TILE_PIXELS * 2 * ZOOM_BASE; assert(delta_hi != 0); @@ -2053,7 +2053,7 @@ void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset, int tile_heigh Point pt = RemapCoords(TileX(tile) * TILE_SIZE, TileY(tile) * TILE_SIZE, tile_height_override * TILE_HEIGHT); MarkAllViewportsDirty( pt.x - MAX_TILE_EXTENT_LEFT, - pt.y - MAX_TILE_EXTENT_TOP - ZOOM_LVL_BASE * TILE_HEIGHT * bridge_level_offset, + pt.y - MAX_TILE_EXTENT_TOP - ZOOM_BASE * TILE_HEIGHT * bridge_level_offset, pt.x + MAX_TILE_EXTENT_RIGHT, pt.y + MAX_TILE_EXTENT_BOTTOM); } @@ -2131,15 +2131,15 @@ static void SetSelectionTilesDirty() /* the 'x' coordinate of 'top' and 'bot' is the same (and always in the same distance from tile middle), * tile height/slope affects only the 'y' on-screen coordinate! */ - int l = top.x - TILE_PIXELS * ZOOM_LVL_BASE; // 'x' coordinate of left side of the dirty rectangle + int l = top.x - TILE_PIXELS * ZOOM_BASE; // 'x' coordinate of left side of the dirty rectangle int t = top.y; // 'y' coordinate of top side of the dirty rectangle - int r = top.x + TILE_PIXELS * ZOOM_LVL_BASE; // 'x' coordinate of right side of the dirty rectangle + int r = top.x + TILE_PIXELS * ZOOM_BASE; // 'x' coordinate of right side of the dirty rectangle int b = bot.y; // 'y' coordinate of bottom side of the dirty rectangle - static const int OVERLAY_WIDTH = 4 * ZOOM_LVL_BASE; // part of selection sprites is drawn outside the selected area (in particular: terraforming) + static const int OVERLAY_WIDTH = 4 * ZOOM_BASE; // part of selection sprites is drawn outside the selected area (in particular: terraforming) /* For halftile foundations on SLOPE_STEEP_S the sprite extents some more towards the top */ - MarkAllViewportsDirty(l - OVERLAY_WIDTH, t - OVERLAY_WIDTH - TILE_HEIGHT * ZOOM_LVL_BASE, r + OVERLAY_WIDTH, b + OVERLAY_WIDTH); + MarkAllViewportsDirty(l - OVERLAY_WIDTH, t - OVERLAY_WIDTH - TILE_HEIGHT * ZOOM_BASE, r + OVERLAY_WIDTH, b + OVERLAY_WIDTH); /* haven't we reached the topmost tile yet? */ if (top_x != x_start) { diff --git a/src/waypoint_cmd.cpp b/src/waypoint_cmd.cpp index 52e0ca725c..2bf7ce5e52 100644 --- a/src/waypoint_cmd.cpp +++ b/src/waypoint_cmd.cpp @@ -44,7 +44,7 @@ void Waypoint::UpdateVirtCoord() if (this->sign.kdtree_valid) _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeWaypoint(this->index)); SetDParam(0, this->index); - this->sign.UpdatePosition(pt.x, pt.y - 32 * ZOOM_LVL_BASE, STR_VIEWPORT_WAYPOINT); + this->sign.UpdatePosition(pt.x, pt.y - 32 * ZOOM_BASE, STR_VIEWPORT_WAYPOINT); _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeWaypoint(this->index)); diff --git a/src/widget.cpp b/src/widget.cpp index dd91856b05..820534ddcb 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -29,7 +29,7 @@ WidgetDimensions WidgetDimensions::scaled = {}; /** * Scale a RectPadding to GUI zoom level. - * @param r RectPadding at ZOOM_LVL_BASE (traditional "normal" interface size). + * @param r RectPadding at ZOOM_BASE (traditional "normal" interface size). * @return RectPadding at #ZOOM_LVL_GUI (current interface size). */ static inline RectPadding ScaleGUITrad(const RectPadding &r) @@ -39,7 +39,7 @@ static inline RectPadding ScaleGUITrad(const RectPadding &r) /** * Scale a Dimension to GUI zoom level. - * @param d Dimension at ZOOM_LVL_BASE (traditional "normal" interface size). + * @param d Dimension at ZOOM_BASE (traditional "normal" interface size). * @return Dimension at #ZOOM_LVL_GUI (current interface size). */ static inline Dimension ScaleGUITrad(const Dimension &dim) diff --git a/src/zoom_func.h b/src/zoom_func.h index 25d8b92e8a..4ff4a84a10 100644 --- a/src/zoom_func.h +++ b/src/zoom_func.h @@ -101,17 +101,17 @@ inline ZoomLevel UnScaleZoomGUI(ZoomLevel value) /** * Scale traditional pixel dimensions to GUI zoom level, for drawing sprites. - * @param value Pixel amount at #ZOOM_LVL_BASE (traditional "normal" interface size). + * @param value Pixel amount at #ZOOM_BASE (traditional "normal" interface size). * @return Pixel amount at #ZOOM_LVL_GUI (current interface size). */ inline int ScaleSpriteTrad(int value) { - return UnScaleGUI(value * ZOOM_LVL_BASE); + return UnScaleGUI(value * ZOOM_BASE); } /** * Scale traditional pixel dimensions to GUI zoom level. - * @param value Pixel amount at #ZOOM_LVL_BASE (traditional "normal" interface size). + * @param value Pixel amount at #ZOOM_BASE (traditional "normal" interface size). * @return Pixel amount at #ZOOM_LVL_GUI (current interface size). */ inline int ScaleGUITrad(int value) diff --git a/src/zoom_type.h b/src/zoom_type.h index f5db67e2fc..9552fceca9 100644 --- a/src/zoom_type.h +++ b/src/zoom_type.h @@ -12,9 +12,6 @@ #include "core/enum_type.hpp" -static uint const ZOOM_LVL_SHIFT = 2; -static uint const ZOOM_LVL_BASE = 1 << ZOOM_LVL_SHIFT; - /** All zoom levels we know. */ enum ZoomLevel : uint8_t { /* Our possible zoom-levels */ @@ -43,11 +40,13 @@ enum ZoomLevel : uint8_t { ZOOM_LVL_MIN = ZOOM_LVL_NORMAL, ///< Minimum zoom level. ZOOM_LVL_MAX = ZOOM_LVL_OUT_32X, ///< Maximum zoom level. - }; DECLARE_POSTFIX_INCREMENT(ZoomLevel) DECLARE_ENUM_AS_ADDABLE(ZoomLevel) +static uint const ZOOM_BASE_SHIFT = static_cast(ZOOM_LVL_OUT_4X); +static uint const ZOOM_BASE = 1U << ZOOM_BASE_SHIFT; + extern int _gui_scale; extern int _gui_scale_cfg; From 7572cfd1035c2d36f7439443f9784583176f150d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 4 Apr 2024 18:51:46 +0100 Subject: [PATCH 236/695] Codechange: Redefine ZOOM_LVL so that ZOOM_LVL_NORMAL is 1x zoom. This matches expectations of what normal zoom means. --- src/blitter/32bpp_sse_type.h | 2 +- src/gfx.cpp | 4 ++-- src/graph_gui.cpp | 2 +- src/network/network_gui.cpp | 4 ++-- src/newgrf_debug_gui.cpp | 12 +++++----- src/spritecache.cpp | 8 +++---- src/spriteloader/grf.cpp | 14 ++++++------ src/table/settings/gui_settings.ini | 6 ++--- src/vehicle_gui.cpp | 2 +- src/viewport.cpp | 10 ++++----- src/widget.cpp | 4 ++-- src/zoom_func.h | 4 ++-- src/zoom_type.h | 34 ++++++++++++++--------------- 13 files changed, 53 insertions(+), 53 deletions(-) diff --git a/src/blitter/32bpp_sse_type.h b/src/blitter/32bpp_sse_type.h index e8662e4949..57de1d6d58 100644 --- a/src/blitter/32bpp_sse_type.h +++ b/src/blitter/32bpp_sse_type.h @@ -28,7 +28,7 @@ #endif #define META_LENGTH 2 ///< Number of uint32_t inserted before each line of pixels in a sprite. -#define MARGIN_NORMAL_THRESHOLD (zoom == ZOOM_LVL_OUT_32X ? 8 : 4) ///< Minimum width to use margins with BM_NORMAL. +#define MARGIN_NORMAL_THRESHOLD (zoom == ZOOM_LVL_OUT_8X ? 8 : 4) ///< Minimum width to use margins with BM_NORMAL. #define MARGIN_REMAP_THRESHOLD 4 ///< Minimum width to use margins with BM_COLOUR_REMAP. #undef ALIGN diff --git a/src/gfx.cpp b/src/gfx.cpp index a4a3267548..36f62a129d 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -57,7 +57,7 @@ static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode, static ReusableBuffer _cursor_backup; -ZoomLevel _gui_zoom = ZOOM_LVL_OUT_4X; ///< GUI Zoom level +ZoomLevel _gui_zoom = ZOOM_LVL_NORMAL; ///< GUI Zoom level ZoomLevel _font_zoom = _gui_zoom; ///< Sprite font Zoom level (not clamped) int _gui_scale = MIN_INTERFACE_SCALE; ///< GUI scale, 100 is 100%. int _gui_scale_cfg; ///< GUI scale in config. @@ -1789,7 +1789,7 @@ void UpdateGUIZoom() _gui_scale = Clamp(_gui_scale_cfg, MIN_INTERFACE_SCALE, MAX_INTERFACE_SCALE); } - int8_t new_zoom = ScaleGUITrad(1) <= 1 ? ZOOM_LVL_OUT_4X : ScaleGUITrad(1) >= 4 ? ZOOM_LVL_NORMAL : ZOOM_LVL_OUT_2X; + int8_t new_zoom = ScaleGUITrad(1) <= 1 ? ZOOM_LVL_NORMAL : ScaleGUITrad(1) >= 4 ? ZOOM_LVL_IN_4X : ZOOM_LVL_IN_2X; /* Font glyphs should not be clamped to min/max zoom. */ _font_zoom = static_cast(new_zoom); /* Ensure the gui_zoom is clamped between min/max. */ diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 919474d911..af2efd3722 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -117,7 +117,7 @@ static std::unique_ptr MakeNWidgetCompanyLines() { auto vert = std::make_unique(NC_EQUALSIZE); vert->SetPadding(2, 2, 2, 2); - uint sprite_height = GetSpriteSize(SPR_COMPANY_ICON, nullptr, ZOOM_LVL_OUT_4X).height; + uint sprite_height = GetSpriteSize(SPR_COMPANY_ICON, nullptr, ZOOM_LVL_NORMAL).height; for (WidgetID widnum = WID_GL_FIRST_COMPANY; widnum <= WID_GL_LAST_COMPANY; widnum++) { auto panel = std::make_unique(WWT_PANEL, COLOUR_BROWN, widnum); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 548c29387b..a9f6bd4882 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -100,8 +100,8 @@ public: this->Add(std::make_unique(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_YEARS, STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION, STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP)); leaf = std::make_unique(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_INFO, STR_EMPTY, STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP); - leaf->SetMinimalSize(14 + GetSpriteSize(SPR_LOCK, nullptr, ZOOM_LVL_OUT_4X).width - + GetSpriteSize(SPR_BLOT, nullptr, ZOOM_LVL_OUT_4X).width, 12); + leaf->SetMinimalSize(14 + GetSpriteSize(SPR_LOCK, nullptr, ZOOM_LVL_NORMAL).width + + GetSpriteSize(SPR_BLOT, nullptr, ZOOM_LVL_NORMAL).width, 12); leaf->SetFill(0, 1); this->Add(std::move(leaf)); } diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index d626296108..fe9447edc1 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -1147,12 +1147,12 @@ static constexpr NWidgetPart _nested_sprite_aligner_widgets[] = { NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_SA_SCROLLBAR), EndContainer(), NWidget(NWID_VERTICAL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_NORMAL), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_MIN, STR_NULL), SetFill(1, 0), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_2X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_IN_2X, STR_NULL), SetFill(1, 0), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_4X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_NORMAL, STR_NULL), SetFill(1, 0), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_8X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X, STR_NULL), SetFill(1, 0), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_16X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X, STR_NULL), SetFill(1, 0), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_32X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X, STR_NULL), SetFill(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_IN_4X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_MIN, STR_NULL), SetFill(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_IN_2X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_IN_2X, STR_NULL), SetFill(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_NORMAL), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_NORMAL, STR_NULL), SetFill(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_2X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X, STR_NULL), SetFill(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_4X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X, STR_NULL), SetFill(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_8X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X, STR_NULL), SetFill(1, 0), EndContainer(), EndContainer(), EndContainer(), diff --git a/src/spritecache.cpp b/src/spritecache.cpp index 2ef7784c0f..28cd97bac8 100644 --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -401,8 +401,8 @@ static bool ResizeSprites(SpriteLoader::SpriteCollection &sprite, uint8_t sprite /* Upscale to desired sprite_min_zoom if provided sprite only had zoomed in versions. */ if (first_avail < _settings_client.gui.sprite_zoom_min) { - if (_settings_client.gui.sprite_zoom_min >= ZOOM_LVL_OUT_4X) ResizeSpriteIn(sprite, ZOOM_LVL_OUT_4X, ZOOM_LVL_OUT_2X); - if (_settings_client.gui.sprite_zoom_min >= ZOOM_LVL_OUT_2X) ResizeSpriteIn(sprite, ZOOM_LVL_OUT_2X, ZOOM_LVL_NORMAL); + if (_settings_client.gui.sprite_zoom_min >= ZOOM_LVL_NORMAL) ResizeSpriteIn(sprite, ZOOM_LVL_NORMAL, ZOOM_LVL_IN_2X); + if (_settings_client.gui.sprite_zoom_min >= ZOOM_LVL_IN_2X) ResizeSpriteIn(sprite, ZOOM_LVL_IN_2X, ZOOM_LVL_IN_4X); } return true; @@ -581,11 +581,11 @@ void ReadGRFSpriteOffsets(SpriteFile &file) if (length > 0) { uint8_t zoom = file.ReadByte(); length--; - if (colour != 0 && zoom == 0) { // ZOOM_LVL_OUT_4X (normal zoom) + if (colour != 0 && zoom == 0) { // ZOOM_LVL_NORMAL (normal zoom) SetBit(offset.control_flags, (colour != SCC_PAL) ? SCCF_ALLOW_ZOOM_MIN_1X_32BPP : SCCF_ALLOW_ZOOM_MIN_1X_PAL); SetBit(offset.control_flags, (colour != SCC_PAL) ? SCCF_ALLOW_ZOOM_MIN_2X_32BPP : SCCF_ALLOW_ZOOM_MIN_2X_PAL); } - if (colour != 0 && zoom == 2) { // ZOOM_LVL_OUT_2X (2x zoomed in) + if (colour != 0 && zoom == 2) { // ZOOM_LVL_IN_2X (2x zoomed in) SetBit(offset.control_flags, (colour != SCC_PAL) ? SCCF_ALLOW_ZOOM_MIN_2X_32BPP : SCCF_ALLOW_ZOOM_MIN_2X_PAL); } } diff --git a/src/spriteloader/grf.cpp b/src/spriteloader/grf.cpp index 0463497c1d..d365282d2a 100644 --- a/src/spriteloader/grf.cpp +++ b/src/spriteloader/grf.cpp @@ -230,7 +230,7 @@ uint8_t LoadSpriteV1(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, s /* Type 0xFF indicates either a colourmap or some other non-sprite info; we do not handle them here */ if (type == 0xFF) return 0; - ZoomLevel zoom_lvl = (sprite_type != SpriteType::MapGen) ? ZOOM_LVL_OUT_4X : ZOOM_LVL_MIN; + ZoomLevel zoom_lvl = (sprite_type != SpriteType::MapGen) ? ZOOM_LVL_NORMAL : ZOOM_LVL_MIN; sprite[zoom_lvl].height = file.ReadByte(); sprite[zoom_lvl].width = file.ReadWord(); @@ -254,7 +254,7 @@ uint8_t LoadSpriteV1(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, s uint8_t LoadSpriteV2(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, uint8_t control_flags) { - static const ZoomLevel zoom_lvl_map[6] = {ZOOM_LVL_OUT_4X, ZOOM_LVL_NORMAL, ZOOM_LVL_OUT_2X, ZOOM_LVL_OUT_8X, ZOOM_LVL_OUT_16X, ZOOM_LVL_OUT_32X}; + static const ZoomLevel zoom_lvl_map[6] = {ZOOM_LVL_NORMAL, ZOOM_LVL_IN_4X, ZOOM_LVL_IN_2X, ZOOM_LVL_OUT_2X, ZOOM_LVL_OUT_4X, ZOOM_LVL_OUT_8X}; /* Is the sprite not present/stripped in the GRF? */ if (file_pos == SIZE_MAX) return 0; @@ -282,13 +282,13 @@ uint8_t LoadSpriteV2(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, s if (sprite_type != SpriteType::MapGen) { if (zoom < lengthof(zoom_lvl_map)) { is_wanted_zoom_lvl = true; - ZoomLevel zoom_min = sprite_type == SpriteType::Font ? ZOOM_LVL_NORMAL : _settings_client.gui.sprite_zoom_min; - if (zoom_min >= ZOOM_LVL_OUT_2X && - HasBit(control_flags, load_32bpp ? SCCF_ALLOW_ZOOM_MIN_2X_32BPP : SCCF_ALLOW_ZOOM_MIN_2X_PAL) && zoom_lvl_map[zoom] < ZOOM_LVL_OUT_2X) { + ZoomLevel zoom_min = sprite_type == SpriteType::Font ? ZOOM_LVL_MIN : _settings_client.gui.sprite_zoom_min; + if (zoom_min >= ZOOM_LVL_IN_2X && + HasBit(control_flags, load_32bpp ? SCCF_ALLOW_ZOOM_MIN_2X_32BPP : SCCF_ALLOW_ZOOM_MIN_2X_PAL) && zoom_lvl_map[zoom] < ZOOM_LVL_IN_2X) { is_wanted_zoom_lvl = false; } - if (zoom_min >= ZOOM_LVL_OUT_4X && - HasBit(control_flags, load_32bpp ? SCCF_ALLOW_ZOOM_MIN_1X_32BPP : SCCF_ALLOW_ZOOM_MIN_1X_PAL) && zoom_lvl_map[zoom] < ZOOM_LVL_OUT_4X) { + if (zoom_min >= ZOOM_LVL_NORMAL && + HasBit(control_flags, load_32bpp ? SCCF_ALLOW_ZOOM_MIN_1X_32BPP : SCCF_ALLOW_ZOOM_MIN_1X_PAL) && zoom_lvl_map[zoom] < ZOOM_LVL_NORMAL) { is_wanted_zoom_lvl = false; } } else { diff --git a/src/table/settings/gui_settings.ini b/src/table/settings/gui_settings.ini index 23bd899334..9adeed0029 100644 --- a/src/table/settings/gui_settings.ini +++ b/src/table/settings/gui_settings.ini @@ -260,7 +260,7 @@ type = SLE_UINT8 flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN def = ZOOM_LVL_MIN min = ZOOM_LVL_MIN -max = ZOOM_LVL_OUT_4X +max = ZOOM_LVL_NORMAL str = STR_CONFIG_SETTING_ZOOM_MIN strhelp = STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT strval = STR_CONFIG_SETTING_ZOOM_LVL_MIN @@ -272,7 +272,7 @@ var = gui.zoom_max type = SLE_UINT8 flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN def = ZOOM_LVL_MAX -min = ZOOM_LVL_OUT_8X +min = ZOOM_LVL_OUT_2X max = ZOOM_LVL_MAX str = STR_CONFIG_SETTING_ZOOM_MAX strhelp = STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT @@ -286,7 +286,7 @@ type = SLE_UINT8 flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN def = ZOOM_LVL_MIN min = ZOOM_LVL_MIN -max = ZOOM_LVL_OUT_4X +max = ZOOM_LVL_NORMAL str = STR_CONFIG_SETTING_SPRITE_ZOOM_MIN strhelp = STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT strval = STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index e0f9e0dee5..6a2197db25 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -3235,7 +3235,7 @@ public: ShowExtraViewportWindow(TileVirtXY(v->x_pos, v->y_pos)); } else { const Window *mainwindow = GetMainWindow(); - if (click_count > 1 && mainwindow->viewport->zoom <= ZOOM_LVL_OUT_4X) { + if (click_count > 1 && mainwindow->viewport->zoom <= ZOOM_LVL_NORMAL) { /* main window 'follows' vehicle */ mainwindow->viewport->follow_vehicle = v->index; } else { diff --git a/src/viewport.cpp b/src/viewport.cpp index 3e82735c79..9c91b28833 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1420,7 +1420,7 @@ static void ViewportAddKdtreeSigns(DrawPixelInfo *dpi) for (const auto *t : towns) { SetDParam(0, t->index); SetDParam(1, t->cache.population); - ViewportAddString(dpi, ZOOM_LVL_OUT_16X, &t->cache.sign, + ViewportAddString(dpi, ZOOM_LVL_OUT_4X, &t->cache.sign, _settings_client.gui.population_in_label ? STR_VIEWPORT_TOWN_POP : STR_VIEWPORT_TOWN, STR_VIEWPORT_TOWN_TINY_WHITE, STR_VIEWPORT_TOWN_TINY_BLACK); } @@ -1430,7 +1430,7 @@ static void ViewportAddKdtreeSigns(DrawPixelInfo *dpi) for (const auto *si : signs) { SetDParam(0, si->index); - ViewportAddString(dpi, ZOOM_LVL_OUT_16X, &si->sign, + ViewportAddString(dpi, ZOOM_LVL_OUT_4X, &si->sign, STR_WHITE_SIGN, (IsTransparencySet(TO_SIGNS) || si->owner == OWNER_DEITY) ? STR_VIEWPORT_SIGN_SMALL_WHITE : STR_VIEWPORT_SIGN_SMALL_BLACK, STR_NULL, (si->owner == OWNER_NONE) ? COLOUR_GREY : (si->owner == OWNER_DEITY ? INVALID_COLOUR : _company_colours[si->owner])); @@ -1441,12 +1441,12 @@ static void ViewportAddKdtreeSigns(DrawPixelInfo *dpi) SetDParam(1, st->facilities); if (Station::IsExpected(st)) { /* Station */ - ViewportAddString(dpi, ZOOM_LVL_OUT_16X, &st->sign, + ViewportAddString(dpi, ZOOM_LVL_OUT_4X, &st->sign, STR_VIEWPORT_STATION, STR_VIEWPORT_STATION_TINY, STR_NULL, (st->owner == OWNER_NONE || !st->IsInUse()) ? COLOUR_GREY : _company_colours[st->owner]); } else { /* Waypoint */ - ViewportAddString(dpi, ZOOM_LVL_OUT_16X, &st->sign, + ViewportAddString(dpi, ZOOM_LVL_OUT_4X, &st->sign, STR_VIEWPORT_WAYPOINT, STR_VIEWPORT_WAYPOINT_TINY, STR_NULL, (st->owner == OWNER_NONE || !st->IsInUse()) ? COLOUR_GREY : _company_colours[st->owner]); } @@ -2192,7 +2192,7 @@ void SetSelectionRed(bool b) */ static bool CheckClickOnViewportSign(const Viewport *vp, int x, int y, const ViewportSign *sign) { - bool small = (vp->zoom >= ZOOM_LVL_OUT_16X); + bool small = (vp->zoom >= ZOOM_LVL_OUT_4X); int sign_half_width = ScaleByZoom((small ? sign->width_small : sign->width_normal) / 2, vp->zoom); int sign_height = ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + (small ? GetCharacterHeight(FS_SMALL) : GetCharacterHeight(FS_NORMAL)) + WidgetDimensions::scaled.fullbevel.bottom, vp->zoom); diff --git a/src/widget.cpp b/src/widget.cpp index 820534ddcb..b9aa2c0d76 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -54,7 +54,7 @@ static inline Dimension ScaleGUITrad(const Dimension &dim) Dimension GetScaledSpriteSize(SpriteID sprid) { Point offset; - Dimension d = GetSpriteSize(sprid, &offset, ZOOM_LVL_OUT_4X); + Dimension d = GetSpriteSize(sprid, &offset, ZOOM_LVL_NORMAL); d.width -= offset.x; d.height -= offset.y; return ScaleGUITrad(d); @@ -3207,7 +3207,7 @@ std::unique_ptr MakeCompanyButtonRows(WidgetID widget_first, Widget std::unique_ptr hor = nullptr; // Storage for buttons in one row. int hor_length = 0; - Dimension sprite_size = GetSpriteSize(SPR_COMPANY_ICON, nullptr, ZOOM_LVL_OUT_4X); + Dimension sprite_size = GetSpriteSize(SPR_COMPANY_ICON, nullptr, ZOOM_LVL_NORMAL); sprite_size.width += WidgetDimensions::unscaled.matrix.Horizontal(); sprite_size.height += WidgetDimensions::unscaled.matrix.Vertical(); diff --git a/src/zoom_func.h b/src/zoom_func.h index 4ff4a84a10..4b998839f0 100644 --- a/src/zoom_func.h +++ b/src/zoom_func.h @@ -86,7 +86,7 @@ inline int UnScaleGUI(int value) */ inline ZoomLevel ScaleZoomGUI(ZoomLevel value) { - return std::clamp(ZoomLevel(value + (ZOOM_LVL_GUI - ZOOM_LVL_OUT_4X)), ZOOM_LVL_MIN, ZOOM_LVL_MAX); + return std::clamp(ZoomLevel(value + (ZOOM_LVL_GUI - ZOOM_LVL_NORMAL)), ZOOM_LVL_MIN, ZOOM_LVL_MAX); } /** @@ -96,7 +96,7 @@ inline ZoomLevel ScaleZoomGUI(ZoomLevel value) */ inline ZoomLevel UnScaleZoomGUI(ZoomLevel value) { - return std::clamp(ZoomLevel(value - (ZOOM_LVL_GUI - ZOOM_LVL_OUT_4X)), ZOOM_LVL_MIN, ZOOM_LVL_MAX); + return std::clamp(ZoomLevel(value - (ZOOM_LVL_GUI - ZOOM_LVL_NORMAL)), ZOOM_LVL_MIN, ZOOM_LVL_MAX); } /** diff --git a/src/zoom_type.h b/src/zoom_type.h index 9552fceca9..89c812b06a 100644 --- a/src/zoom_type.h +++ b/src/zoom_type.h @@ -16,35 +16,35 @@ enum ZoomLevel : uint8_t { /* Our possible zoom-levels */ ZOOM_LVL_BEGIN = 0, ///< Begin for iteration. - ZOOM_LVL_NORMAL = 0, ///< The normal zoom level. + ZOOM_LVL_IN_4X = 0, ///< Zoomed 4 times in. + ZOOM_LVL_IN_2X, ///< Zoomed 2 times in. + ZOOM_LVL_NORMAL, ///< The normal zoom level. ZOOM_LVL_OUT_2X, ///< Zoomed 2 times out. ZOOM_LVL_OUT_4X, ///< Zoomed 4 times out. ZOOM_LVL_OUT_8X, ///< Zoomed 8 times out. - ZOOM_LVL_OUT_16X, ///< Zoomed 16 times out. - ZOOM_LVL_OUT_32X, ///< Zoomed 32 times out. ZOOM_LVL_END, ///< End for iteration. /* Here we define in which zoom viewports are */ - ZOOM_LVL_VIEWPORT = ZOOM_LVL_OUT_4X, ///< Default zoom level for viewports. - ZOOM_LVL_NEWS = ZOOM_LVL_OUT_4X, ///< Default zoom level for the news messages. - ZOOM_LVL_INDUSTRY = ZOOM_LVL_OUT_8X, ///< Default zoom level for the industry view. - ZOOM_LVL_TOWN = ZOOM_LVL_OUT_4X, ///< Default zoom level for the town view. - ZOOM_LVL_AIRCRAFT = ZOOM_LVL_OUT_4X, ///< Default zoom level for the aircraft view. - ZOOM_LVL_SHIP = ZOOM_LVL_OUT_4X, ///< Default zoom level for the ship view. - ZOOM_LVL_TRAIN = ZOOM_LVL_OUT_4X, ///< Default zoom level for the train view. - ZOOM_LVL_ROADVEH = ZOOM_LVL_OUT_4X, ///< Default zoom level for the road vehicle view. - ZOOM_LVL_WORLD_SCREENSHOT = ZOOM_LVL_OUT_4X, ///< Default zoom level for the world screen shot. + ZOOM_LVL_VIEWPORT = ZOOM_LVL_NORMAL, ///< Default zoom level for viewports. + ZOOM_LVL_NEWS = ZOOM_LVL_NORMAL, ///< Default zoom level for the news messages. + ZOOM_LVL_INDUSTRY = ZOOM_LVL_OUT_2X, ///< Default zoom level for the industry view. + ZOOM_LVL_TOWN = ZOOM_LVL_NORMAL, ///< Default zoom level for the town view. + ZOOM_LVL_AIRCRAFT = ZOOM_LVL_NORMAL, ///< Default zoom level for the aircraft view. + ZOOM_LVL_SHIP = ZOOM_LVL_NORMAL, ///< Default zoom level for the ship view. + ZOOM_LVL_TRAIN = ZOOM_LVL_NORMAL, ///< Default zoom level for the train view. + ZOOM_LVL_ROADVEH = ZOOM_LVL_NORMAL, ///< Default zoom level for the road vehicle view. + ZOOM_LVL_WORLD_SCREENSHOT = ZOOM_LVL_NORMAL, ///< Default zoom level for the world screen shot. - ZOOM_LVL_DETAIL = ZOOM_LVL_OUT_8X, ///< All zoom levels below or equal to this will result in details on the screen, like road-work, ... - ZOOM_LVL_TEXT_EFFECT = ZOOM_LVL_OUT_8X, ///< All zoom levels above this will not show text effects. + ZOOM_LVL_DETAIL = ZOOM_LVL_OUT_2X, ///< All zoom levels below or equal to this will result in details on the screen, like road-work, ... + ZOOM_LVL_TEXT_EFFECT = ZOOM_LVL_OUT_2X, ///< All zoom levels above this will not show text effects. - ZOOM_LVL_MIN = ZOOM_LVL_NORMAL, ///< Minimum zoom level. - ZOOM_LVL_MAX = ZOOM_LVL_OUT_32X, ///< Maximum zoom level. + ZOOM_LVL_MIN = ZOOM_LVL_IN_4X, ///< Minimum zoom level. + ZOOM_LVL_MAX = ZOOM_LVL_OUT_8X, ///< Maximum zoom level. }; DECLARE_POSTFIX_INCREMENT(ZoomLevel) DECLARE_ENUM_AS_ADDABLE(ZoomLevel) -static uint const ZOOM_BASE_SHIFT = static_cast(ZOOM_LVL_OUT_4X); +static uint const ZOOM_BASE_SHIFT = static_cast(ZOOM_LVL_NORMAL); static uint const ZOOM_BASE = 1U << ZOOM_BASE_SHIFT; extern int _gui_scale; From df3e5ade11db714d06d2ab1b63b2c565eb5917bd Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 5 Apr 2024 04:43:25 +0000 Subject: [PATCH 237/695] Update: Translations from eints korean: 2 changes by telk5093 portuguese (brazilian): 1 change by pasantoro --- src/lang/brazilian_portuguese.txt | 2 +- src/lang/korean.txt | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index f14c43a26b..e2a8bfcdd7 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -2421,7 +2421,7 @@ STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Iniciar STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Iniciar um servidor próprio STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Introduza o seu nome -STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Introduza o endereço de servidor ou código de convite +STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Endereço do servidor ou código de convite # Start new multiplayer server STR_NETWORK_START_SERVER_CAPTION :{WHITE}Iniciar novo jogo multijogador diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 45ea38ea68..7a072c7db2 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -4900,7 +4900,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}예상 STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}저장 중입니다.{}끝날 때까지 기다려주세요! STR_ERROR_AUTOSAVE_FAILED :{WHITE}자동 저장 실패 STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}드라이브를 읽을 수 없습니다 +STR_ERROR_GAME_SAVE_FAILED :{WHITE}게임을 저장하지 못 했습니다... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}파일을 삭제할 수 없습니다 +STR_ERROR_GAME_LOAD_FAILED :{WHITE}게임을 불러오지 못 했습니다... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :내부 오류: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :손상된 게임 저장 파일 - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :상위 버전의 게임 저장 파일입니다 From d11622b9a0030ea7c387c78c913e284754f17b5c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 5 Apr 2024 08:17:42 +0100 Subject: [PATCH 238/695] Fix #12114: Viewport coords of crashed aircraft not updated when falling. (#12424) This results in the aircraft glitching as the wrong viewport area is drawn. --- src/aircraft_cmd.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index a85bc5c71b..ebb5c530d8 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -1186,6 +1186,7 @@ static bool HandleCrashedAircraft(Aircraft *v) v->crashed_counter = 500; v->z_pos++; } + SetAircraftPosition(v, v->x_pos, v->y_pos, v->z_pos); } if (v->crashed_counter < 650) { From e8c78df39ef553431f4083f06fd982956bf0c1e5 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 5 Apr 2024 08:18:12 +0100 Subject: [PATCH 239/695] Fix #12233: Mini order list overlaps vehicle group name. (#12423) Move mini order list down one line to make room. --- src/vehicle_gui.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 6a2197db25..94fc106bae 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -1682,7 +1682,7 @@ uint GetVehicleListHeight(VehicleType type, uint divisor) /* Name + vehicle + profit */ uint base = ScaleGUITrad(GetVehicleHeight(type)) + 2 * GetCharacterHeight(FS_SMALL) + WidgetDimensions::scaled.matrix.Vertical(); /* Drawing of the 4 small orders + profit*/ - if (type >= VEH_SHIP) base = std::max(base, 5U * GetCharacterHeight(FS_SMALL) + WidgetDimensions::scaled.matrix.Vertical()); + if (type >= VEH_SHIP) base = std::max(base, 6U * GetCharacterHeight(FS_SMALL) + WidgetDimensions::scaled.matrix.Vertical()); if (divisor == 1) return base; @@ -1774,7 +1774,7 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int DrawString(tr.left, tr.right, ir.top, STR_GROUP_NAME, TC_BLACK, SA_LEFT, false, FS_SMALL); } - if (show_orderlist) DrawSmallOrderList(v, olr.left, olr.right, ir.top, this->order_arrow_width, v->cur_real_order_index); + if (show_orderlist) DrawSmallOrderList(v, olr.left, olr.right, ir.top + GetCharacterHeight(FS_SMALL), this->order_arrow_width, v->cur_real_order_index); TextColour tc; if (v->IsChainInDepot()) { @@ -1796,7 +1796,7 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int DrawVehicleImage(vehgroup.vehicles_begin[i], {image_left + WidgetDimensions::scaled.hsep_wide * i, ir.top, image_right, ir.bottom}, selected_vehicle, EIT_IN_LIST, 0); } - if (show_orderlist) DrawSmallOrderList((vehgroup.vehicles_begin[0])->GetFirstOrder(), olr.left, olr.right, ir.top, this->order_arrow_width); + if (show_orderlist) DrawSmallOrderList((vehgroup.vehicles_begin[0])->GetFirstOrder(), olr.left, olr.right, ir.top + GetCharacterHeight(FS_SMALL), this->order_arrow_width); SetDParam(0, vehgroup.NumVehicles()); DrawString(ir.left, ir.right, ir.top + WidgetDimensions::scaled.framerect.top, STR_JUST_COMMA, TC_BLACK); From 83da886093bc953d6db0292dbf152097c3791d5a Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 5 Apr 2024 19:16:22 +0100 Subject: [PATCH 240/695] Fix: Aircraft crash counter was too low to reach ground. (#12425) Aircraft can float above the ground when crashed as the counter limit to reach the ground is too low. Instead reset the counter until the aircraft reaches the ground, then continue the timer. --- src/aircraft_cmd.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index ebb5c530d8..33ab2eba38 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -1182,9 +1182,11 @@ static bool HandleCrashedAircraft(Aircraft *v) if (v->crashed_counter < 500 && st == nullptr && ((v->crashed_counter % 3) == 0) ) { int z = GetSlopePixelZ(Clamp(v->x_pos, 0, Map::MaxX() * TILE_SIZE), Clamp(v->y_pos, 0, Map::MaxY() * TILE_SIZE)); v->z_pos -= 1; - if (v->z_pos == z) { + if (v->z_pos <= z) { v->crashed_counter = 500; - v->z_pos++; + v->z_pos = z + 1; + } else { + v->crashed_counter = 0; } SetAircraftPosition(v, v->x_pos, v->y_pos, v->z_pos); } From 2cc700d6069284b26b3d81b0ef29a11dc9135fc2 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 5 Apr 2024 21:51:36 +0100 Subject: [PATCH 241/695] Codechange: Replace colour_dropdown array with StringID arithmetic. (#12426) This assumes that the string colours are in order, but that is already assumed elsewhere. Removes old C-style array access. --- src/company_gui.cpp | 30 +++++------------------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 27f014b408..3f81d4cfdc 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -551,26 +551,6 @@ void ShowCompanyFinances(CompanyID company) new CompanyFinancesWindow(&_company_finances_desc, company); } -/* List of colours for the livery window */ -static const StringID _colour_dropdown[] = { - STR_COLOUR_DARK_BLUE, - STR_COLOUR_PALE_GREEN, - STR_COLOUR_PINK, - STR_COLOUR_YELLOW, - STR_COLOUR_RED, - STR_COLOUR_LIGHT_BLUE, - STR_COLOUR_GREEN, - STR_COLOUR_DARK_GREEN, - STR_COLOUR_BLUE, - STR_COLOUR_CREAM, - STR_COLOUR_MAUVE, - STR_COLOUR_PURPLE, - STR_COLOUR_ORANGE, - STR_COLOUR_BROWN, - STR_COLOUR_GREY, - STR_COLOUR_WHITE, -}; - /* Association of liveries to livery classes */ static const LiveryClass _livery_class[LS_END] = { LC_OTHER, @@ -588,7 +568,7 @@ static const LiveryClass _livery_class[LS_END] = { template class DropDownListColourItem : public DropDownIcon> { public: - DropDownListColourItem(int colour, bool masked) : DropDownIcon>(TSprite, GENERAL_SPRITE_COLOUR(colour % COLOUR_END), colour < COLOUR_END ? _colour_dropdown[colour] : STR_COLOUR_DEFAULT, colour, masked) + DropDownListColourItem(int colour, bool masked) : DropDownIcon>(TSprite, GENERAL_SPRITE_COLOUR(colour % COLOUR_END), colour < COLOUR_END ? (STR_COLOUR_DARK_BLUE + colour) : STR_COLOUR_DEFAULT, colour, masked) { } }; @@ -646,8 +626,8 @@ private: default_col = (primary ? default_livery->colour1 : default_livery->colour2) + COLOUR_END; list.push_back(std::make_unique>(default_col, false)); } - for (uint i = 0; i < lengthof(_colour_dropdown); i++) { - list.push_back(std::make_unique>(i, HasBit(used_colours, i))); + for (Colours colour = COLOUR_BEGIN; colour != COLOUR_END; colour++) { + list.push_back(std::make_unique>(colour, HasBit(used_colours, colour))); } uint8_t sel; @@ -781,8 +761,8 @@ public: case WID_SCL_PRI_COL_DROPDOWN: { this->square = GetSpriteSize(SPR_SQUARE); int string_padding = this->square.width + WidgetDimensions::scaled.hsep_normal + padding.width; - for (const StringID *id = _colour_dropdown; id != endof(_colour_dropdown); id++) { - size->width = std::max(size->width, GetStringBoundingBox(*id).width + string_padding); + for (Colours colour = COLOUR_BEGIN; colour != COLOUR_END; colour++) { + size->width = std::max(size->width, GetStringBoundingBox(STR_COLOUR_DARK_BLUE + colour).width + string_padding); } size->width = std::max(size->width, GetStringBoundingBox(STR_COLOUR_DEFAULT).width + string_padding); break; From a866166673d8295f89f099ca8bcc87dfc95a44d6 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 5 Apr 2024 21:52:50 +0100 Subject: [PATCH 242/695] Codechange: Use initializer_list and range-for for OpenTTD title. (#12430) Replaces C-style array and looping. --- src/main_gui.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main_gui.cpp b/src/main_gui.cpp index d93b9eeb2a..52e5a5491a 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -256,18 +256,18 @@ struct MainWindow : Window { this->DrawWidgets(); if (_game_mode == GM_MENU) { - static const SpriteID title_sprites[] = {SPR_OTTD_O, SPR_OTTD_P, SPR_OTTD_E, SPR_OTTD_N, SPR_OTTD_T, SPR_OTTD_T, SPR_OTTD_D}; + static const std::initializer_list title_sprites = {SPR_OTTD_O, SPR_OTTD_P, SPR_OTTD_E, SPR_OTTD_N, SPR_OTTD_T, SPR_OTTD_T, SPR_OTTD_D}; uint letter_spacing = ScaleGUITrad(10); - int name_width = (lengthof(title_sprites) - 1) * letter_spacing; + int name_width = static_cast(std::size(title_sprites) - 1) * letter_spacing; - for (uint i = 0; i < lengthof(title_sprites); i++) { - name_width += GetSpriteSize(title_sprites[i]).width; + for (const SpriteID &sprite : title_sprites) { + name_width += GetSpriteSize(sprite).width; } int off_x = (this->width - name_width) / 2; - for (uint i = 0; i < lengthof(title_sprites); i++) { - DrawSprite(title_sprites[i], PAL_NONE, off_x, ScaleGUITrad(50)); - off_x += GetSpriteSize(title_sprites[i]).width + letter_spacing; + for (const SpriteID &sprite : title_sprites) { + DrawSprite(sprite, PAL_NONE, off_x, ScaleGUITrad(50)); + off_x += GetSpriteSize(sprite).width + letter_spacing; } } } From 6771dbe62b7aed89e66565e03d0728e8ffbb4de9 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 5 Apr 2024 19:45:32 +0100 Subject: [PATCH 243/695] Codechange: Use range-for to find replacement blitter. --- src/gfxinit.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index 0384bb86c8..a0aac40fd7 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -292,13 +292,13 @@ static bool SwitchNewGRFBlitter() const bool animation_wanted = HasBit(_display_opt, DO_FULL_ANIMATION); const char *cur_blitter = BlitterFactory::GetCurrentBlitter()->GetName(); - for (uint i = 0; i < lengthof(replacement_blitters); i++) { - if (animation_wanted && (replacement_blitters[i].animation == 0)) continue; - if (!animation_wanted && (replacement_blitters[i].animation == 1)) continue; + for (const auto &replacement_blitter : replacement_blitters) { + if (animation_wanted && (replacement_blitter.animation == 0)) continue; + if (!animation_wanted && (replacement_blitter.animation == 1)) continue; - if (!IsInsideMM(depth_wanted_by_base, replacement_blitters[i].min_base_depth, replacement_blitters[i].max_base_depth + 1)) continue; - if (!IsInsideMM(depth_wanted_by_grf, replacement_blitters[i].min_grf_depth, replacement_blitters[i].max_grf_depth + 1)) continue; - const char *repl_blitter = replacement_blitters[i].name; + if (!IsInsideMM(depth_wanted_by_base, replacement_blitter.min_base_depth, replacement_blitter.max_base_depth + 1)) continue; + if (!IsInsideMM(depth_wanted_by_grf, replacement_blitter.min_grf_depth, replacement_blitter.max_grf_depth + 1)) continue; + const char *repl_blitter = replacement_blitter.name; if (strcmp(repl_blitter, cur_blitter) == 0) { return false; From 8e881471c1c7a420c0cb90a17ac8e40da5cf953f Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 5 Apr 2024 19:46:53 +0100 Subject: [PATCH 244/695] Codechange: Pass replacement blitter name as string_view instead char *. --- src/blitter/factory.hpp | 12 ++++++------ src/gfxinit.cpp | 17 ++++++++--------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/blitter/factory.hpp b/src/blitter/factory.hpp index 5889cca4f2..4daa4c42cd 100644 --- a/src/blitter/factory.hpp +++ b/src/blitter/factory.hpp @@ -93,7 +93,7 @@ public: * @param name the blitter to select. * @post Sets the blitter so GetCurrentBlitter() returns it too. */ - static Blitter *SelectBlitter(const std::string &name) + static Blitter *SelectBlitter(const std::string_view name) { BlitterFactory *b = GetBlitterFactory(name); if (b == nullptr) return nullptr; @@ -111,17 +111,17 @@ public: * @param name the blitter factory to select. * @return The blitter factory, or nullptr when there isn't one with the wanted name. */ - static BlitterFactory *GetBlitterFactory(const std::string &name) + static BlitterFactory *GetBlitterFactory(const std::string_view name) { #if defined(DEDICATED) - const char *default_blitter = "null"; + const std::string_view default_blitter = "null"; #elif defined(WITH_COCOA) - const char *default_blitter = "32bpp-anim"; + const std::string_view default_blitter = "32bpp-anim"; #else - const char *default_blitter = "8bpp-optimized"; + const std::string_view default_blitter = "8bpp-optimized"; #endif if (GetBlitters().empty()) return nullptr; - const char *bname = name.empty() ? default_blitter : name.c_str(); + const std::string_view bname = name.empty() ? default_blitter : name; for (auto &it : GetBlitters()) { BlitterFactory *b = it.second; diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index a0aac40fd7..7971222ccf 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -219,10 +219,10 @@ static void LoadSpriteTables() } -static void RealChangeBlitter(const char *repl_blitter) +static void RealChangeBlitter(const std::string_view repl_blitter) { - const char *cur_blitter = BlitterFactory::GetCurrentBlitter()->GetName(); - if (strcmp(cur_blitter, repl_blitter) == 0) return; + const std::string_view cur_blitter = BlitterFactory::GetCurrentBlitter()->GetName(); + if (cur_blitter == repl_blitter) return; Debug(driver, 1, "Switching blitter from '{}' to '{}'... ", cur_blitter, repl_blitter); Blitter *new_blitter = BlitterFactory::SelectBlitter(repl_blitter); @@ -270,7 +270,7 @@ static bool SwitchNewGRFBlitter() /* Search the best blitter. */ static const struct { - const char *name; + const std::string_view name; uint animation; ///< 0: no support, 1: do support, 2: both uint min_base_depth, max_base_depth, min_grf_depth, max_grf_depth; } replacement_blitters[] = { @@ -290,7 +290,7 @@ static bool SwitchNewGRFBlitter() }; const bool animation_wanted = HasBit(_display_opt, DO_FULL_ANIMATION); - const char *cur_blitter = BlitterFactory::GetCurrentBlitter()->GetName(); + const std::string_view cur_blitter = BlitterFactory::GetCurrentBlitter()->GetName(); for (const auto &replacement_blitter : replacement_blitters) { if (animation_wanted && (replacement_blitter.animation == 0)) continue; @@ -298,15 +298,14 @@ static bool SwitchNewGRFBlitter() if (!IsInsideMM(depth_wanted_by_base, replacement_blitter.min_base_depth, replacement_blitter.max_base_depth + 1)) continue; if (!IsInsideMM(depth_wanted_by_grf, replacement_blitter.min_grf_depth, replacement_blitter.max_grf_depth + 1)) continue; - const char *repl_blitter = replacement_blitter.name; - if (strcmp(repl_blitter, cur_blitter) == 0) { + if (replacement_blitter.name == cur_blitter) { return false; } - if (BlitterFactory::GetBlitterFactory(repl_blitter) == nullptr) continue; + if (BlitterFactory::GetBlitterFactory(replacement_blitter.name) == nullptr) continue; /* Inform the video driver we want to switch blitter as soon as possible. */ - VideoDriver::GetInstance()->QueueOnMainThread(std::bind(&RealChangeBlitter, repl_blitter)); + VideoDriver::GetInstance()->QueueOnMainThread(std::bind(&RealChangeBlitter, replacement_blitter.name)); break; } From eaafc57de679bb2991ef96c0c0f2a473f4cc1e54 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 6 Apr 2024 04:41:24 +0000 Subject: [PATCH 245/695] Update: Translations from eints swedish: 6 changes by joeax910 norwegian (bokmal): 2 changes by eriksorngard chinese (simplified): 2 changes by WenSimEHRP dutch: 2 changes by Afoklala --- src/lang/dutch.txt | 2 ++ src/lang/norwegian_bokmal.txt | 2 ++ src/lang/simplified_chinese.txt | 2 ++ src/lang/swedish.txt | 12 ++++++------ 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 32c7857259..3c24b2d5d0 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -4899,7 +4899,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Verwacht STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Opslaan van spel is nog bezig,{}Wacht tot dit voltooid is! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatisch opslaan mislukt STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan niet lezen van schijf +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Spel opslaan mislukt... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan bestand niet verwijderen +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Spel laden spel mislukt... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interne fout: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Opgeslagen spel beschadigd - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Opgeslagen spel hoort bij een nieuwere versie diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 0096ed5655..3eaf13fca4 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -4901,7 +4901,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Anslått STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Lagring pågår enda,{}vennligst vent til den er klar! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatisk lagring mislyktes STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan ikke lese fra disk +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Lagring av spillet mislyktes... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan ikke slette fil +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Lasting av spill mislyktes... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Intern feil: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Ødelagt lagret spill - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spillet er lagret i en nyere versjon diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 366cbcb7cf..9b454332df 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -4899,7 +4899,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}预计 STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}保存仍在继续{}请耐心等待…… STR_ERROR_AUTOSAVE_FAILED :{WHITE}自动保存失败 STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}不能读取驱动器 +STR_ERROR_GAME_SAVE_FAILED :{WHITE}保存游戏失败…… STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}不能删除文件 +STR_ERROR_GAME_LOAD_FAILED :{WHITE}读取游戏失败…… STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :内部错误: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :无法识别的存档 - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :该存档是新版本的。当前版本无法读取。 diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index f7627ee22c..c86a05f7e3 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -2858,14 +2858,14 @@ 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_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} -STR_BRIDGE_NAME_SUSPENSION_STEEL :Hängbro, Stål -STR_BRIDGE_NAME_GIRDER_STEEL :Balkbro, Stål -STR_BRIDGE_NAME_CANTILEVER_STEEL :Konsolbro, Stål -STR_BRIDGE_NAME_SUSPENSION_CONCRETE :Hängbro, Betong +STR_BRIDGE_NAME_SUSPENSION_STEEL :Hängbro, stål +STR_BRIDGE_NAME_GIRDER_STEEL :Balkbro, stål +STR_BRIDGE_NAME_CANTILEVER_STEEL :Konsolbro, stål +STR_BRIDGE_NAME_SUSPENSION_CONCRETE :Hängbro, betong STR_BRIDGE_NAME_WOODEN :Träbro STR_BRIDGE_NAME_CONCRETE :Betongbro -STR_BRIDGE_NAME_TUBULAR_STEEL :Rörbro, Stål -STR_BRIDGE_TUBULAR_SILICON :Rörbro, Kisel +STR_BRIDGE_NAME_TUBULAR_STEEL :Rörbro, stål +STR_BRIDGE_TUBULAR_SILICON :Rörbro, kisel # Road construction toolbar From c544a2be0ab457ad16ed274f597e026016e3fb2e Mon Sep 17 00:00:00 2001 From: Rubidium Date: Fri, 5 Apr 2024 22:34:20 +0200 Subject: [PATCH 246/695] Fix: do not use lengthof() for non C-style arrays --- src/network/network_gui.cpp | 2 +- src/newgrf.cpp | 2 +- src/settings.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index a9f6bd4882..b659f64d21 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -2251,7 +2251,7 @@ struct NetworkCompanyPasswordWindow : public Window { QueryString password_editbox; ///< Password editbox. Dimension warning_size; ///< How much space to use for the warning text - NetworkCompanyPasswordWindow(WindowDesc *desc, Window *parent) : Window(desc), password_editbox(lengthof(_settings_client.network.default_company_pass)) + NetworkCompanyPasswordWindow(WindowDesc *desc, Window *parent) : Window(desc), password_editbox(NETWORK_PASSWORD_LENGTH) { this->InitNested(0); this->UpdateWarningStringSize(); diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 021608b843..f3ba26801d 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -9499,7 +9499,7 @@ static void FinaliseIndustriesArray() for (auto &indtsp : _industry_tile_specs) { /* Apply default cargo translation map for unset cargo slots */ - for (uint i = 0; i < lengthof(indtsp.accepts_cargo); ++i) { + for (size_t i = 0; i < indtsp.accepts_cargo.size(); ++i) { if (!IsValidCargoID(indtsp.accepts_cargo[i])) indtsp.accepts_cargo[i] = GetCargoIDByLabel(GetActiveCargoLabel(indtsp.accepts_cargo_label[i])); } } diff --git a/src/settings.cpp b/src/settings.cpp index bb4f0966d6..1dc89ef622 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1031,7 +1031,7 @@ static void GraphicsSetLoadConfig(IniFile &ini) if (const IniItem *item = group->GetItem("extra_params"); item != nullptr && item->value) { auto &extra_params = BaseGraphics::ini_data.extra_params; - extra_params.resize(lengthof(GRFConfig::param)); + extra_params.resize(0x80); // TODO: make ParseIntList work nicely with C++ containers int count = ParseIntList(item->value->c_str(), &extra_params.front(), extra_params.size()); if (count < 0) { SetDParamStr(0, BaseGraphics::ini_data.name); From 97bea563d73ed493ddbe0b72309421f9f1c0aad2 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Fri, 5 Apr 2024 22:34:24 +0200 Subject: [PATCH 247/695] Codechange: let lengthof fail when anything that isn't a C-style array is passed --- src/stdafx.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/stdafx.h b/src/stdafx.h index 850d18adba..7f598de39e 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -273,6 +273,9 @@ static_assert(SIZE_MAX >= UINT32_MAX); #define M_PI 3.14159265358979323846 #endif /* M_PI_2 */ +template +char (&ArraySizeHelper(T (&array)[N]))[N]; + /** * Return the length of an fixed size array. * Unlike sizeof this function returns the number of elements @@ -281,7 +284,7 @@ static_assert(SIZE_MAX >= UINT32_MAX); * @param x The pointer to the first element of the array * @return The number of elements */ -#define lengthof(x) (sizeof(x) / sizeof(x[0])) +#define lengthof(array) (sizeof(ArraySizeHelper(array))) /** * Get the end element of an fixed size array. From 830c9e2de84ee6edfa5cacbd8ef8777de1156ed8 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 5 Apr 2024 19:31:08 +0100 Subject: [PATCH 248/695] Codechange: Simplify iteration of framerate performance elements. --- src/framerate_gui.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index 7e32bd611b..dc5698791d 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -817,8 +817,8 @@ struct FrametimeGraphWindow : Window { { TIMESTAMP_PRECISION * 3, 4 }, { TIMESTAMP_PRECISION * 1, 2 }, }; - for (const ScaleDef *sc = hscales; sc < hscales + lengthof(hscales); sc++) { - if (range < sc->range) this->horizontal_scale = sc->scale; + for (const auto &sc : hscales) { + if (range < sc.range) this->horizontal_scale = sc.scale; } } @@ -836,8 +836,8 @@ struct FrametimeGraphWindow : Window { TIMESTAMP_PRECISION / 50, TIMESTAMP_PRECISION / 200, }; - for (const TimingMeasurement *sc = vscales; sc < vscales + lengthof(vscales); sc++) { - if (range < *sc) this->vertical_scale = (int)*sc; + for (const auto &sc : vscales) { + if (range < sc) this->vertical_scale = (int)sc; } } @@ -1070,11 +1070,11 @@ void ConPrintFramerate() bool printed_anything = false; - for (const PerformanceElement *e = rate_elements; e < rate_elements + lengthof(rate_elements); e++) { - auto &pf = _pf_data[*e]; + for (const auto &e : rate_elements) { + auto &pf = _pf_data[e]; if (pf.num_valid == 0) continue; IConsolePrint(TC_GREEN, "{} rate: {:.2f}fps (expected: {:.2f}fps)", - MEASUREMENT_NAMES[*e], + MEASUREMENT_NAMES[e], pf.GetRate(), pf.expected_rate); printed_anything = true; From b90520942106346c9b53ad88304c68e8dacbc303 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 6 Apr 2024 19:29:41 +0100 Subject: [PATCH 249/695] Fix: Viewport signs assume small font is smaller than normal font. (#12422) If the small font is set to a larger size than the normal font for some reason, viewport signs would be drawn incorrect as the area marked dirty only considered the normal size font. --- src/viewport.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/viewport.cpp b/src/viewport.cpp index 9c91b28833..98f40b2a42 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1314,7 +1314,7 @@ void ViewportAddString(const DrawPixelInfo *dpi, ZoomLevel small_from, const Vie int right = left + dpi->width; int bottom = top + dpi->height; - int sign_height = ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.fullbevel.bottom, dpi->zoom); + int sign_height = ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + GetCharacterHeight(small ? FS_SMALL : FS_NORMAL) + WidgetDimensions::scaled.fullbevel.bottom, dpi->zoom); int sign_half_width = ScaleByZoom((small ? sign->width_small : sign->width_normal) / 2, dpi->zoom); if (bottom < sign->top || @@ -1338,8 +1338,7 @@ void ViewportAddString(const DrawPixelInfo *dpi, ZoomLevel small_from, const Vie static Rect ExpandRectWithViewportSignMargins(Rect r, ZoomLevel zoom) { - /* Pessimistically always use normal font, but also assume small font is never larger in either dimension */ - const int fh = GetCharacterHeight(FS_NORMAL); + const int fh = std::max(GetCharacterHeight(FS_NORMAL), GetCharacterHeight(FS_SMALL)); const int max_tw = _viewport_sign_maxwidth / 2 + 1; const int expand_y = ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + fh + WidgetDimensions::scaled.fullbevel.bottom, zoom); const int expand_x = ScaleByZoom(WidgetDimensions::scaled.fullbevel.left + max_tw + WidgetDimensions::scaled.fullbevel.right, zoom); @@ -1490,12 +1489,16 @@ void ViewportSign::MarkDirty(ZoomLevel maxzoom) const { Rect zoomlevels[ZOOM_LVL_END]; + /* We don't know which size will be drawn, so mark the largest area dirty. */ + const uint half_width = std::max(this->width_normal, this->width_small) / 2 + 1; + const uint height = WidgetDimensions::scaled.fullbevel.top + std::max(GetCharacterHeight(FS_NORMAL), GetCharacterHeight(FS_SMALL)) + WidgetDimensions::scaled.fullbevel.bottom + 1; + for (ZoomLevel zoom = ZOOM_LVL_BEGIN; zoom != ZOOM_LVL_END; zoom++) { /* FIXME: This doesn't switch to width_small when appropriate. */ - zoomlevels[zoom].left = this->center - ScaleByZoom(this->width_normal / 2 + 1, zoom); + zoomlevels[zoom].left = this->center - ScaleByZoom(half_width, zoom); zoomlevels[zoom].top = this->top - ScaleByZoom(1, zoom); - zoomlevels[zoom].right = this->center + ScaleByZoom(this->width_normal / 2 + 1, zoom); - zoomlevels[zoom].bottom = this->top + ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.fullbevel.bottom + 1, zoom); + zoomlevels[zoom].right = this->center + ScaleByZoom(half_width, zoom); + zoomlevels[zoom].bottom = this->top + ScaleByZoom(height, zoom); } for (const Window *w : Window::Iterate()) { @@ -1709,7 +1712,7 @@ static void ViewportDrawStrings(ZoomLevel zoom, const StringSpriteToDrawVector * int w = GB(ss.width, 0, 15); int x = UnScaleByZoom(ss.x, zoom); int y = UnScaleByZoom(ss.y, zoom); - int h = WidgetDimensions::scaled.fullbevel.top + (small ? GetCharacterHeight(FS_SMALL) : GetCharacterHeight(FS_NORMAL)) + WidgetDimensions::scaled.fullbevel.bottom; + int h = WidgetDimensions::scaled.fullbevel.top + GetCharacterHeight(small ? FS_SMALL : FS_NORMAL) + WidgetDimensions::scaled.fullbevel.bottom; if (ss.colour != INVALID_COLOUR) { if (IsTransparencySet(TO_SIGNS) && ss.string_id != STR_WHITE_SIGN) { @@ -2194,7 +2197,7 @@ static bool CheckClickOnViewportSign(const Viewport *vp, int x, int y, const Vie { bool small = (vp->zoom >= ZOOM_LVL_OUT_4X); int sign_half_width = ScaleByZoom((small ? sign->width_small : sign->width_normal) / 2, vp->zoom); - int sign_height = ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + (small ? GetCharacterHeight(FS_SMALL) : GetCharacterHeight(FS_NORMAL)) + WidgetDimensions::scaled.fullbevel.bottom, vp->zoom); + int sign_height = ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + GetCharacterHeight(small ? FS_SMALL : FS_NORMAL) + WidgetDimensions::scaled.fullbevel.bottom, vp->zoom); return y >= sign->top && y < sign->top + sign_height && x >= sign->center - sign_half_width && x < sign->center + sign_half_width; @@ -2296,7 +2299,7 @@ ViewportSignKdtreeItem ViewportSignKdtreeItem::MakeStation(StationID id) item.top = st->sign.top; /* Assume the sign can be a candidate for drawing, so measure its width */ - _viewport_sign_maxwidth = std::max(_viewport_sign_maxwidth, st->sign.width_normal); + _viewport_sign_maxwidth = std::max({_viewport_sign_maxwidth, st->sign.width_normal, st->sign.width_small}); return item; } @@ -2313,7 +2316,7 @@ ViewportSignKdtreeItem ViewportSignKdtreeItem::MakeWaypoint(StationID id) item.top = st->sign.top; /* Assume the sign can be a candidate for drawing, so measure its width */ - _viewport_sign_maxwidth = std::max(_viewport_sign_maxwidth, st->sign.width_normal); + _viewport_sign_maxwidth = std::max({_viewport_sign_maxwidth, st->sign.width_normal, st->sign.width_small}); return item; } @@ -2330,7 +2333,7 @@ ViewportSignKdtreeItem ViewportSignKdtreeItem::MakeTown(TownID id) item.top = town->cache.sign.top; /* Assume the sign can be a candidate for drawing, so measure its width */ - _viewport_sign_maxwidth = std::max(_viewport_sign_maxwidth, town->cache.sign.width_normal); + _viewport_sign_maxwidth = std::max({_viewport_sign_maxwidth, town->cache.sign.width_normal, town->cache.sign.width_small}); return item; } @@ -2347,7 +2350,7 @@ ViewportSignKdtreeItem ViewportSignKdtreeItem::MakeSign(SignID id) item.top = sign->sign.top; /* Assume the sign can be a candidate for drawing, so measure its width */ - _viewport_sign_maxwidth = std::max(_viewport_sign_maxwidth, sign->sign.width_normal); + _viewport_sign_maxwidth = std::max({_viewport_sign_maxwidth, sign->sign.width_normal, sign->sign.width_small}); return item; } From a4c2f0778a2d1bc34b123ca0c292b30b3317a3a1 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 6 Apr 2024 19:30:01 +0100 Subject: [PATCH 250/695] Codechange: Use range-for to iterate keycode-to-name lookups. (#12429) Replaces C-style looping. --- src/hotkeys.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index 2260e456ea..50c25579da 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -26,12 +26,12 @@ static std::vector *_hotkey_lists = nullptr; /** String representation of a keycode */ struct KeycodeNames { - const char *name; ///< Name of the keycode + const std::string_view name; ///< Name of the keycode WindowKeyCodes keycode; ///< The keycode }; /** Array of non-standard keycodes that can be used in the hotkeys config file. */ -static const KeycodeNames _keycode_to_name[] = { +static const std::initializer_list _keycode_to_name = { {"SHIFT", WKC_SHIFT}, {"CTRL", WKC_CTRL}, {"ALT", WKC_ALT}, @@ -100,9 +100,9 @@ static uint16_t ParseCode(const char *start, const char *end) while (start < end && *start == ' ') start++; while (end > start && *end == ' ') end--; std::string_view str{start, (size_t)(end - start)}; - for (uint i = 0; i < lengthof(_keycode_to_name); i++) { - if (StrEqualsIgnoreCase(str, _keycode_to_name[i].name)) { - return _keycode_to_name[i].keycode; + for (const auto &kn : _keycode_to_name) { + if (StrEqualsIgnoreCase(str, kn.name)) { + return kn.keycode; } } if (end - start == 1) { @@ -193,9 +193,9 @@ static std::string KeycodeToString(uint16_t keycode) if (!str.empty()) str += "+"; keycode = keycode & ~WKC_SPECIAL_KEYS; - for (uint i = 0; i < lengthof(_keycode_to_name); i++) { - if (_keycode_to_name[i].keycode == keycode) { - str += _keycode_to_name[i].name; + for (const auto &kn : _keycode_to_name) { + if (kn.keycode == keycode) { + str += kn.name; return str; } } From fbdf26800b1efc63849d435d6b0498db1085420c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 6 Apr 2024 19:30:23 +0100 Subject: [PATCH 251/695] Codechange: Use std::initializer_list and range-for for credits window. (#12431) Replaces C-style array, indexed looping, and char * strings. --- src/misc_gui.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 27a16d4452..182693b1a0 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -404,7 +404,7 @@ static WindowDesc _about_desc( std::begin(_nested_about_widgets), std::end(_nested_about_widgets) ); -static const char * const _credits[] = { +static const std::initializer_list _credits = { "Original design by Chris Sawyer", "Original graphics by Simon Foster", "", @@ -499,8 +499,8 @@ struct AboutWindow : public Window { d.height = this->line_height * num_visible_lines; d.width = 0; - for (uint i = 0; i < lengthof(_credits); i++) { - d.width = std::max(d.width, GetStringBoundingBox(_credits[i]).width); + for (const auto &str : _credits) { + d.width = std::max(d.width, GetStringBoundingBox(str).width); } *size = maxdim(*size, d); } @@ -512,9 +512,9 @@ struct AboutWindow : public Window { int y = this->text_position; /* Show all scrolling _credits */ - for (uint i = 0; i < lengthof(_credits); i++) { + for (const auto &str : _credits) { if (y >= r.top + 7 && y < r.bottom - this->line_height) { - DrawString(r.left, r.right, y, _credits[i], TC_BLACK, SA_LEFT | SA_FORCE); + DrawString(r.left, r.right, y, str, TC_BLACK, SA_LEFT | SA_FORCE); } y += this->line_height; } @@ -528,7 +528,7 @@ struct AboutWindow : public Window { IntervalTimer scroll_interval = {std::chrono::milliseconds(2100) / GetCharacterHeight(FS_NORMAL), [this](uint count) { this->text_position -= count; /* If the last text has scrolled start a new from the start */ - if (this->text_position < (int)(this->GetWidget(WID_A_SCROLLING_TEXT)->pos_y - lengthof(_credits) * this->line_height)) { + if (this->text_position < (int)(this->GetWidget(WID_A_SCROLLING_TEXT)->pos_y - std::size(_credits) * this->line_height)) { this->text_position = this->GetWidget(WID_A_SCROLLING_TEXT)->pos_y + this->GetWidget(WID_A_SCROLLING_TEXT)->current_y; } this->SetWidgetDirty(WID_A_SCROLLING_TEXT); From 34ba969c74458c18030ce1ac158821dd58a8242c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 6 Apr 2024 21:16:02 +0100 Subject: [PATCH 252/695] Change: Display more useful information in sprite aligner than sprite ID. (#12439) Sprite IDs are not useful information given they change don't refer to anything outside the loaded game. Instead, include the filename and nfo line at minimum, and include action A or action 5 sprite replacement information if applicable. --- src/CMakeLists.txt | 1 + src/lang/english.txt | 6 +++- src/newgrf.cpp | 33 ++++++++---------- src/newgrf_act5.h | 31 +++++++++++++++++ src/newgrf_debug_gui.cpp | 75 +++++++++++++++++++++++++++++++++------- src/spritecache.cpp | 9 +++++ src/spritecache.h | 1 + 7 files changed, 123 insertions(+), 33 deletions(-) create mode 100644 src/newgrf_act5.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 597c4331f5..56cb816248 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -254,6 +254,7 @@ add_files( music_gui.cpp newgrf.cpp newgrf.h + newgrf_act5.h newgrf_airport.cpp newgrf_airport.h newgrf_airporttiles.cpp diff --git a/src/lang/english.txt b/src/lang/english.txt index 0142ed31d4..860915ac3c 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -3488,7 +3488,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Road type STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aligning sprite {COMMA} ({RAW_STRING}) +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Aligning sprite: ({RAW_STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Aligning sprite: Action 0xA, {COMMA} ({RAW_STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Aligning sprite: Action 0x5, type {HEX}, {COMMA} ({RAW_STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Next sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Proceed to the next normal sprite, skipping any pseudo/recolour/font sprites and wrapping around from the last sprite to the first STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Go to sprite @@ -3497,6 +3499,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Previous STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceed to the previous normal sprite, skipping any pseudo/recolour/font sprites and wrapping around from the first sprite to the last STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation of the currently selected sprite. The alignment is ignored when drawing this sprite STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move the sprite around, changing the X and Y offsets. Ctrl+Click to move the sprite eight units at a time +STR_SPRITE_ALIGNER_SPRITE :{RAW_STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Offset centred @@ -5833,6 +5836,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING1} STR_JUST_STRING2 :{STRING2} +STR_JUST_STRING4 :{STRING4} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{RAW_STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{RAW_STRING} diff --git a/src/newgrf.cpp b/src/newgrf.cpp index f3ba26801d..1203a19ef9 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -27,6 +27,7 @@ #include "newgrf_station.h" #include "industrytype.h" #include "industry_map.h" +#include "newgrf_act5.h" #include "newgrf_canal.h" #include "newgrf_townname.h" #include "newgrf_industries.h" @@ -6369,7 +6370,7 @@ static void FeatureNewName(ByteReader *buf) * @param name Used for error warnings. * @return The number of sprites that is going to be skipped. */ -static uint16_t SanitizeSpriteOffset(uint16_t &num, uint16_t offset, int max_sprites, const char *name) +static uint16_t SanitizeSpriteOffset(uint16_t &num, uint16_t offset, int max_sprites, const std::string_view name) { if (offset >= max_sprites) { @@ -6390,23 +6391,8 @@ static uint16_t SanitizeSpriteOffset(uint16_t &num, uint16_t offset, int max_spr } -/** The type of action 5 type. */ -enum Action5BlockType { - A5BLOCK_FIXED, ///< Only allow replacing a whole block of sprites. (TTDP compatible) - A5BLOCK_ALLOW_OFFSET, ///< Allow replacing any subset by specifiing an offset. - A5BLOCK_INVALID, ///< unknown/not-implemented type -}; -/** Information about a single action 5 type. */ -struct Action5Type { - Action5BlockType block_type; ///< How is this Action5 type processed? - SpriteID sprite_base; ///< Load the sprites starting from this sprite. - uint16_t min_sprites; ///< If the Action5 contains less sprites, the whole block will be ignored. - uint16_t max_sprites; ///< If the Action5 contains more sprites, only the first max_sprites sprites will be used. - const char *name; ///< Name for error messages. -}; - /** The information about action 5 types. */ -static const Action5Type _action5_types[] = { +static constexpr auto _action5_types = std::to_array({ /* Note: min_sprites should not be changed. Therefore these constants are directly here and not in sprites.h */ /* 0x00 */ { A5BLOCK_INVALID, 0, 0, 0, "Type 0x00" }, /* 0x01 */ { A5BLOCK_INVALID, 0, 0, 0, "Type 0x01" }, @@ -6433,7 +6419,16 @@ static const Action5Type _action5_types[] = { /* 0x16 */ { A5BLOCK_ALLOW_OFFSET, SPR_AIRPORT_PREVIEW_BASE, 1, SPR_AIRPORT_PREVIEW_COUNT, "Airport preview graphics" }, /* 0x17 */ { A5BLOCK_ALLOW_OFFSET, SPR_RAILTYPE_TUNNEL_BASE, 1, RAILTYPE_TUNNEL_BASE_COUNT, "Railtype tunnel base" }, /* 0x18 */ { A5BLOCK_ALLOW_OFFSET, SPR_PALETTE_BASE, 1, PALETTE_SPRITE_COUNT, "Palette" }, -}; +}); + +/** + * Get list of all action 5 types + * @return Read-only span of action 5 type information. + */ +std::span GetAction5Types() +{ + return _action5_types; +} /* Action 0x05 */ static void GraphicsNew(ByteReader *buf) @@ -6468,7 +6463,7 @@ static void GraphicsNew(ByteReader *buf) } /* Supported type? */ - if ((type >= lengthof(_action5_types)) || (_action5_types[type].block_type == A5BLOCK_INVALID)) { + if ((type >= std::size(_action5_types)) || (_action5_types[type].block_type == A5BLOCK_INVALID)) { GrfMsg(2, "GraphicsNew: Custom graphics (type 0x{:02X}) sprite block of length {} (unimplemented, ignoring)", type, num); _cur.skip_sprites = num; return; diff --git a/src/newgrf_act5.h b/src/newgrf_act5.h new file mode 100644 index 0000000000..f16872424f --- /dev/null +++ b/src/newgrf_act5.h @@ -0,0 +1,31 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file newgrf_act5.h Information about NewGRF Action 5. */ + +#ifndef NEWGRF_ACT5_H +#define NEWGRF_ACT5_H + +/** The type of action 5 type. */ +enum Action5BlockType { + A5BLOCK_FIXED, ///< Only allow replacing a whole block of sprites. (TTDP compatible) + A5BLOCK_ALLOW_OFFSET, ///< Allow replacing any subset by specifiing an offset. + A5BLOCK_INVALID, ///< unknown/not-implemented type +}; + +/** Information about a single action 5 type. */ +struct Action5Type { + Action5BlockType block_type; ///< How is this Action5 type processed? + SpriteID sprite_base; ///< Load the sprites starting from this sprite. + uint16_t min_sprites; ///< If the Action5 contains less sprites, the whole block will be ignored. + uint16_t max_sprites; ///< If the Action5 contains more sprites, only the first max_sprites sprites will be used. + const std::string_view name; ///< Name for error messages. +}; + +std::span GetAction5Types(); + +#endif /* NEWGRF_ACT5_H */ diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index fe9447edc1..c1ed16261d 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -9,6 +9,7 @@ #include "stdafx.h" #include "core/backup_type.hpp" +#include "core/geometry_func.hpp" #include "window_gui.h" #include "window_func.h" #include "random_access_file_type.h" @@ -28,6 +29,7 @@ #include "train.h" #include "roadveh.h" +#include "newgrf_act5.h" #include "newgrf_airport.h" #include "newgrf_airporttiles.h" #include "newgrf_debug.h" @@ -808,7 +810,6 @@ GrfSpecFeature GetGrfSpecFeature(VehicleType type) } - /**** Sprite Aligner ****/ /** Window used for aligning sprites. */ @@ -822,6 +823,7 @@ struct SpriteAlignerWindow : Window { static inline ZoomLevel zoom = ZOOM_LVL_END; static bool centre; static bool crosshair; + const Action5Type *act5_type = nullptr; ///< Sprite Area of current selected sprite. SpriteAlignerWindow(WindowDesc *desc, WindowNumber wno) : Window(desc) { @@ -829,6 +831,10 @@ struct SpriteAlignerWindow : Window { if (SpriteAlignerWindow::zoom == ZOOM_LVL_END) SpriteAlignerWindow::zoom = _gui_zoom; SpriteAlignerWindow::zoom = Clamp(SpriteAlignerWindow::zoom, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max); + /* Oh yes, we assume there is at least one normal sprite! */ + while (GetSpriteType(this->current_sprite) != SpriteType::Normal) this->current_sprite++; + this->SelectAction5Type(); + this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_SA_SCROLLBAR); this->vscroll->SetCount(_newgrf_debug_sprite_picker.sprites.size()); @@ -837,9 +843,6 @@ struct SpriteAlignerWindow : Window { this->SetWidgetLoweredState(WID_SA_CENTRE, SpriteAlignerWindow::centre); this->SetWidgetLoweredState(WID_SA_CROSSHAIR, SpriteAlignerWindow::crosshair); - /* Oh yes, we assume there is at least one normal sprite! */ - while (GetSpriteType(this->current_sprite) != SpriteType::Normal) this->current_sprite++; - this->InvalidateData(0, true); } @@ -848,8 +851,22 @@ struct SpriteAlignerWindow : Window { const Sprite *spr = GetSprite(this->current_sprite, SpriteType::Normal); switch (widget) { case WID_SA_CAPTION: - SetDParam(0, this->current_sprite); - SetDParamStr(1, GetOriginFile(this->current_sprite)->GetSimplifiedFilename()); + if (this->act5_type != nullptr) { + SetDParam(0, STR_SPRITE_ALIGNER_CAPTION_ACTION5); + SetDParam(1, this->act5_type - GetAction5Types().data()); + SetDParam(2, this->current_sprite - this->act5_type->sprite_base); + SetDParamStr(3, GetOriginFile(this->current_sprite)->GetSimplifiedFilename()); + SetDParam(4, GetSpriteLocalID(this->current_sprite)); + } else if (this->current_sprite < SPR_OPENTTD_BASE) { + SetDParam(0, STR_SPRITE_ALIGNER_CAPTION_ACTIONA); + SetDParam(1, this->current_sprite); + SetDParamStr(2, GetOriginFile(this->current_sprite)->GetSimplifiedFilename()); + SetDParam(3, GetSpriteLocalID(this->current_sprite)); + } else { + SetDParam(0, STR_SPRITE_ALIGNER_CAPTION_NO_ACTION); + SetDParamStr(1, GetOriginFile(this->current_sprite)->GetSimplifiedFilename()); + SetDParam(2, GetSpriteLocalID(this->current_sprite)); + } break; case WID_SA_OFFSETS_ABS: @@ -883,13 +900,21 @@ struct SpriteAlignerWindow : Window { case WID_SA_SPRITE: size->height = ScaleGUITrad(200); break; - case WID_SA_LIST: - SetDParamMaxDigits(0, 6); - size->width = GetStringBoundingBox(STR_JUST_COMMA).width + padding.width; + + case WID_SA_LIST: { + Dimension d = {}; + for (const auto &spritefile : GetCachedSpriteFiles()) { + SetDParamStr(0, spritefile->GetSimplifiedFilename()); + SetDParamMaxDigits(1, 6); + d = maxdim(d, GetStringBoundingBox(STR_SPRITE_ALIGNER_SPRITE)); + } + size->width = d.width + padding.width; resize->height = GetCharacterHeight(FS_NORMAL) + padding.height; - resize->width = 1; + resize->width = 1; fill->height = resize->height; break; + } + default: break; } @@ -941,8 +966,15 @@ struct SpriteAlignerWindow : Window { Rect ir = r.Shrink(WidgetDimensions::scaled.matrix); auto [first, last] = this->vscroll->GetVisibleRangeIterators(list); for (auto it = first; it != last; ++it) { - SetDParam(0, *it); - DrawString(ir, STR_JUST_COMMA, *it == this->current_sprite ? TC_WHITE : TC_BLACK, SA_RIGHT | SA_FORCE); + const SpriteFile *file = GetOriginFile(*it); + if (file == nullptr) { + SetDParam(0, *it); + DrawString(ir, STR_JUST_COMMA, *it == this->current_sprite ? TC_WHITE : (TC_GREY | TC_NO_SHADE), SA_RIGHT | SA_FORCE); + } else { + SetDParamStr(0, file->GetSimplifiedFilename()); + SetDParam(1, GetSpriteLocalID(*it)); + DrawString(ir, STR_SPRITE_ALIGNER_SPRITE, *it == this->current_sprite ? TC_WHITE : TC_BLACK); + } ir.top += step_size; } break; @@ -957,6 +989,7 @@ struct SpriteAlignerWindow : Window { do { this->current_sprite = (this->current_sprite == 0 ? GetMaxSpriteID() : this->current_sprite) - 1; } while (GetSpriteType(this->current_sprite) != SpriteType::Normal); + this->SelectAction5Type(); this->SetDirty(); break; @@ -968,6 +1001,7 @@ struct SpriteAlignerWindow : Window { do { this->current_sprite = (this->current_sprite + 1) % GetMaxSpriteID(); } while (GetSpriteType(this->current_sprite) != SpriteType::Normal); + this->SelectAction5Type(); this->SetDirty(); break; @@ -983,6 +1017,7 @@ struct SpriteAlignerWindow : Window { SpriteID spr = *it; if (GetSpriteType(spr) == SpriteType::Normal) this->current_sprite = spr; } + this->SelectAction5Type(); this->SetDirty(); break; } @@ -1060,6 +1095,7 @@ struct SpriteAlignerWindow : Window { while (GetSpriteType(this->current_sprite) != SpriteType::Normal) { this->current_sprite = (this->current_sprite + 1) % GetMaxSpriteID(); } + this->SelectAction5Type(); this->SetDirty(); } @@ -1088,6 +1124,19 @@ struct SpriteAlignerWindow : Window { { this->vscroll->SetCapacityFromWidget(this, WID_SA_LIST); } + +private: + void SelectAction5Type() + { + const auto act5types = GetAction5Types(); + for (auto it = std::begin(act5types); it != std::end(act5types); ++it) { + if (it->sprite_base <= this->current_sprite && this->current_sprite < it->sprite_base + it->max_sprites) { + this->act5_type = &*it; + return; + } + } + this->act5_type = nullptr; + } }; bool SpriteAlignerWindow::centre = true; @@ -1096,7 +1145,7 @@ bool SpriteAlignerWindow::crosshair = true; static constexpr NWidgetPart _nested_sprite_aligner_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY, WID_SA_CAPTION), SetDataTip(STR_SPRITE_ALIGNER_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_CAPTION, COLOUR_GREY, WID_SA_CAPTION), SetDataTip(STR_JUST_STRING4, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), diff --git a/src/spritecache.cpp b/src/spritecache.cpp index 28cd97bac8..ca7fbba6c9 100644 --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -74,6 +74,15 @@ static SpriteFile *GetCachedSpriteFileByName(const std::string &filename) return nullptr; } +/** + * Get the list of cached SpriteFiles. + * @return Read-only list of cache SpriteFiles. + */ +std::span> GetCachedSpriteFiles() +{ + return _sprite_files; +} + /** * Open/get the SpriteFile that is cached for use in the sprite cache. * @param filename Name of the file at the disk. diff --git a/src/spritecache.h b/src/spritecache.h index 48af9a54e4..78447d700d 100644 --- a/src/spritecache.h +++ b/src/spritecache.h @@ -62,6 +62,7 @@ void GfxClearFontSpriteCache(); void IncreaseSpriteLRU(); SpriteFile &OpenCachedSpriteFile(const std::string &filename, Subdirectory subdir, bool palette_remap); +std::span> GetCachedSpriteFiles(); void ReadGRFSpriteOffsets(SpriteFile &file); size_t GetGRFSpriteOffset(uint32_t id); From eb094a953c2593a9e8cf01173eebc901fdebdb05 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 6 Apr 2024 23:32:26 +0100 Subject: [PATCH 253/695] Codefix: Social Plugins widget parts were not constexpr. (#12443) Widget lists were made constexpr except these. --- src/settings_gui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 6304b7771e..dbcd63755e 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -187,7 +187,7 @@ static const std::map _volume_labels = { { 127, STR_GAME_OPTIONS_VOLUME_100 }, }; -static const NWidgetPart _nested_social_plugins_widgets[] = { +static constexpr NWidgetPart _nested_social_plugins_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_FRAME, COLOUR_GREY, WID_GO_SOCIAL_PLUGIN_TITLE), SetDataTip(STR_JUST_STRING2, STR_NULL), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), @@ -202,7 +202,7 @@ static const NWidgetPart _nested_social_plugins_widgets[] = { EndContainer(), }; -static const NWidgetPart _nested_social_plugins_none_widgets[] = { +static constexpr NWidgetPart _nested_social_plugins_none_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE, STR_NULL), EndContainer(), From 0f6bf90731049777f5da67ffb4a639ef4d4c8156 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 7 Apr 2024 04:41:19 +0000 Subject: [PATCH 254/695] Update: Translations from eints --- src/lang/afrikaans.txt | 1 - src/lang/arabic_egypt.txt | 1 - src/lang/basque.txt | 1 - src/lang/belarusian.txt | 1 - src/lang/brazilian_portuguese.txt | 1 - src/lang/bulgarian.txt | 1 - src/lang/catalan.txt | 1 - src/lang/croatian.txt | 1 - src/lang/czech.txt | 1 - src/lang/danish.txt | 1 - src/lang/dutch.txt | 1 - src/lang/english_AU.txt | 1 - src/lang/english_US.txt | 1 - src/lang/estonian.txt | 1 - src/lang/faroese.txt | 1 - src/lang/finnish.txt | 1 - src/lang/french.txt | 1 - src/lang/frisian.txt | 1 - src/lang/gaelic.txt | 1 - src/lang/galician.txt | 1 - src/lang/german.txt | 1 - src/lang/greek.txt | 1 - src/lang/hebrew.txt | 1 - src/lang/hungarian.txt | 1 - src/lang/icelandic.txt | 1 - src/lang/indonesian.txt | 1 - src/lang/irish.txt | 1 - src/lang/italian.txt | 1 - src/lang/japanese.txt | 1 - src/lang/korean.txt | 1 - src/lang/latin.txt | 1 - src/lang/latvian.txt | 1 - src/lang/lithuanian.txt | 1 - src/lang/luxembourgish.txt | 1 - src/lang/malay.txt | 1 - src/lang/norwegian_bokmal.txt | 1 - src/lang/norwegian_nynorsk.txt | 1 - src/lang/persian.txt | 1 - src/lang/polish.txt | 1 - src/lang/portuguese.txt | 1 - src/lang/romanian.txt | 1 - src/lang/russian.txt | 1 - src/lang/serbian.txt | 1 - src/lang/simplified_chinese.txt | 1 - src/lang/slovak.txt | 1 - src/lang/slovenian.txt | 1 - src/lang/spanish.txt | 1 - src/lang/spanish_MX.txt | 1 - src/lang/swedish.txt | 1 - src/lang/tamil.txt | 1 - src/lang/thai.txt | 1 - src/lang/traditional_chinese.txt | 1 - src/lang/turkish.txt | 1 - src/lang/ukrainian.txt | 1 - src/lang/urdu.txt | 1 - src/lang/vietnamese.txt | 1 - src/lang/welsh.txt | 1 - 57 files changed, 57 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 39c3d41dfa..ce69bbe327 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -3002,7 +3002,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Spoor tipe STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF veranderlike 60+x parameter (heksadesimaal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Belyn sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Volgende sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Gaan na die volgende "sprite", Ignoreer enige pseudo/her-kleur/font "sprites" en spring terug na die begin STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gaan na sprite diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 9a0bbec625..184010a6a3 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -2859,7 +2859,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :نوع سكة STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}متغير الاضافات الجديدة +60 * نمط (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}موائمة صورة العفريتة {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}العفريتة التالية STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}نابع للعفريتة الطبيعية التالية، تجاوز اي عفريتة موقوفة/ مصبوغة/مخطوطة و انهي المتاعة في النهاية. STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}اذهب الى العفريتة diff --git a/src/lang/basque.txt b/src/lang/basque.txt index bfbd18e830..7580ed6e94 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -2830,7 +2830,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Trenbide mota STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF aldagaia 60+x parametroetan (hexadecimala) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}"Sprit"-a lerrokatu {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Urrengo "sprit"-a STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Hurrengo grafiko arrunta erabili, pseudo/birkoloretu/grafiko tipoak desgaituz STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Joan "sprit"-era diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 7f2ed1e1b9..3a1de5eaf2 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -3817,7 +3817,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Тып даро STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Парамэтр зьменнай NewGRF 60+x (шаснаццаткавы) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Выраўноўваньне спрайта {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Наступны спрайт STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Перайсьці да наступнага звычайнага спрайта, прапускаючы змяняючыя колер, шрыфтавыя, псэўдаспрайты. Пераход з канца сьпісу да першага спрайта. STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Перайсьці да спрайта diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index e2a8bfcdd7..467621c974 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -3489,7 +3489,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de estrada STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parâmetro da variável 60+x do NewGRF (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Alinhando sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Próximo sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Ir para o próximo sprite normal, pulando quaisquer sprites falsos/recoloridos/tipo de letra, retornando do último sprite para o primeiro STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ir para o sprite diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index a4d9052309..0d9efe83bd 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -3053,7 +3053,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Вид желе STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Параметър на променливата 60+x на NewGRF (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aligning sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Следващ sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Продължи към следващия нормален sprite, Пропускайки всички псевдо/прерисувани/текстови sprite и ги облечи в края STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Иди на sprite diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 519ab8d79d..8935e7d6bb 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -3489,7 +3489,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipus de carret STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Paràmetre NewGRF variable 60+x (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Alineant sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sprite següent STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Procedeix cap al següent sprite normal, saltant qualsevol sprite pseudo/recolor/font i passant de l'últim sprite al primer STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Vés a l'sprite diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 1b4c9abb6f..00c09c6dc6 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -3172,7 +3172,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Vrsta željezni STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF varijabla 60+x parametar (heksadecimalni) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Poravnanje sprite-a {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sljedeći sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Otiđi na sljedeći normalni sprite, preskačući svaki pseudo/prebojani/font sprite i nakon dolaska na zadnjeg prebaci na prvi STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Otiđi na sprite diff --git a/src/lang/czech.txt b/src/lang/czech.txt index bab4f69f32..7b83851a3c 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -3574,7 +3574,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Typ silnice STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Hodnota NewGRF proměnné 60+x (šestnáctkově) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Zarovávání spritu {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Další sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Jít na další normální sprite (s grafikou), přičemž se přeskakují pseudo-/barvící/znakové sprity a při dosažení konce se jde zase na začátek STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Jít na sprite diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 1e81cb03c9..5856ec9c12 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -3488,7 +3488,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Vej type STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variabel 60+x parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Justerer sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Næste sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Fortsæt til næste normale sprite, spring pseudo/omfarvning/font-sprites over og med omløb fra enden til starten STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gå til sprite diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 3c24b2d5d0..2ef0e067ea 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -3488,7 +3488,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Wegtype STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parameter 60+x voor NewGRF-variabele (hexadecimaal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Sprite uitlijnen {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Volgende sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Doorgaan met volgende normale sprite, alle pseudo-/herkleur-/lettertype-sprites overslaan; bij het einde terug naar het begin STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ga naar sprite diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 03b42319c3..2a2f655ef6 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -3488,7 +3488,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Road type STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aligning sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Next sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Proceed to the next normal sprite, skipping any pseudo/recolour/font sprites and wrapping around at the end STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Go to sprite diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index c2d29d3cd4..9c28e0f7b0 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -3488,7 +3488,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Road type STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aligning sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Next sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Proceed to the next normal sprite, skipping any pseudo/recolor/font sprites and wrapping around from the last sprite to the first STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Go to sprite diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index da14456b8d..efcdc634d5 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -3541,7 +3541,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tee tüüp STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF muutuf 60+x parameeter (kuueteistkümnendsüsteemis) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aligning sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Järgmine sprait STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Jätka järgmise normaalse spraidini, Jättes vahele iga pseudo/taasvärvitud/fondi spraidid ja pakkides lõpu ümber STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Mine spraidini diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index de440942b3..5de884b32e 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -2659,7 +2659,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Breyta slag STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aligning sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Next sprite ###length 2 diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 962a27f6e6..419ea35ac1 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -3488,7 +3488,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tien tyyppi STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF muuttujan 60+x parametri (heksadesimaali) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Kohdistetaan spriteä {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Seuraava sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Siirry seuraavaan tavalliseen spriteen; mahdolliset pseudo-, uudelleenväritys- ja fonttispritet ohitetaan; viimeisen spriten jälkeen siirrytään ensimmäiseen STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Mene spriteen diff --git a/src/lang/french.txt b/src/lang/french.txt index bf07d3f45a..adf9f97a72 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -3489,7 +3489,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Type de route STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Paramètre de variable NewGRF 60+x (héxadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Alignement du sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sprite suivant STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Se rendre au prochain sprite normal, en ignorant les pseudo-sprites et les sprites de recoloration et de police, et en bouclant du dernier vers le premier STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Aller au sprite diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index b0c7608282..71055270df 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -2806,7 +2806,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :spoar soart STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF fariabele 60+x parameter (heksadesimaal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Rjochted ôfbylding {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Folgend flak STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Gean fierder nei de folgjende ôfbylding, sla pseudo/werkleure/lettertype ôfbyldings oer en begjin wer oernei at it ein berikke is STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gean nei ôfbylding diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 59b87fb62d..11805cc18f 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -3188,7 +3188,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Seòrsa an rèi STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Paramadair 60+x (sia-dheicheach) caochladair NewGRF # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}A' co-thaobhachadh sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}An t-ath sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Lean air adhart dhan ath sprite àbhaisteach, a' gearradh leum thairis air sprites mas fhìor/ath-dhathaidh/crutha-chlò is a' pasgadh aig an deireadh gun chiad sprite STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Rach dhan sprite diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 86dd8f30c6..15754aa2b0 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -3487,7 +3487,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de estrada STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parámetro de variable NewGRF 60+x (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aliñar sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Seguinte sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Ir ao sprite seguinte, ignorando pseudosprites, sprites recoloreados e sprites de fonte, e volvendo a empezar ao chegar á fin STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ir a sprite diff --git a/src/lang/german.txt b/src/lang/german.txt index 73a9b4d2b0..9b3bcd883e 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -3489,7 +3489,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Straßentyp STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF-Variable 60+x Parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Ausrichtung von Sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Nächstes Sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Gehe zum nächsten normalen Sprite und überspringe alle Pseudo-, Recolour- und Schriftsprites (springt ggf. vom ersten bis zum letzten Sprite) STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gehe zu Sprite diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 556f5ee773..1d148d3428 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -3580,7 +3580,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Τύπος δρ STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Μεταβλητή NewGRF 60+x παράμετρος (δεκαεξαδικό) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Ευθυγράμμιση sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Επόμενο στοιχείο STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Συνέχισε στο επόμενο κανονικό sprite, προσπερνώντας οποιοδήποτε ψευδό/επαναναχρωματιζόμενο/γραμματοσειράς sprite και κάνε τις τελικές διαδικασίες στο τέλος STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Μετακίνηση στο στοιχείο diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index f0e4e8e050..bc66be2033 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -3069,7 +3069,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :סוג מסיל STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}משתנה NewGRF פרמטר 60+x (הקסה-דצימלי) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}מיישר ספרייט {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}הספרייט הבא STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}עבור לספרייט הבא, כאשר נדלג על כל הספרייטים המיוחדים ולבסוף נחזור לתחילת הרשימה STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}דלג לספרייט diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 6a5c4626bc..59203dde4b 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -3549,7 +3549,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Út típus STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF változó 60+x paraméter (hexadecimális) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Elhelyezési sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Következő sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Továbbhaladás a következő normál spritera, kihagyva bármilyen ál/átszínező/betű spriteokat, a végén folytatva az elsővel STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ugrás a spritehoz diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index efaa345255..5ba52905e3 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -2768,7 +2768,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Tegund spora STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF breyta 60+x stilling (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Samræmi hreyfimynd{COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Næsta hreyfimynd STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Halda áfram á næstu venjulegu hreyfimynd, sleppir gervi/endurlitun/letur hreyfimyndum og fer aftur á byrjun í lokin. STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Velja hreyfimynd diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index fc35a85f1e..177b0d2eeb 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -3424,7 +3424,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipe jalan STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Variabel NewGRF harus 60+x (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Menjajarkan sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sprite berikutnya STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Pergi ke sprite normal berikutnya, lewati sprite bayangan/warna ulang/huruf dan pembungkus saat mulai STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Pergi ke sprite diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 80d9f5a895..90825adf64 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -3208,7 +3208,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Cineál iarnró STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Athróg NewGRF paraiméadar 60+x (heicsidheachúil) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Ag ailíniú sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}An chéad sprite eile STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Téigh chuig an chéad gnáth-sprite eile, ag scipeáil thar aon bhréag-sprite nó sprite athdhathaithe/clófhoirne agus ag timfhilleadh ag an deireadh STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Téigh chuig sprite diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 150c81a623..436d86cdb8 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -3527,7 +3527,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo di strada STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parametro variabile NewGRF 60+x (esadecimale) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Allineamento sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Successivo STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Procede al successivo sprite normale, saltanto qualsiasi sprite speciale, di ricoloramento o carattere e tornando al primo se viene raggiunto l'ultimo della lista STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Vai a diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 84b2a8ae91..115fced9f5 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -3295,7 +3295,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :線路の種類 STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRFの可変60+xパラメーター (16進) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}スプライト{COMMA} 配列 ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}次のスプライト STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}次のノーマルスプライトに進みます。始端と終端は連続しているものとみなし、疑似/リカラー/フォントスプライトはスキップします STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}スプライトへ飛ぶ diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 7a072c7db2..60ef5f39ab 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -3489,7 +3489,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :도로 종류 STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF 변수 60+x 매개 변수 (16진법) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}스프라이트 정렬 {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}다음 스프라이트 STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}(유사/재색상/글씨 스프라이트를 제외한) 다음 보통 스프라이트로 이동하고, 마지막 스프라이트에 다다르면 다시 처음으로 돌아갑니다. STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}스프라이트 번호 입력 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 0aa15daf06..25bc4e2b3a 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -3157,7 +3157,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Typus ferriviae STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF var 60+x parametrum (sedecimale) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Dirigens spiritum {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Spiritum secundum STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Procedere ad spiritum naturalem secundum et, termino contacto, ad primum revertere STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ire ad spiritum diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 16c5ab140e..df84824d63 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -3491,7 +3491,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Ceļa tips STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF mainīgā 60+x parametrs (heksadecimāls) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Gariņa līdzināšana {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Nākamais gariņš STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Pāriet uz nākamo parasto gariņu, izlaižot visus pseido/pārkrāsotos/fonta gariņus STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Iet pie gariņa diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 5f5198f4c5..1ef30e27f1 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -3460,7 +3460,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Bėgio tipas STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Plėtinio kintamojo 60+x parametras (šešioliktainėje sistemoje) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Lygiuojamas spruklys {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Tolesnis spruklys STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Įkelti tolesnį spruklį STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Nurodyti spruklį diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 3a15cff1eb..ef41844276 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -3485,7 +3485,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Stroossentyp STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF Variabel 60+x Parameter (hexadezimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Alignéiren d'Sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Nächst Sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Géi weider op déi nächst normal Sprite, iwwersprang all pseudo/recolour/font Sprite an sprang un den Ufank no der leschter. STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Géi op Sprite diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 4e8d12693c..51a7aee810 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -2669,7 +2669,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Jenis landasan STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Pemboleh ubah NewGRF, parameter 60+x (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Megalih peperi {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Peperi seterusnya STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Teruskan ke peperi seterusan yang biasa, melangkau sebarang peperi pseudo/warna kembali/fon dan memusing balik semula STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Pergi ke peperi diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 3eaf13fca4..189de7b286 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -3490,7 +3490,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Veitype STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF-variabel 60+x parameter (heksadesimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Forskyver sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Neste sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Fortsett til neste normale sprite og hopp over enhver pseudo-/omfargings-/skrifttype- sprite, samt start om ved begynnelsen STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gå til sprite diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index e0adda199c..ed09582836 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -2844,7 +2844,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Jernbanetype STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF-variabel 60+x parameter (heksadesimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Forskyver sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Neste sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Fortsett til neste normale sprite og hopp over einhver pseudo-/omfargings-/skrifttype- sprite, samt start om ved byrjinga STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gå til sprite diff --git a/src/lang/persian.txt b/src/lang/persian.txt index f184fdb6d8..f08def6a82 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -2675,7 +2675,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :نوع ریل STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}متغیر NewGRF 60 + پارامتر (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}جابجا کردن تصویر گرافیک {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}تصویر بعدی STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}نمایش تصویر بعدی، بدون انجام دادن هر گونه تغییرات در آخر STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}رفتن به تصویر diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 8ac204df73..a43e7ed443 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3868,7 +3868,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Rodzaj drogi STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGFR zmienna 60+parametr x (heksadecymalnie) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Wyrównywanie sprite'a {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Następny sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Idź do następnego normalnego sprite'a, pomijając jakiekolwiek pseudo / przebarwione / czcionkowe sprite'y, a po ostatnim przejdź do pierwszego STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Idź do sprite'a diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 8fe6e61310..c230cac715 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -3489,7 +3489,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de estrada STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parâmetro da variável 60+x do NewGRF (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}A alinhar gráfico {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Gráfico seguinte STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Proceder ao gráfico normal seguinte, ignorando quaisquer gráficos pseudo/recolorir/tipo-de-letra e dando a volta no fim STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ir para o gráfico diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 0d7686fa32..ea9177a1dc 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -3481,7 +3481,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tip de drum STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parametru variabilă 60+x NewGRF (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aliniere imagine {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Imaginea următoare STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Mergi la următoarea imagine normală, sărind peste pseudo-imagini, recolorări sau fonturi și repornește când s-a ajuns la sfârșit STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Mergi la imagine diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 1ced93984e..1bd5fab913 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -3663,7 +3663,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Тип доро STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Параметр переменной NewGRF 60+x (шестнадцатеричный) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Выравнивание спрайта {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Следующий спрайт STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Перейти к следующему нормальному спрайту, пропуская изменяющие цвет, шрифтовые, псевдоспрайты. Переход из конца списка к первому спрайту. STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Перейти к спрайту diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 0eb1a5fe9c..83b03e555c 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -3613,7 +3613,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Vrsta puta STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF promenljiva 60+x parametar (heksadecimalno) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Poravnjavanje sprajta {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sledeći sprajt STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Prelazi na sledeći normalan sprajt, preskačući sve pseudo/prebojavajuće/font sprajtove i vraća se na početak posle zadnjeg STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Idi na sprajt diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 9b454332df..026b47f506 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -3488,7 +3488,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :道路类型 STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x 参数 (十六进制) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}定位 sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}下一个 sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}继续处理下个正常的图形元素,略过任何虚位/重新着色/文字字型相关的图形元素;并且在处理到最后的图形元素后,返回第一个图形元素继续处理。 STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}前往 sprite diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 4366fb9c1c..058d87d45a 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -3556,7 +3556,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Typ cesty STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variabilný 60+x parameter (hexadecimálne) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Zarovnanie sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Ďalší sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Prejsť na najbližší normálny sprite, vynechajúc akékoľvek falošné/prefarbené sprites a sprites fontu použité na konci STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Prejsť na sprite diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 2a88be52f2..b8fa8435c9 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -3082,7 +3082,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Tip železnice STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF spremenljivka 60+x parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Uravnavam sličico {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Naslednja sličica STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Nadaljuj k naslednji navadni sličici, zanemari vse navidezne/pobarvane/besedilne sličice in okvir na koncu STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Pojdi na sličico diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 76df3cab47..9f7dcd3a99 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -3489,7 +3489,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de carrete STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parámetro de variable NewGRF 60+x (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Alinear sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Siguiente sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Va al siguiente sprite (ignorando pseudosprites, sprites recoloreados y sprites de fuente) y pasa del último al primer sprite STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ir a sprite diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index eec6d84e01..8b734a5842 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -3419,7 +3419,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Tipo de ferroca STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parámetro de variable NewGRF 60+x (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Alinear sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Siguiente sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Ir al siguiente sprite (ignorando pseudosprites, sprites coloreados y sprites de fuente) y pasar del último al primer sprite STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ir a sprite diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index c86a05f7e3..df9d53384f 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -3488,7 +3488,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Vägtyp STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variabel 60+x parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Justera spriteobjekt {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Nästa spriteobjekt STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Fortsätt till nästa nomala spriteobjekt, ignorera eventuella pseudo/recolour/font spriteobjekt och börja om efter sista spriteobjektet STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gå till spriteobjekt diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 2193062821..0556acd908 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -3192,7 +3192,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :இரயில # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}ஸ்பிரிட் ஒழுங்காக்கப்படுகிறது {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}அடுத்த ஸ்பிரைட்டு STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}ஸ்பிரைட்டுயிற்கு செல்லவும் STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}முந்தைய ஸ்பிரைட்டு diff --git a/src/lang/thai.txt b/src/lang/thai.txt index e943336d16..421e65bb87 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -3014,7 +3014,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :ประเภ STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF ตัวแปร 60+x parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aligning sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}sprite ถัดไป STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}เคลื่อนไปยัง sprite ปกติอันถัดไป โดยข้าม pseudo/recolour/font และวกกลับเมื่อถึงจุดสิ้นสุด STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}ไปยัง sprite diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 53866eae5f..d0ee79f49f 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -3373,7 +3373,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :道路類型 STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x 參數(16 進位) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}定位 Sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}下一個子畫面 STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}繼續處理下個正常的子畫面,略過任何虛位/重新著色/文字字型相關的子畫面,並在到達最後的子畫面後,返回第一個子畫面繼續進行處理。 STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}前往子畫面 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 2d5b6fa1a9..d4a3f1ce92 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -3487,7 +3487,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Yol türü: STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF değişkeni 60+x parametresi (onaltılı) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Nesne hizalanıyor {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sonraki nesne STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Tüm sahte/yeniden renklendirme/yazı tipi nesnelerini ve sondaki nesneden atlayarak bir sonraki normal nesneye geç STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Nesneye git diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 76bc68375b..65fb473350 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -3628,7 +3628,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Тип доро STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Параметр змінної NewGRF 60+x (шістнадцятковий) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Вирівнювання спрайту {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Наступний спрайт STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Йти до наступного нормального спрайту, пропускаючи будь-які псевдо/перемальовані/шрифтові спрайти і загортаючи навколо (wrap) починаючи з останнього спрайту закінчуючи першим STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Йти до спрайту diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index 3f097904a3..06c6d24238 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -2264,7 +2264,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :طرزِ ریل # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE} صف بندھی کے sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK} اگلی sprite STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK} جایئے sprite تک STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK} جایئے sprite کی طرف۔ اگر sprite اصلی نھیں تو اگلی sprite کی طرف جائیے diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index e92e3b05f7..62dd744acd 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -3488,7 +3488,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Loại đườn STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Biến số NewGRF là 60+x (dạng hexa) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Điều chỉnh sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sprite tiếp STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Chuyển tới sprite bình thường kế tiếp, bỏ qua các loại sprite và căn theo điểm kết thúc STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Đi tới sprite diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index c92814a9d1..87979e7e4e 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -3488,7 +3488,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Math ffordd STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Paramedr newidyn NewGRF 60+x (hecsaddigidol) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Alinio corlun {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Corlun nesaf STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Mynd i'r corlun cyffredin nesaf, gan hepgor unrhyw gorluniau ailliwio/ffont/llidgorluniau, ac amlapio o'r corlun olaf i'r gyntaf STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Mynd i gorlun From 1fcf1a136d7d0444226a9d7f8855ebaf0eb7343c Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 7 Apr 2024 15:30:00 +0200 Subject: [PATCH 255/695] Codechange: use single function returning std::span over two functions that return size and begin --- src/newgrf_debug_gui.cpp | 30 +++++++++--------------------- src/table/newgrf_debug_data.h | 23 +++++++++-------------- 2 files changed, 18 insertions(+), 35 deletions(-) diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index c1ed16261d..95695ab294 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -181,25 +181,14 @@ public: } /** - * Allows to know the size of the persistent storage. + * Gets the span containing the persistent storage. * @param index Index of the item. * @param grfid Parameter for the PSA. Only required for items with parameters. - * @return Size of the persistent storage in indices. + * @return Span of the storage array or an empty span when not present. */ - virtual uint GetPSASize([[maybe_unused]] uint index, [[maybe_unused]] uint32_t grfid) const + virtual const std::span GetPSA([[maybe_unused]] uint index, [[maybe_unused]] uint32_t grfid) const { - return 0; - } - - /** - * Gets the first position of the array containing the persistent storage. - * @param index Index of the item. - * @param grfid Parameter for the PSA. Only required for items with parameters. - * @return Pointer to the first position of the storage array or nullptr if not present. - */ - virtual const int32_t *GetPSAFirstPosition([[maybe_unused]] uint index, [[maybe_unused]] uint32_t grfid) const - { - return nullptr; + return {}; } protected: @@ -472,17 +461,16 @@ struct NewGRFInspectWindow : Window { } } - uint psa_size = nih->GetPSASize(index, this->caller_grfid); - const int32_t *psa = nih->GetPSAFirstPosition(index, this->caller_grfid); - if (psa_size != 0 && psa != nullptr) { + auto psa = nih->GetPSA(index, this->caller_grfid); + if (!psa.empty()) { if (nih->PSAWithParameter()) { this->DrawString(r, i++, fmt::format("Persistent storage [{:08X}]:", BSWAP32(this->caller_grfid))); } else { this->DrawString(r, i++, "Persistent storage:"); } - assert(psa_size % 4 == 0); - for (uint j = 0; j < psa_size; j += 4, psa += 4) { - this->DrawString(r, i++, fmt::format(" {}: {} {} {} {}", j, psa[0], psa[1], psa[2], psa[3])); + assert(psa.size() % 4 == 0); + for (size_t j = 0; j < psa.size(); j += 4) { + this->DrawString(r, i++, fmt::format(" {}: {} {} {} {}", j, psa[j], psa[j + 1], psa[j + 2], psa[j + 3])); } } diff --git a/src/table/newgrf_debug_data.h b/src/table/newgrf_debug_data.h index 127a948635..836cec3445 100644 --- a/src/table/newgrf_debug_data.h +++ b/src/table/newgrf_debug_data.h @@ -378,13 +378,11 @@ class NIHIndustry : public NIHelper { return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); } - uint GetPSASize(uint, uint32_t) const override { return cpp_lengthof(PersistentStorage, storage); } - - const int32_t *GetPSAFirstPosition(uint index, uint32_t) const override + const std::span GetPSA(uint index, uint32_t) const override { const Industry *i = (const Industry *)this->GetInstance(index); - if (i->psa == nullptr) return nullptr; - return (int32_t *)(&i->psa->storage); + if (i->psa == nullptr) return {}; + return i->psa->storage; } }; @@ -554,13 +552,11 @@ class NIHAirport : public NIHelper { return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); } - uint GetPSASize(uint, uint32_t) const override { return cpp_lengthof(PersistentStorage, storage); } - - const int32_t *GetPSAFirstPosition(uint index, uint32_t) const override + const std::span GetPSA(uint index, uint32_t) const override { const Station *st = (const Station *)this->GetInstance(index); - if (st->airport.psa == nullptr) return nullptr; - return (int32_t *)(&st->airport.psa->storage); + if (st->airport.psa == nullptr) return {}; + return st->airport.psa->storage; } }; @@ -595,7 +591,6 @@ class NIHTown : public NIHelper { void SetStringParameters(uint index) const override { this->SetSimpleStringParameters(STR_TOWN_NAME, index); } uint32_t GetGRFID(uint) const override { return 0; } bool PSAWithParameter() const override { return true; } - uint GetPSASize(uint, uint32_t) const override { return cpp_lengthof(PersistentStorage, storage); } uint Resolve(uint index, uint var, uint param, bool *avail) const override { @@ -603,15 +598,15 @@ class NIHTown : public NIHelper { return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); } - const int32_t *GetPSAFirstPosition(uint index, uint32_t grfid) const override + const std::span GetPSA(uint index, uint32_t grfid) const override { Town *t = Town::Get(index); for (const auto &it : t->psa_list) { - if (it->grfid == grfid) return &it->storage[0]; + if (it->grfid == grfid) return it->storage; } - return nullptr; + return {}; } }; From d7fa614a9da834e45ea8e486244ea3e1a1c420b7 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 7 Apr 2024 21:37:49 +0200 Subject: [PATCH 256/695] Codechange: use range-based for loop for debug levels and fix global variable naming --- src/debug.cpp | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/debug.cpp b/src/debug.cpp index 7cc28e4280..02150379f7 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -60,7 +60,7 @@ struct DebugLevel { }; #define DEBUG_LEVEL(x) { #x, &_debug_##x##_level } - static const DebugLevel debug_level[] = { +static const DebugLevel _debug_levels[] = { DEBUG_LEVEL(driver), DEBUG_LEVEL(grf), DEBUG_LEVEL(map), @@ -79,7 +79,7 @@ struct DebugLevel { #ifdef RANDOM_DEBUG DEBUG_LEVEL(random), #endif - }; +}; #undef DEBUG_LEVEL /** @@ -89,13 +89,13 @@ struct DebugLevel { void DumpDebugFacilityNames(std::back_insert_iterator &output_iterator) { bool written = false; - for (const DebugLevel *i = debug_level; i != endof(debug_level); ++i) { + for (const auto &debug_level : _debug_levels) { if (!written) { fmt::format_to(output_iterator, "List of debug facility names:\n"); } else { fmt::format_to(output_iterator, ", "); } - fmt::format_to(output_iterator, "{}", i->name); + fmt::format_to(output_iterator, "{}", debug_level.name); written = true; } if (written) { @@ -153,13 +153,11 @@ void SetDebugString(const char *s, void (*error_func)(const std::string &)) /* Global debugging level? */ if (*s >= '0' && *s <= '9') { - const DebugLevel *i; - v = std::strtoul(s, &end, 0); s = end; - for (i = debug_level; i != endof(debug_level); ++i) { - new_levels[i->name] = v; + for (const auto &debug_level : _debug_levels) { + new_levels[debug_level.name] = v; } } @@ -174,9 +172,9 @@ void SetDebugString(const char *s, void (*error_func)(const std::string &)) /* check debugging levels */ const DebugLevel *found = nullptr; - for (const DebugLevel *i = debug_level; i != endof(debug_level); ++i) { - if (s == t + strlen(i->name) && strncmp(t, i->name, s - t) == 0) { - found = i; + for (const auto &debug_level : _debug_levels) { + if (s == t + strlen(debug_level.name) && strncmp(t, debug_level.name, s - t) == 0) { + found = &debug_level; break; } } @@ -194,10 +192,10 @@ void SetDebugString(const char *s, void (*error_func)(const std::string &)) } /* Apply the changes after parse is successful */ - for (const DebugLevel *i = debug_level; i != endof(debug_level); ++i) { - const auto &nl = new_levels.find(i->name); + for (const auto &debug_level : _debug_levels) { + const auto &nl = new_levels.find(debug_level.name); if (nl != new_levels.end()) { - *i->level = nl->second; + *debug_level.level = nl->second; } } } @@ -210,9 +208,9 @@ void SetDebugString(const char *s, void (*error_func)(const std::string &)) std::string GetDebugString() { std::string result; - for (const DebugLevel *i = debug_level; i != endof(debug_level); ++i) { + for (const auto &debug_level : _debug_levels) { if (!result.empty()) result += ", "; - fmt::format_to(std::back_inserter(result), "{}={}", i->name, *i->level); + fmt::format_to(std::back_inserter(result), "{}={}", debug_level.name, *debug_level.level); } return result; } From 995fca58a2ece0b0e82919292f3cc259f7548499 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 7 Apr 2024 22:01:46 +0100 Subject: [PATCH 257/695] Codechange: Use begin/end instead of endof for some industry arrays. (#12447) --- src/industry_cmd.cpp | 4 ++-- src/industry_gui.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 816e36a5e5..fbb056c162 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1895,7 +1895,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, continue; } /* Verify valid cargo */ - if (std::find(indspec->accepts_cargo, endof(indspec->accepts_cargo), cargo) == endof(indspec->accepts_cargo)) { + if (std::find(std::begin(indspec->accepts_cargo), std::end(indspec->accepts_cargo), cargo) == std::end(indspec->accepts_cargo)) { /* Cargo not in spec, error in NewGRF */ ErrorUnknownCallbackResult(indspec->grf_prop.grffile->grfid, CBID_INDUSTRY_INPUT_CARGO_TYPES, res); break; @@ -1931,7 +1931,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, continue; } /* Verify valid cargo */ - if (std::find(indspec->produced_cargo, endof(indspec->produced_cargo), cargo) == endof(indspec->produced_cargo)) { + if (std::find(std::begin(indspec->produced_cargo), std::end(indspec->produced_cargo), cargo) == std::end(indspec->produced_cargo)) { /* Cargo not in spec, error in NewGRF */ ErrorUnknownCallbackResult(indspec->grf_prop.grffile->grfid, CBID_INDUSTRY_OUTPUT_CARGO_TYPES, res); break; diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 7bd64396cf..711ee598f9 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -2597,8 +2597,8 @@ struct IndustryCargoesWindow : public Window { const IndustrySpec *indsp = GetIndustrySpec(it); if (!indsp->enabled) continue; this->ind_textsize = maxdim(this->ind_textsize, GetStringBoundingBox(indsp->name)); - CargoesField::max_cargoes = std::max(CargoesField::max_cargoes, std::count_if(indsp->accepts_cargo, endof(indsp->accepts_cargo), IsValidCargoID)); - CargoesField::max_cargoes = std::max(CargoesField::max_cargoes, std::count_if(indsp->produced_cargo, endof(indsp->produced_cargo), IsValidCargoID)); + CargoesField::max_cargoes = std::max(CargoesField::max_cargoes, std::count_if(std::begin(indsp->accepts_cargo), std::end(indsp->accepts_cargo), IsValidCargoID)); + CargoesField::max_cargoes = std::max(CargoesField::max_cargoes, std::count_if(std::begin(indsp->produced_cargo), std::end(indsp->produced_cargo), IsValidCargoID)); } d.width = std::max(d.width, this->ind_textsize.width); d.height = this->ind_textsize.height; From 4718971ccc17ad079d86279cd3f22698437dcfbb Mon Sep 17 00:00:00 2001 From: rubidium42 Date: Sun, 7 Apr 2024 13:50:14 +0200 Subject: [PATCH 258/695] Codechange: use std::size instead of lengthof for town names --- src/townname.cpp | 256 +++++++++++++++++++++++------------------------ 1 file changed, 128 insertions(+), 128 deletions(-) diff --git a/src/townname.cpp b/src/townname.cpp index 74a2ef3ffe..1a1e16b4c0 100644 --- a/src/townname.cpp +++ b/src/townname.cpp @@ -166,9 +166,9 @@ bool GenerateTownName(Randomizer &randomizer, uint32_t *townnameparts, TownNames * @param seed seed * @return seed transformed to a number from given range */ -static inline uint32_t SeedChance(uint8_t shift_by, int max, uint32_t seed) +static inline uint32_t SeedChance(uint8_t shift_by, size_t max, uint32_t seed) { - return (GB(seed, shift_by, 16) * max) >> 16; + return (GB(seed, shift_by, 16) * ClampTo(max)) >> 16; } @@ -179,7 +179,7 @@ static inline uint32_t SeedChance(uint8_t shift_by, int max, uint32_t seed) * @param seed seed * @return seed transformed to a number from given range */ -static inline uint32_t SeedModChance(uint8_t shift_by, int max, uint32_t seed) +static inline uint32_t SeedModChance(uint8_t shift_by, size_t max, uint32_t seed) { /* This actually gives *MUCH* more even distribution of the values * than SeedChance(), which is absolutely horrible in that. If @@ -202,7 +202,7 @@ static inline uint32_t SeedModChance(uint8_t shift_by, int max, uint32_t seed) * @param bias minimum value that can be returned * @return seed transformed to a number from given range */ -static inline int32_t SeedChanceBias(uint8_t shift_by, int max, uint32_t seed, int bias) +static inline int32_t SeedChanceBias(uint8_t shift_by, size_t max, uint32_t seed, int bias) { return SeedChance(shift_by, max + bias, seed) - bias; } @@ -252,17 +252,17 @@ static void MakeEnglishOriginalTownName(StringBuilder &builder, uint32_t seed) size_t start = builder.CurrentIndex(); /* optional first segment */ - int i = SeedChanceBias(0, lengthof(_name_original_english_1), seed, 50); + int i = SeedChanceBias(0, std::size(_name_original_english_1), seed, 50); if (i >= 0) builder += _name_original_english_1[i]; /* mandatory middle segments */ - builder += _name_original_english_2[SeedChance(4, lengthof(_name_original_english_2), seed)]; - builder += _name_original_english_3[SeedChance(7, lengthof(_name_original_english_3), seed)]; - builder += _name_original_english_4[SeedChance(10, lengthof(_name_original_english_4), seed)]; - builder += _name_original_english_5[SeedChance(13, lengthof(_name_original_english_5), seed)]; + builder += _name_original_english_2[SeedChance(4, std::size(_name_original_english_2), seed)]; + builder += _name_original_english_3[SeedChance(7, std::size(_name_original_english_3), seed)]; + builder += _name_original_english_4[SeedChance(10, std::size(_name_original_english_4), seed)]; + builder += _name_original_english_5[SeedChance(13, std::size(_name_original_english_5), seed)]; /* optional last segment */ - i = SeedChanceBias(15, lengthof(_name_original_english_6), seed, 60); + i = SeedChanceBias(15, std::size(_name_original_english_6), seed, 60); if (i >= 0) builder += _name_original_english_6[i]; /* Ce, Ci => Ke, Ki */ @@ -285,25 +285,25 @@ static void MakeEnglishAdditionalTownName(StringBuilder &builder, uint32_t seed) size_t start = builder.CurrentIndex(); /* optional first segment */ - int i = SeedChanceBias(0, lengthof(_name_additional_english_prefix), seed, 50); + int i = SeedChanceBias(0, std::size(_name_additional_english_prefix), seed, 50); if (i >= 0) builder += _name_additional_english_prefix[i]; if (SeedChance(3, 20, seed) >= 14) { - builder += _name_additional_english_1a[SeedChance(6, lengthof(_name_additional_english_1a), seed)]; + builder += _name_additional_english_1a[SeedChance(6, std::size(_name_additional_english_1a), seed)]; } else { - builder += _name_additional_english_1b1[SeedChance(6, lengthof(_name_additional_english_1b1), seed)]; - builder += _name_additional_english_1b2[SeedChance(9, lengthof(_name_additional_english_1b2), seed)]; + builder += _name_additional_english_1b1[SeedChance(6, std::size(_name_additional_english_1b1), seed)]; + builder += _name_additional_english_1b2[SeedChance(9, std::size(_name_additional_english_1b2), seed)]; if (SeedChance(11, 20, seed) >= 4) { - builder += _name_additional_english_1b3a[SeedChance(12, lengthof(_name_additional_english_1b3a), seed)]; + builder += _name_additional_english_1b3a[SeedChance(12, std::size(_name_additional_english_1b3a), seed)]; } else { - builder += _name_additional_english_1b3b[SeedChance(12, lengthof(_name_additional_english_1b3b), seed)]; + builder += _name_additional_english_1b3b[SeedChance(12, std::size(_name_additional_english_1b3b), seed)]; } } - builder += _name_additional_english_2[SeedChance(14, lengthof(_name_additional_english_2), seed)]; + builder += _name_additional_english_2[SeedChance(14, std::size(_name_additional_english_2), seed)]; /* optional last segment */ - i = SeedChanceBias(15, lengthof(_name_additional_english_3), seed, 60); + i = SeedChanceBias(15, std::size(_name_additional_english_3), seed, 60); if (i >= 0) builder += _name_additional_english_3[i]; assert(builder.CurrentIndex() - start >= 4); @@ -319,7 +319,7 @@ static void MakeEnglishAdditionalTownName(StringBuilder &builder, uint32_t seed) static void MakeAustrianTownName(StringBuilder &builder, uint32_t seed) { /* Bad, Maria, Gross, ... */ - int i = SeedChanceBias(0, lengthof(_name_austrian_a1), seed, 15); + int i = SeedChanceBias(0, std::size(_name_austrian_a1), seed, 15); if (i >= 0) builder += _name_austrian_a1[i]; int j = 0; @@ -327,27 +327,27 @@ static void MakeAustrianTownName(StringBuilder &builder, uint32_t seed) i = SeedChance(4, 6, seed); if (i >= 4) { /* Kaisers-kirchen */ - builder += _name_austrian_a2[SeedChance( 7, lengthof(_name_austrian_a2), seed)]; - builder += _name_austrian_a3[SeedChance(13, lengthof(_name_austrian_a3), seed)]; + builder += _name_austrian_a2[SeedChance( 7, std::size(_name_austrian_a2), seed)]; + builder += _name_austrian_a3[SeedChance(13, std::size(_name_austrian_a3), seed)]; } else if (i >= 2) { /* St. Johann */ - builder += _name_austrian_a5[SeedChance( 7, lengthof(_name_austrian_a5), seed)]; - builder += _name_austrian_a6[SeedChance( 9, lengthof(_name_austrian_a6), seed)]; + builder += _name_austrian_a5[SeedChance( 7, std::size(_name_austrian_a5), seed)]; + builder += _name_austrian_a6[SeedChance( 9, std::size(_name_austrian_a6), seed)]; j = 1; // More likely to have a " an der " or " am " } else { /* Zell */ - builder += _name_austrian_a4[SeedChance( 7, lengthof(_name_austrian_a4), seed)]; + builder += _name_austrian_a4[SeedChance( 7, std::size(_name_austrian_a4), seed)]; } i = SeedChance(1, 6, seed); if (i >= 4 - j) { /* an der Donau (rivers) */ - builder += _name_austrian_f1[SeedChance(4, lengthof(_name_austrian_f1), seed)]; - builder += _name_austrian_f2[SeedChance(5, lengthof(_name_austrian_f2), seed)]; + builder += _name_austrian_f1[SeedChance(4, std::size(_name_austrian_f1), seed)]; + builder += _name_austrian_f2[SeedChance(5, std::size(_name_austrian_f2), seed)]; } else if (i >= 2 - j) { /* am Dachstein (mountains) */ - builder += _name_austrian_b1[SeedChance(4, lengthof(_name_austrian_b1), seed)]; - builder += _name_austrian_b2[SeedChance(5, lengthof(_name_austrian_b2), seed)]; + builder += _name_austrian_b1[SeedChance(4, std::size(_name_austrian_b1), seed)]; + builder += _name_austrian_b2[SeedChance(5, std::size(_name_austrian_b2), seed)]; } } @@ -363,30 +363,30 @@ static void MakeGermanTownName(StringBuilder &builder, uint32_t seed) /* optional prefix */ if (seed_derivative == 12 || seed_derivative == 19) { - uint i = SeedChance(2, lengthof(_name_german_pre), seed); + uint i = SeedChance(2, std::size(_name_german_pre), seed); builder += _name_german_pre[i]; } /* mandatory middle segments including option of hardcoded name */ - uint i = SeedChance(3, lengthof(_name_german_real) + lengthof(_name_german_1), seed); - if (i < lengthof(_name_german_real)) { + uint i = SeedChance(3, std::size(_name_german_real) + std::size(_name_german_1), seed); + if (i < std::size(_name_german_real)) { builder += _name_german_real[i]; } else { - builder += _name_german_1[i - lengthof(_name_german_real)]; + builder += _name_german_1[i - std::size(_name_german_real)]; - i = SeedChance(5, lengthof(_name_german_2), seed); + i = SeedChance(5, std::size(_name_german_2), seed); builder += _name_german_2[i]; } /* optional suffix */ if (seed_derivative == 24) { - i = SeedChance(9, lengthof(_name_german_4_an_der) + lengthof(_name_german_4_am), seed); - if (i < lengthof(_name_german_4_an_der)) { + i = SeedChance(9, std::size(_name_german_4_an_der) + std::size(_name_german_4_am), seed); + if (i < std::size(_name_german_4_an_der)) { builder += _name_german_3_an_der[0]; builder += _name_german_4_an_der[i]; } else { builder += _name_german_3_am[0]; - builder += _name_german_4_am[i - lengthof(_name_german_4_an_der)]; + builder += _name_german_4_am[i - std::size(_name_german_4_an_der)]; } } } @@ -399,7 +399,7 @@ static void MakeGermanTownName(StringBuilder &builder, uint32_t seed) */ static void MakeSpanishTownName(StringBuilder &builder, uint32_t seed) { - builder += _name_spanish_real[SeedChance(0, lengthof(_name_spanish_real), seed)]; + builder += _name_spanish_real[SeedChance(0, std::size(_name_spanish_real), seed)]; } @@ -410,7 +410,7 @@ static void MakeSpanishTownName(StringBuilder &builder, uint32_t seed) */ static void MakeFrenchTownName(StringBuilder &builder, uint32_t seed) { - builder += _name_french_real[SeedChance(0, lengthof(_name_french_real), seed)]; + builder += _name_french_real[SeedChance(0, std::size(_name_french_real), seed)]; } @@ -421,8 +421,8 @@ static void MakeFrenchTownName(StringBuilder &builder, uint32_t seed) */ static void MakeSillyTownName(StringBuilder &builder, uint32_t seed) { - builder += _name_silly_1[SeedChance( 0, lengthof(_name_silly_1), seed)]; - builder += _name_silly_2[SeedChance(16, lengthof(_name_silly_2), seed)]; + builder += _name_silly_1[SeedChance( 0, std::size(_name_silly_1), seed)]; + builder += _name_silly_2[SeedChance(16, std::size(_name_silly_2), seed)]; } @@ -434,19 +434,19 @@ static void MakeSillyTownName(StringBuilder &builder, uint32_t seed) static void MakeSwedishTownName(StringBuilder &builder, uint32_t seed) { /* optional first segment */ - int i = SeedChanceBias(0, lengthof(_name_swedish_1), seed, 50); + int i = SeedChanceBias(0, std::size(_name_swedish_1), seed, 50); if (i >= 0) builder += _name_swedish_1[i]; /* mandatory middle segments including option of hardcoded name */ if (SeedChance(4, 5, seed) >= 3) { - builder += _name_swedish_2[SeedChance( 7, lengthof(_name_swedish_2), seed)]; + builder += _name_swedish_2[SeedChance( 7, std::size(_name_swedish_2), seed)]; } else { - builder += _name_swedish_2a[SeedChance( 7, lengthof(_name_swedish_2a), seed)]; - builder += _name_swedish_2b[SeedChance(10, lengthof(_name_swedish_2b), seed)]; - builder += _name_swedish_2c[SeedChance(13, lengthof(_name_swedish_2c), seed)]; + builder += _name_swedish_2a[SeedChance( 7, std::size(_name_swedish_2a), seed)]; + builder += _name_swedish_2b[SeedChance(10, std::size(_name_swedish_2b), seed)]; + builder += _name_swedish_2c[SeedChance(13, std::size(_name_swedish_2c), seed)]; } - builder += _name_swedish_3[SeedChance(16, lengthof(_name_swedish_3), seed)]; + builder += _name_swedish_3[SeedChance(16, std::size(_name_swedish_3), seed)]; } @@ -458,18 +458,18 @@ static void MakeSwedishTownName(StringBuilder &builder, uint32_t seed) static void MakeDutchTownName(StringBuilder &builder, uint32_t seed) { /* optional first segment */ - int i = SeedChanceBias(0, lengthof(_name_dutch_1), seed, 50); + int i = SeedChanceBias(0, std::size(_name_dutch_1), seed, 50); if (i >= 0) builder += _name_dutch_1[i]; /* mandatory middle segments including option of hardcoded name */ if (SeedChance(6, 9, seed) > 4) { - builder += _name_dutch_2[SeedChance( 9, lengthof(_name_dutch_2), seed)]; + builder += _name_dutch_2[SeedChance( 9, std::size(_name_dutch_2), seed)]; } else { - builder += _name_dutch_3[SeedChance( 9, lengthof(_name_dutch_3), seed)]; - builder += _name_dutch_4[SeedChance(12, lengthof(_name_dutch_4), seed)]; + builder += _name_dutch_3[SeedChance( 9, std::size(_name_dutch_3), seed)]; + builder += _name_dutch_4[SeedChance(12, std::size(_name_dutch_4), seed)]; } - builder += _name_dutch_5[SeedChance(15, lengthof(_name_dutch_5), seed)]; + builder += _name_dutch_5[SeedChance(15, std::size(_name_dutch_5), seed)]; } @@ -484,7 +484,7 @@ static void MakeFinnishTownName(StringBuilder &builder, uint32_t seed) /* Select randomly if town name should consists of one or two parts. */ if (SeedChance(0, 15, seed) >= 10) { - builder += _name_finnish_real[SeedChance(2, lengthof(_name_finnish_real), seed)]; + builder += _name_finnish_real[SeedChance(2, std::size(_name_finnish_real), seed)]; return; } @@ -492,7 +492,7 @@ static void MakeFinnishTownName(StringBuilder &builder, uint32_t seed) /* A two-part name by combining one of _name_finnish_1 + "la"/"lä" * The reason for not having the contents of _name_finnish_{1,2} in the same table is * that the ones in _name_finnish_2 are not good for this purpose. */ - uint sel = SeedChance( 0, lengthof(_name_finnish_1), seed); + uint sel = SeedChance( 0, std::size(_name_finnish_1), seed); builder += _name_finnish_1[sel]; size_t last = builder.CurrentIndex() - 1; if (builder[last] == 'i') builder[last] = 'e'; @@ -508,14 +508,14 @@ static void MakeFinnishTownName(StringBuilder &builder, uint32_t seed) /* A two-part name by combining one of _name_finnish_{1,2} + _name_finnish_3. * Why aren't _name_finnish_{1,2} just one table? See above. */ - uint sel = SeedChance(2, lengthof(_name_finnish_1) + lengthof(_name_finnish_2), seed); - if (sel >= lengthof(_name_finnish_1)) { - builder += _name_finnish_2[sel - lengthof(_name_finnish_1)]; + uint sel = SeedChance(2, std::size(_name_finnish_1) + std::size(_name_finnish_2), seed); + if (sel >= std::size(_name_finnish_1)) { + builder += _name_finnish_2[sel - std::size(_name_finnish_1)]; } else { builder += _name_finnish_1[sel]; } - builder += _name_finnish_3[SeedChance(10, lengthof(_name_finnish_3), seed)]; + builder += _name_finnish_3[SeedChance(10, std::size(_name_finnish_3), seed)]; } @@ -528,53 +528,53 @@ static void MakePolishTownName(StringBuilder &builder, uint32_t seed) { /* optional first segment */ uint i = SeedChance(0, - lengthof(_name_polish_2_o) + lengthof(_name_polish_2_m) + - lengthof(_name_polish_2_f) + lengthof(_name_polish_2_n), + std::size(_name_polish_2_o) + std::size(_name_polish_2_m) + + std::size(_name_polish_2_f) + std::size(_name_polish_2_n), seed); uint j = SeedChance(2, 20, seed); - if (i < lengthof(_name_polish_2_o)) { - builder += _name_polish_2_o[SeedChance(3, lengthof(_name_polish_2_o), seed)]; + if (i < std::size(_name_polish_2_o)) { + builder += _name_polish_2_o[SeedChance(3, std::size(_name_polish_2_o), seed)]; return; } - if (i < lengthof(_name_polish_2_m) + lengthof(_name_polish_2_o)) { + if (i < std::size(_name_polish_2_m) + std::size(_name_polish_2_o)) { if (j < 4) { - builder += _name_polish_1_m[SeedChance(5, lengthof(_name_polish_1_m), seed)]; + builder += _name_polish_1_m[SeedChance(5, std::size(_name_polish_1_m), seed)]; } - builder += _name_polish_2_m[SeedChance(7, lengthof(_name_polish_2_m), seed)]; + builder += _name_polish_2_m[SeedChance(7, std::size(_name_polish_2_m), seed)]; if (j >= 4 && j < 16) { - builder += _name_polish_3_m[SeedChance(10, lengthof(_name_polish_3_m), seed)]; + builder += _name_polish_3_m[SeedChance(10, std::size(_name_polish_3_m), seed)]; } return; } - if (i < lengthof(_name_polish_2_f) + lengthof(_name_polish_2_m) + lengthof(_name_polish_2_o)) { + if (i < std::size(_name_polish_2_f) + std::size(_name_polish_2_m) + std::size(_name_polish_2_o)) { if (j < 4) { - builder += _name_polish_1_f[SeedChance(5, lengthof(_name_polish_1_f), seed)]; + builder += _name_polish_1_f[SeedChance(5, std::size(_name_polish_1_f), seed)]; } - builder += _name_polish_2_f[SeedChance(7, lengthof(_name_polish_2_f), seed)]; + builder += _name_polish_2_f[SeedChance(7, std::size(_name_polish_2_f), seed)]; if (j >= 4 && j < 16) { - builder += _name_polish_3_f[SeedChance(10, lengthof(_name_polish_3_f), seed)]; + builder += _name_polish_3_f[SeedChance(10, std::size(_name_polish_3_f), seed)]; } return; } if (j < 4) { - builder += _name_polish_1_n[SeedChance(5, lengthof(_name_polish_1_n), seed)]; + builder += _name_polish_1_n[SeedChance(5, std::size(_name_polish_1_n), seed)]; } - builder += _name_polish_2_n[SeedChance(7, lengthof(_name_polish_2_n), seed)]; + builder += _name_polish_2_n[SeedChance(7, std::size(_name_polish_2_n), seed)]; if (j >= 4 && j < 16) { - builder += _name_polish_3_n[SeedChance(10, lengthof(_name_polish_3_n), seed)]; + builder += _name_polish_3_n[SeedChance(10, std::size(_name_polish_3_n), seed)]; } return; @@ -590,7 +590,7 @@ static void MakeCzechTownName(StringBuilder &builder, uint32_t seed) { /* 1:3 chance to use a real name. */ if (SeedModChance(0, 4, seed) == 0) { - builder += _name_czech_real[SeedModChance(4, lengthof(_name_czech_real), seed)]; + builder += _name_czech_real[SeedModChance(4, std::size(_name_czech_real), seed)]; return; } @@ -603,57 +603,57 @@ static void MakeCzechTownName(StringBuilder &builder, uint32_t seed) /* IDs of the respective parts */ int prefix = 0, ending = 0, suffix = 0; - uint postfix = 0; - uint stem; + size_t postfix = 0; + size_t stem; /* The select criteria. */ CzechGender gender; CzechChoose choose; CzechAllow allow; - if (do_prefix) prefix = SeedModChance(5, lengthof(_name_czech_adj) * 12, seed) / 12; - if (do_suffix) suffix = SeedModChance(7, lengthof(_name_czech_suffix), seed); + if (do_prefix) prefix = SeedModChance(5, std::size(_name_czech_adj) * 12, seed) / 12; + if (do_suffix) suffix = SeedModChance(7, std::size(_name_czech_suffix), seed); /* 3:1 chance 3:1 to use dynamic substantive */ stem = SeedModChance(9, - lengthof(_name_czech_subst_full) + 3 * lengthof(_name_czech_subst_stem), + std::size(_name_czech_subst_full) + 3 * std::size(_name_czech_subst_stem), seed); - if (stem < lengthof(_name_czech_subst_full)) { + if (stem < std::size(_name_czech_subst_full)) { /* That was easy! */ dynamic_subst = false; gender = _name_czech_subst_full[stem].gender; choose = _name_czech_subst_full[stem].choose; allow = _name_czech_subst_full[stem].allow; } else { - uint map[lengthof(_name_czech_subst_ending)]; + uint map[std::size(_name_czech_subst_ending)]; int ending_start = -1, ending_stop = -1; /* Load the substantive */ dynamic_subst = true; - stem -= lengthof(_name_czech_subst_full); - stem %= lengthof(_name_czech_subst_stem); + stem -= std::size(_name_czech_subst_full); + stem %= std::size(_name_czech_subst_stem); gender = _name_czech_subst_stem[stem].gender; choose = _name_czech_subst_stem[stem].choose; allow = _name_czech_subst_stem[stem].allow; /* Load the postfix (1:1 chance that a postfix will be inserted) */ - postfix = SeedModChance(14, lengthof(_name_czech_subst_postfix) * 2, seed); + postfix = SeedModChance(14, std::size(_name_czech_subst_postfix) * 2, seed); if (choose & CZC_POSTFIX) { /* Always get a real postfix. */ - postfix %= lengthof(_name_czech_subst_postfix); + postfix %= std::size(_name_czech_subst_postfix); } if (choose & CZC_NOPOSTFIX) { /* Always drop a postfix. */ - postfix += lengthof(_name_czech_subst_postfix); + postfix += std::size(_name_czech_subst_postfix); } - if (postfix < lengthof(_name_czech_subst_postfix)) { + if (postfix < std::size(_name_czech_subst_postfix)) { choose |= CZC_POSTFIX; } else { choose |= CZC_NOPOSTFIX; } /* Localize the array segment containing a good gender */ - for (ending = 0; ending < (int)lengthof(_name_czech_subst_ending); ending++) { + for (ending = 0; ending < (int)std::size(_name_czech_subst_ending); ending++) { const CzechNameSubst *e = &_name_czech_subst_ending[ending]; if (gender == CZG_FREE || @@ -719,7 +719,7 @@ static void MakeCzechTownName(StringBuilder &builder, uint32_t seed) if (dynamic_subst) { builder += _name_czech_subst_stem[stem].name; - if (postfix < lengthof(_name_czech_subst_postfix)) { + if (postfix < std::size(_name_czech_subst_postfix)) { const char *poststr = _name_czech_subst_postfix[postfix]; const char *endstr = _name_czech_subst_ending[ending].name; @@ -763,7 +763,7 @@ static void MakeCzechTownName(StringBuilder &builder, uint32_t seed) */ static void MakeRomanianTownName(StringBuilder &builder, uint32_t seed) { - builder += _name_romanian_real[SeedChance(0, lengthof(_name_romanian_real), seed)]; + builder += _name_romanian_real[SeedChance(0, std::size(_name_romanian_real), seed)]; } @@ -774,7 +774,7 @@ static void MakeRomanianTownName(StringBuilder &builder, uint32_t seed) */ static void MakeSlovakTownName(StringBuilder &builder, uint32_t seed) { - builder += _name_slovak_real[SeedChance(0, lengthof(_name_slovak_real), seed)]; + builder += _name_slovak_real[SeedChance(0, std::size(_name_slovak_real), seed)]; } @@ -789,14 +789,14 @@ static void MakeNorwegianTownName(StringBuilder &builder, uint32_t seed) * have a real name 3/16 chance. Bit 0-3 */ if (SeedChance(0, 15, seed) < 3) { /* Use 7bit for the realname table index. Bit 4-10 */ - builder += _name_norwegian_real[SeedChance(4, lengthof(_name_norwegian_real), seed)]; + builder += _name_norwegian_real[SeedChance(4, std::size(_name_norwegian_real), seed)]; return; } /* Use 7bit for the first fake part. Bit 4-10 */ - builder += _name_norwegian_1[SeedChance(4, lengthof(_name_norwegian_1), seed)]; + builder += _name_norwegian_1[SeedChance(4, std::size(_name_norwegian_1), seed)]; /* Use 7bit for the last fake part. Bit 11-17 */ - builder += _name_norwegian_2[SeedChance(11, lengthof(_name_norwegian_2), seed)]; + builder += _name_norwegian_2[SeedChance(11, std::size(_name_norwegian_2), seed)]; } @@ -808,21 +808,21 @@ static void MakeNorwegianTownName(StringBuilder &builder, uint32_t seed) static void MakeHungarianTownName(StringBuilder &builder, uint32_t seed) { if (SeedChance(12, 15, seed) < 3) { - builder += _name_hungarian_real[SeedChance(0, lengthof(_name_hungarian_real), seed)]; + builder += _name_hungarian_real[SeedChance(0, std::size(_name_hungarian_real), seed)]; return; } /* optional first segment */ - uint i = SeedChance(3, lengthof(_name_hungarian_1) * 3, seed); - if (i < lengthof(_name_hungarian_1)) builder += _name_hungarian_1[i]; + uint i = SeedChance(3, std::size(_name_hungarian_1) * 3, seed); + if (i < std::size(_name_hungarian_1)) builder += _name_hungarian_1[i]; /* mandatory middle segments */ - builder += _name_hungarian_2[SeedChance(3, lengthof(_name_hungarian_2), seed)]; - builder += _name_hungarian_3[SeedChance(6, lengthof(_name_hungarian_3), seed)]; + builder += _name_hungarian_2[SeedChance(3, std::size(_name_hungarian_2), seed)]; + builder += _name_hungarian_3[SeedChance(6, std::size(_name_hungarian_3), seed)]; /* optional last segment */ - i = SeedChance(10, lengthof(_name_hungarian_4) * 3, seed); - if (i < lengthof(_name_hungarian_4)) { + i = SeedChance(10, std::size(_name_hungarian_4) * 3, seed); + if (i < std::size(_name_hungarian_4)) { builder += _name_hungarian_4[i]; } } @@ -835,7 +835,7 @@ static void MakeHungarianTownName(StringBuilder &builder, uint32_t seed) */ static void MakeSwissTownName(StringBuilder &builder, uint32_t seed) { - builder += _name_swiss_real[SeedChance(0, lengthof(_name_swiss_real), seed)]; + builder += _name_swiss_real[SeedChance(0, std::size(_name_swiss_real), seed)]; } @@ -847,12 +847,12 @@ static void MakeSwissTownName(StringBuilder &builder, uint32_t seed) static void MakeDanishTownName(StringBuilder &builder, uint32_t seed) { /* optional first segment */ - int i = SeedChanceBias(0, lengthof(_name_danish_1), seed, 50); + int i = SeedChanceBias(0, std::size(_name_danish_1), seed, 50); if (i >= 0) builder += _name_danish_1[i]; /* middle segments removed as this algorithm seems to create much more realistic names */ - builder += _name_danish_2[SeedChance( 7, lengthof(_name_danish_2), seed)]; - builder += _name_danish_3[SeedChance(16, lengthof(_name_danish_3), seed)]; + builder += _name_danish_2[SeedChance( 7, std::size(_name_danish_2), seed)]; + builder += _name_danish_3[SeedChance(16, std::size(_name_danish_3), seed)]; } @@ -867,24 +867,24 @@ static void MakeTurkishTownName(StringBuilder &builder, uint32_t seed) switch (i) { case 0: - builder += _name_turkish_prefix[SeedModChance( 2, lengthof(_name_turkish_prefix), seed)]; + builder += _name_turkish_prefix[SeedModChance( 2, std::size(_name_turkish_prefix), seed)]; /* middle segment */ - builder += _name_turkish_middle[SeedModChance( 4, lengthof(_name_turkish_middle), seed)]; + builder += _name_turkish_middle[SeedModChance( 4, std::size(_name_turkish_middle), seed)]; /* optional suffix */ if (SeedModChance(0, 7, seed) == 0) { - builder += _name_turkish_suffix[SeedModChance( 10, lengthof(_name_turkish_suffix), seed)]; + builder += _name_turkish_suffix[SeedModChance( 10, std::size(_name_turkish_suffix), seed)]; } break; case 1: case 2: - builder += _name_turkish_prefix[SeedModChance( 2, lengthof(_name_turkish_prefix), seed)]; - builder += _name_turkish_suffix[SeedModChance( 4, lengthof(_name_turkish_suffix), seed)]; + builder += _name_turkish_prefix[SeedModChance( 2, std::size(_name_turkish_prefix), seed)]; + builder += _name_turkish_suffix[SeedModChance( 4, std::size(_name_turkish_suffix), seed)]; break; default: - builder += _name_turkish_real[SeedModChance( 4, lengthof(_name_turkish_real), seed)]; + builder += _name_turkish_real[SeedModChance( 4, std::size(_name_turkish_real), seed)]; break; } } @@ -898,7 +898,7 @@ static void MakeTurkishTownName(StringBuilder &builder, uint32_t seed) static void MakeItalianTownName(StringBuilder &builder, uint32_t seed) { if (SeedModChance(0, 6, seed) == 0) { // real city names - builder += _name_italian_real[SeedModChance(4, lengthof(_name_italian_real), seed)]; + builder += _name_italian_real[SeedModChance(4, std::size(_name_italian_real), seed)]; return; } @@ -908,29 +908,29 @@ static void MakeItalianTownName(StringBuilder &builder, uint32_t seed) }; if (SeedModChance(0, 8, seed) == 0) { // prefix - builder += _name_italian_pref[SeedModChance(11, lengthof(_name_italian_pref), seed)]; + builder += _name_italian_pref[SeedModChance(11, std::size(_name_italian_pref), seed)]; } uint i = SeedChance(0, 2, seed); if (i == 0) { // masculine form - builder += _name_italian_1m[SeedModChance(4, lengthof(_name_italian_1m), seed)]; + builder += _name_italian_1m[SeedModChance(4, std::size(_name_italian_1m), seed)]; } else { // feminine form - builder += _name_italian_1f[SeedModChance(4, lengthof(_name_italian_1f), seed)]; + builder += _name_italian_1f[SeedModChance(4, std::size(_name_italian_1f), seed)]; } if (SeedModChance(3, 3, seed) == 0) { - builder += _name_italian_2[SeedModChance(11, lengthof(_name_italian_2), seed)]; + builder += _name_italian_2[SeedModChance(11, std::size(_name_italian_2), seed)]; builder += mascul_femin_italian[i]; } else { - builder += _name_italian_2i[SeedModChance(16, lengthof(_name_italian_2i), seed)]; + builder += _name_italian_2i[SeedModChance(16, std::size(_name_italian_2i), seed)]; } if (SeedModChance(15, 4, seed) == 0) { if (SeedModChance(5, 2, seed) == 0) { // generic suffix - builder += _name_italian_3[SeedModChance(4, lengthof(_name_italian_3), seed)]; + builder += _name_italian_3[SeedModChance(4, std::size(_name_italian_3), seed)]; } else { // river name suffix - builder += _name_italian_river1[SeedModChance(4, lengthof(_name_italian_river1), seed)]; - builder += _name_italian_river2[SeedModChance(16, lengthof(_name_italian_river2), seed)]; + builder += _name_italian_river1[SeedModChance(4, std::size(_name_italian_river1), seed)]; + builder += _name_italian_river2[SeedModChance(16, std::size(_name_italian_river2), seed)]; } } } @@ -944,28 +944,28 @@ static void MakeItalianTownName(StringBuilder &builder, uint32_t seed) static void MakeCatalanTownName(StringBuilder &builder, uint32_t seed) { if (SeedModChance(0, 3, seed) == 0) { // real city names - builder += _name_catalan_real[SeedModChance(4, lengthof(_name_catalan_real), seed)]; + builder += _name_catalan_real[SeedModChance(4, std::size(_name_catalan_real), seed)]; return; } if (SeedModChance(0, 2, seed) == 0) { // prefix - builder += _name_catalan_pref[SeedModChance(11, lengthof(_name_catalan_pref), seed)]; + builder += _name_catalan_pref[SeedModChance(11, std::size(_name_catalan_pref), seed)]; } uint i = SeedChance(0, 2, seed); if (i == 0) { // masculine form - builder += _name_catalan_1m[SeedModChance(4, lengthof(_name_catalan_1m), seed)]; - builder += _name_catalan_2m[SeedModChance(11, lengthof(_name_catalan_2m), seed)]; + builder += _name_catalan_1m[SeedModChance(4, std::size(_name_catalan_1m), seed)]; + builder += _name_catalan_2m[SeedModChance(11, std::size(_name_catalan_2m), seed)]; } else { // feminine form - builder += _name_catalan_1f[SeedModChance(4, lengthof(_name_catalan_1f), seed)]; - builder += _name_catalan_2f[SeedModChance(11, lengthof(_name_catalan_2f), seed)]; + builder += _name_catalan_1f[SeedModChance(4, std::size(_name_catalan_1f), seed)]; + builder += _name_catalan_2f[SeedModChance(11, std::size(_name_catalan_2f), seed)]; } if (SeedModChance(15, 5, seed) == 0) { if (SeedModChance(5, 2, seed) == 0) { // generic suffix - builder += _name_catalan_3[SeedModChance(4, lengthof(_name_catalan_3), seed)]; + builder += _name_catalan_3[SeedModChance(4, std::size(_name_catalan_3), seed)]; } else { // river name suffix - builder += _name_catalan_river1[SeedModChance(4, lengthof(_name_catalan_river1), seed)]; + builder += _name_catalan_river1[SeedModChance(4, std::size(_name_catalan_river1), seed)]; } } } @@ -1012,6 +1012,6 @@ static TownNameGenerator *_town_name_generators[] = { */ void GenerateTownNameString(StringBuilder &builder, size_t lang, uint32_t seed) { - assert(lang < lengthof(_town_name_generators)); + assert(lang < std::size(_town_name_generators)); return _town_name_generators[lang](builder, seed); } From 62f5c595f379880fd0ebb866622a9f8d5ec9db0d Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 7 Apr 2024 21:55:40 +0200 Subject: [PATCH 259/695] Codechange: use range-based for loops and let count be correct count --- src/video/allegro_v.cpp | 11 +++++------ src/video/sdl2_v.cpp | 24 +++++++++++------------- src/video/sdl_v.cpp | 11 +++++------ src/video/win32_v.cpp | 11 +++++------ 4 files changed, 26 insertions(+), 31 deletions(-) diff --git a/src/video/allegro_v.cpp b/src/video/allegro_v.cpp index 716c46b773..77c90e1536 100644 --- a/src/video/allegro_v.cpp +++ b/src/video/allegro_v.cpp @@ -251,8 +251,8 @@ struct AllegroVkMapping { uint8_t map_to; }; -#define AS(x, z) {x, 0, z} -#define AM(x, y, z, w) {x, y - x, z} +#define AS(x, z) {x, 1, z} +#define AM(x, y, z, w) {x, y - x + 1, z} static const AllegroVkMapping _vk_mapping[] = { /* Pageup stuff + up/down */ @@ -312,12 +312,11 @@ static uint32_t ConvertAllegroKeyIntoMy(char32_t *character) int scancode; int unicode = ureadkey(&scancode); - const AllegroVkMapping *map; uint key = 0; - for (map = _vk_mapping; map != endof(_vk_mapping); ++map) { - if ((uint)(scancode - map->vk_from) <= map->vk_count) { - key = scancode - map->vk_from + map->map_to; + for (const auto &map : _vk_mapping) { + if (IsInsideBS(scancode, map.vk_from, map.vk_count)) { + key = scancode - map.vk_from + map.map_to; break; } } diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index 585571385d..d79016f6da 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -246,10 +246,10 @@ struct SDLVkMapping { bool unprintable; }; -#define AS(x, z) {x, 0, z, false} -#define AM(x, y, z, w) {x, (uint8_t)(y - x), z, false} -#define AS_UP(x, z) {x, 0, z, true} -#define AM_UP(x, y, z, w) {x, (uint8_t)(y - x), z, true} +#define AS(x, z) {x, 1, z, false} +#define AM(x, y, z, w) {x, (uint8_t)(y - x + 1), z, false} +#define AS_UP(x, z) {x, 1, z, true} +#define AM_UP(x, y, z, w) {x, (uint8_t)(y - x + 1), z, true} static const SDLVkMapping _vk_mapping[] = { /* Pageup stuff + up/down */ @@ -306,14 +306,13 @@ static const SDLVkMapping _vk_mapping[] = { static uint ConvertSdlKeyIntoMy(SDL_Keysym *sym, char32_t *character) { - const SDLVkMapping *map; uint key = 0; bool unprintable = false; - for (map = _vk_mapping; map != endof(_vk_mapping); ++map) { - if ((uint)(sym->sym - map->vk_from) <= map->vk_count) { - key = sym->sym - map->vk_from + map->map_to; - unprintable = map->unprintable; + for (const auto &map : _vk_mapping) { + if (IsInsideBS(sym, map.vk_from, map.vk_count)) { + key = sym->sym - map.vk_from + map.map_to; + unprintable = map.unprintable; break; } } @@ -346,12 +345,11 @@ static uint ConvertSdlKeyIntoMy(SDL_Keysym *sym, char32_t *character) */ static uint ConvertSdlKeycodeIntoMy(SDL_Keycode kc) { - const SDLVkMapping *map; uint key = 0; - for (map = _vk_mapping; map != endof(_vk_mapping); ++map) { - if ((uint)(kc - map->vk_from) <= map->vk_count) { - key = kc - map->vk_from + map->map_to; + for (const auto &map : _vk_mapping) { + if (IsInsideBS(kc, map.vk_from, map.vk_count)) { + key = kc - map.vk_from + map.map_to; break; } } diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index a950d4d65d..f68168b036 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -378,8 +378,8 @@ struct SDLVkMapping { uint8_t map_to; }; -#define AS(x, z) {x, 0, z} -#define AM(x, y, z, w) {x, (uint8_t)(y - x), z} +#define AS(x, z) {x, 1, z} +#define AM(x, y, z, w) {x, (uint8_t)(y - x + 1), z} static const SDLVkMapping _vk_mapping[] = { /* Pageup stuff + up/down */ @@ -435,12 +435,11 @@ static const SDLVkMapping _vk_mapping[] = { static uint ConvertSdlKeyIntoMy(SDL_keysym *sym, char32_t *character) { - const SDLVkMapping *map; uint key = 0; - for (map = _vk_mapping; map != endof(_vk_mapping); ++map) { - if ((uint)(sym->sym - map->vk_from) <= map->vk_count) { - key = sym->sym - map->vk_from + map->map_to; + for (const auto &map : _vk_mapping) { + if (IsInsideBS(sym, map.vk_from, map.vk_count)) { + key = sym->sym - map.vk_from + map.map_to; break; } } diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index b820842966..7c055d253a 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -61,8 +61,8 @@ struct Win32VkMapping { uint8_t map_to; }; -#define AS(x, z) {x, 0, z} -#define AM(x, y, z, w) {x, y - x, z} +#define AS(x, z) {x, 1, z} +#define AM(x, y, z, w) {x, y - x + 1, z} static const Win32VkMapping _vk_mapping[] = { /* Pageup stuff + up/down */ @@ -107,12 +107,11 @@ static const Win32VkMapping _vk_mapping[] = { static uint MapWindowsKey(uint sym) { - const Win32VkMapping *map; uint key = 0; - for (map = _vk_mapping; map != endof(_vk_mapping); ++map) { - if ((uint)(sym - map->vk_from) <= map->vk_count) { - key = sym - map->vk_from + map->map_to; + for (const auto &map : _vk_mapping) { + if (IsInsideBS(sym, map.vk_from, map.vk_count)) { + key = sym - map.vk_from + map.map_to; break; } } From 095bdf32fed5c23a1c44785fd40d8bb0610ca617 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 8 Apr 2024 04:41:24 +0000 Subject: [PATCH 260/695] Update: Translations from eints greek: 5 changes by gh658804 finnish: 7 changes by hpiirai ukrainian: 56 changes by Quantom2, 14 changes by imlystyi latvian: 14 changes by lexuslatvia portuguese: 14 changes by azulcosta portuguese (brazilian): 10 changes by pasantoro polish: 5 changes by pAter-exe --- src/lang/brazilian_portuguese.txt | 15 ++-- src/lang/finnish.txt | 9 +- src/lang/greek.txt | 5 ++ src/lang/latvian.txt | 21 +++-- src/lang/polish.txt | 5 ++ src/lang/portuguese.txt | 23 +++-- src/lang/ukrainian.txt | 140 +++++++++++++++--------------- 7 files changed, 125 insertions(+), 93 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 467621c974..d026c10fcb 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -836,11 +836,11 @@ STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLAC STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeira embarcação chega em {STATION}! STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeira aeronave chega em {STATION}! -STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Acidente de Trem!{}{COMMA} morrem na explosão após a colisão +STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Acidente de Trem!{}{COMMA} morre{P "" m} na explosão após a colisão STR_NEWS_ROAD_VEHICLE_CRASH_DRIVER :{BIG_FONT}{BLACK}Acidente Rodoviário!{}Condutor morre na explosão após a colisão com um trem -STR_NEWS_ROAD_VEHICLE_CRASH :{BIG_FONT}{BLACK}Acidente Rodoviário!{}{COMMA} morrem na explosão após a colisão com um trem -STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLACK}Acidente Aéreo!{}{COMMA} morrem na explosão em {STATION} -STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Acidente Aéreo!{}Aeronave ficou sem combustível, {COMMA} morrem na explosão +STR_NEWS_ROAD_VEHICLE_CRASH :{BIG_FONT}{BLACK}Acidente Rodoviário!{}{COMMA} morre{P "" m} na explosão após a colisão com um trem +STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLACK}Acidente Aéreo!{}{COMMA} morre{P "" m} na explosão em {STATION} +STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Acidente Aéreo!{}Aeronave ficou sem combustível, {COMMA} morre{P "" m} na explosão STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLACK}Desastre de Zepelim em {STATION}! STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}Veículo rodoviário destruído em colisão com OVNI! @@ -3088,7 +3088,7 @@ STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Constru STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Classe da estação: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de estação: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Classe do aeroporto: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_AIRPORT_NAME :{BLACK}Nome do aeroporto: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_AIRPORT_NAME :{BLACK}Tipo de aeroporto: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nome do quadrado do aeroporto: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Carga aceita: {LTBLUE} @@ -3489,6 +3489,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de estrada STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parâmetro da variável 60+x do NewGRF (hexadecimal) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Alinhando sprite: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Alinhando sprite: Ação 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Alinhando sprite: Ação 0x5, tipe {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Próximo sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Ir para o próximo sprite normal, pulando quaisquer sprites falsos/recoloridos/tipo de letra, retornando do último sprite para o primeiro STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ir para o sprite @@ -3497,6 +3500,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Sprite a STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Ir para o sprite normal anterior, pulando quaisquer sprites falsos/recoloridos/tipo de letra, retornando do primeiro sprite para o último STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representação do sprite atualmente selecionado. O alinhamento é ignorado ao desenhar este sprite STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Mover o sprite, alterando os deslocamentos X e Y. Ctrl+Clique para mover o sprite 8 unidades por vez +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Deslocamento centralizado @@ -5833,6 +5837,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 419ea35ac1..9e618188f2 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -3488,6 +3488,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tien tyyppi STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF muuttujan 60+x parametri (heksadesimaali) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Kohdistettava sprite: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Kohdistettava sprite: Toimenpide 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Kohdistettava sprite: Toimenpide 0x5, tyyppi {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Seuraava sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Siirry seuraavaan tavalliseen spriteen; mahdolliset pseudo-, uudelleenväritys- ja fonttispritet ohitetaan; viimeisen spriten jälkeen siirrytään ensimmäiseen STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Mene spriteen @@ -3496,6 +3499,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Edelline STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Jatka edelliseen tavalliseen spriteen ja hyppää yli kaikki pseudo-/uudelleenväritetyt/fontti- spritet ja mene loppuun kun päästään ensimmäiseen STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Valitun spriten esitys. Siirrosta ei huomioida tätä spriteä piirrettäessä STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Liikuta spriteä ympäriinsä, muuttaen X- ja Y-sijainteja. Ctrl+napsautus siirtää spriteä kahdeksan yksikköä kerralla. +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Siirros keskitetty @@ -3530,10 +3534,10 @@ STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF-tiedosto, j STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Liian monta NewGRF:ää on ladattu STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Lisäosan {1:STRING} lataaminen staattisena NewGRF:nä lisäosan {2:STRING} kanssa voi johtaa tahdistusvirheisiin STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Odottamaton sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Tuntematon Action 0-ominaisuus {4:HEX} (sprite {3:NUM}) +STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Tuntematon toimenpiteen 0 ominaisuus {4:HEX} (sprite {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Yritys käyttää virheellistä ID:tä (sprite {3:NUM}) STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} sisältää korruptoituneen spriten. Kaikki korruptoituneet spritet näkyvät punaisina kysymysmerkkeinä (?) -STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Sisältää useita Action 8-merkintöjä (sprite {3:NUM}) +STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Toimenpide 8 esiintyy moneen kertaan (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Luku pseudo-spriten ohi (sprite {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :Pyydetyt GRF-resurssit eivät ole saatavilla (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{2:STRING} poisti käytöstä NewGRF:n {1:STRING} @@ -5832,6 +5836,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 1d148d3428..dbd625b480 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -3580,6 +3580,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Τύπος δρ STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Μεταβλητή NewGRF 60+x παράμετρος (δεκαεξαδικό) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Στοίχηση sprite: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Στοίχηση sprite: Ενέργεια 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Στοίχηση sprite: Ενέργεια 0x5, τύπος {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Επόμενο στοιχείο STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Συνέχισε στο επόμενο κανονικό sprite, προσπερνώντας οποιοδήποτε ψευδό/επαναναχρωματιζόμενο/γραμματοσειράς sprite και κάνε τις τελικές διαδικασίες στο τέλος STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Μετακίνηση στο στοιχείο @@ -3588,6 +3591,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Προη STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Προχώρησε στο προηγούμενο κανονικό sprite, προσπερνώντας οποιαδήποτε ψευδό/επαναχρωματιζόμενα/γραμματοσειράς sprites και ξαναεκτέλεσε τη διαδικασία από το πρώτο sprite ως το τελεταίο STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Επανεμφάνιση του επιλεγμένου sprite. Η ευθυγράμμιση αγνοείται όταν γίνεται η σχεδίαση του sprite STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Μετακίνηση του sprite τριγύρω, αλλάζοντας τα στίγματα Χ και Υ. Ctrl+Κλικ για να μετακινήσετε το sprite μονάδες τη φορά. +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Μετατόπιση κέντρου @@ -5936,6 +5940,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index df84824d63..9fb76b9052 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1497,7 +1497,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Transportlīdze STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kad ieslēgts, visi transportlīdzekļu modeļi pēc to ieviešanas vienmēr ir pieejami STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Laika uzskaite: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Izvēlieties spēles laika mērīšanas vienības. Vēlāk to nevar mainīt.{}{}Kalendāra pamatā ir klasiskā OpenTTD pieredze, kurā gads sastāv no 12 mēnešiem un katru mēnesi ir 28–31 diena.{}{}{}Uz sienas pulksteni balstītā laikā, kravu ražošanā un finansēs tā vietā tiek balstītas uz vienas minūtes soli, kas ir aptuveni tikpat ilgs, cik 30 dienu mēnesis aizņem kalendāra režīmā. Tie ir sagrupēti 12 minūšu periodos, kas ir līdzvērtīgi gadam kalendāra režīmā.{}{}{}Abos režīmos vienmēr ir klasisks kalendārs, kas tiek izmantots transportlīdzekļu, māju un citas infrastruktūras parādīšanās spēlē. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Izvēlieties spēles laika mērīšanas vienības. Vēlāk to nevar mainīt.{}{}Kalendāra pamatā ir klasiskā OpenTTD pieredze, kurā gads sastāv no 12 mēnešiem un katrā mēnesī ir 28–31 diena.{}{}{}Uz sienas pulksteni balstītā laikā, kravu ražošanā un finanses tiek balstītas uz vienas minūtes soli, kas ir aptuveni tikpat ilgs laiks, cik 30 dienu mēnesis aizņem kalendāra režīmā. Tie ir sagrupēti 12 minūšu periodos, kas ir līdzvērtīgi gadam kalendāra režīmā.{}{}{}Abos no šiem režīmiem vienmēr ir klasisks kalendārs, kas tiek izmantots transportlīdzekļu, māju un citas infrastruktūras datu ievadīšanai. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalendārs STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Sienas pulkstenis @@ -1569,7 +1569,7 @@ STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sniega līnijas STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Izvēlieties, kādā augstumā sākas sniegs subarktiskajā ainavā. Sniegs ietekmē arī nozares ražošanas un pilsētu izaugsmi. Var mainīt tikai, izmantojot scenāriju redaktoru, vai citādi aprēķināt, izmantojot "sniega segumu" STR_CONFIG_SETTING_SNOW_COVERAGE :Sniega pārklājums: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Izvēlieties aptuveno sniega daudzumu subarktiskajā ainavā. Sniegs ietekmē arī nozares ražošanas un pilsētu izaugsmei. Izmanto tikai kartes ģenerēšanas laikā. Uz jūras līmeņa un piekrastes abpagaliem nekad nav sniega. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Izvēlieties aptuveno sniega daudzumu subarktiskajā ainavā. Sniegs ietekmē nozares ražošanas un pilsētu izaugsmes prasības. Izmanto tikai kartes ģenerēšanas laikā. Uz jūras līmeņa un piekrastes lauciņiem nekad nav sniega STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Tuksneša pārklājums: {STRING} @@ -1632,7 +1632,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :{G=f}tumši za STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :{G=f}violeta STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Kravas plūsmu pārklājuma krāsas: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Iestatiet kravas plūsmu pārklājumam izmantoto krāsu shēmu. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Iestatiet kravas plūsmas pārklājumam izmantoto krāsu shēmu ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Zaļš uz sarkanu (orģināli) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Zaļš uz zilu @@ -2059,7 +2059,7 @@ STR_CONFIG_SETTING_DEMAND_SIZE :Atpakaļceļa k STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Uzstādod šo mazāk par 100% liks simetriskajai sadalei izturēties vairāk kā asimetriskajai. Mazāk kravas ar varu tiks sūtīts atpakaļ ja noteikts daudzums tiks sūtīts uz piestātni. Ja jūs uzstādīsiet to uz 0% simetriskā sadale izturēsies tā pat kā asimetriskā. STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Īso ceļu piesātinājums pirms sākt izmantot augstas ietilpības ceļus: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Nereti starp divām stacijām ir vairāki ceļi. Kravu sadale vispirms piesātinās īsāko maršrutu, pēc tam izmantos nākamo īsāko maršrutu līdz tas būs piesātināts, un tā tālāk. Piesātinājumu nosaka novērtējot ietilpību un plānoto izmantojumu. Kad visi ceļi ir piesātināti un vēl ir palicis pieprasījumus, tas pārslogos visus ceļus, dodot priekšroku ceļiem ar lielāko ietilpību. Algoritms visbiežāk nepareizi novērtēs ietilpību. Šis iestatījums jums atļaus norādīt, līdz cik procentiem īsākais ceļš ir jāpiesātina pirmajā piegājienā pirms izvēlēties garāku ceļu. Iestatiet to uz mazāk kā 100%, lai izvairītos no pārpildītām stacijām, ja kapacitāte ir pārvērtēta. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Bieži starp divām noteiktām stacijām ir vairāki ceļi. Cargodist vispirms piesātinās īsāko ceļu, pēc tam izmantos otro īsāko ceļu, līdz tas ir piesātināts un tā tālāk. Piesātinājumu nosaka jaudas un plānotā lietojuma novērtējums. Kad tas būs piesātināts ar visiem ceļiem, ja joprojām būs pieprasījums, tas pārslogos visus ceļus, dodot priekšroku tiem, kuriem ir liela ietilpība. Tomēr lielāko daļu laika algoritms precīzi nenovērtēs jaudu. Šis iestatījums ļauj norādīt, cik procentus īsākam ceļam jābūt piesātinātam pirmajā piegājienā, pirms tiek izvēlēts nākamais garākais ceļš. Iestatiet to uz mazāku par 100%, lai izvairītos no pārpildītām stacijām pārmērīgas jaudas gadījumā STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Ātruma vienības (sauszemes): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Ātruma vienības (jūras): {STRING} @@ -2985,9 +2985,9 @@ STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Stādīt STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normāls STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Stādiet atsevišķus kokus, velkot pāri ainavai. STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Birze -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Stādiet mazus mežus, velkot pāri ainavai. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Stādiet nelielus mežus, velkot pāri ainavai. STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Mežs -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Stādiet lielos mežus, velkot pāri ainavai. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Stādiet lielus mežus, velkot pāri ainavai # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Zemes radīšana @@ -3491,6 +3491,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Ceļa tips STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF mainīgā 60+x parametrs (heksadecimāls) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Gariņu izlīdzināšana: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Gariņu izlīdzināšana: Darbība 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Gariņu izlīdzināšana: Darbība 0x5, tips {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Nākamais gariņš STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Pāriet uz nākamo parasto gariņu, izlaižot visus pseido/pārkrāsotos/fonta gariņus STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Iet pie gariņa @@ -3499,6 +3502,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Iepriek STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Iet pie iepriekšējā parastā gariņa, izlaižot visus pseido/pārkrāsotos/fonta gariņus STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Atlasītā gariņa attēlojums. To attēlojot, izkārtojums netiek ievērots STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Pārvietot gariņu, lai mainītu X un Y vērtības. Ctrl+klikšķis, lai vienā piegājienā pārvietotu gariņu par astoņām vienībām +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Nobīde centrēta @@ -4457,7 +4461,7 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Ietilpī STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Pārvadājumu ieņēmumi: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Apkopes intervāls: {LTBLUE}{COMMA}{NBSP}dienas{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Apkopes intervāls: {LTBLUE}{COMMA}{NBSP}minūtes{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Apkopes intervāls: {LTBLUE}{COMMA}{NBSP}minūte{P s es ""}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Apkopes intervāls: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Pēdējā apkalpošana: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Pēdējā apkope: pirms {LTBLUE}{NUM} minūtēm @@ -4907,7 +4911,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Plānoti STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Notiek saglabāšana,{}lLūdzu uzgaidiet! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automātiskā saglabāšana neizdevās STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Nevar lasīt disku +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Spēles saglabāšana neizdevās... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Nevar dzēst failu +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Spēles ielāde neizdevās... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Iekšēja kļūda: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Bojāts saglabātās spēles fails - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spēle ir saglabāta ar jaunāku versiju @@ -5839,6 +5845,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/polish.txt b/src/lang/polish.txt index a43e7ed443..89b03df67f 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3868,6 +3868,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Rodzaj drogi STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGFR zmienna 60+parametr x (heksadecymalnie) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Wyrównywanie sprite'a: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Wyrównywanie sprite'a: Action 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Wyrównywanie sprite'a: Action 0x5, typ {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Następny sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Idź do następnego normalnego sprite'a, pomijając jakiekolwiek pseudo / przebarwione / czcionkowe sprite'y, a po ostatnim przejdź do pierwszego STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Idź do sprite'a @@ -3876,6 +3879,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Poprzedn STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Idź do poprzedniego normalnego sprite'a, pomijając jakiekolwiek pseudo / przebarwione / czcionkowe sprite'y, a po pierwszym przejdź do ostatniego STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Prezentacja wybranego sprite'a. Wyrównanie jest ignorowane podczas rysowania tego sprite'a STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Poruszaj spritem, zmieniając przesunięcia X i Y. Ctrl+klik aby przesunąć o 8 jednostek na raz +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Wyśrodkowanie przesunięcia @@ -6273,6 +6277,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index c230cac715..31193cbcda 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1714,10 +1714,10 @@ STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Quando ativo, o STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Durante pausa permitir: {STRING} STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Seleccionar que acções podem ser feitas enquanto o jogo está em pausa ###length 4 -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Nenhuma acção +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Nenhuma ação STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Todas as acções sem construção STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Todas expecto acções que modificam o terreno -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Todas as acções +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Todas as ações STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Usar a lista avançada de veículos: {STRING} STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ativar a utilização de listas avançadas de veículos para o agrupamento de veículos @@ -2091,8 +2091,8 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL :Imperial (gal) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_METRIC :Métrico (l) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_SI :SI (m³) -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Unidades de esforço de tracção: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Quando a força de tracção é mostrada no interface de utilizador, mostrar na unidade seleccionada +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Unidades de esforço de tração: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Sempre que o esforço de tração (ou força de tração) for exibido na interface do utilizador, será mostrado nessas unidades ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL :Imperial (lbf) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_METRIC :Métrico (kgf) @@ -3489,6 +3489,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de estrada STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parâmetro da variável 60+x do NewGRF (hexadecimal) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Alinhando sprite: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Alinhando sprite: Ação 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Alinhando sprite: Ação 0x5, tipo {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Gráfico seguinte STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Proceder ao gráfico normal seguinte, ignorando quaisquer gráficos pseudo/recolorir/tipo-de-letra e dando a volta no fim STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ir para o gráfico @@ -3497,6 +3500,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Gráfico STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceder ao gráfico normal anterior, ignorando quaisquer gráficos pseudo/recolorir/tipo-de-letra e dando a volta no início STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representação do gráfico seleccionado actualmente. O alinhamento é ignorado a desenhar este gráfico STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Desloca o gráfico, alterando os intervalos X e Y. Ctrl+Clique desloca o gráfico 8 unidades de uma só vez +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Deslocamento centrado @@ -3534,7 +3538,7 @@ STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Gráfico invál STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Propriedade de Ação 0 desconhecida {4:HEX} (sprite {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Tentativa de uso de ID Inválido (sprite {3:NUM}) STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} contém um objecto gráfico corrompido. Todos os objectos gráficos corrompidos serão apresentados como um ponto de interrogação (?) vermelho. -STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contém múltiplas entradas Action 8 - (sprite {3:NUM}) +STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contém múltiplas entradas Ação 8 - (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Leitura além dos limites do pseudo-sprite (sprite {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF pedidos não disponíveis (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} foi desativado por {STRING} @@ -3646,10 +3650,10 @@ STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zona STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Mostrar a zona dentro dos limites da autoridade local STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Classificações de empresas de transporte: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} -STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Acções disponíveis: -STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista de acções disponíveis nesta localidade - fazer clique no item para mais detalhes +STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Ações disponíveis: +STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista de ações disponíveis nesta localidade - clique no item para mais detalhes STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Aplicar -STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Realizar a acção destacada na lista acima +STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Realizar a ação destacada na lista acima ###length 8 STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN :Pequena campanha publicitária @@ -4091,7 +4095,7 @@ STR_PURCHASE_INFO_ALL_TYPES :Todos os tipos STR_PURCHASE_INFO_NONE :Nenhum STR_PURCHASE_INFO_ENGINES_ONLY :Apenas locomotivas STR_PURCHASE_INFO_ALL_BUT :Todas menos {CARGO_LIST} -STR_PURCHASE_INFO_MAX_TE :{BLACK}Máx. Força de Tracção: {GOLD}{FORCE} +STR_PURCHASE_INFO_MAX_TE :{BLACK}Esforço de Tração Máx: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Alcance: {GOLD}{COMMA} mosaicos STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Tipo de aeronave: {GOLD}{STRING} @@ -5833,6 +5837,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 65fb473350..b293437ddd 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -485,10 +485,10 @@ STR_SORT_BY_RATING_MIN :за найни STR_SORT_BY_ENGINE_ID :за ID (класичний порядок) STR_SORT_BY_COST :за ціною STR_SORT_BY_POWER :за потужністю -STR_SORT_BY_TRACTIVE_EFFORT :за силою тяги +STR_SORT_BY_TRACTIVE_EFFORT :за тяговим зусиллям STR_SORT_BY_INTRO_DATE :за датою випуску STR_SORT_BY_RUNNING_COST :за вартістю експлуатації -STR_SORT_BY_POWER_VS_RUNNING_COST :за потужністю/вартістю експ. +STR_SORT_BY_POWER_VS_RUNNING_COST :за співвідношенням потужність/вартість експлуатації STR_SORT_BY_CARGO_CAPACITY :за місткістю STR_SORT_BY_RANGE :за дальністю STR_SORT_BY_POPULATION :за населенням @@ -505,10 +505,10 @@ STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Середні # Group by options for vehicle list STR_GROUP_BY_NONE :Нема -STR_GROUP_BY_SHARED_ORDERS :Спільні накази +STR_GROUP_BY_SHARED_ORDERS :Спільні завдання # Order button in shared orders vehicle list -STR_GOTO_ORDER_VIEW :{BLACK}Накази +STR_GOTO_ORDER_VIEW :{BLACK}Завдання STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Відкрити вікно завдань # Tooltips for the main toolbar @@ -1151,7 +1151,7 @@ STR_GAME_OPTIONS_CURRENCY_LVL :Латвійс STR_GAME_OPTIONS_CURRENCY_PTE :Португальське ескудо STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Автозбереження -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Виберіть період автозбереження гри +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Виберіть інтервал автозбереження # Autosave dropdown ###length 5 @@ -1165,27 +1165,27 @@ STR_GAME_OPTIONS_LANGUAGE :{BLACK}Мова STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Виберіть мову інтерфейса користувача STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% виконано) -STR_GAME_OPTIONS_FULLSCREEN :{BLACK}На весь екран -STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Натисніть цю кнопку щоб грати на весь екран +STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Повноекранний режим +STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Натисніть цю кнопку, щоби грати в OpenTTD у повноекранному режимі -STR_GAME_OPTIONS_RESOLUTION :{BLACK}Роздільна здатність -STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Виберіть роздільну здатність екрану +STR_GAME_OPTIONS_RESOLUTION :{BLACK}Роздільна здатність екрана +STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Виберіть, яку роздільну здатність екрана використовувати STR_GAME_OPTIONS_RESOLUTION_OTHER :інша STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} -STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Прискорення апаратного забезпечення +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Апаратне прискорення STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Увімкнутий прапорець дозволить використання грою прискорення апаратного забезпечення. Налаштування запрацює тільки після перезапуску гри STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Налаштування запрацює тільки після перезапуску гри -STR_GAME_OPTIONS_VIDEO_VSYNC :Вертикальна синхронізація -STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Увімкнутий прапорець дозволить вертикальну синхронізацію екрану. Налаштування запрацює тільки після перезапуску гри. Працює тільки за увімкнутого прискорення апаратного забезпечення. +STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}Вертикальна синхронізація +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Позначте цей прапорець для використання вертикальної синхронізації. Зміни застосуються тільки після перезапуску гри. Працює лише за увімкненого апаратного прискорення -STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Поточний драйвер: {STRING} +STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Використовуваний драйвер: {STRING} STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Розмір інтерфейсу STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Перетягніть повзунок для встановлення розміру інтерфейсу. Ctrl+протягування для точнішого перетягування -STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Автоматично визначений розмір -STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Увімкнутий прапорець дозволить автоматично визначити розмір інтерфейсу +STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Визначати розмір автоматично +STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Позначте цей прапорець для того, щоби визначати розмір інтерфейсу автоматично STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Межі шкали STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :BLACK}Увімкнутий прапорець дозволить змінити розмір інтерфейсу @@ -1211,10 +1211,10 @@ STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Пере STR_GAME_OPTIONS_GRAPHICS :{BLACK}Графіка -STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Показати швидкість оновлення -STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Обрати швидкість оновлення екрану +STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Частота оновлення екрана +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Оберіть, яку частоту оновлення екрана використовувати STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Гц -STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Оновлення з частотою понад 60ГГц може зашкодити роботі гри. +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Частота оновлення екрана вища за 75 Гц може вплинути на швидкодію STR_GAME_OPTIONS_BASE_GRF :{BLACK}Базовий набір графіки STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Оберіть, яку основну графіку використовувати (неможливо змінити у грі, тільки з головного меню) @@ -1420,8 +1420,8 @@ STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Ніяких п STR_CONFIG_SETTING_INTEREST_RATE :Процентна ставка: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Процентна ставка за позиками; також контролює інфляцію, якщо вона увімкнена -STR_CONFIG_SETTING_RUNNING_COSTS :Експлуатаційні витрати: {STRING} -STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Встановіть вартість обслуговування та експлуатаційні витрати на транспорт та інфраструктуру +STR_CONFIG_SETTING_RUNNING_COSTS :Вартість експлуатації: {STRING} +STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Встановіть вартість обслуговування та вартість експлуатації на транспорт та інфраструктуру STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Швидкість будівництва: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Обмеження кількості будівельних дій для ШІ @@ -1541,11 +1541,11 @@ STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Показув STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :При включенні наприкінці кожного року виринає вікно фінансів для легшого огляду фінансового стану компанії. STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :При включенні наприкінці кожного періоду виринає вікно фінансів для легшого огляду фінансового стану компанії. -STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Створювати накази з поміткою «без зупинки»: {STRING} +STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Створювати завдання з поміткою «без зупинки»: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Якщо в завданні транспортного засобу не вказана помітка «без зупинки», то він зупиняєтся на всіх станціях на своєму шляху. Якщо увімкнути це налаштування, то нові завдання будуть автоматично створюватися з поміткою «без зупинки» і транспортний засіб буде зупинятися лише на вказаних станціях. При необхідності помітку можна зняти або встановити власноруч. -STR_CONFIG_SETTING_STOP_LOCATION :Створювати накази для поїздів з зупинкою {STRING} платформи -STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Оберіть кінець платформи для зупинки потягів у нових наказах. "на початку": початок платформи в напрямку руху; "посередині": середина платформи; "наприкінці": кінець платформи в напрямку руху. Окремі накази для зупинки можна встановити клацнувши на текст наказу +STR_CONFIG_SETTING_STOP_LOCATION :Створювати завдання для поїздів з зупинкою {STRING} платформи +STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Оберіть кінець платформи для зупинки потягів у нових завданнях. Опція "на початку" – початок платформи в напрямку руху; "посередині" – середина платформи; "наприкінці" – кінець платформи в напрямку руху. Окремі завдання для зупинки можна встановити клацнувши на текст завдання ###length 3 STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :на початку STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :посередині @@ -2254,7 +2254,7 @@ STR_CONFIG_SETTING_ACCOUNTING :Облік STR_CONFIG_SETTING_VEHICLES :Транспорт STR_CONFIG_SETTING_VEHICLES_PHYSICS :Фізика STR_CONFIG_SETTING_VEHICLES_ROUTING :Маршрути -STR_CONFIG_SETTING_VEHICLES_ORDERS :Накази +STR_CONFIG_SETTING_VEHICLES_ORDERS :Завдання STR_CONFIG_SETTING_LIMITATIONS :Обмеження STR_CONFIG_SETTING_ACCIDENTS :Катастрофи STR_CONFIG_SETTING_GENWORLD :Створення світу @@ -3910,7 +3910,7 @@ STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPAN STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Рейтинг STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Показати рейтинг станції STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MONTH :{BLACK}Постачання впродовж місяця і місцевий рейтинг: -STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MINUTE :BLACK}Постачання впродовж хвилини і місцевий рейтинг: +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MINUTE :{BLACK}Постачання впродовж хвилини і місцевий рейтинг: STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) STR_STATION_VIEW_GROUP :{BLACK}Групувати по @@ -4411,7 +4411,7 @@ STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING} STR_ENGINE_PREVIEW_COST_WEIGHT :Ціна: {CURRENCY_LONG} Маса: {WEIGHT_SHORT} STR_ENGINE_PREVIEW_COST_MAX_SPEED :Ціна: {CURRENCY_LONG} Швидкість: {VELOCITY} STR_ENGINE_PREVIEW_SPEED_POWER :Швидкість: {VELOCITY} Потужність: {POWER} -STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Швидкість: {VELOCITY} Потужність: {POWER} Макс. тяга: {FORCE} +STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Швидкість: {VELOCITY} Потужність: {POWER} Максимальне тягове зусилля: {FORCE} STR_ENGINE_PREVIEW_TYPE :Тип літального апарата: {STRING} STR_ENGINE_PREVIEW_TYPE_RANGE :Тип літального апарата: {STRING} Дальність: {COMMA} клітин{P ка ки ок } STR_ENGINE_PREVIEW_RUNCOST_YEAR :Вартість експлуатації: {CURRENCY_LONG}/рік @@ -4439,8 +4439,8 @@ STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Вибе STR_REPLACE_VEHICLES_START :{BLACK}Почати оновлення STR_REPLACE_VEHICLES_NOW :Замінити усі ТС зараз STR_REPLACE_VEHICLES_WHEN_OLD :Замінювати лише застарілі ТС -STR_REPLACE_HELP_START_BUTTON :{BLACK}Натисніть для запуску оновлення потягів, що вибрані праворуч, на потяги, що вибрані праворуч -STR_REPLACE_NOT_REPLACING :{BLACK}Не можна оновити +STR_REPLACE_HELP_START_BUTTON :{BLACK}Натисніть для запуску оновлення потягів, що вибрані ліворуч, на потяги, що вибрані праворуч +STR_REPLACE_NOT_REPLACING :{BLACK}Поки що не оновлюється STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Не вибрано транспортного засобу STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} коли застаріє STR_REPLACE_VEHICLES_STOP :{BLACK}Зупинити оновлення @@ -4449,11 +4449,11 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Нати STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Переключення між вікнами заміни потягів та вагонів. STR_REPLACE_ENGINES :Локомотиви STR_REPLACE_WAGONS :Вагони -STR_REPLACE_ALL_RAILTYPE :Весь з/д транспорт +STR_REPLACE_ALL_RAILTYPE :Весь залізничний транспорт STR_REPLACE_ALL_ROADTYPE :Всі автомобілі ###length 2 -STR_REPLACE_HELP_RAILTYPE :{BLACK}Виберіть тип колії, для якого ви збираєтесь оновити потяги +STR_REPLACE_HELP_RAILTYPE :{BLACK}Виберіть тип колії, для якої ви збираєтесь оновити потяги STR_REPLACE_HELP_ROADTYPE :{BLACK}Виберіть тип дороги, на який хочете замінити двигуни ###next-name-looks-similar @@ -4504,9 +4504,9 @@ STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Пере ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Показати маршрут поїзда. Ctrl+клац показує розклад поїзда -STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Показати накази авто. Ctrl+клац показує розклад авто -STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Показати накази корабля. Ctrl+клац показує розклад корабля -STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Показати накази літака. Ctrl+клац показує розклад літака +STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Показати завдання транспортного засобу. Ctrl+клац показує розклад ТЗ +STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Показати завдання корабля. Ctrl+клац показує розклад корабля +STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Показати завдання літака. Ctrl+клац показує розклад літака ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Показати детальну інформацію @@ -4523,7 +4523,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Пото # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Вантаження STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Відходить -STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Чекає на звільнення +STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Чекає на розподілення за інтервалом STR_VEHICLE_STATUS_CRASHED :{RED}Аварія! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Зламався STR_VEHICLE_STATUS_STOPPED :{RED}Зупинено @@ -4537,7 +4537,7 @@ STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCI STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Прямує до {0:WAYPOINT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Прямує до {0:DEPOT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Техогляд у {0:DEPOT} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Звільнити і обслужити в {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Обслуговується та чекає на розподілення в {0:DEPOT} STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - Неможливо досягти {0:STATION} STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Неможливо досягти {0:WAYPOINT} @@ -4571,7 +4571,7 @@ STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Макс STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Макс. швидкість: {LTBLUE}{VELOCITY} {BLACK}Тип: {LTBLUE}{STRING} STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Макс. швидкість: {LTBLUE}{VELOCITY} {BLACK}Тип: {LTBLUE}{STRING} {BLACK}Дальність: {LTBLUE}{COMMA} клітин{P ка ки ок } STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Вага: {LTBLUE}{WEIGHT_SHORT} {BLACK}Потужність: {LTBLUE}{POWER}{BLACK} Макс. швидкість: {LTBLUE}{VELOCITY} -STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Вага: {LTBLUE}{WEIGHT_SHORT} {BLACK}Потужність: {LTBLUE}{POWER}{BLACK} Макс. швидкість: {LTBLUE}{VELOCITY} {BLACK}Макс. тяга: {LTBLUE}{FORCE} +STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Вага: {LTBLUE}{WEIGHT_SHORT} {BLACK}Потужність: {LTBLUE}{POWER}{BLACK} Максимальна швидкість: {LTBLUE}{VELOCITY} {BLACK}Максимальне тягове зусилля: {LTBLUE}{FORCE} STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Дохід цього року: {LTBLUE}{CURRENCY_LONG} (торік: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Дохід цього року: {LTBLUE}{CURRENCY_LONG} (минулого року: {CURRENCY_LONG}) {BLACK}Найгірше: {LTBLUE}{POWER_TO_WEIGHT} @@ -4662,7 +4662,7 @@ STR_REFIT_SHIP_REFIT_TOOLTIP :{BLACK}Пере STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Переобладнати літак для перевезення вибраного виду вантажу # Order view -STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (Накази) +STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (Завдання) STR_ORDERS_TIMETABLE_VIEW :{BLACK}Розклад STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Переключитись на розклад @@ -4705,7 +4705,7 @@ STR_ORDER_DROP_REFIT_AUTO_ANY :Доступн STR_ORDER_DROP_GO_ALWAYS_DEPOT :Завжди прямувати STR_ORDER_DROP_SERVICE_DEPOT :Прямувати при потребі в техогляді STR_ORDER_DROP_HALT_DEPOT :Прямувати і зупинитись -STR_ORDER_DROP_UNBUNCH :Звільнити +STR_ORDER_DROP_UNBUNCH :Розподілити по інтервалу # Depot action tooltips, one per vehicle type ###length VEHICLE_TYPES @@ -4715,7 +4715,7 @@ STR_ORDER_SHIP_DEPOT_ACTION_TOOLTIP :{BLACK}Вибе STR_ORDER_HANGAR_ACTION_TOOLTIP :{BLACK}Виберіть дію до виконання в цьому ангарі ###next-name-looks-similar -STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Дані транспорту для базування наказу +STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Дані транспорту для базування завдання # Conditional order variables, must follow order of OrderConditionVariable enum ###length 8 @@ -4743,20 +4743,20 @@ STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}Знач STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Введіть значення для порівняння STR_ORDERS_SKIP_BUTTON :{BLACK}Пропуск -STR_ORDERS_SKIP_TOOLTIP :{BLACK}Пропустити поточний наказ, і виконувати наступний. Ctrl+клац для переходу до обраного наказу +STR_ORDERS_SKIP_TOOLTIP :{BLACK}Пропустити поточне завдання, і виконати наступне. Ctrl+клац для переходу до обраного завдання 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_TOOLTIP :{BLACK}Припинити використовути спільні накази. Ctrl+клац видаляє всі накази для цього транспорту +STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Видалити всі завдання +STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Скасувати спільні завдання +STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Припинити використання спільних завдань. Ctrl+клац видаляє всі завдання для цього транспорту STR_ORDERS_GO_TO_BUTTON :{BLACK}Прямувати STR_ORDER_GO_TO_NEAREST_DEPOT :Прямувати до найближчого депо STR_ORDER_GO_TO_NEAREST_HANGAR :Прямувати в найближчий ангар -STR_ORDER_CONDITIONAL :Зміна наказу з умовою -STR_ORDER_SHARE :Спільні накази -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Вставити новий наказ перед обраним або додати в кінець списку. Ctrl+клац на станції аби наказати "повне завантаження будь-якого вантажу". Ctrl+клац на точці маршруту аби змінити налаштування "без зупинок" на протилежне. Ctrl+клаці на гаражі для "звільнення". Клац мишею на авто копіює його накази. Ctrl+клац на авто сворює спільні накази. Наказ із гаражем вимикає автоматичний техогляд авто +STR_ORDER_CONDITIONAL :Змінити завдання, за умови +STR_ORDER_SHARE :Спільні завдання +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Вставити нове завдання перед обраним або додати в кінець списку. Ctrl+клац на станції для завдання "повне завантаження будь-якого вантажу". Ctrl+клац на точці маршруту аби змінити налаштування "без зупинок" на протилежне. Ctrl+клац на гаражі для "автоматичного розподілення". Клац мишею на авто копіює його завдання. Ctrl+клац на авто створює спільні завдання. Завдання з гаражем вимикає автоматичний техогляд транспортного засобу STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Показати транспорт з таким самим маршрутом @@ -4782,7 +4782,7 @@ STR_ORDER_REFIT_ORDER :(Переобл STR_ORDER_REFIT_STOP_ORDER :(Переобладнати на {STRING} і зупинити) STR_ORDER_STOP_ORDER :(зупинити) -STR_ORDER_WAIT_TO_UNBUNCH :(чекає звільнення) +STR_ORDER_WAIT_TO_UNBUNCH :(чекати на розподілення за інтервалом) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Неможливо використати станцію){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4827,21 +4827,21 @@ STR_ORDER_STOP_LOCATION_FAR_END :[кінець] STR_ORDER_OUT_OF_RANGE :{RED} (Наступний пункт призначення поза межею досяжності) -STR_ORDER_CONDITIONAL_UNCONDITIONAL :Перейти до наказу {COMMA} -STR_ORDER_CONDITIONAL_NUM :Перейти до наказу {COMMA}, якщо {STRING} {STRING} {COMMA} -STR_ORDER_CONDITIONAL_TRUE_FALSE :Перейти до наказу {COMMA}, якщо {STRING} {STRING} +STR_ORDER_CONDITIONAL_UNCONDITIONAL :Перейти до завдання {COMMA} +STR_ORDER_CONDITIONAL_NUM :Перейти до завдання {COMMA}, якщо {STRING} {STRING} {COMMA} +STR_ORDER_CONDITIONAL_TRUE_FALSE :Перейти до завдання {COMMA}, якщо {STRING} {STRING} -STR_INVALID_ORDER :{RED} (Невірний наказ) +STR_INVALID_ORDER :{RED} (Неправильне завдання) # Time table window STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (розклад) STR_TIMETABLE_ORDER_VIEW :{BLACK}Завдання STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Переключитись до вікна завдань -STR_TIMETABLE_TOOLTIP :{BLACK}Розклад - клацніть мишою на наказ, щоб виділити його +STR_TIMETABLE_TOOLTIP :{BLACK}Розклад - клацніть мишею на завдання, щоб виділити його STR_TIMETABLE_NO_TRAVEL :Не прямувати -STR_TIMETABLE_NOT_TIMETABLEABLE :В дорозі (час руху враховано в наступному не автоматичному наказі) +STR_TIMETABLE_NOT_TIMETABLEABLE :В дорозі (час руху враховано в наступному не автоматичному завданні) STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :В дорозі (час не вказано) STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Прямувати (без розкладу) зі швидкістю, що не перевищує {2:VELOCITY} (час не вказано) STR_TIMETABLE_TRAVEL_FOR :В дорозі {STRING} @@ -4866,21 +4866,21 @@ STR_TIMETABLE_STATUS_START_IN_SECONDS.r :{BLACK}Цей STR_TIMETABLE_STATUS_START_IN_SECONDS.d :{BLACK}Цей розклад почнеться після {COMMA} секунд STR_TIMETABLE_START :{BLACK}Початок розкладу -STR_TIMETABLE_START_TOOLTIP :{BLACK}Обрати початок розкладу. Ctrl+клац для рівного розподілу початку руху транспорту зі спільним наказом. Якщо наказ із розкладом, транспорт розподілиться за відносним порядком +STR_TIMETABLE_START_TOOLTIP :{BLACK}Обрати початок розкладу. Ctrl+клац для рівного розподілу початку руху транспорту зі спільними завданнями. Якщо завдання включає в себе розклад, транспорт розподілиться по маршруту з його урахуванням STR_TIMETABLE_START_SECONDS_QUERY :Секунд до початку розкладу STR_TIMETABLE_CHANGE_TIME :{BLACK}Змінити час -STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Змінити час, впродовж якого має виконуватись наказ. Ctrl+клац змінить час в усіх наказах +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Змінити час, впродовж якого має виконуватись завдання. Ctrl+клац змінить час в усіх завданнях STR_TIMETABLE_CLEAR_TIME :{BLACK}Скасувати час -STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Скасувати час виконання виділеного наказу. Ctrl+клац скасує обмеження часу в усіх наказах +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Скасувати час виконання виділеного завдання. Ctrl+клац скасує обмеження часу в усіх завданнях STR_TIMETABLE_CHANGE_SPEED :{BLACK}Змінити обмеж. швидкості STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Змінити обмеження швидкості для виділеного пункту. Ctrl+клац змінить швидкість в усіх завданнях STR_TIMETABLE_CLEAR_SPEED :{BLACK}Скасувати обмеж. швидкості -STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Скасувати обмеження швидкості для виділеного пункту. Ctrl+клац скасує обмеження швидкості в усіх наказах +STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Скасувати обмеження швидкості для виділеного завдання. Ctrl+клац скасує обмеження швидкості в усіх завданнях STR_TIMETABLE_RESET_LATENESS :{BLACK}Скасувати відхилення STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Скасувати лічильник відхилення від графіка, щоб транспорт встигав. Ctrl+клац, щоб скасувати лічильник для всієї групи транспорту. При цьому останній транспорт йтиме за графіком, а інші випереджатимуть графік. @@ -5254,18 +5254,18 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Немо STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Неправильний тип депо # Depot unbunching related errors -STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... можливий тільки один звільнений наказ -STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... неможливо використати наказ "повне завантаження", якщо транспорт звільнено -STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... неможливо звільнити транспорт з наказом "повне завантаження" -STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... неможливо використати стандартні накази, якщо транспорт звільнено -STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... неможливо звільнити транспорт зі стандартним наказом +STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... дозволяється не більше одного завдання на розподілення по інтервалу +STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... неможливо використати завдання "повне завантаження", якщо транспорт має завдання на розподілення +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... неможливо задати завдання на розподілення, якщо транспорт має завдання з умовою на "повне завантаження" +STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... неможливо використати стандартні завдання, якщо транспорт має завдання на розподілення +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... неможливо задати завдання на розподілення, якщо транспорт має завдання з додатковими умовами # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} дуже довгий після оновлення STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Правила автозаміни/оновлення не застосовувалися STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(бракує коштів) STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Новий транспорт не може перевозити {STRING} -STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Нове авто не може змінити наказ {NUM} +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Новий транспорт не може переобладнатися згідно з завданням {NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Неможливе з'єднання колії @@ -5436,12 +5436,12 @@ STR_ERROR_AIRCRAFT_IS_IN_FLIGHT :{WHITE}Літа # Order related errors STR_ERROR_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Немає місця для нових завдань STR_ERROR_TOO_MANY_ORDERS :{WHITE}Занадто багато завдань -STR_ERROR_CAN_T_INSERT_NEW_ORDER :{WHITE}Неможливо додати наказ... -STR_ERROR_CAN_T_DELETE_THIS_ORDER :{WHITE}Неможливо видалити наказ... -STR_ERROR_CAN_T_MODIFY_THIS_ORDER :{WHITE}Неможливо змінити наказ... -STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Не можна перемістити цей наказ... -STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Не можна пропустити цей наказ... -STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Не можна перейти до цього наказу... +STR_ERROR_CAN_T_INSERT_NEW_ORDER :{WHITE}Неможливо додати завдання... +STR_ERROR_CAN_T_DELETE_THIS_ORDER :{WHITE}Неможливо видалити завдання... +STR_ERROR_CAN_T_MODIFY_THIS_ORDER :{WHITE}Неможливо змінити завдання... +STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Неможливо перемістити це завдання... +STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Не можна пропустити це завдання... +STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Неможливо перейти до цього завдання... STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... транспорт не може йти на всі станції STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... транспорт не може йти на цю станцію STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... транспорт, що має спільний з цим розклад, не може йти на цю станцію @@ -5449,7 +5449,7 @@ 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}... літак не може летіти так далеко From 4e6d4fcf32c0178c0c958e23ed8c486c5c27e1f8 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 7 Apr 2024 22:18:39 +0200 Subject: [PATCH 261/695] Codechange: replace for loops with endof with range-based for loops --- src/saveload/saveload.cpp | 10 +++++----- src/sound/win32_s.cpp | 8 ++++---- src/strgen/strgen.cpp | 14 +++++++------- src/strgen/strgen_base.cpp | 4 ++-- src/terraform_cmd.cpp | 6 ++---- src/town_cmd.cpp | 13 ++++++------- 6 files changed, 26 insertions(+), 29 deletions(-) diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 6c7f68c49c..2f57886118 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -2678,23 +2678,23 @@ static const SaveLoadFormat *GetSavegameFormat(const std::string &full_name, uin bool has_comp_level = separator != std::string::npos; const std::string name(full_name, 0, has_comp_level ? separator : full_name.size()); - for (const SaveLoadFormat *slf = &_saveload_formats[0]; slf != endof(_saveload_formats); slf++) { - if (slf->init_write != nullptr && name.compare(slf->name) == 0) { - *compression_level = slf->default_compression; + for (const auto &slf : _saveload_formats) { + if (slf.init_write != nullptr && name.compare(slf.name) == 0) { + *compression_level = slf.default_compression; if (has_comp_level) { const std::string complevel(full_name, separator + 1); /* Get the level and determine whether all went fine. */ size_t processed; long level = std::stol(complevel, &processed, 10); - if (processed == 0 || level != Clamp(level, slf->min_compression, slf->max_compression)) { + if (processed == 0 || level != Clamp(level, slf.min_compression, slf.max_compression)) { SetDParamStr(0, complevel); ShowErrorMessage(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_LEVEL, WL_CRITICAL); } else { *compression_level = level; } } - return slf; + return &slf; } } diff --git a/src/sound/win32_s.cpp b/src/sound/win32_s.cpp index 6cd72b3a2e..73cc3c062d 100644 --- a/src/sound/win32_s.cpp +++ b/src/sound/win32_s.cpp @@ -45,10 +45,10 @@ static DWORD WINAPI SoundThread(LPVOID) SetCurrentThreadName("ottd:win-sound"); do { - for (WAVEHDR *hdr = _wave_hdr; hdr != endof(_wave_hdr); hdr++) { - if ((hdr->dwFlags & WHDR_INQUEUE) != 0) continue; - MxMixSamples(hdr->lpData, hdr->dwBufferLength / 4); - if (waveOutWrite(_waveout, hdr, sizeof(WAVEHDR)) != MMSYSERR_NOERROR) { + for (auto &hdr : _wave_hdr) { + if ((hdr.dwFlags & WHDR_INQUEUE) != 0) continue; + MxMixSamples(hdr.lpData, hdr.dwBufferLength / 4); + if (waveOutWrite(_waveout, &hdr, sizeof(WAVEHDR)) != MMSYSERR_NOERROR) { MessageBox(nullptr, L"Sounds are disabled until restart.", L"waveOutWrite failed", MB_ICONINFORMATION); return 0; } diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index 254d566af3..bac30b9de9 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -337,25 +337,25 @@ int CDECL main(int argc, char *argv[]) switch (i) { case 'C': fmt::print("args\tflags\tcommand\treplacement\n"); - for (const CmdStruct *cs = _cmd_structs; cs < endof(_cmd_structs); cs++) { + for (const auto &cs : _cmd_structs) { char flags; - if (cs->proc == EmitGender) { + if (cs.proc == EmitGender) { flags = 'g'; // Command needs number of parameters defined by number of genders - } else if (cs->proc == EmitPlural) { + } else if (cs.proc == EmitPlural) { flags = 'p'; // Command needs number of parameters defined by plural value - } else if (cs->flags & C_DONTCOUNT) { + } else if (cs.flags & C_DONTCOUNT) { flags = 'i'; // Command may be in the translation when it is not in base } else { flags = '0'; // Command needs no parameters } - fmt::print("{}\t{:c}\t\"{}\"\t\"{}\"\n", cs->consumes, flags, cs->cmd, strstr(cs->cmd, "STRING") ? "STRING" : cs->cmd); + fmt::print("{}\t{:c}\t\"{}\"\t\"{}\"\n", cs.consumes, flags, cs.cmd, strstr(cs.cmd, "STRING") ? "STRING" : cs.cmd); } return 0; case 'L': fmt::print("count\tdescription\tnames\n"); - for (const PluralForm *pf = _plural_forms; pf < endof(_plural_forms); pf++) { - fmt::print("{}\t\"{}\"\t{}\n", pf->plural_count, pf->description, pf->names); + for (const auto &pf : _plural_forms) { + fmt::print("{}\t\"{}\"\t{}\n", pf.plural_count, pf.description, pf.names); } return 0; diff --git a/src/strgen/strgen_base.cpp b/src/strgen/strgen_base.cpp index 419ccad61b..e05c324e2d 100644 --- a/src/strgen/strgen_base.cpp +++ b/src/strgen/strgen_base.cpp @@ -420,8 +420,8 @@ void EmitGender(Buffer *buffer, char *buf, int) static const CmdStruct *FindCmd(const char *s, int len) { - for (const CmdStruct *cs = _cmd_structs; cs != endof(_cmd_structs); cs++) { - if (strncmp(cs->cmd, s, len) == 0 && cs->cmd[len] == '\0') return cs; + for (const auto &cs : _cmd_structs) { + if (strncmp(cs.cmd, s, len) == 0 && cs.cmd[len] == '\0') return &cs; } return nullptr; } diff --git a/src/terraform_cmd.cpp b/src/terraform_cmd.cpp index 00c7ef0681..69e48a3940 100644 --- a/src/terraform_cmd.cpp +++ b/src/terraform_cmd.cpp @@ -136,8 +136,6 @@ static std::tuple TerraformTileHeight(TerraformerState * /* Recurse to neighboured corners if height difference is larger than 1 */ { - const TileIndexDiffC *ttm; - TileIndex orig_tile = tile; static const TileIndexDiffC _terraform_tilepos[] = { { 1, 0}, // move to tile in SE @@ -146,8 +144,8 @@ static std::tuple TerraformTileHeight(TerraformerState * { 0, -2} // undo last move, and move to tile in NE }; - for (ttm = _terraform_tilepos; ttm != endof(_terraform_tilepos); ttm++) { - tile += ToTileIndexDiff(*ttm); + for (const auto &ttm : _terraform_tilepos) { + tile += ToTileIndexDiff(ttm); if (tile >= Map::Size()) continue; /* Make sure we don't wrap around the map */ diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 8634fb0b7a..fa18e2b422 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -1398,8 +1398,8 @@ static inline bool RoadTypesAllowHouseHere(TileIndex t) static const TileIndexDiffC tiles[] = { {-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1} }; bool allow = false; - for (const TileIndexDiffC *ptr = tiles; ptr != endof(tiles); ++ptr) { - TileIndex cur_tile = t + ToTileIndexDiff(*ptr); + for (const auto &ptr : tiles) { + TileIndex cur_tile = t + ToTileIndexDiff(ptr); if (!IsValidTile(cur_tile)) continue; if (!(IsTileType(cur_tile, MP_ROAD) || IsRoadStopTile(cur_tile))) continue; @@ -1826,21 +1826,20 @@ static bool GrowTown(Town *t) TileIndex tile = t->xy; // The tile we are working with ATM /* Find a road that we can base the construction on. */ - const TileIndexDiffC *ptr; - for (ptr = _town_coord_mod; ptr != endof(_town_coord_mod); ++ptr) { + for (const auto &ptr : _town_coord_mod) { if (GetTownRoadBits(tile) != ROAD_NONE) { bool success = GrowTownAtRoad(t, tile); cur_company.Restore(); return success; } - tile = TileAdd(tile, ToTileIndexDiff(*ptr)); + tile = TileAdd(tile, ToTileIndexDiff(ptr)); } /* No road available, try to build a random road block by * clearing some land and then building a road there. */ if (TownAllowedToBuildRoads()) { tile = t->xy; - for (ptr = _town_coord_mod; ptr != endof(_town_coord_mod); ++ptr) { + for (const auto &ptr : _town_coord_mod) { /* Only work with plain land that not already has a house */ if (!IsTileType(tile, MP_HOUSE) && IsTileFlat(tile)) { if (Command::Do(DC_AUTO | DC_NO_WATER, tile).Succeeded()) { @@ -1850,7 +1849,7 @@ static bool GrowTown(Town *t) return true; } } - tile = TileAdd(tile, ToTileIndexDiff(*ptr)); + tile = TileAdd(tile, ToTileIndexDiff(ptr)); } } From 74e09abf76960c86263afa38d15d9c1ca2f92b50 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 8 Apr 2024 13:26:19 +0100 Subject: [PATCH 262/695] Codechange: Use dynamic_cast instead of C-cast after FindWindowById. (#12448) dynamic_cast was used in most places, but not all. --- src/error_gui.cpp | 6 +++--- src/group_gui.cpp | 2 +- src/network/network_gui.cpp | 2 +- src/news_gui.cpp | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/error_gui.cpp b/src/error_gui.cpp index 812e04cefa..412864226c 100644 --- a/src/error_gui.cpp +++ b/src/error_gui.cpp @@ -348,7 +348,7 @@ void ShowFirstError() */ void UnshowCriticalError() { - ErrmsgWindow *w = (ErrmsgWindow*)FindWindowById(WC_ERRMSG, 0); + ErrmsgWindow *w = dynamic_cast(FindWindowById(WC_ERRMSG, 0)); if (_window_system_initialized && w != nullptr) { if (w->IsCritical()) _error_list.push_front(*w); _window_system_initialized = false; @@ -414,7 +414,7 @@ void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel ErrorMessageData data(summary_msg, detailed_msg, is_critical, x, y, textref_stack_grffile, textref_stack_size, textref_stack, extra_msg); data.CopyOutDParams(); - ErrmsgWindow *w = (ErrmsgWindow*)FindWindowById(WC_ERRMSG, 0); + ErrmsgWindow *w = dynamic_cast(FindWindowById(WC_ERRMSG, 0)); if (w != nullptr) { if (w->IsCritical()) { /* A critical error is currently shown. */ @@ -438,7 +438,7 @@ void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel */ bool HideActiveErrorMessage() { - ErrmsgWindow *w = (ErrmsgWindow*)FindWindowById(WC_ERRMSG, 0); + ErrmsgWindow *w = dynamic_cast(FindWindowById(WC_ERRMSG, 0)); if (w == nullptr) return false; w->Close(); return true; diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 1143de9f0f..55bb30dd1e 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -1169,7 +1169,7 @@ void ShowCompanyGroupForVehicle(const Vehicle *v) */ static inline VehicleGroupWindow *FindVehicleGroupWindow(VehicleType vt, Owner owner) { - return (VehicleGroupWindow *)FindWindowById(GetWindowClassForVehicleType(vt), VehicleListIdentifier(VL_GROUP_LIST, vt, owner).Pack()); + return dynamic_cast(FindWindowById(GetWindowClassForVehicleType(vt), VehicleListIdentifier(VL_GROUP_LIST, vt, owner).Pack())); } /** diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index b659f64d21..aa9940c936 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -2234,7 +2234,7 @@ void ShowJoinStatusWindow() void ShowNetworkNeedPassword(NetworkPasswordType npt, std::shared_ptr request) { - NetworkJoinStatusWindow *w = (NetworkJoinStatusWindow *)FindWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); + NetworkJoinStatusWindow *w = dynamic_cast(FindWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN)); if (w == nullptr) return; w->request = request; diff --git a/src/news_gui.cpp b/src/news_gui.cpp index fe7710ca8d..e90772f170 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -1017,7 +1017,7 @@ static void ShowNewsMessage(NewsIterator ni) */ bool HideActiveNewsMessage() { - NewsWindow *w = (NewsWindow*)FindWindowById(WC_NEWS_WINDOW, 0); + NewsWindow *w = dynamic_cast(FindWindowById(WC_NEWS_WINDOW, 0)); if (w == nullptr) return false; w->Close(); return true; From cdfffb551c45948c7ae4bf449eda939d38679a37 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 8 Apr 2024 17:07:55 +0100 Subject: [PATCH 263/695] Fix: sym->sym accidentally changed to sym prevented keys working with SDL. --- src/video/sdl2_v.cpp | 2 +- src/video/sdl_v.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index d79016f6da..eb8791a02b 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -310,7 +310,7 @@ static uint ConvertSdlKeyIntoMy(SDL_Keysym *sym, char32_t *character) bool unprintable = false; for (const auto &map : _vk_mapping) { - if (IsInsideBS(sym, map.vk_from, map.vk_count)) { + if (IsInsideBS(sym->sym, map.vk_from, map.vk_count)) { key = sym->sym - map.vk_from + map.map_to; unprintable = map.unprintable; break; diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index f68168b036..7928deedb2 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -438,7 +438,7 @@ static uint ConvertSdlKeyIntoMy(SDL_keysym *sym, char32_t *character) uint key = 0; for (const auto &map : _vk_mapping) { - if (IsInsideBS(sym, map.vk_from, map.vk_count)) { + if (IsInsideBS(sym->sym, map.vk_from, map.vk_count)) { key = sym->sym - map.vk_from + map.map_to; break; } From 4daf95b878766964d1feda239daa542f150344b1 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 8 Apr 2024 17:07:56 +0100 Subject: [PATCH 264/695] Fix: Use static_cast instead of C-cast to avoid hidden errors. --- src/core/math_func.hpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/math_func.hpp b/src/core/math_func.hpp index f5cc83d82c..7b457c0569 100644 --- a/src/core/math_func.hpp +++ b/src/core/math_func.hpp @@ -22,7 +22,7 @@ template constexpr T abs(const T a) { - return (a < (T)0) ? -a : a; + return (a < static_cast(0)) ? -a : a; } /** @@ -38,7 +38,7 @@ constexpr T Align(const T x, uint n) { assert((n & (n - 1)) == 0 && n != 0); n--; - return (T)((x + n) & ~((T)n)); + return static_cast((x + n) & ~static_cast(n)); } /** @@ -251,7 +251,7 @@ constexpr T Delta(const T a, const T b) template constexpr bool IsInsideBS(const T x, const size_t base, const size_t size) { - return (size_t)(x - base) < size; + return static_cast(x - base) < size; } /** @@ -268,9 +268,9 @@ template ) { - return (size_t)(x.base() - min) < (max - min); + return static_cast(x.base() - min) < (max - min); } else { - return (size_t)(x - min) < (max - min); + return static_cast(x - min) < (max - min); } } From 7e286058305b07baffb96c034c35a82b2c53d53e Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 8 Apr 2024 17:07:56 +0100 Subject: [PATCH 265/695] Fix: Use reinterpret_cast instead of C-style cast to align pointers. --- src/core/math_func.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/math_func.hpp b/src/core/math_func.hpp index 7b457c0569..67b347f2b4 100644 --- a/src/core/math_func.hpp +++ b/src/core/math_func.hpp @@ -54,8 +54,8 @@ constexpr T Align(const T x, uint n) template constexpr T *AlignPtr(T *x, uint n) { - static_assert(sizeof(size_t) == sizeof(void *)); - return reinterpret_cast(Align((size_t)x, n)); + static_assert(sizeof(uintptr_t) == sizeof(void *)); + return reinterpret_cast(Align(reinterpret_cast(x), n)); } /** From 1b127628cbd6a8d6c7e9ca46a91ed7bc7bc90733 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 8 Apr 2024 22:32:57 +0100 Subject: [PATCH 266/695] Codechange: Use dynamic_cast with FindWindowById. (#12458) Missed from 74e09ab. --- src/screenshot_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/screenshot_gui.cpp b/src/screenshot_gui.cpp index 2505b7cbbe..2bfde67e89 100644 --- a/src/screenshot_gui.cpp +++ b/src/screenshot_gui.cpp @@ -83,7 +83,7 @@ void ShowScreenshotWindow() */ void SetScreenshotWindowVisibility(bool hide) { - ScreenshotWindow *scw = (ScreenshotWindow *)FindWindowById(WC_SCREENSHOT, 0); + ScreenshotWindow *scw = dynamic_cast(FindWindowById(WC_SCREENSHOT, 0)); if (scw == nullptr) return; From b5ad28022d71e4e9ed80d5dd161d375557f59982 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 9 Apr 2024 04:40:33 +0000 Subject: [PATCH 267/695] Update: Translations from eints english (au): 5 changes by krysclarke chinese (simplified): 1 change by WenSimEHRP catalan: 7 changes by J0anJosep portuguese (brazilian): 27 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 54 +++++++++++++++---------------- src/lang/catalan.txt | 9 ++++-- src/lang/english_AU.txt | 5 +++ src/lang/simplified_chinese.txt | 1 + 4 files changed, 40 insertions(+), 29 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index d026c10fcb..0c5f79b7fa 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -269,8 +269,8 @@ STR_UNITS_PERIODS :{NUM}{NBSP}per # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtro: -STR_LIST_FILTER_OSKTITLE :{BLACK}Inserir uma ou mais palavras-chave para filtrar a lista -STR_LIST_FILTER_TOOLTIP :{BLACK}Introduza uma ou mais palavras-chave para procurar na lista +STR_LIST_FILTER_OSKTITLE :{BLACK}Introduza uma palavra-chave para filtrar a lista +STR_LIST_FILTER_TOOLTIP :{BLACK}Introduzir uma ou mais palavras-chave para procurar na lista STR_TOOLTIP_GROUP_ORDER :{BLACK}Escolher a ordem de agrupamento STR_TOOLTIP_SORT_ORDER :{BLACK}Escolher a ordenação (descendente/ascendente) @@ -384,7 +384,7 @@ STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausar o STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Avanço rápido do jogo STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opções e configurações STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Salvar, abrir ou abandonar o jogo, sair do programa -STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Abrir mapa, visualização extra, fluxo de cargas ou lista de placas +STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Abrir mapa, visualização extra, fluxo de carga ou lista de placas STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Abrir lista de localidades ou encontrar localidade STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Abrir lista de subsídios STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Abrir lista de estações da empresa @@ -410,7 +410,7 @@ STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Abrir me STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Abrir janela de som/música STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Abrir última mensagem/notícia, histórico de mensagens ou apagar todas as mensagens STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Abrir informações do terreno, menu de captura de tela, créditos do OpenTTD ou ferramentas de desenvolvedor -STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Trocar barras de ferramentas +STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Trocar barra de ferramentas # Extra tooltips for the scenario editor toolbar STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Salvar cenário, abrir cenário, abandonar editor de cenário, sair @@ -499,7 +499,7 @@ STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Fundar nova ind STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Construção de ferrovia STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construção de ferrovia eletrificada STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Construção de monotrilho -STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construção de MagLev +STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construção de Maglev # Road construction menu STR_ROAD_MENU_ROAD_CONSTRUCTION :Construção de estrada @@ -732,7 +732,7 @@ STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Empreendedor STR_HIGHSCORE_PERFORMANCE_TITLE_INDUSTRIALIST :Industrial STR_HIGHSCORE_PERFORMANCE_TITLE_CAPITALIST :Capitalista STR_HIGHSCORE_PERFORMANCE_TITLE_MAGNATE :Magnata -STR_HIGHSCORE_PERFORMANCE_TITLE_MOGUL :Mandachuva +STR_HIGHSCORE_PERFORMANCE_TITLE_MOGUL :Grande magnata STR_HIGHSCORE_PERFORMANCE_TITLE_TYCOON_OF_THE_CENTURY :Magnata do Século STR_HIGHSCORE_NAME :{PRESIDENT_NAME}, {COMPANY} STR_HIGHSCORE_STATS :{BIG_FONT}'{STRING}' ({COMMA}) @@ -988,7 +988,7 @@ STR_GAME_OPTIONS_CURRENCY_ISK :Coroa Islandesa STR_GAME_OPTIONS_CURRENCY_ITL :Lira Italiana STR_GAME_OPTIONS_CURRENCY_NLG :Florim Holandês STR_GAME_OPTIONS_CURRENCY_NOK :Coroa Norueguesa -STR_GAME_OPTIONS_CURRENCY_PLN :Złoty Polonês +STR_GAME_OPTIONS_CURRENCY_PLN :Zloty Polonês STR_GAME_OPTIONS_CURRENCY_RON :Leu Romeno STR_GAME_OPTIONS_CURRENCY_RUR :Rublo Russo STR_GAME_OPTIONS_CURRENCY_SIT :Tolar Esloveno @@ -1188,7 +1188,7 @@ STR_SUBSIDY_X4 :x4 ###length 4 STR_CLIMATE_TEMPERATE_LANDSCAPE :Clima temperado -STR_CLIMATE_SUB_ARCTIC_LANDSCAPE :Clima subárctico +STR_CLIMATE_SUB_ARCTIC_LANDSCAPE :Clima subártico STR_CLIMATE_SUB_TROPICAL_LANDSCAPE :Clima subtropical STR_CLIMATE_TOYLAND_LANDSCAPE :Terra dos Brinquedos @@ -1523,8 +1523,8 @@ STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Idade relativa STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} m{P 0 ês eses} antes STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} m{P 0 ês eses} depois -STR_CONFIG_SETTING_AUTORENEW_MONEY :Quantia mínima de dinheiro necessária para fazer renovação automática: {STRING} -STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Quantia mínima de dinheiro que deve existir na conta bancária para a renovação automática de veículos ser considerada +STR_CONFIG_SETTING_AUTORENEW_MONEY :Dinheiro mínimo necessário para fazer renovação automática: {STRING} +STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Quantia mínima de dinheiro que deve permanecer no banco antes de considerar a renovação automática de veículos STR_CONFIG_SETTING_ERRMSG_DURATION :Duração da mensagem de erro: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Tempo de exibição de mensagens de erro numa janela vermelha. Algumas mensagens de erro (crítico) não são fechadas automaticamente após este tempo e precisam ser fechadas manualmente @@ -2461,8 +2461,8 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Obtendo STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconectar -STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Introduza a senha -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Introduza a senha +STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Digite a senha +STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Digite a senha # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Jogadores conectados @@ -3390,7 +3390,7 @@ STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Modifica STR_GENERATION_WORLD :{WHITE}Gerando Mundo... STR_GENERATION_ABORT :{BLACK}Cancelar STR_GENERATION_ABORT_CAPTION :{WHITE}Cancelar Geração de Mundo -STR_GENERATION_ABORT_MESSAGE :{YELLOW}Você realmente deseja cancelar a geração? +STR_GENERATION_ABORT_MESSAGE :{YELLOW}Você quer mesmo cancelar a geração? STR_GENERATION_PROGRESS :{WHITE}{NUM}% completo STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Geração de mundo @@ -3591,7 +3591,7 @@ STR_INVALID_VEHICLE : Date: Tue, 9 Apr 2024 08:34:45 +0100 Subject: [PATCH 268/695] Codechange: Pass by reference to UpdateWidgetSize. (#12457) These parameters are always provided and not optional. --- src/ai/ai_gui.cpp | 8 +- src/airport_gui.cpp | 14 +-- src/autoreplace_gui.cpp | 22 ++--- src/bootstrap_gui.cpp | 16 ++-- src/bridge_gui.cpp | 12 +-- src/build_vehicle_gui.cpp | 30 +++---- src/cheat_gui.cpp | 6 +- src/company_gui.cpp | 130 ++++++++++++++-------------- src/date_gui.cpp | 4 +- src/depot_gui.cpp | 20 ++--- src/dock_gui.cpp | 6 +- src/dropdown.cpp | 4 +- src/engine_gui.cpp | 8 +- src/error_gui.cpp | 12 +-- src/fios_gui.cpp | 10 +-- src/framerate_gui.cpp | 36 ++++---- src/game/game_gui.cpp | 10 +-- src/genworld_gui.cpp | 30 +++---- src/goal_gui.cpp | 12 +-- src/graph_gui.cpp | 30 +++---- src/group_gui.cpp | 34 ++++---- src/industry_gui.cpp | 40 ++++----- src/intro_gui.cpp | 6 +- src/league_gui.cpp | 18 ++-- src/linkgraph/linkgraph_gui.cpp | 6 +- src/linkgraph/linkgraph_gui.h | 2 +- src/misc_gui.cpp | 40 ++++----- src/music_gui.cpp | 14 +-- src/network/network_content_gui.cpp | 22 ++--- src/network/network_content_gui.h | 2 +- src/network/network_gui.cpp | 80 ++++++++--------- src/newgrf_debug_gui.cpp | 22 ++--- src/newgrf_gui.cpp | 64 +++++++------- src/news_gui.cpp | 32 +++---- src/object_gui.cpp | 42 ++++----- src/order_gui.cpp | 10 +-- src/rail_gui.cpp | 50 +++++------ src/road_gui.cpp | 26 +++--- src/script/script_gui.cpp | 22 ++--- src/settings_gui.cpp | 30 +++---- src/signs_gui.cpp | 14 +-- src/station_gui.cpp | 30 +++---- src/statusbar_gui.cpp | 4 +- src/story_gui.cpp | 6 +- src/subsidy_gui.cpp | 6 +- src/terraform_gui.cpp | 6 +- src/textfile_gui.cpp | 8 +- src/textfile_gui.h | 2 +- src/timetable_gui.cpp | 12 +-- src/toolbar_gui.cpp | 6 +- src/town_gui.cpp | 36 ++++---- src/tree_gui.cpp | 6 +- src/vehicle_gui.cpp | 70 +++++++-------- src/widget.cpp | 8 +- src/window_gui.h | 8 +- 55 files changed, 602 insertions(+), 602 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 68c0e3d2e5..9bdf53a1de 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -128,20 +128,20 @@ struct AIConfigWindow : public Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_AIC_DECREASE_NUMBER: case WID_AIC_INCREASE_NUMBER: case WID_AIC_DECREASE_INTERVAL: case WID_AIC_INCREASE_INTERVAL: - *size = maxdim(*size, NWidgetScrollbar::GetHorizontalDimension()); + size = maxdim(size, NWidgetScrollbar::GetHorizontalDimension()); break; case WID_AIC_LIST: this->line_height = GetCharacterHeight(FS_NORMAL) + padding.height; - resize->height = this->line_height; - size->height = 8 * this->line_height; + resize.height = this->line_height; + size.height = 8 * this->line_height; break; } } diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index a6e4109f59..3b346d2629 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -317,7 +317,7 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_AP_CLASS_DROPDOWN: { @@ -327,7 +327,7 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -336,11 +336,11 @@ public: const AirportSpec *as = AirportSpec::Get(i); if (!as->enabled) continue; - size->width = std::max(size->width, GetStringBoundingBox(as->name).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(as->name).width + padding.width); } this->line_height = GetCharacterHeight(FS_NORMAL) + padding.height; - size->height = 5 * this->line_height; + size.height = 5 * this->line_height; break; } @@ -354,7 +354,7 @@ public: Dimension d = GetSpriteSize(sprite); d.width += WidgetDimensions::scaled.framerect.Horizontal(); d.height += WidgetDimensions::scaled.framerect.Vertical(); - *size = maxdim(d, *size); + size = maxdim(d, size); } } } @@ -368,8 +368,8 @@ public: StringID string = GetAirportTextCallback(as, layout, CBID_AIRPORT_ADDITIONAL_TEXT); if (string == STR_UNDEFINED) continue; - Dimension d = GetStringMultiLineBoundingBox(string, *size); - *size = maxdim(d, *size); + Dimension d = GetStringMultiLineBoundingBox(string, size); + size = maxdim(d, size); } } break; diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 93f2ae7825..62e8b1e85e 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -316,26 +316,26 @@ public: this->sel_group = id_g; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_RV_SORT_ASCENDING_DESCENDING: { Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better. d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_RV_LEFT_MATRIX: case WID_RV_RIGHT_MATRIX: - resize->height = GetEngineListHeight((VehicleType)this->window_number); - size->height = (this->window_number <= VEH_ROAD ? 8 : 4) * resize->height; + resize.height = GetEngineListHeight((VehicleType)this->window_number); + size.height = (this->window_number <= VEH_ROAD ? 8 : 4) * resize.height; break; case WID_RV_LEFT_DETAILS: case WID_RV_RIGHT_DETAILS: - size->height = GetCharacterHeight(FS_NORMAL) * this->details_height + padding.height; + size.height = GetCharacterHeight(FS_NORMAL) * this->details_height + padding.height; break; case WID_RV_TRAIN_WAGONREMOVE_TOGGLE: { @@ -346,7 +346,7 @@ public: d = maxdim(d, GetStringBoundingBox(str)); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -355,7 +355,7 @@ public: d = maxdim(d, GetStringBoundingBox(STR_REPLACE_WAGONS)); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -364,7 +364,7 @@ public: d = maxdim(d, GetStringBoundingBox(STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED)); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -375,7 +375,7 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -386,7 +386,7 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -397,7 +397,7 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index 3487998615..e2e0e37004 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -97,12 +97,12 @@ public: this->Window::Close(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_BEM_MESSAGE) { - *size = GetStringBoundingBox(STR_MISSING_GRAPHICS_ERROR); - size->width += WidgetDimensions::scaled.frametext.Horizontal(); - size->height += WidgetDimensions::scaled.frametext.Vertical(); + size = GetStringBoundingBox(STR_MISSING_GRAPHICS_ERROR); + size.width += WidgetDimensions::scaled.frametext.Horizontal(); + size.height += WidgetDimensions::scaled.frametext.Vertical(); } } @@ -211,7 +211,7 @@ public: this->Window::Close(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { /* We cache the button size. This is safe as no reinit can happen here. */ if (this->button_size.width == 0) { @@ -223,13 +223,13 @@ public: switch (widget) { case WID_BAFD_QUESTION: /* The question is twice as wide as the buttons, and determine the height based on the width. */ - size->width = this->button_size.width * 2; - size->height = GetStringHeight(STR_MISSING_GRAPHICS_SET_MESSAGE, size->width - WidgetDimensions::scaled.frametext.Horizontal()) + WidgetDimensions::scaled.frametext.Vertical(); + size.width = this->button_size.width * 2; + size.height = GetStringHeight(STR_MISSING_GRAPHICS_SET_MESSAGE, size.width - WidgetDimensions::scaled.frametext.Horizontal()) + WidgetDimensions::scaled.frametext.Vertical(); break; case WID_BAFD_YES: case WID_BAFD_NO: - *size = this->button_size; + size = this->button_size; break; } } diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index 97f152457e..1eba99ddce 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -174,14 +174,14 @@ public: this->last_sorting = this->bridges.GetListing(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_BBS_DROPDOWN_ORDER: { Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better. d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_BBS_DROPDOWN_CRITERIA: { @@ -191,7 +191,7 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_BBS_BRIDGE_LIST: { @@ -201,11 +201,11 @@ public: sprite_dim = maxdim(sprite_dim, GetScaledSpriteSize(bridge_data.spec->sprite)); text_dim = maxdim(text_dim, GetStringBoundingBox(GetBridgeSelectString(bridge_data))); } - resize->height = std::max(sprite_dim.height, text_dim.height) + padding.height; // Max of both sizes + account for matrix edges. + resize.height = std::max(sprite_dim.height, text_dim.height) + padding.height; // Max of both sizes + account for matrix edges. this->icon_width = sprite_dim.width; // Width of bridge icon. - size->width = this->icon_width + WidgetDimensions::scaled.hsep_normal + text_dim.width + padding.width; - size->height = 4 * resize->height; // Smallest bridge gui is 4 entries high in the matrix. + size.width = this->icon_width + WidgetDimensions::scaled.hsep_normal + text_dim.width + padding.width; + size.height = 4 * resize.height; // Smallest bridge gui is 4 entries high in the matrix. break; } } diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 50244c24eb..db21d23c84 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1741,43 +1741,43 @@ struct BuildVehicleWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_BV_LIST: - resize->height = GetEngineListHeight(this->vehicle_type); - size->height = 3 * resize->height; - size->width = std::max(size->width, GetVehicleImageCellSize(this->vehicle_type, EIT_PURCHASE).extend_left + GetVehicleImageCellSize(this->vehicle_type, EIT_PURCHASE).extend_right + 165) + padding.width; + resize.height = GetEngineListHeight(this->vehicle_type); + size.height = 3 * resize.height; + size.width = std::max(size.width, GetVehicleImageCellSize(this->vehicle_type, EIT_PURCHASE).extend_left + GetVehicleImageCellSize(this->vehicle_type, EIT_PURCHASE).extend_right + 165) + padding.width; break; case WID_BV_PANEL: - size->height = GetCharacterHeight(FS_NORMAL) * this->details_height + padding.height; + size.height = GetCharacterHeight(FS_NORMAL) * this->details_height + padding.height; break; case WID_BV_SORT_ASCENDING_DESCENDING: { Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better. d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_BV_CARGO_FILTER_DROPDOWN: - size->width = std::max(size->width, GetDropDownListDimension(this->BuildCargoDropDownList()).width + padding.width); + size.width = std::max(size.width, GetDropDownListDimension(this->BuildCargoDropDownList()).width + padding.width); break; case WID_BV_BUILD: - *size = GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON + this->vehicle_type); - *size = maxdim(*size, GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON + this->vehicle_type)); - size->width += padding.width; - size->height += padding.height; + size = GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON + this->vehicle_type); + size = maxdim(size, GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON + this->vehicle_type)); + size.width += padding.width; + size.height += padding.height; break; case WID_BV_SHOW_HIDE: - *size = GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON + this->vehicle_type); - *size = maxdim(*size, GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_SHOW_TOGGLE_BUTTON + this->vehicle_type)); - size->width += padding.width; - size->height += padding.height; + size = GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON + this->vehicle_type); + size = maxdim(size, GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_SHOW_TOGGLE_BUTTON + this->vehicle_type)); + size.width += padding.width; + size.height += padding.height; break; } } diff --git a/src/cheat_gui.cpp b/src/cheat_gui.cpp index 394e7c5223..9bafd9120c 100644 --- a/src/cheat_gui.cpp +++ b/src/cheat_gui.cpp @@ -298,7 +298,7 @@ struct CheatWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_C_PANEL) return; @@ -339,8 +339,8 @@ struct CheatWindow : Window { this->line_height = std::max(this->icon.height, SETTING_BUTTON_HEIGHT); this->line_height = std::max(this->line_height, GetCharacterHeight(FS_NORMAL)) + WidgetDimensions::scaled.framerect.Vertical(); - size->width = width + WidgetDimensions::scaled.hsep_wide * 2 + SETTING_BUTTON_WIDTH; - size->height = WidgetDimensions::scaled.framerect.Vertical() + this->line_height * lengthof(_cheats_ui); + size.width = width + WidgetDimensions::scaled.hsep_wide * 2 + SETTING_BUTTON_WIDTH; + size.height = WidgetDimensions::scaled.framerect.Vertical() + this->line_height * lengthof(_cheats_ui); } void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 3f81d4cfdc..c0a2ba6094 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -389,29 +389,29 @@ struct CompanyFinancesWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_CF_EXPS_CATEGORY: - size->width = GetMaxCategoriesWidth(); - size->height = GetTotalCategoriesHeight(); + size.width = GetMaxCategoriesWidth(); + size.height = GetTotalCategoriesHeight(); break; case WID_CF_EXPS_PRICE1: case WID_CF_EXPS_PRICE2: case WID_CF_EXPS_PRICE3: - size->height = GetTotalCategoriesHeight(); + size.height = GetTotalCategoriesHeight(); [[fallthrough]]; case WID_CF_BALANCE_VALUE: case WID_CF_LOAN_VALUE: case WID_CF_OWN_VALUE: SetDParamMaxValue(0, CompanyFinancesWindow::max_money); - size->width = std::max(GetStringBoundingBox(STR_FINANCES_NEGATIVE_INCOME).width, GetStringBoundingBox(STR_FINANCES_POSITIVE_INCOME).width) + padding.width; + size.width = std::max(GetStringBoundingBox(STR_FINANCES_NEGATIVE_INCOME).width, GetStringBoundingBox(STR_FINANCES_POSITIVE_INCOME).width) + padding.width; break; case WID_CF_INTEREST_RATE: - size->height = GetCharacterHeight(FS_NORMAL); + size.height = GetCharacterHeight(FS_NORMAL); break; } } @@ -718,7 +718,7 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_SCL_SPACER_DROPDOWN: { @@ -736,7 +736,7 @@ public: } } - size->width = std::max(size->width, 5 + d.width + padding.width); + size.width = std::max(size.width, 5 + d.width + padding.width); break; } @@ -745,15 +745,15 @@ public: this->square = GetSpriteSize(SPR_SQUARE); this->line_height = std::max(this->square.height, (uint)GetCharacterHeight(FS_NORMAL)) + padding.height; - size->height = 5 * this->line_height; - resize->width = 1; - resize->height = this->line_height; + size.height = 5 * this->line_height; + resize.width = 1; + resize.height = this->line_height; break; } case WID_SCL_SEC_COL_DROPDOWN: if (!_loaded_newgrf_features.has_2CC) { - size->width = 0; + size.width = 0; break; } [[fallthrough]]; @@ -762,9 +762,9 @@ public: this->square = GetSpriteSize(SPR_SQUARE); int string_padding = this->square.width + WidgetDimensions::scaled.hsep_normal + padding.width; for (Colours colour = COLOUR_BEGIN; colour != COLOUR_END; colour++) { - size->width = std::max(size->width, GetStringBoundingBox(STR_COLOUR_DARK_BLUE + colour).width + string_padding); + size.width = std::max(size.width, GetStringBoundingBox(STR_COLOUR_DARK_BLUE + colour).width + string_padding); } - size->width = std::max(size->width, GetStringBoundingBox(STR_COLOUR_DEFAULT).width + string_padding); + size.width = std::max(size.width, GetStringBoundingBox(STR_COLOUR_DEFAULT).width + string_padding); break; } } @@ -1405,31 +1405,31 @@ public: this->number_dim = number_dim; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT: - *size = maxdim(*size, GetStringBoundingBox(STR_FACE_EARRING)); - *size = maxdim(*size, GetStringBoundingBox(STR_FACE_MOUSTACHE)); + size = maxdim(size, GetStringBoundingBox(STR_FACE_EARRING)); + size = maxdim(size, GetStringBoundingBox(STR_FACE_MOUSTACHE)); break; case WID_SCMF_TIE_EARRING_TEXT: - *size = maxdim(*size, GetStringBoundingBox(STR_FACE_EARRING)); - *size = maxdim(*size, GetStringBoundingBox(STR_FACE_TIE)); + size = maxdim(size, GetStringBoundingBox(STR_FACE_EARRING)); + size = maxdim(size, GetStringBoundingBox(STR_FACE_TIE)); break; case WID_SCMF_LIPS_MOUSTACHE_TEXT: - *size = maxdim(*size, GetStringBoundingBox(STR_FACE_LIPS)); - *size = maxdim(*size, GetStringBoundingBox(STR_FACE_MOUSTACHE)); + size = maxdim(size, GetStringBoundingBox(STR_FACE_LIPS)); + size = maxdim(size, GetStringBoundingBox(STR_FACE_MOUSTACHE)); break; case WID_SCMF_FACE: - *size = maxdim(*size, GetScaledSpriteSize(SPR_GRADIENT)); + size = maxdim(size, GetScaledSpriteSize(SPR_GRADIENT)); break; case WID_SCMF_HAS_MOUSTACHE_EARRING: case WID_SCMF_HAS_GLASSES: - *size = this->yesno_dim; + size = this->yesno_dim; break; case WID_SCMF_EYECOLOUR: @@ -1442,7 +1442,7 @@ public: case WID_SCMF_COLLAR: case WID_SCMF_TIE_EARRING: case WID_SCMF_GLASSES: - *size = this->number_dim; + size = this->number_dim; break; } } @@ -1840,7 +1840,7 @@ struct CompanyInfrastructureWindow : Window } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { const Company *c = Company::Get((CompanyID)this->window_number); @@ -1848,20 +1848,20 @@ struct CompanyInfrastructureWindow : Window case WID_CI_RAIL_DESC: { uint lines = 1; // Starts at 1 because a line is also required for the section title - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT).width + padding.width); for (const auto &rt : _sorted_railtypes) { if (HasBit(this->railtypes, rt)) { lines++; - size->width = std::max(size->width, GetStringBoundingBox(GetRailTypeInfo(rt)->strings.name).width + padding.width + WidgetDimensions::scaled.hsep_indent); + size.width = std::max(size.width, GetStringBoundingBox(GetRailTypeInfo(rt)->strings.name).width + padding.width + WidgetDimensions::scaled.hsep_indent); } } if (this->railtypes != RAILTYPES_NONE) { lines++; - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS).width + padding.width + WidgetDimensions::scaled.hsep_indent); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS).width + padding.width + WidgetDimensions::scaled.hsep_indent); } - size->height = std::max(size->height, lines * GetCharacterHeight(FS_NORMAL)); + size.height = std::max(size.height, lines * GetCharacterHeight(FS_NORMAL)); break; } @@ -1869,28 +1869,28 @@ struct CompanyInfrastructureWindow : Window case WID_CI_TRAM_DESC: { uint lines = 1; // Starts at 1 because a line is also required for the section title - size->width = std::max(size->width, GetStringBoundingBox(widget == WID_CI_ROAD_DESC ? STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT : STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(widget == WID_CI_ROAD_DESC ? STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT : STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT).width + padding.width); for (const auto &rt : _sorted_roadtypes) { if (HasBit(this->roadtypes, rt) && RoadTypeIsRoad(rt) == (widget == WID_CI_ROAD_DESC)) { lines++; - size->width = std::max(size->width, GetStringBoundingBox(GetRoadTypeInfo(rt)->strings.name).width + padding.width + WidgetDimensions::scaled.hsep_indent); + size.width = std::max(size.width, GetStringBoundingBox(GetRoadTypeInfo(rt)->strings.name).width + padding.width + WidgetDimensions::scaled.hsep_indent); } } - size->height = std::max(size->height, lines * GetCharacterHeight(FS_NORMAL)); + size.height = std::max(size.height, lines * GetCharacterHeight(FS_NORMAL)); break; } case WID_CI_WATER_DESC: - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT).width + padding.width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS).width + padding.width + WidgetDimensions::scaled.hsep_indent); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS).width + padding.width + WidgetDimensions::scaled.hsep_indent); break; case WID_CI_STATION_DESC: - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT).width + padding.width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS).width + padding.width + WidgetDimensions::scaled.hsep_indent); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS).width + padding.width + WidgetDimensions::scaled.hsep_indent); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS).width + padding.width + WidgetDimensions::scaled.hsep_indent); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS).width + padding.width + WidgetDimensions::scaled.hsep_indent); break; case WID_CI_RAIL_COUNT: @@ -1930,17 +1930,17 @@ struct CompanyInfrastructureWindow : Window StringID str_total = TimerGameEconomy::UsingWallclockUnits() ? STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD : STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR; SetDParamMaxValue(0, this->GetTotalMaintenanceCost() * 12); // Convert to per year this->total_width = GetStringBoundingBox(str_total).width + WidgetDimensions::scaled.hsep_indent * 2; - size->width = std::max(size->width, this->total_width); + size.width = std::max(size.width, this->total_width); SetDParamMaxValue(0, max_cost * 12); // Convert to per year count_width += std::max(this->total_width, GetStringBoundingBox(str_total).width); } - size->width = std::max(size->width, count_width); + size.width = std::max(size.width, count_width); /* Set height of the total line. */ if (widget == WID_CI_TOTAL) { - size->height = _settings_game.economy.infrastructure_maintenance ? std::max(size->height, WidgetDimensions::scaled.vsep_normal + GetCharacterHeight(FS_NORMAL)) : 0; + size.height = _settings_game.economy.infrastructure_maintenance ? std::max(size.height, WidgetDimensions::scaled.vsep_normal + GetCharacterHeight(FS_NORMAL)) : 0; } break; } @@ -2249,11 +2249,11 @@ struct CompanyWindow : Window this->DrawWidgets(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_C_FACE: - *size = maxdim(*size, GetScaledSpriteSize(SPR_GRADIENT)); + size = maxdim(size, GetScaledSpriteSize(SPR_GRADIENT)); break; case WID_C_DESC_COLOUR_SCHEME_EXAMPLE: { @@ -2261,31 +2261,31 @@ struct CompanyWindow : Window Dimension d = GetSpriteSize(SPR_VEH_BUS_SW_VIEW, &offset); d.width -= offset.x; d.height -= offset.y; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_C_DESC_COMPANY_VALUE: SetDParam(0, INT64_MAX); // Arguably the maximum company value - size->width = GetStringBoundingBox(STR_COMPANY_VIEW_COMPANY_VALUE).width; + size.width = GetStringBoundingBox(STR_COMPANY_VIEW_COMPANY_VALUE).width; break; case WID_C_DESC_VEHICLE_COUNTS: SetDParamMaxValue(0, 5000); // Maximum number of vehicles for (uint i = 0; i < lengthof(_company_view_vehicle_count_strings); i++) { - size->width = std::max(size->width, GetStringBoundingBox(_company_view_vehicle_count_strings[i]).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(_company_view_vehicle_count_strings[i]).width + padding.width); } break; case WID_C_DESC_INFRASTRUCTURE_COUNTS: SetDParamMaxValue(0, UINT_MAX); - size->width = GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL).width; - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_WATER).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_STATION).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_NONE).width); - size->width += padding.width; + size.width = GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL).width; + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_WATER).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_STATION).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_NONE).width); + size.width += padding.width; break; case WID_C_VIEW_HQ: @@ -2296,19 +2296,19 @@ struct CompanyWindow : Window case WID_C_HOSTILE_TAKEOVER: case WID_C_COMPANY_PASSWORD: case WID_C_COMPANY_JOIN: - size->width = GetStringBoundingBox(STR_COMPANY_VIEW_VIEW_HQ_BUTTON).width; - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_BUILD_HQ_BUTTON).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_RELOCATE_HQ).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_GIVE_MONEY_BUTTON).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_PASSWORD).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_JOIN).width); - size->width += padding.width; + size.width = GetStringBoundingBox(STR_COMPANY_VIEW_VIEW_HQ_BUTTON).width; + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_BUILD_HQ_BUTTON).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_RELOCATE_HQ).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_GIVE_MONEY_BUTTON).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_PASSWORD).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_JOIN).width); + size.width += padding.width; break; case WID_C_HAS_PASSWORD: - if (_networking) *size = maxdim(*size, GetSpriteSize(SPR_LOCK)); + if (_networking) size = maxdim(size, GetSpriteSize(SPR_LOCK)); break; } } @@ -2622,18 +2622,18 @@ struct BuyCompanyWindow : Window { this->company_value = hostile_takeover ? CalculateHostileTakeoverValue(c) : c->bankrupt_value; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_BC_FACE: - *size = GetScaledSpriteSize(SPR_GRADIENT); + size = GetScaledSpriteSize(SPR_GRADIENT); break; case WID_BC_QUESTION: const Company *c = Company::Get((CompanyID)this->window_number); SetDParam(0, c->index); SetDParam(1, this->company_value); - size->height = GetStringHeight(this->hostile_takeover ? STR_BUY_COMPANY_HOSTILE_TAKEOVER : STR_BUY_COMPANY_MESSAGE, size->width); + size.height = GetStringHeight(this->hostile_takeover ? STR_BUY_COMPANY_HOSTILE_TAKEOVER : STR_BUY_COMPANY_MESSAGE, size.width); break; } } diff --git a/src/date_gui.cpp b/src/date_gui.cpp index 57b2c076a8..7faad2acf2 100644 --- a/src/date_gui.cpp +++ b/src/date_gui.cpp @@ -100,7 +100,7 @@ struct SetDateWindow : Window { ShowDropDownList(this, std::move(list), selected, widget); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { Dimension d = {0, 0}; switch (widget) { @@ -126,7 +126,7 @@ struct SetDateWindow : Window { d.width += padding.width; d.height += padding.height; - *size = d; + size = d; } void SetStringParameters(WidgetID widget) const override diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index ec1595460a..74d58bc415 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -653,7 +653,7 @@ struct DepotWindow : Window { this->flag_size = maxdim(GetScaledSpriteSize(SPR_FLAG_VEH_STOPPED), GetScaledSpriteSize(SPR_FLAG_VEH_RUNNING)); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_D_MATRIX: { @@ -679,18 +679,18 @@ struct DepotWindow : Window { } int base_width = this->count_width + this->header_width + padding.width; - resize->height = std::max(this->cell_size.height, min_height + padding.height); + resize.height = std::max(this->cell_size.height, min_height + padding.height); if (this->type == VEH_TRAIN) { - resize->width = 1; - size->width = base_width + 2 * ScaleSpriteTrad(29); // about 2 parts - size->height = resize->height * 6; + resize.width = 1; + size.width = base_width + 2 * ScaleSpriteTrad(29); // about 2 parts + size.height = resize.height * 6; } else { - resize->width = base_width + this->cell_size.extend_left + this->cell_size.extend_right; - size->width = resize->width * (this->type == VEH_ROAD ? 5 : 3); - size->height = resize->height * (this->type == VEH_ROAD ? 5 : 3); + resize.width = base_width + this->cell_size.extend_left + this->cell_size.extend_right; + size.width = resize.width * (this->type == VEH_ROAD ? 5 : 3); + size.height = resize.height * (this->type == VEH_ROAD ? 5 : 3); } - fill->width = resize->width; - fill->height = resize->height; + fill.width = resize.width; + fill.height = resize.height; break; } } diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp index e0d500fdf8..fec4024a3a 100644 --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -529,13 +529,13 @@ public: UpdateDocksDirection(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_BDD_X: case WID_BDD_Y: - size->width = ScaleGUITrad(96) + WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Vertical(); + size.width = ScaleGUITrad(96) + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Vertical(); break; } } diff --git a/src/dropdown.cpp b/src/dropdown.cpp index 292d524132..6366090b88 100644 --- a/src/dropdown.cpp +++ b/src/dropdown.cpp @@ -210,9 +210,9 @@ struct DropdownWindow : Window { if (this->position.y < button_rect.top && list_dim.height > widget_dim.height) this->vscroll->UpdatePosition(INT_MAX); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { - if (widget == WID_DM_ITEMS) *size = this->items_dim; + if (widget == WID_DM_ITEMS) size = this->items_dim; } Point OnInitialPosition([[maybe_unused]] int16_t sm_width, [[maybe_unused]] int16_t sm_height, [[maybe_unused]] int window_number) override diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp index b24f902363..172b22f507 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -78,7 +78,7 @@ struct EnginePreviewWindow : Window { this->flags |= WF_STICKY; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_EP_QUESTION) return; @@ -98,11 +98,11 @@ struct EnginePreviewWindow : Window { } this->vehicle_space = std::max(ScaleSpriteTrad(40), y - y_offs); - size->width = std::max(size->width, x + std::abs(x_offs)); + size.width = std::max(size.width, x + std::abs(x_offs)); SetDParam(0, GetEngineCategoryName(engine)); - size->height = GetStringHeight(STR_ENGINE_PREVIEW_MESSAGE, size->width) + WidgetDimensions::scaled.vsep_wide + GetCharacterHeight(FS_NORMAL) + this->vehicle_space; + size.height = GetStringHeight(STR_ENGINE_PREVIEW_MESSAGE, size.width) + WidgetDimensions::scaled.vsep_wide + GetCharacterHeight(FS_NORMAL) + this->vehicle_space; SetDParam(0, engine); - size->height += GetStringHeight(GetEngineInfoString(engine), size->width); + size.height += GetStringHeight(GetEngineInfoString(engine), size.width); } void DrawWidget(const Rect &r, WidgetID widget) const override diff --git a/src/error_gui.cpp b/src/error_gui.cpp index 412864226c..e702cdf133 100644 --- a/src/error_gui.cpp +++ b/src/error_gui.cpp @@ -189,16 +189,16 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_EM_MESSAGE: { CopyInDParam(this->params); if (this->textref_stack_size > 0) StartTextRefStackUsage(this->textref_stack_grffile, this->textref_stack_size, this->textref_stack); - this->height_summary = GetStringHeight(this->summary_msg, size->width); - this->height_detailed = (this->detailed_msg == INVALID_STRING_ID) ? 0 : GetStringHeight(this->detailed_msg, size->width); - this->height_extra = (this->extra_msg == INVALID_STRING_ID) ? 0 : GetStringHeight(this->extra_msg, size->width); + this->height_summary = GetStringHeight(this->summary_msg, size.width); + this->height_detailed = (this->detailed_msg == INVALID_STRING_ID) ? 0 : GetStringHeight(this->detailed_msg, size.width); + this->height_extra = (this->extra_msg == INVALID_STRING_ID) ? 0 : GetStringHeight(this->extra_msg, size.width); if (this->textref_stack_size > 0) StopTextRefStackUsage(); @@ -206,11 +206,11 @@ public: if (this->detailed_msg != INVALID_STRING_ID) panel_height += this->height_detailed + WidgetDimensions::scaled.vsep_wide; if (this->extra_msg != INVALID_STRING_ID) panel_height += this->height_extra + WidgetDimensions::scaled.vsep_wide; - size->height = std::max(size->height, panel_height); + size.height = std::max(size.height, panel_height); break; } case WID_EM_FACE: - *size = maxdim(*size, GetScaledSpriteSize(SPR_GRADIENT)); + size = maxdim(size, GetScaledSpriteSize(SPR_GRADIENT)); break; } } diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index c986b4eff6..58bfbe627f 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -561,23 +561,23 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_SL_BACKGROUND: - size->height = 2 * GetCharacterHeight(FS_NORMAL) + padding.height; + size.height = 2 * GetCharacterHeight(FS_NORMAL) + padding.height; break; case WID_SL_DRIVES_DIRECTORIES_LIST: - resize->height = GetCharacterHeight(FS_NORMAL); - size->height = resize->height * 10 + padding.height; + resize.height = GetCharacterHeight(FS_NORMAL); + size.height = resize.height * 10 + padding.height; break; case WID_SL_SORT_BYNAME: case WID_SL_SORT_BYDATE: { Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better. d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index dc5698791d..ea1bd9e4dc 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -540,32 +540,32 @@ struct FramerateWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_FRW_RATE_GAMELOOP: SetDParam(0, STR_FRAMERATE_FPS_GOOD); SetDParam(1, 999999); SetDParam(2, 2); - *size = GetStringBoundingBox(STR_FRAMERATE_RATE_GAMELOOP); + size = GetStringBoundingBox(STR_FRAMERATE_RATE_GAMELOOP); break; case WID_FRW_RATE_DRAWING: SetDParam(0, STR_FRAMERATE_FPS_GOOD); SetDParam(1, 999999); SetDParam(2, 2); - *size = GetStringBoundingBox(STR_FRAMERATE_RATE_BLITTER); + size = GetStringBoundingBox(STR_FRAMERATE_RATE_BLITTER); break; case WID_FRW_RATE_FACTOR: SetDParam(0, 999999); SetDParam(1, 2); - *size = GetStringBoundingBox(STR_FRAMERATE_SPEED_FACTOR); + size = GetStringBoundingBox(STR_FRAMERATE_SPEED_FACTOR); break; case WID_FRW_TIMES_NAMES: { - size->width = 0; - size->height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal + MIN_ELEMENTS * GetCharacterHeight(FS_NORMAL); - resize->width = 0; - resize->height = GetCharacterHeight(FS_NORMAL); + size.width = 0; + size.height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal + MIN_ELEMENTS * GetCharacterHeight(FS_NORMAL); + resize.width = 0; + resize.height = GetCharacterHeight(FS_NORMAL); for (PerformanceElement e : DISPLAY_ORDER_PFE) { if (_pf_data[e].num_valid == 0) continue; Dimension line_size; @@ -576,7 +576,7 @@ struct FramerateWindow : Window { SetDParamStr(1, GetAIName(e - PFE_AI0)); line_size = GetStringBoundingBox(STR_FRAMERATE_AI); } - size->width = std::max(size->width, line_size.width); + size.width = std::max(size.width, line_size.width); } break; } @@ -584,14 +584,14 @@ struct FramerateWindow : Window { case WID_FRW_TIMES_CURRENT: case WID_FRW_TIMES_AVERAGE: case WID_FRW_ALLOCSIZE: { - *size = GetStringBoundingBox(STR_FRAMERATE_CURRENT + (widget - WID_FRW_TIMES_CURRENT)); + size = GetStringBoundingBox(STR_FRAMERATE_CURRENT + (widget - WID_FRW_TIMES_CURRENT)); SetDParam(0, 999999); SetDParam(1, 2); Dimension item_size = GetStringBoundingBox(STR_FRAMERATE_MS_GOOD); - size->width = std::max(size->width, item_size.width); - size->height += GetCharacterHeight(FS_NORMAL) * MIN_ELEMENTS + WidgetDimensions::scaled.vsep_normal; - resize->width = 0; - resize->height = GetCharacterHeight(FS_NORMAL); + size.width = std::max(size.width, item_size.width); + size.height += GetCharacterHeight(FS_NORMAL) * MIN_ELEMENTS + WidgetDimensions::scaled.vsep_normal; + resize.width = 0; + resize.height = GetCharacterHeight(FS_NORMAL); break; } } @@ -780,7 +780,7 @@ struct FrametimeGraphWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_FGW_GRAPH) { SetDParam(0, 100); @@ -792,10 +792,10 @@ struct FrametimeGraphWindow : Window { graph_size.height = std::max(100u, 10 * (size_ms_label.height + 1)); /* Always 2:1 graph area */ graph_size.width = 2 * graph_size.height; - *size = graph_size; + size = graph_size; - size->width += size_ms_label.width + 2; - size->height += size_s_label.height + 2; + size.width += size_ms_label.width + 2; + size.height += size_s_label.height + 2; } } diff --git a/src/game/game_gui.cpp b/src/game/game_gui.cpp index aae47f76e8..7ad4cd7b42 100644 --- a/src/game/game_gui.cpp +++ b/src/game/game_gui.cpp @@ -136,19 +136,19 @@ struct GSConfigWindow : public Window { this->vscroll->SetCount(this->visible_settings.size()); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_GSC_SETTINGS: this->line_height = std::max(SETTING_BUTTON_HEIGHT, GetCharacterHeight(FS_NORMAL)) + padding.height; - resize->width = 1; - resize->height = this->line_height; - size->height = 5 * this->line_height; + resize.width = 1; + resize.height = this->line_height; + size.height = 5 * this->line_height; break; case WID_GSC_GSLIST: this->line_height = GetCharacterHeight(FS_NORMAL) + padding.height; - size->height = 1 * this->line_height; + size.height = 1 * this->line_height; break; } } diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index 8c34d91f8e..e6942fe9c7 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -571,15 +571,15 @@ struct GenerateLandscapeWindow : public Window { } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { Dimension d{0, (uint)GetCharacterHeight(FS_NORMAL)}; const StringID *strs = nullptr; switch (widget) { case WID_GL_TEMPERATE: case WID_GL_ARCTIC: case WID_GL_TROPICAL: case WID_GL_TOYLAND: - size->width += WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height += WidgetDimensions::scaled.fullbevel.Vertical(); + size.width += WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height += WidgetDimensions::scaled.fullbevel.Vertical(); break; case WID_GL_HEIGHTMAP_HEIGHT_TEXT: @@ -654,7 +654,7 @@ struct GenerateLandscapeWindow : public Window { break; case WID_GL_HEIGHTMAP_NAME_TEXT: - size->width = 0; + size.width = 0; break; default: @@ -667,7 +667,7 @@ struct GenerateLandscapeWindow : public Window { } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); } void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override @@ -1121,14 +1121,14 @@ struct CreateScenarioWindow : public Window this->DrawWidgets(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { StringID str = STR_JUST_INT; switch (widget) { case WID_CS_TEMPERATE: case WID_CS_ARCTIC: case WID_CS_TROPICAL: case WID_CS_TOYLAND: - size->width += WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height += WidgetDimensions::scaled.fullbevel.Vertical(); + size.width += WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height += WidgetDimensions::scaled.fullbevel.Vertical(); break; case WID_CS_START_DATE_TEXT: @@ -1151,7 +1151,7 @@ struct CreateScenarioWindow : public Window Dimension d = GetStringBoundingBox(str); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); } void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override @@ -1405,23 +1405,23 @@ struct GenerateProgressWindow : public Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_GP_PROGRESS_BAR: { SetDParamMaxValue(0, 100); - *size = GetStringBoundingBox(STR_GENERATION_PROGRESS); + size = GetStringBoundingBox(STR_GENERATION_PROGRESS); /* We need some spacing for the 'border' */ - size->height += WidgetDimensions::scaled.frametext.Horizontal(); - size->width += WidgetDimensions::scaled.frametext.Vertical(); + size.height += WidgetDimensions::scaled.frametext.Horizontal(); + size.width += WidgetDimensions::scaled.frametext.Vertical(); break; } case WID_GP_PROGRESS_TEXT: for (uint i = 0; i < GWP_CLASS_COUNT; i++) { - size->width = std::max(size->width, GetStringBoundingBox(_generation_class_table[i]).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(_generation_class_table[i]).width + padding.width); } - size->height = GetCharacterHeight(FS_NORMAL) * 2 + WidgetDimensions::scaled.vsep_normal; + size.height = GetCharacterHeight(FS_NORMAL) * 2 + WidgetDimensions::scaled.vsep_normal; break; } } diff --git a/src/goal_gui.cpp b/src/goal_gui.cpp index 033c6359e2..afbbd953d5 100644 --- a/src/goal_gui.cpp +++ b/src/goal_gui.cpp @@ -168,18 +168,18 @@ struct GoalListWindow : public Window { return num; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_GOAL_LIST) return; Dimension d = GetStringBoundingBox(STR_GOALS_NONE); - resize->width = 1; - resize->height = d.height; + resize.width = 1; + resize.height = d.height; d.height *= 5; d.width += WidgetDimensions::scaled.framerect.Horizontal(); d.height += WidgetDimensions::scaled.framerect.Vertical(); - *size = maxdim(*size, d); + size = maxdim(size, d); } /** @@ -388,12 +388,12 @@ struct GoalQuestionWindow : public Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_GQ_QUESTION) return; SetDParamStr(0, this->question); - size->height = GetStringHeight(STR_JUST_RAW_STRING, size->width); + size.height = GetStringHeight(STR_JUST_RAW_STRING, size.width); } void DrawWidget(const Rect &r, WidgetID widget) const override diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index af2efd3722..01f6f4ad15 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -517,7 +517,7 @@ protected: } public: - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_GRAPH_GRAPH) return; @@ -548,9 +548,9 @@ public: SetDParam(1, INT64_MAX); uint y_label_width = GetStringBoundingBox(STR_GRAPH_Y_LABEL).width; - size->width = std::max(size->width, ScaleGUITrad(5) + y_label_width + this->num_vert_lines * (x_label_width + ScaleGUITrad(5)) + ScaleGUITrad(9)); - size->height = std::max(size->height, ScaleGUITrad(5) + (1 + MIN_GRAPH_NUM_LINES_Y * 2 + (this->draw_dates ? 3 : 1)) * GetCharacterHeight(FS_SMALL) + ScaleGUITrad(4)); - size->height = std::max(size->height, size->width / 3); + size.width = std::max(size.width, ScaleGUITrad(5) + y_label_width + this->num_vert_lines * (x_label_width + ScaleGUITrad(5)) + ScaleGUITrad(9)); + size.height = std::max(size.height, ScaleGUITrad(5) + (1 + MIN_GRAPH_NUM_LINES_Y * 2 + (this->draw_dates ? 3 : 1)) * GetCharacterHeight(FS_SMALL) + ScaleGUITrad(4)); + size.height = std::max(size.height, size.width / 3); } void DrawWidget(const Rect &r, WidgetID widget) const override @@ -990,14 +990,14 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_CPR_MATRIX) { BaseGraphWindow::UpdateWidgetSize(widget, size, padding, fill, resize); return; } - size->height = GetCharacterHeight(FS_SMALL) + WidgetDimensions::scaled.framerect.Vertical(); + size.height = GetCharacterHeight(FS_SMALL) + WidgetDimensions::scaled.framerect.Vertical(); for (const CargoSpec *cs : _sorted_standard_cargo_specs) { SetDParam(0, cs->name); @@ -1005,13 +1005,13 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { d.width += this->legend_width + WidgetDimensions::scaled.hsep_normal; // colour field d.width += WidgetDimensions::scaled.framerect.Horizontal(); d.height += WidgetDimensions::scaled.framerect.Vertical(); - *size = maxdim(d, *size); + size = maxdim(d, size); } - this->line_height = size->height; - size->height = this->line_height * 11; /* Default number of cargo types in most climates. */ - resize->width = 0; - resize->height = this->line_height; + this->line_height = size.height; + size.height = this->line_height * 11; /* Default number of cargo types in most climates. */ + resize.width = 0; + resize.height = this->line_height; } void DrawWidget(const Rect &r, WidgetID widget) const override @@ -1216,12 +1216,12 @@ struct PerformanceRatingDetailWindow : Window { uint score_detail_left; uint score_detail_right; - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_PRD_SCORE_FIRST: this->bar_height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.fullbevel.Vertical(); - size->height = this->bar_height + WidgetDimensions::scaled.matrix.Vertical(); + size.height = this->bar_height + WidgetDimensions::scaled.matrix.Vertical(); uint score_info_width = 0; for (uint i = SCORE_BEGIN; i < SCORE_END; i++) { @@ -1257,9 +1257,9 @@ struct PerformanceRatingDetailWindow : Window { SetDParam(1, max); uint score_detail_width = GetStringBoundingBox(STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY).width; - size->width = WidgetDimensions::scaled.frametext.Horizontal() + score_info_width + WidgetDimensions::scaled.hsep_wide + this->bar_width + WidgetDimensions::scaled.hsep_wide + score_detail_width; + size.width = WidgetDimensions::scaled.frametext.Horizontal() + score_info_width + WidgetDimensions::scaled.hsep_wide + this->bar_width + WidgetDimensions::scaled.hsep_wide + score_detail_width; uint left = WidgetDimensions::scaled.frametext.left; - uint right = size->width - WidgetDimensions::scaled.frametext.right; + uint right = size.width - WidgetDimensions::scaled.frametext.right; bool rtl = _current_text_dir == TD_RTL; this->score_info_left = rtl ? right - score_info_width : left; diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 55bb30dd1e..c4b3998102 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -400,56 +400,56 @@ public: *this->sorting = this->vehgroups.GetListing(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_GL_LIST_GROUP: - size->width = this->ComputeGroupInfoSize(); - resize->height = this->tiny_step_height; - fill->height = this->tiny_step_height; + size.width = this->ComputeGroupInfoSize(); + resize.height = this->tiny_step_height; + fill.height = this->tiny_step_height; break; case WID_GL_ALL_VEHICLES: case WID_GL_DEFAULT_VEHICLES: - size->width = this->ComputeGroupInfoSize(); - size->height = this->tiny_step_height; + size.width = this->ComputeGroupInfoSize(); + size.height = this->tiny_step_height; break; case WID_GL_SORT_BY_ORDER: { Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better. d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_GL_LIST_VEHICLE: this->ComputeGroupInfoSize(); - resize->height = GetVehicleListHeight(this->vli.vtype, this->tiny_step_height); - size->height = 4 * resize->height; + resize.height = GetVehicleListHeight(this->vli.vtype, this->tiny_step_height); + size.height = 4 * resize.height; break; case WID_GL_GROUP_BY_DROPDOWN: - size->width = GetStringListWidth(this->vehicle_group_by_names) + padding.width; + size.width = GetStringListWidth(this->vehicle_group_by_names) + padding.width; break; case WID_GL_SORT_BY_DROPDOWN: - size->width = GetStringListWidth(this->vehicle_group_none_sorter_names_calendar); - size->width = std::max(size->width, GetStringListWidth(this->vehicle_group_none_sorter_names_wallclock)); - size->width = std::max(size->width, GetStringListWidth(this->vehicle_group_shared_orders_sorter_names_calendar)); - size->width = std::max(size->width, GetStringListWidth(this->vehicle_group_shared_orders_sorter_names_wallclock)); - size->width += padding.width; + size.width = GetStringListWidth(this->vehicle_group_none_sorter_names_calendar); + size.width = std::max(size.width, GetStringListWidth(this->vehicle_group_none_sorter_names_wallclock)); + size.width = std::max(size.width, GetStringListWidth(this->vehicle_group_shared_orders_sorter_names_calendar)); + size.width = std::max(size.width, GetStringListWidth(this->vehicle_group_shared_orders_sorter_names_wallclock)); + size.width += padding.width; break; case WID_GL_FILTER_BY_CARGO: - size->width = std::max(size->width, GetDropDownListDimension(this->BuildCargoDropDownList(true)).width + padding.width); + size.width = std::max(size.width, GetDropDownListDimension(this->BuildCargoDropDownList(true)).width + padding.width); break; case WID_GL_MANAGE_VEHICLES_DROPDOWN: { Dimension d = this->GetActionDropdownSize(true, true, true); d.height += padding.height; d.width += padding.width; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 711ee598f9..96d82325dc 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -423,7 +423,7 @@ public: this->SetupArrays(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_DPI_MATRIX_WIDGET: { @@ -431,10 +431,10 @@ public: for (const auto &indtype : this->list) { d = maxdim(d, GetStringBoundingBox(GetIndustrySpec(indtype)->name)); } - resize->height = std::max(this->legend.height, GetCharacterHeight(FS_NORMAL)) + padding.height; + resize.height = std::max(this->legend.height, GetCharacterHeight(FS_NORMAL)) + padding.height; d.width += this->legend.width + WidgetDimensions::scaled.hsep_wide + padding.width; - d.height = 5 * resize->height; - *size = maxdim(*size, d); + d.height = 5 * resize.height; + size = maxdim(size, d); break; } @@ -478,8 +478,8 @@ public: /* Set it to something more sane :) */ height += extra_lines_prd + extra_lines_req + extra_lines_newgrf; - size->height = height * GetCharacterHeight(FS_NORMAL) + padding.height; - size->width = d.width + padding.width; + size.height = height * GetCharacterHeight(FS_NORMAL) + padding.height; + size.width = d.width + padding.width; break; } @@ -489,7 +489,7 @@ public: d = maxdim(d, GetStringBoundingBox(STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY)); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } @@ -1004,9 +1004,9 @@ public: if (widget == WID_IV_CAPTION) SetDParam(0, this->window_number); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { - if (widget == WID_IV_INFO) size->height = this->info_height; + if (widget == WID_IV_INFO) size.height = this->info_height; } void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override @@ -1720,14 +1720,14 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_ID_DROPDOWN_ORDER: { Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better. d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -1738,17 +1738,17 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_ID_INDUSTRY_LIST: { Dimension d = GetStringBoundingBox(STR_INDUSTRY_DIRECTORY_NONE); - resize->height = d.height; + resize.height = d.height; d.height *= 5; d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } @@ -2626,21 +2626,21 @@ struct IndustryCargoesWindow : public Window { CargoesField::cargo_field_width = CargoesField::cargo_border.width * 2 + CargoesField::cargo_line.width * CargoesField::max_cargoes + CargoesField::cargo_space.width * (CargoesField::max_cargoes - 1); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_IC_PANEL: - resize->height = CargoesField::normal_height; - size->width = CargoesField::industry_width * 3 + CargoesField::cargo_field_width * 2 + WidgetDimensions::scaled.frametext.Horizontal(); - size->height = CargoesField::small_height + 2 * resize->height + WidgetDimensions::scaled.frametext.Vertical(); + resize.height = CargoesField::normal_height; + size.width = CargoesField::industry_width * 3 + CargoesField::cargo_field_width * 2 + WidgetDimensions::scaled.frametext.Horizontal(); + size.height = CargoesField::small_height + 2 * resize.height + WidgetDimensions::scaled.frametext.Vertical(); break; case WID_IC_IND_DROPDOWN: - size->width = std::max(size->width, this->ind_textsize.width + padding.width); + size.width = std::max(size.width, this->ind_textsize.width + padding.width); break; case WID_IC_CARGO_DROPDOWN: - size->width = std::max(size->width, this->cargo_textsize.width + padding.width); + size.width = std::max(size.width, this->cargo_textsize.width + padding.width); break; } } diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index 0e1d53c84c..32e6c2d34a 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -297,13 +297,13 @@ struct SelectGameWindow : public Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_SGI_TEMPERATE_LANDSCAPE: case WID_SGI_ARCTIC_LANDSCAPE: case WID_SGI_TROPIC_LANDSCAPE: case WID_SGI_TOYLAND_LANDSCAPE: - size->width += WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height += WidgetDimensions::scaled.fullbevel.Vertical(); + size.width += WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height += WidgetDimensions::scaled.fullbevel.Vertical(); break; } } diff --git a/src/league_gui.cpp b/src/league_gui.cpp index 3e9c5ca833..58b36c213b 100644 --- a/src/league_gui.cpp +++ b/src/league_gui.cpp @@ -129,7 +129,7 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_PLT_BACKGROUND) return; @@ -162,8 +162,8 @@ public: this->text_width = widest_width + WidgetDimensions::scaled.hsep_indent * 3; // Keep some extra spacing - size->width = WidgetDimensions::scaled.framerect.Horizontal() + this->ordinal_width + this->icon.width + this->text_width + WidgetDimensions::scaled.hsep_wide; - size->height = this->line_height * MAX_COMPANIES + WidgetDimensions::scaled.framerect.Vertical(); + size.width = WidgetDimensions::scaled.framerect.Horizontal() + this->ordinal_width + this->icon.width + this->text_width + WidgetDimensions::scaled.hsep_wide; + size.height = this->line_height * MAX_COMPANIES + WidgetDimensions::scaled.framerect.Vertical(); } void OnGameTick() override @@ -359,7 +359,7 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_SLT_BACKGROUND) return; @@ -385,18 +385,18 @@ public: if (!show_icon_column) this->icon_size.width = 0; else this->icon_size.width += WidgetDimensions::scaled.hsep_wide; - size->width = this->rank_width + this->icon_size.width + this->text_width + this->score_width + WidgetDimensions::scaled.framerect.Horizontal() + WidgetDimensions::scaled.hsep_wide * 2; - size->height = this->line_height * std::max(3u, (unsigned)this->rows.size()) + WidgetDimensions::scaled.framerect.Vertical(); + size.width = this->rank_width + this->icon_size.width + this->text_width + this->score_width + WidgetDimensions::scaled.framerect.Horizontal() + WidgetDimensions::scaled.hsep_wide * 2; + size.height = this->line_height * std::max(3u, (unsigned)this->rows.size()) + WidgetDimensions::scaled.framerect.Vertical(); if (!lt->header.empty()) { SetDParamStr(0, lt->header); - this->header_height = GetStringHeight(STR_JUST_RAW_STRING, size->width - WidgetDimensions::scaled.framerect.Horizontal()) + WidgetDimensions::scaled.vsep_wide; - size->height += header_height; + this->header_height = GetStringHeight(STR_JUST_RAW_STRING, size.width - WidgetDimensions::scaled.framerect.Horizontal()) + WidgetDimensions::scaled.vsep_wide; + size.height += header_height; } else this->header_height = 0; if (!lt->footer.empty()) { SetDParamStr(0, lt->footer); - size->height += GetStringHeight(STR_JUST_RAW_STRING, size->width - WidgetDimensions::scaled.framerect.Horizontal()) + WidgetDimensions::scaled.vsep_wide; + size.height += GetStringHeight(STR_JUST_RAW_STRING, size.width - WidgetDimensions::scaled.framerect.Horizontal()) + WidgetDimensions::scaled.vsep_wide; } } diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index 7f9c944c4e..c065711504 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -579,7 +579,7 @@ void LinkGraphLegendWindow::SetOverlay(std::shared_ptr overlay } } -void LinkGraphLegendWindow::UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) +void LinkGraphLegendWindow::UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) { if (IsInsideMM(widget, WID_LGL_SATURATION_FIRST, WID_LGL_SATURATION_LAST + 1)) { StringID str = STR_NULL; @@ -594,7 +594,7 @@ void LinkGraphLegendWindow::UpdateWidgetSize(WidgetID widget, Dimension *size, [ Dimension dim = GetStringBoundingBox(str, FS_SMALL); dim.width += padding.width; dim.height += padding.height; - *size = maxdim(*size, dim); + size = maxdim(size, dim); } } if (IsInsideMM(widget, WID_LGL_CARGO_FIRST, WID_LGL_CARGO_LAST + 1)) { @@ -602,7 +602,7 @@ void LinkGraphLegendWindow::UpdateWidgetSize(WidgetID widget, Dimension *size, [ Dimension dim = GetStringBoundingBox(cargo->abbrev, FS_SMALL); dim.width += padding.width; dim.height += padding.height; - *size = maxdim(*size, dim); + size = maxdim(size, dim); } } diff --git a/src/linkgraph/linkgraph_gui.h b/src/linkgraph/linkgraph_gui.h index e86a38b84b..a8dc91c822 100644 --- a/src/linkgraph/linkgraph_gui.h +++ b/src/linkgraph/linkgraph_gui.h @@ -108,7 +108,7 @@ public: LinkGraphLegendWindow(WindowDesc *desc, int window_number); void SetOverlay(std::shared_ptr overlay); - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override; + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override; void DrawWidget(const Rect &r, WidgetID widget) const override; bool OnTooltip([[maybe_unused]] Point pt, WidgetID widget, TooltipCloseCondition close_cond) override; void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override; diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 182693b1a0..1412e849de 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -89,23 +89,23 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_LI_BACKGROUND) return; - size->height = WidgetDimensions::scaled.frametext.Vertical(); + size.height = WidgetDimensions::scaled.frametext.Vertical(); for (size_t i = 0; i < this->landinfo_data.size(); i++) { uint width = GetStringBoundingBox(this->landinfo_data[i]).width + WidgetDimensions::scaled.frametext.Horizontal(); - size->width = std::max(size->width, width); + size.width = std::max(size.width, width); - size->height += GetCharacterHeight(FS_NORMAL) + (i == 0 ? WidgetDimensions::scaled.vsep_wide : WidgetDimensions::scaled.vsep_normal); + size.height += GetCharacterHeight(FS_NORMAL) + (i == 0 ? WidgetDimensions::scaled.vsep_wide : WidgetDimensions::scaled.vsep_normal); } if (!this->cargo_acceptance.empty()) { uint width = GetStringBoundingBox(this->cargo_acceptance).width + WidgetDimensions::scaled.frametext.Horizontal(); - size->width = std::max(size->width, std::min(static_cast(ScaleGUITrad(300)), 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()); + size.height += GetStringHeight(STR_JUST_RAW_STRING, size.width - WidgetDimensions::scaled.frametext.Horizontal()); } } @@ -489,7 +489,7 @@ struct AboutWindow : public Window { if (widget == WID_A_COPYRIGHT) SetDParamStr(0, _openttd_revision_year); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_A_SCROLLING_TEXT) return; @@ -502,7 +502,7 @@ struct AboutWindow : public Window { for (const auto &str : _credits) { d.width = std::max(d.width, GetStringBoundingBox(str).width); } - *size = maxdim(*size, d); + size = maxdim(size, d); } void DrawWidget(const Rect &r, WidgetID widget) const override @@ -702,17 +702,17 @@ struct TooltipsWindow : public Window return pt; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_TT_BACKGROUND) return; CopyInDParam(this->params); - size->width = std::min(GetStringBoundingBox(this->string_id).width, ScaleGUITrad(194)); - size->height = GetStringHeight(this->string_id, size->width); + size.width = std::min(GetStringBoundingBox(this->string_id).width, ScaleGUITrad(194)); + size.height = GetStringHeight(this->string_id, size.width); /* Increase slightly to have some space around the box. */ - size->width += WidgetDimensions::scaled.framerect.Horizontal() + WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height += WidgetDimensions::scaled.framerect.Vertical() + WidgetDimensions::scaled.fullbevel.Vertical(); + size.width += WidgetDimensions::scaled.framerect.Horizontal() + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height += WidgetDimensions::scaled.framerect.Vertical() + WidgetDimensions::scaled.fullbevel.Vertical(); } void DrawWidget(const Rect &r, WidgetID widget) const override @@ -986,17 +986,17 @@ struct QueryStringWindow : public Window this->ReInit(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_QS_DEFAULT && (this->flags & QSF_ENABLE_DEFAULT) == 0) { /* We don't want this widget to show! */ - fill->width = 0; - resize->width = 0; - size->width = 0; + fill.width = 0; + resize.width = 0; + size.width = 0; } if (widget == WID_QS_WARNING) { - *size = this->warning_size; + size = this->warning_size; } } @@ -1139,11 +1139,11 @@ struct QueryWindow : public Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_Q_TEXT) return; - *size = GetStringMultiLineBoundingBox(this->message, *size); + size = GetStringMultiLineBoundingBox(this->message, size); } void DrawWidget(const Rect &r, WidgetID widget) const override diff --git a/src/music_gui.cpp b/src/music_gui.cpp index 081cd3650b..36817ae150 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -518,7 +518,7 @@ struct MusicTrackSelectionWindow : public Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_MTS_PLAYLIST: { @@ -530,7 +530,7 @@ struct MusicTrackSelectionWindow : public Window { } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -547,7 +547,7 @@ struct MusicTrackSelectionWindow : public Window { } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } @@ -700,7 +700,7 @@ struct MusicWindow : public Window { ); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { /* Make sure that WID_M_SHUFFLE and WID_M_PROGRAMME have the same size. @@ -710,7 +710,7 @@ struct MusicWindow : public Window { Dimension d = maxdim(GetStringBoundingBox(STR_MUSIC_PROGRAM), GetStringBoundingBox(STR_MUSIC_SHUFFLE)); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -718,7 +718,7 @@ struct MusicWindow : public Window { Dimension d = GetStringBoundingBox(STR_MUSIC_TRACK_NONE); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -730,7 +730,7 @@ struct MusicWindow : public Window { } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 2a37224498..d6a15f44fa 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -116,21 +116,21 @@ void BaseNetworkContentDownloadStatusWindow::Close([[maybe_unused]] int data) this->Window::Close(); } -void BaseNetworkContentDownloadStatusWindow::UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) +void BaseNetworkContentDownloadStatusWindow::UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) { switch (widget) { case WID_NCDS_PROGRESS_BAR: SetDParamMaxDigits(0, 8); SetDParamMaxDigits(1, 8); SetDParamMaxDigits(2, 8); - *size = GetStringBoundingBox(STR_CONTENT_DOWNLOAD_PROGRESS_SIZE); + size = GetStringBoundingBox(STR_CONTENT_DOWNLOAD_PROGRESS_SIZE); /* We need some spacing for the 'border' */ - size->height += WidgetDimensions::scaled.frametext.Horizontal(); - size->width += WidgetDimensions::scaled.frametext.Vertical(); + size.height += WidgetDimensions::scaled.frametext.Horizontal(); + size.width += WidgetDimensions::scaled.frametext.Vertical(); break; case WID_NCDS_PROGRESS_TEXT: - size->height = GetCharacterHeight(FS_NORMAL) * 2 + WidgetDimensions::scaled.vsep_normal; + size.height = GetCharacterHeight(FS_NORMAL) * 2 + WidgetDimensions::scaled.vsep_normal; break; } } @@ -585,25 +585,25 @@ public: this->checkbox_size = maxdim(maxdim(GetSpriteSize(SPR_BOX_EMPTY), GetSpriteSize(SPR_BOX_CHECKED)), GetSpriteSize(SPR_BLOT)); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_NCL_CHECKBOX: - size->width = this->checkbox_size.width + padding.width; + size.width = this->checkbox_size.width + padding.width; break; case WID_NCL_TYPE: { - Dimension d = *size; + Dimension d = size; for (int i = CONTENT_TYPE_BEGIN; i < CONTENT_TYPE_END; i++) { d = maxdim(d, GetStringBoundingBox(STR_CONTENT_TYPE_BASE_GRAPHICS + i - CONTENT_TYPE_BASE_GRAPHICS)); } - size->width = d.width + padding.width; + size.width = d.width + padding.width; break; } case WID_NCL_MATRIX: - resize->height = std::max(this->checkbox_size.height, (uint)GetCharacterHeight(FS_NORMAL)) + padding.height; - size->height = 10 * resize->height; + resize.height = std::max(this->checkbox_size.height, (uint)GetCharacterHeight(FS_NORMAL)) + padding.height; + size.height = 10 * resize.height; break; } } diff --git a/src/network/network_content_gui.h b/src/network/network_content_gui.h index 5af46a59aa..a0f014e239 100644 --- a/src/network/network_content_gui.h +++ b/src/network/network_content_gui.h @@ -33,7 +33,7 @@ public: BaseNetworkContentDownloadStatusWindow(WindowDesc *desc); void Close([[maybe_unused]] int data = 0) override; - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override; + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override; void DrawWidget(const Rect &r, WidgetID widget) const override; void OnDownloadProgress(const ContentInfo *ci, int bytes) override; }; diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index aa9940c936..54584a1a51 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -475,48 +475,48 @@ public: this->flag_offset = this->blot_offset + ScaleGUITrad(2) + GetSpriteSize(SPR_BLOT).width; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_NG_MATRIX: - resize->height = std::max(GetSpriteSize(SPR_BLOT).height, (uint)GetCharacterHeight(FS_NORMAL)) + padding.height; - fill->height = resize->height; - size->height = 12 * resize->height; + resize.height = std::max(GetSpriteSize(SPR_BLOT).height, (uint)GetCharacterHeight(FS_NORMAL)) + padding.height; + fill.height = resize.height; + size.height = 12 * resize.height; break; case WID_NG_LASTJOINED: - size->height = std::max(GetSpriteSize(SPR_BLOT).height, (uint)GetCharacterHeight(FS_NORMAL)) + WidgetDimensions::scaled.matrix.Vertical(); + size.height = std::max(GetSpriteSize(SPR_BLOT).height, (uint)GetCharacterHeight(FS_NORMAL)) + WidgetDimensions::scaled.matrix.Vertical(); break; case WID_NG_LASTJOINED_SPACER: - size->width = NWidgetScrollbar::GetVerticalDimension().width; + size.width = NWidgetScrollbar::GetVerticalDimension().width; break; case WID_NG_NAME: - size->width += 2 * Window::SortButtonWidth(); // Make space for the arrow + size.width += 2 * Window::SortButtonWidth(); // Make space for the arrow break; case WID_NG_CLIENTS: - size->width += 2 * Window::SortButtonWidth(); // Make space for the arrow + size.width += 2 * Window::SortButtonWidth(); // Make space for the arrow SetDParamMaxValue(0, MAX_CLIENTS); SetDParamMaxValue(1, MAX_CLIENTS); SetDParamMaxValue(2, MAX_COMPANIES); SetDParamMaxValue(3, MAX_COMPANIES); - *size = maxdim(*size, GetStringBoundingBox(STR_NETWORK_SERVER_LIST_GENERAL_ONLINE)); + size = maxdim(size, GetStringBoundingBox(STR_NETWORK_SERVER_LIST_GENERAL_ONLINE)); break; case WID_NG_MAPSIZE: - size->width += 2 * Window::SortButtonWidth(); // Make space for the arrow + size.width += 2 * Window::SortButtonWidth(); // Make space for the arrow SetDParamMaxValue(0, MAX_MAP_SIZE); SetDParamMaxValue(1, MAX_MAP_SIZE); - *size = maxdim(*size, GetStringBoundingBox(STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT)); + size = maxdim(size, GetStringBoundingBox(STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT)); break; case WID_NG_DATE: case WID_NG_YEARS: - size->width += 2 * Window::SortButtonWidth(); // Make space for the arrow + size.width += 2 * Window::SortButtonWidth(); // Make space for the arrow SetDParamMaxValue(0, 5); - *size = maxdim(*size, GetStringBoundingBox(STR_JUST_INT)); + size = maxdim(size, GetStringBoundingBox(STR_JUST_INT)); break; } } @@ -1010,13 +1010,13 @@ struct NetworkStartServerWindow : public Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_NSS_CONNTYPE_BTN: - *size = maxdim(maxdim(GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_LOCAL), GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_PUBLIC)), GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY)); - size->width += padding.width; - size->height += padding.height; + size = maxdim(maxdim(GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_LOCAL), GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_PUBLIC)), GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY)); + size.width += padding.width; + size.height += padding.height; break; } } @@ -1673,7 +1673,7 @@ public: this->SetWidgetDisabledState(WID_CL_SERVER_NAME_EDIT, !_network_server); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_CL_SERVER_NAME: @@ -1684,14 +1684,14 @@ public: const NetworkClientInfo *own_ci = NetworkClientInfo::GetByClientID(_network_own_client_id); SetDParamStr(0, own_ci != nullptr ? own_ci->client_name : _settings_client.network.client_name); } - *size = GetStringBoundingBox(STR_JUST_RAW_STRING); - size->width = std::min(size->width, static_cast(ScaleGUITrad(200))); // By default, don't open the window too wide. + size = GetStringBoundingBox(STR_JUST_RAW_STRING); + size.width = std::min(size.width, static_cast(ScaleGUITrad(200))); // By default, don't open the window too wide. break; case WID_CL_SERVER_VISIBILITY: - *size = maxdim(maxdim(GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_LOCAL), GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_PUBLIC)), GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY)); - size->width += padding.width; - size->height += padding.height; + size = maxdim(maxdim(GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_LOCAL), GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_PUBLIC)), GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY)); + size.width += padding.width; + size.height += padding.height; break; case WID_CL_MATRIX: { @@ -1699,10 +1699,10 @@ public: height += WidgetDimensions::scaled.framerect.Vertical(); this->line_height = std::max(height, (uint)GetCharacterHeight(FS_NORMAL)) + padding.height; - resize->width = 1; - resize->height = this->line_height; - fill->height = this->line_height; - size->height = std::max(size->height, 5 * this->line_height); + resize.width = 1; + resize.height = this->line_height; + fill.height = this->line_height; + size.height = std::max(size.height, 5 * this->line_height); break; } } @@ -2162,28 +2162,28 @@ struct NetworkJoinStatusWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_NJS_PROGRESS_BAR: /* Account for the statuses */ for (uint i = 0; i < NETWORK_JOIN_STATUS_END; i++) { - *size = maxdim(*size, GetStringBoundingBox(STR_NETWORK_CONNECTING_1 + i)); + size = maxdim(size, GetStringBoundingBox(STR_NETWORK_CONNECTING_1 + i)); } /* For the number of waiting (other) players */ SetDParamMaxValue(0, MAX_CLIENTS); - *size = maxdim(*size, GetStringBoundingBox(STR_NETWORK_CONNECTING_WAITING)); + size = maxdim(size, GetStringBoundingBox(STR_NETWORK_CONNECTING_WAITING)); /* We need some spacing for the 'border' */ - size->height += WidgetDimensions::scaled.frametext.Horizontal(); - size->width += WidgetDimensions::scaled.frametext.Vertical(); + size.height += WidgetDimensions::scaled.frametext.Horizontal(); + size.width += WidgetDimensions::scaled.frametext.Vertical(); break; case WID_NJS_PROGRESS_TEXT: /* Account for downloading ~ 10 MiB */ SetDParamMaxDigits(0, 8); SetDParamMaxDigits(1, 8); - *size = maxdim(*size, GetStringBoundingBox(STR_NETWORK_CONNECTING_DOWNLOADING_1)); - *size = maxdim(*size, GetStringBoundingBox(STR_NETWORK_CONNECTING_DOWNLOADING_1)); + size = maxdim(size, GetStringBoundingBox(STR_NETWORK_CONNECTING_DOWNLOADING_1)); + size = maxdim(size, GetStringBoundingBox(STR_NETWORK_CONNECTING_DOWNLOADING_1)); break; } } @@ -2273,10 +2273,10 @@ struct NetworkCompanyPasswordWindow : public Window { this->ReInit(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_NCP_WARNING) { - *size = this->warning_size; + size = this->warning_size; } } @@ -2379,10 +2379,10 @@ struct NetworkAskRelayWindow : public Window { this->Window::Close(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_NAR_TEXT) { - *size = GetStringBoundingBox(STR_NETWORK_ASK_RELAY_TEXT); + size = GetStringBoundingBox(STR_NETWORK_ASK_RELAY_TEXT); } } @@ -2482,10 +2482,10 @@ struct NetworkAskSurveyWindow : public Window { this->InitNested(0); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_NAS_TEXT) { - *size = GetStringBoundingBox(STR_NETWORK_ASK_SURVEY_TEXT); + size = GetStringBoundingBox(STR_NETWORK_ASK_SURVEY_TEXT); } } diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index 95695ab294..e19ccba54b 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -357,21 +357,21 @@ struct NewGRFInspectWindow : Window { GetFeatureHelper(this->window_number)->SetStringParameters(this->GetFeatureIndex()); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_NGRFI_VEH_CHAIN: { assert(this->HasChainIndex()); GrfSpecFeature f = GetFeatureNum(this->window_number); - size->height = std::max(size->height, GetVehicleImageCellSize((VehicleType)(VEH_TRAIN + (f - GSF_TRAINS)), EIT_IN_DEPOT).height + 2 + WidgetDimensions::scaled.bevel.Vertical()); + size.height = std::max(size.height, GetVehicleImageCellSize((VehicleType)(VEH_TRAIN + (f - GSF_TRAINS)), EIT_IN_DEPOT).height + 2 + WidgetDimensions::scaled.bevel.Vertical()); break; } case WID_NGRFI_MAINPANEL: - resize->height = std::max(11, GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal); - resize->width = 1; + resize.height = std::max(11, GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal); + resize.width = 1; - size->height = 5 * resize->height + WidgetDimensions::scaled.frametext.Vertical(); + size.height = 5 * resize.height + WidgetDimensions::scaled.frametext.Vertical(); break; } } @@ -882,11 +882,11 @@ struct SpriteAlignerWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_SA_SPRITE: - size->height = ScaleGUITrad(200); + size.height = ScaleGUITrad(200); break; case WID_SA_LIST: { @@ -896,10 +896,10 @@ struct SpriteAlignerWindow : Window { SetDParamMaxDigits(1, 6); d = maxdim(d, GetStringBoundingBox(STR_SPRITE_ALIGNER_SPRITE)); } - size->width = d.width + padding.width; - resize->height = GetCharacterHeight(FS_NORMAL) + padding.height; - resize->width = 1; - fill->height = resize->height; + size.width = d.width + padding.width; + resize.height = GetCharacterHeight(FS_NORMAL) + padding.height; + resize.width = 1; + fill.height = resize.height; break; } diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index e311fad3c6..ef8950a5ce 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -210,13 +210,13 @@ struct NewGRFParametersWindow : public Window { return this->HasParameterInfo(nr) ? this->grf_config->param_info[nr].value() : GetDummyParameterInfo(nr); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_NP_NUMPAR_DEC: case WID_NP_NUMPAR_INC: { - size->width = std::max(SETTING_BUTTON_WIDTH / 2, GetCharacterHeight(FS_NORMAL)); - size->height = std::max(SETTING_BUTTON_HEIGHT, GetCharacterHeight(FS_NORMAL)); + size.width = std::max(SETTING_BUTTON_WIDTH / 2, GetCharacterHeight(FS_NORMAL)); + size.height = std::max(SETTING_BUTTON_HEIGHT, GetCharacterHeight(FS_NORMAL)); break; } @@ -225,16 +225,16 @@ struct NewGRFParametersWindow : public Window { Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_NP_BACKGROUND: this->line_height = std::max(SETTING_BUTTON_HEIGHT, GetCharacterHeight(FS_NORMAL)) + padding.height; - resize->width = 1; - resize->height = this->line_height; - size->height = 5 * this->line_height; + resize.width = 1; + resize.height = this->line_height; + size.height = 5 * this->line_height; break; case WID_NP_DESCRIPTION: @@ -248,7 +248,7 @@ struct NewGRFParametersWindow : public Window { d.height += WidgetDimensions::scaled.frametext.Vertical(); suggestion = maxdim(d, suggestion); } - size->height = suggestion.height; + size.height = suggestion.height; break; } } @@ -743,34 +743,34 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_NS_FILE_LIST: { Dimension d = maxdim(GetScaledSpriteSize(SPR_SQUARE), GetScaledSpriteSize(SPR_WARNING_SIGN)); - resize->height = std::max(d.height + 2U, GetCharacterHeight(FS_NORMAL)); - size->height = std::max(size->height, padding.height + 6 * resize->height); + resize.height = std::max(d.height + 2U, GetCharacterHeight(FS_NORMAL)); + size.height = std::max(size.height, padding.height + 6 * resize.height); break; } case WID_NS_AVAIL_LIST: { Dimension d = maxdim(GetScaledSpriteSize(SPR_SQUARE), GetScaledSpriteSize(SPR_WARNING_SIGN)); - resize->height = std::max(d.height + 2U, GetCharacterHeight(FS_NORMAL)); - size->height = std::max(size->height, padding.height + 8 * resize->height); + resize.height = std::max(d.height + 2U, GetCharacterHeight(FS_NORMAL)); + size.height = std::max(size.height, padding.height + 8 * resize.height); break; } case WID_NS_NEWGRF_INFO_TITLE: { Dimension dim = GetStringBoundingBox(STR_NEWGRF_SETTINGS_INFO_TITLE); - size->height = std::max(size->height, dim.height + WidgetDimensions::scaled.frametext.Vertical()); - size->width = std::max(size->width, dim.width + WidgetDimensions::scaled.frametext.Horizontal()); + size.height = std::max(size.height, dim.height + WidgetDimensions::scaled.frametext.Vertical()); + size.width = std::max(size.width, dim.width + WidgetDimensions::scaled.frametext.Horizontal()); break; } case WID_NS_NEWGRF_INFO: - size->height = std::max(size->height, WidgetDimensions::scaled.framerect.Vertical() + 10 * GetCharacterHeight(FS_NORMAL)); + size.height = std::max(size.height, WidgetDimensions::scaled.framerect.Vertical() + 10 * GetCharacterHeight(FS_NORMAL)); break; case WID_NS_PRESET_LIST: { @@ -780,16 +780,16 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { d = maxdim(d, GetStringBoundingBox(STR_JUST_RAW_STRING)); } d.width += padding.width; - *size = maxdim(d, *size); + size = maxdim(d, size); break; } case WID_NS_CONTENT_DOWNLOAD: case WID_NS_CONTENT_DOWNLOAD2: { Dimension d = GetStringBoundingBox(STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON); - *size = maxdim(d, GetStringBoundingBox(STR_INTRO_ONLINE_CONTENT)); - size->width += padding.width; - size->height += padding.height; + size = maxdim(d, GetStringBoundingBox(STR_INTRO_ONLINE_CONTENT)); + size.width += padding.width; + size.height += padding.height; break; } } @@ -2099,18 +2099,18 @@ struct SavePresetWindow : public Window { { } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_SVP_PRESET_LIST: { - resize->height = GetCharacterHeight(FS_NORMAL); - size->height = 0; + resize.height = GetCharacterHeight(FS_NORMAL); + size.height = 0; for (uint i = 0; i < this->presets.size(); i++) { Dimension d = GetStringBoundingBox(this->presets[i]); - size->width = std::max(size->width, d.width + padding.width); - resize->height = std::max(resize->height, d.height); + size.width = std::max(size.width, d.width + padding.width); + resize.height = std::max(resize.height, d.height); } - size->height = ClampU((uint)this->presets.size(), 5, 20) * resize->height + padding.height; + size.height = ClampU((uint)this->presets.size(), 5, 20) * resize.height + padding.height; break; } } @@ -2214,15 +2214,15 @@ struct ScanProgressWindow : public Window { this->InitNested(1); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_SP_PROGRESS_BAR: { SetDParamMaxValue(0, 100); - *size = GetStringBoundingBox(STR_GENERATION_PROGRESS); + size = GetStringBoundingBox(STR_GENERATION_PROGRESS); /* We need some spacing for the 'border' */ - size->height += WidgetDimensions::scaled.frametext.Horizontal(); - size->width += WidgetDimensions::scaled.frametext.Vertical(); + size.height += WidgetDimensions::scaled.frametext.Horizontal(); + size.width += WidgetDimensions::scaled.frametext.Vertical(); break; } @@ -2231,8 +2231,8 @@ struct ScanProgressWindow : public Window { SetDParamMaxDigits(1, 4); /* We really don't know the width. We could determine it by scanning the NewGRFs, * but this is the status window for scanning them... */ - size->width = std::max(size->width, GetStringBoundingBox(STR_NEWGRF_SCAN_STATUS).width + padding.width); - size->height = GetCharacterHeight(FS_NORMAL) * 2 + WidgetDimensions::scaled.vsep_normal; + size.width = std::max(size.width, GetStringBoundingBox(STR_NEWGRF_SCAN_STATUS).width + padding.width); + size.height = GetCharacterHeight(FS_NORMAL) * 2 + WidgetDimensions::scaled.vsep_normal; break; } } diff --git a/src/news_gui.cpp b/src/news_gui.cpp index e90772f170..8e8d98f261 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -358,7 +358,7 @@ struct NewsWindow : Window { return pt; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { StringID str = STR_NULL; switch (widget) { @@ -367,12 +367,12 @@ struct NewsWindow : Window { * thus it doesn't get the default sizing of a caption. */ Dimension d2 = GetStringBoundingBox(STR_NEWS_MESSAGE_CAPTION); d2.height += WidgetDimensions::scaled.captiontext.Vertical(); - *size = maxdim(*size, d2); + size = maxdim(size, d2); return; } case WID_N_MGR_FACE: - *size = maxdim(*size, GetScaledSpriteSize(SPR_GRADIENT)); + size = maxdim(size, GetScaledSpriteSize(SPR_GRADIENT)); break; case WID_N_MGR_NAME: @@ -406,15 +406,15 @@ struct NewsWindow : Window { Dimension d2 = GetStringBoundingBox(this->GetWidget(WID_N_SHOW_GROUP)->widget_data); d2.height += WidgetDimensions::scaled.captiontext.Vertical(); d2.width += WidgetDimensions::scaled.captiontext.Horizontal(); - *size = d2; + size = d2; } else { /* Hide 'Show group window' button if this news is not about a vehicle. */ - size->width = 0; - size->height = 0; - resize->width = 0; - resize->height = 0; - fill->width = 0; - fill->height = 0; + size.width = 0; + size.height = 0; + resize.width = 0; + resize.height = 0; + fill.width = 0; + fill.height = 0; } return; @@ -423,13 +423,13 @@ struct NewsWindow : Window { } /* Update minimal size with length of the multi-line string. */ - Dimension d = *size; + Dimension d = size; d.width = (d.width >= padding.width) ? d.width - padding.width : 0; d.height = (d.height >= padding.height) ? d.height - padding.height : 0; d = GetStringMultiLineBoundingBox(str, d); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); } void SetStringParameters(WidgetID widget) const override @@ -1099,19 +1099,19 @@ struct MessageHistoryWindow : Window { this->OnInvalidateData(0); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_MH_BACKGROUND) { this->line_height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal; - resize->height = this->line_height; + resize.height = this->line_height; /* Months are off-by-one, so it's actually 8. Not using * month 12 because the 1 is usually less wide. */ SetDParam(0, TimerGameCalendar::ConvertYMDToDate(CalendarTime::ORIGINAL_MAX_YEAR, 7, 30)); this->date_width = GetStringBoundingBox(STR_JUST_DATE_TINY).width + WidgetDimensions::scaled.hsep_wide; - size->height = 4 * resize->height + WidgetDimensions::scaled.framerect.Vertical(); // At least 4 lines are visible. - size->width = std::max(200u, size->width); // At least 200 pixels wide. + size.height = 4 * resize.height + WidgetDimensions::scaled.framerect.Vertical(); // At least 4 lines are visible. + size.width = std::max(200u, size.width); // At least 200 pixels wide. } } diff --git a/src/object_gui.cpp b/src/object_gui.cpp index 8d1880723a..7ea9fd37df 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -212,25 +212,25 @@ public: this->object_margin = ScaleGUITrad(4); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_BO_CLASS_LIST: { for (auto object_class_id : this->object_classes) { ObjectClass *objclass = ObjectClass::Get(object_class_id); if (objclass->GetUISpecCount() == 0) continue; - size->width = std::max(size->width, GetStringBoundingBox(objclass->name).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(objclass->name).width + padding.width); } this->line_height = GetCharacterHeight(FS_NORMAL) + padding.height; - resize->height = this->line_height; - size->height = 5 * this->line_height; + resize.height = this->line_height; + size.height = 5 * this->line_height; break; } case WID_BO_OBJECT_NAME: case WID_BO_OBJECT_SIZE: /* We do not want the window to resize when selecting objects; better clip texts */ - size->width = 0; + size.width = 0; break; case WID_BO_OBJECT_MATRIX: { @@ -238,11 +238,11 @@ public: ObjectClass *objclass = ObjectClass::Get(_selected_object_class); const ObjectSpec *spec = objclass->GetSpec(_selected_object_index); if (spec != nullptr) { - if (spec->views >= 2) size->width += resize->width; - if (spec->views >= 4) size->height += resize->height; + if (spec->views >= 2) size.width += resize.width; + if (spec->views >= 4) size.height += resize.height; } - resize->width = 0; - resize->height = 0; + resize.width = 0; + resize.height = 0; break; } @@ -267,37 +267,37 @@ public: * we want these columns to be slightly less wide. When there are two rows, then * determine the size of the widgets based on the maximum size for a single row * of widgets, or just the twice the widget height of the two row ones. */ - size->height = std::max(height[0], height[1] * 2); + size.height = std::max(height[0], height[1] * 2); if (two_wide) { - size->width = (3 * ScaleGUITrad(TILE_PIXELS) + 2 * this->object_margin) * 2; + size.width = (3 * ScaleGUITrad(TILE_PIXELS) + 2 * this->object_margin) * 2; } else { - size->width = 4 * ScaleGUITrad(TILE_PIXELS) + 2 * this->object_margin; + size.width = 4 * ScaleGUITrad(TILE_PIXELS) + 2 * this->object_margin; } /* Get the right size for the single widget based on the current spec. */ ObjectClass *objclass = ObjectClass::Get(_selected_object_class); const ObjectSpec *spec = objclass->GetSpec(_selected_object_index); if (spec != nullptr) { - if (spec->views <= 1) size->width += WidgetDimensions::scaled.hsep_normal; - if (spec->views <= 2) size->height += WidgetDimensions::scaled.vsep_normal; - if (spec->views >= 2) size->width /= 2; - if (spec->views >= 4) size->height /= 2; + if (spec->views <= 1) size.width += WidgetDimensions::scaled.hsep_normal; + if (spec->views <= 2) size.height += WidgetDimensions::scaled.vsep_normal; + if (spec->views >= 2) size.width /= 2; + if (spec->views >= 4) size.height /= 2; } break; } case WID_BO_INFO: - size->height = this->info_height; + size.height = this->info_height; break; case WID_BO_SELECT_MATRIX: - fill->height = 1; - resize->height = 1; + fill.height = 1; + resize.height = 1; break; case WID_BO_SELECT_IMAGE: - size->width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height = ScaleGUITrad(58) + WidgetDimensions::scaled.fullbevel.Vertical(); + size.width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height = ScaleGUITrad(58) + WidgetDimensions::scaled.fullbevel.Vertical(); break; default: break; diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 95d0d6f941..44979fd75a 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -836,12 +836,12 @@ public: this->OnInvalidateData(VIWD_MODIFY_ORDERS); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_O_ORDER_LIST: - resize->height = GetCharacterHeight(FS_NORMAL); - size->height = 6 * resize->height + padding.height; + resize.height = GetCharacterHeight(FS_NORMAL); + size.height = 6 * resize.height + padding.height; break; case WID_O_COND_VARIABLE: { @@ -851,7 +851,7 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -862,7 +862,7 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 16a0e985b6..a3ebd0843d 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1236,7 +1236,7 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_BRAS_NEWST_LIST: { @@ -1244,17 +1244,17 @@ public: for (auto station_class : this->station_classes) { d = maxdim(d, GetStringBoundingBox(StationClass::Get(station_class)->name)); } - size->width = std::max(size->width, d.width + padding.width); + size.width = std::max(size.width, d.width + padding.width); this->line_height = GetCharacterHeight(FS_NORMAL) + padding.height; - size->height = 5 * this->line_height; - resize->height = this->line_height; + size.height = 5 * this->line_height; + resize.height = this->line_height; break; } case WID_BRAS_SHOW_NEWST_TYPE: { if (!_railstation.newstations) { - size->width = 0; - size->height = 0; + size.width = 0; + size.height = 0; break; } @@ -1269,24 +1269,24 @@ public: d = maxdim(d, GetStringBoundingBox(str)); } } - size->width = std::max(size->width, d.width + padding.width); + size.width = std::max(size.width, d.width + padding.width); break; } case WID_BRAS_PLATFORM_DIR_X: case WID_BRAS_PLATFORM_DIR_Y: case WID_BRAS_IMAGE: - size->width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height = ScaleGUITrad(58) + WidgetDimensions::scaled.fullbevel.Vertical(); + size.width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height = ScaleGUITrad(58) + WidgetDimensions::scaled.fullbevel.Vertical(); break; case WID_BRAS_COVERAGE_TEXTS: - size->height = this->coverage_height; + size.height = this->coverage_height; break; case WID_BRAS_MATRIX: - fill->height = 1; - resize->height = 1; + fill.height = 1; + resize.height = 1; break; } } @@ -1752,14 +1752,14 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_BS_DRAG_SIGNALS_DENSITY_LABEL) { /* Two digits for signals density. */ - size->width = std::max(size->width, 2 * GetDigitWidth() + padding.width + WidgetDimensions::scaled.framerect.Horizontal()); + size.width = std::max(size.width, 2 * GetDigitWidth() + padding.width + WidgetDimensions::scaled.framerect.Horizontal()); } else if (IsInsideMM(widget, WID_BS_SEMAPHORE_NORM, WID_BS_ELECTRIC_PBS_OWAY + 1)) { - size->width = std::max(size->width, this->sig_sprite_size.width + padding.width); - size->height = std::max(size->height, this->sig_sprite_size.height + padding.height); + size.width = std::max(size.width, this->sig_sprite_size.width + padding.width); + size.height = std::max(size.height, this->sig_sprite_size.height + padding.height); } } @@ -1951,12 +1951,12 @@ struct BuildRailDepotWindow : public PickerWindowBase { this->LowerWidget(WID_BRAD_DEPOT_NE + _build_depot_direction); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (!IsInsideMM(widget, WID_BRAD_DEPOT_NE, WID_BRAD_DEPOT_NW + 1)) return; - size->width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height = ScaleGUITrad(48) + WidgetDimensions::scaled.fullbevel.Vertical(); + size.width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height = ScaleGUITrad(48) + WidgetDimensions::scaled.fullbevel.Vertical(); } void DrawWidget(const Rect &r, WidgetID widget) const override @@ -2106,21 +2106,21 @@ struct BuildRailWaypointWindow : PickerWindowBase { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_BRW_WAYPOINT_MATRIX: /* Two blobs high and three wide. */ - size->width += resize->width * 2; - size->height += resize->height * 1; + size.width += resize.width * 2; + size.height += resize.height * 1; /* Resizing in X direction only at blob size, but at pixel level in Y. */ - resize->height = 1; + resize.height = 1; break; case WID_BRW_WAYPOINT: - size->width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height = ScaleGUITrad(58) + WidgetDimensions::scaled.fullbevel.Vertical(); + size.width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height = ScaleGUITrad(58) + WidgetDimensions::scaled.fullbevel.Vertical(); break; } } diff --git a/src/road_gui.cpp b/src/road_gui.cpp index e966d9b770..6bc38298ce 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -1020,12 +1020,12 @@ struct BuildRoadDepotWindow : public PickerWindowBase { this->FinishInitNested(TRANSPORT_ROAD); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (!IsInsideMM(widget, WID_BROD_DEPOT_NE, WID_BROD_DEPOT_NW + 1)) return; - size->width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height = ScaleGUITrad(48) + WidgetDimensions::scaled.fullbevel.Vertical(); + size.width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height = ScaleGUITrad(48) + WidgetDimensions::scaled.fullbevel.Vertical(); } void DrawWidget(const Rect &r, WidgetID widget) const override @@ -1354,7 +1354,7 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_BROS_NEWST_LIST: { @@ -1362,10 +1362,10 @@ public: for (auto rs_class : this->roadstop_classes) { d = maxdim(d, GetStringBoundingBox(RoadStopClass::Get(rs_class)->name)); } - size->width = std::max(size->width, d.width + padding.width); + size.width = std::max(size.width, d.width + padding.width); this->line_height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.matrix.Vertical(); - size->height = 5 * this->line_height; - resize->height = this->line_height; + size.height = 5 * this->line_height; + resize.height = this->line_height; break; } @@ -1380,7 +1380,7 @@ public: d = maxdim(d, GetStringBoundingBox(str)); } } - size->width = std::max(size->width, d.width + padding.width); + size.width = std::max(size.width, d.width + padding.width); break; } @@ -1391,17 +1391,17 @@ public: case WID_BROS_STATION_X: case WID_BROS_STATION_Y: case WID_BROS_IMAGE: - size->width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height = ScaleGUITrad(48) + WidgetDimensions::scaled.fullbevel.Vertical(); + size.width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height = ScaleGUITrad(48) + WidgetDimensions::scaled.fullbevel.Vertical(); break; case WID_BROS_MATRIX: - fill->height = 1; - resize->height = 1; + fill.height = 1; + resize.height = 1; break; case WID_BROS_ACCEPTANCE: - size->height = this->coverage_height; + size.height = this->coverage_height; break; } } diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp index 21d0a5af0a..9706426a6a 100644 --- a/src/script/script_gui.cpp +++ b/src/script/script_gui.cpp @@ -103,15 +103,15 @@ struct ScriptListWindow : public Window { SetDParam(0, (this->slot == OWNER_DEITY) ? STR_AI_LIST_CAPTION_GAMESCRIPT : STR_AI_LIST_CAPTION_AI); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_SCRL_LIST) return; this->line_height = GetCharacterHeight(FS_NORMAL) + padding.height; - resize->width = 1; - resize->height = this->line_height; - size->height = 5 * this->line_height; + resize.width = 1; + resize.height = this->line_height; + size.height = 5 * this->line_height; } void DrawWidget(const Rect &r, WidgetID widget) const override @@ -341,15 +341,15 @@ struct ScriptSettingsWindow : public Window { SetDParam(0, (this->slot == OWNER_DEITY) ? STR_AI_SETTINGS_CAPTION_GAMESCRIPT : STR_AI_SETTINGS_CAPTION_AI); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_SCRS_BACKGROUND) return; this->line_height = std::max(SETTING_BUTTON_HEIGHT, GetCharacterHeight(FS_NORMAL)) + padding.height; - resize->width = 1; - resize->height = this->line_height; - size->height = 5 * this->line_height; + resize.width = 1; + resize.height = this->line_height; + size.height = 5 * this->line_height; } void DrawWidget(const Rect &r, WidgetID widget) const override @@ -823,11 +823,11 @@ struct ScriptDebugWindow : public Window { ScriptDebugWindow::initial_state = this->filter; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_SCRD_LOG_PANEL) { - resize->height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal; - size->height = 14 * resize->height + WidgetDimensions::scaled.framerect.Vertical(); + resize.height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal; + size.height = 14 * resize.height + WidgetDimensions::scaled.framerect.Vertical(); } } diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index dbcd63755e..b188d429e6 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -648,7 +648,7 @@ struct GameOptionsWindow : Window { if (changed) this->ReInit(0, 0, this->flags & WF_CENTERED); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_GO_TEXT_SFX_VOLUME: @@ -656,7 +656,7 @@ struct GameOptionsWindow : Window { Dimension d = maxdim(GetStringBoundingBox(STR_GAME_OPTIONS_SFX_VOLUME), GetStringBoundingBox(STR_GAME_OPTIONS_MUSIC_VOLUME)); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -669,7 +669,7 @@ struct GameOptionsWindow : Window { case WID_GO_BASE_SFX_DROPDOWN: case WID_GO_BASE_MUSIC_DROPDOWN: { int selected; - size->width = std::max(size->width, GetDropDownListDimension(this->BuildDropDownList(widget, &selected)).width + padding.width); + size.width = std::max(size.width, GetDropDownListDimension(this->BuildDropDownList(widget, &selected)).width + padding.width); break; } } @@ -2364,14 +2364,14 @@ struct GameSettingsWindow : Window { _circle_size = maxdim(GetSpriteSize(SPR_CIRCLE_FOLDED), GetSpriteSize(SPR_CIRCLE_UNFOLDED)); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_GS_OPTIONSPANEL: - resize->height = SETTING_HEIGHT = std::max({(int)_circle_size.height, SETTING_BUTTON_HEIGHT, GetCharacterHeight(FS_NORMAL)}) + WidgetDimensions::scaled.vsep_normal; - resize->width = 1; + resize.height = SETTING_HEIGHT = std::max({(int)_circle_size.height, SETTING_BUTTON_HEIGHT, GetCharacterHeight(FS_NORMAL)}) + WidgetDimensions::scaled.vsep_normal; + resize.width = 1; - size->height = 5 * resize->height + WidgetDimensions::scaled.framerect.Vertical(); + size.height = 5 * resize.height + WidgetDimensions::scaled.framerect.Vertical(); break; case WID_GS_HELP_TEXT: { @@ -2382,16 +2382,16 @@ struct GameSettingsWindow : Window { }; for (uint i = 0; i < lengthof(setting_types); i++) { SetDParam(0, setting_types[i]); - size->width = std::max(size->width, GetStringBoundingBox(STR_CONFIG_SETTING_TYPE).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(STR_CONFIG_SETTING_TYPE).width + padding.width); } - size->height = 2 * GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal + - std::max(size->height, GetSettingsTree().GetMaxHelpHeight(size->width)); + size.height = 2 * GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal + + std::max(size.height, GetSettingsTree().GetMaxHelpHeight(size.width)); break; } case WID_GS_RESTRICT_CATEGORY: case WID_GS_RESTRICT_TYPE: - size->width = std::max(GetStringBoundingBox(STR_CONFIG_SETTING_RESTRICT_CATEGORY).width, GetStringBoundingBox(STR_CONFIG_SETTING_RESTRICT_TYPE).width); + size.width = std::max(GetStringBoundingBox(STR_CONFIG_SETTING_RESTRICT_CATEGORY).width, GetStringBoundingBox(STR_CONFIG_SETTING_RESTRICT_TYPE).width); break; default: @@ -3010,7 +3010,7 @@ struct CustomCurrencyWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { /* Set the appropriate width for the up/down buttons. */ @@ -3018,21 +3018,21 @@ struct CustomCurrencyWindow : Window { case WID_CC_RATE_UP: case WID_CC_YEAR_DOWN: case WID_CC_YEAR_UP: - *size = maxdim(*size, {(uint)SETTING_BUTTON_WIDTH / 2, (uint)SETTING_BUTTON_HEIGHT}); + size = maxdim(size, {(uint)SETTING_BUTTON_WIDTH / 2, (uint)SETTING_BUTTON_HEIGHT}); break; /* Set the appropriate width for the edit buttons. */ case WID_CC_SEPARATOR_EDIT: case WID_CC_PREFIX_EDIT: case WID_CC_SUFFIX_EDIT: - *size = maxdim(*size, {(uint)SETTING_BUTTON_WIDTH, (uint)SETTING_BUTTON_HEIGHT}); + size = maxdim(size, {(uint)SETTING_BUTTON_WIDTH, (uint)SETTING_BUTTON_HEIGHT}); break; /* Make sure the window is wide enough for the widest exchange rate */ case WID_CC_RATE: SetDParam(0, 1); SetDParam(1, INT32_MAX); - *size = GetStringBoundingBox(STR_CURRENCY_EXCHANGE_RATE); + size = GetStringBoundingBox(STR_CURRENCY_EXCHANGE_RATE); break; } } diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index fd327eb020..1556930029 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -263,23 +263,23 @@ struct SignListWindow : Window, SignList { this->vscroll->SetCapacityFromWidget(this, WID_SIL_LIST, WidgetDimensions::scaled.framerect.Vertical()); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_SIL_LIST: { Dimension spr_dim = GetSpriteSize(SPR_COMPANY_ICON); this->text_offset = WidgetDimensions::scaled.frametext.left + spr_dim.width + 2; // 2 pixels space between icon and the sign text. - resize->height = std::max(GetCharacterHeight(FS_NORMAL), spr_dim.height + 2); - Dimension d = {(uint)(this->text_offset + WidgetDimensions::scaled.frametext.right), padding.height + 5 * resize->height}; - *size = maxdim(*size, d); + resize.height = std::max(GetCharacterHeight(FS_NORMAL), spr_dim.height + 2); + Dimension d = {(uint)(this->text_offset + WidgetDimensions::scaled.frametext.right), padding.height + 5 * resize.height}; + size = maxdim(size, d); break; } case WID_SIL_CAPTION: SetDParamMaxValue(0, Sign::GetPoolSize(), 3); - *size = GetStringBoundingBox(STR_SIGN_LIST_CAPTION); - size->height += padding.height; - size->width += padding.width; + size = GetStringBoundingBox(STR_SIGN_LIST_CAPTION); + size.height += padding.height; + size.width += padding.width; break; } } diff --git a/src/station_gui.cpp b/src/station_gui.cpp index a9c45fb5da..d277fdbf1f 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -411,14 +411,14 @@ public: CompanyStationsWindow::initial_state = this->filter; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_STL_SORTBY: { Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better. d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -429,13 +429,13 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_STL_LIST: - resize->height = std::max(GetCharacterHeight(FS_NORMAL), GetCharacterHeight(FS_SMALL) + ScaleGUITrad(3)); - size->height = padding.height + 5 * resize->height; + resize.height = std::max(GetCharacterHeight(FS_NORMAL), GetCharacterHeight(FS_SMALL) + ScaleGUITrad(3)); + size.height = padding.height + 5 * resize.height; /* Determine appropriate width for mini station rating graph */ this->rating_width = 0; @@ -1392,25 +1392,25 @@ struct StationViewWindow : public Window { data->Update(count); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_SV_WAITING: - resize->height = GetCharacterHeight(FS_NORMAL); - size->height = 4 * resize->height + padding.height; + resize.height = GetCharacterHeight(FS_NORMAL); + size.height = 4 * resize.height + padding.height; this->expand_shrink_width = std::max(GetStringBoundingBox("-").width, GetStringBoundingBox("+").width); break; case WID_SV_ACCEPT_RATING_LIST: - size->height = ((this->GetWidget(WID_SV_ACCEPTS_RATINGS)->widget_data == STR_STATION_VIEW_RATINGS_BUTTON) ? this->accepts_lines : this->rating_lines) * GetCharacterHeight(FS_NORMAL) + padding.height; + size.height = ((this->GetWidget(WID_SV_ACCEPTS_RATINGS)->widget_data == STR_STATION_VIEW_RATINGS_BUTTON) ? this->accepts_lines : this->rating_lines) * GetCharacterHeight(FS_NORMAL) + padding.height; break; case WID_SV_CLOSE_AIRPORT: if (!(Station::Get(this->window_number)->facilities & FACIL_AIRPORT)) { /* Hide 'Close Airport' button if no airport present. */ - size->width = 0; - resize->width = 0; - fill->width = 0; + size.width = 0; + resize.width = 0; + fill.width = 0; } break; } @@ -2305,7 +2305,7 @@ struct SelectStationWindow : Window { this->Window::Close(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_JS_PANEL) return; @@ -2319,11 +2319,11 @@ struct SelectStationWindow : Window { d = maxdim(d, GetStringBoundingBox(T::EXPECTED_FACIL == FACIL_WAYPOINT ? STR_STATION_LIST_WAYPOINT : STR_STATION_LIST_STATION)); } - resize->height = d.height; + resize.height = d.height; d.height *= 5; d.width += padding.width; d.height += padding.height; - *size = d; + size = d; } void DrawWidget(const Rect &r, WidgetID widget) const override diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp index 69f12dbfdd..dd6e33da34 100644 --- a/src/statusbar_gui.cpp +++ b/src/statusbar_gui.cpp @@ -83,7 +83,7 @@ struct StatusBarWindow : Window { Window::FindWindowPlacementAndResize(_toolbar_width, def_height); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { Dimension d; switch (widget) { @@ -106,7 +106,7 @@ struct StatusBarWindow : Window { d.width += padding.width; d.height += padding.height; - *size = maxdim(d, *size); + size = maxdim(d, size); } void DrawWidget(const Rect &r, WidgetID widget) const override diff --git a/src/story_gui.cpp b/src/story_gui.cpp index 1ed4e950d9..9a91eb7128 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -751,7 +751,7 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_SB_SEL_PAGE && widget != WID_SB_PAGE_PANEL) return; @@ -780,14 +780,14 @@ public: d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_SB_PAGE_PANEL: { d.height *= 5; d.height += padding.height + WidgetDimensions::scaled.frametext.Vertical(); - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } diff --git a/src/subsidy_gui.cpp b/src/subsidy_gui.cpp index f43226d5f4..98c218e3b6 100644 --- a/src/subsidy_gui.cpp +++ b/src/subsidy_gui.cpp @@ -131,17 +131,17 @@ struct SubsidyListWindow : Window { return 3 + num_awarded + num_not_awarded; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_SUL_PANEL) return; Dimension d = maxdim(GetStringBoundingBox(STR_SUBSIDIES_OFFERED_TITLE), GetStringBoundingBox(STR_SUBSIDIES_SUBSIDISED_TITLE)); - resize->height = GetCharacterHeight(FS_NORMAL); + resize.height = GetCharacterHeight(FS_NORMAL); d.height *= 5; d.width += WidgetDimensions::scaled.framerect.Horizontal(); d.height += WidgetDimensions::scaled.framerect.Vertical(); - *size = maxdim(*size, d); + size = maxdim(size, d); } void DrawCargoIcon(const Rect &r, int y_offset, CargoID cid) const diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp index 6da19b9037..417c7fa427 100644 --- a/src/terraform_gui.cpp +++ b/src/terraform_gui.cpp @@ -553,12 +553,12 @@ struct ScenarioEditorLandscapeGenerationWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_ETT_DOTS) return; - size->width = std::max(size->width, ScaleGUITrad(59)); - size->height = std::max(size->height, ScaleGUITrad(31)); + size.width = std::max(size.width, ScaleGUITrad(59)); + size.height = std::max(size.height, ScaleGUITrad(31)); } void DrawWidget(const Rect &r, WidgetID widget) const override diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index 194c3c6a4c..bb6c2d876d 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -133,14 +133,14 @@ uint TextfileWindow::GetContentHeight() return this->lines.back().bottom; } -/* virtual */ void TextfileWindow::UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) +/* virtual */ void TextfileWindow::UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) { switch (widget) { case WID_TF_BACKGROUND: - resize->height = GetCharacterHeight(FS_MONO); + resize.height = GetCharacterHeight(FS_MONO); - size->height = 4 * resize->height + WidgetDimensions::scaled.frametext.Vertical(); // At least 4 lines are visible. - size->width = std::max(200u, size->width); // At least 200 pixels wide. + size.height = 4 * resize.height + WidgetDimensions::scaled.frametext.Vertical(); // At least 4 lines are visible. + size.width = std::max(200u, size.width); // At least 200 pixels wide. break; } } diff --git a/src/textfile_gui.h b/src/textfile_gui.h index 6376bd64c1..09d55a355d 100644 --- a/src/textfile_gui.h +++ b/src/textfile_gui.h @@ -23,7 +23,7 @@ struct TextfileWindow : public Window, MissingGlyphSearcher { Scrollbar *vscroll; ///< Vertical scrollbar. Scrollbar *hscroll; ///< Horizontal scrollbar. - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override; + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override; void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override; void DrawWidget(const Rect &r, WidgetID widget) const override; void OnResize() override; diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index d55b7dc711..283dbd401e 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -248,7 +248,7 @@ struct TimetableWindow : Window { return (travelling && v->lateness_counter < 0); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_VT_ARRIVAL_DEPARTURE_PANEL: @@ -256,21 +256,21 @@ struct TimetableWindow : Window { if (_settings_client.gui.timetable_mode == TimetableMode::Seconds) { /* A five-digit number would fit a timetable lasting 2.7 real-world hours, which should be plenty. */ SetDParamMaxDigits(1, 4, FS_SMALL); - size->width = std::max(GetStringBoundingBox(STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE).width, GetStringBoundingBox(STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE).width) + WidgetDimensions::scaled.hsep_wide + padding.width; + size.width = std::max(GetStringBoundingBox(STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE).width, GetStringBoundingBox(STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE).width) + WidgetDimensions::scaled.hsep_wide + padding.width; } else { SetDParamMaxValue(1, TimerGameEconomy::DateAtStartOfYear(EconomyTime::MAX_YEAR), 0, FS_SMALL); - size->width = std::max(GetStringBoundingBox(STR_TIMETABLE_ARRIVAL_DATE).width, GetStringBoundingBox(STR_TIMETABLE_DEPARTURE_DATE).width) + WidgetDimensions::scaled.hsep_wide + padding.width; + size.width = std::max(GetStringBoundingBox(STR_TIMETABLE_ARRIVAL_DATE).width, GetStringBoundingBox(STR_TIMETABLE_DEPARTURE_DATE).width) + WidgetDimensions::scaled.hsep_wide + padding.width; } [[fallthrough]]; case WID_VT_ARRIVAL_DEPARTURE_SELECTION: case WID_VT_TIMETABLE_PANEL: - resize->height = GetCharacterHeight(FS_NORMAL); - size->height = 8 * resize->height + padding.height; + resize.height = GetCharacterHeight(FS_NORMAL); + size.height = 8 * resize.height + padding.height; break; case WID_VT_SUMMARY_PANEL: - size->height = 2 * GetCharacterHeight(FS_NORMAL) + padding.height; + size.height = 2 * GetCharacterHeight(FS_NORMAL) + padding.height; break; } } diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 26fcfa798d..58589da48c 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -2339,16 +2339,16 @@ struct ScenarioEditorToolbarWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_TE_SPACER: - size->width = std::max(GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_OPENTTD).width, GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR).width) + padding.width; + size.width = std::max(GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_OPENTTD).width, GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR).width) + padding.width; break; case WID_TE_DATE: SetDParam(0, TimerGameCalendar::ConvertYMDToDate(CalendarTime::MAX_YEAR, 0, 1)); - *size = GetStringBoundingBox(STR_JUST_DATE_LONG); + size = GetStringBoundingBox(STR_JUST_DATE_LONG); break; } } diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 14ddaa8619..29e8c5396f 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -256,34 +256,34 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_TA_ACTION_INFO: { - assert(size->width > padding.width && size->height > padding.height); + assert(size.width > padding.width && size.height > padding.height); Dimension d = {0, 0}; for (int i = 0; i < TACT_COUNT; i++) { SetDParam(0, _price[PR_TOWN_ACTION] * _town_action_costs[i] >> 8); - d = maxdim(d, GetStringMultiLineBoundingBox(this->action_tooltips[i], *size)); + d = maxdim(d, GetStringMultiLineBoundingBox(this->action_tooltips[i], size)); } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_TA_COMMAND_LIST: - size->height = (TACT_COUNT + 1) * GetCharacterHeight(FS_NORMAL) + padding.height; - size->width = GetStringBoundingBox(STR_LOCAL_AUTHORITY_ACTIONS_TITLE).width; + size.height = (TACT_COUNT + 1) * GetCharacterHeight(FS_NORMAL) + padding.height; + size.width = GetStringBoundingBox(STR_LOCAL_AUTHORITY_ACTIONS_TITLE).width; for (uint i = 0; i < TACT_COUNT; i++ ) { - size->width = std::max(size->width, GetStringBoundingBox(STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN + i).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN + i).width + padding.width); } - size->width += padding.width; + size.width += padding.width; break; case WID_TA_RATING_INFO: - resize->height = std::max({this->icon_size.height + WidgetDimensions::scaled.vsep_normal, this->exclusive_size.height + WidgetDimensions::scaled.vsep_normal, (uint)GetCharacterHeight(FS_NORMAL)}); - size->height = 9 * resize->height + padding.height; + resize.height = std::max({this->icon_size.height + WidgetDimensions::scaled.vsep_normal, this->exclusive_size.height + WidgetDimensions::scaled.vsep_normal, (uint)GetCharacterHeight(FS_NORMAL)}); + size.height = 9 * resize.height + padding.height; break; } } @@ -524,11 +524,11 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_TV_INFO: - size->height = GetDesiredInfoHeight(size->width) + padding.height; + size.height = GetDesiredInfoHeight(size.width) + padding.height; break; } } @@ -878,14 +878,14 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_TD_SORT_ORDER: { Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better. d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_TD_SORT_CRITERIA: { @@ -895,7 +895,7 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_TD_LIST: { @@ -912,11 +912,11 @@ public: Dimension icon_size = GetSpriteSize(SPR_TOWN_RATING_GOOD); d.width += icon_size.width + 2; d.height = std::max(d.height, icon_size.height); - resize->height = d.height; + resize.height = d.height; d.height *= 5; d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_TD_WORLD_POPULATION: { @@ -924,7 +924,7 @@ public: Dimension d = GetStringBoundingBox(STR_TOWN_POPULATION); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } diff --git a/src/tree_gui.cpp b/src/tree_gui.cpp index f8dd8f6bad..e751dba3f5 100644 --- a/src/tree_gui.cpp +++ b/src/tree_gui.cpp @@ -152,13 +152,13 @@ public: this->FinishInitNested(window_number); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget >= WID_BT_TYPE_BUTTON_FIRST) { /* Ensure tree type buttons are sized after the largest tree type */ Dimension d = GetMaxTreeSpriteSize(); - size->width = d.width + padding.width; - size->height = d.height + padding.height + ScaleGUITrad(BUTTON_BOTTOM_OFFSET); // we need some more space + size.width = d.width + padding.width; + size.height = d.height + padding.height + ScaleGUITrad(BUTTON_BOTTOM_OFFSET); // we need some more space } } diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 94fc106bae..7f4ce36146 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -916,20 +916,20 @@ struct RefitWindow : public Window { this->DrawWidgets(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_VR_MATRIX: - resize->height = GetCharacterHeight(FS_NORMAL) + padding.height; - size->height = resize->height * 8; + resize.height = GetCharacterHeight(FS_NORMAL) + padding.height; + size.height = resize.height * 8; break; case WID_VR_VEHICLE_PANEL_DISPLAY: - size->height = ScaleGUITrad(GetVehicleHeight(Vehicle::Get(this->window_number)->type)); + size.height = ScaleGUITrad(GetVehicleHeight(Vehicle::Get(this->window_number)->type)); break; case WID_VR_INFO: - size->width = this->information_width + padding.height; + size.width = this->information_width + padding.height; break; } } @@ -1901,20 +1901,20 @@ public: *this->sorting = this->vehgroups.GetListing(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_VL_LIST: - resize->height = GetVehicleListHeight(this->vli.vtype, 1); + resize.height = GetVehicleListHeight(this->vli.vtype, 1); switch (this->vli.vtype) { case VEH_TRAIN: case VEH_ROAD: - size->height = 6 * resize->height; + size.height = 6 * resize.height; break; case VEH_SHIP: case VEH_AIRCRAFT: - size->height = 4 * resize->height; + size.height = 4 * resize.height; break; default: NOT_REACHED(); } @@ -1924,31 +1924,31 @@ public: Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better. d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_VL_GROUP_BY_PULLDOWN: - size->width = GetStringListWidth(this->vehicle_group_by_names) + padding.width; + size.width = GetStringListWidth(this->vehicle_group_by_names) + padding.width; break; case WID_VL_SORT_BY_PULLDOWN: - size->width = GetStringListWidth(this->vehicle_group_none_sorter_names_calendar); - size->width = std::max(size->width, GetStringListWidth(this->vehicle_group_none_sorter_names_wallclock)); - size->width = std::max(size->width, GetStringListWidth(this->vehicle_group_shared_orders_sorter_names_calendar)); - size->width = std::max(size->width, GetStringListWidth(this->vehicle_group_shared_orders_sorter_names_wallclock)); - size->width += padding.width; + size.width = GetStringListWidth(this->vehicle_group_none_sorter_names_calendar); + size.width = std::max(size.width, GetStringListWidth(this->vehicle_group_none_sorter_names_wallclock)); + size.width = std::max(size.width, GetStringListWidth(this->vehicle_group_shared_orders_sorter_names_calendar)); + size.width = std::max(size.width, GetStringListWidth(this->vehicle_group_shared_orders_sorter_names_wallclock)); + size.width += padding.width; break; case WID_VL_FILTER_BY_CARGO: - size->width = std::max(size->width, GetDropDownListDimension(this->BuildCargoDropDownList(true)).width + padding.width); + size.width = std::max(size.width, GetDropDownListDimension(this->BuildCargoDropDownList(true)).width + padding.width); break; case WID_VL_MANAGE_VEHICLES_DROPDOWN: { Dimension d = this->GetActionDropdownSize(this->vli.type == VL_STANDARD, false, true); d.height += padding.height; d.width += padding.width; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } @@ -2424,12 +2424,12 @@ struct VehicleDetailsWindow : Window { return desired_height; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_VD_TOP_DETAILS: { Dimension dim = { 0, 0 }; - size->height = 4 * GetCharacterHeight(FS_NORMAL) + padding.height; + size.height = 4 * GetCharacterHeight(FS_NORMAL) + padding.height; for (uint i = 0; i < 4; i++) SetDParamMaxValue(i, INT16_MAX); static const StringID info_strings[] = { @@ -2445,7 +2445,7 @@ struct VehicleDetailsWindow : Window { } SetDParam(0, STR_VEHICLE_INFO_AGE); dim = maxdim(dim, GetStringBoundingBox(TimerGameEconomy::UsingWallclockUnits() ? STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD : STR_VEHICLE_INFO_AGE_RUNNING_COST_YR)); - size->width = dim.width + padding.width; + size.width = dim.width + padding.width; break; } @@ -2453,15 +2453,15 @@ struct VehicleDetailsWindow : Window { const Vehicle *v = Vehicle::Get(this->window_number); switch (v->type) { case VEH_ROAD: - size->height = this->GetRoadVehDetailsHeight(v) + padding.height; + size.height = this->GetRoadVehDetailsHeight(v) + padding.height; break; case VEH_SHIP: - size->height = 4 * GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal * 2 + padding.height; + size.height = 4 * GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal * 2 + padding.height; break; case VEH_AIRCRAFT: - size->height = 5 * GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal * 2 + padding.height; + size.height = 5 * GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal * 2 + padding.height; break; default: @@ -2471,8 +2471,8 @@ struct VehicleDetailsWindow : Window { } case WID_VD_MATRIX: - resize->height = std::max(ScaleGUITrad(14), GetCharacterHeight(FS_NORMAL) + padding.height); - size->height = 4 * resize->height; + resize.height = std::max(ScaleGUITrad(14), GetCharacterHeight(FS_NORMAL) + padding.height); + size.height = 4 * resize.height; break; case WID_VD_SERVICE_INTERVAL_DROPDOWN: { @@ -2484,7 +2484,7 @@ struct VehicleDetailsWindow : Window { } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -2501,11 +2501,11 @@ struct VehicleDetailsWindow : Window { /*/ Vehicle was last serviced at year 0, and we're at max year */ SetDParamMaxValue(2, TimerGameEconomy::DateAtStartOfYear(EconomyTime::MAX_YEAR)); } - size->width = std::max( + size.width = std::max( GetStringBoundingBox(STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT).width, GetStringBoundingBox(STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS).width ) + padding.width; - size->height = GetCharacterHeight(FS_NORMAL) + padding.height; + size.height = GetCharacterHeight(FS_NORMAL) + padding.height; break; } } @@ -3037,24 +3037,24 @@ public: this->Window::Close(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { const Vehicle *v = Vehicle::Get(this->window_number); switch (widget) { case WID_VV_START_STOP: - size->height = std::max({size->height, (uint)GetCharacterHeight(FS_NORMAL), GetScaledSpriteSize(SPR_WARNING_SIGN).height, GetScaledSpriteSize(SPR_FLAG_VEH_STOPPED).height, GetScaledSpriteSize(SPR_FLAG_VEH_RUNNING).height}) + padding.height; + size.height = std::max({size.height, (uint)GetCharacterHeight(FS_NORMAL), GetScaledSpriteSize(SPR_WARNING_SIGN).height, GetScaledSpriteSize(SPR_FLAG_VEH_STOPPED).height, GetScaledSpriteSize(SPR_FLAG_VEH_RUNNING).height}) + padding.height; break; case WID_VV_FORCE_PROCEED: if (v->type != VEH_TRAIN) { - size->height = 0; - size->width = 0; + size.height = 0; + size.width = 0; } break; case WID_VV_VIEWPORT: - size->width = VV_INITIAL_VIEWPORT_WIDTH; - size->height = (v->type == VEH_TRAIN) ? VV_INITIAL_VIEWPORT_HEIGHT_TRAIN : VV_INITIAL_VIEWPORT_HEIGHT; + size.width = VV_INITIAL_VIEWPORT_WIDTH; + size.height = (v->type == VEH_TRAIN) ? VV_INITIAL_VIEWPORT_HEIGHT_TRAIN : VV_INITIAL_VIEWPORT_HEIGHT; break; } } diff --git a/src/widget.cpp b/src/widget.cpp index b9aa2c0d76..74e970eb66 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -1216,7 +1216,7 @@ void NWidgetStacked::SetupSmallestSize(Window *w) Dimension fill = {(this->shown_plane == SZSP_HORIZONTAL), (this->shown_plane == SZSP_VERTICAL)}; Dimension resize = {(this->shown_plane == SZSP_HORIZONTAL), (this->shown_plane == SZSP_VERTICAL)}; /* Here we're primarily interested in the value of resize */ - if (this->index >= 0) w->UpdateWidgetSize(this->index, &size, padding, &fill, &resize); + if (this->index >= 0) w->UpdateWidgetSize(this->index, size, padding, fill, resize); this->smallest_x = size.width; this->smallest_y = size.height; @@ -1833,7 +1833,7 @@ void NWidgetMatrix::SetupSmallestSize(Window *w) Dimension fill = {0, 0}; Dimension resize = {this->pip_inter + this->children.front()->smallest_x, this->pip_inter + this->children.front()->smallest_y}; - if (this->index >= 0) w->UpdateWidgetSize(this->index, &size, padding, &fill, &resize); + if (this->index >= 0) w->UpdateWidgetSize(this->index, size, padding, fill, resize); this->smallest_x = size.width; this->smallest_y = size.height; @@ -2108,7 +2108,7 @@ void NWidgetBackground::SetupSmallestSize(Window *w) case WWT_FRAME: padding = {WidgetDimensions::scaled.frametext.Horizontal(), WidgetDimensions::scaled.frametext.Vertical()}; break; case WWT_INSET: padding = {WidgetDimensions::scaled.inset.Horizontal(), WidgetDimensions::scaled.inset.Vertical()}; break; } - w->UpdateWidgetSize(this->index, &d, padding, &fill, &resize); + w->UpdateWidgetSize(this->index, d, padding, fill, resize); } } this->smallest_x = d.width; @@ -2730,7 +2730,7 @@ void NWidgetLeaf::SetupSmallestSize(Window *w) NOT_REACHED(); } - if (this->index >= 0) w->UpdateWidgetSize(this->index, &size, padding, &fill, &resize); + if (this->index >= 0) w->UpdateWidgetSize(this->index, size, padding, fill, resize); this->smallest_x = size.width; this->smallest_y = size.height; diff --git a/src/window_gui.h b/src/window_gui.h index 0993b4c95f..5a67fd9b2c 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -611,12 +611,12 @@ public: * and \a resize is taken to contain the resize steps. For the convenience of the callee, \a padding contains the amount of * padding between the content and the edge of the widget. This should be added to the returned size. * @param widget Widget number. - * @param size Size of the widget. + * @param[in,out] size Size of the widget. * @param padding Recommended amount of space between the widget content and the widget edge. - * @param fill Fill step of the widget. - * @param resize Resize step of the widget. + * @param[in,out] fill Fill step of the widget. + * @param[in,out] resize Resize step of the widget. */ - virtual void UpdateWidgetSize([[maybe_unused]] WidgetID widget, [[maybe_unused]] Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) {} + virtual void UpdateWidgetSize([[maybe_unused]] WidgetID widget, [[maybe_unused]] Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) {} /** * Initialize string parameters for a widget. From dc7c2bb30de3b72f864301fe7b8ddf7a934f00fb Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 9 Apr 2024 08:35:12 +0100 Subject: [PATCH 269/695] Fix: Draw continuation lines for engine variant hierarchy tree. (#12434) --- src/autoreplace_gui.cpp | 25 +---------- src/build_vehicle_gui.cpp | 89 +++++++++++++++++++++++++-------------- src/engine_gui.h | 9 +++- 3 files changed, 66 insertions(+), 57 deletions(-) diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 62e8b1e85e..b145e34696 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -34,8 +34,6 @@ #include "safeguards.h" -void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_list, const Scrollbar &sb, EngineID selected_id, bool show_count, GroupID selected_group); - static bool EngineNumberSorter(const GUIEngineListItem &a, const GUIEngineListItem &b) { return Engine::Get(a.engine_id)->list_position < Engine::Get(b.engine_id)->list_position; @@ -114,27 +112,6 @@ class ReplaceVehicleWindow : public Window { return true; } - void AddChildren(const GUIEngineList &source, GUIEngineList &target, EngineID parent, int indent, int side) - { - for (const auto &item : source) { - if (item.variant_id != parent || item.engine_id == parent) continue; - - const Engine *e = Engine::Get(item.engine_id); - EngineDisplayFlags flags = item.flags; - if (e->display_last_variant != INVALID_ENGINE) flags &= ~EngineDisplayFlags::Shaded; - target.emplace_back(e->display_last_variant == INVALID_ENGINE ? item.engine_id : e->display_last_variant, item.engine_id, flags, indent); - - /* Add variants if not folded */ - if ((item.flags & (EngineDisplayFlags::HasVariants | EngineDisplayFlags::IsFolded)) == EngineDisplayFlags::HasVariants) { - /* Add this engine again as a child */ - if ((item.flags & EngineDisplayFlags::Shaded) == EngineDisplayFlags::None) { - target.emplace_back(item.engine_id, item.engine_id, EngineDisplayFlags::None, indent + 1); - } - AddChildren(source, target, item.engine_id, indent + 1, side); - } - } - } - /** * Generate an engines list * @param draw_left true if generating the left list, otherwise false @@ -208,7 +185,7 @@ class ReplaceVehicleWindow : public Window { this->engines[side].clear(); if (side == 1) { - AddChildren(list, this->engines[side], INVALID_ENGINE, 0, side); + GUIEngineListAddChildren(this->engines[side], list); } else { this->engines[side].swap(list); } diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index db21d23c84..9d97603b3c 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1045,6 +1045,9 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li int small_text_y_offset = ir.Height() - GetCharacterHeight(FS_SMALL); int replace_icon_y_offset = (ir.Height() - replace_icon.height) / 2; + const int offset = (rtl ? -circle_width : circle_width) / 2; + const int level_width = rtl ? -WidgetDimensions::scaled.hsep_indent : WidgetDimensions::scaled.hsep_indent; + int y = ir.top; for (auto it = first; it != last; ++it) { const auto &item = *it; @@ -1052,6 +1055,21 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li bool has_variants = (item.flags & EngineDisplayFlags::HasVariants) != EngineDisplayFlags::None; bool is_folded = (item.flags & EngineDisplayFlags::IsFolded) != EngineDisplayFlags::None; bool shaded = (item.flags & EngineDisplayFlags::Shaded) != EngineDisplayFlags::None; + + if (item.indent > 0) { + /* Draw tree continuation lines. */ + int tx = (rtl ? ir.right : ir.left) + offset; + int ty = y - WidgetDimensions::scaled.matrix.top; + for (uint lvl = 1; lvl <= item.indent; ++lvl) { + if (HasBit(item.level_mask, lvl)) GfxDrawLine(tx, ty, tx, ty + step_size - 1, linecolour, WidgetDimensions::scaled.fullbevel.top); + if (lvl < item.indent) tx += level_width; + } + /* Draw our node in the tree. */ + int ycentre = y + normal_text_y_offset + GetCharacterHeight(FS_NORMAL) / 2 - 1; + if (!HasBit(item.level_mask, item.indent)) GfxDrawLine(tx, ty, tx, ycentre, linecolour, WidgetDimensions::scaled.fullbevel.top); + GfxDrawLine(tx, ycentre, tx + offset - (rtl ? -1 : 1), ycentre, linecolour, WidgetDimensions::scaled.fullbevel.top); + } + /* Note: num_engines is only used in the autoreplace GUI, so it is correct to use _local_company here. */ const uint num_engines = GetGroupNumEngines(_local_company, selected_group, item.engine_id); @@ -1079,14 +1097,6 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li Rect fr = ir.Indent(indent, rtl).WithWidth(circle_width, rtl); DrawSpriteIgnorePadding(is_folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED, PAL_NONE, {fr.left, y, fr.right, y + ir.Height() - 1}, SA_CENTER); } - if (indent > 0) { - /* Draw tree lines */ - Rect fr = ir.Indent(indent - WidgetDimensions::scaled.hsep_indent, rtl).WithWidth(circle_width, rtl); - int ycenter = y + normal_text_y_offset + GetCharacterHeight(FS_NORMAL) / 2; - bool continues = std::next(it) != std::end(eng_list) && std::next(it)->indent == item.indent; - GfxDrawLine(fr.left + circle_width / 2, y - WidgetDimensions::scaled.matrix.top, fr.left + circle_width / 2, continues ? y - WidgetDimensions::scaled.matrix.top + step_size - 1 : ycenter, linecolour, WidgetDimensions::scaled.fullbevel.top); - GfxDrawLine(fr.left + circle_width / 2, ycenter, fr.right, ycenter, linecolour, WidgetDimensions::scaled.fullbevel.top); - } y += step_size; } } @@ -1114,6 +1124,44 @@ void DisplayVehicleSortDropDown(Window *w, VehicleType vehicle_type, int selecte ShowDropDownMenu(w, _engine_sort_listing[vehicle_type], selected, button, 0, hidden_mask); } +/** + * Add children to GUI engine list to build a hierarchical tree. + * @param dst Destination list. + * @param src Source list. + * @param parent Current tree parent (set by self with recursion). + * @param indent Current tree indentation level (set by self with recursion). + */ +void GUIEngineListAddChildren(GUIEngineList &dst, const GUIEngineList &src, EngineID parent, uint8_t indent) +{ + for (const auto &item : src) { + if (item.variant_id != parent || item.engine_id == parent) continue; + + const Engine *e = Engine::Get(item.engine_id); + EngineDisplayFlags flags = item.flags; + if (e->display_last_variant != INVALID_ENGINE) flags &= ~EngineDisplayFlags::Shaded; + dst.emplace_back(e->display_last_variant == INVALID_ENGINE ? item.engine_id : e->display_last_variant, item.engine_id, flags, indent); + + /* Add variants if not folded */ + if ((item.flags & (EngineDisplayFlags::HasVariants | EngineDisplayFlags::IsFolded)) == EngineDisplayFlags::HasVariants) { + /* Add this engine again as a child */ + if ((item.flags & EngineDisplayFlags::Shaded) == EngineDisplayFlags::None) { + dst.emplace_back(item.engine_id, item.engine_id, EngineDisplayFlags::None, indent + 1); + } + GUIEngineListAddChildren(dst, src, item.engine_id, indent + 1); + } + } + + if (indent > 0 || dst.empty()) return; + + /* Hierarchy is complete, traverse in reverse to find where indentation levels continue. */ + uint16_t level_mask = 0; + for (auto it = std::rbegin(dst); std::next(it) != std::rend(dst); ++it) { + auto next_it = std::next(it); + SB(level_mask, it->indent, 1, it->indent <= next_it->indent); + next_it->level_mask = level_mask; + } +} + /** Enum referring to the Hotkeys in the build vehicle window */ enum BuildVehicleHotkeys { BVHK_FOCUS_FILTER_BOX, ///< Focus the edit box for editing the filter string @@ -1157,27 +1205,6 @@ struct BuildVehicleWindow : Window { } } - void AddChildren(const GUIEngineList &source, EngineID parent, int indent) - { - for (const auto &item : source) { - if (item.variant_id != parent || item.engine_id == parent) continue; - - const Engine *e = Engine::Get(item.engine_id); - EngineDisplayFlags flags = item.flags; - if (e->display_last_variant != INVALID_ENGINE) flags &= ~EngineDisplayFlags::Shaded; - this->eng_list.emplace_back(e->display_last_variant == INVALID_ENGINE ? item.engine_id : e->display_last_variant, item.engine_id, flags, indent); - - /* Add variants if not folded */ - if ((item.flags & (EngineDisplayFlags::HasVariants | EngineDisplayFlags::IsFolded)) == EngineDisplayFlags::HasVariants) { - /* Add this engine again as a child */ - if ((item.flags & EngineDisplayFlags::Shaded) == EngineDisplayFlags::None) { - this->eng_list.emplace_back(item.engine_id, item.engine_id, EngineDisplayFlags::None, indent + 1); - } - AddChildren(source, item.engine_id, indent + 1); - } - } - } - BuildVehicleWindow(WindowDesc *desc, TileIndex tile, VehicleType type) : Window(desc), vehicle_editbox(MAX_LENGTH_VEHICLE_NAME_CHARS * MAX_CHAR_LENGTH, MAX_LENGTH_VEHICLE_NAME_CHARS) { this->vehicle_type = type; @@ -1518,7 +1545,7 @@ struct BuildVehicleWindow : Window { default: NOT_REACHED(); case VEH_TRAIN: this->GenerateBuildTrainList(list); - AddChildren(list, INVALID_ENGINE, 0); + GUIEngineListAddChildren(this->eng_list, list); this->eng_list.shrink_to_fit(); this->eng_list.RebuildDone(); return; @@ -1556,7 +1583,7 @@ struct BuildVehicleWindow : Window { EngList_Sort(this->eng_list, _engine_sort_functions[this->vehicle_type][this->sort_criteria]); this->eng_list.swap(list); - AddChildren(list, INVALID_ENGINE, 0); + GUIEngineListAddChildren(this->eng_list, list, INVALID_ENGINE, 0); this->eng_list.shrink_to_fit(); this->eng_list.RebuildDone(); } diff --git a/src/engine_gui.h b/src/engine_gui.h index 5a43f1f610..ba7e41715f 100644 --- a/src/engine_gui.h +++ b/src/engine_gui.h @@ -11,6 +11,7 @@ #define ENGINE_GUI_H #include "engine_type.h" +#include "group_type.h" #include "sortlist_type.h" #include "gfx_type.h" #include "vehicle_type.h" @@ -20,9 +21,10 @@ struct GUIEngineListItem { EngineID engine_id; ///< Engine to display in build purchase list EngineID variant_id; ///< Variant group of the engine. EngineDisplayFlags flags; ///< Flags for toggling/drawing (un)folded status and controlling indentation. - int8_t indent; ///< Display indentation level. + uint8_t indent; ///< Display indentation level. + uint16_t level_mask; ///< Mask of level continuations. - GUIEngineListItem(EngineID engine_id, EngineID variant_id, EngineDisplayFlags flags, int indent) : engine_id(engine_id), variant_id(variant_id), flags(flags), indent(indent) {} + GUIEngineListItem(EngineID engine_id, EngineID variant_id, EngineDisplayFlags flags, uint8_t indent) : engine_id(engine_id), variant_id(variant_id), flags(flags), indent(indent), level_mask(0) {} /* Used when searching list only by engine_id. */ bool operator == (const EngineID &other) const { return this->engine_id == other; } @@ -50,7 +52,10 @@ extern bool _engine_sort_show_hidden_engines[]; extern const StringID _engine_sort_listing[][12]; extern EngList_SortTypeFunction * const _engine_sort_functions[][11]; +/* Functions in build_vehicle_gui.cpp */ uint GetEngineListHeight(VehicleType type); void DisplayVehicleSortDropDown(Window *w, VehicleType vehicle_type, int selected, WidgetID button); +void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_list, const Scrollbar &sb, EngineID selected_id, bool show_count, GroupID selected_group); +void GUIEngineListAddChildren(GUIEngineList &dst, const GUIEngineList &src, EngineID parent = INVALID_ENGINE, uint8_t indent = 0); #endif /* ENGINE_GUI_H */ From 54be756aae27fd29f52452cc53b8ca232e45317c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 9 Apr 2024 08:40:27 +0100 Subject: [PATCH 270/695] Codechange: Pass NewGRF strings as std::string_view instead of char *. (#12461) --- src/network/core/network_game_info.cpp | 2 +- src/newgrf.cpp | 58 +++++++++++--------------- src/newgrf_text.cpp | 18 ++++---- src/newgrf_text.h | 10 ++--- 4 files changed, 40 insertions(+), 48 deletions(-) diff --git a/src/network/core/network_game_info.cpp b/src/network/core/network_game_info.cpp index 004cac1b6c..623be7fa84 100644 --- a/src/network/core/network_game_info.cpp +++ b/src/network/core/network_game_info.cpp @@ -163,7 +163,7 @@ const NetworkServerGameInfo &GetCurrentNetworkServerGameInfo() * @param config The GRF to handle. * @param name The name of the NewGRF, empty when unknown. */ -static void HandleIncomingNetworkGameInfoGRFConfig(GRFConfig *config, std::string name) +static void HandleIncomingNetworkGameInfoGRFConfig(GRFConfig *config, std::string_view name) { /* Find the matching GRF file */ const GRFConfig *f = FindGRFConfig(config->ident.grfid, FGCM_EXACT, &config->ident.md5sum); diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 1203a19ef9..cbd44526b9 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -269,22 +269,14 @@ public: } } - const char *ReadString() + std::string_view ReadString() { char *string = reinterpret_cast(data); size_t string_length = ttd_strnlen(string, Remaining()); - if (string_length == Remaining()) { - /* String was not NUL terminated, so make sure it is now. */ - string[string_length - 1] = '\0'; - GrfMsg(7, "String was not terminated with a zero byte."); - } else { - /* Increase the string length to include the NUL byte. */ - string_length++; - } Skip(string_length); - return string; + return std::string_view(string, string_length); } inline size_t Remaining() const @@ -2859,27 +2851,27 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By uint8_t newgrf_id = buf->ReadByte(); // The NewGRF (custom) identifier. while (newgrf_id != 0) { - const char *name = buf->ReadString(); // The name for the OpenTTD identifier. + std::string_view name = buf->ReadString(); // The name for the OpenTTD identifier. /* We'll just ignore the UTF8 identifier character. This is (fairly) * safe as OpenTTD's strings gender/cases are usually in ASCII which * is just a subset of UTF8, or they need the bigger UTF8 characters * such as Cyrillic. Thus we will simply assume they're all UTF8. */ char32_t c; - size_t len = Utf8Decode(&c, name); - if (c == NFO_UTF8_IDENTIFIER) name += len; + size_t len = Utf8Decode(&c, name.data()); + if (c == NFO_UTF8_IDENTIFIER) name = name.substr(len); LanguageMap::Mapping map; map.newgrf_id = newgrf_id; if (prop == 0x13) { - map.openttd_id = lang->GetGenderIndex(name); + map.openttd_id = lang->GetGenderIndex(name.data()); if (map.openttd_id >= MAX_NUM_GENDERS) { GrfMsg(1, "GlobalVarChangeInfo: Gender name {} is not known, ignoring", name); } else { _cur.grffile->language_map[curidx].gender_map.push_back(map); } } else { - map.openttd_id = lang->GetCaseIndex(name); + map.openttd_id = lang->GetCaseIndex(name.data()); if (map.openttd_id >= MAX_NUM_CASES) { GrfMsg(1, "GlobalVarChangeInfo: Case name {} is not known, ignoring", name); } else { @@ -6295,7 +6287,7 @@ static void FeatureNewName(ByteReader *buf) id, endid, feature, lang); for (; id < endid && buf->HasData(); id++) { - const char *name = buf->ReadString(); + const std::string_view name = buf->ReadString(); GrfMsg(8, "FeatureNewName: 0x{:04X} <- {}", id, name); switch (feature) { @@ -7013,7 +7005,7 @@ static void ScanInfo(ByteReader *buf) { uint8_t grf_version = buf->ReadByte(); uint32_t grfid = buf->ReadDWord(); - const char *name = buf->ReadString(); + std::string_view name = buf->ReadString(); _cur.grfconfig->ident.grfid = grfid; @@ -7028,7 +7020,7 @@ static void ScanInfo(ByteReader *buf) AddGRFTextToList(_cur.grfconfig->name, 0x7F, grfid, false, name); if (buf->HasData()) { - const char *info = buf->ReadString(); + std::string_view info = buf->ReadString(); AddGRFTextToList(_cur.grfconfig->info, 0x7F, grfid, true, info); } @@ -7048,7 +7040,7 @@ static void GRFInfo(ByteReader *buf) uint8_t version = buf->ReadByte(); uint32_t grfid = buf->ReadDWord(); - const char *name = buf->ReadString(); + std::string_view name = buf->ReadString(); if (_cur.stage < GLS_RESERVE && _cur.grfconfig->status != GCS_UNKNOWN) { DisableGrf(STR_NEWGRF_ERROR_MULTIPLE_ACTION_8); @@ -7198,7 +7190,7 @@ static void GRFLoadError(ByteReader *buf) if (message_id == 0xFF) { /* This is a custom error message. */ if (buf->HasData()) { - const char *message = buf->ReadString(); + std::string_view message = buf->ReadString(); error->custom_message = TranslateTTDPatchCodes(_cur.grffile->grfid, lang, true, message, SCC_RAW_STRING_POINTER); } else { @@ -7210,7 +7202,7 @@ static void GRFLoadError(ByteReader *buf) } if (buf->HasData()) { - const char *data = buf->ReadString(); + std::string_view data = buf->ReadString(); error->data = TranslateTTDPatchCodes(_cur.grffile->grfid, lang, true, data); } else { @@ -7234,7 +7226,7 @@ static void GRFComment(ByteReader *buf) if (!buf->HasData()) return; - const char *text = buf->ReadString(); + std::string_view text = buf->ReadString(); GrfMsg(2, "GRFComment: {}", text); } @@ -7761,7 +7753,7 @@ static void FeatureTownName(ByteReader *buf) do { ClrBit(lang, 7); - const char *name = buf->ReadString(); + std::string_view name = buf->ReadString(); std::string lang_name = TranslateTTDPatchCodes(grfid, lang, false, name); GrfMsg(6, "FeatureTownName: lang 0x{:X} -> '{}'", lang, lang_name); @@ -7801,7 +7793,7 @@ static void FeatureTownName(ByteReader *buf) part.id = ref_id; GrfMsg(6, "FeatureTownName: part {}, text {}, uses intermediate definition 0x{:02X} (with probability {})", partnum, textnum, ref_id, part.prob & 0x7F); } else { - const char *text = buf->ReadString(); + std::string_view text = buf->ReadString(); part.text = TranslateTTDPatchCodes(grfid, 0, false, text); GrfMsg(6, "FeatureTownName: part {}, text {}, '{}' (with probability {})", partnum, textnum, part.text, part.prob); } @@ -8079,9 +8071,9 @@ static void TranslateGRFStrings(ByteReader *buf) } for (uint i = 0; i < num_strings && buf->HasData(); i++) { - const char *string = buf->ReadString(); + std::string_view string = buf->ReadString(); - if (StrEmpty(string)) { + if (string.empty()) { GrfMsg(7, "TranslateGRFString: Ignoring empty string."); continue; } @@ -8091,21 +8083,21 @@ static void TranslateGRFStrings(ByteReader *buf) } /** Callback function for 'INFO'->'NAME' to add a translation to the newgrf name. */ -static bool ChangeGRFName(uint8_t langid, const char *str) +static bool ChangeGRFName(uint8_t langid, std::string_view str) { AddGRFTextToList(_cur.grfconfig->name, langid, _cur.grfconfig->ident.grfid, false, str); return true; } /** Callback function for 'INFO'->'DESC' to add a translation to the newgrf description. */ -static bool ChangeGRFDescription(uint8_t langid, const char *str) +static bool ChangeGRFDescription(uint8_t langid, std::string_view str) { AddGRFTextToList(_cur.grfconfig->info, langid, _cur.grfconfig->ident.grfid, true, str); return true; } /** Callback function for 'INFO'->'URL_' to set the newgrf url. */ -static bool ChangeGRFURL(uint8_t langid, const char *str) +static bool ChangeGRFURL(uint8_t langid, std::string_view str) { AddGRFTextToList(_cur.grfconfig->url, langid, _cur.grfconfig->ident.grfid, false, str); return true; @@ -8207,14 +8199,14 @@ static bool ChangeGRFMinVersion(size_t len, ByteReader *buf) static GRFParameterInfo *_cur_parameter; ///< The parameter which info is currently changed by the newgrf. /** Callback function for 'INFO'->'PARAM'->param_num->'NAME' to set the name of a parameter. */ -static bool ChangeGRFParamName(uint8_t langid, const char *str) +static bool ChangeGRFParamName(uint8_t langid, std::string_view str) { AddGRFTextToList(_cur_parameter->name, langid, _cur.grfconfig->ident.grfid, false, str); return true; } /** Callback function for 'INFO'->'PARAM'->param_num->'DESC' to set the description of a parameter. */ -static bool ChangeGRFParamDescription(uint8_t langid, const char *str) +static bool ChangeGRFParamDescription(uint8_t langid, std::string_view str) { AddGRFTextToList(_cur_parameter->desc, langid, _cur.grfconfig->ident.grfid, true, str); return true; @@ -8294,7 +8286,7 @@ static bool ChangeGRFParamDefault(size_t len, ByteReader *buf) } typedef bool (*DataHandler)(size_t, ByteReader *); ///< Type of callback function for binary nodes -typedef bool (*TextHandler)(uint8_t, const char *str); ///< Type of callback function for text nodes +typedef bool (*TextHandler)(uint8_t, std::string_view str); ///< Type of callback function for text nodes typedef bool (*BranchHandler)(ByteReader *); ///< Type of callback function for branch nodes /** @@ -8398,7 +8390,7 @@ static bool ChangeGRFParamValueNames(ByteReader *buf) } uint8_t langid = buf->ReadByte(); - const char *name_string = buf->ReadString(); + std::string_view name_string = buf->ReadString(); auto val_name = _cur_parameter->value_names.find(id); if (val_name != _cur_parameter->value_names.end()) { diff --git a/src/newgrf_text.cpp b/src/newgrf_text.cpp index 967af68196..97eb460795 100644 --- a/src/newgrf_text.cpp +++ b/src/newgrf_text.cpp @@ -233,12 +233,12 @@ struct UnmappedChoiceList { * @param byte80 The control code to use as replacement for the 0x80-value. * @return The translated string. */ -std::string TranslateTTDPatchCodes(uint32_t grfid, uint8_t language_id, bool allow_newlines, const std::string &str, StringControlCode byte80) +std::string TranslateTTDPatchCodes(uint32_t grfid, uint8_t language_id, bool allow_newlines, std::string_view str, StringControlCode byte80) { /* Empty input string? Nothing to do here. */ - if (str.empty()) return str; + if (str.empty()) return {}; - std::string::const_iterator src = str.cbegin(); + std::string_view::const_iterator src = str.cbegin(); /* Is this an unicode string? */ bool unicode = false; @@ -482,7 +482,7 @@ string_end: * @param langid The The language of the new text. * @param text_to_add The text to add to the list. */ -static void AddGRFTextToList(GRFTextList &list, uint8_t langid, const std::string &text_to_add) +static void AddGRFTextToList(GRFTextList &list, uint8_t langid, std::string_view text_to_add) { /* Loop through all languages and see if we can replace a string */ for (auto &text : list) { @@ -493,7 +493,7 @@ static void AddGRFTextToList(GRFTextList &list, uint8_t langid, const std::strin } /* If a string wasn't replaced, then we must append the new string */ - list.push_back(GRFText{ langid, text_to_add }); + list.push_back(GRFText{ langid, std::string(text_to_add) }); } /** @@ -505,7 +505,7 @@ static void AddGRFTextToList(GRFTextList &list, uint8_t langid, const std::strin * @param text_to_add The text to add to the list. * @note All text-codes will be translated. */ -void AddGRFTextToList(GRFTextList &list, uint8_t langid, uint32_t grfid, bool allow_newlines, const char *text_to_add) +void AddGRFTextToList(GRFTextList &list, uint8_t langid, uint32_t grfid, bool allow_newlines, std::string_view text_to_add) { AddGRFTextToList(list, langid, TranslateTTDPatchCodes(grfid, langid, allow_newlines, text_to_add)); } @@ -519,7 +519,7 @@ void AddGRFTextToList(GRFTextList &list, uint8_t langid, uint32_t grfid, bool al * @param text_to_add The text to add to the list. * @note All text-codes will be translated. */ -void AddGRFTextToList(GRFTextWrapper &list, uint8_t langid, uint32_t grfid, bool allow_newlines, const char *text_to_add) +void AddGRFTextToList(GRFTextWrapper &list, uint8_t langid, uint32_t grfid, bool allow_newlines, std::string_view text_to_add) { if (!list) list.reset(new GRFTextList()); AddGRFTextToList(*list, langid, grfid, allow_newlines, text_to_add); @@ -531,7 +531,7 @@ void AddGRFTextToList(GRFTextWrapper &list, uint8_t langid, uint32_t grfid, bool * @param list The list where the text should be added to. * @param text_to_add The text to add to the list. */ -void AddGRFTextToList(GRFTextWrapper &list, const std::string &text_to_add) +void AddGRFTextToList(GRFTextWrapper &list, std::string_view text_to_add) { if (!list) list.reset(new GRFTextList()); AddGRFTextToList(*list, GRFLX_UNSPECIFIED, text_to_add); @@ -540,7 +540,7 @@ void AddGRFTextToList(GRFTextWrapper &list, const std::string &text_to_add) /** * Add the new read string into our structure. */ -StringID AddGRFString(uint32_t grfid, uint16_t stringid, uint8_t langid_to_add, bool new_scheme, bool allow_newlines, const char *text_to_add, StringID def_string) +StringID AddGRFString(uint32_t grfid, uint16_t stringid, uint8_t langid_to_add, bool new_scheme, bool allow_newlines, std::string_view text_to_add, StringID def_string) { /* When working with the old language scheme (grf_version is less than 7) and * English or American is among the set bits, simply add it as English in diff --git a/src/newgrf_text.h b/src/newgrf_text.h index aad9e92cce..dfefac89ed 100644 --- a/src/newgrf_text.h +++ b/src/newgrf_text.h @@ -29,17 +29,17 @@ typedef std::vector GRFTextList; /** Reference counted wrapper around a GRFText pointer. */ typedef std::shared_ptr GRFTextWrapper; -StringID AddGRFString(uint32_t grfid, uint16_t stringid, uint8_t langid, bool new_scheme, bool allow_newlines, const char *text_to_add, StringID def_string); +StringID AddGRFString(uint32_t grfid, uint16_t stringid, uint8_t langid, bool new_scheme, bool allow_newlines, std::string_view text_to_add, StringID def_string); StringID GetGRFStringID(uint32_t grfid, StringID stringid); const char *GetGRFStringFromGRFText(const GRFTextList &text_list); const char *GetGRFStringFromGRFText(const GRFTextWrapper &text); const char *GetGRFStringPtr(uint32_t stringid); void CleanUpStrings(); void SetCurrentGrfLangID(uint8_t language_id); -std::string TranslateTTDPatchCodes(uint32_t grfid, uint8_t language_id, bool allow_newlines, const std::string &str, StringControlCode byte80 = SCC_NEWGRF_PRINT_WORD_STRING_ID); -void AddGRFTextToList(GRFTextList &list, uint8_t langid, uint32_t grfid, bool allow_newlines, const char *text_to_add); -void AddGRFTextToList(GRFTextWrapper &list, uint8_t langid, uint32_t grfid, bool allow_newlines, const char *text_to_add); -void AddGRFTextToList(GRFTextWrapper &list, const std::string &text_to_add); +std::string TranslateTTDPatchCodes(uint32_t grfid, uint8_t language_id, bool allow_newlines, std::string_view str, StringControlCode byte80 = SCC_NEWGRF_PRINT_WORD_STRING_ID); +void AddGRFTextToList(GRFTextList &list, uint8_t langid, uint32_t grfid, bool allow_newlines, std::string_view text_to_add); +void AddGRFTextToList(GRFTextWrapper &list, uint8_t langid, uint32_t grfid, bool allow_newlines, std::string_view text_to_add); +void AddGRFTextToList(GRFTextWrapper &list, std::string_view text_to_add); bool CheckGrfLangID(uint8_t lang_id, uint8_t grf_version); From 883d3e7a9f9f0ac8e5bed71bd0766c4b02dbdb35 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Mon, 8 Apr 2024 20:14:25 +0200 Subject: [PATCH 271/695] Codechange: use std::span instead of pointer + length --- src/industry_gui.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 96d82325dc..f682f0cc13 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -367,16 +367,18 @@ class BuildIndustryWindow : public Window { * @param prefixstr String to use for the first item * @return A formatted raw string */ - std::string MakeCargoListString(const CargoID *cargolist, const CargoSuffix *cargo_suffix, int cargolistlen, StringID prefixstr) const + std::string MakeCargoListString(const std::span cargolist, const std::span cargo_suffix, StringID prefixstr) const { - std::string cargostring; - int numcargo = 0; - int firstcargo = -1; + assert(cargolist.size() == cargo_suffix.size()); - for (int j = 0; j < cargolistlen; j++) { + std::string cargostring; + size_t numcargo = 0; + size_t firstcargo; + + for (size_t j = 0; j < cargolist.size(); j++) { if (!IsValidCargoID(cargolist[j])) continue; numcargo++; - if (firstcargo < 0) { + if (numcargo == 1) { firstcargo = j; continue; } @@ -452,7 +454,7 @@ public: /* Measure the accepted cargoes, if any. */ GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_FUND, nullptr, indtype, indsp, indsp->accepts_cargo, cargo_suffix); - std::string cargostring = this->MakeCargoListString(indsp->accepts_cargo, cargo_suffix, lengthof(indsp->accepts_cargo), STR_INDUSTRY_VIEW_REQUIRES_N_CARGO); + std::string cargostring = this->MakeCargoListString(indsp->accepts_cargo, cargo_suffix, STR_INDUSTRY_VIEW_REQUIRES_N_CARGO); Dimension strdim = GetStringBoundingBox(cargostring); if (strdim.width > max_minwidth) { extra_lines_req = std::max(extra_lines_req, strdim.width / max_minwidth + 1); @@ -462,7 +464,7 @@ public: /* Measure the produced cargoes, if any. */ GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_FUND, nullptr, indtype, indsp, indsp->produced_cargo, cargo_suffix); - cargostring = this->MakeCargoListString(indsp->produced_cargo, cargo_suffix, lengthof(indsp->produced_cargo), STR_INDUSTRY_VIEW_PRODUCES_N_CARGO); + cargostring = this->MakeCargoListString(indsp->produced_cargo, cargo_suffix, STR_INDUSTRY_VIEW_PRODUCES_N_CARGO); strdim = GetStringBoundingBox(cargostring); if (strdim.width > max_minwidth) { extra_lines_prd = std::max(extra_lines_prd, strdim.width / max_minwidth + 1); @@ -568,12 +570,12 @@ public: /* Draw the accepted cargoes, if any. Otherwise, will print "Nothing". */ GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_FUND, nullptr, this->selected_type, indsp, indsp->accepts_cargo, cargo_suffix); - std::string cargostring = this->MakeCargoListString(indsp->accepts_cargo, cargo_suffix, lengthof(indsp->accepts_cargo), STR_INDUSTRY_VIEW_REQUIRES_N_CARGO); + std::string cargostring = this->MakeCargoListString(indsp->accepts_cargo, cargo_suffix, STR_INDUSTRY_VIEW_REQUIRES_N_CARGO); ir.top = DrawStringMultiLine(ir, cargostring); /* Draw the produced cargoes, if any. Otherwise, will print "Nothing". */ GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_FUND, nullptr, this->selected_type, indsp, indsp->produced_cargo, cargo_suffix); - cargostring = this->MakeCargoListString(indsp->produced_cargo, cargo_suffix, lengthof(indsp->produced_cargo), STR_INDUSTRY_VIEW_PRODUCES_N_CARGO); + cargostring = this->MakeCargoListString(indsp->produced_cargo, cargo_suffix, STR_INDUSTRY_VIEW_PRODUCES_N_CARGO); ir.top = DrawStringMultiLine(ir, cargostring); /* Get the additional purchase info text, if it has not already been queried. */ From 2976a46d069871eb34e0b894acf2f289f72fbf99 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 9 Apr 2024 15:15:09 +0100 Subject: [PATCH 272/695] Fix 54be756: Terminating NUL byte was not skipped in ReadString(). (#12462) --- src/newgrf.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index cbd44526b9..0446fbd736 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -274,7 +274,8 @@ public: char *string = reinterpret_cast(data); size_t string_length = ttd_strnlen(string, Remaining()); - Skip(string_length); + /* Skip past the terminating NUL byte if it is present, but not more than remaining. */ + Skip(std::min(string_length + 1, Remaining())); return std::string_view(string, string_length); } From 90ca3515da31c44813b340c865058fd000a8b471 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 9 Apr 2024 21:46:29 +0100 Subject: [PATCH 273/695] Fix #12459, f6a88e4: Crashes when deleting news messages. (#12460) The updated logic in f6a88e4 for deleting news messages did things in the wrong order. --- src/news_gui.cpp | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 8e8d98f261..24827d0f19 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -685,13 +685,14 @@ static bool ReadyForNextNewsItem() /** Move to the next ticker item */ static void MoveToNextTickerItem() { - assert(!std::empty(_news)); - /* There is no status bar, so no reason to show news; * especially important with the end game screen when * there is no status bar but possible news. */ if (FindWindowById(WC_STATUS_BAR, 0) == nullptr) return; + /* No news to move to. */ + if (std::empty(_news)) return; + /* if we're not at the latest item, then move on */ while (_statusbar_news != std::begin(_news)) { --_statusbar_news; @@ -719,8 +720,6 @@ static void MoveToNextTickerItem() /** Move to the next news item */ static void MoveToNextNewsItem() { - assert(!std::empty(_news)); - /* There is no status bar, so no reason to show news; * especially important with the end game screen when * there is no status bar but possible news. */ @@ -729,6 +728,9 @@ static void MoveToNextNewsItem() CloseWindowById(WC_NEWS_WINDOW, 0); // close the newspapers window if shown _forced_news = std::end(_news); + /* No news to move to. */ + if (std::empty(_news)) return; + /* if we're not at the latest item, then move on */ while (_current_news != std::begin(_news)) { --_current_news; @@ -755,28 +757,38 @@ static void MoveToNextNewsItem() /** Delete a news item from the queue */ static std::list::iterator DeleteNewsItem(std::list::iterator ni) { - if (_forced_news == ni || _current_news == ni) { - /* When we're the current news, go to the previous item first; - * we just possibly made that the last news item. */ - if (_current_news == ni) _current_news = (_current_news == std::begin(_news)) ? std::end(_news) : std::prev(_current_news); + bool updateCurrentNews = (_forced_news == ni || _current_news == ni); + bool updateStatusbarNews = (_statusbar_news == ni); + if (updateCurrentNews) { + /* When we're the current news, go to the next older item first; + * we just possibly made that the last news item. */ + if (_current_news == ni) ++_current_news; + if (_forced_news == ni) _forced_news = std::end(_news); + } + + if (updateStatusbarNews) { + /* When we're the current news, go to the next older item first; + * we just possibly made that the last news item. */ + ++_statusbar_news; + } + + /* Delete the news from the news queue. */ + ni = _news.erase(ni); + + if (updateCurrentNews) { /* About to remove the currently forced item (shown as newspapers) || * about to remove the currently displayed item (newspapers) */ MoveToNextNewsItem(); } - if (_statusbar_news == ni) { - /* When we're the current news, go to the previous item first; - * we just possibly made that the last news item. */ - if (_statusbar_news == ni) _statusbar_news = (_statusbar_news == std::begin(_news)) ? std::end(_news) : std::prev(_statusbar_news); - + if (updateStatusbarNews) { /* About to remove the currently displayed item (ticker, or just a reminder) */ InvalidateWindowData(WC_STATUS_BAR, 0, SBI_NEWS_DELETED); // invalidate the statusbar MoveToNextTickerItem(); } - /* Delete the news from the news queue. */ - return _news.erase(ni); + return ni; } /** From 34758d0921655643878791ab61f6f248d8280958 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 9 Apr 2024 17:54:42 +0100 Subject: [PATCH 274/695] Change: Allow string mapping by function instead of pointer. This allows mapping of strings to objects that may be moved between loading stages. --- src/newgrf.cpp | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 0446fbd736..e5794882f7 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -452,12 +452,24 @@ static GRFError *DisableGrf(StringID message = STR_NULL, GRFConfig *config = nul * Information for mapping static StringIDs. */ struct StringIDMapping { - uint32_t grfid; ///< Source NewGRF. - StringID source; ///< Source StringID (GRF local). - StringID *target; ///< Destination for mapping result. + uint32_t grfid; ///< Source NewGRF. + StringID source; ///< Source StringID (GRF local). + std::function func; ///< Function for mapping result. + + StringIDMapping(uint32_t grfid, StringID source, std::function &&func) : grfid(grfid), source(source), func(std::move(func)) { } }; -typedef std::vector StringIDMappingVector; -static StringIDMappingVector _string_to_grf_mapping; +static std::vector _string_to_grf_mapping; + +/** + * Record a static StringID for getting translated later. + * @param source Source StringID (GRF local). + * @param func Function to call to set the mapping result. + */ +static void AddStringForMapping(StringID source, std::function &&func) +{ + func(STR_UNDEFINED); + _string_to_grf_mapping.emplace_back(_cur.grffile->grfid, source, std::move(func)); +} /** * Record a static StringID for getting translated later. @@ -466,8 +478,7 @@ static StringIDMappingVector _string_to_grf_mapping; */ static void AddStringForMapping(StringID source, StringID *target) { - *target = STR_UNDEFINED; - _string_to_grf_mapping.push_back({_cur.grffile->grfid, source, target}); + AddStringForMapping(source, [target](StringID str) { *target = str; }); } /** @@ -2128,7 +2139,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte break; case 0x1D: // Station Class name - AddStringForMapping(buf->ReadWord(), &StationClass::Get(statspec->cls_id)->name); + AddStringForMapping(buf->ReadWord(), [statspec](StringID str) { StationClass::Get(statspec->cls_id)->name = str; }); break; default: @@ -4148,8 +4159,7 @@ static ChangeInfoResult ObjectChangeInfo(uint id, int numinfo, int prop, ByteRea } case 0x09: { // Class name - ObjectClass *objclass = ObjectClass::Get(spec->cls_id); - AddStringForMapping(buf->ReadWord(), &objclass->name); + AddStringForMapping(buf->ReadWord(), [spec](StringID str) { ObjectClass::Get(spec->cls_id)->name = str; }); break; } @@ -4845,7 +4855,7 @@ static ChangeInfoResult RoadStopChangeInfo(uint id, int numinfo, int prop, ByteR break; case 0x0B: // Road Stop Class name - AddStringForMapping(buf->ReadWord(), &RoadStopClass::Get(rs->cls_id)->name); + AddStringForMapping(buf->ReadWord(), [rs](StringID str) { RoadStopClass::Get(rs->cls_id)->name = str; }); break; case 0x0C: // The draw mode @@ -9918,7 +9928,7 @@ extern void InitGRFTownGeneratorNames(); static void AfterLoadGRFs() { for (StringIDMapping &it : _string_to_grf_mapping) { - *it.target = MapGRFStringID(it.grfid, it.source); + it.func(MapGRFStringID(it.grfid, it.source)); } _string_to_grf_mapping.clear(); From 052f42132750db6c1a5bbe6308090d48908418fc Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 9 Apr 2024 17:54:42 +0100 Subject: [PATCH 275/695] Change: Use vector/iterators/algorithms instead of C-array/loops for NewGRF classes. --- src/airport_gui.cpp | 2 +- src/newgrf.cpp | 2 ++ src/newgrf_class.h | 13 +++---- src/newgrf_class_func.h | 76 ++++++++++++++--------------------------- 4 files changed, 35 insertions(+), 58 deletions(-) diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index 3b346d2629..a52b876d7c 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -546,7 +546,7 @@ public: if (change_class) { /* If that fails, select the first available airport * from the first class where airports are available. */ - for (AirportClassID j = APC_BEGIN; j < APC_MAX; j++) { + for (AirportClassID j = APC_BEGIN; j < AirportClass::GetClassCount(); j++) { AirportClass *apclass = AirportClass::Get(j); for (uint i = 0; i < apclass->GetSpecCount(); i++) { const AirportSpec *as = apclass->GetSpec(i); diff --git a/src/newgrf.cpp b/src/newgrf.cpp index e5794882f7..662fc3e38b 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -458,6 +458,8 @@ struct StringIDMapping { StringIDMapping(uint32_t grfid, StringID source, std::function &&func) : grfid(grfid), source(source), func(std::move(func)) { } }; + +/** Strings to be mapped during load. */ static std::vector _string_to_grf_mapping; /** diff --git a/src/newgrf_class.h b/src/newgrf_class.h index 38e068a881..cd80d65410 100644 --- a/src/newgrf_class.h +++ b/src/newgrf_class.h @@ -19,17 +19,14 @@ template class NewGRFClass { private: - uint ui_count; ///< Number of specs in this class potentially available to the user. + uint ui_count = 0; ///< Number of specs in this class potentially available to the user. std::vector spec; ///< List of specifications. /** * The actual classes. - * @note We store pointers to members of this array in various places outside this class (e.g. to 'name' for GRF string resolving). - * Thus this must be a static array, and cannot be a self-resizing vector or similar. + * @note This may be reallocated during initialization so pointers may be invalidated. */ - static NewGRFClass classes[Tmax]; - - void ResetClass(); + static inline std::vector> classes; /** Initialise the defaults. */ static void InsertDefaults(); @@ -38,8 +35,12 @@ public: uint32_t global_id; ///< Global ID for class, e.g. 'DFLT', 'WAYP', etc. StringID name; ///< Name of this class. + /* Public constructor as emplace_back needs access. */ + NewGRFClass(uint32_t global_id, StringID name) : global_id(global_id), name(name) { } + void Insert(Tspec *spec); + Tid Index() const { return static_cast(std::distance(&*std::cbegin(NewGRFClass::classes), this)); } /** Get the number of allocated specs within the class. */ uint GetSpecCount() const { return static_cast(this->spec.size()); } /** Get the number of potentially user-available specs within the class. */ diff --git a/src/newgrf_class_func.h b/src/newgrf_class_func.h index b3de6ba9c1..ef9490a0c1 100644 --- a/src/newgrf_class_func.h +++ b/src/newgrf_class_func.h @@ -11,35 +11,19 @@ #include "table/strings.h" -/** Instantiate the array. */ -template -NewGRFClass NewGRFClass::classes[Tmax]; - -/** Reset the class, i.e. clear everything. */ -template -void NewGRFClass::ResetClass() -{ - this->global_id = 0; - this->name = STR_EMPTY; - this->ui_count = 0; - - this->spec.clear(); -} - /** Reset the classes, i.e. clear everything. */ template void NewGRFClass::Reset() { - for (Tid i = (Tid)0; i < Tmax; i++) { - classes[i].ResetClass(); - } + NewGRFClass::classes.clear(); + NewGRFClass::classes.shrink_to_fit(); - InsertDefaults(); + NewGRFClass::InsertDefaults(); } /** * Allocate a class with a given global class ID. - * @param cls_id The global class id, such as 'DFLT'. + * @param global_id The global class id, such as 'DFLT'. * @return The (non global!) class ID for the class. * @note Upon allocating the same global class ID for a * second time, this first allocation will be given. @@ -47,19 +31,19 @@ void NewGRFClass::Reset() template Tid NewGRFClass::Allocate(uint32_t global_id) { - for (Tid i = (Tid)0; i < Tmax; i++) { - if (classes[i].global_id == global_id) { - /* ClassID is already allocated, so reuse it. */ - return i; - } else if (classes[i].global_id == 0) { - /* This class is empty, so allocate it to the global id. */ - classes[i].global_id = global_id; - return i; - } + auto found = std::find_if(std::begin(NewGRFClass::classes), std::end(NewGRFClass::classes), [global_id](const auto &cls) { return cls.global_id == global_id; }); + + /* Id is already allocated, so reuse it. */ + if (found != std::end(NewGRFClass::classes)) return found->Index(); + + /* More slots available, allocate a slot to the global id. */ + if (NewGRFClass::classes.size() < Tmax) { + auto &cls = NewGRFClass::classes.emplace_back(global_id, STR_EMPTY); + return cls.Index(); } GrfMsg(2, "ClassAllocate: already allocated {} classes, using default", Tmax); - return (Tid)0; + return static_cast(0); } /** @@ -82,7 +66,7 @@ void NewGRFClass::Insert(Tspec *spec) template void NewGRFClass::Assign(Tspec *spec) { - assert(spec->cls_id < Tmax); + assert(static_cast(spec->cls_id) < NewGRFClass::classes.size()); Get(spec->cls_id)->Insert(spec); } @@ -94,8 +78,8 @@ void NewGRFClass::Assign(Tspec *spec) template NewGRFClass *NewGRFClass::Get(Tid cls_id) { - assert(cls_id < Tmax); - return classes + cls_id; + assert(static_cast(cls_id) < NewGRFClass::classes.size()); + return &NewGRFClass::classes[cls_id]; } /** @@ -105,9 +89,7 @@ NewGRFClass *NewGRFClass::Get(Tid cls_id) template uint NewGRFClass::GetClassCount() { - uint i; - for (i = 0; i < Tmax && classes[i].global_id != 0; i++) {} - return i; + return static_cast(NewGRFClass::classes.size()); } /** @@ -117,11 +99,7 @@ uint NewGRFClass::GetClassCount() template uint NewGRFClass::GetUIClassCount() { - uint cnt = 0; - for (uint i = 0; i < Tmax && classes[i].global_id != 0; i++) { - if (classes[i].GetUISpecCount() > 0) cnt++; - } - return cnt; + return std::count_if(std::begin(NewGRFClass::classes), std::end(NewGRFClass::classes), [](const auto &cls) { return cls.GetUISpecCount() > 0; }); } /** @@ -132,9 +110,9 @@ uint NewGRFClass::GetUIClassCount() template Tid NewGRFClass::GetUIClass(uint index) { - for (uint i = 0; i < Tmax && classes[i].global_id != 0; i++) { - if (classes[i].GetUISpecCount() == 0) continue; - if (index-- == 0) return (Tid)i; + for (const auto &cls : NewGRFClass::classes) { + if (cls.GetUISpecCount() == 0) continue; + if (index-- == 0) return cls.Index(); } NOT_REACHED(); } @@ -193,15 +171,11 @@ int NewGRFClass::GetUIFromIndex(int index) const template const Tspec *NewGRFClass::GetByGrf(uint32_t grfid, uint16_t local_id, int *index) { - uint j; - - for (Tid i = (Tid)0; i < Tmax; i++) { - uint count = static_cast(classes[i].spec.size()); - for (j = 0; j < count; j++) { - const Tspec *spec = classes[i].spec[j]; + for (const auto &cls : NewGRFClass::classes) { + for (const auto &spec : cls.spec) { if (spec == nullptr) continue; if (spec->grf_prop.grffile->grfid == grfid && spec->grf_prop.local_id == local_id) { - if (index != nullptr) *index = j; + if (index != nullptr) *index = static_cast(std::distance(cls.spec.data(), &spec)); return spec; } } From 77f27e08049c4428e2ef0d2a5feff5c26bfc4b32 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 9 Apr 2024 17:54:43 +0100 Subject: [PATCH 276/695] Change: Expose NewGRF classes and specs as spans and simplify iteration. This replaces some index-based loops with range loops. --- src/airport_gui.cpp | 20 +++++++++----------- src/newgrf_class.h | 12 ++++++++++++ src/newgrf_roadstop.cpp | 13 ++++++------- src/object_gui.cpp | 7 +++---- src/rail_gui.cpp | 14 +++++--------- src/road_gui.cpp | 14 +++++--------- 6 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index a52b876d7c..2d5378e72f 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -241,8 +241,8 @@ class BuildAirportWindow : public PickerWindowBase { { DropDownList list; - for (uint i = 0; i < AirportClass::GetClassCount(); i++) { - list.push_back(MakeDropDownListStringItem(AirportClass::Get((AirportClassID)i)->name, i)); + for (const auto &cls : AirportClass::Classes()) { + list.push_back(MakeDropDownListStringItem(cls.name, cls.Index())); } return list; @@ -322,8 +322,8 @@ public: switch (widget) { case WID_AP_CLASS_DROPDOWN: { Dimension d = {0, 0}; - for (uint i = 0; i < AirportClass::GetClassCount(); i++) { - d = maxdim(d, GetStringBoundingBox(AirportClass::Get((AirportClassID)i)->name)); + for (const auto &cls : AirportClass::Classes()) { + d = maxdim(d, GetStringBoundingBox(cls.name)); } d.width += padding.width; d.height += padding.height; @@ -546,14 +546,12 @@ public: if (change_class) { /* If that fails, select the first available airport * from the first class where airports are available. */ - for (AirportClassID j = APC_BEGIN; j < AirportClass::GetClassCount(); j++) { - AirportClass *apclass = AirportClass::Get(j); - for (uint i = 0; i < apclass->GetSpecCount(); i++) { - const AirportSpec *as = apclass->GetSpec(i); + for (const auto &cls : AirportClass::Classes()) { + for (const auto &as : cls.Specs()) { if (as->IsAvailable()) { - _selected_airport_class = j; - this->vscroll->SetCount(apclass->GetSpecCount()); - this->SelectOtherAirport(i); + _selected_airport_class = cls.Index(); + this->vscroll->SetCount(cls.GetSpecCount()); + this->SelectOtherAirport(as->GetIndex()); return; } } diff --git a/src/newgrf_class.h b/src/newgrf_class.h index cd80d65410..2097a9eaca 100644 --- a/src/newgrf_class.h +++ b/src/newgrf_class.h @@ -38,6 +38,18 @@ public: /* Public constructor as emplace_back needs access. */ NewGRFClass(uint32_t global_id, StringID name) : global_id(global_id), name(name) { } + /** + * Get read-only span of specs of this class. + * @return Read-only span of specs. + */ + std::span Specs() const { return this->spec; } + + /** + * Get read-only span of all classes of this type. + * @return Read-only span of classes. + */ + static std::span const> Classes() { return NewGRFClass::classes; } + void Insert(Tspec *spec); Tid Index() const { return static_cast(std::distance(&*std::cbegin(NewGRFClass::classes), this)); } diff --git a/src/newgrf_roadstop.cpp b/src/newgrf_roadstop.cpp index 482bce1e6a..f45f051dee 100644 --- a/src/newgrf_roadstop.cpp +++ b/src/newgrf_roadstop.cpp @@ -465,13 +465,12 @@ void TriggerRoadStopRandomisation(Station *st, TileIndex tile, RoadStopRandomTri */ bool GetIfNewStopsByType(RoadStopType rs, RoadType roadtype) { - for (uint i = 0; i < RoadStopClass::GetClassCount(); i++) { + for (const auto &cls : RoadStopClass::Classes()) { /* Ignore the waypoint class. */ - if (i == ROADSTOP_CLASS_WAYP) continue; - const RoadStopClass *roadstopclass = RoadStopClass::Get((RoadStopClassID)i); + if (cls.Index() == ROADSTOP_CLASS_WAYP) continue; /* Ignore the default class with only the default station. */ - if (i == ROADSTOP_CLASS_DFLT && roadstopclass->GetSpecCount() == 1) continue; - if (GetIfClassHasNewStopsByType(roadstopclass, rs, roadtype)) return true; + if (cls.Index() == ROADSTOP_CLASS_DFLT && cls.GetSpecCount() == 1) continue; + if (GetIfClassHasNewStopsByType(&cls, rs, roadtype)) return true; } return false; } @@ -485,8 +484,8 @@ bool GetIfNewStopsByType(RoadStopType rs, RoadType roadtype) */ bool GetIfClassHasNewStopsByType(const RoadStopClass *roadstopclass, RoadStopType rs, RoadType roadtype) { - for (uint j = 0; j < roadstopclass->GetSpecCount(); j++) { - if (GetIfStopIsForType(roadstopclass->GetSpec(j), rs, roadtype)) return true; + for (const auto spec : roadstopclass->Specs()) { + if (GetIfStopIsForType(spec, rs, roadtype)) return true; } return false; } diff --git a/src/object_gui.cpp b/src/object_gui.cpp index 7ea9fd37df..9199c55538 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -145,10 +145,9 @@ public: this->object_classes.clear(); - for (uint i = 0; i < ObjectClass::GetClassCount(); i++) { - ObjectClass *objclass = ObjectClass::Get((ObjectClassID)i); - if (objclass->GetUISpecCount() == 0) continue; // Is this needed here? - object_classes.push_back((ObjectClassID)i); + for (const auto &cls : ObjectClass::Classes()) { + if (cls.GetUISpecCount() == 0) continue; // Is this needed here? + object_classes.push_back(cls.Index()); } this->object_classes.Filter(this->string_filter); diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index a3ebd0843d..d3dfd94db6 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1109,15 +1109,11 @@ public: this->station_classes.clear(); - for (uint i = 0; i < StationClass::GetClassCount(); i++) { - StationClassID station_class_id = (StationClassID)i; - if (station_class_id == StationClassID::STAT_CLASS_WAYP) { - // Skip waypoints. - continue; - } - StationClass *station_class = StationClass::Get(station_class_id); - if (station_class->GetUISpecCount() == 0) continue; - station_classes.push_back(station_class_id); + for (const auto &cls : StationClass::Classes()) { + /* Skip waypoints. */ + if (cls.Index() == STAT_CLASS_WAYP) continue; + if (cls.GetUISpecCount() == 0) continue; + station_classes.push_back(cls.Index()); } if (_railstation.newstations) { diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 6bc38298ce..8637c910f1 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -1201,7 +1201,7 @@ public: this->FinishInitNested(TRANSPORT_ROAD); this->window_class = (rs == ROADSTOP_BUS) ? WC_BUS_STATION : WC_TRUCK_STATION; - if (!newstops || _roadstop_gui_settings.roadstop_class >= (int)RoadStopClass::GetClassCount()) { + if (!newstops || _roadstop_gui_settings.roadstop_class >= RoadStopClass::GetClassCount()) { /* There's no new stops available or the list has reduced in size. * Now, set the default road stops as selected. */ _roadstop_gui_settings.roadstop_class = ROADSTOP_CLASS_DFLT; @@ -1264,14 +1264,10 @@ public: this->roadstop_classes.clear(); - for (uint i = 0; i < RoadStopClass::GetClassCount(); i++) { - RoadStopClassID rs_id = (RoadStopClassID)i; - if (rs_id == ROADSTOP_CLASS_WAYP) { - // Skip waypoints. - continue; - } - RoadStopClass *rs_class = RoadStopClass::Get(rs_id); - if (GetIfClassHasNewStopsByType(rs_class, this->roadStopType, _cur_roadtype)) this->roadstop_classes.push_back(rs_id); + for (const auto &cls : RoadStopClass::Classes()) { + /* Skip waypoints. */ + if (cls.Index() == ROADSTOP_CLASS_WAYP) continue; + if (GetIfClassHasNewStopsByType(&cls, this->roadStopType, _cur_roadtype)) this->roadstop_classes.push_back(cls.Index()); } if (this->ShowNewStops()) { From df8eeb1b10965a78d9ded5fdf77d799549a72608 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Tue, 9 Apr 2024 22:57:39 +0200 Subject: [PATCH 277/695] Codechange: use C++ algorithms to determine the SaveLoadFormat --- src/saveload/saveload.cpp | 103 +++++++++++++++++++++----------------- 1 file changed, 56 insertions(+), 47 deletions(-) diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 2f57886118..28b65ba920 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -2628,23 +2628,28 @@ struct SaveLoadFormat { uint8_t max_compression; ///< the maximum compression level of this format }; +static const uint32_t SAVEGAME_TAG_LZO = TO_BE32X('OTTD'); +static const uint32_t SAVEGAME_TAG_NONE = TO_BE32X('OTTN'); +static const uint32_t SAVEGAME_TAG_ZLIB = TO_BE32X('OTTZ'); +static const uint32_t SAVEGAME_TAG_LZMA = TO_BE32X('OTTX'); + /** The different saveload formats known/understood by OpenTTD. */ static const SaveLoadFormat _saveload_formats[] = { #if defined(WITH_LZO) /* Roughly 75% larger than zlib level 6 at only ~7% of the CPU usage. */ - {"lzo", TO_BE32X('OTTD'), CreateLoadFilter, CreateSaveFilter, 0, 0, 0}, + {"lzo", SAVEGAME_TAG_LZO, CreateLoadFilter, CreateSaveFilter, 0, 0, 0}, #else - {"lzo", TO_BE32X('OTTD'), nullptr, nullptr, 0, 0, 0}, + {"lzo", SAVEGAME_TAG_LZO, nullptr, nullptr, 0, 0, 0}, #endif /* Roughly 5 times larger at only 1% of the CPU usage over zlib level 6. */ - {"none", TO_BE32X('OTTN'), CreateLoadFilter, CreateSaveFilter, 0, 0, 0}, + {"none", SAVEGAME_TAG_NONE, CreateLoadFilter, CreateSaveFilter, 0, 0, 0}, #if defined(WITH_ZLIB) /* After level 6 the speed reduction is significant (1.5x to 2.5x slower per level), but the reduction in filesize is * fairly insignificant (~1% for each step). Lower levels become ~5-10% bigger by each level than level 6 while level * 1 is "only" 3 times as fast. Level 0 results in uncompressed savegames at about 8 times the cost of "none". */ - {"zlib", TO_BE32X('OTTZ'), CreateLoadFilter, CreateSaveFilter, 0, 6, 9}, + {"zlib", SAVEGAME_TAG_ZLIB, CreateLoadFilter, CreateSaveFilter, 0, 6, 9}, #else - {"zlib", TO_BE32X('OTTZ'), nullptr, nullptr, 0, 0, 0}, + {"zlib", SAVEGAME_TAG_ZLIB, nullptr, nullptr, 0, 0, 0}, #endif #if defined(WITH_LIBLZMA) /* Level 2 compression is speed wise as fast as zlib level 6 compression (old default), but results in ~10% smaller saves. @@ -2652,9 +2657,9 @@ static const SaveLoadFormat _saveload_formats[] = { * The next significant reduction in file size is at level 4, but that is already 4 times slower. Level 3 is primarily 50% * slower while not improving the filesize, while level 0 and 1 are faster, but don't reduce savegame size much. * It's OTTX and not e.g. OTTL because liblzma is part of xz-utils and .tar.xz is preferred over .tar.lzma. */ - {"lzma", TO_BE32X('OTTX'), CreateLoadFilter, CreateSaveFilter, 0, 2, 9}, + {"lzma", SAVEGAME_TAG_LZMA, CreateLoadFilter, CreateSaveFilter, 0, 2, 9}, #else - {"lzma", TO_BE32X('OTTX'), nullptr, nullptr, 0, 0, 0}, + {"lzma", SAVEGAME_TAG_LZMA, nullptr, nullptr, 0, 0, 0}, #endif }; @@ -2885,6 +2890,49 @@ SaveOrLoadResult SaveWithFilter(std::shared_ptr writer, bool threade } } +/** + * Determines the SaveLoadFormat that is connected to the given tag. + * When the given tag is known, that format is chosen and a check on the validity of the version is performed. + * Otherwise a fallback to an ancient buggy format using LZO is chosen. + * @param tag The tag from the header describing the savegame compression/format. + * @param raw_version The raw version from the savegame header. + * @return The SaveLoadFormat to use for attempting to open the savegame. + */ +static const SaveLoadFormat *DetermineSaveLoadFormat(uint32_t tag, uint32_t raw_version) +{ + auto fmt = std::find_if(std::begin(_saveload_formats), std::end(_saveload_formats), [tag](const auto &fmt) { return fmt.tag == tag; }); + if (fmt != std::end(_saveload_formats)) { + /* Check version number */ + _sl_version = (SaveLoadVersion)(TO_BE32(raw_version) >> 16); + /* Minor is not used anymore from version 18.0, but it is still needed + * in versions before that (4 cases) which can't be removed easy. + * Therefore it is loaded, but never saved (or, it saves a 0 in any scenario). */ + _sl_minor_version = (TO_BE32(raw_version) >> 8) & 0xFF; + + Debug(sl, 1, "Loading savegame version {}", _sl_version); + + /* Is the version higher than the current? */ + if (_sl_version > SAVEGAME_VERSION) SlError(STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME); + if (_sl_version >= SLV_START_PATCHPACKS && _sl_version <= SLV_END_PATCHPACKS) SlError(STR_GAME_SAVELOAD_ERROR_PATCHPACK); + return fmt; + } + + Debug(sl, 0, "Unknown savegame type, trying to load it as the buggy format"); + _sl.lf->Reset(); + _sl_version = SL_MIN_VERSION; + _sl_minor_version = 0; + + /* Try to find the LZO savegame format; it uses 'OTTD' as tag. */ + fmt = std::find_if(std::begin(_saveload_formats), std::end(_saveload_formats), [](const auto &fmt) { return fmt.tag == SAVEGAME_TAG_LZO; }); + if (fmt == std::end(_saveload_formats)) { + /* Who removed the LZO savegame format definition? When built without LZO support, + * the formats must still list it just without a method to read the file. + * The caller of this function has to check for the existence of load function. */ + NOT_REACHED(); + } + return fmt; +} + /** * Actually perform the loading of a "non-old" savegame. * @param reader The filter to read the savegame from. @@ -2906,46 +2954,7 @@ static SaveOrLoadResult DoLoad(std::shared_ptr reader, bool load_che if (_sl.lf->Read((uint8_t*)hdr, sizeof(hdr)) != sizeof(hdr)) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE); /* see if we have any loader for this type. */ - const SaveLoadFormat *fmt = _saveload_formats; - for (;;) { - /* No loader found, treat as version 0 and use LZO format */ - if (fmt == endof(_saveload_formats)) { - Debug(sl, 0, "Unknown savegame type, trying to load it as the buggy format"); - _sl.lf->Reset(); - _sl_version = SL_MIN_VERSION; - _sl_minor_version = 0; - - /* Try to find the LZO savegame format; it uses 'OTTD' as tag. */ - fmt = _saveload_formats; - for (;;) { - if (fmt == endof(_saveload_formats)) { - /* Who removed LZO support? */ - NOT_REACHED(); - } - if (fmt->tag == TO_BE32X('OTTD')) break; - fmt++; - } - break; - } - - if (fmt->tag == hdr[0]) { - /* check version number */ - _sl_version = (SaveLoadVersion)(TO_BE32(hdr[1]) >> 16); - /* Minor is not used anymore from version 18.0, but it is still needed - * in versions before that (4 cases) which can't be removed easy. - * Therefore it is loaded, but never saved (or, it saves a 0 in any scenario). */ - _sl_minor_version = (TO_BE32(hdr[1]) >> 8) & 0xFF; - - Debug(sl, 1, "Loading savegame version {}", _sl_version); - - /* Is the version higher than the current? */ - if (_sl_version > SAVEGAME_VERSION) SlError(STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME); - if (_sl_version >= SLV_START_PATCHPACKS && _sl_version <= SLV_END_PATCHPACKS) SlError(STR_GAME_SAVELOAD_ERROR_PATCHPACK); - break; - } - - fmt++; - } + const SaveLoadFormat *fmt = DetermineSaveLoadFormat(hdr[0], hdr[1]); /* loader for this savegame type is not implemented? */ if (fmt->init_load == nullptr) { From 1773c5b810dd5138a0879b02e3bd5e56e7e7ddda Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 9 Apr 2024 23:16:20 +0100 Subject: [PATCH 278/695] Change: Increase object/station/roadstop class limit. (#12094) The class limit is arbitrary and not stored in game state. This change prevents all entities in classes after the 255th class from being dumped into the first class. --- src/newgrf_object.h | 8 ++++---- src/newgrf_roadstop.h | 10 +++++----- src/newgrf_station.h | 10 +++++----- src/road_cmd.h | 2 +- src/station_cmd.h | 4 ++-- src/waypoint_cmd.h | 2 +- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/newgrf_object.h b/src/newgrf_object.h index 0d224410ab..8b17a7c7a6 100644 --- a/src/newgrf_object.h +++ b/src/newgrf_object.h @@ -45,10 +45,10 @@ static const uint8_t OBJECT_SIZE_1X1 = 0x11; ///< The value of a NewGRF's size p void ResetObjects(); /** Class IDs for objects. */ -enum ObjectClassID : uint8_t { - OBJECT_CLASS_BEGIN = 0, ///< The lowest valid value - OBJECT_CLASS_MAX = 0xFF, ///< Maximum number of classes. - INVALID_OBJECT_CLASS = 0xFF, ///< Class for the less fortunate. +enum ObjectClassID : uint16_t { + OBJECT_CLASS_BEGIN = 0, ///< The lowest valid value + OBJECT_CLASS_MAX = UINT16_MAX, ///< Maximum number of classes. + INVALID_OBJECT_CLASS = UINT16_MAX, ///< Class for the less fortunate. }; /** Allow incrementing of ObjectClassID variables */ DECLARE_POSTFIX_INCREMENT(ObjectClassID) diff --git a/src/newgrf_roadstop.h b/src/newgrf_roadstop.h index 8c231dc4ca..03df70e9fa 100644 --- a/src/newgrf_roadstop.h +++ b/src/newgrf_roadstop.h @@ -22,11 +22,11 @@ /** The maximum amount of roadstops a single GRF is allowed to add */ static const int NUM_ROADSTOPS_PER_GRF = UINT16_MAX - 1; -enum RoadStopClassID : uint8_t { - ROADSTOP_CLASS_BEGIN = 0, ///< The lowest valid value - ROADSTOP_CLASS_DFLT = 0, ///< Default road stop class. - ROADSTOP_CLASS_WAYP, ///< Waypoint class (unimplemented: this is reserved for future use with road waypoints). - ROADSTOP_CLASS_MAX = 255, ///< Maximum number of classes. +enum RoadStopClassID : uint16_t { + ROADSTOP_CLASS_BEGIN = 0, ///< The lowest valid value + ROADSTOP_CLASS_DFLT = 0, ///< Default road stop class. + ROADSTOP_CLASS_WAYP, ///< Waypoint class (unimplemented: this is reserved for future use with road waypoints). + ROADSTOP_CLASS_MAX = UINT16_MAX, ///< Maximum number of classes. }; DECLARE_POSTFIX_INCREMENT(RoadStopClassID) diff --git a/src/newgrf_station.h b/src/newgrf_station.h index be9fa03dfe..2924ff4288 100644 --- a/src/newgrf_station.h +++ b/src/newgrf_station.h @@ -80,11 +80,11 @@ struct StationResolverObject : public ResolverObject { uint32_t GetDebugID() const override; }; -enum StationClassID : uint8_t { - STAT_CLASS_BEGIN = 0, ///< the lowest valid value - STAT_CLASS_DFLT = 0, ///< Default station class. - STAT_CLASS_WAYP, ///< Waypoint class. - STAT_CLASS_MAX = 255, ///< Maximum number of classes. +enum StationClassID : uint16_t { + STAT_CLASS_BEGIN = 0, ///< the lowest valid value + STAT_CLASS_DFLT = 0, ///< Default station class. + STAT_CLASS_WAYP, ///< Waypoint class. + STAT_CLASS_MAX = UINT16_MAX, ///< Maximum number of classes. }; /** Allow incrementing of StationClassID variables */ diff --git a/src/road_cmd.h b/src/road_cmd.h index 3a957f2a15..71883ddada 100644 --- a/src/road_cmd.h +++ b/src/road_cmd.h @@ -14,7 +14,7 @@ #include "road_type.h" #include "command_type.h" -enum RoadStopClassID : uint8_t; +enum RoadStopClassID : uint16_t; void DrawRoadDepotSprite(int x, int y, DiagDirection dir, RoadType rt); void UpdateNearestTownForRoadTiles(bool invalidate); diff --git a/src/station_cmd.h b/src/station_cmd.h index ef566af5fd..00f98a0d35 100644 --- a/src/station_cmd.h +++ b/src/station_cmd.h @@ -13,8 +13,8 @@ #include "command_type.h" #include "station_type.h" -enum StationClassID : uint8_t; -enum RoadStopClassID : uint8_t; +enum StationClassID : uint16_t; +enum RoadStopClassID : uint16_t; extern Town *AirportGetNearestTown(const struct AirportSpec *as, Direction rotation, TileIndex tile, TileIterator &&it, uint &mindist); extern uint8_t GetAirportNoiseLevelForDistance(const struct AirportSpec *as, uint distance); diff --git a/src/waypoint_cmd.h b/src/waypoint_cmd.h index b64ef0496c..02914124c6 100644 --- a/src/waypoint_cmd.h +++ b/src/waypoint_cmd.h @@ -13,7 +13,7 @@ #include "command_type.h" #include "station_type.h" -enum StationClassID : uint8_t; +enum StationClassID : uint16_t; CommandCost CmdBuildRailWaypoint(DoCommandFlag flags, TileIndex start_tile, Axis axis, uint8_t width, uint8_t height, StationClassID spec_class, uint16_t spec_index, StationID station_to_join, bool adjacent); CommandCost CmdRemoveFromRailWaypoint(DoCommandFlag flags, TileIndex start, TileIndex end, bool keep_rail); From f0f97c698ba609d555f4363019f4d0e20066d9d0 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 10 Apr 2024 04:40:30 +0000 Subject: [PATCH 279/695] Update: Translations from eints norwegian (bokmal): 11 changes by eriksorngard russian: 5 changes by Ln-Wolf spanish: 5 changes by MontyMontana portuguese (brazilian): 7 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 14 +++++++------- src/lang/norwegian_bokmal.txt | 17 +++++++++++------ src/lang/russian.txt | 5 +++++ src/lang/spanish.txt | 5 +++++ 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 0c5f79b7fa..548f4c9894 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1620,7 +1620,7 @@ STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Área máxima q STR_CONFIG_SETTING_SERVICEATHELIPAD :Manutenção automática de helicópteros em heliportos: {STRING} STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Efetuar manutenção de helicópteros após cada pouso, mesmo se não existir um depósito no aeroporto -STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Ligar ferramentas de paisagismo com construção de trilhos/estradas/água/aeroportos: {STRING} +STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Ligar ferramentas de paisagismo com construção de trilhos/estrada/aeroporto: {STRING} STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Ao abrir a barra de ferramentas de construção para um tipo de transporte, abrir também a barra de ferramentas de paisagismo STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :Cor do solo usada no minimapa: {STRING} @@ -1642,9 +1642,9 @@ STR_CONFIG_SETTING_SCROLLMODE :Comportamento d STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Comportamento de movimentação do mapa. A opção "posição do mouse travada" não funciona em todos os sistemas, tais como versões baseadas na web, telas sensíveis ao toque, Linux com Wayland e outros ###length 4 STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Mover visualização com o Botão Direito, posição do mouse travada -STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Mover mapa com o Botão Direito, posição do mouse travada -STR_CONFIG_SETTING_SCROLLMODE_RMB :Mover mapa com o Botão Direito do Mouse -STR_CONFIG_SETTING_SCROLLMODE_LMB :Mover mapa com o Botão Esquerdo do Mouse +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Mover mapa com Botão Direito, posição do mouse travada +STR_CONFIG_SETTING_SCROLLMODE_RMB :Mover mapa com Botão Direito do Mouse +STR_CONFIG_SETTING_SCROLLMODE_LMB :Mover mapa com Botão Esquerdo do Mouse STR_CONFIG_SETTING_SMOOTH_SCROLLING :Suavizar deslocamento da visualização: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controlar como a visualização principal se move para uma localização específica ao clicar no minimapa ou quando é dado um comando para ir até um objeto específico no mapa. Se ativado, a visualização se move suavemente. Se desativado, a visualização salta diretamente para o destino escolhido @@ -1840,7 +1840,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Desativado STR_CONFIG_SETTING_NOSERVICE :Desativar manutenção quando as quebras estão desativadas: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Quando ativado, veículos não recebem manutenção se não podem quebrar -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Penalizar a velocidade de carregamento para trens que são mais longos que a estação: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Penalizar velocidade de carregamento para trens mais longos que a estação: {STRING} STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quando ativado, os trens que são muito compridos para a estação são carregados mais lentamente do que um trem que cabe na estação. Esta configuração não afeta a geração de rotas STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ativar limite de velocidade para vagões: {STRING} @@ -4781,7 +4781,7 @@ STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Interrom STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Ativar/Desativar interrupção quando uma mensagem de registro da IA for igual a esta sequência de caracteres STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Parar em: STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Parar em -STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Quando uma mensagem de registro da IA for igual a esta sequência de caracteres, o jogo é pausado +STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}O jogo é pausado quando uma mensagem de registro da IA for igual a esta sequência de caracteres STR_AI_DEBUG_MATCH_CASE :{BLACK}Diferenciar maiúsculas/minúsculas STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Ativar/Desativar correspondência de maiúsculas/minúsculas quando comparar as mensagens de registro da IA com a sequência de caracteres de parada STR_AI_DEBUG_CONTINUE :{BLACK}Continuar @@ -5125,7 +5125,7 @@ STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... não # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} fica muito longo depois da substituição -STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Nenhuma regra de substituição automática/renovação aplicada +STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Nenhuma regra de substituição/renovação automática aplicada STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(limite de dinheiro) STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}O novo veículo não pode transportar {STRING} STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}O novo veículo não pode ser adaptado na ordem {NUM} diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 189de7b286..3953b8868c 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -3490,6 +3490,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Veitype STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF-variabel 60+x parameter (heksadesimal) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Forskyver sprite: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Forskyver sprite: Handling 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Forskyver sprite: Handling 0x5, type {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Neste sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Fortsett til neste normale sprite og hopp over enhver pseudo-/omfargings-/skrifttype- sprite, samt start om ved begynnelsen STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gå til sprite @@ -3498,6 +3501,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Forrige STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Fortsett til forrige normale sprite og hopp over enhver pseudo-/omfargings-/skrifttype- sprite, samt start om ved begynnelsen STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Forhåndsvisning av valgt sprite. Innrettingen ignoreres når spriten tegnes STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Flytt på ikonet for å endre X- og Y-forskyvningene. Ctrl+klikk for å flytte ikonet åtte enheter om gangen +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Offset sentrert @@ -3531,15 +3535,15 @@ STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} krev STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF-filen den var laget for å oversette STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :For mange NewGRF-er er innlastet STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Å laste inn {1:STRING} som statisk NewGRF med {2:STRING} kan forårsake synkroniseringsfeil -STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Uventet sprite (figur {3:NUM}) -STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Ukjent Handling 0 egenskap {4:HEX} (figur {3:NUM}) +STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Uventet sprite (sprite {3:NUM}) +STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Ukjent Handling 0 egenskap {4:HEX} (sprite {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Forsøk på å bruke ugyldig ID (sprite {3:NUM}) STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} inneholder en ødelagt sprite. Alle ødelagte spriter blir vist som røde spørsmålstegn (?). -STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Inneholder flere Handling 8-oppføringer (figur {3:NUM}) -STR_NEWGRF_ERROR_READ_BOUNDS :Leste forbi slutten av pseudo-sprite (figur {3:NUM}) -STR_NEWGRF_ERROR_GRM_FAILED :Etterspurte GRF-ressurser ikke tilgjengelig (figur {3:NUM}) +STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Inneholder flere Handling 8-oppføringer (sprite {3:NUM}) +STR_NEWGRF_ERROR_READ_BOUNDS :Leste forbi slutten av pseudo-sprite (sprite {3:NUM}) +STR_NEWGRF_ERROR_GRM_FAILED :Etterspurte GRF-ressurser ikke tilgjengelig (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} ble deaktivert av {STRING} -STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ugyldig/ukjent sprite layoutformat (figur {3:NUM}) +STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ugyldig/ukjent sprite layoutformat (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :For mange elementer i fortegnelse over eiendomsverdier (sprite {3:NUM}, property {4:HEX}) STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ugyldig industriprodukjson callback (sprite {3:NUM}, "{2:STRING}") @@ -5834,6 +5838,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 1bd5fab913..56dcbbf559 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -3663,6 +3663,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Тип доро STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Параметр переменной NewGRF 60+x (шестнадцатеричный) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Выравнивающий спрайт: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Выравнивающий спрайт: Действие 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Выравнивающий спрайт: Действие 0x5, type {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Следующий спрайт STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Перейти к следующему нормальному спрайту, пропуская изменяющие цвет, шрифтовые, псевдоспрайты. Переход из конца списка к первому спрайту. STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Перейти к спрайту @@ -3671,6 +3674,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Пред STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Перейти к предыдущему нормальному спрайту, пропуская изменяющие цвет, шрифтовые, псевдоспрайты. Переход из начала списка к последнему спрайту. STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Представление выбранного спрайта. Выравнивание не учитывается при прорисовке этого спрайта. STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Двигайте спрайт, изменяя смещение по осям X и Y. С помощью Ctrl+щелчка можно сдвигать спрайты на 8 единиц. +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Смещение в центре @@ -6056,6 +6060,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 9f7dcd3a99..e4921fda2c 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -3489,6 +3489,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de carrete STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parámetro de variable NewGRF 60+x (hexadecimal) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Alineando sprite: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Alineando sprite: Acción 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Alineando sprite: Acción 0x5, tipo {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Siguiente sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Va al siguiente sprite (ignorando pseudosprites, sprites recoloreados y sprites de fuente) y pasa del último al primer sprite STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ir a sprite @@ -3497,6 +3500,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Sprite a STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Salta al sprite anterior (ignorando pseudosprites, sprites recoloreados y sprites de fuente) y pasa del primer al último sprite STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representa el sprite seleccionado. Su alineamiento es ignorado al dibujarlo STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Mover el sprite, cambiando los ajustes X e Y. Ctrl+clic mueve el sprite ocho unidades de una sola vez +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Desviación (offset) centrada @@ -5833,6 +5837,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} From 1b4bb1d38a03753ebaa0e9513b0a9f32c9c07803 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Wed, 10 Apr 2024 10:50:44 +0200 Subject: [PATCH 280/695] Codefix: [CMake] use the UTC0 date for our ISODATE (#12470) --- cmake/scripts/FindVersion.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmake/scripts/FindVersion.cmake b/cmake/scripts/FindVersion.cmake index c4ff99a7fd..5fd4be4949 100644 --- a/cmake/scripts/FindVersion.cmake +++ b/cmake/scripts/FindVersion.cmake @@ -49,7 +49,8 @@ if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") string(SUBSTRING "${FULLHASH}" 0 10 SHORTHASH) # Get the last commit date - execute_process(COMMAND ${GIT_EXECUTABLE} show -s --pretty=format:%ci HEAD + set(ENV{TZ} "UTC0") + execute_process(COMMAND ${GIT_EXECUTABLE} show -s --date=iso-local --pretty=format:%cd HEAD OUTPUT_VARIABLE COMMITDATE OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} From 21b640b5ffb8e331dfd68e8508647267caa2feb4 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Wed, 10 Apr 2024 06:51:11 +0200 Subject: [PATCH 281/695] Codechange: simplify president name generation --- src/strings.cpp | 60 ++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 33 deletions(-) diff --git a/src/strings.cpp b/src/strings.cpp index e02ae292a4..7ee8497cd5 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1802,55 +1802,49 @@ static const char _initial_name_letters[] = { 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', }; -static void GenAndCoName(StringBuilder &builder, uint32_t arg) +static std::span GetSurnameOptions() { - const char * const *base; - uint num; + if (_settings_game.game_creation.landscape == LT_TOYLAND) return _silly_surname_list; + return _surname_list; +} - if (_settings_game.game_creation.landscape == LT_TOYLAND) { - base = _silly_surname_list; - num = lengthof(_silly_surname_list); - } else { - base = _surname_list; - num = lengthof(_surname_list); - } +/** + * Get the surname of the president with the given seed. + * @param seed The seed the surname was generated from. + * @return The surname. + */ +static const char *GetSurname(uint32_t seed) +{ + auto surname_options = GetSurnameOptions(); + return surname_options[surname_options.size() * GB(seed, 16, 8) >> 8]; +} - builder += base[num * GB(arg, 16, 8) >> 8]; +static void GenAndCoName(StringBuilder &builder, uint32_t seed) +{ + builder += GetSurname(seed); builder += " & Co."; } -static void GenPresidentName(StringBuilder &builder, uint32_t x) +static void GenPresidentName(StringBuilder &builder, uint32_t seed) { - char initial[] = "?. "; - const char * const *base; - uint num; - uint i; + builder += _initial_name_letters[std::size(_initial_name_letters) * GB(seed, 0, 8) >> 8]; + builder += ". "; - initial[0] = _initial_name_letters[sizeof(_initial_name_letters) * GB(x, 0, 8) >> 8]; - builder += initial; - - i = (sizeof(_initial_name_letters) + 35) * GB(x, 8, 8) >> 8; - if (i < sizeof(_initial_name_letters)) { - initial[0] = _initial_name_letters[i]; - builder += initial; + /* The second initial is optional. */ + size_t index = (std::size(_initial_name_letters) + 35) * GB(seed, 8, 8) >> 8; + if (index < std::size(_initial_name_letters)) { + builder += _initial_name_letters[index]; + builder += ". "; } - if (_settings_game.game_creation.landscape == LT_TOYLAND) { - base = _silly_surname_list; - num = lengthof(_silly_surname_list); - } else { - base = _surname_list; - num = lengthof(_surname_list); - } - - builder += base[num * GB(x, 16, 8) >> 8]; + builder += GetSurname(seed); } static void GetSpecialNameString(StringBuilder &builder, int ind, StringParameters &args) { switch (ind) { case 1: // not used - builder += _silly_company_names[std::min(args.GetNextParameter(), lengthof(_silly_company_names) - 1)]; + builder += _silly_company_names[std::min(args.GetNextParameter(), std::size(_silly_company_names) - 1)]; return; case 2: // used for Foobar & Co company names From 144bcbbaf18154f048663d66b35a1f1d9c76579b Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 10 Apr 2024 18:27:30 +0100 Subject: [PATCH 282/695] Fix: Use clear() to clear std::string. (#12471) --- src/industry_gui.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index f682f0cc13..78d7ae0f27 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -165,14 +165,14 @@ static inline void GetAllCargoSuffixes(CargoSuffixInOut use_input, CargoSuffixTy uint cargotype = local_id << 16 | use_input; GetCargoSuffix(cargotype, cst, ind, ind_type, indspec, suffixes[j]); } else { - suffixes[j].text[0] = '\0'; + suffixes[j].text.clear(); suffixes[j].display = CSD_CARGO; } } } else { /* Compatible behaviour with old 3-in-2-out scheme */ for (uint j = 0; j < lengthof(suffixes); j++) { - suffixes[j].text[0] = '\0'; + suffixes[j].text.clear(); suffixes[j].display = CSD_CARGO; } switch (use_input) { @@ -204,7 +204,7 @@ static inline void GetAllCargoSuffixes(CargoSuffixInOut use_input, CargoSuffixTy */ void GetCargoSuffix(CargoSuffixInOut use_input, CargoSuffixType cst, const Industry *ind, IndustryType ind_type, const IndustrySpec *indspec, CargoID cargo, uint8_t slot, CargoSuffix &suffix) { - suffix.text[0] = '\0'; + suffix.text.clear(); suffix.display = CSD_CARGO; if (!IsValidCargoID(cargo)) return; if (indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED) { From a42aa1a0861807e85c65387e5871658070f7a9ec Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 10 Apr 2024 21:32:21 +0100 Subject: [PATCH 283/695] Codechange: Remove cargo_suffix C-array from GetIndustryString. (#12472) The information is pushed onto a vector, so string ownership can be moved there instead of using a pointer into to the CargoSuffix array. --- src/industry_gui.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 78d7ae0f27..e981f61daf 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1559,21 +1559,22 @@ protected: /* Industry name */ SetDParam(p++, i->index); - static CargoSuffix cargo_suffix[INDUSTRY_NUM_OUTPUTS]; - /* Get industry productions (CargoID, production, suffix, transported) */ struct CargoInfo { - CargoID cargo_id; - uint16_t production; - const char *suffix; - uint transported; + CargoID cargo_id; ///< Cargo ID. + uint16_t production; ///< Production last month. + uint transported; ///< Percent transported last month. + std::string suffix; ///< Cargo suffix. + + CargoInfo(CargoID cargo_id, uint16_t production, uint transported, std::string &&suffix) : cargo_id(cargo_id), production(production), transported(transported), suffix(std::move(suffix)) {} }; std::vector cargos; for (auto itp = std::begin(i->produced); itp != std::end(i->produced); ++itp) { if (!IsValidCargoID(itp->cargo)) continue; - GetCargoSuffix(CARGOSUFFIX_OUT, CST_DIR, i, i->type, indsp, itp->cargo, itp - std::begin(i->produced), cargo_suffix[itp - std::begin(i->produced)]); - cargos.push_back({ itp->cargo, itp->history[LAST_MONTH].production, cargo_suffix[itp - std::begin(i->produced)].text.c_str(), ToPercent8(itp->history[LAST_MONTH].PctTransported()) }); + CargoSuffix cargo_suffix; + GetCargoSuffix(CARGOSUFFIX_OUT, CST_DIR, i, i->type, indsp, itp->cargo, itp - std::begin(i->produced), cargo_suffix); + cargos.emplace_back(itp->cargo, itp->history[LAST_MONTH].production, ToPercent8(itp->history[LAST_MONTH].PctTransported()), std::move(cargo_suffix.text)); } switch (static_cast(this->industries.SortType())) { @@ -1610,11 +1611,11 @@ protected: /* Display first 3 cargos */ for (size_t j = 0; j < std::min(3, cargos.size()); j++) { - CargoInfo ci = cargos[j]; + CargoInfo &ci = cargos[j]; SetDParam(p++, STR_INDUSTRY_DIRECTORY_ITEM_INFO); SetDParam(p++, ci.cargo_id); SetDParam(p++, ci.production); - SetDParamStr(p++, ci.suffix); + SetDParamStr(p++, std::move(ci.suffix)); SetDParam(p++, ci.transported); } From 332cbca36e3188f48b69955f3eff2db00cd435ff Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 9 Apr 2024 02:47:14 +0100 Subject: [PATCH 284/695] Codechange: Pass std::string_view from drivers instead of char *. --- src/driver.cpp | 12 ++++++------ src/driver.h | 16 ++++++++-------- src/music/allegro_m.cpp | 4 ++-- src/music/allegro_m.h | 4 ++-- src/music/bemidi.cpp | 4 ++-- src/music/bemidi.h | 4 ++-- src/music/cocoa_m.cpp | 4 ++-- src/music/cocoa_m.h | 4 ++-- src/music/dmusic.cpp | 4 ++-- src/music/dmusic.h | 4 ++-- src/music/extmidi.cpp | 8 ++++---- src/music/extmidi.h | 4 ++-- src/music/fluidsynth.cpp | 4 ++-- src/music/fluidsynth.h | 4 ++-- src/music/null_m.h | 4 ++-- src/music/win32_m.cpp | 4 ++-- src/music/win32_m.h | 4 ++-- src/settings_gui.cpp | 4 ++-- src/sound/allegro_s.cpp | 4 ++-- src/sound/allegro_s.h | 4 ++-- src/sound/cocoa_s.cpp | 4 ++-- src/sound/cocoa_s.h | 4 ++-- src/sound/null_s.h | 4 ++-- src/sound/sdl2_s.cpp | 4 ++-- src/sound/sdl_s.cpp | 4 ++-- src/sound/sdl_s.h | 4 ++-- src/sound/win32_s.cpp | 4 ++-- src/sound/win32_s.h | 4 ++-- src/sound/xaudio2_s.cpp | 6 +++--- src/sound/xaudio2_s.h | 4 ++-- src/video/allegro_v.cpp | 4 ++-- src/video/allegro_v.h | 4 ++-- src/video/cocoa/cocoa_ogl.h | 8 ++++---- src/video/cocoa/cocoa_ogl.mm | 12 ++++++------ src/video/cocoa/cocoa_v.h | 6 +++--- src/video/cocoa/cocoa_v.mm | 14 +++++++------- src/video/dedicated_v.cpp | 4 ++-- src/video/dedicated_v.h | 4 ++-- src/video/null_v.cpp | 4 ++-- src/video/null_v.h | 4 ++-- src/video/opengl.cpp | 10 +++++----- src/video/opengl.h | 4 ++-- src/video/sdl2_default_v.h | 2 +- src/video/sdl2_opengl_v.cpp | 12 ++++++------ src/video/sdl2_opengl_v.h | 6 +++--- src/video/sdl2_v.cpp | 22 +++++++++++----------- src/video/sdl2_v.h | 6 +++--- src/video/sdl_v.cpp | 4 ++-- src/video/sdl_v.h | 4 ++-- src/video/video_driver.hpp | 2 +- src/video/win32_v.cpp | 28 ++++++++++++++-------------- src/video/win32_v.h | 12 ++++++------ 52 files changed, 161 insertions(+), 161 deletions(-) diff --git a/src/driver.cpp b/src/driver.cpp index 5d3f2addd1..630a974fd4 100644 --- a/src/driver.cpp +++ b/src/driver.cpp @@ -148,15 +148,15 @@ bool DriverFactoryBase::SelectDriverImpl(const std::string &name, Driver::Type t Driver *newd = d->CreateInstance(); *GetActiveDriver(type) = newd; - const char *err = newd->Start({}); - if (err == nullptr) { + auto err = newd->Start({}); + if (!err) { Debug(driver, 1, "Successfully probed {} driver '{}'", GetDriverTypeName(type), d->name); delete oldd; return true; } *GetActiveDriver(type) = oldd; - Debug(driver, 1, "Probing {} driver '{}' failed with error: {}", GetDriverTypeName(type), d->name, err); + Debug(driver, 1, "Probing {} driver '{}' failed with error: {}", GetDriverTypeName(type), d->name, *err); delete newd; if (type == Driver::DT_VIDEO && _video_hw_accel && d->UsesHardwareAcceleration()) { @@ -192,10 +192,10 @@ bool DriverFactoryBase::SelectDriverImpl(const std::string &name, Driver::Type t /* Found our driver, let's try it */ Driver *newd = d->CreateInstance(); - const char *err = newd->Start(parms); - if (err != nullptr) { + auto err = newd->Start(parms); + if (err) { delete newd; - UserError("Unable to load driver '{}'. The error was: {}", d->name, err); + UserError("Unable to load driver '{}'. The error was: {}", d->name, *err); } Debug(driver, 1, "Successfully loaded {} driver '{}'", GetDriverTypeName(type), d->name); diff --git a/src/driver.h b/src/driver.h index 4683784266..ef39391890 100644 --- a/src/driver.h +++ b/src/driver.h @@ -23,9 +23,9 @@ public: /** * Start this driver. * @param parm Parameters passed to the driver. - * @return nullptr if everything went okay, otherwise an error message. + * @return std::nullopt if everything went okay, otherwise an error message. */ - virtual const char *Start(const StringList &parm) = 0; + virtual std::optional Start(const StringList &parm) = 0; /** * Stop this driver. @@ -47,7 +47,7 @@ public: * Get the name of this driver. * @return The name of the driver. */ - virtual const char *GetName() const = 0; + virtual std::string_view GetName() const = 0; }; DECLARE_POSTFIX_INCREMENT(Driver::Type) @@ -62,8 +62,8 @@ private: Driver::Type type; ///< The type of driver. int priority; ///< The priority of this factory. - const char *name; ///< The name of the drivers of this factory. - const char *description; ///< The description of this driver. + std::string_view name; ///< The name of the drivers of this factory. + std::string_view description; ///< The description of this driver. typedef std::map Drivers; ///< Type for a map of drivers. @@ -92,9 +92,9 @@ private: * @param type The type of driver to get the name of. * @return The name of the type. */ - static const char *GetDriverTypeName(Driver::Type type) + static std::string_view GetDriverTypeName(Driver::Type type) { - static const char * const driver_type_name[] = { "music", "sound", "video" }; + static const std::string_view driver_type_name[] = { "music", "sound", "video" }; return driver_type_name[type]; } @@ -135,7 +135,7 @@ public: * Get a nice description of the driver-class. * @return The description. */ - const char *GetDescription() const + std::string_view GetDescription() const { return this->description; } diff --git a/src/music/allegro_m.cpp b/src/music/allegro_m.cpp index 849be0f87c..ce9184f15f 100644 --- a/src/music/allegro_m.cpp +++ b/src/music/allegro_m.cpp @@ -26,7 +26,7 @@ static MIDI *_midi = nullptr; */ extern int _allegro_instance_count; -const char *MusicDriver_Allegro::Start(const StringList &) +std::optional MusicDriver_Allegro::Start(const StringList &) { if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, nullptr)) { Debug(driver, 0, "allegro: install_allegro failed '{}'", allegro_error); @@ -46,7 +46,7 @@ const char *MusicDriver_Allegro::Start(const StringList &) return "No sound card found"; } - return nullptr; + return std::nullopt; } void MusicDriver_Allegro::Stop() diff --git a/src/music/allegro_m.h b/src/music/allegro_m.h index 697fad4661..de59075f5e 100644 --- a/src/music/allegro_m.h +++ b/src/music/allegro_m.h @@ -15,7 +15,7 @@ /** Allegro's music player. */ class MusicDriver_Allegro : public MusicDriver { public: - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; @@ -26,7 +26,7 @@ public: bool IsSongPlaying() override; void SetVolume(uint8_t vol) override; - const char *GetName() const override { return "allegro"; } + std::string_view GetName() const override { return "allegro"; } }; /** Factory for allegro's music player. */ diff --git a/src/music/bemidi.cpp b/src/music/bemidi.cpp index 6fda4cfe06..44386cf6c8 100644 --- a/src/music/bemidi.cpp +++ b/src/music/bemidi.cpp @@ -18,9 +18,9 @@ /** Factory for BeOS' midi player. */ static FMusicDriver_BeMidi iFMusicDriver_BeMidi; -const char *MusicDriver_BeMidi::Start(const StringList &parm) +std::optional MusicDriver_BeMidi::Start(const StringList &parm) { - return nullptr; + return std::nullopt; } void MusicDriver_BeMidi::Stop() diff --git a/src/music/bemidi.h b/src/music/bemidi.h index 52e9d7bd68..47529aa51d 100644 --- a/src/music/bemidi.h +++ b/src/music/bemidi.h @@ -18,7 +18,7 @@ /** The midi player for BeOS. */ class MusicDriver_BeMidi : public MusicDriver { public: - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; @@ -29,7 +29,7 @@ public: bool IsSongPlaying() override; void SetVolume(uint8_t vol) override; - const char *GetName() const override { return "bemidi"; } + std::string_view GetName() const override { return "bemidi"; } private: BMidiSynthFile *midi_synth_file = nullptr; diff --git a/src/music/cocoa_m.cpp b/src/music/cocoa_m.cpp index 088f5bdf00..9aa847712f 100644 --- a/src/music/cocoa_m.cpp +++ b/src/music/cocoa_m.cpp @@ -79,11 +79,11 @@ static void DoSetVolume() /** * Initialized the MIDI player, including QuickTime initialization. */ -const char *MusicDriver_Cocoa::Start(const StringList &) +std::optional MusicDriver_Cocoa::Start(const StringList &) { if (NewMusicPlayer(&_player) != noErr) return "failed to create music player"; - return nullptr; + return std::nullopt; } diff --git a/src/music/cocoa_m.h b/src/music/cocoa_m.h index ffa87b00fc..dbf58e425e 100644 --- a/src/music/cocoa_m.h +++ b/src/music/cocoa_m.h @@ -14,7 +14,7 @@ class MusicDriver_Cocoa : public MusicDriver { public: - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; @@ -25,7 +25,7 @@ public: bool IsSongPlaying() override; void SetVolume(uint8_t vol) override; - const char *GetName() const override { return "cocoa"; } + std::string_view GetName() const override { return "cocoa"; } }; class FMusicDriver_Cocoa : public DriverFactoryBase { diff --git a/src/music/dmusic.cpp b/src/music/dmusic.cpp index 50be53accb..8d0919ceb3 100644 --- a/src/music/dmusic.cpp +++ b/src/music/dmusic.cpp @@ -1072,7 +1072,7 @@ static const char *LoadDefaultDLSFile(const char *user_dls) } -const char *MusicDriver_DMusic::Start(const StringList &parm) +std::optional MusicDriver_DMusic::Start(const StringList &parm) { /* Initialize COM */ if (FAILED(CoInitializeEx(nullptr, COINIT_MULTITHREADED))) return "COM initialization failed"; @@ -1153,7 +1153,7 @@ const char *MusicDriver_DMusic::Start(const StringList &parm) if (!StartNewThread(&_dmusic_thread, "ottd:dmusic", &MidiThreadProc)) return "Can't create MIDI output thread"; - return nullptr; + return std::nullopt; } diff --git a/src/music/dmusic.h b/src/music/dmusic.h index 9c2e009dcd..32f0943d85 100644 --- a/src/music/dmusic.h +++ b/src/music/dmusic.h @@ -17,7 +17,7 @@ class MusicDriver_DMusic : public MusicDriver { public: virtual ~MusicDriver_DMusic(); - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; @@ -28,7 +28,7 @@ public: bool IsSongPlaying() override; void SetVolume(uint8_t vol) override; - const char *GetName() const override { return "dmusic"; } + std::string_view GetName() const override { return "dmusic"; } }; /** Factory for the DirectX music player. */ diff --git a/src/music/extmidi.cpp b/src/music/extmidi.cpp index 1538b1e7a6..22fd8fcfa0 100644 --- a/src/music/extmidi.cpp +++ b/src/music/extmidi.cpp @@ -35,10 +35,10 @@ /** Factory for the midi player that uses external players. */ static FMusicDriver_ExtMidi iFMusicDriver_ExtMidi; -const char *MusicDriver_ExtMidi::Start(const StringList &parm) +std::optional MusicDriver_ExtMidi::Start(const StringList &parm) { - if (strcmp(VideoDriver::GetInstance()->GetName(), "allegro") == 0 || - strcmp(SoundDriver::GetInstance()->GetName(), "allegro") == 0) { + if (VideoDriver::GetInstance()->GetName() == "allegro" || + SoundDriver::GetInstance()->GetName() == "allegro") { return "the extmidi driver does not work when Allegro is loaded."; } @@ -62,7 +62,7 @@ const char *MusicDriver_ExtMidi::Start(const StringList &parm) this->song.clear(); this->pid = -1; - return nullptr; + return std::nullopt; } void MusicDriver_ExtMidi::Stop() diff --git a/src/music/extmidi.h b/src/music/extmidi.h index ee4ebb8eff..f08c513008 100644 --- a/src/music/extmidi.h +++ b/src/music/extmidi.h @@ -22,7 +22,7 @@ private: void DoStop(); public: - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; @@ -33,7 +33,7 @@ public: bool IsSongPlaying() override; void SetVolume(uint8_t vol) override; - const char *GetName() const override { return "extmidi"; } + std::string_view GetName() const override { return "extmidi"; } }; class FMusicDriver_ExtMidi : public DriverFactoryBase { diff --git a/src/music/fluidsynth.cpp b/src/music/fluidsynth.cpp index 6cb92e6363..4ffd90e620 100644 --- a/src/music/fluidsynth.cpp +++ b/src/music/fluidsynth.cpp @@ -58,7 +58,7 @@ static void RenderMusicStream(int16_t *buffer, size_t samples) fluid_synth_write_s16(_midi.synth, samples, buffer, 0, 2, buffer, 1, 2); } -const char *MusicDriver_FluidSynth::Start(const StringList ¶m) +std::optional MusicDriver_FluidSynth::Start(const StringList ¶m) { std::lock_guard lock{ _midi.synth_mutex }; @@ -110,7 +110,7 @@ const char *MusicDriver_FluidSynth::Start(const StringList ¶m) _midi.player = nullptr; - return nullptr; + return std::nullopt; } void MusicDriver_FluidSynth::Stop() diff --git a/src/music/fluidsynth.h b/src/music/fluidsynth.h index 8eac4c000a..ae7a8385d8 100644 --- a/src/music/fluidsynth.h +++ b/src/music/fluidsynth.h @@ -15,7 +15,7 @@ /** Music driver making use of FluidSynth. */ class MusicDriver_FluidSynth : public MusicDriver { public: - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; @@ -26,7 +26,7 @@ public: bool IsSongPlaying() override; void SetVolume(uint8_t vol) override; - const char *GetName() const override { return "fluidsynth"; } + std::string_view GetName() const override { return "fluidsynth"; } }; /** Factory for the fluidsynth driver. */ diff --git a/src/music/null_m.h b/src/music/null_m.h index da6e5dd92c..9c2ca82855 100644 --- a/src/music/null_m.h +++ b/src/music/null_m.h @@ -15,7 +15,7 @@ /** The music player that does nothing. */ class MusicDriver_Null : public MusicDriver { public: - const char *Start(const StringList &) override { return nullptr; } + std::optional Start(const StringList &) override { return std::nullopt; } void Stop() override { } @@ -26,7 +26,7 @@ public: bool IsSongPlaying() override { return true; } void SetVolume(uint8_t) override { } - const char *GetName() const override { return "null"; } + std::string_view GetName() const override { return "null"; } }; /** Factory for the null music player. */ diff --git a/src/music/win32_m.cpp b/src/music/win32_m.cpp index de7ed630a2..886deab2c0 100644 --- a/src/music/win32_m.cpp +++ b/src/music/win32_m.cpp @@ -367,7 +367,7 @@ void MusicDriver_Win32::SetVolume(uint8_t vol) _midi.new_volume = vol; } -const char *MusicDriver_Win32::Start(const StringList &parm) +std::optional MusicDriver_Win32::Start(const StringList &parm) { Debug(driver, 2, "Win32-MIDI: Start: initializing"); @@ -416,7 +416,7 @@ const char *MusicDriver_Win32::Start(const StringList &parm) if (timeBeginPeriod(_midi.time_period) == MMSYSERR_NOERROR) { /* success */ Debug(driver, 2, "Win32-MIDI: Start: timer resolution is {}", _midi.time_period); - return nullptr; + return std::nullopt; } } midiOutClose(_midi.midi_out); diff --git a/src/music/win32_m.h b/src/music/win32_m.h index 74c0b938a6..bd6125420b 100644 --- a/src/music/win32_m.h +++ b/src/music/win32_m.h @@ -15,7 +15,7 @@ /** The Windows music player. */ class MusicDriver_Win32 : public MusicDriver { public: - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; @@ -26,7 +26,7 @@ public: bool IsSongPlaying() override; void SetVolume(uint8_t vol) override; - const char *GetName() const override { return "win32"; } + std::string_view GetName() const override { return "win32"; } }; /** Factory for Windows' music player. */ diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index b188d429e6..f1117563bc 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -579,7 +579,7 @@ struct GameOptionsWindow : Window { break; case WID_GO_VIDEO_DRIVER_INFO: - SetDParamStr(0, VideoDriver::GetInstance()->GetInfoString()); + SetDParamStr(0, std::string{VideoDriver::GetInstance()->GetInfoString()}); DrawStringMultiLine(r, STR_GAME_OPTIONS_VIDEO_DRIVER_INFO); break; @@ -641,7 +641,7 @@ struct GameOptionsWindow : Window { changed |= wid->UpdateVerticalSize(y); wid = this->GetWidget(WID_GO_VIDEO_DRIVER_INFO); - SetDParamStr(0, VideoDriver::GetInstance()->GetInfoString()); + SetDParamStr(0, std::string{VideoDriver::GetInstance()->GetInfoString()}); y = GetStringHeight(STR_GAME_OPTIONS_VIDEO_DRIVER_INFO, wid->current_x); changed |= wid->UpdateVerticalSize(y); diff --git a/src/sound/allegro_s.cpp b/src/sound/allegro_s.cpp index 1b695e8a43..a44578c160 100644 --- a/src/sound/allegro_s.cpp +++ b/src/sound/allegro_s.cpp @@ -50,7 +50,7 @@ void SoundDriver_Allegro::MainLoop() */ extern int _allegro_instance_count; -const char *SoundDriver_Allegro::Start(const StringList &parm) +std::optional SoundDriver_Allegro::Start(const StringList &parm) { if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, nullptr)) { Debug(driver, 0, "allegro: install_allegro failed '{}'", allegro_error); @@ -74,7 +74,7 @@ const char *SoundDriver_Allegro::Start(const StringList &parm) _buffer_size = GetDriverParamInt(parm, "samples", 1024) * hz / 11025; _stream = play_audio_stream(_buffer_size, 16, true, hz, 255, 128); MxInitialize(hz); - return nullptr; + return std::nullopt; } void SoundDriver_Allegro::Stop() diff --git a/src/sound/allegro_s.h b/src/sound/allegro_s.h index d2ef08366c..1026038355 100644 --- a/src/sound/allegro_s.h +++ b/src/sound/allegro_s.h @@ -15,12 +15,12 @@ /** Implementation of the allegro sound driver. */ class SoundDriver_Allegro : public SoundDriver { public: - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; void MainLoop() override; - const char *GetName() const override { return "allegro"; } + std::string_view GetName() const override { return "allegro"; } }; /** Factory for the allegro sound driver. */ diff --git a/src/sound/cocoa_s.cpp b/src/sound/cocoa_s.cpp index f059384181..6c4348acdb 100644 --- a/src/sound/cocoa_s.cpp +++ b/src/sound/cocoa_s.cpp @@ -44,7 +44,7 @@ static OSStatus audioCallback(void *, AudioUnitRenderActionFlags *, const AudioT } -const char *SoundDriver_Cocoa::Start(const StringList &parm) +std::optional SoundDriver_Cocoa::Start(const StringList &parm) { struct AURenderCallbackStruct callback; AudioStreamBasicDescription requestedDesc; @@ -108,7 +108,7 @@ const char *SoundDriver_Cocoa::Start(const StringList &parm) } /* We're running! */ - return nullptr; + return std::nullopt; } diff --git a/src/sound/cocoa_s.h b/src/sound/cocoa_s.h index f1e623ce5a..0f32e25b4d 100644 --- a/src/sound/cocoa_s.h +++ b/src/sound/cocoa_s.h @@ -14,10 +14,10 @@ class SoundDriver_Cocoa : public SoundDriver { public: - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; - const char *GetName() const override { return "cocoa"; } + std::string_view GetName() const override { return "cocoa"; } }; class FSoundDriver_Cocoa : public DriverFactoryBase { diff --git a/src/sound/null_s.h b/src/sound/null_s.h index ca699da236..fb931b84dd 100644 --- a/src/sound/null_s.h +++ b/src/sound/null_s.h @@ -15,10 +15,10 @@ /** Implementation of the null sound driver. */ class SoundDriver_Null : public SoundDriver { public: - const char *Start(const StringList &) override { return nullptr; } + std::optional Start(const StringList &) override { return std::nullopt; } void Stop() override { } - const char *GetName() const override { return "null"; } + std::string_view GetName() const override { return "null"; } bool HasOutput() const override { return false; } }; diff --git a/src/sound/sdl2_s.cpp b/src/sound/sdl2_s.cpp index 0a49ad0297..af12a00a31 100644 --- a/src/sound/sdl2_s.cpp +++ b/src/sound/sdl2_s.cpp @@ -30,7 +30,7 @@ static void CDECL fill_sound_buffer(void *, Uint8 *stream, int len) MxMixSamples(stream, len / 4); } -const char *SoundDriver_SDL::Start(const StringList &parm) +std::optional SoundDriver_SDL::Start(const StringList &parm) { SDL_AudioSpec spec; SDL_AudioSpec spec_actual; @@ -52,7 +52,7 @@ const char *SoundDriver_SDL::Start(const StringList &parm) SDL_AudioDeviceID dev = SDL_OpenAudioDevice(nullptr, 0, &spec, &spec_actual, SDL_AUDIO_ALLOW_FREQUENCY_CHANGE); MxInitialize(spec_actual.freq); SDL_PauseAudioDevice(dev, 0); - return nullptr; + return std::nullopt; } void SoundDriver_SDL::Stop() diff --git a/src/sound/sdl_s.cpp b/src/sound/sdl_s.cpp index 4aeaa35b26..7b1f93e240 100644 --- a/src/sound/sdl_s.cpp +++ b/src/sound/sdl_s.cpp @@ -30,7 +30,7 @@ static void CDECL fill_sound_buffer(void *, Uint8 *stream, int len) MxMixSamples(stream, len / 4); } -const char *SoundDriver_SDL::Start(const StringList &parm) +std::optional SoundDriver_SDL::Start(const StringList &parm) { SDL_AudioSpec spec; @@ -51,7 +51,7 @@ const char *SoundDriver_SDL::Start(const StringList &parm) MxInitialize(spec.freq); SDL_OpenAudio(&spec, &spec); SDL_PauseAudio(0); - return nullptr; + return std::nullopt; } void SoundDriver_SDL::Stop() diff --git a/src/sound/sdl_s.h b/src/sound/sdl_s.h index fbe7d77d84..abf9ac6a20 100644 --- a/src/sound/sdl_s.h +++ b/src/sound/sdl_s.h @@ -15,10 +15,10 @@ /** Implementation of the SDL sound driver. */ class SoundDriver_SDL : public SoundDriver { public: - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; - const char *GetName() const override { return "sdl"; } + std::string_view GetName() const override { return "sdl"; } }; /** Factory for the SDL sound driver. */ diff --git a/src/sound/win32_s.cpp b/src/sound/win32_s.cpp index 73cc3c062d..e198fb806b 100644 --- a/src/sound/win32_s.cpp +++ b/src/sound/win32_s.cpp @@ -59,7 +59,7 @@ static DWORD WINAPI SoundThread(LPVOID) return 0; } -const char *SoundDriver_Win32::Start(const StringList &parm) +std::optional SoundDriver_Win32::Start(const StringList &parm) { WAVEFORMATEX wfex; wfex.wFormatTag = WAVE_FORMAT_PCM; @@ -89,7 +89,7 @@ const char *SoundDriver_Win32::Start(const StringList &parm) return error; } - return nullptr; + return std::nullopt; } void SoundDriver_Win32::Stop() diff --git a/src/sound/win32_s.h b/src/sound/win32_s.h index 5722b2089d..5801f8af41 100644 --- a/src/sound/win32_s.h +++ b/src/sound/win32_s.h @@ -15,10 +15,10 @@ /** Implementation of the sound driver for Windows. */ class SoundDriver_Win32 : public SoundDriver { public: - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; - const char *GetName() const override { return "win32"; } + std::string_view GetName() const override { return "win32"; } }; /** Factory for the sound driver for Windows. */ diff --git a/src/sound/xaudio2_s.cpp b/src/sound/xaudio2_s.cpp index 365cf46367..4b8d8236a6 100644 --- a/src/sound/xaudio2_s.cpp +++ b/src/sound/xaudio2_s.cpp @@ -135,10 +135,10 @@ static HRESULT CreateXAudio(API_XAudio2Create xAudio2Create) * Initialises the XAudio2 driver. * * @param parm Driver parameters. - * @return An error message if unsuccessful, or nullptr otherwise. + * @return An error message if unsuccessful, or std::nullopt otherwise. * */ -const char *SoundDriver_XAudio2::Start(const StringList &parm) +std::optional SoundDriver_XAudio2::Start(const StringList &parm) { HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED); @@ -257,7 +257,7 @@ const char *SoundDriver_XAudio2::Start(const StringList &parm) return "Failed to submit the first audio buffer"; } - return nullptr; + return std::nullopt; } /** diff --git a/src/sound/xaudio2_s.h b/src/sound/xaudio2_s.h index 621655d8d5..17ec81f311 100644 --- a/src/sound/xaudio2_s.h +++ b/src/sound/xaudio2_s.h @@ -15,10 +15,10 @@ /** Implementation of the XAudio2 sound driver. */ class SoundDriver_XAudio2 : public SoundDriver { public: - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; - const char *GetName() const override { return "xaudio2"; } + std::string_view GetName() const override { return "xaudio2"; } }; /** Factory for the XAudio2 sound driver. */ diff --git a/src/video/allegro_v.cpp b/src/video/allegro_v.cpp index 77c90e1536..6cf585813d 100644 --- a/src/video/allegro_v.cpp +++ b/src/video/allegro_v.cpp @@ -420,7 +420,7 @@ bool VideoDriver_Allegro::PollEvent() */ int _allegro_instance_count = 0; -const char *VideoDriver_Allegro::Start(const StringList ¶m) +std::optional VideoDriver_Allegro::Start(const StringList ¶m) { if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, nullptr)) { Debug(driver, 0, "allegro: install_allegro failed '{}'", allegro_error); @@ -450,7 +450,7 @@ const char *VideoDriver_Allegro::Start(const StringList ¶m) this->is_game_threaded = !GetDriverParamBool(param, "no_threads") && !GetDriverParamBool(param, "no_thread"); - return nullptr; + return std::nullopt; } void VideoDriver_Allegro::Stop() diff --git a/src/video/allegro_v.h b/src/video/allegro_v.h index d1576fea9e..8789b1158f 100644 --- a/src/video/allegro_v.h +++ b/src/video/allegro_v.h @@ -15,7 +15,7 @@ /** The allegro video driver. */ class VideoDriver_Allegro : public VideoDriver { public: - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; @@ -33,7 +33,7 @@ public: std::vector GetListOfMonitorRefreshRates() override; - const char *GetName() const override { return "allegro"; } + std::string_view GetName() const override { return "allegro"; } protected: void InputLoop() override; diff --git a/src/video/cocoa/cocoa_ogl.h b/src/video/cocoa/cocoa_ogl.h index 7c9534989c..a238fbce63 100644 --- a/src/video/cocoa/cocoa_ogl.h +++ b/src/video/cocoa/cocoa_ogl.h @@ -20,12 +20,12 @@ class VideoDriver_CocoaOpenGL : public VideoDriver_Cocoa { uint8_t *anim_buffer; ///< Animation buffer from OpenGL back-end. std::string driver_info; ///< Information string about selected driver. - const char *AllocateContext(bool allow_software); + std::optional AllocateContext(bool allow_software); public: VideoDriver_CocoaOpenGL() : VideoDriver_Cocoa(true), gl_context(nullptr), anim_buffer(nullptr), driver_info(this->GetName()) {} - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; bool HasEfficient8Bpp() const override { return true; } @@ -40,9 +40,9 @@ public: uint8_t *GetAnimBuffer() override { return this->anim_buffer; } /** Return driver name */ - const char *GetName() const override { return "cocoa-opengl"; } + std::string_view GetName() const override { return "cocoa-opengl"; } - const char *GetInfoString() const override { return this->driver_info.c_str(); } + std::string_view GetInfoString() const override { return this->driver_info; } void AllocateBackingStore(bool force = false) override; diff --git a/src/video/cocoa/cocoa_ogl.mm b/src/video/cocoa/cocoa_ogl.mm index a5fe9badeb..4b6cdc68c1 100644 --- a/src/video/cocoa/cocoa_ogl.mm +++ b/src/video/cocoa/cocoa_ogl.mm @@ -185,10 +185,10 @@ static bool _allowSoftware; static FVideoDriver_CocoaOpenGL iFVideoDriver_CocoaOpenGL; -const char *VideoDriver_CocoaOpenGL::Start(const StringList ¶m) +std::optional VideoDriver_CocoaOpenGL::Start(const StringList ¶m) { - const char *err = this->Initialize(); - if (err != nullptr) return err; + auto err = this->Initialize(); + if (err) return err; int bpp = BlitterFactory::GetCurrentBlitter()->GetScreenDepth(); if (bpp != 8 && bpp != 32) { @@ -198,7 +198,7 @@ const char *VideoDriver_CocoaOpenGL::Start(const StringList ¶m) /* Try to allocate GL context. */ err = this->AllocateContext(GetDriverParamBool(param, "software")); - if (err != nullptr) { + if (err) { this->Stop(); return err; } @@ -224,7 +224,7 @@ const char *VideoDriver_CocoaOpenGL::Start(const StringList ¶m) this->is_game_threaded = !GetDriverParamBool(param, "no_threads") && !GetDriverParamBool(param, "no_thread"); - return nullptr; + return std::nullopt; } @@ -252,7 +252,7 @@ void VideoDriver_CocoaOpenGL::ClearSystemSprites() OpenGLBackend::Get()->ClearCursorCache(); } -const char *VideoDriver_CocoaOpenGL::AllocateContext(bool allow_software) +std::optional VideoDriver_CocoaOpenGL::AllocateContext(bool allow_software) { [ OTTD_CGLLayer setAllowSoftware:allow_software ]; diff --git a/src/video/cocoa/cocoa_v.h b/src/video/cocoa/cocoa_v.h index 06356018b0..edfa39646d 100644 --- a/src/video/cocoa/cocoa_v.h +++ b/src/video/cocoa/cocoa_v.h @@ -72,7 +72,7 @@ protected: void GameSizeChanged(); - const char *Initialize(); + std::optional Initialize(); void UpdateVideoModes(); @@ -109,11 +109,11 @@ public: VideoDriver_CocoaQuartz(); - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; /** Return driver name */ - const char *GetName() const override { return "cocoa"; } + std::string_view GetName() const override { return "cocoa"; } void AllocateBackingStore(bool force = false) override; diff --git a/src/video/cocoa/cocoa_v.mm b/src/video/cocoa/cocoa_v.mm index 7ba8314bab..7b08367cdc 100644 --- a/src/video/cocoa/cocoa_v.mm +++ b/src/video/cocoa/cocoa_v.mm @@ -122,7 +122,7 @@ void VideoDriver_Cocoa::Stop() } /** Common driver initialization. */ -const char *VideoDriver_Cocoa::Initialize() +std::optional VideoDriver_Cocoa::Initialize() { if (!MacOSVersionIsAtLeast(10, 7, 0)) return "The Cocoa video driver requires Mac OS X 10.7 or later."; @@ -130,12 +130,12 @@ const char *VideoDriver_Cocoa::Initialize() _cocoa_video_started = true; /* Don't create a window or enter fullscreen if we're just going to show a dialog. */ - if (!CocoaSetupApplication()) return nullptr; + if (!CocoaSetupApplication()) return std::nullopt; this->UpdateAutoResolution(); this->orig_res = _cur_resolution; - return nullptr; + return std::nullopt; } /** @@ -589,10 +589,10 @@ VideoDriver_CocoaQuartz::VideoDriver_CocoaQuartz() this->cgcontext = nullptr; } -const char *VideoDriver_CocoaQuartz::Start(const StringList ¶m) +std::optional VideoDriver_CocoaQuartz::Start(const StringList ¶m) { - const char *err = this->Initialize(); - if (err != nullptr) return err; + auto err = this->Initialize(); + if (err) return err; int bpp = BlitterFactory::GetCurrentBlitter()->GetScreenDepth(); if (bpp != 8 && bpp != 32) { @@ -615,7 +615,7 @@ const char *VideoDriver_CocoaQuartz::Start(const StringList ¶m) this->is_game_threaded = !GetDriverParamBool(param, "no_threads") && !GetDriverParamBool(param, "no_thread"); - return nullptr; + return std::nullopt; } diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp index 06998d1bf1..c0c0fa2278 100644 --- a/src/video/dedicated_v.cpp +++ b/src/video/dedicated_v.cpp @@ -103,7 +103,7 @@ extern bool SafeLoad(const std::string &filename, SaveLoadOperation fop, Detaile static FVideoDriver_Dedicated iFVideoDriver_Dedicated; -const char *VideoDriver_Dedicated::Start(const StringList &) +std::optional VideoDriver_Dedicated::Start(const StringList &) { this->UpdateAutoResolution(); @@ -131,7 +131,7 @@ const char *VideoDriver_Dedicated::Start(const StringList &) #endif Debug(driver, 1, "Loading dedicated server"); - return nullptr; + return std::nullopt; } void VideoDriver_Dedicated::Stop() diff --git a/src/video/dedicated_v.h b/src/video/dedicated_v.h index 54e2dd402b..f1271075d8 100644 --- a/src/video/dedicated_v.h +++ b/src/video/dedicated_v.h @@ -15,7 +15,7 @@ /** The dedicated server video driver. */ class VideoDriver_Dedicated : public VideoDriver { public: - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; @@ -26,7 +26,7 @@ public: bool ChangeResolution(int w, int h) override; bool ToggleFullscreen(bool fullscreen) override; - const char *GetName() const override { return "dedicated"; } + std::string_view GetName() const override { return "dedicated"; } bool HasGUI() const override { return false; } }; diff --git a/src/video/null_v.cpp b/src/video/null_v.cpp index c1e2c5396b..e3a032d71f 100644 --- a/src/video/null_v.cpp +++ b/src/video/null_v.cpp @@ -19,7 +19,7 @@ /** Factory for the null video driver. */ static FVideoDriver_Null iFVideoDriver_Null; -const char *VideoDriver_Null::Start(const StringList &parm) +std::optional VideoDriver_Null::Start(const StringList &parm) { #ifdef _MSC_VER /* Disable the MSVC assertion message box. */ @@ -39,7 +39,7 @@ const char *VideoDriver_Null::Start(const StringList &parm) /* Do not render, nor blit */ Debug(misc, 1, "Forcing blitter 'null'..."); BlitterFactory::SelectBlitter("null"); - return nullptr; + return std::nullopt; } void VideoDriver_Null::Stop() { } diff --git a/src/video/null_v.h b/src/video/null_v.h index ee83de7e65..4e0caffc57 100644 --- a/src/video/null_v.h +++ b/src/video/null_v.h @@ -18,7 +18,7 @@ private: uint ticks; ///< Amount of ticks to run. public: - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; @@ -29,7 +29,7 @@ public: bool ChangeResolution(int w, int h) override; bool ToggleFullscreen(bool fullscreen) override; - const char *GetName() const override { return "null"; } + std::string_view GetName() const override { return "null"; } bool HasGUI() const override { return false; } }; diff --git a/src/video/opengl.cpp b/src/video/opengl.cpp index ee9883c169..5b49f34126 100644 --- a/src/video/opengl.cpp +++ b/src/video/opengl.cpp @@ -462,9 +462,9 @@ void SetupDebugOutput() * Create and initialize the singleton back-end class. * @param get_proc Callback to get an OpenGL function from the OS driver. * @param screen_res Current display resolution. - * @return nullptr on success, error message otherwise. + * @return std::nullopt on success, error message otherwise. */ -/* static */ const char *OpenGLBackend::Create(GetOGLProcAddressProc get_proc, const Dimension &screen_res) +/* static */ std::optional OpenGLBackend::Create(GetOGLProcAddressProc get_proc, const Dimension &screen_res) { if (OpenGLBackend::instance != nullptr) OpenGLBackend::Destroy(); @@ -520,9 +520,9 @@ OpenGLBackend::~OpenGLBackend() /** * Check for the needed OpenGL functionality and allocate all resources. * @param screen_res Current display resolution. - * @return Error string or nullptr if successful. + * @return Error string or std::nullopt if successful. */ -const char *OpenGLBackend::Init(const Dimension &screen_res) +std::optional OpenGLBackend::Init(const Dimension &screen_res) { if (!BindBasicInfoProcs()) return "OpenGL not supported"; @@ -729,7 +729,7 @@ const char *OpenGLBackend::Init(const Dimension &screen_res) this->PrepareContext(); (void)_glGetError(); // Clear errors. - return nullptr; + return std::nullopt; } void OpenGLBackend::PrepareContext() diff --git a/src/video/opengl.h b/src/video/opengl.h index 9354afa1aa..b143039b40 100644 --- a/src/video/opengl.h +++ b/src/video/opengl.h @@ -72,7 +72,7 @@ private: OpenGLBackend(); ~OpenGLBackend(); - const char *Init(const Dimension &screen_res); + std::optional Init(const Dimension &screen_res); bool InitShaders(); void InternalClearCursorCache(); @@ -85,7 +85,7 @@ public: { return OpenGLBackend::instance; } - static const char *Create(GetOGLProcAddressProc get_proc, const Dimension &screen_res); + static std::optional Create(GetOGLProcAddressProc get_proc, const Dimension &screen_res); static void Destroy(); void PrepareContext(); diff --git a/src/video/sdl2_default_v.h b/src/video/sdl2_default_v.h index 3e1e3b894c..066aa5e056 100644 --- a/src/video/sdl2_default_v.h +++ b/src/video/sdl2_default_v.h @@ -15,7 +15,7 @@ /** The SDL video driver using default SDL backend. */ class VideoDriver_SDL_Default : public VideoDriver_SDL_Base { public: - const char *GetName() const override { return "sdl"; } + std::string_view GetName() const override { return "sdl"; } protected: bool AllocateBackingStore(int w, int h, bool force = false) override; diff --git a/src/video/sdl2_opengl_v.cpp b/src/video/sdl2_opengl_v.cpp index ac5ceb0361..eec52ef825 100644 --- a/src/video/sdl2_opengl_v.cpp +++ b/src/video/sdl2_opengl_v.cpp @@ -53,13 +53,13 @@ bool VideoDriver_SDL_OpenGL::CreateMainWindow(uint w, uint h, uint flags) return this->VideoDriver_SDL_Base::CreateMainWindow(w, h, flags | SDL_WINDOW_OPENGL); } -const char *VideoDriver_SDL_OpenGL::Start(const StringList ¶m) +std::optional VideoDriver_SDL_OpenGL::Start(const StringList ¶m) { - const char *error = VideoDriver_SDL_Base::Start(param); - if (error != nullptr) return error; + auto error = VideoDriver_SDL_Base::Start(param); + if (error) return error; error = this->AllocateContext(); - if (error != nullptr) { + if (error) { this->Stop(); return error; } @@ -81,7 +81,7 @@ const char *VideoDriver_SDL_OpenGL::Start(const StringList ¶m) /* Main loop expects to start with the buffer unmapped. */ this->ReleaseVideoPointer(); - return nullptr; + return std::nullopt; } void VideoDriver_SDL_OpenGL::Stop() @@ -105,7 +105,7 @@ void VideoDriver_SDL_OpenGL::ToggleVsync(bool vsync) SDL_GL_SetSwapInterval(vsync); } -const char *VideoDriver_SDL_OpenGL::AllocateContext() +std::optional VideoDriver_SDL_OpenGL::AllocateContext() { SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); diff --git a/src/video/sdl2_opengl_v.h b/src/video/sdl2_opengl_v.h index 23b204ed5d..b1e2f09f04 100644 --- a/src/video/sdl2_opengl_v.h +++ b/src/video/sdl2_opengl_v.h @@ -14,7 +14,7 @@ class VideoDriver_SDL_OpenGL : public VideoDriver_SDL_Base { public: VideoDriver_SDL_OpenGL() : VideoDriver_SDL_Base(true), gl_context(nullptr), anim_buffer(nullptr) {} - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; @@ -31,7 +31,7 @@ public: void ToggleVsync(bool vsync) override; - const char *GetName() const override { return "sdl-opengl"; } + std::string_view GetName() const override { return "sdl-opengl"; } protected: bool AllocateBackingStore(int w, int h, bool force = false) override; @@ -44,7 +44,7 @@ private: void *gl_context; ///< OpenGL context. uint8_t *anim_buffer; ///< Animation buffer from OpenGL back-end. - const char *AllocateContext(); + std::optional AllocateContext(); void DestroyContext(); }; diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index eb8791a02b..31d7411c44 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -503,34 +503,34 @@ bool VideoDriver_SDL_Base::PollEvent() return true; } -static const char *InitializeSDL() +static std::optional InitializeSDL() { /* Check if the video-driver is already initialized. */ - if (SDL_WasInit(SDL_INIT_VIDEO) != 0) return nullptr; + if (SDL_WasInit(SDL_INIT_VIDEO) != 0) return std::nullopt; if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) return SDL_GetError(); - return nullptr; + return std::nullopt; } -const char *VideoDriver_SDL_Base::Initialize() +std::optional VideoDriver_SDL_Base::Initialize() { this->UpdateAutoResolution(); - const char *error = InitializeSDL(); - if (error != nullptr) return error; + auto error = InitializeSDL(); + if (error) return error; FindResolutions(); Debug(driver, 2, "Resolution for display: {}x{}", _cur_resolution.width, _cur_resolution.height); - return nullptr; + return std::nullopt; } -const char *VideoDriver_SDL_Base::Start(const StringList ¶m) +std::optional VideoDriver_SDL_Base::Start(const StringList ¶m) { if (BlitterFactory::GetCurrentBlitter()->GetScreenDepth() == 0) return "Only real blitters supported"; - const char *error = this->Initialize(); - if (error != nullptr) return error; + auto error = this->Initialize(); + if (error) return error; #ifdef SDL_HINT_MOUSE_AUTO_CAPTURE if (GetDriverParamBool(param, "no_mouse_capture")) { @@ -566,7 +566,7 @@ const char *VideoDriver_SDL_Base::Start(const StringList ¶m) this->is_game_threaded = !GetDriverParamBool(param, "no_threads") && !GetDriverParamBool(param, "no_thread"); #endif - return nullptr; + return std::nullopt; } void VideoDriver_SDL_Base::Stop() diff --git a/src/video/sdl2_v.h b/src/video/sdl2_v.h index dbc57c9e5b..45c064d0bc 100644 --- a/src/video/sdl2_v.h +++ b/src/video/sdl2_v.h @@ -19,7 +19,7 @@ class VideoDriver_SDL_Base : public VideoDriver { public: VideoDriver_SDL_Base(bool uses_hardware_acceleration = false) : VideoDriver(uses_hardware_acceleration), sdl_window(nullptr), buffer_locked(false) {} - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; @@ -41,7 +41,7 @@ public: std::vector GetListOfMonitorRefreshRates() override; - const char *GetInfoString() const override { return this->driver_info.c_str(); } + std::string_view GetInfoString() const override { return this->driver_info; } protected: struct SDL_Window *sdl_window; ///< Main SDL window. @@ -73,7 +73,7 @@ private: void LoopOnce(); void MainLoopCleanup(); bool CreateMainSurface(uint w, uint h, bool resize); - const char *Initialize(); + std::optional Initialize(); #ifdef __EMSCRIPTEN__ /* Convert a constant pointer back to a non-constant pointer to a member function. */ diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index 7928deedb2..c4f53ec9c8 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -576,7 +576,7 @@ bool VideoDriver_SDL::PollEvent() return true; } -const char *VideoDriver_SDL::Start(const StringList ¶m) +std::optional VideoDriver_SDL::Start(const StringList ¶m) { char buf[30]; _use_hwpalette = GetDriverParamInt(param, "hw_palette", 2); @@ -607,7 +607,7 @@ const char *VideoDriver_SDL::Start(const StringList ¶m) this->is_game_threaded = !GetDriverParamBool(param, "no_threads") && !GetDriverParamBool(param, "no_thread"); - return nullptr; + return std::nullopt; } void VideoDriver_SDL::SetupKeyboard() diff --git a/src/video/sdl_v.h b/src/video/sdl_v.h index 2b37cbdb6a..ca7c37b94a 100644 --- a/src/video/sdl_v.h +++ b/src/video/sdl_v.h @@ -15,7 +15,7 @@ /** The SDL video driver. */ class VideoDriver_SDL : public VideoDriver { public: - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; @@ -31,7 +31,7 @@ public: bool ClaimMousePointer() override; - const char *GetName() const override { return "sdl"; } + std::string_view GetName() const override { return "sdl"; } protected: void InputLoop() override; diff --git a/src/video/video_driver.hpp b/src/video/video_driver.hpp index 87155d2b6a..874198d465 100644 --- a/src/video/video_driver.hpp +++ b/src/video/video_driver.hpp @@ -174,7 +174,7 @@ public: return Clamp(dpi_scale * 100, MIN_INTERFACE_SCALE, MAX_INTERFACE_SCALE); } - virtual const char *GetInfoString() const + virtual std::string_view GetInfoString() const { return this->GetName(); } diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index 7c055d253a..1e65ab6ac0 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -1030,7 +1030,7 @@ void VideoDriver_Win32Base::UnlockVideoBuffer() static FVideoDriver_Win32GDI iFVideoDriver_Win32GDI; -const char *VideoDriver_Win32GDI::Start(const StringList ¶m) +std::optional VideoDriver_Win32GDI::Start(const StringList ¶m) { if (BlitterFactory::GetCurrentBlitter()->GetScreenDepth() == 0) return "Only real blitters supported"; @@ -1044,7 +1044,7 @@ const char *VideoDriver_Win32GDI::Start(const StringList ¶m) this->is_game_threaded = !GetDriverParamBool(param, "no_threads") && !GetDriverParamBool(param, "no_thread"); - return nullptr; + return std::nullopt; } void VideoDriver_Win32GDI::Stop() @@ -1237,9 +1237,9 @@ static OGLProc GetOGLProcAddressCallback(const char *proc) /** * Set the pixel format of a window- * @param dc Device context to set the pixel format of. - * @return nullptr on success, error message otherwise. + * @return std::nullopt on success, error message otherwise. */ -static const char *SelectPixelFormat(HDC dc) +static std::optional SelectPixelFormat(HDC dc) { PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), // Size of this struct. @@ -1265,7 +1265,7 @@ static const char *SelectPixelFormat(HDC dc) if (format == 0) return "No suitable pixel format found"; if (!SetPixelFormat(dc, format, &pfd)) return "Can't set pixel format"; - return nullptr; + return std::nullopt; } /** Bind all WGL extension functions we need. */ @@ -1280,7 +1280,7 @@ static void LoadWGLExtensions() HDC dc = GetDC(wnd); /* Set pixel format of the window. */ - if (SelectPixelFormat(dc) == nullptr) { + if (SelectPixelFormat(dc) == std::nullopt) { /* Create rendering context. */ HGLRC rc = wglCreateContext(dc); if (rc != nullptr) { @@ -1320,7 +1320,7 @@ static void LoadWGLExtensions() static FVideoDriver_Win32OpenGL iFVideoDriver_Win32OpenGL; -const char *VideoDriver_Win32OpenGL::Start(const StringList ¶m) +std::optional VideoDriver_Win32OpenGL::Start(const StringList ¶m) { if (BlitterFactory::GetCurrentBlitter()->GetScreenDepth() == 0) return "Only real blitters supported"; @@ -1332,8 +1332,8 @@ const char *VideoDriver_Win32OpenGL::Start(const StringList ¶m) this->MakeWindow(_fullscreen); /* Create and initialize OpenGL context. */ - const char *err = this->AllocateContext(); - if (err != nullptr) { + auto err = this->AllocateContext(); + if (err) { this->Stop(); _cur_resolution = old_res; return err; @@ -1358,7 +1358,7 @@ const char *VideoDriver_Win32OpenGL::Start(const StringList ¶m) this->is_game_threaded = !GetDriverParamBool(param, "no_threads") && !GetDriverParamBool(param, "no_thread"); - return nullptr; + return std::nullopt; } void VideoDriver_Win32OpenGL::Stop() @@ -1391,12 +1391,12 @@ void VideoDriver_Win32OpenGL::ToggleVsync(bool vsync) } } -const char *VideoDriver_Win32OpenGL::AllocateContext() +std::optional VideoDriver_Win32OpenGL::AllocateContext() { this->dc = GetDC(this->main_wnd); - const char *err = SelectPixelFormat(this->dc); - if (err != nullptr) return err; + auto err = SelectPixelFormat(this->dc); + if (err) return err; HGLRC rc = nullptr; @@ -1438,7 +1438,7 @@ bool VideoDriver_Win32OpenGL::ToggleFullscreen(bool full_screen) if (_screen.dst_ptr != nullptr) this->ReleaseVideoPointer(); this->DestroyContext(); bool res = this->VideoDriver_Win32Base::ToggleFullscreen(full_screen); - res &= this->AllocateContext() == nullptr; + res &= this->AllocateContext() == std::nullopt; this->ClientSizeChanged(this->width, this->height, true); return res; } diff --git a/src/video/win32_v.h b/src/video/win32_v.h index cb3bac49f8..4344910b01 100644 --- a/src/video/win32_v.h +++ b/src/video/win32_v.h @@ -79,13 +79,13 @@ class VideoDriver_Win32GDI : public VideoDriver_Win32Base { public: VideoDriver_Win32GDI() : dib_sect(nullptr), gdi_palette(nullptr), buffer_bits(nullptr) {} - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; bool AfterBlitterChange() override; - const char *GetName() const override { return "win32"; } + std::string_view GetName() const override { return "win32"; } protected: HBITMAP dib_sect; ///< System bitmap object referencing our rendering buffer. @@ -120,7 +120,7 @@ class VideoDriver_Win32OpenGL : public VideoDriver_Win32Base { public: VideoDriver_Win32OpenGL() : VideoDriver_Win32Base(true), dc(nullptr), gl_rc(nullptr), anim_buffer(nullptr), driver_info(this->GetName()) {} - const char *Start(const StringList ¶m) override; + std::optional Start(const StringList ¶m) override; void Stop() override; @@ -141,9 +141,9 @@ public: void ToggleVsync(bool vsync) override; - const char *GetName() const override { return "win32-opengl"; } + std::string_view GetName() const override { return "win32-opengl"; } - const char *GetInfoString() const override { return this->driver_info.c_str(); } + std::string_view GetInfoString() const override { return this->driver_info; } protected: HDC dc; ///< Window device context. @@ -160,7 +160,7 @@ protected: void ReleaseVideoPointer() override; void PaletteChanged(HWND) override {} - const char *AllocateContext(); + std::optional AllocateContext(); void DestroyContext(); }; From 6bc4a62c27128e248790c4e7fa57be3e4228bde9 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 9 Apr 2024 23:35:50 +0100 Subject: [PATCH 285/695] Codechange: Pass std::string_view from blitters instead of char *. --- src/blitter/32bpp_anim.hpp | 2 +- src/blitter/32bpp_anim_sse2.hpp | 2 +- src/blitter/32bpp_anim_sse4.hpp | 2 +- src/blitter/32bpp_optimized.hpp | 2 +- src/blitter/32bpp_simple.hpp | 2 +- src/blitter/32bpp_sse2.hpp | 2 +- src/blitter/32bpp_sse4.hpp | 2 +- src/blitter/32bpp_ssse3.hpp | 2 +- src/blitter/40bpp_anim.hpp | 2 +- src/blitter/8bpp_optimized.hpp | 2 +- src/blitter/8bpp_simple.hpp | 2 +- src/blitter/base.hpp | 2 +- src/blitter/factory.hpp | 4 ++-- src/blitter/null.hpp | 2 +- 14 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/blitter/32bpp_anim.hpp b/src/blitter/32bpp_anim.hpp index b5b19d784e..975a9bfd62 100644 --- a/src/blitter/32bpp_anim.hpp +++ b/src/blitter/32bpp_anim.hpp @@ -47,7 +47,7 @@ public: void PaletteAnimate(const Palette &palette) override; Blitter::PaletteAnimation UsePaletteAnimation() override; - const char *GetName() override { return "32bpp-anim"; } + std::string_view GetName() override { return "32bpp-anim"; } void PostResize() override; /** diff --git a/src/blitter/32bpp_anim_sse2.hpp b/src/blitter/32bpp_anim_sse2.hpp index 669cef80a7..56262e387f 100644 --- a/src/blitter/32bpp_anim_sse2.hpp +++ b/src/blitter/32bpp_anim_sse2.hpp @@ -31,7 +31,7 @@ class Blitter_32bppSSE2_Anim : public Blitter_32bppAnim { public: void PaletteAnimate(const Palette &palette) override; - const char *GetName() override { return "32bpp-sse2-anim"; } + std::string_view GetName() override { return "32bpp-sse2-anim"; } }; /** Factory for the partially 32bpp blitter with animation. */ diff --git a/src/blitter/32bpp_anim_sse4.hpp b/src/blitter/32bpp_anim_sse4.hpp index d11c90d341..b787c14e06 100644 --- a/src/blitter/32bpp_anim_sse4.hpp +++ b/src/blitter/32bpp_anim_sse4.hpp @@ -42,7 +42,7 @@ public: Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override { return Blitter_32bppSSE_Base::Encode(sprite, allocator); } - const char *GetName() override { return "32bpp-sse4-anim"; } + std::string_view GetName() override { return "32bpp-sse4-anim"; } using Blitter_32bppSSE2_Anim::LookupColourInPalette; }; diff --git a/src/blitter/32bpp_optimized.hpp b/src/blitter/32bpp_optimized.hpp index 3c332ceeda..b1e076faa4 100644 --- a/src/blitter/32bpp_optimized.hpp +++ b/src/blitter/32bpp_optimized.hpp @@ -24,7 +24,7 @@ public: void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; - const char *GetName() override { return "32bpp-optimized"; } + std::string_view GetName() override { return "32bpp-optimized"; } template void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom); diff --git a/src/blitter/32bpp_simple.hpp b/src/blitter/32bpp_simple.hpp index df154ce57d..8c2dc3a346 100644 --- a/src/blitter/32bpp_simple.hpp +++ b/src/blitter/32bpp_simple.hpp @@ -28,7 +28,7 @@ public: void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) override; Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; - const char *GetName() override { return "32bpp-simple"; } + std::string_view GetName() override { return "32bpp-simple"; } }; /** Factory for the simple 32 bpp blitter. */ diff --git a/src/blitter/32bpp_sse2.hpp b/src/blitter/32bpp_sse2.hpp index 85bfc6e027..402c732546 100644 --- a/src/blitter/32bpp_sse2.hpp +++ b/src/blitter/32bpp_sse2.hpp @@ -92,7 +92,7 @@ public: return Blitter_32bppSSE_Base::Encode(sprite, allocator); } - const char *GetName() override { return "32bpp-sse2"; } + std::string_view GetName() override { return "32bpp-sse2"; } }; /** Factory for the SSE2 32 bpp blitter (without palette animation). */ diff --git a/src/blitter/32bpp_sse4.hpp b/src/blitter/32bpp_sse4.hpp index deb4fbed92..7d8798c697 100644 --- a/src/blitter/32bpp_sse4.hpp +++ b/src/blitter/32bpp_sse4.hpp @@ -32,7 +32,7 @@ public: void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; template void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom); - const char *GetName() override { return "32bpp-sse4"; } + std::string_view GetName() override { return "32bpp-sse4"; } }; /** Factory for the SSE4 32 bpp blitter (without palette animation). */ diff --git a/src/blitter/32bpp_ssse3.hpp b/src/blitter/32bpp_ssse3.hpp index c95095d4df..4ee475d45f 100644 --- a/src/blitter/32bpp_ssse3.hpp +++ b/src/blitter/32bpp_ssse3.hpp @@ -32,7 +32,7 @@ public: void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; template void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom); - const char *GetName() override { return "32bpp-ssse3"; } + std::string_view GetName() override { return "32bpp-ssse3"; } }; /** Factory for the SSSE3 32 bpp blitter (without palette animation). */ diff --git a/src/blitter/40bpp_anim.hpp b/src/blitter/40bpp_anim.hpp index 4371100914..928af303c2 100644 --- a/src/blitter/40bpp_anim.hpp +++ b/src/blitter/40bpp_anim.hpp @@ -32,7 +32,7 @@ public: Blitter::PaletteAnimation UsePaletteAnimation() override; bool NeedsAnimationBuffer() override; - const char *GetName() override { return "40bpp-anim"; } + std::string_view GetName() override { return "40bpp-anim"; } template void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom); diff --git a/src/blitter/8bpp_optimized.hpp b/src/blitter/8bpp_optimized.hpp index f55586170d..b999676648 100644 --- a/src/blitter/8bpp_optimized.hpp +++ b/src/blitter/8bpp_optimized.hpp @@ -25,7 +25,7 @@ public: void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; - const char *GetName() override { return "8bpp-optimized"; } + std::string_view GetName() override { return "8bpp-optimized"; } }; /** Factory for the 8bpp blitter optimised for speed. */ diff --git a/src/blitter/8bpp_simple.hpp b/src/blitter/8bpp_simple.hpp index 23d49d7f91..eebccac158 100644 --- a/src/blitter/8bpp_simple.hpp +++ b/src/blitter/8bpp_simple.hpp @@ -19,7 +19,7 @@ public: void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; - const char *GetName() override { return "8bpp-simple"; } + std::string_view GetName() override { return "8bpp-simple"; } }; /** Factory for the most trivial 8bpp blitter. */ diff --git a/src/blitter/base.hpp b/src/blitter/base.hpp index 9d79107bd3..24ccc3ac13 100644 --- a/src/blitter/base.hpp +++ b/src/blitter/base.hpp @@ -197,7 +197,7 @@ public: /** * Get the name of the blitter, the same as the Factory-instance returns. */ - virtual const char *GetName() = 0; + virtual std::string_view GetName() = 0; /** * Post resize event diff --git a/src/blitter/factory.hpp b/src/blitter/factory.hpp index 4daa4c42cd..5071a168ae 100644 --- a/src/blitter/factory.hpp +++ b/src/blitter/factory.hpp @@ -159,7 +159,7 @@ public: /** * Get the long, human readable, name for the Blitter-class. */ - const std::string &GetName() const + std::string_view GetName() const { return this->name; } @@ -167,7 +167,7 @@ public: /** * Get a nice description of the blitter-class. */ - const std::string &GetDescription() const + std::string_view GetDescription() const { return this->description; } diff --git a/src/blitter/null.hpp b/src/blitter/null.hpp index 61c5cab9de..5f5ed81646 100644 --- a/src/blitter/null.hpp +++ b/src/blitter/null.hpp @@ -31,7 +31,7 @@ public: void PaletteAnimate(const Palette &) override { }; Blitter::PaletteAnimation UsePaletteAnimation() override { return Blitter::PALETTE_ANIMATION_NONE; }; - const char *GetName() override { return "null"; } + std::string_view GetName() override { return "null"; } }; /** Factory for the blitter that does nothing. */ From 442daf58da862acc6a1f25415cd0eb34977d844b Mon Sep 17 00:00:00 2001 From: rubidium42 Date: Wed, 10 Apr 2024 20:12:33 +0200 Subject: [PATCH 286/695] Codechange: replace lengthof with std::size in Windows specific code --- src/fileio.cpp | 2 +- src/music/dmusic.cpp | 4 ++-- src/network/core/http_winhttp.cpp | 8 ++++---- src/network/core/os_abstraction.cpp | 2 +- src/os/windows/library_loader_win.cpp | 2 +- src/os/windows/win32.cpp | 16 ++++++++-------- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index fc892ed242..db2db572b0 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -203,7 +203,7 @@ static FILE *FioFOpenFileSp(const std::string &filename, const char *mode, Searc * a string, but a variable, it 'renames' the variable, * so make that variable to makes it compile happily */ wchar_t Lmode[5]; - MultiByteToWideChar(CP_ACP, 0, mode, -1, Lmode, lengthof(Lmode)); + MultiByteToWideChar(CP_ACP, 0, mode, -1, Lmode, static_cast(std::size(Lmode))); #endif FILE *f = nullptr; std::string buf; diff --git a/src/music/dmusic.cpp b/src/music/dmusic.cpp index 8d0919ceb3..c7c2d97642 100644 --- a/src/music/dmusic.cpp +++ b/src/music/dmusic.cpp @@ -870,7 +870,7 @@ static const char *LoadDefaultDLSFile(const char *user_dls) DWORD buf_size = sizeof(dls_path); // Buffer size as to be given in bytes! if (SUCCEEDED(RegQueryValueEx(hkDM, L"GMFilePath", nullptr, nullptr, (LPBYTE)dls_path, &buf_size))) { wchar_t expand_path[MAX_PATH * 2]; - ExpandEnvironmentStrings(dls_path, expand_path, lengthof(expand_path)); + ExpandEnvironmentStrings(dls_path, expand_path, static_cast(std::size(expand_path))); if (!dls_file.LoadFile(expand_path)) Debug(driver, 1, "Failed to load default GM DLS file from registry"); } RegCloseKey(hkDM); @@ -880,7 +880,7 @@ static const char *LoadDefaultDLSFile(const char *user_dls) if (dls_file.instruments.empty()) { static const wchar_t *DLS_GM_FILE = L"%windir%\\System32\\drivers\\gm.dls"; wchar_t path[MAX_PATH]; - ExpandEnvironmentStrings(DLS_GM_FILE, path, lengthof(path)); + ExpandEnvironmentStrings(DLS_GM_FILE, path, static_cast(std::size(path))); if (!dls_file.LoadFile(path)) return "Can't load GM DLS collection"; } diff --git a/src/network/core/http_winhttp.cpp b/src/network/core/http_winhttp.cpp index 0efcbe69df..ccba25ee62 100644 --- a/src/network/core/http_winhttp.cpp +++ b/src/network/core/http_winhttp.cpp @@ -78,7 +78,7 @@ static std::string GetLastErrorAsString() DWORD error_code = GetLastError(); if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS, GetModuleHandle(L"winhttp.dll"), error_code, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buffer, lengthof(buffer), nullptr) == 0) { + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buffer, static_cast(std::size(buffer)), nullptr) == 0) { return fmt::format("unknown error {}", error_code); } @@ -222,11 +222,11 @@ void NetworkHTTPRequest::Connect() /* Convert the URL to its components. */ url_components.dwStructSize = sizeof(url_components); url_components.lpszScheme = scheme; - url_components.dwSchemeLength = lengthof(scheme); + url_components.dwSchemeLength = static_cast(std::size(scheme)); url_components.lpszHostName = hostname; - url_components.dwHostNameLength = lengthof(hostname); + url_components.dwHostNameLength = static_cast(std::size(hostname)); url_components.lpszUrlPath = url_path; - url_components.dwUrlPathLength = lengthof(url_path); + url_components.dwUrlPathLength = static_cast(std::size(url_path)); WinHttpCrackUrl(this->uri.c_str(), 0, 0, &url_components); /* Create the HTTP connection. */ diff --git a/src/network/core/os_abstraction.cpp b/src/network/core/os_abstraction.cpp index 97647a4165..023fe5b116 100644 --- a/src/network/core/os_abstraction.cpp +++ b/src/network/core/os_abstraction.cpp @@ -83,7 +83,7 @@ const std::string &NetworkError::AsString() const #if defined(_WIN32) wchar_t buffer[512]; if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, nullptr, this->error, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buffer, lengthof(buffer), nullptr) == 0) { + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buffer, static_cast(std::size(buffer)), nullptr) == 0) { this->message.assign(fmt::format("Unknown error {}", this->error)); } else { this->message.assign(FS2OTTD(buffer)); diff --git a/src/os/windows/library_loader_win.cpp b/src/os/windows/library_loader_win.cpp index eea8f061f9..608b9349c9 100644 --- a/src/os/windows/library_loader_win.cpp +++ b/src/os/windows/library_loader_win.cpp @@ -22,7 +22,7 @@ static std::string GetLoadError() wchar_t buffer[512]; if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, nullptr, error_code, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buffer, lengthof(buffer), nullptr) == 0) { + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buffer, static_cast(std::size(buffer)), nullptr) == 0) { return fmt::format("Unknown error {}", error_code); } diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index e5ddba94c0..18655c3d42 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -180,7 +180,7 @@ void FiosGetDrives(FileList &file_list) wchar_t drives[256]; const wchar_t *s; - GetLogicalDriveStrings(lengthof(drives), drives); + GetLogicalDriveStrings(static_cast(std::size(drives)), drives); for (s = drives; *s != '\0';) { FiosItem *fios = &file_list.emplace_back(); fios->type = FIOS_TYPE_DRIVE; @@ -400,7 +400,7 @@ void DetermineBasePaths(const char *exe) /* Use the folder of the config file as working directory. */ wchar_t config_dir[MAX_PATH]; wcsncpy(path, convert_to_fs(_config_file, path, lengthof(path)), lengthof(path)); - if (!GetFullPathName(path, lengthof(config_dir), config_dir, nullptr)) { + if (!GetFullPathName(path, static_cast(std::size(config_dir)), config_dir, nullptr)) { Debug(misc, 0, "GetFullPathName failed ({})", GetLastError()); _searchpaths[SP_WORKING_DIR].clear(); } else { @@ -412,13 +412,13 @@ void DetermineBasePaths(const char *exe) } } - if (!GetModuleFileName(nullptr, path, lengthof(path))) { + if (!GetModuleFileName(nullptr, path, static_cast(std::size(path)))) { Debug(misc, 0, "GetModuleFileName failed ({})", GetLastError()); _searchpaths[SP_BINARY_DIR].clear(); } else { wchar_t exec_dir[MAX_PATH]; - wcsncpy(path, convert_to_fs(exe, path, lengthof(path)), lengthof(path)); - if (!GetFullPathName(path, lengthof(exec_dir), exec_dir, nullptr)) { + wcsncpy(path, convert_to_fs(exe, path, std::size(path)), std::size(path)); + if (!GetFullPathName(path, static_cast(std::size(exec_dir)), exec_dir, nullptr)) { Debug(misc, 0, "GetFullPathName failed ({})", GetLastError()); _searchpaths[SP_BINARY_DIR].clear(); } else { @@ -530,8 +530,8 @@ const char *GetCurrentLocale(const char *) const LCID userUiLocale = MAKELCID(userUiLang, SORT_DEFAULT); char lang[9], country[9]; - if (GetLocaleInfoA(userUiLocale, LOCALE_SISO639LANGNAME, lang, lengthof(lang)) == 0 || - GetLocaleInfoA(userUiLocale, LOCALE_SISO3166CTRYNAME, country, lengthof(country)) == 0) { + if (GetLocaleInfoA(userUiLocale, LOCALE_SISO639LANGNAME, lang, static_cast(std::size(lang))) == 0 || + GetLocaleInfoA(userUiLocale, LOCALE_SISO3166CTRYNAME, country, static_cast(std::size(country))) == 0) { /* Unable to retrieve the locale. */ return nullptr; } @@ -557,7 +557,7 @@ void Win32SetCurrentLocaleName(std::string iso_code) } } - MultiByteToWideChar(CP_UTF8, 0, iso_code.c_str(), -1, _cur_iso_locale, lengthof(_cur_iso_locale)); + MultiByteToWideChar(CP_UTF8, 0, iso_code.c_str(), -1, _cur_iso_locale, static_cast(std::size(_cur_iso_locale))); } int OTTDStringCompare(std::string_view s1, std::string_view s2) From 6cade18053c456512ef13fda23d690aed9276877 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 11 Apr 2024 04:41:57 +0000 Subject: [PATCH 287/695] Update: Translations from eints portuguese (brazilian): 1 change by pasantoro polish: 1 change by pAter-exe --- src/lang/brazilian_portuguese.txt | 2 +- src/lang/polish.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 548f4c9894..336d63c4e9 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -188,7 +188,7 @@ STR_COLOUR_ORANGE :Laranja STR_COLOUR_BROWN :Marrom STR_COLOUR_GREY :Cinza STR_COLOUR_WHITE :Branco -STR_COLOUR_RANDOM :Aleatório +STR_COLOUR_RANDOM :Aleatória ###length 17 STR_COLOUR_SECONDARY_DARK_BLUE :Azul Escuro diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 89b03df67f..3a0a8fd9fe 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3921,7 +3921,7 @@ STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Zawiera wiele w STR_NEWGRF_ERROR_READ_BOUNDS :Odczyt poza obszar pseudo-sprite'u (sprite {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :Potrzebne źródło GRF nie jest dostępne (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} został wyłączony przez {STRING} -STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Niepoprawny/nieznany format układu sprite'u (sprite {3:NUM}) +STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Nieprawidłowy/nieznany format układu sprite'a (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Zbyt wiele elementów na liście wartości właściwości (sprite {3:NUM}, właściwość {4:HEX}) STR_NEWGRF_ERROR_INDPROD_CALLBACK :Nieprawidłowe wywołanie zwrotne produkcji przedsiębiorstwa (sprite {3:NUM}, „{2:STRING}”) From ff27b9e76a5d2c53ecdd2fde196ac609b8d176a9 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Tue, 9 Apr 2024 17:09:23 +0200 Subject: [PATCH 288/695] Codechange: use std::any_of instead of custom loop --- src/industry_gui.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index e981f61daf..211bcf7e69 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -775,13 +775,7 @@ static void UpdateIndustryProduction(Industry *i); static inline bool IsProductionAlterable(const Industry *i) { const IndustrySpec *is = GetIndustrySpec(i->type); - bool has_prod = false; - for (size_t j = 0; j < lengthof(is->production_rate); j++) { - if (is->production_rate[j] != 0) { - has_prod = true; - break; - } - } + bool has_prod = std::any_of(std::begin(is->production_rate), std::end(is->production_rate), [](auto rate) { return rate != 0; }); return ((_game_mode == GM_EDITOR || _cheats.setup_prod.value) && (has_prod || is->IsRawIndustry()) && !_networking); From 2587a21400ed66647639ec0bf8761397c5720da7 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Tue, 9 Apr 2024 17:35:51 +0200 Subject: [PATCH 289/695] Codechange: use zero-initialization instead of C-style loop --- src/pathfinder/npf/queue.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/pathfinder/npf/queue.cpp b/src/pathfinder/npf/queue.cpp index 21ccd1ad9f..7bb0a06f22 100644 --- a/src/pathfinder/npf/queue.cpp +++ b/src/pathfinder/npf/queue.cpp @@ -284,11 +284,9 @@ void Hash::PrintStatistics() const uint used_buckets = 0; uint max_collision = 0; uint max_usage = 0; - uint usage[200]; - uint i; + uint usage[200] = {}; - for (i = 0; i < lengthof(usage); i++) usage[i] = 0; - for (i = 0; i < this->num_buckets; i++) { + for (uint i = 0; i < this->num_buckets; i++) { uint collision = 0; if (this->buckets_in_use[i]) { const HashNode *node; @@ -308,7 +306,7 @@ void Hash::PrintStatistics() const ); std::string line; line += "{ "; - for (i = 0; i <= max_collision; i++) { + for (uint i = 0; i <= max_collision; i++) { if (usage[i] > 0) { fmt::format_to(std::back_inserter(line), "{}:{} ", i, usage[i]); #if 0 From 4f2412a272a048b5d212f62af9e7a0b8ca5e677a Mon Sep 17 00:00:00 2001 From: Rubidium Date: Tue, 9 Apr 2024 17:18:35 +0200 Subject: [PATCH 290/695] Codechange: range based for loops instead of C-style for loops --- src/cheat_gui.cpp | 17 ++++++++--------- src/company_gui.cpp | 4 ++-- src/fileio.cpp | 16 ++++++++-------- src/fontcache/spritefontcache.cpp | 8 ++++---- src/group_gui.cpp | 4 ++-- src/linkgraph/linkgraphschedule.cpp | 8 ++++---- src/music_gui.cpp | 2 +- src/newgrf_engine.cpp | 6 +++--- src/newgrf_generic.cpp | 4 ++-- src/order_gui.cpp | 8 ++++---- src/saveload/afterload.cpp | 14 +++++++------- src/script/script_info.cpp | 4 ++-- src/settings_gui.cpp | 4 ++-- src/smallmap_gui.cpp | 8 ++++---- src/spriteloader/sprite_file.cpp | 4 ++-- src/strgen/strgen.cpp | 4 ++-- src/vehicle_gui.cpp | 4 ++-- src/video/sdl_v.cpp | 6 +++--- src/viewport.cpp | 6 +++--- 19 files changed, 65 insertions(+), 66 deletions(-) diff --git a/src/cheat_gui.cpp b/src/cheat_gui.cpp index 9bafd9120c..1e7dbaa3d2 100644 --- a/src/cheat_gui.cpp +++ b/src/cheat_gui.cpp @@ -303,33 +303,32 @@ struct CheatWindow : Window { if (widget != WID_C_PANEL) return; uint width = 0; - for (int i = 0; i != lengthof(_cheats_ui); i++) { - const CheatEntry *ce = &_cheats_ui[i]; - switch (ce->type) { + for (const auto &ce : _cheats_ui) { + switch (ce.type) { case SLE_BOOL: SetDParam(0, STR_CONFIG_SETTING_ON); - width = std::max(width, GetStringBoundingBox(ce->str).width); + width = std::max(width, GetStringBoundingBox(ce.str).width); SetDParam(0, STR_CONFIG_SETTING_OFF); - width = std::max(width, GetStringBoundingBox(ce->str).width); + width = std::max(width, GetStringBoundingBox(ce.str).width); break; default: - switch (ce->str) { + switch (ce.str) { /* Display date for change date cheat */ case STR_CHEAT_CHANGE_DATE: SetDParam(0, TimerGameCalendar::ConvertYMDToDate(CalendarTime::MAX_YEAR, 11, 31)); - width = std::max(width, GetStringBoundingBox(ce->str).width); + width = std::max(width, GetStringBoundingBox(ce.str).width); break; /* Draw coloured flag for change company cheat */ case STR_CHEAT_CHANGE_COMPANY: SetDParamMaxValue(0, MAX_COMPANIES); - width = std::max(width, GetStringBoundingBox(ce->str).width + WidgetDimensions::scaled.hsep_wide); + width = std::max(width, GetStringBoundingBox(ce.str).width + WidgetDimensions::scaled.hsep_wide); break; default: SetDParam(0, INT64_MAX); - width = std::max(width, GetStringBoundingBox(ce->str).width); + width = std::max(width, GetStringBoundingBox(ce.str).width); break; } break; diff --git a/src/company_gui.cpp b/src/company_gui.cpp index c0a2ba6094..2e387b4996 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -2272,8 +2272,8 @@ struct CompanyWindow : Window case WID_C_DESC_VEHICLE_COUNTS: SetDParamMaxValue(0, 5000); // Maximum number of vehicles - for (uint i = 0; i < lengthof(_company_view_vehicle_count_strings); i++) { - size.width = std::max(size.width, GetStringBoundingBox(_company_view_vehicle_count_strings[i]).width + padding.width); + for (const auto &count_string : _company_view_vehicle_count_strings) { + size.width = std::max(size.width, GetStringBoundingBox(count_string).width + padding.width); } break; diff --git a/src/fileio.cpp b/src/fileio.cpp index db2db572b0..e2c7281513 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -1008,9 +1008,9 @@ void DeterminePaths(const char *exe, bool only_local_path) }; config_dir.clear(); - for (uint i = 0; i < lengthof(new_openttd_cfg_order); i++) { - if (IsValidSearchPath(new_openttd_cfg_order[i])) { - config_dir = _searchpaths[new_openttd_cfg_order[i]]; + for (const auto &searchpath : new_openttd_cfg_order) { + if (IsValidSearchPath(searchpath)) { + config_dir = _searchpaths[searchpath]; break; } } @@ -1061,8 +1061,8 @@ void DeterminePaths(const char *exe, bool only_local_path) SAVE_DIR, AUTOSAVE_DIR, SCENARIO_DIR, HEIGHTMAP_DIR, BASESET_DIR, NEWGRF_DIR, AI_DIR, AI_LIBRARY_DIR, GAME_DIR, GAME_LIBRARY_DIR, SCREENSHOT_DIR, SOCIAL_INTEGRATION_DIR }; - for (uint i = 0; i < lengthof(default_subdirs); i++) { - FioCreateDirectory(_personal_dir + _subdirs[default_subdirs[i]]); + for (const auto &default_subdir : default_subdirs) { + FioCreateDirectory(_personal_dir + _subdirs[default_subdir]); } /* If we have network we make a directory for the autodownloading of content */ @@ -1072,9 +1072,9 @@ void DeterminePaths(const char *exe, bool only_local_path) FillValidSearchPaths(only_local_path); /* Create the directory for each of the types of content */ - const Subdirectory dirs[] = { SCENARIO_DIR, HEIGHTMAP_DIR, BASESET_DIR, NEWGRF_DIR, AI_DIR, AI_LIBRARY_DIR, GAME_DIR, GAME_LIBRARY_DIR, SOCIAL_INTEGRATION_DIR }; - for (uint i = 0; i < lengthof(dirs); i++) { - FioCreateDirectory(FioGetDirectory(SP_AUTODOWNLOAD_DIR, dirs[i])); + const Subdirectory subdirs[] = { SCENARIO_DIR, HEIGHTMAP_DIR, BASESET_DIR, NEWGRF_DIR, AI_DIR, AI_LIBRARY_DIR, GAME_DIR, GAME_LIBRARY_DIR, SOCIAL_INTEGRATION_DIR }; + for (const auto &subdir : subdirs) { + FioCreateDirectory(FioGetDirectory(SP_AUTODOWNLOAD_DIR, subdir)); } extern std::string _log_file; diff --git a/src/fontcache/spritefontcache.cpp b/src/fontcache/spritefontcache.cpp index 264a691526..d9ad15d55e 100644 --- a/src/fontcache/spritefontcache.cpp +++ b/src/fontcache/spritefontcache.cpp @@ -84,16 +84,16 @@ void SpriteFontCache::InitializeUnicodeGlyphMap() this->SetUnicodeGlyph(i + SCC_SPRITE_START, sprite); } - for (uint i = 0; i < lengthof(_default_unicode_map); i++) { - uint8_t key = _default_unicode_map[i].key; + for (const auto &unicode_map : _default_unicode_map) { + uint8_t key = unicode_map.key; if (key == CLRA) { /* Clear the glyph. This happens if the glyph at this code point * is non-standard and should be accessed by an SCC_xxx enum * entry only. */ - this->SetUnicodeGlyph(_default_unicode_map[i].code, 0); + this->SetUnicodeGlyph(unicode_map.code, 0); } else { SpriteID sprite = base + key - ASCII_LETTERSTART; - this->SetUnicodeGlyph(_default_unicode_map[i].code, sprite); + this->SetUnicodeGlyph(unicode_map.code, sprite); } } } diff --git a/src/group_gui.cpp b/src/group_gui.cpp index c4b3998102..40924c18d8 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -240,8 +240,8 @@ private: this->column_size[VGC_PROFIT].width = 0; this->column_size[VGC_PROFIT].height = 0; static const SpriteID profit_sprites[] = {SPR_PROFIT_NA, SPR_PROFIT_NEGATIVE, SPR_PROFIT_SOME, SPR_PROFIT_LOT}; - for (uint i = 0; i < lengthof(profit_sprites); i++) { - Dimension d = GetSpriteSize(profit_sprites[i]); + for (const auto &profit_sprite : profit_sprites) { + Dimension d = GetSpriteSize(profit_sprite); this->column_size[VGC_PROFIT] = maxdim(this->column_size[VGC_PROFIT], d); } this->tiny_step_height = std::max(this->tiny_step_height, this->column_size[VGC_PROFIT].height); diff --git a/src/linkgraph/linkgraphschedule.cpp b/src/linkgraph/linkgraphschedule.cpp index aef287c439..d03300ad98 100644 --- a/src/linkgraph/linkgraphschedule.cpp +++ b/src/linkgraph/linkgraphschedule.cpp @@ -86,9 +86,9 @@ void LinkGraphSchedule::JoinNext() */ /* static */ void LinkGraphSchedule::Run(LinkGraphJob *job) { - for (uint i = 0; i < lengthof(instance.handlers); ++i) { + for (const auto &handler : instance.handlers) { if (job->IsJobAborted()) return; - instance.handlers[i]->Run(*job); + handler->Run(*job); } /* @@ -157,8 +157,8 @@ LinkGraphSchedule::LinkGraphSchedule() LinkGraphSchedule::~LinkGraphSchedule() { this->Clear(); - for (uint i = 0; i < lengthof(this->handlers); ++i) { - delete this->handlers[i]; + for (const auto &handler : this->handlers) { + delete handler; } } diff --git a/src/music_gui.cpp b/src/music_gui.cpp index 36817ae150..c31bfca711 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -106,7 +106,7 @@ void MusicSystem::BuildPlaylists() const MusicSet *set = BaseMusic::GetUsedSet(); /* Clear current playlists */ - for (size_t i = 0; i < lengthof(this->standard_playlists); ++i) this->standard_playlists[i].clear(); + for (auto &playlist : this->standard_playlists) playlist.clear(); this->music_set.clear(); /* Build standard playlists, and a list of available music */ diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index 1739835475..08e461d06c 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -1394,11 +1394,11 @@ void FillNewGRFVehicleCache(const Vehicle *v) static_assert(NCVV_END == lengthof(cache_entries)); /* Resolve all the variables, so their caches are set. */ - for (size_t i = 0; i < lengthof(cache_entries); i++) { + for (const auto &cache_entry : cache_entries) { /* Only resolve when the cache isn't valid. */ - if (HasBit(v->grf_cache.cache_valid, cache_entries[i][1])) continue; + if (HasBit(v->grf_cache.cache_valid, cache_entry[1])) continue; bool stub; - ro.GetScope(VSG_SCOPE_SELF)->GetVariable(cache_entries[i][0], 0, &stub); + ro.GetScope(VSG_SCOPE_SELF)->GetVariable(cache_entry[0], 0, &stub); } /* Make sure really all bits are set. */ diff --git a/src/newgrf_generic.cpp b/src/newgrf_generic.cpp index 6b4dcf2fbb..30e3d840fe 100644 --- a/src/newgrf_generic.cpp +++ b/src/newgrf_generic.cpp @@ -93,8 +93,8 @@ static GenericCallbackList _gcl[GSF_END]; */ void ResetGenericCallbacks() { - for (uint8_t feature = 0; feature < lengthof(_gcl); feature++) { - _gcl[feature].clear(); + for (auto &gcl : _gcl) { + gcl.clear(); } } diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 44979fd75a..7bc44e810a 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -846,8 +846,8 @@ public: case WID_O_COND_VARIABLE: { Dimension d = {0, 0}; - for (uint i = 0; i < lengthof(_order_conditional_variable); i++) { - d = maxdim(d, GetStringBoundingBox(STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE + _order_conditional_variable[i])); + for (const auto &ocv : _order_conditional_variable) { + d = maxdim(d, GetStringBoundingBox(STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE + ocv)); } d.width += padding.width; d.height += padding.height; @@ -1349,8 +1349,8 @@ public: case WID_O_COND_VARIABLE: { DropDownList list; - for (uint i = 0; i < lengthof(_order_conditional_variable); i++) { - list.push_back(MakeDropDownListStringItem(STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE + _order_conditional_variable[i], _order_conditional_variable[i])); + for (const auto &ocv : _order_conditional_variable) { + list.push_back(MakeDropDownListStringItem(STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE + ocv, ocv)); } ShowDropDownList(this, std::move(list), this->vehicle->GetOrder(this->OrderGetSel())->GetConditionVariable(), WID_O_COND_VARIABLE); break; diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 9bfb99506b..75f062fc4b 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2369,7 +2369,7 @@ bool AfterLoadGame() uint8_t old_start; uint8_t num_frames; }; - static const AirportTileConversion atc[] = { + static const AirportTileConversion atcs[] = { {31, 12}, // APT_RADAR_GRASS_FENCE_SW {50, 4}, // APT_GRASS_FENCE_NE_FLAG {62, 2}, // 1 unused tile @@ -2384,17 +2384,17 @@ bool AfterLoadGame() if (IsAirportTile(t)) { StationGfx old_gfx = GetStationGfx(t); uint8_t offset = 0; - for (uint i = 0; i < lengthof(atc); i++) { - if (old_gfx < atc[i].old_start) { + for (const auto &atc : atcs) { + if (old_gfx < atc.old_start) { SetStationGfx(t, old_gfx - offset); break; } - if (old_gfx < atc[i].old_start + atc[i].num_frames) { - SetAnimationFrame(t, old_gfx - atc[i].old_start); - SetStationGfx(t, atc[i].old_start - offset); + if (old_gfx < atc.old_start + atc.num_frames) { + SetAnimationFrame(t, old_gfx - atc.old_start); + SetStationGfx(t, atc.old_start - offset); break; } - offset += atc[i].num_frames - 1; + offset += atc.num_frames - 1; } } } diff --git a/src/script/script_info.cpp b/src/script/script_info.cpp index 3c732f6ecc..e086495781 100644 --- a/src/script/script_info.cpp +++ b/src/script/script_info.cpp @@ -47,8 +47,8 @@ bool ScriptInfo::CheckMethod(const char *name) const "GetDate", "CreateInstance", }; - for (size_t i = 0; i < lengthof(required_functions); i++) { - if (!info->CheckMethod(required_functions[i])) return SQ_ERROR; + for (const auto &required_function : required_functions) { + if (!info->CheckMethod(required_function)) return SQ_ERROR; } /* Get location information of the scanner */ diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index f1117563bc..7dac948470 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2380,8 +2380,8 @@ struct GameSettingsWindow : Window { STR_CONFIG_SETTING_TYPE_COMPANY_MENU, STR_CONFIG_SETTING_TYPE_COMPANY_INGAME, STR_CONFIG_SETTING_TYPE_GAME_MENU, STR_CONFIG_SETTING_TYPE_GAME_INGAME, }; - for (uint i = 0; i < lengthof(setting_types); i++) { - SetDParam(0, setting_types[i]); + for (const auto &setting_type : setting_types) { + SetDParam(0, setting_type); size.width = std::max(size.width, GetStringBoundingBox(STR_CONFIG_SETTING_TYPE).width + padding.width); } size.height = 2 * GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal + diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 18d25d7083..7727478fd1 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -747,16 +747,16 @@ protected: /* Rebuild colour indices if necessary. */ if (SmallMapWindow::map_height_limit == _settings_game.construction.map_height_limit) return; - for (uint n = 0; n < lengthof(_heightmap_schemes); n++) { + for (auto &heightmap_scheme : _heightmap_schemes) { /* The heights go from 0 up to and including maximum. */ int heights = _settings_game.construction.map_height_limit + 1; - _heightmap_schemes[n].height_colours = ReallocT(_heightmap_schemes[n].height_colours, heights); + heightmap_scheme.height_colours = ReallocT(heightmap_scheme.height_colours, heights); for (int z = 0; z < heights; z++) { - size_t access_index = (_heightmap_schemes[n].colour_count * z) / heights; + size_t access_index = (heightmap_scheme.colour_count * z) / heights; /* Choose colour by mapping the range (0..max heightlevel) on the complete colour table. */ - _heightmap_schemes[n].height_colours[z] = _heightmap_schemes[n].height_colours_base[access_index]; + heightmap_scheme.height_colours[z] = heightmap_scheme.height_colours_base[access_index]; } } diff --git a/src/spriteloader/sprite_file.cpp b/src/spriteloader/sprite_file.cpp index e5a701ecba..82498cf83e 100644 --- a/src/spriteloader/sprite_file.cpp +++ b/src/spriteloader/sprite_file.cpp @@ -24,8 +24,8 @@ static uint8_t GetGRFContainerVersion(SpriteFile &file) if (file.ReadWord() == 0) { /* Check for GRF container version 2, which is identified by the bytes * '47 52 46 82 0D 0A 1A 0A' at the start of the file. */ - for (uint i = 0; i < lengthof(_grf_cont_v2_sig); i++) { - if (file.ReadByte() != _grf_cont_v2_sig[i]) return 0; // Invalid format + for (const auto &expected_sig_byte : _grf_cont_v2_sig) { + if (file.ReadByte() != expected_sig_byte) return 0; // Invalid format } return 2; diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index bac30b9de9..63d52fb865 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -361,9 +361,9 @@ int CDECL main(int argc, char *argv[]) case 'P': fmt::print("name\tflags\tdefault\tdescription\n"); - for (size_t j = 0; j < lengthof(_pragmas); j++) { + for (const auto &pragma : _pragmas) { fmt::print("\"{}\"\t{}\t\"{}\"\t\"{}\"\n", - _pragmas[j][0], _pragmas[j][1], _pragmas[j][2], _pragmas[j][3]); + pragma[0], pragma[1], pragma[2], pragma[3]); } return 0; diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 7f4ce36146..58ee59459e 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -2440,8 +2440,8 @@ struct VehicleDetailsWindow : Window { STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE, STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS }; - for (uint i = 0; i < lengthof(info_strings); i++) { - dim = maxdim(dim, GetStringBoundingBox(info_strings[i])); + for (const auto &info_string : info_strings) { + dim = maxdim(dim, GetStringBoundingBox(info_string)); } SetDParam(0, STR_VEHICLE_INFO_AGE); dim = maxdim(dim, GetStringBoundingBox(TimerGameEconomy::UsingWallclockUnits() ? STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD : STR_VEHICLE_INFO_AGE_RUNNING_COST_YR)); diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index c4f53ec9c8..3619b61fd2 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -182,9 +182,9 @@ static void GetVideoModes() _all_modes = (SDL_ListModes(nullptr, SDL_SWSURFACE | (_fullscreen ? SDL_FULLSCREEN : 0)) == (void*)-1); if (modes == (void*)-1) { - for (uint i = 0; i < lengthof(_default_resolutions); i++) { - if (SDL_VideoModeOK(_default_resolutions[i].width, _default_resolutions[i].height, 8, SDL_FULLSCREEN) != 0) { - _resolutions.push_back(_default_resolutions[i]); + for (const auto &default_resolution : _default_resolutions) { + if (SDL_VideoModeOK(default_resolution.width, default_resolution.height, 8, SDL_FULLSCREEN) != 0) { + _resolutions.push_back(default_resolution); } } } else { diff --git a/src/viewport.cpp b/src/viewport.cpp index 98f40b2a42..8110bc4224 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -3517,9 +3517,9 @@ static ViewportSSCSS _vp_sprite_sorters[] = { /** Choose the "best" sprite sorter and set _vp_sprite_sorter. */ void InitializeSpriteSorter() { - for (uint i = 0; i < lengthof(_vp_sprite_sorters); i++) { - if (_vp_sprite_sorters[i].fct_checker()) { - _vp_sprite_sorter = _vp_sprite_sorters[i].fct_sorter; + for (const auto &sprite_sorter : _vp_sprite_sorters) { + if (sprite_sorter.fct_checker()) { + _vp_sprite_sorter = sprite_sorter.fct_sorter; break; } } From e8a56db21dc00e09bff792a9c9fb66bcb51aa2cf Mon Sep 17 00:00:00 2001 From: Rubidium Date: Wed, 10 Apr 2024 21:49:39 +0200 Subject: [PATCH 291/695] Codechange: use designated initializers for OptionData and pass as span --- src/misc/getoptdata.cpp | 12 +++--- src/misc/getoptdata.h | 71 ++++----------------------------- src/openttd.cpp | 50 ++++++++++------------- src/settingsgen/settingsgen.cpp | 11 +++-- src/strgen/strgen.cpp | 19 +++++---- 5 files changed, 49 insertions(+), 114 deletions(-) diff --git a/src/misc/getoptdata.cpp b/src/misc/getoptdata.cpp index df54391232..b4cb5df3d1 100644 --- a/src/misc/getoptdata.cpp +++ b/src/misc/getoptdata.cpp @@ -21,7 +21,7 @@ */ int GetOptData::GetOpt() { - const OptionData *odata; + OptionSpan::iterator odata; char *s = this->cont; if (s == nullptr) { @@ -34,7 +34,7 @@ int GetOptData::GetOpt() this->numleft--; /* Is it a long option? */ - for (odata = this->options; odata->flags != ODF_END; odata++) { + for (odata = std::begin(this->options); odata != std::end(this->options); odata++) { if (odata->longname != nullptr && !strcmp(odata->longname, s)) { // Long options always use the entire argument. this->cont = nullptr; goto set_optval; @@ -45,13 +45,13 @@ int GetOptData::GetOpt() } /* Is it a short option? */ - for (odata = this->options; odata->flags != ODF_END; odata++) { + for (odata = std::begin(this->options); odata != std::end(this->options); odata++) { if (odata->shortname != '\0' && *s == odata->shortname) { this->cont = (s[1] != '\0') ? s + 1 : nullptr; set_optval: // Handle option value of *odata . this->opt = nullptr; - switch (odata->flags) { + switch (odata->type) { case ODF_NO_VALUE: return odata->id; @@ -63,10 +63,10 @@ set_optval: // Handle option value of *odata . return odata->id; } /* No more arguments, either return an error or a value-less option. */ - if (this->numleft == 0) return (odata->flags == ODF_HAS_VALUE) ? -2 : odata->id; + if (this->numleft == 0) return (odata->type == ODF_HAS_VALUE) ? -2 : odata->id; /* Next argument looks like another option, let's not return it as option value. */ - if (odata->flags == ODF_OPTIONAL_VALUE && this->argv[0][0] == '-') return odata->id; + if (odata->type == ODF_OPTIONAL_VALUE && this->argv[0][0] == '-') return odata->id; this->opt = this->argv[0]; // Next argument is the option value. this->argv++; diff --git a/src/misc/getoptdata.h b/src/misc/getoptdata.h index e9a8e824a2..d6df8f218e 100644 --- a/src/misc/getoptdata.h +++ b/src/misc/getoptdata.h @@ -11,27 +11,27 @@ #define GETOPTDATA_H /** Flags of an option. */ -enum OptionDataFlags { +enum OptionDataType : uint8_t { ODF_NO_VALUE, ///< A plain option (no value attached to it). ODF_HAS_VALUE, ///< An option with a value. ODF_OPTIONAL_VALUE, ///< An option with an optional value. - ODF_END, ///< Terminator (data is not parsed further). }; /** Data of an option. */ struct OptionData { - uint8_t id; ///< Unique identification of this option data, often the same as #shortname. - char shortname; ///< Short option letter if available, else use \c '\0'. - uint16_t flags; ///< Option data flags. @see OptionDataFlags - const char *longname; ///< Long option name including '-'/'--' prefix, use \c nullptr if not available. + OptionDataType type; ///< The type of option. + char id; ///< Unique identification of this option data, often the same as #shortname. + char shortname = '\0'; ///< Short option letter if available, else use \c '\0'. + const char *longname = nullptr; ///< Long option name including '-'/'--' prefix, use \c nullptr if not available. }; /** Data storage for parsing command line options. */ struct GetOptData { + using OptionSpan = std::span; char *opt; ///< Option value, if available (else \c nullptr). int numleft; ///< Number of arguments left in #argv. char **argv; ///< Remaining command line arguments. - const OptionData *options; ///< Command line option descriptions. + OptionSpan options; ///< Command line option descriptions. char *cont; ///< Next call to #GetOpt should start here (in the middle of an argument). /** @@ -40,7 +40,7 @@ struct GetOptData { * @param argv Command line arguments, excluding the program name. * @param options Command line option descriptions. */ - GetOptData(int argc, char **argv, const OptionData *options) : + GetOptData(int argc, char **argv, OptionSpan options) : opt(nullptr), numleft(argc), argv(argv), @@ -52,59 +52,4 @@ struct GetOptData { int GetOpt(); }; -/** - * General macro for creating an option. - * @param id Identification of the option. - * @param shortname Short option name. Use \c '\0' if not used. - * @param longname Long option name including leading '-' or '--'. Use \c nullptr if not used. - * @param flags Flags of the option. - */ -#define GETOPT_GENERAL(id, shortname, longname, flags) { id, shortname, flags, longname } - -/** - * Short option without value. - * @param shortname Short option name. Use \c '\0' if not used. - * @param longname Long option name including leading '-' or '--'. Use \c nullptr if not used. - */ -#define GETOPT_NOVAL(shortname, longname) GETOPT_GENERAL(shortname, shortname, longname, ODF_NO_VALUE) - -/** - * Short option with value. - * @param shortname Short option name. Use \c '\0' if not used. - * @param longname Long option name including leading '-' or '--'. Use \c nullptr if not used. - */ -#define GETOPT_VALUE(shortname, longname) GETOPT_GENERAL(shortname, shortname, longname, ODF_HAS_VALUE) - -/** - * Short option with optional value. - * @param shortname Short option name. Use \c '\0' if not used. - * @param longname Long option name including leading '-' or '--'. Use \c nullptr if not used. - * @note Options with optional values are hopelessly ambiguous, eg "-opt -value", avoid them. - */ -#define GETOPT_OPTVAL(shortname, longname) GETOPT_GENERAL(shortname, shortname, longname, ODF_OPTIONAL_VALUE) - - -/** - * Short option without value. - * @param shortname Short option name. Use \c '\0' if not used. - */ -#define GETOPT_SHORT_NOVAL(shortname) GETOPT_NOVAL(shortname, nullptr) - -/** - * Short option with value. - * @param shortname Short option name. Use \c '\0' if not used. - */ -#define GETOPT_SHORT_VALUE(shortname) GETOPT_VALUE(shortname, nullptr) - -/** - * Short option with optional value. - * @param shortname Short option name. Use \c '\0' if not used. - * @note Options with optional values are hopelessly ambiguous, eg "-opt -value", avoid them. - */ -#define GETOPT_SHORT_OPTVAL(shortname) GETOPT_OPTVAL(shortname, nullptr) - -/** Option terminator. */ -#define GETOPT_END() { '\0', '\0', ODF_END, nullptr} - - #endif /* GETOPTDATA_H */ diff --git a/src/openttd.cpp b/src/openttd.cpp index 7ae3cba92d..bece97833e 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -478,36 +478,27 @@ void PostMainLoop() extern void DedicatedFork(); #endif -/** Options of OpenTTD. */ -static const OptionData _options[] = { - GETOPT_SHORT_VALUE('I'), - GETOPT_SHORT_VALUE('S'), - GETOPT_SHORT_VALUE('M'), - GETOPT_SHORT_VALUE('m'), - GETOPT_SHORT_VALUE('s'), - GETOPT_SHORT_VALUE('v'), - GETOPT_SHORT_VALUE('b'), - GETOPT_SHORT_OPTVAL('D'), - GETOPT_SHORT_VALUE('n'), - GETOPT_SHORT_VALUE('p'), - GETOPT_SHORT_VALUE('P'), +/** + * Create all the options that OpenTTD supports. Each option is + * always a single character with no, an optional or a required value. + * @return The available options. + */ +static std::vector CreateOptions() +{ + std::vector options; + /* Options that require a parameter. */ + for (char c : "GIMPSbcmnpqrstv") options.push_back({ .type = ODF_HAS_VALUE, .id = c, .shortname = c }); #if !defined(_WIN32) - GETOPT_SHORT_NOVAL('f'), + options.push_back({ .type = ODF_HAS_VALUE, .id = 'f', .shortname = 'f' }); #endif - GETOPT_SHORT_VALUE('r'), - GETOPT_SHORT_VALUE('t'), - GETOPT_SHORT_OPTVAL('d'), - GETOPT_SHORT_NOVAL('e'), - GETOPT_SHORT_OPTVAL('g'), - GETOPT_SHORT_VALUE('G'), - GETOPT_SHORT_VALUE('c'), - GETOPT_SHORT_NOVAL('x'), - GETOPT_SHORT_NOVAL('X'), - GETOPT_SHORT_VALUE('q'), - GETOPT_SHORT_NOVAL('h'), - GETOPT_SHORT_NOVAL('Q'), - GETOPT_END() -}; + + /* Options with an optional parameter. */ + for (char c : "Ddg") options.push_back({ .type = ODF_OPTIONAL_VALUE, .id = c, .shortname = c }); + + /* Options without a parameter. */ + for (char c : "QXehx") options.push_back({ .type = ODF_NO_VALUE, .id = c, .shortname = c }); + return options; +} /** * Main entry point for this lovely game. @@ -538,7 +529,8 @@ int openttd_main(int argc, char *argv[]) _game_mode = GM_MENU; _switch_mode = SM_MENU; - GetOptData mgo(argc - 1, argv + 1, _options); + auto options = CreateOptions(); + GetOptData mgo(argc - 1, argv + 1, options); int ret = 0; int i; diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index 0ab4d5bd43..cb161033b8 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -385,12 +385,11 @@ static bool CompareFiles(const char *n1, const char *n2) /** Options of settingsgen. */ static const OptionData _opts[] = { - GETOPT_NOVAL( 'h', "--help"), - GETOPT_GENERAL('h', '?', nullptr, ODF_NO_VALUE), - GETOPT_VALUE( 'o', "--output"), - GETOPT_VALUE( 'b', "--before"), - GETOPT_VALUE( 'a', "--after"), - GETOPT_END(), + { .type = ODF_NO_VALUE, .id = 'h', .shortname = 'h', .longname = "--help" }, + { .type = ODF_NO_VALUE, .id = 'h', .shortname = '?' }, + { .type = ODF_HAS_VALUE, .id = 'o', .shortname = 'o', .longname = "--output" }, + { .type = ODF_HAS_VALUE, .id = 'b', .shortname = 'b', .longname = "--before" }, + { .type = ODF_HAS_VALUE, .id = 'a', .shortname = 'a', .longname = "--after" }, }; /** diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index 63d52fb865..306a4f8c63 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -312,16 +312,15 @@ struct LanguageFileWriter : LanguageWriter, FileWriter { /** Options of strgen. */ static const OptionData _opts[] = { - GETOPT_GENERAL('C', '\0', "-export-commands", ODF_NO_VALUE), - GETOPT_GENERAL('L', '\0', "-export-plurals", ODF_NO_VALUE), - GETOPT_GENERAL('P', '\0', "-export-pragmas", ODF_NO_VALUE), - GETOPT_NOVAL( 't', "--todo"), - GETOPT_NOVAL( 'w', "--warning"), - GETOPT_NOVAL( 'h', "--help"), - GETOPT_GENERAL('h', '?', nullptr, ODF_NO_VALUE), - GETOPT_VALUE( 's', "--source_dir"), - GETOPT_VALUE( 'd', "--dest_dir"), - GETOPT_END(), + { .type = ODF_NO_VALUE, .id = 'C', .longname = "-export-commands" }, + { .type = ODF_NO_VALUE, .id = 'L', .longname = "-export-plurals" }, + { .type = ODF_NO_VALUE, .id = 'P', .longname = "-export-pragmas" }, + { .type = ODF_NO_VALUE, .id = 't', .shortname = 't', .longname = "--todo" }, + { .type = ODF_NO_VALUE, .id = 'w', .shortname = 'w', .longname = "--warning" }, + { .type = ODF_NO_VALUE, .id = 'h', .shortname = 'h', .longname = "--help" }, + { .type = ODF_NO_VALUE, .id = 'h', .shortname = '?' }, + { .type = ODF_HAS_VALUE, .id = 's', .shortname = 's', .longname = "--source_dir" }, + { .type = ODF_HAS_VALUE, .id = 'd', .shortname = 'd', .longname = "--dest_dir" }, }; int CDECL main(int argc, char *argv[]) From 5592b4409bf1212f3be045e9f3b3f6ce976ad81d Mon Sep 17 00:00:00 2001 From: Rubidium Date: Wed, 10 Apr 2024 21:57:27 +0200 Subject: [PATCH 292/695] Codechange: use ranged for loop and separate function instead of goto --- src/misc/getoptdata.cpp | 69 +++++++++++++++++++++-------------------- src/misc/getoptdata.h | 1 + 2 files changed, 36 insertions(+), 34 deletions(-) diff --git a/src/misc/getoptdata.cpp b/src/misc/getoptdata.cpp index b4cb5df3d1..a8fdc9d2b5 100644 --- a/src/misc/getoptdata.cpp +++ b/src/misc/getoptdata.cpp @@ -21,8 +21,6 @@ */ int GetOptData::GetOpt() { - OptionSpan::iterator odata; - char *s = this->cont; if (s == nullptr) { if (this->numleft == 0) return -1; // No arguments left -> finished. @@ -34,10 +32,10 @@ int GetOptData::GetOpt() this->numleft--; /* Is it a long option? */ - for (odata = std::begin(this->options); odata != std::end(this->options); odata++) { - if (odata->longname != nullptr && !strcmp(odata->longname, s)) { // Long options always use the entire argument. + for (auto &option : this->options) { + if (option.longname != nullptr && !strcmp(option.longname, s)) { // Long options always use the entire argument. this->cont = nullptr; - goto set_optval; + return this->GetOpt(option); } } @@ -45,39 +43,42 @@ int GetOptData::GetOpt() } /* Is it a short option? */ - for (odata = std::begin(this->options); odata != std::end(this->options); odata++) { - if (odata->shortname != '\0' && *s == odata->shortname) { + for (auto &option : this->options) { + if (option.shortname != '\0' && *s == option.shortname) { this->cont = (s[1] != '\0') ? s + 1 : nullptr; - -set_optval: // Handle option value of *odata . - this->opt = nullptr; - switch (odata->type) { - case ODF_NO_VALUE: - return odata->id; - - case ODF_HAS_VALUE: - case ODF_OPTIONAL_VALUE: - if (this->cont != nullptr) { // Remainder of the argument is the option value. - this->opt = this->cont; - this->cont = nullptr; - return odata->id; - } - /* No more arguments, either return an error or a value-less option. */ - if (this->numleft == 0) return (odata->type == ODF_HAS_VALUE) ? -2 : odata->id; - - /* Next argument looks like another option, let's not return it as option value. */ - if (odata->type == ODF_OPTIONAL_VALUE && this->argv[0][0] == '-') return odata->id; - - this->opt = this->argv[0]; // Next argument is the option value. - this->argv++; - this->numleft--; - return odata->id; - - default: NOT_REACHED(); - } + return this->GetOpt(option); } } return -2; // No other ways to interpret the text -> error. } +int GetOptData::GetOpt(const OptionData &option) +{ + this->opt = nullptr; + switch (option.type) { + case ODF_NO_VALUE: + return option.id; + + case ODF_HAS_VALUE: + case ODF_OPTIONAL_VALUE: + if (this->cont != nullptr) { // Remainder of the argument is the option value. + this->opt = this->cont; + this->cont = nullptr; + return option.id; + } + /* No more arguments, either return an error or a value-less option. */ + if (this->numleft == 0) return (option.type == ODF_HAS_VALUE) ? -2 : option.id; + + /* Next argument looks like another option, let's not return it as option value. */ + if (option.type == ODF_OPTIONAL_VALUE && this->argv[0][0] == '-') return option.id; + + this->opt = this->argv[0]; // Next argument is the option value. + this->argv++; + this->numleft--; + return option.id; + + default: NOT_REACHED(); + } +} + diff --git a/src/misc/getoptdata.h b/src/misc/getoptdata.h index d6df8f218e..40950e0078 100644 --- a/src/misc/getoptdata.h +++ b/src/misc/getoptdata.h @@ -50,6 +50,7 @@ struct GetOptData { } int GetOpt(); + int GetOpt(const OptionData &option); }; #endif /* GETOPTDATA_H */ From afd7878de087701358a3d22c9632a0d707375685 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Wed, 10 Apr 2024 22:21:56 +0200 Subject: [PATCH 293/695] Codechange: internally use a span of arguments for GetOptData --- src/misc/getoptdata.cpp | 18 ++++++++---------- src/misc/getoptdata.h | 23 ++++++++--------------- src/openttd.cpp | 4 ++-- src/settingsgen/settingsgen.cpp | 4 ++-- src/strgen/strgen.cpp | 10 +++++----- 5 files changed, 25 insertions(+), 34 deletions(-) diff --git a/src/misc/getoptdata.cpp b/src/misc/getoptdata.cpp index a8fdc9d2b5..fbc4907375 100644 --- a/src/misc/getoptdata.cpp +++ b/src/misc/getoptdata.cpp @@ -21,15 +21,14 @@ */ int GetOptData::GetOpt() { - char *s = this->cont; + const char *s = this->cont; if (s == nullptr) { - if (this->numleft == 0) return -1; // No arguments left -> finished. + if (this->arguments.empty()) return -1; // No arguments left -> finished. - s = this->argv[0]; + s = this->arguments[0]; if (*s != '-') return -1; // No leading '-' -> not an option -> finished. - this->argv++; - this->numleft--; + this->arguments = this->arguments.subspan(1); /* Is it a long option? */ for (auto &option : this->options) { @@ -68,14 +67,13 @@ int GetOptData::GetOpt(const OptionData &option) return option.id; } /* No more arguments, either return an error or a value-less option. */ - if (this->numleft == 0) return (option.type == ODF_HAS_VALUE) ? -2 : option.id; + if (this->arguments.empty()) return (option.type == ODF_HAS_VALUE) ? -2 : option.id; /* Next argument looks like another option, let's not return it as option value. */ - if (option.type == ODF_OPTIONAL_VALUE && this->argv[0][0] == '-') return option.id; + if (option.type == ODF_OPTIONAL_VALUE && this->arguments[0][0] == '-') return option.id; - this->opt = this->argv[0]; // Next argument is the option value. - this->argv++; - this->numleft--; + this->opt = this->arguments[0]; // Next argument is the option value. + this->arguments = this->arguments.subspan(1); return option.id; default: NOT_REACHED(); diff --git a/src/misc/getoptdata.h b/src/misc/getoptdata.h index 40950e0078..244c96358b 100644 --- a/src/misc/getoptdata.h +++ b/src/misc/getoptdata.h @@ -28,26 +28,19 @@ struct OptionData { /** Data storage for parsing command line options. */ struct GetOptData { using OptionSpan = std::span; - char *opt; ///< Option value, if available (else \c nullptr). - int numleft; ///< Number of arguments left in #argv. - char **argv; ///< Remaining command line arguments. - OptionSpan options; ///< Command line option descriptions. - char *cont; ///< Next call to #GetOpt should start here (in the middle of an argument). + using ArgumentSpan = std::span; + + ArgumentSpan arguments; ///< Remaining command line arguments. + const OptionSpan options; ///< Command line option descriptions. + const char *opt = nullptr; ///< Option value, if available (else \c nullptr). + const char *cont = nullptr; ///< Next call to #GetOpt should start here (in the middle of an argument). /** * Constructor of the data store. - * @param argc Number of command line arguments, excluding the program name. - * @param argv Command line arguments, excluding the program name. + * @param argument The command line arguments, excluding the program name. * @param options Command line option descriptions. */ - GetOptData(int argc, char **argv, OptionSpan options) : - opt(nullptr), - numleft(argc), - argv(argv), - options(options), - cont(nullptr) - { - } + GetOptData(ArgumentSpan arguments, OptionSpan options) : arguments(arguments), options(options) {} int GetOpt(); int GetOpt(const OptionData &option); diff --git a/src/openttd.cpp b/src/openttd.cpp index bece97833e..55862f6ba3 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -530,7 +530,7 @@ int openttd_main(int argc, char *argv[]) _switch_mode = SM_MENU; auto options = CreateOptions(); - GetOptData mgo(argc - 1, argv + 1, options); + GetOptData mgo(std::span(argv + 1, argc - 1), options); int ret = 0; int i; @@ -654,7 +654,7 @@ int openttd_main(int argc, char *argv[]) if (i == -2) break; } - if (i == -2 || mgo.numleft > 0) { + if (i == -2 || !mgo.arguments.empty()) { /* Either the user typed '-h', they made an error, or they added unrecognized command line arguments. * In all cases, print the help, and exit. * diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index cb161033b8..9a55d0d170 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -435,7 +435,7 @@ int CDECL main(int argc, char *argv[]) const char *before_file = nullptr; const char *after_file = nullptr; - GetOptData mgo(argc - 1, argv + 1, _opts); + GetOptData mgo(std::span(argv + 1, argc - 1), _opts); for (;;) { int i = mgo.GetOpt(); if (i == -1) break; @@ -472,7 +472,7 @@ int CDECL main(int argc, char *argv[]) _stored_output.Clear(); _post_amble_output.Clear(); - for (int i = 0; i < mgo.numleft; i++) ProcessIniFile(mgo.argv[i]); + for (auto &argument : mgo.arguments) ProcessIniFile(argument); /* Write output. */ if (output_file == nullptr) { diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index 306a4f8c63..8acb4dfbe5 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -328,7 +328,7 @@ int CDECL main(int argc, char *argv[]) std::filesystem::path src_dir("."); std::filesystem::path dest_dir; - GetOptData mgo(argc - 1, argv + 1, _opts); + GetOptData mgo(std::span(argv + 1, argc - 1), _opts); for (;;) { int i = mgo.GetOpt(); if (i == -1) break; @@ -412,7 +412,7 @@ int CDECL main(int argc, char *argv[]) * strgen generates strings.h to the destination directory. If it is supplied * with a (free) parameter the program will translate that language to destination * directory. As input english.txt is parsed from the source directory */ - if (mgo.numleft == 0) { + if (mgo.arguments.empty()) { std::filesystem::path input_path = src_dir; input_path /= "english.txt"; @@ -431,7 +431,7 @@ int CDECL main(int argc, char *argv[]) writer.WriteHeader(data); writer.Finalise(data); if (_errors != 0) return 1; - } else if (mgo.numleft >= 1) { + } else { std::filesystem::path input_path = src_dir; input_path /= "english.txt"; @@ -440,10 +440,10 @@ int CDECL main(int argc, char *argv[]) FileStringReader master_reader(data, input_path, true, false); master_reader.ParseFile(); - for (int i = 0; i < mgo.numleft; i++) { + for (auto &argument: mgo.arguments) { data.FreeTranslation(); - std::filesystem::path lang_file = mgo.argv[i]; + std::filesystem::path lang_file = argument; FileStringReader translation_reader(data, lang_file, false, lang_file.filename() != "english.txt"); translation_reader.ParseFile(); // target file if (_errors != 0) return 1; From 3316b274966b9628b3c91d932af198001b9e9039 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 11 Apr 2024 14:37:29 +0100 Subject: [PATCH 294/695] Fix: Signature validation did not close its file. (#12479) --- src/signature.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/signature.cpp b/src/signature.cpp index a329410e35..2b64676e5d 100644 --- a/src/signature.cpp +++ b/src/signature.cpp @@ -205,6 +205,7 @@ static bool _ValidateSignatureFile(const std::string &filename) std::string text(filesize, '\0'); size_t len = fread(text.data(), filesize, 1, f); + FioFCloseFile(f); if (len != 1) { Debug(misc, 0, "Failed to validate signature: failed to read file: {}", filename); return false; From eda10abc8c761acc4379d26d88e6a31ce3c80c5c Mon Sep 17 00:00:00 2001 From: Rubidium Date: Thu, 11 Apr 2024 13:25:40 +0200 Subject: [PATCH 295/695] Codechange: pass command line arguments as std::span to openttd_main --- src/openttd.cpp | 13 ++++++------- src/openttd.h | 2 +- src/os/macosx/osx_main.cpp | 2 +- src/os/unix/unix_main.cpp | 2 +- src/os/windows/win32_main.cpp | 26 ++++++++++++-------------- 5 files changed, 21 insertions(+), 24 deletions(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index 55862f6ba3..898ea24832 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -502,11 +502,10 @@ static std::vector CreateOptions() /** * Main entry point for this lovely game. - * @param argc The number of arguments passed to this game. - * @param argv The values of the arguments. + * @param arguments The command line arguments passed to the application. * @return 0 when there is no error. */ -int openttd_main(int argc, char *argv[]) +int openttd_main(std::span arguments) { _game_session_stats.start_time = std::chrono::steady_clock::now(); _game_session_stats.savegame_size = std::nullopt; @@ -530,7 +529,7 @@ int openttd_main(int argc, char *argv[]) _switch_mode = SM_MENU; auto options = CreateOptions(); - GetOptData mgo(std::span(argv + 1, argc - 1), options); + GetOptData mgo(arguments.subspan(1), options); int ret = 0; int i; @@ -614,7 +613,7 @@ int openttd_main(int argc, char *argv[]) } break; case 'q': { - DeterminePaths(argv[0], only_local_path); + DeterminePaths(arguments[0], only_local_path); if (StrEmpty(mgo.opt)) { ret = 1; return ret; @@ -660,7 +659,7 @@ int openttd_main(int argc, char *argv[]) * * The next two functions are needed to list the graphics sets. We can't do them earlier * because then we cannot show it on the debug console as that hasn't been configured yet. */ - DeterminePaths(argv[0], only_local_path); + DeterminePaths(arguments[0], only_local_path); TarScanner::DoScan(TarScanner::BASESET); BaseGraphics::FindSets(); BaseSounds::FindSets(); @@ -669,7 +668,7 @@ int openttd_main(int argc, char *argv[]) return ret; } - DeterminePaths(argv[0], only_local_path); + DeterminePaths(arguments[0], only_local_path); TarScanner::DoScan(TarScanner::BASESET); if (dedicated) Debug(net, 3, "Starting dedicated server, version {}", _openttd_revision); diff --git a/src/openttd.h b/src/openttd.h index 2fb27e9288..f6728ee70d 100644 --- a/src/openttd.h +++ b/src/openttd.h @@ -87,7 +87,7 @@ extern PauseMode _pause_mode; void AskExitGame(); void AskExitToGameMenu(); -int openttd_main(int argc, char *argv[]); +int openttd_main(std::span arguments); void StateGameLoop(); void HandleExitGameRequest(); diff --git a/src/os/macosx/osx_main.cpp b/src/os/macosx/osx_main.cpp index f33e371436..7d8a7994e9 100644 --- a/src/os/macosx/osx_main.cpp +++ b/src/os/macosx/osx_main.cpp @@ -41,7 +41,7 @@ int CDECL main(int argc, char *argv[]) signal(SIGPIPE, SIG_IGN); - int ret = openttd_main(argc, argv); + int ret = openttd_main(std::span(argv, argc)); CocoaReleaseAutoreleasePool(); diff --git a/src/os/unix/unix_main.cpp b/src/os/unix/unix_main.cpp index 41ad22ced5..4a71b886b3 100644 --- a/src/os/unix/unix_main.cpp +++ b/src/os/unix/unix_main.cpp @@ -29,5 +29,5 @@ int CDECL main(int argc, char *argv[]) signal(SIGPIPE, SIG_IGN); - return openttd_main(argc, argv); + return openttd_main(std::span(argv, argc)); } diff --git a/src/os/windows/win32_main.cpp b/src/os/windows/win32_main.cpp index ebc22ffc71..9b5c815e3a 100644 --- a/src/os/windows/win32_main.cpp +++ b/src/os/windows/win32_main.cpp @@ -18,11 +18,10 @@ #include "../../safeguards.h" -static int ParseCommandLine(char *line, char **argv, int max_argc) +static auto ParseCommandLine(char *line) { - int n = 0; - - do { + std::vector arguments; + for (;;) { /* skip whitespace */ while (*line == ' ' || *line == '\t') line++; @@ -31,22 +30,22 @@ static int ParseCommandLine(char *line, char **argv, int max_argc) /* special handling when quoted */ if (*line == '"') { - argv[n++] = ++line; + arguments.push_back(++line); while (*line != '"') { - if (*line == '\0') return n; + if (*line == '\0') return arguments; line++; } } else { - argv[n++] = line; + arguments.push_back(line); while (*line != ' ' && *line != '\t') { - if (*line == '\0') return n; + if (*line == '\0') return arguments; line++; } } *line++ = '\0'; - } while (n != max_argc); + }; - return n; + return arguments; } void CreateConsole(); @@ -73,13 +72,12 @@ int APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int) /* setup random seed to something quite random */ SetRandomSeed(GetTickCount()); - char *argv[64]; // max 64 command line arguments - int argc = ParseCommandLine(cmdline.data(), argv, lengthof(argv)); + auto arguments = ParseCommandLine(cmdline.data()); /* Make sure our arguments contain only valid UTF-8 characters. */ - for (int i = 0; i < argc; i++) StrMakeValidInPlace(argv[i]); + for (auto argument : arguments) StrMakeValidInPlace(argument); - int ret = openttd_main(argc, argv); + int ret = openttd_main(arguments); /* Restore system timer resolution. */ timeEndPeriod(1); From 9915c1f0326b24fd04398c2f90d15ca0d5f45879 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 11 Apr 2024 21:35:40 +0100 Subject: [PATCH 296/695] Fix #12477: Use std::filesystem::rename instead of Windows Shell API call. (#12478) --- src/ini.cpp | 33 +++++---------------------------- 1 file changed, 5 insertions(+), 28 deletions(-) diff --git a/src/ini.cpp b/src/ini.cpp index 5931d891ec..95d7cb8d38 100644 --- a/src/ini.cpp +++ b/src/ini.cpp @@ -22,11 +22,7 @@ # include #endif -#ifdef _WIN32 -# include -# include -# include "core/mem_func.hpp" -#endif +#include #include "safeguards.h" @@ -91,30 +87,11 @@ bool IniFile::SaveToDisk(const std::string &filename) if (ret != 0) return false; #endif -#if defined(_WIN32) - /* Allocate space for one more \0 character. */ - wchar_t tfilename[MAX_PATH + 1], tfile_new[MAX_PATH + 1]; - wcsncpy(tfilename, OTTD2FS(filename).c_str(), MAX_PATH); - wcsncpy(tfile_new, OTTD2FS(file_new).c_str(), MAX_PATH); - /* SHFileOperation wants a double '\0' terminated string. */ - tfilename[MAX_PATH - 1] = '\0'; - tfile_new[MAX_PATH - 1] = '\0'; - tfilename[wcslen(tfilename) + 1] = '\0'; - tfile_new[wcslen(tfile_new) + 1] = '\0'; - - /* Rename file without any user confirmation. */ - SHFILEOPSTRUCT shfopt; - MemSetT(&shfopt, 0); - shfopt.wFunc = FO_MOVE; - shfopt.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI | FOF_SILENT; - shfopt.pFrom = tfile_new; - shfopt.pTo = tfilename; - SHFileOperation(&shfopt); -#else - if (rename(file_new.c_str(), filename.c_str()) < 0) { - Debug(misc, 0, "Renaming {} to {} failed; configuration not saved", file_new, filename); + std::error_code ec; + std::filesystem::rename(OTTD2FS(file_new), OTTD2FS(filename), ec); + if (ec) { + Debug(misc, 0, "Renaming {} to {} failed; configuration not saved: {}", file_new, filename, ec.message()); } -#endif #ifdef __EMSCRIPTEN__ EM_ASM(if (window["openttd_syncfs"]) openttd_syncfs()); From bb9b8b90c76b98667c7ed2d55794fa3a9688575d Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 12 Apr 2024 04:41:30 +0000 Subject: [PATCH 297/695] Update: Translations from eints swedish: 6 changes by sereneavatar portuguese (brazilian): 11 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 22 +++++++++++----------- src/lang/swedish.txt | 7 ++++++- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 336d63c4e9..f954b9743f 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -278,7 +278,7 @@ STR_TOOLTIP_SORT_CRITERIA :{BLACK}Escolher STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Escolher o critério de seleção STR_BUTTON_SORT_BY :{BLACK}Ordenar por STR_BUTTON_CATCHMENT :{BLACK}Cobertura -STR_TOOLTIP_CATCHMENT :{BLACK}Mostrar/Ocultar a área de cobertura +STR_TOOLTIP_CATCHMENT :{BLACK}Mostrar/Ocultar área de cobertura STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Fechar janela STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Título da janela - arraste isto para mover a janela @@ -533,8 +533,8 @@ STR_ABOUT_MENU_SCREENSHOT :Captura de tela STR_ABOUT_MENU_SHOW_FRAMERATE :Mostrar taxa de quadros STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre o 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Alinhador de sprites -STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Mostrar/Ocultar as caixas delimitadoras -STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Ativar/Desativar coloração dos blocos sujos +STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Mostrar/Ocultar caixas delimitadoras +STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Ativar coloração dos blocos sujos STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Mostrar/Ocultar contornos dos widgets ###length 31 @@ -3431,8 +3431,8 @@ STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Uma list STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Definir parâmetros STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}Mostrar parâmetros -STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Ativar/Desativar paleta -STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Ativar/Desativar a paleta do NewGRF selecionado.{}Faça isso quando os gráficos deste NewGRF ficarem cor de rosa no jogo +STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Comutar paleta +STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Comutar a paleta do NewGRF selecionado.{}Faça isso quando os gráficos deste NewGRF parecerem cor-de-rosa no jogo STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Aplicar modificações STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Procurar conteúdo em falta online @@ -3598,7 +3598,7 @@ STR_NEWGRF_SCAN_ARCHIVES :Procurando por # Sign list window STR_SIGN_LIST_CAPTION :{WHITE}Lista de Placas - {COMMA} Placa{P "" s} STR_SIGN_LIST_MATCH_CASE :{BLACK}Diferenciar maiúsculas/minúsculas -STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Ativar/Desativar correspondência de maiúsculas/minúsculas quando comparar os nomes das placas com a palavra-chave fornecida +STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Considerar correspondência de maiúsculas e minúsculas quando comparar os nomes das placas com a palavra-chave fornecida # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Editar texto da placa @@ -4013,7 +4013,7 @@ STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Enviar para um STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Clique para parar todos os veículos desta lista STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Clique para iniciar todos os veículos desta lista -STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Ver lista de modelos de locomotivas disponíveis para este tipo de veículo +STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Ver a lista de modelos disponíveis para esta classe de veículo STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}Ordens compartilhadas de {COMMA} Veículo{P "" s} @@ -4274,7 +4274,7 @@ STR_ENGINE_PREVIEW_SHIP :{G=f}embarcaç STR_ENGINE_PREVIEW_TEXT3 :{BLACK}{STRING}{}{5:STRING}{}{STRING} STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING}{}{STRING}{}{STRING}{}{STRING} STR_ENGINE_PREVIEW_COST_WEIGHT :Custo: {CURRENCY_LONG} Peso: {WEIGHT_SHORT} -STR_ENGINE_PREVIEW_COST_MAX_SPEED :Custo: {CURRENCY_LONG} Veloc. máx.: {VELOCITY} +STR_ENGINE_PREVIEW_COST_MAX_SPEED :Custo: {CURRENCY_LONG} Velocidade máx.: {VELOCITY} STR_ENGINE_PREVIEW_SPEED_POWER :Velocidade: {VELOCITY} Potência: {POWER} STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Veloc.: {VELOCITY} Potência: {POWER} Tração máx.: {FORCE} STR_ENGINE_PREVIEW_TYPE :Tipo de aeronave: {STRING} @@ -4783,7 +4783,7 @@ STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Parar em STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Parar em STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}O jogo é pausado quando uma mensagem de registro da IA for igual a esta sequência de caracteres STR_AI_DEBUG_MATCH_CASE :{BLACK}Diferenciar maiúsculas/minúsculas -STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Ativar/Desativar correspondência de maiúsculas/minúsculas quando comparar as mensagens de registro da IA com a sequência de caracteres de parada +STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Considerar correspondência de maiúsculas e minúsculas quando comparar as mensagens de registro da IA com a sequência de caracteres de parada STR_AI_DEBUG_CONTINUE :{BLACK}Continuar STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Sair da pausa e continuar a IA STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Mostrar a saída de depuração desta IA. Ctrl+Clique para abrir em uma nova janela @@ -4900,7 +4900,7 @@ STR_MESSAGE_ESTIMATED_COST :{WHITE}Custo Es STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Receita Estimada: {CURRENCY_LONG} # Saveload messages -STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravação ainda sendo executada,{}por favor aguarde até terminar! +STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravação ainda sendo executada,{}por favor, aguarde até terminar! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Salvamento automático falhou STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Não é possível ler a unidade STR_ERROR_GAME_SAVE_FAILED :{WHITE}Falha ao salvar jogo... @@ -4966,7 +4966,7 @@ STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... limi STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... limite de plantação de árvores atingido STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}Nome deve ser único STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{1:STRING} no caminho -STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Não é permitido enquanto pausado +STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Não é permitido com o jogo pausado # Local authority errors STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}A autoridade local de {TOWN} recusa-se a permitir isso diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index df9d53384f..41607130c9 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -3488,6 +3488,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Vägtyp STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variabel 60+x parameter (hexadecimal) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Justerar spriteobjekt: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Justerar spriteobjekt: Action 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Justerar spriteobjekt: Åtgärd 0x5, typ {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Nästa spriteobjekt STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Fortsätt till nästa nomala spriteobjekt, ignorera eventuella pseudo/recolour/font spriteobjekt och börja om efter sista spriteobjektet STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gå till spriteobjekt @@ -3496,6 +3499,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Tidigare STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Fortsätt till föregående normala spriteobjekt, ignorera eventuella pseudo/recolour/font spriteobjekt och börja om från slutet efter första spriteobjektet STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation av det valda objektet. Justeringen ignoreras när objektet ritas. STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Flytta runt objektet och ändra förskjutningen i X- och Y-led. Ctrl+klicka för att flytta runt objektet åtta steg i taget +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Förskjutningscentrerad @@ -3530,7 +3534,7 @@ STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF-filen den v STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :För många NewGRFer är laddade STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Att ladda {1:STRING} som statisk NewGRF med {2:STRING} kan orsaka desynkronisering STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Oväntat spriteobjekt (spriteobjekt {3:NUM}) -STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Okänd Action 0-egenskap {4:HEX} (spriteobjekt {3:NUM}) +STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Okänd Åtgärd 0-egenskap {4:HEX} (spriteobjekt {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Försök att använda ett ogiltligt ID (spriteobjekt {3:NUM}) STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} innehåller ett skadat spriteobjekt. Alla korrupta spriteobjekt kommer att visas som röda frågetecken (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Innehåller flera Action 8 (spriteobjekt {3:NUM}) @@ -5832,6 +5836,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} From 003906becb03a2da582930f9b24d61c406221885 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 12 Apr 2024 12:51:42 +0100 Subject: [PATCH 298/695] Codechange: std::filesystem::rename does not need remove first. (#12484) --- src/strgen/strgen.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index 8acb4dfbe5..63f5c02b4d 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -274,9 +274,6 @@ struct HeaderFileWriter : HeaderWriter, FileWriter { std::filesystem::remove(this->path, error_code); // Just ignore the error } else { /* else rename tmp.xxx into filename */ -# if defined(_WIN32) - std::filesystem::remove(this->real_path, error_code); // Just ignore the error, file probably doesn't exist -# endif std::filesystem::rename(this->path, this->real_path, error_code); if (error_code) FatalError("rename({}, {}) failed: {}", this->path, this->real_path, error_code.message()); } From 44b821003783c14372fb3e52e6463130d03dc63b Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 12 Apr 2024 13:01:16 +0100 Subject: [PATCH 299/695] Codechange: settingsgen's CopyFile actually appends. (#12485) --- src/settingsgen/settingsgen.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index 9a55d0d170..4b265276bb 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -322,11 +322,11 @@ static void DumpSections(const IniLoadFile &ifile) } /** - * Copy a file to the output. - * @param fname Filename of file to copy. + * Append a file to the output stream. + * @param fname Filename of file to append. * @param out_fp Output stream to write to. */ -static void CopyFile(const char *fname, FILE *out_fp) +static void AppendFile(const char *fname, FILE *out_fp) { if (fname == nullptr) return; @@ -476,10 +476,10 @@ int CDECL main(int argc, char *argv[]) /* Write output. */ if (output_file == nullptr) { - CopyFile(before_file, stdout); + AppendFile(before_file, stdout); _stored_output.Write(stdout); _post_amble_output.Write(stdout); - CopyFile(after_file, stdout); + AppendFile(after_file, stdout); } else { static const char * const tmp_output = "tmp2.xxx"; @@ -487,10 +487,10 @@ int CDECL main(int argc, char *argv[]) if (fp == nullptr) { FatalError("Cannot open file {}", tmp_output); } - CopyFile(before_file, fp); + AppendFile(before_file, fp); _stored_output.Write(fp); _post_amble_output.Write(fp); - CopyFile(after_file, fp); + AppendFile(after_file, fp); fclose(fp); if (CompareFiles(tmp_output, output_file)) { From ca73f033344a67a915985b5d232d3abdcdbdc99e Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 12 Apr 2024 14:32:35 +0100 Subject: [PATCH 300/695] Codechange: Use std::filesystem::remove/rename in settingsgen. (#12483) --- src/settingsgen/settingsgen.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index 4b265276bb..e2b0362b90 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -15,10 +15,7 @@ #include "../core/mem_func.hpp" #include "../error_func.h" -#if !defined(_WIN32) || defined(__CYGWIN__) -#include -#include -#endif +#include #include "../safeguards.h" @@ -493,15 +490,14 @@ int CDECL main(int argc, char *argv[]) AppendFile(after_file, fp); fclose(fp); + std::error_code error_code; if (CompareFiles(tmp_output, output_file)) { /* Files are equal. tmp2.xxx is not needed. */ - unlink(tmp_output); + std::filesystem::remove(tmp_output, error_code); } else { /* Rename tmp2.xxx to output file. */ -#if defined(_WIN32) - unlink(output_file); -#endif - if (rename(tmp_output, output_file) == -1) FatalError("rename() failed"); + std::filesystem::rename(tmp_output, output_file, error_code); + if (error_code) FatalError("rename({}, {}) failed: {}", tmp_output, output_file, error_code.message()); } } return 0; From c1520cf6828e5a265825ecdade6d48645a4352f9 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 12 Apr 2024 18:01:40 +0100 Subject: [PATCH 301/695] Fix 25aeb1c: Driver parameter documentation was not updated. (#12486) --- src/sound/win32_s.h | 2 +- src/sound/xaudio2_s.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sound/win32_s.h b/src/sound/win32_s.h index 5801f8af41..c89e8596d4 100644 --- a/src/sound/win32_s.h +++ b/src/sound/win32_s.h @@ -24,7 +24,7 @@ public: /** Factory for the sound driver for Windows. */ class FSoundDriver_Win32 : public DriverFactoryBase { public: - FSoundDriver_Win32() : DriverFactoryBase(Driver::DT_SOUND, 9, "win32", "Win32 WaveOut Sound Driver (param bufsize,hz)") {} + FSoundDriver_Win32() : DriverFactoryBase(Driver::DT_SOUND, 9, "win32", "Win32 WaveOut Sound Driver (param hz,samples)") {} Driver *CreateInstance() const override { return new SoundDriver_Win32(); } }; diff --git a/src/sound/xaudio2_s.h b/src/sound/xaudio2_s.h index 17ec81f311..b4e2591fb4 100644 --- a/src/sound/xaudio2_s.h +++ b/src/sound/xaudio2_s.h @@ -24,7 +24,7 @@ public: /** Factory for the XAudio2 sound driver. */ class FSoundDriver_XAudio2 : public DriverFactoryBase { public: - FSoundDriver_XAudio2() : DriverFactoryBase(Driver::DT_SOUND, 10, "xaudio2", "XAudio2 Sound Driver (param bufsize,hz)") {} + FSoundDriver_XAudio2() : DriverFactoryBase(Driver::DT_SOUND, 10, "xaudio2", "XAudio2 Sound Driver (param hz,samples)") {} Driver *CreateInstance() const override { return new SoundDriver_XAudio2(); } }; From 12125bad826b534e1a2f46cb76be9f2a2f7ceb58 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 12 Apr 2024 23:07:07 +0100 Subject: [PATCH 302/695] Fix 3de8853e: Industry cargo types callback no longer functioned due to container change. (#12489) Use defined INDUSTRY_NUM_INPUTS/INDUSTRY_NUM_OUTPUTS values instead of container size, which is now empty at this point. --- src/industry_cmd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index fbb056c162..1382d86556 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1876,7 +1876,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, /* Clear all input cargo types */ i->accepted.clear(); /* Query actual types */ - uint maxcargoes = (indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED) ? static_cast(i->accepted.size()) : 3; + uint maxcargoes = (indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED) ? INDUSTRY_NUM_INPUTS : 3; for (uint j = 0; j < maxcargoes; j++) { uint16_t res = GetIndustryCallback(CBID_INDUSTRY_INPUT_CARGO_TYPES, j, 0, i, type, INVALID_TILE); if (res == CALLBACK_FAILED || GB(res, 0, 8) == UINT8_MAX) break; @@ -1914,7 +1914,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, /* Clear all output cargo types */ i->produced.clear(); /* Query actual types */ - uint maxcargoes = (indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED) ? static_cast(i->produced.size()) : 2; + uint maxcargoes = (indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED) ? INDUSTRY_NUM_OUTPUTS : 2; for (uint j = 0; j < maxcargoes; j++) { uint16_t res = GetIndustryCallback(CBID_INDUSTRY_OUTPUT_CARGO_TYPES, j, 0, i, type, INVALID_TILE); if (res == CALLBACK_FAILED || GB(res, 0, 8) == UINT8_MAX) break; From e83e2df02315dd82a5c0a5f6e5e5fecd6a17ee13 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 12 Apr 2024 23:07:31 +0100 Subject: [PATCH 303/695] Fix: Build industry window did not take width of count into account. (#12476) --- src/industry_gui.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 211bcf7e69..8633c1e82c 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -429,12 +429,14 @@ public: { switch (widget) { case WID_DPI_MATRIX_WIDGET: { - Dimension d = GetStringBoundingBox(STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES); + SetDParamMaxDigits(0, 4); + Dimension count = GetStringBoundingBox(STR_JUST_COMMA, FS_SMALL); + Dimension d{}; for (const auto &indtype : this->list) { d = maxdim(d, GetStringBoundingBox(GetIndustrySpec(indtype)->name)); } - resize.height = std::max(this->legend.height, GetCharacterHeight(FS_NORMAL)) + padding.height; - d.width += this->legend.width + WidgetDimensions::scaled.hsep_wide + padding.width; + resize.height = std::max({this->legend.height, d.height, count.height}) + padding.height; + d.width += this->legend.width + WidgetDimensions::scaled.hsep_wide + WidgetDimensions::scaled.hsep_normal + count.width + padding.width; d.height = 5 * resize.height; size = maxdim(size, d); break; From 090c3b3abfb44094ee82ce3b68fa8b9fb0dfc8e1 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 13 Apr 2024 04:40:27 +0000 Subject: [PATCH 304/695] Update: Translations from eints danish: 5 changes by bscargo dutch: 5 changes by Afoklala portuguese (brazilian): 7 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 14 +++++++------- src/lang/danish.txt | 5 +++++ src/lang/dutch.txt | 5 +++++ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index f954b9743f..c17442f143 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -2170,7 +2170,7 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Falha ao # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Erro nas configurações de vídeo... STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... nenhuma GPU compatível encontrada. Aceleração por hardware desativada -STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... controlador gráfico (GPU) travou o jogo. Aceleração por hardware desativada +STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... controlador gráfico travou o jogo. Aceleração por hardware desativada # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -3661,7 +3661,7 @@ STR_LOCAL_AUTHORITY_ACTION_MEDIUM_ADVERTISING_CAMPAIGN :Campanha public STR_LOCAL_AUTHORITY_ACTION_LARGE_ADVERTISING_CAMPAIGN :Campanha publicitária grande STR_LOCAL_AUTHORITY_ACTION_ROAD_RECONSTRUCTION :Financiar a reconstrução das estradas locais STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :Construir estátua do proprietário da empresa -STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Financiar novos edifícios +STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Financiar novas construções STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Comprar direitos exclusivos de transporte STR_LOCAL_AUTHORITY_ACTION_BRIBE :Subornar a autoridade local ###next-name-looks-similar @@ -4013,7 +4013,7 @@ STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Enviar para um STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Clique para parar todos os veículos desta lista STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Clique para iniciar todos os veículos desta lista -STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Ver a lista de modelos disponíveis para esta classe de veículo +STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Ver lista de modelos disponíveis para esta classe de veículo STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}Ordens compartilhadas de {COMMA} Veículo{P "" s} @@ -4261,11 +4261,11 @@ STR_ENGINE_PREVIEW_CAPTION :{WHITE}Mensagem STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Desenvolvemos um novo modelo de {STRING} - você gostaria de ter um ano de uso exclusivo deste veículo, para que possamos avaliar o desempenho dele antes de ser globalmente disponibilizado? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :{G=f}locomotiva ferroviária -STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :{G=f}locomotiva ferroviária elétrica +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :{G=f}locomotiva elétrica STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :{G=f}locomotiva monotrilho STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :{G=f}locomotiva maglev -STR_ENGINE_PREVIEW_ROAD_VEHICLE :{G=m}veículo rodoviário +STR_ENGINE_PREVIEW_ROAD_VEHICLE :{G=m}veículo STR_ENGINE_PREVIEW_TRAM_VEHICLE :{G=m}bonde STR_ENGINE_PREVIEW_AIRCRAFT :{G=f}aeronave @@ -4746,7 +4746,7 @@ STR_TIMETABLE_CLEAR_SPEED :{BLACK}Remover STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Apagar a velocidade máxima de viagem da ordem selecionada. Ctrl+Clique para apagar a velocidade de todas as ordens STR_TIMETABLE_RESET_LATENESS :{BLACK}Reiniciar Contador de Atrasos -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reiniciar o contador de atrasos para o veículo ficar pontual. Ctrl+Clique para reiniciar todo o grupo e, com isso, fazer o veículo mais atrasado ficar no horário e todos os outros ficarem adiantados +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reiniciar o contador de atrasos para o veículo ficar pontual. Ctrl+Clique para reiniciar todo o grupo e, com isso, fazer o veículo mais atrasado ficar pontual e todos os outros ficarem adiantados STR_TIMETABLE_AUTOFILL :{BLACK}Preencher automaticamente STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Preencher o horário automaticamente com os valores da próxima viagem. Ctrl+Clique para tentar manter os tempos de espera @@ -4921,7 +4921,7 @@ STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Geraçã STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... não existem localidades neste cenário STR_ERROR_PNGMAP :{WHITE}Não foi possível carregar paisagem de PNG... -STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... arquivo não encontrado +STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... arquivo não foi encontrado STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... não foi possível converter o tipo de imagem. A imagem deve ser PNG de 8 ou 24-bit STR_ERROR_PNGMAP_MISC :{WHITE}... alguma coisa deu errado (provavelmente arquivo corrompido) diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 5856ec9c12..d0a9398d6b 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -3488,6 +3488,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Vej type STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variabel 60+x parameter (hexadecimal) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Justering af sprite: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Justering af sprite: Handling 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Justering af sprite: Handling 0x5, type {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Næste sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Fortsæt til næste normale sprite, spring pseudo/omfarvning/font-sprites over og med omløb fra enden til starten STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gå til sprite @@ -3496,6 +3499,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Forrige STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Fortsæt til den forrige normal sprite, spring pseudo/omfarvning/font-sprites over og omløb fra starten til slutningen STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Repræsentation af den markerede sprite. Justeringen ignoreres når denne sprite tegnes. STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Flyt spriten rundt for at ændre X- og Y-forskydningen. Ctrl+Klik for at flytte spriten otte enheder af gangen +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Forskudt centreret @@ -5832,6 +5836,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 2ef0e067ea..25fb25b497 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -3488,6 +3488,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Wegtype STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parameter 60+x voor NewGRF-variabele (hexadecimaal) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Sprite uitlijnen: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Sprite uitlijnen: actie 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Sprite uitlijnen: actie 0x5, type {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Volgende sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Doorgaan met volgende normale sprite, alle pseudo-/herkleur-/lettertype-sprites overslaan; bij het einde terug naar het begin STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ga naar sprite @@ -3496,6 +3499,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Vorige s STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Doorgaan met de vorige normale sprite, alle pseudo-/herkleur-/lettertype-sprites overslaan; bij het einde terug naar het begin STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Voorbeeld van de huidige sprite. De uitlijning wordt genegeerd bij het weergeven van deze sprite. STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Sprite verplaatsen, dit verandert X en Y offsets. Ctr+klik om de sprite 8 eenheden per keer te verplaatsen. +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Op offset gecentreerd @@ -5832,6 +5836,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} From 29e932e087b1c520ed5dcb91036b67d64f586a2e Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 14 Apr 2024 05:02:47 +0000 Subject: [PATCH 305/695] Update: Translations from eints ukrainian: 13 changes by imlystyi lithuanian: 19 changes by dziugas1959 french: 7 changes by ottdfevr portuguese (brazilian): 14 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 28 ++++++++++++++-------------- src/lang/french.txt | 7 +++++++ src/lang/lithuanian.txt | 22 +++++++++++++++++++--- src/lang/ukrainian.txt | 26 +++++++++++++------------- 4 files changed, 53 insertions(+), 30 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index c17442f143..bdf6cfa9ed 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -278,7 +278,7 @@ STR_TOOLTIP_SORT_CRITERIA :{BLACK}Escolher STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Escolher o critério de seleção STR_BUTTON_SORT_BY :{BLACK}Ordenar por STR_BUTTON_CATCHMENT :{BLACK}Cobertura -STR_TOOLTIP_CATCHMENT :{BLACK}Mostrar/Ocultar área de cobertura +STR_TOOLTIP_CATCHMENT :{BLACK}Mostrar área de cobertura STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Fechar janela STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Título da janela - arraste isto para mover a janela @@ -792,7 +792,7 @@ STR_SMALLMAP_LEGENDA_INDUSTRIES :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLACK}Deserto STR_SMALLMAP_LEGENDA_SNOW :{TINY_FONT}{BLACK}Neve -STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Mostrar/Ocultar nomes das localidades no mapa +STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Mostrar nomes das localidades no mapa STR_SMALLMAP_CENTER :{BLACK}Centralizar o minimapa na localização atual STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STRING} ({NUM}) STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} @@ -803,7 +803,7 @@ STR_SMALLMAP_ENABLE_ALL :{BLACK}Ativar t STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Mostrar altitudes STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Não mostrar indústrias no mapa STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Mostrar todas as indústrias no mapa -STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Mostrar/Ocultar mapa de altitudes +STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Mostrar mapa de altitudes STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Mostrar no mapa as propriedades que não pertencem às empresas STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Mostrar no mapa as propriedades de todas as empresas STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Não mostrar as cargas no mapa @@ -2731,15 +2731,15 @@ STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Sair do # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Opções de Transparência -STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Ativar/Desativar transparência para placas. Ctrl+Clique para travar -STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Ativar/Desativar transparência para árvores. Ctrl+Clique para travar -STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Ativar/Desativar transparência para casas. Ctrl+Clique para travar -STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Ativar/Desativar transparência para indústrias. Ctrl+Clique para travar -STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Ativar/Desativar transparência para construções como estações, depósitos e pontos de controle. Ctrl+Clique para travar -STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Ativar/Desativar transparência para pontes. Ctrl+Clique para travar -STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Ativar/Desativar transparência para estruturas como faróis e antenas. Ctrl+Clique para travar -STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Ativar/Desativar transparência para catenária. Ctrl+Clique para travar -STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Ativar/Desativar transparência para textos de carregamento e custo/receita. Ctrl+Clique para travar +STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Ativar transparência para placas. Ctrl+Clique para travar +STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Ativar transparência para árvores. Ctrl+Clique para travar +STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Ativar transparência para casas. Ctrl+Clique para travar +STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Ativar transparência para indústrias. Ctrl+Clique para travar +STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Ativar transparência para construções como estações, depósitos e pontos de controle. Ctrl+Clique para travar +STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Ativar transparência para pontes. Ctrl+Clique para travar +STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Ativar transparência para estruturas como faróis e antenas. Ctrl+Clique para travar +STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Ativar transparência para catenária. Ctrl+Clique para travar +STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Ativar transparência para textos de carregamento e custo/receita. Ctrl+Clique para travar STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Definir objetos como invisíveis ao invés de transparentes # Linkgraph legend window @@ -4529,7 +4529,7 @@ STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Adaptar # Order view STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (Ordens) STR_ORDERS_TIMETABLE_VIEW :{BLACK}Horários -STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Mudar para a visualização de horários +STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Mudar para visualização de horários STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de ordens - clique numa ordem para selecioná-la. Ctrl+Clique para mostrar o destino da ordem STR_ORDER_INDEX :{COMMA}:{NBSP} @@ -4701,7 +4701,7 @@ STR_INVALID_ORDER :{RED} (Ordem In # Time table window STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Horários) STR_TIMETABLE_ORDER_VIEW :{BLACK}Ordens -STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Mudar para a visualização de ordens +STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Mudar para visualização de ordens STR_TIMETABLE_TOOLTIP :{BLACK}Horários - clique numa ordem para selecioná-la diff --git a/src/lang/french.txt b/src/lang/french.txt index adf9f97a72..383c102faf 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -3489,6 +3489,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Type de route STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Paramètre de variable NewGRF 60+x (héxadecimal) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Alignement de sprite : ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Alignement de sprite : Action 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Alignement de sprite : Action 0x5, type {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sprite suivant STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Se rendre au prochain sprite normal, en ignorant les pseudo-sprites et les sprites de recoloration et de police, et en bouclant du dernier vers le premier STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Aller au sprite @@ -3497,6 +3500,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Sprite p STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Se rendre au précédent sprite normal, en ignorant les pseudo-sprites et les sprites de recoloration et de police, et en bouclant du premier vers le dernier STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation du sprite actuellement séléctionné. L'alignement est ignoré lors de l'affichage de ce sprite STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Déplacer le sprite, en modifiant les décalages X et Y. Ctrl-clic pour déplacer le sprite de 8 unités à la fois. +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Décalage centré @@ -4899,7 +4903,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Revenu e STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Sauvegarde en cours...{}Veuillez attendre la fin du processus{NBSP}! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Échec de l'enregistrement automatique STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Impossible d'accéder au disque +STR_ERROR_GAME_SAVE_FAILED :{WHITE}La sauvegarde a échoué... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Impossible de supprimer le fichier +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Le chargement a échoué... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erreur interne{NBSP}: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Sauvegarde corrompue − {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Sauvegarde modifiée avec une version plus récente @@ -5831,6 +5837,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 1ef30e27f1..578359c1bb 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -692,7 +692,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Pašalinti visa STR_ABOUT_MENU_LAND_BLOCK_INFO :Žemės ploto informacija STR_ABOUT_MENU_HELP :Pagalba ir gidai STR_ABOUT_MENU_TOGGLE_CONSOLE :Perjungti konsolę -STR_ABOUT_MENU_AI_DEBUG :AI / GameScript derinimas +STR_ABOUT_MENU_AI_DEBUG :DI / „GameScript“ derinimas STR_ABOUT_MENU_SCREENSHOT :Ekrano nuotrauka STR_ABOUT_MENU_SHOW_FRAMERATE :Kadrų dažniai STR_ABOUT_MENU_ABOUT_OPENTTD :Apie „OpenTTD“ @@ -1095,7 +1095,13 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Įkelti STR_GAME_OPTIONS_CAPTION :{WHITE}Pagrindinės nuostatos +STR_GAME_OPTIONS_VOLUME :Tūris +STR_GAME_OPTIONS_VOLUME_0 :0% +STR_GAME_OPTIONS_VOLUME_25 :25% +STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valiuta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valiutos pasirinkimas @@ -1151,6 +1157,10 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Pasirink # Autosave dropdown ###length 5 STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Išjungta +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_10_MINUTES :Kas 10min. +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_30_MINUTES :Kas 30min. +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES :Kas 60min. +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :Kas 120min. STR_GAME_OPTIONS_LANGUAGE :{BLACK}Kalba STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Pasirinkite aplinkos kalbą @@ -1789,6 +1799,7 @@ STR_CONFIG_SETTING_LOADING_INDICATORS :Rodyti krovos i STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Krovos indikatoriai rodomi virš pakraunamų bei iškraunamų tansporto priemonių ###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Dienos STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Rodyti arvykimą ir išvykimą tvarkaraščiuose: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Tvarkaraščiuose rodyti numatomas atvykimo ir išvykimo datas @@ -2302,10 +2313,12 @@ STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Rodyti a STR_LIVERY_SHIP_TOOLTIP :{BLACK}Rodyti laivų spalvas STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Rodyti lėktuvų spalvas STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Rodyti traukinių grupių spalvas +STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Rodyti laivų grupių spalvas STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Pasirinkite pirminę spalvą pasirinktai schemai. Spustelėjus laikant nuspaustą Ctrl klavišą, pasirinkta spava bus nustatyta visoms schemoms. STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Pasirinkite antrinę spalvą pasirinktai schemai. Spustelėjus laikant nuspaustą Ctrl klavišą, pasirinkta spava bus nustatyta visoms schemoms. STR_LIVERY_PANEL_TOOLTIP :{BLACK}Pasirinkite objektą, kurio spalvas norite pakeisti. Spragsint laikant nuspaustą Ctrl klavišą, galėsite pasirinkti iškart kelis objektus. STR_LIVERY_TRAIN_GROUP_EMPTY :Nėra nustatytų traukinių grupių +STR_LIVERY_SHIP_GROUP_EMPTY :Nėra nustatytų laivų grupių ###length 23 STR_LIVERY_DEFAULT :Numatytosios spalvos @@ -3290,6 +3303,7 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Sumažin STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Vietovės tipas: STR_MAPGEN_SEA_LEVEL :{BLACK}Jūros lygis: +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Pasirinkti jūros lygį STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Upių kiekis: STR_MAPGEN_SMOOTHNESS :{BLACK}Jautrumas: STR_MAPGEN_VARIETY :{BLACK}Įvairovės paskirstymas: @@ -4700,7 +4714,7 @@ STR_DATE_YEAR_TOOLTIP :{BLACK}Pasirink # AI debug window -STR_AI_DEBUG :{WHITE}DI / GameScript derinimas +STR_AI_DEBUG :{WHITE}DI / „GameScript“ derinimas STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM}) STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Skripto pavadinimas STR_AI_DEBUG_SETTINGS :{BLACK}Nustatymai @@ -4721,9 +4735,10 @@ STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Patikrin STR_ERROR_AI_NO_AI_FOUND :Nerasta jokio tinkamo DI.{}Šis DI yra netikras ir nieko nedarys.{}Galite parsisiųsti keletą DI per 'Turinio internete' sistemą. STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Vienas iš paleistų skriptų išsijungė. Praneškite apie tai šio skripto autoriui su skripto debug lango vaizdu -STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}DI / GameScript derinimo langas yra pasiekiamas tik iš serverio +STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}DI / „GameScript“ derinimo langas yra pasiekiamas tik iš serverio # AI configuration window +STR_AI_CONFIG_CAPTION_AI :{WHITE}DI nustatymai STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Žaidimo skriptas bus įkeltas sekančiame žaidime STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}DI'ai bus įkelti sekančiame žaidime STR_AI_CONFIG_HUMAN_PLAYER :Žaidėjas Žmogus @@ -4770,6 +4785,7 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Teminio STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Mini žemėlapio kopija # Script Parameters +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametrai STR_AI_SETTINGS_CAPTION_AI :DI STR_AI_SETTINGS_CLOSE :{BLACK}Uždaryti STR_AI_SETTINGS_RESET :{BLACK}Atstatyti diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index b293437ddd..7eadb93497 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1126,7 +1126,7 @@ STR_GAME_OPTIONS_CURRENCY_NLG :Нідерла STR_GAME_OPTIONS_CURRENCY_NOK :Норвезька крона STR_GAME_OPTIONS_CURRENCY_PLN :Польський злотий STR_GAME_OPTIONS_CURRENCY_RON :Румунський лей -STR_GAME_OPTIONS_CURRENCY_RUR :Російський рубель +STR_GAME_OPTIONS_CURRENCY_RUR :Російський рубль STR_GAME_OPTIONS_CURRENCY_SIT :Словенський талер STR_GAME_OPTIONS_CURRENCY_SEK :Шведська крона STR_GAME_OPTIONS_CURRENCY_TRY :Турецька ліра @@ -1139,7 +1139,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Південн STR_GAME_OPTIONS_CURRENCY_CUSTOM :Власна... STR_GAME_OPTIONS_CURRENCY_GEL :Грузинські ларі STR_GAME_OPTIONS_CURRENCY_IRR :Іранський ріал -STR_GAME_OPTIONS_CURRENCY_RUB :Російський новий рубель +STR_GAME_OPTIONS_CURRENCY_RUB :Російський новий рубль STR_GAME_OPTIONS_CURRENCY_MXN :Мексиканське песо STR_GAME_OPTIONS_CURRENCY_NTD :Новий тайваньський долар STR_GAME_OPTIONS_CURRENCY_CNY :Китайські ренміні @@ -1155,7 +1155,7 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Вибе # Autosave dropdown ###length 5 -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :вимкнено +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Вимкнено STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_10_MINUTES :Кожні 10 хвилин STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_30_MINUTES :Кожні 30 хвилин STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES :Кожні 60 хвилин @@ -1166,7 +1166,7 @@ STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Вибе STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% виконано) STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Повноекранний режим -STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Натисніть цю кнопку, щоби грати в OpenTTD у повноекранному режимі +STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Позначте цей прапорець для використання повноекранного режиму STR_GAME_OPTIONS_RESOLUTION :{BLACK}Роздільна здатність екрана STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Виберіть, яку роздільну здатність екрана використовувати @@ -1174,7 +1174,7 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :інша STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Апаратне прискорення -STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Увімкнутий прапорець дозволить використання грою прискорення апаратного забезпечення. Налаштування запрацює тільки після перезапуску гри +STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Позначте цей прапорець для використання апаратного прискорення. Зміни застосуються тільки після перезапуску гри STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Налаштування запрацює тільки після перезапуску гри STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}Вертикальна синхронізація @@ -1183,17 +1183,17 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Позн STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Використовуваний драйвер: {STRING} STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Розмір інтерфейсу -STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Перетягніть повзунок для встановлення розміру інтерфейсу. Ctrl+протягування для точнішого перетягування +STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Потягніть повзунок для зміни розміру інтерфейсу. Ctrl+протягування для точнішого коригування STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Визначати розмір автоматично STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Позначте цей прапорець для того, щоби визначати розмір інтерфейсу автоматично -STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Межі шкали -STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :BLACK}Увімкнутий прапорець дозволить змінити розмір інтерфейсу +STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Масштабування рельєфних елементів +STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Позначте цей прапорець для того, щоби масштабувати рельєфні елементи інтерфейсу -STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Використовувати шрифт звичайної роздільності -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Увімкніть прапорець для використання шрифтів незмінних розмірів +STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Використовувати стандартний растровий шрифт +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Позначте цей прапорець для використання стандартних растрових шрифтів фіксованого розміру STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Згладжування шрифтів -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Увімкніть прапорець для згладження шрифтів змінних розмірів +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Позначте цей прапорець для того, щоби згладжувати шрифти змінних розмірів STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1202,7 +1202,7 @@ STR_GAME_OPTIONS_GUI_SCALE_4X :4x STR_GAME_OPTIONS_GUI_SCALE_5X :5x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Автоматизований збір даних -STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Участь в автоматизованому зборі даних +STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Брати участь в автоматизованому зборі даних STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Якщо увімкнено, OpenTTD передаватиме зібрані дані при виході з гри STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}Про збір даних і приватність STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Відкриє переглядач з детальнішою інформацією про автоматичний збір даних @@ -2662,7 +2662,7 @@ STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Так, STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Так, більше не питати STR_NETWORK_ASK_SURVEY_CAPTION :Дозволити автоматизований збір даних? -STR_NETWORK_ASK_SURVEY_TEXT :Бажаєте долучитись до автоматичного збору даних?{}OpenTTD передаватиме дані при виході з гри.{}Це можна будь-коли змінити в "Налаштуваннях гри". +STR_NETWORK_ASK_SURVEY_TEXT :Бажаєте долучитися до автоматичного збору даних?{}OpenTTD передаватиме деякі дані при виході з гри.{}Це можна змінити в розділі "Налаштування гри" будь-коли. STR_NETWORK_ASK_SURVEY_PREVIEW :Попередній перегляд збору даних STR_NETWORK_ASK_SURVEY_LINK :Про збір даних і приватність STR_NETWORK_ASK_SURVEY_NO :Ні From 4eaeccdaeb81ad2c6067bf8cef3f04b8ed37e846 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 14 Apr 2024 23:43:50 +0100 Subject: [PATCH 306/695] Codechange: Introduce FioRemove() to remove files. (#12491) New function FioRemove() handles OTTD2FS conversion, and uses std::filesystem::remove instead of unlink, all in one location. --- src/console_cmds.cpp | 2 +- src/driver.cpp | 10 ++-------- src/fileio.cpp | 17 +++++++++++++++++ src/fileio_func.h | 1 + src/fios.cpp | 3 +-- src/network/network_content.cpp | 5 +++-- src/stdafx.h | 1 - 7 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 8ece62b2f8..1a7460ce43 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -523,7 +523,7 @@ DEF_CONSOLE_CMD(ConRemove) _console_file_list_savegame.ValidateFileList(); const FiosItem *item = _console_file_list_savegame.FindItem(file); if (item != nullptr) { - if (unlink(item->name.c_str()) != 0) { + if (!FioRemove(item->name)) { IConsolePrint(CC_ERROR, "Failed to delete '{}'.", item->name); } } else { diff --git a/src/driver.cpp b/src/driver.cpp index 630a974fd4..26815874a0 100644 --- a/src/driver.cpp +++ b/src/driver.cpp @@ -19,12 +19,6 @@ #include "fileio_func.h" #include -#ifdef _WIN32 -# include -#else -# include -#endif /* _WIN32 */ - #include "safeguards.h" std::string _ini_videodriver; ///< The video driver a stored in the configuration file. @@ -129,7 +123,7 @@ bool DriverFactoryBase::SelectDriverImpl(const std::string &name, Driver::Type t * hardware acceleration. */ auto filename = FioFindFullPath(BASE_DIR, HWACCELERATION_TEST_FILE); if (!filename.empty()) { - unlink(filename.c_str()); + FioRemove(filename); Debug(driver, 1, "Probing {} driver '{}' skipped due to earlier crash", GetDriverTypeName(type), d->name); @@ -216,7 +210,7 @@ void DriverFactoryBase::MarkVideoDriverOperational() * and as we are operational now, remove the hardware acceleration * test-file. */ auto filename = FioFindFullPath(BASE_DIR, HWACCELERATION_TEST_FILE); - if (!filename.empty()) unlink(filename.c_str()); + if (!filename.empty()) FioRemove(filename); } /** diff --git a/src/fileio.cpp b/src/fileio.cpp index e2c7281513..79f16392ab 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -368,6 +368,23 @@ void FioCreateDirectory(const std::string &name) #endif } +/** + * Remove a file. + * @param filename Filename to remove. + * @return true iff the file was removed. + */ +bool FioRemove(const std::string &filename) +{ + std::filesystem::path path = OTTD2FS(filename); + std::error_code error_code; + std::filesystem::remove(path, error_code); + if (error_code) { + Debug(misc, 0, "Removing {} failed: {}", filename, error_code.message()); + return false; + } + return true; +} + /** * Appends, if necessary, the path separator character to the end of the string. * It does not add the path separator to zero-sized strings. diff --git a/src/fileio_func.h b/src/fileio_func.h index 6f9bd65442..2a13a454d4 100644 --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -20,6 +20,7 @@ std::string FioFindFullPath(Subdirectory subdir, const std::string &filename); std::string FioGetDirectory(Searchpath sp, Subdirectory subdir); std::string FioFindDirectory(Subdirectory subdir); void FioCreateDirectory(const std::string &name); +bool FioRemove(const std::string &filename); const char *FiosGetScreenshotDir(); diff --git a/src/fios.cpp b/src/fios.cpp index ec1f3de3b2..c020560ecb 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -246,8 +246,7 @@ std::string FiosMakeHeightmapName(const char *name) */ bool FiosDelete(const char *name) { - std::string filename = FiosMakeSavegameName(name); - return unlink(filename.c_str()) == 0; + return FioRemove(FiosMakeSavegameName(name)); } typedef std::tuple FiosGetTypeAndNameProc(SaveLoadOperation fop, const std::string &filename, const std::string_view ext); diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 94f6362fde..27bd3ce730 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -13,6 +13,7 @@ #include "../game/game.hpp" #include "../window_func.h" #include "../error.h" +#include "../fileio_func.h" #include "../base_media_base.h" #include "../settings_type.h" #include "network_content.h" @@ -550,7 +551,7 @@ void ClientNetworkContentSocketHandler::AfterDownload() this->curFile = nullptr; if (GunzipFile(this->curInfo)) { - unlink(GetFullFilename(this->curInfo, true).c_str()); + FioRemove(GetFullFilename(this->curInfo, true)); Subdirectory sd = GetContentInfoSubDir(this->curInfo->type); if (sd == NO_DIRECTORY) NOT_REACHED(); @@ -562,7 +563,7 @@ void ClientNetworkContentSocketHandler::AfterDownload() if (this->curInfo->type == CONTENT_TYPE_BASE_MUSIC) { /* Music can't be in a tar. So extract the tar! */ ExtractTar(fname, BASESET_DIR); - unlink(fname.c_str()); + FioRemove(fname); } #ifdef __EMSCRIPTEN__ diff --git a/src/stdafx.h b/src/stdafx.h index 7f598de39e..3297c3eec2 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -169,7 +169,6 @@ # include # define fopen(file, mode) _wfopen(OTTD2FS(file).c_str(), _T(mode)) -# define unlink(file) _wunlink(OTTD2FS(file).c_str()) std::string FS2OTTD(const std::wstring &name); std::wstring OTTD2FS(const std::string &name); From 839f486074a0666bcba9c3be483fc1dd030abfae Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 14 Apr 2024 23:57:26 +0100 Subject: [PATCH 307/695] Codechange: Use directory_iterator to find language files. (#12495) This avoids using custom ttd_opendir, along with C-style string comparisons against file names. --- src/strings.cpp | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/src/strings.cpp b/src/strings.cpp index 7ee8497cd5..16f7f6e77c 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -2050,9 +2050,9 @@ const LanguageMetadata *GetLanguage(uint8_t newgrflangid) * @param hdr the place to write the header information to * @return true if and only if the language file is of a compatible version */ -static bool GetLanguageFileHeader(const char *file, LanguagePackHeader *hdr) +static bool GetLanguageFileHeader(const std::string &file, LanguagePackHeader *hdr) { - FILE *f = fopen(file, "rb"); + FILE *f = fopen(file.c_str(), "rb"); if (f == nullptr) return false; size_t read = fread(hdr, sizeof(*hdr), 1, f); @@ -2074,29 +2074,25 @@ static bool GetLanguageFileHeader(const char *file, LanguagePackHeader *hdr) */ static void FillLanguageList(const std::string &path) { - DIR *dir = ttd_opendir(path.c_str()); - if (dir != nullptr) { - struct dirent *dirent; - while ((dirent = readdir(dir)) != nullptr) { - std::string d_name = FS2OTTD(dirent->d_name); - const char *extension = strrchr(d_name.c_str(), '.'); + std::error_code error_code; + for (const auto &dir_entry : std::filesystem::directory_iterator(OTTD2FS(path), error_code)) { + if (!dir_entry.is_regular_file()) continue; + if (dir_entry.path().extension() != ".lng") continue; - /* Not a language file */ - if (extension == nullptr || strcmp(extension, ".lng") != 0) continue; + LanguageMetadata lmd; + lmd.file = FS2OTTD(dir_entry.path()); - LanguageMetadata lmd; - lmd.file = path + d_name; - - /* Check whether the file is of the correct version */ - if (!GetLanguageFileHeader(lmd.file.string().c_str(), &lmd)) { - Debug(misc, 3, "{} is not a valid language file", lmd.file); - } else if (GetLanguage(lmd.newgrflangid) != nullptr) { - Debug(misc, 3, "{}'s language ID is already known", lmd.file); - } else { - _languages.push_back(lmd); - } + /* Check whether the file is of the correct version */ + if (!GetLanguageFileHeader(lmd.file.string(), &lmd)) { + Debug(misc, 3, "{} is not a valid language file", lmd.file); + } else if (GetLanguage(lmd.newgrflangid) != nullptr) { + Debug(misc, 3, "{}'s language ID is already known", lmd.file); + } else { + _languages.push_back(lmd); } - closedir(dir); + } + if (error_code) { + Debug(misc, 9, "Unable to open directory {}: {}", path, error_code.message()); } } From cd108fd9e437946a88c89e33c10b06c14c86a043 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 15 Apr 2024 04:44:34 +0000 Subject: [PATCH 308/695] Update: Translations from eints greek: 10 changes by gh658804 --- src/lang/greek.txt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lang/greek.txt b/src/lang/greek.txt index dbd625b480..f14aadb289 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1293,7 +1293,7 @@ STR_TERRAIN_TYPE_CUSTOM :Προσαρμ STR_TERRAIN_TYPE_CUSTOM_VALUE :Προσαρμοσμένο ύψος ({NUM}) ###length 4 -STR_CITY_APPROVAL_LENIENT :Ήπειο +STR_CITY_APPROVAL_LENIENT :Ήπια STR_CITY_APPROVAL_TOLERANT :Υπομονετική STR_CITY_APPROVAL_HOSTILE :Εχθρική STR_CITY_APPROVAL_PERMISSIVE :Ανεκτική (χωρίς επίδραση σε ενέργειες της εταιρίας) @@ -1381,8 +1381,8 @@ STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Θέτει το STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Ταχύτητα οικοδόμησης: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Περιορίζει το ποσοστό των οικοδομήμσεων από τα ΑΙ -STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Καταρρεύσεις οχημάτων: {STRING} -STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Ελέγχει πόσο συχνά καταρρέουν τα ανεπαρκώς συντηρημένα οχήματα +STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Βλάβες οχημάτων: {STRING} +STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Ελέγχει πόσο συχνά τα ανεπαρκώς συντηρημένα οχήματα παθαίνουν βλάβες STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Πολλαπλασιαστής επιδότησης: {STRING} STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Θέστε πόσο ξεπληρώνεται για επιδοτημένες συνδέσεις @@ -1540,7 +1540,7 @@ STR_CONFIG_SETTING_PLANE_SPEED :Παράγον STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Ορίζεται η σχετική ταχύτητα των αεροπλάνων συγκριτικά με τους άλλους τύπους οχημάτων, ώστε να μειώνεται το ποσό του εισοδήματος από μεταφορές με αεροσκάφη STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} -STR_CONFIG_SETTING_PLANE_CRASHES :Αριθμός των αεροπορικών ατυχημάτων: {STRING} +STR_CONFIG_SETTING_PLANE_CRASHES :Αριθμός αεροπορικών ατυχημάτων: {STRING} STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Ορίστε την πιθανότητα συντριβής ενός τυχαίου αεροσκάφους.{}* Μεγάλα αεροσκάφη πάντα έχουν ένα ρίσκο συντριβής όταν προσγειώνονται σε μικρά αεροδρόμια. ###length 3 STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Κανένα* @@ -1669,10 +1669,10 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Ανωμαλία επιφάνειας (μόνο με TerraGenesis) : {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Επιλογή του σχήματος και του αριθμού των λόφων: Τα λεία τοπία έχουν λιγότερους, πιο πλατείς λόφους, ενώ τα τραχιά τοπία έχουν πολλούς και μικρούς λόφους ###length 4 -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Πολύ Απαλή -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Απαλή -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Ανώμαλη -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Πολύ Ανώμαλη +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Πολύ Λεία +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Λεία +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Τραχιά +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Πολύ Τραχιά STR_CONFIG_SETTING_VARIETY :Διανομή ποικιλομορφίας: {STRING} STR_CONFIG_SETTING_VARIETY_HELPTEXT :Επιλέξτε αν ο χάρτης περιέχει και βουνά και επίπεδες περιοχές. Όσο μεγαλύτερη είναι η ποικιλία, τόσο περισσότερες οι υψομετρικές διαφορές μεταξύ ορεινών και επίπεδων περιοχών @@ -1928,7 +1928,7 @@ STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Η ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Απενεργοποιημένο -STR_CONFIG_SETTING_NOSERVICE :Απενεργοποίηση επισκευών όταν οι καταρρεύσεις είναι απενεργοποιημένες: {STRING} +STR_CONFIG_SETTING_NOSERVICE :Απενεργοποίηση επισκευών όταν οι βλάβες είναι απενεργοποιημένες: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Όταν είναι ενεργοποιημένη, τα οχήματα δεν συντηρούνται όταν δεν είναι δυνατό να χαλάσουν STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Ποινή ταχύτητας φόρτωσης για τρένα που είναι μεγαλύτερα από τον σταθμό: {STRING} @@ -4541,7 +4541,7 @@ STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Κέρδ STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Φετινό κέρδος: {LTBLUE}{CURRENCY_LONG} (Περσινό: {CURRENCY_LONG}) {BLACK}Ελάχιστη απόδοση: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Κέρδος αυτή την περίοδο: {LTBLUE}{CURRENCY_LONG} (τελευταία περίοδο: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Κέρδος αυτή την περίοδο: {LTBLUE}{CURRENCY_LONG} (τελευταία περίοδο: {CURRENCY_LONG}) {BLACK}Ελάχ. απόδοση: {LTBLUE}{POWER_TO_WEIGHT} -STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Αξιοπιστία: {LTBLUE}{COMMA}% {BLACK}Καταρρεύσεις μετά από την τελευταία επισκευή: {LTBLUE}{COMMA} +STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Αξιοπιστία: {LTBLUE}{COMMA}% {BLACK}Βλάβες μετά από την τελευταία επισκευή: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Κατασκευή: {LTBLUE}{NUM}{BLACK} Αξία: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Χωρητικότητα: {LTBLUE}Τίποτα{STRING} From f5a50a874f5d074ddb0644eb4e8b5e9b029adf08 Mon Sep 17 00:00:00 2001 From: dP Date: Mon, 15 Apr 2024 17:40:50 +0700 Subject: [PATCH 309/695] Codechange: Update doxygen comment to reflect removed parameter (#12499) --- src/strings.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/strings.cpp b/src/strings.cpp index 16f7f6e77c..02c57d362b 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -388,7 +388,6 @@ static const char *GetDecimalSeparator() * Format a number into a string. * @param builder the string builder to write to * @param number the number to write down - * @param last the last element in the buffer * @param separator the thousands-separator to use */ static void FormatNumber(StringBuilder &builder, int64_t number, const char *separator) From a1b03ee69eaaa55eb9bf19c89dcb3cf1accf696a Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 15 Apr 2024 19:10:19 +0100 Subject: [PATCH 310/695] Codechange: Replace platform-specific calls with std::filesystem::last_write_time. (#12487) --- src/fios.cpp | 36 +++++++----------------------------- src/fios.h | 2 +- 2 files changed, 8 insertions(+), 30 deletions(-) diff --git a/src/fios.cpp b/src/fios.cpp index c020560ecb..91f622f058 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -21,10 +21,7 @@ #include "tar_type.h" #include #include - -#ifndef _WIN32 -# include -#endif /* _WIN32 */ +#include #include "table/strings.h" @@ -53,7 +50,7 @@ bool FiosItem::operator< (const FiosItem &other) const int r = false; if ((_savegame_sort_order & SORT_BY_NAME) == 0 && (*this).mtime != other.mtime) { - r = this->mtime - other.mtime; + r = ClampTo(this->mtime - other.mtime); } else { r = StrNaturalCompare((*this).title, other.title); } @@ -291,32 +288,13 @@ bool FiosFileScanner::AddFile(const std::string &filename, size_t, const std::st } FiosItem *fios = &file_list.emplace_back(); -#ifdef _WIN32 - // Retrieve the file modified date using GetFileTime rather than stat to work around an obscure MSVC bug that affects Windows XP - HANDLE fh = CreateFile(OTTD2FS(filename).c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr); - if (fh != INVALID_HANDLE_VALUE) { - FILETIME ft; - ULARGE_INTEGER ft_int64; - - if (GetFileTime(fh, nullptr, nullptr, &ft) != 0) { - ft_int64.HighPart = ft.dwHighDateTime; - ft_int64.LowPart = ft.dwLowDateTime; - - // Convert from hectonanoseconds since 01/01/1601 to seconds since 01/01/1970 - fios->mtime = ft_int64.QuadPart / 10000000ULL - 11644473600ULL; - } else { - fios->mtime = 0; - } - - CloseHandle(fh); -#else - struct stat sb; - if (stat(filename.c_str(), &sb) == 0) { - fios->mtime = sb.st_mtime; -#endif - } else { + std::error_code error_code; + auto write_time = std::filesystem::last_write_time(OTTD2FS(filename), error_code); + if (error_code) { fios->mtime = 0; + } else { + fios->mtime = std::chrono::duration_cast(write_time.time_since_epoch()).count(); } fios->type = type; diff --git a/src/fios.h b/src/fios.h index 0bfc9f7640..d44eb2f1ff 100644 --- a/src/fios.h +++ b/src/fios.h @@ -78,7 +78,7 @@ extern LoadCheckData _load_check_data; /** Deals with finding savegames */ struct FiosItem { FiosType type; - uint64_t mtime; + int64_t mtime; std::string title; std::string name; bool operator< (const FiosItem &other) const; From 727392e0b3e30a42c70a60841fa21352be859819 Mon Sep 17 00:00:00 2001 From: ladysadie <144490006+ladysadie@users.noreply.github.com> Date: Mon, 15 Apr 2024 12:44:33 -0700 Subject: [PATCH 311/695] Codechange: Remove per font AA settings. (#12413) OpenTTD will use the global AA font setting for all fonts from now on. --- src/console_cmds.cpp | 35 ++++++++-------------------- src/fontcache.cpp | 26 ++++----------------- src/fontcache.h | 6 ++--- src/fontcache/truetypefontcache.cpp | 4 ++-- src/gfx_layout_icu.cpp | 2 +- src/gfxinit.cpp | 2 +- src/table/settings/misc_settings.ini | 24 ------------------- 7 files changed, 20 insertions(+), 79 deletions(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 1a7460ce43..62a8e18c6d 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -2181,10 +2181,10 @@ DEF_CONSOLE_CMD(ConFont) IConsolePrint(CC_HELP, " Print out the fonts configuration."); IConsolePrint(CC_HELP, " The \"Currently active\" configuration is the one actually in effect (after interface scaling and replacing unavailable fonts)."); IConsolePrint(CC_HELP, " The \"Requested\" configuration is the one requested via console command or config file."); - IConsolePrint(CC_HELP, "Usage 'font [medium|small|large|mono] [] [] [aa|noaa]'."); + IConsolePrint(CC_HELP, "Usage 'font [medium|small|large|mono] [] []'."); IConsolePrint(CC_HELP, " Change the configuration for a font."); IConsolePrint(CC_HELP, " Omitting an argument will keep the current value."); - IConsolePrint(CC_HELP, " Set to \"\" for the default font. Note that and aa/noaa have no effect if the default font is in use, and fixed defaults are used instead."); + IConsolePrint(CC_HELP, " Set to \"\" for the default font. Note that has no effect if the default font is in use, and fixed defaults are used instead."); IConsolePrint(CC_HELP, " If the sprite font is enabled in Game Options, it is used instead of the default font."); IConsolePrint(CC_HELP, " The is automatically multiplied by the current interface scaling."); return true; @@ -2202,38 +2202,23 @@ DEF_CONSOLE_CMD(ConFont) FontCacheSubSetting *setting = GetFontCacheSubSetting(argfs); std::string font = setting->font; uint size = setting->size; - bool aa = setting->aa; - + uint v; uint8_t arg_index = 2; - /* We may encounter "aa" or "noaa" but it must be the last argument. */ - if (StrEqualsIgnoreCase(argv[arg_index], "aa") || StrEqualsIgnoreCase(argv[arg_index], "noaa")) { - aa = !StrStartsWithIgnoreCase(argv[arg_index++], "no"); - if (argc > arg_index) return false; - } else { - /* For we want a string. */ - uint v; - if (!GetArgumentInteger(&v, argv[arg_index])) { - font = argv[arg_index++]; - } + /* For we want a string. */ + + if (!GetArgumentInteger(&v, argv[arg_index])) { + font = argv[arg_index++]; } if (argc > arg_index) { /* For we want a number. */ - uint v; if (GetArgumentInteger(&v, argv[arg_index])) { size = v; arg_index++; } } - if (argc > arg_index) { - /* Last argument must be "aa" or "noaa". */ - if (!StrEqualsIgnoreCase(argv[arg_index], "aa") && !StrEqualsIgnoreCase(argv[arg_index], "noaa")) return false; - aa = !StrStartsWithIgnoreCase(argv[arg_index++], "no"); - if (argc > arg_index) return false; - } - - SetFont(argfs, font, size, aa); + SetFont(argfs, font, size); } for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) { @@ -2245,8 +2230,8 @@ DEF_CONSOLE_CMD(ConFont) fc = FontCache::Get(fs); } IConsolePrint(CC_DEFAULT, "{} font:", FontSizeToName(fs)); - IConsolePrint(CC_DEFAULT, "Currently active: \"{}\", size {}, {}", fc->GetFontName(), fc->GetFontSize(), GetFontAAState(fs) ? "aa" : "noaa"); - IConsolePrint(CC_DEFAULT, "Requested: \"{}\", size {}, {}", setting->font, setting->size, setting->aa ? "aa" : "noaa"); + IConsolePrint(CC_DEFAULT, "Currently active: \"{}\", size {}", fc->GetFontName(), fc->GetFontSize()); + IConsolePrint(CC_DEFAULT, "Requested: \"{}\", size {}", setting->font, setting->size); } return true; diff --git a/src/fontcache.cpp b/src/fontcache.cpp index 2a5772fc3b..1f01e9b327 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -91,15 +91,15 @@ int GetCharacterHeight(FontSize size) } /* Check if a glyph should be rendered with anti-aliasing. */ -bool GetFontAAState(FontSize size, bool check_blitter) +bool GetFontAAState() { /* AA is only supported for 32 bpp */ - if (check_blitter && BlitterFactory::GetCurrentBlitter()->GetScreenDepth() != 32) return false; + if (BlitterFactory::GetCurrentBlitter()->GetScreenDepth() != 32) return false; - return _fcsettings.global_aa || GetFontCacheSubSetting(size)->aa; + return _fcsettings.global_aa; } -void SetFont(FontSize fontsize, const std::string &font, uint size, bool aa) +void SetFont(FontSize fontsize, const std::string &font, uint size) { FontCacheSubSetting *setting = GetFontCacheSubSetting(fontsize); bool changed = false; @@ -114,11 +114,6 @@ void SetFont(FontSize fontsize, const std::string &font, uint size, bool aa) changed = true; } - if (setting->aa != aa) { - setting->aa = aa; - changed = true; - } - if (!changed) return; if (fontsize != FS_MONO) { @@ -233,19 +228,6 @@ void UninitFontCache() #endif /* WITH_FREETYPE */ } -/** - * Should any of the active fonts be anti-aliased? - * @return True if any of the loaded fonts want anti-aliased drawing. - */ -bool HasAntialiasedFonts() -{ - for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) { - if (!FontCache::Get(fs)->IsBuiltInFont() && GetFontAAState(fs, false)) return true; - } - - return false; -} - #if !defined(_WIN32) && !defined(__APPLE__) && !defined(WITH_FONTCONFIG) && !defined(WITH_COCOA) bool SetFallbackFont(FontCacheSettings *, const std::string &, int, MissingGlyphSearcher *) { return false; } diff --git a/src/fontcache.h b/src/fontcache.h index 9ba6055504..fee0e26f3e 100644 --- a/src/fontcache.h +++ b/src/fontcache.h @@ -207,7 +207,6 @@ inline bool GetDrawGlyphShadow(FontSize size) struct FontCacheSubSetting { std::string font; ///< The name of the font, or path to the font. uint size; ///< The (requested) size of the font. - bool aa; ///< Whether to do anti aliasing or not. const void *os_handle = nullptr; ///< Optional native OS font info. Only valid during font search. }; @@ -242,9 +241,8 @@ inline FontCacheSubSetting *GetFontCacheSubSetting(FontSize fs) void InitFontCache(bool monospace); void UninitFontCache(); -bool HasAntialiasedFonts(); -bool GetFontAAState(FontSize size, bool check_blitter = true); -void SetFont(FontSize fontsize, const std::string &font, uint size, bool aa); +bool GetFontAAState(); +void SetFont(FontSize fontsize, const std::string &font, uint size); #endif /* FONTCACHE_H */ diff --git a/src/fontcache/truetypefontcache.cpp b/src/fontcache/truetypefontcache.cpp index 196add775c..9e16c363c1 100644 --- a/src/fontcache/truetypefontcache.cpp +++ b/src/fontcache/truetypefontcache.cpp @@ -91,7 +91,7 @@ void TrueTypeFontCache::SetGlyphPtr(GlyphID key, const GlyphEntry *glyph, bool d bool TrueTypeFontCache::GetDrawGlyphShadow() { - return this->fs == FS_NORMAL && GetFontAAState(FS_NORMAL); + return this->fs == FS_NORMAL && GetFontAAState(); } uint TrueTypeFontCache::GetGlyphWidth(GlyphID key) @@ -162,7 +162,7 @@ const Sprite *TrueTypeFontCache::GetGlyph(GlyphID key) } } - return this->InternalGetGlyph(key, GetFontAAState(this->fs)); + return this->InternalGetGlyph(key, GetFontAAState()); } const void *TrueTypeFontCache::GetFontTable(uint32_t tag, size_t &length) diff --git a/src/gfx_layout_icu.cpp b/src/gfx_layout_icu.cpp index e0008f2fa5..de9dae6c91 100644 --- a/src/gfx_layout_icu.cpp +++ b/src/gfx_layout_icu.cpp @@ -151,7 +151,7 @@ void ICURun::Shape(UChar *buff, size_t buff_length) { auto hbfont = hb_ft_font_create_referenced(*(static_cast(font->fc->GetOSHandle()))); /* Match the flags with how we render the glyphs. */ - hb_ft_font_set_load_flags(hbfont, GetFontAAState(this->font->fc->GetSize()) ? FT_LOAD_TARGET_NORMAL : FT_LOAD_TARGET_MONO); + hb_ft_font_set_load_flags(hbfont, GetFontAAState() ? FT_LOAD_TARGET_NORMAL : FT_LOAD_TARGET_MONO); /* ICU buffer is in UTF-16. */ auto hbbuf = hb_buffer_create(); diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index 7971222ccf..62b69f2646 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -266,7 +266,7 @@ static bool SwitchNewGRFBlitter() if (c->palette & GRFP_BLT_32BPP) depth_wanted_by_grf = 32; } /* We need a 32bpp blitter for font anti-alias. */ - if (HasAntialiasedFonts()) depth_wanted_by_grf = 32; + if (GetFontAAState()) depth_wanted_by_grf = 32; /* Search the best blitter. */ static const struct { diff --git a/src/table/settings/misc_settings.ini b/src/table/settings/misc_settings.ini index 21fec3d5f3..e572d41773 100644 --- a/src/table/settings/misc_settings.ini +++ b/src/table/settings/misc_settings.ini @@ -237,30 +237,6 @@ def = 0 min = 0 max = 72 -[SDTG_BOOL] -ifdef = HAS_TRUETYPE_FONT -name = ""small_aa"" -var = _fcsettings.small.aa -def = false - -[SDTG_BOOL] -ifdef = HAS_TRUETYPE_FONT -name = ""medium_aa"" -var = _fcsettings.medium.aa -def = false - -[SDTG_BOOL] -ifdef = HAS_TRUETYPE_FONT -name = ""large_aa"" -var = _fcsettings.large.aa -def = false - -[SDTG_BOOL] -ifdef = HAS_TRUETYPE_FONT -name = ""mono_aa"" -var = _fcsettings.mono.aa -def = false - [SDTG_BOOL] ifdef = HAS_TRUETYPE_FONT name = ""global_aa"" From 672aa014d8e36ae3332621f1d8456a0f8f4a1d8d Mon Sep 17 00:00:00 2001 From: Koen Bussemaker Date: Mon, 15 Apr 2024 22:23:55 +0200 Subject: [PATCH 312/695] Doc: Updated Visual Studio, cpp standard and Cmake version --- COMPILING.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/COMPILING.md b/COMPILING.md index dfdcd4ead5..74e816253e 100644 --- a/COMPILING.md +++ b/COMPILING.md @@ -29,7 +29,7 @@ open most older savegames or use the content downloading system. ## Windows -You need Microsoft Visual Studio 2017 or more recent. +You need Microsoft Visual Studio 2022 or more recent. You can download the free Visual Studio Community Edition from Microsoft at https://visualstudio.microsoft.com/vs/community/. @@ -65,7 +65,7 @@ To install both the x64 (64bit) and x86 (32bit) variants (though only one is nec You can open the folder (as a CMake project). CMake will be detected, and you can compile from there. If libraries are installed but not found, you need to set VCPKG_TARGET_TRIPLET in CMake parameters. -For Visual Studio 2017 you also need to set CMAKE_TOOLCHAIN_FILE. +For Visual Studio 2022 you also need to set CMAKE_TOOLCHAIN_FILE. (Typical values are shown in the MSVC project file command line example) Alternatively, you can create a MSVC project file via CMake. For this @@ -75,7 +75,7 @@ that comes with vcpkg. After that, you can run something similar to this: ```powershell mkdir build cd build -cmake.exe .. -G"Visual Studio 16 2019" -DCMAKE_TOOLCHAIN_FILE="\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET="x64-windows-static" +cmake.exe .. -G"Visual Studio 17 2022" -DCMAKE_TOOLCHAIN_FILE="\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET="x64-windows-static" ``` Change `` to where you have installed vcpkg. After this @@ -83,7 +83,7 @@ in the build folder are MSVC project files. MSVC can rebuild the project files himself via the `ZERO_CHECK` project. ## All other platforms -Minimum required version of CMake is 3.9. +Minimum required version of CMake is 3.16. By default this produces a Debug build with assertations enabled. This is a far slower build than release builds. @@ -115,9 +115,9 @@ builds. ## Supported compilers -Every compiler that is supported by CMake and supports C++17, should be +Every compiler that is supported by CMake and supports C++20, should be able to compile OpenTTD. As the exact list of compilers changes constantly, -we refer to the compiler manual to see if it supports C++17, and to CMake +we refer to the compiler manual to see if it supports C++20, and to CMake to see if it supports your compiler. ## Compilation of base sets From 3ad143c43a7dce89060168a335557233471d7718 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 15 Apr 2024 23:07:36 +0100 Subject: [PATCH 313/695] Codechange: Use `x = y` instead of `x{y}` for value-type member initialisation. (#12501) This is easier to read and less likely to look like an array definition. --- src/bootstrap_gui.cpp | 8 ++++---- src/cargopacket.h | 18 +++++++++--------- src/cargotype.h | 8 ++++---- src/newgrf_storage.h | 2 +- src/station_base.h | 18 +++++++++--------- src/textfile_gui.h | 16 ++++++++-------- 6 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index e2e0e37004..3f19c7fae0 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -291,10 +291,10 @@ public: # include "video/video_driver.hpp" class BootstrapEmscripten : public ContentCallback { - bool downloading{false}; - uint total_files{0}; - uint total_bytes{0}; - uint downloaded_bytes{0}; + bool downloading = false; + uint total_files = 0; + uint total_bytes = 0; + uint downloaded_bytes = 0; public: BootstrapEmscripten() diff --git a/src/cargopacket.h b/src/cargopacket.h index 6498760822..07ae8911d9 100644 --- a/src/cargopacket.h +++ b/src/cargopacket.h @@ -45,23 +45,23 @@ private: int16_t y; }; - uint16_t count{0}; ///< The amount of cargo in this packet. - uint16_t periods_in_transit{0}; ///< Amount of cargo aging periods this packet has been in transit. + uint16_t count = 0; ///< The amount of cargo in this packet. + uint16_t periods_in_transit = 0; ///< Amount of cargo aging periods this packet has been in transit. - Money feeder_share{0}; ///< Value of feeder pickup to be paid for on delivery of cargo. + Money feeder_share = 0; ///< Value of feeder pickup to be paid for on delivery of cargo. - TileIndex source_xy{INVALID_TILE}; ///< The origin of the cargo. + TileIndex source_xy = INVALID_TILE; ///< The origin of the cargo. Vector travelled{0, 0}; ///< If cargo is in station: the vector from the unload tile to the source tile. If in vehicle: an intermediate value. - SourceID source_id{INVALID_SOURCE}; ///< Index of industry/town/HQ, INVALID_SOURCE if unknown/invalid. - SourceType source_type{SourceType::Industry}; ///< Type of \c source_id. + SourceID source_id = INVALID_SOURCE; ///< Index of industry/town/HQ, INVALID_SOURCE if unknown/invalid. + SourceType source_type = SourceType::Industry; ///< Type of \c source_id. #ifdef WITH_ASSERT - bool in_vehicle{false}; ///< NOSAVE: Whether this cargo is in a vehicle or not. + bool in_vehicle = false; ///< NOSAVE: Whether this cargo is in a vehicle or not. #endif /* WITH_ASSERT */ - StationID first_station{INVALID_STATION}; ///< The station where the cargo came from first. - StationID next_hop{INVALID_STATION}; ///< Station where the cargo wants to go next. + StationID first_station = INVALID_STATION; ///< The station where the cargo came from first. + StationID next_hop = INVALID_STATION; ///< Station where the cargo wants to go next. /** The CargoList caches, thus needs to know about it. */ template friend class CargoList; diff --git a/src/cargotype.h b/src/cargotype.h index 9314d34482..10aae014d2 100644 --- a/src/cargotype.h +++ b/src/cargotype.h @@ -67,19 +67,19 @@ static const uint TOWN_PRODUCTION_DIVISOR = 256; /** Specification of a cargo type. */ struct CargoSpec { CargoLabel label; ///< Unique label of the cargo type. - uint8_t bitnum{INVALID_CARGO_BITNUM}; ///< Cargo bit number, is #INVALID_CARGO_BITNUM for a non-used spec. + uint8_t bitnum = INVALID_CARGO_BITNUM; ///< Cargo bit number, is #INVALID_CARGO_BITNUM for a non-used spec. uint8_t legend_colour; uint8_t rating_colour; uint8_t weight; ///< Weight of a single unit of this cargo type in 1/16 ton (62.5 kg). - uint16_t multiplier{0x100}; ///< Capacity multiplier for vehicles. (8 fractional bits) + uint16_t multiplier = 0x100; ///< Capacity multiplier for vehicles. (8 fractional bits) uint16_t classes; ///< Classes of this cargo type. @see CargoClass int32_t initial_payment; ///< Initial payment rate before inflation is applied. uint8_t transit_periods[2]; bool is_freight; ///< Cargo type is considered to be freight (affects train freight multiplier). TownAcceptanceEffect town_acceptance_effect; ///< The effect that delivering this cargo type has on towns. Also affects destination of subsidies. - TownProductionEffect town_production_effect{INVALID_TPE}; ///< The effect on town cargo production. - uint16_t town_production_multiplier{TOWN_PRODUCTION_DIVISOR}; ///< Town production multipler, if commanded by TownProductionEffect. + TownProductionEffect town_production_effect = INVALID_TPE; ///< The effect on town cargo production. + uint16_t town_production_multiplier = TOWN_PRODUCTION_DIVISOR; ///< Town production multipler, if commanded by TownProductionEffect. uint8_t callback_mask; ///< Bitmask of cargo callbacks that have to be called StringID name; ///< Name of this type of cargo. diff --git a/src/newgrf_storage.h b/src/newgrf_storage.h index fe71caea1f..cad016d691 100644 --- a/src/newgrf_storage.h +++ b/src/newgrf_storage.h @@ -136,7 +136,7 @@ struct TemporaryStorageArray { StorageType storage{}; ///< Memory for the storage array StorageInitType init{}; ///< Storage has been assigned, if this equals 'init_key'. - uint16_t init_key{1}; ///< Magic key to 'init'. + uint16_t init_key = 1; ///< Magic key to 'init'. /** * Stores some value at a given position. diff --git a/src/station_base.h b/src/station_base.h index 17e2147e21..12ed87355a 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -210,20 +210,20 @@ struct GoodsEntry { StationCargoList cargo{}; ///< The cargo packets of cargo waiting in this station FlowStatMap flows{}; ///< Planned flows through this station. - uint max_waiting_cargo{0}; ///< Max cargo from this station waiting at any station. - NodeID node{INVALID_NODE}; ///< ID of node in link graph referring to this goods entry. - LinkGraphID link_graph{INVALID_LINK_GRAPH}; ///< Link graph this station belongs to. + uint max_waiting_cargo = 0; ///< Max cargo from this station waiting at any station. + NodeID node = INVALID_NODE; ///< ID of node in link graph referring to this goods entry. + LinkGraphID link_graph = INVALID_LINK_GRAPH; ///< Link graph this station belongs to. - uint8_t status{0}; ///< Status of this cargo, see #GoodsEntryStatus. + uint8_t status = 0; ///< Status of this cargo, see #GoodsEntryStatus. /** * Number of rating-intervals (up to 255) since the last vehicle tried to load this cargo. * The unit used is STATION_RATING_TICKS. * This does not imply there was any cargo to load. */ - uint8_t time_since_pickup{255}; + uint8_t time_since_pickup = 255; - uint8_t rating{INITIAL_STATION_RATING}; ///< %Station rating for this cargo. + uint8_t rating = INITIAL_STATION_RATING; ///< %Station rating for this cargo. /** * Maximum speed (up to 255) of the last vehicle that tried to load this cargo. @@ -234,15 +234,15 @@ struct GoodsEntry { * - Ships: 0.5 * km-ish/h * - Aircraft: 8 * mph */ - uint8_t last_speed{0}; + uint8_t last_speed = 0; /** * Age in years (up to 255) of the last vehicle that tried to load this cargo. * This does not imply there was any cargo to load. */ - uint8_t last_age{255}; + uint8_t last_age = 255; - uint8_t amount_fract{0}; ///< Fractional part of the amount in the cargo list + uint8_t amount_fract = 0; ///< Fractional part of the amount in the cargo list /** * Reports whether a vehicle has ever tried to load the cargo at this station. diff --git a/src/textfile_gui.h b/src/textfile_gui.h index 09d55a355d..ab365d42d5 100644 --- a/src/textfile_gui.h +++ b/src/textfile_gui.h @@ -44,10 +44,10 @@ protected: void ConstructWindow(); struct Line { - int top{0}; ///< Top scroll position in visual lines. - int bottom{0}; ///< Bottom scroll position in visual lines. - std::string text{}; ///< Contents of the line. - TextColour colour{TC_WHITE}; ///< Colour to render text line in. + int top = 0; ///< Top scroll position in visual lines. + int bottom = 0; ///< Bottom scroll position in visual lines. + std::string text{}; ///< Contents of the line. + TextColour colour = TC_WHITE; ///< Colour to render text line in. Line(int top, std::string_view text) : top(top), bottom(top + 1), text(text) {} Line() {} @@ -73,8 +73,8 @@ protected: std::vector links; ///< Clickable links in lines. std::vector link_anchors; ///< Anchor names of headings that can be linked to. std::vector history; ///< Browsing history in this window. - size_t history_pos{0}; ///< Position in browsing history (for forward movement). - bool trusted{false}; ///< Whether the content is trusted (read: not from content like NewGRFs, etc). + size_t history_pos = 0; ///< Position in browsing history (for forward movement). + bool trusted = false; ///< Whether the content is trusted (read: not from content like NewGRFs, etc). void LoadText(std::string_view buf); void FindHyperlinksInMarkdown(Line &line, size_t line_index); @@ -97,8 +97,8 @@ protected: void NavigateHistory(int delta); private: - uint search_iterator{0}; ///< Iterator for the font check search. - uint max_length{0}; ///< Maximum length of unwrapped text line. + uint search_iterator = 0; ///< Iterator for the font check search. + uint max_length = 0; ///< Maximum length of unwrapped text line. uint ReflowContent(); uint GetContentHeight(); From 8e2ccddd774ad35292e4d34948056b618c9369da Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 16 Apr 2024 04:40:57 +0000 Subject: [PATCH 314/695] Update: Translations from eints portuguese (brazilian): 2 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index bdf6cfa9ed..9ba9130d8c 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -446,7 +446,7 @@ STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Configurações STR_SETTINGS_MENU_AI_SETTINGS :Configurações de IA STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Configurações de Script de Jogo STR_SETTINGS_MENU_NEWGRF_SETTINGS :Configurações de NewGRF -STR_SETTINGS_MENU_SANDBOX_OPTIONS :Opções de trapaças +STR_SETTINGS_MENU_SANDBOX_OPTIONS :Opções da sandbox STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Opções de transparência STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Mostrar nomes de localidades STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Mostrar nomes de estações @@ -2242,7 +2242,7 @@ STR_HELP_WINDOW_BUGTRACKER :{BLACK}Relatar STR_HELP_WINDOW_COMMUNITY :{BLACK}Comunidade # Cheat window -STR_CHEATS :{WHITE}Trapaças +STR_CHEATS :{WHITE}Opções da Sandbox STR_CHEAT_MONEY :{LTBLUE}Aumentar dinheiro em {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Jogando como empresa: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Escavadeira mágica (remove indústrias, objetos estáticos): {ORANGE}{STRING} From 48eb9b8bc977ee17631a59aaedbc91094da49e1f Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 16 Apr 2024 16:25:07 +0100 Subject: [PATCH 315/695] Add: Check that towns can build roads before generating map. (#12503) --- src/genworld.cpp | 4 ++++ src/lang/english.txt | 5 +++++ src/town.h | 1 + src/town_cmd.cpp | 39 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+) diff --git a/src/genworld.cpp b/src/genworld.cpp index d5281a2f81..2499248cb1 100644 --- a/src/genworld.cpp +++ b/src/genworld.cpp @@ -103,6 +103,10 @@ static void _GenerateWorld() IncreaseGeneratingWorldProgress(GWP_MAP_INIT); /* Must start economy early because of the costs. */ StartupEconomy(); + if (!CheckTownRoadTypes()) { + HandleGeneratingWorldAbortion(); + return; + } bool landscape_generated = false; diff --git a/src/lang/english.txt b/src/lang/english.txt index 860915ac3c..6f24305f03 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -5286,6 +5286,11 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Change y STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}No vehicles are available yet STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Start a new game after {DATE_SHORT} or use a NewGRF that provides early vehicles +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}No town-buildable road types are available +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Change your NewGRF configuration +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}No town-buildable road types are available yet +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Start a new game after {DATE_SHORT} or use a NewGRF that provides early town-buildable road types + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Can't make train pass signal at danger... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Can't reverse direction of train... diff --git a/src/town.h b/src/town.h index 28ffa5047d..2b059dbe59 100644 --- a/src/town.h +++ b/src/town.h @@ -315,5 +315,6 @@ inline uint16_t TownTicksToGameTicks(uint16_t ticks) RoadType GetTownRoadType(); +bool CheckTownRoadTypes(); #endif /* TOWN_H */ diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index fa18e2b422..252e3b2fa0 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -940,6 +940,45 @@ RoadType GetTownRoadType() return best_rt; } +/** + * Get the calendar date of the earliest town-buildable road type. + * @return introduction date of earliest road type, or INT32_MAX if none available. + */ +static TimerGameCalendar::Date GetTownRoadTypeFirstIntroductionDate() +{ + const RoadTypeInfo *best = nullptr; + for (RoadType rt = ROADTYPE_BEGIN; rt != ROADTYPE_END; rt++) { + if (RoadTypeIsTram(rt)) continue; + const RoadTypeInfo *rti = GetRoadTypeInfo(rt); + if (rti->label == 0) continue; // Unused road type. + if (!HasBit(rti->flags, ROTF_TOWN_BUILD)) continue; // Town can't build this road type. + + if (best != nullptr && rti->introduction_date >= best->introduction_date) continue; + best = rti; + } + + if (best == nullptr) return INT32_MAX; + return best->introduction_date; +} + +/** + * Check if towns are able to build road. + * @return true iff the towns are currently able to build road. + */ +bool CheckTownRoadTypes() +{ + auto min_date = GetTownRoadTypeFirstIntroductionDate(); + if (min_date <= TimerGameCalendar::date) return true; + + if (min_date < INT32_MAX) { + SetDParam(0, min_date); + ShowErrorMessage(STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET, STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION, WL_CRITICAL); + } else { + ShowErrorMessage(STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL, STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION, WL_CRITICAL); + } + return false; +} + /** * Check for parallel road inside a given distance. * Assuming a road from (tile - TileOffsByDiagDir(dir)) to tile, From b2218e75d4dea4261c6638579d3e501080b85bdc Mon Sep 17 00:00:00 2001 From: Rubidium Date: Tue, 16 Apr 2024 18:44:55 +0200 Subject: [PATCH 316/695] Codefix: missing space between close parenthesis and open curly brace --- src/build_vehicle_gui.cpp | 2 +- src/newgrf_townname.cpp | 4 ++-- src/rail_gui.cpp | 2 +- src/station_cmd.cpp | 2 +- src/tgp.cpp | 2 +- src/timer/timer_game_common.h | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 9d97603b3c..ba73bf56f9 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1260,7 +1260,7 @@ struct BuildVehicleWindow : Window { /* Select the first unshaded engine in the list as default when opening the window */ EngineID engine = INVALID_ENGINE; - auto it = std::find_if(this->eng_list.begin(), this->eng_list.end(), [&](GUIEngineListItem &item){ return (item.flags & EngineDisplayFlags::Shaded) == EngineDisplayFlags::None; }); + auto it = std::find_if(this->eng_list.begin(), this->eng_list.end(), [&](GUIEngineListItem &item) { return (item.flags & EngineDisplayFlags::Shaded) == EngineDisplayFlags::None; }); if (it != this->eng_list.end()) engine = it->engine_id; this->SelectEngine(engine); } diff --git a/src/newgrf_townname.cpp b/src/newgrf_townname.cpp index d70f7892e2..ae95d79525 100644 --- a/src/newgrf_townname.cpp +++ b/src/newgrf_townname.cpp @@ -27,7 +27,7 @@ static std::vector _grf_townname_names; GRFTownName *GetGRFTownName(uint32_t grfid) { - auto found = std::find_if(std::begin(_grf_townnames), std::end(_grf_townnames), [&grfid](const GRFTownName &t){ return t.grfid == grfid; }); + auto found = std::find_if(std::begin(_grf_townnames), std::end(_grf_townnames), [&grfid](const GRFTownName &t) { return t.grfid == grfid; }); if (found != std::end(_grf_townnames)) return &*found; return nullptr; } @@ -44,7 +44,7 @@ GRFTownName *AddGRFTownName(uint32_t grfid) void DelGRFTownName(uint32_t grfid) { - _grf_townnames.erase(std::find_if(std::begin(_grf_townnames), std::end(_grf_townnames), [&grfid](const GRFTownName &t){ return t.grfid == grfid; })); + _grf_townnames.erase(std::find_if(std::begin(_grf_townnames), std::end(_grf_townnames), [&grfid](const GRFTownName &t) { return t.grfid == grfid; })); } static void RandomPart(StringBuilder &builder, const GRFTownName *t, uint32_t seed, uint8_t id) diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index d3dfd94db6..c09b5942eb 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -2299,7 +2299,7 @@ static void SetDefaultRailGui() case 0: { /* Use first available type */ std::vector::const_iterator it = std::find_if(_sorted_railtypes.begin(), _sorted_railtypes.end(), - [](RailType r){ return HasRailTypeAvail(_local_company, r); }); + [](RailType r) { return HasRailTypeAvail(_local_company, r); }); rt = it != _sorted_railtypes.end() ? *it : RAILTYPE_BEGIN; break; } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 5385d78887..c1c81f893e 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -985,7 +985,7 @@ static CommandCost CheckFlatLandRoadStop(TileIndex cur_tile, int &allowed_z, DoC return ClearTile_Station(cur_tile, DC_AUTO); // Get error message. } /* Drive-through station in the wrong direction. */ - if (is_drive_through && IsDriveThroughStopTile(cur_tile) && DiagDirToAxis(GetRoadStopDir(cur_tile)) != axis){ + if (is_drive_through && IsDriveThroughStopTile(cur_tile) && DiagDirToAxis(GetRoadStopDir(cur_tile)) != axis) { return_cmd_error(STR_ERROR_DRIVE_THROUGH_DIRECTION); } StationID st = GetStationIndex(cur_tile); diff --git a/src/tgp.cpp b/src/tgp.cpp index d250f252d0..97860024fd 100644 --- a/src/tgp.cpp +++ b/src/tgp.cpp @@ -444,7 +444,7 @@ static int *HeightMapMakeHistogram(Height h_min, [[maybe_unused]] Height h_max, int *hist = hist_buf - h_min; /* Count the heights and fill the histogram */ - for (const Height &h : _height_map.h){ + for (const Height &h : _height_map.h) { assert(h >= h_min); assert(h <= h_max); hist[h]++; diff --git a/src/timer/timer_game_common.h b/src/timer/timer_game_common.h index 1481f9581f..d3548cac48 100644 --- a/src/timer/timer_game_common.h +++ b/src/timer/timer_game_common.h @@ -23,7 +23,7 @@ * Other than that, make sure you only set one callback per priority. * * For example: - * IntervalTimer({TimerGameCalendar::DAY, TimerGameCalendar::Priority::NONE}, [](uint count){}); + * IntervalTimer({TimerGameCalendar::DAY, TimerGameCalendar::Priority::NONE}, [](uint count) {}); * * @note Callbacks are executed in the game-thread. */ From 257d312a580e7c5d5df5749fafbc9471355a08d1 Mon Sep 17 00:00:00 2001 From: Koen Bussemaker Date: Wed, 10 Apr 2024 20:14:21 +0200 Subject: [PATCH 317/695] Fix #12228, Fix #12231: CheckShipReverse only restricts path when it has to --- src/pathfinder/yapf/yapf_ship.cpp | 110 +++++++++++++----------------- 1 file changed, 49 insertions(+), 61 deletions(-) diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp index 85f05747e5..57d5e9d877 100644 --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -172,6 +172,14 @@ public: return 'w'; } + /** Returns a random trackdir out of a set of trackdirs. */ + static Trackdir GetRandomTrackdir(TrackdirBits trackdirs) + { + const int strip_amount = RandomRange(CountBits(trackdirs)); + for (int s = 0; s < strip_amount; ++s) RemoveFirstTrackdir(&trackdirs); + return FindFirstTrackdir(trackdirs); + } + /** Returns a random tile/trackdir that can be reached from the current tile/trackdir, or tile/INVALID_TRACK if none is available. */ static std::pair GetRandomFollowUpTileTrackdir(const Ship *v, TileIndex tile, Trackdir dir) { @@ -180,17 +188,15 @@ public: TrackdirBits dirs = follower.m_new_td_bits; const TrackdirBits dirs_without_90_degree = dirs & ~TrackdirCrossesTrackdirs(dir); if (dirs_without_90_degree != TRACKDIR_BIT_NONE) dirs = dirs_without_90_degree; - const int strip_amount = RandomRange(CountBits(dirs)); - for (int s = 0; s < strip_amount; ++s) RemoveFirstTrackdir(&dirs); - return { follower.m_new_tile, FindFirstTrackdir(dirs) }; + return { follower.m_new_tile, GetRandomTrackdir(dirs) }; } return { follower.m_new_tile, INVALID_TRACKDIR }; } /** Creates a random path, avoids 90 degree turns. */ - static Trackdir CreateRandomPath(const Ship *v, Trackdir dir, ShipPathCache &path_cache, int path_length) + static Trackdir CreateRandomPath(const Ship *v, ShipPathCache &path_cache, int path_length) { - std::pair tile_dir = { v->tile, dir }; + std::pair tile_dir = { v->tile, v->GetVehicleTrackdir()}; for (int i = 0; i < path_length; ++i) { tile_dir = GetRandomFollowUpTileTrackdir(v, tile_dir.first, tile_dir.second); if (tile_dir.second == INVALID_TRACKDIR) break; @@ -204,19 +210,14 @@ public: return result; } - static Trackdir ChooseShipTrack(const Ship *v, TileIndex tile, bool &path_found, ShipPathCache &path_cache) + static Trackdir ChooseShipTrack(const Ship *v, TileIndex tile, TrackdirBits forward_dirs, TrackdirBits reverse_dirs, + bool &path_found, ShipPathCache &path_cache, Trackdir &best_origin_dir) { - const Trackdir trackdir = v->GetVehicleTrackdir(); - assert(IsValidTrackdir(trackdir)); - - /* Convert origin trackdir to TrackdirBits. */ - const TrackdirBits trackdirs = TrackdirToTrackdirBits(trackdir); - const std::vector high_level_path = YapfShipFindWaterRegionPath(v, tile, NUMBER_OR_WATER_REGIONS_LOOKAHEAD + 1); if (high_level_path.empty()) { path_found = false; /* Make the ship move around aimlessly. This prevents repeated pathfinder calls and clearly indicates that the ship is lost. */ - return CreateRandomPath(v, trackdir, path_cache, SHIP_LOST_PATH_LENGTH); + return CreateRandomPath(v, path_cache, SHIP_LOST_PATH_LENGTH); } /* Try one time without restricting the search area, which generally results in better and more natural looking paths. @@ -226,7 +227,7 @@ public: Tpf pf(MAX_SHIP_PF_NODES); /* Set origin and destination nodes */ - pf.SetOrigin(v->tile, trackdirs); + pf.SetOrigin(v->tile, forward_dirs | reverse_dirs); pf.SetDestination(v); const bool is_intermediate_destination = static_cast(high_level_path.size()) >= NUMBER_OR_WATER_REGIONS_LOOKAHEAD + 1; if (is_intermediate_destination) pf.SetIntermediateDestination(high_level_path.back()); @@ -239,14 +240,16 @@ public: path_found = pf.FindPath(v); Node *node = pf.GetBestNode(); if (attempt == 0 && !path_found) continue; // Try again with restricted search area. - if (!path_found || node == nullptr) return GetRandomFollowUpTileTrackdir(v, v->tile, trackdir).second; + + /* Make the ship move around aimlessly. This prevents repeated pathfinder calls and clearly indicates that the ship is lost. */ + if (!path_found) return CreateRandomPath(v, path_cache, SHIP_LOST_PATH_LENGTH); /* Return only the path within the current water region if an intermediate destination was returned. If not, cache the entire path * to the final destination tile. The low-level pathfinder might actually prefer a different docking tile in a nearby region. Without * caching the full path the ship can get stuck in a loop. */ const WaterRegionPatchDesc end_water_patch = GetWaterRegionPatchInfo(node->GetTile()); - const WaterRegionPatchDesc start_water_patch = GetWaterRegionPatchInfo(tile); - assert(start_water_patch == high_level_path.front()); + assert(GetWaterRegionPatchInfo(tile) == high_level_path.front()); + const WaterRegionPatchDesc start_water_patch = high_level_path.front(); while (node->m_parent) { const WaterRegionPatchDesc node_water_patch = GetWaterRegionPatchInfo(node->GetTile()); @@ -262,10 +265,18 @@ public: } node = node->m_parent; } + assert(node->GetTile() == v->tile); + + /* Return INVALID_TRACKDIR to trigger a ship reversal if that is the best option. */ + best_origin_dir = node->GetTrackdir(); + if ((TrackdirToTrackdirBits(best_origin_dir) & forward_dirs) == TRACKDIR_BIT_NONE) { + path_cache.clear(); + return INVALID_TRACKDIR; + } /* A empty path means we are already at the destination. The pathfinder shouldn't have been called at all. * Return a random reachable trackdir to hopefully nudge the ship out of this strange situation. */ - if (path_cache.empty()) return GetRandomFollowUpTileTrackdir(v, v->tile, trackdir).second; + if (path_cache.empty()) return CreateRandomPath(v, path_cache, 1); /* Take out the last trackdir as the result. */ const Trackdir result = path_cache.front(); @@ -284,52 +295,30 @@ public: * Check whether a ship should reverse to reach its destination. * Called when leaving depot. * @param v Ship. - * @param tile Current position. - * @param td1 Forward direction. - * @param td2 Reverse direction. * @param trackdir [out] the best of all possible reversed trackdirs. * @return true if the reverse direction is better. */ - static bool CheckShipReverse(const Ship *v, TileIndex tile, Trackdir td1, Trackdir td2, Trackdir *trackdir) + static bool CheckShipReverse(const Ship *v, Trackdir *trackdir) { - const std::vector high_level_path = YapfShipFindWaterRegionPath(v, tile, NUMBER_OR_WATER_REGIONS_LOOKAHEAD + 1); - if (high_level_path.empty()) { - if (trackdir) *trackdir = INVALID_TRACKDIR; - return false; - } + bool path_found = false; + ShipPathCache dummy_cache; + Trackdir best_origin_dir = INVALID_TRACKDIR; - /* Create pathfinder instance. */ - Tpf pf(MAX_SHIP_PF_NODES); - /* Set origin and destination nodes. */ if (trackdir == nullptr) { - pf.SetOrigin(tile, TrackdirToTrackdirBits(td1) | TrackdirToTrackdirBits(td2)); + /* The normal case, typically called when ships leave a dock. */ + const Trackdir reverse_dir = ReverseTrackdir(v->GetVehicleTrackdir()); + const TrackdirBits forward_dirs = TrackdirToTrackdirBits(v->GetVehicleTrackdir()); + const TrackdirBits reverse_dirs = TrackdirToTrackdirBits(reverse_dir); + (void)ChooseShipTrack(v, v->tile, forward_dirs, reverse_dirs, path_found, dummy_cache, best_origin_dir); + return path_found && best_origin_dir == reverse_dir; } else { - DiagDirection entry = ReverseDiagDir(VehicleExitDir(v->direction, v->state)); - TrackdirBits rtds = DiagdirReachesTrackdirs(entry) & TrackStatusToTrackdirBits(GetTileTrackStatus(tile, TRANSPORT_WATER, 0, entry)); - pf.SetOrigin(tile, rtds); + /* This gets called when a ship suddenly can't move forward, e.g. due to terraforming. */ + const DiagDirection entry = ReverseDiagDir(VehicleExitDir(v->direction, v->state)); + const TrackdirBits reverse_dirs = DiagdirReachesTrackdirs(entry) & TrackStatusToTrackdirBits(GetTileTrackStatus(v->tile, TRANSPORT_WATER, 0, entry)); + (void)ChooseShipTrack(v, v->tile, TRACKDIR_BIT_NONE, reverse_dirs, path_found, dummy_cache, best_origin_dir); + *trackdir = path_found && best_origin_dir != INVALID_TRACKDIR ? best_origin_dir : GetRandomTrackdir(reverse_dirs); + return true; } - pf.SetDestination(v); - if (high_level_path.size() > 1) pf.SetIntermediateDestination(high_level_path.back()); - pf.RestrictSearch(high_level_path); - - /* Find best path. */ - if (!pf.FindPath(v)) return false; - - Node *pNode = pf.GetBestNode(); - if (pNode == nullptr) return false; - - /* Path was found, walk through the path back to the origin. */ - while (pNode->m_parent != nullptr) { - pNode = pNode->m_parent; - } - - Trackdir best_trackdir = pNode->GetTrackdir(); - if (trackdir != nullptr) { - *trackdir = best_trackdir; - } else { - assert(best_trackdir == td1 || best_trackdir == td2); - } - return best_trackdir != td1; } }; @@ -437,14 +426,13 @@ struct CYapfShip : CYapfTGetVehicleTrackdir()); + const Trackdir td_ret = CYapfShip::ChooseShipTrack(v, tile, origin_dirs, TRACKDIR_BIT_NONE, path_found, path_cache, best_origin_dir); return (td_ret != INVALID_TRACKDIR) ? TrackdirToTrack(td_ret) : INVALID_TRACK; } bool YapfShipCheckReverse(const Ship *v, Trackdir *trackdir) { - Trackdir td = v->GetVehicleTrackdir(); - Trackdir td_rev = ReverseTrackdir(td); - TileIndex tile = v->tile; - return CYapfShip::CheckShipReverse(v, tile, td, td_rev, trackdir); + return CYapfShip::CheckShipReverse(v, trackdir); } From 018326321cef0468855bb9f37622ef948e002ab4 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 17 Apr 2024 04:40:56 +0000 Subject: [PATCH 318/695] Update: Translations from eints english (us): 5 changes by 2TallTyler latvian: 1 change by lexuslatvia --- src/lang/afrikaans.txt | 1 + src/lang/arabic_egypt.txt | 1 + src/lang/basque.txt | 1 + src/lang/belarusian.txt | 1 + src/lang/brazilian_portuguese.txt | 1 + src/lang/bulgarian.txt | 1 + src/lang/catalan.txt | 1 + src/lang/chuvash.txt | 1 + src/lang/croatian.txt | 1 + src/lang/czech.txt | 1 + src/lang/danish.txt | 1 + src/lang/dutch.txt | 1 + src/lang/english_AU.txt | 1 + src/lang/english_US.txt | 6 ++++++ src/lang/esperanto.txt | 1 + src/lang/estonian.txt | 1 + src/lang/faroese.txt | 1 + src/lang/finnish.txt | 1 + src/lang/french.txt | 1 + src/lang/frisian.txt | 1 + src/lang/gaelic.txt | 1 + src/lang/galician.txt | 1 + src/lang/german.txt | 1 + src/lang/greek.txt | 1 + src/lang/hebrew.txt | 1 + src/lang/hindi.txt | 1 + src/lang/hungarian.txt | 1 + src/lang/icelandic.txt | 1 + src/lang/ido.txt | 1 + src/lang/indonesian.txt | 1 + src/lang/irish.txt | 1 + src/lang/italian.txt | 1 + src/lang/japanese.txt | 1 + src/lang/korean.txt | 1 + src/lang/latin.txt | 1 + src/lang/latvian.txt | 2 ++ src/lang/lithuanian.txt | 1 + src/lang/luxembourgish.txt | 1 + src/lang/macedonian.txt | 1 + src/lang/malay.txt | 1 + src/lang/maltese.txt | 1 + src/lang/marathi.txt | 1 + src/lang/norwegian_bokmal.txt | 1 + src/lang/norwegian_nynorsk.txt | 1 + src/lang/persian.txt | 1 + src/lang/polish.txt | 1 + src/lang/portuguese.txt | 1 + src/lang/romanian.txt | 1 + src/lang/russian.txt | 1 + src/lang/serbian.txt | 1 + src/lang/simplified_chinese.txt | 1 + src/lang/slovak.txt | 1 + src/lang/slovenian.txt | 1 + src/lang/spanish.txt | 1 + src/lang/spanish_MX.txt | 1 + src/lang/swedish.txt | 1 + src/lang/tamil.txt | 1 + src/lang/thai.txt | 1 + src/lang/traditional_chinese.txt | 1 + src/lang/turkish.txt | 1 + src/lang/ukrainian.txt | 1 + src/lang/urdu.txt | 1 + src/lang/vietnamese.txt | 1 + src/lang/welsh.txt | 1 + 64 files changed, 70 insertions(+) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index ce69bbe327..3d08a12588 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -4624,6 +4624,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Verander STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Geen voertuie is op die oomblik beskikbaar nie STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Begin na {DATE_SHORT} of gebruik 'n NewGRF wat voertuie vroeër beskikbaar stel + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan nie trein forseer om sein te vermy op gevaar... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Kan nie rigting van trein verander nie... diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 184010a6a3..2be1344d26 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -4418,6 +4418,7 @@ STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... لي STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}لن تتوافر اى وسائل نقل على اﻹطلاق STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}لا تتوافر اى آليه نقل بعد + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}لا يمكن السماح للقطار بالعبور من الاشارة في وضع الخطر STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}لا يمكن عكس اتجاة القطار... diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 7580ed6e94..cbf591f95d 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -4369,6 +4369,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Ez da ib STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Aldatu zure NewGRF konfigurazioa STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Ez dago ibilgailu erabilgarririk oraindik + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Ezin da trena seinalea pasatzera behartu, istripu arriskua... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Ezin da trenaren norabidea aldatu... diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 3a1de5eaf2..73d9a197ed 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -5631,6 +5631,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Зьмя STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Няма даступных транспартных сродкаў STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Пачніце гульню пасьля {DATE_SHORT} або падключыце NewGRF з транспартам адпаведных часоў. + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Немагчыма іґнараваць сыґнал. Небясьпечна... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Не атрымалася завярнуць цягнік... diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 9ba9130d8c..860a5f0184 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -5287,6 +5287,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Modifiqu STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Não existem veículos disponíveis ainda STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Inicie um novo jogo depois de {DATE_SHORT} ou utilize um NewGRF que forneça veículos iniciais + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Não é possível fazer o trem passar o sinal em perigo... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Não é possível inverter a direção do trem... diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 0d9efe83bd..b432c9e60a 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -4654,6 +4654,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Пром STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Няма налични превозни средства все още STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Започни нова игра след {DATE_SHORT} или използвай NewGRF , който показва ранни превозни средства + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Влака не може да пропусне сигнала при опасност... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Не може да обърне посоката на влак... diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index e40ab9c7e5..5da45529ba 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -5287,6 +5287,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Canvia l STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Encara no hi ha vehicles disponibles STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Inicieu una partida nova després de {DATE_SHORT} o useu un NewGRF que proporcioni vehicles primerencs. + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}No pots fer que un tren passi d'una senyal amb perill... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}No es pot invertir la direcció del tren... diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index 36c2e5f642..1bd4cd3df0 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -1709,6 +1709,7 @@ STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Ҫул + # Specific vehicle errors diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 00c09c6dc6..6435b15c58 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -4812,6 +4812,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Promijen STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Još nema dostupnih vozila STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Pokreni novu igru nakon {DATE_SHORT} ili upotrijebi NewGRF koji daje vrlo rana vozila + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Nije moguće natjerati vlak da ignorira signale dok traje opasnost... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Nije moguće promijeniti smjer vlaka... diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 7b83851a3c..47af6fe005 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -5376,6 +5376,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Zmeň na STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Zatím nejsou dostupná žádná vozidla STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Začít hru po {DATE_SHORT} nebo použít NewGRF, která zajistí dřívější vozidla + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Nelze nechat vlak projet semafory v nebezpečí... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Nelze obrátit vlak... diff --git a/src/lang/danish.txt b/src/lang/danish.txt index d0a9398d6b..ad5dad7ec9 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -5286,6 +5286,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Skift di STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Ingen køretøjer er tilgængelige endnu STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Start et nyt spil efter {DATE_SHORT} eller brug en NewGRF der giver tidlige køretøjer + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan ikke få toget til at passere signalet... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Kan ikke vende retningen af toget... diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 25fb25b497..bea3abf06e 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -5286,6 +5286,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Pas je N STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Nog geen voertuigen beschikbaar STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE} Start een nieuw spel na {DATE_SHORT} of gebruik een NewGRF dat in vroege voertuigen voorziet + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan trein niet het sein laten passeren bij gevaar... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Kan de richting van de trein niet omdraaien... diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index f71ba405c9..f432d6d71b 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -5286,6 +5286,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Change y STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}No vehicles are available yet STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Start a new game after {DATE_SHORT} or use a NewGRF which provides early vehicles + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Can't make train pass signal at danger... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Can't reverse direction of train... diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 9c28e0f7b0..f9ffd8aaf2 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -3488,6 +3488,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Road type STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x parameter (hexadecimal) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Aligning sprite: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Aligning sprite: Action 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Aligning sprite: Action 0x5, type {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Next sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Proceed to the next normal sprite, skipping any pseudo/recolor/font sprites and wrapping around from the last sprite to the first STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Go to sprite @@ -3496,6 +3499,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Previous STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceed to the previous normal sprite, skipping any pseudo/recolor/font sprites and wrapping around from the first sprite to the last STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation of the currently selected sprite. The alignment is ignored when drawing this sprite STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move the sprite around, changing the X and Y offsets. Ctrl+Click to move the sprite eight units at a time +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Offset centered @@ -5282,6 +5286,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Change y STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}No vehicles are available yet STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Start a new game after {DATE_SHORT} or use a NewGRF that provides early vehicles + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Can't make train pass signal at danger... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Can't reverse direction of train... @@ -5832,6 +5837,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index a9c026defe..118a9baa90 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -5144,6 +5144,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Ŝanĝu STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Neniuj veturiloj dume haveblas STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Komencu novan ludon post {DATE_SHORT} aŭ uzu NewGRF-on kiu havebligas frutempajn veturilojn + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Ne povas igi vagonaron transiri signalon je danĝero... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Ne povas inversigi direkton de vagonaro... diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index efcdc634d5..ed67e64d0b 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -5334,6 +5334,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Muuda Ne STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Sõidukeid ei ole veel saadaval STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Alusta mängu pärast {DATE_SHORT} või kasuta NewGRF-i, milles on varasemaid sõidukeid + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Rongi ei saa ohu korral sundida signaale eirama... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Ei saa rongi ümber pöörata. diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 5de884b32e..5e6b384a67 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -4024,6 +4024,7 @@ STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... akfa + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kann ikki fáa tok at fara framvið jarnbreytatekin tá vandi er... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Kann ikki venda toki vi... diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 9e618188f2..017948e152 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -5286,6 +5286,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Muuta Ne STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Kulkuneuvoja ei ole vielä saatavilla STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Aloita peli {DATE_SHORT} jälkeen tai käytä NewGRF:ää joka tarjoaa aikaisempia kulkuneuvoja + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Junaa ei voi pakottaa jatkamaan punaisen opastimen ohi... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Junan suuntaa ei voi kääntää... diff --git a/src/lang/french.txt b/src/lang/french.txt index 383c102faf..b67f2b1132 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -5287,6 +5287,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Modifier STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Il n'y a pas encore de véhicules disponibles STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Commencer un nouvelle partie après {DATE_SHORT} ou utiliser un NewGRF qui propose des véhicules plus tôt + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Impossible de forcer le train à avancer sous le danger... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Impossible de faire faire demi-tour... diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index 71055270df..e32bf24f5c 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -4205,6 +4205,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Feroarje STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Der binne noch gjin fiertugen beskikber STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Begjin in nij spul nei {DATE_SHORT} of brûk in NewGRF dy't earder fiertugen beskikber stelt + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kin trein gjin sein foarby ride litte at dizze gefaar oanjout... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Kin rydrjochting fan de trein net oanpasse diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 11805cc18f..88cb7c19d8 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -4761,6 +4761,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Atharrai STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Chan eil carbad ri fhaighinn fhathast STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Tòisich geama ùr às dèidh {DATE_SHORT} no chleachd NewGRF a bheir carbadan tràtha dhut + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Chan urrainn dhut toirt air trèanaichean dol seachad air comharra fo chunnart... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Chan urrainn dhan trèana tilleadh... diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 15754aa2b0..7d04ac030f 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -5279,6 +5279,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Cambia a STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Aínda non hai vehículos dispoñíbeis STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Comezar unha partida nova a partires de {DATE_SHORT} ou empregar un NewGRF que proporcione vehículos antigos + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Non se pode facer que o tren rebase un sinal en perigo... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}No se pode cambia-lo sentido do tren... diff --git a/src/lang/german.txt b/src/lang/german.txt index 9b3bcd883e..16fb7581fc 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -5281,6 +5281,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Bitte di STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Noch keine Fahrzeuge verfügbar STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Ein neues Spiel nach {DATE_SHORT} beginnen oder ein NewGRF-Fahrzeugset mit früher verfügbaren Fahrzeugen verwenden + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Der Zug kann das Signal nicht gefahrlos passieren ... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Die Zugbewegung kann nicht umgekehrt werden ... diff --git a/src/lang/greek.txt b/src/lang/greek.txt index f14aadb289..ea3dad2136 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -5386,6 +5386,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Αλλά STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Κανένα όχημα δεν είναι διαθέσιμο ακόμη STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Ξεκινήστε ένα νέο παιχνίδι αργότερα από {DATE_SHORT} η χρησιμοποιήστε ένα NewGRF το οποίο προσφέρει νωρίτερα οχήματα + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Δεν μπορεί το τρένο να περάσει σήμα με κίνδυνο... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Δεν αντιστρέφεται η κατεύθυνση του τρένου... diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index bc66be2033..e92de862c5 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -4687,6 +4687,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}שנה STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}כלי תחבורה עדיין לא זמינים STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}התחל משחק חדש אחרי {DATE_SHORT} או השתמש ב-NewGRF המכיל כלי תחבורה קדומים + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}לא ניתן להכריח את הרכבת לעבור ברמזור בעת סכנה... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}לא ניתן להפוך את כיוון הנסיעה של הרכבת... diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index 30c1dabb8e..534b54a7cc 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -1574,6 +1574,7 @@ STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}रे + # Specific vehicle errors STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}ट्रेन की दिशा उलट नहीं सकते... diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 59203dde4b..a24baec0e5 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -5341,6 +5341,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Változt STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Még nincsenek elérhető járművek STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Indíts új játékot {DATE_SHORT} után, vagy használj olyan NewGRF-et, ami tartalmaz megfelelően korai járműveket! + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Nem haladhatja meg a vonat a megállj jelzést... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Nem fordíthatod meg a vonatot... diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 5ba52905e3..09d9780897 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -4255,6 +4255,7 @@ STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... öku STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Engin farartæki verða í boði STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Breyta NewGRF stillingunum þínum + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Get ekki látið lest fara framhjá hættumerki... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Get ekki snúið lest við... diff --git a/src/lang/ido.txt b/src/lang/ido.txt index 0ba0d4e163..ac7b50ddad 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -1600,6 +1600,7 @@ STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Tro mult + # Specific vehicle errors diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 177b0d2eeb..99fb0fc61e 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -5161,6 +5161,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Tukarkan STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Belum ada kendaraan yang tersedia saat ini STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Mulai permainan baru setelah {DATE_SHORT} atau gunakan NewGRF yang menyediakan kendaraan awal + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Tidak dapat memaksa kereta melanggar sinyal pada saat bahaya... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Tidak dapat memutar balik arah kereta... diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 90825adf64..d99a87a45b 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -4865,6 +4865,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Athraigh STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Níl aon fheithicil ar fáil fós STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Tosaigh cluiche nua ó {DATE_SHORT} ar aghaidh nó úsáid NewGRF lena gcuirtear feithiclí luath ar fáil + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Ní féidir iallach a chur ar thraein dul thar comhartha agus contúirt ann... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Ní féidir treo na traenach a aisiompú... diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 436d86cdb8..05195c2e51 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -5319,6 +5319,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Cambiare STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Non sono ancora disponibili veicoli STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Iniziare una nuova partita dopo il {DATE_SHORT} o utilizzare un NewGRF che fornisca veicoli a partire da date antecedenti + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Impossibile far passare al treno un segnale di pericolo... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Impossibile invertire la direzione del treno... diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 115fced9f5..f3e61dccff 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -4988,6 +4988,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}NewGRF STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}利用可能な輸送機器がありません STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}{DATE_SHORT}年以降に開始するか、これより早い時期に輸送機器が開発されるNewGRFを利用して下さい + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}赤信号を無視させることができません STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}列車を反転できません diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 60ef5f39ab..c4cfb0abfe 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -5283,6 +5283,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}NewGRF STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}사용할 수 있는 차량이 하나도 없습니다 STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}{DATE_SHORT}년 이후에 새로운 게임을 시작하거나 차량이 더 빨리 개발되는 NewGRF을 사용하십시오. + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}너무 위험해서 신호를 무시할 수 없습니다... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}열차를 회차시킬 수 없습니다... diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 25bc4e2b3a..6bc1b21f6a 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -4752,6 +4752,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Muta con STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Nulla vehicula adhuc parabilia sunt STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Incipe ludum post {DATE_SHORT} sive eligere idoneum NewGRF quod vehicula antiqua parat + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Non licet tramen impellere post signale... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Non licet tramini cursum reflectere... diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 9fb76b9052..6b759b0315 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -2578,6 +2578,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE} Jūsu s STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE} Jūsu servera nosaukums nav iestatīts. Nosaukumu var iestatīt vairākspēlētāju loga augšdaļā STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Klienta pārskats neatbilst servera pārskatam STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Nepareiza parole +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Jūs neesat atļauto klientu sarakstā STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Serveris ir pilns STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Šajā serverī jums ir aizliegums STR_NETWORK_ERROR_KICKED :{WHITE}Jūs esat izmests no šīs spēles @@ -5295,6 +5296,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Mainiet STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Transportlīdzekļi vēl nav pieejami STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Sākt jaunu spēli pēc {DATE_SHORT} vai izmantot NewGRF, kas nodrošina agrīnus transporta līdzekļus + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Vilciens nevar šķērsot signālu briesmās... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Vilcienu nevar apgriezt... diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 578359c1bb..798f207e21 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -5207,6 +5207,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Pakeiski STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Kol kas negalima įsigyti jokių transporto priemonių STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Pradėkite žaidimą vėliau, nei {DATE_SHORT}, arba įdiekite plėtinių, kurie leistų įsigyti transporto priemonių šiame ankstyvame laikotarpyje + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Neįmanoma priversti traukinio važiuoti nesaugiai... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Traukinio vaziavimo krypties pakeisti negalima... diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index ef41844276..f19ae7f54e 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -5277,6 +5277,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Änner d STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Nach keng Gefierer verfügbar STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}En neit Spill no {DATE_SHORT} ufenken oder benotz en NewGRF den al Gefierer erlaabt + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kann den Zuch net bei Gefor durch d'Signal schécken... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Kann d'Richtung vum Zuch net änneren... diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index 44bd9b1723..4a0d5308d8 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -2117,6 +2117,7 @@ STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... во + # Specific vehicle errors diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 51a7aee810..5266a35664 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -4161,6 +4161,7 @@ STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... kend STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Mulakan permainan baru selepas {DATE_SHORT} atau gunakan NewGRF yang digunakan kenderaan terdahulu + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Keretapi tidak boleh melanggar isyarat kerana terdapat kemungkinan bahaya... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Keretapi tidak boleh ditukar arah... diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index 4c41075122..da063b328a 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -1468,6 +1468,7 @@ STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Hemm wis + # Specific vehicle errors STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Ma tistax tbiddel id-direzzjoni tal-ferrovija... diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index dac56fa193..112edf8266 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -1867,6 +1867,7 @@ STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :{WHITE}पू + # Specific vehicle errors diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 3953b8868c..64a30700d5 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -5288,6 +5288,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Endre di STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Ingen kjøretøyer er tilgjengelig ennå STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Starte et nytt spill etter {DATE_SHORT}, eller bruke en NewGRF som inneholder tidlige kjøretøy + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan ikke tvinge tog til å passere signal ved fare... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Kan ikke reversere toget... diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index ed09582836..43ad419318 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -4396,6 +4396,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Byt NewG STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Det finst ikkje nokon køyretøy enno STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Start spelet etter {DATE_SHORT} eller bruk ein GRF som har køyretøy frå tidlegare tider + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan ikkje tvinge tog til å passere signal ved fare... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Kan ikkje snu toget... diff --git a/src/lang/persian.txt b/src/lang/persian.txt index f08def6a82..00c2596bc2 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -3748,6 +3748,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}بطور STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}تنظیمات مربوط به NewGRF را تغییر دهید STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}هنوز خودرویی در دسترس نیست + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}در هنگام خطر نمی توان علامت عبور قطار را داد STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}جهت قطار را نمی شود تغییر داد... diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 3a0a8fd9fe..ae307a167f 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -5672,6 +5672,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Zmień k STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Obecnie żaden pojazd nie jest dostępny STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Zacznij grę po {DATE_SHORT} albo użyj zestawu NewGRF, który zawiera wczesne pojazdy + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Nie można przepuścić pociągu za sygnał, niebezpieczeństwo... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Nie można odwrócić kierunku jazdy pociągu... diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 31193cbcda..6c7e8b5904 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -5287,6 +5287,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Mudar a STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Nenhum veículo ainda disponível STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Começar um novo jogo depois de {DATE_SHORT} ou utilizar um NewGRF que forneça veículos iniciais + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Não é possível fazer o comboio passar o sinal com perigo... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Não é possível inverter a direcção do comboio... diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index ea9177a1dc..2d016ba1ad 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -5273,6 +5273,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Schimbă STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Niciun vehicul nu este disponibil încă STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Începe un joc nou după {DATE_SHORT} sau utilizează un NewGRF care oferă vehicule în avans + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Nu se poate permite trenului să treacă în caz de pericol... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Nu se poate schimba sensul de mers al trenului... diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 56dcbbf559..598bb83968 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -5473,6 +5473,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Изме STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Нет доступных транспортных средств STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Начните игру не ранее {DATE_SHORT} либо подключите NewGRF, добавляющий транспортные средства, использовавшиеся в это время. + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Невозможно игнорировать светофор. Опасно... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Невозможно развернуть поезд... diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 83b03e555c..6ca88c3f00 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -5380,6 +5380,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Promeni STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Nijedno vozilo još uvek nije dostupno STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Pokreni novu igru koja počinje posle {DATE_SHORT} ili koristi NewGRF koji omogućava ranija vozila + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Nemoguć je prolaz voza na signal opasnosti... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}... vozilo je uništeno diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index c5c24441a1..4ca83af535 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -5283,6 +5283,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}请改 STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}暂时沒有可用的载具 STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}在{DATE_SHORT}后开始新游戏,或使用一款能提供早期载具的NewGRF + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}不能让列车冒险通过信号... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}不能命令列车调头... diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 058d87d45a..8ce5a9f166 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -5348,6 +5348,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Zmena va STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Zatiaľ nie sú dostupné žiadne vozidlá STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Začnite novú hru po {DATE_SHORT} alebo použite NewGRF, ktoré zabezpečí vozidlá v skoršom čase + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Nemožno nechať vlak prejsť návestidlo ak hrozí nebezpečenstvo... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Nemožno otočiť vlak naopak... diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index b8fa8435c9..c8149b0ebb 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -4645,6 +4645,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Zamenjaj STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Ni še vozil na razpolago. STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Začni novo igro po {DATE_SHORT} ali uporabi NewGRF, ki vsebuje zgodnja vozila + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Ni mogoče, da vlak v nevarnosti pelje mimo signalov... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Ni mogoče spremeniti smeri vlaka... diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index e4921fda2c..0624ce69bd 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -5287,6 +5287,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Es neces STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}En esta fecha no hay vehículos disponibles STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Comienza una nueva partida después de {DATE_SHORT} o usa un NewGRF que provea vehículos más antiguos + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}No se puede pasar la señal en peligro al tren... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}No se puede cambiar la dirección... diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 8b734a5842..1753a04fde 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -5157,6 +5157,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Se debe STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Todavía no hay vehículos disponibles STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Se debe empezar una nueva partida después de {DATE_SHORT} o usar un NewGRF que proporcione vehículos más antiguos + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}El tren no puede rebasar la señal si está en peligro... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}No se puede cambiar la dirección del tren... diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 41607130c9..823870fc23 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -5286,6 +5286,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Ändra d STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Inga fordon är tillgängliga än STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Starta ett nytt spel efter {DATE_SHORT} eller använd en NewGRF som erbjuder tidiga fordon + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan inte tillåta tåg att passera signal under fara... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Kan inte byta tågets riktning... diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 0556acd908..be2da27776 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -4871,6 +4871,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}தங STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}தற்போது எந்த வாகனங்களும் கிடையாது STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}{DATE_SHORT} இற்கு பிறகு புதிய ஆட்டம் ஒன்றினைத் தொடங்கு அல்லது NewGRF ஒன்றினைப் பயன்படுத்தி பிற்கால வாகனங்களைப் பயன்படுத்து + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}இரயில் சிக்னலைத் தாண்டிச் செல்ல முடியாது... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}இரயில் செல்லும் திசையினை திருப்ப முடியாது... diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 421e65bb87..a9fd5a7a83 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -4601,6 +4601,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}เป STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}ยังไม่มียานพาหานะให้เลือก STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}เริ่มเกมหลังจาก {DATE_SHORT} หรือเลือกใช้งาน NewGRF ของยานพาหนะที่จัดเตรียมไว้ก่อนหน้านี้ + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}ไม่สามารถสั่งให้รถไฟวิ่งผ่านเสาอาณัติสัญญาณที่แสดงท่า "ห้าม"... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}ไม่สามารถกลับทิศขบวนรถไฟได้... diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index d0ee79f49f..27dd3f671c 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -5102,6 +5102,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}請修 STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}未有可用的車輛 STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}在{DATE_SHORT}後開始新遊戲,或使用提供早期車輛的NewGRF + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}無法讓列車通過險阻號誌... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}無法倒轉列車方向... diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index d4a3f1ce92..7945464b7c 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -5279,6 +5279,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Yeni New STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Henüz hiçbir araç kullanılabilir değil STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}{DATE_SHORT} sonra yeni bir oyun başlat veya erken araç sağlayan NewGRF kullan + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Tehlikedeki tren sinyali geçemez... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Tren çevrilemez... diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 7eadb93497..496e385fbc 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -5424,6 +5424,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Змін STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Жоден вид транспорту ще не став доступним STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Починайте нову гру після {DATE_SHORT} або використовуйте NewGRF, в якому транспорт з’являється раніше + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Неможливо проїхати сигнал - небезпечно... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Неможливо розвернути поїзд... diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index 06c6d24238..521bbd13c4 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -2880,6 +2880,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}مرمت + # Specific vehicle errors diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 62dd744acd..1c6cfb73e6 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -5280,6 +5280,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Thay đ STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Chưa có phương tiện nào có sẵn STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Bắt đầu một màn chơi mới sau {DATE_SHORT} hoặc sử dụng một NewGRF cung cấp sớm phương tiện + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Không thể để tàu hoả qua tín hiệu đèn khi nguy hiểm... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Không thể đổi hướng đoàn tàu... diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 87979e7e4e..40e7dcc914 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -5280,6 +5280,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Newid ei STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Dim cerbydau ar gael eto STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Dechreuwch gêm newydd wedi {DATE_SHORT} neu defnyddiwch NewGRF sy'n darparu cerbydau cynnar + # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Does dim modd gwneud i drên basio signal pan fo perygl... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Methu gwrthdroi'r trên... From b477a8458ceaf7f75b2c4c2665f96daeed75457f Mon Sep 17 00:00:00 2001 From: Paco Esteban Date: Wed, 17 Apr 2024 18:08:03 +0200 Subject: [PATCH 319/695] Codechange: Use arc4random_buf on random_func.cpp for OpenBSD --- src/core/random_func.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/random_func.cpp b/src/core/random_func.cpp index 971879dd38..355eeff616 100644 --- a/src/core/random_func.cpp +++ b/src/core/random_func.cpp @@ -97,7 +97,7 @@ void RandomBytesWithFallback(std::span buf) #if defined(_WIN32) auto res = BCryptGenRandom(nullptr, static_cast(buf.data()), static_cast(buf.size()), BCRYPT_USE_SYSTEM_PREFERRED_RNG); if (res >= 0) return; -#elif defined(__APPLE__) || defined(__NetBSD__) || defined(__FreeBSD__) +#elif defined(__APPLE__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) arc4random_buf(buf.data(), buf.size()); return; #elif defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 25))) From ef8eb66a2bb238c683dd358fca76d40250e13fb3 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 17 Apr 2024 18:54:50 +0100 Subject: [PATCH 320/695] Fix c38df2d58: Use VehicleID instead of pointer in map of vehicles to replace. (#12512) This affects the sort order, VehicleID is deterministic, Vehicle * is not. --- src/vehicle.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index c8fefff234..748ad84b7d 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -691,7 +691,7 @@ void ResetVehicleColourMap() * List of vehicles that should check for autoreplace this tick. * Mapping of vehicle -> leave depot immediately after autoreplace. */ -using AutoreplaceMap = std::map; +using AutoreplaceMap = std::map; static AutoreplaceMap _vehicles_to_autoreplace; void InitializeVehicles() @@ -921,7 +921,7 @@ Vehicle::~Vehicle() void VehicleEnteredDepotThisTick(Vehicle *v) { /* Vehicle should stop in the depot if it was in 'stopping' state */ - _vehicles_to_autoreplace[v] = !(v->vehstatus & VS_STOPPED); + _vehicles_to_autoreplace[v->index] = !(v->vehstatus & VS_STOPPED); /* We ALWAYS set the stopped state. Even when the vehicle does not plan on * stopping in the depot, so we stop it to ensure that it will not reserve @@ -1069,7 +1069,7 @@ void CallVehicleTicks() Backup cur_company(_current_company); for (auto &it : _vehicles_to_autoreplace) { - Vehicle *v = it.first; + Vehicle *v = Vehicle::Get(it.first); /* Autoreplace needs the current company set as the vehicle owner */ cur_company.Change(v->owner); @@ -1625,7 +1625,7 @@ void VehicleEnterDepot(Vehicle *v) cur_company.Restore(); if (cost.Failed()) { - _vehicles_to_autoreplace[v] = false; + _vehicles_to_autoreplace[v->index] = false; if (v->owner == _local_company) { /* Notify the user that we stopped the vehicle */ SetDParam(0, v->index); @@ -1647,7 +1647,7 @@ void VehicleEnterDepot(Vehicle *v) } if (v->current_order.GetDepotActionType() & ODATFB_HALT) { /* Vehicles are always stopped on entering depots. Do not restart this one. */ - _vehicles_to_autoreplace[v] = false; + _vehicles_to_autoreplace[v->index] = false; /* Invalidate last_loading_station. As the link from the station * before the stop to the station after the stop can't be predicted * we shouldn't construct it when the vehicle visits the next stop. */ From 0b9029b69c45553a9c8858b38cbd5764e8b0ea60 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 17 Apr 2024 02:14:25 +0100 Subject: [PATCH 321/695] Fix: Station/industry nearby list checks in CheckCaches --- src/openttd.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index 898ea24832..4314f5a97d 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1362,7 +1362,10 @@ static void CheckCaches() for (Town *t : Town::Iterate()) old_town_stations_near.push_back(t->stations_near); std::vector old_industry_stations_near; - for (Industry *ind : Industry::Iterate()) old_industry_stations_near.push_back(ind->stations_near); + for (Industry *ind : Industry::Iterate()) old_industry_stations_near.push_back(ind->stations_near); + + std::vector old_station_industries_near; + for (Station *st : Station::Iterate()) old_station_industries_near.push_back(st->industries_near); for (Station *st : Station::Iterate()) { for (GoodsEntry &ge : st->goods) { @@ -1388,13 +1391,17 @@ static void CheckCaches() Debug(desync, 2, "docking tile mismatch: tile {}", tile); } } + } - /* Check industries_near */ - IndustryList industries_near = st->industries_near; - st->RecomputeCatchment(); - if (st->industries_near != industries_near) { + Station::RecomputeCatchmentForAll(); + + /* Check industries_near */ + i = 0; + for (Station *st : Station::Iterate()) { + if (st->industries_near != old_station_industries_near[i]) { Debug(desync, 2, "station industries near mismatch: station {}", st->index); } + i++; } /* Check stations_near */ From 824687d1f0e090474922e0c21bae26b88409f8e9 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Wed, 17 Apr 2024 14:42:49 -0400 Subject: [PATCH 322/695] Codefix: Don't mix signed and unsigned ints in unbunching calculations (#12514) --- src/vehicle.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 748ad84b7d..e441d3366d 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -2512,7 +2512,7 @@ void Vehicle::LeaveUnbunchingDepot() SetWindowDirty(WC_VEHICLE_TIMETABLE, this->index); /* Find the average travel time of vehicles that we share orders with. */ - uint num_vehicles = 0; + int num_vehicles = 0; TimerGameTick::Ticks total_travel_time = 0; Vehicle *u = this->FirstShared(); @@ -2525,10 +2525,10 @@ void Vehicle::LeaveUnbunchingDepot() } /* Make sure we cannot divide by 0. */ - num_vehicles = std::max(num_vehicles, 1u); + num_vehicles = std::max(num_vehicles, 1); /* Calculate the separation by finding the average travel time, then calculating equal separation (minimum 1 tick) between vehicles. */ - TimerGameTick::Ticks separation = std::max((total_travel_time / num_vehicles / num_vehicles), 1u); + TimerGameTick::Ticks separation = std::max((total_travel_time / num_vehicles / num_vehicles), 1); TimerGameTick::TickCounter next_departure = TimerGameTick::counter + separation; /* Set the departure time of all vehicles that we share orders with. */ From 5878d09ef268c3a3b82c02703e312d665541dcfb Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Wed, 17 Apr 2024 15:03:53 -0400 Subject: [PATCH 323/695] Fix: Smooth outliers in unbunching round trip calculations (#12513) --- src/vehicle.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index e441d3366d..12941e7e83 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1666,7 +1666,14 @@ void VehicleEnterDepot(Vehicle *v) /* If we've entered our unbunching depot, record the round trip duration. */ if (v->current_order.GetDepotActionType() & ODATFB_UNBUNCH && v->depot_unbunching_last_departure > 0) { - v->round_trip_time = (TimerGameTick::counter - v->depot_unbunching_last_departure); + TimerGameTick::Ticks measured_round_trip = TimerGameTick::counter - v->depot_unbunching_last_departure; + if (v->round_trip_time == 0) { + /* This might be our first round trip. */ + v->round_trip_time = measured_round_trip; + } else { + /* If we have a previous trip, smooth the effects of outlier trip calculations caused by jams or other interference. */ + v->round_trip_time = Clamp(measured_round_trip, (v->round_trip_time / 2), ClampTo(v->round_trip_time * 2)); + } } v->current_order.MakeDummy(); From a02da5476ee7d9abf8708de0649a2dc6c662a56a Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Wed, 17 Apr 2024 15:04:16 -0400 Subject: [PATCH 324/695] Fix: Don't show train waiting for unbunching as waiting for free path (#12515) --- src/vehicle_gui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 58ee59459e..6ec093a182 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -3118,12 +3118,12 @@ public: } else { // no train str = STR_VEHICLE_STATUS_STOPPED; } + } else if (v->IsInDepot() && v->IsWaitingForUnbunching()) { + str = STR_VEHICLE_STATUS_WAITING_UNBUNCHING; } else if (v->type == VEH_TRAIN && HasBit(Train::From(v)->flags, VRF_TRAIN_STUCK) && !v->current_order.IsType(OT_LOADING)) { str = STR_VEHICLE_STATUS_TRAIN_STUCK; } else if (v->type == VEH_AIRCRAFT && HasBit(Aircraft::From(v)->flags, VAF_DEST_TOO_FAR) && !v->current_order.IsType(OT_LOADING)) { str = STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR; - } else if (v->IsInDepot() && v->IsWaitingForUnbunching()) { - str = STR_VEHICLE_STATUS_WAITING_UNBUNCHING; } else { // vehicle is in a "normal" state, show current order if (mouse_over_start_stop) { if (v->vehstatus & VS_STOPPED) { From 1005c86c62f9bedc20102887bfc57131b26a6ed0 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Wed, 17 Apr 2024 21:49:55 +0200 Subject: [PATCH 325/695] Codechange: record cache warnings with a "warning" prefix (#12518) --- src/network/network.cpp | 3 ++- src/newgrf_storage.cpp | 2 +- src/openttd.cpp | 24 ++++++++++++------------ src/pathfinder/yapf/yapf_rail.cpp | 8 ++++---- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/network/network.cpp b/src/network/network.cpp index 2b0a79ba16..f97a6c47b0 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -1210,7 +1210,8 @@ void NetworkGameLoop() assert(ret == 4); check_sync_state = true; } else if (strncmp(p, "msg: ", 5) == 0 || strncmp(p, "client: ", 8) == 0 || - strncmp(p, "load: ", 6) == 0 || strncmp(p, "save: ", 6) == 0) { + strncmp(p, "load: ", 6) == 0 || strncmp(p, "save: ", 6) == 0 || + strncmp(p, "warning: ", 9) == 0) { /* A message that is not very important to the log playback, but part of the log. */ #ifndef DEBUG_FAILED_DUMP_COMMANDS } else if (strncmp(p, "cmdf: ", 6) == 0) { diff --git a/src/newgrf_storage.cpp b/src/newgrf_storage.cpp index b071c3c743..ff309a66df 100644 --- a/src/newgrf_storage.cpp +++ b/src/newgrf_storage.cpp @@ -91,7 +91,7 @@ void AddChangedPersistentStorage(BasePersistentStorageArray *storage) /* Discard all temporary changes */ for (auto &it : *_changed_storage_arrays) { - Debug(desync, 1, "Discarding persistent storage changes: Feature {}, GrfID {:08X}, Tile {}", it->feature, BSWAP32(it->grfid), it->tile); + Debug(desync, 2, "warning: discarding persistent storage changes: Feature {}, GrfID {:08X}, Tile {}", it->feature, BSWAP32(it->grfid), it->tile); it->ClearChanges(); } _changed_storage_arrays->clear(); diff --git a/src/openttd.cpp b/src/openttd.cpp index 4314f5a97d..fc6e60c4b1 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1248,7 +1248,7 @@ static void CheckCaches() uint i = 0; for (Town *t : Town::Iterate()) { if (MemCmpT(old_town_caches.data() + i, &t->cache) != 0) { - Debug(desync, 2, "town cache mismatch: town {}", t->index); + Debug(desync, 2, "warning: town cache mismatch: town {}", t->index); } i++; } @@ -1262,7 +1262,7 @@ static void CheckCaches() i = 0; for (const Company *c : Company::Iterate()) { if (MemCmpT(old_infrastructure.data() + i, &c->infrastructure) != 0) { - Debug(desync, 2, "infrastructure cache mismatch: company {}", c->index); + Debug(desync, 2, "warning: infrastructure cache mismatch: company {}", c->index); } i++; } @@ -1318,23 +1318,23 @@ static void CheckCaches() for (const Vehicle *u = v; u != nullptr; u = u->Next()) { FillNewGRFVehicleCache(u); if (memcmp(&grf_cache[length], &u->grf_cache, sizeof(NewGRFCache)) != 0) { - Debug(desync, 2, "newgrf cache mismatch: type {}, vehicle {}, company {}, unit number {}, wagon {}", v->type, v->index, v->owner, v->unitnumber, length); + Debug(desync, 2, "warning: newgrf cache mismatch: type {}, vehicle {}, company {}, unit number {}, wagon {}", v->type, v->index, v->owner, v->unitnumber, length); } if (memcmp(&veh_cache[length], &u->vcache, sizeof(VehicleCache)) != 0) { - Debug(desync, 2, "vehicle cache mismatch: type {}, vehicle {}, company {}, unit number {}, wagon {}", v->type, v->index, v->owner, v->unitnumber, length); + Debug(desync, 2, "warning: vehicle cache mismatch: type {}, vehicle {}, company {}, unit number {}, wagon {}", v->type, v->index, v->owner, v->unitnumber, length); } switch (u->type) { case VEH_TRAIN: if (memcmp(&gro_cache[length], &Train::From(u)->gcache, sizeof(GroundVehicleCache)) != 0) { - Debug(desync, 2, "train ground vehicle cache mismatch: vehicle {}, company {}, unit number {}, wagon {}", v->index, v->owner, v->unitnumber, length); + Debug(desync, 2, "warning: train ground vehicle cache mismatch: vehicle {}, company {}, unit number {}, wagon {}", v->index, v->owner, v->unitnumber, length); } if (memcmp(&tra_cache[length], &Train::From(u)->tcache, sizeof(TrainCache)) != 0) { - Debug(desync, 2, "train cache mismatch: vehicle {}, company {}, unit number {}, wagon {}", v->index, v->owner, v->unitnumber, length); + Debug(desync, 2, "warning: train cache mismatch: vehicle {}, company {}, unit number {}, wagon {}", v->index, v->owner, v->unitnumber, length); } break; case VEH_ROAD: if (memcmp(&gro_cache[length], &RoadVehicle::From(u)->gcache, sizeof(GroundVehicleCache)) != 0) { - Debug(desync, 2, "road vehicle ground vehicle cache mismatch: vehicle {}, company {}, unit number {}, wagon {}", v->index, v->owner, v->unitnumber, length); + Debug(desync, 2, "warning: road vehicle ground vehicle cache mismatch: vehicle {}, company {}, unit number {}, wagon {}", v->index, v->owner, v->unitnumber, length); } break; default: @@ -1384,11 +1384,11 @@ static void CheckCaches() } UpdateStationDockingTiles(st); if (ta.tile != st->docking_station.tile || ta.w != st->docking_station.w || ta.h != st->docking_station.h) { - Debug(desync, 2, "station docking mismatch: station {}, company {}", st->index, st->owner); + Debug(desync, 2, "warning: station docking mismatch: station {}, company {}", st->index, st->owner); } for (TileIndex tile : ta) { if (docking_tiles[tile] != IsDockingTile(tile)) { - Debug(desync, 2, "docking tile mismatch: tile {}", tile); + Debug(desync, 2, "warning: docking tile mismatch: tile {}", tile); } } } @@ -1399,7 +1399,7 @@ static void CheckCaches() i = 0; for (Station *st : Station::Iterate()) { if (st->industries_near != old_station_industries_near[i]) { - Debug(desync, 2, "station industries near mismatch: station {}", st->index); + Debug(desync, 2, "warning: station industries near mismatch: station {}", st->index); } i++; } @@ -1408,14 +1408,14 @@ static void CheckCaches() i = 0; for (Town *t : Town::Iterate()) { if (t->stations_near != old_town_stations_near[i]) { - Debug(desync, 2, "town stations near mismatch: town {}", t->index); + Debug(desync, 2, "warning: town stations near mismatch: town {}", t->index); } i++; } i = 0; for (Industry *ind : Industry::Iterate()) { if (ind->stations_near != old_industry_stations_near[i]) { - Debug(desync, 2, "industry stations near mismatch: industry {}", ind->index); + Debug(desync, 2, "warning: industry stations near mismatch: industry {}", ind->index); } i++; } diff --git a/src/pathfinder/yapf/yapf_rail.cpp b/src/pathfinder/yapf/yapf_rail.cpp index e024cee323..9580086799 100644 --- a/src/pathfinder/yapf/yapf_rail.cpp +++ b/src/pathfinder/yapf/yapf_rail.cpp @@ -241,7 +241,7 @@ public: pf2.DisableCache(true); FindDepotData result2 = pf2.FindNearestDepotTwoWay(v, t1, td1, t2, td2, max_penalty, reverse_penalty); if (result1.tile != result2.tile || (result1.reverse != result2.reverse)) { - Debug(desync, 2, "CACHE ERROR: FindNearestDepotTwoWay() = [{}, {}]", + Debug(desync, 2, "warning: FindNearestDepotTwoWay cache mismatch: {} vs {}", result1.tile != INVALID_TILE ? "T" : "F", result2.tile != INVALID_TILE ? "T" : "F"); DumpState(pf1, pf2); @@ -325,7 +325,7 @@ public: pf2.DisableCache(true); result1 = pf2.FindNearestSafeTile(v, t1, td, override_railtype, false); if (result1 != result2) { - Debug(desync, 2, "CACHE ERROR: FindSafeTile() = [{}, {}]", result2 ? "T" : "F", result1 ? "T" : "F"); + Debug(desync, 2, "warning: FindSafeTile cache mismatch: {} vs {}", result2 ? "T" : "F", result1 ? "T" : "F"); DumpState(pf1, pf2); } } @@ -409,7 +409,7 @@ public: pf2.DisableCache(true); Trackdir result2 = pf2.ChooseRailTrack(v, tile, enterdir, tracks, path_found, reserve_track, target, dest); if (result1 != result2) { - Debug(desync, 2, "CACHE ERROR: ChooseRailTrack() = [{}, {}]", result1, result2); + Debug(desync, 2, "warning: ChooseRailTrack cache mismatch: {} vs {}", result1, result2); DumpState(pf1, pf2); } } @@ -476,7 +476,7 @@ public: pf2.DisableCache(true); bool result2 = pf2.CheckReverseTrain(v, t1, td1, t2, td2, reverse_penalty); if (result1 != result2) { - Debug(desync, 2, "CACHE ERROR: CheckReverseTrain() = [{}, {}]", result1 ? "T" : "F", result2 ? "T" : "F"); + Debug(desync, 2, "warning: CheckReverseTrain cache mismatch: {} vs {}", result1 ? "T" : "F", result2 ? "T" : "F"); DumpState(pf1, pf2); } } From a09749f6a69fbf83a8b38f778058b43af4c7f41f Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Wed, 17 Apr 2024 21:51:36 +0200 Subject: [PATCH 326/695] Codefix: don't send desync=0 log messages to commands.log (#12517) They are only used during replay, and you want to see those in the console; not in the log. --- src/debug.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/debug.cpp b/src/debug.cpp index 02150379f7..d12265a099 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -110,7 +110,7 @@ void DumpDebugFacilityNames(std::back_insert_iterator &output_itera */ void DebugPrint(const char *category, int level, const std::string &message) { - if (strcmp(category, "desync") == 0) { + if (strcmp(category, "desync") == 0 && level != 0) { static FILE *f = FioFOpenFile("commands-out.log", "wb", AUTOSAVE_DIR); if (f == nullptr) return; From a0636d82006b22cc8d89cc127c78280216c485d2 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Wed, 17 Apr 2024 22:01:58 +0200 Subject: [PATCH 327/695] Codechange: use infinite-fast-forward when rerunning command-log (#12519) --- src/network/network.cpp | 10 ++++++++-- src/network/network_internal.h | 13 ------------- src/video/dedicated_v.cpp | 1 - src/video/video_driver.hpp | 7 +++++++ 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/network/network.cpp b/src/network/network.cpp index f97a6c47b0..15f77a84d2 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -37,6 +37,9 @@ #include "../gfx_func.h" #include "../error.h" #include "../misc_cmd.h" +#ifdef DEBUG_DUMP_COMMANDS +# include "../fileio_func.h" +#endif #include #include #include @@ -44,8 +47,11 @@ #include "../safeguards.h" #ifdef DEBUG_DUMP_COMMANDS -#include "../fileio_func.h" -/** When running the server till the wait point, run as fast as we can! */ +/** Helper variable to make the dedicated server go fast until the (first) join. + * Used to load the desync debug logs, i.e. for reproducing a desync. + * There's basically no need to ever enable this, unless you really know what + * you are doing, i.e. debugging a desync. + * See docs/desync.txt for details. */ bool _ddc_fastforward = true; #endif /* DEBUG_DUMP_COMMANDS */ diff --git a/src/network/network_internal.h b/src/network/network_internal.h index 66dea11be4..35adc68983 100644 --- a/src/network/network_internal.h +++ b/src/network/network_internal.h @@ -37,19 +37,6 @@ #define NETWORK_SEND_DOUBLE_SEED #endif /* RANDOM_DEBUG */ -/** - * Helper variable to make the dedicated server go fast until the (first) join. - * Used to load the desync debug logs, i.e. for reproducing a desync. - * There's basically no need to ever enable this, unless you really know what - * you are doing, i.e. debugging a desync. - * See docs/desync.txt for details. - */ -#ifdef DEBUG_DUMP_COMMANDS -extern bool _ddc_fastforward; -#else -#define _ddc_fastforward (false) -#endif /* DEBUG_DUMP_COMMANDS */ - typedef class ServerNetworkGameSocketHandler NetworkClientSocket; /** Status of the clients during joining. */ diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp index c0c0fa2278..c620f44110 100644 --- a/src/video/dedicated_v.cpp +++ b/src/video/dedicated_v.cpp @@ -219,7 +219,6 @@ void VideoDriver_Dedicated::MainLoop() if (!_dedicated_forks) DedicatedHandleKeyInput(); this->DrainCommandQueue(); - ChangeGameSpeed(_ddc_fastforward); this->Tick(); this->SleepTillNextTick(); } diff --git a/src/video/video_driver.hpp b/src/video/video_driver.hpp index 874198d465..72731f0113 100644 --- a/src/video/video_driver.hpp +++ b/src/video/video_driver.hpp @@ -16,6 +16,7 @@ #include "../gfx_func.h" #include "../settings_type.h" #include "../zoom_type.h" +#include "../network/network_func.h" #include #include #include @@ -311,6 +312,12 @@ protected: std::chrono::steady_clock::duration GetGameInterval() { +#ifdef DEBUG_DUMP_COMMANDS + /* When replaying, run as fast as we can. */ + extern bool _ddc_fastforward; + if (_ddc_fastforward) return std::chrono::microseconds(0); +#endif /* DEBUG_DUMP_COMMANDS */ + /* If we are paused, run on normal speed. */ if (_pause_mode) return std::chrono::milliseconds(MILLISECONDS_PER_TICK); /* Infinite speed, as quickly as you can. */ From 07b162ffc417962a826b81000c50504f580e9e12 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Wed, 17 Apr 2024 22:05:45 +0200 Subject: [PATCH 328/695] Codechange: skip all commands of the past during desync replay (#12520) --- src/network/network.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/network/network.cpp b/src/network/network.cpp index 15f77a84d2..3cd1529bdb 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -1157,6 +1157,16 @@ void NetworkGameLoop() } } + /* Skip all entries in the command-log till we caught up with the current game again. */ + if (TimerGameEconomy::date > next_date || (TimerGameEconomy::date == next_date && TimerGameEconomy::date_fract > next_date_fract)) { + Debug(desync, 0, "Skipping to next command at {:08x}:{:02x}", next_date, next_date_fract); + if (cp != nullptr) { + delete cp; + cp = nullptr; + } + check_sync_state = false; + } + if (cp != nullptr || check_sync_state) break; char buff[4096]; From f7bd08001546a078ec6df014ccb77610bf8bc7eb Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Wed, 17 Apr 2024 22:36:08 +0200 Subject: [PATCH 329/695] Codechange: improve desync documentation (#12521) --- docs/desync.md | 31 +++++++++++++++---------------- src/network/network.cpp | 2 +- src/network/network_func.h | 2 +- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/docs/desync.md b/docs/desync.md index 20003c9810..afbebb11c5 100644 --- a/docs/desync.md +++ b/docs/desync.md @@ -195,10 +195,11 @@ Last updated: 2014-02-23 'src/network/network_func.h'. (DEBUG_FAILED_DUMP_COMMANDS is explained later) - Put the 'commands-out.log' into the root save folder, and rename - it to 'commands.log'. - - Run 'openttd -D -d desync=3 -g startsavegame.sav'. - This replays the server log and creates new 'commands-out.log' - and 'dmp_cmds_*.sav' in your autosave folder. + it to 'commands.log'. Strip everything and including the "newgame" + entry from the log. + - Run 'openttd -D -d desync=0 -g startsavegame.sav'. + This replays the server log. Use "-d desync=3" to also create a + new 'commands-out.log' and 'dmp_cmds_*.sav' in your autosave folder. ## 3.2) Evaluation of the replay @@ -226,7 +227,7 @@ Last updated: 2014-02-23 savegames with your own ones from the replay. You can also comment/disable the 'NOT_REACHED' mentioned above, to get another 'dmp_cmds_*.sav' from the replay after the mismatch has already been detected. - See Section 3.2 on how to compare savegames. + See Section 3.3 on how to compare savegames. If the saves differ you have located the Desync between the last dmp_cmds that match and the first one that does not. The difference of the saves may point you in the direction of what causes it. @@ -252,16 +253,14 @@ Last updated: 2014-02-23 are replayed. Their internal state will thus not change in the replay and will differ. - To compare savegame more semantically, there exist some ugly hackish - tools at: - http://devs.openttd.org/~frosch/texts/zpipe.c - http://devs.openttd.org/~frosch/texts/printhunk.c + To compare savegame more semantically, easiest is to first export them + to a JSON format with for example: - The first one decompresses OpenTTD savegames. The second one creates - a textual representation of an uncompressed savegame, by parsing hunks - and arrays and such. With both tools you need to be a bit careful - since they work on stdin and stdout, which may not deal well with - binary data. + https://github.com/TrueBrain/OpenTTD-savegame-reader - If you have the textual representation of the savegames, you can - compare them with regular diff tools. + By running: + + python -m savegame_reader --export-json dmp_cmds_NNN.sav | jq . > NNN.json + + Now you can use any (JSON) diff tool to compare the two savegames in a + somewhat human readable way. diff --git a/src/network/network.cpp b/src/network/network.cpp index 3cd1529bdb..5eb64da827 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -51,7 +51,7 @@ * Used to load the desync debug logs, i.e. for reproducing a desync. * There's basically no need to ever enable this, unless you really know what * you are doing, i.e. debugging a desync. - * See docs/desync.txt for details. */ + * See docs/desync.md for details. */ bool _ddc_fastforward = true; #endif /* DEBUG_DUMP_COMMANDS */ diff --git a/src/network/network_func.h b/src/network/network_func.h index 66b4660169..4a31943e63 100644 --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -12,7 +12,7 @@ /** * Uncomment the following define to enable command replaying. - * See docs/desync.txt for details. + * See docs/desync.md for details. */ // #define DEBUG_DUMP_COMMANDS // #define DEBUG_FAILED_DUMP_COMMANDS From 83d99ec11d30cf4784eedeeeb088b4fb35b76555 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 17 Apr 2024 21:38:11 +0100 Subject: [PATCH 330/695] Fix #12506: Update station/industry nearby lists in BuildOilRig (#12511) --- src/station_cmd.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index c1c81f893e..62ef3128b3 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -4336,6 +4336,19 @@ void BuildOilRig(TileIndex tile) st->rect.BeforeAddTile(tile, StationRect::ADD_FORCE); st->UpdateVirtCoord(); + + /* An industry tile has now been replaced with a station tile, this may change the overlap between station catchments and industry tiles. + * Recalculate the station catchment for all stations currently in the industry's nearby list. + * Clear the industry's station nearby list first because Station::RecomputeCatchment cannot remove nearby industries in this case. */ + if (_settings_game.station.serve_neutral_industries) { + StationList nearby = std::move(st->industry->stations_near); + st->industry->stations_near.clear(); + for (Station *near : nearby) { + near->RecomputeCatchment(true); + UpdateStationAcceptance(near, true); + } + } + st->RecomputeCatchment(); UpdateStationAcceptance(st, false); } From 6458980413da684afb77f6b5157b323e657a54bf Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 17 Apr 2024 21:55:19 +0100 Subject: [PATCH 331/695] Change: Draw group hierarchy tree lines. (#12522) --- src/group_gui.cpp | 37 ++++++++++++++++++++++++++++++++----- src/group_gui.h | 5 +++-- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 40924c18d8..2fe19d2c50 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -118,7 +118,7 @@ static constexpr NWidgetPart _nested_group_widgets[] = { * @param parent Current tree parent (set by self with recursion). * @param indent Current tree indentation level (set by self with recursion). */ -static void GuiGroupListAddChildren(GUIGroupList &dst, const GUIGroupList &src, bool fold, GroupID parent, int indent) +static void GuiGroupListAddChildren(GUIGroupList &dst, const GUIGroupList &src, bool fold, GroupID parent = INVALID_GROUP, uint8_t indent = 0) { for (const auto &item : src) { if (item.group->parent != parent) continue; @@ -134,6 +134,16 @@ static void GuiGroupListAddChildren(GUIGroupList &dst, const GUIGroupList &src, GuiGroupListAddChildren(dst, src, fold, item.group->index, indent + 1); } } + + if (indent > 0 || dst.empty()) return; + + /* Hierarchy is complete, traverse in reverse to find where indentation levels continue. */ + uint16_t level_mask = 0; + for (auto it = std::rbegin(dst); std::next(it) != std::rend(dst); ++it) { + auto next_it = std::next(it); + SB(level_mask, it->indent, 1, it->indent <= next_it->indent); + next_it->level_mask = level_mask; + } } /** @@ -274,7 +284,7 @@ private: * @param protection Whether autoreplace protection is set. * @param has_children Whether the group has children and should have a fold / unfold button. */ - void DrawGroupInfo(int y, int left, int right, GroupID g_id, int indent = 0, bool protection = false, bool has_children = false) const + void DrawGroupInfo(int y, int left, int right, GroupID g_id, uint16_t level_mask = 0, uint8_t indent = 0, bool protection = false, bool has_children = false) const { /* Highlight the group if a vehicle is dragged over it */ if (g_id == this->group_over) { @@ -288,10 +298,27 @@ private: const GroupStatistics &stats = GroupStatistics::Get(this->vli.company, g_id, this->vli.vtype); bool rtl = _current_text_dir == TD_RTL; + const int offset = (rtl ? -(int)this->column_size[VGC_FOLD].width : (int)this->column_size[VGC_FOLD].width) / 2; + const int level_width = rtl ? -WidgetDimensions::scaled.hsep_indent : WidgetDimensions::scaled.hsep_indent; + const int linecolour = GetColourGradient(COLOUR_ORANGE, SHADE_NORMAL); + + if (indent > 0) { + /* Draw tree continuation lines. */ + int tx = (rtl ? right - WidgetDimensions::scaled.framerect.right : left + WidgetDimensions::scaled.framerect.left) + offset; + for (uint lvl = 1; lvl <= indent; ++lvl) { + if (HasBit(level_mask, lvl)) GfxDrawLine(tx, y, tx, y + this->tiny_step_height - 1, linecolour, WidgetDimensions::scaled.fullbevel.top); + if (lvl < indent) tx += level_width; + } + /* Draw our node in the tree. */ + int ycentre = y + this->tiny_step_height / 2 - 1; + if (!HasBit(level_mask, indent)) GfxDrawLine(tx, y, tx, ycentre, linecolour, WidgetDimensions::scaled.fullbevel.top); + GfxDrawLine(tx, ycentre, tx + offset - (rtl ? -1 : 1), ycentre, linecolour, WidgetDimensions::scaled.fullbevel.top); + } + /* draw fold / unfold button */ int x = rtl ? right - WidgetDimensions::scaled.framerect.right - this->column_size[VGC_FOLD].width + 1 : left + WidgetDimensions::scaled.framerect.left; if (has_children) { - DrawSprite(Group::Get(g_id)->folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED, PAL_NONE, rtl ? x - indent : x + indent, y + (this->tiny_step_height - this->column_size[VGC_FOLD].height) / 2); + DrawSprite(Group::Get(g_id)->folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED, PAL_NONE, x + indent * level_width, y + (this->tiny_step_height - this->column_size[VGC_FOLD].height) / 2); } /* draw group name */ @@ -305,7 +332,7 @@ private: str = STR_GROUP_NAME; } x = rtl ? x - WidgetDimensions::scaled.hsep_normal - this->column_size[VGC_NAME].width : x + WidgetDimensions::scaled.hsep_normal + this->column_size[VGC_FOLD].width; - DrawString(x + (rtl ? 0 : indent), x + this->column_size[VGC_NAME].width - 1 - (rtl ? indent : 0), y + (this->tiny_step_height - this->column_size[VGC_NAME].height) / 2, str, colour); + DrawString(x + (rtl ? 0 : indent * WidgetDimensions::scaled.hsep_indent), x + this->column_size[VGC_NAME].width - 1 - (rtl ? indent * WidgetDimensions::scaled.hsep_indent : 0), y + (this->tiny_step_height - this->column_size[VGC_NAME].height) / 2, str, colour); /* draw autoreplace protection */ x = rtl ? x - WidgetDimensions::scaled.hsep_wide - this->column_size[VGC_PROTECT].width : x + WidgetDimensions::scaled.hsep_wide + this->column_size[VGC_NAME].width; @@ -624,7 +651,7 @@ public: assert(g->owner == this->owner); - DrawGroupInfo(y1, r.left, r.right, g->index, it->indent * WidgetDimensions::scaled.hsep_indent, HasBit(g->flags, GroupFlags::GF_REPLACE_PROTECTION), g->folded || (std::next(it) != std::end(this->groups) && std::next(it)->indent > it->indent)); + DrawGroupInfo(y1, r.left, r.right, g->index, it->level_mask, it->indent, HasBit(g->flags, GroupFlags::GF_REPLACE_PROTECTION), g->folded || (std::next(it) != std::end(this->groups) && std::next(it)->indent > it->indent)); y1 += this->tiny_step_height; } diff --git a/src/group_gui.h b/src/group_gui.h index ec5f790d84..d2fb2f71a0 100644 --- a/src/group_gui.h +++ b/src/group_gui.h @@ -19,9 +19,10 @@ void DeleteGroupHighlightOfVehicle(const Vehicle *v); struct GUIGroupListItem { const Group *group; - int8_t indent; ///< Display indentation level. + uint8_t indent; ///< Display indentation level. + uint16_t level_mask; ///< Bitmask of indentation continuation. - constexpr GUIGroupListItem(const Group *group, int8_t indent) : group(group), indent(indent) {} + constexpr GUIGroupListItem(const Group *group, int8_t indent) : group(group), indent(indent), level_mask(0) {} }; using GUIGroupList = GUIList; From 5a523cf212f24677dea0630f4119c8b8e2369d80 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 18 Apr 2024 00:04:45 +0100 Subject: [PATCH 332/695] Codechange: Simplify FioCreateDirectory. `std::filesystem` provides `create_directories()` as a cross-platform way to create a directory tree. --- src/fileio.cpp | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index 79f16392ab..bcd8a530e0 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -348,24 +348,9 @@ FILE *FioFOpenFile(const std::string &filename, const char *mode, Subdirectory s */ void FioCreateDirectory(const std::string &name) { - auto p = name.find_last_of(PATHSEPCHAR); - if (p != std::string::npos) { - std::string dirname = name.substr(0, p); - DIR *dir = ttd_opendir(dirname.c_str()); - if (dir == nullptr) { - FioCreateDirectory(dirname); // Try creating the parent directory, if we couldn't open it - } else { - closedir(dir); - } - } - - /* Ignore directory creation errors; they'll surface later on, and most - * of the time they are 'directory already exists' errors anyhow. */ -#if defined(_WIN32) - CreateDirectory(OTTD2FS(name).c_str(), nullptr); -#else - mkdir(OTTD2FS(name).c_str(), 0755); -#endif + /* Ignore directory creation errors; they'll surface later on. */ + std::error_code error_code; + std::filesystem::create_directories(OTTD2FS(name), error_code); } /** From d7c547d0db4276e412e18e5610f0d45ae9a2859c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 18 Apr 2024 00:04:46 +0100 Subject: [PATCH 333/695] Codechange: Use directory_iterator to list directories in file list windows. This replaces use of custom ttd_opendir. Files are listed separately using ScanPath as that handles downloaded content. --- src/fileio.cpp | 2 -- src/fios.cpp | 63 +++++++++++++++++----------------------- src/os/unix/unix.cpp | 13 ++------- src/os/windows/win32.cpp | 22 ++++---------- 4 files changed, 33 insertions(+), 67 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index bcd8a530e0..285d7e471f 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -70,8 +70,6 @@ TarFileList _tar_filelist[NUM_SUBDIRS]; typedef std::map TarLinkList; static TarLinkList _tar_linklist[NUM_SUBDIRS]; ///< List of directory links -extern bool FiosIsValidFile(const std::string &path, const struct dirent *ent, struct stat *sb); - /** * Checks whether the given search path is a valid search path * @param sp the search path to check diff --git a/src/fios.cpp b/src/fios.cpp index 91f622f058..dd98cb6699 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -33,8 +33,7 @@ SortingBits _savegame_sort_order = SORT_BY_DATE | SORT_DESCENDING; /* OS-specific functions are taken from their respective files (win32/unix .c) */ extern bool FiosIsRoot(const std::string &path); -extern bool FiosIsValidFile(const std::string &path, const struct dirent *ent, struct stat *sb); -extern bool FiosIsHiddenFile(const struct dirent *ent); +extern bool FiosIsHiddenFile(const std::filesystem::path &path); extern void FiosGetDrives(FileList &file_list); /* get the name of an oldstyle savegame */ @@ -322,48 +321,38 @@ bool FiosFileScanner::AddFile(const std::string &filename, size_t, const std::st */ static void FiosGetFileList(SaveLoadOperation fop, bool show_dirs, FiosGetTypeAndNameProc *callback_proc, Subdirectory subdir, FileList &file_list) { - struct stat sb; - struct dirent *dirent; - DIR *dir; - FiosItem *fios; size_t sort_start; file_list.clear(); assert(_fios_path != nullptr); - /* A parent directory link exists if we are not in the root directory */ - if (show_dirs && !FiosIsRoot(*_fios_path)) { - fios = &file_list.emplace_back(); - fios->type = FIOS_TYPE_PARENT; - fios->mtime = 0; - fios->name = ".."; - SetDParamStr(0, ".."); - fios->title = GetString(STR_SAVELOAD_PARENT_DIRECTORY); - } - - /* Show subdirectories */ - if (show_dirs && (dir = ttd_opendir(_fios_path->c_str())) != nullptr) { - while ((dirent = readdir(dir)) != nullptr) { - std::string d_name = FS2OTTD(dirent->d_name); - - /* found file must be directory, but not '.' or '..' */ - if (FiosIsValidFile(*_fios_path, dirent, &sb) && S_ISDIR(sb.st_mode) && - (!FiosIsHiddenFile(dirent) || StrStartsWithIgnoreCase(PERSONAL_DIR, d_name)) && - d_name != "." && d_name != "..") { - fios = &file_list.emplace_back(); - fios->type = FIOS_TYPE_DIR; - fios->mtime = 0; - fios->name = d_name; - SetDParamStr(0, fios->name + PATHSEP); - fios->title = GetString(STR_SAVELOAD_DIRECTORY); - } - } - closedir(dir); - } - - /* Sort the subdirs always by name, ascending, remember user-sorting order */ if (show_dirs) { + /* A parent directory link exists if we are not in the root directory */ + if (!FiosIsRoot(*_fios_path)) { + FiosItem &fios = file_list.emplace_back(); + fios.type = FIOS_TYPE_PARENT; + fios.mtime = 0; + fios.name = ".."; + SetDParamStr(0, ".."); + fios.title = GetString(STR_SAVELOAD_PARENT_DIRECTORY); + } + + /* Show subdirectories */ + std::error_code error_code; + for (const auto &dir_entry : std::filesystem::directory_iterator(OTTD2FS(*_fios_path), error_code)) { + if (!dir_entry.is_directory()) continue; + if (FiosIsHiddenFile(dir_entry) && dir_entry.path().filename() != PERSONAL_DIR) continue; + + FiosItem &fios = file_list.emplace_back(); + fios.type = FIOS_TYPE_DIR; + fios.mtime = 0; + fios.name = FS2OTTD(dir_entry.path().filename()); + SetDParamStr(0, fios.name + PATHSEP); + fios.title = GetString(STR_SAVELOAD_DIRECTORY); + } + + /* Sort the subdirs always by name, ascending, remember user-sorting order */ SortingBits order = _savegame_sort_order; _savegame_sort_order = SORT_BY_NAME | SORT_ASCENDING; std::sort(file_list.begin(), file_list.end()); diff --git a/src/os/unix/unix.cpp b/src/os/unix/unix.cpp index 2583be3347..b406cbc007 100644 --- a/src/os/unix/unix.cpp +++ b/src/os/unix/unix.cpp @@ -78,18 +78,9 @@ std::optional FiosGetDiskFreeSpace(const std::string &path) return std::nullopt; } -bool FiosIsValidFile(const std::string &path, const struct dirent *ent, struct stat *sb) +bool FiosIsHiddenFile(const std::filesystem::path &path) { - assert(path.back() == PATHSEPCHAR); - if (path.size() > 2) assert(path[path.size() - 2] != PATHSEPCHAR); - std::string filename = fmt::format("{}{}", path, ent->d_name); - - return stat(filename.c_str(), sb) == 0; -} - -bool FiosIsHiddenFile(const struct dirent *ent) -{ - return ent->d_name[0] == '.'; + return path.filename().string().starts_with("."); } #ifdef WITH_ICONV diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index 18655c3d42..b956027d52 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -192,27 +192,15 @@ void FiosGetDrives(FileList &file_list) } } -bool FiosIsValidFile(const std::string &, const struct dirent *ent, struct stat *sb) +bool FiosIsHiddenFile(const std::filesystem::path &path) { - /* hectonanoseconds between Windows and POSIX epoch */ - static const int64_t posix_epoch_hns = 0x019DB1DED53E8000LL; - const WIN32_FIND_DATA *fd = &ent->dir->fd; + UINT sem = SetErrorMode(SEM_FAILCRITICALERRORS); // Disable 'no-disk' message box. - sb->st_size = ((uint64_t) fd->nFileSizeHigh << 32) + fd->nFileSizeLow; - /* UTC FILETIME to seconds-since-1970 UTC - * we just have to subtract POSIX epoch and scale down to units of seconds. - * http://www.gamedev.net/community/forums/topic.asp?topic_id=294070&whichpage=1� - * XXX - not entirely correct, since filetimes on FAT aren't UTC but local, - * this won't entirely be correct, but we use the time only for comparison. */ - sb->st_mtime = (time_t)((*(const uint64_t*)&fd->ftLastWriteTime - posix_epoch_hns) / 1E7); - sb->st_mode = (fd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)? S_IFDIR : S_IFREG; + DWORD attributes = GetFileAttributes(path.c_str()); - return true; -} + SetErrorMode(sem); // Restore previous setting. -bool FiosIsHiddenFile(const struct dirent *ent) -{ - return (ent->dir->fd.dwFileAttributes & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM)) != 0; + return (attributes & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM)) != 0; } std::optional FiosGetDiskFreeSpace(const std::string &path) From 42523379d983a693f8a358f79229951563057997 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 18 Apr 2024 00:04:46 +0100 Subject: [PATCH 334/695] Codechange: Use directory_iterator in ScanPath. Replaces use of custom ttd_opendir. --- src/fileio.cpp | 58 +++++++++++++++++++---------------------------- src/fileio_func.h | 4 ++-- src/fios.cpp | 4 ++-- 3 files changed, 27 insertions(+), 39 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index 285d7e471f..803baa60f2 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -1134,12 +1134,13 @@ std::unique_ptr ReadFileToMem(const std::string &filename, size_t &lenp, * @param filename The filename to look in for the extension. * @return True iff the extension is nullptr, or the filename ends with it. */ -static bool MatchesExtension(const char *extension, const char *filename) +static bool MatchesExtension(std::string_view extension, const std::string &filename) { - if (extension == nullptr) return true; + if (extension.empty()) return true; + if (filename.length() < extension.length()) return false; - const char *ext = strrchr(filename, extension[0]); - return ext != nullptr && StrEqualsIgnoreCase(ext, extension); + std::string_view filename_sv = filename; // String view to avoid making another copy of the substring. + return StrCompareIgnoreCase(extension, filename_sv.substr(filename_sv.length() - extension.length())) == 0; } /** @@ -1151,36 +1152,24 @@ static bool MatchesExtension(const char *extension, const char *filename) * @param basepath_length from where in the path are we 'based' on the search path * @param recursive whether to recursively search the sub directories */ -static uint ScanPath(FileScanner *fs, const char *extension, const char *path, size_t basepath_length, bool recursive) +static uint ScanPath(FileScanner *fs, std::string_view extension, const std::filesystem::path &path, size_t basepath_length, bool recursive) { uint num = 0; - struct stat sb; - struct dirent *dirent; - DIR *dir; - if (path == nullptr || (dir = ttd_opendir(path)) == nullptr) return 0; - - while ((dirent = readdir(dir)) != nullptr) { - std::string d_name = FS2OTTD(dirent->d_name); - - if (!FiosIsValidFile(path, dirent, &sb)) continue; - - std::string filename(path); - filename += d_name; - - if (S_ISDIR(sb.st_mode)) { - /* Directory */ + std::error_code error_code; + for (const auto &dir_entry : std::filesystem::directory_iterator(path, error_code)) { + if (dir_entry.is_directory()) { if (!recursive) continue; - if (d_name == "." || d_name == "..") continue; - AppendPathSeparator(filename); - num += ScanPath(fs, extension, filename.c_str(), basepath_length, recursive); - } else if (S_ISREG(sb.st_mode)) { - /* File */ - if (MatchesExtension(extension, filename.c_str()) && fs->AddFile(filename, basepath_length, {})) num++; + num += ScanPath(fs, extension, dir_entry.path(), basepath_length, recursive); + } else if (dir_entry.is_regular_file()) { + std::string file = FS2OTTD(dir_entry.path()); + if (!MatchesExtension(extension, file)) continue; + if (fs->AddFile(file, basepath_length, {})) num++; } } - - closedir(dir); + if (error_code) { + Debug(misc, 9, "Unable to read directory {}: {}", path.string(), error_code.message()); + } return num; } @@ -1191,12 +1180,11 @@ static uint ScanPath(FileScanner *fs, const char *extension, const char *path, s * @param extension the extension of files to search for. * @param tar the tar to search in. */ -static uint ScanTar(FileScanner *fs, const char *extension, const TarFileList::value_type &tar) +static uint ScanTar(FileScanner *fs, std::string_view extension, const TarFileList::value_type &tar) { uint num = 0; - const auto &filename = tar.first; - if (MatchesExtension(extension, filename.c_str()) && fs->AddFile(filename, 0, tar.second.tar_filename)) num++; + if (MatchesExtension(extension, tar.first) && fs->AddFile(tar.first, 0, tar.second.tar_filename)) num++; return num; } @@ -1210,7 +1198,7 @@ static uint ScanTar(FileScanner *fs, const char *extension, const TarFileList::v * @return the number of found files, i.e. the number of times that * AddFile returned true. */ -uint FileScanner::Scan(const char *extension, Subdirectory sd, bool tars, bool recursive) +uint FileScanner::Scan(std::string_view extension, Subdirectory sd, bool tars, bool recursive) { this->subdir = sd; @@ -1221,7 +1209,7 @@ uint FileScanner::Scan(const char *extension, Subdirectory sd, bool tars, bool r if (sp == SP_WORKING_DIR && !_do_scan_working_directory) continue; std::string path = FioGetDirectory(sp, sd); - num += ScanPath(this, extension, path.c_str(), path.size(), recursive); + num += ScanPath(this, extension, OTTD2FS(path), path.size(), recursive); } if (tars && sd != NO_DIRECTORY) { @@ -1252,9 +1240,9 @@ uint FileScanner::Scan(const char *extension, Subdirectory sd, bool tars, bool r * @return the number of found files, i.e. the number of times that * AddFile returned true. */ -uint FileScanner::Scan(const char *extension, const std::string &directory, bool recursive) +uint FileScanner::Scan(const std::string_view extension, const std::string &directory, bool recursive) { std::string path(directory); AppendPathSeparator(path); - return ScanPath(this, extension, path.c_str(), path.size(), recursive); + return ScanPath(this, extension, OTTD2FS(path), path.size(), recursive); } diff --git a/src/fileio_func.h b/src/fileio_func.h index 2a13a454d4..9e85f1f8c0 100644 --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -42,8 +42,8 @@ public: /** Destruct the proper one... */ virtual ~FileScanner() = default; - uint Scan(const char *extension, Subdirectory sd, bool tars = true, bool recursive = true); - uint Scan(const char *extension, const std::string &directory, bool recursive = true); + uint Scan(std::string_view extension, Subdirectory sd, bool tars = true, bool recursive = true); + uint Scan(std::string_view extension, const std::string &directory, bool recursive = true); /** * Add a file with the given filename. diff --git a/src/fios.cpp b/src/fios.cpp index dd98cb6699..f5523c85aa 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -365,9 +365,9 @@ static void FiosGetFileList(SaveLoadOperation fop, bool show_dirs, FiosGetTypeAn /* Show files */ FiosFileScanner scanner(fop, callback_proc, file_list); if (subdir == NO_DIRECTORY) { - scanner.Scan(nullptr, *_fios_path, false); + scanner.Scan({}, *_fios_path, false); } else { - scanner.Scan(nullptr, subdir, true, true); + scanner.Scan({}, subdir, true, true); } std::sort(file_list.begin() + sort_start, file_list.end()); From 63ce81570ce2f6ed4be53ca73bd0fbf8c358088b Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 18 Apr 2024 00:04:47 +0100 Subject: [PATCH 335/695] Remove: Custom opendir implementation for Windows no longer needed. std::filesystem::directory_iterator is now used instead. --- src/fileio_func.h | 34 ------------ src/os/windows/win32.cpp | 112 --------------------------------------- 2 files changed, 146 deletions(-) diff --git a/src/fileio_func.h b/src/fileio_func.h index 9e85f1f8c0..eaa6f76164 100644 --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -81,40 +81,6 @@ public: DECLARE_ENUM_AS_BIT_SET(TarScanner::Mode) -/* Implementation of opendir/readdir/closedir for Windows */ -#if defined(_WIN32) -struct DIR; - -struct dirent { // XXX - only d_name implemented - wchar_t *d_name; // name of found file - /* little hack which will point to parent DIR struct which will - * save us a call to GetFileAttributes if we want information - * about the file (for example in function fio_bla) */ - DIR *dir; -}; - -DIR *opendir(const wchar_t *path); -struct dirent *readdir(DIR *d); -int closedir(DIR *d); -#else -/* Use system-supplied opendir/readdir/closedir functions */ -# include -# include -#endif /* defined(_WIN32) */ - -/** - * A wrapper around opendir() which will convert the string from - * OPENTTD encoding to that of the filesystem. For all purposes this - * function behaves the same as the original opendir function - * @param path string to open directory of - * @return DIR pointer - */ -inline DIR *ttd_opendir(const char *path) -{ - return opendir(OTTD2FS(path).c_str()); -} - - /** Auto-close a file upon scope exit. */ class FileCloser { FILE *f; diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index b956027d52..c011e830f6 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -58,118 +58,6 @@ void OSOpenBrowser(const std::string &url) ShellExecute(GetActiveWindow(), L"open", OTTD2FS(url).c_str(), nullptr, nullptr, SW_SHOWNORMAL); } -/* Code below for windows version of opendir/readdir/closedir copied and - * modified from Jan Wassenberg's GPL implementation posted over at - * http://www.gamedev.net/community/forums/topic.asp?topic_id=364584&whichpage=1� */ - -struct DIR { - HANDLE hFind; - /* the dirent returned by readdir. - * note: having only one global instance is not possible because - * multiple independent opendir/readdir sequences must be supported. */ - dirent ent; - WIN32_FIND_DATA fd; - /* since opendir calls FindFirstFile, we need a means of telling the - * first call to readdir that we already have a file. - * that's the case iff this is true */ - bool at_first_entry; -}; - -/* suballocator - satisfies most requests with a reusable static instance. - * this avoids hundreds of alloc/free which would fragment the heap. - * To guarantee concurrency, we fall back to malloc if the instance is - * already in use (it's important to avoid surprises since this is such a - * low-level routine). */ -static DIR _global_dir; -static LONG _global_dir_is_in_use = false; - -static inline DIR *dir_calloc() -{ - DIR *d; - - if (InterlockedExchange(&_global_dir_is_in_use, true) == (LONG)true) { - d = CallocT(1); - } else { - d = &_global_dir; - memset(d, 0, sizeof(*d)); - } - return d; -} - -static inline void dir_free(DIR *d) -{ - if (d == &_global_dir) { - _global_dir_is_in_use = (LONG)false; - } else { - free(d); - } -} - -DIR *opendir(const wchar_t *path) -{ - DIR *d; - UINT sem = SetErrorMode(SEM_FAILCRITICALERRORS); // disable 'no-disk' message box - DWORD fa = GetFileAttributes(path); - - if ((fa != INVALID_FILE_ATTRIBUTES) && (fa & FILE_ATTRIBUTE_DIRECTORY)) { - d = dir_calloc(); - if (d != nullptr) { - std::wstring search_path = path; - bool slash = path[wcslen(path) - 1] == '\\'; - - /* build search path for FindFirstFile, try not to append additional slashes - * as it throws Win9x off its groove for root directories */ - if (!slash) search_path += L"\\"; - search_path += L"*"; - d->hFind = FindFirstFile(search_path.c_str(), &d->fd); - - if (d->hFind != INVALID_HANDLE_VALUE || - GetLastError() == ERROR_NO_MORE_FILES) { // the directory is empty - d->ent.dir = d; - d->at_first_entry = true; - } else { - dir_free(d); - d = nullptr; - } - } else { - errno = ENOMEM; - } - } else { - /* path not found or not a directory */ - d = nullptr; - errno = ENOENT; - } - - SetErrorMode(sem); // restore previous setting - return d; -} - -struct dirent *readdir(DIR *d) -{ - DWORD prev_err = GetLastError(); // avoid polluting last error - - if (d->at_first_entry) { - /* the directory was empty when opened */ - if (d->hFind == INVALID_HANDLE_VALUE) return nullptr; - d->at_first_entry = false; - } else if (!FindNextFile(d->hFind, &d->fd)) { // determine cause and bail - if (GetLastError() == ERROR_NO_MORE_FILES) SetLastError(prev_err); - return nullptr; - } - - /* This entry has passed all checks; return information about it. - * (note: d_name is a pointer; see struct dirent definition) */ - d->ent.d_name = d->fd.cFileName; - return &d->ent; -} - -int closedir(DIR *d) -{ - FindClose(d->hFind); - dir_free(d); - return 0; -} - bool FiosIsRoot(const std::string &file) { return file.size() == 3; // C:\... From c355e98c5899a12648e38e7fdeebbdfd2621ef52 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 18 Apr 2024 04:40:27 +0000 Subject: [PATCH 336/695] Update: Translations from eints english (au): 4 changes by krysclarke russian: 4 changes by Ln-Wolf finnish: 7 changes by hpiirai portuguese: 4 changes by azulcosta portuguese (brazilian): 5 changes by pasantoro polish: 4 changes by pAter-exe --- src/lang/brazilian_portuguese.txt | 6 +++++- src/lang/english_AU.txt | 4 ++++ src/lang/finnish.txt | 10 +++++++--- src/lang/polish.txt | 4 ++++ src/lang/portuguese.txt | 4 ++++ src/lang/russian.txt | 4 ++++ 6 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 860a5f0184..be2b27f66b 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -5282,11 +5282,15 @@ STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... veí STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... nem todos os veículos são idênticos -STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Não haverá veículos disponíveis +STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Nenhum veículo estará disponível STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Modifique a sua configuração de NewGRF STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Não existem veículos disponíveis ainda STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Inicie um novo jogo depois de {DATE_SHORT} ou utilize um NewGRF que forneça veículos iniciais +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Nenhum tipo de estrada urbana está disponível +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Modifique a sua configuração de NewGRF +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Não existem tipos de estrada urbana disponíveis ainda +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Inicie um novo jogo depois de {DATE_SHORT} ou utilize um NewGRF que forneça estradas urbanas iniciais # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Não é possível fazer o trem passar o sinal em perigo... diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index f432d6d71b..e3782bcd19 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -5286,6 +5286,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Change y STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}No vehicles are available yet STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Start a new game after {DATE_SHORT} or use a NewGRF which provides early vehicles +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}No town-buildable road types are available +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Change your NewGRF configuration +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}No town-buildable road types are available yet +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Start a new game after {DATE_SHORT} or use a NewGRF that provides early town-buildable road types # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Can't make train pass signal at danger... diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 017948e152..14a5098396 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1311,7 +1311,7 @@ STR_CONFIG_SETTING_RECESSIONS :Lamat: {STRING} STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Mikäli käytössä, taloudellinen lama voi ilmaantua ajoittain. Laman aikana kaikki tuotanto on huomattavasti alhaisempaa (palautuu normaalille tasolle laman päätyttyä) STR_CONFIG_SETTING_TRAIN_REVERSING :Estä junien kääntyminen asemilla: {STRING} -STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Mikäli käytössä, junat eivät käänny läpiajettavilla asemilla vaikka kääntymisen jälkeen saatavilla olisi lyhempi reitti +STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Mikäli käytössä, junat eivät käänny läpiajettavilla asemilla vaikka kääntymisen jälkeen tarjolla olisi lyhempi reitti STR_CONFIG_SETTING_DISASTERS :Onnettomuudet: {STRING} STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Ottaa käyttöön onnettomuudet jotka saattavat ajoittain estää tai tuhota liikennettä tai infrastruktuuria @@ -5281,11 +5281,15 @@ STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... kulk STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}… kaikki kulkuneuvot eivät ole identtisiä -STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Yhtään kulkuneuvoa ei ole saatavilla +STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Yhtään kulkuneuvoa ei ole käytettävissä STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Muuta NewGRF-asetuksiasi STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Kulkuneuvoja ei ole vielä saatavilla -STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Aloita peli {DATE_SHORT} jälkeen tai käytä NewGRF:ää joka tarjoaa aikaisempia kulkuneuvoja +STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Aloita uusi peli {DATE_SHORT} jälkeen tai käytä NewGRF:ää, joka tarjoaa varhaisia kulkuneuvoja +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Yhtään kunnan rakennettavissa olevaa tietyyppiä ei ole käytettävissä +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Muuta NewGRF-asetuksia +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Kunnan rakennettavissa olevia tietyyppejä ei ole vielä saatavilla +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Aloita uusi peli {DATE_SHORT} jälkeen tai käytä NewGRF:ää, joka tarjoaa varhaisia kunnan rakennettavissa olevia tietyyppejä # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Junaa ei voi pakottaa jatkamaan punaisen opastimen ohi... diff --git a/src/lang/polish.txt b/src/lang/polish.txt index ae307a167f..ee5ab860d3 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -5672,6 +5672,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Zmień k STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Obecnie żaden pojazd nie jest dostępny STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Zacznij grę po {DATE_SHORT} albo użyj zestawu NewGRF, który zawiera wczesne pojazdy +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Brak dostępnych typów dróg miejskich +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Zmień konfigurację NewGRF +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Brak jeszcze dostępnych typów dróg miejskich +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Rozpocznij nową grę po {DATE_SHORT} roku lub użyj NewGRF, który umożliwia wczesne budowanie dróg miejskich # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Nie można przepuścić pociągu za sygnał, niebezpieczeństwo... diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 6c7e8b5904..74c418193a 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -5287,6 +5287,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Mudar a STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Nenhum veículo ainda disponível STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Começar um novo jogo depois de {DATE_SHORT} ou utilizar um NewGRF que forneça veículos iniciais +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Não está disponível nenhum tipo de estrada edificável para localidades +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Mudar a sua configuração NewGRF +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Ainda não estão disponíveis tipos de estradas edificáveis para localidades +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Começar um novo jogo depois de {DATE_SHORT} ou usar um NewGRF que forneça antecipadamente tipos de estradas edificáveis em localidades # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Não é possível fazer o comboio passar o sinal com perigo... diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 598bb83968..5fbcbcba24 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -5473,6 +5473,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Изме STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Нет доступных транспортных средств STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Начните игру не ранее {DATE_SHORT} либо подключите NewGRF, добавляющий транспортные средства, использовавшиеся в это время. +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Отсутствуют типы дорог, которые могла бы прокладывать городская администрация +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Измените конфигурацию установленных модулей NewGRF +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Пока что отсутствуют типы дорог, которые могла бы прокладывать городская администрация +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Установите дату начала игры не ранее {DATE_SHORT} или установите модуль NewGRF, добавляющий типы дорог, которые будут доступны администрациям городов на выбранную вами дату # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Невозможно игнорировать светофор. Опасно... From 715f8c0218b10700a9d41c2ad54c8b0f1776e4f3 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Thu, 18 Apr 2024 18:41:36 +0200 Subject: [PATCH 337/695] Codefix: cast to "CommandCallback *" in a way cast-function-type-mismatch doesn't mind (#12529) --- src/command_func.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/command_func.h b/src/command_func.h index ddf68aaf11..69cb9ebcac 100644 --- a/src/command_func.h +++ b/src/command_func.h @@ -250,7 +250,7 @@ public: template static Tret Unsafe(StringID err_message, Tcallback *callback, bool my_cmd, bool estimate_only, TileIndex location, std::tuple args) { - return Execute(err_message, reinterpret_cast(callback), my_cmd, estimate_only, false, location, std::move(args)); + return Execute(err_message, reinterpret_cast(reinterpret_cast(callback)), my_cmd, estimate_only, false, location, std::move(args)); } protected: @@ -301,7 +301,7 @@ protected: /* Only set client IDs when the command does not come from the network. */ if (!network_command && GetCommandFlags() & CMD_CLIENT_ID) SetClientIds(args, std::index_sequence_for{}); - Tret res = Execute(err_message, reinterpret_cast(callback), my_cmd, estimate_only, network_command, tile, args); + Tret res = Execute(err_message, reinterpret_cast(reinterpret_cast(callback)), my_cmd, estimate_only, network_command, tile, args); InternalPostResult(ExtractCommandCost(res), tile, estimate_only, only_sending, err_message, my_cmd); if (!estimate_only && !only_sending && callback != nullptr) { From 78b83190ccf71b85b7d087aaa95aba1166dfc3c9 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Thu, 18 Apr 2024 12:45:00 -0400 Subject: [PATCH 338/695] Fix: Mark vehicle status bars dirty when a vehicle leaves unbunching depot (#12516) --- src/vehicle.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 12941e7e83..2e1b82b172 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -2545,6 +2545,7 @@ void Vehicle::LeaveUnbunchingDepot() if (u->vehstatus & (VS_STOPPED | VS_CRASHED)) continue; u->depot_unbunching_next_departure = next_departure; + SetWindowDirty(WC_VEHICLE_VIEW, u->index); } } From 4170c9923a64868098c03d7d45477d088786d83e Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 18 Apr 2024 17:45:41 +0100 Subject: [PATCH 339/695] Fix: Inconsistent space between console history and current line. (#12528) --- src/console_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/console_gui.cpp b/src/console_gui.cpp index 6dc0393e66..496d945934 100644 --- a/src/console_gui.cpp +++ b/src/console_gui.cpp @@ -196,7 +196,7 @@ struct IConsoleWindow : Window const int right = this->width - WidgetDimensions::scaled.frametext.right; GfxFillRect(0, 0, this->width - 1, this->height - 1, PC_BLACK); - int ypos = this->height - this->line_height; + int ypos = this->height - this->line_height - WidgetDimensions::scaled.hsep_normal; for (size_t line_index = IConsoleWindow::scroll; line_index < _iconsole_buffer.size(); line_index++) { const IConsoleLine &print = _iconsole_buffer[line_index]; SetDParamStr(0, print.buffer); From 08d05bf4c0530f00d0b46312436781be40f3ae3e Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Thu, 18 Apr 2024 19:12:52 +0200 Subject: [PATCH 340/695] Doc: update release documentation with the latest (#12525) --- docs/releasing_openttd.md | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/docs/releasing_openttd.md b/docs/releasing_openttd.md index acb3ad9bc7..08c379dd81 100644 --- a/docs/releasing_openttd.md +++ b/docs/releasing_openttd.md @@ -29,20 +29,25 @@ This guide is for OpenTTD developers/maintainers, to release a new version of Op 1. Go to https://github.com/OpenTTD/website/new/main/_posts and write a new announcement post. See a [previous example](https://github.com/OpenTTD/website/pull/238) for a template. 2. Create a new branch for this post and open a PR for it. -3. Write announcement text for socials like Forum/Discord/Twitter/Reddit and include it in the PR. +3. Write announcement text for the store pages and socials like TT-Forums / Discord / Twitter / Reddit / Fosstodon / etc., and include it in the PR. 4. Create a Steam news image for that post and include it in the PR. -5. Check the website post (preview link via checks page) and make corrections. We usually just use the GitHub web interface for this and squash the result later. +5. Check the website post ("View Deployment" link) and make corrections. We usually just use the GitHub web interface for this and squash the result later. 6. Get this PR approved, but do not merge yet. ## Step 3: Make the actual OpenTTD release -1. Go to https://github.com/OpenTTD/OpenTTD/releases/new and create a new tag matching the release number. For the body of the release, see any older release. "Set as a pre-release" for a beta or RC, set as latest for a real release. -2. Merge website PR. -3. Wait for the OpenTTD release checks to be complete. -4. Check that website links to the new release are working and correct, using the [staging website](https://www-staging.openttd.org/). -5. If this is a full release, ask orudge to update the Microsoft Store and TrueBrain to move the release from the "testing" to "default" branch on Steam. +1. Go to https://github.com/OpenTTD/OpenTTD/releases/new and create a new tag matching the release number. For the body of the release, copy in the changelog. "Set as a pre-release" for a beta or RC. +2. Wait for the OpenTTD release workflow to be complete. +3. Merge the website PR. This will publish the release post. +4. If this is a full release: + * for `Steam`: under Steamworks -> SteamPipe -> Builds, set the "testing" branch live on the "default" branch. This will request 2FA validation. + * for `GOG`: under Builds, "Publish" the freshly uploaded builds to `Master`, `GOG-use only` and `Testing`. + * for `Microsoft Store`: ask orudge to publish the new release. + +Access to `Steam`, `GOG` and/or `Microsoft Store` requires a developer account on that platform. +You will need access to the shared keystore in order to create such an account. +For help and/or access to either or both, please contact TrueBrain. ## Step 4: Tell the world -1. Tag and create a website release to trigger the actions that update the website. -2. After the website is live, make announcements on social media. You may need to coordinate with other developers who can make posts on Twitter, Reddit, Steam, and GOG. +1. Make announcements on social media and store pages. You may need to coordinate with other developers who can make posts on TT-Forums, Twitter, Reddit, Fosstodon, Discord, Steam, GOG, Microsoft Store, etc. From 04a3bf76e840cdf4b1dc79479b62b4d626c4bee1 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Thu, 18 Apr 2024 19:37:33 +0200 Subject: [PATCH 341/695] Codechange: upgrade Emscripten to 3.1.57 (#12526) This also upgrades liblzma to 5.4.6, and uses the new ports.contrib system Emscripten 3.1.56 introduced. --- .github/workflows/ci-emscripten.yml | 9 +- .github/workflows/preview-build.yml | 9 +- os/emscripten/Dockerfile | 5 +- os/emscripten/README.md | 4 +- os/emscripten/cmake/FindLibLZMA.cmake | 8 +- os/emscripten/emsdk-liblzma.patch | 198 -------------------------- os/emscripten/ports/liblzma.py | 139 ++++++++++++++++++ 7 files changed, 155 insertions(+), 217 deletions(-) delete mode 100644 os/emscripten/emsdk-liblzma.patch create mode 100644 os/emscripten/ports/liblzma.py diff --git a/.github/workflows/ci-emscripten.yml b/.github/workflows/ci-emscripten.yml index e1814ed79b..8c50713b9e 100644 --- a/.github/workflows/ci-emscripten.yml +++ b/.github/workflows/ci-emscripten.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-20.04 container: # If you change this version, change the number in the cache step too. - image: emscripten/emsdk:3.1.42 + image: emscripten/emsdk:3.1.57 steps: - name: Checkout @@ -23,12 +23,11 @@ jobs: uses: actions/cache@v4 with: path: /emsdk/upstream/emscripten/cache - key: 3.1.42-${{ runner.os }} + key: 3.1.57-${{ runner.os }} - - name: Patch Emscripten to support LZMA + - name: Add liblzma support run: | - cd /emsdk/upstream/emscripten - patch -p1 < ${GITHUB_WORKSPACE}/os/emscripten/emsdk-liblzma.patch + cp ${GITHUB_WORKSPACE}/os/emscripten/ports/liblzma.py /emsdk/upstream/emscripten/tools/ports/contrib/ - name: Build (host tools) run: | diff --git a/.github/workflows/preview-build.yml b/.github/workflows/preview-build.yml index 0bb79ed4b9..9cf6e9573c 100644 --- a/.github/workflows/preview-build.yml +++ b/.github/workflows/preview-build.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest container: # If you change this version, change the number in the cache step too. - image: emscripten/emsdk:3.1.42 + image: emscripten/emsdk:3.1.57 steps: - name: Checkout @@ -38,12 +38,11 @@ jobs: uses: actions/cache@v4 with: path: /emsdk/upstream/emscripten/cache - key: 3.1.42-${{ runner.os }} + key: 3.1.57-${{ runner.os }} - - name: Patch Emscripten to support LZMA + - name: Add liblzma support run: | - cd /emsdk/upstream/emscripten - patch -p1 < ${GITHUB_WORKSPACE}/os/emscripten/emsdk-liblzma.patch + cp ${GITHUB_WORKSPACE}/os/emscripten/ports/liblzma.py /emsdk/upstream/emscripten/tools/ports/contrib/ - name: Build (host tools) run: | diff --git a/os/emscripten/Dockerfile b/os/emscripten/Dockerfile index 178f56500b..543bf6b2de 100644 --- a/os/emscripten/Dockerfile +++ b/os/emscripten/Dockerfile @@ -1,4 +1,3 @@ -FROM emscripten/emsdk:3.1.42 +FROM emscripten/emsdk:3.1.57 -COPY emsdk-liblzma.patch / -RUN cd /emsdk/upstream/emscripten && patch -p1 < /emsdk-liblzma.patch +COPY ports/liblzma.py /emsdk/upstream/emscripten/tools/ports/contrib/liblzma.py diff --git a/os/emscripten/README.md b/os/emscripten/README.md index 9184b0144e..cdc038ade3 100644 --- a/os/emscripten/README.md +++ b/os/emscripten/README.md @@ -2,8 +2,8 @@ Please use docker with the supplied `Dockerfile` to build for emscripten. It takes care of a few things: -- Use a version of emscripten we know works -- Patch in LibLZMA support (as this is not supported by upstream) +- Use a version of emscripten we know works. +- Add LibLZMA library under contrib ports. First, build the docker image by navigating in the folder this `README.md` is in, and executing: ``` diff --git a/os/emscripten/cmake/FindLibLZMA.cmake b/os/emscripten/cmake/FindLibLZMA.cmake index cd6b44ad3d..0880d62f70 100644 --- a/os/emscripten/cmake/FindLibLZMA.cmake +++ b/os/emscripten/cmake/FindLibLZMA.cmake @@ -1,7 +1,7 @@ # LibLZMA is a custom addition to the emscripten SDK, so it is possible # someone patched their SDK. Test out if the SDK supports LibLZMA. include(CheckCXXSourceCompiles) -set(CMAKE_REQUIRED_FLAGS "-sUSE_LIBLZMA=1") +set(CMAKE_REQUIRED_FLAGS "--use-port=contrib.liblzma") check_cxx_source_compiles(" #include @@ -12,9 +12,9 @@ check_cxx_source_compiles(" if (LIBLZMA_FOUND) add_library(LibLZMA::LibLZMA INTERFACE IMPORTED) set_target_properties(LibLZMA::LibLZMA PROPERTIES - INTERFACE_COMPILE_OPTIONS "-sUSE_LIBLZMA=1" - INTERFACE_LINK_LIBRARIES "-sUSE_LIBLZMA=1" + INTERFACE_COMPILE_OPTIONS "--use-port=contrib.liblzma" + INTERFACE_LINK_LIBRARIES "--use-port=contrib.liblzma" ) else() - message(WARNING "You are using an emscripten SDK without LibLZMA support. Many savegames won't be able to load in OpenTTD. Please apply 'emsdk-liblzma.patch' to your local emsdk installation.") + message(WARNING "You are using an emscripten SDK without LibLZMA support. Many savegames won't be able to load in OpenTTD. Please copy liblzma.py to your ports/contrib folder in your local emsdk installation.") endif() diff --git a/os/emscripten/emsdk-liblzma.patch b/os/emscripten/emsdk-liblzma.patch deleted file mode 100644 index 7bfdd47de2..0000000000 --- a/os/emscripten/emsdk-liblzma.patch +++ /dev/null @@ -1,198 +0,0 @@ -From 84d0e9112d5c87a714abd21ec8547921f46f37b5 Mon Sep 17 00:00:00 2001 -From: milek7 -Date: Tue, 8 Dec 2020 01:03:31 +0100 -Subject: [PATCH] Add liblzma port - ---- - src/settings.js | 4 ++ - tools/ports/liblzma.py | 151 +++++++++++++++++++++++++++++++++++++++++ - tools/settings.py | 1 + - 3 files changed, 156 insertions(+) - create mode 100644 tools/ports/liblzma.py - -diff --git a/src/settings.js b/src/settings.js -index f93140d..7b6bec9 100644 ---- a/src/settings.js -+++ b/src/settings.js -@@ -1451,6 +1451,10 @@ var USE_GIFLIB = false; - // [compile+link] - var USE_LIBJPEG = false; - -+// 1 = use liblzma from emscripten-ports -+// [compile+link] -+var USE_LIBLZMA = false; -+ - // 1 = use libpng from emscripten-ports - // [compile+link] - var USE_LIBPNG = false; -diff --git a/tools/ports/liblzma.py b/tools/ports/liblzma.py -new file mode 100644 -index 0000000..6872a8b ---- /dev/null -+++ b/tools/ports/liblzma.py -@@ -0,0 +1,151 @@ -+# Copyright 2020 The Emscripten Authors. All rights reserved. -+# Emscripten is available under two separate licenses, the MIT license and the -+# University of Illinois/NCSA Open Source License. Both these licenses can be -+# found in the LICENSE file. -+ -+import os -+import shutil -+import logging -+from pathlib import Path -+ -+VERSION = '5.4.2' -+HASH = '149f980338bea3d66de1ff5994b2b236ae1773135eda68b62b009df0c9dcdf5467f8cb2c06da95a71b6556d60bd3d21f475feced34d5dfdb80ee95416a2f9737' -+ -+ -+def needed(settings): -+ return settings.USE_LIBLZMA -+ -+ -+def get(ports, settings, shared): -+ ports.fetch_project('liblzma', f'https://tukaani.org/xz/xz-{VERSION}.tar.gz', sha512hash=HASH) -+ -+ def create(final): -+ logging.info('building port: liblzma') -+ -+ ports.clear_project_build('liblzma') -+ -+ source_path = os.path.join(ports.get_dir(), 'liblzma', f'xz-{VERSION}', 'src', 'liblzma') -+ ports.write_file(os.path.join(source_path, 'config.h'), config_h) -+ ports.install_headers(os.path.join(source_path, 'api'), pattern='lzma.h') -+ ports.install_headers(os.path.join(source_path, 'api', 'lzma'), pattern='*.h', target='lzma') -+ -+ build_flags = ['-DHAVE_CONFIG_H', '-DTUKLIB_SYMBOL_PREFIX=lzma_', '-fvisibility=hidden'] -+ exclude_files = ['crc32_small.c', 'crc64_small.c', 'crc32_tablegen.c', 'crc64_tablegen.c', 'price_tablegen.c', 'fastpos_tablegen.c', -+ 'tuklib_exit.c', 'tuklib_mbstr_fw.c', 'tuklib_mbstr_width.c', 'tuklib_open_stdxxx.c', 'tuklib_progname.c'] -+ include_dirs_rel = ['../common', 'api', 'check', 'common', 'delta', 'lz', 'lzma', 'rangecoder', 'simple'] -+ -+ include_dirs = [os.path.join(source_path, p) for p in include_dirs_rel] -+ ports.build_port(source_path, final, 'liblzma', flags=build_flags, exclude_files=exclude_files, includes=include_dirs) -+ -+ return [shared.cache.get_lib('liblzma.a', create, what='port')] -+ -+ -+def clear(ports, settings, shared): -+ shared.cache.erase_lib('liblzma.a') -+ -+ -+def process_args(ports): -+ return [] -+ -+ -+def show(): -+ return 'liblzma (USE_LIBLZMA=1; public domain)' -+ -+ -+config_h = ''' -+#define ASSUME_RAM 128 -+#define ENABLE_NLS 1 -+#define HAVE_CHECK_CRC32 1 -+#define HAVE_CHECK_CRC64 1 -+#define HAVE_CHECK_SHA256 1 -+#define HAVE_CLOCK_GETTIME 1 -+#define HAVE_DCGETTEXT 1 -+#define HAVE_DECL_CLOCK_MONOTONIC 1 -+#define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 -+#define HAVE_DECODERS 1 -+#define HAVE_DECODER_ARM 1 -+#define HAVE_DECODER_ARMTHUMB 1 -+#define HAVE_DECODER_DELTA 1 -+#define HAVE_DECODER_IA64 1 -+#define HAVE_DECODER_LZMA1 1 -+#define HAVE_DECODER_LZMA2 1 -+#define HAVE_DECODER_POWERPC 1 -+#define HAVE_DECODER_SPARC 1 -+#define HAVE_DECODER_X86 1 -+#define HAVE_DLFCN_H 1 -+#define HAVE_ENCODERS 1 -+#define HAVE_ENCODER_ARM 1 -+#define HAVE_ENCODER_ARMTHUMB 1 -+#define HAVE_ENCODER_DELTA 1 -+#define HAVE_ENCODER_IA64 1 -+#define HAVE_ENCODER_LZMA1 1 -+#define HAVE_ENCODER_LZMA2 1 -+#define HAVE_ENCODER_POWERPC 1 -+#define HAVE_ENCODER_SPARC 1 -+#define HAVE_ENCODER_X86 1 -+#define HAVE_FCNTL_H 1 -+#define HAVE_FUTIMENS 1 -+#define HAVE_GETOPT_H 1 -+#define HAVE_GETOPT_LONG 1 -+#define HAVE_GETTEXT 1 -+#define HAVE_IMMINTRIN_H 1 -+#define HAVE_INTTYPES_H 1 -+#define HAVE_LIMITS_H 1 -+#define HAVE_MBRTOWC 1 -+#define HAVE_MEMORY_H 1 -+#define HAVE_MF_BT2 1 -+#define HAVE_MF_BT3 1 -+#define HAVE_MF_BT4 1 -+#define HAVE_MF_HC3 1 -+#define HAVE_MF_HC4 1 -+#define HAVE_OPTRESET 1 -+#define HAVE_POSIX_FADVISE 1 -+#define HAVE_PTHREAD_CONDATTR_SETCLOCK 1 -+#define HAVE_PTHREAD_PRIO_INHERIT 1 -+#define HAVE_STDBOOL_H 1 -+#define HAVE_STDINT_H 1 -+#define HAVE_STDLIB_H 1 -+#define HAVE_STRINGS_H 1 -+#define HAVE_STRING_H 1 -+#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 -+#define HAVE_SYS_PARAM_H 1 -+#define HAVE_SYS_STAT_H 1 -+#define HAVE_SYS_TIME_H 1 -+#define HAVE_SYS_TYPES_H 1 -+#define HAVE_UINTPTR_T 1 -+#define HAVE_UNISTD_H 1 -+#define HAVE_VISIBILITY 1 -+#define HAVE_WCWIDTH 1 -+#define HAVE__BOOL 1 -+#define HAVE___BUILTIN_ASSUME_ALIGNED 1 -+#define HAVE___BUILTIN_BSWAPXX 1 -+#define MYTHREAD_POSIX 1 -+#define NDEBUG 1 -+#define PACKAGE "xz" -+#define PACKAGE_BUGREPORT "lasse.collin@tukaani.org" -+#define PACKAGE_NAME "XZ Utils" -+#define PACKAGE_STRING "XZ Utils 5.4.0" -+#define PACKAGE_TARNAME "xz" -+#define PACKAGE_VERSION "5.4.0" -+#define SIZEOF_SIZE_T 4 -+#define STDC_HEADERS 1 -+#define TUKLIB_CPUCORES_SYSCONF 1 -+#define TUKLIB_FAST_UNALIGNED_ACCESS 1 -+#define TUKLIB_PHYSMEM_SYSCONF 1 -+#ifndef _ALL_SOURCE -+# define _ALL_SOURCE 1 -+#endif -+#ifndef _GNU_SOURCE -+# define _GNU_SOURCE 1 -+#endif -+#ifndef _POSIX_PTHREAD_SEMANTICS -+# define _POSIX_PTHREAD_SEMANTICS 1 -+#endif -+#ifndef _TANDEM_SOURCE -+# define _TANDEM_SOURCE 1 -+#endif -+#ifndef __EXTENSIONS__ -+# define __EXTENSIONS__ 1 -+#endif -+#define VERSION "5.4.0" -+''' -diff --git a/tools/settings.py b/tools/settings.py -index 10d6ca0..827e4a9 100644 ---- a/tools/settings.py -+++ b/tools/settings.py -@@ -40,6 +40,7 @@ PORTS_SETTINGS = { - 'USE_SDL_NET', - 'USE_SDL_GFX', - 'USE_LIBJPEG', -+ 'USE_LIBLZMA', - 'USE_OGG', - 'USE_REGAL', - 'USE_BOOST_HEADERS', --- -2.34.1 diff --git a/os/emscripten/ports/liblzma.py b/os/emscripten/ports/liblzma.py new file mode 100644 index 0000000000..0adf0e5697 --- /dev/null +++ b/os/emscripten/ports/liblzma.py @@ -0,0 +1,139 @@ +import os +import logging + +VERSION = '5.4.6' +HASH = '495cc890d25c075c927c907b77e60d86dd8a4c377cea5b1172c8e916984149a7bb5fb32db25091f7219346b83155b47e4bc0404cc8529d992014cd7ed0c278b7' + +URL = 'https://github.com/tukaani-project/xz' +DESCRIPTION = 'liblzma provides a general-purpose data-compression library.' +LICENSE = 'LGPL-2.1' + +def get(ports, settings, shared): + ports.fetch_project('contrib.liblzma', f'https://github.com/tukaani-project/xz/releases/download/v{VERSION}/xz-{VERSION}.tar.xz', sha512hash=HASH) + + def create(final): + logging.info('building port: contrib.liblzma') + + ports.clear_project_build('contrib.liblzma') + + source_path = os.path.join(ports.get_dir(), 'contrib.liblzma', f'xz-{VERSION}', 'src', 'liblzma') + ports.write_file(os.path.join(source_path, 'config.h'), config_h) + ports.install_headers(os.path.join(source_path, 'api'), pattern='lzma.h') + ports.install_headers(os.path.join(source_path, 'api', 'lzma'), pattern='*.h', target='lzma') + + build_flags = ['-DHAVE_CONFIG_H', '-DTUKLIB_SYMBOL_PREFIX=lzma_', '-fvisibility=hidden'] + exclude_files = ['crc32_small.c', 'crc64_small.c', 'crc32_tablegen.c', 'crc64_tablegen.c', 'price_tablegen.c', 'fastpos_tablegen.c', + 'tuklib_exit.c', 'tuklib_mbstr_fw.c', 'tuklib_mbstr_width.c', 'tuklib_open_stdxxx.c', 'tuklib_progname.c'] + include_dirs_rel = ['../common', 'api', 'check', 'common', 'delta', 'lz', 'lzma', 'rangecoder', 'simple'] + + include_dirs = [os.path.join(source_path, p) for p in include_dirs_rel] + ports.build_port(source_path, final, 'contrib.liblzma', flags=build_flags, exclude_files=exclude_files, includes=include_dirs) + + return [shared.cache.get_lib('liblzma.a', create, what='port')] + + +def clear(ports, settings, shared): + shared.cache.erase_lib('liblzma.a') + + +def process_args(ports): + return [] + + +config_h = ''' +#define ASSUME_RAM 128 +#define ENABLE_NLS 1 +#define HAVE_CHECK_CRC32 1 +#define HAVE_CHECK_CRC64 1 +#define HAVE_CHECK_SHA256 1 +#define HAVE_CLOCK_GETTIME 1 +#define HAVE_DCGETTEXT 1 +#define HAVE_DECL_CLOCK_MONOTONIC 1 +#define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +#define HAVE_DECODERS 1 +#define HAVE_DECODER_ARM 1 +#define HAVE_DECODER_ARMTHUMB 1 +#define HAVE_DECODER_DELTA 1 +#define HAVE_DECODER_IA64 1 +#define HAVE_DECODER_LZMA1 1 +#define HAVE_DECODER_LZMA2 1 +#define HAVE_DECODER_POWERPC 1 +#define HAVE_DECODER_SPARC 1 +#define HAVE_DECODER_X86 1 +#define HAVE_DLFCN_H 1 +#define HAVE_ENCODERS 1 +#define HAVE_ENCODER_ARM 1 +#define HAVE_ENCODER_ARMTHUMB 1 +#define HAVE_ENCODER_DELTA 1 +#define HAVE_ENCODER_IA64 1 +#define HAVE_ENCODER_LZMA1 1 +#define HAVE_ENCODER_LZMA2 1 +#define HAVE_ENCODER_POWERPC 1 +#define HAVE_ENCODER_SPARC 1 +#define HAVE_ENCODER_X86 1 +#define HAVE_FCNTL_H 1 +#define HAVE_FUTIMENS 1 +#define HAVE_GETOPT_H 1 +#define HAVE_GETOPT_LONG 1 +#define HAVE_GETTEXT 1 +#define HAVE_IMMINTRIN_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_LIMITS_H 1 +#define HAVE_MBRTOWC 1 +#define HAVE_MEMORY_H 1 +#define HAVE_MF_BT2 1 +#define HAVE_MF_BT3 1 +#define HAVE_MF_BT4 1 +#define HAVE_MF_HC3 1 +#define HAVE_MF_HC4 1 +#define HAVE_OPTRESET 1 +#define HAVE_POSIX_FADVISE 1 +#define HAVE_PTHREAD_CONDATTR_SETCLOCK 1 +#define HAVE_PTHREAD_PRIO_INHERIT 1 +#define HAVE_STDBOOL_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRINGS_H 1 +#define HAVE_STRING_H 1 +#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +#define HAVE_SYS_PARAM_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_SYS_TIME_H 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_UINTPTR_T 1 +#define HAVE_UNISTD_H 1 +#define HAVE_VISIBILITY 1 +#define HAVE_WCWIDTH 1 +#define HAVE__BOOL 1 +#define HAVE___BUILTIN_ASSUME_ALIGNED 1 +#define HAVE___BUILTIN_BSWAPXX 1 +#define MYTHREAD_POSIX 1 +#define NDEBUG 1 +#define PACKAGE "xz" +#define PACKAGE_BUGREPORT "lasse.collin@tukaani.org" +#define PACKAGE_NAME "XZ Utils" +#define PACKAGE_STRING "XZ Utils 5.4.0" +#define PACKAGE_TARNAME "xz" +#define PACKAGE_VERSION "5.4.0" +#define SIZEOF_SIZE_T 4 +#define STDC_HEADERS 1 +#define TUKLIB_CPUCORES_SYSCONF 1 +#define TUKLIB_FAST_UNALIGNED_ACCESS 1 +#define TUKLIB_PHYSMEM_SYSCONF 1 +#ifndef _ALL_SOURCE +# define _ALL_SOURCE 1 +#endif +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS 1 +#endif +#ifndef _TANDEM_SOURCE +# define _TANDEM_SOURCE 1 +#endif +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif +#define VERSION "5.4.0" +''' From 45886e50b21fd1dee461e910267781e264574790 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 18 Apr 2024 18:54:10 +0100 Subject: [PATCH 342/695] Codechange: Unify where rail station tile flags are set. (#12531) This avoids repeating the logic in three places. --- src/saveload/afterload.cpp | 14 +------------- src/station_cmd.cpp | 31 ++++++++++++++++++++----------- src/station_func.h | 1 + src/waypoint_cmd.cpp | 11 +---------- 4 files changed, 23 insertions(+), 34 deletions(-) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 75f062fc4b..88dee51b9c 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2878,19 +2878,7 @@ bool AfterLoadGame() /* Station blocked, wires and pylon flags need to be stored in the map. This is effectively cached data, so no * version check is necessary. This is done here as the SLV_182 check below needs the blocked status. */ for (auto t : Map::Iterate()) { - if (HasStationTileRail(t)) { - StationGfx gfx = GetStationGfx(t); - const StationSpec *statspec = GetStationSpec(t); - - bool blocked = statspec != nullptr && HasBit(statspec->blocked, gfx); - /* Default stations do not draw pylons under roofs (gfx >= 4) */ - bool pylons = statspec != nullptr ? HasBit(statspec->pylons, gfx) : gfx < 4; - bool wires = statspec == nullptr || !HasBit(statspec->wires, gfx); - - SetStationTileBlocked(t, blocked); - SetStationTileHavePylons(t, pylons); - SetStationTileHaveWires(t, wires); - } + if (HasStationTileRail(t)) SetRailStationTileFlags(t, GetStationSpec(t)); } } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 62ef3128b3..aece206dfc 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1294,6 +1294,24 @@ static CommandCost CalculateRailStationCost(TileArea tile_area, DoCommandFlag fl return cost; } +/** + * Set rail station tile flags for the given tile. + * @param tile Tile to set flags on. + * @param statspec Statspec of the tile. + */ +void SetRailStationTileFlags(TileIndex tile, const StationSpec *statspec) +{ + const StationGfx gfx = GetStationGfx(tile); + bool blocked = statspec != nullptr && HasBit(statspec->blocked, gfx); + /* Default stations do not draw pylons under roofs (gfx >= 4) */ + bool pylons = statspec != nullptr ? HasBit(statspec->pylons, gfx) : gfx < 4; + bool wires = statspec == nullptr || !HasBit(statspec->wires, gfx); + + SetStationTileBlocked(tile, blocked); + SetStationTileHavePylons(tile, pylons); + SetStationTileHaveWires(tile, wires); +} + /** * Build rail station * @param flags operation to perform @@ -1456,18 +1474,9 @@ CommandCost CmdBuildRailStation(DoCommandFlag flags, TileIndex tile_org, RailTyp TriggerStationAnimation(st, tile, SAT_BUILT); } - /* Should be the same as layout but axis component could be wrong... */ - StationGfx gfx = GetStationGfx(tile); - bool blocked = statspec != nullptr && HasBit(statspec->blocked, gfx); - /* Default stations do not draw pylons under roofs (gfx >= 4) */ - bool pylons = statspec != nullptr ? HasBit(statspec->pylons, gfx) : gfx < 4; - bool wires = statspec == nullptr || !HasBit(statspec->wires, gfx); + SetRailStationTileFlags(tile, statspec); - SetStationTileBlocked(tile, blocked); - SetStationTileHavePylons(tile, pylons); - SetStationTileHaveWires(tile, wires); - - if (!blocked) c->infrastructure.rail[rt]++; + if (!IsStationTileBlocked(tile)) c->infrastructure.rail[rt]++; c->infrastructure.station++; tile += tile_delta; diff --git a/src/station_func.h b/src/station_func.h index b71130f5d8..ab24b6cc9f 100644 --- a/src/station_func.h +++ b/src/station_func.h @@ -33,6 +33,7 @@ void UpdateStationAcceptance(Station *st, bool show_msg); CargoTypes GetAcceptanceMask(const Station *st); CargoTypes GetEmptyMask(const Station *st); +void SetRailStationTileFlags(TileIndex tile, const StationSpec *statspec); const DrawTileSprites *GetStationTileLayout(StationType st, uint8_t gfx); void StationPickerDrawSprite(int x, int y, StationType st, RailType railtype, RoadType roadtype, int image); diff --git a/src/waypoint_cmd.cpp b/src/waypoint_cmd.cpp index 2bf7ce5e52..0ffffcfc09 100644 --- a/src/waypoint_cmd.cpp +++ b/src/waypoint_cmd.cpp @@ -276,16 +276,7 @@ CommandCost CmdBuildRailWaypoint(DoCommandFlag flags, TileIndex start_tile, Axis MakeRailWaypoint(tile, wp->owner, wp->index, axis, layout[i], GetRailType(tile)); SetCustomStationSpecIndex(tile, map_spec_index); - /* Should be the same as layout but axis component could be wrong... */ - StationGfx gfx = GetStationGfx(tile); - bool blocked = spec != nullptr && HasBit(spec->blocked, gfx); - /* Default stations do not draw pylons under roofs (gfx >= 4) */ - bool pylons = spec != nullptr ? HasBit(spec->pylons, gfx) : gfx < 4; - bool wires = spec == nullptr || !HasBit(spec->wires, gfx); - - SetStationTileBlocked(tile, blocked); - SetStationTileHavePylons(tile, pylons); - SetStationTileHaveWires(tile, wires); + SetRailStationTileFlags(tile, spec); SetRailStationReservation(tile, reserved); MarkTileDirtyByTile(tile); From d57bf84196f691e3667d4d1b1dabe6b2fae38194 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 18 Apr 2024 22:13:13 +0100 Subject: [PATCH 343/695] Codechange: Remove some unnecessary c_str() when passing std::strings. (#12532) Functions have been updated from `char *` to `std::string` since without removing `c_str()`. --- src/fios.cpp | 2 +- src/game/game_text.cpp | 4 ++-- src/social_integration.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/fios.cpp b/src/fios.cpp index f5523c85aa..e647404bc2 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -707,7 +707,7 @@ FiosNumberedSaveName::FiosNumberedSaveName(const std::string &prefix) : prefix(p /* Get the save list. */ FileList list; FiosFileScanner scanner(SLO_SAVE, proc, list); - scanner.Scan(".sav", _autosave_path->c_str(), false); + scanner.Scan(".sav", *_autosave_path, false); /* Find the number for the most recent save, if any. */ if (list.begin() != list.end()) { diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp index 760a0b7395..2a8dab7690 100644 --- a/src/game/game_text.cpp +++ b/src/game/game_text.cpp @@ -180,7 +180,7 @@ public: /** * Scan. */ - void Scan(const char *directory) + void Scan(const std::string &directory) { this->FileScanner::Scan(".txt", directory, false); } @@ -241,7 +241,7 @@ GameStrings *LoadTranslations() } } else { /* Scan filesystem */ - scanner.Scan(ldir.c_str()); + scanner.Scan(ldir); } gs->Compile(); diff --git a/src/social_integration.cpp b/src/social_integration.cpp index 18e8e44eb7..1de92111f6 100644 --- a/src/social_integration.cpp +++ b/src/social_integration.cpp @@ -63,7 +63,7 @@ public: std::string extension = "-social.so"; #endif - this->FileScanner::Scan(extension.c_str(), SOCIAL_INTEGRATION_DIR, false); + this->FileScanner::Scan(extension, SOCIAL_INTEGRATION_DIR, false); } bool AddFile(const std::string &filename, size_t basepath_length, const std::string &) override From fe7bd3a266b10cd47b12aa9c8a0fef2d8b8ea150 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 16 Apr 2024 15:46:56 +0100 Subject: [PATCH 344/695] Codechange: Use std::array for cached town zone radius. --- src/town.h | 2 +- src/town_cmd.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/town.h b/src/town.h index 2b059dbe59..3aff041910 100644 --- a/src/town.h +++ b/src/town.h @@ -42,7 +42,7 @@ struct TownCache { uint32_t population; ///< Current population of people TrackedViewportSign sign; ///< Location of name sign, UpdateVirtCoord updates this PartOfSubsidy part_of_subsidy; ///< Is this town a source/destination of a subsidy? - uint32_t squared_town_zone_radius[HZB_END]; ///< UpdateTownRadius updates this given the house count + std::array squared_town_zone_radius; ///< UpdateTownRadius updates this given the house count BuildingCounts building_counts; ///< The number of each type of building in the town }; diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 252e3b2fa0..7a5d9221a1 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -1902,7 +1902,7 @@ static bool GrowTown(Town *t) */ void UpdateTownRadius(Town *t) { - static const uint32_t _town_squared_town_zone_radius_data[23][HZB_END] = { + static const std::array, 23> _town_squared_town_zone_radius_data = {{ { 4, 0, 0, 0, 0}, // 0 { 16, 0, 0, 0, 0}, { 25, 0, 0, 0, 0}, @@ -1926,10 +1926,10 @@ void UpdateTownRadius(Town *t) {121, 81, 0, 49, 25}, // 80 {121, 81, 0, 49, 25}, {121, 81, 0, 49, 36}, // 88 - }; + }}; - if (t->cache.num_houses < 92) { - memcpy(t->cache.squared_town_zone_radius, _town_squared_town_zone_radius_data[t->cache.num_houses / 4], sizeof(t->cache.squared_town_zone_radius)); + if (t->cache.num_houses < std::size(_town_squared_town_zone_radius_data) * 4) { + t->cache.squared_town_zone_radius = _town_squared_town_zone_radius_data[t->cache.num_houses / 4]; } else { int mass = t->cache.num_houses / 8; /* Actually we are proportional to sqrt() but that's right because we are covering an area. From db56499c01126ae212a2734443fe95ef90a9fdd4 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 16 Apr 2024 15:47:41 +0100 Subject: [PATCH 345/695] Codechange: Use std::array for company infrastructure arrays. --- src/company_base.h | 4 ++-- src/company_gui.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/company_base.h b/src/company_base.h index 356a5fe058..98b5bb8612 100644 --- a/src/company_base.h +++ b/src/company_base.h @@ -30,9 +30,9 @@ struct CompanyEconomyEntry { }; struct CompanyInfrastructure { - uint32_t road[ROADTYPE_END]; ///< Count of company owned track bits for each road type. + std::array rail{}; ///< Count of company owned track bits for each rail type. + std::array road{}; ///< Count of company owned track bits for each road type. uint32_t signal; ///< Count of company owned signals. - uint32_t rail[RAILTYPE_END]; ///< Count of company owned track bits for each rail type. uint32_t water; ///< Count of company owned track bits for canals. uint32_t station; ///< Count of company owned station tiles. uint32_t airport; ///< Count of company owned airports. diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 2e387b4996..128826613b 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -2338,7 +2338,7 @@ struct CompanyWindow : Window int y = r.top; uint rail_pieces = c->infrastructure.signal; - for (uint i = 0; i < lengthof(c->infrastructure.rail); i++) rail_pieces += c->infrastructure.rail[i]; + for (uint i = 0; i < std::size(c->infrastructure.rail); i++) rail_pieces += c->infrastructure.rail[i]; if (rail_pieces != 0) { SetDParam(0, rail_pieces); DrawString(r.left, r.right, y, STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL); @@ -2346,7 +2346,7 @@ struct CompanyWindow : Window } uint road_pieces = 0; - for (uint i = 0; i < lengthof(c->infrastructure.road); i++) road_pieces += c->infrastructure.road[i]; + for (uint i = 0; i < std::size(c->infrastructure.road); i++) road_pieces += c->infrastructure.road[i]; if (road_pieces != 0) { SetDParam(0, road_pieces); DrawString(r.left, r.right, y, STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD); From 21d11ee3611d24100fdee01b7bd7c0fc72b0a094 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 16 Apr 2024 15:49:08 +0100 Subject: [PATCH 346/695] Codechange: Move cache check function to own file. --- src/CMakeLists.txt | 1 + src/cachecheck.cpp | 225 +++++++++++++++++++++++++++++++++++++++++++++ src/openttd.cpp | 199 +-------------------------------------- 3 files changed, 227 insertions(+), 198 deletions(-) create mode 100644 src/cachecheck.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 56cb816248..b3339bae04 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -77,6 +77,7 @@ add_files( bridge_map.cpp bridge_map.h build_vehicle_gui.cpp + cachecheck.cpp cargo_type.h cargoaction.cpp cargoaction.h diff --git a/src/cachecheck.cpp b/src/cachecheck.cpp new file mode 100644 index 0000000000..e1f600c174 --- /dev/null +++ b/src/cachecheck.cpp @@ -0,0 +1,225 @@ +/* + * 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 cachecheck.cpp Check caches. */ + +#include "stdafx.h" +#include "aircraft.h" +#include "company_base.h" +#include "debug.h" +#include "industry.h" +#include "roadstop_base.h" +#include "roadveh.h" +#include "ship.h" +#include "station_base.h" +#include "station_map.h" +#include "subsidy_func.h" +#include "town.h" +#include "train.h" +#include "vehicle_base.h" + +#include "safeguards.h" + +extern void AfterLoadCompanyStats(); +extern void RebuildTownCaches(); + +/** + * Check the validity of some of the caches. + * Especially in the sense of desyncs between + * the cached value and what the value would + * be when calculated from the 'base' data. + */ +void CheckCaches() +{ + /* Return here so it is easy to add checks that are run + * always to aid testing of caches. */ + if (_debug_desync_level <= 1) return; + + /* Check the town caches. */ + std::vector old_town_caches; + for (const Town *t : Town::Iterate()) { + old_town_caches.push_back(t->cache); + } + + RebuildTownCaches(); + RebuildSubsidisedSourceAndDestinationCache(); + + uint i = 0; + for (Town *t : Town::Iterate()) { + if (MemCmpT(old_town_caches.data() + i, &t->cache) != 0) { + Debug(desync, 2, "warning: town cache mismatch: town {}", t->index); + } + i++; + } + + /* Check company infrastructure cache. */ + std::vector old_infrastructure; + for (const Company *c : Company::Iterate()) old_infrastructure.push_back(c->infrastructure); + + AfterLoadCompanyStats(); + + i = 0; + for (const Company *c : Company::Iterate()) { + if (MemCmpT(old_infrastructure.data() + i, &c->infrastructure) != 0) { + Debug(desync, 2, "warning: infrastructure cache mismatch: company {}", c->index); + } + i++; + } + + /* Strict checking of the road stop cache entries */ + for (const RoadStop *rs : RoadStop::Iterate()) { + if (IsBayRoadStopTile(rs->xy)) continue; + + assert(rs->GetEntry(DIAGDIR_NE) != rs->GetEntry(DIAGDIR_NW)); + rs->GetEntry(DIAGDIR_NE)->CheckIntegrity(rs); + rs->GetEntry(DIAGDIR_NW)->CheckIntegrity(rs); + } + + for (Vehicle *v : Vehicle::Iterate()) { + if (v != v->First() || v->vehstatus & VS_CRASHED || !v->IsPrimaryVehicle()) continue; + + uint length = 0; + for (const Vehicle *u = v; u != nullptr; u = u->Next()) length++; + + NewGRFCache *grf_cache = CallocT(length); + VehicleCache *veh_cache = CallocT(length); + GroundVehicleCache *gro_cache = CallocT(length); + TrainCache *tra_cache = CallocT(length); + + length = 0; + for (const Vehicle *u = v; u != nullptr; u = u->Next()) { + FillNewGRFVehicleCache(u); + grf_cache[length] = u->grf_cache; + veh_cache[length] = u->vcache; + switch (u->type) { + case VEH_TRAIN: + gro_cache[length] = Train::From(u)->gcache; + tra_cache[length] = Train::From(u)->tcache; + break; + case VEH_ROAD: + gro_cache[length] = RoadVehicle::From(u)->gcache; + break; + default: + break; + } + length++; + } + + switch (v->type) { + case VEH_TRAIN: Train::From(v)->ConsistChanged(CCF_TRACK); break; + case VEH_ROAD: RoadVehUpdateCache(RoadVehicle::From(v)); break; + case VEH_AIRCRAFT: UpdateAircraftCache(Aircraft::From(v)); break; + case VEH_SHIP: Ship::From(v)->UpdateCache(); break; + default: break; + } + + length = 0; + for (const Vehicle *u = v; u != nullptr; u = u->Next()) { + FillNewGRFVehicleCache(u); + if (memcmp(&grf_cache[length], &u->grf_cache, sizeof(NewGRFCache)) != 0) { + Debug(desync, 2, "warning: newgrf cache mismatch: type {}, vehicle {}, company {}, unit number {}, wagon {}", v->type, v->index, v->owner, v->unitnumber, length); + } + if (memcmp(&veh_cache[length], &u->vcache, sizeof(VehicleCache)) != 0) { + Debug(desync, 2, "warning: vehicle cache mismatch: type {}, vehicle {}, company {}, unit number {}, wagon {}", v->type, v->index, v->owner, v->unitnumber, length); + } + switch (u->type) { + case VEH_TRAIN: + if (memcmp(&gro_cache[length], &Train::From(u)->gcache, sizeof(GroundVehicleCache)) != 0) { + Debug(desync, 2, "warning: train ground vehicle cache mismatch: vehicle {}, company {}, unit number {}, wagon {}", v->index, v->owner, v->unitnumber, length); + } + if (memcmp(&tra_cache[length], &Train::From(u)->tcache, sizeof(TrainCache)) != 0) { + Debug(desync, 2, "warning: train cache mismatch: vehicle {}, company {}, unit number {}, wagon {}", v->index, v->owner, v->unitnumber, length); + } + break; + case VEH_ROAD: + if (memcmp(&gro_cache[length], &RoadVehicle::From(u)->gcache, sizeof(GroundVehicleCache)) != 0) { + Debug(desync, 2, "warning: road vehicle ground vehicle cache mismatch: vehicle {}, company {}, unit number {}, wagon {}", v->index, v->owner, v->unitnumber, length); + } + break; + default: + break; + } + length++; + } + + free(grf_cache); + free(veh_cache); + free(gro_cache); + free(tra_cache); + } + + /* Check whether the caches are still valid */ + for (Vehicle *v : Vehicle::Iterate()) { + uint8_t buff[sizeof(VehicleCargoList)]; + memcpy(buff, &v->cargo, sizeof(VehicleCargoList)); + v->cargo.InvalidateCache(); + assert(memcmp(&v->cargo, buff, sizeof(VehicleCargoList)) == 0); + } + + /* Backup stations_near */ + std::vector old_town_stations_near; + for (Town *t : Town::Iterate()) old_town_stations_near.push_back(t->stations_near); + + std::vector old_industry_stations_near; + for (Industry *ind : Industry::Iterate()) old_industry_stations_near.push_back(ind->stations_near); + + std::vector old_station_industries_near; + for (Station *st : Station::Iterate()) old_station_industries_near.push_back(st->industries_near); + + for (Station *st : Station::Iterate()) { + for (GoodsEntry &ge : st->goods) { + uint8_t buff[sizeof(StationCargoList)]; + memcpy(buff, &ge.cargo, sizeof(StationCargoList)); + ge.cargo.InvalidateCache(); + assert(memcmp(&ge.cargo, buff, sizeof(StationCargoList)) == 0); + } + + /* Check docking tiles */ + TileArea ta; + std::map docking_tiles; + for (TileIndex tile : st->docking_station) { + ta.Add(tile); + docking_tiles[tile] = IsDockingTile(tile); + } + UpdateStationDockingTiles(st); + if (ta.tile != st->docking_station.tile || ta.w != st->docking_station.w || ta.h != st->docking_station.h) { + Debug(desync, 2, "warning: station docking mismatch: station {}, company {}", st->index, st->owner); + } + for (TileIndex tile : ta) { + if (docking_tiles[tile] != IsDockingTile(tile)) { + Debug(desync, 2, "warning: docking tile mismatch: tile {}", tile); + } + } + } + + Station::RecomputeCatchmentForAll(); + + /* Check industries_near */ + i = 0; + for (Station *st : Station::Iterate()) { + if (st->industries_near != old_station_industries_near[i]) { + Debug(desync, 2, "warning: station industries near mismatch: station {}", st->index); + } + i++; + } + + /* Check stations_near */ + i = 0; + for (Town *t : Town::Iterate()) { + if (t->stations_near != old_town_stations_near[i]) { + Debug(desync, 2, "warning: town stations near mismatch: town {}", t->index); + } + i++; + } + i = 0; + for (Industry *ind : Industry::Iterate()) { + if (ind->stations_near != old_industry_stations_near[i]) { + Debug(desync, 2, "warning: industry stations near mismatch: industry {}", ind->index); + } + i++; + } +} diff --git a/src/openttd.cpp b/src/openttd.cpp index fc6e60c4b1..5b53be6dd6 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -95,10 +95,9 @@ void MusicLoop(); void CallWindowGameTickEvent(); bool HandleBootstrap(); -extern void AfterLoadCompanyStats(); +extern void CheckCaches(); extern Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY); extern void OSOpenBrowser(const std::string &url); -extern void RebuildTownCaches(); extern void ShowOSErrorBox(const char *buf, bool system); extern std::string _config_file; @@ -1224,202 +1223,6 @@ void SwitchToMode(SwitchMode new_mode) } -/** - * Check the validity of some of the caches. - * Especially in the sense of desyncs between - * the cached value and what the value would - * be when calculated from the 'base' data. - */ -static void CheckCaches() -{ - /* Return here so it is easy to add checks that are run - * always to aid testing of caches. */ - if (_debug_desync_level <= 1) return; - - /* Check the town caches. */ - std::vector old_town_caches; - for (const Town *t : Town::Iterate()) { - old_town_caches.push_back(t->cache); - } - - RebuildTownCaches(); - RebuildSubsidisedSourceAndDestinationCache(); - - uint i = 0; - for (Town *t : Town::Iterate()) { - if (MemCmpT(old_town_caches.data() + i, &t->cache) != 0) { - Debug(desync, 2, "warning: town cache mismatch: town {}", t->index); - } - i++; - } - - /* Check company infrastructure cache. */ - std::vector old_infrastructure; - for (const Company *c : Company::Iterate()) old_infrastructure.push_back(c->infrastructure); - - AfterLoadCompanyStats(); - - i = 0; - for (const Company *c : Company::Iterate()) { - if (MemCmpT(old_infrastructure.data() + i, &c->infrastructure) != 0) { - Debug(desync, 2, "warning: infrastructure cache mismatch: company {}", c->index); - } - i++; - } - - /* Strict checking of the road stop cache entries */ - for (const RoadStop *rs : RoadStop::Iterate()) { - if (IsBayRoadStopTile(rs->xy)) continue; - - assert(rs->GetEntry(DIAGDIR_NE) != rs->GetEntry(DIAGDIR_NW)); - rs->GetEntry(DIAGDIR_NE)->CheckIntegrity(rs); - rs->GetEntry(DIAGDIR_NW)->CheckIntegrity(rs); - } - - for (Vehicle *v : Vehicle::Iterate()) { - if (v != v->First() || v->vehstatus & VS_CRASHED || !v->IsPrimaryVehicle()) continue; - - uint length = 0; - for (const Vehicle *u = v; u != nullptr; u = u->Next()) length++; - - NewGRFCache *grf_cache = CallocT(length); - VehicleCache *veh_cache = CallocT(length); - GroundVehicleCache *gro_cache = CallocT(length); - TrainCache *tra_cache = CallocT(length); - - length = 0; - for (const Vehicle *u = v; u != nullptr; u = u->Next()) { - FillNewGRFVehicleCache(u); - grf_cache[length] = u->grf_cache; - veh_cache[length] = u->vcache; - switch (u->type) { - case VEH_TRAIN: - gro_cache[length] = Train::From(u)->gcache; - tra_cache[length] = Train::From(u)->tcache; - break; - case VEH_ROAD: - gro_cache[length] = RoadVehicle::From(u)->gcache; - break; - default: - break; - } - length++; - } - - switch (v->type) { - case VEH_TRAIN: Train::From(v)->ConsistChanged(CCF_TRACK); break; - case VEH_ROAD: RoadVehUpdateCache(RoadVehicle::From(v)); break; - case VEH_AIRCRAFT: UpdateAircraftCache(Aircraft::From(v)); break; - case VEH_SHIP: Ship::From(v)->UpdateCache(); break; - default: break; - } - - length = 0; - for (const Vehicle *u = v; u != nullptr; u = u->Next()) { - FillNewGRFVehicleCache(u); - if (memcmp(&grf_cache[length], &u->grf_cache, sizeof(NewGRFCache)) != 0) { - Debug(desync, 2, "warning: newgrf cache mismatch: type {}, vehicle {}, company {}, unit number {}, wagon {}", v->type, v->index, v->owner, v->unitnumber, length); - } - if (memcmp(&veh_cache[length], &u->vcache, sizeof(VehicleCache)) != 0) { - Debug(desync, 2, "warning: vehicle cache mismatch: type {}, vehicle {}, company {}, unit number {}, wagon {}", v->type, v->index, v->owner, v->unitnumber, length); - } - switch (u->type) { - case VEH_TRAIN: - if (memcmp(&gro_cache[length], &Train::From(u)->gcache, sizeof(GroundVehicleCache)) != 0) { - Debug(desync, 2, "warning: train ground vehicle cache mismatch: vehicle {}, company {}, unit number {}, wagon {}", v->index, v->owner, v->unitnumber, length); - } - if (memcmp(&tra_cache[length], &Train::From(u)->tcache, sizeof(TrainCache)) != 0) { - Debug(desync, 2, "warning: train cache mismatch: vehicle {}, company {}, unit number {}, wagon {}", v->index, v->owner, v->unitnumber, length); - } - break; - case VEH_ROAD: - if (memcmp(&gro_cache[length], &RoadVehicle::From(u)->gcache, sizeof(GroundVehicleCache)) != 0) { - Debug(desync, 2, "warning: road vehicle ground vehicle cache mismatch: vehicle {}, company {}, unit number {}, wagon {}", v->index, v->owner, v->unitnumber, length); - } - break; - default: - break; - } - length++; - } - - free(grf_cache); - free(veh_cache); - free(gro_cache); - free(tra_cache); - } - - /* Check whether the caches are still valid */ - for (Vehicle *v : Vehicle::Iterate()) { - uint8_t buff[sizeof(VehicleCargoList)]; - memcpy(buff, &v->cargo, sizeof(VehicleCargoList)); - v->cargo.InvalidateCache(); - assert(memcmp(&v->cargo, buff, sizeof(VehicleCargoList)) == 0); - } - - /* Backup stations_near */ - std::vector old_town_stations_near; - for (Town *t : Town::Iterate()) old_town_stations_near.push_back(t->stations_near); - - std::vector old_industry_stations_near; - for (Industry *ind : Industry::Iterate()) old_industry_stations_near.push_back(ind->stations_near); - - std::vector old_station_industries_near; - for (Station *st : Station::Iterate()) old_station_industries_near.push_back(st->industries_near); - - for (Station *st : Station::Iterate()) { - for (GoodsEntry &ge : st->goods) { - uint8_t buff[sizeof(StationCargoList)]; - memcpy(buff, &ge.cargo, sizeof(StationCargoList)); - ge.cargo.InvalidateCache(); - assert(memcmp(&ge.cargo, buff, sizeof(StationCargoList)) == 0); - } - - /* Check docking tiles */ - TileArea ta; - std::map docking_tiles; - for (TileIndex tile : st->docking_station) { - ta.Add(tile); - docking_tiles[tile] = IsDockingTile(tile); - } - UpdateStationDockingTiles(st); - if (ta.tile != st->docking_station.tile || ta.w != st->docking_station.w || ta.h != st->docking_station.h) { - Debug(desync, 2, "warning: station docking mismatch: station {}, company {}", st->index, st->owner); - } - for (TileIndex tile : ta) { - if (docking_tiles[tile] != IsDockingTile(tile)) { - Debug(desync, 2, "warning: docking tile mismatch: tile {}", tile); - } - } - } - - Station::RecomputeCatchmentForAll(); - - /* Check industries_near */ - i = 0; - for (Station *st : Station::Iterate()) { - if (st->industries_near != old_station_industries_near[i]) { - Debug(desync, 2, "warning: station industries near mismatch: station {}", st->index); - } - i++; - } - - /* Check stations_near */ - i = 0; - for (Town *t : Town::Iterate()) { - if (t->stations_near != old_town_stations_near[i]) { - Debug(desync, 2, "warning: town stations near mismatch: town {}", t->index); - } - i++; - } - i = 0; - for (Industry *ind : Industry::Iterate()) { - if (ind->stations_near != old_industry_stations_near[i]) { - Debug(desync, 2, "warning: industry stations near mismatch: industry {}", ind->index); - } - i++; - } -} /** * State controlling game loop. From 3b75d8bbf8a85aee4975755823e36f1b6583bdc2 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 16 Apr 2024 20:57:12 +0100 Subject: [PATCH 347/695] Fix: Use modern comparisons instead of memcmp in cache check. This uses C++20 default operator<=> to provide comparisons of some objects. This works properly with caches that containers. --- src/cachecheck.cpp | 30 +++++++++++++++++------------- src/company_base.h | 2 ++ src/ground_vehicle.hpp | 2 ++ src/saveload/company_sl.cpp | 2 +- src/town.h | 4 ++++ src/train.h | 2 ++ src/vehicle_base.h | 4 ++++ src/viewport_type.h | 4 ++++ 8 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/cachecheck.cpp b/src/cachecheck.cpp index e1f600c174..4f97ba66b4 100644 --- a/src/cachecheck.cpp +++ b/src/cachecheck.cpp @@ -50,7 +50,7 @@ void CheckCaches() uint i = 0; for (Town *t : Town::Iterate()) { - if (MemCmpT(old_town_caches.data() + i, &t->cache) != 0) { + if (old_town_caches[i] != t->cache) { Debug(desync, 2, "warning: town cache mismatch: town {}", t->index); } i++; @@ -64,7 +64,7 @@ void CheckCaches() i = 0; for (const Company *c : Company::Iterate()) { - if (MemCmpT(old_infrastructure.data() + i, &c->infrastructure) != 0) { + if (old_infrastructure[i] != c->infrastructure) { Debug(desync, 2, "warning: infrastructure cache mismatch: company {}", c->index); } i++; @@ -120,23 +120,23 @@ void CheckCaches() length = 0; for (const Vehicle *u = v; u != nullptr; u = u->Next()) { FillNewGRFVehicleCache(u); - if (memcmp(&grf_cache[length], &u->grf_cache, sizeof(NewGRFCache)) != 0) { + if (grf_cache[length] != u->grf_cache) { Debug(desync, 2, "warning: newgrf cache mismatch: type {}, vehicle {}, company {}, unit number {}, wagon {}", v->type, v->index, v->owner, v->unitnumber, length); } - if (memcmp(&veh_cache[length], &u->vcache, sizeof(VehicleCache)) != 0) { + if (veh_cache[length] != u->vcache) { Debug(desync, 2, "warning: vehicle cache mismatch: type {}, vehicle {}, company {}, unit number {}, wagon {}", v->type, v->index, v->owner, v->unitnumber, length); } switch (u->type) { case VEH_TRAIN: - if (memcmp(&gro_cache[length], &Train::From(u)->gcache, sizeof(GroundVehicleCache)) != 0) { + if (gro_cache[length] != Train::From(u)->gcache) { Debug(desync, 2, "warning: train ground vehicle cache mismatch: vehicle {}, company {}, unit number {}, wagon {}", v->index, v->owner, v->unitnumber, length); } - if (memcmp(&tra_cache[length], &Train::From(u)->tcache, sizeof(TrainCache)) != 0) { + if (tra_cache[length] != Train::From(u)->tcache) { Debug(desync, 2, "warning: train cache mismatch: vehicle {}, company {}, unit number {}, wagon {}", v->index, v->owner, v->unitnumber, length); } break; case VEH_ROAD: - if (memcmp(&gro_cache[length], &RoadVehicle::From(u)->gcache, sizeof(GroundVehicleCache)) != 0) { + if (gro_cache[length] != RoadVehicle::From(u)->gcache) { Debug(desync, 2, "warning: road vehicle ground vehicle cache mismatch: vehicle {}, company {}, unit number {}, wagon {}", v->index, v->owner, v->unitnumber, length); } break; @@ -154,10 +154,13 @@ void CheckCaches() /* Check whether the caches are still valid */ for (Vehicle *v : Vehicle::Iterate()) { - uint8_t buff[sizeof(VehicleCargoList)]; - memcpy(buff, &v->cargo, sizeof(VehicleCargoList)); + [[maybe_unused]] const auto a = v->cargo.PeriodsInTransit(); + [[maybe_unused]] const auto b = v->cargo.TotalCount(); + [[maybe_unused]] const auto c = v->cargo.GetFeederShare(); v->cargo.InvalidateCache(); - assert(memcmp(&v->cargo, buff, sizeof(VehicleCargoList)) == 0); + assert(a == v->cargo.PeriodsInTransit()); + assert(b == v->cargo.TotalCount()); + assert(c == v->cargo.GetFeederShare()); } /* Backup stations_near */ @@ -172,10 +175,11 @@ void CheckCaches() for (Station *st : Station::Iterate()) { for (GoodsEntry &ge : st->goods) { - uint8_t buff[sizeof(StationCargoList)]; - memcpy(buff, &ge.cargo, sizeof(StationCargoList)); + [[maybe_unused]] const auto a = ge.cargo.PeriodsInTransit(); + [[maybe_unused]] const auto b = ge.cargo.TotalCount(); ge.cargo.InvalidateCache(); - assert(memcmp(&ge.cargo, buff, sizeof(StationCargoList)) == 0); + assert(a == ge.cargo.PeriodsInTransit()); + assert(b == ge.cargo.TotalCount()); } /* Check docking tiles */ diff --git a/src/company_base.h b/src/company_base.h index 98b5bb8612..baa1a7ef78 100644 --- a/src/company_base.h +++ b/src/company_base.h @@ -37,6 +37,8 @@ struct CompanyInfrastructure { uint32_t station; ///< Count of company owned station tiles. uint32_t airport; ///< Count of company owned airports. + auto operator<=>(const CompanyInfrastructure &) const = default; + /** Get total sum of all owned track bits. */ uint32_t GetRailTotal() const { diff --git a/src/ground_vehicle.hpp b/src/ground_vehicle.hpp index 6ff4041603..c14d04ca79 100644 --- a/src/ground_vehicle.hpp +++ b/src/ground_vehicle.hpp @@ -46,6 +46,8 @@ struct GroundVehicleCache { /* Cached UI information. */ uint16_t last_speed; ///< The last speed we did display, so we only have to redraw when this changes. + + auto operator<=>(const GroundVehicleCache &) const = default; }; /** Ground vehicle flags. */ diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp index ef83c6de03..50a247da54 100644 --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -96,7 +96,7 @@ CompanyManagerFace ConvertFromOldCompanyManagerFace(uint32_t face) void AfterLoadCompanyStats() { /* Reset infrastructure statistics to zero. */ - for (Company *c : Company::Iterate()) MemSetT(&c->infrastructure, 0); + for (Company *c : Company::Iterate()) c->infrastructure = {}; /* Collect airport count. */ for (const Station *st : Station::Iterate()) { diff --git a/src/town.h b/src/town.h index 3aff041910..5034041136 100644 --- a/src/town.h +++ b/src/town.h @@ -21,6 +21,8 @@ template struct BuildingCounts { std::vector id_count; std::vector class_count; + + auto operator<=>(const BuildingCounts &) const = default; }; static const uint CUSTOM_TOWN_NUMBER_DIFFICULTY = 4; ///< value for custom town number in difficulty settings @@ -44,6 +46,8 @@ struct TownCache { PartOfSubsidy part_of_subsidy; ///< Is this town a source/destination of a subsidy? std::array squared_town_zone_radius; ///< UpdateTownRadius updates this given the house count BuildingCounts building_counts; ///< The number of each type of building in the town + + auto operator<=>(const TownCache &) const = default; }; /** Town data structure. */ diff --git a/src/train.h b/src/train.h index fd7b5f7656..bbf1e04365 100644 --- a/src/train.h +++ b/src/train.h @@ -79,6 +79,8 @@ struct TrainCache { int16_t cached_curve_speed_mod; ///< curve speed modifier of the entire train uint16_t cached_max_curve_speed; ///< max consist speed limited by curves + + auto operator<=>(const TrainCache &) const = default; }; /** diff --git a/src/vehicle_base.h b/src/vehicle_base.h index 6accdd7425..7f05ef19b2 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -73,6 +73,8 @@ struct NewGRFCache { uint32_t company_information; ///< Cache for NewGRF var 43. uint32_t position_in_vehicle; ///< Cache for NewGRF var 4D. uint8_t cache_valid; ///< Bitset that indicates which cache values are valid. + + auto operator<=>(const NewGRFCache &) const = default; }; /** Meaning of the various bits of the visual effect. */ @@ -125,6 +127,8 @@ struct VehicleCache { uint16_t cached_cargo_age_period; ///< Number of ticks before carried cargo is aged. uint8_t cached_vis_effect; ///< Visual effect to show (see #VisualEffect) + + auto operator<=>(const VehicleCache &) const = default; }; /** Sprite sequence for a vehicle part. */ diff --git a/src/viewport_type.h b/src/viewport_type.h index 007528f436..4a433387dd 100644 --- a/src/viewport_type.h +++ b/src/viewport_type.h @@ -41,6 +41,8 @@ struct ViewportSign { uint16_t width_normal; ///< The width when not zoomed out (normal font) uint16_t width_small; ///< The width when zoomed out (small font) + auto operator<=>(const ViewportSign &) const = default; + void UpdatePosition(int center, int top, StringID str, StringID str_small = STR_NULL); void MarkDirty(ZoomLevel maxzoom = ZOOM_LVL_MAX) const; }; @@ -49,6 +51,8 @@ struct ViewportSign { struct TrackedViewportSign : ViewportSign { bool kdtree_valid; ///< Are the sign data valid for use with the _viewport_sign_kdtree? + auto operator<=>(const TrackedViewportSign &) const = default; + /** * Update the position of the viewport sign. * Note that this function hides the base class function. From 774f811217ddb13b6be4dee6ca6b96276e5493a5 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 18 Apr 2024 22:14:16 +0100 Subject: [PATCH 348/695] Codechange: Use std::optional for town parent scope resolver. (#12530) When resolving NewGRF, the parent town_scope is lazily initialised as it does not always need to be used. Replace the manually managed pointer with std::optional to simplify. Using std::optional avoids extra memory allocation. --- src/newgrf_airport.cpp | 6 +++--- src/newgrf_airport.h | 2 +- src/newgrf_industries.cpp | 14 ++++---------- src/newgrf_industries.h | 3 +-- src/newgrf_object.cpp | 12 +++--------- src/newgrf_object.h | 3 +-- src/newgrf_roadstop.cpp | 16 ++++------------ src/newgrf_roadstop.h | 3 +-- src/newgrf_station.cpp | 13 ++++--------- src/newgrf_station.h | 3 +-- 10 files changed, 23 insertions(+), 52 deletions(-) diff --git a/src/newgrf_airport.cpp b/src/newgrf_airport.cpp index bdac26abaf..b50246bbe7 100644 --- a/src/newgrf_airport.cpp +++ b/src/newgrf_airport.cpp @@ -219,7 +219,7 @@ uint32_t AirportResolverObject::GetDebugID() const */ TownScopeResolver *AirportResolverObject::GetTown() { - if (!this->town_scope) { + if (!this->town_scope.has_value()) { Town *t = nullptr; if (this->airport_scope.st != nullptr) { t = this->airport_scope.st->town; @@ -227,9 +227,9 @@ TownScopeResolver *AirportResolverObject::GetTown() t = ClosestTownFromTile(this->airport_scope.tile, UINT_MAX); } if (t == nullptr) return nullptr; - this->town_scope.reset(new TownScopeResolver(*this, t, this->airport_scope.st == nullptr)); + this->town_scope.emplace(*this, t, this->airport_scope.st == nullptr); } - return this->town_scope.get(); + return &*this->town_scope; } /** diff --git a/src/newgrf_airport.h b/src/newgrf_airport.h index 7099e42e47..45b2244bd7 100644 --- a/src/newgrf_airport.h +++ b/src/newgrf_airport.h @@ -174,7 +174,7 @@ struct AirportScopeResolver : public ScopeResolver { /** Resolver object for airports. */ struct AirportResolverObject : public ResolverObject { AirportScopeResolver airport_scope; - std::unique_ptr town_scope; ///< The town scope resolver (created on the first call). + std::optional town_scope = std::nullopt; ///< The town scope resolver (created on the first call). AirportResolverObject(TileIndex tile, Station *st, uint8_t airport_id, uint8_t layout, CallbackID callback = CBID_NO_CALLBACK, uint32_t callback_param1 = 0, uint32_t callback_param2 = 0); diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp index 7f574fb9b9..7ad754f8d5 100644 --- a/src/newgrf_industries.cpp +++ b/src/newgrf_industries.cpp @@ -467,24 +467,18 @@ static const GRFFile *GetGrffile(IndustryType type) IndustriesResolverObject::IndustriesResolverObject(TileIndex tile, Industry *indus, IndustryType type, uint32_t random_bits, CallbackID callback, uint32_t callback_param1, uint32_t callback_param2) : ResolverObject(GetGrffile(type), callback, callback_param1, callback_param2), - industries_scope(*this, tile, indus, type, random_bits), - town_scope(nullptr) + industries_scope(*this, tile, indus, type, random_bits) { this->root_spritegroup = GetIndustrySpec(type)->grf_prop.spritegroup[0]; } -IndustriesResolverObject::~IndustriesResolverObject() -{ - delete this->town_scope; -} - /** * Get or create the town scope object associated with the industry. * @return The associated town scope, if it exists. */ TownScopeResolver *IndustriesResolverObject::GetTown() { - if (this->town_scope == nullptr) { + if (!this->town_scope.has_value()) { Town *t = nullptr; bool readonly = true; if (this->industries_scope.industry != nullptr) { @@ -494,9 +488,9 @@ TownScopeResolver *IndustriesResolverObject::GetTown() t = ClosestTownFromTile(this->industries_scope.tile, UINT_MAX); } if (t == nullptr) return nullptr; - this->town_scope = new TownScopeResolver(*this, t, readonly); + this->town_scope.emplace(*this, t, readonly); } - return this->town_scope; + return &*this->town_scope; } GrfSpecFeature IndustriesResolverObject::GetFeature() const diff --git a/src/newgrf_industries.h b/src/newgrf_industries.h index a195e978a4..827302ec5d 100644 --- a/src/newgrf_industries.h +++ b/src/newgrf_industries.h @@ -41,11 +41,10 @@ struct IndustriesScopeResolver : public ScopeResolver { /** Resolver for industries. */ struct IndustriesResolverObject : public ResolverObject { IndustriesScopeResolver industries_scope; ///< Scope resolver for the industry. - TownScopeResolver *town_scope; ///< Scope resolver for the associated town (if needed and available, else \c nullptr). + std::optional town_scope = std::nullopt; ///< Scope resolver for the associated town (if needed and available, else \c std::nullopt). IndustriesResolverObject(TileIndex tile, Industry *indus, IndustryType type, uint32_t random_bits = 0, CallbackID callback = CBID_NO_CALLBACK, uint32_t callback_param1 = 0, uint32_t callback_param2 = 0); - ~IndustriesResolverObject(); TownScopeResolver *GetTown(); diff --git a/src/newgrf_object.cpp b/src/newgrf_object.cpp index d938bb4930..7d9765f1f6 100644 --- a/src/newgrf_object.cpp +++ b/src/newgrf_object.cpp @@ -378,16 +378,10 @@ ObjectResolverObject::ObjectResolverObject(const ObjectSpec *spec, Object *obj, CallbackID callback, uint32_t param1, uint32_t param2) : ResolverObject(spec->grf_prop.grffile, callback, param1, param2), object_scope(*this, obj, spec, tile, view) { - this->town_scope = nullptr; this->root_spritegroup = (obj == nullptr && spec->grf_prop.spritegroup[OBJECT_SPRITE_GROUP_PURCHASE] != nullptr) ? spec->grf_prop.spritegroup[OBJECT_SPRITE_GROUP_PURCHASE] : spec->grf_prop.spritegroup[OBJECT_SPRITE_GROUP_DEFAULT]; } -ObjectResolverObject::~ObjectResolverObject() -{ - delete this->town_scope; -} - /** * Get the town resolver scope that belongs to this object resolver. * On the first call, the town scope is created (if possible). @@ -395,7 +389,7 @@ ObjectResolverObject::~ObjectResolverObject() */ TownScopeResolver *ObjectResolverObject::GetTown() { - if (this->town_scope == nullptr) { + if (!this->town_scope.has_value()) { Town *t; if (this->object_scope.obj != nullptr) { t = this->object_scope.obj->town; @@ -403,9 +397,9 @@ TownScopeResolver *ObjectResolverObject::GetTown() t = ClosestTownFromTile(this->object_scope.tile, UINT_MAX); } if (t == nullptr) return nullptr; - this->town_scope = new TownScopeResolver(*this, t, this->object_scope.obj == nullptr); + this->town_scope.emplace(*this, t, this->object_scope.obj == nullptr); } - return this->town_scope; + return &*this->town_scope; } GrfSpecFeature ObjectResolverObject::GetFeature() const diff --git a/src/newgrf_object.h b/src/newgrf_object.h index 8b17a7c7a6..9b124ab0f8 100644 --- a/src/newgrf_object.h +++ b/src/newgrf_object.h @@ -133,11 +133,10 @@ struct ObjectScopeResolver : public ScopeResolver { /** A resolver object to be used with feature 0F spritegroups. */ struct ObjectResolverObject : public ResolverObject { ObjectScopeResolver object_scope; ///< The object scope resolver. - TownScopeResolver *town_scope; ///< The town scope resolver (created on the first call). + std::optional town_scope = std::nullopt; ///< The town scope resolver (created on the first call). ObjectResolverObject(const ObjectSpec *spec, Object *o, TileIndex tile, uint8_t view = 0, CallbackID callback = CBID_NO_CALLBACK, uint32_t param1 = 0, uint32_t param2 = 0); - ~ObjectResolverObject(); ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0) override { diff --git a/src/newgrf_roadstop.cpp b/src/newgrf_roadstop.cpp index f45f051dee..eaa76fe5f9 100644 --- a/src/newgrf_roadstop.cpp +++ b/src/newgrf_roadstop.cpp @@ -210,10 +210,7 @@ const SpriteGroup *RoadStopResolverObject::ResolveReal(const RealSpriteGroup *gr RoadStopResolverObject::RoadStopResolverObject(const RoadStopSpec *roadstopspec, BaseStation *st, TileIndex tile, RoadType roadtype, StationType type, uint8_t view, CallbackID callback, uint32_t param1, uint32_t param2) : ResolverObject(roadstopspec->grf_prop.grffile, callback, param1, param2), roadstop_scope(*this, st, roadstopspec, tile, roadtype, type, view) - { - - this->town_scope = nullptr; - +{ CargoID ctype = SpriteGroupCargo::SG_DEFAULT_NA; if (st == nullptr) { @@ -240,14 +237,9 @@ RoadStopResolverObject::RoadStopResolverObject(const RoadStopSpec *roadstopspec, this->root_spritegroup = roadstopspec->grf_prop.spritegroup[ctype]; } -RoadStopResolverObject::~RoadStopResolverObject() -{ - delete this->town_scope; -} - TownScopeResolver *RoadStopResolverObject::GetTown() { - if (this->town_scope == nullptr) { + if (!this->town_scope.has_value()) { Town *t; if (this->roadstop_scope.st != nullptr) { t = this->roadstop_scope.st->town; @@ -255,9 +247,9 @@ TownScopeResolver *RoadStopResolverObject::GetTown() t = ClosestTownFromTile(this->roadstop_scope.tile, UINT_MAX); } if (t == nullptr) return nullptr; - this->town_scope = new TownScopeResolver(*this, t, this->roadstop_scope.st == nullptr); + this->town_scope.emplace(*this, t, this->roadstop_scope.st == nullptr); } - return this->town_scope; + return &*this->town_scope; } uint16_t GetRoadStopCallback(CallbackID callback, uint32_t param1, uint32_t param2, const RoadStopSpec *roadstopspec, BaseStation *st, TileIndex tile, RoadType roadtype, StationType type, uint8_t view) diff --git a/src/newgrf_roadstop.h b/src/newgrf_roadstop.h index 03df70e9fa..780afd5d86 100644 --- a/src/newgrf_roadstop.h +++ b/src/newgrf_roadstop.h @@ -95,10 +95,9 @@ struct RoadStopScopeResolver : public ScopeResolver { /** Road stop resolver. */ struct RoadStopResolverObject : public ResolverObject { RoadStopScopeResolver roadstop_scope; ///< The stop scope resolver. - TownScopeResolver *town_scope; ///< The town scope resolver (created on the first call). + std::optional town_scope = std::nullopt; ///< The town scope resolver (created on the first call). RoadStopResolverObject(const RoadStopSpec *roadstopspec, BaseStation *st, TileIndex tile, RoadType roadtype, StationType type, uint8_t view, CallbackID callback = CBID_NO_CALLBACK, uint32_t param1 = 0, uint32_t param2 = 0); - ~RoadStopResolverObject(); ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0) override { diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index f6c68eaa10..1997b10274 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -254,7 +254,7 @@ static struct { */ TownScopeResolver *StationResolverObject::GetTown() { - if (this->town_scope == nullptr) { + if (!this->town_scope.has_value()) { Town *t = nullptr; if (this->station_scope.st != nullptr) { t = this->station_scope.st->town; @@ -262,9 +262,9 @@ TownScopeResolver *StationResolverObject::GetTown() t = ClosestTownFromTile(this->station_scope.tile, UINT_MAX); } if (t == nullptr) return nullptr; - this->town_scope = new TownScopeResolver(*this, t, this->station_scope.st == nullptr); + this->town_scope.emplace(*this, t, this->station_scope.st == nullptr); } - return this->town_scope; + return &*this->town_scope; } /* virtual */ uint32_t StationScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const @@ -569,7 +569,7 @@ uint32_t StationResolverObject::GetDebugID() const StationResolverObject::StationResolverObject(const StationSpec *statspec, BaseStation *base_station, TileIndex tile, CallbackID callback, uint32_t callback_param1, uint32_t callback_param2) : ResolverObject(statspec->grf_prop.grffile, callback, callback_param1, callback_param2), - station_scope(*this, statspec, base_station, tile), town_scope(nullptr) + station_scope(*this, statspec, base_station, tile) { /* Invalidate all cached vars */ _svc.valid = 0; @@ -600,11 +600,6 @@ StationResolverObject::StationResolverObject(const StationSpec *statspec, BaseSt this->root_spritegroup = this->station_scope.statspec->grf_prop.spritegroup[this->station_scope.cargo_type]; } -StationResolverObject::~StationResolverObject() -{ - delete this->town_scope; -} - /** * Resolve sprites for drawing a station tile. * @param statspec Station spec diff --git a/src/newgrf_station.h b/src/newgrf_station.h index 2924ff4288..f1c619153e 100644 --- a/src/newgrf_station.h +++ b/src/newgrf_station.h @@ -49,11 +49,10 @@ struct StationScopeResolver : public ScopeResolver { /** Station resolver. */ struct StationResolverObject : public ResolverObject { StationScopeResolver station_scope; ///< The station scope resolver. - TownScopeResolver *town_scope; ///< The town scope resolver (created on the first call). + std::optional town_scope = std::nullopt; ///< The town scope resolver (created on the first call). StationResolverObject(const StationSpec *statspec, BaseStation *st, TileIndex tile, CallbackID callback = CBID_NO_CALLBACK, uint32_t callback_param1 = 0, uint32_t callback_param2 = 0); - ~StationResolverObject(); TownScopeResolver *GetTown(); From 0d1fc47edb271f55dded207506961453c3ed0b5e Mon Sep 17 00:00:00 2001 From: dP Date: Fri, 19 Apr 2024 07:54:20 +0700 Subject: [PATCH 349/695] Cleanup: Remove redundant break statement (#12527) --- src/graph_gui.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 01f6f4ad15..10d7e1c495 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -1077,7 +1077,6 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { ToggleBit(_legend_excluded_cargo, (*it)->Index()); this->UpdateExcludedData(); this->SetDirty(); - break; } break; } From 7848e80f7131a475855234f9b262d5a35368ec3c Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 19 Apr 2024 04:40:34 +0000 Subject: [PATCH 350/695] Update: Translations from eints english (us): 4 changes by 2TallTyler korean: 11 changes by telk5093 --- src/lang/english_US.txt | 4 ++++ src/lang/korean.txt | 13 +++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index f9ffd8aaf2..3adfe2a16a 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -5286,6 +5286,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Change y STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}No vehicles are available yet STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Start a new game after {DATE_SHORT} or use a NewGRF that provides early vehicles +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}No town-buildable road types are available +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Change your NewGRF configuration +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}No town-buildable road types are available yet +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Start a new game after {DATE_SHORT} or use a NewGRF that provides early town-buildable road types # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Can't make train pass signal at danger... diff --git a/src/lang/korean.txt b/src/lang/korean.txt index c4cfb0abfe..f4b8da4248 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -3489,6 +3489,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :도로 종류 STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF 변수 60+x 매개 변수 (16진법) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}스프라이트 정렬: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}스프라이트 정렬: 액션 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}스프라이트 정렬: 액션 0x5, 타입 {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}다음 스프라이트 STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}(유사/재색상/글씨 스프라이트를 제외한) 다음 보통 스프라이트로 이동하고, 마지막 스프라이트에 다다르면 다시 처음으로 돌아갑니다. STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}스프라이트 번호 입력 @@ -3497,6 +3500,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}이전 STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}(유사/재색상/글씨 스프라이트를 제외한) 이전 보통 스프라이트로 이동하고, 첫 번째 스프라이트에 다다르면 마지막으로 돌아갑니다. STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}현재 선택된 스프라이트를 표현합니다. 이 스프라이트를 표현할 때, 정렬 상태는 무시하고 표현합니다. STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}X축이나 Y축 방향으로 스프라이트를 이동시킵니다. CTRL+클릭하면 한 번에 8씩 이동시킬 수 있습니다 +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}오프셋 가운데 정렬 @@ -5279,10 +5283,14 @@ STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... 차 STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... 동일한 구성이 아닌 차량이 있습니다 STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}사용할 수 있는 차량이 모두 없어질 것입니다 -STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}NewGRF 설정을 변경하십시오 +STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}NewGRF 설정을 변경하세요 STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}사용할 수 있는 차량이 하나도 없습니다 -STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}{DATE_SHORT}년 이후에 새로운 게임을 시작하거나 차량이 더 빨리 개발되는 NewGRF을 사용하십시오. +STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}{DATE_SHORT}년 이후에 새로운 게임을 시작하거나 차량이 더 빨리 개발되는 NewGRF을 사용하세요 +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}도시가 만들 수 있는 도로 종류가 없습니다 +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}NewGRF 설정을 변경하세요 +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}아직 도시가 만들 수 있는 도로 종류가 없습니다 +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}{DATE_SHORT}년 이후에 새로운 게임을 시작하거나 도시가 더 빨리 사용할 수 있는 도로 종류를 추가하는 NewGRF를 사용하세요 # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}너무 위험해서 신호를 무시할 수 없습니다... @@ -5834,6 +5842,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} From 3b80a8255f02038166aa6ee38d9d39dfbb7cff8e Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 19 Apr 2024 08:19:31 +0100 Subject: [PATCH 351/695] Fix #12433: Width of unit number display was too narrow. (#12534) Digit width was counted, but ignored the thousands separator. --- src/vehicle_gui.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 6ec093a182..20fa229c9f 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -1691,6 +1691,17 @@ uint GetVehicleListHeight(VehicleType type, uint divisor) return base + (rem == 0 ? 0 : divisor - rem); } +/** + * Get width required for the formatted unit number display. + * @param digits Number of digits required for unit number. + * @return Required width in pixels. + */ +static int GetUnitNumberWidth(int digits) +{ + SetDParamMaxDigits(0, digits); + return GetStringBoundingBox(STR_JUST_COMMA).width; +} + /** * Draw all the vehicle list items. * @param selected_vehicle The vehicle that is to be highlighted. @@ -1703,7 +1714,7 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int bool rtl = _current_text_dir == TD_RTL; Dimension profit = GetSpriteSize(SPR_PROFIT_LOT); - int text_offset = std::max(profit.width, GetDigitWidth() * this->unitnumber_digits) + WidgetDimensions::scaled.hsep_normal; + int text_offset = std::max(profit.width, GetUnitNumberWidth(this->unitnumber_digits)) + WidgetDimensions::scaled.hsep_normal; Rect tr = ir.Indent(text_offset, rtl); bool show_orderlist = this->vli.vtype >= VEH_SHIP; From 6ee31a2a2293afec02e2d26ab1682ce1104746a2 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 19 Apr 2024 13:54:22 +0100 Subject: [PATCH 352/695] Codechange: Use string_view in IniItem/IniGroup/IniFile. (#12535) This avoids making extra copies of strings. --- src/ini_load.cpp | 30 +++++++++++++++--------------- src/ini_type.h | 24 ++++++++++++------------ 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/ini_load.cpp b/src/ini_load.cpp index 1a6eed76f5..11e2077049 100644 --- a/src/ini_load.cpp +++ b/src/ini_load.cpp @@ -20,7 +20,7 @@ * @param parent the group we belong to * @param name the name of the item */ -IniItem::IniItem(const std::string &name) +IniItem::IniItem(std::string_view name) { this->name = StrMakeValid(name); } @@ -29,7 +29,7 @@ IniItem::IniItem(const std::string &name) * Replace the current value with another value. * @param value the value to replace with. */ -void IniItem::SetValue(const std::string_view value) +void IniItem::SetValue(std::string_view value) { this->value.emplace(value); } @@ -39,7 +39,7 @@ void IniItem::SetValue(const std::string_view value) * @param parent the file we belong to * @param name the name of the group */ -IniGroup::IniGroup(const std::string &name, IniGroupType type) : type(type), comment("\n") +IniGroup::IniGroup(std::string_view name, IniGroupType type) : type(type), comment("\n") { this->name = StrMakeValid(name); } @@ -49,7 +49,7 @@ IniGroup::IniGroup(const std::string &name, IniGroupType type) : type(type), com * @param name name of the item to find. * @return the requested item or nullptr if not found. */ -const IniItem *IniGroup::GetItem(const std::string &name) const +const IniItem *IniGroup::GetItem(std::string_view name) const { for (const IniItem &item : this->items) { if (item.name == name) return &item; @@ -63,7 +63,7 @@ const IniItem *IniGroup::GetItem(const std::string &name) const * @param name name of the item to find. * @return the requested item. */ -IniItem &IniGroup::GetOrCreateItem(const std::string &name) +IniItem &IniGroup::GetOrCreateItem(std::string_view name) { for (IniItem &item : this->items) { if (item.name == name) return item; @@ -78,7 +78,7 @@ IniItem &IniGroup::GetOrCreateItem(const std::string &name) * @param name name of the item to create. * @return the created item. */ -IniItem &IniGroup::CreateItem(const std::string &name) +IniItem &IniGroup::CreateItem(std::string_view name) { return this->items.emplace_back(name); } @@ -87,7 +87,7 @@ IniItem &IniGroup::CreateItem(const std::string &name) * Remove the item with the given name. * @param name Name of the item to remove. */ -void IniGroup::RemoveItem(const std::string &name) +void IniGroup::RemoveItem(std::string_view name) { this->items.remove_if([&name](const IniItem &item) { return item.name == name; }); } @@ -116,7 +116,7 @@ IniLoadFile::IniLoadFile(const IniGroupNameList &list_group_names, const IniGrou * @param name name of the group to find. * @return The requested group or \c nullptr if not found. */ -const IniGroup *IniLoadFile::GetGroup(const std::string &name) const +const IniGroup *IniLoadFile::GetGroup(std::string_view name) const { for (const IniGroup &group : this->groups) { if (group.name == name) return &group; @@ -130,7 +130,7 @@ const IniGroup *IniLoadFile::GetGroup(const std::string &name) const * @param name name of the group to find. * @return The requested group or \c nullptr if not found. */ -IniGroup *IniLoadFile::GetGroup(const std::string &name) +IniGroup *IniLoadFile::GetGroup(std::string_view name) { for (IniGroup &group : this->groups) { if (group.name == name) return &group; @@ -144,7 +144,7 @@ IniGroup *IniLoadFile::GetGroup(const std::string &name) * @param name name of the group to find. * @return the requested group. */ -IniGroup &IniLoadFile::GetOrCreateGroup(const std::string &name) +IniGroup &IniLoadFile::GetOrCreateGroup(std::string_view name) { for (IniGroup &group : this->groups) { if (group.name == name) return group; @@ -159,7 +159,7 @@ IniGroup &IniLoadFile::GetOrCreateGroup(const std::string &name) * @param name name of the group to create. * @return the created group. */ -IniGroup &IniLoadFile::CreateGroup(const std::string &name) +IniGroup &IniLoadFile::CreateGroup(std::string_view name) { IniGroupType type = IGT_VARIABLES; if (std::find(this->list_group_names.begin(), this->list_group_names.end(), name) != this->list_group_names.end()) type = IGT_LIST; @@ -172,7 +172,7 @@ IniGroup &IniLoadFile::CreateGroup(const std::string &name) * Remove the group with the given name. * @param name name of the group to remove. */ -void IniLoadFile::RemoveGroup(const std::string &name) +void IniLoadFile::RemoveGroup(std::string_view name) { size_t len = name.length(); this->groups.remove_if([&name, &len](const IniGroup &group) { return group.name.compare(0, len, name) == 0; }); @@ -237,7 +237,7 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir) e--; } s++; // skip [ - group = &this->CreateGroup(std::string(s, e - s)); + group = &this->CreateGroup(std::string_view(s, e - s)); if (comment_size != 0) { group->comment.assign(comment, comment_size); comment_size = 0; @@ -245,7 +245,7 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir) } else if (group != nullptr) { if (group->type == IGT_SEQUENCE) { /* A sequence group, use the line as item name without further interpretation. */ - IniItem &item = group->CreateItem(std::string(buffer, e - buffer)); + IniItem &item = group->CreateItem(std::string_view(buffer, e - buffer)); if (comment_size) { item.comment.assign(comment, comment_size); comment_size = 0; @@ -263,7 +263,7 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir) } /* it's an item in an existing group */ - IniItem &item = group->CreateItem(std::string(s, t - s)); + IniItem &item = group->CreateItem(std::string_view(s, t - s)); if (comment_size != 0) { item.comment.assign(comment, comment_size); comment_size = 0; diff --git a/src/ini_type.h b/src/ini_type.h index 5ea462ef18..2fb5a3333e 100644 --- a/src/ini_type.h +++ b/src/ini_type.h @@ -25,9 +25,9 @@ struct IniItem { std::optional value; ///< The value of this item std::string comment; ///< The comment associated with this item - IniItem(const std::string &name); + IniItem(std::string_view name); - void SetValue(const std::string_view value); + void SetValue(std::string_view value); }; /** A group within an ini file. */ @@ -37,12 +37,12 @@ struct IniGroup { std::string name; ///< name of group std::string comment; ///< comment for group - IniGroup(const std::string &name, IniGroupType type); + IniGroup(std::string_view name, IniGroupType type); - const IniItem *GetItem(const std::string &name) const; - IniItem &GetOrCreateItem(const std::string &name); - IniItem &CreateItem(const std::string &name); - void RemoveItem(const std::string &name); + const IniItem *GetItem(std::string_view name) const; + IniItem &GetOrCreateItem(std::string_view name); + IniItem &CreateItem(std::string_view name); + void RemoveItem(std::string_view name); void Clear(); }; @@ -58,11 +58,11 @@ struct IniLoadFile { IniLoadFile(const IniGroupNameList &list_group_names = {}, const IniGroupNameList &seq_group_names = {}); virtual ~IniLoadFile() { } - const IniGroup *GetGroup(const std::string &name) const; - IniGroup *GetGroup(const std::string &name); - IniGroup &GetOrCreateGroup(const std::string &name); - IniGroup &CreateGroup(const std::string &name); - void RemoveGroup(const std::string &name); + const IniGroup *GetGroup(std::string_view name) const; + IniGroup *GetGroup(std::string_view name); + IniGroup &GetOrCreateGroup(std::string_view name); + IniGroup &CreateGroup(std::string_view name); + void RemoveGroup(std::string_view name); void LoadFromDisk(const std::string &filename, Subdirectory subdir); From a28ab8cac26a7831db231d37eeb2b01692ba26cf Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 19 Apr 2024 20:34:36 +0100 Subject: [PATCH 353/695] Codechange: Replace C-style casts to size_t with static_cast. (#12455) * Codechange: Replace C-style casts to size_t with static_cast. This touches only simple value-type casts. * Codechange: Replace static_cast(-1) with SIZE_MAX Co-authored-by: Rubidium --- src/blitter/32bpp_simple.cpp | 2 +- src/blitter/8bpp_simple.cpp | 2 +- src/console_gui.cpp | 6 +++--- src/gfx_layout.cpp | 6 +++--- src/hotkeys.cpp | 2 +- src/industry_cmd.cpp | 2 +- src/ini_load.cpp | 2 +- src/intro_gui.cpp | 2 +- src/misc/dbg_helpers.h | 4 ++-- src/network/core/packet.cpp | 4 ++-- src/network/core/udp.cpp | 2 +- src/network/network_content.cpp | 4 ++-- src/newgrf_config.cpp | 2 +- src/os/unix/unix.cpp | 2 +- src/random_access_file.cpp | 2 +- src/saveload/oldloader_sl.cpp | 2 +- src/saveload/town_sl.cpp | 2 +- src/script/api/script_object.cpp | 2 +- src/settings.cpp | 14 +++++++------- src/sound.cpp | 2 +- src/stdafx.h | 2 +- src/string_func.h | 2 +- src/textfile_gui.cpp | 2 +- src/widget_type.h | 4 ++-- 24 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/blitter/32bpp_simple.cpp b/src/blitter/32bpp_simple.cpp index 653b2a4b38..9fcb224b08 100644 --- a/src/blitter/32bpp_simple.cpp +++ b/src/blitter/32bpp_simple.cpp @@ -118,7 +118,7 @@ void Blitter_32bppSimple::DrawColourMappingRect(void *dst, int width, int height Sprite *Blitter_32bppSimple::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) { Blitter_32bppSimple::Pixel *dst; - Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + (size_t)sprite[ZOOM_LVL_MIN].height * (size_t)sprite[ZOOM_LVL_MIN].width * sizeof(*dst)); + Sprite *dest_sprite = static_cast(allocator(sizeof(*dest_sprite) + static_cast(sprite[ZOOM_LVL_MIN].height) * static_cast(sprite[ZOOM_LVL_MIN].width) * sizeof(*dst))); dest_sprite->height = sprite[ZOOM_LVL_MIN].height; dest_sprite->width = sprite[ZOOM_LVL_MIN].width; diff --git a/src/blitter/8bpp_simple.cpp b/src/blitter/8bpp_simple.cpp index 58c7cb36fa..8dfa599a61 100644 --- a/src/blitter/8bpp_simple.cpp +++ b/src/blitter/8bpp_simple.cpp @@ -64,7 +64,7 @@ void Blitter_8bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, Zoom Sprite *Blitter_8bppSimple::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) { Sprite *dest_sprite; - dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + (size_t)sprite[ZOOM_LVL_MIN].height * (size_t)sprite[ZOOM_LVL_MIN].width); + dest_sprite = static_cast(allocator(sizeof(*dest_sprite) + static_cast(sprite[ZOOM_LVL_MIN].height) * static_cast(sprite[ZOOM_LVL_MIN].width))); dest_sprite->height = sprite[ZOOM_LVL_MIN].height; dest_sprite->width = sprite[ZOOM_LVL_MIN].width; diff --git a/src/console_gui.cpp b/src/console_gui.cpp index 496d945934..98b483ef97 100644 --- a/src/console_gui.cpp +++ b/src/console_gui.cpp @@ -180,11 +180,11 @@ struct IConsoleWindow : Window void Scroll(int amount) { if (amount < 0) { - size_t namount = (size_t) -amount; + size_t namount = static_cast(-amount); IConsoleWindow::scroll = (namount > IConsoleWindow::scroll) ? 0 : IConsoleWindow::scroll - namount; } else { assert(this->height >= 0 && this->line_height > 0); - size_t visible_lines = (size_t)(this->height / this->line_height); + size_t visible_lines = static_cast(this->height / this->line_height); size_t max_scroll = (visible_lines > _iconsole_buffer.size()) ? 0 : _iconsole_buffer.size() + 1 - visible_lines; IConsoleWindow::scroll = std::min(IConsoleWindow::scroll + amount, max_scroll); } @@ -223,7 +223,7 @@ struct IConsoleWindow : Window /** Check on a regular interval if the console buffer needs truncating. */ IntervalTimer truncate_interval = {std::chrono::seconds(3), [this](auto) { assert(this->height >= 0 && this->line_height > 0); - size_t visible_lines = (size_t)(this->height / this->line_height); + size_t visible_lines = static_cast(this->height / this->line_height); if (TruncateBuffer() && IConsoleWindow::scroll + visible_lines > _iconsole_buffer.size()) { size_t max_scroll = (visible_lines > _iconsole_buffer.size()) ? 0 : _iconsole_buffer.size() + 1 - visible_lines; diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index 91280e5555..dbead01676 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -260,17 +260,17 @@ Point Layouter::GetCharPosition(std::string_view::const_iterator ch) const const auto &charmap = run.GetGlyphToCharMap(); /* Run starts after our character, use the last found position. */ - if ((size_t)charmap.front() > index) return *position; + if (static_cast(charmap.front()) > index) return *position; position = positions.begin(); for (auto it = charmap.begin(); it != charmap.end(); /* nothing */) { /* Plain honest-to-$deity match. */ - if ((size_t)*it == index) return *position; + if (static_cast(*it) == index) return *position; ++it; if (it == charmap.end()) break; /* We just passed our character, it's probably a ligature, use the last found position. */ - if ((size_t)*it > index) return *position; + if (static_cast(*it) > index) return *position; ++position; } } diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index 50c25579da..41b52469c1 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -99,7 +99,7 @@ static uint16_t ParseCode(const char *start, const char *end) assert(start <= end); while (start < end && *start == ' ') start++; while (end > start && *end == ' ') end--; - std::string_view str{start, (size_t)(end - start)}; + std::string_view str{start, static_cast(end - start)}; for (const auto &kn : _keycode_to_name) { if (StrEqualsIgnoreCase(str, kn.name)) { return kn.keycode; diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 1382d86556..36bdd1bffb 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1694,7 +1694,7 @@ static CommandCost CheckIfFarEnoughFromConflictingIndustry(TileIndex tile, int t /* On a large map with many industries, it may be faster to check an area. */ static const int dmax = 14; - if (Industry::GetNumItems() > (size_t) (dmax * dmax * 2)) { + if (Industry::GetNumItems() > static_cast(dmax * dmax * 2)) { const Industry *i = nullptr; TileArea tile_area = TileArea(tile, 1, 1).Expand(dmax); for (TileIndex atile : tile_area) { diff --git a/src/ini_load.cpp b/src/ini_load.cpp index 11e2077049..e4209ad3b2 100644 --- a/src/ini_load.cpp +++ b/src/ini_load.cpp @@ -202,7 +202,7 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir) end += ftell(in); /* for each line in the file */ - while ((size_t)ftell(in) < end && fgets(buffer, sizeof(buffer), in)) { + while (static_cast(ftell(in)) < end && fgets(buffer, sizeof(buffer), in)) { char c, *s; /* trim whitespace from the left side */ for (s = buffer; *s == ' ' || *s == '\t'; s++) {} diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index 32e6c2d34a..092c5964ae 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -184,7 +184,7 @@ struct SelectGameWindow : public Window { this->ReadIntroGameViewportCommands(); - this->cur_viewport_command_index = (size_t)-1; + this->cur_viewport_command_index = SIZE_MAX; this->cur_viewport_command_time = 0; this->mouse_idle_time = 0; this->mouse_idle_pos = _cursor.pos; diff --git a/src/misc/dbg_helpers.h b/src/misc/dbg_helpers.h index fdfcaba04a..357cd0dd47 100644 --- a/src/misc/dbg_helpers.h +++ b/src/misc/dbg_helpers.h @@ -34,7 +34,7 @@ template struct ArrayT { template inline typename ArrayT::Item ItemAtT(E idx, const T &t, typename ArrayT::Item t_unk) { - if ((size_t)idx >= ArrayT::length) { + if (static_cast(idx) >= ArrayT::length) { return t_unk; } return t[idx]; @@ -48,7 +48,7 @@ inline typename ArrayT::Item ItemAtT(E idx, const T &t, typename ArrayT::I template inline typename ArrayT::Item ItemAtT(E idx, const T &t, typename ArrayT::Item t_unk, E idx_inv, typename ArrayT::Item t_inv) { - if ((size_t)idx < ArrayT::length) { + if (static_cast(idx) < ArrayT::length) { return t[idx]; } if (idx == idx_inv) { diff --git a/src/network/core/packet.cpp b/src/network/core/packet.cpp index 974630c63d..8e95f6c30e 100644 --- a/src/network/core/packet.cpp +++ b/src/network/core/packet.cpp @@ -258,8 +258,8 @@ size_t Packet::Size() const */ bool Packet::ParsePacketSize() { - size_t size = (size_t)this->buffer[0]; - size += (size_t)this->buffer[1] << 8; + size_t size = static_cast(this->buffer[0]); + size += static_cast(this->buffer[1]) << 8; /* If the size of the packet is less than the bytes required for the size and type of * the packet, or more than the allowed limit, then something is wrong with the packet. diff --git a/src/network/core/udp.cpp b/src/network/core/udp.cpp index c7acbd21a1..d3e69fce85 100644 --- a/src/network/core/udp.cpp +++ b/src/network/core/udp.cpp @@ -133,7 +133,7 @@ void NetworkUDPSocketHandler::ReceivePackets() /* If the size does not match the packet must be corrupted. * Otherwise it will be marked as corrupted later on. */ - if (!p.ParsePacketSize() || (size_t)nbytes != p.Size()) { + if (!p.ParsePacketSize() || static_cast(nbytes) != p.Size()) { Debug(net, 1, "Received a packet with mismatching size from {}", address.GetAddressAsString()); continue; } diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 27bd3ce730..6db744dffe 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -442,7 +442,7 @@ static bool GunzipFile(const ContentInfo *ci) if (errnum != 0 && errnum != Z_STREAM_END) ret = false; break; } - if (read < 0 || (size_t)read != fwrite(buff, 1, read, fout)) { + if (read < 0 || static_cast(read) != fwrite(buff, 1, read, fout)) { /* If gzread() returns -1, there was an error in archive */ ret = false; break; @@ -496,7 +496,7 @@ bool ClientNetworkContentSocketHandler::Receive_SERVER_CONTENT(Packet &p) } else { /* We have a file opened, thus are downloading internal content */ size_t toRead = p.RemainingBytesToTransfer(); - if (toRead != 0 && (size_t)p.TransferOut(TransferOutFWrite, this->curFile) != toRead) { + if (toRead != 0 && static_cast(p.TransferOut(TransferOutFWrite, this->curFile)) != toRead) { CloseWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD); ShowErrorMessage(STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD, STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE, WL_ERROR); this->CloseConnection(); diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index 60c6998b0f..8e249d58bf 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -261,7 +261,7 @@ size_t GRFGetSizeOfDataSection(FILE *f) if (fread(data, 1, header_len, f) == header_len) { if (data[0] == 0 && data[1] == 0 && MemCmpT(data + 2, _grf_cont_v2_sig, 8) == 0) { /* Valid container version 2, get data section size. */ - size_t offset = ((size_t)data[13] << 24) | ((size_t)data[12] << 16) | ((size_t)data[11] << 8) | (size_t)data[10]; + size_t offset = (static_cast(data[13]) << 24) | (static_cast(data[12]) << 16) | (static_cast(data[11]) << 8) | static_cast(data[10]); if (offset >= 1 * 1024 * 1024 * 1024) { Debug(grf, 0, "Unexpectedly large offset for NewGRF"); /* Having more than 1 GiB of data is very implausible. Mostly because then diff --git a/src/os/unix/unix.cpp b/src/os/unix/unix.cpp index b406cbc007..1cfce1cd2b 100644 --- a/src/os/unix/unix.cpp +++ b/src/os/unix/unix.cpp @@ -133,7 +133,7 @@ static std::string convert_tofrom_fs(iconv_t convd, const std::string &name) size_t outlen = buf.size(); char *outbuf = buf.data(); iconv(convd, nullptr, nullptr, nullptr, nullptr); - if (iconv(convd, &inbuf, &inlen, &outbuf, &outlen) == (size_t)(-1)) { + if (iconv(convd, &inbuf, &inlen, &outbuf, &outlen) == SIZE_MAX) { Debug(misc, 0, "[iconv] error converting '{}'. Errno {}", name, errno); return name; } diff --git a/src/random_access_file.cpp b/src/random_access_file.cpp index c02e9b46eb..29764521ed 100644 --- a/src/random_access_file.cpp +++ b/src/random_access_file.cpp @@ -37,7 +37,7 @@ RandomAccessFile::RandomAccessFile(const std::string &filename, Subdirectory sub this->simplified_filename = name_without_path.substr(0, name_without_path.rfind('.')); strtolower(this->simplified_filename); - this->SeekTo((size_t)pos, SEEK_SET); + this->SeekTo(static_cast(pos), SEEK_SET); } /** diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index c56b68f7da..099a2c9c29 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -465,7 +465,7 @@ static inline Colours RemapTTOColour(Colours tto) COLOUR_WHITE, COLOUR_LIGHT_BLUE, COLOUR_MAUVE, COLOUR_PINK }; - if ((size_t)tto >= lengthof(tto_colour_remap)) return COLOUR_GREY; // this shouldn't happen + if (static_cast(tto) >= std::size(tto_colour_remap)) return COLOUR_GREY; // this shouldn't happen return tto_colour_remap[tto]; } diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index 67409c6449..0390cb0792 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -174,7 +174,7 @@ public: void Load(Town *t) const override { - size_t length = IsSavegameVersionBefore(SLV_SAVELOAD_LIST_LENGTH) ? (size_t)TAE_END : SlGetStructListLength(TAE_END); + size_t length = IsSavegameVersionBefore(SLV_SAVELOAD_LIST_LENGTH) ? static_cast(TAE_END) : SlGetStructListLength(TAE_END); for (size_t i = 0; i < length; i++) { SlObject(&t->received[i], this->GetLoadDescription()); } diff --git a/src/script/api/script_object.cpp b/src/script/api/script_object.cpp index 8e3a684240..637d662125 100644 --- a/src/script/api/script_object.cpp +++ b/src/script/api/script_object.cpp @@ -241,7 +241,7 @@ ScriptObject::ActiveInstance::~ActiveInstance() /* static */ void ScriptObject::SetCallbackVariable(int index, int value) { - if ((size_t)index >= GetStorage()->callback_value.size()) GetStorage()->callback_value.resize(index + 1); + if (static_cast(index) >= GetStorage()->callback_value.size()) GetStorage()->callback_value.resize(index + 1); GetStorage()->callback_value[index] = value; } diff --git a/src/settings.cpp b/src/settings.cpp index 1dc89ef622..df6bcfba51 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -177,7 +177,7 @@ const uint16_t INIFILE_VERSION = (IniFileVersion)(IFV_MAX_VERSION - 1); ///< Cur * @param str the current value of the setting for which a value needs found * @param len length of the string * @param many full domain of values the ONEofMANY setting can have - * @return the integer index of the full-list, or -1 if not found + * @return the integer index of the full-list, or SIZE_MAX if not found */ size_t OneOfManySettingDesc::ParseSingleValue(const char *str, size_t len, const std::vector &many) { @@ -190,7 +190,7 @@ size_t OneOfManySettingDesc::ParseSingleValue(const char *str, size_t len, const idx++; } - return (size_t)-1; + return SIZE_MAX; } /** @@ -212,7 +212,7 @@ std::optional BoolSettingDesc::ParseSingleValue(const char *str) * @param many full domain of values the MANYofMANY setting can have * @param str the current string value of the setting, each individual * of separated by a whitespace,tab or | character - * @return the 'fully' set integer, or -1 if a set is not found + * @return the 'fully' set integer, or SIZE_MAX if a set is not found */ static size_t LookupManyOfMany(const std::vector &many, const char *str) { @@ -229,7 +229,7 @@ static size_t LookupManyOfMany(const std::vector &many, const char while (*s != 0 && *s != ' ' && *s != '\t' && *s != '|') s++; r = OneOfManySettingDesc::ParseSingleValue(str, s - str, many); - if (r == (size_t)-1) return r; + if (r == SIZE_MAX) return r; SetBit(res, (uint8_t)r); // value found, set it if (*s == 0) break; @@ -419,8 +419,8 @@ size_t OneOfManySettingDesc::ParseValue(const char *str) const size_t r = OneOfManySettingDesc::ParseSingleValue(str, strlen(str), this->many); /* if the first attempt of conversion from string to the appropriate value fails, * look if we have defined a converter from old value to new value. */ - if (r == (size_t)-1 && this->many_cnvt != nullptr) r = this->many_cnvt(str); - if (r != (size_t)-1) return r; // and here goes converted value + if (r == SIZE_MAX && this->many_cnvt != nullptr) r = this->many_cnvt(str); + if (r != SIZE_MAX) return r; // and here goes converted value ErrorMessageData msg(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_VALUE); msg.SetDParamStr(0, str); @@ -432,7 +432,7 @@ size_t OneOfManySettingDesc::ParseValue(const char *str) const size_t ManyOfManySettingDesc::ParseValue(const char *str) const { size_t r = LookupManyOfMany(this->many, str); - if (r != (size_t)-1) return r; + if (r != SIZE_MAX) return r; ErrorMessageData msg(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_VALUE); msg.SetDParamStr(0, str); msg.SetDParamStr(1, this->GetName()); diff --git a/src/sound.cpp b/src/sound.cpp index 02bdf82d04..7bb6d1ef26 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -117,7 +117,7 @@ static bool SetBankSource(MixerChannel *mc, const SoundEntry *sound) assert(sound != nullptr); /* Check for valid sound size. */ - if (sound->file_size == 0 || sound->file_size > ((size_t)-1) - 2) return false; + if (sound->file_size == 0 || sound->file_size > SIZE_MAX - 2) return false; int8_t *mem = MallocT(sound->file_size + 2); /* Add two extra bytes so rate conversion can read these diff --git a/src/stdafx.h b/src/stdafx.h index 3297c3eec2..41134921b6 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -370,7 +370,7 @@ inline void free(const void *ptr) * The largest value that can be entered in a variable * @param type the type of the variable */ -#define MAX_UVALUE(type) ((type)~(type)0) +#define MAX_UVALUE(type) (static_cast(~static_cast(0))) #if defined(_MSC_VER) && !defined(_DEBUG) # define IGNORE_UNINITIALIZED_WARNING_START __pragma(warning(push)) __pragma(warning(disable:4700)) diff --git a/src/string_func.h b/src/string_func.h index 6a2984e05d..2cbb4ef003 100644 --- a/src/string_func.h +++ b/src/string_func.h @@ -69,7 +69,7 @@ inline bool StrEmpty(const char *s) inline size_t ttd_strnlen(const char *str, size_t maxlen) { const char *t; - for (t = str; (size_t)(t - str) < maxlen && *t != '\0'; t++) {} + for (t = str; static_cast(t - str) < maxlen && *t != '\0'; t++) {} return t - str; } diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index bb6c2d876d..5058def698 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -340,7 +340,7 @@ void TextfileWindow::CheckHyperlinkClick(Point pt) /* Found character index in line, check if any links are at that position. */ for (const auto &link : found_links) { Debug(misc, 4, "Checking link from char {} to {}", link.begin, link.end); - if ((size_t)char_index >= link.begin && (size_t)char_index < link.end) { + if (static_cast(char_index) >= link.begin && static_cast(char_index) < link.end) { Debug(misc, 4, "Activating link with destination: {}", link.destination); this->OnHyperlinkClick(link); return; diff --git a/src/widget_type.h b/src/widget_type.h index fad56477e3..f64ba8f7f5 100644 --- a/src/widget_type.h +++ b/src/widget_type.h @@ -845,7 +845,7 @@ public: template auto GetVisibleRangeIterators(Tcontainer &container) const { - assert((size_t)this->GetCount() == container.size()); // Scrollbar and container size must match. + assert(static_cast(this->GetCount()) == container.size()); // Scrollbar and container size must match. auto first = std::next(std::begin(container), this->GetPosition()); auto last = std::next(first, std::min(this->GetCapacity(), this->GetCount() - this->GetPosition())); return std::make_pair(first, last); @@ -864,7 +864,7 @@ public: template typename Tcontainer::iterator GetScrolledItemFromWidget(Tcontainer &container, int clickpos, const Window * const w, WidgetID widget, int padding = 0, int line_height = -1) const { - assert((size_t)this->GetCount() == container.size()); // Scrollbar and container size must match. + assert(static_cast(this->GetCount()) == container.size()); // Scrollbar and container size must match. size_type row = this->GetScrolledRowFromWidget(clickpos, w, widget, padding, line_height); if (row == Scrollbar::npos) return std::end(container); From f267b37a33d07f656184e3705e74a66e70df800d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 19 Apr 2024 22:07:56 +0100 Subject: [PATCH 354/695] Codechange: Use std::initializer_list/array in framerate window. (#12441) --- src/framerate_gui.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index ea1bd9e4dc..56848b060a 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -810,7 +810,7 @@ struct FrametimeGraphWindow : Window { /* Determine horizontal scale based on period covered by 60 points * (slightly less than 2 seconds at full game speed) */ struct ScaleDef { TimingMeasurement range; int scale; }; - static const ScaleDef hscales[] = { + static const std::initializer_list hscales = { { TIMESTAMP_PRECISION * 120, 60 }, { TIMESTAMP_PRECISION * 10, 20 }, { TIMESTAMP_PRECISION * 5, 10 }, @@ -825,7 +825,7 @@ struct FrametimeGraphWindow : Window { void SelectVerticalScale(TimingMeasurement range) { /* Determine vertical scale based on peak value (within the horizontal scale + a bit) */ - static const TimingMeasurement vscales[] = { + static const std::initializer_list vscales = { TIMESTAMP_PRECISION * 100, TIMESTAMP_PRECISION * 10, TIMESTAMP_PRECISION * 5, @@ -1048,7 +1048,7 @@ void ConPrintFramerate() IConsolePrint(TC_SILVER, "Based on num. data points: {} {} {}", count1, count2, count3); - static const char *MEASUREMENT_NAMES[PFE_MAX] = { + static const std::array MEASUREMENT_NAMES = { "Game loop", " GL station ticks", " GL train ticks", @@ -1066,11 +1066,9 @@ void ConPrintFramerate() }; std::string ai_name_buf; - static const PerformanceElement rate_elements[] = { PFE_GAMELOOP, PFE_DRAWING, PFE_VIDEO }; - bool printed_anything = false; - for (const auto &e : rate_elements) { + for (const auto &e : { PFE_GAMELOOP, PFE_DRAWING, PFE_VIDEO }) { auto &pf = _pf_data[e]; if (pf.num_valid == 0) continue; IConsolePrint(TC_GREEN, "{} rate: {:.2f}fps (expected: {:.2f}fps)", From d43ff8dc49e147bd6a9fb6f72a30ca87ff6d751d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 27 Mar 2024 09:02:40 +0000 Subject: [PATCH 355/695] Change: Ability to set aspect ratio of a widget. This allows setting the shape of a widget without dealing with absolute pixel sizes. --- src/network/network_gui.cpp | 1 + src/smallmap_gui.cpp | 1 + src/widget.cpp | 61 +++++++++++++++++++++++++++++++++++++ src/widget_type.h | 32 +++++++++++++++++++ 4 files changed, 95 insertions(+) diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 54584a1a51..084dac2b70 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -127,6 +127,7 @@ public: } this->smallest_x = this->children.front()->smallest_x + this->children.back()->smallest_x; // First and last are always shown, rest not + this->ApplyAspectRatio(); } void AssignSizePosition(SizingType sizing, int x, int y, uint given_width, uint given_height, bool rtl) override diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 7727478fd1..51cd1e8813 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -1869,6 +1869,7 @@ public: this->fill_y = (display->fill_y == 0 && bar->fill_y == 0) ? 0 : std::min(display->fill_y, bar->fill_y); this->resize_x = std::max(display->resize_x, bar->resize_x); this->resize_y = std::min(display->resize_y, bar->resize_y); + this->ApplyAspectRatio(); } void AssignSizePosition(SizingType sizing, int x, int y, uint given_width, uint given_height, bool rtl) override diff --git a/src/widget.cpp b/src/widget.cpp index 74e970eb66..2097bba3d3 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -925,6 +925,20 @@ NWidgetBase *NWidgetBase::GetWidgetOfType(WidgetType tp) return (this->type == tp) ? this : nullptr; } +void NWidgetBase::ApplyAspectRatio() +{ + if (this->aspect_ratio == 0) return; + if (this->smallest_x == 0 || this->smallest_y == 0) return; + + uint x = this->smallest_x; + uint y = this->smallest_y; + if ((this->aspect_flags & AspectFlags::ResizeX) == AspectFlags::ResizeX) x = std::max(this->smallest_x, static_cast(this->smallest_y * std::abs(this->aspect_ratio))); + if ((this->aspect_flags & AspectFlags::ResizeY) == AspectFlags::ResizeY) y = std::max(this->smallest_y, static_cast(this->smallest_x / std::abs(this->aspect_ratio))); + + this->smallest_x = x; + this->smallest_y = y; +} + void NWidgetBase::AdjustPaddingForZoom() { this->padding = ScaleGUITrad(this->uz_padding); @@ -942,6 +956,28 @@ NWidgetResizeBase::NWidgetResizeBase(WidgetType tp, uint fill_x, uint fill_y) : this->fill_y = fill_y; } +/** + * Set desired aspect ratio of this widget. + * @param ratio Desired aspect ratio, or 0 for none. + * @param flags Dimensions which should be resized. + */ +void NWidgetResizeBase::SetAspect(float ratio, AspectFlags flags) +{ + this->aspect_ratio = ratio; + this->aspect_flags = flags; +} + +/** + * Set desired aspect ratio of this widget, in terms of horizontal and vertical dimensions. + * @param x_ratio Desired horizontal component of aspect ratio. + * @param y_ratio Desired vertical component of aspect ratio. + * @param flags Dimensions which should be resized. + */ +void NWidgetResizeBase::SetAspect(int x_ratio, int y_ratio, AspectFlags flags) +{ + this->SetAspect(static_cast(x_ratio) / static_cast(y_ratio), flags); +} + void NWidgetResizeBase::AdjustPaddingForZoom() { if (!this->absolute) { @@ -1224,6 +1260,7 @@ void NWidgetStacked::SetupSmallestSize(Window *w) this->fill_y = fill.height; this->resize_x = resize.width; this->resize_y = resize.height; + this->ApplyAspectRatio(); return; } @@ -1243,6 +1280,7 @@ void NWidgetStacked::SetupSmallestSize(Window *w) this->fill_y = std::lcm(this->fill_y, child_wid->fill_y); this->resize_x = std::lcm(this->resize_x, child_wid->resize_x); this->resize_y = std::lcm(this->resize_y, child_wid->resize_y); + this->ApplyAspectRatio(); } } @@ -1405,6 +1443,11 @@ void NWidgetHorizontal::SetupSmallestSize(Window *w) this->smallest_y = cur_height; // Smallest height got changed, try again. } /* 2. For containers that must maintain equal width, extend child minimal size. */ + for (const auto &child_wid : this->children) { + child_wid->smallest_y = this->smallest_y - child_wid->padding.Vertical(); + child_wid->ApplyAspectRatio(); + longest = std::max(longest, child_wid->smallest_x); + } if (this->flags & NC_EQUALSIZE) { for (const auto &child_wid : this->children) { if (child_wid->fill_x == 1) child_wid->smallest_x = longest; @@ -1594,6 +1637,11 @@ void NWidgetVertical::SetupSmallestSize(Window *w) this->smallest_x = cur_width; // Smallest width got changed, try again. } /* 2. For containers that must maintain equal width, extend children minimal size. */ + for (const auto &child_wid : this->children) { + child_wid->smallest_x = this->smallest_x - child_wid->padding.Horizontal(); + child_wid->ApplyAspectRatio(); + highest = std::max(highest, child_wid->smallest_y); + } if (this->flags & NC_EQUALSIZE) { for (const auto &child_wid : this->children) { if (child_wid->fill_y == 1) child_wid->smallest_y = highest; @@ -1730,6 +1778,7 @@ void NWidgetSpacer::SetupSmallestSize(Window *) { this->smallest_x = this->min_x; this->smallest_y = this->min_y; + this->ApplyAspectRatio(); } void NWidgetSpacer::FillWidgetLookup(WidgetLookup &) @@ -1841,6 +1890,7 @@ void NWidgetMatrix::SetupSmallestSize(Window *w) this->fill_y = fill.height; this->resize_x = resize.width; this->resize_y = resize.height; + this->ApplyAspectRatio(); } void NWidgetMatrix::AssignSizePosition(SizingType, int x, int y, uint given_width, uint given_height, bool) @@ -2089,6 +2139,7 @@ void NWidgetBackground::SetupSmallestSize(Window *w) this->smallest_x += this->child->padding.Horizontal(); this->smallest_y += this->child->padding.Vertical(); } + this->ApplyAspectRatio(); } else { Dimension d = {this->min_x, this->min_y}; Dimension fill = {this->fill_x, this->fill_y}; @@ -2117,6 +2168,7 @@ void NWidgetBackground::SetupSmallestSize(Window *w) this->fill_y = fill.height; this->resize_x = resize.width; this->resize_y = resize.height; + this->ApplyAspectRatio(); } } @@ -2203,6 +2255,7 @@ void NWidgetViewport::SetupSmallestSize(Window *) { this->smallest_x = this->min_x; this->smallest_y = this->min_y; + this->ApplyAspectRatio(); } void NWidgetViewport::Draw(const Window *w) @@ -2738,6 +2791,7 @@ void NWidgetLeaf::SetupSmallestSize(Window *w) this->fill_y = fill.height; this->resize_x = resize.width; this->resize_y = resize.height; + this->ApplyAspectRatio(); } void NWidgetLeaf::Draw(const Window *w) @@ -3045,6 +3099,13 @@ static const NWidgetPart *MakeNWidget(const NWidgetPart *nwid_begin, const NWidg break; } + case WPT_ASPECT: { + if (dest == nullptr) [[unlikely]] throw std::runtime_error("WPT_ASPECT requires NWidgetBase"); + dest->aspect_ratio = nwid_begin->u.aspect.ratio; + dest->aspect_flags = nwid_begin->u.aspect.flags; + break; + } + case WPT_ENDCONTAINER: return nwid_begin; diff --git a/src/widget_type.h b/src/widget_type.h index f64ba8f7f5..9a27132873 100644 --- a/src/widget_type.h +++ b/src/widget_type.h @@ -100,6 +100,7 @@ enum WidgetType { WPT_ENDCONTAINER, ///< Widget part to denote end of a container. WPT_FUNCTION, ///< Widget part for calling a user function. WPT_SCROLLBAR, ///< Widget part for attaching a scrollbar. + WPT_ASPECT, ///< Widget part for sepcifying aspect ratio. /* Pushable window widget types. */ WWT_MASK = 0x7F, @@ -119,6 +120,13 @@ enum SizingType { ST_RESIZE, ///< Resize the nested widget tree. }; +enum class AspectFlags : uint8_t { + ResizeX = 1U << 0, + ResizeY = 1U << 1, + ResizeXY = ResizeX | ResizeY, +}; +DECLARE_ENUM_AS_BIT_SET(AspectFlags) + /* Forward declarations. */ class NWidgetCore; class Scrollbar; @@ -136,6 +144,7 @@ class NWidgetBase : public ZeroedMemoryAllocator { public: NWidgetBase(WidgetType tp); + void ApplyAspectRatio(); virtual void AdjustPaddingForZoom(); virtual void SetupSmallestSize(Window *w) = 0; virtual void AssignSizePosition(SizingType sizing, int x, int y, uint given_width, uint given_height, bool rtl) = 0; @@ -232,6 +241,8 @@ public: /* Current widget size (that is, after resizing). */ uint current_x; ///< Current horizontal size (after resizing). uint current_y; ///< Current vertical size (after resizing). + float aspect_ratio = 0; ///< Desired aspect ratio of widget. + AspectFlags aspect_flags = AspectFlags::ResizeX; ///< Which dimensions can be resized. int pos_x; ///< Horizontal position of top-left corner of the widget in the window. int pos_y; ///< Vertical position of top-left corner of the widget in the window. @@ -298,6 +309,8 @@ public: void SetMinimalTextLines(uint8_t min_lines, uint8_t spacing, FontSize size); void SetFill(uint fill_x, uint fill_y); void SetResize(uint resize_x, uint resize_y); + void SetAspect(float ratio, AspectFlags flags = AspectFlags::ResizeX); + void SetAspect(int x_ratio, int y_ratio, AspectFlags flags = AspectFlags::ResizeX); bool UpdateMultilineWidgetSize(const std::string &str, int max_lines); bool UpdateSize(uint min_x, uint min_y); @@ -1045,6 +1058,11 @@ struct NWidgetPartAlignment { StringAlignment align; ///< Alignment of text/image. }; +struct NWidgetPartAspect { + float ratio; + AspectFlags flags; +}; + /** * Pointer to function returning a nested widget. * @return Nested widget (tree). @@ -1068,6 +1086,7 @@ struct NWidgetPart { NWidgetPartAlignment align; ///< Part with internal alignment. NWidgetFunctionType *func_ptr; ///< Part with a function call. NWidContainerFlags cont_flags; ///< Part with container flags. + NWidgetPartAspect aspect; ///< Part to set aspect ratio. /* Constructors for each NWidgetPartUnion data type. */ constexpr NWidgetPartUnion() : xy() {} @@ -1081,6 +1100,7 @@ struct NWidgetPart { constexpr NWidgetPartUnion(NWidgetPartAlignment align) : align(align) {} constexpr NWidgetPartUnion(NWidgetFunctionType *func_ptr) : func_ptr(func_ptr) {} constexpr NWidgetPartUnion(NWidContainerFlags cont_flags) : cont_flags(cont_flags) {} + constexpr NWidgetPartUnion(NWidgetPartAspect aspect) : aspect(aspect) {} } u; /* Constructors for each NWidgetPart data type. */ @@ -1095,6 +1115,7 @@ struct NWidgetPart { constexpr NWidgetPart(WidgetType type, NWidgetPartAlignment align) : type(type), u(align) {} constexpr NWidgetPart(WidgetType type, NWidgetFunctionType *func_ptr) : type(type), u(func_ptr) {} constexpr NWidgetPart(WidgetType type, NWidContainerFlags cont_flags) : type(type), u(cont_flags) {} + constexpr NWidgetPart(WidgetType type, NWidgetPartAspect aspect) : type(type), u(aspect) {} }; /** @@ -1266,6 +1287,17 @@ constexpr NWidgetPart SetScrollbar(WidgetID index) return NWidgetPart{WPT_SCROLLBAR, NWidgetPartWidget{INVALID_COLOUR, index}}; } +/** + * Widget part function for setting the aspect ratio. + * @param ratio Desired aspect ratio, or 0 for none. + * @param flags Dimensions which should be resized. + * @ingroup NestedWidgetParts + */ +constexpr NWidgetPart SetAspect(float ratio, AspectFlags flags = AspectFlags::ResizeX) +{ + return NWidgetPart{WPT_ASPECT, NWidgetPartAspect{ratio, flags}}; +} + /** * Widget part function for starting a new 'real' widget. * @param tp Type of the new nested widget. From 61c6ebaacc8e235aca4769cbf4b435ade28674c6 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 27 Mar 2024 09:02:41 +0000 Subject: [PATCH 356/695] Change: Automatically set aspect ratio of common window decorations. --- src/widget.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/widget.cpp b/src/widget.cpp index 2097bba3d3..eb965f78c2 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -2580,24 +2580,28 @@ NWidgetLeaf::NWidgetLeaf(WidgetType tp, Colours colour, WidgetID index, uint32_t this->SetFill(0, 0); this->SetMinimalSize(WidgetDimensions::WD_STICKYBOX_WIDTH, WidgetDimensions::WD_CAPTION_HEIGHT); this->SetDataTip(STR_NULL, STR_TOOLTIP_STICKY); + this->SetAspect(this->min_x, this->min_y); break; case WWT_SHADEBOX: this->SetFill(0, 0); this->SetMinimalSize(WidgetDimensions::WD_SHADEBOX_WIDTH, WidgetDimensions::WD_CAPTION_HEIGHT); this->SetDataTip(STR_NULL, STR_TOOLTIP_SHADE); + this->SetAspect(this->min_x, this->min_y); break; case WWT_DEBUGBOX: this->SetFill(0, 0); this->SetMinimalSize(WidgetDimensions::WD_DEBUGBOX_WIDTH, WidgetDimensions::WD_CAPTION_HEIGHT); this->SetDataTip(STR_NULL, STR_TOOLTIP_DEBUG); + this->SetAspect(this->min_x, this->min_y); break; case WWT_DEFSIZEBOX: this->SetFill(0, 0); this->SetMinimalSize(WidgetDimensions::WD_DEFSIZEBOX_WIDTH, WidgetDimensions::WD_CAPTION_HEIGHT); this->SetDataTip(STR_NULL, STR_TOOLTIP_DEFSIZE); + this->SetAspect(this->min_x, this->min_y); break; case WWT_RESIZEBOX: @@ -2610,6 +2614,7 @@ NWidgetLeaf::NWidgetLeaf(WidgetType tp, Colours colour, WidgetID index, uint32_t this->SetFill(0, 0); this->SetMinimalSize(WidgetDimensions::WD_CLOSEBOX_WIDTH, WidgetDimensions::WD_CAPTION_HEIGHT); this->SetDataTip(STR_NULL, STR_TOOLTIP_CLOSE_WINDOW); + this->SetAspect(this->min_x, this->min_y); break; case WWT_DROPDOWN: From 16eb17418b97392514d2609f2ceabfb554e533e5 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 27 Mar 2024 09:02:41 +0000 Subject: [PATCH 357/695] Change: Use aspect ratios for some common widgets. --- src/company_gui.cpp | 4 ++-- src/depot_gui.cpp | 12 ++++++------ src/genworld_gui.cpp | 36 ++++++++++++++++++------------------ src/group_gui.cpp | 4 ++-- src/industry_gui.cpp | 2 +- src/misc_gui.cpp | 2 +- src/network/network_gui.cpp | 12 ++++++------ src/rail_gui.cpp | 2 +- src/script/script_gui.cpp | 2 +- src/settings_gui.cpp | 16 ++++++++-------- src/signs_gui.cpp | 2 +- src/station_gui.cpp | 24 ++++++++++++------------ src/town_gui.cpp | 8 ++++---- src/vehicle_gui.cpp | 10 +++++----- src/waypoint_gui.cpp | 4 ++-- src/window_gui.h | 8 ++++++++ 16 files changed, 78 insertions(+), 70 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 128826613b..129f339f16 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -287,7 +287,7 @@ static constexpr NWidgetPart _nested_company_finances_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CAPTION, COLOUR_GREY, WID_CF_CAPTION), SetDataTip(STR_FINANCES_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_IMGBTN, COLOUR_GREY, WID_CF_TOGGLE_SIZE), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW), + NWidget(WWT_IMGBTN, COLOUR_GREY, WID_CF_TOGGLE_SIZE), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW), SetAspect(WidgetDimensions::ASPECT_TOGGLE_SIZE), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), @@ -1149,7 +1149,7 @@ static constexpr NWidgetPart _nested_select_company_manager_face_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CAPTION, COLOUR_GREY, WID_SCMF_CAPTION), SetDataTip(STR_FACE_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCMF_TOGGLE_LARGE_SMALL), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_FACE_ADVANCED_TOOLTIP), + NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCMF_TOGGLE_LARGE_SMALL), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_FACE_ADVANCED_TOOLTIP), SetAspect(WidgetDimensions::ASPECT_TOGGLE_SIZE), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY, WID_SCMF_SELECT_FACE), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPadding(2), diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index 74d58bc415..dd9def0443 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -49,11 +49,11 @@ static constexpr NWidgetPart _nested_train_depot_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_D_SHOW_RENAME), // rename button - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_RENAME), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_DEPOT_RENAME_TOOLTIP), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_D_SHOW_RENAME), SetAspect(WidgetDimensions::ASPECT_RENAME), // rename button + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_RENAME), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_DEPOT_RENAME_TOOLTIP), EndContainer(), NWidget(WWT_CAPTION, COLOUR_GREY, WID_D_CAPTION), SetDataTip(STR_DEPOT_CAPTION, STR_NULL), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_LOCATION), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_NULL), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_LOCATION), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_NULL), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), @@ -78,9 +78,9 @@ static constexpr NWidgetPart _nested_train_depot_widgets[] = { NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_D_BUILD), SetDataTip(0x0, STR_NULL), SetFill(1, 1), SetResize(1, 0), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_D_CLONE), SetDataTip(0x0, STR_NULL), SetFill(1, 1), SetResize(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_D_VEHICLE_LIST), SetDataTip(0x0, STR_NULL), SetFill(0, 1), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_STOP_ALL), SetDataTip(SPR_FLAG_VEH_STOPPED, STR_NULL), SetFill(0, 1), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_START_ALL), SetDataTip(SPR_FLAG_VEH_RUNNING, STR_NULL), SetFill(0, 1), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_D_VEHICLE_LIST), SetDataTip(0x0, STR_NULL), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetFill(0, 1), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_STOP_ALL), SetDataTip(SPR_FLAG_VEH_STOPPED, STR_NULL), SetAspect(WidgetDimensions::ASPECT_VEHICLE_FLAG), SetFill(0, 1), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_START_ALL), SetDataTip(SPR_FLAG_VEH_RUNNING, STR_NULL), SetAspect(WidgetDimensions::ASPECT_VEHICLE_FLAG), SetFill(0, 1), NWidget(WWT_RESIZEBOX, COLOUR_GREY), EndContainer(), }; diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index e6942fe9c7..9f8d8d8f4d 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -137,24 +137,24 @@ static constexpr NWidgetPart _nested_generate_landscape_widgets[] = { NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GL_CLIMATE_SEL_SELECTOR), /* Snow coverage. */ NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_COVERAGE_DOWN), SetFill(0, 1), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_COVERAGE_DOWN), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_SNOW_COVERAGE_TEXT, STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT), SetFill(1, 1), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_COVERAGE_UP), SetFill(0, 1), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_COVERAGE_UP), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), EndContainer(), /* Desert coverage. */ NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_DESERT_COVERAGE_DOWN), SetFill(0, 1), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_DESERT_COVERAGE_DOWN), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_DESERT_COVERAGE_TEXT, STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT), SetFill(1, 1), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_DESERT_COVERAGE_UP), SetFill(0, 1), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_DESERT_COVERAGE_UP), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), EndContainer(), /* Temperate/Toyland spacer. */ NWidget(NWID_SPACER), SetFill(1, 1), EndContainer(), /* Starting date. */ NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_START_DATE_TEXT), SetDataTip(STR_JUST_DATE_LONG, STR_MAPGEN_DATE_TOOLTIP), SetFill(1, 1), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_UP), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), SetFill(0, 1), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_UP), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), EndContainer(), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWNNAME_DROPDOWN), SetDataTip(STR_JUST_STRING, STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP), SetFill(1, 1), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP), SetFill(1, 1), @@ -242,9 +242,9 @@ static constexpr NWidgetPart _nested_heightmap_load_widgets[] = { NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_ROTATION_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP), SetFill(1, 1), /* Heightmap highest peak. */ NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN), SetFill(0, 1), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_TEXT), SetDataTip(STR_JUST_INT, STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP), SetFill(1, 1), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_HEIGHTMAP_HEIGHT_UP), SetFill(0, 1), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_HEIGHTMAP_HEIGHT_UP), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), EndContainer(), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_RIVER_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT), SetFill(1, 1), EndContainer(), @@ -271,24 +271,24 @@ static constexpr NWidgetPart _nested_heightmap_load_widgets[] = { NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GL_CLIMATE_SEL_SELECTOR), /* Snow coverage. */ NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_COVERAGE_DOWN), SetFill(0, 1), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_COVERAGE_DOWN), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_SNOW_COVERAGE_TEXT, STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT), SetFill(1, 1), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_COVERAGE_UP), SetFill(0, 1), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_COVERAGE_UP), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), EndContainer(), /* Desert coverage. */ NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_DESERT_COVERAGE_DOWN), SetFill(0, 1), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_DESERT_COVERAGE_DOWN), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_DESERT_COVERAGE_TEXT, STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT), SetFill(1, 1), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_DESERT_COVERAGE_UP), SetFill(0, 1), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_DESERT_COVERAGE_UP), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), EndContainer(), /* Temperate/Toyland spacer. */ NWidget(NWID_SPACER), SetFill(1, 1), EndContainer(), /* Starting date. */ NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_START_DATE_TEXT), SetDataTip(STR_JUST_DATE_LONG, STR_MAPGEN_DATE_TOOLTIP), SetFill(1, 1), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_UP), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), SetFill(0, 1), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_UP), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), EndContainer(), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWNNAME_DROPDOWN), SetDataTip(STR_JUST_STRING, STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP), SetFill(1, 1), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP), SetFill(1, 1), @@ -1296,16 +1296,16 @@ static constexpr NWidgetPart _nested_create_scenario_widgets[] = { /* Date. */ NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_CS_START_DATE_DOWN), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_CS_START_DATE_DOWN), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CS_START_DATE_TEXT), SetFill(1, 1), SetDataTip(STR_JUST_DATE_LONG, STR_MAPGEN_DATE_TOOLTIP), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_CS_START_DATE_UP), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_CS_START_DATE_UP), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), EndContainer(), /* Flat map height. */ NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_CS_FLAT_LAND_HEIGHT_DOWN), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_CS_FLAT_LAND_HEIGHT_DOWN), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CS_FLAT_LAND_HEIGHT_TEXT), SetFill(1, 1), SetDataTip(STR_JUST_INT, STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_CS_FLAT_LAND_HEIGHT_UP), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_CS_FLAT_LAND_HEIGHT_UP), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), EndContainer(), EndContainer(), EndContainer(), diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 2fe19d2c50..820d9add0e 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -100,9 +100,9 @@ static constexpr NWidgetPart _nested_group_widgets[] = { NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetResize(1, 0), EndContainer(), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_MANAGE_VEHICLES_DROPDOWN), SetMinimalSize(118, 12), SetDataTip(STR_VEHICLE_LIST_MANAGE_LIST, STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_STOP_ALL), SetMinimalSize(12, 12), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_STOP_ALL), SetAspect(WidgetDimensions::ASPECT_VEHICLE_FLAG), SetDataTip(SPR_FLAG_VEH_STOPPED, STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_START_ALL), SetMinimalSize(12, 12), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_START_ALL), SetAspect(WidgetDimensions::ASPECT_VEHICLE_FLAG), SetDataTip(SPR_FLAG_VEH_RUNNING, STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP), NWidget(WWT_RESIZEBOX, COLOUR_GREY), EndContainer(), diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 8633c1e82c..fd4926a9d6 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1195,7 +1195,7 @@ static constexpr NWidgetPart _nested_industry_view_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_CREAM), NWidget(WWT_CAPTION, COLOUR_CREAM, WID_IV_CAPTION), SetDataTip(STR_INDUSTRY_VIEW_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHIMGBTN, COLOUR_CREAM, WID_IV_GOTO), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_INDUSTRY_VIEW_LOCATION_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_CREAM, WID_IV_GOTO), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_INDUSTRY_VIEW_LOCATION_TOOLTIP), NWidget(WWT_DEBUGBOX, COLOUR_CREAM), NWidget(WWT_SHADEBOX, COLOUR_CREAM), NWidget(WWT_DEFSIZEBOX, COLOUR_CREAM), diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 1412e849de..0f4f3258b0 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -53,7 +53,7 @@ static constexpr NWidgetPart _nested_land_info_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_LAND_AREA_INFORMATION_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_LI_LOCATION), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_LI_LOCATION), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP), NWidget(WWT_DEBUGBOX, COLOUR_GREY), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY, WID_LI_BACKGROUND), EndContainer(), diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 084dac2b70..3421b9b56d 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1185,18 +1185,18 @@ static constexpr NWidgetPart _nested_network_start_server_window_widgets[] = { NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS, STR_NULL), NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_BTND), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP), + NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_BTND), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_TXT), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_CLIENTS_SELECT, STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP), - NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_BTNU), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP), + NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_BTNU), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP), EndContainer(), EndContainer(), NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES, STR_NULL), NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_BTND), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP), + NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_BTND), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_TXT), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_COMPANIES_SELECT, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP), - NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_BTNU), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP), + NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_BTNU), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP), EndContainer(), EndContainer(), EndContainer(), @@ -1257,7 +1257,7 @@ static constexpr NWidgetPart _nested_client_list_widgets[] = { NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_NAME, STR_NULL), NWidget(NWID_SPACER), SetMinimalSize(10, 0), NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_NAME), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_SERVER_NAME_EDIT), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_SERVER_NAME_EDIT), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP), EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_CL_SERVER_SELECTOR), NWidget(NWID_VERTICAL), @@ -1284,7 +1284,7 @@ static constexpr NWidgetPart _nested_client_list_widgets[] = { NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_PLAYER_NAME, STR_NULL), NWidget(NWID_SPACER), SetMinimalSize(10, 0), NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_CLIENT_NAME), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_CLIENT_NAME_EDIT), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_CLIENT_NAME_EDIT), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP), EndContainer(), EndContainer(), EndContainer(), diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index c09b5942eb..45383cf35e 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1864,7 +1864,7 @@ static constexpr NWidgetPart _nested_signal_builder_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, WID_BS_CAPTION), SetDataTip(STR_BUILD_SIGNAL_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_BS_TOGGLE_SIZE), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP), + NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_BS_TOGGLE_SIZE), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP), SetAspect(WidgetDimensions::ASPECT_TOGGLE_SIZE), EndContainer(), /* Container for both signal groups, spacers, and convert/autofill buttons. */ diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp index 9706426a6a..24f71564ba 100644 --- a/src/script/script_gui.cpp +++ b/src/script/script_gui.cpp @@ -1268,7 +1268,7 @@ static constexpr NWidgetPart _nested_script_debug_widgets[] = { /* Break string widgets */ NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SCRD_BREAK_STRING_WIDGETS), NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN_2, COLOUR_GREY, WID_SCRD_BREAK_STR_ON_OFF_BTN), SetFill(0, 1), SetDataTip(SPR_FLAG_VEH_STOPPED, STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP), + NWidget(WWT_IMGBTN_2, COLOUR_GREY, WID_SCRD_BREAK_STR_ON_OFF_BTN), SetAspect(WidgetDimensions::ASPECT_VEHICLE_FLAG), SetFill(0, 1), SetDataTip(SPR_FLAG_VEH_STOPPED, STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP), NWidget(WWT_PANEL, COLOUR_GREY), NWidget(NWID_HORIZONTAL), NWidget(WWT_LABEL, COLOUR_GREY), SetPadding(2, 2, 2, 4), SetDataTip(STR_AI_DEBUG_BREAK_ON_LABEL, 0x0), diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 7dac948470..2c234b6290 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1038,7 +1038,7 @@ static constexpr NWidgetPart _nested_game_options_widgets[] = { NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME, STR_NULL), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_PARTICIPATE_SURVEY, STR_NULL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_SURVEY_PARTICIPATE_BUTTON), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_SURVEY_PARTICIPATE_BUTTON), SetAspect(WidgetDimensions::ASPECT_SETTINGS_BUTTON), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_SURVEY_PREVIEW_BUTTON), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW, STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP), @@ -1055,20 +1055,20 @@ static constexpr NWidgetPart _nested_game_options_widgets[] = { NWidget(WWT_EMPTY, COLOUR_GREY, WID_GO_GUI_SCALE), SetMinimalSize(67, 0), SetMinimalTextLines(1, 12 + WidgetDimensions::unscaled.vsep_normal, FS_SMALL), SetFill(0, 0), SetDataTip(0x0, STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_GUI_SCALE_AUTO, STR_NULL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_SCALE_AUTO), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_SCALE_AUTO), SetAspect(WidgetDimensions::ASPECT_SETTINGS_BUTTON), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_GUI_SCALE_BEVELS, STR_NULL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_SCALE_BEVEL_BUTTON), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_SCALE_BEVEL_BUTTON), SetAspect(WidgetDimensions::ASPECT_SETTINGS_BUTTON), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP), EndContainer(), #ifdef HAS_TRUETYPE_FONT NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_GUI_FONT_SPRITE, STR_NULL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_FONT_SPRITE), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_FONT_SPRITE), SetAspect(WidgetDimensions::ASPECT_SETTINGS_BUTTON), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_GUI_FONT_AA, STR_NULL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_FONT_AA), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_FONT_AA), SetAspect(WidgetDimensions::ASPECT_SETTINGS_BUTTON), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP), EndContainer(), #endif /* HAS_TRUETYPE_FONT */ EndContainer(), @@ -1086,16 +1086,16 @@ static constexpr NWidgetPart _nested_game_options_widgets[] = { EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_FULLSCREEN, STR_NULL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_FULLSCREEN_BUTTON), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_FULLSCREEN_BUTTON), SetAspect(WidgetDimensions::ASPECT_SETTINGS_BUTTON), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_VIDEO_ACCELERATION, STR_NULL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_VIDEO_ACCEL_BUTTON), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_VIDEO_ACCEL_BUTTON), SetAspect(WidgetDimensions::ASPECT_SETTINGS_BUTTON), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP), EndContainer(), #ifndef __APPLE__ NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_VIDEO_VSYNC, STR_NULL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_VIDEO_VSYNC_BUTTON), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_VIDEO_VSYNC_BUTTON), SetAspect(WidgetDimensions::ASPECT_SETTINGS_BUTTON), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP), EndContainer(), #endif NWidget(NWID_HORIZONTAL), diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index 1556930029..5448d0b283 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -534,7 +534,7 @@ static constexpr NWidgetPart _nested_query_sign_edit_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CAPTION, COLOUR_GREY, WID_QES_CAPTION), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), SetTextStyle(TC_WHITE), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_QES_LOCATION), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_EDIT_SIGN_LOCATION_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_QES_LOCATION), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_EDIT_SIGN_LOCATION_TOOLTIP), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), NWidget(WWT_EDITBOX, COLOUR_GREY, WID_QES_TEXT), SetMinimalSize(256, 12), SetDataTip(STR_EDIT_SIGN_SIGN_OSKTITLE, STR_NULL), SetPadding(2, 2, 2, 2), diff --git a/src/station_gui.cpp b/src/station_gui.cpp index d277fdbf1f..526c5c16a2 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -749,12 +749,12 @@ static constexpr NWidgetPart _nested_company_stations_widgets[] = { NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), NWidget(NWID_HORIZONTAL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_TRAIN), SetMinimalSize(14, 0), SetDataTip(STR_TRAIN, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_TRUCK), SetMinimalSize(14, 0), SetDataTip(STR_LORRY, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_BUS), SetMinimalSize(14, 0), SetDataTip(STR_BUS, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_SHIP), SetMinimalSize(14, 0), SetDataTip(STR_SHIP, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_AIRPLANE), SetMinimalSize(14, 0), SetDataTip(STR_PLANE, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_STL_FACILALL), SetMinimalSize(14, 0), SetDataTip(STR_ABBREV_ALL, STR_STATION_LIST_SELECT_ALL_FACILITIES), SetTextStyle(TC_BLACK, FS_SMALL), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_TRAIN), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetDataTip(STR_TRAIN, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_TRUCK), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetDataTip(STR_LORRY, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_BUS), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetDataTip(STR_BUS, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_SHIP), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetDataTip(STR_SHIP, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_AIRPLANE), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetDataTip(STR_PLANE, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_STL_FACILALL), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetDataTip(STR_ABBREV_ALL, STR_STATION_LIST_SELECT_ALL_FACILITIES), SetTextStyle(TC_BLACK, FS_SMALL), SetFill(0, 1), NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(5, 0), SetFill(0, 1), EndContainer(), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_STL_CARGODROPDOWN), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), SetFill(1, 1), EndContainer(), @@ -795,9 +795,9 @@ void ShowCompanyStations(CompanyID company) static constexpr NWidgetPart _nested_station_view_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SV_RENAME), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_STATION_VIEW_RENAME_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SV_RENAME), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_STATION_VIEW_RENAME_TOOLTIP), NWidget(WWT_CAPTION, COLOUR_GREY, WID_SV_CAPTION), SetDataTip(STR_STATION_VIEW_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SV_LOCATION), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_STATION_VIEW_CENTER_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SV_LOCATION), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_STATION_VIEW_CENTER_TOOLTIP), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), @@ -821,10 +821,10 @@ static constexpr NWidgetPart _nested_station_view_widgets[] = { NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SV_CLOSE_AIRPORT), SetMinimalSize(45, 12), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_STATION_VIEW_CLOSE_AIRPORT, STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SV_CATCHMENT), SetMinimalSize(45, 12), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_BUTTON_CATCHMENT, STR_TOOLTIP_CATCHMENT), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_TRAINS), SetMinimalSize(14, 12), SetFill(0, 1), SetDataTip(STR_TRAIN, STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_ROADVEHS), SetMinimalSize(14, 12), SetFill(0, 1), SetDataTip(STR_LORRY, STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_SHIPS), SetMinimalSize(14, 12), SetFill(0, 1), SetDataTip(STR_SHIP, STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_PLANES), SetMinimalSize(14, 12), SetFill(0, 1), SetDataTip(STR_PLANE, STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_TRAINS), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetFill(0, 1), SetDataTip(STR_TRAIN, STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_ROADVEHS), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetFill(0, 1), SetDataTip(STR_LORRY, STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_SHIPS), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetFill(0, 1), SetDataTip(STR_SHIP, STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_PLANES), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetFill(0, 1), SetDataTip(STR_PLANE, STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP), NWidget(WWT_RESIZEBOX, COLOUR_GREY), EndContainer(), }; diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 29e8c5396f..5ee4ce28e2 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -613,9 +613,9 @@ public: static constexpr NWidgetPart _nested_town_game_view_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_BROWN), - NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_TV_CHANGE_NAME), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_TOWN_VIEW_RENAME_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_TV_CHANGE_NAME), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_TOWN_VIEW_RENAME_TOOLTIP), NWidget(WWT_CAPTION, COLOUR_BROWN, WID_TV_CAPTION), SetDataTip(STR_TOWN_VIEW_TOWN_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_TV_CENTER_VIEW), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_TOWN_VIEW_CENTER_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_TV_CENTER_VIEW), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_TOWN_VIEW_CENTER_TOOLTIP), NWidget(WWT_SHADEBOX, COLOUR_BROWN), NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN), NWidget(WWT_STICKYBOX, COLOUR_BROWN), @@ -643,9 +643,9 @@ static WindowDesc _town_game_view_desc( static constexpr NWidgetPart _nested_town_editor_view_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_BROWN), - NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_TV_CHANGE_NAME), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_TOWN_VIEW_RENAME_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_TV_CHANGE_NAME), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_TOWN_VIEW_RENAME_TOOLTIP), NWidget(WWT_CAPTION, COLOUR_BROWN, WID_TV_CAPTION), SetDataTip(STR_TOWN_VIEW_TOWN_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_TV_CENTER_VIEW), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_TOWN_VIEW_CENTER_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_TV_CENTER_VIEW), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_TOWN_VIEW_CENTER_TOOLTIP), NWidget(WWT_SHADEBOX, COLOUR_BROWN), NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN), NWidget(WWT_STICKYBOX, COLOUR_BROWN), diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 20fa229c9f..3849518303 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -1591,9 +1591,9 @@ static constexpr NWidgetPart _nested_vehicle_list[] = { NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(0, 12), SetResize(1, 0), SetFill(1, 1), EndContainer(), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_VL_MANAGE_VEHICLES_DROPDOWN), SetMinimalSize(118, 12), SetFill(0, 1), SetDataTip(STR_VEHICLE_LIST_MANAGE_LIST, STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VL_STOP_ALL), SetMinimalSize(12, 12), SetFill(0, 1), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VL_STOP_ALL), SetAspect(WidgetDimensions::ASPECT_VEHICLE_FLAG), SetFill(0, 1), SetDataTip(SPR_FLAG_VEH_STOPPED, STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VL_START_ALL), SetMinimalSize(12, 12), SetFill(0, 1), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VL_START_ALL), SetAspect(WidgetDimensions::ASPECT_VEHICLE_FLAG), SetFill(0, 1), SetDataTip(SPR_FLAG_VEH_RUNNING, STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP), EndContainer(), /* Widget to be shown for other companies hiding the previous 5 widgets. */ @@ -2817,9 +2817,9 @@ static void ShowVehicleDetailsWindow(const Vehicle *v) static constexpr NWidgetPart _nested_vehicle_view_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VV_RENAME), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_NULL /* filled in later */), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VV_RENAME), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_NULL /* filled in later */), NWidget(WWT_CAPTION, COLOUR_GREY, WID_VV_CAPTION), SetDataTip(STR_VEHICLE_VIEW_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VV_LOCATION), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_NULL /* filled in later */), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VV_LOCATION), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_NULL /* filled in later */), NWidget(WWT_DEBUGBOX, COLOUR_GREY), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), @@ -2851,7 +2851,7 @@ static constexpr NWidgetPart _nested_vehicle_view_widgets[] = { EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PUSHBTN, COLOUR_GREY, WID_VV_START_STOP), SetResize(1, 0), SetFill(1, 0), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VV_ORDER_LOCATION), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VV_ORDER_LOCATION), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP), NWidget(WWT_RESIZEBOX, COLOUR_GREY), EndContainer(), }; diff --git a/src/waypoint_gui.cpp b/src/waypoint_gui.cpp index 9e6fcdf0f9..f73e301a17 100644 --- a/src/waypoint_gui.cpp +++ b/src/waypoint_gui.cpp @@ -163,9 +163,9 @@ public: static constexpr NWidgetPart _nested_waypoint_view_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_W_RENAME), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_BUOY_VIEW_CHANGE_BUOY_NAME), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_W_RENAME), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_BUOY_VIEW_CHANGE_BUOY_NAME), NWidget(WWT_CAPTION, COLOUR_GREY, WID_W_CAPTION), SetDataTip(STR_WAYPOINT_VIEW_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_W_CENTER_VIEW), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_BUOY_VIEW_CENTER_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_W_CENTER_VIEW), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_BUOY_VIEW_CENTER_TOOLTIP), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), diff --git a/src/window_gui.h b/src/window_gui.h index 5a67fd9b2c..60bbf1a6b8 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -67,6 +67,14 @@ public: static const WidgetDimensions unscaled; ///< Unscaled widget dimensions. static WidgetDimensions scaled; ///< Widget dimensions scaled for current zoom level. + static constexpr float ASPECT_LOCATION = 12.f / 14.f; + static constexpr float ASPECT_RENAME = 12.f / 14.f; + static constexpr float ASPECT_SETTINGS_BUTTON = 21.f / 12.f; + static constexpr float ASPECT_TOGGLE_SIZE = 12.f / 14.f; + static constexpr float ASPECT_UP_DOWN_BUTTON = 11.f / 12.f; + static constexpr float ASPECT_VEHICLE_ICON = 15.f / 12.f; + static constexpr float ASPECT_VEHICLE_FLAG = 11.f / 12.f; + private: /** * Distances used in drawing widgets. From 7e049aa2b12601cf7467b80414177e72ee99f226 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 27 Mar 2024 09:02:42 +0000 Subject: [PATCH 358/695] Change: Use aspect ratio for common left/right buttons. --- src/widget.cpp | 4 ++++ src/window_gui.h | 1 + 2 files changed, 5 insertions(+) diff --git a/src/widget.cpp b/src/widget.cpp index eb965f78c2..46353c8f72 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -2559,9 +2559,13 @@ NWidgetLeaf::NWidgetLeaf(WidgetType tp, Colours colour, WidgetID index, uint32_t case WWT_MATRIX: case NWID_BUTTON_DROPDOWN: case NWID_PUSHBUTTON_DROPDOWN: + this->SetFill(0, 0); + break; + case WWT_ARROWBTN: case WWT_PUSHARROWBTN: this->SetFill(0, 0); + this->SetAspect(WidgetDimensions::ASPECT_LEFT_RIGHT_BUTTON); break; case WWT_EDITBOX: diff --git a/src/window_gui.h b/src/window_gui.h index 60bbf1a6b8..a18b9f85fb 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -71,6 +71,7 @@ public: static constexpr float ASPECT_RENAME = 12.f / 14.f; static constexpr float ASPECT_SETTINGS_BUTTON = 21.f / 12.f; static constexpr float ASPECT_TOGGLE_SIZE = 12.f / 14.f; + static constexpr float ASPECT_LEFT_RIGHT_BUTTON = 8.f / 12.f; static constexpr float ASPECT_UP_DOWN_BUTTON = 11.f / 12.f; static constexpr float ASPECT_VEHICLE_ICON = 15.f / 12.f; static constexpr float ASPECT_VEHICLE_FLAG = 11.f / 12.f; From 2a833a89686db28a01d591e9b4b3cf5fc1b957dc Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 27 Mar 2024 09:02:42 +0000 Subject: [PATCH 359/695] Change: Use aspect ratio for rail station platforms/tracks buttons. --- src/rail_gui.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 45383cf35e..7cf1dfeb3c 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1615,23 +1615,23 @@ static constexpr NWidgetPart _nested_station_builder_widgets[] = { NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BRAS_SHOW_NEWST_TYPE), SetMinimalSize(144, 11), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_ORANGE), NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_NUMBER_OF_TRACKS, STR_NULL), NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_1), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_1, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_2), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_2, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_3), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_3, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_4), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_4, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_5), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_5, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_6), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_6, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_7), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_7, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_1), SetAspect(1.25f), SetDataTip(STR_BLACK_1, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_2), SetAspect(1.25f), SetDataTip(STR_BLACK_2, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_3), SetAspect(1.25f), SetDataTip(STR_BLACK_3, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_4), SetAspect(1.25f), SetDataTip(STR_BLACK_4, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_5), SetAspect(1.25f), SetDataTip(STR_BLACK_5, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_6), SetAspect(1.25f), SetDataTip(STR_BLACK_6, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_7), SetAspect(1.25f), SetDataTip(STR_BLACK_7, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), EndContainer(), NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_PLATFORM_LENGTH, STR_NULL), NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_1), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_1, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_2), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_2, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_3), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_3, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_4), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_4, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_5), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_5, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_6), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_6, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_7), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_7, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_1), SetAspect(1.25f), SetDataTip(STR_BLACK_1, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_2), SetAspect(1.25f), SetDataTip(STR_BLACK_2, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_3), SetAspect(1.25f), SetDataTip(STR_BLACK_3, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_4), SetAspect(1.25f), SetDataTip(STR_BLACK_4, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_5), SetAspect(1.25f), SetDataTip(STR_BLACK_5, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_6), SetAspect(1.25f), SetDataTip(STR_BLACK_6, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_7), SetAspect(1.25f), SetDataTip(STR_BLACK_7, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_DRAG_N_DROP), SetMinimalSize(75, 12), SetDataTip(STR_STATION_BUILD_DRAG_DROP, STR_STATION_BUILD_DRAG_DROP_TOOLTIP), From 5df5e3f45c5f9123b3bc6858984ec937fb37c318 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 27 Mar 2024 17:53:31 +0000 Subject: [PATCH 360/695] Change: Use aspect ratio for file home button. --- src/fios_gui.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index 58bfbe627f..bf7812570e 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -90,7 +90,7 @@ static constexpr NWidgetPart _nested_load_dialog_widgets[] = { NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYNAME), SetDataTip(STR_SORT_BY_CAPTION_NAME, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYDATE), SetDataTip(STR_SORT_BY_CAPTION_DATE, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0), EndContainer(), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SL_HOME_BUTTON), SetMinimalSize(12, 12), SetDataTip(SPR_HOUSE_ICON, STR_SAVELOAD_HOME_BUTTON), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SL_HOME_BUTTON), SetAspect(1), SetDataTip(SPR_HOUSE_ICON, STR_SAVELOAD_HOME_BUTTON), EndContainer(), /* Files */ NWidget(NWID_HORIZONTAL), @@ -148,7 +148,7 @@ static constexpr NWidgetPart _nested_load_heightmap_dialog_widgets[] = { NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYNAME), SetDataTip(STR_SORT_BY_CAPTION_NAME, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYDATE), SetDataTip(STR_SORT_BY_CAPTION_DATE, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0), EndContainer(), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SL_HOME_BUTTON), SetMinimalSize(12, 12), SetDataTip(SPR_HOUSE_ICON, STR_SAVELOAD_HOME_BUTTON), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SL_HOME_BUTTON), SetAspect(1), SetDataTip(SPR_HOUSE_ICON, STR_SAVELOAD_HOME_BUTTON), EndContainer(), /* Files */ NWidget(NWID_HORIZONTAL), @@ -195,7 +195,7 @@ static constexpr NWidgetPart _nested_save_dialog_widgets[] = { NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYNAME), SetDataTip(STR_SORT_BY_CAPTION_NAME, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYDATE), SetDataTip(STR_SORT_BY_CAPTION_DATE, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0), EndContainer(), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SL_HOME_BUTTON), SetMinimalSize(12, 12), SetDataTip(SPR_HOUSE_ICON, STR_SAVELOAD_HOME_BUTTON), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SL_HOME_BUTTON), SetAspect(1), SetDataTip(SPR_HOUSE_ICON, STR_SAVELOAD_HOME_BUTTON), EndContainer(), /* Files */ NWidget(NWID_HORIZONTAL), From 6cbb8d02cfe28789880926b93e9cb67d24791002 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 27 Mar 2024 17:53:32 +0000 Subject: [PATCH 361/695] Change: Use aspect ratio for shared order list button. --- src/order_gui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 7bc44e810a..64bbaf2abb 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -1665,7 +1665,7 @@ static constexpr NWidgetPart _nested_orders_train_widgets[] = { SetDataTip(STR_JUST_COMMA, STR_ORDER_CONDITIONAL_VALUE_TOOLTIP), SetResize(1, 0), EndContainer(), EndContainer(), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_O_SHARED_ORDER_LIST), SetMinimalSize(12, 12), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_O_SHARED_ORDER_LIST), SetAspect(1), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP), EndContainer(), /* Second button row. */ @@ -1740,7 +1740,7 @@ static constexpr NWidgetPart _nested_orders_widgets[] = { EndContainer(), EndContainer(), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_O_SHARED_ORDER_LIST), SetMinimalSize(12, 12), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_O_SHARED_ORDER_LIST), SetAspect(1), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP), EndContainer(), /* Second button row. */ From 08140fdca36b16a784e096df115b53c05ca8dbf3 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 20 Apr 2024 04:41:21 +0000 Subject: [PATCH 362/695] Update: Translations from eints dutch: 4 changes by Afoklala --- src/lang/dutch.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index bea3abf06e..741a9e236b 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -5286,6 +5286,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Pas je N STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Nog geen voertuigen beschikbaar STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE} Start een nieuw spel na {DATE_SHORT} of gebruik een NewGRF dat in vroege voertuigen voorziet +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Geen wegtypen beschikbaar voor in de stad +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Wijzig je NewGRF-configuratie +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Er zijn nog geen wegtypen beschikbaar voor steden +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Start een nieuw spel na {DATE_SHORT} of gebruik een NewGRF met wegtypen die al vroeg in steden gebruikt kunnen worden # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan trein niet het sein laten passeren bij gevaar... From e028c1555540d09f8012757debc119841ae73efd Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 20 Apr 2024 10:22:19 +0100 Subject: [PATCH 363/695] Codechange: Use std::accumulate to get infrastructure total rail/road pieces. (#12442) --- src/company_base.h | 4 +--- src/company_gui.cpp | 7 +++---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/company_base.h b/src/company_base.h index baa1a7ef78..c177243686 100644 --- a/src/company_base.h +++ b/src/company_base.h @@ -42,9 +42,7 @@ struct CompanyInfrastructure { /** Get total sum of all owned track bits. */ uint32_t GetRailTotal() const { - uint32_t total = 0; - for (RailType rt = RAILTYPE_BEGIN; rt < RAILTYPE_END; rt++) total += this->rail[rt]; - return total; + return std::accumulate(std::begin(this->rail), std::end(this->rail), 0U); } uint32_t GetRoadTotal() const; diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 129f339f16..586632306b 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -2337,16 +2337,15 @@ struct CompanyWindow : Window { int y = r.top; - uint rail_pieces = c->infrastructure.signal; - for (uint i = 0; i < std::size(c->infrastructure.rail); i++) rail_pieces += c->infrastructure.rail[i]; + uint rail_pieces = c->infrastructure.signal + c->infrastructure.GetRailTotal(); if (rail_pieces != 0) { SetDParam(0, rail_pieces); DrawString(r.left, r.right, y, STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL); y += GetCharacterHeight(FS_NORMAL); } - uint road_pieces = 0; - for (uint i = 0; i < std::size(c->infrastructure.road); i++) road_pieces += c->infrastructure.road[i]; + /* GetRoadTotal() skips tram pieces, but we actually want road and tram here. */ + uint road_pieces = std::accumulate(std::begin(c->infrastructure.road), std::end(c->infrastructure.road), 0U); if (road_pieces != 0) { SetDParam(0, road_pieces); DrawString(r.left, r.right, y, STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD); From 1c31e4b68c51a8dea5f72e6a6ef7cef3a613b7dd Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 20 Apr 2024 10:23:36 +0100 Subject: [PATCH 364/695] Change: Disallow using Action A to load sprites above the baseset unless reserved. (#12435) Using Action A above the baseset is error prone as the sprites are not fixed and can be moved around. Any NewGRF doing so is likely to break in the future, so force it to break instead. --- src/newgrf.cpp | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 662fc3e38b..77c46b61b0 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -370,7 +370,7 @@ struct GRFLocation { } }; -static std::map _grm_sprites; +static std::map> _grm_sprites; typedef std::map> GRFLineToSpriteOverride; static GRFLineToSpriteOverride _grf_line_to_action6_sprite_override; @@ -7072,6 +7072,21 @@ static void GRFInfo(ByteReader *buf) Debug(grf, 1, "GRFInfo: Loaded GRFv{} set {:08X} - {} (palette: {}, version: {})", version, BSWAP32(grfid), name, (_cur.grfconfig->palette & GRFP_USE_MASK) ? "Windows" : "DOS", _cur.grfconfig->version); } +/** + * Check if a sprite ID range is within the GRM reversed range for the currently loading NewGRF. + * @param first_sprite First sprite of range. + * @param num_sprites Number of sprites in the range. + * @return True iff the NewGRF has reserved a range equal to or greater than the provided range. + */ +static bool IsGRMReservedSprite(SpriteID first_sprite, uint16_t num_sprites) +{ + for (const auto &grm_sprite : _grm_sprites) { + if (grm_sprite.first.grfid != _cur.grffile->grfid) continue; + if (grm_sprite.second.first <= first_sprite && grm_sprite.second.first + grm_sprite.second.second >= first_sprite + num_sprites) return true; + } + return false; +} + /* Action 0x0A */ static void SpriteReplace(ByteReader *buf) { @@ -7093,6 +7108,18 @@ static void SpriteReplace(ByteReader *buf) i, num_sprites, first_sprite ); + if (first_sprite + num_sprites >= SPR_OPENTTD_BASE) { + /* Outside allowed range, check for GRM sprite reservations. */ + if (!IsGRMReservedSprite(first_sprite, num_sprites)) { + GrfMsg(0, "SpriteReplace: [Set {}] Changing {} sprites, beginning with {}, above limit of {} and not within reserved range, ignoring.", + i, num_sprites, first_sprite, SPR_OPENTTD_BASE); + + /* Load the sprites at the current location so they will do nothing instead of appearing to work. */ + first_sprite = _cur.spriteid; + _cur.spriteid += num_sprites; + } + } + for (uint j = 0; j < num_sprites; j++) { int load_index = first_sprite + j; _cur.nfo_line++; @@ -7460,7 +7487,7 @@ static void ParamSet(ByteReader *buf) /* Reserve space at the current sprite ID */ GrfMsg(4, "ParamSet: GRM: Allocated {} sprites at {}", count, _cur.spriteid); - _grm_sprites[GRFLocation(_cur.grffile->grfid, _cur.nfo_line)] = _cur.spriteid; + _grm_sprites[GRFLocation(_cur.grffile->grfid, _cur.nfo_line)] = std::make_pair(_cur.spriteid, count); _cur.spriteid += count; } } @@ -7494,7 +7521,7 @@ static void ParamSet(ByteReader *buf) switch (op) { case 0: /* Return space reserved during reservation stage */ - src1 = _grm_sprites[GRFLocation(_cur.grffile->grfid, _cur.nfo_line)]; + src1 = _grm_sprites[GRFLocation(_cur.grffile->grfid, _cur.nfo_line)].first; GrfMsg(4, "ParamSet: GRM: Using pre-allocated sprites at {}", src1); break; From 699c7e4c9da5f29efc66e06768f7879ef09f9e81 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 20 Apr 2024 10:24:35 +0100 Subject: [PATCH 365/695] Fix 3de8853e29: Industries accept/produce no cargo for pre-SLV_78 saves. (#12508) Industry accepted/produced was trimmed too early for original and pre-SLV_78 saves, as cargo type was not stored per slot so all slots look invalid to the trim function. --- src/saveload/afterload.cpp | 8 ++++++++ src/saveload/industry_sl.cpp | 1 - src/saveload/oldloader_sl.cpp | 1 - 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 88dee51b9c..43f9c79253 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -1722,6 +1722,14 @@ bool AfterLoadGame() } } + /* Industry cargo slots were fixed size before (and including) SLV_VEHICLE_ECONOMY_AGE (either 2/3 or 16/16), + * after this they are dynamic. Trim excess slots. */ + if (IsSavegameVersionBeforeOrAt(SLV_VEHICLE_ECONOMY_AGE)) { + for (Industry *i : Industry::Iterate()) { + TrimIndustryAcceptedProduced(i); + } + } + /* Before version 81, the density of grass was always stored as zero, and * grassy trees were always drawn fully grassy. Furthermore, trees on rough * land used to have zero density, now they have full density. Therefore, diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index 342f03d807..ad3f0dc7eb 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -266,7 +266,6 @@ struct INDYChunkHandler : ChunkHandler { LoadMoveAcceptsProduced(i, INDUSTRY_NUM_INPUTS, INDUSTRY_NUM_OUTPUTS); } Industry::IncIndustryTypeCount(i->type); - TrimIndustryAcceptedProduced(i); } } diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 099a2c9c29..e5127b9ad3 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -875,7 +875,6 @@ static bool LoadOldIndustry(LoadgameState *ls, int num) } Industry::IncIndustryTypeCount(i->type); - TrimIndustryAcceptedProduced(i); } else { delete i; } From 57d7359b1a74440b4ffd6bfd13ce62a28f25c04a Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 20 Apr 2024 10:25:04 +0100 Subject: [PATCH 366/695] Codechange: Remove old group liveries savegame conversion. (#12537) Conversion to set default group livery is in the wrong place (not in `AfterLoadGame()`), however it is not necessary any more as `AfterLoadGame()` always calls the function `UpdateCompanyLiveries()` which will do the same thing. --- src/saveload/group_sl.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/saveload/group_sl.cpp b/src/saveload/group_sl.cpp index d286f1f204..2baae15416 100644 --- a/src/saveload/group_sl.cpp +++ b/src/saveload/group_sl.cpp @@ -53,12 +53,6 @@ struct GRPSChunkHandler : ChunkHandler { SlObject(g, slt); if (IsSavegameVersionBefore(SLV_189)) g->parent = INVALID_GROUP; - - if (IsSavegameVersionBefore(SLV_GROUP_LIVERIES)) { - const Company *c = Company::Get(g->owner); - g->livery.colour1 = c->livery[LS_DEFAULT].colour1; - g->livery.colour2 = c->livery[LS_DEFAULT].colour2; - } } } }; From ed2db809900d1de4b0bc11e131b23dec5203e9a4 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 20 Apr 2024 02:46:39 +0100 Subject: [PATCH 367/695] Codechange: Use map.emplace() instead of map.insert(std::pair). This avoids a copy of the pair into the map. --- src/cargomonitor.cpp | 3 +-- src/cargotype.cpp | 2 +- src/network/network_content.cpp | 2 +- src/newgrf_gui.cpp | 3 +-- src/saveload/cargomonitor_sl.cpp | 6 ++---- src/saveload/station_sl.cpp | 2 +- src/station_cmd.cpp | 4 ++-- 7 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/cargomonitor.cpp b/src/cargomonitor.cpp index dc5ab7643f..ab8dc4a06f 100644 --- a/src/cargomonitor.cpp +++ b/src/cargomonitor.cpp @@ -71,8 +71,7 @@ static int32_t GetAmount(CargoMonitorMap &monitor_map, CargoMonitorID monitor, b CargoMonitorMap::iterator iter = monitor_map.find(monitor); if (iter == monitor_map.end()) { if (keep_monitoring) { - std::pair p(monitor, 0); - monitor_map.insert(p); + monitor_map.emplace(monitor, 0); } return 0; } else { diff --git a/src/cargotype.cpp b/src/cargotype.cpp index 98d53a9d1c..870369dbbd 100644 --- a/src/cargotype.cpp +++ b/src/cargotype.cpp @@ -99,7 +99,7 @@ void BuildCargoLabelMap() /* Label already exists, don't addd again. */ if (CargoSpec::label_map.count(cs.label) != 0) continue; - CargoSpec::label_map.insert(std::make_pair(cs.label, cs.Index())); + CargoSpec::label_map.emplace(cs.label, cs.Index()); } } diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 6db744dffe..2395180a27 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -72,7 +72,7 @@ bool ClientNetworkContentSocketHandler::Receive_SERVER_INFO(Packet &p) for (uint i = 0; i < dependency_count; i++) { ContentID dependency_cid = (ContentID)p.Recv_uint32(); ci->dependencies.push_back(dependency_cid); - this->reverse_dependency_map.insert({ dependency_cid, ci->id }); + this->reverse_dependency_map.emplace(dependency_cid, ci->id); } uint tag_count = p.Recv_uint8(); diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index ef8950a5ce..146f890189 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -591,8 +591,7 @@ typedef std::map GrfIdMap; ///< Map of grfid to the static void FillGrfidMap(const GRFConfig *c, GrfIdMap *grfid_map) { while (c != nullptr) { - std::pair p(c->ident.grfid, c); - grfid_map->insert(p); + grfid_map->emplace(c->ident.grfid, c); c = c->next; } } diff --git a/src/saveload/cargomonitor_sl.cpp b/src/saveload/cargomonitor_sl.cpp index 61f6e0eec4..c932ea18d7 100644 --- a/src/saveload/cargomonitor_sl.cpp +++ b/src/saveload/cargomonitor_sl.cpp @@ -81,8 +81,7 @@ struct CMDLChunkHandler : ChunkHandler { if (fix) storage.number = FixupCargoMonitor(storage.number); - std::pair p(storage.number, storage.amount); - _cargo_deliveries.insert(p); + _cargo_deliveries.emplace(storage.number, storage.amount); } } }; @@ -125,8 +124,7 @@ struct CMPUChunkHandler : ChunkHandler { if (fix) storage.number = FixupCargoMonitor(storage.number); - std::pair p(storage.number, storage.amount); - _cargo_pickups.insert(p); + _cargo_pickups.emplace(storage.number, storage.amount); } } }; diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index 8c5b962ead..0db9509e53 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -318,7 +318,7 @@ public: for (uint32_t j = 0; j < num_flows; ++j) { SlObject(&flow, this->GetLoadDescription()); if (fs == nullptr || prev_source != flow.source) { - fs = &(ge->flows.insert(std::make_pair(flow.source, FlowStat(flow.via, flow.share, flow.restricted))).first->second); + fs = &(ge->flows.emplace(flow.source, FlowStat(flow.via, flow.share, flow.restricted))).first->second; } else { fs->AppendShare(flow.via, flow.share, flow.restricted); } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index aece206dfc..e807e8d9b1 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -4810,7 +4810,7 @@ void FlowStatMap::AddFlow(StationID origin, StationID via, uint flow) { FlowStatMap::iterator origin_it = this->find(origin); if (origin_it == this->end()) { - this->insert(std::make_pair(origin, FlowStat(via, flow))); + this->emplace(origin, FlowStat(via, flow)); } else { origin_it->second.ChangeShare(via, flow); assert(!origin_it->second.GetShares()->empty()); @@ -4831,7 +4831,7 @@ void FlowStatMap::PassOnFlow(StationID origin, StationID via, uint flow) if (prev_it == this->end()) { FlowStat fs(via, flow); fs.AppendShare(INVALID_STATION, flow); - this->insert(std::make_pair(origin, fs)); + this->emplace(origin, fs); } else { prev_it->second.ChangeShare(via, flow); prev_it->second.ChangeShare(INVALID_STATION, flow); From 40fa45a76a60912aaadf45814317e1643321441c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 20 Apr 2024 02:48:56 +0100 Subject: [PATCH 368/695] Codechange: Emplace std::pair into vectors. This creates the pair in the vector, instead of creating it then copying it in. --- src/league_gui.cpp | 2 +- src/linkgraph/linkgraph_gui.cpp | 2 +- src/misc/lrucache.hpp | 2 +- src/station_cmd.cpp | 4 ++-- src/town_cmd.cpp | 2 +- src/viewport.cpp | 2 +- src/viewport_sprite_sorter_sse4.cpp | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/league_gui.cpp b/src/league_gui.cpp index 58b36c213b..60af81e972 100644 --- a/src/league_gui.cpp +++ b/src/league_gui.cpp @@ -293,7 +293,7 @@ private: for (uint i = 0; i != elements.size(); i++) { auto *lte = elements[i]; if (i > 0 && elements[i - 1]->rating != lte->rating) rank = i; - this->rows.emplace_back(std::make_pair(rank, lte)); + this->rows.emplace_back(rank, lte); } } diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index c065711504..937f24509c 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -113,7 +113,7 @@ void LinkGraphOverlay::RebuildCache() } } if (this->IsPointVisible(pta, &dpi)) { - this->cached_stations.push_back(std::make_pair(from, supply)); + this->cached_stations.emplace_back(from, supply); } } } diff --git a/src/misc/lrucache.hpp b/src/misc/lrucache.hpp index 3adedbefd4..0ff9db663a 100644 --- a/src/misc/lrucache.hpp +++ b/src/misc/lrucache.hpp @@ -71,7 +71,7 @@ public: } /* Insert new item. */ - this->data.push_front(std::make_pair(key, item)); + this->data.emplace_front(key, item); this->lookup.emplace(key, this->data.begin()); } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index e807e8d9b1..dd32c4f006 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -4225,9 +4225,9 @@ uint MoveGoodsToStation(CargoID type, uint amount, SourceType source_type, Sourc } if (used_stations.empty()) { used_stations.reserve(2); - used_stations.emplace_back(std::make_pair(first_station, 0)); + used_stations.emplace_back(first_station, 0); } - used_stations.emplace_back(std::make_pair(st, 0)); + used_stations.emplace_back(st, 0); } /* no stations around at all? */ diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 7a5d9221a1..2fae67fc47 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2717,7 +2717,7 @@ static bool BuildTownHouse(Town *t, TileIndex tile) uint cur_prob = hs.probability; probability_max += cur_prob; - probs.emplace_back(std::make_pair(hs.Index(), cur_prob)); + probs.emplace_back(hs.Index(), cur_prob); } TileIndex baseTile = tile; diff --git a/src/viewport.cpp b/src/viewport.cpp index 8110bc4224..8a19f56ae0 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1545,7 +1545,7 @@ static void ViewportSortParentSprites(ParentSpriteToSortVector *psdv) /* Initialize sprite list and order. */ for (auto p = psdv->rbegin(); p != psdv->rend(); p++) { - sprite_list.push_front(std::make_pair((*p)->xmin + (*p)->ymin, *p)); + sprite_list.emplace_front((*p)->xmin + (*p)->ymin, *p); sprite_order.push(*p); (*p)->order = next_order++; } diff --git a/src/viewport_sprite_sorter_sse4.cpp b/src/viewport_sprite_sorter_sse4.cpp index 3c868d2a09..4f7de754ff 100644 --- a/src/viewport_sprite_sorter_sse4.cpp +++ b/src/viewport_sprite_sorter_sse4.cpp @@ -48,7 +48,7 @@ void ViewportSortParentSpritesSSE41(ParentSpriteToSortVector *psdv) /* Initialize sprite list and order. */ for (auto p = psdv->rbegin(); p != psdv->rend(); p++) { - sprite_list.push_front(std::make_pair((*p)->xmin + (*p)->ymin, *p)); + sprite_list.emplace_front((*p)->xmin + (*p)->ymin, *p); sprite_order.push(*p); (*p)->order = next_order++; } From e441033d685362338981bfa5c9c3ea1fcbc41d93 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Mon, 8 Apr 2024 20:30:32 +0200 Subject: [PATCH 369/695] Codechange: use std::array instead of C-style array for produced/accepts cargo --- src/industry_cmd.cpp | 4 ++-- src/industry_gui.cpp | 10 +++++----- src/industrytype.h | 4 ++-- src/newgrf.cpp | 18 +++++++++--------- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 36bdd1bffb..c2d38d829c 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1788,7 +1788,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, i->type = type; Industry::IncIndustryTypeCount(type); - for (size_t index = 0; index < lengthof(indspec->produced_cargo); ++index) { + for (size_t index = 0; index < std::size(indspec->produced_cargo); ++index) { if (!IsValidCargoID(indspec->produced_cargo[index])) break; Industry::ProducedCargo &p = i->produced.emplace_back(); @@ -1796,7 +1796,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, p.rate = indspec->production_rate[index]; } - for (size_t index = 0; index < lengthof(indspec->accepts_cargo); ++index) { + for (size_t index = 0; index < std::size(indspec->accepts_cargo); ++index) { if (!IsValidCargoID(indspec->accepts_cargo[index])) break; Industry::AcceptedCargo &a = i->accepted.emplace_back(); diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index fd4926a9d6..a5e306fd24 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -155,7 +155,7 @@ enum CargoSuffixInOut { template static inline void GetAllCargoSuffixes(CargoSuffixInOut use_input, CargoSuffixType cst, const Industry *ind, IndustryType ind_type, const IndustrySpec *indspec, const TC &cargoes, TS &suffixes) { - static_assert(lengthof(cargoes) <= lengthof(suffixes)); + static_assert(std::tuple_size_v> <= lengthof(suffixes)); if (indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED) { /* Reworked behaviour with new many-in-many-out scheme */ @@ -452,7 +452,7 @@ public: Dimension d = {0, 0}; for (const auto &indtype : this->list) { const IndustrySpec *indsp = GetIndustrySpec(indtype); - CargoSuffix cargo_suffix[lengthof(indsp->accepts_cargo)]; + CargoSuffix cargo_suffix[std::tuple_size_vaccepts_cargo)>]; /* Measure the accepted cargoes, if any. */ GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_FUND, nullptr, indtype, indsp, indsp->accepts_cargo, cargo_suffix); @@ -568,7 +568,7 @@ public: ir.top += GetCharacterHeight(FS_NORMAL); } - CargoSuffix cargo_suffix[lengthof(indsp->accepts_cargo)]; + CargoSuffix cargo_suffix[std::tuple_size_vaccepts_cargo)>]; /* Draw the accepted cargoes, if any. Otherwise, will print "Nothing". */ GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_FUND, nullptr, this->selected_type, indsp, indsp->accepts_cargo, cargo_suffix); @@ -2422,7 +2422,7 @@ struct CargoesRow { int other_count = 0; const IndustrySpec *indsp = GetIndustrySpec(ind_fld->u.industry.ind_type); - assert(CargoesField::max_cargoes <= lengthof(indsp->produced_cargo)); + assert(CargoesField::max_cargoes <= std::size(indsp->produced_cargo)); for (uint i = 0; i < CargoesField::max_cargoes; i++) { int col = cargo_fld->ConnectCargo(indsp->produced_cargo[i], true); if (col < 0) others[other_count++] = indsp->produced_cargo[i]; @@ -2481,7 +2481,7 @@ struct CargoesRow { int other_count = 0; const IndustrySpec *indsp = GetIndustrySpec(ind_fld->u.industry.ind_type); - assert(CargoesField::max_cargoes <= lengthof(indsp->accepts_cargo)); + assert(CargoesField::max_cargoes <= std::size(indsp->accepts_cargo)); for (uint i = 0; i < CargoesField::max_cargoes; i++) { int col = cargo_fld->ConnectCargo(indsp->accepts_cargo[i], false); if (col < 0) others[other_count++] = indsp->accepts_cargo[i]; diff --git a/src/industrytype.h b/src/industrytype.h index 7d33c2991b..74b656cb81 100644 --- a/src/industrytype.h +++ b/src/industrytype.h @@ -109,7 +109,7 @@ struct IndustrySpec { uint32_t prospecting_chance; ///< Chance prospecting succeeds IndustryType conflicting[3]; ///< Industries this industry cannot be close to uint8_t check_proc; ///< Index to a procedure to check for conflicting circumstances - CargoID produced_cargo[INDUSTRY_NUM_OUTPUTS]; + std::array produced_cargo; std::variant produced_cargo_label[INDUSTRY_NUM_OUTPUTS]; uint8_t production_rate[INDUSTRY_NUM_OUTPUTS]; /** @@ -117,7 +117,7 @@ struct IndustrySpec { * If the waiting cargo is less than this number, no cargo is moved to it. */ uint8_t minimal_cargo; - CargoID accepts_cargo[INDUSTRY_NUM_INPUTS]; ///< 16 accepted cargoes. + std::array accepts_cargo; ///< 16 accepted cargoes. std::variant accepts_cargo_label[INDUSTRY_NUM_INPUTS]; uint16_t input_cargo_multiplier[INDUSTRY_NUM_INPUTS][INDUSTRY_NUM_OUTPUTS]; ///< Input cargo multipliers (multiply amount of incoming cargo for the produced cargoes) IndustryLifeType life_type; ///< This is also known as Industry production flag, in newgrf specs diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 77c46b61b0..de39a4e601 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -3787,12 +3787,12 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, case 0x25: { // variable length produced cargoes uint8_t num_cargoes = buf->ReadByte(); - if (num_cargoes > lengthof(indsp->produced_cargo)) { + if (num_cargoes > std::size(indsp->produced_cargo)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); error->param_value[1] = prop; return CIR_DISABLED; } - for (uint i = 0; i < lengthof(indsp->produced_cargo); i++) { + for (size_t i = 0; i < std::size(indsp->produced_cargo); i++) { if (i < num_cargoes) { CargoID cargo = GetCargoTranslation(buf->ReadByte(), _cur.grffile); indsp->produced_cargo[i] = cargo; @@ -3806,12 +3806,12 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, case 0x26: { // variable length accepted cargoes uint8_t num_cargoes = buf->ReadByte(); - if (num_cargoes > lengthof(indsp->accepts_cargo)) { + if (num_cargoes > std::size(indsp->accepts_cargo)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); error->param_value[1] = prop; return CIR_DISABLED; } - for (uint i = 0; i < lengthof(indsp->accepts_cargo); i++) { + for (size_t i = 0; i < std::size(indsp->accepts_cargo); i++) { if (i < num_cargoes) { CargoID cargo = GetCargoTranslation(buf->ReadByte(), _cur.grffile); indsp->accepts_cargo[i] = cargo; @@ -3843,13 +3843,13 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, case 0x28: { // variable size input/output production multiplier table uint8_t num_inputs = buf->ReadByte(); uint8_t num_outputs = buf->ReadByte(); - if (num_inputs > lengthof(indsp->accepts_cargo) || num_outputs > lengthof(indsp->produced_cargo)) { + if (num_inputs > std::size(indsp->accepts_cargo) || num_outputs > std::size(indsp->produced_cargo)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); error->param_value[1] = prop; return CIR_DISABLED; } - for (uint i = 0; i < lengthof(indsp->accepts_cargo); i++) { - for (uint j = 0; j < lengthof(indsp->produced_cargo); j++) { + for (size_t i = 0; i < std::size(indsp->accepts_cargo); i++) { + for (size_t j = 0; j < std::size(indsp->produced_cargo); j++) { uint16_t mult = 0; if (i < num_inputs && j < num_outputs) mult = buf->ReadWord(); indsp->input_cargo_multiplier[i][j] = mult; @@ -9516,10 +9516,10 @@ static void FinaliseIndustriesArray() } /* Apply default cargo translation map for unset cargo slots */ - for (uint i = 0; i < lengthof(indsp.produced_cargo); ++i) { + for (size_t i = 0; i < std::size(indsp.produced_cargo); ++i) { if (!IsValidCargoID(indsp.produced_cargo[i])) indsp.produced_cargo[i] = GetCargoIDByLabel(GetActiveCargoLabel(indsp.produced_cargo_label[i])); } - for (uint i = 0; i < lengthof(indsp.accepts_cargo); ++i) { + for (size_t i = 0; i < std::size(indsp.accepts_cargo); ++i) { if (!IsValidCargoID(indsp.accepts_cargo[i])) indsp.accepts_cargo[i] = GetCargoIDByLabel(GetActiveCargoLabel(indsp.accepts_cargo_label[i])); } } From 211488848558ca9d4a7297cb6a11a2c34dc54e9e Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 20 Apr 2024 10:30:29 +0100 Subject: [PATCH 370/695] Change: De-template BaseSetTextfileWindow. (#12536) The BaseSet type is not needed after the window is constructed, only the filename and name are required, which can be passed as parameters from `ShowBaseSetTextfileWindow()` instead. This avoids compiling three instances of `BaseSetTextfileWindow`. --- src/settings_gui.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 2c234b6290..793b938e06 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -92,24 +92,21 @@ static uint GetCurrentResolutionIndex() static void ShowCustCurrency(); /** Window for displaying the textfile of a BaseSet. */ -template struct BaseSetTextfileWindow : public TextfileWindow { - const TBaseSet *baseset; ///< View the textfile of this BaseSet. - StringID content_type; ///< STR_CONTENT_TYPE_xxx for title. + const std::string name; ///< Name of the content. + const StringID content_type; ///< STR_CONTENT_TYPE_xxx for title. - BaseSetTextfileWindow(TextfileType file_type, const TBaseSet *baseset, StringID content_type) : TextfileWindow(file_type), baseset(baseset), content_type(content_type) + BaseSetTextfileWindow(TextfileType file_type, const std::string &name, const std::string &textfile, StringID content_type) : TextfileWindow(file_type), name(name), content_type(content_type) { this->ConstructWindow(); - - auto textfile = this->baseset->GetTextfile(file_type); - this->LoadTextfile(textfile.value(), BASESET_DIR); + this->LoadTextfile(textfile, BASESET_DIR); } void SetStringParameters(WidgetID widget) const override { if (widget == WID_TF_CAPTION) { SetDParam(0, content_type); - SetDParamStr(1, this->baseset->name); + SetDParamStr(1, this->name); } } }; @@ -124,7 +121,7 @@ template void ShowBaseSetTextfileWindow(TextfileType file_type, const TBaseSet *baseset, StringID content_type) { CloseWindowById(WC_TEXTFILE, file_type); - new BaseSetTextfileWindow(file_type, baseset, content_type); + new BaseSetTextfileWindow(file_type, baseset->name, *baseset->GetTextfile(file_type), content_type); } template From 8986fb0385a113ee2ca1c0a18a24a5dfc19678de Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 7 Apr 2024 22:38:36 +0200 Subject: [PATCH 371/695] Codechange: replace C-style array-pointer methods with the appropriate C++ methods --- src/newgrf_airport.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/newgrf_airport.h b/src/newgrf_airport.h index 45b2244bd7..9fb5348c0a 100644 --- a/src/newgrf_airport.h +++ b/src/newgrf_airport.h @@ -130,8 +130,8 @@ struct AirportSpec { /** Get the index of this spec. */ uint8_t GetIndex() const { - assert(this >= specs && this < endof(specs)); - return (uint8_t)(this - specs); + assert(this >= std::begin(specs) && this < std::end(specs)); + return static_cast(std::distance(std::cbegin(specs), this)); } static const AirportSpec dummy; ///< The dummy airport. From 8fe5fdf1224a82a951afc15e0c9c3e172f7eafe1 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 7 Apr 2024 22:57:38 +0200 Subject: [PATCH 372/695] Codechange: use std::none_of to express clearer what the code does --- src/landscape.cpp | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/landscape.cpp b/src/landscape.cpp index 6e3eaa4daf..932b4167f1 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -933,19 +933,17 @@ static void GenerateTerrain(int type, uint flag) static void CreateDesertOrRainForest(uint desert_tropic_line) { uint update_freq = Map::Size() / 4; - const TileIndexDiffC *data; for (TileIndex tile = 0; tile != Map::Size(); ++tile) { if ((tile.base() % update_freq) == 0) IncreaseGeneratingWorldProgress(GWP_LANDSCAPE); if (!IsValidTile(tile)) continue; - for (data = _make_desert_or_rainforest_data; - data != endof(_make_desert_or_rainforest_data); ++data) { - TileIndex t = AddTileIndexDiffCWrap(tile, *data); - if (t != INVALID_TILE && (TileHeight(t) >= desert_tropic_line || IsTileType(t, MP_WATER))) break; - } - if (data == endof(_make_desert_or_rainforest_data)) { + auto allows_desert = [tile, desert_tropic_line](auto &offset) { + TileIndex t = AddTileIndexDiffCWrap(tile, offset); + return t == INVALID_TILE || (TileHeight(t) < desert_tropic_line && !IsTileType(t, MP_WATER)); + }; + if (std::all_of(std::begin(_make_desert_or_rainforest_data), std::end(_make_desert_or_rainforest_data), allows_desert)) { SetTropicZone(tile, TROPICZONE_DESERT); } } @@ -961,12 +959,11 @@ static void CreateDesertOrRainForest(uint desert_tropic_line) if (!IsValidTile(tile)) continue; - for (data = _make_desert_or_rainforest_data; - data != endof(_make_desert_or_rainforest_data); ++data) { - TileIndex t = AddTileIndexDiffCWrap(tile, *data); - if (t != INVALID_TILE && IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_DESERT)) break; - } - if (data == endof(_make_desert_or_rainforest_data)) { + auto allows_rainforest = [tile](auto &offset) { + TileIndex t = AddTileIndexDiffCWrap(tile, offset); + return t == INVALID_TILE || !IsTileType(t, MP_CLEAR) || !IsClearGround(t, CLEAR_DESERT); + }; + if (std::all_of(std::begin(_make_desert_or_rainforest_data), std::end(_make_desert_or_rainforest_data), allows_rainforest)) { SetTropicZone(tile, TROPICZONE_RAINFOREST); } } From 434c49a1f8f82470eea73265cd66569c951be9f8 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Mon, 8 Apr 2024 19:24:03 +0200 Subject: [PATCH 373/695] Codechange: remove now unused endof macro --- src/stdafx.h | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/stdafx.h b/src/stdafx.h index 41134921b6..96b740fa4a 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -285,14 +285,6 @@ char (&ArraySizeHelper(T (&array)[N]))[N]; */ #define lengthof(array) (sizeof(ArraySizeHelper(array))) -/** - * Get the end element of an fixed size array. - * - * @param x The pointer to the first element of the array - * @return The pointer past to the last element of the array - */ -#define endof(x) (&x[lengthof(x)]) - /** * Get the last element of an fixed size array. * From 1691b41b54cacab07dd32055ca272ff46470e5a4 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 6 Apr 2024 17:44:11 +0200 Subject: [PATCH 374/695] Codechange: use C++ containers for parsing the settings int lists --- src/settings.cpp | 82 ++++++++++------------------ src/table/settings/misc_settings.ini | 2 +- 2 files changed, 30 insertions(+), 54 deletions(-) diff --git a/src/settings.cpp b/src/settings.cpp index df6bcfba51..ed2f239d8f 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -239,24 +239,20 @@ static size_t LookupManyOfMany(const std::vector &many, const char } /** - * Parse an integerlist string and set each found value - * @param p the string to be parsed. Each element in the list is separated by a - * comma or a space character - * @param items pointer to the integerlist-array that will be filled with values - * @param maxitems the maximum number of elements the integerlist-array has - * @return returns the number of items found, or -1 on an error + * Parse a string into a vector of uint32s. + * @param p the string to be parsed. Each element in the list is separated by a comma or a space character + * @return std::optional with a vector of parsed integers. The optional is empty upon an error. */ -template -static int ParseIntList(const char *p, T *items, size_t maxitems) +static std::optional> ParseIntList(const char *p) { - size_t n = 0; // number of items read so far bool comma = false; // do we accept comma? + std::vector result; while (*p != '\0') { switch (*p) { case ',': /* Do not accept multiple commas between numbers */ - if (!comma) return -1; + if (!comma) return std::nullopt; comma = false; [[fallthrough]]; @@ -265,12 +261,11 @@ static int ParseIntList(const char *p, T *items, size_t maxitems) break; default: { - if (n == maxitems) return -1; // we don't accept that many numbers char *end; unsigned long v = std::strtoul(p, &end, 0); - if (p == end) return -1; // invalid character (not a number) - if (sizeof(T) < sizeof(v)) v = Clamp(v, std::numeric_limits::min(), std::numeric_limits::max()); - items[n++] = v; + if (p == end) return std::nullopt; // invalid character (not a number) + + result.push_back(ClampTo(v)); p = end; // first non-number comma = true; // we accept comma now break; @@ -280,52 +275,35 @@ static int ParseIntList(const char *p, T *items, size_t maxitems) /* If we have read comma but no number after it, fail. * We have read comma when (n != 0) and comma is not allowed */ - if (n != 0 && !comma) return -1; + if (!result.empty() && !comma) return std::nullopt; - return ClampTo(n); + return result; } /** * Load parsed string-values into an integer-array (intlist) * @param str the string that contains the values (and will be parsed) * @param array pointer to the integer-arrays that will be filled - * @param nelems the number of elements the array holds. Maximum is 64 elements + * @param nelems the number of elements the array holds. * @param type the type of elements the array holds (eg INT8, UINT16, etc.) * @return return true on success and false on error */ static bool LoadIntList(const char *str, void *array, int nelems, VarType type) { - unsigned long items[64]; - int i, nitems; - + size_t elem_size = SlVarSize(type); if (str == nullptr) { - memset(items, 0, sizeof(items)); - nitems = nelems; - } else { - nitems = ParseIntList(str, items, lengthof(items)); - if (nitems != nelems) return false; + memset(array, 0, nelems * elem_size); + return true; } - switch (type) { - case SLE_VAR_BL: - case SLE_VAR_I8: - case SLE_VAR_U8: - for (i = 0; i != nitems; i++) ((uint8_t*)array)[i] = items[i]; - break; + auto opt_items = ParseIntList(str); + if (!opt_items.has_value() || opt_items->size() != (size_t)nelems) return false; - case SLE_VAR_I16: - case SLE_VAR_U16: - for (i = 0; i != nitems; i++) ((uint16_t*)array)[i] = items[i]; - break; - - case SLE_VAR_I32: - case SLE_VAR_U32: - for (i = 0; i != nitems; i++) ((uint32_t*)array)[i] = items[i]; - break; - - default: NOT_REACHED(); + char *p = static_cast(array); + for (auto item : *opt_items) { + WriteValue(p, type, item); + p += elem_size; } - return true; } @@ -1030,15 +1008,13 @@ static void GraphicsSetLoadConfig(IniFile &ini) if (const IniItem *item = group->GetItem("extra_version"); item != nullptr && item->value) BaseGraphics::ini_data.extra_version = std::strtoul(item->value->c_str(), nullptr, 10); if (const IniItem *item = group->GetItem("extra_params"); item != nullptr && item->value) { - auto &extra_params = BaseGraphics::ini_data.extra_params; - extra_params.resize(0x80); // TODO: make ParseIntList work nicely with C++ containers - int count = ParseIntList(item->value->c_str(), &extra_params.front(), extra_params.size()); - if (count < 0) { + auto params = ParseIntList(item->value->c_str()); + if (params.has_value()) { + BaseGraphics::ini_data.extra_params = params.value(); + } else { SetDParamStr(0, BaseGraphics::ini_data.name); ShowErrorMessage(STR_CONFIG_ERROR, STR_CONFIG_ERROR_ARRAY, WL_CRITICAL); - count = 0; } - extra_params.resize(count); } } } @@ -1099,13 +1075,13 @@ static GRFConfig *GRFLoadConfig(const IniFile &ini, const char *grpname, bool is /* Parse parameters */ if (item.value.has_value() && !item.value->empty()) { - int count = ParseIntList(item.value->c_str(), c->param.data(), c->param.size()); - if (count < 0) { + auto params = ParseIntList(item.value->c_str()); + if (params.has_value()) { + c->SetParams(params.value()); + } else { SetDParamStr(0, filename); ShowErrorMessage(STR_CONFIG_ERROR, STR_CONFIG_ERROR_ARRAY, WL_CRITICAL); - count = 0; } - c->num_params = count; } /* Check if item is valid */ diff --git a/src/table/settings/misc_settings.ini b/src/table/settings/misc_settings.ini index e572d41773..49141ed014 100644 --- a/src/table/settings/misc_settings.ini +++ b/src/table/settings/misc_settings.ini @@ -148,7 +148,7 @@ cat = SC_BASIC ; workaround for implicit lengthof() in SDTG_LIST [SDTG_LIST] name = ""resolution"" -type = SLE_INT +type = SLE_UINT length = 2 var = _cur_resolution def = ""0,0"" From fc7f184dbd9693249c4ae97ede0777c4791fd092 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Tue, 26 Mar 2024 16:07:03 +0100 Subject: [PATCH 375/695] Codechange: move knowledge about 'packed' orders to the saveload code --- src/order_base.h | 21 ++++++++++----------- src/order_cmd.cpp | 16 ---------------- src/order_gui.cpp | 6 ++---- src/saveload/order_sl.cpp | 4 ++-- 4 files changed, 14 insertions(+), 33 deletions(-) diff --git a/src/order_base.h b/src/order_base.h index 73cd3c27fc..4bdea6140c 100644 --- a/src/order_base.h +++ b/src/order_base.h @@ -45,24 +45,23 @@ private: friend EndianBufferWriter &operator <<(EndianBufferWriter &buffer, const Order &data); friend class EndianBufferReader &operator >>(class EndianBufferReader &buffer, Order &order); - uint8_t type; ///< The type of order + non-stop flags - uint8_t flags; ///< Load/unload types, depot order/action types. - DestinationID dest; ///< The destination of the order. + uint8_t type = 0; ///< The type of order + non-stop flags + uint8_t flags = 0; ///< Load/unload types, depot order/action types. + DestinationID dest = 0; ///< The destination of the order. - CargoID refit_cargo; ///< Refit CargoID + CargoID refit_cargo = CARGO_NO_REFIT; ///< Refit CargoID - uint16_t wait_time; ///< How long in ticks to wait at the destination. - uint16_t travel_time; ///< How long in ticks the journey to this destination should take. - uint16_t max_speed; ///< How fast the vehicle may go on the way to the destination. + uint16_t wait_time = 0; ///< How long in ticks to wait at the destination. + uint16_t travel_time = 0; ///< How long in ticks the journey to this destination should take. + uint16_t max_speed = UINT16_MAX; ///< How fast the vehicle may go on the way to the destination. public: - Order *next; ///< Pointer to next order. If nullptr, end of list + Order *next = nullptr; ///< Pointer to next order. If nullptr, end of list - Order() : flags(0), refit_cargo(CARGO_NO_REFIT), wait_time(0), travel_time(0), max_speed(UINT16_MAX) {} + Order() {} + Order(uint8_t type, uint8_t flags, DestinationID dest) : type(type), flags(flags), dest(dest) {} ~Order(); - Order(uint32_t packed); - /** * Check whether this order is of the given type. * @param type the type to check against. diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index ccedb8e31d..003d879303 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -227,22 +227,6 @@ uint16_t Order::MapOldOrder() const return order; } -/** - * Create an order based on a packed representation of that order. - * @param packed the packed representation. - */ -Order::Order(uint32_t packed) -{ - this->type = (OrderType)GB(packed, 0, 8); - this->flags = GB(packed, 8, 8); - this->dest = GB(packed, 16, 16); - this->next = nullptr; - this->refit_cargo = CARGO_NO_REFIT; - this->wait_time = 0; - this->travel_time = 0; - this->max_speed = UINT16_MAX; -} - /** * * Updates the widgets of a vehicle which contains the order-data diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 64bbaf2abb..397502cd32 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -386,10 +386,8 @@ void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int */ static Order GetOrderCmdFromTile(const Vehicle *v, TileIndex tile) { - /* Hack-ish; unpack order 0, so everything gets initialised with either zero - * or a suitable default value for the variable. Then also override the index - * as it is not coming from a pool, so would be initialised. */ - Order order(0); + /* Override the index as it is not coming from a pool, so would not be initialised correctly. */ + Order order; order.index = 0; /* check depot first */ diff --git a/src/saveload/order_sl.cpp b/src/saveload/order_sl.cpp index cf6849b20d..0ce1bd206e 100644 --- a/src/saveload/order_sl.cpp +++ b/src/saveload/order_sl.cpp @@ -81,7 +81,7 @@ void Order::ConvertFromOldSavegame() */ static Order UnpackVersion4Order(uint16_t packed) { - return Order(GB(packed, 8, 8) << 16 | GB(packed, 4, 4) << 8 | GB(packed, 0, 4)); + return Order(GB(packed, 0, 4), GB(packed, 4, 4), GB(packed, 8, 8)); } /** @@ -158,7 +158,7 @@ struct ORDRChunkHandler : ChunkHandler { SlCopy(&orders[0], len, SLE_UINT32); for (size_t i = 0; i < len; ++i) { - new (i) Order(orders[i]); + new (i) Order(GB(orders[i], 0, 8), GB(orders[i], 8, 8), GB(orders[i], 16, 16)); } } From a1a01e21cf828689c411c64f98fe72af04a9a545 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 20 Apr 2024 11:20:49 +0100 Subject: [PATCH 376/695] Change: Use std::make_unique instead of passing new() (#12539) --- src/gfx_layout_fallback.cpp | 2 +- src/gfx_layout_icu.cpp | 2 +- src/openttd.cpp | 2 +- src/os/macosx/string_osx.cpp | 3 ++- src/os/windows/string_uniscribe.cpp | 2 +- src/spriteloader/grf.cpp | 2 +- 6 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/gfx_layout_fallback.cpp b/src/gfx_layout_fallback.cpp index 745a834c1f..2b8fc617eb 100644 --- a/src/gfx_layout_fallback.cpp +++ b/src/gfx_layout_fallback.cpp @@ -218,7 +218,7 @@ std::unique_ptr FallbackParagraphLayout::NextLine */ if (this->buffer == nullptr) return nullptr; - std::unique_ptr l(new FallbackLine()); + std::unique_ptr l = std::make_unique(); if (*this->buffer == '\0') { /* Only a newline. */ diff --git a/src/gfx_layout_icu.cpp b/src/gfx_layout_icu.cpp index de9dae6c91..1e53d15c8a 100644 --- a/src/gfx_layout_icu.cpp +++ b/src/gfx_layout_icu.cpp @@ -489,7 +489,7 @@ std::unique_ptr ICUParagraphLayout::NextLine(int ubidi_reorderVisual(bidi_level.data(), bidi_level.size(), vis_to_log.data()); /* Create line. */ - std::unique_ptr line(new ICULine()); + std::unique_ptr line = std::make_unique(); int cur_pos = 0; for (auto &i : vis_to_log) { diff --git a/src/openttd.cpp b/src/openttd.cpp index 5b53be6dd6..0d9ef39c0d 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -517,7 +517,7 @@ int openttd_main(std::span arguments) std::string sounds_set; std::string music_set; Dimension resolution = {0, 0}; - std::unique_ptr scanner(new AfterNewGRFScan()); + std::unique_ptr scanner = std::make_unique(); bool dedicated = false; bool only_local_path = false; diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp index 539d478a4e..6a7a45285e 100644 --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -224,7 +224,8 @@ static CTRunDelegateCallbacks _sprite_font_callback = { CFAutoRelease line(CTTypesetterCreateLine(this->typesetter.get(), CFRangeMake(this->cur_offset, len))); this->cur_offset += len; - return std::unique_ptr(line ? new CoreTextLine(std::move(line), this->font_map, this->text_buffer) : nullptr); + if (!line) return nullptr; + return std::make_unique(std::move(line), this->font_map, this->text_buffer); } CoreTextParagraphLayout::CoreTextVisualRun::CoreTextVisualRun(CTRunRef run, Font *font, const CoreTextParagraphLayoutFactory::CharType *buff) : font(font) diff --git a/src/os/windows/string_uniscribe.cpp b/src/os/windows/string_uniscribe.cpp index 5e2b4019d5..3045d694f3 100644 --- a/src/os/windows/string_uniscribe.cpp +++ b/src/os/windows/string_uniscribe.cpp @@ -405,7 +405,7 @@ static std::vector UniscribeItemizeString(UniscribeParagraphLayoutF if (FAILED(ScriptLayout((int)bidi_level.size(), &bidi_level[0], &vis_to_log[0], nullptr))) return nullptr; /* Create line. */ - std::unique_ptr line(new UniscribeLine()); + std::unique_ptr line = std::make_unique(); int cur_pos = 0; for (std::vector::iterator l = vis_to_log.begin(); l != vis_to_log.end(); l++) { diff --git a/src/spriteloader/grf.cpp b/src/spriteloader/grf.cpp index d365282d2a..62580ad6a8 100644 --- a/src/spriteloader/grf.cpp +++ b/src/spriteloader/grf.cpp @@ -68,7 +68,7 @@ bool DecodeSingleSprite(SpriteLoader::Sprite *sprite, SpriteFile &file, size_t f */ if (num < 0 || num > 64 * 1024 * 1024) return WarnCorruptSprite(file, file_pos, __LINE__); - std::unique_ptr dest_orig(new uint8_t[num]); + std::unique_ptr dest_orig = std::make_unique(num); uint8_t *dest = dest_orig.get(); const int64_t dest_size = num; From c377c4740d504bdd7688865698bea9a06dd157cb Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 7 Apr 2024 15:54:24 +0200 Subject: [PATCH 377/695] Codechange: replace cpp_lengthof with safe alternatives --- src/industry_gui.cpp | 4 ++-- src/newgrf_storage.h | 2 +- src/stdafx.h | 8 -------- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index a5e306fd24..4f2762f253 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -2380,8 +2380,8 @@ private: } }; -static_assert(MAX_CARGOES >= cpp_lengthof(IndustrySpec, produced_cargo)); -static_assert(MAX_CARGOES >= cpp_lengthof(IndustrySpec, accepts_cargo)); +static_assert(MAX_CARGOES >= std::tuple_size_v); +static_assert(MAX_CARGOES >= std::tuple_size_v); Dimension CargoesField::legend; ///< Dimension of the legend blob. Dimension CargoesField::cargo_border; ///< Dimensions of border between cargo lines and industry boxes. diff --git a/src/newgrf_storage.h b/src/newgrf_storage.h index cad016d691..3d5ab0ac04 100644 --- a/src/newgrf_storage.h +++ b/src/newgrf_storage.h @@ -206,6 +206,6 @@ struct PersistentStorage : PersistentStorageArray, PersistentStora } }; -static_assert(cpp_lengthof(OldPersistentStorage, storage) <= cpp_lengthof(PersistentStorage, storage)); +static_assert(std::tuple_size_v <= std::tuple_size_v); #endif /* NEWGRF_STORAGE_H */ diff --git a/src/stdafx.h b/src/stdafx.h index 96b740fa4a..3081beafe5 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -301,14 +301,6 @@ char (&ArraySizeHelper(T (&array)[N]))[N]; */ #define cpp_sizeof(base, variable) (sizeof(std::declval().variable)) -/** - * Gets the length of an array variable within a class. - * @param base The class the variable is in. - * @param variable The array variable to get the size of. - * @return the length of the array - */ -#define cpp_lengthof(base, variable) (cpp_sizeof(base, variable) / cpp_sizeof(base, variable[0])) - /* take care of some name clashes on MacOS */ #if defined(__APPLE__) From 1dfd0c19f498c89d5a822ef016ab75d116cb7104 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 20 Apr 2024 16:13:04 +0200 Subject: [PATCH 378/695] Fix: allow only 255 league tables, as 255 is the invalid id sentinel --- src/league_base.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/league_base.h b/src/league_base.h index b43db4ac1f..1799b92cf3 100644 --- a/src/league_base.h +++ b/src/league_base.h @@ -20,7 +20,7 @@ bool IsValidLink(Link link); typedef Pool LeagueTableElementPool; extern LeagueTableElementPool _league_table_element_pool; -typedef Pool LeagueTablePool; +typedef Pool LeagueTablePool; extern LeagueTablePool _league_table_pool; From c5ef47ee09691e4f4447a36953c92b8b489fbb36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Sat, 20 Apr 2024 16:58:46 +0200 Subject: [PATCH 379/695] Codechange: [Script] Use std::unique_ptr for Company::ai_instance (#12544) --- src/ai/ai_core.cpp | 5 ++--- src/company_base.h | 2 +- src/company_cmd.cpp | 1 + 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ai/ai_core.cpp b/src/ai/ai_core.cpp index c62f05f929..951ad0c525 100644 --- a/src/ai/ai_core.cpp +++ b/src/ai/ai_core.cpp @@ -60,7 +60,7 @@ c->ai_info = info; assert(c->ai_instance == nullptr); - c->ai_instance = new AIInstance(); + c->ai_instance = std::make_unique(); c->ai_instance->Initialize(info); c->ai_instance->LoadOnStack(config->GetToLoadData()); config->SetToLoadData(nullptr); @@ -112,8 +112,7 @@ Backup cur_company(_current_company, company); Company *c = Company::Get(company); - delete c->ai_instance; - c->ai_instance = nullptr; + c->ai_instance.reset(); c->ai_info = nullptr; c->ai_config.reset(); diff --git a/src/company_base.h b/src/company_base.h index c177243686..9d4a3dc87b 100644 --- a/src/company_base.h +++ b/src/company_base.h @@ -134,7 +134,7 @@ struct Company : CompanyProperties, CompanyPool::PoolItem<&_company_pool> { RailTypes avail_railtypes; ///< Rail types available to this company. RoadTypes avail_roadtypes; ///< Road types available to this company. - class AIInstance *ai_instance; + std::unique_ptr ai_instance; class AIInfo *ai_info; std::unique_ptr ai_config; diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index a92ced1154..f88ad63538 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -20,6 +20,7 @@ #include "network/network_base.h" #include "network/network_admin.h" #include "ai/ai.hpp" +#include "ai/ai_instance.hpp" #include "ai/ai_config.hpp" #include "company_manager_face.h" #include "window_func.h" From b4e00fa7386eb0c7d882e2b3b5667305cd972e5a Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 20 Apr 2024 16:50:13 +0100 Subject: [PATCH 380/695] Codechange: Replace C-casts in pool functions. (#12541) --- src/core/pool_func.hpp | 10 +++++----- src/core/pool_type.hpp | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/core/pool_func.hpp b/src/core/pool_func.hpp index bea4f45b2c..0012b682d8 100644 --- a/src/core/pool_func.hpp +++ b/src/core/pool_func.hpp @@ -115,17 +115,17 @@ DEFINE_POOL_METHOD(inline void *)::AllocateItem(size_t size, size_t index) Titem *item; if (Tcache && this->alloc_cache != nullptr) { assert(sizeof(Titem) == size); - item = (Titem *)this->alloc_cache; + item = reinterpret_cast(this->alloc_cache); this->alloc_cache = this->alloc_cache->next; if (Tzero) { /* Explicitly casting to (void *) prevents a clang warning - * we are actually memsetting a (not-yet-constructed) object */ - memset((void *)item, 0, sizeof(Titem)); + memset(static_cast(item), 0, sizeof(Titem)); } } else if (Tzero) { - item = (Titem *)CallocT(size); + item = reinterpret_cast(CallocT(size)); } else { - item = (Titem *)MallocT(size); + item = reinterpret_cast(MallocT(size)); } this->data[index] = item; SetBit(this->used_bitmap[index / BITMAP_SIZE], index % BITMAP_SIZE); @@ -188,7 +188,7 @@ DEFINE_POOL_METHOD(void)::FreeItem(size_t index) assert(index < this->size); assert(this->data[index] != nullptr); if (Tcache) { - AllocCache *ac = (AllocCache *)this->data[index]; + AllocCache *ac = reinterpret_cast(this->data[index]); ac->next = this->alloc_cache; this->alloc_cache = ac; } else { diff --git a/src/core/pool_type.hpp b/src/core/pool_type.hpp index bb4cc4f96f..fb0e822ac3 100644 --- a/src/core/pool_type.hpp +++ b/src/core/pool_type.hpp @@ -78,8 +78,8 @@ private: */ template struct Pool : PoolBase { - /* Ensure Tmax_size is within the bounds of Tindex. */ - static_assert((uint64_t)(Tmax_size - 1) >> 8 * sizeof(Tindex) == 0); + /* Ensure the highest possible index, i.e. Tmax_size -1, is within the bounds of Tindex. */ + static_assert(Tmax_size - 1 <= MAX_UVALUE(Tindex)); static constexpr size_t MAX_SIZE = Tmax_size; ///< Make template parameter accessible from outside @@ -259,7 +259,7 @@ struct Pool : PoolBase { inline void operator delete(void *p) { if (p == nullptr) return; - Titem *pn = (Titem *)p; + Titem *pn = static_cast(p); assert(pn == Tpool->Get(pn->index)); Tpool->FreeItem(pn->index); } From 959ced71bb59fd68272adfbdcc51533c2c9d9429 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 20 Apr 2024 20:50:48 +0100 Subject: [PATCH 381/695] Codechange: Add constants for original input/output cargo counts. (#12548) This replaces some magic 3s and 2s. --- src/house.h | 1 + src/industry_cmd.cpp | 4 ++-- src/industry_gui.cpp | 6 ++++-- src/industry_type.h | 2 ++ src/newgrf.cpp | 28 +++++++++++++------------- src/saveload/industry_sl.cpp | 38 +++++++++++++++++------------------ src/saveload/oldloader_sl.cpp | 4 ++-- 7 files changed, 44 insertions(+), 39 deletions(-) diff --git a/src/house.h b/src/house.h index 65ce03786b..f80aeb3746 100644 --- a/src/house.h +++ b/src/house.h @@ -30,6 +30,7 @@ static const HouseID NUM_HOUSES = 512; ///< Total number of houses. static const HouseID INVALID_HOUSE_ID = 0xFFFF; static const uint HOUSE_NUM_ACCEPTS = 16; ///< Max number of cargoes accepted by a tile +static const uint HOUSE_ORIGINAL_NUM_ACCEPTS = 3; ///< Original number of accepted cargo types. enum BuildingFlags { TILE_NO_FLAG = 0, diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index c2d38d829c..3f97162dad 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -438,7 +438,7 @@ static void AddAcceptedCargo_Industry(TileIndex tile, CargoArray &acceptance, Ca uint16_t res = GetIndustryTileCallback(CBID_INDTILE_ACCEPT_CARGO, 0, 0, gfx, Industry::GetByTile(tile), tile); if (res != CALLBACK_FAILED) { accepts_cargo.fill(INVALID_CARGO); - for (uint i = 0; i < 3; i++) accepts_cargo[i] = GetCargoTranslation(GB(res, i * 5, 5), itspec->grf_prop.grffile); + for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_INPUTS; i++) accepts_cargo[i] = GetCargoTranslation(GB(res, i * 5, 5), itspec->grf_prop.grffile); } } @@ -447,7 +447,7 @@ static void AddAcceptedCargo_Industry(TileIndex tile, CargoArray &acceptance, Ca uint16_t res = GetIndustryTileCallback(CBID_INDTILE_CARGO_ACCEPTANCE, 0, 0, gfx, Industry::GetByTile(tile), tile); if (res != CALLBACK_FAILED) { cargo_acceptance.fill(0); - for (uint i = 0; i < 3; i++) cargo_acceptance[i] = GB(res, i * 4, 4); + for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_INPUTS; i++) cargo_acceptance[i] = GB(res, i * 4, 4); } } diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 4f2762f253..ade687df5f 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -177,10 +177,12 @@ static inline void GetAllCargoSuffixes(CargoSuffixInOut use_input, CargoSuffixTy } switch (use_input) { case CARGOSUFFIX_OUT: + // Handle INDUSTRY_ORIGINAL_NUM_OUTPUTS cargoes if (IsValidCargoID(cargoes[0])) GetCargoSuffix(3, cst, ind, ind_type, indspec, suffixes[0]); if (IsValidCargoID(cargoes[1])) GetCargoSuffix(4, cst, ind, ind_type, indspec, suffixes[1]); break; case CARGOSUFFIX_IN: + // Handle INDUSTRY_ORIGINAL_NUM_INPUTS cargoes if (IsValidCargoID(cargoes[0])) GetCargoSuffix(0, cst, ind, ind_type, indspec, suffixes[0]); if (IsValidCargoID(cargoes[1])) GetCargoSuffix(1, cst, ind, ind_type, indspec, suffixes[1]); if (IsValidCargoID(cargoes[2])) GetCargoSuffix(2, cst, ind, ind_type, indspec, suffixes[2]); @@ -212,9 +214,9 @@ void GetCargoSuffix(CargoSuffixInOut use_input, CargoSuffixType cst, const Indus uint cargotype = local_id << 16 | use_input; GetCargoSuffix(cargotype, cst, ind, ind_type, indspec, suffix); } else if (use_input == CARGOSUFFIX_IN) { - if (slot < 3) GetCargoSuffix(slot, cst, ind, ind_type, indspec, suffix); + if (slot < INDUSTRY_ORIGINAL_NUM_INPUTS) GetCargoSuffix(slot, cst, ind, ind_type, indspec, suffix); } else if (use_input == CARGOSUFFIX_OUT) { - if (slot < 2) GetCargoSuffix(slot + 3, cst, ind, ind_type, indspec, suffix); + if (slot < INDUSTRY_ORIGINAL_NUM_OUTPUTS) GetCargoSuffix(slot + INDUSTRY_ORIGINAL_NUM_INPUTS, cst, ind, ind_type, indspec, suffix); } } diff --git a/src/industry_type.h b/src/industry_type.h index 185e1f3a79..1ae903ad20 100644 --- a/src/industry_type.h +++ b/src/industry_type.h @@ -37,6 +37,8 @@ static const int INDUSTRY_COMPLETED = 3; ///< final stage of industry constructi static const int INDUSTRY_NUM_INPUTS = 16; ///< Number of cargo types an industry can accept static const int INDUSTRY_NUM_OUTPUTS = 16; ///< Number of cargo types an industry can produce +static const int INDUSTRY_ORIGINAL_NUM_INPUTS = 3; ///< Original number of accepted cargo types. +static const int INDUSTRY_ORIGINAL_NUM_OUTPUTS = 2; ///< Original number of produced cargo types. void CheckIndustries(); diff --git a/src/newgrf.cpp b/src/newgrf.cpp index de39a4e601..45208a3c9c 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -2559,7 +2559,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt /* Check if the cargo types should not be changed */ if (cargotypes == 0xFFFFFFFF) break; - for (uint j = 0; j < 3; j++) { + for (uint j = 0; j < HOUSE_ORIGINAL_NUM_ACCEPTS; j++) { /* Get the cargo number from the 'list' */ uint8_t cargo_part = GB(cargotypes, 8 * j, 8); CargoID cargo = GetCargoTranslation(cargo_part, _cur.grffile); @@ -3392,14 +3392,14 @@ static ChangeInfoResult IgnoreIndustryProperty(int prop, ByteReader *buf) case 0x0C: case 0x0D: case 0x0E: - case 0x10: + case 0x10: // INDUSTRY_ORIGINAL_NUM_OUTPUTS bytes case 0x1B: case 0x1F: case 0x24: buf->ReadWord(); break; - case 0x11: + case 0x11: // INDUSTRY_ORIGINAL_NUM_INPUTS bytes + 1 case 0x1A: case 0x1C: case 0x1D: @@ -3431,7 +3431,7 @@ static ChangeInfoResult IgnoreIndustryProperty(int prop, ByteReader *buf) } case 0x16: - for (uint8_t j = 0; j < 3; j++) buf->ReadByte(); + for (uint8_t j = 0; j < INDUSTRY_ORIGINAL_NUM_INPUTS; j++) buf->ReadByte(); break; case 0x15: @@ -3679,14 +3679,14 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, break; case 0x10: // Production cargo types - for (uint8_t j = 0; j < 2; j++) { + for (uint8_t j = 0; j < INDUSTRY_ORIGINAL_NUM_OUTPUTS; j++) { indsp->produced_cargo[j] = GetCargoTranslation(buf->ReadByte(), _cur.grffile); indsp->produced_cargo_label[j] = CT_INVALID; } break; case 0x11: // Acceptance cargo types - for (uint8_t j = 0; j < 3; j++) { + for (uint8_t j = 0; j < INDUSTRY_ORIGINAL_NUM_INPUTS; j++) { indsp->accepts_cargo[j] = GetCargoTranslation(buf->ReadByte(), _cur.grffile); indsp->accepts_cargo_label[j] = CT_INVALID; } @@ -5472,22 +5472,22 @@ static void NewSpriteGroup(ByteReader *buf) act_group = group; group->version = type; if (type == 0) { - group->num_input = 3; - for (uint i = 0; i < 3; i++) { + group->num_input = INDUSTRY_ORIGINAL_NUM_INPUTS; + for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_INPUTS; i++) { group->subtract_input[i] = (int16_t)buf->ReadWord(); // signed } - group->num_output = 2; - for (uint i = 0; i < 2; i++) { + group->num_output = INDUSTRY_ORIGINAL_NUM_OUTPUTS; + for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_OUTPUTS; i++) { group->add_output[i] = buf->ReadWord(); // unsigned } group->again = buf->ReadByte(); } else if (type == 1) { - group->num_input = 3; - for (uint i = 0; i < 3; i++) { + group->num_input = INDUSTRY_ORIGINAL_NUM_INPUTS; + for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_INPUTS; i++) { group->subtract_input[i] = buf->ReadByte(); } - group->num_output = 2; - for (uint i = 0; i < 2; i++) { + group->num_output = INDUSTRY_ORIGINAL_NUM_OUTPUTS; + for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_OUTPUTS; i++) { group->add_output[i] = buf->ReadByte(); } group->again = buf->ReadByte(); diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index ad3f0dc7eb..6edea24e05 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -153,25 +153,25 @@ static const SaveLoad _industry_desc[] = { SLE_VAR(Industry, location.h, SLE_FILE_U8 | SLE_VAR_U16), SLE_REF(Industry, town, REF_TOWN), SLE_CONDREF(Industry, neutral_station, REF_STATION, SLV_SERVE_NEUTRAL_INDUSTRIES, SL_MAX_VERSION), - SLEG_CONDARR("produced_cargo", SlIndustryProduced::old_cargo, SLE_UINT8, 2, SLV_78, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLEG_CONDARR("produced_cargo", SlIndustryProduced::old_cargo, SLE_UINT8, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), - SLEG_CONDARR("incoming_cargo_waiting", SlIndustryAccepted::old_waiting, SLE_UINT16, 3, SLV_70, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLEG_CONDARR("incoming_cargo_waiting", SlIndustryAccepted::old_waiting, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), - SLEG_CONDARR("produced_cargo_waiting", SlIndustryProduced::old_waiting, SLE_UINT16, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLEG_CONDARR("produced_cargo_waiting", SlIndustryProduced::old_waiting, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), - SLEG_CONDARR("production_rate", SlIndustryProduced::old_rate, SLE_UINT8, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLEG_CONDARR("production_rate", SlIndustryProduced::old_rate, SLE_UINT8, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), - SLEG_CONDARR("accepts_cargo", SlIndustryAccepted::old_cargo, SLE_UINT8, 3, SLV_78, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLEG_CONDARR("accepts_cargo", SlIndustryAccepted::old_cargo, SLE_UINT8, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLEG_CONDARR("produced_cargo", SlIndustryProduced::old_cargo, SLE_UINT8, INDUSTRY_ORIGINAL_NUM_OUTPUTS, SLV_78, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLEG_CONDARR("produced_cargo", SlIndustryProduced::old_cargo, SLE_UINT8, INDUSTRY_NUM_OUTPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLEG_CONDARR("incoming_cargo_waiting", SlIndustryAccepted::old_waiting, SLE_UINT16, INDUSTRY_ORIGINAL_NUM_INPUTS, SLV_70, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLEG_CONDARR("incoming_cargo_waiting", SlIndustryAccepted::old_waiting, SLE_UINT16, INDUSTRY_NUM_INPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLEG_CONDARR("produced_cargo_waiting", SlIndustryProduced::old_waiting, SLE_UINT16, INDUSTRY_ORIGINAL_NUM_OUTPUTS, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLEG_CONDARR("produced_cargo_waiting", SlIndustryProduced::old_waiting, SLE_UINT16, INDUSTRY_NUM_OUTPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLEG_CONDARR("production_rate", SlIndustryProduced::old_rate, SLE_UINT8, INDUSTRY_ORIGINAL_NUM_OUTPUTS, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLEG_CONDARR("production_rate", SlIndustryProduced::old_rate, SLE_UINT8, INDUSTRY_NUM_OUTPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLEG_CONDARR("accepts_cargo", SlIndustryAccepted::old_cargo, SLE_UINT8, INDUSTRY_ORIGINAL_NUM_INPUTS, SLV_78, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLEG_CONDARR("accepts_cargo", SlIndustryAccepted::old_cargo, SLE_UINT8, INDUSTRY_NUM_INPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), SLE_VAR(Industry, prod_level, SLE_UINT8), - SLEG_CONDARR("this_month_production", SlIndustryProduced::old_this_month_production, SLE_UINT16, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLEG_CONDARR("this_month_production", SlIndustryProduced::old_this_month_production, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), - SLEG_CONDARR("this_month_transported", SlIndustryProduced::old_this_month_transported, SLE_UINT16, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLEG_CONDARR("this_month_transported", SlIndustryProduced::old_this_month_transported, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), - SLEG_CONDARR("last_month_production", SlIndustryProduced::old_last_month_production, SLE_UINT16, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLEG_CONDARR("last_month_production", SlIndustryProduced::old_last_month_production, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), - SLEG_CONDARR("last_month_transported", SlIndustryProduced::old_last_month_transported, SLE_UINT16, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLEG_CONDARR("last_month_transported", SlIndustryProduced::old_last_month_transported, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLEG_CONDARR("this_month_production", SlIndustryProduced::old_this_month_production, SLE_UINT16, INDUSTRY_ORIGINAL_NUM_OUTPUTS, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLEG_CONDARR("this_month_production", SlIndustryProduced::old_this_month_production, SLE_UINT16, INDUSTRY_NUM_OUTPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLEG_CONDARR("this_month_transported", SlIndustryProduced::old_this_month_transported, SLE_UINT16, INDUSTRY_ORIGINAL_NUM_OUTPUTS, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLEG_CONDARR("this_month_transported", SlIndustryProduced::old_this_month_transported, SLE_UINT16, INDUSTRY_NUM_OUTPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLEG_CONDARR("last_month_production", SlIndustryProduced::old_last_month_production, SLE_UINT16, INDUSTRY_ORIGINAL_NUM_OUTPUTS, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLEG_CONDARR("last_month_production", SlIndustryProduced::old_last_month_production, SLE_UINT16, INDUSTRY_NUM_OUTPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLEG_CONDARR("last_month_transported", SlIndustryProduced::old_last_month_transported, SLE_UINT16, INDUSTRY_ORIGINAL_NUM_OUTPUTS, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLEG_CONDARR("last_month_transported", SlIndustryProduced::old_last_month_transported, SLE_UINT16, INDUSTRY_NUM_OUTPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), SLE_VAR(Industry, counter, SLE_UINT16), @@ -261,7 +261,7 @@ struct INDYChunkHandler : ChunkHandler { std::copy(std::begin(_old_ind_persistent_storage.storage), std::end(_old_ind_persistent_storage.storage), std::begin(i->psa->storage)); } if (IsSavegameVersionBefore(SLV_EXTEND_INDUSTRY_CARGO_SLOTS)) { - LoadMoveAcceptsProduced(i, 3, 2); + LoadMoveAcceptsProduced(i, INDUSTRY_ORIGINAL_NUM_INPUTS, INDUSTRY_ORIGINAL_NUM_OUTPUTS); } else if (IsSavegameVersionBefore(SLV_INDUSTRY_CARGO_REORGANISE)) { LoadMoveAcceptsProduced(i, INDUSTRY_NUM_INPUTS, INDUSTRY_NUM_OUTPUTS); } diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index e5127b9ad3..7beb30a490 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -805,8 +805,8 @@ static bool LoadOldStation(LoadgameState *ls, int num) } /* Old save games always have 3 input and 2 output slots per industry. */ -static std::array _old_accepted{}; -static std::array _old_produced{}; +static std::array _old_accepted{}; +static std::array _old_produced{}; static const OldChunks industry_chunk[] = { OCL_SVAR( OC_TILE, Industry, location.tile ), From aa895535e67a9e48f5461b0874489a63253e4a0d Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 20 Apr 2024 20:52:44 +0200 Subject: [PATCH 382/695] Fix 5008706: improved scenario editor tooltips in map generation stages are out of place --- src/genworld_gui.cpp | 6 +++--- src/lang/english.txt | 7 +++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index 9f8d8d8f4d..5cd4112061 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -1359,11 +1359,11 @@ static GenWorldStatus _gws; static const StringID _generation_class_table[] = { STR_GENERATION_WORLD_GENERATION, - STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION, + STR_GENERATION_LANDSCAPE_GENERATION, STR_GENERATION_RIVER_GENERATION, STR_GENERATION_CLEARING_TILES, - STR_SCENEDIT_TOOLBAR_TOWN_GENERATION, - STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION, + STR_GENERATION_TOWN_GENERATION, + STR_GENERATION_INDUSTRY_GENERATION, STR_GENERATION_OBJECT_GENERATION, STR_GENERATION_TREE_GENERATION, STR_GENERATION_SETTINGUP_GAME, diff --git a/src/lang/english.txt b/src/lang/english.txt index 6f24305f03..1530dd1e20 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -3393,10 +3393,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Do you STR_GENERATION_PROGRESS :{WHITE}{NUM}% complete STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}World generation +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landscape generation STR_GENERATION_RIVER_GENERATION :{BLACK}River generation -STR_GENERATION_TREE_GENERATION :{BLACK}Tree generation -STR_GENERATION_OBJECT_GENERATION :{BLACK}Object generation STR_GENERATION_CLEARING_TILES :{BLACK}Rough and rocky area generation +STR_GENERATION_TOWN_GENERATION :{BLACK}Town generation +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Industry generation +STR_GENERATION_OBJECT_GENERATION :{BLACK}Object generation +STR_GENERATION_TREE_GENERATION :{BLACK}Tree generation STR_GENERATION_SETTINGUP_GAME :{BLACK}Setting up game STR_GENERATION_PREPARING_TILELOOP :{BLACK}Running tile-loop STR_GENERATION_PREPARING_SCRIPT :{BLACK}Running script From c073165e340e810456f40f08fd4bdec6c9d12310 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 21 Apr 2024 04:42:00 +0000 Subject: [PATCH 383/695] Update: Translations from eints greek: 5 changes by gh658804 finnish: 2 changes by hpiirai catalan: 4 changes by J0anJosep --- src/lang/afrikaans.txt | 4 ++-- src/lang/arabic_egypt.txt | 4 ++-- src/lang/basque.txt | 4 ++-- src/lang/belarusian.txt | 4 ++-- src/lang/brazilian_portuguese.txt | 4 ++-- src/lang/bulgarian.txt | 4 ++-- src/lang/catalan.txt | 8 ++++++-- src/lang/croatian.txt | 4 ++-- src/lang/czech.txt | 4 ++-- src/lang/danish.txt | 4 ++-- src/lang/dutch.txt | 4 ++-- src/lang/english_AU.txt | 4 ++-- src/lang/english_US.txt | 4 ++-- src/lang/esperanto.txt | 4 ++-- src/lang/estonian.txt | 4 ++-- src/lang/faroese.txt | 4 ++-- src/lang/finnish.txt | 8 ++++---- src/lang/french.txt | 4 ++-- src/lang/frisian.txt | 4 ++-- src/lang/gaelic.txt | 4 ++-- src/lang/galician.txt | 4 ++-- src/lang/german.txt | 4 ++-- src/lang/greek.txt | 10 +++++++--- src/lang/hebrew.txt | 4 ++-- src/lang/hungarian.txt | 4 ++-- src/lang/icelandic.txt | 4 ++-- src/lang/indonesian.txt | 4 ++-- src/lang/irish.txt | 4 ++-- src/lang/italian.txt | 4 ++-- src/lang/japanese.txt | 4 ++-- src/lang/korean.txt | 4 ++-- src/lang/latin.txt | 4 ++-- src/lang/latvian.txt | 4 ++-- src/lang/lithuanian.txt | 4 ++-- src/lang/luxembourgish.txt | 4 ++-- src/lang/malay.txt | 4 ++-- src/lang/norwegian_bokmal.txt | 4 ++-- src/lang/norwegian_nynorsk.txt | 4 ++-- src/lang/persian.txt | 4 ++-- src/lang/polish.txt | 4 ++-- src/lang/portuguese.txt | 4 ++-- src/lang/romanian.txt | 4 ++-- src/lang/russian.txt | 4 ++-- src/lang/serbian.txt | 4 ++-- src/lang/simplified_chinese.txt | 4 ++-- src/lang/slovak.txt | 4 ++-- src/lang/slovenian.txt | 4 ++-- src/lang/spanish.txt | 4 ++-- src/lang/spanish_MX.txt | 4 ++-- src/lang/swedish.txt | 4 ++-- src/lang/tamil.txt | 4 ++-- src/lang/thai.txt | 4 ++-- src/lang/traditional_chinese.txt | 4 ++-- src/lang/turkish.txt | 4 ++-- src/lang/ukrainian.txt | 4 ++-- src/lang/vietnamese.txt | 4 ++-- src/lang/welsh.txt | 4 ++-- 57 files changed, 125 insertions(+), 117 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 3d08a12588..77cc00f7df 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -2912,9 +2912,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% k STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Wêreld generasie STR_GENERATION_RIVER_GENERATION :{BLACK}Rivier generasie -STR_GENERATION_TREE_GENERATION :{BLACK}Boom generasie -STR_GENERATION_OBJECT_GENERATION :{BLACK}Onbeweegbaar generasie STR_GENERATION_CLEARING_TILES :{BLACK}Ru en rotserig area generasie +STR_GENERATION_OBJECT_GENERATION :{BLACK}Onbeweegbaar generasie +STR_GENERATION_TREE_GENERATION :{BLACK}Boom generasie STR_GENERATION_SETTINGUP_GAME :{BLACK}Stel speletjie op STR_GENERATION_PREPARING_TILELOOP :{BLACK}Hardloop teël-herhaling STR_GENERATION_PREPARING_SCRIPT :{BLACK}Lopende skrif diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 2be1344d26..e3534f09b8 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -2773,9 +2773,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK} مولد الخريطة STR_GENERATION_RIVER_GENERATION :{BLACK}مولد الانهار -STR_GENERATION_TREE_GENERATION :{BLACK} مولد الشجر -STR_GENERATION_OBJECT_GENERATION :{BLACK}صانع الخامات STR_GENERATION_CLEARING_TILES :{BLACK}مولد المناطق الخشنة والصخرية +STR_GENERATION_OBJECT_GENERATION :{BLACK}صانع الخامات +STR_GENERATION_TREE_GENERATION :{BLACK} مولد الشجر STR_GENERATION_SETTINGUP_GAME :{BLACK}تجهيز لعبة STR_GENERATION_PREPARING_TILELOOP :{BLACK} تشغيل المتكررة STR_GENERATION_PREPARING_GAME :{BLACK}يُجَهِز اللعبه diff --git a/src/lang/basque.txt b/src/lang/basque.txt index cbf591f95d..4815bcf29b 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -2751,9 +2751,9 @@ STR_GENERATION_PROGRESS :{WHITE} %{NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Mundua sortu STR_GENERATION_RIVER_GENERATION :{BLACK}Erreka sorkuntza -STR_GENERATION_TREE_GENERATION :{BLACK} Zuhaitzak sortu -STR_GENERATION_OBJECT_GENERATION :{BLACK}Objektu sorkuntza STR_GENERATION_CLEARING_TILES :{BLACK}Eremu zakarra eta haitzez beteta sortu +STR_GENERATION_OBJECT_GENERATION :{BLACK}Objektu sorkuntza +STR_GENERATION_TREE_GENERATION :{BLACK} Zuhaitzak sortu STR_GENERATION_SETTINGUP_GAME :{BLACK}Jokoaren ezarpenak STR_GENERATION_PREPARING_TILELOOP :{BLACK}Lauki buelta abiarazten STR_GENERATION_PREPARING_SCRIPT :{BLACK}Scripta abiarazten diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 73d9a197ed..9b3e06fb18 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -3723,9 +3723,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Стварэньне сусьвету STR_GENERATION_RIVER_GENERATION :{BLACK}Стварэньне рэк -STR_GENERATION_TREE_GENERATION :{BLACK}Высаджваньне лясоў -STR_GENERATION_OBJECT_GENERATION :{BLACK}Ґенэрацыя нерухомасьці STR_GENERATION_CLEARING_TILES :{BLACK}Расстаноўка дэкарацыяў і камянёў +STR_GENERATION_OBJECT_GENERATION :{BLACK}Ґенэрацыя нерухомасьці +STR_GENERATION_TREE_GENERATION :{BLACK}Высаджваньне лясоў STR_GENERATION_SETTINGUP_GAME :{BLACK}Наладка гульні STR_GENERATION_PREPARING_TILELOOP :{BLACK}Падрыхтоўка да запуску... STR_GENERATION_PREPARING_SCRIPT :{BLACK}Выконваецца скрыпт diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index be2b27f66b..bbe7bab43e 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -3395,9 +3395,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Geração de mundo STR_GENERATION_RIVER_GENERATION :{BLACK}Geração de rios -STR_GENERATION_TREE_GENERATION :{BLACK}Geração de árvores -STR_GENERATION_OBJECT_GENERATION :{BLACK}Geração de objetos STR_GENERATION_CLEARING_TILES :{BLACK}Geração de áreas irregulares e rochosas +STR_GENERATION_OBJECT_GENERATION :{BLACK}Geração de objetos +STR_GENERATION_TREE_GENERATION :{BLACK}Geração de árvores STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurando o jogo STR_GENERATION_PREPARING_TILELOOP :{BLACK}Preparando o terreno STR_GENERATION_PREPARING_SCRIPT :{BLACK}Executando o script diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index b432c9e60a..4ff5b6a6f4 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -2963,9 +2963,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Генерация на свят STR_GENERATION_RIVER_GENERATION :{BLACK}Създаване на река -STR_GENERATION_TREE_GENERATION :{BLACK}Генерация на дърва -STR_GENERATION_OBJECT_GENERATION :{BLACK}Генерация на статични STR_GENERATION_CLEARING_TILES :{BLACK}Създаване на твърда и скална повърност +STR_GENERATION_OBJECT_GENERATION :{BLACK}Генерация на статични +STR_GENERATION_TREE_GENERATION :{BLACK}Генерация на дърва STR_GENERATION_SETTINGUP_GAME :{BLACK}Настройка на играта STR_GENERATION_PREPARING_TILELOOP :{BLACK}Изпълняване цикъл на плочките STR_GENERATION_PREPARING_SCRIPT :{BLACK}Пускане на програмен език diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 5da45529ba..288989ff7c 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -3395,9 +3395,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}{NB STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generació del món STR_GENERATION_RIVER_GENERATION :{BLACK}Generació de rius -STR_GENERATION_TREE_GENERATION :{BLACK}Generació d'arbres -STR_GENERATION_OBJECT_GENERATION :{BLACK}Generació inamovible STR_GENERATION_CLEARING_TILES :{BLACK}Generació d'una àrea escarpada i rocosa +STR_GENERATION_OBJECT_GENERATION :{BLACK}Generació inamovible +STR_GENERATION_TREE_GENERATION :{BLACK}Generació d'arbres STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurant la partida STR_GENERATION_PREPARING_TILELOOP :{BLACK}Passant el bucle de cel·les STR_GENERATION_PREPARING_SCRIPT :{BLACK}Executant l'script @@ -5287,6 +5287,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Canvia l STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Encara no hi ha vehicles disponibles STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Inicieu una partida nova després de {DATE_SHORT} o useu un NewGRF que proporcioni vehicles primerencs. +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Les poblacions no disposen de tipus de carretera que puguin construir. +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Canvieu la configuració dels NewGRF +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Encara no hi ha tipus de carretera disponibles per a les poblacions. +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Comenceu una partida nova després del {DATE_SHORT} o feu servir un NewGRF que proporcioni tipus de carretera que puguin construir les poblacions. # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}No pots fer que un tren passi d'una senyal amb perill... diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 6435b15c58..25e44e6b32 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -3080,9 +3080,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% g STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Izrada svijeta STR_GENERATION_RIVER_GENERATION :{BLACK}Generiranje rijeka -STR_GENERATION_TREE_GENERATION :{BLACK}Generiranje drveća -STR_GENERATION_OBJECT_GENERATION :{BLACK}Nepomično generiranje STR_GENERATION_CLEARING_TILES :{BLACK}Generiranje grubog i stjenovitog područja +STR_GENERATION_OBJECT_GENERATION :{BLACK}Nepomično generiranje +STR_GENERATION_TREE_GENERATION :{BLACK}Generiranje drveća STR_GENERATION_SETTINGUP_GAME :{BLACK}Pripremam igru STR_GENERATION_PREPARING_TILELOOP :{BLACK}Izvršavam tile-petlju STR_GENERATION_PREPARING_SCRIPT :{BLACK}Izvođenje skripte u tijeku diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 47af6fe005..e680ee7475 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -3480,9 +3480,9 @@ STR_GENERATION_PROGRESS :{WHITE}Z{NBSP}{ STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Tvorba krajiny STR_GENERATION_RIVER_GENERATION :{BLACK}Generování řek -STR_GENERATION_TREE_GENERATION :{BLACK}Výsadba stromů -STR_GENERATION_OBJECT_GENERATION :{BLACK}Výstavba nepřesunutelných objektů STR_GENERATION_CLEARING_TILES :{BLACK}Tvorba členitého a kamenitého území +STR_GENERATION_OBJECT_GENERATION :{BLACK}Výstavba nepřesunutelných objektů +STR_GENERATION_TREE_GENERATION :{BLACK}Výsadba stromů STR_GENERATION_SETTINGUP_GAME :{BLACK}Nastavování hry STR_GENERATION_PREPARING_TILELOOP :{BLACK}Spouštění tile-loopu (cyklus na dílcích mapy) STR_GENERATION_PREPARING_SCRIPT :{BLACK}Rozbíhání skriptu diff --git a/src/lang/danish.txt b/src/lang/danish.txt index ad5dad7ec9..95e9051c4f 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% f STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Verdensgenerering STR_GENERATION_RIVER_GENERATION :{BLACK}Flod-generering -STR_GENERATION_TREE_GENERATION :{BLACK}Trægenerering -STR_GENERATION_OBJECT_GENERATION :{BLACK}Ikke-flytbar generering STR_GENERATION_CLEARING_TILES :{BLACK}Generer råt og stenet område +STR_GENERATION_OBJECT_GENERATION :{BLACK}Ikke-flytbar generering +STR_GENERATION_TREE_GENERATION :{BLACK}Trægenerering STR_GENERATION_SETTINGUP_GAME :{BLACK}Klargør spil STR_GENERATION_PREPARING_TILELOOP :{BLACK}Kører felt-løkken STR_GENERATION_PREPARING_SCRIPT :{BLACK}Kørende script diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 741a9e236b..9c709cfc71 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Wereldontwikkeling STR_GENERATION_RIVER_GENERATION :{BLACK}Rivierplaatsing -STR_GENERATION_TREE_GENERATION :{BLACK}Bosplaatsing -STR_GENERATION_OBJECT_GENERATION :{BLACK}Ontwikkeling van onverplaatsbare objecten STR_GENERATION_CLEARING_TILES :{BLACK}Ontwikkeling van ruig en rotsachtig gebied +STR_GENERATION_OBJECT_GENERATION :{BLACK}Ontwikkeling van onverplaatsbare objecten +STR_GENERATION_TREE_GENERATION :{BLACK}Bosplaatsing STR_GENERATION_SETTINGUP_GAME :{BLACK}Spel wordt geconfigureerd STR_GENERATION_PREPARING_TILELOOP :{BLACK}Bezig met tile-loop STR_GENERATION_PREPARING_SCRIPT :{BLACK}Script loopt diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index e3782bcd19..ff908f2b00 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}World generation STR_GENERATION_RIVER_GENERATION :{BLACK}River generation -STR_GENERATION_TREE_GENERATION :{BLACK}Tree generation -STR_GENERATION_OBJECT_GENERATION :{BLACK}Object generation STR_GENERATION_CLEARING_TILES :{BLACK}Rough and rocky area generation +STR_GENERATION_OBJECT_GENERATION :{BLACK}Object generation +STR_GENERATION_TREE_GENERATION :{BLACK}Tree generation STR_GENERATION_SETTINGUP_GAME :{BLACK}Setting up game STR_GENERATION_PREPARING_TILELOOP :{BLACK}Running tile-loop STR_GENERATION_PREPARING_SCRIPT :{BLACK}Running script diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 3adfe2a16a..ff5666508f 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}World generation STR_GENERATION_RIVER_GENERATION :{BLACK}River generation -STR_GENERATION_TREE_GENERATION :{BLACK}Tree generation -STR_GENERATION_OBJECT_GENERATION :{BLACK}Object generation STR_GENERATION_CLEARING_TILES :{BLACK}Rough and rocky area generation +STR_GENERATION_OBJECT_GENERATION :{BLACK}Object generation +STR_GENERATION_TREE_GENERATION :{BLACK}Tree generation STR_GENERATION_SETTINGUP_GAME :{BLACK}Setting up game STR_GENERATION_PREPARING_TILELOOP :{BLACK}Running tile-loop STR_GENERATION_PREPARING_SCRIPT :{BLACK}Running script diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 118a9baa90..6407efec0e 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -3333,9 +3333,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% k STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Mondgenerado STR_GENERATION_RIVER_GENERATION :{BLACK}Rivergenerado -STR_GENERATION_TREE_GENERATION :{BLACK}Arba generado -STR_GENERATION_OBJECT_GENERATION :{BLACK}Nemoveblaĵa generado STR_GENERATION_CLEARING_TILES :{BLACK}Generado de malglataj kaj rokaj regionoj +STR_GENERATION_OBJECT_GENERATION :{BLACK}Nemoveblaĵa generado +STR_GENERATION_TREE_GENERATION :{BLACK}Arba generado STR_GENERATION_SETTINGUP_GAME :{BLACK}Agordante ludon STR_GENERATION_PREPARING_TILELOOP :{BLACK}Trakurante kvadratojn STR_GENERATION_PREPARING_SCRIPT :{BLACK}Ruligas la skripton diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index ed67e64d0b..2ba4038a0c 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -3447,9 +3447,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% v STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Maailma tekitamine STR_GENERATION_RIVER_GENERATION :{BLACK}Jõgede tekitamine -STR_GENERATION_TREE_GENERATION :{BLACK}Puude tekitamine -STR_GENERATION_OBJECT_GENERATION :{BLACK}Objekti tekitamine STR_GENERATION_CLEARING_TILES :{BLACK}Mägise ja kivise maa-ala tekitamine +STR_GENERATION_OBJECT_GENERATION :{BLACK}Objekti tekitamine +STR_GENERATION_TREE_GENERATION :{BLACK}Puude tekitamine STR_GENERATION_SETTINGUP_GAME :{BLACK}Mängu seadistamine STR_GENERATION_PREPARING_TILELOOP :{BLACK}Ruudustiku töötlemine STR_GENERATION_PREPARING_SCRIPT :{BLACK}Täitmisel olev skript diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 5e6b384a67..6a4460a8a3 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -2583,9 +2583,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% l STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Heims framleiðsla STR_GENERATION_RIVER_GENERATION :{BLACK}Løks framleiðsla -STR_GENERATION_TREE_GENERATION :{BLACK}Træ framleiðsla -STR_GENERATION_OBJECT_GENERATION :{BLACK}Luta framleiðsla STR_GENERATION_CLEARING_TILES :{BLACK}Framleiðsa av harrendum og grýtutum øki +STR_GENERATION_OBJECT_GENERATION :{BLACK}Luta framleiðsla +STR_GENERATION_TREE_GENERATION :{BLACK}Træ framleiðsla STR_GENERATION_SETTINGUP_GAME :{BLACK}Ger spæli klárt STR_GENERATION_PREPARING_TILELOOP :{BLACK}Koyrir punta sloyfu STR_GENERATION_PREPARING_SCRIPT :{BLACK}Koyrir skript diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 14a5098396..3738d02611 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -2380,7 +2380,7 @@ STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Päiväy STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Nykyinen päivämäärä STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}h {NUM}min STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}Peliaika -STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}Peliaika, kun peli{}ei ollut pysäytettynä +STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}Pelaamisaika, kun{}peli ei ole ollut pysäytettynä STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Kieli, palvelimen versio, jne. STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Napsauta peliä luettelossa valitaksesi @@ -2396,7 +2396,7 @@ STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Palveli STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Kutsukoodi: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Aloitusvuosi: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Päivämäärä: {WHITE}{DATE_SHORT} -STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Peliaika: {WHITE}{NUM}h {NUM}min +STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Peliaika: {WHITE}{NUM}{NBSP}h {NUM}{NBSP}min STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Peliskripti: {WHITE}{STRING} (v.{NBSP}{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Salasanasuojattu! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}PALVELIN KIINNI @@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}{NB STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM}/{NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Maailman luominen STR_GENERATION_RIVER_GENERATION :{BLACK}Jokien luominen -STR_GENERATION_TREE_GENERATION :{BLACK}Puiden luominen -STR_GENERATION_OBJECT_GENERATION :{BLACK}Siirtämättömän luominen STR_GENERATION_CLEARING_TILES :{BLACK}Karun ja kivisen alueen luominen +STR_GENERATION_OBJECT_GENERATION :{BLACK}Siirtämättömän luominen +STR_GENERATION_TREE_GENERATION :{BLACK}Puiden luominen STR_GENERATION_SETTINGUP_GAME :{BLACK}Valmistellaan peliä STR_GENERATION_PREPARING_TILELOOP :{BLACK}Ajetaan tile-loop STR_GENERATION_PREPARING_SCRIPT :{BLACK}Suoritetaan skriptiä diff --git a/src/lang/french.txt b/src/lang/french.txt index b67f2b1132..55fceaaf01 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -3395,9 +3395,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}{NB STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Création du monde STR_GENERATION_RIVER_GENERATION :{BLACK}Création des rivières -STR_GENERATION_TREE_GENERATION :{BLACK}Création des arbres -STR_GENERATION_OBJECT_GENERATION :{BLACK}Création des objets inamovibles STR_GENERATION_CLEARING_TILES :{BLACK}Création des zones rugueuses et rocheuses +STR_GENERATION_OBJECT_GENERATION :{BLACK}Création des objets inamovibles +STR_GENERATION_TREE_GENERATION :{BLACK}Création des arbres STR_GENERATION_SETTINGUP_GAME :{BLACK}Configuration du jeu STR_GENERATION_PREPARING_TILELOOP :{BLACK}Rafraîchissement du terrain STR_GENERATION_PREPARING_SCRIPT :{BLACK}Exécution du script diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index e32bf24f5c..603d9dd1da 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -2719,9 +2719,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% k STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Wrâldgeneraasje STR_GENERATION_RIVER_GENERATION :{BLACK}Riviergeneraasje -STR_GENERATION_TREE_GENERATION :{BLACK}Bostgeneraasje -STR_GENERATION_OBJECT_GENERATION :{BLACK}Objekt meitsje STR_GENERATION_CLEARING_TILES :{BLACK}Rûchtes en rotsen generearje +STR_GENERATION_OBJECT_GENERATION :{BLACK}Objekt meitsje +STR_GENERATION_TREE_GENERATION :{BLACK}Bostgeneraasje STR_GENERATION_SETTINGUP_GAME :{BLACK}Set spul klear STR_GENERATION_PREPARING_TILELOOP :{BLACK}Trochrint tegellus STR_GENERATION_PREPARING_SCRIPT :{BLACK}Fiert skript út diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 88cb7c19d8..0f7da64d20 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -3097,9 +3097,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Gin saoghal STR_GENERATION_RIVER_GENERATION :{BLACK}Gin aibhnichean -STR_GENERATION_TREE_GENERATION :{BLACK}Gin craobhan -STR_GENERATION_OBJECT_GENERATION :{BLACK}Gin oibseactan STR_GENERATION_CLEARING_TILES :{BLACK}Gin raon garbh is creagach +STR_GENERATION_OBJECT_GENERATION :{BLACK}Gin oibseactan +STR_GENERATION_TREE_GENERATION :{BLACK}Gin craobhan STR_GENERATION_SETTINGUP_GAME :{BLACK}A' suidheachadh a' gheama STR_GENERATION_PREPARING_TILELOOP :{BLACK}A' ruith lùb-lice STR_GENERATION_PREPARING_SCRIPT :{BLACK}A' ruith sgriobt diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 7d04ac030f..de61d4bfa2 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -3393,9 +3393,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Xeración do mundo STR_GENERATION_RIVER_GENERATION :{BLACK}Xeración de ríos -STR_GENERATION_TREE_GENERATION :{BLACK}Xeración de árbores -STR_GENERATION_OBJECT_GENERATION :{BLACK}Xeración de obxectos STR_GENERATION_CLEARING_TILES :{BLACK}Xeración de áreas rochosas e escarpadas +STR_GENERATION_OBJECT_GENERATION :{BLACK}Xeración de obxectos +STR_GENERATION_TREE_GENERATION :{BLACK}Xeración de árbores STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurando partida STR_GENERATION_PREPARING_TILELOOP :{BLACK}Executando bucle de cadros STR_GENERATION_PREPARING_SCRIPT :{BLACK}Executando script diff --git a/src/lang/german.txt b/src/lang/german.txt index 16fb7581fc..7d2d2c84b6 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -3395,9 +3395,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% a STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Spielfeld wird erzeugt STR_GENERATION_RIVER_GENERATION :{BLACK}Flussgenerierung -STR_GENERATION_TREE_GENERATION :{BLACK}Bäume werden erzeugt -STR_GENERATION_OBJECT_GENERATION :{BLACK}Unbewegliche Objekte werden erzeugt STR_GENERATION_CLEARING_TILES :{BLACK}Raue, felsige Landschaft wird erzeugt +STR_GENERATION_OBJECT_GENERATION :{BLACK}Unbewegliche Objekte werden erzeugt +STR_GENERATION_TREE_GENERATION :{BLACK}Bäume werden erzeugt STR_GENERATION_SETTINGUP_GAME :{BLACK}Spiel wird vorbereitet STR_GENERATION_PREPARING_TILELOOP :{BLACK}Spielfeld wird belebt STR_GENERATION_PREPARING_SCRIPT :{BLACK}Führe Skript aus diff --git a/src/lang/greek.txt b/src/lang/greek.txt index ea3dad2136..160306d6d9 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -3486,9 +3486,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Δημιουργία κόσμου STR_GENERATION_RIVER_GENERATION :{BLACK}Δημιουργία ποταμού -STR_GENERATION_TREE_GENERATION :{BLACK}Δημιουργία δέντρων -STR_GENERATION_OBJECT_GENERATION :{BLACK}Δημιουργία μη μετακινούμενων STR_GENERATION_CLEARING_TILES :{BLACK}Δημιουργία άγριας και πετρώδης περιοχής +STR_GENERATION_OBJECT_GENERATION :{BLACK}Δημιουργία μη μετακινούμενων +STR_GENERATION_TREE_GENERATION :{BLACK}Δημιουργία δέντρων STR_GENERATION_SETTINGUP_GAME :{BLACK}Ρύθμιση παιχνιδιού STR_GENERATION_PREPARING_TILELOOP :{BLACK}Εκτέλεση βρόχου τετραγωνίδιων STR_GENERATION_PREPARING_SCRIPT :{BLACK}Τρέχουσα δέσμη ενεργειών @@ -5384,8 +5384,12 @@ STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... όλ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Δεν θα είναι κανένα όχημα διαθέσιμο STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Αλλάξτε τις ρύθμισεις NewGRF σας STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Κανένα όχημα δεν είναι διαθέσιμο ακόμη -STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Ξεκινήστε ένα νέο παιχνίδι αργότερα από {DATE_SHORT} η χρησιμοποιήστε ένα NewGRF το οποίο προσφέρει νωρίτερα οχήματα +STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Ξεκινήστε ένα νέο παιχνίδι αργότερα από {DATE_SHORT} η χρησιμοποιήστε ένα NewGRF το οποίο προσφέρει πρώιμα οχήματα +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Δεν υπάρχουν διαθέσιμοι τύποι δρόμων που μπορούν να κατασκευαστούν από πόλη +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Αλλάξτε τις ρύθμισεις NewGRF σας +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Δεν υπάρχουν διαθέσιμοι τύποι δρόμων που μπορούν να κατασκευαστούν από πόλη ακόμη +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Ξεκινήστε ένα νέο παιχνίδι μετά από την {DATE_SHORT} ή χρησιμοποιήστε ένα NewGRF που παρέχει πρώιμους τύπους δρόμων που μπορούν να κατασκευαστούν από πόλη # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Δεν μπορεί το τρένο να περάσει σήμα με κίνδυνο... diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index e92de862c5..0735a2f273 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -2981,9 +2981,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% : STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}יצור עולם STR_GENERATION_RIVER_GENERATION :{BLACK}יצירת נהרות -STR_GENERATION_TREE_GENERATION :{BLACK}יצירת עצים -STR_GENERATION_OBJECT_GENERATION :{BLACK}יצירת מבנים בלתי ניידים STR_GENERATION_CLEARING_TILES :{BLACK}יצירת איזורים סלעיים +STR_GENERATION_OBJECT_GENERATION :{BLACK}יצירת מבנים בלתי ניידים +STR_GENERATION_TREE_GENERATION :{BLACK}יצירת עצים STR_GENERATION_SETTINGUP_GAME :{BLACK}קביעת הגדרות המשחק STR_GENERATION_PREPARING_TILELOOP :{BLACK}מריץ לולאה על כל המשבצות STR_GENERATION_PREPARING_SCRIPT :{BLACK}מריץ סקריפט diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index a24baec0e5..2d7bfcced6 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -3455,9 +3455,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% k STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Világ létrehozása STR_GENERATION_RIVER_GENERATION :{BLACK}Folyó generálás -STR_GENERATION_TREE_GENERATION :{BLACK}Fák generálása -STR_GENERATION_OBJECT_GENERATION :{BLACK}Mozgathatatlan létesítmények létrehozása STR_GENERATION_CLEARING_TILES :{BLACK}Durva és köves területek generálása +STR_GENERATION_OBJECT_GENERATION :{BLACK}Mozgathatatlan létesítmények létrehozása +STR_GENERATION_TREE_GENERATION :{BLACK}Fák generálása STR_GENERATION_SETTINGUP_GAME :{BLACK}Játék beállítása STR_GENERATION_PREPARING_TILELOOP :{BLACK}Mezők véglegesítése STR_GENERATION_PREPARING_SCRIPT :{BLACK}Futó szkript diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 09d9780897..273c166c58 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -2691,9 +2691,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% t STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Sköpun heims STR_GENERATION_RIVER_GENERATION :{BLACK}Bý til ár -STR_GENERATION_TREE_GENERATION :{BLACK}Gróðursetning trjáa -STR_GENERATION_OBJECT_GENERATION :{BLACK}Staðsetning fastra hluta STR_GENERATION_CLEARING_TILES :{BLACK}Hrjúft og grýtt landslag +STR_GENERATION_OBJECT_GENERATION :{BLACK}Staðsetning fastra hluta +STR_GENERATION_TREE_GENERATION :{BLACK}Gróðursetning trjáa STR_GENERATION_SETTINGUP_GAME :{BLACK}Set upp leik STR_GENERATION_PREPARING_TILELOOP :{BLACK}Keyri reitalykkju STR_GENERATION_PREPARING_SCRIPT :{BLACK}Keyri forskrift diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 99fb0fc61e..eab9806bc4 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -3330,9 +3330,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% s STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Pembuatan Bentang Darat STR_GENERATION_RIVER_GENERATION :{BLACK}Pembuatan Sungai -STR_GENERATION_TREE_GENERATION :{BLACK}Membuat pepohonan -STR_GENERATION_OBJECT_GENERATION :{BLACK}Membuat objek tak bergerak STR_GENERATION_CLEARING_TILES :{BLACK}Membersihan area +STR_GENERATION_OBJECT_GENERATION :{BLACK}Membuat objek tak bergerak +STR_GENERATION_TREE_GENERATION :{BLACK}Membuat pepohonan STR_GENERATION_SETTINGUP_GAME :{BLACK}Mengatur permainan STR_GENERATION_PREPARING_TILELOOP :{BLACK}Menyiapkan area loop STR_GENERATION_PREPARING_SCRIPT :{BLACK}Menjalankan skrip diff --git a/src/lang/irish.txt b/src/lang/irish.txt index d99a87a45b..08b19d8814 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -3116,9 +3116,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Domhan a chruthú STR_GENERATION_RIVER_GENERATION :{BLACK}Giniúint aibhneacha -STR_GENERATION_TREE_GENERATION :{BLACK}Crainn a chruthú -STR_GENERATION_OBJECT_GENERATION :{BLACK}Cruthú oibiachtaí STR_GENERATION_CLEARING_TILES :{BLACK}Limistear garbh agus carraigeach a chruthú +STR_GENERATION_OBJECT_GENERATION :{BLACK}Cruthú oibiachtaí +STR_GENERATION_TREE_GENERATION :{BLACK}Crainn a chruthú STR_GENERATION_SETTINGUP_GAME :{BLACK}Cluiche á chumrú STR_GENERATION_PREPARING_TILELOOP :{BLACK}Lúb tíleanna á rith STR_GENERATION_PREPARING_SCRIPT :{BLACK}Script reatha diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 05195c2e51..ae2491cf07 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -3433,9 +3433,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generazione mondo STR_GENERATION_RIVER_GENERATION :{BLACK}Generazione fiumi -STR_GENERATION_TREE_GENERATION :{BLACK}Generazione alberi -STR_GENERATION_OBJECT_GENERATION :{BLACK}Generazione oggetti inamovibili STR_GENERATION_CLEARING_TILES :{BLACK}Generazione aree brulle e rocciose +STR_GENERATION_OBJECT_GENERATION :{BLACK}Generazione oggetti inamovibili +STR_GENERATION_TREE_GENERATION :{BLACK}Generazione alberi STR_GENERATION_SETTINGUP_GAME :{BLACK}Impostazione partita STR_GENERATION_PREPARING_TILELOOP :{BLACK}Generazione caselle del terreno STR_GENERATION_PREPARING_SCRIPT :{BLACK}Esecuzione script diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index f3e61dccff..5842462b4c 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -3203,9 +3203,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM}/{NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}マップ生成 STR_GENERATION_RIVER_GENERATION :{BLACK}河川を生成中 -STR_GENERATION_TREE_GENERATION :{BLACK}植林中 -STR_GENERATION_OBJECT_GENERATION :{BLACK}灯台/電波塔配置中 STR_GENERATION_CLEARING_TILES :{BLACK}岩石/荒地を設定中 +STR_GENERATION_OBJECT_GENERATION :{BLACK}灯台/電波塔配置中 +STR_GENERATION_TREE_GENERATION :{BLACK}植林中 STR_GENERATION_SETTINGUP_GAME :{BLACK}ゲームを設定中 STR_GENERATION_PREPARING_TILELOOP :{BLACK}タイルループを実行中 STR_GENERATION_PREPARING_SCRIPT :{BLACK}スクリプト実行中 diff --git a/src/lang/korean.txt b/src/lang/korean.txt index f4b8da4248..1412662ab0 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -3395,9 +3395,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}지형 만드는 중 STR_GENERATION_RIVER_GENERATION :{BLACK}강 제작 -STR_GENERATION_TREE_GENERATION :{BLACK}나무 심는 중 -STR_GENERATION_OBJECT_GENERATION :{BLACK}움직일수 없는 객체 만드는 중 STR_GENERATION_CLEARING_TILES :{BLACK}거친 암석지대 만드는 중 +STR_GENERATION_OBJECT_GENERATION :{BLACK}움직일수 없는 객체 만드는 중 +STR_GENERATION_TREE_GENERATION :{BLACK}나무 심는 중 STR_GENERATION_SETTINGUP_GAME :{BLACK}게임 설정 중 STR_GENERATION_PREPARING_TILELOOP :{BLACK}타일 루프 실행 중 STR_GENERATION_PREPARING_SCRIPT :{BLACK}스크립트 생성 중 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 6bc1b21f6a..da3b6d5595 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -3065,9 +3065,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% f STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Creatio orbis terrarum STR_GENERATION_RIVER_GENERATION :{BLACK}Creatio fluminum -STR_GENERATION_TREE_GENERATION :{BLACK}Creatio arborum -STR_GENERATION_OBJECT_GENERATION :{BLACK}Creatio ornamentorum STR_GENERATION_CLEARING_TILES :{BLACK}Creatio terrarum saxosarum asperarumque +STR_GENERATION_OBJECT_GENERATION :{BLACK}Creatio ornamentorum +STR_GENERATION_TREE_GENERATION :{BLACK}Creatio arborum STR_GENERATION_SETTINGUP_GAME :{BLACK}Ludum instruens STR_GENERATION_PREPARING_TILELOOP :{BLACK}Tegularum cursum exsequens STR_GENERATION_PREPARING_SCRIPT :{BLACK}Scriptum exsequens diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 6b759b0315..4484f63f8a 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -3398,9 +3398,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% p STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Pasaules radīšana STR_GENERATION_RIVER_GENERATION :{BLACK}Upes radīšana -STR_GENERATION_TREE_GENERATION :{BLACK}Koka radīšana -STR_GENERATION_OBJECT_GENERATION :{BLACK}Objekta radīšana STR_GENERATION_CLEARING_TILES :{BLACK}Nelīdzena un akmeņaina apvidus radīšana +STR_GENERATION_OBJECT_GENERATION :{BLACK}Objekta radīšana +STR_GENERATION_TREE_GENERATION :{BLACK}Koka radīšana STR_GENERATION_SETTINGUP_GAME :{BLACK}Iestatīt spēli STR_GENERATION_PREPARING_TILELOOP :{BLACK}Skrejošs nosaukums STR_GENERATION_PREPARING_SCRIPT :{BLACK}Strādājošs skripts diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 798f207e21..b7efc05846 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -3382,9 +3382,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% u STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Pasaulio generacija STR_GENERATION_RIVER_GENERATION :{BLACK}Upių generavimas -STR_GENERATION_TREE_GENERATION :{BLACK}Medžių generacija -STR_GENERATION_OBJECT_GENERATION :{BLACK}Nejudinama generacija STR_GENERATION_CLEARING_TILES :{BLACK}Daubų ir uolų generacija +STR_GENERATION_OBJECT_GENERATION :{BLACK}Nejudinama generacija +STR_GENERATION_TREE_GENERATION :{BLACK}Medžių generacija STR_GENERATION_SETTINGUP_GAME :{BLACK}Sukurti zaidima STR_GENERATION_PREPARING_TILELOOP :{BLACK}Paleidžiamas tile-loop STR_GENERATION_PREPARING_SCRIPT :{BLACK}Skriptas veikia diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index f19ae7f54e..7bb67b299e 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -3391,9 +3391,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% k STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Welt-Generatioun STR_GENERATION_RIVER_GENERATION :{BLACK}Generéiren vu Flëss -STR_GENERATION_TREE_GENERATION :{BLACK}Baam Generatioun -STR_GENERATION_OBJECT_GENERATION :{BLACK}Objets-Generatioun STR_GENERATION_CLEARING_TILES :{BLACK}Generatioun vu knubbelegem a stengege Land +STR_GENERATION_OBJECT_GENERATION :{BLACK}Objets-Generatioun +STR_GENERATION_TREE_GENERATION :{BLACK}Baam Generatioun STR_GENERATION_SETTINGUP_GAME :{BLACK}Spill gëtt opgestallt STR_GENERATION_PREPARING_TILELOOP :{BLACK}Felder-Verdeelung STR_GENERATION_PREPARING_SCRIPT :{BLACK}Lafende Script diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 5266a35664..ebe3d03ba5 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -2587,9 +2587,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% s STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Penjanaan dunia STR_GENERATION_RIVER_GENERATION :{BLACK}Penjanaan sungai -STR_GENERATION_TREE_GENERATION :{BLACK}Penjanaan pokok -STR_GENERATION_OBJECT_GENERATION :{BLACK}Penjanaan objek-objek yang tidak boleh digerakkan STR_GENERATION_CLEARING_TILES :{BLACK}Penjanaan kawasan berbatu dan tanah kasar +STR_GENERATION_OBJECT_GENERATION :{BLACK}Penjanaan objek-objek yang tidak boleh digerakkan +STR_GENERATION_TREE_GENERATION :{BLACK}Penjanaan pokok STR_GENERATION_SETTINGUP_GAME :{BLACK}Permainan sedang diuruskan STR_GENERATION_PREPARING_TILELOOP :{BLACK}Lingkaran petak sedang dijalankan STR_GENERATION_PREPARING_SCRIPT :{BLACK}Skrip sedang berjalan diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 64a30700d5..8bfd49fd7e 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -3396,9 +3396,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}{NB STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generer en verden STR_GENERATION_RIVER_GENERATION :{BLACK}Skap elver -STR_GENERATION_TREE_GENERATION :{BLACK}Tregenerering -STR_GENERATION_OBJECT_GENERATION :{BLACK}Objektgenerering STR_GENERATION_CLEARING_TILES :{BLACK}Generering av ulendt og steinete område +STR_GENERATION_OBJECT_GENERATION :{BLACK}Objektgenerering +STR_GENERATION_TREE_GENERATION :{BLACK}Tregenerering STR_GENERATION_SETTINGUP_GAME :{BLACK}Klargjør spillet STR_GENERATION_PREPARING_TILELOOP :{BLACK}Kjører ruteløkke STR_GENERATION_PREPARING_SCRIPT :{BLACK}Kjører skript diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 43ad419318..ce277933aa 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -2757,9 +2757,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}{NB STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generer ei verd STR_GENERATION_RIVER_GENERATION :{BLACK}Elvgenerering -STR_GENERATION_TREE_GENERATION :{BLACK}Tregenerering -STR_GENERATION_OBJECT_GENERATION :{BLACK}Ikkje-flyttbar generering STR_GENERATION_CLEARING_TILES :{BLACK}Generering av ulendt og steinete område +STR_GENERATION_OBJECT_GENERATION :{BLACK}Ikkje-flyttbar generering +STR_GENERATION_TREE_GENERATION :{BLACK}Tregenerering STR_GENERATION_SETTINGUP_GAME :{BLACK}Klargjer spelet STR_GENERATION_PREPARING_TILELOOP :{BLACK}Køyrer rute-løkkje STR_GENERATION_PREPARING_SCRIPT :{BLACK}Kjøyrande script diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 00c2596bc2..f8ca0477e2 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -2588,9 +2588,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}ساخت دنیا STR_GENERATION_RIVER_GENERATION :{BLACK}ساخت رودخانه -STR_GENERATION_TREE_GENERATION :{BLACK}ساختن درخت -STR_GENERATION_OBJECT_GENERATION :{BLACK}ساختن اشیاء STR_GENERATION_CLEARING_TILES :{BLACK}ساختن مناطق ناهموار و صخره ها +STR_GENERATION_OBJECT_GENERATION :{BLACK}ساختن اشیاء +STR_GENERATION_TREE_GENERATION :{BLACK}ساختن درخت STR_GENERATION_SETTINGUP_GAME :{BLACK}راه اندازی بازی STR_GENERATION_PREPARING_TILELOOP :{BLACK}اجرای حلقه قطعه ها STR_GENERATION_PREPARING_SCRIPT :{BLACK}کدهای در حال اجرا diff --git a/src/lang/polish.txt b/src/lang/polish.txt index ee5ab860d3..c93d7972a9 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3774,9 +3774,9 @@ STR_GENERATION_PROGRESS :{WHITE}Ukończo STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Tworzenie świata STR_GENERATION_RIVER_GENERATION :{BLACK}Generator rzek -STR_GENERATION_TREE_GENERATION :{BLACK}Tworzenie drzew -STR_GENERATION_OBJECT_GENERATION :{BLACK}Tworzenie obiektów STR_GENERATION_CLEARING_TILES :{BLACK}Tworzenie terenów skalistych i nierówności +STR_GENERATION_OBJECT_GENERATION :{BLACK}Tworzenie obiektów +STR_GENERATION_TREE_GENERATION :{BLACK}Tworzenie drzew STR_GENERATION_SETTINGUP_GAME :{BLACK}Ustawianie gry STR_GENERATION_PREPARING_TILELOOP :{BLACK}Uaktywnianie pól STR_GENERATION_PREPARING_SCRIPT :{BLACK}Uruchamianie skryptu diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 74c418193a..4cc8553c24 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -3395,9 +3395,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}A gerar mundo STR_GENERATION_RIVER_GENERATION :{BLACK}A gerar rios -STR_GENERATION_TREE_GENERATION :{BLACK}A gerar árvores -STR_GENERATION_OBJECT_GENERATION :{BLACK}Geração inamovível STR_GENERATION_CLEARING_TILES :{BLACK}A gerar zonas rochosas e montanhosas +STR_GENERATION_OBJECT_GENERATION :{BLACK}Geração inamovível +STR_GENERATION_TREE_GENERATION :{BLACK}A gerar árvores STR_GENERATION_SETTINGUP_GAME :{BLACK}Definindo jogo STR_GENERATION_PREPARING_TILELOOP :{BLACK}A preparar o terreno STR_GENERATION_PREPARING_SCRIPT :{BLACK}Script a correr diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 2d016ba1ad..e34f94e7bd 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -3387,9 +3387,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% e STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generare lume STR_GENERATION_RIVER_GENERATION :{BLACK}Generarea râurilor -STR_GENERATION_TREE_GENERATION :{BLACK}Generare arbori -STR_GENERATION_OBJECT_GENERATION :{BLACK}Generare fixă STR_GENERATION_CLEARING_TILES :{BLACK}Generare zonă dură și pietroasă +STR_GENERATION_OBJECT_GENERATION :{BLACK}Generare fixă +STR_GENERATION_TREE_GENERATION :{BLACK}Generare arbori STR_GENERATION_SETTINGUP_GAME :{BLACK}Se configurează jocul STR_GENERATION_PREPARING_TILELOOP :{BLACK}Initializez ciclul dalelor STR_GENERATION_PREPARING_SCRIPT :{BLACK}Se rulează script-ul diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 5fbcbcba24..97a213b717 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -3569,9 +3569,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Создание мира STR_GENERATION_RIVER_GENERATION :{BLACK}Создание рек -STR_GENERATION_TREE_GENERATION :{BLACK}Высадка лесов -STR_GENERATION_OBJECT_GENERATION :{BLACK}Создание объектов STR_GENERATION_CLEARING_TILES :{BLACK}Расстановка декораций и камней +STR_GENERATION_OBJECT_GENERATION :{BLACK}Создание объектов +STR_GENERATION_TREE_GENERATION :{BLACK}Высадка лесов STR_GENERATION_SETTINGUP_GAME :{BLACK}Настройка STR_GENERATION_PREPARING_TILELOOP :{BLACK}Подготовка к запуску... STR_GENERATION_PREPARING_SCRIPT :{BLACK}Выполняется скрипт diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 6ca88c3f00..ed23c52840 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -3520,9 +3520,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% z STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Stvaranje sveta STR_GENERATION_RIVER_GENERATION :{BLACK}Određivanje toka reka -STR_GENERATION_TREE_GENERATION :{BLACK}Postavljanje drveća -STR_GENERATION_OBJECT_GENERATION :{BLACK}Postavljenje nepomičnih objekata STR_GENERATION_CLEARING_TILES :{BLACK}Dodavanje grubih i stenovitih područja +STR_GENERATION_OBJECT_GENERATION :{BLACK}Postavljenje nepomičnih objekata +STR_GENERATION_TREE_GENERATION :{BLACK}Postavljanje drveća STR_GENERATION_SETTINGUP_GAME :{BLACK}Podešavanje igre STR_GENERATION_PREPARING_TILELOOP :{BLACK}Razrađivanje pločica STR_GENERATION_PREPARING_SCRIPT :{BLACK}Pokretanje skripte diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 4ca83af535..e37eaa79d1 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}已完 STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}地图生成 STR_GENERATION_RIVER_GENERATION :{BLACK}生成河流 -STR_GENERATION_TREE_GENERATION :{BLACK}生成树木 -STR_GENERATION_OBJECT_GENERATION :{BLACK}生成固定设施 STR_GENERATION_CLEARING_TILES :{BLACK}生成岩石地貌 +STR_GENERATION_OBJECT_GENERATION :{BLACK}生成固定设施 +STR_GENERATION_TREE_GENERATION :{BLACK}生成树木 STR_GENERATION_SETTINGUP_GAME :{BLACK}设置游戏 STR_GENERATION_PREPARING_TILELOOP :{BLACK}地貌细节生成 STR_GENERATION_PREPARING_SCRIPT :{BLACK}当前脚本 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 8ce5a9f166..cb8177f58d 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -3462,9 +3462,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% h STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generovanie sveta STR_GENERATION_RIVER_GENERATION :{BLACK}Generovanie riek -STR_GENERATION_TREE_GENERATION :{BLACK}Generovanie stromov -STR_GENERATION_OBJECT_GENERATION :{BLACK}Generovanie objektov STR_GENERATION_CLEARING_TILES :{BLACK}Generovanie nerovností a skál +STR_GENERATION_OBJECT_GENERATION :{BLACK}Generovanie objektov +STR_GENERATION_TREE_GENERATION :{BLACK}Generovanie stromov STR_GENERATION_SETTINGUP_GAME :{BLACK}Nastavovanie hry STR_GENERATION_PREPARING_TILELOOP :{BLACK}Spúšťanie políčkového cyklu STR_GENERATION_PREPARING_SCRIPT :{BLACK}Spúšťanie skriptu diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index c8149b0ebb..99483e3c9f 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -2995,9 +2995,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% n STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Ustvarjanje sveta STR_GENERATION_RIVER_GENERATION :{BLACK}Ustvarjanje reke -STR_GENERATION_TREE_GENERATION :{BLACK}Ustvarjanje dreves -STR_GENERATION_OBJECT_GENERATION :{BLACK}Ustvarjanje zgradbe STR_GENERATION_CLEARING_TILES :{BLACK}Generiranje grobih in skalnatih tal +STR_GENERATION_OBJECT_GENERATION :{BLACK}Ustvarjanje zgradbe +STR_GENERATION_TREE_GENERATION :{BLACK}Ustvarjanje dreves STR_GENERATION_SETTINGUP_GAME :{BLACK}Nastavljanje igre STR_GENERATION_PREPARING_TILELOOP :{BLACK}Zagnano ponavljanje polj STR_GENERATION_PREPARING_SCRIPT :{BLACK}Poganjam skripto diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 0624ce69bd..2d04edbc6c 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -3395,9 +3395,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generación de mundo STR_GENERATION_RIVER_GENERATION :{BLACK}Generación de ríos -STR_GENERATION_TREE_GENERATION :{BLACK}Generación de árboles -STR_GENERATION_OBJECT_GENERATION :{BLACK}Generación de inamovibles STR_GENERATION_CLEARING_TILES :{BLACK}Generación de áreas ásperas o rocosas +STR_GENERATION_OBJECT_GENERATION :{BLACK}Generación de inamovibles +STR_GENERATION_TREE_GENERATION :{BLACK}Generación de árboles STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurar juego STR_GENERATION_PREPARING_TILELOOP :{BLACK}Ejecutar ciclo de casillas STR_GENERATION_PREPARING_SCRIPT :{BLACK}Script en funcionamiento diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 1753a04fde..2ad8c0c1cc 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -3326,9 +3326,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM}/{NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generación de mapa STR_GENERATION_RIVER_GENERATION :{BLACK}Generación de ríos -STR_GENERATION_TREE_GENERATION :{BLACK}Generación de árboles -STR_GENERATION_OBJECT_GENERATION :{BLACK}Generación de objetos STR_GENERATION_CLEARING_TILES :{BLACK}Generación de áreas rugosas y rocosas +STR_GENERATION_OBJECT_GENERATION :{BLACK}Generación de objetos +STR_GENERATION_TREE_GENERATION :{BLACK}Generación de árboles STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurando partida STR_GENERATION_PREPARING_TILELOOP :{BLACK}Generando casillas STR_GENERATION_PREPARING_SCRIPT :{BLACK}Ejecutando script diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 823870fc23..a83b82094a 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% f STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generera värld STR_GENERATION_RIVER_GENERATION :{BLACK}Generera Flod -STR_GENERATION_TREE_GENERATION :{BLACK}Generera Träd -STR_GENERATION_OBJECT_GENERATION :{BLACK}Generera objekt STR_GENERATION_CLEARING_TILES :{BLACK}Svår och stenig markgenerering +STR_GENERATION_OBJECT_GENERATION :{BLACK}Generera objekt +STR_GENERATION_TREE_GENERATION :{BLACK}Generera Träd STR_GENERATION_SETTINGUP_GAME :{BLACK}Ställer in spel STR_GENERATION_PREPARING_TILELOOP :{BLACK}Kör tile-loop STR_GENERATION_PREPARING_SCRIPT :{BLACK}Kör skript diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index be2da27776..d14a4ebda0 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -3108,9 +3108,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}உலகம் உருவாக்குதல் STR_GENERATION_RIVER_GENERATION :{BLACK}ஆறு உருவாக்குதல் -STR_GENERATION_TREE_GENERATION :{BLACK}மரங்கள் உருவாக்குதல் -STR_GENERATION_OBJECT_GENERATION :{BLACK}பொருள் உருவாக்குதல் STR_GENERATION_CLEARING_TILES :{BLACK}சமமில்லாத மற்றும் கல்லான பகுதி உருவாக்குதல் +STR_GENERATION_OBJECT_GENERATION :{BLACK}பொருள் உருவாக்குதல் +STR_GENERATION_TREE_GENERATION :{BLACK}மரங்கள் உருவாக்குதல் STR_GENERATION_SETTINGUP_GAME :{BLACK}ஆட்டம் அமைக்கப்படுகின்றது STR_GENERATION_PREPARING_SCRIPT :{BLACK}வரிவடிவம் செயல்படுத்தப்படுகின்றது STR_GENERATION_PREPARING_GAME :{BLACK}ஆட்டம் தயாராகிறது diff --git a/src/lang/thai.txt b/src/lang/thai.txt index a9fd5a7a83..67964aa429 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -2930,9 +2930,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}เครื่องมือสร้างแผนที่ STR_GENERATION_RIVER_GENERATION :{BLACK}สร้างแม่น้ำ -STR_GENERATION_TREE_GENERATION :{BLACK}สร้างต้นไม่ -STR_GENERATION_OBJECT_GENERATION :{BLACK}สร้างวัตถุ STR_GENERATION_CLEARING_TILES :{BLACK}สร้างพื้นหิน +STR_GENERATION_OBJECT_GENERATION :{BLACK}สร้างวัตถุ +STR_GENERATION_TREE_GENERATION :{BLACK}สร้างต้นไม่ STR_GENERATION_SETTINGUP_GAME :{BLACK}ตั้งค่าให้กับเกม STR_GENERATION_PREPARING_TILELOOP :{BLACK}Running tile-loop STR_GENERATION_PREPARING_SCRIPT :{BLACK}Running script diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 27dd3f671c..fdb34c2378 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -3280,9 +3280,9 @@ STR_GENERATION_PROGRESS :{WHITE}完成 { STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}產生世界 STR_GENERATION_RIVER_GENERATION :{BLACK}產生河流 -STR_GENERATION_TREE_GENERATION :{BLACK}產生樹木 -STR_GENERATION_OBJECT_GENERATION :{BLACK}無法移動 STR_GENERATION_CLEARING_TILES :{BLACK}產生粗地與岩石區域 +STR_GENERATION_OBJECT_GENERATION :{BLACK}無法移動 +STR_GENERATION_TREE_GENERATION :{BLACK}產生樹木 STR_GENERATION_SETTINGUP_GAME :{BLACK}設定遊戲 STR_GENERATION_PREPARING_TILELOOP :{BLACK}執行單格迴圈中 STR_GENERATION_PREPARING_SCRIPT :{BLACK}正在運行腳本 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 7945464b7c..38b6d879d8 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -3393,9 +3393,9 @@ STR_GENERATION_PROGRESS :{WHITE}%{NUM} t STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Harita üretimi STR_GENERATION_RIVER_GENERATION :{BLACK}Nehir oluşturma -STR_GENERATION_TREE_GENERATION :{BLACK}Ağaç üretimi -STR_GENERATION_OBJECT_GENERATION :{BLACK}Nesne oluşturma STR_GENERATION_CLEARING_TILES :{BLACK}Engebeli ve kayalık alan oluştur +STR_GENERATION_OBJECT_GENERATION :{BLACK}Nesne oluşturma +STR_GENERATION_TREE_GENERATION :{BLACK}Ağaç üretimi STR_GENERATION_SETTINGUP_GAME :{BLACK}Oyun ayarlanıyor STR_GENERATION_PREPARING_TILELOOP :{BLACK}tile-loop çalıştırılıyor STR_GENERATION_PREPARING_SCRIPT :{BLACK}Betik çalıştırılıyor diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 496e385fbc..81a1c9224a 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -3534,9 +3534,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Створення світу STR_GENERATION_RIVER_GENERATION :{BLACK}Генерація річок -STR_GENERATION_TREE_GENERATION :{BLACK}Насадження дерев -STR_GENERATION_OBJECT_GENERATION :{BLACK}Генерація нерухомості STR_GENERATION_CLEARING_TILES :{BLACK}Розкидати каміння +STR_GENERATION_OBJECT_GENERATION :{BLACK}Генерація нерухомості +STR_GENERATION_TREE_GENERATION :{BLACK}Насадження дерев STR_GENERATION_SETTINGUP_GAME :{BLACK}Налаштування гри STR_GENERATION_PREPARING_TILELOOP :{BLACK}Виконуємо цикл STR_GENERATION_PREPARING_SCRIPT :{BLACK}Виконується скрипт diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 1c6cfb73e6..ab8703fa71 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% h STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Tạo màn STR_GENERATION_RIVER_GENERATION :{BLACK}Khởi tạo sông suối -STR_GENERATION_TREE_GENERATION :{BLACK}Trồng cây -STR_GENERATION_OBJECT_GENERATION :{BLACK}Sinh đối tượng cứng STR_GENERATION_CLEARING_TILES :{BLACK}Sinh đá và sự gồ ghề +STR_GENERATION_OBJECT_GENERATION :{BLACK}Sinh đối tượng cứng +STR_GENERATION_TREE_GENERATION :{BLACK}Trồng cây STR_GENERATION_SETTINGUP_GAME :{BLACK}Thiết lập ván chơi STR_GENERATION_PREPARING_TILELOOP :{BLACK}Đang chạy sinh tile STR_GENERATION_PREPARING_SCRIPT :{BLACK}Đang chạy tập lệnh diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 40e7dcc914..c123688b4d 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Cynhyrchu byd STR_GENERATION_RIVER_GENERATION :{BLACK}Cynhyrchu afonydd -STR_GENERATION_TREE_GENERATION :{BLACK}Cynhyrchu coed -STR_GENERATION_OBJECT_GENERATION :{BLACK}Cynhyrchu gwrthrych STR_GENERATION_CLEARING_TILES :{BLACK}Cynhyrchu ardaloedd creigiog a chnapiog +STR_GENERATION_OBJECT_GENERATION :{BLACK}Cynhyrchu gwrthrych +STR_GENERATION_TREE_GENERATION :{BLACK}Cynhyrchu coed STR_GENERATION_SETTINGUP_GAME :{BLACK}Gosod gêm yn ei le STR_GENERATION_PREPARING_TILELOOP :{BLACK}Rhedeg dolen teiliau STR_GENERATION_PREPARING_SCRIPT :{BLACK}Rhedeg sgript From 3b01d312802d03404bcf7d94fb48f0964fce090e Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 21 Apr 2024 19:41:25 +0100 Subject: [PATCH 384/695] Fix 8746be8: Reinstate current order test when removing road stop. (#12552) #12144 replaced pool iteration with FindVehiclesWithOrder, however the test for current_order being OT_GOTO_STATION was erroneously removed. --- src/station_cmd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index dd32c4f006..615e680723 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2192,7 +2192,7 @@ static CommandCost RemoveRoadStop(TileIndex tile, DoCommandFlag flags, int repla [](const Vehicle *v) { return v->type == VEH_ROAD; }, [station_id](const Order *order) { return order->IsType(OT_GOTO_STATION) && order->GetDestination() == station_id; }, [station_id, tile](Vehicle *v) { - if (v->dest_tile == tile) { + if (v->current_order.IsType(OT_GOTO_STATION) && v->dest_tile == tile) { v->SetDestTile(v->GetOrderStationLocation(station_id)); } } From d465257dd01ce9a61aa59951d789ee84c735f070 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 21 Apr 2024 19:46:05 +0100 Subject: [PATCH 385/695] Fix 952d111: Houses and industry tiles could accept incorrect cargo. (#12547) Default cargo label was not cleared (set to CT_INVALID) when using older 3-slot acceptance properties for house and industry tiles. Missed in #12053 and #12062. --- src/newgrf.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 45208a3c9c..68396cdbca 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -2570,6 +2570,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt } else { housespec->accepts_cargo[j] = cargo; } + housespec->accepts_cargo_label[j] = CT_INVALID; } break; } @@ -3306,6 +3307,7 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr uint16_t acctp = buf->ReadWord(); tsp->accepts_cargo[prop - 0x0A] = GetCargoTranslation(GB(acctp, 0, 8), _cur.grffile); tsp->acceptance[prop - 0x0A] = Clamp(GB(acctp, 8, 8), 0, 16); + tsp->accepts_cargo_label[prop - 0x0A] = CT_INVALID; break; } From ded4d63db295d0c3afee9e16fe663df1a963986c Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 20 Apr 2024 15:34:30 +0200 Subject: [PATCH 386/695] Codechange: simplify access to the current screenshot format --- src/screenshot.cpp | 35 +++++++++++++++-------------------- src/screenshot.h | 2 -- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/src/screenshot.cpp b/src/screenshot.cpp index 6a591afcc2..0f54a89cae 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -38,8 +38,6 @@ static const char * const SCREENSHOT_NAME = "screenshot"; ///< Default filename static const char * const HEIGHTMAP_NAME = "heightmap"; ///< Default filename of a saved heightmap. std::string _screenshot_format_name; ///< Extension of the current screenshot format (corresponds with #_cur_screenshot_format). -uint _num_screenshot_formats; ///< Number of available screenshot formats. -uint _cur_screenshot_format; ///< Index of the currently selected screenshot format in #_screenshot_formats. static std::string _screenshot_name; ///< Filename of the screenshot file. std::string _full_screenshot_path; ///< Pathname of the screenshot file. uint _heightmap_highest_peak; ///< When saving a heightmap, this contains the highest peak on the map. @@ -575,24 +573,26 @@ static const ScreenshotFormat _screenshot_formats[] = { {"pcx", &MakePCXImage}, }; +/* The currently loaded screenshot format. Set to a valid value as it might be used in early crash logs, when InitializeScreenshotFormats has not been called yet. */ +static const ScreenshotFormat *_cur_screenshot_format = std::begin(_screenshot_formats); + /** Get filename extension of current screenshot file format. */ const char *GetCurrentScreenshotExtension() { - return _screenshot_formats[_cur_screenshot_format].extension; + return _cur_screenshot_format->extension; } /** Initialize screenshot format information on startup, with #_screenshot_format_name filled from the loadsave code. */ void InitializeScreenshotFormats() { - uint j = 0; - for (uint i = 0; i < lengthof(_screenshot_formats); i++) { - if (_screenshot_format_name.compare(_screenshot_formats[i].extension) == 0) { - j = i; - break; + for (auto &format : _screenshot_formats) { + if (_screenshot_format_name == format.extension) { + _cur_screenshot_format = &format; + return; } } - _cur_screenshot_format = j; - _num_screenshot_formats = lengthof(_screenshot_formats); + + _cur_screenshot_format = std::begin(_screenshot_formats); } /** @@ -706,8 +706,7 @@ static const char *MakeScreenshotName(const char *default_fn, const char *ext, b /** Make a screenshot of the current screen. */ static bool MakeSmallScreenshot(bool crashlog) { - const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format; - return sf->proc(MakeScreenshotName(SCREENSHOT_NAME, sf->extension, crashlog), CurrentScreenCallback, nullptr, _screen.width, _screen.height, + return _cur_screenshot_format->proc(MakeScreenshotName(SCREENSHOT_NAME, _cur_screenshot_format->extension, crashlog), CurrentScreenCallback, nullptr, _screen.width, _screen.height, BlitterFactory::GetCurrentBlitter()->GetScreenDepth(), _cur_palette.palette); } @@ -804,8 +803,7 @@ static bool MakeLargeWorldScreenshot(ScreenshotType t, uint32_t width = 0, uint3 Viewport vp; SetupScreenshotViewport(t, &vp, width, height); - const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format; - return sf->proc(MakeScreenshotName(SCREENSHOT_NAME, sf->extension), LargeWorldCallback, &vp, vp.width, vp.height, + return _cur_screenshot_format->proc(MakeScreenshotName(SCREENSHOT_NAME, _cur_screenshot_format->extension), LargeWorldCallback, &vp, vp.width, vp.height, BlitterFactory::GetCurrentBlitter()->GetScreenDepth(), _cur_palette.palette); } @@ -852,8 +850,7 @@ bool MakeHeightmapScreenshot(const char *filename) _heightmap_highest_peak = std::max(h, _heightmap_highest_peak); } - const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format; - return sf->proc(filename, HeightmapCallback, nullptr, Map::SizeX(), Map::SizeY(), 8, palette); + return _cur_screenshot_format->proc(filename, HeightmapCallback, nullptr, Map::SizeX(), Map::SizeY(), 8, palette); } static ScreenshotType _confirmed_screenshot_type; ///< Screenshot type the current query is about to confirm. @@ -937,8 +934,7 @@ static bool RealMakeScreenshot(ScreenshotType t, std::string name, uint32_t widt break; case SC_HEIGHTMAP: { - const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format; - ret = MakeHeightmapScreenshot(MakeScreenshotName(HEIGHTMAP_NAME, sf->extension)); + ret = MakeHeightmapScreenshot(MakeScreenshotName(HEIGHTMAP_NAME, _cur_screenshot_format->extension)); break; } @@ -1019,6 +1015,5 @@ static void MinimapScreenCallback(void *, void *buf, uint y, uint pitch, uint n) */ bool MakeMinimapWorldScreenshot() { - const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format; - return sf->proc(MakeScreenshotName(SCREENSHOT_NAME, sf->extension), MinimapScreenCallback, nullptr, Map::SizeX(), Map::SizeY(), 32, _cur_palette.palette); + return _cur_screenshot_format->proc(MakeScreenshotName(SCREENSHOT_NAME, _cur_screenshot_format->extension), MinimapScreenCallback, nullptr, Map::SizeX(), Map::SizeY(), 32, _cur_palette.palette); } diff --git a/src/screenshot.h b/src/screenshot.h index a243050e56..f10a80f70d 100644 --- a/src/screenshot.h +++ b/src/screenshot.h @@ -32,8 +32,6 @@ bool MakeScreenshot(ScreenshotType t, std::string name, uint32_t width = 0, uint bool MakeMinimapWorldScreenshot(); extern std::string _screenshot_format_name; -extern uint _num_screenshot_formats; -extern uint _cur_screenshot_format; extern std::string _full_screenshot_path; #endif /* SCREENSHOT_H */ From c82a2575d7a2f1f3fff8020be04cdfbf7cfe0cfe Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 22 Apr 2024 04:40:33 +0000 Subject: [PATCH 387/695] Update: Translations from eints english (au): 3 changes by krysclarke english (us): 3 changes by 2TallTyler greek: 3 changes by gh658804 russian: 3 changes by Ln-Wolf finnish: 5 changes by hpiirai turkish: 7 changes by BeratSJ portuguese: 3 changes by azulcosta portuguese (brazilian): 3 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 3 +++ src/lang/english_AU.txt | 3 +++ src/lang/english_US.txt | 3 +++ src/lang/finnish.txt | 7 +++++-- src/lang/greek.txt | 3 +++ src/lang/portuguese.txt | 3 +++ src/lang/russian.txt | 3 +++ src/lang/turkish.txt | 7 +++++++ 8 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index bbe7bab43e..7791265f3c 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -3394,8 +3394,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Você q STR_GENERATION_PROGRESS :{WHITE}{NUM}% completo STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Geração de mundo +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Geração de paisagem STR_GENERATION_RIVER_GENERATION :{BLACK}Geração de rios STR_GENERATION_CLEARING_TILES :{BLACK}Geração de áreas irregulares e rochosas +STR_GENERATION_TOWN_GENERATION :{BLACK}Geração de localidades +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Geração de indústrias STR_GENERATION_OBJECT_GENERATION :{BLACK}Geração de objetos STR_GENERATION_TREE_GENERATION :{BLACK}Geração de árvores STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurando o jogo diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index ff908f2b00..27ec2b065c 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -3393,8 +3393,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Do you STR_GENERATION_PROGRESS :{WHITE}{NUM}% complete STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}World generation +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landscape generation STR_GENERATION_RIVER_GENERATION :{BLACK}River generation STR_GENERATION_CLEARING_TILES :{BLACK}Rough and rocky area generation +STR_GENERATION_TOWN_GENERATION :{BLACK}Town generation +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Industry generation STR_GENERATION_OBJECT_GENERATION :{BLACK}Object generation STR_GENERATION_TREE_GENERATION :{BLACK}Tree generation STR_GENERATION_SETTINGUP_GAME :{BLACK}Setting up game diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index ff5666508f..e47c7b95ca 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -3393,8 +3393,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Do you STR_GENERATION_PROGRESS :{WHITE}{NUM}% complete STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}World generation +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landscape generation STR_GENERATION_RIVER_GENERATION :{BLACK}River generation STR_GENERATION_CLEARING_TILES :{BLACK}Rough and rocky area generation +STR_GENERATION_TOWN_GENERATION :{BLACK}Town generation +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Industry generation STR_GENERATION_OBJECT_GENERATION :{BLACK}Object generation STR_GENERATION_TREE_GENERATION :{BLACK}Tree generation STR_GENERATION_SETTINGUP_GAME :{BLACK}Setting up game diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 3738d02611..f3fe6394ed 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -2378,7 +2378,7 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Kartan k STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Kartan koko{}Valitse lajitellaksesi koon mukaan STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Päiväys STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Nykyinen päivämäärä -STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}h {NUM}min +STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}{NBSP}h {NUM}{NBSP}min STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}Peliaika STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}Pelaamisaika, kun{}peli ei ole ollut pysäytettynä STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Kieli, palvelimen versio, jne. @@ -3393,8 +3393,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Haluatk STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% valmiina STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM}/{NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Maailman luominen +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Maaston luominen STR_GENERATION_RIVER_GENERATION :{BLACK}Jokien luominen STR_GENERATION_CLEARING_TILES :{BLACK}Karun ja kivisen alueen luominen +STR_GENERATION_TOWN_GENERATION :{BLACK}Kuntien luominen +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Tuotantolaitosten luominen STR_GENERATION_OBJECT_GENERATION :{BLACK}Siirtämättömän luominen STR_GENERATION_TREE_GENERATION :{BLACK}Puiden luominen STR_GENERATION_SETTINGUP_GAME :{BLACK}Valmistellaan peliä @@ -4916,7 +4919,7 @@ STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Peli tallennettiin versiossa, joka ei tue raitiovaunuja. Kaikki raitiovaunut on poistettu # Map generation messages -STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Kartan generointi peruutettu...{}... ei kelvollisia kuntien sijainteja +STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Kartan luominen peruutettu…{}… ei kelvollisia kuntien sijainteja STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... tässä skenaariossa ei ole yhtään kuntaa STR_ERROR_PNGMAP :{WHITE}Maastoa ei voida ladata PNG-tiedostosta... diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 160306d6d9..1d3871ed55 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -3485,8 +3485,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Σίγ STR_GENERATION_PROGRESS :{WHITE}{NUM}% ολοκληρώθηκε STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Δημιουργία κόσμου +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Δημιουργία τοπίου STR_GENERATION_RIVER_GENERATION :{BLACK}Δημιουργία ποταμού STR_GENERATION_CLEARING_TILES :{BLACK}Δημιουργία άγριας και πετρώδης περιοχής +STR_GENERATION_TOWN_GENERATION :{BLACK}Δημιουργία πόλης +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Δημιουργία βιομηχανίας STR_GENERATION_OBJECT_GENERATION :{BLACK}Δημιουργία μη μετακινούμενων STR_GENERATION_TREE_GENERATION :{BLACK}Δημιουργία δέντρων STR_GENERATION_SETTINGUP_GAME :{BLACK}Ρύθμιση παιχνιδιού diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 4cc8553c24..7e11333ea3 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -3394,8 +3394,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Quer me STR_GENERATION_PROGRESS :{WHITE}{NUM}% completo STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}A gerar mundo +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Geração de paisagem STR_GENERATION_RIVER_GENERATION :{BLACK}A gerar rios STR_GENERATION_CLEARING_TILES :{BLACK}A gerar zonas rochosas e montanhosas +STR_GENERATION_TOWN_GENERATION :{BLACK}Geração de localidades +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Geração de indústrias STR_GENERATION_OBJECT_GENERATION :{BLACK}Geração inamovível STR_GENERATION_TREE_GENERATION :{BLACK}A gerar árvores STR_GENERATION_SETTINGUP_GAME :{BLACK}Definindo jogo diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 97a213b717..35282a7f7a 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -3568,8 +3568,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Вы д STR_GENERATION_PROGRESS :{WHITE}{NUM}% готово STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Создание мира +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Создание ландшафта STR_GENERATION_RIVER_GENERATION :{BLACK}Создание рек STR_GENERATION_CLEARING_TILES :{BLACK}Расстановка декораций и камней +STR_GENERATION_TOWN_GENERATION :{BLACK}Создание городов +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Создание предприятий STR_GENERATION_OBJECT_GENERATION :{BLACK}Создание объектов STR_GENERATION_TREE_GENERATION :{BLACK}Высадка лесов STR_GENERATION_SETTINGUP_GAME :{BLACK}Настройка diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 38b6d879d8..c71907164d 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -2602,6 +2602,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :geçersiz ya da STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :yanlış düzeltme STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :isim kullanımda STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :yanlış parola +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :izin verilenler listesinde değil STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :DoCommand için yanlış company-id STR_NETWORK_ERROR_CLIENT_KICKED :sunucu tarafından atıldı STR_NETWORK_ERROR_CLIENT_CHEATER :hile yapmaya çalıştı @@ -3392,8 +3393,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Oluştu STR_GENERATION_PROGRESS :{WHITE}%{NUM} tamamlandı STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Harita üretimi +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Peyzaj oluşumu STR_GENERATION_RIVER_GENERATION :{BLACK}Nehir oluşturma STR_GENERATION_CLEARING_TILES :{BLACK}Engebeli ve kayalık alan oluştur +STR_GENERATION_TOWN_GENERATION :{BLACK}Kasaba Oluşumu +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Endüstri Oluşumu STR_GENERATION_OBJECT_GENERATION :{BLACK}Nesne oluşturma STR_GENERATION_TREE_GENERATION :{BLACK}Ağaç üretimi STR_GENERATION_SETTINGUP_GAME :{BLACK}Oyun ayarlanıyor @@ -3487,6 +3491,7 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Yol türü: STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF değişkeni 60+x parametresi (onaltılı) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Hizalanan Görüntü: ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sonraki nesne STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Tüm sahte/yeniden renklendirme/yazı tipi nesnelerini ve sondaki nesneden atlayarak bir sonraki normal nesneye geç STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Nesneye git @@ -5279,6 +5284,8 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Yeni New STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Henüz hiçbir araç kullanılabilir değil STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}{DATE_SHORT} sonra yeni bir oyun başlat veya erken araç sağlayan NewGRF kullan +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Kasabada inşa edilebilir yol türleri mevcut değil +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}NewGRF Yapılandırma Ayarlarını Değiştir # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Tehlikedeki tren sinyali geçemez... From 3814adaba8b99304bff7d7ad2e6d5af36ad154c9 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 22 Apr 2024 20:00:14 +0100 Subject: [PATCH 388/695] Codechange: Simplify GetScrolledItemFromWidget() (#12556) Return `auto`, which allows working with const containers, and use std::next instead of std::advance. --- src/widget_type.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/widget_type.h b/src/widget_type.h index 9a27132873..8655dd2d1d 100644 --- a/src/widget_type.h +++ b/src/widget_type.h @@ -875,15 +875,13 @@ public: * @return Iterator to the element clicked at. If clicked at a wrong position, returns as interator to the end of the container. */ template - typename Tcontainer::iterator GetScrolledItemFromWidget(Tcontainer &container, int clickpos, const Window * const w, WidgetID widget, int padding = 0, int line_height = -1) const + auto GetScrolledItemFromWidget(Tcontainer &container, int clickpos, const Window * const w, WidgetID widget, int padding = 0, int line_height = -1) const { assert(static_cast(this->GetCount()) == container.size()); // Scrollbar and container size must match. size_type row = this->GetScrolledRowFromWidget(clickpos, w, widget, padding, line_height); if (row == Scrollbar::npos) return std::end(container); - typename Tcontainer::iterator it = std::begin(container); - std::advance(it, row); - return it; + return std::next(std::begin(container), row); } EventState UpdateListPositionOnKeyPress(int &list_position, uint16_t keycode) const; From 95de90dd4e83961b45941b56b35a7b25d96e32b8 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 23 Apr 2024 04:40:32 +0000 Subject: [PATCH 389/695] Update: Translations from eints norwegian (bokmal): 7 changes by eriksorngard danish: 7 changes by bscargo portuguese (brazilian): 4 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 8 ++++---- src/lang/danish.txt | 7 +++++++ src/lang/norwegian_bokmal.txt | 7 +++++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 7791265f3c..9d6c001e99 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -2323,7 +2323,7 @@ STR_FACE_FACECODE :{BLACK}Número STR_FACE_FACECODE_TOOLTIP :{BLACK}Ver e/ou definir o número de face do presidente da empresa STR_FACE_FACECODE_CAPTION :{WHITE}Ver e/ou definir número de face do presidente STR_FACE_FACECODE_SET :{WHITE}Novo código de número de face foi definido -STR_FACE_FACECODE_ERR :{WHITE}Não foi possível alterar o número de face do presidente - deve ser um número entre 0 e 4,294,967,295! +STR_FACE_FACECODE_ERR :{WHITE}Não foi possível definir o número de face do presidente - deve ser um número entre 0 e 4,294,967,295! STR_FACE_SAVE :{BLACK}Salvar STR_FACE_SAVE_TOOLTIP :{BLACK}Salvar face favorita STR_FACE_SAVE_DONE :{WHITE}Esta face será armazenada como sua favorita no arquivo de configuração do OpenTTD @@ -4925,7 +4925,7 @@ STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... não STR_ERROR_PNGMAP :{WHITE}Não foi possível carregar paisagem de PNG... STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... arquivo não foi encontrado -STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... não foi possível converter o tipo de imagem. A imagem deve ser PNG de 8 ou 24-bit +STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... não foi possível converter o tipo de imagem. A imagem precisa ser PNG de 8 ou 24-bit STR_ERROR_PNGMAP_MISC :{WHITE}... alguma coisa deu errado (provavelmente arquivo corrompido) STR_ERROR_BMPMAP :{WHITE}Não foi possível carregar paisagem de BMP... @@ -4955,10 +4955,10 @@ STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY :{YELLOW}Mensage STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Fora do mapa STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Muito perto da borda do mapa STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Dinheiro insuficiente - é necessário {CURRENCY_LONG} -STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}O terreno deve ser plano +STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}O terreno precisa ser plano STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Terreno inclinado na direção errada STR_ERROR_CAN_T_DO_THIS :{WHITE}Não é possível fazer isto... -STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}A construção deve ser demolida primeiro +STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}A construção precisa ser demolida primeiro STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Não é possível limpar esta área... STR_ERROR_SITE_UNSUITABLE :{WHITE}... local não adequado STR_ERROR_ALREADY_BUILT :{WHITE}... já construído diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 95e9051c4f..43315a6951 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -3393,8 +3393,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Vil du STR_GENERATION_PROGRESS :{WHITE}{NUM}% færdig STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Verdensgenerering +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landskabs generering STR_GENERATION_RIVER_GENERATION :{BLACK}Flod-generering STR_GENERATION_CLEARING_TILES :{BLACK}Generer råt og stenet område +STR_GENERATION_TOWN_GENERATION :{BLACK}By generation +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Industri generation STR_GENERATION_OBJECT_GENERATION :{BLACK}Ikke-flytbar generering STR_GENERATION_TREE_GENERATION :{BLACK}Trægenerering STR_GENERATION_SETTINGUP_GAME :{BLACK}Klargør spil @@ -5286,6 +5289,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Skift di STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Ingen køretøjer er tilgængelige endnu STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Start et nyt spil efter {DATE_SHORT} eller brug en NewGRF der giver tidlige køretøjer +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Der findes ingen vejtyper, der kan bygges i by +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Skift din NewGRF konfiguration +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Der er endnu ingen tilgængelige vejtyper, der kan bygges i byer +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Start et nyt spil efter{DATE_SHORT} eller brug en NewGRF, der leverer vejtyper, der kan bygges tidligt i byen # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan ikke få toget til at passere signalet... diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 8bfd49fd7e..965b14c33b 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -3395,8 +3395,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Vil du STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% ferdig STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generer en verden +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landskapsgenerering STR_GENERATION_RIVER_GENERATION :{BLACK}Skap elver STR_GENERATION_CLEARING_TILES :{BLACK}Generering av ulendt og steinete område +STR_GENERATION_TOWN_GENERATION :{BLACK}Bygenerering +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Industrigenerering STR_GENERATION_OBJECT_GENERATION :{BLACK}Objektgenerering STR_GENERATION_TREE_GENERATION :{BLACK}Tregenerering STR_GENERATION_SETTINGUP_GAME :{BLACK}Klargjør spillet @@ -5288,6 +5291,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Endre di STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Ingen kjøretøyer er tilgjengelig ennå STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Starte et nytt spill etter {DATE_SHORT}, eller bruke en NewGRF som inneholder tidlige kjøretøy +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Ingen veityper som kan bygges i byer er tilgjengelig +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Endre NewGRF-innstillingene dine +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Ingen veityper som kan bygges i byer er tilgjengelig ennå +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Start et nytt spill etter {DATE_SHORT} eller bruk en NewGRF som tilbyr tidlige veityper som kan bygges av byer # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan ikke tvinge tog til å passere signal ved fare... From bef11941c6acd42429e45dbad50722dd857cb4ee Mon Sep 17 00:00:00 2001 From: Koen Bussemaker Date: Mon, 4 Mar 2024 21:56:53 +0100 Subject: [PATCH 390/695] Change: Allow rail and road depot overbuilding in current orientation in order to connect to rail or road --- regression/regression/result.txt | 16 ++++++++-------- src/rail_cmd.cpp | 2 +- src/road_cmd.cpp | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/regression/regression/result.txt b/regression/regression/result.txt index 8eedd0d71e..8abbcb7e48 100644 --- a/regression/regression/result.txt +++ b/regression/regression/result.txt @@ -7510,7 +7510,7 @@ ERROR: IsEnd() is invalid as Begin() is never called BuildRailDepot(): false BuildRailDepot(): true BuildRailDepot(): true - BuildRailDepot(): false + BuildRailDepot(): true GetRailDepotFrontTile(): 33412 IsBuildable(): false DepotList @@ -7604,12 +7604,12 @@ ERROR: IsEnd() is invalid as Begin() is never called BuildRoadDepot(): false BuildRoadDepot(): true BuildRoadDepot(): true - BuildRoadDepot(): false + BuildRoadDepot(): true HasRoadType(Road): true HasRoadType(Tram): false - GetLastError(): 259 - GetLastErrorString(): ERR_ALREADY_BUILT - GetErrorCategory(): 1 + GetLastError(): 0 + GetLastErrorString(): ERR_NONE + GetErrorCategory(): 0 IsRoadTile(): false GetRoadDepotFrontTile(): 33412 IsRoadDepotTile(): true @@ -9471,7 +9471,7 @@ ERROR: IsEnd() is invalid as Begin() is never called IsStoppedInDepot(): false --Accounting-- GetCosts(): -5947 - Should be: -5946 + Should be: -5947 GetName(): Road Vehicle #1 SetName(): true GetName(): MyVehicleName @@ -9485,7 +9485,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetAgeLeft(): 5489 GetCurrentSpeed(): 7 GetRunningCost(): 421 - GetProfitThisYear(): -1 + GetProfitThisYear(): 0 GetProfitLastYear(): 0 GetCurrentValue(): 5947 GetVehicleType(): 1 @@ -9604,7 +9604,7 @@ ERROR: IsEnd() is invalid as Begin() is never called 16 => 0 14 => 0 13 => 0 - 12 => -1 + 12 => 0 ProfitLastYear ListDump: 17 => 0 16 => 0 diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 918bfe1421..0429661eda 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -989,7 +989,7 @@ CommandCost CmdBuildTrainDepot(DoCommandFlag flags, TileIndex tile, RailType rai CommandCost ret = CheckTileOwnership(tile); if (ret.Failed()) return ret; - if (dir == GetRailDepotDirection(tile)) return_cmd_error(STR_ERROR_ALREADY_BUILT); + if (dir == GetRailDepotDirection(tile)) return CommandCost(); ret = EnsureNoVehicleOnGround(tile); if (ret.Failed()) return ret; diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index e575f1e0db..eee9e24efb 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -1167,7 +1167,7 @@ CommandCost CmdBuildRoadDepot(DoCommandFlag flags, TileIndex tile, RoadType rt, CommandCost ret = CheckTileOwnership(tile); if (ret.Failed()) return ret; - if (dir == GetRoadDepotDirection(tile)) return_cmd_error(STR_ERROR_ALREADY_BUILT); + if (dir == GetRoadDepotDirection(tile)) return CommandCost(); ret = EnsureNoVehicleOnGround(tile); if (ret.Failed()) return ret; From ac6a945e268cd66346c8f224a70996a919d60a4b Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 23 Apr 2024 17:05:08 +0100 Subject: [PATCH 391/695] Revert 2408a68910: Remove work around for an MSVC bug from 17 years ago. (#12557) --- src/fileio.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index 803baa60f2..6c07e52a93 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -212,10 +212,6 @@ static FILE *FioFOpenFileSp(const std::string &filename, const char *mode, Searc buf = _searchpaths[sp] + _subdirs[subdir] + filename; } -#if defined(_WIN32) - if (mode[0] == 'r' && GetFileAttributes(OTTD2FS(buf).c_str()) == INVALID_FILE_ATTRIBUTES) return nullptr; -#endif - f = fopen(buf.c_str(), mode); #if !defined(_WIN32) if (f == nullptr && strtolower(buf, subdir == NO_DIRECTORY ? 0 : _searchpaths[sp].size() - 1) ) { From 9121770582006ed4b2801d9022f495994fc3c4be Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 24 Apr 2024 04:40:54 +0000 Subject: [PATCH 392/695] Update: Translations from eints korean: 3 changes by telk5093 catalan: 3 changes by J0anJosep french: 7 changes by ottdfevr polish: 7 changes by pAter-exe --- src/lang/catalan.txt | 3 +++ src/lang/french.txt | 7 +++++++ src/lang/korean.txt | 3 +++ src/lang/polish.txt | 11 +++++++---- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 288989ff7c..7007438e45 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -3394,8 +3394,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Realmen STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% complet STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generació del món +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Generació del terreny STR_GENERATION_RIVER_GENERATION :{BLACK}Generació de rius STR_GENERATION_CLEARING_TILES :{BLACK}Generació d'una àrea escarpada i rocosa +STR_GENERATION_TOWN_GENERATION :{BLACK}Generació de poblacions +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Generació d'indústries STR_GENERATION_OBJECT_GENERATION :{BLACK}Generació inamovible STR_GENERATION_TREE_GENERATION :{BLACK}Generació d'arbres STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurant la partida diff --git a/src/lang/french.txt b/src/lang/french.txt index 55fceaaf01..6dff3f4861 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -3394,8 +3394,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Voulez- STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% réalisé{P "" s} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Création du monde +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Génération du terrain STR_GENERATION_RIVER_GENERATION :{BLACK}Création des rivières STR_GENERATION_CLEARING_TILES :{BLACK}Création des zones rugueuses et rocheuses +STR_GENERATION_TOWN_GENERATION :{BLACK}Génération des villes +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Génération des industries STR_GENERATION_OBJECT_GENERATION :{BLACK}Création des objets inamovibles STR_GENERATION_TREE_GENERATION :{BLACK}Création des arbres STR_GENERATION_SETTINGUP_GAME :{BLACK}Configuration du jeu @@ -5287,6 +5290,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Modifier STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Il n'y a pas encore de véhicules disponibles STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Commencer un nouvelle partie après {DATE_SHORT} ou utiliser un NewGRF qui propose des véhicules plus tôt +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Aucun type de route disponible pour les villes +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Modifiez votre configuration NewGRF +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Aucun type de route pour les villes disponible pour le moment +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Commencez une nouvelle partie après {DATE_SHORT} ou utilisez un NewGRF pourvoyant des routes plus tôt pour les villes. # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Impossible de forcer le train à avancer sous le danger... diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 1412662ab0..d425ac4e00 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -3394,8 +3394,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}세계 STR_GENERATION_PROGRESS :{WHITE}{NUM}% 완료 STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}지형 만드는 중 +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}지형 생성 STR_GENERATION_RIVER_GENERATION :{BLACK}강 제작 STR_GENERATION_CLEARING_TILES :{BLACK}거친 암석지대 만드는 중 +STR_GENERATION_TOWN_GENERATION :{BLACK}도시 생성 +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}산업시설 생성 STR_GENERATION_OBJECT_GENERATION :{BLACK}움직일수 없는 객체 만드는 중 STR_GENERATION_TREE_GENERATION :{BLACK}나무 심는 중 STR_GENERATION_SETTINGUP_GAME :{BLACK}게임 설정 중 diff --git a/src/lang/polish.txt b/src/lang/polish.txt index c93d7972a9..74add35f87 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3773,11 +3773,14 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Czy na STR_GENERATION_PROGRESS :{WHITE}Ukończono w {NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Tworzenie świata -STR_GENERATION_RIVER_GENERATION :{BLACK}Generator rzek +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Tworzenie krajobrazu +STR_GENERATION_RIVER_GENERATION :{BLACK}Tworzenie rzek STR_GENERATION_CLEARING_TILES :{BLACK}Tworzenie terenów skalistych i nierówności -STR_GENERATION_OBJECT_GENERATION :{BLACK}Tworzenie obiektów -STR_GENERATION_TREE_GENERATION :{BLACK}Tworzenie drzew -STR_GENERATION_SETTINGUP_GAME :{BLACK}Ustawianie gry +STR_GENERATION_TOWN_GENERATION :{BLACK}Tworzenie miast +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Rozmieszczanie przedsiębiorstw +STR_GENERATION_OBJECT_GENERATION :{BLACK}Rozmieszczanie obiektów +STR_GENERATION_TREE_GENERATION :{BLACK}Rozmieszczanie drzew +STR_GENERATION_SETTINGUP_GAME :{BLACK}Konfigurowanie rozgrywki STR_GENERATION_PREPARING_TILELOOP :{BLACK}Uaktywnianie pól STR_GENERATION_PREPARING_SCRIPT :{BLACK}Uruchamianie skryptu STR_GENERATION_PREPARING_GAME :{BLACK}Przygotowywanie gry From 5e689ce25e574a3d220d45b22a4d81413224a0f5 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 24 Apr 2024 21:26:07 +0100 Subject: [PATCH 393/695] Codechange: Store cursor sprites in vector. (#12564) Combine two separate fixed length arrays to allow simpler iteration. No need to check that arrays are all the same length. No need to separately store the number of sprites to draw. Removes the upper limit of the number of sprites that can be drawn. Removes lengthof and array indices. --- src/gfx.cpp | 40 +++++++++++++++++++++------------------- src/gfx_type.h | 11 ++++++++--- src/vehicle_gui.cpp | 14 ++++---------- src/video/opengl.cpp | 29 +++++++++++------------------ src/video/opengl.h | 4 +--- 5 files changed, 45 insertions(+), 53 deletions(-) diff --git a/src/gfx.cpp b/src/gfx.cpp index 36f62a129d..0292dff16a 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -1363,8 +1363,8 @@ void DrawMouseCursor() /* Draw cursor on screen */ _cur_dpi = &_screen; - for (uint i = 0; i < _cursor.sprite_count; ++i) { - DrawSprite(_cursor.sprite_seq[i].sprite, _cursor.sprite_seq[i].pal, _cursor.pos.x + _cursor.sprite_pos[i].x, _cursor.pos.y + _cursor.sprite_pos[i].y); + for (const auto &cs : _cursor.sprites) { + DrawSprite(cs.image.sprite, cs.image.pal, _cursor.pos.x + cs.pos.x, _cursor.pos.y + cs.pos.y); } VideoDriver::GetInstance()->MakeDirty(_cursor.draw_pos.x, _cursor.draw_pos.y, _cursor.draw_size.x, _cursor.draw_size.y); @@ -1615,20 +1615,22 @@ void UpdateCursorSize() /* Ignore setting any cursor before the sprites are loaded. */ if (GetMaxSpriteID() == 0) return; - static_assert(lengthof(_cursor.sprite_seq) == lengthof(_cursor.sprite_pos)); - assert(_cursor.sprite_count <= lengthof(_cursor.sprite_seq)); - for (uint i = 0; i < _cursor.sprite_count; ++i) { - const Sprite *p = GetSprite(GB(_cursor.sprite_seq[i].sprite, 0, SPRITE_WIDTH), SpriteType::Normal); + bool first = true; + for (const auto &cs : _cursor.sprites) { + const Sprite *p = GetSprite(GB(cs.image.sprite, 0, SPRITE_WIDTH), SpriteType::Normal); Point offs, size; - offs.x = UnScaleGUI(p->x_offs) + _cursor.sprite_pos[i].x; - offs.y = UnScaleGUI(p->y_offs) + _cursor.sprite_pos[i].y; + offs.x = UnScaleGUI(p->x_offs) + cs.pos.x; + offs.y = UnScaleGUI(p->y_offs) + cs.pos.y; size.x = UnScaleGUI(p->width); size.y = UnScaleGUI(p->height); - if (i == 0) { + if (first) { + /* First sprite sets the total. */ _cursor.total_offs = offs; _cursor.total_size = size; + first = false; } else { + /* Additional sprites expand the total. */ int right = std::max(_cursor.total_offs.x + _cursor.total_size.x, offs.x + size.x); int bottom = std::max(_cursor.total_offs.y + _cursor.total_size.y, offs.y + size.y); if (offs.x < _cursor.total_offs.x) _cursor.total_offs.x = offs.x; @@ -1648,13 +1650,10 @@ void UpdateCursorSize() */ static void SetCursorSprite(CursorID cursor, PaletteID pal) { - if (_cursor.sprite_count == 1 && _cursor.sprite_seq[0].sprite == cursor && _cursor.sprite_seq[0].pal == pal) return; + if (_cursor.sprites.size() == 1 && _cursor.sprites[0].image.sprite == cursor && _cursor.sprites[0].image.pal == pal) return; - _cursor.sprite_count = 1; - _cursor.sprite_seq[0].sprite = cursor; - _cursor.sprite_seq[0].pal = pal; - _cursor.sprite_pos[0].x = 0; - _cursor.sprite_pos[0].y = 0; + _cursor.sprites.clear(); + _cursor.sprites.emplace_back(cursor, pal, 0, 0); UpdateCursorSize(); } @@ -1665,7 +1664,8 @@ static void SwitchAnimatedCursor() if (cur == nullptr || cur->sprite == AnimCursor::LAST) cur = _cursor.animate_list; - SetCursorSprite(cur->sprite, _cursor.sprite_seq[0].pal); + assert(!_cursor.sprites.empty()); + SetCursorSprite(cur->sprite, _cursor.sprites[0].image.pal); _cursor.animate_timeout = cur->display_time; _cursor.animate_cur = cur + 1; @@ -1684,10 +1684,11 @@ void CursorTick() */ void SetMouseCursorBusy(bool busy) { + assert(!_cursor.sprites.empty()); if (busy) { - if (_cursor.sprite_seq[0].sprite == SPR_CURSOR_MOUSE) SetMouseCursor(SPR_CURSOR_ZZZ, PAL_NONE); + if (_cursor.sprites[0].image.sprite == SPR_CURSOR_MOUSE) SetMouseCursor(SPR_CURSOR_ZZZ, PAL_NONE); } else { - if (_cursor.sprite_seq[0].sprite == SPR_CURSOR_ZZZ) SetMouseCursor(SPR_CURSOR_MOUSE, PAL_NONE); + if (_cursor.sprites[0].image.sprite == SPR_CURSOR_ZZZ) SetMouseCursor(SPR_CURSOR_MOUSE, PAL_NONE); } } @@ -1712,9 +1713,10 @@ void SetMouseCursor(CursorID sprite, PaletteID pal) */ void SetAnimatedMouseCursor(const AnimCursor *table) { + assert(!_cursor.sprites.empty()); _cursor.animate_list = table; _cursor.animate_cur = nullptr; - _cursor.sprite_seq[0].pal = PAL_NONE; + _cursor.sprites[0].image.pal = PAL_NONE; SwitchAnimatedCursor(); } diff --git a/src/gfx_type.h b/src/gfx_type.h index c71819c7ad..c6866f46e2 100644 --- a/src/gfx_type.h +++ b/src/gfx_type.h @@ -112,6 +112,13 @@ struct AnimCursor { uint8_t display_time; ///< Amount of ticks this sprite will be shown }; +struct CursorSprite { + PalSpriteID image; ///< Image. + Point pos; ///< Relative position. + + constexpr CursorSprite(SpriteID spr, PaletteID pal, int x, int y) : image({spr, pal}), pos({x, y}) {} +}; + /** Collection of variables for cursor-display and -animation */ struct CursorVars { /* Logical mouse position */ @@ -126,9 +133,7 @@ struct CursorVars { int h_wheel; /* Mouse appearance */ - PalSpriteID sprite_seq[16]; ///< current image of cursor - Point sprite_pos[16]; ///< relative position of individual sprites - uint sprite_count; ///< number of sprites to draw + std::vector sprites; ///< Sprites comprising cursor. Point total_offs, total_size; ///< union of sprite properties Point draw_pos, draw_size; ///< position and size bounding-box for drawing diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 3849518303..93efd79c4e 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -3537,7 +3537,7 @@ void SetMouseCursorVehicle(const Vehicle *v, EngineImageType image_type) { bool rtl = _current_text_dir == TD_RTL; - _cursor.sprite_count = 0; + _cursor.sprites.clear(); int total_width = 0; int y_offset = 0; bool rotor_seq = false; // Whether to draw the rotor of the vehicle in this step. @@ -3557,18 +3557,12 @@ void SetMouseCursorVehicle(const Vehicle *v, EngineImageType image_type) v->GetImage(rtl ? DIR_E : DIR_W, image_type, &seq); } - if (_cursor.sprite_count + seq.count > lengthof(_cursor.sprite_seq)) break; - int x_offs = 0; if (v->type == VEH_TRAIN) x_offs = Train::From(v)->GetCursorImageOffset(); for (uint i = 0; i < seq.count; ++i) { PaletteID pal2 = (v->vehstatus & VS_CRASHED) || !seq.seq[i].pal ? pal : seq.seq[i].pal; - _cursor.sprite_seq[_cursor.sprite_count].sprite = seq.seq[i].sprite; - _cursor.sprite_seq[_cursor.sprite_count].pal = pal2; - _cursor.sprite_pos[_cursor.sprite_count].x = rtl ? (-total_width + x_offs) : (total_width + x_offs); - _cursor.sprite_pos[_cursor.sprite_count].y = y_offset; - _cursor.sprite_count++; + _cursor.sprites.emplace_back(seq.seq[i].sprite, pal2, rtl ? (-total_width + x_offs) : (total_width + x_offs), y_offset); } if (v->type == VEH_AIRCRAFT && v->subtype == AIR_HELICOPTER && !rotor_seq) { @@ -3584,8 +3578,8 @@ void SetMouseCursorVehicle(const Vehicle *v, EngineImageType image_type) /* Center trains and road vehicles on the front vehicle */ int offs = (ScaleSpriteTrad(VEHICLEINFO_FULL_VEHICLE_WIDTH) - total_width) / 2; if (rtl) offs = -offs; - for (uint i = 0; i < _cursor.sprite_count; ++i) { - _cursor.sprite_pos[i].x += offs; + for (auto &cs : _cursor.sprites) { + cs.pos.x += offs; } } diff --git a/src/video/opengl.cpp b/src/video/opengl.cpp index 5b49f34126..13920cb543 100644 --- a/src/video/opengl.cpp +++ b/src/video/opengl.cpp @@ -1074,16 +1074,14 @@ void OpenGLBackend::DrawMouseCursor() /* Draw cursor on screen */ _cur_dpi = &_screen; - for (uint i = 0; i < this->cursor_sprite_count; ++i) { - SpriteID sprite = this->cursor_sprite_seq[i].sprite; - + for (const auto &cs : this->cursor_sprites) { /* Sprites are cached by PopulateCursorCache(). */ - if (this->cursor_cache.Contains(sprite)) { - Sprite *spr = this->cursor_cache.Get(sprite); + if (this->cursor_cache.Contains(cs.image.sprite)) { + Sprite *spr = this->cursor_cache.Get(cs.image.sprite); - this->RenderOglSprite((OpenGLSprite *)spr->data, this->cursor_sprite_seq[i].pal, - this->cursor_pos.x + this->cursor_sprite_pos[i].x + UnScaleByZoom(spr->x_offs, ZOOM_LVL_GUI), - this->cursor_pos.y + this->cursor_sprite_pos[i].y + UnScaleByZoom(spr->y_offs, ZOOM_LVL_GUI), + this->RenderOglSprite((OpenGLSprite *)spr->data, cs.image.pal, + this->cursor_pos.x + cs.pos.x + UnScaleByZoom(spr->x_offs, ZOOM_LVL_GUI), + this->cursor_pos.y + cs.pos.y + UnScaleByZoom(spr->y_offs, ZOOM_LVL_GUI), ZOOM_LVL_GUI); } } @@ -1091,9 +1089,6 @@ void OpenGLBackend::DrawMouseCursor() void OpenGLBackend::PopulateCursorCache() { - static_assert(lengthof(_cursor.sprite_seq) == lengthof(this->cursor_sprite_seq)); - static_assert(lengthof(_cursor.sprite_pos) == lengthof(this->cursor_sprite_pos)); - if (this->clear_cursor_cache) { /* We have a pending cursor cache clear to do first. */ this->clear_cursor_cache = false; @@ -1103,16 +1098,14 @@ void OpenGLBackend::PopulateCursorCache() } this->cursor_pos = _cursor.pos; - this->cursor_sprite_count = _cursor.sprite_count; this->cursor_in_window = _cursor.in_window; - for (uint i = 0; i < _cursor.sprite_count; ++i) { - this->cursor_sprite_seq[i] = _cursor.sprite_seq[i]; - this->cursor_sprite_pos[i] = _cursor.sprite_pos[i]; - SpriteID sprite = _cursor.sprite_seq[i].sprite; + this->cursor_sprites.clear(); + for (const auto &sc : _cursor.sprites) { + this->cursor_sprites.emplace_back(sc); - if (!this->cursor_cache.Contains(sprite)) { - Sprite *old = this->cursor_cache.Insert(sprite, (Sprite *)GetRawSprite(sprite, SpriteType::Normal, &SimpleSpriteAlloc, this)); + if (!this->cursor_cache.Contains(sc.image.sprite)) { + Sprite *old = this->cursor_cache.Insert(sc.image.sprite, (Sprite *)GetRawSprite(sc.image.sprite, SpriteType::Normal, &SimpleSpriteAlloc, this)); if (old != nullptr) { OpenGLSprite *gl_sprite = (OpenGLSprite *)old->data; gl_sprite->~OpenGLSprite(); diff --git a/src/video/opengl.h b/src/video/opengl.h index b143039b40..0fd706ffb2 100644 --- a/src/video/opengl.h +++ b/src/video/opengl.h @@ -65,9 +65,7 @@ private: Point cursor_pos; ///< Cursor position bool cursor_in_window; ///< Cursor inside this window - PalSpriteID cursor_sprite_seq[16]; ///< Current image of cursor - Point cursor_sprite_pos[16]; ///< Relative position of individual cursor sprites - uint cursor_sprite_count; ///< Number of cursor sprites to draw + std::vector cursor_sprites; ///< Sprites comprising cursor OpenGLBackend(); ~OpenGLBackend(); From e20f48799e5a830eb28b67c24e976b1f37f8b4ae Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 24 Apr 2024 21:26:31 +0100 Subject: [PATCH 394/695] Codechange: Make StringToContentType() clearer. (#12566) Decouples string to ContentType mapping from position within enum. Slightly less efficient, but removes lengthof, array indices, and casting. --- src/console_cmds.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 62a8e18c6d..781a93f8cc 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -2049,9 +2049,16 @@ DEF_CONSOLE_CMD(ConNetworkAuthorizedKey) /** Resolve a string to a content type. */ static ContentType StringToContentType(const char *str) { - static const char * const inv_lookup[] = { "", "base", "newgrf", "ai", "ailib", "scenario", "heightmap" }; - for (uint i = 1 /* there is no type 0 */; i < lengthof(inv_lookup); i++) { - if (StrEqualsIgnoreCase(str, inv_lookup[i])) return (ContentType)i; + static const std::initializer_list> content_types = { + {"base", CONTENT_TYPE_BASE_GRAPHICS}, + {"newgrf", CONTENT_TYPE_NEWGRF}, + {"ai", CONTENT_TYPE_AI}, + {"ailib", CONTENT_TYPE_AI_LIBRARY}, + {"scenario", CONTENT_TYPE_SCENARIO}, + {"heightmap", CONTENT_TYPE_HEIGHTMAP}, + }; + for (const auto &ct : content_types) { + if (StrEqualsIgnoreCase(str, ct.first)) return ct.second; } return CONTENT_TYPE_END; } From 6a3f50aa7291743eb87a774777aaba38284806f8 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 24 Apr 2024 21:29:12 +0100 Subject: [PATCH 395/695] Codechange: Replace separate EffectVehicle arrays. (#12565) Combine 3 separate arrays into a single struct. This keeps related data together, and avoids needing to check that each array is same length. Use of constexpr construct ensures data in the array is not default-initialised. Removes lengthof. --- src/effectvehicle.cpp | 80 ++++++++++++++----------------------------- 1 file changed, 26 insertions(+), 54 deletions(-) diff --git a/src/effectvehicle.cpp b/src/effectvehicle.cpp index e2fbea0102..8fe7b2b012 100644 --- a/src/effectvehicle.cpp +++ b/src/effectvehicle.cpp @@ -527,61 +527,33 @@ static bool BubbleTick(EffectVehicle *v) return true; } +struct EffectProcs { + using InitProc = void(EffectVehicle *); + using TickProc = bool(EffectVehicle *); -typedef void EffectInitProc(EffectVehicle *v); -typedef bool EffectTickProc(EffectVehicle *v); + InitProc *init_proc; ///< Function to initialise an effect vehicle after construction. + TickProc *tick_proc; ///< Functions for controlling effect vehicles at each tick. + TransparencyOption transparency; ///< Transparency option affecting the effect. -/** Functions to initialise an effect vehicle after construction. */ -static EffectInitProc * const _effect_init_procs[] = { - ChimneySmokeInit, // EV_CHIMNEY_SMOKE - SteamSmokeInit, // EV_STEAM_SMOKE - DieselSmokeInit, // EV_DIESEL_SMOKE - ElectricSparkInit, // EV_ELECTRIC_SPARK - SmokeInit, // EV_CRASH_SMOKE - ExplosionLargeInit, // EV_EXPLOSION_LARGE - BreakdownSmokeInit, // EV_BREAKDOWN_SMOKE - ExplosionSmallInit, // EV_EXPLOSION_SMALL - BulldozerInit, // EV_BULLDOZER - BubbleInit, // EV_BUBBLE - SmokeInit, // EV_BREAKDOWN_SMOKE_AIRCRAFT - SmokeInit, // EV_COPPER_MINE_SMOKE + constexpr EffectProcs(InitProc *init_proc, TickProc *tick_proc, TransparencyOption transparency) + : init_proc(init_proc), tick_proc(tick_proc), transparency(transparency) {} }; -static_assert(lengthof(_effect_init_procs) == EV_END); - -/** Functions for controlling effect vehicles at each tick. */ -static EffectTickProc * const _effect_tick_procs[] = { - ChimneySmokeTick, // EV_CHIMNEY_SMOKE - SteamSmokeTick, // EV_STEAM_SMOKE - DieselSmokeTick, // EV_DIESEL_SMOKE - ElectricSparkTick, // EV_ELECTRIC_SPARK - SmokeTick, // EV_CRASH_SMOKE - ExplosionLargeTick, // EV_EXPLOSION_LARGE - BreakdownSmokeTick, // EV_BREAKDOWN_SMOKE - ExplosionSmallTick, // EV_EXPLOSION_SMALL - BulldozerTick, // EV_BULLDOZER - BubbleTick, // EV_BUBBLE - SmokeTick, // EV_BREAKDOWN_SMOKE_AIRCRAFT - SmokeTick, // EV_COPPER_MINE_SMOKE -}; -static_assert(lengthof(_effect_tick_procs) == EV_END); - -/** Transparency options affecting the effects. */ -static const TransparencyOption _effect_transparency_options[] = { - TO_INDUSTRIES, // EV_CHIMNEY_SMOKE - TO_INVALID, // EV_STEAM_SMOKE - TO_INVALID, // EV_DIESEL_SMOKE - TO_INVALID, // EV_ELECTRIC_SPARK - TO_INVALID, // EV_CRASH_SMOKE - TO_INVALID, // EV_EXPLOSION_LARGE - TO_INVALID, // EV_BREAKDOWN_SMOKE - TO_INVALID, // EV_EXPLOSION_SMALL - TO_INVALID, // EV_BULLDOZER - TO_INDUSTRIES, // EV_BUBBLE - TO_INVALID, // EV_BREAKDOWN_SMOKE_AIRCRAFT - TO_INDUSTRIES, // EV_COPPER_MINE_SMOKE -}; -static_assert(lengthof(_effect_transparency_options) == EV_END); +/** Per-EffectVehicleType handling. */ +static std::array _effect_procs = {{ + { ChimneySmokeInit, ChimneySmokeTick, TO_INDUSTRIES }, // EV_CHIMNEY_SMOKE + { SteamSmokeInit, SteamSmokeTick, TO_INVALID }, // EV_STEAM_SMOKE + { DieselSmokeInit, DieselSmokeTick, TO_INVALID }, // EV_DIESEL_SMOKE + { ElectricSparkInit, ElectricSparkTick, TO_INVALID }, // EV_ELECTRIC_SPARK + { SmokeInit, SmokeTick, TO_INVALID }, // EV_CRASH_SMOKE + { ExplosionLargeInit, ExplosionLargeTick, TO_INVALID }, // EV_EXPLOSION_LARGE + { BreakdownSmokeInit, BreakdownSmokeTick, TO_INVALID }, // EV_BREAKDOWN_SMOKE + { ExplosionSmallInit, ExplosionSmallTick, TO_INVALID }, // EV_EXPLOSION_SMALL + { BulldozerInit, BulldozerTick, TO_INVALID }, // EV_BULLDOZER + { BubbleInit, BubbleTick, TO_INDUSTRIES }, // EV_BUBBLE + { SmokeInit, SmokeTick, TO_INVALID }, // EV_BREAKDOWN_SMOKE_AIRCRAFT + { SmokeInit, SmokeTick, TO_INDUSTRIES }, // EV_COPPER_MINE_SMOKE +}}; /** * Create an effect vehicle at a particular location. @@ -604,7 +576,7 @@ EffectVehicle *CreateEffectVehicle(int x, int y, int z, EffectVehicleType type) v->UpdateDeltaXY(); v->vehstatus = VS_UNCLICKABLE; - _effect_init_procs[type](v); + _effect_procs[type].init_proc(v); v->UpdatePositionAndViewport(); @@ -642,7 +614,7 @@ EffectVehicle *CreateEffectVehicleRel(const Vehicle *v, int x, int y, int z, Eff bool EffectVehicle::Tick() { - return _effect_tick_procs[this->subtype](this); + return _effect_procs[this->subtype].tick_proc(this); } void EffectVehicle::UpdateDeltaXY() @@ -660,5 +632,5 @@ void EffectVehicle::UpdateDeltaXY() */ TransparencyOption EffectVehicle::GetTransparencyOption() const { - return _effect_transparency_options[this->subtype]; + return _effect_procs[this->subtype].transparency; } From 1dc94d06709a5ec82888fc10b7c5dd8d24e4c1bc Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 24 Apr 2024 21:29:33 +0100 Subject: [PATCH 396/695] Codechange: Construct string_view with first+last. (#12568) Avoids needing to calculate size when we already have last. --- src/hotkeys.cpp | 2 +- src/saveload/gamelog_sl.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index 41b52469c1..2d41f43255 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -99,7 +99,7 @@ static uint16_t ParseCode(const char *start, const char *end) assert(start <= end); while (start < end && *start == ' ') start++; while (end > start && *end == ' ') end--; - std::string_view str{start, static_cast(end - start)}; + std::string_view str{start, end}; for (const auto &kn : _keycode_to_name) { if (StrEqualsIgnoreCase(str, kn.name)) { return kn.keycode; diff --git a/src/saveload/gamelog_sl.cpp b/src/saveload/gamelog_sl.cpp index c3354a1d97..fe85af5727 100644 --- a/src/saveload/gamelog_sl.cpp +++ b/src/saveload/gamelog_sl.cpp @@ -68,7 +68,7 @@ public: SlObject(lc, this->GetLoadDescription()); if (IsSavegameVersionBefore(SLV_STRING_GAMELOG)) { - static_cast(lc)->text = StrMakeValid(std::string_view(SlGamelogRevision::revision_text, lengthof(SlGamelogRevision::revision_text))); + static_cast(lc)->text = StrMakeValid(std::string_view(std::begin(SlGamelogRevision::revision_text), std::end(SlGamelogRevision::revision_text))); } } From 26bb87ebf15eafea5df620805943441bf718e5e0 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 24 Apr 2024 21:33:29 +0100 Subject: [PATCH 397/695] Codechange: Replace SaveLoad var length arrays with switch block and sizeof. (#12570) SlCalcConvMemLen(), SlCalcConfFileLen() and CalcOldVarLen() follow a pattern of looking up part of a value in an array. These function returns the size of bytes of a variable type, but is not very clear. Replace with a switch block instead. Removes lengthof, array indices, and magic numbers. --- src/saveload/oldloader.cpp | 20 ++++++++++++++++---- src/saveload/saveload.cpp | 37 ++++++++++++++++++++++++++----------- 2 files changed, 42 insertions(+), 15 deletions(-) diff --git a/src/saveload/oldloader.cpp b/src/saveload/oldloader.cpp index 8ec6f803c4..2150c9b902 100644 --- a/src/saveload/oldloader.cpp +++ b/src/saveload/oldloader.cpp @@ -33,12 +33,24 @@ static inline OldChunkType GetOldChunkType(OldChunkType type) {return (OldCh static inline OldChunkType GetOldChunkVarType(OldChunkType type) {return (OldChunkType)(GB(type, 8, 8) << 8);} static inline OldChunkType GetOldChunkFileType(OldChunkType type) {return (OldChunkType)(GB(type, 16, 8) << 16);} +/** + * Return expected size in bytes of a OldChunkType + * @param type OldChunkType to get size of. + * @return size of type in bytes. + */ static inline uint8_t CalcOldVarLen(OldChunkType type) { - static const uint8_t type_mem_size[] = {0, 1, 1, 2, 2, 4, 4, 8}; - uint8_t length = GB(type, 8, 8); - assert(length != 0 && length < lengthof(type_mem_size)); - return type_mem_size[length]; + switch (GetOldChunkVarType(type)) { + case OC_VAR_I8: return sizeof(int8_t); + case OC_VAR_U8: return sizeof(uint8_t); + case OC_VAR_I16: return sizeof(int16_t); + case OC_VAR_U16: return sizeof(uint16_t); + case OC_VAR_I32: return sizeof(int32_t); + case OC_VAR_U32: return sizeof(uint32_t); + case OC_VAR_I64: return sizeof(int64_t); + case OC_VAR_U64: return sizeof(uint64_t); + default: NOT_REACHED(); + } } /** diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 28b65ba920..e32c64a4ac 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -599,17 +599,25 @@ static uint8_t GetSavegameFileType(const SaveLoad &sld) */ static inline uint SlCalcConvMemLen(VarType conv) { - static const uint8_t conv_mem_size[] = {1, 1, 1, 2, 2, 4, 4, 8, 8, 0}; - switch (GetVarMemType(conv)) { + case SLE_VAR_BL: return sizeof(bool); + case SLE_VAR_I8: return sizeof(int8_t); + case SLE_VAR_U8: return sizeof(uint8_t); + case SLE_VAR_I16: return sizeof(int16_t); + case SLE_VAR_U16: return sizeof(uint16_t); + case SLE_VAR_I32: return sizeof(int32_t); + case SLE_VAR_U32: return sizeof(uint32_t); + case SLE_VAR_I64: return sizeof(int64_t); + case SLE_VAR_U64: return sizeof(uint64_t); + case SLE_VAR_NULL: return 0; + case SLE_VAR_STR: case SLE_VAR_STRQ: return SlReadArrayLength(); + case SLE_VAR_NAME: default: - uint8_t type = GetVarMemType(conv) >> 4; - assert(type < lengthof(conv_mem_size)); - return conv_mem_size[type]; + NOT_REACHED(); } } @@ -621,17 +629,24 @@ static inline uint SlCalcConvMemLen(VarType conv) */ static inline uint8_t SlCalcConvFileLen(VarType conv) { - static const uint8_t conv_file_size[] = {0, 1, 1, 2, 2, 4, 4, 8, 8, 2}; - switch (GetVarFileType(conv)) { + case SLE_FILE_END: return 0; + case SLE_FILE_I8: return sizeof(int8_t); + case SLE_FILE_U8: return sizeof(uint8_t); + case SLE_FILE_I16: return sizeof(int16_t); + case SLE_FILE_U16: return sizeof(uint16_t); + case SLE_FILE_I32: return sizeof(int32_t); + case SLE_FILE_U32: return sizeof(uint32_t); + case SLE_FILE_I64: return sizeof(int64_t); + case SLE_FILE_U64: return sizeof(uint64_t); + case SLE_FILE_STRINGID: return sizeof(uint16_t); + case SLE_FILE_STRING: return SlReadArrayLength(); + case SLE_FILE_STRUCT: default: - uint8_t type = GetVarFileType(conv); - if (type >= lengthof(conv_file_size)) fmt::println("{}", type); - assert(type < lengthof(conv_file_size)); - return conv_file_size[type]; + NOT_REACHED(); } } From 5159aa81d49a6c7807a50a8735ed6c3a83c52708 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 24 Apr 2024 21:33:49 +0100 Subject: [PATCH 398/695] Codechange: Use iterators when enabling industries. (#12569) Removes lengthof and array indices. --- src/industry_cmd.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 3f97162dad..d46ebe3d6f 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -82,9 +82,9 @@ void ResetIndustries() auto industry_insert = std::copy(std::begin(_origin_industry_specs), std::end(_origin_industry_specs), std::begin(_industry_specs)); std::fill(industry_insert, std::end(_industry_specs), IndustrySpec{}); - for (IndustryType i = 0; i < lengthof(_origin_industry_specs); i++) { - /* Enable only the current climate industries */ - _industry_specs[i].enabled = HasBit(_industry_specs[i].climate_availability, _settings_game.game_creation.landscape); + /* Enable only the current climate industries */ + for (auto it = std::begin(_industry_specs); it != industry_insert; ++it) { + it->enabled = HasBit(it->climate_availability, _settings_game.game_creation.landscape); } auto industry_tile_insert = std::copy(std::begin(_origin_industry_tile_specs), std::end(_origin_industry_tile_specs), std::begin(_industry_tile_specs)); From e8249e9075649aebdc3535093d7d7cfe8003dc3d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 24 Apr 2024 21:34:21 +0100 Subject: [PATCH 399/695] Codechange: Pass buffers for TarFile's ExtractString as span. (#12567) ExtractString does not need to find a string terminator as StrMakeValid already does this, so simply pass the full bounds of the buffer. Removes lengthof, array indices, and needs only the buffer as a parameter. --- src/fileio.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index 6c07e52a93..1458453958 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -473,17 +473,14 @@ bool TarScanner::AddFile(Subdirectory sd, const std::string &filename) * header contains garbage and is malicious. So, we cannot rely on the string * being properly terminated. * As such, do not use strlen to determine the actual length (explicitly or - * implictly via the std::string constructor), but also do not create a string - * of the buffer length as that makes the string contain essentially garbage. + * implictly via the std::string constructor), but pass the buffer bounds + * explicitly. * @param buffer The buffer to read from. - * @param buffer_length The length of the buffer to read from. * @return The string data. */ -static std::string ExtractString(char *buffer, size_t buffer_length) +static std::string ExtractString(std::span buffer) { - size_t length = 0; - for (; length < buffer_length && buffer[length] != '\0'; length++) {} - return StrMakeValid(std::string_view(buffer, length)); + return StrMakeValid(std::string_view(buffer.begin(), buffer.end())); } bool TarScanner::AddFile(const std::string &filename, size_t, [[maybe_unused]] const std::string &tar_filename) @@ -557,15 +554,15 @@ bool TarScanner::AddFile(const std::string &filename, size_t, [[maybe_unused]] c /* The prefix contains the directory-name */ if (th.prefix[0] != '\0') { - name = ExtractString(th.prefix, lengthof(th.prefix)); + name = ExtractString(th.prefix); name += PATHSEP; } /* Copy the name of the file in a safe way at the end of 'name' */ - name += ExtractString(th.name, lengthof(th.name)); + name += ExtractString(th.name); /* The size of the file, for some strange reason, this is stored as a string in octals. */ - std::string size = ExtractString(th.size, lengthof(th.size)); + std::string size = ExtractString(th.size); size_t skip = size.empty() ? 0 : std::stoul(size, nullptr, 8); switch (th.typeflag) { @@ -591,7 +588,7 @@ bool TarScanner::AddFile(const std::string &filename, size_t, [[maybe_unused]] c case '1': // hard links case '2': { // symbolic links /* Copy the destination of the link in a safe way at the end of 'linkname' */ - std::string link = ExtractString(th.linkname, lengthof(th.linkname)); + std::string link = ExtractString(th.linkname); if (name.empty() || link.empty()) break; From e8d25d68b9b34cb71c3303d03cb990f39fb66f04 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 25 Apr 2024 04:42:18 +0000 Subject: [PATCH 400/695] Update: Translations from eints russian: 2 changes by George-VB --- src/lang/russian.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 35282a7f7a..ed3d5d2169 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2375,7 +2375,7 @@ STR_QUIT_NO :{BLACK}Нет # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}В главное меню -STR_ABANDON_GAME_QUERY :{YELLOW}Вы действительно хотите выйти из игры? +STR_ABANDON_GAME_QUERY :{YELLOW}Вы уверены, что хотите выйти из игры? STR_ABANDON_SCENARIO_QUERY :{YELLOW}Вы уверены, что хотите выйти из этого сценария? # Help window @@ -3127,7 +3127,7 @@ STR_AIRPORT_CLASS_LARGE.nom :Средний STR_AIRPORT_CLASS_HUB :Большие аэропорты STR_AIRPORT_CLASS_HUB.nom :Большой STR_AIRPORT_CLASS_HELIPORTS :Вертолётные площадки -STR_AIRPORT_CLASS_HELIPORTS.nom :Вертолётный +STR_AIRPORT_CLASS_HELIPORTS.nom :Вертолётная STR_STATION_BUILD_NOISE :{BLACK}Производимый шум: {GOLD}{COMMA} From a4071b78d7cd076216ee886c4ae534671864ba1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Cheng?= Date: Mon, 25 Mar 2024 20:33:40 +0000 Subject: [PATCH 401/695] Codechange: Add callback to IntSettingDesc to support more default values --- src/settings_internal.h | 26 ++++++---- src/table/settings.h.preamble | 48 +++++++++---------- src/table/settings/company_settings.ini | 5 +- src/table/settings/currency_settings.ini | 3 +- src/table/settings/difficulty_settings.ini | 7 +-- src/table/settings/economy_settings.ini | 5 +- src/table/settings/game_settings.ini | 13 ++--- src/table/settings/gui_settings.ini | 7 +-- src/table/settings/linkgraph_settings.ini | 3 +- src/table/settings/locale_settings.ini | 5 +- src/table/settings/misc_settings.ini | 9 ++-- src/table/settings/multimedia_settings.ini | 5 +- .../settings/network_private_settings.ini | 5 +- src/table/settings/network_settings.ini | 7 +-- src/table/settings/news_display_settings.ini | 3 +- src/table/settings/old_gameopt_settings.ini | 13 ++--- src/table/settings/pathfinding_settings.ini | 5 +- src/table/settings/script_settings.ini | 7 +-- src/table/settings/win32_settings.ini | 5 +- src/table/settings/window_settings.ini | 5 +- src/table/settings/world_settings.ini | 7 +-- 21 files changed, 111 insertions(+), 82 deletions(-) diff --git a/src/settings_internal.h b/src/settings_internal.h index 177d00a324..e473b47334 100644 --- a/src/settings_internal.h +++ b/src/settings_internal.h @@ -164,6 +164,12 @@ struct IntSettingDesc : SettingDesc { * @param The new value for the setting. */ typedef void PostChangeCallback(int32_t value); + /** + * A callback to set the correct default value, in case it can be measured in time + * units or expressed as a percentage. + * @param value The prospective new value for the setting. + */ + typedef void GetDefaultValueCallback(int32_t &value); template < typename Tdef, @@ -178,11 +184,13 @@ struct IntSettingDesc : SettingDesc { IntSettingDesc(const SaveLoad &save, SettingFlag flags, bool startup, Tdef def, Tmin min, Tmax max, Tinterval interval, StringID str, StringID str_help, StringID str_val, SettingCategory cat, PreChangeCheck pre_check, PostChangeCallback post_callback, - GetTitleCallback get_title_cb, GetHelpCallback get_help_cb, SetValueDParamsCallback set_value_dparams_cb) : + GetTitleCallback get_title_cb, GetHelpCallback get_help_cb, SetValueDParamsCallback set_value_dparams_cb, + GetDefaultValueCallback get_def_cb) : SettingDesc(save, flags, startup), str(str), str_help(str_help), str_val(str_val), cat(cat), pre_check(pre_check), post_callback(post_callback), - get_title_cb(get_title_cb), get_help_cb(get_help_cb), set_value_dparams_cb(set_value_dparams_cb) { + get_title_cb(get_title_cb), get_help_cb(get_help_cb), set_value_dparams_cb(set_value_dparams_cb), + get_def_cb(get_def_cb) { if constexpr (std::is_base_of_v) { this->def = def.base(); } else { @@ -221,6 +229,7 @@ struct IntSettingDesc : SettingDesc { GetTitleCallback *get_title_cb; GetHelpCallback *get_help_cb; SetValueDParamsCallback *set_value_dparams_cb; + GetDefaultValueCallback *get_def_cb; ///< Callback to set the correct default value StringID GetTitle() const; StringID GetHelp() const; @@ -254,9 +263,10 @@ struct BoolSettingDesc : IntSettingDesc { BoolSettingDesc(const SaveLoad &save, SettingFlag flags, bool startup, bool def, StringID str, StringID str_help, StringID str_val, SettingCategory cat, PreChangeCheck pre_check, PostChangeCallback post_callback, - GetTitleCallback get_title_cb, GetHelpCallback get_help_cb, SetValueDParamsCallback set_value_dparams_cb) : + GetTitleCallback get_title_cb, GetHelpCallback get_help_cb, SetValueDParamsCallback set_value_dparams_cb, + GetDefaultValueCallback get_def_cb) : IntSettingDesc(save, flags, startup, def ? 1 : 0, 0, 1, 0, str, str_help, str_val, cat, - pre_check, post_callback, get_title_cb, get_help_cb, set_value_dparams_cb) {} + pre_check, post_callback, get_title_cb, get_help_cb, set_value_dparams_cb, get_def_cb) {} static std::optional ParseSingleValue(const char *str); @@ -273,9 +283,9 @@ struct OneOfManySettingDesc : IntSettingDesc { int32_t max, StringID str, StringID str_help, StringID str_val, SettingCategory cat, PreChangeCheck pre_check, PostChangeCallback post_callback, GetTitleCallback get_title_cb, GetHelpCallback get_help_cb, SetValueDParamsCallback set_value_dparams_cb, - std::initializer_list many, OnConvert *many_cnvt) : + GetDefaultValueCallback get_def_cb, std::initializer_list many, OnConvert *many_cnvt) : IntSettingDesc(save, flags, startup, def, 0, max, 0, str, str_help, str_val, cat, - pre_check, post_callback, get_title_cb, get_help_cb, set_value_dparams_cb), many_cnvt(many_cnvt) + pre_check, post_callback, get_title_cb, get_help_cb, set_value_dparams_cb, get_def_cb), many_cnvt(many_cnvt) { for (auto one : many) this->many.push_back(one); } @@ -296,9 +306,9 @@ struct ManyOfManySettingDesc : OneOfManySettingDesc { int32_t def, StringID str, StringID str_help, StringID str_val, SettingCategory cat, PreChangeCheck pre_check, PostChangeCallback post_callback, GetTitleCallback get_title_cb, GetHelpCallback get_help_cb, SetValueDParamsCallback set_value_dparams_cb, - std::initializer_list many, OnConvert *many_cnvt) : + GetDefaultValueCallback get_def_cb, std::initializer_list many, OnConvert *many_cnvt) : OneOfManySettingDesc(save, flags, startup, def, (1 << many.size()) - 1, str, str_help, - str_val, cat, pre_check, post_callback, get_title_cb, get_help_cb, set_value_dparams_cb, many, many_cnvt) {} + str_val, cat, pre_check, post_callback, get_title_cb, get_help_cb, set_value_dparams_cb, get_def_cb, many, many_cnvt) {} size_t ParseValue(const char *str) const override; std::string FormatValue(const void *object) const override; diff --git a/src/table/settings.h.preamble b/src/table/settings.h.preamble index 51ce3e083a..464ccfe853 100644 --- a/src/table/settings.h.preamble +++ b/src/table/settings.h.preamble @@ -58,11 +58,11 @@ static StringID SettingHelpWallclock(const IntSettingDesc &sd); /* Macros for various objects to go in the configuration file. * This section is for global variables */ -#define SDTG_VAR(name, type, flags, var, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, from, to, cat, extra, startup)\ - NSD(Int, SLEG_GENERAL(name, SL_VAR, var, type, 1, from, to, extra), flags, startup, def, min, max, interval, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook) +#define SDTG_VAR(name, type, flags, var, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup)\ + NSD(Int, SLEG_GENERAL(name, SL_VAR, var, type, 1, from, to, extra), flags, startup, def, min, max, interval, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook) -#define SDTG_BOOL(name, flags, var, def, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, from, to, cat, extra, startup)\ - NSD(Bool, SLEG_GENERAL(name, SL_VAR, var, SLE_BOOL, 1, from, to, extra), flags, startup, def, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook) +#define SDTG_BOOL(name, flags, var, def, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup)\ + NSD(Bool, SLEG_GENERAL(name, SL_VAR, var, SLE_BOOL, 1, from, to, extra), flags, startup, def, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook) #define SDTG_LIST(name, type, flags, var, def, length, from, to, cat, extra, startup)\ NSD(List, SLEG_GENERAL(name, SL_ARR, var, type, length, from, to, extra),flags, startup, def) @@ -70,22 +70,22 @@ static StringID SettingHelpWallclock(const IntSettingDesc &sd); #define SDTG_SSTR(name, type, flags, var, def, max_length, pre_check, post_callback, from, to, cat, extra, startup)\ NSD(String, SLEG_GENERAL(name, SL_STDSTR, var, type, sizeof(var), from, to, extra), flags, startup, def, max_length, pre_check, post_callback) -#define SDTG_OMANY(name, type, flags, var, def, max, full, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, from, to, cat, extra, startup)\ - NSD(OneOfMany, SLEG_GENERAL(name, SL_VAR, var, type, 1, from, to, extra), flags, startup, def, max, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, full, nullptr) +#define SDTG_OMANY(name, type, flags, var, def, max, full, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup)\ + NSD(OneOfMany, SLEG_GENERAL(name, SL_VAR, var, type, 1, from, to, extra), flags, startup, def, max, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, full, nullptr) -#define SDTG_MMANY(name, type, flags, var, def, full, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, from, to, cat, extra, startup)\ - NSD(ManyOfMany, SLEG_GENERAL(name, SL_VAR, var, type, 1, from, to, extra), flags, startup, def, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, full, nullptr) +#define SDTG_MMANY(name, type, flags, var, def, full, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup)\ + NSD(ManyOfMany, SLEG_GENERAL(name, SL_VAR, var, type, 1, from, to, extra), flags, startup, def, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, full, nullptr) /* Macros for various objects to go in the configuration file. * This section is for structures where their various members are saved */ -#define SDT_VAR(base, var, type, flags, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, from, to, cat, extra, startup)\ - NSD(Int, SLE_GENERAL(SL_VAR, base, var, type, 1, from, to, extra), flags, startup, def, min, max, interval, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook) +#define SDT_VAR(base, var, type, flags, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup)\ + NSD(Int, SLE_GENERAL(SL_VAR, base, var, type, 1, from, to, extra), flags, startup, def, min, max, interval, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook) -#define SDT_VAR_NAME(base, var, type, flags, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, from, to, cat, extra, startup, name)\ - NSD(Int, SLE_GENERAL_NAME(SL_VAR, name, base, var, type, 1, from, to, extra), flags, startup, def, min, max, interval, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook) +#define SDT_VAR_NAME(base, var, type, flags, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup, name)\ + NSD(Int, SLE_GENERAL_NAME(SL_VAR, name, base, var, type, 1, from, to, extra), flags, startup, def, min, max, interval, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook) -#define SDT_BOOL(base, var, flags, def, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, from, to, cat, extra, startup)\ - NSD(Bool, SLE_GENERAL(SL_VAR, base, var, SLE_BOOL, 1, from, to, extra), flags, startup, def, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook) +#define SDT_BOOL(base, var, flags, def, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup)\ + NSD(Bool, SLE_GENERAL(SL_VAR, base, var, SLE_BOOL, 1, from, to, extra), flags, startup, def, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook) #define SDT_LIST(base, var, type, flags, def, from, to, cat, extra, startup)\ NSD(List, SLE_GENERAL(SL_ARR, base, var, type, lengthof(((base*)8)->var), from, to, extra), flags, startup, def) @@ -93,18 +93,18 @@ static StringID SettingHelpWallclock(const IntSettingDesc &sd); #define SDT_SSTR(base, var, type, flags, def, pre_check, post_callback, from, to, cat, extra, startup)\ NSD(String, SLE_GENERAL(SL_STDSTR, base, var, type, sizeof(((base*)8)->var), from, to, extra), flags, startup, def, 0, pre_check, post_callback) -#define SDT_OMANY(base, var, type, flags, def, max, full, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, from, to, load, cat, extra, startup)\ - NSD(OneOfMany, SLE_GENERAL(SL_VAR, base, var, type, 1, from, to, extra), flags, startup, def, max, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, full, load) +#define SDT_OMANY(base, var, type, flags, def, max, full, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, load, cat, extra, startup)\ + NSD(OneOfMany, SLE_GENERAL(SL_VAR, base, var, type, 1, from, to, extra), flags, startup, def, max, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, full, load) -#define SDT_MMANY(base, var, type, flags, def, full, str, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, strhelp, strval, from, to, cat, extra, startup)\ - NSD(ManyOfMany, SLE_GENERAL(SL_VAR, base, var, type, 1, from, to, extra), flags, startup, def, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, full, nullptr) +#define SDT_MMANY(base, var, type, flags, def, full, str, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, strhelp, strval, from, to, cat, extra, startup)\ + NSD(ManyOfMany, SLE_GENERAL(SL_VAR, base, var, type, 1, from, to, extra), flags, startup, def, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, full, nullptr) -#define SDTC_VAR(var, type, flags, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, from, to, cat, extra, startup)\ - SDTG_VAR(#var, type, flags, _settings_client.var, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, from, to, cat, extra, startup) +#define SDTC_VAR(var, type, flags, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup)\ + SDTG_VAR(#var, type, flags, _settings_client.var, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup) -#define SDTC_BOOL(var, flags, def, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, from, to, cat, extra, startup)\ - SDTG_BOOL(#var, flags, _settings_client.var, def, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, from, to, cat, extra, startup) +#define SDTC_BOOL(var, flags, def, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup)\ + SDTG_BOOL(#var, flags, _settings_client.var, def, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup) #define SDTC_LIST(var, type, flags, def, from, to, cat, extra, startup)\ SDTG_LIST(#var, type, flags, _settings_client.var, def, lengthof(_settings_client.var), from, to, cat, extra, startup) @@ -112,5 +112,5 @@ static StringID SettingHelpWallclock(const IntSettingDesc &sd); #define SDTC_SSTR(var, type, flags, def, max_length, pre_check, post_callback, from, to, cat, extra, startup)\ SDTG_SSTR(#var, type, flags, _settings_client.var, def, max_length, pre_check, post_callback, from, to, cat, extra, startup)\ -#define SDTC_OMANY(var, type, flags, def, max, full, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, from, to, cat, extra, startup)\ - SDTG_OMANY(#var, type, flags, _settings_client.var, def, max, full, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, from, to, cat, extra, startup) +#define SDTC_OMANY(var, type, flags, def, max, full, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup)\ + SDTG_OMANY(#var, type, flags, _settings_client.var, def, max, full, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup) diff --git a/src/table/settings/company_settings.ini b/src/table/settings/company_settings.ini index 9c3b7a64ba..ad7a026887 100644 --- a/src/table/settings/company_settings.ini +++ b/src/table/settings/company_settings.ini @@ -17,8 +17,8 @@ static const SettingVariant _company_settings_table[] = { [post-amble] }; [templates] -SDT_BOOL = SDT_BOOL(CompanySettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDT_VAR = SDT_VAR(CompanySettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDT_BOOL = SDT_BOOL(CompanySettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDT_VAR = SDT_VAR(CompanySettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), [validation] SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for CompanySettings.$var exceeds storage size"); @@ -34,6 +34,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION diff --git a/src/table/settings/currency_settings.ini b/src/table/settings/currency_settings.ini index 84cc209bdb..2bc3c2328a 100644 --- a/src/table/settings/currency_settings.ini +++ b/src/table/settings/currency_settings.ini @@ -11,7 +11,7 @@ static const SettingVariant _currency_settings_table[] = { [post-amble] }; [templates] -SDT_VAR = SDT_VAR (CurrencySpec, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDT_VAR = SDT_VAR (CurrencySpec, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), SDT_SSTR = SDT_SSTR(CurrencySpec, $var, $type, $flags, $def, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup), [validation] @@ -28,6 +28,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION diff --git a/src/table/settings/difficulty_settings.ini b/src/table/settings/difficulty_settings.ini index 9503f99399..4e8e1044a9 100644 --- a/src/table/settings/difficulty_settings.ini +++ b/src/table/settings/difficulty_settings.ini @@ -20,9 +20,9 @@ static const SettingVariant _difficulty_settings_table[] = { [post-amble] }; [templates] -SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDT_VAR = SDT_VAR (GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), [validation] SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); @@ -39,6 +39,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION diff --git a/src/table/settings/economy_settings.ini b/src/table/settings/economy_settings.ini index eb920b7ceb..02a4e70de7 100644 --- a/src/table/settings/economy_settings.ini +++ b/src/table/settings/economy_settings.ini @@ -16,8 +16,8 @@ static const SettingVariant _economy_settings_table[] = { [post-amble] }; [templates] -SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDT_VAR = SDT_VAR (GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), [validation] SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size"); @@ -33,6 +33,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION diff --git a/src/table/settings/game_settings.ini b/src/table/settings/game_settings.ini index d77103d9d2..07adda5cc9 100644 --- a/src/table/settings/game_settings.ini +++ b/src/table/settings/game_settings.ini @@ -26,12 +26,12 @@ static const SettingVariant _game_settings_table[] = { [post-amble] }; [templates] -SDTG_BOOL = SDTG_BOOL($name, $flags, $var, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $load, $cat, $extra, $startup), -SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDTG_BOOL = SDTG_BOOL($name, $flags, $var, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $load, $cat, $extra, $startup), +SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), [validation] SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); @@ -49,6 +49,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION diff --git a/src/table/settings/gui_settings.ini b/src/table/settings/gui_settings.ini index 9adeed0029..903a9532a1 100644 --- a/src/table/settings/gui_settings.ini +++ b/src/table/settings/gui_settings.ini @@ -25,9 +25,9 @@ static const SettingVariant _gui_settings_table[] = { [post-amble] }; [templates] -SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDTC_VAR = SDTC_VAR( $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDTC_VAR = SDTC_VAR( $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), [validation] SDTC_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); @@ -44,6 +44,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION diff --git a/src/table/settings/linkgraph_settings.ini b/src/table/settings/linkgraph_settings.ini index 1144401912..0d19e7dba6 100644 --- a/src/table/settings/linkgraph_settings.ini +++ b/src/table/settings/linkgraph_settings.ini @@ -12,7 +12,7 @@ static const SettingVariant _linkgraph_settings_table[] = { [post-amble] }; [templates] -SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), [validation] SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size"); @@ -28,6 +28,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION diff --git a/src/table/settings/locale_settings.ini b/src/table/settings/locale_settings.ini index 7d23f4c7ae..efd1fb98c6 100644 --- a/src/table/settings/locale_settings.ini +++ b/src/table/settings/locale_settings.ini @@ -21,8 +21,8 @@ static const SettingVariant _locale_settings_table[] = { [post-amble] }; [templates] -SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $var, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $load, $cat, $extra, $startup), +SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $var, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $load, $cat, $extra, $startup), SDT_SSTR = SDT_SSTR(GameSettings, $var, $type, $flags, $def, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup), [validation] @@ -40,6 +40,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION diff --git a/src/table/settings/misc_settings.ini b/src/table/settings/misc_settings.ini index 49141ed014..0da92b33bd 100644 --- a/src/table/settings/misc_settings.ini +++ b/src/table/settings/misc_settings.ini @@ -25,11 +25,11 @@ static const SettingVariant _misc_settings_table[] = { }; [templates] SDTG_LIST = SDTG_LIST($name, $type, $flags, $var, $def, $length, $from, $to, $cat, $extra, $startup), -SDTG_MMANY = SDTG_MMANY($name, $type, $flags, $var, $def, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $var, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDTG_MMANY = SDTG_MMANY($name, $type, $flags, $var, $def, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $var, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), SDTG_SSTR = SDTG_SSTR($name, $type, $flags, $var, $def, 0, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup), -SDTG_BOOL = SDTG_BOOL($name, $flags, $var, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDTG_BOOL = SDTG_BOOL($name, $flags, $var, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), [validation] SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); @@ -46,6 +46,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION diff --git a/src/table/settings/multimedia_settings.ini b/src/table/settings/multimedia_settings.ini index 17579991c4..8d766a62d6 100644 --- a/src/table/settings/multimedia_settings.ini +++ b/src/table/settings/multimedia_settings.ini @@ -12,9 +12,9 @@ static const SettingVariant _multimedia_settings_table[] = { [post-amble] }; [templates] -SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), SDTC_LIST = SDTC_LIST( $var, $type, $flags, $def, $from, $to, $cat, $extra, $startup), -SDTC_VAR = SDTC_VAR( $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDTC_VAR = SDTC_VAR( $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), [validation] SDTC_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); @@ -30,6 +30,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION diff --git a/src/table/settings/network_private_settings.ini b/src/table/settings/network_private_settings.ini index 967dfb2054..6888cbe90e 100644 --- a/src/table/settings/network_private_settings.ini +++ b/src/table/settings/network_private_settings.ini @@ -14,8 +14,8 @@ static const SettingVariant _network_private_settings_table[] = { [post-amble] }; [templates] -SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), SDTC_SSTR = SDTC_SSTR( $var, $type, $flags, $def, $length, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup), [validation] @@ -32,6 +32,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION diff --git a/src/table/settings/network_settings.ini b/src/table/settings/network_settings.ini index a96c2c9a5c..52a02853bb 100644 --- a/src/table/settings/network_settings.ini +++ b/src/table/settings/network_settings.ini @@ -16,9 +16,9 @@ static const SettingVariant _network_settings_table[] = { [post-amble] }; [templates] -SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDTC_VAR = SDTC_VAR( $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDTC_VAR = SDTC_VAR( $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), [validation] SDTC_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); @@ -35,6 +35,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION diff --git a/src/table/settings/news_display_settings.ini b/src/table/settings/news_display_settings.ini index 41419227c1..fe18cad6c7 100644 --- a/src/table/settings/news_display_settings.ini +++ b/src/table/settings/news_display_settings.ini @@ -13,7 +13,7 @@ static const SettingVariant _news_display_settings_table[] = { [post-amble] }; [templates] -SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), [validation] SDTC_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); @@ -29,6 +29,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION diff --git a/src/table/settings/old_gameopt_settings.ini b/src/table/settings/old_gameopt_settings.ini index 661534d136..4daf62a57c 100644 --- a/src/table/settings/old_gameopt_settings.ini +++ b/src/table/settings/old_gameopt_settings.ini @@ -31,12 +31,12 @@ static const SettingVariant _old_gameopt_settings_table[] = { }; [templates] SDTG_LIST = SDTG_LIST($name, $type, $flags, $var, $def, $length, $from, $to, $cat, $extra, $startup), -SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDT_NULL = SDT_NULL( $length, $from, $to), -SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $var, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $load, $cat, $extra, $startup), -SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDT_NULL = SDT_NULL( $length, $from, $to), +SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $var, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $load, $cat, $extra, $startup), +SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), [validation] SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); @@ -56,6 +56,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION diff --git a/src/table/settings/pathfinding_settings.ini b/src/table/settings/pathfinding_settings.ini index 105fdc263f..75ec95e7a6 100644 --- a/src/table/settings/pathfinding_settings.ini +++ b/src/table/settings/pathfinding_settings.ini @@ -14,8 +14,8 @@ static const SettingVariant _pathfinding_settings_table[] = { [post-amble] }; [templates] -SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), [validation] SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size"); @@ -31,6 +31,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION diff --git a/src/table/settings/script_settings.ini b/src/table/settings/script_settings.ini index ab85cfaff0..9affe3e61b 100644 --- a/src/table/settings/script_settings.ini +++ b/src/table/settings/script_settings.ini @@ -13,9 +13,9 @@ static const SettingVariant _script_settings_table[] = { [post-amble] }; [templates] -SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $load, $cat, $extra, $startup), -SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $load, $cat, $extra, $startup), +SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), [validation] SDT_OMANY = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size"); @@ -32,6 +32,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION diff --git a/src/table/settings/win32_settings.ini b/src/table/settings/win32_settings.ini index f5c8d6813b..d54f10e109 100644 --- a/src/table/settings/win32_settings.ini +++ b/src/table/settings/win32_settings.ini @@ -17,8 +17,8 @@ static const SettingVariant _win32_settings_table[] = { }; #endif /* _WIN32 */ [templates] -SDTG_BOOL = SDTG_BOOL($name, $flags, $var, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDTG_BOOL = SDTG_BOOL($name, $flags, $var, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), [validation] SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); @@ -34,6 +34,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION diff --git a/src/table/settings/window_settings.ini b/src/table/settings/window_settings.ini index 7a38c46eab..4984abe200 100644 --- a/src/table/settings/window_settings.ini +++ b/src/table/settings/window_settings.ini @@ -13,8 +13,8 @@ static const SettingVariant _window_settings_table[] = { [post-amble] }; [templates] -SDT_BOOL = SDT_BOOL(WindowDesc, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDT_VAR = SDT_VAR(WindowDesc, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDT_BOOL = SDT_BOOL(WindowDesc, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDT_VAR = SDT_VAR(WindowDesc, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), [validation] SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for WindowDesc.$var exceeds storage size"); @@ -30,6 +30,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION diff --git a/src/table/settings/world_settings.ini b/src/table/settings/world_settings.ini index 68225dbc26..6b5d1466e0 100644 --- a/src/table/settings/world_settings.ini +++ b/src/table/settings/world_settings.ini @@ -18,9 +18,9 @@ static const SettingVariant _world_settings_table[] = { [post-amble] }; [templates] -SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), -SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $load, $cat, $extra, $startup), -SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup), +SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), +SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $load, $cat, $extra, $startup), +SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup), [validation] SDT_OMANY = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size"); @@ -37,6 +37,7 @@ post_cb = nullptr str_cb = nullptr help_cb = nullptr val_cb = nullptr +def_cb = nullptr load = nullptr from = SL_MIN_VERSION to = SL_MAX_VERSION From fd80a1ec66b3a85efaf5f6cf136eb104ddb02919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Cheng?= Date: Mon, 25 Mar 2024 20:38:44 +0000 Subject: [PATCH 402/695] Fix #11345: Use correct default button value for vehicle service interval setting --- src/settings_gui.cpp | 1 + src/settings_table.cpp | 26 +++++++++++++++++++++++++ src/table/settings/company_settings.ini | 5 +++++ 3 files changed, 32 insertions(+) diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 793b938e06..d33f6f8361 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2734,6 +2734,7 @@ struct GameSettingsWindow : Window { value = ClampTo(llvalue); } else { value = sd->def; + if (sd->get_def_cb != nullptr) sd->get_def_cb(value); } SetSettingValue(this->valuewindow_entry->setting, value); diff --git a/src/settings_table.cpp b/src/settings_table.cpp index 5dd9ed5c56..4538c9e88f 100644 --- a/src/settings_table.cpp +++ b/src/settings_table.cpp @@ -240,6 +240,32 @@ static void UpdateServiceInterval(VehicleType type, int32_t new_value) SetWindowClassesDirty(WC_VEHICLE_DETAILS); } +/** + * Checks if the service intervals in the settings are specified as percentages and corrects the default value accordingly. + * @param new_value Contains the service interval's default value in days, or 50 (default in percentage). + */ +static void GetDefaultServiceInterval(VehicleType type, int32_t &new_value) +{ + VehicleDefaultSettings *vds; + if (_game_mode == GM_MENU || !Company::IsValidID(_current_company)) { + vds = &_settings_client.company.vehicle; + } else { + vds = &Company::Get(_current_company)->settings.vehicle; + } + + if (vds->servint_ispercent) { + new_value = DEF_SERVINT_PERCENT; + } else if (TimerGameEconomy::UsingWallclockUnits(_game_mode == GM_MENU)) { + switch (type) { + case VEH_TRAIN: new_value = DEF_SERVINT_MINUTES_TRAINS; break; + case VEH_ROAD: new_value = DEF_SERVINT_MINUTES_ROADVEH; break; + case VEH_AIRCRAFT: new_value = DEF_SERVINT_MINUTES_AIRCRAFT; break; + case VEH_SHIP: new_value = DEF_SERVINT_MINUTES_SHIPS; break; + default: NOT_REACHED(); + } + } +} + static void TrainAccelerationModelChanged(int32_t) { for (Train *t : Train::Iterate()) { diff --git a/src/table/settings/company_settings.ini b/src/table/settings/company_settings.ini index ad7a026887..64383eb641 100644 --- a/src/table/settings/company_settings.ini +++ b/src/table/settings/company_settings.ini @@ -12,6 +12,7 @@ static void UpdateAllServiceInterval(int32_t new_value); static bool CanUpdateServiceInterval(VehicleType type, int32_t &new_value); static void UpdateServiceInterval(VehicleType type, int32_t new_value); static void SettingsValueAbsolute(const IntSettingDesc &sd, uint first_param, int32_t value); +static void GetDefaultServiceInterval(VehicleType type, int32_t &new_value); static const SettingVariant _company_settings_table[] = { [post-amble] @@ -98,6 +99,7 @@ strhelp = STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_TRAIN, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_TRAIN, new_value); } +def_cb = [](auto &new_value) { GetDefaultServiceInterval(VEH_TRAIN, new_value); } [SDT_VAR] var = vehicle.servint_roadveh @@ -112,6 +114,7 @@ strhelp = STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_ROAD, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_ROAD, new_value); } +def_cb = [](auto &new_value) { GetDefaultServiceInterval(VEH_ROAD, new_value); } [SDT_VAR] var = vehicle.servint_ships @@ -126,6 +129,7 @@ strhelp = STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_SHIP, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_SHIP, new_value); } +def_cb = [](auto &new_value) { GetDefaultServiceInterval(VEH_SHIP, new_value); } [SDT_VAR] var = vehicle.servint_aircraft @@ -140,3 +144,4 @@ strhelp = STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_AIRCRAFT, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_AIRCRAFT, new_value); } +def_cb = [](auto &new_value) { GetDefaultServiceInterval(VEH_AIRCRAFT, new_value); } From 339b0ea0fffd14631df8a7179dfb2e944ff0c52a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Cheng?= Date: Wed, 20 Mar 2024 15:26:54 +0000 Subject: [PATCH 403/695] Change: Show correct default value and unit for vehicle service interval setting --- src/lang/english.txt | 6 +++++- src/settings_gui.cpp | 4 +++- src/settings_table.cpp | 22 ++++++++++++++++++++++ src/table/settings/company_settings.ini | 13 +++++++++---- 4 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 1530dd1e20..36fea5c491 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1832,7 +1832,11 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Default service STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Set the default service interval for new aircraft, if no explicit service interval is set for the vehicle STR_CONFIG_SETTING_SERVINT_SHIPS :Default service interval for ships: {STRING2} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Set the default service interval for new ships, if no explicit service interval is set for the vehicle -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Day{P 0 "" s}/Minute{P 0 "" s}/% +###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}Day{P 0 "" s} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}Minute{P 0 "" s} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Disabled diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index d33f6f8361..be9244c150 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2498,7 +2498,9 @@ struct GameSettingsWindow : Window { DrawString(tr, STR_CONFIG_SETTING_TYPE); tr.top += GetCharacterHeight(FS_NORMAL); - sd->SetValueDParams(0, sd->def); + int32_t def_val = sd->def; + if (sd->get_def_cb != nullptr) sd->get_def_cb(def_val); + sd->SetValueDParams(0, def_val); DrawString(tr, STR_CONFIG_SETTING_DEFAULT_VALUE); tr.top += GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal; diff --git a/src/settings_table.cpp b/src/settings_table.cpp index 4538c9e88f..4f0f724e0b 100644 --- a/src/settings_table.cpp +++ b/src/settings_table.cpp @@ -116,6 +116,28 @@ static void SettingsValueAbsolute(const IntSettingDesc &sd, uint first_param, in SetDParam(first_param + 1, abs(value)); } +/** Service Interval Settings Default Value displays the correct units or as a percentage */ +static void ServiceIntervalSettingsValueText(const IntSettingDesc &sd, uint first_param, int32_t value) +{ + VehicleDefaultSettings *vds; + if (_game_mode == GM_MENU || !Company::IsValidID(_current_company)) { + vds = &_settings_client.company.vehicle; + } else { + vds = &Company::Get(_current_company)->settings.vehicle; + } + + if (value == 0) { + SetDParam(first_param, sd.str_val + 3); + } else if (vds->servint_ispercent) { + SetDParam(first_param, sd.str_val + 2); + } else if (TimerGameEconomy::UsingWallclockUnits(_game_mode == GM_MENU)) { + SetDParam(first_param, sd.str_val + 1); + } else { + SetDParam(first_param, sd.str_val); + } + SetDParam(first_param + 1, value); +} + /** Reposition the main toolbar as the setting changed. */ static void v_PositionMainToolbar(int32_t) { diff --git a/src/table/settings/company_settings.ini b/src/table/settings/company_settings.ini index 64383eb641..10a637ce71 100644 --- a/src/table/settings/company_settings.ini +++ b/src/table/settings/company_settings.ini @@ -12,6 +12,7 @@ static void UpdateAllServiceInterval(int32_t new_value); static bool CanUpdateServiceInterval(VehicleType type, int32_t &new_value); static void UpdateServiceInterval(VehicleType type, int32_t new_value); static void SettingsValueAbsolute(const IntSettingDesc &sd, uint first_param, int32_t value); +static void ServiceIntervalSettingsValueText(const IntSettingDesc &sd, uint first_param, int32_t value); static void GetDefaultServiceInterval(VehicleType type, int32_t &new_value); static const SettingVariant _company_settings_table[] = { @@ -96,10 +97,11 @@ max = MAX_SERVINT_DAYS interval = 1 str = STR_CONFIG_SETTING_SERVINT_TRAINS strhelp = STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT -strval = STR_CONFIG_SETTING_SERVINT_VALUE +strval = STR_CONFIG_SETTING_SERVINT_VALUE_DAYS pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_TRAIN, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_TRAIN, new_value); } def_cb = [](auto &new_value) { GetDefaultServiceInterval(VEH_TRAIN, new_value); } +val_cb = ServiceIntervalSettingsValueText [SDT_VAR] var = vehicle.servint_roadveh @@ -111,10 +113,11 @@ max = MAX_SERVINT_DAYS interval = 1 str = STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES strhelp = STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT -strval = STR_CONFIG_SETTING_SERVINT_VALUE +strval = STR_CONFIG_SETTING_SERVINT_VALUE_DAYS pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_ROAD, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_ROAD, new_value); } def_cb = [](auto &new_value) { GetDefaultServiceInterval(VEH_ROAD, new_value); } +val_cb = ServiceIntervalSettingsValueText [SDT_VAR] var = vehicle.servint_ships @@ -126,10 +129,11 @@ max = MAX_SERVINT_DAYS interval = 1 str = STR_CONFIG_SETTING_SERVINT_SHIPS strhelp = STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT -strval = STR_CONFIG_SETTING_SERVINT_VALUE +strval = STR_CONFIG_SETTING_SERVINT_VALUE_DAYS pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_SHIP, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_SHIP, new_value); } def_cb = [](auto &new_value) { GetDefaultServiceInterval(VEH_SHIP, new_value); } +val_cb = ServiceIntervalSettingsValueText [SDT_VAR] var = vehicle.servint_aircraft @@ -141,7 +145,8 @@ max = MAX_SERVINT_DAYS interval = 1 str = STR_CONFIG_SETTING_SERVINT_AIRCRAFT strhelp = STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT -strval = STR_CONFIG_SETTING_SERVINT_VALUE +strval = STR_CONFIG_SETTING_SERVINT_VALUE_DAYS pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_AIRCRAFT, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_AIRCRAFT, new_value); } def_cb = [](auto &new_value) { GetDefaultServiceInterval(VEH_AIRCRAFT, new_value); } +val_cb = ServiceIntervalSettingsValueText From ceb0053dd9a4ace2d68a22734d1aeac2b551f468 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Cheng?= Date: Sat, 13 Apr 2024 17:33:27 +0100 Subject: [PATCH 404/695] Codechange: Correct return type of GetDefaultValueCallback --- src/settings_gui.cpp | 6 +++--- src/settings_internal.h | 2 +- src/settings_table.cpp | 13 ++++++++++++- src/table/settings/company_settings.ini | 10 +++++----- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index be9244c150..0ef8fb330e 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2498,8 +2498,7 @@ struct GameSettingsWindow : Window { DrawString(tr, STR_CONFIG_SETTING_TYPE); tr.top += GetCharacterHeight(FS_NORMAL); - int32_t def_val = sd->def; - if (sd->get_def_cb != nullptr) sd->get_def_cb(def_val); + int32_t def_val = sd->get_def_cb != nullptr ? sd->get_def_cb() : sd->def; sd->SetValueDParams(0, def_val); DrawString(tr, STR_CONFIG_SETTING_DEFAULT_VALUE); tr.top += GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal; @@ -2734,9 +2733,10 @@ struct GameSettingsWindow : Window { if (sd->flags & SF_GUI_CURRENCY) llvalue /= GetCurrency().rate; value = ClampTo(llvalue); + } else if (sd->get_def_cb != nullptr) { + value = sd->get_def_cb(); } else { value = sd->def; - if (sd->get_def_cb != nullptr) sd->get_def_cb(value); } SetSettingValue(this->valuewindow_entry->setting, value); diff --git a/src/settings_internal.h b/src/settings_internal.h index e473b47334..32bfa258e4 100644 --- a/src/settings_internal.h +++ b/src/settings_internal.h @@ -169,7 +169,7 @@ struct IntSettingDesc : SettingDesc { * units or expressed as a percentage. * @param value The prospective new value for the setting. */ - typedef void GetDefaultValueCallback(int32_t &value); + typedef int32_t GetDefaultValueCallback(); template < typename Tdef, diff --git a/src/settings_table.cpp b/src/settings_table.cpp index 4f0f724e0b..dcf19c8254 100644 --- a/src/settings_table.cpp +++ b/src/settings_table.cpp @@ -266,7 +266,7 @@ static void UpdateServiceInterval(VehicleType type, int32_t new_value) * Checks if the service intervals in the settings are specified as percentages and corrects the default value accordingly. * @param new_value Contains the service interval's default value in days, or 50 (default in percentage). */ -static void GetDefaultServiceInterval(VehicleType type, int32_t &new_value) +static int32_t GetDefaultServiceInterval(VehicleType type) { VehicleDefaultSettings *vds; if (_game_mode == GM_MENU || !Company::IsValidID(_current_company)) { @@ -275,6 +275,7 @@ static void GetDefaultServiceInterval(VehicleType type, int32_t &new_value) vds = &Company::Get(_current_company)->settings.vehicle; } + int32_t new_value; if (vds->servint_ispercent) { new_value = DEF_SERVINT_PERCENT; } else if (TimerGameEconomy::UsingWallclockUnits(_game_mode == GM_MENU)) { @@ -285,7 +286,17 @@ static void GetDefaultServiceInterval(VehicleType type, int32_t &new_value) case VEH_SHIP: new_value = DEF_SERVINT_MINUTES_SHIPS; break; default: NOT_REACHED(); } + } else { + switch (type) { + case VEH_TRAIN: new_value = DEF_SERVINT_DAYS_TRAINS; break; + case VEH_ROAD: new_value = DEF_SERVINT_DAYS_ROADVEH; break; + case VEH_AIRCRAFT: new_value = DEF_SERVINT_DAYS_AIRCRAFT; break; + case VEH_SHIP: new_value = DEF_SERVINT_DAYS_SHIPS; break; + default: NOT_REACHED(); + } } + + return new_value; } static void TrainAccelerationModelChanged(int32_t) diff --git a/src/table/settings/company_settings.ini b/src/table/settings/company_settings.ini index 10a637ce71..68416b2838 100644 --- a/src/table/settings/company_settings.ini +++ b/src/table/settings/company_settings.ini @@ -13,7 +13,7 @@ static bool CanUpdateServiceInterval(VehicleType type, int32_t &new_value); static void UpdateServiceInterval(VehicleType type, int32_t new_value); static void SettingsValueAbsolute(const IntSettingDesc &sd, uint first_param, int32_t value); static void ServiceIntervalSettingsValueText(const IntSettingDesc &sd, uint first_param, int32_t value); -static void GetDefaultServiceInterval(VehicleType type, int32_t &new_value); +static int32_t GetDefaultServiceInterval(VehicleType type); static const SettingVariant _company_settings_table[] = { [post-amble] @@ -100,7 +100,7 @@ strhelp = STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE_DAYS pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_TRAIN, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_TRAIN, new_value); } -def_cb = [](auto &new_value) { GetDefaultServiceInterval(VEH_TRAIN, new_value); } +def_cb = []() { return GetDefaultServiceInterval(VEH_TRAIN); } val_cb = ServiceIntervalSettingsValueText [SDT_VAR] @@ -116,7 +116,7 @@ strhelp = STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE_DAYS pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_ROAD, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_ROAD, new_value); } -def_cb = [](auto &new_value) { GetDefaultServiceInterval(VEH_ROAD, new_value); } +def_cb = []() { return GetDefaultServiceInterval(VEH_ROAD); } val_cb = ServiceIntervalSettingsValueText [SDT_VAR] @@ -132,7 +132,7 @@ strhelp = STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE_DAYS pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_SHIP, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_SHIP, new_value); } -def_cb = [](auto &new_value) { GetDefaultServiceInterval(VEH_SHIP, new_value); } +def_cb = []() { return GetDefaultServiceInterval(VEH_SHIP); } val_cb = ServiceIntervalSettingsValueText [SDT_VAR] @@ -148,5 +148,5 @@ strhelp = STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE_DAYS pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_AIRCRAFT, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_AIRCRAFT, new_value); } -def_cb = [](auto &new_value) { GetDefaultServiceInterval(VEH_AIRCRAFT, new_value); } +def_cb = []() { return GetDefaultServiceInterval(VEH_AIRCRAFT); } val_cb = ServiceIntervalSettingsValueText From 57f5d27427a7257b9a7790cee9470faf69878683 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Cheng?= Date: Sat, 13 Apr 2024 19:18:59 +0100 Subject: [PATCH 405/695] Doc: Fix documentation of GetDefaultValueCallback --- src/settings_internal.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/settings_internal.h b/src/settings_internal.h index 32bfa258e4..a21805ae5d 100644 --- a/src/settings_internal.h +++ b/src/settings_internal.h @@ -165,9 +165,9 @@ struct IntSettingDesc : SettingDesc { */ typedef void PostChangeCallback(int32_t value); /** - * A callback to set the correct default value, in case it can be measured in time + * A callback to get the correct default value. For example a default that can be measured in time * units or expressed as a percentage. - * @param value The prospective new value for the setting. + * @return The correct default value for the setting. */ typedef int32_t GetDefaultValueCallback(); From 11ec156b64a59cd1e73c1a1c795498c5c790bd38 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 20 Apr 2024 15:39:36 +0100 Subject: [PATCH 406/695] Codechange: Add a priority field to TimerGameTick::TPeriod Use this as the primary sort key for TimerGameTick::TPeriod, to avoid container sort order changes on timer period saveload. See: #12509 --- src/company_cmd.cpp | 4 ++-- src/newgrf_profiling.cpp | 4 ++-- src/saveload/afterload.cpp | 2 +- src/saveload/misc_sl.cpp | 6 +++--- src/saveload/oldloader_sl.cpp | 2 +- src/timer/timer_game_tick.cpp | 21 +++++++++++++++------ src/timer/timer_game_tick.h | 29 ++++++++++++++++++++++++++++- src/timetable_gui.cpp | 2 +- 8 files changed, 53 insertions(+), 17 deletions(-) diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index f88ad63538..6fa44f4bc5 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -637,7 +637,7 @@ Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY) } /** Start a new competitor company if possible. */ -TimeoutTimer _new_competitor_timeout(0, []() { +TimeoutTimer _new_competitor_timeout({ TimerGameTick::Priority::COMPETITOR_TIMEOUT, 0 }, []() { if (_game_mode == GM_MENU || !AI::CanStartNew()) return; if (_networking && Company::GetNumItems() >= _settings_client.network.max_companies) return; @@ -778,7 +778,7 @@ void OnTick_Companies() /* Randomize a bit when the AI is actually going to start; ranges from 87.5% .. 112.5% of indicated value. */ timeout += ScriptObject::GetRandomizer(OWNER_NONE).Next(timeout / 4) - timeout / 8; - _new_competitor_timeout.Reset(std::max(1, timeout)); + _new_competitor_timeout.Reset({ TimerGameTick::Priority::COMPETITOR_TIMEOUT, static_cast(std::max(1, timeout)) }); } _cur_company_tick_index = (_cur_company_tick_index + 1) % MAX_COMPANIES; diff --git a/src/newgrf_profiling.cpp b/src/newgrf_profiling.cpp index 115dd88b2d..48ed9cdab0 100644 --- a/src/newgrf_profiling.cpp +++ b/src/newgrf_profiling.cpp @@ -157,7 +157,7 @@ std::string NewGRFProfiler::GetOutputFilename() const /** * Check whether profiling is active and should be finished. */ -static TimeoutTimer _profiling_finish_timeout(0, []() +static TimeoutTimer _profiling_finish_timeout({ TimerGameTick::Priority::NONE, 0 }, []() { NewGRFProfiler::FinishAll(); }); @@ -167,7 +167,7 @@ static TimeoutTimer _profiling_finish_timeout(0, []() */ /* static */ void NewGRFProfiler::StartTimer(uint64_t ticks) { - _profiling_finish_timeout.Reset(ticks); + _profiling_finish_timeout.Reset({ TimerGameTick::Priority::NONE, static_cast(ticks) }); } /** diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 43f9c79253..a1d016a1f1 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -3255,7 +3255,7 @@ bool AfterLoadGame() /* We did load the "period" of the timer, but not the fired/elapsed. We can deduce that here. */ extern TimeoutTimer _new_competitor_timeout; _new_competitor_timeout.storage.elapsed = 0; - _new_competitor_timeout.fired = _new_competitor_timeout.period == 0; + _new_competitor_timeout.fired = _new_competitor_timeout.period.value == 0; } if (IsSavegameVersionBefore(SLV_NEWGRF_LAST_SERVICE)) { diff --git a/src/saveload/misc_sl.cpp b/src/saveload/misc_sl.cpp index 3cc21c083f..77c6b8cc36 100644 --- a/src/saveload/misc_sl.cpp +++ b/src/saveload/misc_sl.cpp @@ -99,9 +99,9 @@ static const SaveLoad _date_desc[] = { SLEG_CONDVAR("pause_mode", _pause_mode, SLE_UINT8, SLV_4, SL_MAX_VERSION), SLEG_CONDSSTR("id", _game_session_stats.savegame_id, SLE_STR, SLV_SAVEGAME_ID, SL_MAX_VERSION), /* For older savegames, we load the current value as the "period"; afterload will set the "fired" and "elapsed". */ - SLEG_CONDVAR("next_competitor_start", _new_competitor_timeout.period, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_109), - SLEG_CONDVAR("next_competitor_start", _new_competitor_timeout.period, SLE_UINT32, SLV_109, SLV_AI_START_DATE), - SLEG_CONDVAR("competitors_interval", _new_competitor_timeout.period, SLE_UINT32, SLV_AI_START_DATE, SL_MAX_VERSION), + SLEG_CONDVAR("next_competitor_start", _new_competitor_timeout.period.value, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_109), + SLEG_CONDVAR("next_competitor_start", _new_competitor_timeout.period.value, SLE_UINT32, SLV_109, SLV_AI_START_DATE), + SLEG_CONDVAR("competitors_interval", _new_competitor_timeout.period.value, SLE_UINT32, SLV_AI_START_DATE, SL_MAX_VERSION), SLEG_CONDVAR("competitors_interval_elapsed", _new_competitor_timeout.storage.elapsed, SLE_UINT32, SLV_AI_START_DATE, SL_MAX_VERSION), SLEG_CONDVAR("competitors_interval_fired", _new_competitor_timeout.fired, SLE_BOOL, SLV_AI_START_DATE, SL_MAX_VERSION), }; diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 7beb30a490..538c1336c3 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -1701,7 +1701,7 @@ static const OldChunks main_chunk[] = { OCL_ASSERT( OC_TTO, 0x496CE ), - OCL_VAR ( OC_FILE_U16 | OC_VAR_U32, 1, &_new_competitor_timeout.period ), + OCL_VAR ( OC_FILE_U16 | OC_VAR_U32, 1, &_new_competitor_timeout.period.value ), OCL_CNULL( OC_TTO, 2 ), ///< available monorail bitmask diff --git a/src/timer/timer_game_tick.cpp b/src/timer/timer_game_tick.cpp index 92399a4e63..d86992209c 100644 --- a/src/timer/timer_game_tick.cpp +++ b/src/timer/timer_game_tick.cpp @@ -21,13 +21,13 @@ TimerGameTick::TickCounter TimerGameTick::counter = 0; template<> void IntervalTimer::Elapsed(TimerGameTick::TElapsed delta) { - if (this->period == 0) return; + if (this->period.value == 0) return; this->storage.elapsed += delta; uint count = 0; - while (this->storage.elapsed >= this->period) { - this->storage.elapsed -= this->period; + while (this->storage.elapsed >= this->period.value) { + this->storage.elapsed -= this->period.value; count++; } @@ -40,11 +40,11 @@ template<> void TimeoutTimer::Elapsed(TimerGameTick::TElapsed delta) { if (this->fired) return; - if (this->period == 0) return; + if (this->period.value == 0) return; this->storage.elapsed += delta; - if (this->storage.elapsed >= this->period) { + if (this->storage.elapsed >= this->period.value) { this->callback(); this->fired = true; } @@ -64,7 +64,16 @@ bool TimerManager::Elapsed(TimerGameTick::TElapsed delta) #ifdef WITH_ASSERT template<> -void TimerManager::Validate(TimerGameTick::TPeriod) +void TimerManager::Validate(TimerGameTick::TPeriod period) { + if (period.priority == TimerGameTick::Priority::NONE) return; + + /* Validate we didn't make a developer error and scheduled more than one + * entry on the same priority. There can only be one timer on + * a specific priority, to ensure we are deterministic, and to avoid + * container sort order invariant issues with timer period saveload. */ + for (const auto &timer : TimerManager::GetTimers()) { + assert(timer->period.priority != period.priority); + } } #endif /* WITH_ASSERT */ diff --git a/src/timer/timer_game_tick.h b/src/timer/timer_game_tick.h index 0151e45be2..02ae2b16ff 100644 --- a/src/timer/timer_game_tick.h +++ b/src/timer/timer_game_tick.h @@ -24,7 +24,34 @@ public: using Ticks = int32_t; ///< The type to store ticks in using TickCounter = uint64_t; ///< The type that the tick counter is stored in - using TPeriod = uint; + enum Priority { + NONE, ///< These timers can be executed in any order; the order is not relevant. + + /* For all other priorities, the order is important. + * For safety, you can only setup a single timer on a single priority. */ + COMPETITOR_TIMEOUT, + }; + + struct TPeriod { + Priority priority; + uint value; + + TPeriod(Priority priority, uint value) : priority(priority), value(value) + {} + + bool operator < (const TPeriod &other) const + { + /* Sort by priority before value, such that changes in value for priorities other than NONE do not change the container order */ + if (this->priority != other.priority) return this->priority < other.priority; + return this->value < other.value; + } + + bool operator == (const TPeriod &other) const + { + return this->priority == other.priority && this->value == other.value; + } + }; + using TElapsed = uint; struct TStorage { uint elapsed; diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index 283dbd401e..a8bd962001 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -799,7 +799,7 @@ struct TimetableWindow : Window { /** * In real-time mode, the timetable GUI shows relative times and needs to be redrawn every second. */ - IntervalTimer redraw_interval = {Ticks::TICKS_PER_SECOND, [this](auto) { + IntervalTimer redraw_interval = { { TimerGameTick::Priority::NONE, Ticks::TICKS_PER_SECOND }, [this](auto) { if (_settings_client.gui.timetable_mode == TimetableMode::Seconds) { this->SetDirty(); } From 9b747a173d0c9ee1e0106fee01ec80a3f5f30891 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 20 Apr 2024 15:09:49 +0100 Subject: [PATCH 407/695] Fix #12509: Maintain timer sort invariants when changing period --- src/timer/timer.h | 4 ++-- src/timer/timer_manager.h | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/timer/timer.h b/src/timer/timer.h index 3b76be0bac..982b86732c 100644 --- a/src/timer/timer.h +++ b/src/timer/timer.h @@ -98,7 +98,7 @@ public: */ void SetInterval(const TPeriod interval, bool reset = true) { - this->period = interval; + TimerManager::ChangeRegisteredTimerPeriod(*this, interval); if (reset) this->storage = {}; } @@ -150,7 +150,7 @@ public: */ void Reset(const TPeriod timeout) { - this->period = timeout; + TimerManager::ChangeRegisteredTimerPeriod(*this, timeout); this->fired = false; this->storage = {}; } diff --git a/src/timer/timer_manager.h b/src/timer/timer_manager.h index c3b45a73bd..92e45ccc17 100644 --- a/src/timer/timer_manager.h +++ b/src/timer/timer_manager.h @@ -56,6 +56,20 @@ public: GetTimers().erase(&timer); } + /** + * Change the period of a registered timer. + * + * @param timer The timer to change the period of. + * @param new_period The new period value. + */ + static void ChangeRegisteredTimerPeriod(BaseTimer &timer, TPeriod new_period) + { + /* Unregistration and re-registration is necessary because the period is used as the sort key in base_timer_sorter */ + UnregisterTimer(timer); + timer.period = new_period; + RegisterTimer(timer); + } + #ifdef WITH_ASSERT /** * Validate that a new period is actually valid. From 5bc9854be26c25075e74b7c9716bc54d7156d71f Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 25 Apr 2024 21:00:49 +0100 Subject: [PATCH 408/695] Codechange: Make sort list function lists safer. (#12574) GUIList has a pointer only to the start of each sort/filter func list, which has the potential for UB as it is unable to validate that the selected sort or filter type is in range. Use a std::span instead and check if the selected type is in range before using it. --- src/bridge_gui.cpp | 4 ++-- src/industry_gui.cpp | 4 ++-- src/network/network_content_gui.cpp | 8 ++++---- src/network/network_gui.cpp | 12 +++++------ src/newgrf_gui.cpp | 8 ++++---- src/object_gui.cpp | 8 ++++---- src/rail_gui.cpp | 8 ++++---- src/road_gui.cpp | 8 ++++---- src/sortlist_type.h | 32 ++++++++++++++++------------- src/station_gui.cpp | 4 ++-- src/story_gui.cpp | 8 ++++---- src/town_gui.cpp | 4 ++-- src/vehicle_gui.cpp | 4 ++-- src/vehicle_gui_base.h | 6 +++--- 14 files changed, 61 insertions(+), 57 deletions(-) diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index 1eba99ddce..6510355f8c 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -76,7 +76,7 @@ private: /* Constants for sorting the bridges */ static const StringID sorter_names[]; - static GUIBridgeList::SortFunction * const sorter_funcs[]; + static const std::initializer_list sorter_funcs; /* Internal variables */ TileIndex start_tile; @@ -298,7 +298,7 @@ public: Listing BuildBridgeWindow::last_sorting = {true, 2}; /** Available bridge sorting functions. */ -GUIBridgeList::SortFunction * const BuildBridgeWindow::sorter_funcs[] = { +const std::initializer_list BuildBridgeWindow::sorter_funcs = { &BridgeIndexSorter, &BridgePriceSorter, &BridgeSpeedSorter diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index ade687df5f..7d85c5eded 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1326,7 +1326,7 @@ protected: /* Constants for sorting industries */ static const StringID sorter_names[]; - static GUIIndustryList::SortFunction * const sorter_funcs[]; + static const std::initializer_list sorter_funcs; GUIIndustryList industries{IndustryDirectoryWindow::produced_cargo_filter}; Scrollbar *vscroll; @@ -1902,7 +1902,7 @@ public: Listing IndustryDirectoryWindow::last_sorting = {false, 0}; /* Available station sorting functions. */ -GUIIndustryList::SortFunction * const IndustryDirectoryWindow::sorter_funcs[] = { +const std::initializer_list IndustryDirectoryWindow::sorter_funcs = { &IndustryNameSorter, &IndustryTypeSorter, &IndustryProductionSorter, diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index d6a15f44fa..8310d7afed 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -334,8 +334,8 @@ class NetworkContentListWindow : public Window, ContentCallback { static Listing last_sorting; ///< The last sorting setting. static Filtering last_filtering; ///< The last filtering setting. - static GUIContentList::SortFunction * const sorter_funcs[]; ///< Sorter functions - static GUIContentList::FilterFunction * const filter_funcs[]; ///< Filter functions. + static const std::initializer_list sorter_funcs; ///< Sorter functions + static const std::initializer_list filter_funcs; ///< Filter functions. GUIContentList content; ///< List with content bool auto_select; ///< Automatically select all content when the meta-data becomes available ContentListFilterData filter_data; ///< Filter for content list @@ -1010,13 +1010,13 @@ public: Listing NetworkContentListWindow::last_sorting = {false, 1}; Filtering NetworkContentListWindow::last_filtering = {false, 0}; -NetworkContentListWindow::GUIContentList::SortFunction * const NetworkContentListWindow::sorter_funcs[] = { +const std::initializer_list NetworkContentListWindow::sorter_funcs = { &StateSorter, &TypeSorter, &NameSorter, }; -NetworkContentListWindow::GUIContentList::FilterFunction * const NetworkContentListWindow::filter_funcs[] = { +const std::initializer_list NetworkContentListWindow::filter_funcs = { &TagNameFilter, &TypeOrSelectedFilter, }; diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 3421b9b56d..3822242b70 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -181,8 +181,8 @@ protected: static Listing last_sorting; /* Constants for sorting servers */ - static GUIGameServerList::SortFunction * const sorter_funcs[]; - static GUIGameServerList::FilterFunction * const filter_funcs[]; + static const std::initializer_list sorter_funcs; + static const std::initializer_list filter_funcs; NetworkGameList *server; ///< Selected server. NetworkGameList *last_joined; ///< The last joined server. @@ -459,8 +459,8 @@ public: this->server = this->last_joined; this->servers.SetListing(this->last_sorting); - this->servers.SetSortFuncs(this->sorter_funcs); - this->servers.SetFilterFuncs(this->filter_funcs); + this->servers.SetSortFuncs(NetworkGameWindow::sorter_funcs); + this->servers.SetFilterFuncs(NetworkGameWindow::filter_funcs); this->servers.ForceRebuild(); } @@ -860,7 +860,7 @@ public: }; Listing NetworkGameWindow::last_sorting = {false, 5}; -GUIGameServerList::SortFunction * const NetworkGameWindow::sorter_funcs[] = { +const std::initializer_list NetworkGameWindow::sorter_funcs = { &NGameNameSorter, &NGameClientSorter, &NGameMapSizeSorter, @@ -869,7 +869,7 @@ GUIGameServerList::SortFunction * const NetworkGameWindow::sorter_funcs[] = { &NGameAllowedSorter }; -GUIGameServerList::FilterFunction * const NetworkGameWindow::filter_funcs[] = { +const std::initializer_list NetworkGameWindow::filter_funcs = { &NGameSearchFilter }; diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 146f890189..234ec24020 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -609,8 +609,8 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { static Listing last_sorting; ///< Default sorting of #GUIGRFConfigList. static Filtering last_filtering; ///< Default filtering of #GUIGRFConfigList. - static GUIGRFConfigList::SortFunction * const sorter_funcs[]; ///< Sort functions of the #GUIGRFConfigList. - static GUIGRFConfigList::FilterFunction * const filter_funcs[]; ///< Filter functions of the #GUIGRFConfigList. + static const std::initializer_list sorter_funcs; ///< Sort functions of the #GUIGRFConfigList. + static const std::initializer_list filter_funcs; ///< Filter functions of the #GUIGRFConfigList. GUIGRFConfigList avails; ///< Available (non-active) grfs. const GRFConfig *avail_sel; ///< Currently selected available grf. \c nullptr is none is selected. @@ -1586,11 +1586,11 @@ void ShowMissingContentWindow(const GRFConfig *list) Listing NewGRFWindow::last_sorting = {false, 0}; Filtering NewGRFWindow::last_filtering = {false, 0}; -NewGRFWindow::GUIGRFConfigList::SortFunction * const NewGRFWindow::sorter_funcs[] = { +const std::initializer_list NewGRFWindow::sorter_funcs = { &NameSorter, }; -NewGRFWindow::GUIGRFConfigList::FilterFunction * const NewGRFWindow::filter_funcs[] = { +const std::initializer_list NewGRFWindow::filter_funcs = { &TagNameFilter, }; diff --git a/src/object_gui.cpp b/src/object_gui.cpp index 9199c55538..91ed77860f 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -56,8 +56,8 @@ class BuildObjectWindow : public Window { static Listing last_sorting; ///< Default sorting of #GUIObjectClassList. static Filtering last_filtering; ///< Default filtering of #GUIObjectClassList. - static GUIObjectClassList::SortFunction * const sorter_funcs[]; ///< Sort functions of the #GUIObjectClassList. - static GUIObjectClassList::FilterFunction * const filter_funcs[]; ///< Filter functions of the #GUIObjectClassList. + static const std::initializer_list sorter_funcs; ///< Sort functions of the #GUIObjectClassList. + static const std::initializer_list filter_funcs; ///< Filter functions of the #GUIObjectClassList. GUIObjectClassList object_classes; ///< Available object classes. StringFilter string_filter; ///< Filter for available objects. QueryString filter_editbox; ///< Filter editbox. @@ -655,11 +655,11 @@ public: Listing BuildObjectWindow::last_sorting = { false, 0 }; Filtering BuildObjectWindow::last_filtering = { false, 0 }; -BuildObjectWindow::GUIObjectClassList::SortFunction * const BuildObjectWindow::sorter_funcs[] = { +const std::initializer_list BuildObjectWindow::sorter_funcs = { &ObjectClassIDSorter, }; -BuildObjectWindow::GUIObjectClassList::FilterFunction * const BuildObjectWindow::filter_funcs[] = { +const std::initializer_list BuildObjectWindow::filter_funcs = { &TagNameFilter, }; diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 7cf1dfeb3c..5cdfb1fb01 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -964,8 +964,8 @@ private: static Listing last_sorting; ///< Default sorting of #GUIStationClassList. static Filtering last_filtering; ///< Default filtering of #GUIStationClassList. - static GUIStationClassList::SortFunction * const sorter_funcs[]; ///< Sort functions of the #GUIStationClassList. - static GUIStationClassList::FilterFunction * const filter_funcs[]; ///< Filter functions of the #GUIStationClassList. + static const std::initializer_list sorter_funcs; ///< Sort functions of the #GUIStationClassList. + static const std::initializer_list filter_funcs; ///< Filter functions of the #GUIStationClassList. GUIStationClassList station_classes; ///< Available station classes. StringFilter string_filter; ///< Filter for available station classes. QueryString filter_editbox; ///< Filter editbox. @@ -1571,11 +1571,11 @@ public: Listing BuildRailStationWindow::last_sorting = { false, 0 }; Filtering BuildRailStationWindow::last_filtering = { false, 0 }; -BuildRailStationWindow::GUIStationClassList::SortFunction * const BuildRailStationWindow::sorter_funcs[] = { +const std::initializer_list BuildRailStationWindow::sorter_funcs = { &StationClassIDSorter, }; -BuildRailStationWindow::GUIStationClassList::FilterFunction * const BuildRailStationWindow::filter_funcs[] = { +const std::initializer_list BuildRailStationWindow::filter_funcs = { &TagNameFilter, }; diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 8637c910f1..c2280a559f 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -1112,8 +1112,8 @@ private: static Listing last_sorting; ///< Default sorting of #GUIRoadStopClassList. static Filtering last_filtering; ///< Default filtering of #GUIRoadStopClassList. - static GUIRoadStopClassList::SortFunction * const sorter_funcs[]; ///< Sort functions of the #GUIRoadStopClassList. - static GUIRoadStopClassList::FilterFunction * const filter_funcs[]; ///< Filter functions of the #GUIRoadStopClassList. + static const std::initializer_list sorter_funcs; ///< Sort functions of the #GUIRoadStopClassList. + static const std::initializer_list filter_funcs; ///< Filter functions of the #GUIRoadStopClassList. GUIRoadStopClassList roadstop_classes; ///< Available road stop classes. StringFilter string_filter; ///< Filter for available road stop classes. QueryString filter_editbox; ///< Filter editbox. @@ -1599,11 +1599,11 @@ public: Listing BuildRoadStationWindow::last_sorting = { false, 0 }; Filtering BuildRoadStationWindow::last_filtering = { false, 0 }; -BuildRoadStationWindow::GUIRoadStopClassList::SortFunction * const BuildRoadStationWindow::sorter_funcs[] = { +const std::initializer_list BuildRoadStationWindow::sorter_funcs = { &RoadStopClassIDSorter, }; -BuildRoadStationWindow::GUIRoadStopClassList::FilterFunction * const BuildRoadStationWindow::filter_funcs[] = { +const std::initializer_list BuildRoadStationWindow::filter_funcs = { &TagNameFilter, }; diff --git a/src/sortlist_type.h b/src/sortlist_type.h index c0fc465525..8edaa91435 100644 --- a/src/sortlist_type.h +++ b/src/sortlist_type.h @@ -50,8 +50,8 @@ public: typedef bool CDECL FilterFunction(const T*, F); ///< Signature of filter function. protected: - SortFunction * const *sort_func_list; ///< the sort criteria functions - FilterFunction * const *filter_func_list; ///< the filter criteria functions + std::span sort_func_list; ///< the sort criteria functions + std::span filter_func_list; ///< the filter criteria functions SortListFlags flags; ///< used to control sorting/resorting/etc. uint8_t sort_type; ///< what criteria to sort on uint8_t filter_type; ///< what criteria to filter on @@ -85,8 +85,8 @@ public: /* If sort parameters are not used then we don't require a reference to the params. */ template >* = nullptr> GUIList() : - sort_func_list(nullptr), - filter_func_list(nullptr), + sort_func_list({}), + filter_func_list({}), flags(VL_NONE), sort_type(0), filter_type(0), @@ -97,8 +97,8 @@ public: /* If sort parameters are used then we require a reference to the params. */ template >* = nullptr> GUIList(const P ¶ms) : - sort_func_list(nullptr), - filter_func_list(nullptr), + sort_func_list({}), + filter_func_list({}), flags(VL_NONE), sort_type(0), filter_type(0), @@ -123,6 +123,7 @@ public: */ void SetSortType(uint8_t n_type) { + assert(n_type < std::size(this->sort_func_list)); if (this->sort_type != n_type) { SETBITS(this->flags, VL_RESORT); this->sort_type = n_type; @@ -175,6 +176,7 @@ public: */ void SetFilterType(uint8_t n_type) { + assert(n_type < std::size(this->filter_func_list)); if (this->filter_type != n_type) { this->filter_type = n_type; } @@ -288,11 +290,11 @@ public: } /** - * Hand the array of sort function pointers to the sort list + * Hand the sort function pointers to the GUIList. * - * @param n_funcs The pointer to the first sort func + * @param n_funcs Span covering the sort function pointers. */ - void SetSortFuncs(SortFunction * const *n_funcs) + void SetSortFuncs(std::span n_funcs) { this->sort_func_list = n_funcs; } @@ -305,7 +307,8 @@ public: */ bool Sort() { - assert(this->sort_func_list != nullptr); + if (this->sort_func_list.empty()) return false; + assert(this->sort_type < this->sort_func_list.size()); return this->Sort(this->sort_func_list[this->sort_type]); } @@ -359,11 +362,11 @@ public: } /** - * Hand the array of filter function pointers to the sort list + * Hand the filter function pointers to the GUIList. * - * @param n_funcs The pointer to the first filter func + * @param n_funcs Span covering the filter function pointers. */ - void SetFilterFuncs(FilterFunction * const *n_funcs) + void SetFilterFuncs(std::span n_funcs) { this->filter_func_list = n_funcs; } @@ -376,7 +379,8 @@ public: */ bool Filter(F filter_data) { - if (this->filter_func_list == nullptr) return false; + if (this->filter_func_list.empty()) return false; + assert(this->filter_type < this->filter_func_list.size()); return this->Filter(this->filter_func_list[this->filter_type], filter_data); } diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 526c5c16a2..6db2d27cb5 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -245,7 +245,7 @@ protected: /* Constants for sorting stations */ static const StringID sorter_names[]; - static GUIStationList::SortFunction * const sorter_funcs[]; + static const std::initializer_list sorter_funcs; FilterState filter; GUIStationList stations{filter.cargoes}; @@ -720,7 +720,7 @@ public: }; /* Available station sorting functions */ -GUIStationList::SortFunction * const CompanyStationsWindow::sorter_funcs[] = { +const std::initializer_list CompanyStationsWindow::sorter_funcs = { &StationNameSorter, &StationTypeSorter, &StationWaitingTotalSorter, diff --git a/src/story_gui.cpp b/src/story_gui.cpp index 9a91eb7128..807a4198a7 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -62,8 +62,8 @@ protected: StoryPageElementID active_button_id; ///< Which button element the player is currently using - static GUIStoryPageList::SortFunction * const page_sorter_funcs[]; - static GUIStoryPageElementList::SortFunction * const page_element_sorter_funcs[]; + static const std::initializer_list page_sorter_funcs; + static const std::initializer_list page_element_sorter_funcs; /** (Re)Build story page list. */ void BuildStoryPageList() @@ -939,11 +939,11 @@ public: } }; -GUIStoryPageList::SortFunction * const StoryBookWindow::page_sorter_funcs[] = { +const std::initializer_list StoryBookWindow::page_sorter_funcs = { &PageOrderSorter, }; -GUIStoryPageElementList::SortFunction * const StoryBookWindow::page_element_sorter_funcs[] = { +const std::initializer_list StoryBookWindow::page_element_sorter_funcs = { &PageElementOrderSorter, }; diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 5ee4ce28e2..69af8c411b 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -721,7 +721,7 @@ private: /* Constants for sorting towns */ static const StringID sorter_names[]; - static GUITownList::SortFunction * const sorter_funcs[]; + static const std::initializer_list sorter_funcs; StringFilter string_filter; ///< Filter for towns QueryString townname_editbox; ///< Filter editbox @@ -1054,7 +1054,7 @@ const StringID TownDirectoryWindow::sorter_names[] = { }; /** Available town directory sorting functions. */ -GUITownList::SortFunction * const TownDirectoryWindow::sorter_funcs[] = { +const std::initializer_list TownDirectoryWindow::sorter_funcs = { &TownNameSorter, &TownPopulationSorter, &TownRatingSorter, diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 93efd79c4e..00060351eb 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -78,7 +78,7 @@ static bool VehicleIndividualToGroupSorterWrapper(GUIVehicleGroup const &a, GUIV return func(*(a.vehicles_begin), *(b.vehicles_begin)); } -BaseVehicleListWindow::VehicleGroupSortFunction * const BaseVehicleListWindow::vehicle_group_none_sorter_funcs[] = { +const std::initializer_list BaseVehicleListWindow::vehicle_group_none_sorter_funcs = { &VehicleIndividualToGroupSorterWrapper, &VehicleIndividualToGroupSorterWrapper, &VehicleIndividualToGroupSorterWrapper, @@ -128,7 +128,7 @@ const StringID BaseVehicleListWindow::vehicle_group_none_sorter_names_wallclock[ INVALID_STRING_ID }; -BaseVehicleListWindow::VehicleGroupSortFunction * const BaseVehicleListWindow::vehicle_group_shared_orders_sorter_funcs[] = { +const std::initializer_list BaseVehicleListWindow::vehicle_group_shared_orders_sorter_funcs = { &VehicleGroupLengthSorter, &VehicleGroupTotalProfitThisYearSorter, &VehicleGroupTotalProfitLastYearSorter, diff --git a/src/vehicle_gui_base.h b/src/vehicle_gui_base.h index c1a9c7a246..4b4519b225 100644 --- a/src/vehicle_gui_base.h +++ b/src/vehicle_gui_base.h @@ -103,8 +103,8 @@ struct BaseVehicleListWindow : public Window { static const StringID vehicle_group_none_sorter_names_wallclock[]; static const StringID vehicle_group_shared_orders_sorter_names_calendar[]; static const StringID vehicle_group_shared_orders_sorter_names_wallclock[]; - static VehicleGroupSortFunction * const vehicle_group_none_sorter_funcs[]; - static VehicleGroupSortFunction * const vehicle_group_shared_orders_sorter_funcs[]; + static const std::initializer_list vehicle_group_none_sorter_funcs; + static const std::initializer_list vehicle_group_shared_orders_sorter_funcs; BaseVehicleListWindow(WindowDesc *desc, WindowNumber wno); @@ -126,7 +126,7 @@ struct BaseVehicleListWindow : public Window { const StringID *GetVehicleSorterNames(); - VehicleGroupSortFunction * const *GetVehicleSorterFuncs() + std::span GetVehicleSorterFuncs() { switch (this->grouping) { case GB_NONE: From 0075a952787acc7daf8604adf0ba51cbee2cb6c1 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 25 Apr 2024 21:01:15 +0100 Subject: [PATCH 409/695] Codefix: Make three _filter_funcs definitions distinct. (#12573) Rename the GUIList function lists defined as the same symbol. --- src/build_vehicle_gui.cpp | 4 ++-- src/industry_gui.cpp | 4 ++-- src/vehicle_gui.cpp | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index ba73bf56f9..72f0ddd493 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -550,7 +550,7 @@ static bool CDECL CargoAndEngineFilter(const GUIEngineListItem *item, const Carg } } -static GUIEngineList::FilterFunction * const _filter_funcs[] = { +static GUIEngineList::FilterFunction * const _engine_filter_funcs[] = { &CargoAndEngineFilter, }; @@ -1312,7 +1312,7 @@ struct BuildVehicleWindow : Window { this->cargo_filter_criteria = _engine_sort_last_cargo_criteria[this->vehicle_type]; if (this->cargo_filter_criteria < NUM_CARGO && !HasBit(_standard_cargo_mask, this->cargo_filter_criteria)) this->cargo_filter_criteria = CargoFilterCriteria::CF_ANY; - this->eng_list.SetFilterFuncs(_filter_funcs); + this->eng_list.SetFilterFuncs(_engine_filter_funcs); this->eng_list.SetFilterState(this->cargo_filter_criteria != CargoFilterCriteria::CF_ANY); } diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 7d85c5eded..3ce405cc71 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1310,7 +1310,7 @@ static bool CDECL CargoFilter(const Industry * const *industry, const std::pair< return accepted_cargo_matches && produced_cargo_matches; } -static GUIIndustryList::FilterFunction * const _filter_funcs[] = { &CargoFilter }; +static GUIIndustryList::FilterFunction * const _industry_filter_funcs[] = { &CargoFilter }; /** Enum referring to the Hotkeys in the industry directory window */ enum IndustryDirectoryHotkeys { @@ -1398,7 +1398,7 @@ protected: this->produced_cargo_filter_criteria = CargoFilterCriteria::CF_ANY; this->accepted_cargo_filter_criteria = CargoFilterCriteria::CF_ANY; - this->industries.SetFilterFuncs(_filter_funcs); + this->industries.SetFilterFuncs(_industry_filter_funcs); bool is_filtering_necessary = this->produced_cargo_filter_criteria != CargoFilterCriteria::CF_ANY || this->accepted_cargo_filter_criteria != CargoFilterCriteria::CF_ANY; diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 00060351eb..240a5cb9c5 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -334,7 +334,7 @@ static bool CargoFilter(const GUIVehicleGroup *vehgroup, const CargoID cid) return false; } -static GUIVehicleGroupList::FilterFunction * const _filter_funcs[] = { +static GUIVehicleGroupList::FilterFunction * const _vehicle_group_filter_funcs[] = { &CargoFilter, }; @@ -359,7 +359,7 @@ void BaseVehicleListWindow::SetCargoFilter(CargoID cid) void BaseVehicleListWindow::SetCargoFilterArray() { this->cargo_filter_criteria = CargoFilterCriteria::CF_ANY; - this->vehgroups.SetFilterFuncs(_filter_funcs); + this->vehgroups.SetFilterFuncs(_vehicle_group_filter_funcs); this->vehgroups.SetFilterState(this->cargo_filter_criteria != CargoFilterCriteria::CF_ANY); } From f44d8fa2e43f2794dc10d32d97527c20c86cb36c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 25 Apr 2024 22:13:23 +0100 Subject: [PATCH 410/695] Codechange: Remove CDECL from filter functions. (#12578) These functions are not passed to qsort()... --- src/build_vehicle_gui.cpp | 2 +- src/industry_gui.cpp | 2 +- src/network/network_content_gui.cpp | 4 ++-- src/network/network_gui.cpp | 2 +- src/newgrf_gui.cpp | 2 +- src/object_gui.cpp | 2 +- src/rail_gui.cpp | 2 +- src/road_gui.cpp | 2 +- src/signs_gui.cpp | 6 +++--- src/sortlist_type.h | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 72f0ddd493..c2e0bcc7f6 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -538,7 +538,7 @@ const StringID _engine_sort_listing[][12] = {{ }}; /** Filters vehicles by cargo and engine (in case of rail vehicle). */ -static bool CDECL CargoAndEngineFilter(const GUIEngineListItem *item, const CargoID cid) +static bool CargoAndEngineFilter(const GUIEngineListItem *item, const CargoID cid) { if (cid == CargoFilterCriteria::CF_ANY) { return true; diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 3ce405cc71..f6d02fefd5 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1270,7 +1270,7 @@ typedef GUIList &cargoes) +static bool CargoFilter(const Industry * const *industry, const std::pair &cargoes) { auto accepted_cargo = cargoes.first; auto produced_cargo = cargoes.second; diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 8310d7afed..f29319331c 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -464,7 +464,7 @@ class NetworkContentListWindow : public Window, ContentCallback { } /** Filter content by tags/name */ - static bool CDECL TagNameFilter(const ContentInfo * const *a, ContentListFilterData &filter) + static bool TagNameFilter(const ContentInfo * const *a, ContentListFilterData &filter) { if ((*a)->state == ContentInfo::SELECTED || (*a)->state == ContentInfo::AUTOSELECTED) return true; @@ -476,7 +476,7 @@ class NetworkContentListWindow : public Window, ContentCallback { } /** Filter content by type, but still show content selected for download. */ - static bool CDECL TypeOrSelectedFilter(const ContentInfo * const *a, ContentListFilterData &filter) + static bool TypeOrSelectedFilter(const ContentInfo * const *a, ContentListFilterData &filter) { if (filter.types.none()) return true; if (filter.types[(*a)->type]) return true; diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 3822242b70..e108fc2302 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -338,7 +338,7 @@ protected: } } - static bool CDECL NGameSearchFilter(NetworkGameList * const *item, StringFilter &sf) + static bool NGameSearchFilter(NetworkGameList * const *item, StringFilter &sf) { assert(item != nullptr); assert((*item) != nullptr); diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 234ec24020..47389a152f 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -1458,7 +1458,7 @@ private: } /** Filter grfs by tags/name */ - static bool CDECL TagNameFilter(const GRFConfig * const *a, StringFilter &filter) + static bool TagNameFilter(const GRFConfig * const *a, StringFilter &filter) { filter.ResetState(); filter.AddLine((*a)->GetName()); diff --git a/src/object_gui.cpp b/src/object_gui.cpp index 91ed77860f..fc8daaecac 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -129,7 +129,7 @@ public: } /** Filter object classes by class name. */ - static bool CDECL TagNameFilter(ObjectClassID const *oc, StringFilter &filter) + static bool TagNameFilter(ObjectClassID const *oc, StringFilter &filter) { ObjectClass *objclass = ObjectClass::Get(*oc); diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 5cdfb1fb01..7c3e2f8c3d 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1095,7 +1095,7 @@ public: } /** Filter station classes by class name. */ - static bool CDECL TagNameFilter(StationClassID const * sc, StringFilter &filter) + static bool TagNameFilter(StationClassID const * sc, StringFilter &filter) { filter.ResetState(); filter.AddLine(GetString(StationClass::Get(*sc)->name)); diff --git a/src/road_gui.cpp b/src/road_gui.cpp index c2280a559f..e208aaf36b 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -1246,7 +1246,7 @@ public: } /** Filter classes by class name. */ - static bool CDECL TagNameFilter(RoadStopClassID const *sc, StringFilter &filter) + static bool TagNameFilter(RoadStopClassID const *sc, StringFilter &filter) { filter.ResetState(); filter.AddLine(GetString(RoadStopClass::Get(*sc)->name)); diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index 5448d0b283..ec2a97c0d4 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -93,7 +93,7 @@ struct SignList { } /** Filter sign list by sign name */ - static bool CDECL SignNameFilter(const Sign * const *a, StringFilter &filter) + static bool SignNameFilter(const Sign * const *a, StringFilter &filter) { /* Same performance benefit as above for sorting. */ const std::string &a_name = (*a)->name.empty() ? SignList::default_name : (*a)->name; @@ -104,14 +104,14 @@ struct SignList { } /** Filter sign list excluding OWNER_DEITY */ - static bool CDECL OwnerDeityFilter(const Sign * const *a, StringFilter &) + static bool OwnerDeityFilter(const Sign * const *a, StringFilter &) { /* You should never be able to edit signs of owner DEITY */ return (*a)->owner != OWNER_DEITY; } /** Filter sign list by owner */ - static bool CDECL OwnerVisibilityFilter(const Sign * const *a, StringFilter &) + static bool OwnerVisibilityFilter(const Sign * const *a, StringFilter &) { assert(!HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS)); /* Hide sign if non-own signs are hidden in the viewport */ diff --git a/src/sortlist_type.h b/src/sortlist_type.h index 8edaa91435..7cc09c7826 100644 --- a/src/sortlist_type.h +++ b/src/sortlist_type.h @@ -47,7 +47,7 @@ template class GUIList : public std::vector { public: using SortFunction = std::conditional_t, bool (const T&, const T&), bool (const T&, const T&, const P)>; ///< Signature of sort function. - typedef bool CDECL FilterFunction(const T*, F); ///< Signature of filter function. + using FilterFunction = bool(const T*, F); ///< Signature of filter function. protected: std::span sort_func_list; ///< the sort criteria functions From 0fdabca605726b81ba3bce9185f354f276ef949a Mon Sep 17 00:00:00 2001 From: Rubidium Date: Thu, 25 Apr 2024 20:36:11 +0200 Subject: [PATCH 411/695] Codechange: use std::span instead of custom span in TGP --- src/tgp.cpp | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/src/tgp.cpp b/src/tgp.cpp index 97860024fd..50d964cdf8 100644 --- a/src/tgp.cpp +++ b/src/tgp.cpp @@ -285,7 +285,7 @@ static Amplitude GetAmplitude(int frequency) int smoothness = _settings_game.game_creation.tgen_smoothness; /* Get the table index, and return that value if possible. */ - int index = frequency - MAX_TGP_FREQUENCIES + lengthof(amplitudes[smoothness]); + int index = frequency - MAX_TGP_FREQUENCIES + static_cast(std::size(amplitudes[smoothness])); Amplitude amplitude = amplitudes[smoothness][std::max(0, index)]; if (index >= 0) return amplitude; @@ -560,20 +560,9 @@ static void HeightMapCurves(uint level) const ControlPoint curve_map_4[] = { { F(0.0), F(0.0) }, { F(0.4), F(0.3) }, { F(0.7), F(0.8) }, { F(0.92), F(0.99) }, { F(1.0), F(0.99) } }; #undef F - /** Helper structure to index the different curve maps. */ - struct ControlPointList { - size_t length; ///< The length of the curve map. - const ControlPoint *list; ///< The actual curve map. - }; - static const ControlPointList curve_maps[] = { - { lengthof(curve_map_1), curve_map_1 }, - { lengthof(curve_map_2), curve_map_2 }, - { lengthof(curve_map_3), curve_map_3 }, - { lengthof(curve_map_4), curve_map_4 }, - }; + static const std::span curve_maps[] = { curve_map_1, curve_map_2, curve_map_3, curve_map_4 }; - Height ht[lengthof(curve_maps)]; - MemSetT(ht, 0, lengthof(ht)); + std::array ht{}; /* Set up a grid to choose curve maps based on location; attempt to get a somewhat square grid */ float factor = sqrt((float)_height_map.size_x / (float)_height_map.size_y); @@ -582,7 +571,7 @@ static void HeightMapCurves(uint level) std::vector c(static_cast(sx) * sy); for (uint i = 0; i < sx * sy; i++) { - c[i] = Random() % lengthof(curve_maps); + c[i] = RandomRange(static_cast(std::size(curve_maps))); } /* Apply curves */ @@ -642,12 +631,12 @@ static void HeightMapCurves(uint level) *h -= I2H(1); /* Apply all curve maps that are used on this tile. */ - for (uint t = 0; t < lengthof(curve_maps); t++) { - if (!HasBit(corner_bits, t)) continue; + for (size_t t = 0; t < std::size(curve_maps); t++) { + if (!HasBit(corner_bits, static_cast(t))) continue; [[maybe_unused]] bool found = false; - const ControlPoint *cm = curve_maps[t].list; - for (uint i = 0; i < curve_maps[t].length - 1; i++) { + auto &cm = curve_maps[t]; + for (size_t i = 0; i < cm.size() - 1; i++) { const ControlPoint &p1 = cm[i]; const ControlPoint &p2 = cm[i + 1]; From a60a81f34e8d8e126f0cab4e8f68b3d4b29076df Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 26 Apr 2024 04:41:25 +0000 Subject: [PATCH 412/695] Update: Translations from eints swedish: 7 changes by joeax910 vietnamese: 15 changes by anmatngu greek: 31 changes by gh658804, 2 changes by KyriakosMich hungarian: 2 changes by egri-nagy portuguese (brazilian): 2 changes by pasantoro --- src/lang/afrikaans.txt | 3 +- src/lang/arabic_egypt.txt | 2 + src/lang/basque.txt | 3 +- src/lang/belarusian.txt | 3 +- src/lang/brazilian_portuguese.txt | 7 ++-- src/lang/bulgarian.txt | 3 +- src/lang/catalan.txt | 3 +- src/lang/chuvash.txt | 2 + src/lang/croatian.txt | 3 +- src/lang/czech.txt | 3 +- src/lang/danish.txt | 3 +- src/lang/dutch.txt | 3 +- src/lang/english_AU.txt | 3 +- src/lang/english_US.txt | 3 +- src/lang/esperanto.txt | 3 +- src/lang/estonian.txt | 3 +- src/lang/faroese.txt | 3 +- src/lang/finnish.txt | 3 +- src/lang/french.txt | 3 +- src/lang/frisian.txt | 3 +- src/lang/gaelic.txt | 3 +- src/lang/galician.txt | 3 +- src/lang/german.txt | 3 +- src/lang/greek.txt | 69 ++++++++++++++++--------------- src/lang/hebrew.txt | 3 +- src/lang/hindi.txt | 2 + src/lang/hungarian.txt | 6 ++- src/lang/icelandic.txt | 3 +- src/lang/ido.txt | 2 + src/lang/indonesian.txt | 3 +- src/lang/irish.txt | 3 +- src/lang/italian.txt | 3 +- src/lang/japanese.txt | 3 +- src/lang/korean.txt | 3 +- src/lang/latin.txt | 3 +- src/lang/latvian.txt | 3 +- src/lang/lithuanian.txt | 3 +- src/lang/luxembourgish.txt | 3 +- src/lang/macedonian.txt | 2 + src/lang/malay.txt | 3 +- src/lang/maltese.txt | 2 + src/lang/marathi.txt | 2 + src/lang/norwegian_bokmal.txt | 3 +- src/lang/norwegian_nynorsk.txt | 3 +- src/lang/persian.txt | 2 + src/lang/polish.txt | 3 +- src/lang/portuguese.txt | 3 +- src/lang/romanian.txt | 3 +- src/lang/russian.txt | 3 +- src/lang/serbian.txt | 3 +- src/lang/simplified_chinese.txt | 3 +- src/lang/slovak.txt | 3 +- src/lang/slovenian.txt | 3 +- src/lang/spanish.txt | 3 +- src/lang/spanish_MX.txt | 3 +- src/lang/swedish.txt | 10 ++++- src/lang/tamil.txt | 3 +- src/lang/thai.txt | 3 +- src/lang/traditional_chinese.txt | 3 +- src/lang/turkish.txt | 3 +- src/lang/ukrainian.txt | 3 +- src/lang/urdu.txt | 2 + src/lang/vietnamese.txt | 19 ++++++++- src/lang/welsh.txt | 3 +- 64 files changed, 187 insertions(+), 92 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 77cc00f7df..21aa361b0b 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1590,7 +1590,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Standaard diens STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Kies die standaard diensskedule vir nuwe vliegtuie as geen diensskedule aangedui is nie STR_CONFIG_SETTING_SERVINT_SHIPS :Standaard diens interval vir bote: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Kies die standaard diensskedule vir nuwe skepe as geen diensskedule aangedui is nie -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}da{P g e}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Gedeaktiveer diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index e3534f09b8..9fb0279d03 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1513,6 +1513,8 @@ STR_CONFIG_SETTING_SERVINT_ISPERCENT :فترات ال STR_CONFIG_SETTING_SERVINT_AIRCRAFT :مدة فحص الإفتراضي للطائرة: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS :مدة فحص الإفتراضي للسفن: {STRING} +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :غير مفعل diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 4815bcf29b..0bdb78c006 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1522,7 +1522,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Hegazkinen mant STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Ezarri hegazkin berrientzako lehenetsiko diren mantenimendu denbora tarteak, ez bada ezartzen denbora tarte esplizituak ezarriko dira STR_CONFIG_SETTING_SERVINT_SHIPS :Itsaontzien mantenimendurako lehenetsitako denbora tarteak: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Ezarri itsasontzi berrientzako lehenetsiko diren mantenimendu denbora tarteak, ez bada ezartzen denbora tarte esplizituak ezarriko dira -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}egun{P 0 "" ak}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Desgaitua diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 9b3e06fb18..1bb20e0cd7 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2145,7 +2145,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Iнтэрвал STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Усталяваць міжсэрвісны інтэрвал для новых паветраных суднаў, калі пэўны інтэрвал ня вызначаны для канкрэтнага судна. STR_CONFIG_SETTING_SERVINT_SHIPS :Iнтэрвал абслугоўваньня для караблёў: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Усталяваць міжсэрвісны інтэрвал для новых караблёў, калі пэўны інтэрвал ня вызначаны для канкрэтнага судна. -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}д{P зень днi дзён}/хвілін{P а ы ""}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :адключана diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 9d6c001e99..57d775b804 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1833,7 +1833,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervalo padr STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Definir o intervalo padrão de manutenção para novas aeronaves, se um intervalo de manutenção não for explicitamente configurado para o veículo STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalo padrão de manutenção para embarcações: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Definir o intervalo padrão de manutenção para novas embarcações, se um intervalo de manutenção não for explicitamente configurado para o veículo -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Dia{P 0 "" s}/Minuto{P 0 "" s}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Desativado @@ -2373,7 +2374,7 @@ STR_NETWORK_SERVER_LIST_GAME_NAME :{BLACK}Nome STR_NETWORK_SERVER_LIST_GAME_NAME_TOOLTIP :{BLACK}Nome do jogo STR_NETWORK_SERVER_LIST_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA} STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION :{BLACK}Clientes -STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Clientes conectados / máx. clientes{}Empresas / máx. empresas +STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Clientes conectados / máx. clientes{}Empresas ativas / máx. empresas STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x{COMMA} STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Tamanho do mapa STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Tamanho do mapa do jogo{}Clique para ordenar por área @@ -3461,7 +3462,7 @@ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Incompatí # NewGRF save preset window STR_SAVE_PRESET_CAPTION :{WHITE}Salvar predefinição -STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lista de predefinições disponíveis, selecione uma para copiar o nome e usar na gravação abaixo +STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lista de predefinições disponíveis, selecione uma usar o nome na gravação abaixo STR_SAVE_PRESET_TITLE :{BLACK}Introduza um nome para a predefinição STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Nome que está selecionado para salvar a predefinição STR_SAVE_PRESET_CANCEL :{BLACK}Cancelar diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 4ff5b6a6f4..a196d4cac6 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1665,7 +1665,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Интерва STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Задайте интервала за обслужване на новите въздухоплавателни средства по подразбиране, ако такъв интервал не е зададен за превозното средство STR_CONFIG_SETTING_SERVINT_SHIPS :Интервал на обслужване за кораби: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Задайте интервала за обслужване на новите кораби по подразбиране, ако такъв интервал не е изрично зададен за превозното средство -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}д{P 0 ен ни}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Изключен diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 7007438e45..8f99fc6e6c 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1833,7 +1833,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Interval per de STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Estableix l'interval de revisió predeterminat pels nous avions, si no hi ha un interval de revisió explícit pel vehicle STR_CONFIG_SETTING_SERVINT_SHIPS :Interval per defecte de servei per als vaixells: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Estableix l'interval de revisió predeterminat pels vaixells que es comprin, si no hi ha un interval de revisió explícit pel vehicle. -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}di{P 0 a es}/minut{P 0 "" s}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Desactivat diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index 1bd4cd3df0..6e4a43f710 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -752,6 +752,8 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31 +###length 3 + ###setting-zero-is-special diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 25e44e6b32..864144d453 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1705,7 +1705,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Zadani interval STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Postavi osnovni interval servisa za nove zrakoplove, ako nije postavljen drugi specifični interval za određeno vozilo STR_CONFIG_SETTING_SERVINT_SHIPS :Zadani interval servisiranja za brodove: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Postavi osnovni interval servisa za nove brodove, ako nije postavljen drugi specifični interval za određeno vozilo -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}dan{P 0 "" a a}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Isključeno diff --git a/src/lang/czech.txt b/src/lang/czech.txt index e680ee7475..3fef564e8a 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1916,7 +1916,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Základní serv STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Nastaví defaultní servisní interval pro letadla, pokud letadlo nemá nastaveno jiný servisní interval STR_CONFIG_SETTING_SERVINT_SHIPS :Základní servisní interval pro lodě: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Nastaví defaultní servisní interval pro lodě pokud loď nemá nastaven jiný servisní interval -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}D{P en ní ""}/Minut{P a y ""}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Vypnuto diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 43315a6951..ddcf869978 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1832,7 +1832,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Standard servic STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Sæt serviceintervallets standardværdi for nye fly. STR_CONFIG_SETTING_SERVINT_SHIPS :Standard serviceinterval for skibe: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Sæt serviceintervallets standardværdi for nye skibe. -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}dag{P 0 "" s}/Minute{P 0 "" r}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Deaktiveret diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 9c709cfc71..f73bf9abb4 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1832,7 +1832,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Standaardonderh STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Standaardonderhoudsterrmijn voor nieuwe vliegtuigen als er geen expliciete onderhoudstermijn is ingesteld voor het voertuig STR_CONFIG_SETTING_SERVINT_SHIPS :Standaardonderhoudstermijn voor schepen: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Standaardonderhoudstermijn voor nieuwe schepen als er geen expliciete onderhoudstermijn is ingesteld voor het voertuig -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}dag{P 0 "" en}/minu{P 0 ut ten}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Uitgeschakeld diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 27ec2b065c..9e6f6bb345 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1832,7 +1832,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Default service STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Set the default service interval for new aircraft, if no explicit service interval is set for the vehicle STR_CONFIG_SETTING_SERVINT_SHIPS :Default service interval for ships: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Set the default service interval for new ships, if no explicit service interval is set for the vehicle -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Day{P 0 "" s}/Minute{P 0 "" s}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Disabled diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index e47c7b95ca..42f5441f94 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1832,7 +1832,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Default mainten STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Set the default maintenance interval for new aircraft, if no explicit maintenance interval is set for the vehicle STR_CONFIG_SETTING_SERVINT_SHIPS :Default maintenance interval for ships: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Set the default maintenance interval for new ships, if no explicit maintenance interval is set for the vehicle -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Day{P 0 "" s}/Minute{P 0 "" s}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Disabled diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 6407efec0e..d7d155197a 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1841,7 +1841,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Defaŭlta prise STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Elektu la defaŭltan priservintervalon por novaj aviadiloj, se ne estas eksplicite agordita priservintervalo por la veturilo STR_CONFIG_SETTING_SERVINT_SHIPS :Defaŭlta priservintervalo por ŝipoj: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Elektu la defaŭltan priservintervalon por novaj ŝipoj, se ne estas eksplicite agordita priservintervalo por la veturilo -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}tago{P 0 "" j}/minuto{P 0 "" j}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Malaktiva diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 2ba4038a0c..98f75a5ac6 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1888,7 +1888,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Õhusõidukite STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Määrab uute õhusõidukite hooldusvälba, kui sõidukile eraldi hooldusvälpa ei määrata STR_CONFIG_SETTING_SERVINT_SHIPS :Laevade hooldusvälba vaikeväärtus: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Määrab uute laevade hooldusvälba, kui sõidukile eraldi hooldusvälpa ei määrata -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Päev{P 0 "" a}/Minut{P 0 "" it}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Väljas diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 6a4460a8a3..c6c765168c 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1503,7 +1503,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Vanligur eftirl STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Áset vanliga eftirlits títtleikan hjá nýggjumf logførum, um eingin skilligur eftirlits títtleiki er ásettur fyri flutningstóli STR_CONFIG_SETTING_SERVINT_SHIPS :Vanligur eftirlits títtleiki fyri skip: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Áset vanliga eftirlits títtleikan hjá nýggjum skipum, um eingin skilligur eftirlits títtleiki er ásettur fyri flutningstóli -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA} dag{P 0 "" ar}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Ikki sligi til diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index f3fe6394ed..e73b3cd56f 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1832,7 +1832,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Lentokoneiden o STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Määritä oletushuoltoväli uusille lentokoneille, mikäli kulkuneuvolle ei ole määritelty erillistä huoltoväliä STR_CONFIG_SETTING_SERVINT_SHIPS :Laivojen oletushuoltoväli: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Määritä oletushuoltoväli uusille laivoille, mikäli kulkuneuvolle ei ole määritelty erillistä huoltoväliä -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}päivä{P 0 "" ä}/minuutti{P 0 "" a}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Pois käytöstä diff --git a/src/lang/french.txt b/src/lang/french.txt index 6dff3f4861..bd3fb68d1b 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1833,7 +1833,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervalle d'en STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Définit l'intervalle d'entretien par défaut des nouveaux aéronefs, si aucun intervalle d'entretien n'est défini pour le véhicule STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalle d'entretien par défaut pour les navires{NBSP}: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Définit l'intervalle d'entretien par défaut des nouveaux navires, si aucun intervalle d'entretien n'est défini pour le véhicule -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}jour{P 0 "" s}/minute{P 0 "" s}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Désactivé diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index 603d9dd1da..2e5469608b 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -1570,7 +1570,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Standert repara STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Stel it standert reparaasjeskema yn foar nije fleantugen dy't gjin eigen reparaasjeskema kenne STR_CONFIG_SETTING_SERVINT_SHIPS :Standerd reparaasjeskema foar skippen: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Stel it standerd reparaasjeskema yn foar nije skippen dy't gjin eigen reparaasjeskema kenne -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}{P 0 dei dagen}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Útskeakele diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 0f7da64d20..fff9449a89 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1769,7 +1769,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Tricead bunaite STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Tagh dè cho tric ’s a thèid obair-chàraidh a dhèanamh air carbadan-adhair ùra mura deach tricead a’ chàraidh sònraichte a shuidheachadh airson a' charbaid STR_CONFIG_SETTING_SERVINT_SHIPS :Tricead bunaiteach na h-obrach-càraidh air longan: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Tagh dè cho tric ’s a thèid obair-chàraidh a dhèanamh air longan ùra mura deach tricead a’ chàraidh sònraichte a shuidheachadh airson na luinge -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}{P 0 latha latha làithean latha}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :À comas diff --git a/src/lang/galician.txt b/src/lang/galician.txt index de61d4bfa2..dd2cf47193 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1833,7 +1833,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervalo de ma STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Fixa o intervalo de mantemento por defecto para avións novos, o cal se empregará no caso de que non se defina explicitamente un novo intervalo de mantemento para o vehículo STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalo de mantemento por defecto para navíos: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Fixa o intervalo de mantemento por defecto para navíos novos, o cal se empregará no caso de que non se defina explicitamente un novo intervalo de mantemento para o vehículo -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Día{P 0 "" s}/Minuto{P 0 "" s}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Desactivado diff --git a/src/lang/german.txt b/src/lang/german.txt index 7d2d2c84b6..e408441918 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1833,7 +1833,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Standard-Wartun STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Setze das Standardwartungsintervall für Luftfahrzeuge. Dieses Wartungsintervall wird von allen Luftfahrzeugen eingehalten, denen kein individuelles Wartungsintervall zugewiesen worden ist STR_CONFIG_SETTING_SERVINT_SHIPS :Standard-Wartungsintervall für Schiffe: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Setze das Standardwartungsintervall für Schiffe. Dieses Wartungsintervall wird von allen Schiffen eingehalten, denen kein individuelles Wartungsintervall zugewiesen worden ist -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Tag{P 0 "" e}/Minute{P 0 "" n}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Deaktiviert diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 1d3871ed55..75ec914d7f 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -44,7 +44,7 @@ STR_CARGO_PLURAL_WOOD :{G=f}Ξυλεί STR_CARGO_PLURAL_WOOD.geniki :Ξυλείας STR_CARGO_PLURAL_IRON_ORE :{G=n}Σιδηρομεταλλεύματα STR_CARGO_PLURAL_IRON_ORE.geniki :Σιδηρομεταλλευμάτων -STR_CARGO_PLURAL_STEEL :{G=m}Χάλυβες +STR_CARGO_PLURAL_STEEL :{G=m}Χάλυβα STR_CARGO_PLURAL_STEEL.geniki :Χάλυβα STR_CARGO_PLURAL_VALUABLES :{G=n}Πολύτιμα είδη STR_CARGO_PLURAL_VALUABLES.geniki :Πολύτιμων ειδών @@ -65,7 +65,7 @@ STR_CARGO_PLURAL_GOLD.geniki :Χρυσού STR_CARGO_PLURAL_WATER :{G=n}Νερά STR_CARGO_PLURAL_WATER.geniki :Νερών STR_CARGO_PLURAL_WHEAT :Σιτάρια -STR_CARGO_PLURAL_WHEAT.geniki :Σιταριών +STR_CARGO_PLURAL_WHEAT.geniki :Σιτάρι STR_CARGO_PLURAL_RUBBER :{G=n}Λάστιχα STR_CARGO_PLURAL_RUBBER.geniki :Λάστιχων STR_CARGO_PLURAL_SUGAR :{G=f}Ζάχαρη @@ -267,7 +267,7 @@ STR_COLOUR_SECONDARY_ORANGE :Πορτοκα STR_COLOUR_SECONDARY_BROWN :Καφέ STR_COLOUR_SECONDARY_GREY :Γκρι STR_COLOUR_SECONDARY_WHITE :Άσπρο -STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Ίδιο με το πρωταρχικό +STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Ίδιο με το Αρχικό # Units used in OpenTTD @@ -526,7 +526,7 @@ STR_FILE_MENU_EXIT :Έξοδος # Map menu STR_MAP_MENU_MAP_OF_WORLD :Χάρτης του κόσμου -STR_MAP_MENU_EXTRA_VIEWPORT :Πρόσθετη εμφάνιση +STR_MAP_MENU_EXTRA_VIEWPORT :Πρόσθετο παράθυρο προβολής STR_MAP_MENU_LINGRAPH_LEGEND :Υπόμνημα ροής φορτίου STR_MAP_MENU_SIGN_LIST :Λίστα πινακίδων @@ -1026,7 +1026,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}Η τοπική αρχή της {TOWN} υπογράφει σύμβαση με την {STRING} για 12 λεπτά αποκλειστικών δικαιωμάτων μεταφοράς! # Extra view window -STR_EXTRA_VIEWPORT_TITLE :{WHITE}Εμφάνιση {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Προβολή {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Αντιγραφή στο παράθυρο εμφάνισης STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Αντιγραφή της τοποθεσίας της κύριας προβολής σε αυτό το παράθυρο εμφάνισης STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Επικόλληση από παράθυρο εμφάνισης @@ -1139,7 +1139,7 @@ STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Τρέχ STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Μέγεθος διεπαφής STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Σύρετε το κουμπί για να ορίσετε το μέγεθος του περιβάλλοντος διεπαφής. Ctrl+Σύρσιμο για συνεχή προσαρμογή -STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Αυτόματη εντόπιση μεγέθους +STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Αυτόματος εντοπισμός μεγέθους STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Τσεκάρετε αυτό το κουτάκι για να ανιχνεύεται το μέγεθος της διεπαφής αυτόματα STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Κλίση κλίμακας @@ -1183,7 +1183,7 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Βασι STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Επιλέξτε το βασικό σετ μουσικής για χρήση STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Επιπλέον πληροφορίες σχετικά με το βασικό σετ μουσικής -STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(δεν έχουν εγκατασταθεί plugins για ενοποίηση με πλατφόρμες κοινωνικής δικτύωσης) +STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(δεν έχουν εγκατασταθεί plugins για διασύνδεση με πλατφόρμες κοινωνικής δικτύωσης) STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{BLACK}{STRING} ({STRING}) STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :{BLACK}Πλατφόρμα: @@ -1343,8 +1343,8 @@ STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Εμφά ###length 3 STR_CONFIG_SETTING_OFF :Ανενεργό -STR_CONFIG_SETTING_ON :Ενεργή -STR_CONFIG_SETTING_DISABLED :Ανένεργη +STR_CONFIG_SETTING_ON :Ενεργό +STR_CONFIG_SETTING_DISABLED :Ανένεργο ###length 3 STR_CONFIG_SETTING_COMPANIES_OFF :Ανένεργο @@ -1382,7 +1382,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Ταχύτητ STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Περιορίζει το ποσοστό των οικοδομήμσεων από τα ΑΙ STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Βλάβες οχημάτων: {STRING} -STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Ελέγχει πόσο συχνά τα ανεπαρκώς συντηρημένα οχήματα παθαίνουν βλάβες +STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Ελέγχει πόσο συχνά παθαίνουν βλάβες τα ανεπαρκώς συντηρημένα οχήματα STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Πολλαπλασιαστής επιδότησης: {STRING} STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Θέστε πόσο ξεπληρώνεται για επιδοτημένες συνδέσεις @@ -1434,7 +1434,7 @@ STR_CONFIG_SETTING_TRAIN_LENGTH :Μέγιστο STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Ορίστε το μέγιστο μήκος των τρένων STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} τετραγωνίδι{P 0 ο α} -STR_CONFIG_SETTING_SMOKE_AMOUNT :Ποσότητα καπνού/σπινθύρων οχήματος: {STRING} +STR_CONFIG_SETTING_SMOKE_AMOUNT :Ποσότητα καπνού/σπινθήρων οχήματος: {STRING} STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Ορίστε τον όγκο του καπνού ή τον αριθμό των σπιθών που παράγονται από τα οχήματα STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Μοντέλο επιτάχυνσης τρένων: {STRING} @@ -1450,7 +1450,7 @@ STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Κλίση εδάφους για τα οδικά οχήματα: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Η κλίση ενός κεκλιμένου τετραγωνίδιου για τα οδικά οχήματα. Μεγαλύτερες τιμές καθιστούν δυσκολότερο το ανέβασμα λόφων -STR_CONFIG_SETTING_FORBID_90_DEG :Απαγόρευση στα τρένα να κάνουν στροφές 90°: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG :Απαγορεύεται στα τρένα να κάνουν στροφές 90°: {STRING} STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Στροφές 90 μοιρών προκύπτουν όταν μια οριζόντια σιδηροτροχιά ακολουθείται από μια κάθετη στο επόμενο τετραγωνίδιο, κάνοντας το τρένο να στρίψει κατά 90 μοίρες όταν αλλάζει τετραγωνίδιο, αντί για τις συνηθισμένες 45 μοίρες σε άλλους συνδυασμούς σιδηροτροχιών STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Να επιτρέπεται η συνένωση μη παρακείμενων σταθμών: {STRING} @@ -1496,10 +1496,10 @@ STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Εμφάνισ STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Όταν ενεργοποιείται, το παράθυρο των οικονομικών πληροφοριών εμφανίζεται στο τέλος κάθε χρόνου για ευκολότερο έλεγχο της οικονομικής κατάστασης της εταιρείας STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Εάν είναι ενεργοποιημένο, το παράθυρο οικονομικών αναδύεται στο τέλος κάθε περιόδου για να επιτρέψει την εύκολη επιθεώρηση της οικονομικής κατάστασης της εταιρείας -STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Οι νέες οδηγίες είναι «χωρίς στάση» από προεπιλογή: {STRING} +STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Οι νέες οδηγίες είναι «χωρίς στάση» εξ' ορισμού: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Κανονικά, τα οχήματα σταματούν σε κάθε σταθμό που περνούν. Ενεργοποιώντας αυτήν τη ρύθμιση, δεν θα σταματούν σε κανένα σταθμό που θα βρει στη διαδρομή τους προς τον τελικό προορισμό. Σημείωστε πως αυτή η ρύθμιση ορίζει μόνο μια καθορισμένη τιμή για νέες εντολές. Ειδικές εντολές μπορούν να δοθούν για οποιαδήποτε συμπεριφορά, άσχετα από την προκαθορισμένη -STR_CONFIG_SETTING_STOP_LOCATION :Οι εντόλες νέων τρένων διορίζουν ότι σταματάνε εξ ορισμού στο {STRING} της πλατφόρμας +STR_CONFIG_SETTING_STOP_LOCATION :Οι νέες εντόλες τρένων έχουν στάση εξ' ορισμού στο {STRING} της πλατφόρμας STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Ορισμός προεπιλεγμένου σημείου που θα σταματούν τα τρένα στην πλατφόρμα. Το «κοντινό άκρο» σημαίνει κοντά στο σημείο εισόδου, «μέση» σημαίνει στο μέσο της πλατφόρμας και «μακρινό άκρο» σημαίνει στο άλλο άκρο από το σημείο εισόδου. Σημειώστε ότι αυτή η ρύθμιση ορίζει μόνο την προεπιλεγμένη τιμή για νέες εντολές. Οι μεμονωμένες εντολές μπορούν να έχουν τη δική τους θέση στάσης κάνοντας κλικ πάνω στο κείμενο της εντολής ###length 3 STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :κοντινό άκρο @@ -1509,10 +1509,10 @@ STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :μακρινό STR_CONFIG_SETTING_AUTOSCROLL :Μετακίνηση παραθύρου όταν το ποντίκι είναι στην άκρη: {STRING} STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Όταν είναι ενεργή, η εμφάνιση θα κυλά όταν το ποντίκι είναι κοντά στην άκρη του παραθύρου ###length 4 -STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Απενεργοποιημένη -STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Κύρια εμφάνιση, μόνο σε πλήρη οθόνη -STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Κύρια εμφάνιση -STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Κάθε εμφάνιση +STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Απενεργοποιημένο +STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Κύριο παράθυρο προβολής, μόνο σε πλήρη οθόνη +STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Κύριο παράθυρο προβολής +STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Κάθε παράθυρο προβολής STR_CONFIG_SETTING_BRIBE :Επιτρέπεται η δωροδοκία της τοπικής αρχής: {STRING} ###length 2 @@ -1557,7 +1557,7 @@ STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Επιτρέπ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Δεν είναι δυνατή η αλλαγή αυτής της ρύθμισης όταν υπάρχουν οχήματα. STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Συντήρηση υποδομής: {STRING} -STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Όταν είναι ενεργοποιημένη, οι υποδομές προκαλούν έξοδα συντήρησης. Το κόστος μεγαλώνει δυσανάλογα με το μέγεθος του δικτύου, επηρεάζοντας έτσι τις μεγάλες εταιρείες περισσότερο από τις μικρότερες +STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Όταν είναι ενεργοποιημένο, οι υποδομές προκαλούν έξοδα συντήρησης. Το κόστος μεγαλώνει υπεραναλογικά με το μέγεθος του δικτύου, επηρεάζοντας έτσι τις μεγάλες εταιρείες περισσότερο από τις μικρότερες STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Αρχικό χρώμα εταιρίας: {STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Επιλογή του αρχικού χρώματος της εταιρίας @@ -1608,21 +1608,21 @@ STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Αυτόματη ανανέωση όταν ένα όχημα παλιώνει: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Όταν είναι ενεργοποιημένη, τα οχήματα που πλησιάζουν το τέλος της ζωής τους αντικαθίσταται αυτόματα όταν πληρούνται οι προϋποθέσεις αντικατάστασής του -STR_CONFIG_SETTING_AUTORENEW_MONTHS :Αυτόματη αντικατάστηση όταν το όχημα είναι {STRING} μέγιστης ηλικίας +STR_CONFIG_SETTING_AUTORENEW_MONTHS :Αυτόματη αντικατάστηση όταν το όχημα είναι {STRING} την μέγιστη ηλικία STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Σχετική ηλικία κατά την οποία κάποιο όχημα θα πρέπει να εξεταστεί για αυτόματη ανανέωση ###length 2 STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} μήν{P 0 α ες} πριν STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} μήν{P 0 α ες} μετά STR_CONFIG_SETTING_AUTORENEW_MONEY :Αυτόματη ανανέωση με τα ελάχιστα απαιτούμενα χρήματα: {STRING} -STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Ελάχιστο χρηματικό ποσό που θα πρέπει να υπολείπεται στην τράπεζα πριν εξεταστεί η αυτόματη ανανέωση των οχημάτων +STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Ελάχιστο χρηματικό ποσό που θα πρέπει να απομείνει στην τράπεζα πριν εξεταστεί η αυτόματη ανανέωση των οχημάτων STR_CONFIG_SETTING_ERRMSG_DURATION :Διάρκεια μηνύματος σφάλματος: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Διάρκεια εμφάνισης μηνύματων σφάλματος σε κόκκινο παράθυρο. Σημειώστε ότι μερικά (κρίσιμα) μηνύματα σφάλματος δεν κλείνουν αυτόματα μετά από αυτόν τον χρόνο, αλλά πρέπει να κλείσουν χειροκίνητα STR_CONFIG_SETTING_HOVER_DELAY :Εμφάνιση αναδυόμενων μηνυμάτων: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Καθυστέρηση πριν την εμφάνιση των επεξηγήσεων όταν ο δείκτης του ποντικιού βρίσκεται πάνω από κάποιο στοιχείο της διεπαφής. Εναλλακτικά, οι επεξηγήσεις συνδέονται με το δεξί κουμπί του ποντικιού όταν η τιμή αυτού του πεδίου είναι 0 -STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Ο δείκτης του ποντικιού να βρίσκεται από πάνω για {COMMA} δευτερόλεπτ{P 0 ο α} +STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Ο δείκτης του ποντικιού να βρίσκεται από πάνω για {COMMA} χιλιοστά του δευτερολέπτου ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Δεξί κουμπί @@ -1691,8 +1691,8 @@ STR_CONFIG_SETTING_ROAD_SIDE :Οχήματα STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Επιλέξτε την πλευρά οδήγησης ###length 2 -STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Οδηγούν από αριστερά -STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Οδηγούν από δεξιά +STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Οδήγηση από αριστερά +STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Οδήγηση από δεξιά STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Περιστροφή χάρτη υψομετρίας: {STRING} STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Επιλέξτε με ποιον τρόπο θα περιστραφεί η εικόνα του ύψους χάρτη, για να ταιριάζει στον κόσμο του παιχνιδιού @@ -1746,7 +1746,7 @@ STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Εμφάνισ STR_CONFIG_SETTING_LIVERIES :Εμφάνιση χρωμάτων των εταιριών: {STRING} STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Ελέγξτε τη χρήση του χρωματικού μοτίβου των τύπων των οχημάτων για τα οχήματα (σε αντίθεση με τα εταιρικά) ###length 3 -STR_CONFIG_SETTING_LIVERIES_NONE :Κανένας +STR_CONFIG_SETTING_LIVERIES_NONE :Κανένα STR_CONFIG_SETTING_LIVERIES_OWN :Η εταιρία μου STR_CONFIG_SETTING_LIVERIES_ALL :Όλες οι εταιρίες @@ -1792,7 +1792,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_NO :Όχι STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES :Ναι STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :Ναι, εκτός από το καρφιτσωμένο -STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Χρήση της {STRING} ημερολογιακής μορφής στα ονόματα αποθηκευμένων παιχνιδιών +STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Χρήση της ημερολογιακής μορφής {STRING} στα ονόματα αποθηκευμένων παιχνιδιών STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Μορφή της ημερομηνίας στα αρχεία αποθήκευσης παιχνιδιών ###length 3 STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :μακριά (31 Δεκ 2008) @@ -1865,10 +1865,10 @@ STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Τέλος πε STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Παίζει ηχητικό εφέ στο τέλος του χρόνου που συνοψίζει την επίδοση της εταιρείας κατά την διάρκεια αυτού του χρόνου σε σχέση με τον προηγούμενο χρόνο STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Παίζει ηχητικό εφέ στο τέλος του χρόνου που συνοψίζει την επίδοση της εταιρείας κατά την διάρκεια αυτής της περιόδου σε σχέση με την προηγούμεη περίοδο -STR_CONFIG_SETTING_SOUND_CONFIRM :Οικοδομή: {STRING} +STR_CONFIG_SETTING_SOUND_CONFIRM :Κατασκευή: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Παίζει ηχητικό εφέ σε επιτυχής οικοδομές ή άλλες δράσεις -STR_CONFIG_SETTING_SOUND_CLICK :πατήματα κουμπιού: {STRING} +STR_CONFIG_SETTING_SOUND_CLICK :Πατήματα κουμπιού: {STRING} STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :Παίζει ήχο όταν γίνεται κλικ σε κουμπιά STR_CONFIG_SETTING_SOUND_DISASTER :Καταστροφές/ατυχήματα: {STRING} @@ -1924,7 +1924,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Προκαθο STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Ορίστε το προκαθορισμένο διάστημα μεταξύ συντηρήσεων για τα νέα αεροσκάφη, όταν δεν δίνεται άλλο διάστημα για το αεροσκάφος STR_CONFIG_SETTING_SERVINT_SHIPS :Προκαθορισμένο διάστημα μεταξύ επισκευών για τα πλοία: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Ορίστε το προκαθορισμένο διάστημα μεταξύ συντηρήσεων για τα νέα πλοία, όταν δεν δίνεται άλλο διάστημα για το πλοίο -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Ημέρ{P 0 α ες}/Λεπτ{P ό ά}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Απενεργοποιημένο @@ -1967,7 +1968,7 @@ STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES_HELPTEXT :Εμφάνισ STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY :Αλλαγή της παραγωγής των βιομηχανιών που εξυπηρετούνται από την εταιρία: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :Εμφάνιση εφημερίδας όταν μεταβάλλεται η παραγωγικότητα μιας βιομηχανίας που εξυπηρετείται από την εταιρία -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER :Διαφοροποιήσεις στην παραγωγή των βιομηχανιών που εξυπηρετούνται από ανταγωνιστή(-ές): {STRING} +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER :Διαφοροποιήσεις στην παραγωγή των βιομηχανιών που εξυπηρετούνται από ανταγωνιστή/ές: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :Εμφάνιση εφημερίδας όταν μεταβάλλεται η παραγωγικότητα μιας βιομηχανίας που εξυπηρετείται από ανταγωνιστές STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Άλλες διαφοροποιήσεις στη παραγωγή: {STRING} @@ -1988,7 +1989,7 @@ STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Πρόβαλλ STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION :Γενικές πληροφορίες: {STRING} STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION_HELPTEXT :Εμφάνιση εφημερίδας σε γενικά συμβάντα, όπως αγορά αποκλειστικών δικαιωμάτων ή χρηματοδότηση ανακατασκευής δρόμων ###length 3 -STR_CONFIG_SETTING_NEWS_MESSAGES_OFF :Απενεργοποιημένα +STR_CONFIG_SETTING_NEWS_MESSAGES_OFF :Απενεργοποιημένο STR_CONFIG_SETTING_NEWS_MESSAGES_SUMMARY :Περιλήψεις STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Ολόκληρα @@ -2080,7 +2081,7 @@ STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Απόστασ STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} εικονοστοιχεί{P 0 ο α} ###setting-zero-is-special STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Απενεργοποιημένη -STR_CONFIG_SETTING_SOFT_LIMIT :Μέγιστο όριο μη καρφωμένων παραθύρων: {STRING} +STR_CONFIG_SETTING_SOFT_LIMIT :Μέγιστο όριο μη καρφιτσωμένων παραθύρων: {STRING} STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Αριθμός μη μόνιμων ανοικτών παράθυρων πριν παλαιότερα παράθυρα κλείσουν αυτόματα για να κάνουν χώρα για τα νεότερα STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} ###setting-zero-is-special @@ -2234,7 +2235,7 @@ STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Αυτόματ STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Επιτρέπεται στα τρένα να αντιστραφούν σε σήμα, εάν περιμένουν εκεί για πολύ ώρα ###length 2 STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Συνίσταται) +STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Συνιστάται) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Αλλαγή τιμής ρύθμισης @@ -5033,7 +5034,7 @@ STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}... δε STR_ERROR_HEIGHTMAP_TOO_LARGE :{WHITE}... η εικόνα είναι πολύ μεγάλη STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}Προειδοποίηση κλίμακας -STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Αλλαγή μεγέθους του πηγαίου χάρτη δεν συνίσταται. Να προχωρήσει η δημιουργία; +STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Αλλαγή μεγέθους του πηγαίου χάρτη δεν συνιστάται. Να προχωρήσει η δημιουργία; # Soundset messages STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Βρέθηκε μόνο εφεδρικό σετ ήχου. Αν θέλετε ήχους, εγκαταστήστε ένα πακέτο ήχων μέσω του συστήματος μεταφόρτωσης υλικού diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 0735a2f273..47775a6a37 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1612,7 +1612,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :ברירת מח STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :קבע את ברירת המחדל למרווח הזמן בין תחזוקות עבור מטוסים חדשים, אם לא נקבע באופן מפורש מרווח זמן עבור כלי הרכב STR_CONFIG_SETTING_SERVINT_SHIPS :ברירת מחדל למרווח הזמן בין תחזוקות עבור אוניות: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :קבע את ברירת המחדל למרווח הזמן בין תחזוקות עבור אוניות חדשות, אם לא נקבע באופן מפורש מרווח זמן עבור כלי הרכב -STR_CONFIG_SETTING_SERVINT_VALUE :{P 0 "יום " ""}{COMMA}{P "" " ימים"}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :מבוטל diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index 534b54a7cc..f238c343d9 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -619,6 +619,8 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :कंप्य +###length 3 + ###setting-zero-is-special diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 2d7bfcced6..ace6c8aa60 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1895,7 +1895,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Alapértelmezet STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Alapértelmezett javítási intervallum beállítása új repülőgépeknek, ha nincs külön javítási intervallum beállítva a járműre STR_CONFIG_SETTING_SERVINT_SHIPS :Alapértelmezett javítási intervallum hajóknak: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Alapértelmezett javítási intervallum beállítása új hajóknak, ha nincs külön javítási intervallum beállítva a járműre -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Nap/Perc/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :kikapcsolva @@ -4453,7 +4454,7 @@ STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Nincs ára STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Szabad útra vár STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}A következő repülőtér túl messze van -STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Ütban {0:STATION} állomás felé +STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Útban {0:STATION} állomás felé STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Nincs utasítás STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Útban {0:WAYPOINT} felé STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Útban {0:DEPOT} felé @@ -5341,6 +5342,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Változt STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Még nincsenek elérhető járművek STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Indíts új játékot {DATE_SHORT} után, vagy használj olyan NewGRF-et, ami tartalmaz megfelelően korai járműveket! +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Nincs városban építhető út-típus # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Nem haladhatja meg a vonat a megállj jelzést... diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 273c166c58..f555e518e0 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1502,7 +1502,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Sjálfgefið mi STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Stilltu sjálfgefið millibil fyrir þjónustu hjá nýjum flugvélum, á við ef ekkert tiltekið millibil er stillt fyrir farartækið STR_CONFIG_SETTING_SERVINT_SHIPS :Sjálfgefið millibil fyrir þjónustu hjá skipum: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Stilltu sjálfgefið millibil fyrir þjónustu hjá nýjum skipum, á við ef ekkert tiltekið millibil er stillt fyrir farartækið -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA} dag{P 0 ur ar}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Óvirkt diff --git a/src/lang/ido.txt b/src/lang/ido.txt index ac7b50ddad..68a9baed14 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -733,6 +733,8 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violkolora +###length 3 + ###setting-zero-is-special diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index eab9806bc4..7156f51f80 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1791,7 +1791,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Interval perbai STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Setel interval perbaikan untuk pesawat baru, jika tidak ada interval asli yang disetel STR_CONFIG_SETTING_SERVINT_SHIPS :Interval dasar untuk kapal: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Mengatur interval perbaikan untuk kapal baru, jika tidak ada interval perbaikan, setelan dasar akan diatur untuk kendaraan -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}hari/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Di non-aktifkan diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 08b19d8814..dc2a059a59 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1648,7 +1648,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Eatramh seirbh STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Socraigh an t-eatramh seirbhísithe réamhshocraithe d'aerárthaigh nua, mura bhfuil eatramh seirbhísithe sainráite socraithe don fheithicil STR_CONFIG_SETTING_SERVINT_SHIPS :Eatramh seirbhíse réamhshocraithe do longa: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Socraigh an t-eatramh seirbhísithe réamhshocraithe do longa nua, mura bhfuil eatramh seirbhísithe sainráite socraithe don fheithicil -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}lá/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Díchumasaithe diff --git a/src/lang/italian.txt b/src/lang/italian.txt index ae2491cf07..70c30ec283 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1867,7 +1867,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervallo manu STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Imposta l'intervallo di manutenzione predefinito per i nuovi aeromobili, quando non viene impostato nessun intervallo esplicito STR_CONFIG_SETTING_SERVINT_SHIPS :Intervallo manutenzione predefinito navi: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Imposta l'intervallo di manutenzione predefinito per le nuove navi, quando non viene impostato nessun intervallo esplicito -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Giorn{P 0 o i}/Minut{P 0 o i}% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Disabilitato diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 5842462b4c..1ef33a56df 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1705,7 +1705,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :航空機の点 STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :個別に指定されていない場合の、航空機の点検周期を設定します STR_CONFIG_SETTING_SERVINT_SHIPS :船舶の点検周期: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :個別に指定されていない場合の、船舶の点検周期を設定します -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA} 日/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :点検なし diff --git a/src/lang/korean.txt b/src/lang/korean.txt index d425ac4e00..d9119e5bed 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1833,7 +1833,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :항공기에 STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :항공기에 따로 점검 기간이 설정되어있지 않은 경우에 사용할 기본 점검 기간을 설정합니다. STR_CONFIG_SETTING_SERVINT_SHIPS :선박에 대한 기본 점검 기준: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :선박에 따로 점검 기간이 설정되어있지 않은 경우에 사용할 기본 점검 기간을 설정합니다. -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}일/분/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :사용 안 함 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index da3b6d5595..7d42ba0553 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1767,7 +1767,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervallum min STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Eligere solitum intervallum ministrationis novis aeroplanis, si non est proprium intervallum ministrationis vehiculo STR_CONFIG_SETTING_SERVINT_SHIPS :Intervallum ministrationis solitum navibus: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Eligere solitum intervallum ministrationis novis navibus, si non est proprium intervallum ministrationis vehiculo -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}die{P 0 m s}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Neglectum diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 4484f63f8a..20e9ee837d 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1834,7 +1834,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Lidaparātu apk STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Izvēlēties jauniem lidaparātiem apkopju noklusējuma starplaiku, ja transportlīdzeklim tas nav noteikts STR_CONFIG_SETTING_SERVINT_SHIPS :Kuģu apkopju noklusējuma starplaiks: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Izvēlēties jauniem kuģiem apkopju noklusējuma starplaiku, ja transportlīdzeklim tas nav noteikts -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Dien{P 0 a as u}/Minūt{P 0 e es es}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :izslēgts diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index b7efc05846..3c30b47fdd 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1900,7 +1900,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Lėktuvų techn STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Numatytoji naujo lėktuvo techninės apžiūros intervalo reikšmė STR_CONFIG_SETTING_SERVINT_SHIPS :Laivų techninės apžiūros intervalas: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Numatytoji naujo laivo techninės apžiūros intervalo reikšmė -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}dien{P a os ų}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Išjungta diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 7bb67b299e..8f5674bf2f 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1831,7 +1831,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Standard Revisi STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Definéiert de Standardrevisiounsintervall fir nei Fligeren, wann keen expliziten Revisiounsintervall uginn ass STR_CONFIG_SETTING_SERVINT_SHIPS :Standard Revisiounsintervall fir Schëffer: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Definéiert de Standardrevisiounsintervall fir nei Schëffer, wann keen expliziten Revisiounsintervall uginn ass -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}D{P 0 ag eeg}/Minutt{P 0 "" en}% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Ausgeschalt diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index 4a0d5308d8..f99a1c36b1 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -1020,6 +1020,8 @@ STR_CONFIG_SETTING_SOUND_VEHICLE :Возила: { STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#ОПкодови пред скрипти се суспендирани: {STRING} +###length 3 + ###setting-zero-is-special diff --git a/src/lang/malay.txt b/src/lang/malay.txt index ebe3d03ba5..b3db114339 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1437,7 +1437,8 @@ STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Pilih sama ada STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Tetapkan selang masa servis untuk pesawat baru kepada tetapan asal jika tiada selang masa servis yang jelas ditetapkan untuk pesawat tersebut STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Tetapkan selang masa servis untuk kapal baru kepada tetapan asal jika tiada selang masa servis yang jelas ditetapkan untuk kapal tersebut -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}hari{P 0 "" s}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Dilumpuhkan diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index da063b328a..9503ae54ae 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -665,6 +665,8 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ippermetti l-uz +###length 3 + ###setting-zero-is-special diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index 112edf8266..d88b61e6be 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -952,6 +952,8 @@ STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :सर्व +###length 3 + ###setting-zero-is-special diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 965b14c33b..0908daba82 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1834,7 +1834,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Standard vedlik STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Angi standard vedlikeholdsintervall for nye fly, hvis det ikke er angitt noe vedlikeholdsintervall for flyet STR_CONFIG_SETTING_SERVINT_SHIPS :Standard vedlikeholdsintervall for skip: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Angi standard vedlikeholdsintervall for nye skip, hvis det ikke er angitt noe vedlikeholdsintervall for fartøyet -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Dag{P 0 "" er}/Minutt{P 0 "" er}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Deaktivert diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index ce277933aa..9685ed6e65 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1512,7 +1512,8 @@ STR_CONFIG_SETTING_SERVINT_TRAINS :Standard vedlik STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Standard vedlikehaldsintervall for veg-køyrety: {STRING} STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Standard vedlikehaldsintervall for fly: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS :Standard vedlikehaldsintervall for skip: {STRING} -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA} dag{P 0 "" s}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Deaktivert diff --git a/src/lang/persian.txt b/src/lang/persian.txt index f8ca0477e2..5bdbfcb95b 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -1418,6 +1418,8 @@ STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes before STR_CONFIG_SETTING_SERVINT_ISPERCENT :درصد زمان برای تعمیر/نگهداری به نسبت زمان کار: {STRING} +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_NOSERVICE :غیرفعال کردن تعمیر/بازنگری کلیه وسایل نقلیه وقتی که طبق تنظیمات بازی خودرو ها خراب نشوند : {STRING} diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 74add35f87..1216ba0c1d 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2212,7 +2212,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Domyślny inter STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Ustaw domyślny okres serwisowania dla nowych maszyn latających, jeśli takowy nie istnieje dla określonego pojazdu STR_CONFIG_SETTING_SERVINT_SHIPS :Domyślny interwał serwisowania statków: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Ustaw domyślny okres serwisowania dla nowych statków, jeśli takowy nie istnieje dla określonego pojazdu -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}D{P zień ni ni}/Minut{P a y ""}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Wyłączone diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 7e11333ea3..23aff750e7 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1833,7 +1833,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervalo de ma STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Definir o intervalo de manutenção por omissão para novas aeronaves, se não for configurado um intervalo de manutenção explícito para o veículo STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalo de serviço para navios por omissão: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Definir o intervalo de manutenção por omissão para novos navios, se não for configurado um intervalo de manutenção explícito para o veículo -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Dia{P 0 "" s}/Minuto{P 0 "" s}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Desativado diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index e34f94e7bd..eb2cfade78 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1829,7 +1829,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervalul de STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Alege perioada de întreținere implicită pentru noi aeronave, dacă nu există un interval de întreținere stabilit pentru aeronave STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalul de întreținere implicit al navelor: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Alege perioada de întreținere implicită pentru noi nave, dacă nu există un interval de întreținere stabilit pentru nave -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}{P 0 zi zile "de zile"}/{P 0 minut minute minute}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Dezactivat diff --git a/src/lang/russian.txt b/src/lang/russian.txt index ed3d5d2169..a22016a3a2 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1983,7 +1983,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Интерва STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Настройка периодичности технического обслуживания для новых воздушных судов STR_CONFIG_SETTING_SERVINT_SHIPS :Интервал ТО по умолчанию для судов: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Настройка периодичности технического обслуживания для новых судов -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}д{P ень ня ней}/минут{P а ы ""}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :отключен diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index ed23c52840..ce08c2b73d 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1988,7 +1988,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Podrazumevani s STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Postavi podrazumevani servisni interval za nove letelice, ukoliko nema zadatog servisnog intervala za vozilo STR_CONFIG_SETTING_SERVINT_SHIPS :Podrazumevani servisni interval za brodove: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Postavi podrazumevani servisni interval za nove brodove, ukoliko nema zadatog servisnog intervala za vozilo -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA} dan{P 0 "" a a}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Onemogućeno diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index e37eaa79d1..4f9e608597 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1832,7 +1832,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :飞机默认保 STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :如果没有为飞机指定保养周期,设定飞机的默认保养周期 STR_CONFIG_SETTING_SERVINT_SHIPS :船只默认保养周期:{STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :如果没有为船只设定保养周期,按照这里设定的默认保养周期执行 -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}日 / 分钟 / % +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :关闭 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index cb8177f58d..cc0bac5fc6 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1900,7 +1900,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Predvolený int STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Nastav predvolený interval pre nové lietadlá. Ak nie je nastavený podrobnejší interval. STR_CONFIG_SETTING_SERVINT_SHIPS :Predvolený interval servisu pre lode: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Nastav predvolený interval pre nové lode. Ak nie je nastavený podrobnejší interval. -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}D{P eň ni ní}/min{P utu uty út}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :vypnuté diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 99483e3c9f..fa61eed8c7 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1719,7 +1719,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Privzeto servis STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Nastavitev privzetega obdobja servisiranja za letala, razen če ni izjemno nastavljeno obdobje za posamično letalo. STR_CONFIG_SETTING_SERVINT_SHIPS :Privzeto servisno obdobje ladij: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Nastavitev privzetega obdobja servisiranja za ladje, razen če ni izjemno nastavljeno obdobje za posamično ladjo. -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA} d{P 0 an neva dni dni}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Onemogočeno diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 2d04edbc6c..b0fbc6c593 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1833,7 +1833,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervalo de ma STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Fija el intervalo de mantenimiento por defecto para aeronaves nuevas, que se empleará si no se define un intervalo de forma explícita para ése vehículo STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalo de mantenimiento por defecto para barcos: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Fija el intervalo de mantenimiento por defecto para barcos nuevos, que se empleará si no se define un intervalo de forma explícita para ése vehículo -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Día{P 0 "" s}/Minuto{P 0 "" s}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Deshabilitado diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 2ad8c0c1cc..86a964d782 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1791,7 +1791,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervalo de ma STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Intervalo de mantenimiento por defecto para nuevas aeronaves, en caso de no definirse otro explícitamente STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalo de mantenimiento por defecto para barcos: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Intervalo de mantenimiento por defecto para nuevos barcos, en caso de no definirse otro explícitamente -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}día{P 0 "" s} o % +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Deshabilitado diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index a83b82094a..efcf589405 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1832,7 +1832,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Normalt service STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Välj vilket serviceintervall som normalt sett ska användas för nya flygplan, om inget annat serviceintervall uttryckligen anges STR_CONFIG_SETTING_SERVINT_SHIPS :Normalt serviceintervall för skepp: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Välj vilket serviceintervall som normalt sett ska användas för nya skepp, om inget annat serviceintervall uttryckligen anges -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Dag{P 0 "" ar}/Minut{P 0 "" er}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Inaktiverat @@ -3393,8 +3394,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Vill du STR_GENERATION_PROGRESS :{WHITE}{NUM}% färdigt STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generera värld +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landskapsgenerering STR_GENERATION_RIVER_GENERATION :{BLACK}Generera Flod STR_GENERATION_CLEARING_TILES :{BLACK}Svår och stenig markgenerering +STR_GENERATION_TOWN_GENERATION :{BLACK}Stadsgenerering +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Industrigenerering STR_GENERATION_OBJECT_GENERATION :{BLACK}Generera objekt STR_GENERATION_TREE_GENERATION :{BLACK}Generera Träd STR_GENERATION_SETTINGUP_GAME :{BLACK}Ställer in spel @@ -5286,6 +5290,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Ändra d STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Inga fordon är tillgängliga än STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Starta ett nytt spel efter {DATE_SHORT} eller använd en NewGRF som erbjuder tidiga fordon +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Inga vägtyper som kan byggas av städer finns tillgängliga +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Ändra din NewGRF-konfiguration +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Inga vägtyper som kan byggas av städer finns tillgängliga ännu +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Starta ett nytt spel efter {DATE_SHORT} eller använd en NewGRF som tidigt erbjuder vägtyper som städer kan bygga # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan inte tillåta tåg att passera signal under fara... diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index d14a4ebda0..59bbd6a5cf 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1690,7 +1690,8 @@ STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :சாலை STR_CONFIG_SETTING_SERVINT_AIRCRAFT :விமாங்களின் பழுதுபார்த்தல் இடைவேளி: {STRING} STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :புதிய விமானங்களுக்கான இயல்புநிலை சேவை இடைவெளியை அமைக்கவும், வாகனத்திற்கு வெளிப்படையான சேவை இடைவெளி எதுவும் அமைக்கப்படவில்லை என்றால் STR_CONFIG_SETTING_SERVINT_SHIPS :கப்பல்களின் பழுதுபார்த்தல் இடைவேளி: {STRING} -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}நா{P 0 "ள்" ட்கள்}/நிமிட{P 0 "ம்" ங்கள்}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :செயலிழக்க செய்யப்பட்டது diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 67964aa429..23018a1158 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1575,7 +1575,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :ตั้งค STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :ตั้งค่าแรกเริ่มสำหรับการเข้าซ่อมบำรุงสำหรับอากาศยาน เป็นหน่วยวัน หรือหากเลือกการตั้งค่าโดยคิดจากเปอร์เซนต์ของประสิทธิภาพ จะเปลี่ยนไปใช้่หน่วยเปอร์เซนต์แทน STR_CONFIG_SETTING_SERVINT_SHIPS :ตั้งค่าแรกเริ่มสำหรับการเข้าซ่อมบำรุงของพาหนะทางน้ำ: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :ตั้งค่าแรกเริ่มสำหรับการเข้าซ่อมบำรุงสำหรับพาหนะทางน้ำ เป็นหน่วยวัน หรือหากเลือกการตั้งค่าโดยคิดจากเปอร์เซนต์ของประสิทธิ์ภาพ จะเปลี่ยนไปใช้่หน่วยเปอร์เซนต์แทน -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA} วัน/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :ไม่ตั้ง diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index fdb34c2378..cf4d45ea54 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1759,7 +1759,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :預設的飛機 STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :設定預設的飛機維護作業時距。所有沒有指定維護作業時距的飛機都會使用這個預設值。 STR_CONFIG_SETTING_SERVINT_SHIPS :預設的船舶維護作業時距:{STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :設定預設的船舶維護作業時距。所有沒有指定維護作業時距的船舶都會使用這個預設值。 -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}日/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :停用 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index c71907164d..2035307a74 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1833,7 +1833,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Hava araçları STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Yeni hava araçları için varsayılan bakım aralığını ayarlar, eğer araç için özel bir bakım aralığı belirtilmemişse geçerlidir STR_CONFIG_SETTING_SERVINT_SHIPS :Gemiler için varsayılan bakım aralığı: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Yeni gemiler için varsayılan bakım aralığını ayarlar, eğer araç için özel bir bakım aralığı belirtilmemişse geçerlidir -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}%gün/dakika +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Etkisiz diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 81a1c9224a..208f3a2706 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1969,7 +1969,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Інтерва STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Налаштування інтервалу техогляду для нового повітряного транспорту (встановлений інтервал може бути змінено окремо для кожного транспортного засобу в його інтерфейсі). STR_CONFIG_SETTING_SERVINT_SHIPS :Інтервал техогляду водного транспорту: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Налаштування інтервалу техогляду для нового водного транспорту (встановлений інтервал може бути змінено окремо для кожного транспортного засобу в його інтерфейсі). -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}д{P 0 "ень" "ні" "нів"}/хвилин{P 0 а и ""}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Відключено diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index 521bbd13c4..7075b992a5 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -1329,6 +1329,8 @@ STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :اسکرپٹس STR_CONFIG_SETTING_SERVINT_ISPERCENT :مرمتی وقفے فیصد میں ہیں: {STRING} +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_NOSERVICE :گاڑیوں کی خرابی غیر فعال ہونے کی صورت میں مرمت بھی غیر فعال کر دیں: {STRING} diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index ab8703fa71..fb095abf3c 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1832,7 +1832,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Tần suất b STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Thiết lập khoảng thời gian bảo trì tùy chọn đối với các máy bay, nếu phương tiện không có riêng thời gian bảo trì này STR_CONFIG_SETTING_SERVINT_SHIPS :Tần suất bảo trì mặc định đối với tàu thủy: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Thiết lập khoảng thời gian bảo trì tùy chọn đối với các tàu thủy, nếu phương tiện không có riêng thời gian bảo trì này -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}ngày/phút/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :tắt @@ -2223,7 +2224,7 @@ STR_QUIT_YES :{BLACK}Đồng STR_QUIT_NO :{BLACK}Không đồng ý # Abandon game -STR_ABANDON_GAME_CAPTION :{WHITE}Bỏ Màn Chơi +STR_ABANDON_GAME_CAPTION :{WHITE}Loại bỏ Game STR_ABANDON_GAME_QUERY :{YELLOW}Bạn có chắc chắn muốn bỏ màn chơi này không? STR_ABANDON_SCENARIO_QUERY :{YELLOW}Bạn có chắc bạn muốn bỏ màn chơi kịch bản này? @@ -3393,8 +3394,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Bạn c STR_GENERATION_PROGRESS :{WHITE}{NUM}% hoàn thành STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Tạo màn +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Khởi tạo cảnh quan STR_GENERATION_RIVER_GENERATION :{BLACK}Khởi tạo sông suối STR_GENERATION_CLEARING_TILES :{BLACK}Sinh đá và sự gồ ghề +STR_GENERATION_TOWN_GENERATION :{BLACK}Khởi tạo thị trấn +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Khởi tạo nhà máy STR_GENERATION_OBJECT_GENERATION :{BLACK}Sinh đối tượng cứng STR_GENERATION_TREE_GENERATION :{BLACK}Trồng cây STR_GENERATION_SETTINGUP_GAME :{BLACK}Thiết lập ván chơi @@ -3488,6 +3492,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Loại đườn STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Biến số NewGRF là 60+x (dạng hexa) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Căn chỉnh hình sprite: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Căn chỉnh hình sprite: Hành động 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Căn chỉnh hình sprite: Hành động 0x5, loại {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sprite tiếp STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Chuyển tới sprite bình thường kế tiếp, bỏ qua các loại sprite và căn theo điểm kết thúc STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Đi tới sprite @@ -3496,6 +3503,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Sprite t STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Xử lý sprite bình thường ở trước, bỏ qua các loại pseudo/recolour/font sprite căn theo điểm bắt đầu STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Theo những thông tin của sprite đã chọn. Thì việc căn chỉnh khi vẽ đối với sprite này sẽ bị bỏ qua STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Di chuyển sprite xung quanh, thay đổi X và Y offsets. Ctrl+Click để di chuyển sprite tám đơn vị một lúc +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Toạ độ về trung tâm @@ -4898,7 +4906,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Thu nh STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Đang lưu vào đĩa,{}hãy chờ cho đến khi hoàn thành! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Tự lưu gặp lỗi STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Không đọc được đĩa +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Lưu game thất bại... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Không thể xoá file +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Khởi động game thất bại... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Lỗi kỹ thuật: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Bản lưu ván chơi bị hỏng - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Bản lưu ván chơi dành cho phiên bản mới hơn @@ -5280,6 +5290,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Thay đ STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Chưa có phương tiện nào có sẵn STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Bắt đầu một màn chơi mới sau {DATE_SHORT} hoặc sử dụng một NewGRF cung cấp sớm phương tiện +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Không có sẵn loại đường có thể xây dựng được trong thị trấn +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Thay đổi cấu hình NewGRF của bạn +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Hiện tại chưa có các loại đường thị trấn +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Hãy bắt đầu trò chơi mới sau {DATE_SHORT} hoặc sử dụng NewGRF khác có hỗ trợ xây dựng sớm các loại đường đô thị # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Không thể để tàu hoả qua tín hiệu đèn khi nguy hiểm... @@ -5831,6 +5845,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index c123688b4d..b0db82c4b5 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1832,7 +1832,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Ystod gwasanaet STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Gosod yr ystod gwasanaethu rhagosodedig ar gyfer awyrennau newydd, os na ddynodir ystod gwasanaethu penodol ar gyfer y cerbyd STR_CONFIG_SETTING_SERVINT_SHIPS :Ystod gwasanaethu rhagosodedig ar gyfer llongau: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Gosod yr ystod gwasanaethu rhagosodedig ar gyfer llongau newydd, os na ddynodir ystod gwasanaethu penodol ar gyfer y cerbyd -STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Diwrnod{P 0 "" ""}/Munud{P 0 "" ""}/% +###length 3 + ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Analluogwyd From a6d401debfb13fc9998c6555c0e28dc30bd51038 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 26 Apr 2024 17:47:53 +0100 Subject: [PATCH 413/695] Fix: Properly test for presence of waypoint in NewGRF resolver. (#12579) Test whether the BaseStation itself a Station or Waypoint, instead of by the station class ID assigned to it. --- src/newgrf_station.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index 1997b10274..a6d0d77f8c 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -504,7 +504,7 @@ uint32_t Waypoint::GetNewGRFVariable(const ResolverObject &, uint8_t variable, [ /* virtual */ const SpriteGroup *StationResolverObject::ResolveReal(const RealSpriteGroup *group) const { - if (this->station_scope.st == nullptr || this->station_scope.statspec->cls_id == STAT_CLASS_WAYP) { + if (this->station_scope.st == nullptr || !Station::IsExpected(this->station_scope.st)) { return group->loading[0]; } From 72c55128d2129f824a60a35fb5aa601409af4a3d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 26 Apr 2024 21:56:30 +0100 Subject: [PATCH 414/695] Codechange: Remove write-only spec_id from RoadStopSpec. (#12582) Comment is incorrect about its value too. --- src/newgrf.cpp | 1 - src/newgrf_roadstop.h | 1 - 2 files changed, 2 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 68396cdbca..0b8628f370 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -4846,7 +4846,6 @@ static ChangeInfoResult RoadStopChangeInfo(uint id, int numinfo, int prop, ByteR uint32_t classid = buf->ReadDWord(); rs->cls_id = RoadStopClass::Allocate(BSWAP32(classid)); - rs->spec_id = id + i; break; } diff --git a/src/newgrf_roadstop.h b/src/newgrf_roadstop.h index 780afd5d86..4a6980883d 100644 --- a/src/newgrf_roadstop.h +++ b/src/newgrf_roadstop.h @@ -127,7 +127,6 @@ struct RoadStopSpec { */ GRFFilePropsBase grf_prop; RoadStopClassID cls_id; ///< The class to which this spec belongs. - int spec_id; ///< The ID of this spec inside the class. StringID name; ///< Name of this stop RoadStopAvailabilityType stop_type = ROADSTOPTYPE_ALL; From bf8de188ec36cf29fdd6cf08436a71d288d3f18a Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 26 Apr 2024 22:58:54 +0100 Subject: [PATCH 415/695] Codechange: Use member initialization of GRFFilePropsBase. (#12581) Don't blame compilers for our sloppy initialisation. Removes memset, and lengthof. --- src/newgrf_commons.h | 18 ++++-------------- src/newgrf_engine.cpp | 4 ++-- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/src/newgrf_commons.h b/src/newgrf_commons.h index bdfea825e6..a45fcdf592 100644 --- a/src/newgrf_commons.h +++ b/src/newgrf_commons.h @@ -308,25 +308,15 @@ bool Convert8bitBooleanCallback(const struct GRFFile *grffile, uint16_t cbid, ui */ template struct GRFFilePropsBase { - GRFFilePropsBase() : local_id(0), grffile(nullptr) - { - /* The lack of some compilers to provide default constructors complying to the specs - * requires us to zero the stuff ourself. */ - memset(spritegroup, 0, sizeof(spritegroup)); - } - - uint16_t local_id; ///< id defined by the grf file for this entity - const struct GRFFile *grffile; ///< grf file that introduced this entity - const struct SpriteGroup *spritegroup[Tcnt]; ///< pointer to the different sprites of the entity + uint16_t local_id = 0; ///< id defined by the grf file for this entity + const struct GRFFile *grffile = nullptr; ///< grf file that introduced this entity + std::array spritegroup{}; ///< pointers to the different sprites of the entity }; /** Data related to the handling of grf files. */ struct GRFFileProps : GRFFilePropsBase<1> { /** Set all default data constructor for the props. */ - GRFFileProps(uint16_t subst_id = 0) : - GRFFilePropsBase<1>(), subst_id(subst_id), override(subst_id) - { - } + constexpr GRFFileProps(uint16_t subst_id = 0) : subst_id(subst_id), override(subst_id) {} uint16_t subst_id; uint16_t override; ///< id of the entity been replaced by diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index 08e461d06c..0b7e6e08e7 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -53,7 +53,7 @@ const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID cargo, Eng void SetCustomEngineSprites(EngineID engine, uint8_t cargo, const SpriteGroup *group) { Engine *e = Engine::Get(engine); - assert(cargo < lengthof(e->grf_prop.spritegroup)); + assert(cargo < std::size(e->grf_prop.spritegroup)); if (e->grf_prop.spritegroup[cargo] != nullptr) { GrfMsg(6, "SetCustomEngineSprites: engine {} cargo {} already has group -- replacing", engine, cargo); @@ -1062,7 +1062,7 @@ VehicleResolverObject::VehicleResolverObject(EngineID engine_type, const Vehicle if (this->root_spritegroup == nullptr) { const Engine *e = Engine::Get(engine_type); CargoID cargo = v != nullptr ? v->cargo_type : SpriteGroupCargo::SG_PURCHASE; - assert(cargo < lengthof(e->grf_prop.spritegroup)); + assert(cargo < std::size(e->grf_prop.spritegroup)); this->root_spritegroup = e->grf_prop.spritegroup[cargo] != nullptr ? e->grf_prop.spritegroup[cargo] : e->grf_prop.spritegroup[SpriteGroupCargo::SG_DEFAULT]; } } From 8308998388415c65b8687b4627a4b22432045d39 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 27 Apr 2024 04:40:44 +0000 Subject: [PATCH 416/695] Update: Translations from eints english (au): 3 changes by krysclarke russian: 3 changes by Ln-Wolf finnish: 6 changes by hpiirai dutch: 6 changes by Afoklala portuguese (brazilian): 4 changes by pasantoro polish: 3 changes by pAter-exe --- src/lang/brazilian_portuguese.txt | 5 ++++- src/lang/dutch.txt | 6 ++++++ src/lang/english_AU.txt | 3 +++ src/lang/finnish.txt | 9 ++++++--- src/lang/polish.txt | 3 +++ src/lang/russian.txt | 3 +++ 6 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 57d775b804..aa24ae7e5b 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1834,6 +1834,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Definir o inter STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalo padrão de manutenção para embarcações: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Definir o intervalo padrão de manutenção para novas embarcações, se um intervalo de manutenção não for explicitamente configurado para o veículo ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}Dia{P 0 "" s} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}Minuto{P 0 "" s} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Desativado @@ -3462,7 +3465,7 @@ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Incompatí # NewGRF save preset window STR_SAVE_PRESET_CAPTION :{WHITE}Salvar predefinição -STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lista de predefinições disponíveis, selecione uma usar o nome na gravação abaixo +STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lista de predefinições disponíveis, selecione uma para usar o nome na gravação abaixo STR_SAVE_PRESET_TITLE :{BLACK}Introduza um nome para a predefinição STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Nome que está selecionado para salvar a predefinição STR_SAVE_PRESET_CANCEL :{BLACK}Cancelar diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index f73bf9abb4..695afe3d1c 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1833,6 +1833,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Standaardonderh STR_CONFIG_SETTING_SERVINT_SHIPS :Standaardonderhoudstermijn voor schepen: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Standaardonderhoudstermijn voor nieuwe schepen als er geen expliciete onderhoudstermijn is ingesteld voor het voertuig ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}Dag{P 0 "" en} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}Minu{P 0 ut ten} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Uitgeschakeld @@ -3394,8 +3397,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Weet je STR_GENERATION_PROGRESS :{WHITE}{NUM}% compleet STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Wereldontwikkeling +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landschap genereren STR_GENERATION_RIVER_GENERATION :{BLACK}Rivierplaatsing STR_GENERATION_CLEARING_TILES :{BLACK}Ontwikkeling van ruig en rotsachtig gebied +STR_GENERATION_TOWN_GENERATION :{BLACK}Steden genereren +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Industrieën genereren STR_GENERATION_OBJECT_GENERATION :{BLACK}Ontwikkeling van onverplaatsbare objecten STR_GENERATION_TREE_GENERATION :{BLACK}Bosplaatsing STR_GENERATION_SETTINGUP_GAME :{BLACK}Spel wordt geconfigureerd diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 9e6f6bb345..1c2bebb5f0 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1833,6 +1833,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Set the default STR_CONFIG_SETTING_SERVINT_SHIPS :Default service interval for ships: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Set the default service interval for new ships, if no explicit service interval is set for the vehicle ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}Day{P 0 "" s} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}Minute{P 0 "" s} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Disabled diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index e73b3cd56f..e856a755b5 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1526,7 +1526,7 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY :Vähimmäisraha STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Vähimmäisrahamäärä, jonka on jäätävä pankkiin kulkuneuvoja automaattisesti uudistettaessa STR_CONFIG_SETTING_ERRMSG_DURATION :Virheilmoitusten näyttöaika: {STRING} -STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Aika virheilmoitusten näyttämiseen punaisessa ikkunassa. Huomaa, että jotkut (kriittiset) virheilmoitukset eivät sulkeudu automaattisesti tämän ajan jälkeen, vaan ne on suljettava käsin +STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Aika virheilmoitusten näyttämiseen punaisessa ikkunassa. Huomaa, että jotkin (kriittiset) virheilmoitukset eivät sulkeudu automaattisesti tämän ajan jälkeen, vaan ne on suljettava käsin STR_CONFIG_SETTING_HOVER_DELAY :Näytä työkaluvihjeet: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Viive ennen työkaluvihjeen näyttämistä, kun hiiren osoitinta pidetään käyttöliittymäelementin päällä. Vaihtoehtoisesti työkaluvihjeen saa myös näkyviin painamalla hiiren oikeaa painiketta, kun arvoksi on määritetty 0 @@ -1833,6 +1833,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Määritä olet STR_CONFIG_SETTING_SERVINT_SHIPS :Laivojen oletushuoltoväli: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Määritä oletushuoltoväli uusille laivoille, mikäli kulkuneuvolle ei ole määritelty erillistä huoltoväliä ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}vuorokau{P 0 si tta} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}minuutti{P 0 "" a} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Pois käytöstä @@ -2367,7 +2370,7 @@ STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :Vain kutsutut # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Moninpeli STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Pelaajan nimi -STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Pelaajat tunnistetaan ja erotetaan toisistaan nimien avulla +STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Nimi, jolla muut pelaajat tunnistavat sinut STR_NETWORK_SERVER_LIST_GAME_NAME :{BLACK}Nimi STR_NETWORK_SERVER_LIST_GAME_NAME_TOOLTIP :{BLACK}Pelin nimi @@ -4469,7 +4472,7 @@ STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Lyhennä STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Muuta huoltovälien tyyppiä STR_VEHICLE_DETAILS_DEFAULT :Oletus -STR_VEHICLE_DETAILS_DAYS :Päiviä +STR_VEHICLE_DETAILS_DAYS :Vuorokausia STR_VEHICLE_DETAILS_MINUTES :Minuutteja STR_VEHICLE_DETAILS_PERCENT :Prosentteja diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 1216ba0c1d..db4f189c5a 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2213,6 +2213,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Ustaw domyślny STR_CONFIG_SETTING_SERVINT_SHIPS :Domyślny interwał serwisowania statków: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Ustaw domyślny okres serwisowania dla nowych statków, jeśli takowy nie istnieje dla określonego pojazdu ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}d{P 0 zień ni ni} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}minut{P 0 a y ""} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Wyłączone diff --git a/src/lang/russian.txt b/src/lang/russian.txt index a22016a3a2..5d1ec0ffe0 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1984,6 +1984,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Настрой STR_CONFIG_SETTING_SERVINT_SHIPS :Интервал ТО по умолчанию для судов: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Настройка периодичности технического обслуживания для новых судов ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}д{P 0 ень ня ней} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}минут{P 0 а ы ""} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :отключен From 33aedc43a57a7ee203b7e74cf0a5d42ce836c19e Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 27 Apr 2024 08:20:13 +0100 Subject: [PATCH 417/695] Codechange: Shrink GUIList vectors less often, reserve before use. After sorting and filter lists for GUI, we often shirnk them to reduce size. However this has very little benefit: 1) The memory has already been allocated, so it doesn't prevent that memory being required. 2) It causes a new allocation and copy when the vector is shrunk, actually using more memory. 3) The list is in window state, so the lifetime is only while the window is open. 4) When a filter is clearer, the original size will be needed again, which will cause another allocation. In fact it is beneficial to reserve to the known maximum in most cases, so do that instead. --- src/build_vehicle_gui.cpp | 2 -- src/company_gui.cpp | 1 - src/group_gui.cpp | 1 - src/industry_gui.cpp | 2 +- src/league_gui.cpp | 2 +- src/network/network_content_gui.cpp | 1 - src/network/network_gui.cpp | 1 - src/newgrf_gui.cpp | 1 - src/object_gui.cpp | 2 +- src/rail_gui.cpp | 2 +- src/road_gui.cpp | 2 +- src/signs_gui.cpp | 2 +- src/station_gui.cpp | 1 - src/story_gui.cpp | 2 -- src/town_gui.cpp | 2 +- 15 files changed, 7 insertions(+), 17 deletions(-) diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index c2e0bcc7f6..9b5daa0f43 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1546,7 +1546,6 @@ struct BuildVehicleWindow : Window { case VEH_TRAIN: this->GenerateBuildTrainList(list); GUIEngineListAddChildren(this->eng_list, list); - this->eng_list.shrink_to_fit(); this->eng_list.RebuildDone(); return; case VEH_ROAD: @@ -1584,7 +1583,6 @@ struct BuildVehicleWindow : Window { this->eng_list.swap(list); GUIEngineListAddChildren(this->eng_list, list, INVALID_ENGINE, 0); - this->eng_list.shrink_to_fit(); this->eng_list.RebuildDone(); } diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 586632306b..0c8e58b055 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -650,7 +650,6 @@ private: BuildGuiGroupList(this->groups, false, owner, vtype); } - this->groups.shrink_to_fit(); this->groups.RebuildDone(); } diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 820d9add0e..64b81228fb 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -224,7 +224,6 @@ private: BuildGuiGroupList(this->groups, true, owner, this->vli.vtype); - this->groups.shrink_to_fit(); this->groups.RebuildDone(); } diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index f6d02fefd5..25f48a3ed5 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1423,6 +1423,7 @@ protected: { if (this->industries.NeedRebuild()) { this->industries.clear(); + this->industries.reserve(Industry::GetNumItems()); for (const Industry *i : Industry::Iterate()) { if (this->string_filter.IsEmpty()) { @@ -1434,7 +1435,6 @@ protected: if (this->string_filter.GetState()) this->industries.push_back(i); } - this->industries.shrink_to_fit(); this->industries.RebuildDone(); auto filter = std::make_pair(this->accepted_cargo_filter_criteria, this->produced_cargo_filter_criteria); diff --git a/src/league_gui.cpp b/src/league_gui.cpp index 60af81e972..062b195212 100644 --- a/src/league_gui.cpp +++ b/src/league_gui.cpp @@ -70,12 +70,12 @@ private: if (!this->companies.NeedRebuild()) return; this->companies.clear(); + this->companies.reserve(Company::GetNumItems()); for (const Company *c : Company::Iterate()) { this->companies.push_back(c); } - this->companies.shrink_to_fit(); this->companies.RebuildDone(); } diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index f29319331c..a1a8472b76 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -421,7 +421,6 @@ class NetworkContentListWindow : public Window, ContentCallback { this->SetWidgetDisabledState(WID_NCL_SEARCH_EXTERNAL, this->auto_select && all_available); this->FilterContentList(); - this->content.shrink_to_fit(); this->content.RebuildDone(); this->SortContentList(); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index e108fc2302..9d38926b53 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -240,7 +240,6 @@ protected: this->servers.SetFilterState(false); } - this->servers.shrink_to_fit(); this->servers.RebuildDone(); this->vscroll->SetCount(this->servers.size()); diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 47389a152f..7cf2a5283c 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -1499,7 +1499,6 @@ private: } this->avails.Filter(this->string_filter); - this->avails.shrink_to_fit(); this->avails.RebuildDone(); this->avails.Sort(); diff --git a/src/object_gui.cpp b/src/object_gui.cpp index fc8daaecac..4fec20d2f6 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -144,6 +144,7 @@ public: if (!this->object_classes.NeedRebuild()) return; this->object_classes.clear(); + this->object_classes.reserve(ObjectClass::GetClassCount()); for (const auto &cls : ObjectClass::Classes()) { if (cls.GetUISpecCount() == 0) continue; // Is this needed here? @@ -151,7 +152,6 @@ public: } this->object_classes.Filter(this->string_filter); - this->object_classes.shrink_to_fit(); this->object_classes.RebuildDone(); this->object_classes.Sort(); diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 7c3e2f8c3d..137e78d494 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1108,6 +1108,7 @@ public: if (!this->station_classes.NeedRebuild()) return; this->station_classes.clear(); + this->station_classes.reserve(StationClass::GetClassCount()); for (const auto &cls : StationClass::Classes()) { /* Skip waypoints. */ @@ -1118,7 +1119,6 @@ public: if (_railstation.newstations) { this->station_classes.Filter(this->string_filter); - this->station_classes.shrink_to_fit(); this->station_classes.RebuildDone(); this->station_classes.Sort(); diff --git a/src/road_gui.cpp b/src/road_gui.cpp index e208aaf36b..efb8cc2713 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -1263,6 +1263,7 @@ public: if (!this->roadstop_classes.NeedRebuild()) return; this->roadstop_classes.clear(); + this->roadstop_classes.reserve(RoadStopClass::GetClassCount()); for (const auto &cls : RoadStopClass::Classes()) { /* Skip waypoints. */ @@ -1272,7 +1273,6 @@ public: if (this->ShowNewStops()) { this->roadstop_classes.Filter(this->string_filter); - this->roadstop_classes.shrink_to_fit(); this->roadstop_classes.RebuildDone(); this->roadstop_classes.Sort(); diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index ec2a97c0d4..dbef9641c7 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -63,12 +63,12 @@ struct SignList { Debug(misc, 3, "Building sign list"); this->signs.clear(); + this->signs.reserve(Sign::GetNumItems()); for (const Sign *si : Sign::Iterate()) this->signs.push_back(si); this->signs.SetFilterState(true); this->FilterSignList(); - this->signs.shrink_to_fit(); this->signs.RebuildDone(); } diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 6db2d27cb5..241a512b12 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -296,7 +296,6 @@ protected: } } - this->stations.shrink_to_fit(); this->stations.RebuildDone(); this->vscroll->SetCount(this->stations.size()); // Update the scrollbar diff --git a/src/story_gui.cpp b/src/story_gui.cpp index 807a4198a7..838bee7f35 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -77,7 +77,6 @@ protected: } } - this->story_pages.shrink_to_fit(); this->story_pages.RebuildDone(); } @@ -105,7 +104,6 @@ protected: } } - this->story_page_elements.shrink_to_fit(); this->story_page_elements.RebuildDone(); } diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 69af8c411b..0b5e729f99 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -734,6 +734,7 @@ private: { if (this->towns.NeedRebuild()) { this->towns.clear(); + this->towns.reserve(Town::GetNumItems()); for (const Town *t : Town::Iterate()) { if (this->string_filter.IsEmpty()) { @@ -745,7 +746,6 @@ private: if (this->string_filter.GetState()) this->towns.push_back(t); } - this->towns.shrink_to_fit(); this->towns.RebuildDone(); this->vscroll->SetCount(this->towns.size()); // Update scrollbar as well. } From 440a633fccda1ba20c66b13ab2bba6b0b9549aa6 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 27 Apr 2024 08:50:46 +0100 Subject: [PATCH 418/695] Codechange: Remove shrink_to_fit for more lists. A comment about "will actually do nothing" is out of date as that is not the case with std::vector. These lists are always short lived (either within a command handler or in a window) so don't shrink_to_fit. --- src/fios.cpp | 2 -- src/vehiclelist.cpp | 6 ------ 2 files changed, 8 deletions(-) diff --git a/src/fios.cpp b/src/fios.cpp index e647404bc2..5bb7a2d2d1 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -374,8 +374,6 @@ static void FiosGetFileList(SaveLoadOperation fop, bool show_dirs, FiosGetTypeAn /* Show drives */ FiosGetDrives(file_list); - - file_list.shrink_to_fit(); } /** diff --git a/src/vehiclelist.cpp b/src/vehiclelist.cpp index f6295681ad..48214d9384 100644 --- a/src/vehiclelist.cpp +++ b/src/vehiclelist.cpp @@ -108,11 +108,6 @@ void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engine BuildDepotVehicleListData bdvld{engines, wagons, type, individual_wagons}; FindVehicleOnPos(tile, &bdvld, BuildDepotVehicleListProc); - - /* Ensure the lists are not wasting too much space. If the lists are fresh - * (i.e. built within a command) then this will actually do nothing. */ - engines->shrink_to_fit(); - if (wagons != nullptr && wagons != engines) wagons->shrink_to_fit(); } /** @@ -176,6 +171,5 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli default: return false; } - list->shrink_to_fit(); return true; } From ee9895a970aef15e71fd3bd0055683d70b6b5e1e Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 28 Apr 2024 04:41:11 +0000 Subject: [PATCH 419/695] Update: Translations from eints norwegian (bokmal): 3 changes by eriksorngard french: 3 changes by ottdfevr portuguese: 3 changes by azulcosta --- src/lang/french.txt | 3 +++ src/lang/norwegian_bokmal.txt | 3 +++ src/lang/portuguese.txt | 3 +++ 3 files changed, 9 insertions(+) diff --git a/src/lang/french.txt b/src/lang/french.txt index bd3fb68d1b..863c011616 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1834,6 +1834,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Définit l'inte STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalle d'entretien par défaut pour les navires{NBSP}: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Définit l'intervalle d'entretien par défaut des nouveaux navires, si aucun intervalle d'entretien n'est défini pour le véhicule ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}Jour{P 0 "" s} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}Minute{P 0 "" s} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Désactivé diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 0908daba82..6a8446158b 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1835,6 +1835,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Angi standard v STR_CONFIG_SETTING_SERVINT_SHIPS :Standard vedlikeholdsintervall for skip: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Angi standard vedlikeholdsintervall for nye skip, hvis det ikke er angitt noe vedlikeholdsintervall for fartøyet ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}Dag{P 0 "" er} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}Minutt{P 0 "" er} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Deaktivert diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 23aff750e7..d4ed990215 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1834,6 +1834,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Definir o inter STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalo de serviço para navios por omissão: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Definir o intervalo de manutenção por omissão para novos navios, se não for configurado um intervalo de manutenção explícito para o veículo ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}Dia{P 0 "" s} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}Minuto{P 0 "" s} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Desativado From 97a34bf06ed640db79de8bb9bc0f5f0fccd3538d Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 28 Apr 2024 08:40:15 +0200 Subject: [PATCH 420/695] Codechange: use C++ containers for the colour schemes --- src/smallmap_gui.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 51cd1e8813..81350a5f43 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -274,17 +274,16 @@ static const LegendAndColour * const _legend_table[] = { /** Colour scheme of the smallmap. */ struct SmallMapColourScheme { - uint32_t *height_colours; ///< Cached colours for each level in a map. - const uint32_t *height_colours_base; ///< Base table for determining the colours - size_t colour_count; ///< The number of colours. + std::vector height_colours; ///< Cached colours for each level in a map. + std::span height_colours_base; ///< Base table for determining the colours uint32_t default_colour; ///< Default colour of the land. }; /** Available colour schemes for height maps. */ static SmallMapColourScheme _heightmap_schemes[] = { - {nullptr, _green_map_heights, lengthof(_green_map_heights), MKCOLOUR_XXXX(0x54)}, ///< Green colour scheme. - {nullptr, _dark_green_map_heights, lengthof(_dark_green_map_heights), MKCOLOUR_XXXX(0x62)}, ///< Dark green colour scheme. - {nullptr, _violet_map_heights, lengthof(_violet_map_heights), MKCOLOUR_XXXX(0x81)}, ///< Violet colour scheme. + {{}, _green_map_heights, MKCOLOUR_XXXX(0x54)}, ///< Green colour scheme. + {{}, _dark_green_map_heights, MKCOLOUR_XXXX(0x62)}, ///< Dark green colour scheme. + {{}, _violet_map_heights, MKCOLOUR_XXXX(0x81)}, ///< Violet colour scheme. }; /** @@ -293,7 +292,7 @@ static SmallMapColourScheme _heightmap_schemes[] = { void BuildLandLegend() { /* The smallmap window has never been initialized, so no need to change the legend. */ - if (_heightmap_schemes[0].height_colours == nullptr) return; + if (_heightmap_schemes[0].height_colours.empty()) return; /* * The general idea of this function is to fill the legend with an appropriate evenly spaced @@ -749,11 +748,11 @@ protected: for (auto &heightmap_scheme : _heightmap_schemes) { /* The heights go from 0 up to and including maximum. */ - int heights = _settings_game.construction.map_height_limit + 1; - heightmap_scheme.height_colours = ReallocT(heightmap_scheme.height_colours, heights); + size_t heights = _settings_game.construction.map_height_limit + 1; + heightmap_scheme.height_colours.resize(heights); - for (int z = 0; z < heights; z++) { - size_t access_index = (heightmap_scheme.colour_count * z) / heights; + for (size_t z = 0; z < heights; z++) { + size_t access_index = (heightmap_scheme.height_colours_base.size() * z) / heights; /* Choose colour by mapping the range (0..max heightlevel) on the complete colour table. */ heightmap_scheme.height_colours[z] = heightmap_scheme.height_colours_base[access_index]; From 826deaee57317b9c6de8fcd15d3f66edfdfbd805 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 27 Apr 2024 21:25:15 +0200 Subject: [PATCH 421/695] Codechange: refactor CalcHeightdiff to remove some magic numbers --- src/viewport.cpp | 65 +++++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/src/viewport.cpp b/src/viewport.cpp index 8a19f56ae0..1aa848058e 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -2887,19 +2887,18 @@ static int CalcHeightdiff(HighLightStyle style, uint distance, TileIndex start_t if (swap) Swap(start_tile, end_tile); switch (style & HT_DRAG_MASK) { - case HT_RECT: { - static const TileIndexDiffC heightdiff_area_by_dir[] = { - /* Start */ {1, 0}, /* Dragging east */ {0, 0}, // Dragging south - /* End */ {0, 1}, /* Dragging east */ {1, 1} // Dragging south - }; - + case HT_RECT: /* In the case of an area we can determine whether we were dragging south or * east by checking the X-coordinates of the tiles */ - uint8_t style_t = (uint8_t)(TileX(end_tile) > TileX(start_tile)); - start_tile = TileAdd(start_tile, ToTileIndexDiff(heightdiff_area_by_dir[style_t])); - end_tile = TileAdd(end_tile, ToTileIndexDiff(heightdiff_area_by_dir[2 + style_t])); + if (TileX(end_tile) > TileX(start_tile)) { + /* Dragging south does not need to change the start tile. */ + end_tile = TileAddByDir(end_tile, DIR_S); + } else { + /* Dragging east. */ + start_tile = TileAddByDir(start_tile, DIR_SW); + end_tile = TileAddByDir(end_tile, DIR_SE); + } [[fallthrough]]; - } case HT_POINT: h0 = TileHeight(start_tile); @@ -2909,18 +2908,28 @@ static int CalcHeightdiff(HighLightStyle style, uint distance, TileIndex start_t static const HighLightStyle flip_style_direction[] = { HT_DIR_X, HT_DIR_Y, HT_DIR_HL, HT_DIR_HU, HT_DIR_VR, HT_DIR_VL }; - static const TileIndexDiffC heightdiff_line_by_dir[] = { - /* Start */ {1, 0}, {1, 1}, /* HT_DIR_X */ {0, 1}, {1, 1}, // HT_DIR_Y - /* Start */ {1, 0}, {0, 0}, /* HT_DIR_HU */ {1, 0}, {1, 1}, // HT_DIR_HL - /* Start */ {1, 0}, {1, 1}, /* HT_DIR_VL */ {0, 1}, {1, 1}, // HT_DIR_VR - - /* Start */ {0, 1}, {0, 0}, /* HT_DIR_X */ {1, 0}, {0, 0}, // HT_DIR_Y - /* End */ {0, 1}, {0, 0}, /* HT_DIR_HU */ {1, 1}, {0, 1}, // HT_DIR_HL - /* End */ {1, 0}, {0, 0}, /* HT_DIR_VL */ {0, 0}, {0, 1}, // HT_DIR_VR + static const std::pair start_heightdiff_line_by_dir[] = { + { {1, 0}, {1, 1} }, // HT_DIR_X + { {0, 1}, {1, 1} }, // HT_DIR_Y + { {1, 0}, {0, 0} }, // HT_DIR_HU + { {1, 0}, {1, 1} }, // HT_DIR_HL + { {1, 0}, {1, 1} }, // HT_DIR_VL + { {0, 1}, {1, 1} }, // HT_DIR_VR }; + static const std::pair end_heightdiff_line_by_dir[] = { + { {0, 1}, {0, 0} }, // HT_DIR_X + { {1, 0}, {0, 0} }, // HT_DIR_Y + { {0, 1}, {0, 0} }, // HT_DIR_HU + { {1, 1}, {0, 1} }, // HT_DIR_HL + { {1, 0}, {0, 0} }, // HT_DIR_VL + { {0, 0}, {0, 1} }, // HT_DIR_VR + }; + static_assert(std::size(start_heightdiff_line_by_dir) == HT_DIR_END); + static_assert(std::size(end_heightdiff_line_by_dir) == HT_DIR_END); distance %= 2; // we're only interested if the distance is even or uneven style &= HT_DIR_MASK; + assert(style < HT_DIR_END); /* To handle autorail, we do some magic to be able to use a lookup table. * Firstly if we drag the other way around, we switch start&end, and if needed @@ -2928,20 +2937,20 @@ static int CalcHeightdiff(HighLightStyle style, uint distance, TileIndex start_t * that means the end, which is now the start is on the right */ if (swap && distance == 0) style = flip_style_direction[style]; + /* Lambda to help calculating the height at one side of the line. */ + auto get_height = [](auto &tile, auto &heightdiffs) { + return std::max( + TileHeight(TileAdd(tile, ToTileIndexDiff(heightdiffs.first))), + TileHeight(TileAdd(tile, ToTileIndexDiff(heightdiffs.second)))); + }; + /* Use lookup table for start-tile based on HighLightStyle direction */ - uint8_t style_t = style * 2; - assert(style_t < lengthof(heightdiff_line_by_dir) - 13); - h0 = TileHeight(TileAdd(start_tile, ToTileIndexDiff(heightdiff_line_by_dir[style_t]))); - uint ht = TileHeight(TileAdd(start_tile, ToTileIndexDiff(heightdiff_line_by_dir[style_t + 1]))); - h0 = std::max(h0, ht); + h0 = get_height(start_tile, start_heightdiff_line_by_dir[style]); /* Use lookup table for end-tile based on HighLightStyle direction * flip around side (lower/upper, left/right) based on distance */ - if (distance == 0) style_t = flip_style_direction[style] * 2; - assert(style_t < lengthof(heightdiff_line_by_dir) - 13); - h1 = TileHeight(TileAdd(end_tile, ToTileIndexDiff(heightdiff_line_by_dir[12 + style_t]))); - ht = TileHeight(TileAdd(end_tile, ToTileIndexDiff(heightdiff_line_by_dir[12 + style_t + 1]))); - h1 = std::max(h1, ht); + if (distance == 0) style = flip_style_direction[style]; + h1 = get_height(end_tile, end_heightdiff_line_by_dir[style]); break; } } From 99b74c1064a61838a6bcde46a87e07cbe88c328b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Sun, 28 Apr 2024 16:08:32 +0200 Subject: [PATCH 422/695] Fix #12584: Improved error handling during tar scan (#12586) --- src/fileio.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index 1458453958..e57c00a564 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -24,6 +24,7 @@ #include #include #endif +#include #include #include #include @@ -563,7 +564,16 @@ bool TarScanner::AddFile(const std::string &filename, size_t, [[maybe_unused]] c /* The size of the file, for some strange reason, this is stored as a string in octals. */ std::string size = ExtractString(th.size); - size_t skip = size.empty() ? 0 : std::stoul(size, nullptr, 8); + size_t skip = 0; + if (!size.empty()) { + StrTrimInPlace(size); + auto [_, err] = std::from_chars(size.data(), size.data() + size.size(), skip, 8); + if (err != std::errc()) { + Debug(misc, 0, "The file '{}' has an invalid size for '{}'", filename, name); + fclose(f); + return false; + } + } switch (th.typeflag) { case '\0': From ef55cc79796e9e7126f856174f0fec56cd92ae15 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 28 Apr 2024 15:18:24 +0100 Subject: [PATCH 423/695] Codechange: Remove support for links in tar files. (#12571) This was a feature to support the original 32bpp sprite system and is no longer relevant. --- src/fileio.cpp | 76 +------------------------------------------------- 1 file changed, 1 insertion(+), 75 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index e57c00a564..c99ec88bc1 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -68,9 +68,6 @@ std::vector _valid_searchpaths; std::array _tar_list; TarFileList _tar_filelist[NUM_SUBDIRS]; -typedef std::map TarLinkList; -static TarLinkList _tar_linklist[NUM_SUBDIRS]; ///< List of directory links - /** * Checks whether the given search path is a valid search path * @param sp the search path to check @@ -298,17 +295,6 @@ FILE *FioFOpenFile(const std::string &filename, const char *mode, Subdirectory s first = false; } - /* Resolve ONE directory link */ - for (const auto &link : _tar_linklist[subdir]) { - const std::string &src = link.first; - size_t len = src.length(); - if (resolved_name.length() >= len && resolved_name[len - 1] == PATHSEPCHAR && src.compare(0, len, resolved_name, 0, len) == 0) { - /* Apply link */ - resolved_name.replace(0, len, link.second); - break; // Only resolve one level - } - } - TarFileList::iterator it = _tar_filelist[subdir].find(resolved_name); if (it != _tar_filelist[subdir].end()) { f = FioFOpenFileTar(it->second, filesize); @@ -378,27 +364,6 @@ void AppendPathSeparator(std::string &buf) if (buf.back() != PATHSEPCHAR) buf.push_back(PATHSEPCHAR); } -static void TarAddLink(const std::string &srcParam, const std::string &destParam, Subdirectory subdir) -{ - std::string src = srcParam; - std::string dest = destParam; - /* Tar internals assume lowercase */ - std::transform(src.begin(), src.end(), src.begin(), tolower); - std::transform(dest.begin(), dest.end(), dest.begin(), tolower); - - TarFileList::iterator dest_file = _tar_filelist[subdir].find(dest); - if (dest_file != _tar_filelist[subdir].end()) { - /* Link to file. Process the link like the destination file. */ - _tar_filelist[subdir].insert(TarFileList::value_type(src, dest_file->second)); - } else { - /* Destination file not found. Assume 'link to directory' - * Append PATHSEPCHAR to 'src' and 'dest' if needed */ - const std::string src_path = ((*src.rbegin() == PATHSEPCHAR) ? src : src + PATHSEPCHAR); - const std::string dst_path = (dest.length() == 0 ? "" : ((*dest.rbegin() == PATHSEPCHAR) ? dest : dest + PATHSEPCHAR)); - _tar_linklist[subdir].insert(TarLinkList::value_type(src_path, dst_path)); - } -} - /** * Simplify filenames from tars. * Replace '/' by #PATHSEPCHAR, and force 'name' to lowercase. @@ -527,8 +492,6 @@ bool TarScanner::AddFile(const std::string &filename, size_t, [[maybe_unused]] c std::string filename_base = std::filesystem::path(filename).filename().string(); SimplifyFileName(filename_base); - TarLinkList links; ///< Temporary list to collect links - TarHeader th; size_t num = 0, pos = 0; @@ -597,33 +560,9 @@ bool TarScanner::AddFile(const std::string &filename, size_t, [[maybe_unused]] c case '1': // hard links case '2': { // symbolic links - /* Copy the destination of the link in a safe way at the end of 'linkname' */ std::string link = ExtractString(th.linkname); - if (name.empty() || link.empty()) break; - - /* Convert to lowercase and our PATHSEPCHAR */ - SimplifyFileName(name); - SimplifyFileName(link); - - /* Only allow relative links */ - if (link[0] == PATHSEPCHAR) { - Debug(misc, 5, "Ignoring absolute link in tar: {} -> {}", name, link); - break; - } - - /* Process relative path. - * Note: The destination of links must not contain any directory-links. */ - std::string dest = (std::filesystem::path(name).remove_filename() /= link).lexically_normal().string(); - if (dest[0] == PATHSEPCHAR || dest.starts_with("..")) { - Debug(misc, 5, "Ignoring link pointing outside of data directory: {} -> {}", name, link); - break; - } - - /* Store links in temporary list */ - Debug(misc, 6, "Found link in tar: {} -> {}", name, dest); - links.insert(TarLinkList::value_type(filename_base + PATHSEPCHAR + name, filename_base + PATHSEPCHAR + dest)); - + Debug(misc, 5, "Ignoring link in tar: {} -> {}", name, link); break; } @@ -654,19 +593,6 @@ bool TarScanner::AddFile(const std::string &filename, size_t, [[maybe_unused]] c Debug(misc, 4, "Found tar '{}' with {} new files", filename, num); fclose(f); - /* Resolve file links and store directory links. - * We restrict usage of links to two cases: - * 1) Links to directories: - * Both the source path and the destination path must NOT contain any further links. - * When resolving files at most one directory link is resolved. - * 2) Links to files: - * The destination path must NOT contain any links. - * The source path may contain one directory link. - */ - for (auto &it : links) { - TarAddLink(it.first, it.second, this->subdir); - } - return true; } From ad50c4f2983b454bf5cef7546f4c4d5ec3240295 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 28 Apr 2024 14:56:52 +0200 Subject: [PATCH 424/695] Codechange: inline sorter name definitions and use proper static accessor instead of (implying) this-> --- src/bridge_gui.cpp | 27 +++++++--------- src/industry_gui.cpp | 17 ++++------ src/station_gui.cpp | 77 +++++++++++++++++++++----------------------- src/town_gui.cpp | 15 ++++----- 4 files changed, 61 insertions(+), 75 deletions(-) diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index 6510355f8c..c983433b7f 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -75,7 +75,12 @@ private: static Listing last_sorting; ///< Last setting of the sort. /* Constants for sorting the bridges */ - static const StringID sorter_names[]; + static inline const StringID sorter_names[] = { + STR_SORT_BY_NUMBER, + STR_SORT_BY_COST, + STR_SORT_BY_MAX_SPEED, + INVALID_STRING_ID + }; static const std::initializer_list sorter_funcs; /* Internal variables */ @@ -122,7 +127,7 @@ private: this->bridges.Sort(); /* Display the current sort variant */ - this->GetWidget(WID_BBS_DROPDOWN_CRITERIA)->widget_data = this->sorter_names[this->bridges.SortType()]; + this->GetWidget(WID_BBS_DROPDOWN_CRITERIA)->widget_data = BuildBridgeWindow::sorter_names[this->bridges.SortType()]; /* Set the modified widgets dirty */ this->SetWidgetDirty(WID_BBS_DROPDOWN_CRITERIA); @@ -161,8 +166,8 @@ public: this->FinishInitNested(transport_type); // Initializes 'this->icon_width'. this->parent = FindWindowById(WC_BUILD_TOOLBAR, transport_type); - this->bridges.SetListing(this->last_sorting); - this->bridges.SetSortFuncs(this->sorter_funcs); + this->bridges.SetListing(BuildBridgeWindow::last_sorting); + this->bridges.SetSortFuncs(BuildBridgeWindow::sorter_funcs); this->bridges.NeedResort(); this->SortBridgeList(); @@ -171,7 +176,7 @@ public: ~BuildBridgeWindow() { - this->last_sorting = this->bridges.GetListing(); + BuildBridgeWindow::last_sorting = this->bridges.GetListing(); } void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override @@ -186,7 +191,7 @@ public: } case WID_BBS_DROPDOWN_CRITERIA: { Dimension d = {0, 0}; - for (const StringID *str = this->sorter_names; *str != INVALID_STRING_ID; str++) { + for (const StringID *str = BuildBridgeWindow::sorter_names; *str != INVALID_STRING_ID; str++) { d = maxdim(d, GetStringBoundingBox(*str)); } d.width += padding.width; @@ -274,7 +279,7 @@ public: break; case WID_BBS_DROPDOWN_CRITERIA: - ShowDropDownMenu(this, this->sorter_names, this->bridges.SortType(), WID_BBS_DROPDOWN_CRITERIA, 0, 0); + ShowDropDownMenu(this, BuildBridgeWindow::sorter_names, this->bridges.SortType(), WID_BBS_DROPDOWN_CRITERIA, 0, 0); break; } } @@ -304,14 +309,6 @@ const std::initializer_list BuildBridgeWind &BridgeSpeedSorter }; -/** Names of the sorting functions. */ -const StringID BuildBridgeWindow::sorter_names[] = { - STR_SORT_BY_NUMBER, - STR_SORT_BY_COST, - STR_SORT_BY_MAX_SPEED, - INVALID_STRING_ID -}; - /** Widgets of the bridge gui. */ static constexpr NWidgetPart _nested_build_bridge_widgets[] = { /* Header */ diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 25f48a3ed5..ebde5b921d 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1325,7 +1325,13 @@ protected: static Listing last_sorting; /* Constants for sorting industries */ - static const StringID sorter_names[]; + static inline const StringID sorter_names[] = { + STR_SORT_BY_NAME, + STR_SORT_BY_TYPE, + STR_SORT_BY_PRODUCTION, + STR_SORT_BY_TRANSPORTED, + INVALID_STRING_ID + }; static const std::initializer_list sorter_funcs; GUIIndustryList industries{IndustryDirectoryWindow::produced_cargo_filter}; @@ -1909,15 +1915,6 @@ const std::initializer_list IndustryDirec &IndustryTransportedCargoSorter }; -/* Names of the sorting functions */ -const StringID IndustryDirectoryWindow::sorter_names[] = { - STR_SORT_BY_NAME, - STR_SORT_BY_TYPE, - STR_SORT_BY_PRODUCTION, - STR_SORT_BY_TRANSPORTED, - INVALID_STRING_ID -}; - CargoID IndustryDirectoryWindow::produced_cargo_filter = CargoFilterCriteria::CF_ANY; diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 241a512b12..d3b04b2749 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -244,7 +244,15 @@ protected: }; /* Constants for sorting stations */ - static const StringID sorter_names[]; + static inline const StringID sorter_names[] = { + STR_SORT_BY_NAME, + STR_SORT_BY_FACILITY, + STR_SORT_BY_WAITING_TOTAL, + STR_SORT_BY_WAITING_AVAILABLE, + STR_SORT_BY_RATING_MAX, + STR_SORT_BY_RATING_MIN, + INVALID_STRING_ID + }; static const std::initializer_list sorter_funcs; FilterState filter; @@ -400,7 +408,7 @@ public: if (HasBit(this->filter.facilities, i)) this->LowerWidget(i + WID_STL_TRAIN); } - this->GetWidget(WID_STL_SORTDROPBTN)->widget_data = this->sorter_names[this->stations.SortType()]; + this->GetWidget(WID_STL_SORTDROPBTN)->widget_data = CompanyStationsWindow::sorter_names[this->stations.SortType()]; } ~CompanyStationsWindow() @@ -627,7 +635,7 @@ public: break; case WID_STL_SORTDROPBTN: // select sorting criteria dropdown menu - ShowDropDownMenu(this, this->sorter_names, this->stations.SortType(), WID_STL_SORTDROPBTN, 0, 0); + ShowDropDownMenu(this, CompanyStationsWindow::sorter_names, this->stations.SortType(), WID_STL_SORTDROPBTN, 0, 0); break; case WID_STL_CARGODROPDOWN: @@ -644,7 +652,7 @@ public: this->stations.SetSortType(index); /* Display the current sort variant */ - this->GetWidget(WID_STL_SORTDROPBTN)->widget_data = this->sorter_names[this->stations.SortType()]; + this->GetWidget(WID_STL_SORTDROPBTN)->widget_data = CompanyStationsWindow::sorter_names[this->stations.SortType()]; this->SetDirty(); } @@ -728,17 +736,6 @@ const std::initializer_list CompanyStation &StationRatingMinSorter }; -/* Names of the sorting functions */ -const StringID CompanyStationsWindow::sorter_names[] = { - STR_SORT_BY_NAME, - STR_SORT_BY_FACILITY, - STR_SORT_BY_WAITING_TOTAL, - STR_SORT_BY_WAITING_AVAILABLE, - STR_SORT_BY_RATING_MAX, - STR_SORT_BY_RATING_MIN, - INVALID_STRING_ID -}; - static constexpr NWidgetPart _nested_company_stations_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), @@ -1291,8 +1288,24 @@ struct StationViewWindow : public Window { ALH_ACCEPTS = 3, ///< Height of the accepted cargo view. }; - static const StringID _sort_names[]; ///< Names of the sorting options in the dropdown. - static const StringID _group_names[]; ///< Names of the grouping options in the dropdown. + /** Names of the sorting options in the dropdown. */ + static inline const StringID sort_names[] = { + STR_STATION_VIEW_WAITING_STATION, + STR_STATION_VIEW_WAITING_AMOUNT, + STR_STATION_VIEW_PLANNED_STATION, + STR_STATION_VIEW_PLANNED_AMOUNT, + INVALID_STRING_ID + }; + /** Names of the grouping options in the dropdown. */ + static inline const StringID group_names[] = { + STR_STATION_VIEW_GROUP_S_V_D, + STR_STATION_VIEW_GROUP_S_D_V, + STR_STATION_VIEW_GROUP_V_S_D, + STR_STATION_VIEW_GROUP_V_D_S, + STR_STATION_VIEW_GROUP_D_S_V, + STR_STATION_VIEW_GROUP_D_V_S, + INVALID_STRING_ID + }; /** * Sort types of the different 'columns'. @@ -1977,14 +1990,14 @@ struct StationViewWindow : public Window { * sorting criteria for columns 1, 2, and 3. Column 0 is always * sorted by cargo ID. The others can theoretically be sorted * by different things but there is no UI for that. */ - ShowDropDownMenu(this, _sort_names, + ShowDropDownMenu(this, StationViewWindow::sort_names, this->current_mode * 2 + (this->sortings[1] == CargoSortType::Count ? 1 : 0), WID_SV_SORT_BY, 0, 0); break; } case WID_SV_GROUP_BY: { - ShowDropDownMenu(this, _group_names, this->grouping_index, WID_SV_GROUP_BY, 0, 0); + ShowDropDownMenu(this, StationViewWindow::group_names, this->grouping_index, WID_SV_GROUP_BY, 0, 0); break; } @@ -2015,7 +2028,7 @@ struct StationViewWindow : public Window { void SelectSortBy(int index) { _settings_client.gui.station_gui_sort_by = index; - switch (_sort_names[index]) { + switch (StationViewWindow::sort_names[index]) { case STR_STATION_VIEW_WAITING_STATION: this->current_mode = MODE_WAITING; this->sortings[1] = this->sortings[2] = this->sortings[3] = CargoSortType::AsGrouping; @@ -2036,7 +2049,7 @@ struct StationViewWindow : public Window { NOT_REACHED(); } /* Display the current sort variant */ - this->GetWidget(WID_SV_SORT_BY)->widget_data = _sort_names[index]; + this->GetWidget(WID_SV_SORT_BY)->widget_data = StationViewWindow::sort_names[index]; this->SetDirty(); } @@ -2048,8 +2061,8 @@ struct StationViewWindow : public Window { { this->grouping_index = index; _settings_client.gui.station_gui_group_order = index; - this->GetWidget(WID_SV_GROUP_BY)->widget_data = _group_names[index]; - switch (_group_names[index]) { + this->GetWidget(WID_SV_GROUP_BY)->widget_data = StationViewWindow::group_names[index]; + switch (StationViewWindow::group_names[index]) { case STR_STATION_VIEW_GROUP_S_V_D: this->groupings[1] = GR_SOURCE; this->groupings[2] = GR_NEXT; @@ -2122,24 +2135,6 @@ struct StationViewWindow : public Window { } }; -const StringID StationViewWindow::_sort_names[] = { - STR_STATION_VIEW_WAITING_STATION, - STR_STATION_VIEW_WAITING_AMOUNT, - STR_STATION_VIEW_PLANNED_STATION, - STR_STATION_VIEW_PLANNED_AMOUNT, - INVALID_STRING_ID -}; - -const StringID StationViewWindow::_group_names[] = { - STR_STATION_VIEW_GROUP_S_V_D, - STR_STATION_VIEW_GROUP_S_D_V, - STR_STATION_VIEW_GROUP_V_S_D, - STR_STATION_VIEW_GROUP_V_D_S, - STR_STATION_VIEW_GROUP_D_S_V, - STR_STATION_VIEW_GROUP_D_V_S, - INVALID_STRING_ID -}; - static WindowDesc _station_view_desc( WDP_AUTO, "view_station", 249, 117, WC_STATION_VIEW, WC_NONE, diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 0b5e729f99..8e38d7c1d1 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -720,7 +720,12 @@ private: static Listing last_sorting; /* Constants for sorting towns */ - static const StringID sorter_names[]; + static inline const StringID sorter_names[] = { + STR_SORT_BY_NAME, + STR_SORT_BY_POPULATION, + STR_SORT_BY_RATING, + INVALID_STRING_ID + }; static const std::initializer_list sorter_funcs; StringFilter string_filter; ///< Filter for towns @@ -1045,14 +1050,6 @@ public: Listing TownDirectoryWindow::last_sorting = {false, 0}; -/** Names of the sorting functions. */ -const StringID TownDirectoryWindow::sorter_names[] = { - STR_SORT_BY_NAME, - STR_SORT_BY_POPULATION, - STR_SORT_BY_RATING, - INVALID_STRING_ID -}; - /** Available town directory sorting functions. */ const std::initializer_list TownDirectoryWindow::sorter_funcs = { &TownNameSorter, From 546a996d9505f4dc4dfcbf673fc803bb57dd5ef7 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 28 Apr 2024 15:25:21 +0200 Subject: [PATCH 425/695] Codechange: pass options to ShowDropDownMenu using a span --- src/autoreplace_gui.cpp | 2 +- src/build_vehicle_gui.cpp | 4 ++-- src/dropdown.cpp | 2 +- src/dropdown_func.h | 2 +- src/engine_gui.h | 2 +- src/gfx.cpp | 4 ++-- src/gfx_func.h | 2 +- src/group_gui.cpp | 2 +- src/vehicle_gui.cpp | 14 +++++++------- src/vehicle_gui_base.h | 12 ++++++------ 10 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index b145e34696..891e9febc6 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -402,7 +402,7 @@ public: break; case WID_RV_SORT_DROPDOWN: - SetDParam(0, _engine_sort_listing[this->window_number][this->sort_criteria]); + SetDParam(0, std::data(_engine_sort_listing[this->window_number])[this->sort_criteria]); break; case WID_RV_TRAIN_WAGONREMOVE_TOGGLE: { diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 9b5daa0f43..6c587e794b 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -484,7 +484,7 @@ EngList_SortTypeFunction * const _engine_sort_functions[][11] = {{ }}; /** Dropdown menu strings for the vehicle sort criteria. */ -const StringID _engine_sort_listing[][12] = {{ +const std::initializer_list _engine_sort_listing[] = {{ /* Trains */ STR_SORT_BY_ENGINE_ID, STR_SORT_BY_COST, @@ -1747,7 +1747,7 @@ struct BuildVehicleWindow : Window { break; case WID_BV_SORT_DROPDOWN: - SetDParam(0, _engine_sort_listing[this->vehicle_type][this->sort_criteria]); + SetDParam(0, std::data(_engine_sort_listing[this->vehicle_type])[this->sort_criteria]); break; case WID_BV_CARGO_FILTER_DROPDOWN: diff --git a/src/dropdown.cpp b/src/dropdown.cpp index 6366090b88..da92a0c765 100644 --- a/src/dropdown.cpp +++ b/src/dropdown.cpp @@ -438,7 +438,7 @@ void ShowDropDownList(Window *w, DropDownList &&list, int selected, WidgetID but * @param hidden_mask Bitmask for hidden items (items with their bit set are not copied to the dropdown list). * @param width Minimum width of the dropdown menu. */ -void ShowDropDownMenu(Window *w, const StringID *strings, int selected, WidgetID button, uint32_t disabled_mask, uint32_t hidden_mask, uint width) +void ShowDropDownMenu(Window *w, std::span strings, int selected, WidgetID button, uint32_t disabled_mask, uint32_t hidden_mask, uint width) { DropDownList list; diff --git a/src/dropdown_func.h b/src/dropdown_func.h index dee640e00f..6aee0066f7 100644 --- a/src/dropdown_func.h +++ b/src/dropdown_func.h @@ -13,7 +13,7 @@ #include "window_gui.h" /* Show drop down menu containing a fixed list of strings */ -void ShowDropDownMenu(Window *w, const StringID *strings, int selected, WidgetID button, uint32_t disabled_mask, uint32_t hidden_mask, uint width = 0); +void ShowDropDownMenu(Window *w, std::span strings, int selected, WidgetID button, uint32_t disabled_mask, uint32_t hidden_mask, uint width = 0); /* Helper functions for commonly used drop down list items. */ std::unique_ptr MakeDropDownListDividerItem(); diff --git a/src/engine_gui.h b/src/engine_gui.h index ba7e41715f..5e2d5fe336 100644 --- a/src/engine_gui.h +++ b/src/engine_gui.h @@ -49,7 +49,7 @@ extern bool _engine_sort_direction; extern uint8_t _engine_sort_last_criteria[]; extern bool _engine_sort_last_order[]; extern bool _engine_sort_show_hidden_engines[]; -extern const StringID _engine_sort_listing[][12]; +extern const std::initializer_list _engine_sort_listing[]; extern EngList_SortTypeFunction * const _engine_sort_functions[][11]; /* Functions in build_vehicle_gui.cpp */ diff --git a/src/gfx.cpp b/src/gfx.cpp index 0292dff16a..b3bdc79998 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -868,10 +868,10 @@ Dimension GetStringBoundingBox(StringID strid, FontSize start_fontsize) * @param fontsize Font size to use. * @return Width of longest string within the list. */ -uint GetStringListWidth(const StringID *list, FontSize fontsize) +uint GetStringListWidth(std::span list, FontSize fontsize) { uint width = 0; - for (const StringID *str = list; *str != INVALID_STRING_ID; str++) { + for (const StringID *str = list.data(); *str != INVALID_STRING_ID; str++) { width = std::max(width, GetStringBoundingBox(*str, fontsize).width); } return width; diff --git a/src/gfx_func.h b/src/gfx_func.h index 7d6aff7c07..592bcc5a8d 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -133,7 +133,7 @@ inline void GfxFillRect(const Rect &r, int colour, FillRectMode mode = FILLRECT_ Dimension GetStringBoundingBox(std::string_view str, FontSize start_fontsize = FS_NORMAL); Dimension GetStringBoundingBox(StringID strid, FontSize start_fontsize = FS_NORMAL); -uint GetStringListWidth(const StringID *list, FontSize fontsize = FS_NORMAL); +uint GetStringListWidth(std::span list, FontSize fontsize = FS_NORMAL); int GetStringHeight(std::string_view str, int maxw, FontSize fontsize = FS_NORMAL); int GetStringHeight(StringID str, int maxw); int GetStringLineCount(StringID str, int maxw); diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 64b81228fb..b355e9f98f 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -588,7 +588,7 @@ public: this->GetWidget(WID_GL_REPLACE_PROTECTION)->widget_data = protect_sprite + this->vli.vtype; /* Set text of "group by" dropdown widget. */ - this->GetWidget(WID_GL_GROUP_BY_DROPDOWN)->widget_data = this->vehicle_group_by_names[this->grouping]; + this->GetWidget(WID_GL_GROUP_BY_DROPDOWN)->widget_data = std::data(this->vehicle_group_by_names)[this->grouping]; /* Set text of "sort by" dropdown widget. */ this->GetWidget(WID_GL_SORT_BY_DROPDOWN)->widget_data = this->GetVehicleSorterNames()[this->vehgroups.SortType()]; diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 240a5cb9c5..6d85048134 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -94,7 +94,7 @@ const std::initializer_list, }; -const StringID BaseVehicleListWindow::vehicle_group_none_sorter_names_calendar[] = { +const std::initializer_list BaseVehicleListWindow::vehicle_group_none_sorter_names_calendar = { STR_SORT_BY_NUMBER, STR_SORT_BY_NAME, STR_SORT_BY_AGE, @@ -111,7 +111,7 @@ const StringID BaseVehicleListWindow::vehicle_group_none_sorter_names_calendar[] INVALID_STRING_ID }; -const StringID BaseVehicleListWindow::vehicle_group_none_sorter_names_wallclock[] = { +const std::initializer_list BaseVehicleListWindow::vehicle_group_none_sorter_names_wallclock = { STR_SORT_BY_NUMBER, STR_SORT_BY_NAME, STR_SORT_BY_AGE, @@ -136,7 +136,7 @@ const std::initializer_list BaseVehicleListWindow::vehicle_group_shared_orders_sorter_names_calendar = { STR_SORT_BY_NUM_VEHICLES, STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR, STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR, @@ -145,7 +145,7 @@ const StringID BaseVehicleListWindow::vehicle_group_shared_orders_sorter_names_c INVALID_STRING_ID }; -const StringID BaseVehicleListWindow::vehicle_group_shared_orders_sorter_names_wallclock[] = { +const std::initializer_list BaseVehicleListWindow::vehicle_group_shared_orders_sorter_names_wallclock = { STR_SORT_BY_NUM_VEHICLES, STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD, STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD, @@ -154,7 +154,7 @@ const StringID BaseVehicleListWindow::vehicle_group_shared_orders_sorter_names_w INVALID_STRING_ID }; -const StringID BaseVehicleListWindow::vehicle_group_by_names[] = { +const std::initializer_list BaseVehicleListWindow::vehicle_group_by_names = { STR_GROUP_BY_NONE, STR_GROUP_BY_SHARED_ORDERS, INVALID_STRING_ID @@ -174,7 +174,7 @@ BaseVehicleListWindow::BaseVehicleListWindow(WindowDesc *desc, WindowNumber wno) this->UpdateSortingFromGrouping(); } -const StringID *BaseVehicleListWindow::GetVehicleSorterNames() +std::span BaseVehicleListWindow::GetVehicleSorterNames() { switch (this->grouping) { case GB_NONE: @@ -2048,7 +2048,7 @@ public: } /* Set text of group by dropdown widget. */ - this->GetWidget(WID_VL_GROUP_BY_PULLDOWN)->widget_data = this->vehicle_group_by_names[this->grouping]; + this->GetWidget(WID_VL_GROUP_BY_PULLDOWN)->widget_data = std::data(this->vehicle_group_by_names)[this->grouping]; /* Set text of sort by dropdown widget. */ this->GetWidget(WID_VL_SORT_BY_PULLDOWN)->widget_data = this->GetVehicleSorterNames()[this->vehgroups.SortType()]; diff --git a/src/vehicle_gui_base.h b/src/vehicle_gui_base.h index 4b4519b225..73036fefe3 100644 --- a/src/vehicle_gui_base.h +++ b/src/vehicle_gui_base.h @@ -98,11 +98,11 @@ struct BaseVehicleListWindow : public Window { }; static const StringID vehicle_depot_name[]; - static const StringID vehicle_group_by_names[]; - static const StringID vehicle_group_none_sorter_names_calendar[]; - static const StringID vehicle_group_none_sorter_names_wallclock[]; - static const StringID vehicle_group_shared_orders_sorter_names_calendar[]; - static const StringID vehicle_group_shared_orders_sorter_names_wallclock[]; + static const std::initializer_list vehicle_group_by_names; + static const std::initializer_list vehicle_group_none_sorter_names_calendar; + static const std::initializer_list vehicle_group_none_sorter_names_wallclock; + static const std::initializer_list vehicle_group_shared_orders_sorter_names_calendar; + static const std::initializer_list vehicle_group_shared_orders_sorter_names_wallclock; static const std::initializer_list vehicle_group_none_sorter_funcs; static const std::initializer_list vehicle_group_shared_orders_sorter_funcs; @@ -124,7 +124,7 @@ struct BaseVehicleListWindow : public Window { Dimension GetActionDropdownSize(bool show_autoreplace, bool show_group, bool show_create); DropDownList BuildActionDropdownList(bool show_autoreplace, bool show_group, bool show_create); - const StringID *GetVehicleSorterNames(); + std::span GetVehicleSorterNames(); std::span GetVehicleSorterFuncs() { From 37a03b513f19396051899b3d0b18e492029a5d9d Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 28 Apr 2024 15:59:53 +0200 Subject: [PATCH 426/695] Codechange: refactor string list dimension finding into a separate function --- src/autoreplace_gui.cpp | 4 +--- src/bridge_gui.cpp | 5 +---- src/genworld_gui.cpp | 8 ++------ src/gfx.cpp | 16 ++++++++++++++++ src/gfx_func.h | 1 + src/industry_gui.cpp | 5 +---- src/order_gui.cpp | 5 +---- src/station_gui.cpp | 5 +---- src/town_gui.cpp | 5 +---- src/vehicle_gui.cpp | 7 +------ 10 files changed, 26 insertions(+), 35 deletions(-) diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 891e9febc6..db58477657 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -369,9 +369,7 @@ public: case WID_RV_START_REPLACE: { Dimension d = GetStringBoundingBox(STR_REPLACE_VEHICLES_START); - for (int i = 0; _start_replace_dropdown[i] != INVALID_STRING_ID; i++) { - d = maxdim(d, GetStringBoundingBox(_start_replace_dropdown[i])); - } + maxdim(d, GetStringListBoundingBox(_start_replace_dropdown)); d.width += padding.width; d.height += padding.height; size = maxdim(size, d); diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index c983433b7f..9683b59d33 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -190,10 +190,7 @@ public: break; } case WID_BBS_DROPDOWN_CRITERIA: { - Dimension d = {0, 0}; - for (const StringID *str = BuildBridgeWindow::sorter_names; *str != INVALID_STRING_ID; str++) { - d = maxdim(d, GetStringBoundingBox(*str)); - } + Dimension d = GetStringListBoundingBox(BuildBridgeWindow::sorter_names); d.width += padding.width; d.height += padding.height; size = maxdim(size, d); diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index 5cd4112061..4ac2bbae36 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -574,7 +574,7 @@ struct GenerateLandscapeWindow : public Window { void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { Dimension d{0, (uint)GetCharacterHeight(FS_NORMAL)}; - const StringID *strs = nullptr; + std::span strs; switch (widget) { case WID_GL_TEMPERATE: case WID_GL_ARCTIC: case WID_GL_TROPICAL: case WID_GL_TOYLAND: @@ -660,11 +660,7 @@ struct GenerateLandscapeWindow : public Window { default: return; } - if (strs != nullptr) { - while (*strs != INVALID_STRING_ID) { - d = maxdim(d, GetStringBoundingBox(*strs++)); - } - } + maxdim(d, GetStringListBoundingBox(strs)); d.width += padding.width; d.height += padding.height; size = maxdim(size, d); diff --git a/src/gfx.cpp b/src/gfx.cpp index b3bdc79998..64bfc4a807 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -22,6 +22,7 @@ #include "newgrf_debug.h" #include "core/backup_type.hpp" #include "core/container_func.hpp" +#include "core/geometry_func.hpp" #include "viewport_func.h" #include "table/string_colours.h" @@ -877,6 +878,21 @@ uint GetStringListWidth(std::span list, FontSize fontsize) return width; } +/** + * Get maximum dimension of a list of strings. + * @param list List of strings, terminated by INVALID_STRING_ID. + * @param fontsize Font size to use. + * @return Dimension of highest and longest string within the list. + */ +Dimension GetStringListBoundingBox(std::span list, FontSize fontsize) +{ + Dimension d{0, 0}; + for (const StringID *str = list.data(); *str != INVALID_STRING_ID; str++) { + d = maxdim(d, GetStringBoundingBox(*str, fontsize)); + } + return d; +} + /** * Get the leading corner of a character in a single-line string relative * to the start of the string. diff --git a/src/gfx_func.h b/src/gfx_func.h index 592bcc5a8d..c6c1a46a4c 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -134,6 +134,7 @@ inline void GfxFillRect(const Rect &r, int colour, FillRectMode mode = FILLRECT_ Dimension GetStringBoundingBox(std::string_view str, FontSize start_fontsize = FS_NORMAL); Dimension GetStringBoundingBox(StringID strid, FontSize start_fontsize = FS_NORMAL); uint GetStringListWidth(std::span list, FontSize fontsize = FS_NORMAL); +Dimension GetStringListBoundingBox(std::span list, FontSize fontsize = FS_NORMAL); int GetStringHeight(std::string_view str, int maxw, FontSize fontsize = FS_NORMAL); int GetStringHeight(StringID str, int maxw); int GetStringLineCount(StringID str, int maxw); diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index ebde5b921d..863789f250 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1739,10 +1739,7 @@ public: } case WID_ID_DROPDOWN_CRITERIA: { - Dimension d = {0, 0}; - for (uint i = 0; IndustryDirectoryWindow::sorter_names[i] != INVALID_STRING_ID; i++) { - d = maxdim(d, GetStringBoundingBox(IndustryDirectoryWindow::sorter_names[i])); - } + Dimension d = GetStringListBoundingBox(IndustryDirectoryWindow::sorter_names); d.width += padding.width; d.height += padding.height; size = maxdim(size, d); diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 397502cd32..06fb5318af 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -854,10 +854,7 @@ public: } case WID_O_COND_COMPARATOR: { - Dimension d = {0, 0}; - for (int i = 0; _order_conditional_condition[i] != INVALID_STRING_ID; i++) { - d = maxdim(d, GetStringBoundingBox(_order_conditional_condition[i])); - } + Dimension d = GetStringListBoundingBox(_order_conditional_condition); d.width += padding.width; d.height += padding.height; size = maxdim(size, d); diff --git a/src/station_gui.cpp b/src/station_gui.cpp index d3b04b2749..d538fa33a2 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -430,10 +430,7 @@ public: } case WID_STL_SORTDROPBTN: { - Dimension d = {0, 0}; - for (int i = 0; CompanyStationsWindow::sorter_names[i] != INVALID_STRING_ID; i++) { - d = maxdim(d, GetStringBoundingBox(CompanyStationsWindow::sorter_names[i])); - } + Dimension d = GetStringListBoundingBox(CompanyStationsWindow::sorter_names); d.width += padding.width; d.height += padding.height; size = maxdim(size, d); diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 8e38d7c1d1..e030111cdb 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -894,10 +894,7 @@ public: break; } case WID_TD_SORT_CRITERIA: { - Dimension d = {0, 0}; - for (uint i = 0; TownDirectoryWindow::sorter_names[i] != INVALID_STRING_ID; i++) { - d = maxdim(d, GetStringBoundingBox(TownDirectoryWindow::sorter_names[i])); - } + Dimension d = GetStringListBoundingBox(TownDirectoryWindow::sorter_names); d.width += padding.width; d.height += padding.height; size = maxdim(size, d); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 6d85048134..2b7e9c00ff 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -2487,12 +2487,7 @@ struct VehicleDetailsWindow : Window { break; case WID_VD_SERVICE_INTERVAL_DROPDOWN: { - Dimension d{0, 0}; - for (const StringID *strs : {_service_interval_dropdown_calendar, _service_interval_dropdown_wallclock}) { - while (*strs != INVALID_STRING_ID) { - d = maxdim(d, GetStringBoundingBox(*strs++)); - } - } + Dimension d = maxdim(GetStringListBoundingBox(_service_interval_dropdown_calendar), GetStringListBoundingBox(_service_interval_dropdown_wallclock)); d.width += padding.width; d.height += padding.height; size = maxdim(size, d); From d183d8e58701c31987980490dd0d763280d6a9f8 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 28 Apr 2024 16:03:29 +0200 Subject: [PATCH 427/695] Codechange: remove INVALID_STRING_ID now drop down uses spans --- src/autoreplace_gui.cpp | 1 - src/bridge_gui.cpp | 1 - src/build_vehicle_gui.cpp | 4 ---- src/dropdown.cpp | 8 +++++--- src/genworld_gui.cpp | 18 +++++++++--------- src/gfx.cpp | 10 +++++----- src/industry_gui.cpp | 1 - src/order_gui.cpp | 8 -------- src/station_gui.cpp | 3 --- src/town_gui.cpp | 1 - src/vehicle_gui.cpp | 7 ------- 11 files changed, 19 insertions(+), 43 deletions(-) diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index db58477657..f6d819d612 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -71,7 +71,6 @@ void AddRemoveEngineFromAutoreplaceAndBuildWindows(VehicleType type) static const StringID _start_replace_dropdown[] = { STR_REPLACE_VEHICLES_NOW, STR_REPLACE_VEHICLES_WHEN_OLD, - INVALID_STRING_ID }; /** diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index 9683b59d33..023411b115 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -79,7 +79,6 @@ private: STR_SORT_BY_NUMBER, STR_SORT_BY_COST, STR_SORT_BY_MAX_SPEED, - INVALID_STRING_ID }; static const std::initializer_list sorter_funcs; diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 6c587e794b..12934979ef 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -497,7 +497,6 @@ const std::initializer_list _engine_sort_listing[] = {{ STR_SORT_BY_POWER_VS_RUNNING_COST, STR_SORT_BY_RELIABILITY, STR_SORT_BY_CARGO_CAPACITY, - INVALID_STRING_ID }, { /* Road vehicles */ STR_SORT_BY_ENGINE_ID, @@ -511,7 +510,6 @@ const std::initializer_list _engine_sort_listing[] = {{ STR_SORT_BY_POWER_VS_RUNNING_COST, STR_SORT_BY_RELIABILITY, STR_SORT_BY_CARGO_CAPACITY, - INVALID_STRING_ID }, { /* Ships */ STR_SORT_BY_ENGINE_ID, @@ -522,7 +520,6 @@ const std::initializer_list _engine_sort_listing[] = {{ STR_SORT_BY_RUNNING_COST, STR_SORT_BY_RELIABILITY, STR_SORT_BY_CARGO_CAPACITY, - INVALID_STRING_ID }, { /* Aircraft */ STR_SORT_BY_ENGINE_ID, @@ -534,7 +531,6 @@ const std::initializer_list _engine_sort_listing[] = {{ STR_SORT_BY_RELIABILITY, STR_SORT_BY_CARGO_CAPACITY, STR_SORT_BY_RANGE, - INVALID_STRING_ID }}; /** Filters vehicles by cargo and engine (in case of rail vehicle). */ diff --git a/src/dropdown.cpp b/src/dropdown.cpp index da92a0c765..2e1cd43452 100644 --- a/src/dropdown.cpp +++ b/src/dropdown.cpp @@ -431,7 +431,7 @@ void ShowDropDownList(Window *w, DropDownList &&list, int selected, WidgetID but * Show a dropdown menu window near a widget of the parent window. * The result code of the items is their index in the \a strings list. * @param w Parent window that wants the dropdown menu. - * @param strings Menu list, end with #INVALID_STRING_ID + * @param strings Menu list. * @param selected Index of initial selected item. * @param button Button widget number of the parent window \a w that wants the dropdown menu. * @param disabled_mask Bitmask for disabled items (items with their bit set are displayed, but not selectable in the dropdown list). @@ -442,10 +442,12 @@ void ShowDropDownMenu(Window *w, std::span strings, int selected { DropDownList list; - for (uint i = 0; strings[i] != INVALID_STRING_ID; i++) { + uint i = 0; + for (auto string : strings) { if (!HasBit(hidden_mask, i)) { - list.push_back(MakeDropDownListStringItem(strings[i], i, HasBit(disabled_mask, i))); + list.push_back(MakeDropDownListStringItem(string, i, HasBit(disabled_mask, i))); } + ++i; } if (!list.empty()) ShowDropDownList(w, std::move(list), selected, button, width); diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index 4ac2bbae36..cd203da979 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -373,16 +373,16 @@ static DropDownList BuildTownNameDropDown() } -static const StringID _elevations[] = {STR_TERRAIN_TYPE_VERY_FLAT, STR_TERRAIN_TYPE_FLAT, STR_TERRAIN_TYPE_HILLY, STR_TERRAIN_TYPE_MOUNTAINOUS, STR_TERRAIN_TYPE_ALPINIST, STR_TERRAIN_TYPE_CUSTOM, INVALID_STRING_ID}; -static const StringID _sea_lakes[] = {STR_SEA_LEVEL_VERY_LOW, STR_SEA_LEVEL_LOW, STR_SEA_LEVEL_MEDIUM, STR_SEA_LEVEL_HIGH, STR_SEA_LEVEL_CUSTOM, INVALID_STRING_ID}; -static const StringID _rivers[] = {STR_RIVERS_NONE, STR_RIVERS_FEW, STR_RIVERS_MODERATE, STR_RIVERS_LOT, INVALID_STRING_ID}; -static const StringID _smoothness[] = {STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH, STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH, STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH, STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH, INVALID_STRING_ID}; -static const StringID _rotation[] = {STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE, STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE, INVALID_STRING_ID}; -static const StringID _num_towns[] = {STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, STR_NUM_CUSTOM, INVALID_STRING_ID}; -static const StringID _num_inds[] = {STR_FUNDING_ONLY, STR_MINIMAL, STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, STR_NUM_CUSTOM, INVALID_STRING_ID}; -static const StringID _variety[] = {STR_VARIETY_NONE, STR_VARIETY_VERY_LOW, STR_VARIETY_LOW, STR_VARIETY_MEDIUM, STR_VARIETY_HIGH, STR_VARIETY_VERY_HIGH, INVALID_STRING_ID}; +static const StringID _elevations[] = {STR_TERRAIN_TYPE_VERY_FLAT, STR_TERRAIN_TYPE_FLAT, STR_TERRAIN_TYPE_HILLY, STR_TERRAIN_TYPE_MOUNTAINOUS, STR_TERRAIN_TYPE_ALPINIST, STR_TERRAIN_TYPE_CUSTOM}; +static const StringID _sea_lakes[] = {STR_SEA_LEVEL_VERY_LOW, STR_SEA_LEVEL_LOW, STR_SEA_LEVEL_MEDIUM, STR_SEA_LEVEL_HIGH, STR_SEA_LEVEL_CUSTOM}; +static const StringID _rivers[] = {STR_RIVERS_NONE, STR_RIVERS_FEW, STR_RIVERS_MODERATE, STR_RIVERS_LOT}; +static const StringID _smoothness[] = {STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH, STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH, STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH, STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH}; +static const StringID _rotation[] = {STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE, STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE}; +static const StringID _num_towns[] = {STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, STR_NUM_CUSTOM}; +static const StringID _num_inds[] = {STR_FUNDING_ONLY, STR_MINIMAL, STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, STR_NUM_CUSTOM}; +static const StringID _variety[] = {STR_VARIETY_NONE, STR_VARIETY_VERY_LOW, STR_VARIETY_LOW, STR_VARIETY_MEDIUM, STR_VARIETY_HIGH, STR_VARIETY_VERY_HIGH}; -static_assert(lengthof(_num_inds) == ID_END + 1); +static_assert(std::size(_num_inds) == ID_END); struct GenerateLandscapeWindow : public Window { WidgetID widget_id; diff --git a/src/gfx.cpp b/src/gfx.cpp index 64bfc4a807..3d652ab18d 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -865,15 +865,15 @@ Dimension GetStringBoundingBox(StringID strid, FontSize start_fontsize) /** * Get maximum width of a list of strings. - * @param list List of strings, terminated with INVALID_STRING_ID. + * @param list List of strings. * @param fontsize Font size to use. * @return Width of longest string within the list. */ uint GetStringListWidth(std::span list, FontSize fontsize) { uint width = 0; - for (const StringID *str = list.data(); *str != INVALID_STRING_ID; str++) { - width = std::max(width, GetStringBoundingBox(*str, fontsize).width); + for (auto str : list) { + width = std::max(width, GetStringBoundingBox(str, fontsize).width); } return width; } @@ -887,8 +887,8 @@ uint GetStringListWidth(std::span list, FontSize fontsize) Dimension GetStringListBoundingBox(std::span list, FontSize fontsize) { Dimension d{0, 0}; - for (const StringID *str = list.data(); *str != INVALID_STRING_ID; str++) { - d = maxdim(d, GetStringBoundingBox(*str, fontsize)); + for (auto str : list) { + d = maxdim(d, GetStringBoundingBox(str, fontsize)); } return d; } diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 863789f250..35cc27d837 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1330,7 +1330,6 @@ protected: STR_SORT_BY_TYPE, STR_SORT_BY_PRODUCTION, STR_SORT_BY_TRANSPORTED, - INVALID_STRING_ID }; static const std::initializer_list sorter_funcs; diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 06fb5318af..43101d1cd1 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -116,7 +116,6 @@ static const StringID _order_non_stop_drowdown[] = { STR_ORDER_GO_NON_STOP_TO, STR_ORDER_GO_VIA, STR_ORDER_GO_NON_STOP_VIA, - INVALID_STRING_ID }; static const StringID _order_full_load_drowdown[] = { @@ -125,7 +124,6 @@ static const StringID _order_full_load_drowdown[] = { STR_ORDER_DROP_FULL_LOAD_ALL, STR_ORDER_DROP_FULL_LOAD_ANY, STR_ORDER_DROP_NO_LOADING, - INVALID_STRING_ID }; static const StringID _order_unload_drowdown[] = { @@ -134,7 +132,6 @@ static const StringID _order_unload_drowdown[] = { STR_ORDER_DROP_TRANSFER, STR_EMPTY, STR_ORDER_DROP_NO_UNLOADING, - INVALID_STRING_ID }; static const StringID _order_goto_dropdown[] = { @@ -142,7 +139,6 @@ static const StringID _order_goto_dropdown[] = { STR_ORDER_GO_TO_NEAREST_DEPOT, STR_ORDER_CONDITIONAL, STR_ORDER_SHARE, - INVALID_STRING_ID }; static const StringID _order_goto_dropdown_aircraft[] = { @@ -150,7 +146,6 @@ static const StringID _order_goto_dropdown_aircraft[] = { STR_ORDER_GO_TO_NEAREST_HANGAR, STR_ORDER_CONDITIONAL, STR_ORDER_SHARE, - INVALID_STRING_ID }; /** Variables for conditional orders; this defines the order of appearance in the dropdown box */ @@ -174,7 +169,6 @@ static const StringID _order_conditional_condition[] = { STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS, STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE, STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE, - INVALID_STRING_ID, }; extern uint ConvertSpeedToDisplaySpeed(uint speed, VehicleType type); @@ -185,7 +179,6 @@ static const StringID _order_depot_action_dropdown[] = { STR_ORDER_DROP_SERVICE_DEPOT, STR_ORDER_DROP_HALT_DEPOT, STR_ORDER_DROP_UNBUNCH, - INVALID_STRING_ID }; static int DepotActionStringIndex(const Order *order) @@ -204,7 +197,6 @@ static int DepotActionStringIndex(const Order *order) static const StringID _order_refit_action_dropdown[] = { STR_ORDER_DROP_REFIT_AUTO, STR_ORDER_DROP_REFIT_AUTO_ANY, - INVALID_STRING_ID }; /** diff --git a/src/station_gui.cpp b/src/station_gui.cpp index d538fa33a2..c5de52e2e9 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -251,7 +251,6 @@ protected: STR_SORT_BY_WAITING_AVAILABLE, STR_SORT_BY_RATING_MAX, STR_SORT_BY_RATING_MIN, - INVALID_STRING_ID }; static const std::initializer_list sorter_funcs; @@ -1291,7 +1290,6 @@ struct StationViewWindow : public Window { STR_STATION_VIEW_WAITING_AMOUNT, STR_STATION_VIEW_PLANNED_STATION, STR_STATION_VIEW_PLANNED_AMOUNT, - INVALID_STRING_ID }; /** Names of the grouping options in the dropdown. */ static inline const StringID group_names[] = { @@ -1301,7 +1299,6 @@ struct StationViewWindow : public Window { STR_STATION_VIEW_GROUP_V_D_S, STR_STATION_VIEW_GROUP_D_S_V, STR_STATION_VIEW_GROUP_D_V_S, - INVALID_STRING_ID }; /** diff --git a/src/town_gui.cpp b/src/town_gui.cpp index e030111cdb..a4d9f40761 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -724,7 +724,6 @@ private: STR_SORT_BY_NAME, STR_SORT_BY_POPULATION, STR_SORT_BY_RATING, - INVALID_STRING_ID }; static const std::initializer_list sorter_funcs; diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 2b7e9c00ff..e4bcdb93fd 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -108,7 +108,6 @@ const std::initializer_list BaseVehicleListWindow::vehicle_group STR_SORT_BY_LENGTH, STR_SORT_BY_LIFE_TIME, STR_SORT_BY_TIMETABLE_DELAY, - INVALID_STRING_ID }; const std::initializer_list BaseVehicleListWindow::vehicle_group_none_sorter_names_wallclock = { @@ -125,7 +124,6 @@ const std::initializer_list BaseVehicleListWindow::vehicle_group STR_SORT_BY_LENGTH, STR_SORT_BY_LIFE_TIME, STR_SORT_BY_TIMETABLE_DELAY, - INVALID_STRING_ID }; const std::initializer_list BaseVehicleListWindow::vehicle_group_shared_orders_sorter_funcs = { @@ -142,7 +140,6 @@ const std::initializer_list BaseVehicleListWindow::vehicle_group STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR, STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR, STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR, - INVALID_STRING_ID }; const std::initializer_list BaseVehicleListWindow::vehicle_group_shared_orders_sorter_names_wallclock = { @@ -151,13 +148,11 @@ const std::initializer_list BaseVehicleListWindow::vehicle_group STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD, STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD, STR_SORT_BY_AVERAGE_PROFIT_LAST_PERIOD, - INVALID_STRING_ID }; const std::initializer_list BaseVehicleListWindow::vehicle_group_by_names = { STR_GROUP_BY_NONE, STR_GROUP_BY_SHARED_ORDERS, - INVALID_STRING_ID }; const StringID BaseVehicleListWindow::vehicle_depot_name[] = { @@ -2362,14 +2357,12 @@ static StringID _service_interval_dropdown_calendar[] = { STR_VEHICLE_DETAILS_DEFAULT, STR_VEHICLE_DETAILS_DAYS, STR_VEHICLE_DETAILS_PERCENT, - INVALID_STRING_ID, }; static StringID _service_interval_dropdown_wallclock[] = { STR_VEHICLE_DETAILS_DEFAULT, STR_VEHICLE_DETAILS_MINUTES, STR_VEHICLE_DETAILS_PERCENT, - INVALID_STRING_ID, }; /** Class for managing the vehicle details window. */ From 87dbd4a8336c883c7cb41d213dd98cfc2b9ba919 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 28 Apr 2024 17:53:11 +0200 Subject: [PATCH 428/695] Codechange: use ranged for loop to determine widest title --- src/league_gui.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/league_gui.cpp b/src/league_gui.cpp index 062b195212..8b52359c92 100644 --- a/src/league_gui.cpp +++ b/src/league_gui.cpp @@ -141,11 +141,11 @@ public: this->ordinal_width += WidgetDimensions::scaled.hsep_wide; // Keep some extra spacing uint widest_width = 0; - uint widest_title = 0; - for (uint i = 0; i < lengthof(_performance_titles); i++) { - uint width = GetStringBoundingBox(_performance_titles[i]).width; + StringID widest_title = STR_NULL; + for (auto title : _performance_titles) { + uint width = GetStringBoundingBox(title).width; if (width > widest_width) { - widest_title = i; + widest_title = title; widest_width = width; } } @@ -156,7 +156,7 @@ public: for (const Company *c : Company::Iterate()) { SetDParam(0, c->index); SetDParam(1, c->index); - SetDParam(2, _performance_titles[widest_title]); + SetDParam(2, widest_title); widest_width = std::max(widest_width, GetStringBoundingBox(STR_COMPANY_LEAGUE_COMPANY_NAME).width); } From 24b6ec80a9be1aedc34413ae272fe206cd2fecb8 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 28 Apr 2024 18:05:07 +0200 Subject: [PATCH 429/695] Codechange: use ranged for loop and vector to determine the disaster to deploy --- src/disaster_vehicle.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/disaster_vehicle.cpp b/src/disaster_vehicle.cpp index eea873ffca..69ce0319e4 100644 --- a/src/disaster_vehicle.cpp +++ b/src/disaster_vehicle.cpp @@ -925,16 +925,17 @@ static const Disaster _disasters[] = { static void DoDisaster() { - uint8_t buf[lengthof(_disasters)]; + std::vector available_disasters; - uint8_t j = 0; - for (size_t i = 0; i != lengthof(_disasters); i++) { - if (TimerGameCalendar::year >= _disasters[i].min_year && TimerGameCalendar::year < _disasters[i].max_year) buf[j++] = (uint8_t)i; + for (auto &disaster : _disasters) { + if (TimerGameCalendar::year >= disaster.min_year && TimerGameCalendar::year < disaster.max_year) { + available_disasters.push_back(disaster.init_proc); + } } - if (j == 0) return; + if (available_disasters.empty()) return; - _disasters[buf[RandomRange(j)]].init_proc(); + available_disasters[RandomRange(static_cast(available_disasters.size()))](); } From 98d37338dfbf0fdc64eaa0e9e1ae8c74977c9ef6 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 28 Apr 2024 18:30:02 +0200 Subject: [PATCH 430/695] Codechange: use ranged for loop instead of one with lengthof --- src/object_gui.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/object_gui.cpp b/src/object_gui.cpp index 4fec20d2f6..daab1f04de 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -257,9 +257,9 @@ public: } /* Determine the pixel heights. */ - for (size_t i = 0; i < lengthof(height); i++) { - height[i] *= ScaleGUITrad(TILE_HEIGHT); - height[i] += ScaleGUITrad(TILE_PIXELS) + 2 * this->object_margin; + for (auto &h : height) { + h *= ScaleGUITrad(TILE_HEIGHT); + h += ScaleGUITrad(TILE_PIXELS) + 2 * this->object_margin; } /* Now determine the size of the minimum widgets. When there are two columns, then From fd4cf699e5eef8e7912c0d0eac1602e8a53ecd69 Mon Sep 17 00:00:00 2001 From: rubidium42 Date: Sun, 28 Apr 2024 19:42:58 +0200 Subject: [PATCH 431/695] Codefix 37a03b5: the return value of maxdim should always be assigned (#12590) --- src/autoreplace_gui.cpp | 2 +- src/core/geometry_func.hpp | 2 +- src/genworld_gui.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index f6d819d612..e1f4cf174e 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -368,7 +368,7 @@ public: case WID_RV_START_REPLACE: { Dimension d = GetStringBoundingBox(STR_REPLACE_VEHICLES_START); - maxdim(d, GetStringListBoundingBox(_start_replace_dropdown)); + d = maxdim(d, GetStringListBoundingBox(_start_replace_dropdown)); d.width += padding.width; d.height += padding.height; size = maxdim(size, d); diff --git a/src/core/geometry_func.hpp b/src/core/geometry_func.hpp index 175a8a2ba7..58ebd316ab 100644 --- a/src/core/geometry_func.hpp +++ b/src/core/geometry_func.hpp @@ -12,7 +12,7 @@ #include "geometry_type.hpp" -Dimension maxdim(const Dimension &d1, const Dimension &d2); +[[nodiscard]] Dimension maxdim(const Dimension &d1, const Dimension &d2); /** * Check if a rectangle is empty. diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index cd203da979..827223e932 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -660,7 +660,7 @@ struct GenerateLandscapeWindow : public Window { default: return; } - maxdim(d, GetStringListBoundingBox(strs)); + d = maxdim(d, GetStringListBoundingBox(strs)); d.width += padding.width; d.height += padding.height; size = maxdim(size, d); From b852a3f408e9750716b816970a39fe01774f23ff Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 29 Apr 2024 04:40:19 +0000 Subject: [PATCH 432/695] Update: Translations from eints english (us): 3 changes by 2TallTyler korean: 3 changes by telk5093 hungarian: 2 changes by meskobalazs --- src/lang/english_US.txt | 3 +++ src/lang/hungarian.txt | 2 ++ src/lang/korean.txt | 3 +++ 3 files changed, 8 insertions(+) diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 42f5441f94..25082260d7 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1833,6 +1833,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Set the default STR_CONFIG_SETTING_SERVINT_SHIPS :Default maintenance interval for ships: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Set the default maintenance interval for new ships, if no explicit maintenance interval is set for the vehicle ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}Day{P 0 "" s} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}Minute{P 0 "" s} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Disabled diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index ace6c8aa60..f7e80766b8 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -5343,6 +5343,8 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Még nin STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Indíts új játékot {DATE_SHORT} után, vagy használj olyan NewGRF-et, ami tartalmaz megfelelően korai járműveket! STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Nincs városban építhető út-típus +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Saját NewGRF konfiguráció módosítása +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Még nem érhető el városban építhető úttípus # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Nem haladhatja meg a vonat a megállj jelzést... diff --git a/src/lang/korean.txt b/src/lang/korean.txt index d9119e5bed..acbcc3b9b6 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1834,6 +1834,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :항공기에 STR_CONFIG_SETTING_SERVINT_SHIPS :선박에 대한 기본 점검 기준: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :선박에 따로 점검 기간이 설정되어있지 않은 경우에 사용할 기본 점검 기간을 설정합니다. ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}일 +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}분 +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :사용 안 함 From cc6e4768a9fc8179ccce0bf3cad655a15300199c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 29 Apr 2024 17:05:35 +0100 Subject: [PATCH 433/695] Fix: Out-of-order window set up due to deferred window resize. (#12592) Deferred window resize was being applied to the initial window resize event, resulting in some window state (e.g. scroll bar capacity) not being initialised when expected. --- src/window.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/window.cpp b/src/window.cpp index 1df0ccf199..142ba017e8 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1444,7 +1444,7 @@ void Window::FindWindowPlacementAndResize(int def_width, int def_height) if (this->resize.step_width > 1) enlarge_x -= enlarge_x % (int)this->resize.step_width; if (this->resize.step_height > 1) enlarge_y -= enlarge_y % (int)this->resize.step_height; - ResizeWindow(this, enlarge_x, enlarge_y); + ResizeWindow(this, enlarge_x, enlarge_y, true, false); /* ResizeWindow() calls this->OnResize(). */ } else { /* Always call OnResize; that way the scrollbars and matrices get initialized. */ From 4df44fea38c956959fdedd3759e484897180eff6 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 30 Apr 2024 04:40:35 +0000 Subject: [PATCH 434/695] Update: Translations from eints swedish: 3 changes by joeax910 galician: 63 changes by pvillaverde --- src/lang/galician.txt | 107 +++++++++++++++++++++++++----------------- src/lang/swedish.txt | 3 ++ 2 files changed, 66 insertions(+), 44 deletions(-) diff --git a/src/lang/galician.txt b/src/lang/galician.txt index dd2cf47193..03d312d83f 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1055,9 +1055,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Escalar STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Marca esta caixa para escalar os biseles segundo o tamaño da interface STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Usar a fonte tradicional dos sprites -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marca esta opción se prefires usar a fonte tradicional de tamaño fixo dos sprites. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marca esta opción se prefires usar a fonte tradicional de tamaño fixo dos sprites STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Suavizar fontes -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marca esta opción para suavizar as fontes redimensionables. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marca esta opción para suavizar as fontes redimensionables STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1276,7 +1276,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Cartos infinito STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Permite o gasto ilimitado e desactiva a bancarrota das compañías STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Crédito máximo inicial: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Cantidade máxima de cartos que unha compañía pode pedir (sen ter en conta a inflación). Se se configura "Sen prestamo", non haberá cartos dispoñibles a non ser que os proporcione un script de xogo ou a configuración de "cartos infinitos". +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Cantidade máxima de cartos que unha compañía pode pedir (sen ter en conta a inflación). Se se configura "Sen prestamo", non haberá cartos dispoñibles a non ser que os proporcione un script de xogo ou a configuración de "cartos infinitos" STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sen empréstitos. @@ -1360,7 +1360,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Inclinación da STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Inclinación dun cadro en pendente para un vehículo de carretera. Valores máis elevados dificultan ascender unha colina STR_CONFIG_SETTING_FORBID_90_DEG :Prohibir xiros de 90° a trens: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Os xiros de 90 graos ocorren cando unha vía horizontal vai seguida directamente dun tramo vertical no cadro adxancete, facendo que o tren vire 90 graos cando pasa o límite do cadro en vez dos 45 graos habituais noutras combinacións de vías. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Os xiros de 90 graos ocorren cando unha vía horizontal vai seguida directamente dun tramo vertical no cadro adxancete, facendo que o tren vire 90 graos cando pasa o límite do cadro en vez dos 45 graos habituais noutras combinacións de vías STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permitir a unión de estacións non adxacentes {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite engadir partes a unha estación sen que estén en contacto directo coas partes existente facendo Ctrl+Clic ao colocar as partes novas @@ -1472,7 +1472,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Cor inicial da STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Escolle a cor inicial da túa compañía STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Cor secundaria inicial da compañía: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Escoller a cor secundaria de inicio da compañía, se utilizas un NewGRF que o permita. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Escoller a cor secundaria de inicio da compañía, se utilizas un NewGRF que o permita STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Os aeroportos nunca caducan: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Activar esta opción fai que cada tipo de aeroporto siga estando dispoñíbel para sempre dende a súa aparición @@ -1496,22 +1496,22 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Os vehículos n STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Cando se activa, tódolos modelos de vehículos seguen a estar dispoñíbeis para sempre dende a súa aparición STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Cronometraxe: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecciona as unidades de cronometraxe do xogo. Isto non se pode mudar despois.{}{}A experiencia clásica de OpenTTD é basada en calendario, cun ano que consite de 12 meses e cada mes ten 28-31 días.{}{}No tempo baseado no reloxo, a producción de mercadorías e as finanzas baseanse en minutos, sendo o que dura aproximadamente un mes de 30 días no modo de Calendario. Estes agrúpanse en períodos de 12 minutos, equivalente o ano no modo de Calendario.{}{}En ambos modos hai sempre un calendario clásico, que se utiliza para a data de introdución de vehículos, casas e outras infraestruturas. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Selecciona as unidades de cronometraxe do xogo. Isto non se pode mudar despois.{}{}A experiencia clásica de OpenTTD é basada en calendario, cun ano que consite de 12 meses e cada mes ten 28-31 días.{}{}No tempo baseado no reloxo, a producción de mercadorías e as finanzas baseanse en minutos, sendo o que dura aproximadamente un mes de 30 días no modo de Calendario. Estes agrúpanse en períodos de 12 minutos, equivalente o ano no modo de Calendario.{}{}En ambos modos hai sempre un calendario clásico, que se utiliza para a data de introdución de vehículos, casas e outras infraestruturas ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendario STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Reloxo STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutos por ano: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Selecciona o número de minutos dun ano do calendario. Por defecto son 12 minutos. Fíxao en 0 para para conxelar o calendario. Este axuste non afecta a simulación da economía do xogo, e só está dispoñible cando se usa o modo reloxo de cronometraxe. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Selecciona o número de minutos dun ano do calendario. Por defecto son 12 minutos. Fíxao en 0 para para conxelar o calendario. Este axuste non afecta a simulación da economía do xogo, e só está dispoñible cando se usa o modo reloxo de cronometraxe STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (calendario conxelado) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Escala da produción de mercadorías das vilas: {STRING} -STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Escala a produción de mercadorías das vilas nesta porcentaxe. +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Escala a produción de mercadorías das vilas nesta porcentaxe STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Escala da produción industrial de mercadorías: {STRING} -STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Escala a produción de mercadorías das industrias nesta porcentaxe. +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Escala a produción de mercadorías das industrias nesta porcentaxe STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autorenova-los vehículos cando vaian vellos: {STRING} @@ -1542,8 +1542,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Grosor das liñ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Ancho de liña nos gráficos. Unha liña fina lese con máis precisión, unha liña grosa é máis doada de ver e as cores son máis fáciles de distinguir STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Amosar o nome do NewGRF na fiestra de comprar vehículos: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Engade unha liña a fiestra de compra de vehículos, amosando de que NewGRF ven o vehículo. -STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Amosa as cargas que os vehículos poden levar nas fiestras de listas {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Engade unha liña a fiestra de compra de vehículos, amosando de que NewGRF ven o vehículo +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Amosa as cargas que os vehículos poden levar nas fiestras de listas: {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Cando se activa, a carga transportable polo vehículo aparece enriba súa na lista de vehículos STR_CONFIG_SETTING_LANDSCAPE :Paisaxe: {STRING} @@ -1562,13 +1562,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densidade indus STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Establece cantas industrias deben xerarse e que nivel se debe manter durante o xogo STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distancia máxima das refinarías ao borde do mundo: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limita a qué distancia dos bordes do mundo as refinerías e pozos petrolíferos poden construirse. En mapas con illas asegura que estean situadas preto da costa. En mapas maiores de 256 unidades, o valor escálase acorde ao tamaño do mapa. +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limita a qué distancia dos bordes do mundo as refinerías e pozos petrolíferos poden construirse. En mapas con illas asegura que estean situadas preto da costa. En mapas maiores de 256 unidades, o valor escálase acorde ao tamaño do mapa STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Cota de neve: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Escolle a que altitude comeza a nevar en paisaxes subárticas. A neve afecta tamén á xeración industrial e aos requirimentos de crecemento dos pobos. Só se pode modificar no Editor de Escenarios ou se non calcúlase a través da "cobertura de neve". STR_CONFIG_SETTING_SNOW_COVERAGE :Cobertura de neve: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Escolle a cantidade aproximada de neve nas paisaxes subárticas. A neve afecta tamén á xeración industrial e aos requirimentos de crecemento dos pobos. Só se usa durante a xeración do mapa. O terreo costeiro e o nivel do mar nunca ten neve. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Escolle a cantidade aproximada de neve nas paisaxes subárticas. A neve afecta tamén á xeración industrial e aos requirimentos de crecemento dos pobos. Só se usa durante a xeración do mapa. O terreo costeiro e o nivel do mar nunca ten neve STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Cobertura do deserto: {STRING} @@ -1576,7 +1576,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Controla a cant STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Desigualdade do terreo (só TerraGenesis) : {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Escolle a forma e frequencia de montes: As paixases suaves teñen menos montes e máis españñados, mentres que as escarpadas teñen máis e pequenos outeiros. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Escolle a forma e frequencia de montes: As paixases suaves teñen menos montes e máis españñados, mentres que as escarpadas teñen máis e pequenos outeiros ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Moi suave STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Suave @@ -1584,7 +1584,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Escabroso STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Moi escabroso STR_CONFIG_SETTING_VARIETY :Distribución da variedade: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Escolle se o mapa contén áreas montañosas ou chás. Canta máis variedade, maiores diferencias en elevación entre as zonas montañosas e chás. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Escolle se o mapa contén áreas montañosas ou chás. Canta máis variedade, maiores diferencias en elevación entre as zonas montañosas e chás STR_CONFIG_SETTING_RIVER_AMOUNT :Cantidade de ríos: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Escolle cantos ríos xerar @@ -1631,7 +1631,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Verde escuro STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violeta STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Cores superpostas do fluxo de carga: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Fixa o esquema de cor utilizado para a superposición do fluxo de carga. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Fixa o esquema de cor utilizado para a superposición do fluxo de carga ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Verde a vermello(orixinal) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Verde a azul @@ -1752,10 +1752,10 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Mante-las ferra STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Mante-las ferramentas de construción abertas para pontes, túneis, etc. tralo uso STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :orrar automáticamente as sinais durante a construción de ferrocarrís: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Borrar automáticamente as sinais durante a construción de ferrocarrís se as sinais están no medio. Teña en conta que isto pode levar a accidentes de tren. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Borrar automáticamente as sinais durante a construción de ferrocarrís se as sinais están no medio. Teña en conta que isto pode levar a accidentes de tren STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Límite de velocidade do avance rápido: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limite o rápido que vai o xogo cando se activa o avance rápido. 0 = sen límite (tanto como permita o teu equipo). Os valores por debaixo do 100% ralentizan o xogo. O límite superior depende das especificacións do teu ordenador e pode variar dependendo do xogo. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limite o rápido que vai o xogo cando se activa o avance rápido. 0 = sen límite (tanto como permita o teu equipo). Os valores por debaixo do 100% ralentizan o xogo. O límite superior depende das especificacións do teu ordenador e pode variar dependendo do xogo STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% velocidade normal de xogo ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Sen límite (tan rápido como permita o teu equipo) @@ -1834,6 +1834,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Fixa o interval STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalo de mantemento por defecto para navíos: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Fixa o intervalo de mantemento por defecto para navíos novos, o cal se empregará no caso de que non se defina explicitamente un novo intervalo de mantemento para o vehículo ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}Día{P 0 "" s} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}Minuto{P 0 "" s} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Desactivado @@ -1842,7 +1845,7 @@ STR_CONFIG_SETTING_NOSERVICE :Deshabilita-lo STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Cando estea activado, os vehículos non teñen mantemento no caso de que non poidan ter avarías STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Penalización na velocidade de carga dos trens máis longos que a estación: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Cando se habilita, os trens que son demasiados longos para a estación cargaranse máis lentamente que un tren que entra na estación. Este axuste non afecta a búsqueda de rutas. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Cando se habilita, os trens que son demasiados longos para a estación cargaranse máis lentamente que un tren que entra na estación. Este axuste non afecta a búsqueda de rutas STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Activa-los límites de velocidade dos vagóns: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Cando estea activado, usar tamén os límites de velocidade dos vagóns para decidir a máxima velocidade do tren @@ -1907,13 +1910,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Ano no que os a STR_CONFIG_SETTING_STARTING_YEAR :Data de comezo: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Ano da puntuación final: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :O ano no que remate o xogo a efectos de puntiacións. Ao final deste ano, gárdase cal é a compañía con máis puntuación e amosase a pantalla de puntuacións, pero os xogadores poden seguir xogando despois disto.{}Se é anterior a data de inicio, a pantalla de puntuacións nunca se amosa. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :O ano no que remate o xogo a efectos de puntiacións. Ao final deste ano, gárdase cal é a compañía con máis puntuación e amosase a pantalla de puntuacións, pero os xogadores poden seguir xogando despois disto.{}Se é anterior a data de inicio, a pantalla de puntuacións nunca se amosa STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nunca STR_CONFIG_SETTING_ECONOMY_TYPE :Tipo de economía: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :A economía suave fai cambios de produción máis a miúdo, e en pequenos pasos. As economías conxeladas paran os cambios de produción e as industrias pechan. Esta configuración non ten efecto se non se provén industrias por un NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :A economía suave fai cambios de produción máis a miúdo, e en pequenos pasos. As economías conxeladas paran os cambios de produción e as industrias pechan. Esta configuración non ten efecto se non se provén industrias por un NewGRF ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Orixinal STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Suave @@ -1968,7 +1971,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permitido STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Permitido, patrón de estradas personalizado STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Xeración de mercadorías da vila: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Cantidade de mercadorías producidas nas casas da vila, segundo a poboación total da mesma.{}Crecemento cadrático: Unha vila o dobre de grande produce catro veces máis pasaxeiros.{}Linear growth: Unha vila o dobre de grande produce dúas veces máis pasaxeiros. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Cantidade de mercadorías producidas nas casas da vila, segundo a poboación total da mesma.{}Crecemento cadrático: Unha vila o dobre de grande produce catro veces máis pasaxeiros.{}Linear growth: Unha vila o dobre de grande produce dúas veces máis pasaxeiros ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Cadrático (orixinal) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineal @@ -2009,7 +2012,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Resolución máis alta a usar nos sprites: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limite a resolución máxima a usar nos sprites. Limitar a resolución dos sprites impide que se usen os gráficos de alta resolución incluso cando están dispoñibles. Isto axuda o xogo a manter unha apariencia unificada cando se usan distintos arquivos GRF con e sen gráficos de alta resolución. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limite a resolución máxima a usar nos sprites. Limitar a resolución dos sprites impide que se usen os gráficos de alta resolución incluso cando están dispoñibles. Isto axuda o xogo a manter unha apariencia unificada cando se usan distintos arquivos GRF con e sen gráficos de alta resolución ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2033,33 +2036,33 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador i STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Relación entre o tamaño medio das cidades e o dos pobos ao inicio da partida STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Actualizar o grafo de distribución cada {STRING} -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo entre recálculos sucesivos do grafo de ligazóns. Cada recálculo calcula os plans para un compoñente do grafo. Iso significa que un valor X para esta configuración non significa que o grafo completo sexa actualizado cada X segundos. Só algúns compoñentes o serán. Canto máis curto sexa o tempo establecido, máis tempo de CPU será necesario para calculalo. Canto máis longo sexa o tempo establecido, máis tempo levará ata que a distribución de carga comece a percorrer novas rutas. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo entre recálculos sucesivos do grafo de ligazóns. Cada recálculo calcula os plans para un compoñente do grafo. Iso significa que un valor X para esta configuración non significa que o grafo completo sexa actualizado cada X segundos. Só algúns compoñentes o serán. Canto máis curto sexa o tempo establecido, máis tempo de CPU será necesario para calculalo. Canto máis longo sexa o tempo establecido, máis tempo levará ata que a distribución de carga comece a percorrer novas rutas STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Toma {STRING} para o recálculo do gráfico de distribución. -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo necesario para cada recalculación dun compoñente do grafo de ligazóns. Cando se inicia unha recalculación, abrese un fío que se pode executar durante este número de segundos. Canto máis curto o establezas, máis probable é que o fío non remate cando se supón que debe facelo. Entón, o xogo detense ata que o fío remata («lag»). Canto máis longo o estabelezas, máis tempo levará actualizar a distribución cando cambien as rutas. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo necesario para cada recalculación dun compoñente do grafo de ligazóns. Cando se inicia unha recalculación, abrese un fío que se pode executar durante este número de segundos. Canto máis curto o establezas, máis probable é que o fío non remate cando se supón que debe facelo. Entón, o xogo detense ata que o fío remata («lag»). Canto máis longo o estabelezas, máis tempo levará actualizar a distribución cando cambien as rutas STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribución para pasaxeiros: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" significa que máis ou menos o mesmo número de pasaxeiros irán dende a estación A cada a estación B e tamén da B cara a A. "Asimétrico" significa que calquera número de pasaxeiros pode ir en calquera dirección. "manual" significa que non haberá distribución automática para os pasaxeiros. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" significa que máis ou menos o mesmo número de pasaxeiros irán dende a estación A cada a estación B e tamén da B cara a A. "Asimétrico" significa que calquera número de pasaxeiros pode ir en calquera dirección. "manual" significa que non haberá distribución automática para os pasaxeiros STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modo de distribución para correo: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simétrico" significa que máis ou menos a mesma cantidade de correo vai ser enviada da estación A cara a estación B como da estación B cara a A. "Asimétrico" signigica que calquera cantidade de correo pode ser enviado en calquera dirección. "Manual" significa que non hai distribución automática para o correo. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simétrico" significa que máis ou menos a mesma cantidade de correo vai ser enviada da estación A cara a estación B como da estación B cara a A. "Asimétrico" signigica que calquera cantidade de correo pode ser enviado en calquera dirección. "Manual" significa que non hai distribución automática para o correo STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Modo de disitribución para o tipo de mercadoría BLINDADO: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A clase de mercadoría BLINDADA contén obxectos de valor nos clima morno, diamantes no subtropical ou ouro no clima subártico. Os NewGRFs poden cambiar isto. "Simétrico" significa que máis ou menos a mesma cantidade de esta mercadoría será enviadas dende a estación A cara a estación B así como da estación B para a A. "Asimétrico" significa que calquera cantidade de esta mercadoría pode ser enviada en calquera dirección. "manual" significa que non haberá distribución automática para esta mercadoría. Recoméndase elixir asimétrico ou manual cando se xoguen mapas subárticos ou subtropicais, xa que os bancos só reciben carga nestos climas. Para os climas mornos podes escoller simétrico xa que os bancos enviarán carga de volta o banco orixinal. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A clase de mercadoría BLINDADA contén obxectos de valor nos clima morno, diamantes no subtropical ou ouro no clima subártico. Os NewGRFs poden cambiar isto. "Simétrico" significa que máis ou menos a mesma cantidade de esta mercadoría será enviadas dende a estación A cara a estación B así como da estación B para a A. "Asimétrico" significa que calquera cantidade de esta mercadoría pode ser enviada en calquera dirección. "manual" significa que non haberá distribución automática para esta mercadoría. Recoméndase elixir asimétrico ou manual cando se xoguen mapas subárticos ou subtropicais, xa que os bancos só reciben carga nestos climas. Para os climas mornos podes escoller simétrico xa que os bancos enviarán carga de volta o banco orixinal STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Xeito de distribución para outros tipos de mercadoría: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asimétrico" significa que calquera cantidade de mercadorías pode ser enviada en calquera dirección. "Manual" significa que non haberá distribución automática para estas mercadorías. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asimétrico" significa que calquera cantidade de mercadorías pode ser enviada en calquera dirección. "Manual" significa que non haberá distribución automática para estas mercadorías ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimétrica STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simétrica STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Precisión da distribución: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Canto máis alto sexa o valor, máis tempo de CPU levará o cálculo de distribución. Se leva demasiado tempo podes experimentar retraso. Se sen embargo o fixas nun valor baixo, a distribución será imprecisa, e pode que a carga non sexa enviada aos destinos que ti queres. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Canto máis alto sexa o valor, máis tempo de CPU levará o cálculo de distribución. Se leva demasiado tempo podes experimentar retraso. Se sen embargo o fixas nun valor baixo, a distribución será imprecisa, e pode que a carga non sexa enviada aos destinos que ti queres STR_CONFIG_SETTING_DEMAND_DISTANCE :Efecto da distancia na demanda: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Se o fixas nunha cantidade maior que 0, a distancia entre a estación de orixe A dalgunha carga e o posíbel destino B influirá na cantidade de carga enviada de A a B. Canto máis lonxe estea B de A, menos carga será enviada. Canto máis alto sexa o valor, menos carga será enviada a estacións lonxanas e máis a estacións cercanas. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Se o fixas nunha cantidade maior que 0, a distancia entre a estación de orixe A dalgunha carga e o posíbel destino B influirá na cantidade de carga enviada de A a B. Canto máis lonxe estea B de A, menos carga será enviada. Canto máis alto sexa o valor, menos carga será enviada a estacións lonxanas e máis a estacións cercanas STR_CONFIG_SETTING_DEMAND_SIZE :Cantidade de carga a retornar en modo simétrico: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Fixar esta opción a menos do 100% fai que a distribución simétrica se comporte máis coma a asimétrica. Enviarase menos cantidade de carga de volta á forza se unha certa cantidade se envía a unha estación. Se o fixas no 0% a distribución simétrica compórtase coma a asimétrica. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Fixar esta opción a menos do 100% fai que a distribución simétrica se comporte máis coma a asimétrica. Enviarase menos cantidade de carga de volta á forza se unha certa cantidade se envía a unha estación. Se o fixas no 0% a distribución simétrica compórtase coma a asimétrica STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturación de rutas curtas antes de empregar rutas con capacidade: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frecuentemente hai múltiples rutas posíbeis entre dúas estacións dadas. En primero lugar intentarase satura-la ruta máis curta, para posteriormente satura-la segunda máis curta e así sucesivamente. A saturación está determinada por unha estimación de capacidade e uso planificado. Unha vez saturadas tódalas rutas, se aínda queda demanda, sobrecargaranse as rutas comezando por aquelas de maior capacidade. A maior parte das veces, o algoritmo non estimará a capacidade con precisión. Esta opción permite especificar ata que porcentaxe de saturación pode ter unha ruta curta na primeira volta do algoritmo antes de escolle-la seguinte máis curta. Fíxao en menos do 100% para evitar estacións sobrecargadas no caso de que se sobreestime a capacidade. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frecuentemente hai múltiples rutas posíbeis entre dúas estacións dadas. En primero lugar intentarase satura-la ruta máis curta, para posteriormente satura-la segunda máis curta e así sucesivamente. A saturación está determinada por unha estimación de capacidade e uso planificado. Unha vez saturadas tódalas rutas, se aínda queda demanda, sobrecargaranse as rutas comezando por aquelas de maior capacidade. A maior parte das veces, o algoritmo non estimará a capacidade con precisión. Esta opción permite especificar ata que porcentaxe de saturación pode ter unha ruta curta na primeira volta do algoritmo antes de escolle-la seguinte máis curta. Fíxao en menos do 100% para evitar estacións sobrecargadas no caso de que se sobreestime a capacidade STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unidades de velocidade (terra): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Unidade de velocidade (náutica): {STRING} @@ -2576,6 +2579,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Non se e STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Non se estableceu o nome do teu servidor. O nome pode establecerse na parte superior da fiestra de multixogador. STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}A revisión deste cliente non é igual ca revisión do servidor STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Contrasinal incorrecto +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Non estás na lista de clientes permitidos STR_NETWORK_ERROR_SERVER_FULL :{WHITE}O servidor está cheo STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Non se che permite o acceso a este servidor STR_NETWORK_ERROR_KICKED :{WHITE}Chimpáronte da partida @@ -2603,6 +2607,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :recibiuse un pa STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :revisión errónea STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :o nome xa está en uso STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :contrasinal incorrecto +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :non na lista permitida STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :compañía errónea nun DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :chimpado polo servidor STR_NETWORK_ERROR_CLIENT_CHEATER :intentaba usar unha trampa @@ -2981,11 +2986,11 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Colocar STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Árbores aleatorias STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plantar árbores aleatoriamente sobre a paisaxe STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Planta árbores individuais arrastrando sobre a paisaxe. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Planta árbores individuais arrastrando sobre a paisaxe STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Arboreda -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Planta pequenos bosques arrastrando sobre a paisaxe. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Planta pequenos bosques arrastrando sobre a paisaxe STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Bosque -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantar bosques arrastrando sobre a paisaxe. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantar bosques arrastrando sobre a paisaxe # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Xeración de terreo @@ -3200,11 +3205,11 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Imaxes por segundo STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Velocidade de simulación: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Número de ticks do xogo simulados por segundo. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Número de ticks do xogo simulados por segundo STR_FRAMERATE_RATE_BLITTER :{BLACK}Imaxes por segundo: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Número de frames renderizados por segundo. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Número de frames renderizados por segundo STR_FRAMERATE_SPEED_FACTOR :{BLACK}Factor de velocidade do xogo actual: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Como de rápido está a correr o xogo, comparado coa velocidade esperada a unha velocidade de simulación normal. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Como de rápido está a correr o xogo, comparado coa velocidade esperada a unha velocidade de simulación normal STR_FRAMERATE_CURRENT :{WHITE}Actual STR_FRAMERATE_AVERAGE :{WHITE}Media STR_FRAMERATE_MEMORYUSE :{WHITE}Memoria @@ -3393,8 +3398,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Estás STR_GENERATION_PROGRESS :{WHITE}{NUM}% completado STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Xeración do mundo +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Xeración da paisaxe STR_GENERATION_RIVER_GENERATION :{BLACK}Xeración de ríos STR_GENERATION_CLEARING_TILES :{BLACK}Xeración de áreas rochosas e escarpadas +STR_GENERATION_TOWN_GENERATION :{BLACK}Xeración de vilas +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Xeración da industria STR_GENERATION_OBJECT_GENERATION :{BLACK}Xeración de obxectos STR_GENERATION_TREE_GENERATION :{BLACK}Xeración de árbores STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurando partida @@ -3488,6 +3496,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de estrada STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parámetro de variable NewGRF 60+x (hexadecimal) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Aliñación de sprite: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Aliñación de sprite: Action 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Aliñación de sprite: Action 0x5, type {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Seguinte sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Ir ao sprite seguinte, ignorando pseudosprites, sprites recoloreados e sprites de fonte, e volvendo a empezar ao chegar á fin STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ir a sprite @@ -3496,6 +3507,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Sprite a STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Ir ao sprite anterior, ignorando pseudosprites, sprites recoloreados e sprites de fonte, e volvendo a empezar ao chegar ao inicio STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representación do sprite seleccionado. A aliñación ignórase ao debuxar este sprite STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move-lo sprite, cambiando os valores de X e Y. Ctrl+Click para movelo sprite oito unidades de golpe. +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Desfase centrado @@ -3732,7 +3744,7 @@ STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Historia STR_STORY_BOOK_SPECTATOR :Álbum global STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Páxina {NUM} -STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Vai a unha páxina específica seleccionandoa nesta lista despregable. +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Vai a unha páxina específica seleccionandoa nesta lista despregable STR_STORY_BOOK_PREV_PAGE :{BLACK}Anterior STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Ir á páxina anterior STR_STORY_BOOK_NEXT_PAGE :{BLACK}Seguinte @@ -4032,7 +4044,7 @@ STR_GROUP_CREATE_TOOLTIP :{BLACK}Pincha p STR_GROUP_DELETE_TOOLTIP :{BLACK}Borrar o grupo seleccionado STR_GROUP_RENAME_TOOLTIP :{BLACK}Renomear o grupo seleccionado STR_GROUP_LIVERY_TOOLTIP :{BLACK}Mudar o deseño do grupo seleccionado -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Pincha para protexer a este grupo da autosubstitución global. Ctrl+Click para protexer tamén os subgrupos. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Pincha para protexer a este grupo da autosubstitución global. Ctrl+Click para protexer tamén os subgrupos STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Borrar Grupo STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Seguro que queres borrar este grupo e calquera descendente? @@ -4448,10 +4460,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Capacida STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Créditos de transferencia: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Intervalo de servizo: {LTBLUE}{COMMA}{NBSP}días{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Intervalo de servizo: {LTBLUE}{COMMA}{NBSP}minutos{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Intervalo de servizo: {LTBLUE}{COMMA}{NBSP}minuto{P "" s}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Intervalo de servizo: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Último servizo: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Último servizo: {LTBLUE}fai {NUM} minutos +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Último servizo: {LTBLUE}Fai {NUM} minuto{P "" s} STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Incrementar o intervalo de servizo en 10 días. Ctrl+Click para incrementar o intervalo de servizo en 5 días. STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Incrementar o intervalo de servizo en 5 minutos. Ctrl+Click para incrementar o intervalo de servizo en 1 minuto STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Incrementar o intervalo de servizo nun 10%. Ctrl+Click para incrementar o intervalo de servizo en 5%. @@ -4898,7 +4910,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Ingreso STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravación en progreso,{}por favor agarda ata que remate! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autogravado fallido STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}No se pode lee-la unidade +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Fallou o gardado da partida... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Non se pode borra-lo arquivo +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Fallou a carga da partida... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erro interno: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Partida gravada corrupta - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :A partida gravouse cunha versión máis nova do xogo @@ -4992,7 +5006,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Non se p STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Non se pode construí-la sede # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Non se poden construír cidades +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Non se poden construír cidades... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Non se pode renomear a cidade... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Non se pode construír a cidade aquí... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Non se pode expandi-la vila @@ -5280,6 +5294,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Cambia a STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Aínda non hai vehículos dispoñíbeis STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Comezar unha partida nova a partires de {DATE_SHORT} ou empregar un NewGRF que proporcione vehículos antigos +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Non hai estradas dispoñibles que as vilas podan construír +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Cambia a túa configuración NewGRF +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Aínda non hai estradas dispoñibles que as vilas podan construír +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Comeza unha nova partida despois do {DATE_SHORT} ou utiliza NewGRF que engadan tipos de estradas que as vilan podan construír antes # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Non se pode facer que o tren rebase un sinal en perigo... @@ -5831,6 +5849,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index efcf589405..06793fe8fb 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1833,6 +1833,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Välj vilket se STR_CONFIG_SETTING_SERVINT_SHIPS :Normalt serviceintervall för skepp: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Välj vilket serviceintervall som normalt sett ska användas för nya skepp, om inget annat serviceintervall uttryckligen anges ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}dag{P 0 "" ar} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}minut{P 0 "" er} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Inaktiverat From 96d82b4363eee042cb17d8deceebf632c2d802fa Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 1 May 2024 04:41:08 +0000 Subject: [PATCH 435/695] Update: Translations from eints chinese (simplified): 1 change by WenSimEHRP greek: 52 changes by KyriakosMich german: 3 changes by Wuzzy2 basque: 36 changes by Porrumentzio danish: 3 changes by bscargo --- src/lang/basque.txt | 70 +++++++++++----------- src/lang/danish.txt | 3 + src/lang/german.txt | 3 + src/lang/greek.txt | 101 ++++++++++++++++---------------- src/lang/simplified_chinese.txt | 2 +- 5 files changed, 95 insertions(+), 84 deletions(-) diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 0bdb78c006..c40a398ae2 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -93,7 +93,7 @@ STR_CARGO_SINGULAR_FIZZY_DRINK :Edari Burbuilat # Quantity of cargo STR_QUANTITY_NOTHING : -STR_QUANTITY_PASSENGERS :{COMMA}{NBSP}bidaiari{P "" ak} +STR_QUANTITY_PASSENGERS :{COMMA}{NBSP}bidaiari STR_QUANTITY_COAL :{WEIGHT_LONG} ikatz STR_QUANTITY_MAIL :{COMMA}{NBSP}posta zaku STR_QUANTITY_OIL :{VOLUME_LONG} petroleo @@ -162,23 +162,23 @@ STR_ABBREV_FIZZY_DRINKS :EB STR_ABBREV_ALL :DEN # 'Mode' of transport for cargoes -STR_PASSENGERS :{COMMA}{NBSP}bidaiari{P "" ak} -STR_BAGS :{COMMA}{NBSP}zaku{P "" ak} -STR_TONS :{COMMA}{NBSP}tona{P "" k} -STR_LITERS :{COMMA}{NBSP}litro{P "" ak} -STR_ITEMS :{COMMA}{NBSP}objektu{P "" ak} -STR_CRATES :{COMMA}{NBSP}kaxa{P "" k} +STR_PASSENGERS :{COMMA}{NBSP}bidaiari +STR_BAGS :{COMMA}{NBSP}zaku +STR_TONS :{COMMA}{NBSP}tona +STR_LITERS :{COMMA}{NBSP}litro +STR_ITEMS :{COMMA}{NBSP}objektu +STR_CRATES :{COMMA}{NBSP}kaxa STR_COLOUR_DEFAULT :Lehenetsia ###length 17 -STR_COLOUR_DARK_BLUE :Urdin Iluna -STR_COLOUR_PALE_GREEN :Berde Zurbila +STR_COLOUR_DARK_BLUE :Urdin iluna +STR_COLOUR_PALE_GREEN :Berde zurbila STR_COLOUR_PINK :Larrosa STR_COLOUR_YELLOW :Horia STR_COLOUR_RED :Gorria -STR_COLOUR_LIGHT_BLUE :Urdin Argia +STR_COLOUR_LIGHT_BLUE :Urdin argia STR_COLOUR_GREEN :Berdea -STR_COLOUR_DARK_GREEN :Berde Iluna +STR_COLOUR_DARK_GREEN :Berde iluna STR_COLOUR_BLUE :Urdina STR_COLOUR_CREAM :Krema STR_COLOUR_MAUVE :Malba @@ -205,16 +205,16 @@ STR_UNITS_WEIGHT_SHORT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_WEIGHT_SHORT_METRIC :{DECIMAL}{NBSP}t STR_UNITS_WEIGHT_SHORT_SI :{DECIMAL}{NBSP}kg -STR_UNITS_WEIGHT_LONG_IMPERIAL :{DECIMAL}{NBSP}tona{P "" k} -STR_UNITS_WEIGHT_LONG_METRIC :{DECIMAL}{NBSP}tona{P "" k} +STR_UNITS_WEIGHT_LONG_IMPERIAL :{DECIMAL}{NBSP}tona +STR_UNITS_WEIGHT_LONG_METRIC :{DECIMAL}{NBSP}tona STR_UNITS_WEIGHT_LONG_SI :{DECIMAL}{NBSP}kg STR_UNITS_VOLUME_SHORT_IMPERIAL :{DECIMAL}{NBSP}gal STR_UNITS_VOLUME_SHORT_METRIC :{DECIMAL}{NBSP}l STR_UNITS_VOLUME_SHORT_SI :{DECIMAL}{NBSP}m³ -STR_UNITS_VOLUME_LONG_IMPERIAL :{DECIMAL}{NBSP}galoi{P "" ak} -STR_UNITS_VOLUME_LONG_METRIC :{DECIMAL}{NBSP}litro{P "" ak} +STR_UNITS_VOLUME_LONG_IMPERIAL :{DECIMAL}{NBSP}galoi +STR_UNITS_VOLUME_LONG_METRIC :{DECIMAL}{NBSP}litro STR_UNITS_VOLUME_LONG_SI :{DECIMAL}{NBSP}m³ STR_UNITS_FORCE_IMPERIAL :{DECIMAL}{NBSP}lbf @@ -230,9 +230,9 @@ STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP} # Common window strings -STR_LIST_FILTER_TITLE :{BLACK}Lokarri iragazkia: -STR_LIST_FILTER_OSKTITLE :{BLACK}Sartu lokarri iragazkia -STR_LIST_FILTER_TOOLTIP :{BLACK}Sartu hitz bat iragazkian zerrendan aurkitzeko +STR_LIST_FILTER_TITLE :{BLACK}Iragazi: +STR_LIST_FILTER_OSKTITLE :{BLACK}Idatzi hitzen bat zerrenda iragazteko +STR_LIST_FILTER_TOOLTIP :{BLACK}Idatzi hitzen bat zerrenda iragazteko STR_TOOLTIP_GROUP_ORDER :{BLACK}Aukeratu taldekatzeko ordena STR_TOOLTIP_SORT_ORDER :{BLACK}Hautatu agertze ordena (deszendientea/aszendientea) @@ -240,7 +240,7 @@ STR_TOOLTIP_SORT_CRITERIA :{BLACK}Aukeratu STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Aukeratu iragazki irizpideak STR_BUTTON_SORT_BY :{BLACK}Ordenatu -STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Lehioa itxi +STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Itxi leihoa STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Leiho izena - Arrastatu hau leihoa mugitzeko STR_TOOLTIP_SHADE :{BLACK}Itzal leihoa - titulu barra bakarrik ikusten da STR_TOOLTIP_DEBUG :{BLACK}NewGRF garbiketa informazioa ikusi @@ -253,14 +253,14 @@ STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Eraikina # Show engines button ###length VEHICLE_TYPES -STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN :{BLACK}Ezkutuak erakutsi -STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE :{BLACK}Ezkutuak erakutsi -STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP :{BLACK}Ezkutuak erakutsi -STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT :{BLACK}Ezkutuak erakutsi +STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN :{BLACK}Erakutsi ezkutukoak +STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE :{BLACK}Erakutsi ezkutukoak +STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP :{BLACK}Erakutsi ezkutukoak +STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT :{BLACK}Erakutsi ezkutukoak ###length VEHICLE_TYPES -STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP :{BLACK}Botoi hau gaituz, ezkutuak dauden trenak erakusten dira -STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP_TOOLTIP :{BLACK}Botoi hau gaituz, ezkutuko itsasontziak ere erakusten dira +STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP :{BLACK}Botoi hau sakatuz, ezkutuko trenak erakusten dira +STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP_TOOLTIP :{BLACK}Botoi hau sakatuz, ezkutuko itsasontziak ere erakusten dira # Query window STR_BUTTON_DEFAULT :{BLACK}Lehenetsia @@ -275,7 +275,7 @@ STR_OSK_KEYBOARD_LAYOUT_CAPS :ª!"·$%&/()=? STR_MEASURE_LENGTH :{BLACK}Luzera: {NUM} STR_MEASURE_AREA :{BLACK}Area: {NUM} x {NUM} STR_MEASURE_LENGTH_HEIGHTDIFF :{BLACK}Luzera: {NUM}{}Garaiera diferentzia: {HEIGHT} -STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Area: {NUM} x {NUM}{}Goratasun diferentzia: {HEIGHT} +STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Area: {NUM} x {NUM}{}Garaiera diferentzia: {HEIGHT} # These are used in buttons @@ -321,11 +321,11 @@ STR_SORT_BY_RATING :Balorazioa # Tooltips for the main toolbar ###length 31 -STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Jokoa pausatu -STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Jokoa bizkortu +STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausatu jokoa +STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Bizkortu jokoa STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Ezarpenak -STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Jokoa gorde, joko honetatik irten, jokotik irten -STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Erakutsi mapa, ikuspegi extra edo kartelen zerrenda +STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Gorde, kargatu edo utzi jokoa, irten programatik +STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Mapa, ikuspegi gehigarria, zama-mugimenduak edo kartelen zerrenda ikusi STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Erakutsi herri zerrenda STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Subsidioak erakutsi STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Erakutsi konpainien geltokien zerrenda @@ -395,7 +395,7 @@ STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Geltoki errotul # File menu STR_FILE_MENU_SAVE_GAME :Jokoa gorde -STR_FILE_MENU_LOAD_GAME :Jokoa kargatu +STR_FILE_MENU_LOAD_GAME :Kargatu joko bat STR_FILE_MENU_QUIT_GAME :Jokoa utzi STR_FILE_MENU_EXIT :Irten @@ -1784,8 +1784,8 @@ STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Memoriaz # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} -STR_INTRO_NEW_GAME :{BLACK}Joko Berria -STR_INTRO_LOAD_GAME :{BLACK}Jokoa Kargatu +STR_INTRO_NEW_GAME :{BLACK}Joko berria +STR_INTRO_LOAD_GAME :{BLACK}Kargatu joko bat STR_INTRO_PLAY_SCENARIO :{BLACK}Eszenarioa Jokatu STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Garaiera mapa jokatu STR_INTRO_SCENARIO_EDITOR :{BLACK}Eszenario Editorea @@ -1796,6 +1796,7 @@ STR_INTRO_HIGHSCORE :{BLACK}Puntuazi STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Ezarpenak STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF-ren Ezarpenak STR_INTRO_ONLINE_CONTENT :{BLACK}Edukiak Online Kontsultatu +STR_INTRO_AI_SETTINGS :{BLACK}AAren ezarpenak STR_INTRO_QUIT :{BLACK}Irten STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Joko berria hasi. Krtl+klik mapa konfigurazioa desgaitzen du @@ -3293,6 +3294,7 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Ibilgailu guzti STR_GROUP_RENAME_CAPTION :{BLACK}Taldea berrizendatu +STR_GROUP_PROFIT_THIS_YEAR :Aurtengo irabaziak: # Build vehicle window ###length 4 @@ -3910,7 +3912,7 @@ STR_DATE_YEAR_TOOLTIP :{BLACK}Urtea au STR_AI_DEBUG :{WHITE}IA/Joko Script Garbitzailea STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM}) STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Script-aren izena -STR_AI_DEBUG_SETTINGS :{BLACK}IA-ren Ezarpenak +STR_AI_DEBUG_SETTINGS :{BLACK}AAren ezarpenak STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}IA-ren hautaketak aldatu STR_AI_DEBUG_RELOAD :{BLACK}IA birkargatu STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}IA kendu, script-a birkargatu, eta IA berrabiarazi diff --git a/src/lang/danish.txt b/src/lang/danish.txt index ddcf869978..e0f997da92 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1833,6 +1833,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Sæt serviceint STR_CONFIG_SETTING_SERVINT_SHIPS :Standard serviceinterval for skibe: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Sæt serviceintervallets standardværdi for nye skibe. ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}Dag{P 0 "" e} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}Minut{P 0 "" er} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Deaktiveret diff --git a/src/lang/german.txt b/src/lang/german.txt index e408441918..f35922103e 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -3395,8 +3395,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Soll di STR_GENERATION_PROGRESS :{WHITE}{NUM}% abgeschlossen STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Spielfeld wird erzeugt +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landschaftserzeugung STR_GENERATION_RIVER_GENERATION :{BLACK}Flussgenerierung STR_GENERATION_CLEARING_TILES :{BLACK}Raue, felsige Landschaft wird erzeugt +STR_GENERATION_TOWN_GENERATION :{BLACK}Stadterzeugung +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Industrieerzeugung STR_GENERATION_OBJECT_GENERATION :{BLACK}Unbewegliche Objekte werden erzeugt STR_GENERATION_TREE_GENERATION :{BLACK}Bäume werden erzeugt STR_GENERATION_SETTINGUP_GAME :{BLACK}Spiel wird vorbereitet diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 75ec914d7f..6cb19b60c2 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -228,7 +228,7 @@ STR_BAGS :{COMMA}{NBSP}σ STR_TONS :{COMMA}{NBSP}τόνο{P ς οι} STR_LITERS :{COMMA}{NBSP}λίτρ{P ο α} STR_ITEMS :{COMMA}{NBSP}αντικείμεν{P ο α} -STR_CRATES :{COMMA}{NBSP}κουτ{P ί ιά} +STR_CRATES :{COMMA}{NBSP}κιβώτι{P ο α} STR_COLOUR_DEFAULT :Προεπιλογή ###length 17 @@ -346,7 +346,7 @@ STR_TOOLTIP_SHADE :{BLACK}Σκία STR_TOOLTIP_DEBUG :{BLACK}Εμφάνιση πληροφοριών αποσφαλμάτωσης για NewGRF STR_TOOLTIP_DEFSIZE :{BLACK}Κλιμακώνει το παράθυρο στο προκαθορισμένο μέγεθος. Με Ctrl+Κλικ αποθηκεύεται το τρέχον μέγεθος ως προκαθορισμένο STR_TOOLTIP_STICKY :{BLACK}Σημειώστε αυτό το παραθύρο ωστέ να μην κλείνει από το πλήκτρο «Κλείσιμο Όλων των Παραθύρων». Πατήστε Ctrl+Κλικ για να αποθηκεύσετε την κατάσταση απο επιλογή -STR_TOOLTIP_RESIZE :{BLACK}Κάντε κλίκ και σύρετε για να αλλάξετε το μέγεθος του παραθύρου +STR_TOOLTIP_RESIZE :{BLACK}Πατήστε και σύρετε για να αλλάξετε το μέγεθος του παραθύρου STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Εναλλαγή μεγάλου/μικρού παραθύρου STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Μπάρα Κύλισης - μετακινεί την λίστα πάνω/κάτω STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Μπάρα κίνησης - κινεί τη λίστα αριστερά/δεξιά @@ -590,7 +590,7 @@ STR_ABOUT_MENU_HELP :Βοήθεια STR_ABOUT_MENU_TOGGLE_CONSOLE :Εναλλαγή κονσόλας STR_ABOUT_MENU_AI_DEBUG :Αποσφαλμάτωση AI και δέσμης ενεργειών παιχνιδιού STR_ABOUT_MENU_SCREENSHOT :Στιγμιότυπο οθόνης -STR_ABOUT_MENU_SHOW_FRAMERATE :Εμφάνιση ρυθμού καρέ +STR_ABOUT_MENU_SHOW_FRAMERATE :Ρυθμός εμφάνισης καρέ STR_ABOUT_MENU_ABOUT_OPENTTD :Σχετικά με το 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Ευθυγραμμιστής στοιχεών STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Εναλλαγή πλαισίου οριοθέτησης @@ -884,7 +884,7 @@ STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_SNOW :{TINY_FONT}{BLACK}Χιόνι STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Εναλλαγή ονομάτων πόλεων στον χάρτη -STR_SMALLMAP_CENTER :{BLACK}Κεντράρισμα του μικρού χάρτη στη τρέχουσα θέση +STR_SMALLMAP_CENTER :{BLACK}Κεντράρισμα του μικρού χάρτη στην τρέχουσα θέση STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STRING} ({NUM}) STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} @@ -1135,7 +1135,7 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Η ρύ STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Τσεκάρετε αυτό το κουτί για να ενεργοποιήσετε το v-sync στην οθόνη. Η αλλαγή αυτή θα εφαρμοστεί μετά από επανεκκίνηση του παιχνιδιού. Λειτουργεί μόνο με ενεργοποιημένη την επιτάχυνση υλικού -STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Τρέχον οδηγός: {STRING} +STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Τρέχων οδηγός: {STRING} STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Μέγεθος διεπαφής STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Σύρετε το κουμπί για να ορίσετε το μέγεθος του περιβάλλοντος διεπαφής. Ctrl+Σύρσιμο για συνεχή προσαρμογή @@ -1200,15 +1200,15 @@ STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Άκυρη STR_BASESET_STATUS :{STRING} {RED}({NUM} λείπει/κατεστραμμένο αρχεί{P ο α}) STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Αποτυχία ανάκτησης λίστας υποστηριζόμενων αναλύσεων -STR_ERROR_FULLSCREEN_FAILED :{WHITE}Θέση του παιχνιδιού σε λειτουργία πλήρης οθόνης απέτυχε +STR_ERROR_FULLSCREEN_FAILED :{WHITE}Απέτυχε η λειτουργία πλήρους οθόνης # Custom currency window STR_CURRENCY_WINDOW :{WHITE}Προσαρμοσμένο νόμισμα STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Ισοτιμία: {ORANGE}{CURRENCY_LONG} = £ {COMMA} -STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Μείωση του ποσού της ισοτιμίας σας για μία λίρα (£) -STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Αυξήστε το ποσό της ισοτιμίας σας για μία Λίρα (£) -STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Ρυθμίστε τη συναλλαγματική ισοτιμία του νομίσματος για μια λίρα (£) +STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Μείωση του ποσού του νομίσματός σας για μία λίρα (£) +STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Αύξηση του ποσού του νομίσματός σας για μία Λίρα (£) +STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Ορίστε τη συναλλαγματική ισοτιμία του νομίσματος σας για μια λίρα (£) STR_CURRENCY_SEPARATOR :{LTBLUE}Διαχωριστής: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Ορίστε το διαχωριστικό για το νόμισμά σας @@ -1225,7 +1225,7 @@ STR_CURRENCY_DECREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Να γ STR_CURRENCY_INCREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Να γίνει η μετάβαση σε Ευρώ αργότερα STR_CURRENCY_PREVIEW :{LTBLUE}Προεπισκόπιση: {ORANGE}{CURRENCY_LONG} -STR_CURRENCY_CUSTOM_CURRENCY_PREVIEW_TOOLTIP :{BLACK}10000 λίρες (£) στο νόμισμά σας +STR_CURRENCY_CUSTOM_CURRENCY_PREVIEW_TOOLTIP :{BLACK}10.000 λίρες (£) στο νόμισμά σας STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Αλλαγή παραμέτρων προσαρμοσμένου νομίσματος STR_NONE :Κανένα @@ -1298,7 +1298,7 @@ STR_CITY_APPROVAL_TOLERANT :Υπομονε STR_CITY_APPROVAL_HOSTILE :Εχθρική STR_CITY_APPROVAL_PERMISSIVE :Ανεκτική (χωρίς επίδραση σε ενέργειες της εταιρίας) -STR_WARNING_NO_SUITABLE_AI :{WHITE}Δεν είναι διαθέσιμο κανένα κατάλληλο Al...{}Μπορείτε να κατεβάσετε AIs μέσω του συστήματος «Διαδικτυακού Περιεχομένου» +STR_WARNING_NO_SUITABLE_AI :{WHITE}Δεν υπάρχει διαθέσιμο κατάλληλο Al...{}Μπορείτε να κατεβάσετε AIs μέσω του συστήματος «Διαδικτυακού Περιεχομένου» # Settings tree window STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Ρυθμίσεις @@ -1925,6 +1925,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Ορίστε τ STR_CONFIG_SETTING_SERVINT_SHIPS :Προκαθορισμένο διάστημα μεταξύ επισκευών για τα πλοία: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Ορίστε το προκαθορισμένο διάστημα μεταξύ συντηρήσεων για τα νέα πλοία, όταν δεν δίνεται άλλο διάστημα για το πλοίο ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}Ημέρα{P 0 "" s} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}Λεπτό{P 0 "" s} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Απενεργοποιημένο @@ -2743,22 +2746,22 @@ STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}Ο serve STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Οι άλλοι παίκτες δεν θα μπορούν να συνδεθούν στον server σας # Content downloading window -STR_CONTENT_TITLE :{WHITE}Περιεχόμενο κατεβαίνει +STR_CONTENT_TITLE :{WHITE}Λαμβάνεται το περιεχόμενο STR_CONTENT_TYPE_CAPTION :{BLACK}Τύπος STR_CONTENT_TYPE_CAPTION_TOOLTIP :{BLACK}Τύπος περιεχόμενου STR_CONTENT_NAME_CAPTION :{BLACK}Όνομα STR_CONTENT_NAME_CAPTION_TOOLTIP :{BLACK}Το όνομα του περιεχομένου STR_CONTENT_MATRIX_TOOLTIP :{BLACK}Πατήστε σε μια γραμμή για να δείτε λεπτομέρειες{}Πατήστε στο κουτάκι για το επιλέξετε για κατέβασμα STR_CONTENT_SELECT_ALL_CAPTION :{BLACK}Επιλογή όλων -STR_CONTENT_SELECT_ALL_CAPTION_TOOLTIP :{BLACK}Μαρκάρισμα όλων των περιεχομένων για κατέβασμα +STR_CONTENT_SELECT_ALL_CAPTION_TOOLTIP :{BLACK}Μαρκάρισμα όλων των περιεχομένων για λήψη STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Επιλέξτε αναβαθμίσεις STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Μαρκάρισμα όλων των περιεχόμενων που είναι για αναβάθμιση υπαρχόντων περιεχόμενων για κατέβασμα STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}Αποεπιλογή όλων STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Σημείωση όλων των περιεχομένων να μην κατέβουν STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Αναζήτηση εξωτερικών ιστοσελίδων -STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Αναζήτηση για περιεχόμενο που δεν είναι διαθέσιμο μέσω την υπηρεσία λήψης περιεχομένου του OpenTTD σε ιστοσελίδες που δεν σχετίζονται με το OpenTTD +STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Αναζήτηση για περιεχόμενο που δεν είναι διαθέσιμο μέσω της υπηρεσίας λήψης περιεχομένου του OpenTTD σε ιστοσελίδες που δεν σχετίζονται με το OpenTTD STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Φεύγετε από το OpenTTD! -STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Οι όροι και προϋποθέσεις για τη λήψη περιεχομένου από εξωτερικές ιστοσελίδες διαφέρουν.{}Θα πρέπει να αναφερθείτε στις εξωτερικές ιστοσελίδες για οδηγίες περί της εγκατάστασης του περιεχομένου στο OpenTTD.{}Θέλετε να συνεχίσετε; +STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Οι όροι και προϋποθέσεις για τη λήψη περιεχομένου από εξωτερικές ιστοσελίδες διαφέρουν.{}Θα πρέπει να ανατρέξετε σε αυτές για οδηγίες σχετικά με την εγκατάσταση του περιεχομένου στο OpenTTD.{}Θέλετε να συνεχίσετε; STR_CONTENT_FILTER_TITLE :{BLACK}Ετικέτα/όνομα φίλτρου: STR_CONTENT_OPEN_URL :{BLACK}Ιστοσελίδα STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Επισκεφθείτε την ιστοσελίδα αυτού του περιεχομένου @@ -2868,7 +2871,7 @@ STR_JOIN_STATION_CAPTION :{WHITE}Συνέ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Κατασκευάστε ένα ξεχωριστό σταθμό STR_JOIN_WAYPOINT_CAPTION :{WHITE}Συνένωση σημείου καθοδήγησης -STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}κατασκευή ενός ξεχωριστού σημείου καθοδήγησης +STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Κατασκευή ενός ξεχωριστού σημείου καθοδήγησης # Generic toolbar STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Απενεργοποιημένο διότι δεν υπάρχουν διαθέσιμα οχήματα για αυτή την υποδομή @@ -2921,7 +2924,7 @@ STR_STATION_CLASS_DFLT :Προεπιλ STR_STATION_CLASS_DFLT_STATION :Προεπιλεγμένος σταθμός STR_STATION_CLASS_DFLT_ROADSTOP :Προεπιλεγμένη οδική στάση STR_STATION_CLASS_WAYP :Σημείο καθοδηγήσης -STR_STATION_CLASS_WAYP_WAYPOINT :Προεπιλεγμένο σημείο διαδρομής +STR_STATION_CLASS_WAYP_WAYPOINT :Προεπιλεγμένο σημείο καθοδήγησης # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Επιλογή Σηματοδότη @@ -2938,7 +2941,7 @@ STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Σημα STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Συνδυαστικός Σηματοδότης (ηλεκτρικός){}Ο συνδυαστικός σηματοδότης δουλεύει απλά ως σηματοδότης εισόδου και εξόδου ταυτόχρονα. Αυτό σας επιτρέπει την κατασκευή μεγάλων «δέντρων» με προ-σηματοδότες STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Σηματοδότης Τροχιάς (ηλεκτρικός){}Ένας σηματοδότης τροχιάς επιτρέπει σε περισσότερα από ένα τρένο να είναι σε ένα κομμάτι ελέγχου την ίδια στιγμή, εάν το τρένο μπορεί να δεσμεύσει τροχιά σε ασφαλές σημείο στάσης. Κανονικοί σηματοδότες τροχιάς μπορούν να περαστούν από την πίσω πλευρά STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Μονόδρομος Σηματοδότης Τροχιάς (ηλεκτρικός){}Ένας σηματοδότης τροχιάς επιτρέπει σε περισσότερα από ένα τρένο να είναι σε ένα κομμάτι ελέγχου την ίδια στιγμή, εάν το τρένο μπορεί να δεσμεύσει τροχιά σε ασφαλές σημείο στάσης. Μονόδρομοι σηματοδότες τροχιάς δεν μπορούν να περαστούν από την πίσω πλευρά -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Μετατροπή σήματος{}Κάντε κλικ σε ένα υπάρχον σήμα για να το μετατρέψετε στον επιλεγμένο τύπο και παραλλαγή. Ctrl+Κλικ για εναλλαγή της υπάρχουσας παραλλαγής. Το Shift+Κλικ εμφανίζει το εκτιμώμενο κόστος μετατροπής +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Μετατροπή σήματος{}Πατήστε σε ένα υπάρχον σήμα για να το μετατρέψετε στον επιλεγμένο τύπο και παραλλαγή. Ctrl+Κλικ για εναλλαγή της υπάρχουσας παραλλαγής. Το Shift+Κλικ εμφανίζει το εκτιμώμενο κόστος μετατροπής STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Απόσταση μεταξύ σηματοδοτών με σύρσιμο STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Μείωση απόστασης μεταξύ σηματοδοτών με σύρσιμο STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Αύξηση απόστασης μεταξύ σηματοδοτών με σύρσιμο @@ -3354,7 +3357,7 @@ STR_SAVELOAD_SAVE_SCENARIO :{WHITE}Αποθ STR_SAVELOAD_LOAD_SCENARIO :{WHITE}Φόρτωση Σεναρίου STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Φόρτωση Χάρτη Υψομετρίας STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Αποθήκευση Χάρτη Υψομετρίας -STR_SAVELOAD_HOME_BUTTON :{BLACK}Πατήστε εδώ για να πάτε στον τρέχων φάκελο αποθήκευσης +STR_SAVELOAD_HOME_BUTTON :{BLACK}Πατήστε εδώ για να μεταβείτε στον τρέχοντα φάκελο αποθήκευσης/φόρτωσης STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} ελεύθερα STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Λίστα δισκών, φακέλων και αποθηκευμένων παιχνιδιών STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Τρέχον επιλεγμένο όνομα για το αποθηκευμένο παιχνίδι @@ -4006,7 +4009,7 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Προβ STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Δώστε χρήματα STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Δώστε χρήματα σε αυτή την εταρία STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Εχθρική εξαγορά -STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Κάντε μια εχθρική εξαγορά αυτής της εταιρείας +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Κάντε εχθρική εξαγορά αυτής της εταιρείας STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Νέο Πρόσωπο STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Επιλογή νέου προσώπου διευθυντή @@ -4286,9 +4289,9 @@ STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Αερο ###length VEHICLE_TYPES STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Τραβήξτε το όχημα τρένου εδώ για να το πουλήσετε -STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Τραβήξτε το όχημα δρόμου εδώ για να το πουλήσετε +STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Σύρετε το όχημα δρόμου εδώ για να το πουλήσετε STR_DEPOT_SHIP_SELL_TOOLTIP :{BLACK}Τραβήξτε το πλοίο εδώ για να το πουλήσετε -STR_DEPOT_AIRCRAFT_SELL_TOOLTIP :{BLACK}Τραβήξτε το αεροσκάφος εδώ για να το πουλήσετε +STR_DEPOT_AIRCRAFT_SELL_TOOLTIP :{BLACK}Σύρετε το αεροσκάφος εδώ για να το πουλήσετε ###length VEHICLE_TYPES STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TOOLTIP :{BLACK}Πουλήστε όλα τα τρένα στο αμαξοστάσιο @@ -4300,7 +4303,7 @@ STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TOOLTIP :{BLACK}Πουλ STR_DEPOT_AUTOREPLACE_TRAIN_TOOLTIP :{BLACK}Αυτόματη αντικατάσταση όλων των τρένων στο αμαξοστάσιο STR_DEPOT_AUTOREPLACE_ROAD_VEHICLE_TOOLTIP :{BLACK}Αυτόματη αντικατάσταση όλων των οχημάτων στο αμαξοστάσιο STR_DEPOT_AUTOREPLACE_SHIP_TOOLTIP :{BLACK}Αυτόματη αντικατάσταση όλων των πλοίων στο ναυπηγείο -STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}Αυτόματη αντικατάσταση όλων των αεροσκαφών του υποστέγου +STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}Αυτόματη αντικατάσταση όλων των αεροσκαφών στο υπόστεγο ###length VEHICLE_TYPES STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON :{BLACK}Νέα Οχήματα @@ -4321,7 +4324,7 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Κλων STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Κλωνοποίηση Αεροσκάφους ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός τρένου μαζί με τα όλα τα βαγόνια. Πατήστε αυτό το κουμπί και μετά σε κάποιο τρένο μέσα ή έξω από το αμαξοστάσιο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός τρένου μαζί με όλα τα βαγόνια. Πατήστε αυτό το κουμπί και μετά σε κάποιο τρένο μέσα ή έξω από το αμαξοστάσιο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός οχήματος δρόμου. Πατήστε αυτό το κουμπί και μετά σε κάποιο όχημα μέσα ή έξω από το αμαξοστάσιο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός πλοίου. Πατήστε αυτό το κουμπί και μετά σε κάποιο πλοίο μέσα ή έξω από το ναυπηγείο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Αγορά αντιγράφου του αεροσκάφους. Πατήστε αυτό το κουμπί και μετά σε κάποιο αεροσκάφος μέσα ή έξω από το υπόστεγο. Με Ctrl+Κλικ θα διαμοιραστούν τις εντολές. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο @@ -4350,7 +4353,7 @@ STR_DEPOT_MASS_START_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Πατή STR_DEPOT_MASS_START_DEPOT_SHIP_TOOLTIP :{BLACK}Πατήστε για να ξεκινήσουν όλα τα πλοία μέσα στο ναυπηγείο STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Πατήστε για να ξεκινήσουν όλα τα αεροσκάφη μέσα στο υπόστεγο -STR_DEPOT_DRAG_WHOLE_TRAIN_TO_SELL_TOOLTIP :{BLACK}Τραβήξτε τη μηχανή του τρένου εδώ για να πουληθεί ολόκληρο το τρένο +STR_DEPOT_DRAG_WHOLE_TRAIN_TO_SELL_TOOLTIP :{BLACK}Σύρετε τη μηχανή του τρένου εδώ για να πουληθεί ολόκληρο το τρένο STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Πρόκειται να πουλήσετε όλα τα οχήματα στο αμαξοστάσιο. Είσαστε σίγουροι; # Engine preview window @@ -4483,10 +4486,10 @@ STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Εμφά STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Εμφάνιση λεπτομερειών αεροσκάφους ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Τρέχουσα δράση τρένου - κάντε κλικ για να σταματήσετε/ξεκινήσετε το τρένο -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Τρέχων ενέργεια οχήματος - κάντε κλικ για να σταματήσετε/ξεκινήσετε το όχημα -STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Τρέχουσα ενέργεια πλοίου - κάντε κλικ για να σταματήσετε/ξεκινήσετε το πλοίο -STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Τρέχουσα δράση αεροσκάφους - κάντε κλικ για να σταματήσετε/ξεκινήσετε το αεροσκάφος +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Τρέχουσα δράση τρένου - πατήστε για να σταματήσετε/ξεκινήσετε το τρένο +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Τρέχουσα ενέργεια οχήματος - πατήστε για να σταματήσετε/ξεκινήσετε το όχημα +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Τρέχουσα ενέργεια πλοίου - πατήστε για να σταματήσετε/ξεκινήσετε το πλοίο +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Τρέχουσα δράση αεροσκάφους - πατήστε για να σταματήσετε/ξεκινήσετε το αεροσκάφος # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Φόρτωση / Εκφόρτωση @@ -4609,7 +4612,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Νέα STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Νέα χωρητικότητα: {GOLD}{CARGO_LONG}{}{BLACK}Κέρδος από τη μετατροπή: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Νέα χωρητικότητα: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Κόστος μετατροπής: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Νέα χωρητικότητα: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Κέρδος από τη μετατροπή: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Επιλέξτε τα οχήματα για μετατροπή. Κλικ+Σύρσιμο για επιλογή πολλαπλών οχημάτων. Κάντε κλικ σε έναν κενό χώρο για να επιλέξετε ολόκληρο το όχημα. Ctrl+Κλικ για να επιλέξετε ένα όχημα και την ακόλουθη αλυσίδα +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Επιλέξτε τα οχήματα για μετατροπή. Κλικ+Σύρσιμο για επιλογή πολλαπλών οχημάτων. Πατήστε σε κενό χώρο για να επιλέξετε ολόκληρο το όχημα. Ctrl+Κλικ για να επιλέξετε κάποιο όχημα και την ακόλουθη αλυσίδα ###length VEHICLE_TYPES STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Επιλέξτε τον τύπο εμπορεύματος που θα μεταφέρει το τρένο @@ -4724,7 +4727,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Πήγαινε STR_ORDER_GO_TO_NEAREST_HANGAR :Πήγαινε στο κοντινότερο υπόστεγο STR_ORDER_CONDITIONAL :Εκτέλεση εντόλης υπο προυπόθεση STR_ORDER_SHARE :Μοίρασμα εντολών -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Εισάγετε μια νέα εντολή πριν την επιλεγμένη ή προσθέστε στο τέλος της λίστας. Ctrl+Κλικ σε έναν σταθμό για ορισμό εντολής σε "πλήρης φόρτωση οποιουδήποτε εμπορεύματος", σε σημείο διαδρομής για αντιστροφή εντολής "χωρίς στάση εξ ορισμού" ή σε αμαξοστάσιο για "αποσύνδεση". Κάντε κλικ σε άλλο όχημα για να αντιγράψετε τις εντολές του ή Ctrl+Κλικ για διαμοιρασμό εντολών. Μια εντολή αμαξοστασίου απενεργοποιεί την αυτόματη συντήρηση του οχήματος +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Εισαγάγετε νέα εντολή πριν την επιλεγμένη ή προσθέστε στο τέλος της λίστας. Ctrl+Κλικ σε σταθμό για «πλήρη φόρτωση οποιουδήποτε εμπορεύματος», σε σημείο διαδρομής για αντιστροφή της εντολής «προεπιλογή χωρίς στάση» ή σε αμαξοστάσιο για «αποσύνδεση». Πατήστε σε άλλο όχημα για να αντιγράψετε τις εντολές του ή Ctrl+Κλικ για διαμοιρασμό εντολών. Η εντολή για αμαξοστάσιο απενεργοποιεί την αυτόματη συντήρηση του οχήματος STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Εμφάνιση όλων των οχημάτων που μοιράζονται αυτό το δρομολόγιο @@ -4894,7 +4897,7 @@ STR_AI_GAME_SCRIPT :{BLACK}Δέσμ STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Έλεγχος ιστορικού δέσμης ενεργειών παιχνιδιού. Ctrl+Κλικ για άνοιγμα σε νέο παράθυρο STR_ERROR_AI_NO_AI_FOUND :Δεν βρέθηκε κατάλληλη AI για φόρτωση.{}Αυτή η AI είναι ψεύτικη και δεν θα κάνει τίποτα.{}Μπορείτε να κατεβάσετε διάφορες AΙ από το σύστημα Διαδικτυακού Περιεχομένου. -STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Μια τρέχουσα δέσμη ενεργειών τερμάτισε απότομα. Παρακαλώ ενημερώστε τον συγγραφέα της δέσμης ενεργειών με ένα στιγμιότυπο οθόνης από το παράθυρο αποσφαλμάτωσης AI/Παιχνιδιού +STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Μια από τις δέσμες ενεργειών που εκτελούνται τερμάτισε απότομα. Παρακαλώ ενημερώστε τον συγγραφέα της δέσμης ενεργειών με ένα στιγμιότυπο οθόνης από το παράθυρο αποσφαλμάτωσης AI/Παιχνιδιού STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Το παράθυρο αποσφαλμάτωσης ΑΙ και δέσμης ενεργειών είναι διαθέσιμο μόνο για τον διακομιστή # AI configuration window @@ -5008,7 +5011,7 @@ STR_ERROR_AUTOSAVE_FAILED :{WHITE}Η αυ STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Αδύνατη η ανάγνωση του δίσκου STR_ERROR_GAME_SAVE_FAILED :{WHITE}Η αποθήκευση του παιχνιδιού απέτυχε... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Αδύνατη η διαγραφή του αρχείου -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Το φόρτωμα του παιχνιδιού απέτυχε... +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Απέτυχε η φόρτωση του παιχνιδιού... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Εσωτερικό λάθος: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Χαλασμένο αποθηκευμένο παιχνίδι - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Το αποθηκευμένο παιχνίδι είναι φτιαγμένο με νεότερη έκδοση @@ -5037,7 +5040,7 @@ STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}Προε STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Αλλαγή μεγέθους του πηγαίου χάρτη δεν συνιστάται. Να προχωρήσει η δημιουργία; # Soundset messages -STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Βρέθηκε μόνο εφεδρικό σετ ήχου. Αν θέλετε ήχους, εγκαταστήστε ένα πακέτο ήχων μέσω του συστήματος μεταφόρτωσης υλικού +STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Βρέθηκε μόνο εφεδρικό πακέτο ήχων. Αν θέλετε ήχους, εγκαταστήστε πακέτο ήχων μέσω του συστήματος μεταφόρτωσης υλικού # Screenshot related messages STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Τεράστιο στιγμιότυπο οθόνης @@ -5157,23 +5160,23 @@ STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Πάρα STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Πολύ κοντά σε άλλη αποβάθρα STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Πολύ κοντά σε άλλο αεροδρόμιο STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Δεν μπορεί να μετονομαστεί ο σταθμός... -STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... δρόμος ιδιοκτησία μιας πόλης +STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... δρόμος ιδιοκτησία κάποιας πόλης STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... ο δρόμος βλέπει σε λάθος κατεύθυνση STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... οι μη τερματικοί σταθμοί δε μπορούν να έχουν στροφές STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... οι μη τερματικοί σταθμοί δε μπορούν να έχουν διασταυρώσεις # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Δεν μπορεί να αφαιρεθεί μέρος του σταθμού... -STR_ERROR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Πρέπει πρώτα να αφαιρέσετε τον σταθμό σιδηροδρόμου +STR_ERROR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Πρέπει να αφαιρεθεί ο σταθμός σιδηροδρόμου πρώτα STR_ERROR_CAN_T_REMOVE_BUS_STATION :{WHITE}Αδύνατο να αφαιρεθεί η στάση λεωφορείων... STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Δεν μπορεί να αφαιρεθεί ο σταθμός φορτηγών... STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Δεν μπορεί να αφαιρεθεί η στάση επιβατών τραμ... STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Δεν μπορεί να αφαιρεθεί ο σταθμός εμπορευμάτων τραμ... -STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Πρέπει να γίνει αφαίρεση της στάσης οχημάτων πρώτα +STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Πρέπει να αφαιρεθεί η στάση οχημάτων πρώτα STR_ERROR_THERE_IS_NO_STATION :{WHITE}... δεν υπάρχει σταθμός εδώ STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}Πρέπει να κατεδαφιστεί ο σιδηροδρομικός σταθμός πρώτα -STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Πρέπει να κατεδαφιστεί η στάσης λεωφορείου πρώτα +STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Πρέπει να κατεδαφιστεί η στάση λεωφορείου πρώτα STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST :{WHITE}Πρέπει να κατεδαφιστεί ο σταθμός φορτηγών πρώτα STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST :{WHITE}Πρέπει να κατεδαφιστεί ο επιβατικός σταθμός τραμ πρώτα STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST :{WHITE}Πρέπει να κατεδαφιστεί ο εμπορευματικός σταθμός τραμ πρώτα @@ -5181,7 +5184,7 @@ STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Πρέπ STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Πρέπει να κατεδαφιστεί το αεροδρόμιο πρώτα # Waypoint related errors -STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Προστίθεται σε περισσότερο από ένα υπάρχον σημείο καθοδήγησης +STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Συνενώνει περισσότερα από ένα υπάρχοντα σημεία καθοδήγησης STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Πολύ κοντά σε άλλο σημείο καθοδήγησης STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Δεν μπορεί να κατασκευαστεί σημείο καθοδήγησης τρένου εδώ... @@ -5189,7 +5192,7 @@ STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Δεν STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Αδύνατο να αλλαχτεί το όνομα του σημείου καθοδήγησης... STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Αδύνατο να αφαιρεθεί το σημείο καθοδήγησης τρένου από εδώ... -STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Πρέπει να αφαιρεθεί πρώτα το σημείο καθοδήγησης σιδηρόδρομου +STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Πρέπει να αφαιρεθεί το σημείο καθοδήγησης σιδηρόδρομου πρώτα STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... σημαδούρα στη μέση STR_ERROR_BUOY_IS_IN_USE :{WHITE}... σημαδούρα σε χρήση από άλλη εταιρία! @@ -5235,7 +5238,7 @@ STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Το κ # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Αδύνατος συνδυασμός σιδηροδρόμου -STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Πρέπει να γίνει αφαίρεση του σήματος πρώτα +STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Πρέπει να αφαιρεθεί το σήμα πρώτα STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Μη συμβατή σιδηροτροχιά STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Πρέπει να αφαιρεθεί ο σιδηρόδρομος πρώτα STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Η δρόμος είναι μονόδρομος ή μπλοκαρισμένος @@ -5252,7 +5255,7 @@ STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}... δε STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Δε γίνεται να μετατραπεί ο τύπος της σιδηροτροχιάς εδώ... # Road construction errors -STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Πρέπει πρώτα να αφαιρεθεί ο δρόμος +STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Πρέπει να αφαιρεθεί ο δρόμος πρώτα STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... οι μονόδρομοι δεν μπορούν να έχουν διασταυρώσεις STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί δρόμος εδώ... STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί τροχιοδρόμος εδώ... @@ -5284,7 +5287,7 @@ STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}Δεν # Bridge related errors STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί γέφυρα εδώ... -STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Πρέπει πρώτα να καταστραφεί η γέφυρα +STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Πρέπει να καταστραφεί η γέφυρα πρώτα STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Δεν γίνεται να ξεκινάει και να τελειώνει στο ίδιο σημείο STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Η γέφυρα δεν καταλήγει στο ίδιο επίπεδο STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Η γέφυρα είναι πολύ χαμηλή για το έδαφος @@ -5297,7 +5300,7 @@ STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :{WHITE}Η γέ # Tunnel related errors STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί τούνελ εδώ... STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Ακατάλληλη τοποθεσία για είσοδο τούνελ -STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Πρέπει πρώτα να καταστραφεί το τούνελ +STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Πρέπει να καταστραφεί το τούνελ πρώτα STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Υπάρχει άλλο τούνελ στη μέση STR_ERROR_TUNNEL_THROUGH_MAP_BORDER :{WHITE}Το τούνελ θα καταλήξει εκτός του χάρτη STR_ERROR_UNABLE_TO_EXCAVATE_LAND :{WHITE}Αδύνατο να γίνει εκσκαφή γης στην άλλη άκρη του τούνελ @@ -5436,7 +5439,7 @@ STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Δεν STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Δεν υπάρχουν στάσεις που να είναι κατάλληλες για αρθρωτά οδικά οχήματα.{}Τα αρθρωτά οδικά οχήματα απαιτούν μια στάση-πέρασμα (drive-through) και όχι κλειστή στάση STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Το αεροπλάνο αυτό δεν μπορεί να προσγειωθεί σε αυτό το ελικοδρόμιο STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Το ελικόπτερο αυτό δεν μπορεί να προσγειωθεί σε αυτό το αεροδρόμιο -STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Δεν υπάρχει σιδηροδρομικό σημείο +STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Δεν υπάρχει σημείο καθοδήγησης σιδηροδρόμου STR_ERROR_NO_BUOY :{WHITE}Δεν υπάρχει σημαδούρα # Timetable related errors @@ -5928,10 +5931,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} -STR_CURRENCY_SHORT_KILO :{NBSP}k -STR_CURRENCY_SHORT_MEGA :{NBSP}m -STR_CURRENCY_SHORT_GIGA :{NBSP}Δις -STR_CURRENCY_SHORT_TERA :{NBSP}tn +STR_CURRENCY_SHORT_KILO :{NBSP}χιλ. +STR_CURRENCY_SHORT_MEGA :{NBSP}εκ. +STR_CURRENCY_SHORT_GIGA :{NBSP}δισ. +STR_CURRENCY_SHORT_TERA :{NBSP}τρισ. STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 4f9e608597..a1577817f6 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -2162,7 +2162,7 @@ STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN :未知 STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_LEVEL :{WHITE}... 压缩等级 '{STRING}' 无效 STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}...存档格式 '{STRING}' 不适用. 请转换成 '{STRING}' STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... 禁用基础图形设置 '{STRING}': 未找到 -STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... 禁用基础意义设置 '{STRING}': 未找到 +STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}……禁用基础音效设置 '{STRING}': 未找到 STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... 禁用基础音乐设置 '{STRING}': 未找到 STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}内存溢出 STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}无法分配 {BYTES} 的 Sprite 缓存。Sprite 缓存的大小已降至 {BYTES}。OpenTTD 的性能将受到影响。请尝试停用 32bpp 图形及/或减少放大倍数,以降低内存需求 From 1424a184d8eff1ae78bd5c299386d6bac3e8640b Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 1 May 2024 18:23:27 +0100 Subject: [PATCH 436/695] Codechange: Use vector/span when loading wagon overrides. (#12604) Replaces manual memory allocation and passing pointer with size. --- src/newgrf.cpp | 18 +++++++----------- src/newgrf_engine.cpp | 4 ++-- src/newgrf_engine.h | 2 +- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 0b8628f370..2444e82121 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -5611,8 +5611,7 @@ static bool IsValidGroupID(uint16_t groupid, const char *function) static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idcount) { - static EngineID *last_engines; - static uint last_engines_count; + static std::vector last_engines; // Engine IDs are remembered in case the next action is a wagon override. bool wagover = false; /* Test for 'wagon override' flag */ @@ -5621,21 +5620,18 @@ static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idco /* Strip off the flag */ idcount = GB(idcount, 0, 7); - if (last_engines_count == 0) { + if (last_engines.empty()) { GrfMsg(0, "VehicleMapSpriteGroup: WagonOverride: No engine to do override with"); return; } - GrfMsg(6, "VehicleMapSpriteGroup: WagonOverride: {} engines, {} wagons", - last_engines_count, idcount); + GrfMsg(6, "VehicleMapSpriteGroup: WagonOverride: {} engines, {} wagons", last_engines.size(), idcount); } else { - if (last_engines_count != idcount) { - last_engines = ReallocT(last_engines, idcount); - last_engines_count = idcount; - } + last_engines.resize(idcount); } std::vector engines; + engines.reserve(idcount); for (uint i = 0; i < idcount; i++) { Engine *e = GetNewEngine(_cur.grffile, (VehicleType)feature, buf->ReadExtendedByte()); if (e == nullptr) { @@ -5667,7 +5663,7 @@ static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idco GrfMsg(7, "VehicleMapSpriteGroup: [{}] Engine {}...", i, engine); if (wagover) { - SetWagonOverrideSprites(engine, cid, _cur.spritegroups[groupid], last_engines, last_engines_count); + SetWagonOverrideSprites(engine, cid, _cur.spritegroups[groupid], last_engines); } else { SetCustomEngineSprites(engine, cid, _cur.spritegroups[groupid]); } @@ -5683,7 +5679,7 @@ static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idco EngineID engine = engines[i]; if (wagover) { - SetWagonOverrideSprites(engine, SpriteGroupCargo::SG_DEFAULT, _cur.spritegroups[groupid], last_engines, last_engines_count); + SetWagonOverrideSprites(engine, SpriteGroupCargo::SG_DEFAULT, _cur.spritegroups[groupid], last_engines); } else { SetCustomEngineSprites(engine, SpriteGroupCargo::SG_DEFAULT, _cur.spritegroups[groupid]); SetEngineGRF(engine, _cur.grffile); diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index 0b7e6e08e7..4a5abcdce0 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -27,7 +27,7 @@ #include "safeguards.h" -void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const SpriteGroup *group, EngineID *train_id, uint trains) +void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const SpriteGroup *group, std::span engine_ids) { Engine *e = Engine::Get(engine); @@ -36,7 +36,7 @@ void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const SpriteGroup * WagonOverride *wo = &e->overrides.emplace_back(); wo->group = group; wo->cargo = cargo; - wo->engines.assign(train_id, train_id + trains); + wo->engines.assign(engine_ids.begin(), engine_ids.end()); } const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID cargo, EngineID overriding_engine) diff --git a/src/newgrf_engine.h b/src/newgrf_engine.h index 527942a0a3..a2795a8d2c 100644 --- a/src/newgrf_engine.h +++ b/src/newgrf_engine.h @@ -76,7 +76,7 @@ static const uint VEHICLEINFO_FULL_VEHICLE_WIDTH = 32; struct VehicleSpriteSeq; -void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const struct SpriteGroup *group, EngineID *train_id, uint trains); +void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const struct SpriteGroup *group, std::span engine_ids); const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID cargo, EngineID overriding_engine); void SetCustomEngineSprites(EngineID engine, uint8_t cargo, const struct SpriteGroup *group); From 532ce1a9079d67f8fbbef80507350111ea93bea7 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 1 May 2024 18:55:54 +0100 Subject: [PATCH 437/695] Codechange: Use Recv/Send_bytes for md5sum. (#12602) Use existing functions to handle serialisation of arrays instead of indexed for-loop. --- src/network/core/network_game_info.cpp | 8 ++------ src/network/network_content.cpp | 9 ++------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/network/core/network_game_info.cpp b/src/network/core/network_game_info.cpp index 623be7fa84..becc7d405e 100644 --- a/src/network/core/network_game_info.cpp +++ b/src/network/core/network_game_info.cpp @@ -375,9 +375,7 @@ void DeserializeNetworkGameInfo(Packet &p, NetworkGameInfo &info, const GameInfo void SerializeGRFIdentifier(Packet &p, const GRFIdentifier &grf) { p.Send_uint32(grf.grfid); - for (size_t j = 0; j < grf.md5sum.size(); j++) { - p.Send_uint8(grf.md5sum[j]); - } + p.Send_bytes(grf.md5sum); } /** @@ -388,9 +386,7 @@ void SerializeGRFIdentifier(Packet &p, const GRFIdentifier &grf) void DeserializeGRFIdentifier(Packet &p, GRFIdentifier &grf) { grf.grfid = p.Recv_uint32(); - for (size_t j = 0; j < grf.md5sum.size(); j++) { - grf.md5sum[j] = p.Recv_uint8(); - } + p.Recv_bytes(grf.md5sum); } /** diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 2395180a27..66926d26d8 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -63,9 +63,7 @@ bool ClientNetworkContentSocketHandler::Receive_SERVER_INFO(Packet &p) ci->description = p.Recv_string(NETWORK_CONTENT_DESC_LENGTH, SVS_REPLACE_WITH_QUESTION_MARK | SVS_ALLOW_NEWLINE); ci->unique_id = p.Recv_uint32(); - for (size_t j = 0; j < ci->md5sum.size(); j++) { - ci->md5sum[j] = p.Recv_uint8(); - } + p.Recv_bytes(ci->md5sum); uint dependency_count = p.Recv_uint8(); ci->dependencies.reserve(dependency_count); @@ -276,10 +274,7 @@ void ClientNetworkContentSocketHandler::RequestContentList(ContentVector *cv, bo p->Send_uint8((uint8_t)ci->type); p->Send_uint32(ci->unique_id); if (!send_md5sum) continue; - - for (size_t j = 0; j < ci->md5sum.size(); j++) { - p->Send_uint8(ci->md5sum[j]); - } + p->Send_bytes(ci->md5sum); } this->SendPacket(std::move(p)); From 7147fe9e7a347209a030d927f35f302b3b76945f Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 1 May 2024 19:59:46 +0100 Subject: [PATCH 438/695] Codechange: Use range-for when loading NewGRF deterministic sprite groups. (#12605) --- src/newgrf.cpp | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 2444e82121..17fbbbbdd3 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -5279,10 +5279,10 @@ static void NewSpriteGroup(ByteReader *buf) std::vector ranges; ranges.resize(buf->ReadByte()); - for (uint i = 0; i < ranges.size(); i++) { - ranges[i].group = GetGroupFromGroupID(setid, type, buf->ReadWord()); - ranges[i].low = buf->ReadVarSize(varsize); - ranges[i].high = buf->ReadVarSize(varsize); + for (auto &range : ranges) { + range.group = GetGroupFromGroupID(setid, type, buf->ReadWord()); + range.low = buf->ReadVarSize(varsize); + range.high = buf->ReadVarSize(varsize); } group->default_group = GetGroupFromGroupID(setid, type, buf->ReadWord()); @@ -5292,20 +5292,19 @@ static void NewSpriteGroup(ByteReader *buf) /* Sort ranges ascending. When ranges overlap, this may required clamping or splitting them */ std::vector bounds; - for (uint i = 0; i < ranges.size(); i++) { - bounds.push_back(ranges[i].low); - if (ranges[i].high != UINT32_MAX) bounds.push_back(ranges[i].high + 1); + for (const auto &range : ranges) { + bounds.push_back(range.low); + if (range.high != UINT32_MAX) bounds.push_back(range.high + 1); } std::sort(bounds.begin(), bounds.end()); bounds.erase(std::unique(bounds.begin(), bounds.end()), bounds.end()); std::vector target; - for (uint j = 0; j < bounds.size(); ++j) { - uint32_t v = bounds[j]; + for (const auto &bound : bounds) { const SpriteGroup *t = group->default_group; - for (uint i = 0; i < ranges.size(); i++) { - if (ranges[i].low <= v && v <= ranges[i].high) { - t = ranges[i].group; + for (const auto &range : ranges) { + if (range.low <= bound && bound <= range.high) { + t = range.group; break; } } From f1466801217647b2a089d0d9ceed64a5da4b437e Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 1 May 2024 20:55:00 +0100 Subject: [PATCH 439/695] Codechange: Use vector for industry random sounds. (#12606) Use a vector to store the list of random sounds played for an industry. The removes manual memory allocation, flags to control memory management, a separate count member, and a try/catch block. --- src/industry_cmd.cpp | 11 +---- src/industrytype.h | 10 +---- src/newgrf.cpp | 20 +++------ src/table/build_industry.h | 86 +++++++++++++++++++------------------- 4 files changed, 52 insertions(+), 75 deletions(-) diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index d46ebe3d6f..8596b6e658 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1166,11 +1166,11 @@ static void ProduceIndustryGoods(Industry *i) /* play a sound? */ if ((i->counter & 0x3F) == 0) { uint32_t r; - if (Chance16R(1, 14, r) && indsp->number_of_sounds != 0 && _settings_client.sound.ambient) { + if (Chance16R(1, 14, r) && !indsp->random_sounds.empty() && _settings_client.sound.ambient) { if (std::any_of(std::begin(i->produced), std::end(i->produced), [](const auto &p) { return p.history[LAST_MONTH].production > 0; })) { /* Play sound since last month had production */ SndPlayTileFx( - (SoundFx)(indsp->random_sounds[((r >> 16) * indsp->number_of_sounds) >> 16]), + static_cast(indsp->random_sounds[((r >> 16) * indsp->random_sounds.size()) >> 16]), i->location.tile); } } @@ -3170,13 +3170,6 @@ bool IndustrySpec::UsesOriginalEconomy() const HasBit(this->callback_mask, CBM_IND_MONTHLYPROD_CHANGE) || HasBit(this->callback_mask, CBM_IND_PRODUCTION_CHANGE) || HasBit(this->callback_mask, CBM_IND_PROD_CHANGE_BUILD); // production change callbacks } -IndustrySpec::~IndustrySpec() -{ - if (HasBit(this->cleanup_flag, CLEAN_RANDOMSOUNDS)) { - free(this->random_sounds); - } -} - static CommandCost TerraformTile_Industry(TileIndex tile, DoCommandFlag flags, int z_new, Slope tileh_new) { if (AutoslopeEnabled()) { diff --git a/src/industrytype.h b/src/industrytype.h index 74b656cb81..b299851c10 100644 --- a/src/industrytype.h +++ b/src/industrytype.h @@ -18,10 +18,6 @@ #include "newgrf_animation_type.h" #include "newgrf_commons.h" -enum IndustryCleanupType { - CLEAN_RANDOMSOUNDS, ///< Free the dynamically allocated sounds table -}; - /** Available types of industry lifetimes. */ enum IndustryLifeType { INDUSTRYLIFE_BLACK_HOLE = 0, ///< Like power plants and banks @@ -132,21 +128,17 @@ struct IndustrySpec { StringID station_name; ///< Default name for nearby station uint8_t appear_ingame[NUM_LANDSCAPE]; ///< Probability of appearance in game uint8_t appear_creation[NUM_LANDSCAPE]; ///< Probability of appearance during map creation - uint8_t number_of_sounds; ///< Number of sounds available in the sounds array - const uint8_t *random_sounds; ///< array of random sounds. /* Newgrf data */ uint16_t callback_mask; ///< Bitmask of industry callbacks that have to be called - uint8_t cleanup_flag; ///< flags indicating which data should be freed upon cleaning up bool enabled; ///< entity still available (by default true).newgrf can disable it, though GRFFileProps grf_prop; ///< properties related to the grf file + std::vector random_sounds; ///< Random sounds; bool IsRawIndustry() const; bool IsProcessingIndustry() const; Money GetConstructionCost() const; Money GetRemovalCost() const; bool UsesOriginalEconomy() const; - - ~IndustrySpec(); }; /** diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 17fbbbbdd3..5d9cf6fa57 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -3705,23 +3705,15 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, break; case 0x15: { // Random sound effects - indsp->number_of_sounds = buf->ReadByte(); - uint8_t *sounds = MallocT(indsp->number_of_sounds); + uint8_t num_sounds = buf->ReadByte(); - try { - for (uint8_t j = 0; j < indsp->number_of_sounds; j++) { - sounds[j] = buf->ReadByte(); - } - } catch (...) { - free(sounds); - throw; + std::vector sounds; + sounds.reserve(num_sounds); + for (uint8_t j = 0; j < num_sounds; ++j) { + sounds.push_back(buf->ReadByte()); } - if (HasBit(indsp->cleanup_flag, CLEAN_RANDOMSOUNDS)) { - free(indsp->random_sounds); - } - indsp->random_sounds = sounds; - SetBit(indsp->cleanup_flag, CLEAN_RANDOMSOUNDS); + indsp->random_sounds = std::move(sounds); break; } diff --git a/src/table/build_industry.h b/src/table/build_industry.h index 72abeb5db0..116d3bad3f 100644 --- a/src/table/build_industry.h +++ b/src/table/build_industry.h @@ -1032,16 +1032,16 @@ static const std::vector _tile_table_sugar_mine { #undef MK /** Array with saw sound, for sawmill */ -static const uint8_t _sawmill_sounds[] = { SND_28_SAWMILL }; +static const std::initializer_list _sawmill_sounds = { SND_28_SAWMILL }; /** Array with whistle sound, for factory */ -static const uint8_t _factory_sounds[] = { SND_03_FACTORY }; +static const std::initializer_list _factory_sounds = { SND_03_FACTORY }; /** Array with 3 animal sounds, for farms */ -static const uint8_t _farm_sounds[] = { SND_24_FARM_1, SND_25_FARM_2, SND_26_FARM_3 }; +static const std::initializer_list _farm_sounds = { SND_24_FARM_1, SND_25_FARM_2, SND_26_FARM_3 }; /** Array with... hem... a sound of toyland */ -static const uint8_t _plastic_mine_sounds[] = { SND_33_PLASTIC_MINE }; +static const std::initializer_list _plastic_mine_sounds = { SND_33_PLASTIC_MINE }; enum IndustryTypes { IT_COAL_MINE = 0, @@ -1125,7 +1125,7 @@ enum IndustryTypes { * @param s3 text for production down */ -#define MI(tbl, sndc, snd, d, pc, ai1, ai2, ai3, ai4, ag1, ag2, ag3, ag4, col, \ +#define MI(tbl, snd, d, pc, ai1, ai2, ai3, ai4, ag1, ag2, ag3, ag4, col, \ c1, c2, c3, proc, p1, r1, p2, r2, m, a1, im1, a2, im2, a3, im3, pr, clim, bev, in, intx, s1, s2, s3) \ {tbl, d, 0, pc, {c1, c2, c3}, proc, \ {INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO}, \ @@ -1135,7 +1135,7 @@ enum IndustryTypes { {a1, a2, a3, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID}, \ {{im1, 0}, {im2, 0}, {im3, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, \ pr, clim, bev, col, in, intx, s1, s2, s3, STR_UNDEFINED, {ai1, ai2, ai3, ai4}, {ag1, ag2, ag3, ag4}, \ - sndc, snd, 0, 0, true, GRFFileProps(INVALID_INDUSTRYTYPE)} + 0, true, GRFFileProps(INVALID_INDUSTRYTYPE), snd} /* Format: tile table count and sounds table cost multiplier appear chances(4ingame, 4random) map colour @@ -1147,7 +1147,7 @@ enum IndustryTypes { industry name building text messages : Closure production up production down */ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { - MI(_tile_table_coal_mine, 0, nullptr, + MI(_tile_table_coal_mine, {}, 210, 0xB3333333, 2, 3, 0, 0, 8, 8, 0, 0, 1, IT_POWER_STATION, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_COAL, 15, CT_INVALID, 0, 5, @@ -1157,7 +1157,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_COAL_MINE, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_power_station, 0, nullptr, + MI(_tile_table_power_station, {}, 240, 0xFFFFFFFF, 2, 2, 0, 0, 5, 5, 0, 0, 184, IT_COAL_MINE, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_INVALID, 0, CT_INVALID, 0, 5, @@ -1167,7 +1167,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_POWER_STATION, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_sawmill, 1, _sawmill_sounds, + MI(_tile_table_sawmill, _sawmill_sounds, 224, 0xFFFFFFFF, 2, 0, 0, 0, 5, 0, 0, 0, 194, IT_FOREST, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_GOODS, 0, CT_INVALID, 0, 5, @@ -1177,7 +1177,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_SAWMILL, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_forest, 0, nullptr, + MI(_tile_table_forest, {}, 200, 0xBFFFFFFF, 3, 4, 0, 0, 5, 5, 0, 0, 86, IT_SAWMILL, IT_PAPER_MILL, IT_INVALID, CHECK_FOREST, CT_WOOD, 13, CT_INVALID, 0, 30, @@ -1187,7 +1187,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_FOREST, STR_NEWS_INDUSTRY_PLANTED, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM), - MI(_tile_table_oil_refinery, 0, nullptr, + MI(_tile_table_oil_refinery, {}, 244, 0xFFFFFFFF, 2, 2, 2, 0, 4, 4, 4, 0, 191, IT_OIL_RIG, IT_INVALID, IT_INVALID, CHECK_REFINERY, CT_GOODS, 0, CT_INVALID, 0, 5, @@ -1197,7 +1197,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_OIL_REFINERY, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_oil_rig, 0, nullptr, + MI(_tile_table_oil_rig, {}, 240, 0x99999999, 6, 0, 0, 0, 0, 0, 0, 0, 152, IT_OIL_REFINERY, IT_INVALID, IT_INVALID, CHECK_OIL_RIG, CT_OIL, 15, CT_PASSENGERS, 2, 5, @@ -1207,7 +1207,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_OIL_RIG, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_factory, 1, _factory_sounds, + MI(_tile_table_factory, _factory_sounds, 208, 0xFFFFFFFF, 2, 0, 0, 0, 5, 0, 0, 0, 174, IT_FARM, IT_STEEL_MILL, IT_INVALID, CHECK_NOTHING, CT_GOODS, 0, CT_INVALID, 0, 5, @@ -1217,7 +1217,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_FACTORY, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_printing_works, 1, _factory_sounds, + MI(_tile_table_printing_works, _factory_sounds, 208, 0xFFFFFFFF, 0, 2, 0, 0, 0, 5, 0, 0, 174, IT_PAPER_MILL, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_GOODS, 0, CT_INVALID, 0, 5, @@ -1227,7 +1227,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_PRINTING_WORKS, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_steel_mill, 0, nullptr, + MI(_tile_table_steel_mill, {}, 215, 0xFFFFFFFF, 2, 0, 0, 0, 5, 0, 0, 0, 10, IT_IRON_MINE, IT_FACTORY, IT_INVALID, CHECK_NOTHING, CT_STEEL, 0, CT_INVALID, 0, 5, @@ -1237,7 +1237,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_STEEL_MILL, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_farm, 3, _farm_sounds, + MI(_tile_table_farm, _farm_sounds, 250, 0xD9999999, 2, 4, 0, 0, 9, 9, 0, 0, 48, IT_FACTORY, IT_FOOD_PROCESS, IT_INVALID, CHECK_FARM, MCT_GRAIN_WHEAT_MAIZE, 10, MCT_LIVESTOCK_FRUIT, 10, 5, @@ -1247,7 +1247,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_FARM, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM), - MI(_tile_table_copper_mine, 0, nullptr, + MI(_tile_table_copper_mine, {}, 205, 0xB3333333, 0, 0, 3, 0, 0, 0, 4, 0, 10, IT_FACTORY_2, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_COPPER_ORE, 10, CT_INVALID, 0, 5, @@ -1257,7 +1257,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_COPPER_ORE_MINE, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_oil_well, 0, nullptr, + MI(_tile_table_oil_well, {}, 220, 0x99999999, 0, 5, 3, 0, 4, 5, 5, 0, 152, IT_OIL_REFINERY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_OIL, 12, CT_INVALID, 0, 5, @@ -1267,7 +1267,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_OIL_WELLS, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_bank, 0, nullptr, + MI(_tile_table_bank, {}, 255, 0xA6666666, 7, 0, 0, 0, 0, 0, 0, 0, 15, IT_BANK_TEMP, IT_INVALID, IT_INVALID, CHECK_NOTHING, MCT_VALUABLES_GOLD_DIAMONDS, 6, CT_INVALID, 0, 5, @@ -1277,7 +1277,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_BANK, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_food_process, 0, nullptr, + MI(_tile_table_food_process, {}, 206, 0xFFFFFFFF, 0, 2, 2, 0, 0, 3, 4, 0, 55, IT_FRUIT_PLANTATION, IT_FARM, IT_FARM_2, CHECK_NOTHING, CT_FOOD, 0, CT_INVALID, 0, 5, @@ -1287,7 +1287,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_FOOD_PROCESSING_PLANT, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_paper_mill, 1, _sawmill_sounds, + MI(_tile_table_paper_mill, _sawmill_sounds, 227, 0xFFFFFFFF, 0, 2, 0, 0, 0, 5, 0, 0, 10, IT_FOREST, IT_PRINTING_WORKS, IT_INVALID, CHECK_NOTHING, CT_PAPER, 0, CT_INVALID, 0, 5, @@ -1297,7 +1297,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_PAPER_MILL, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_gold_mine, 0, nullptr, + MI(_tile_table_gold_mine, {}, 208, 0x99999999, 0, 3, 0, 0, 0, 4, 0, 0, 194, IT_BANK_TROPIC_ARCTIC, IT_INVALID, IT_INVALID, CHECK_NOTHING, MCT_VALUABLES_GOLD_DIAMONDS, 7, CT_INVALID, 0, 5, @@ -1307,7 +1307,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_GOLD_MINE, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_bank2, 0, nullptr, + MI(_tile_table_bank2, {}, 151, 0xA6666666, 0, 3, 3, 0, 0, 6, 5, 0, 15, IT_GOLD_MINE, IT_DIAMOND_MINE, IT_INVALID, CHECK_NOTHING, CT_INVALID, 0, CT_INVALID, 0, 5, @@ -1317,7 +1317,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_BANK_TROPIC_ARCTIC, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_diamond_mine, 0, nullptr, + MI(_tile_table_diamond_mine, {}, 213, 0x99999999, 0, 0, 3, 0, 0, 0, 4, 0, 184, IT_BANK_TROPIC_ARCTIC, IT_INVALID, IT_INVALID, CHECK_NOTHING, MCT_VALUABLES_GOLD_DIAMONDS, 7, CT_INVALID, 0, 5, @@ -1327,7 +1327,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_DIAMOND_MINE, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_iron_mine, 0, nullptr, + MI(_tile_table_iron_mine, {}, 220, 0xB3333333, 2, 0, 0, 0, 5, 0, 0, 0, 55, IT_STEEL_MILL, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_IRON_ORE, 10, CT_INVALID, 0, 5, @@ -1337,7 +1337,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_IRON_ORE_MINE, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_fruit_plantation, 0, nullptr, + MI(_tile_table_fruit_plantation, {}, 225, 0xBFFFFFFF, 0, 0, 2, 0, 0, 0, 4, 0, 86, IT_FOOD_PROCESS, IT_INVALID, IT_INVALID, CHECK_PLANTATION, MCT_LIVESTOCK_FRUIT, 10, CT_INVALID, 0, 15, @@ -1347,7 +1347,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_FRUIT_PLANTATION, STR_NEWS_INDUSTRY_PLANTED, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM), - MI(_tile_table_rubber_plantation, 0, nullptr, + MI(_tile_table_rubber_plantation, {}, 218, 0xBFFFFFFF, 0, 0, 3, 0, 0, 0, 4, 0, 39, IT_FACTORY_2, IT_INVALID, IT_INVALID, CHECK_PLANTATION, CT_RUBBER, 10, CT_INVALID, 0, 15, @@ -1357,7 +1357,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_RUBBER_PLANTATION, STR_NEWS_INDUSTRY_PLANTED, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM), - MI(_tile_table_water_supply, 0, nullptr, + MI(_tile_table_water_supply, {}, 199, 0xB3333333, 0, 0, 3, 0, 0, 0, 4, 0, 37, IT_WATER_TOWER, IT_INVALID, IT_INVALID, CHECK_WATER, CT_WATER, 12, CT_INVALID, 0, 5, @@ -1367,7 +1367,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_WATER_SUPPLY, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_water_tower, 0, nullptr, + MI(_tile_table_water_tower, {}, 115, 0xFFFFFFFF, 0, 0, 4, 0, 0, 0, 8, 0, 208, IT_WATER_SUPPLY, IT_INVALID, IT_INVALID, CHECK_WATER, CT_INVALID, 0, CT_INVALID, 0, 5, @@ -1377,7 +1377,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_WATER_TOWER, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_factory2, 1, _factory_sounds, + MI(_tile_table_factory2, _factory_sounds, 208, 0xFFFFFFFF, 0, 0, 2, 0, 0, 0, 4, 0, 174, IT_RUBBER_PLANTATION, IT_COPPER_MINE, IT_LUMBER_MILL, CHECK_PLANTATION, CT_GOODS, 0, CT_INVALID, 0, 5, @@ -1387,7 +1387,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_FACTORY_2, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_farm2, 0, nullptr, + MI(_tile_table_farm2, {}, 250, 0xD9999999, 0, 0, 1, 0, 0, 0, 2, 0, 48, IT_FOOD_PROCESS, IT_INVALID, IT_INVALID, CHECK_PLANTATION, MCT_GRAIN_WHEAT_MAIZE, 11, CT_INVALID, 0, 5, @@ -1397,7 +1397,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_FARM_2, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM), - MI(_tile_table_lumber_mill, 0, nullptr, + MI(_tile_table_lumber_mill, {}, 135, 0xFFFFFFFF, 0, 0, 0, 0, 0, 0, 0, 0, 194, IT_FACTORY_2, IT_INVALID, IT_INVALID, CHECK_LUMBERMILL, CT_WOOD, 0, CT_INVALID, 0, 5, @@ -1407,7 +1407,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_LUMBER_MILL, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_LACK_OF_TREES, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_cotton_candy, 0, nullptr, + MI(_tile_table_cotton_candy, {}, 195, 0xBFFFFFFF, 0, 0, 0, 3, 0, 0, 0, 5, 48, IT_CANDY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_COTTON_CANDY, 13, CT_INVALID, 0, 30, @@ -1417,7 +1417,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_COTTON_CANDY_FOREST, STR_NEWS_INDUSTRY_PLANTED, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_candy_factory, 0, nullptr, + MI(_tile_table_candy_factory, {}, 206, 0xFFFFFFFF, 0, 0, 0, 3, 0, 0, 0, 5, 174, IT_COTTON_CANDY, IT_TOFFEE_QUARRY, IT_SUGAR_MINE, CHECK_NOTHING, CT_CANDY, 0, CT_INVALID, 0, 5, @@ -1427,7 +1427,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_CANDY_FACTORY, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_battery_farm, 0, nullptr, + MI(_tile_table_battery_farm, {}, 187, 0xB3333333, 0, 0, 0, 3, 0, 0, 0, 4, 39, IT_TOY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_BATTERIES, 11, CT_INVALID, 0, 30, @@ -1437,7 +1437,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_BATTERY_FARM, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM), - MI(_tile_table_cola_wells, 0, nullptr, + MI(_tile_table_cola_wells, {}, 193, 0x99999999, 0, 0, 0, 3, 0, 0, 0, 5, 55, IT_FIZZY_DRINK_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_COLA, 12, CT_INVALID, 0, 5, @@ -1447,7 +1447,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_COLA_WELLS, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_toy_shop, 0, nullptr, + MI(_tile_table_toy_shop, {}, 133, 0xFFFFFFFF, 0, 0, 0, 3, 0, 0, 0, 4, 208, IT_TOY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_INVALID, 0, CT_INVALID, 0, 5, @@ -1457,7 +1457,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_TOY_SHOP, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_toy_factory, 0, nullptr, + MI(_tile_table_toy_factory, {}, 163, 0xFFFFFFFF, 0, 0, 0, 3, 0, 0, 0, 5, 10, IT_PLASTIC_FOUNTAINS, IT_BATTERY_FARM, IT_TOY_SHOP, CHECK_NOTHING, CT_TOYS, 0, CT_INVALID, 0, 5, @@ -1467,7 +1467,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_TOY_FACTORY, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_plastic_fountain, 1, _plastic_mine_sounds, + MI(_tile_table_plastic_fountain, _plastic_mine_sounds, 192, 0xA6666666, 0, 0, 0, 3, 0, 0, 0, 5, 37, IT_TOY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_PLASTIC, 14, CT_INVALID, 0, 5, @@ -1477,7 +1477,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_PLASTIC_FOUNTAINS, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_fizzy_drink, 0, nullptr, + MI(_tile_table_fizzy_drink, {}, 177, 0xFFFFFFFF, 0, 0, 0, 3, 0, 0, 0, 4, 184, IT_COLA_WELLS, IT_BUBBLE_GENERATOR, IT_INVALID, CHECK_NOTHING, CT_FIZZY_DRINKS, 0, CT_INVALID, 0, 5, @@ -1487,7 +1487,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_FIZZY_DRINK_FACTORY, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_bubble_generator, 0, nullptr, + MI(_tile_table_bubble_generator, {}, 203, 0xB3333333, 0, 0, 0, 3, 0, 0, 0, 5, 152, IT_FIZZY_DRINK_FACTORY, IT_INVALID, IT_INVALID, CHECK_BUBBLEGEN, CT_BUBBLES, 13, CT_INVALID, 0, 5, @@ -1497,7 +1497,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_BUBBLE_GENERATOR, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_toffee_quarry, 0, nullptr, + MI(_tile_table_toffee_quarry, {}, 213, 0xCCCCCCCC, 0, 0, 0, 3, 0, 0, 0, 5, 194, IT_CANDY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_TOFFEE, 10, CT_INVALID, 0, 5, @@ -1507,7 +1507,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { STR_INDUSTRY_NAME_TOFFEE_QUARRY, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_sugar_mine, 0, nullptr, + MI(_tile_table_sugar_mine, {}, 210, 0xBFFFFFFF, 0, 0, 0, 2, 0, 0, 0, 4, 15, IT_CANDY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_SUGAR, 11, CT_INVALID, 0, 5, From 9647fe1d05866c0e868ee7ad94497f75acd98832 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 20 Apr 2024 13:53:42 +0100 Subject: [PATCH 440/695] Change: [Linkgraph] Improve distance scaling algorithm in demand scaler Improve scaling at values other than 0% and 100% Fix erratic scaling and increase effect size at large setting values --- src/linkgraph/demands.cpp | 36 +++++++++++++++++++++++------------- src/linkgraph/demands.h | 6 +++--- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/linkgraph/demands.cpp b/src/linkgraph/demands.cpp index b164f46ae6..851d82f82a 100644 --- a/src/linkgraph/demands.cpp +++ b/src/linkgraph/demands.cpp @@ -2,6 +2,7 @@ #include "../stdafx.h" #include "demands.h" +#include "../core/math_func.hpp" #include #include "../safeguards.h" @@ -207,23 +208,26 @@ void DemandCalculator::CalcDemand(LinkGraphJob &job, Tscaler scaler) int32_t supply = scaler.EffectiveSupply(job[from_id], job[to_id]); assert(supply > 0); - /* Scale the distance by mod_dist around max_distance */ - int32_t distance = this->max_distance - (this->max_distance - - (int32_t)DistanceMaxPlusManhattan(job[from_id].base.xy, job[to_id].base.xy)) * - this->mod_dist / 100; + constexpr int32_t divisor_scale = 16; + + int32_t scaled_distance = this->base_distance; + if (this->mod_dist > 0) { + const int32_t distance = DistanceMaxPlusManhattan(job[from_id].base.xy, job[to_id].base.xy); + /* Scale distance around base_distance by (mod_dist * (100 / 1024)). + * mod_dist may be > 1024, so clamp result to be non-negative */ + scaled_distance = std::max(0, this->base_distance + (((distance - this->base_distance) * this->mod_dist) / 1024)); + } /* Scale the accuracy by distance around accuracy / 2 */ - int32_t divisor = this->accuracy * (this->mod_dist - 50) / 100 + - this->accuracy * distance / this->max_distance + 1; - - assert(divisor > 0); + const int32_t divisor = divisor_scale + ((this->accuracy * scaled_distance * divisor_scale) / (this->base_distance * 2)); + assert(divisor >= divisor_scale); uint demand_forw = 0; - if (divisor <= supply) { + if (divisor <= (supply * divisor_scale)) { /* At first only distribute demand if * effective supply / accuracy divisor >= 1 * Others are too small or too far away to be considered. */ - demand_forw = supply / divisor; + demand_forw = (supply * divisor_scale) / divisor; } else if (++chance > this->accuracy * num_demands * num_supplies) { /* After some trying, if there is still supply left, distribute * demand also to other nodes. */ @@ -256,7 +260,7 @@ void DemandCalculator::CalcDemand(LinkGraphJob &job, Tscaler scaler) * @param job Job to calculate the demands for. */ DemandCalculator::DemandCalculator(LinkGraphJob &job) : - max_distance(DistanceMaxPlusManhattan(TileXY(0,0), TileXY(Map::MaxX(), Map::MaxY()))) + base_distance(IntSqrt(DistanceMaxPlusManhattan(TileXY(0,0), TileXY(Map::MaxX(), Map::MaxY())))) { const LinkGraphSettings &settings = job.Settings(); CargoID cargo = job.Cargo(); @@ -264,9 +268,15 @@ DemandCalculator::DemandCalculator(LinkGraphJob &job) : this->accuracy = settings.accuracy; this->mod_dist = settings.demand_distance; if (this->mod_dist > 100) { - /* Increase effect of mod_dist > 100 */ + /* Increase effect of mod_dist > 100. + * Quadratic: + * 100 --> 100 + * 150 --> 308 + * 200 --> 933 + * 255 --> 2102 + */ int over100 = this->mod_dist - 100; - this->mod_dist = 100 + over100 * over100; + this->mod_dist = 100 + ((over100 * over100) / 12); } switch (settings.GetDistributionType(cargo)) { diff --git a/src/linkgraph/demands.h b/src/linkgraph/demands.h index 7de853a674..52dd5cb097 100644 --- a/src/linkgraph/demands.h +++ b/src/linkgraph/demands.h @@ -14,9 +14,9 @@ public: DemandCalculator(LinkGraphJob &job); private: - int32_t max_distance; ///< Maximum distance possible on the map. - int32_t mod_dist; ///< Distance modifier, determines how much demands decrease with distance. - int32_t accuracy; ///< Accuracy of the calculation. + int32_t base_distance; ///< Base distance for scaling purposes. + int32_t mod_dist; ///< Distance modifier, determines how much demands decrease with distance. + int32_t accuracy; ///< Accuracy of the calculation. template void CalcDemand(LinkGraphJob &job, Tscaler scaler); From 2559bdfa6f65e6a44bb1f4fd72ab9c5eb42b09c6 Mon Sep 17 00:00:00 2001 From: Fen <48841404+infinifen@users.noreply.github.com> Date: Wed, 1 May 2024 23:10:01 +0200 Subject: [PATCH 441/695] Fix 2d27e8e: Update numpad keycodes for SDL2, making it usable (#12596) * Fix 2d27e8e: Update numpad keycodes for SDL2, making it usable * Cleanup: List sdl2 numpad mappings individually --- src/video/sdl2_v.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index 31d7411c44..2fb0654ee5 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -282,7 +282,16 @@ static const SDLVkMapping _vk_mapping[] = { AM_UP(SDLK_F1, SDLK_F12, WKC_F1, WKC_F12), /* Numeric part. */ - AM(SDLK_KP_0, SDLK_KP_9, '0', '9'), + AS(SDLK_KP_1, '1'), + AS(SDLK_KP_2, '2'), + AS(SDLK_KP_3, '3'), + AS(SDLK_KP_4, '4'), + AS(SDLK_KP_5, '5'), + AS(SDLK_KP_6, '6'), + AS(SDLK_KP_7, '7'), + AS(SDLK_KP_8, '8'), + AS(SDLK_KP_9, '9'), + AS(SDLK_KP_0, '0'), AS(SDLK_KP_DIVIDE, WKC_NUM_DIV), AS(SDLK_KP_MULTIPLY, WKC_NUM_MUL), AS(SDLK_KP_MINUS, WKC_NUM_MINUS), From 65c9df49d9e9843709b517527376b53597159cb3 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 2 May 2024 04:41:51 +0000 Subject: [PATCH 442/695] Update: Translations from eints chinese (simplified): 8 changes by XiaoJi-Game catalan: 3 changes by J0anJosep --- src/lang/catalan.txt | 3 +++ src/lang/simplified_chinese.txt | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 8f99fc6e6c..6980aa8e0a 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1834,6 +1834,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Estableix l'int STR_CONFIG_SETTING_SERVINT_SHIPS :Interval per defecte de servei per als vaixells: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Estableix l'interval de revisió predeterminat pels vaixells que es comprin, si no hi ha un interval de revisió explícit pel vehicle. ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}di{P 0 a es} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}minut{P 0 "" s} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Desactivat diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index a1577817f6..fc99513c23 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -3394,8 +3394,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}确定 STR_GENERATION_PROGRESS :{WHITE}已完成 {NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}地图生成 +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}景观生成 STR_GENERATION_RIVER_GENERATION :{BLACK}生成河流 STR_GENERATION_CLEARING_TILES :{BLACK}生成岩石地貌 +STR_GENERATION_TOWN_GENERATION :{BLACK}城镇生成 +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}工业生成 STR_GENERATION_OBJECT_GENERATION :{BLACK}生成固定设施 STR_GENERATION_TREE_GENERATION :{BLACK}生成树木 STR_GENERATION_SETTINGUP_GAME :{BLACK}设置游戏 @@ -5284,6 +5287,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}请改 STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}暂时沒有可用的载具 STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}在{DATE_SHORT}后开始新游戏,或使用一款能提供早期载具的NewGRF +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}没有可用的城镇道路类型 +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}请改动您的 NewGRF 设置 +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}目前没有可用的城镇道路类型 +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}在 {DATE_SHORT} 后开始新游戏,或使用一款能提供早期城镇可建造的道路类型的NewGRF # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}不能让列车冒险通过信号... @@ -5835,6 +5842,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} From cf96d49ced540e502cc7d2ccb3e3af7dc7fb2ae3 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 2 May 2024 12:37:54 +0100 Subject: [PATCH 443/695] Codechange: Use vector for airport tile layouts. (#12607) Simplify AirportSpec data by storing layout information together in a vector, instead of separate arrays. This removes manual memory management and separate count members. The default layouts will be copied instead of always referring to the originals. --- src/airport_gui.cpp | 12 +-- src/newgrf.cpp | 161 ++++++++++-------------------- src/newgrf_airport.cpp | 4 +- src/newgrf_airport.h | 12 ++- src/script/api/script_airport.cpp | 6 +- src/station_base.h | 25 ++--- src/station_cmd.cpp | 16 +-- src/table/airport_defaults.h | 70 ++++++------- 8 files changed, 122 insertions(+), 184 deletions(-) diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index 2d5378e72f..c592d8c9cf 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -277,7 +277,7 @@ public: const AirportSpec *as = ac->GetSpec(_selected_airport_index); if (as->IsAvailable()) { /* Ensure the airport layout is valid. */ - _selected_airport_layout = Clamp(_selected_airport_layout, 0, as->num_table - 1); + _selected_airport_layout = Clamp(_selected_airport_layout, 0, static_cast(as->layouts.size() - 1)); selectFirstAirport = false; this->UpdateSelectSize(); } @@ -306,7 +306,7 @@ public: StringID string = GetAirportTextCallback(as, _selected_airport_layout, CBID_AIRPORT_LAYOUT_NAME); if (string != STR_UNDEFINED) { SetDParam(0, string); - } else if (as->num_table > 1) { + } else if (as->layouts.size() > 1) { SetDParam(0, STR_STATION_BUILD_AIRPORT_LAYOUT_NAME); SetDParam(1, _selected_airport_layout + 1); } @@ -348,7 +348,7 @@ public: for (int i = 0; i < NUM_AIRPORTS; i++) { const AirportSpec *as = AirportSpec::Get(i); if (!as->enabled) continue; - for (uint8_t layout = 0; layout < as->num_table; layout++) { + for (uint8_t layout = 0; layout < static_cast(as->layouts.size()); layout++) { SpriteID sprite = GetCustomAirportSprite(as, layout); if (sprite != 0) { Dimension d = GetSpriteSize(sprite); @@ -364,7 +364,7 @@ public: for (int i = NEW_AIRPORT_OFFSET; i < NUM_AIRPORTS; i++) { const AirportSpec *as = AirportSpec::Get(i); if (!as->enabled) continue; - for (uint8_t layout = 0; layout < as->num_table; layout++) { + for (uint8_t layout = 0; layout < static_cast(as->layouts.size()); layout++) { StringID string = GetAirportTextCallback(as, layout, CBID_AIRPORT_ADDITIONAL_TEXT); if (string == STR_UNDEFINED) continue; @@ -474,14 +474,14 @@ public: const AirportSpec *as = AirportClass::Get(_selected_airport_class)->GetSpec(_selected_airport_index); int w = as->size_x; int h = as->size_y; - Direction rotation = as->rotation[_selected_airport_layout]; + Direction rotation = as->layouts[_selected_airport_layout].rotation; if (rotation == DIR_E || rotation == DIR_W) Swap(w, h); SetTileSelectSize(w, h); this->preview_sprite = GetCustomAirportSprite(as, _selected_airport_layout); this->SetWidgetDisabledState(WID_AP_LAYOUT_DECREASE, _selected_airport_layout == 0); - this->SetWidgetDisabledState(WID_AP_LAYOUT_INCREASE, _selected_airport_layout + 1 >= as->num_table); + this->SetWidgetDisabledState(WID_AP_LAYOUT_INCREASE, _selected_airport_layout + 1U >= as->layouts.size()); int rad = _settings_game.station.modified_catchment ? as->catchment : (uint)CA_UNMODIFIED; if (_settings_client.gui.station_show_coverage) SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad); diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 5d9cf6fa57..479552a880 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -3861,32 +3861,6 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, return ret; } -/** - * Create a copy of the tile table so it can be freed later - * without problems. - * @param as The AirportSpec to copy the arrays of. - */ -static void DuplicateTileTable(AirportSpec *as) -{ - AirportTileTable **table_list = MallocT(as->num_table); - for (int i = 0; i < as->num_table; i++) { - uint num_tiles = 1; - const AirportTileTable *it = as->table[0]; - do { - num_tiles++; - } while ((++it)->ti.x != -0x80); - table_list[i] = MallocT(num_tiles); - MemCpyT(table_list[i], as->table[i], num_tiles); - } - as->table = table_list; - HangarTileTable *depot_table = MallocT(as->nof_depots); - MemCpyT(depot_table, as->depot_table, as->nof_depots); - as->depot_table = depot_table; - Direction *rotation = MallocT(as->num_table); - MemCpyT(rotation, as->rotation, as->num_table); - as->rotation = rotation; -} - /** * Define properties for airports * @param airport Local ID of the airport. @@ -3942,89 +3916,68 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B as->grf_prop.grffile = _cur.grffile; /* override the default airport */ _airport_mngr.Add(airport + i, _cur.grffile->grfid, subs_id); - /* Create a copy of the original tiletable so it can be freed later. */ - DuplicateTileTable(as); } break; } case 0x0A: { // Set airport layout - uint8_t old_num_table = as->num_table; - free(as->rotation); - as->num_table = buf->ReadByte(); // Number of layaouts - as->rotation = MallocT(as->num_table); - uint32_t defsize = buf->ReadDWord(); // Total size of the definition - AirportTileTable **tile_table = CallocT(as->num_table); // Table with tiles to compose the airport - AirportTileTable *att = CallocT(defsize); // Temporary array to read the tile layouts from the GRF - int size; - const AirportTileTable *copy_from; - try { - for (uint8_t j = 0; j < as->num_table; j++) { - const_cast(as->rotation[j]) = (Direction)buf->ReadByte(); - for (int k = 0;; k++) { - att[k].ti.x = buf->ReadByte(); // Offsets from northermost tile - att[k].ti.y = buf->ReadByte(); + uint8_t num_layouts = buf->ReadByte(); + buf->ReadDWord(); // Total size of definition, unneeded. + uint8_t size_x = 0; + uint8_t size_y = 0; - if (att[k].ti.x == 0 && att[k].ti.y == 0x80) { - /* Not the same terminator. The one we are using is rather - * x = -80, y = 0 . So, adjust it. */ - att[k].ti.x = -0x80; - att[k].ti.y = 0; - att[k].gfx = 0; + std::vector layouts; + layouts.reserve(num_layouts); - size = k + 1; - copy_from = att; - break; - } + for (uint8_t j = 0; j != num_layouts; ++j) { + auto &layout = layouts.emplace_back(); + layout.rotation = static_cast(buf->ReadByte() & 6); // Rotation can only be DIR_NORTH, DIR_EAST, DIR_SOUTH or DIR_WEST. - att[k].gfx = buf->ReadByte(); - - if (att[k].gfx == 0xFE) { - /* Use a new tile from this GRF */ - int local_tile_id = buf->ReadWord(); - - /* Read the ID from the _airporttile_mngr. */ - uint16_t tempid = _airporttile_mngr.GetID(local_tile_id, _cur.grffile->grfid); - - if (tempid == INVALID_AIRPORTTILE) { - GrfMsg(2, "AirportChangeInfo: Attempt to use airport tile {} with airport id {}, not yet defined. Ignoring.", local_tile_id, airport + i); - } else { - /* Declared as been valid, can be used */ - att[k].gfx = tempid; - } - } else if (att[k].gfx == 0xFF) { - att[k].ti.x = (int8_t)GB(att[k].ti.x, 0, 8); - att[k].ti.y = (int8_t)GB(att[k].ti.y, 0, 8); - } - - if (as->rotation[j] == DIR_E || as->rotation[j] == DIR_W) { - as->size_x = std::max(as->size_x, att[k].ti.y + 1); - as->size_y = std::max(as->size_y, att[k].ti.x + 1); - } else { - as->size_x = std::max(as->size_x, att[k].ti.x + 1); - as->size_y = std::max(as->size_y, att[k].ti.y + 1); - } + for (;;) { + auto &tile = layout.tiles.emplace_back(); + tile.ti.x = buf->ReadByte(); + tile.ti.y = buf->ReadByte(); + if (tile.ti.x == 0 && tile.ti.y == 0x80) { + /* Convert terminator to our own. */ + tile.ti.x = -0x80; + tile.ti.y = 0; + tile.gfx = 0; + break; + } + + tile.gfx = buf->ReadByte(); + + if (tile.gfx == 0xFE) { + /* Use a new tile from this GRF */ + int local_tile_id = buf->ReadWord(); + + /* Read the ID from the _airporttile_mngr. */ + uint16_t tempid = _airporttile_mngr.GetID(local_tile_id, _cur.grffile->grfid); + + if (tempid == INVALID_AIRPORTTILE) { + GrfMsg(2, "AirportChangeInfo: Attempt to use airport tile {} with airport id {}, not yet defined. Ignoring.", local_tile_id, airport + i); + } else { + /* Declared as been valid, can be used */ + tile.gfx = tempid; + } + } else if (tile.gfx == 0xFF) { + tile.ti.x = static_cast(GB(tile.ti.x, 0, 8)); + tile.ti.y = static_cast(GB(tile.ti.y, 0, 8)); + } + + /* Determine largest size. */ + if (layout.rotation == DIR_E || layout.rotation == DIR_W) { + size_x = std::max(size_x, tile.ti.y + 1); + size_y = std::max(size_y, tile.ti.x + 1); + } else { + size_x = std::max(size_x, tile.ti.x + 1); + size_y = std::max(size_y, tile.ti.y + 1); } - tile_table[j] = CallocT(size); - memcpy(tile_table[j], copy_from, sizeof(*copy_from) * size); } - /* Free old layouts in the airport spec */ - for (int j = 0; j < old_num_table; j++) { - /* remove the individual layouts */ - free(as->table[j]); - } - free(as->table); - /* Install final layout construction in the airport spec */ - as->table = tile_table; - free(att); - } catch (...) { - for (int i = 0; i < as->num_table; i++) { - free(tile_table[i]); - } - free(tile_table); - free(att); - throw; } + as->layouts = std::move(layouts); + as->size_x = size_x; + as->size_y = size_y; break; } @@ -8726,18 +8679,6 @@ static void ResetCustomHouses() static void ResetCustomAirports() { for (GRFFile * const file : _grf_files) { - for (auto &as : file->airportspec) { - if (as != nullptr) { - /* We need to remove the tiles layouts */ - for (int j = 0; j < as->num_table; j++) { - /* remove the individual layouts */ - free(as->table[j]); - } - free(as->table); - free(as->depot_table); - free(as->rotation); - } - } file->airportspec.clear(); file->airtspec.clear(); } diff --git a/src/newgrf_airport.cpp b/src/newgrf_airport.cpp index b50246bbe7..dca77bb3c7 100644 --- a/src/newgrf_airport.cpp +++ b/src/newgrf_airport.cpp @@ -95,11 +95,11 @@ bool AirportSpec::IsAvailable() const */ bool AirportSpec::IsWithinMapBounds(uint8_t table, TileIndex tile) const { - if (table >= this->num_table) return false; + if (table >= this->layouts.size()) return false; uint8_t w = this->size_x; uint8_t h = this->size_y; - if (this->rotation[table] == DIR_E || this->rotation[table] == DIR_W) Swap(w, h); + if (this->layouts[table].rotation == DIR_E || this->layouts[table].rotation == DIR_W) Swap(w, h); return TileX(tile) + w < Map::SizeX() && TileY(tile) + h < Map::SizeY(); diff --git a/src/newgrf_airport.h b/src/newgrf_airport.h index 9fb5348c0a..057ae346fc 100644 --- a/src/newgrf_airport.h +++ b/src/newgrf_airport.h @@ -94,16 +94,18 @@ struct HangarTileTable { uint8_t hangar_num; ///< The hangar to which this tile belongs. }; +struct AirportTileLayout { + std::vector tiles; ///< List of all tiles in this layout. + Direction rotation; ///< The rotation of this layout. +}; + /** * Defines the data structure for an airport. */ struct AirportSpec { const struct AirportFTAClass *fsm; ///< the finite statemachine for the default airports - const AirportTileTable * const *table; ///< list of the tiles composing the airport - const Direction *rotation; ///< the rotation of each tiletable - uint8_t num_table; ///< number of elements in the table - const HangarTileTable *depot_table; ///< gives the position of the depots on the airports - uint8_t nof_depots; ///< the number of hangar tiles in this airport + std::vector layouts; ///< List of layouts composing the airport. + std::span depots; ///< Position of the depots on the airports. uint8_t size_x; ///< size of airport in x direction uint8_t size_y; ///< size of airport in y direction uint8_t noise_level; ///< noise that this airport generates diff --git a/src/script/api/script_airport.cpp b/src/script/api/script_airport.cpp index 39fbee2e60..11817485ce 100644 --- a/src/script/api/script_airport.cpp +++ b/src/script/api/script_airport.cpp @@ -138,7 +138,8 @@ if (_settings_game.economy.station_noise_level) { uint dist; - AirportGetNearestTown(as, as->rotation[0], tile, AirportTileTableIterator(as->table[0], tile), dist); + const auto &layout = as->layouts[0]; + AirportGetNearestTown(as, layout.rotation, tile, AirportTileTableIterator(layout.tiles.data(), tile), dist); return GetAirportNoiseLevelForDistance(as, dist); } @@ -154,7 +155,8 @@ if (!as->IsWithinMapBounds(0, tile)) return INVALID_TOWN; uint dist; - return AirportGetNearestTown(as, as->rotation[0], tile, AirportTileTableIterator(as->table[0], tile), dist)->index; + const auto &layout = as->layouts[0]; + return AirportGetNearestTown(as, layout.rotation, tile, AirportTileTableIterator(layout.tiles.data(), tile), dist)->index; } /* static */ SQInteger ScriptAirport::GetMaintenanceCostFactor(AirportType type) diff --git a/src/station_base.h b/src/station_base.h index 12ed87355a..5b73de95ef 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -322,7 +322,7 @@ struct Airport : public TileArea { /** Check if this airport has at least one hangar. */ inline bool HasHangar() const { - return this->GetSpec()->nof_depots > 0; + return !this->GetSpec()->depots.empty(); } /** @@ -357,10 +357,9 @@ struct Airport : public TileArea { */ inline TileIndex GetHangarTile(uint hangar_num) const { - const AirportSpec *as = this->GetSpec(); - for (uint i = 0; i < as->nof_depots; i++) { - if (as->depot_table[i].hangar_num == hangar_num) { - return this->GetRotatedTileFromOffset(as->depot_table[i].ti); + for (const auto &depot : this->GetSpec()->depots) { + if (depot.hangar_num == hangar_num) { + return this->GetRotatedTileFromOffset(depot.ti); } } NOT_REACHED(); @@ -376,7 +375,7 @@ struct Airport : public TileArea { { const AirportSpec *as = this->GetSpec(); const HangarTileTable *htt = GetHangarDataByTile(tile); - return ChangeDir(htt->dir, DirDifference(this->rotation, as->rotation[0])); + return ChangeDir(htt->dir, DirDifference(this->rotation, as->layouts[0].rotation)); } /** @@ -396,11 +395,10 @@ struct Airport : public TileArea { { uint num = 0; uint counted = 0; - const AirportSpec *as = this->GetSpec(); - for (uint i = 0; i < as->nof_depots; i++) { - if (!HasBit(counted, as->depot_table[i].hangar_num)) { + for (const auto &depot : this->GetSpec()->depots) { + if (!HasBit(counted, depot.hangar_num)) { num++; - SetBit(counted, as->depot_table[i].hangar_num); + SetBit(counted, depot.hangar_num); } } return num; @@ -415,10 +413,9 @@ private: */ inline const HangarTileTable *GetHangarDataByTile(TileIndex tile) const { - const AirportSpec *as = this->GetSpec(); - for (uint i = 0; i < as->nof_depots; i++) { - if (this->GetRotatedTileFromOffset(as->depot_table[i].ti) == tile) { - return as->depot_table + i; + for (const auto &depot : this->GetSpec()->depots) { + if (this->GetRotatedTileFromOffset(depot.ti) == tile) { + return &depot; } } NOT_REACHED(); diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 615e680723..de949f9a2d 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -98,8 +98,8 @@ bool IsHangar(Tile t) const Station *st = Station::GetByTile(t); const AirportSpec *as = st->airport.GetSpec(); - for (uint i = 0; i < as->nof_depots; i++) { - if (st->airport.GetHangarTile(i) == TileIndex(t)) return true; + for (const auto &depot : as->depots) { + if (st->airport.GetRotatedTileFromOffset(depot.ti) == TileIndex(t)) return true; } return false; @@ -2414,10 +2414,10 @@ CommandCost CmdBuildAirport(DoCommandFlag flags, TileIndex tile, uint8_t airport /* Check if a valid, buildable airport was chosen for construction */ const AirportSpec *as = AirportSpec::Get(airport_type); - if (!as->IsAvailable() || layout >= as->num_table) return CMD_ERROR; + if (!as->IsAvailable() || layout >= as->layouts.size()) return CMD_ERROR; if (!as->IsWithinMapBounds(layout, tile)) return CMD_ERROR; - Direction rotation = as->rotation[layout]; + Direction rotation = as->layouts[layout].rotation; int w = as->size_x; int h = as->size_y; if (rotation == DIR_E || rotation == DIR_W) Swap(w, h); @@ -2427,7 +2427,7 @@ CommandCost CmdBuildAirport(DoCommandFlag flags, TileIndex tile, uint8_t airport return_cmd_error(STR_ERROR_STATION_TOO_SPREAD_OUT); } - AirportTileTableIterator tile_iter(as->table[layout], tile); + AirportTileTableIterator tile_iter(as->layouts[layout].tiles.data(), tile); CommandCost cost = CheckFlatLandAirport(tile_iter, flags); if (cost.Failed()) return cost; @@ -2477,7 +2477,7 @@ CommandCost CmdBuildAirport(DoCommandFlag flags, TileIndex tile, uint8_t airport return_cmd_error(STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT); } - for (AirportTileTableIterator iter(as->table[layout], tile); iter != INVALID_TILE; ++iter) { + for (AirportTileTableIterator iter(as->layouts[layout].tiles.data(), tile); iter != INVALID_TILE; ++iter) { cost.AddCost(_price[PR_BUILD_STATION_AIRPORT]); } @@ -2493,7 +2493,7 @@ CommandCost CmdBuildAirport(DoCommandFlag flags, TileIndex tile, uint8_t airport st->rect.BeforeAddRect(tile, w, h, StationRect::ADD_TRY); - for (AirportTileTableIterator iter(as->table[layout], tile); iter != INVALID_TILE; ++iter) { + for (AirportTileTableIterator iter(as->layouts[layout].tiles.data(), tile); iter != INVALID_TILE; ++iter) { Tile t(iter); MakeAirport(t, st->owner, st->index, iter.GetStationGfx(), WATER_CLASS_INVALID); SetStationTileRandomBits(t, GB(Random(), 0, 4)); @@ -2503,7 +2503,7 @@ CommandCost CmdBuildAirport(DoCommandFlag flags, TileIndex tile, uint8_t airport } /* Only call the animation trigger after all tiles have been built */ - for (AirportTileTableIterator iter(as->table[layout], tile); iter != INVALID_TILE; ++iter) { + for (AirportTileTableIterator iter(as->layouts[layout].tiles.data(), tile); iter != INVALID_TILE; ++iter) { AirportTileAnimationTrigger(st, iter, AAT_BUILT); } diff --git a/src/table/airport_defaults.h b/src/table/airport_defaults.h index 7305779412..d9db0c15b6 100644 --- a/src/table/airport_defaults.h +++ b/src/table/airport_defaults.h @@ -28,7 +28,7 @@ #define MKEND {{-0x80, 0}, 0} /** Tiles for Country Airfield (small) */ -static const AirportTileTable _tile_table_country_0[] = { +static const std::initializer_list _tile_table_country_0 = { MK(0, 0, APT_SMALL_BUILDING_1), MK(1, 0, APT_SMALL_BUILDING_2), MK(2, 0, APT_SMALL_BUILDING_3), @@ -44,12 +44,12 @@ static const AirportTileTable _tile_table_country_0[] = { MKEND }; -static const AirportTileTable * const _tile_table_country[] = { - _tile_table_country_0, +static const std::initializer_list _tile_table_country = { + { _tile_table_country_0, DIR_N }, }; /** Tiles for Commuter Airfield (small) */ -static const AirportTileTable _tile_table_commuter_0[] = { +static const std::initializer_list _tile_table_commuter_0 = { MK(0, 0, APT_TOWER), MK(1, 0, APT_BUILDING_3), MK(2, 0, APT_HELIPAD_2_FENCE_NW), @@ -73,12 +73,12 @@ static const AirportTileTable _tile_table_commuter_0[] = { MKEND }; -static const AirportTileTable * const _tile_table_commuter[] = { - _tile_table_commuter_0, +static const std::initializer_list _tile_table_commuter = { + { _tile_table_commuter_0, DIR_N }, }; /** Tiles for City Airport (large) */ -static const AirportTileTable _tile_table_city_0[] = { +static const std::initializer_list _tile_table_city_0 = { MK(0, 0, APT_BUILDING_1), MK(1, 0, APT_APRON_FENCE_NW), MK(2, 0, APT_STAND_1), @@ -118,12 +118,12 @@ static const AirportTileTable _tile_table_city_0[] = { MKEND }; -static const AirportTileTable * const _tile_table_city[] = { - _tile_table_city_0, +static const std::initializer_list _tile_table_city = { + { _tile_table_city_0, DIR_N }, }; /** Tiles for Metropolitain Airport (large) - 2 runways */ -static const AirportTileTable _tile_table_metropolitan_0[] = { +static const std::initializer_list _tile_table_metropolitan_0 = { MK(0, 0, APT_BUILDING_1), MK(1, 0, APT_APRON_FENCE_NW), MK(2, 0, APT_STAND_1), @@ -163,12 +163,12 @@ static const AirportTileTable _tile_table_metropolitan_0[] = { MKEND }; -static const AirportTileTable * const _tile_table_metropolitan[] = { - _tile_table_metropolitan_0, +static const std::initializer_list _tile_table_metropolitan = { + { _tile_table_metropolitan_0, DIR_N }, }; /** Tiles for International Airport (large) - 2 runways */ -static const AirportTileTable _tile_table_international_0[] = { +static const std::initializer_list _tile_table_international_0 = { MK(0, 0, APT_RUNWAY_END_FENCE_NW), MK(1, 0, APT_RUNWAY_FENCE_NW), MK(2, 0, APT_RUNWAY_FENCE_NW), @@ -221,12 +221,12 @@ static const AirportTileTable _tile_table_international_0[] = { MKEND }; -static const AirportTileTable * const _tile_table_international[] = { - _tile_table_international_0, +static const std::initializer_list _tile_table_international = { + { _tile_table_international_0, DIR_N }, }; /** Tiles for International Airport (large) - 2 runways */ -static const AirportTileTable _tile_table_intercontinental_0[] = { +static const std::initializer_list _tile_table_intercontinental_0 = { MK(0, 0, APT_RADAR_FENCE_NE), MK(1, 0, APT_RUNWAY_END_FENCE_NE_NW), MK(2, 0, APT_RUNWAY_FENCE_NW), @@ -329,22 +329,22 @@ static const AirportTileTable _tile_table_intercontinental_0[] = { MKEND }; -static const AirportTileTable * const _tile_table_intercontinental[] = { - _tile_table_intercontinental_0, +static const std::initializer_list _tile_table_intercontinental = { + { _tile_table_intercontinental_0, DIR_N }, }; /** Tiles for Heliport */ -static const AirportTileTable _tile_table_heliport_0[] = { +static const std::initializer_list _tile_table_heliport_0 = { MK(0, 0, APT_HELIPORT), MKEND }; -static const AirportTileTable * const _tile_table_heliport[] = { - _tile_table_heliport_0, +static const std::initializer_list _tile_table_heliport = { + { _tile_table_heliport_0, DIR_N }, }; /** Tiles for Helidepot */ -static const AirportTileTable _tile_table_helidepot_0[] = { +static const std::initializer_list _tile_table_helidepot_0 = { MK(0, 0, APT_LOW_BUILDING_FENCE_N), MK(1, 0, APT_DEPOT_SE), MK(0, 1, APT_HELIPAD_2_FENCE_NE_SE), @@ -352,12 +352,12 @@ static const AirportTileTable _tile_table_helidepot_0[] = { MKEND }; -static const AirportTileTable * const _tile_table_helidepot[] = { - _tile_table_helidepot_0, +static const std::initializer_list _tile_table_helidepot = { + { _tile_table_helidepot_0, DIR_N }, }; /** Tiles for Helistation */ -static const AirportTileTable _tile_table_helistation_0[] = { +static const std::initializer_list _tile_table_helistation_0 = { MK(0, 0, APT_DEPOT_SE), MK(1, 0, APT_LOW_BUILDING_FENCE_NW), MK(2, 0, APT_HELIPAD_3_FENCE_NW), @@ -369,29 +369,25 @@ static const AirportTileTable _tile_table_helistation_0[] = { MKEND }; -static const AirportTileTable * const _tile_table_helistation[] = { - _tile_table_helistation_0, -}; - -static const Direction _default_airports_rotation[] = { - DIR_N, +static const std::initializer_list _tile_table_helistation = { + { _tile_table_helistation_0, DIR_N }, }; #undef MK #undef MKEND /** General AirportSpec definition. */ -#define AS_GENERIC(fsm, att, rot, att_len, depot_tbl, num_depots, size_x, size_y, noise, catchment, min_year, max_year, maint_cost, ttdpatch_type, class_id, name, preview, enabled) \ - {fsm, att, rot, att_len, depot_tbl, num_depots, size_x, size_y, noise, catchment, min_year, max_year, name, ttdpatch_type, class_id, preview, maint_cost, enabled, GRFFileProps(AT_INVALID)} +#define AS_GENERIC(fsm, layouts, depots, size_x, size_y, noise, catchment, min_year, max_year, maint_cost, ttdpatch_type, class_id, name, preview, enabled) \ + {fsm, layouts, depots, size_x, size_y, noise, catchment, min_year, max_year, name, ttdpatch_type, class_id, preview, maint_cost, enabled, GRFFileProps(AT_INVALID)} /** AirportSpec definition for airports without any depot. */ #define AS_ND(ap_name, size_x, size_y, min_year, max_year, catchment, noise, maint_cost, ttdpatch_type, class_id, name, preview) \ - AS_GENERIC(&_airportfta_##ap_name, _tile_table_##ap_name, _default_airports_rotation, lengthof(_tile_table_##ap_name), nullptr, 0, \ + AS_GENERIC(&_airportfta_##ap_name, _tile_table_##ap_name, {}, \ size_x, size_y, noise, catchment, min_year, max_year, maint_cost, ttdpatch_type, class_id, name, preview, true) /** AirportSpec definition for airports with at least one depot. */ #define AS(ap_name, size_x, size_y, min_year, max_year, catchment, noise, maint_cost, ttdpatch_type, class_id, name, preview) \ - AS_GENERIC(&_airportfta_##ap_name, _tile_table_##ap_name, _default_airports_rotation, lengthof(_tile_table_##ap_name), _airport_depots_##ap_name, lengthof(_airport_depots_##ap_name), \ + AS_GENERIC(&_airportfta_##ap_name, _tile_table_##ap_name, _airport_depots_##ap_name, \ size_x, size_y, noise, catchment, min_year, max_year, maint_cost, ttdpatch_type, class_id, name, preview, true) /* The helidepot and helistation have ATP_TTDP_SMALL because they are at ground level */ @@ -405,12 +401,12 @@ extern const AirportSpec _origin_airport_specs[] = { AS(helidepot, 2, 2, 1976, CalendarTime::MAX_YEAR, 4, 2, 7, ATP_TTDP_SMALL, APC_HELIPORT, STR_AIRPORT_HELIDEPOT, SPR_AIRPORT_PREVIEW_HELIDEPOT), AS(intercontinental, 9, 11, 2002, CalendarTime::MAX_YEAR, 10, 25, 72, ATP_TTDP_LARGE, APC_HUB, STR_AIRPORT_INTERCONTINENTAL, SPR_AIRPORT_PREVIEW_INTERCONTINENTAL), AS(helistation, 4, 2, 1980, CalendarTime::MAX_YEAR, 4, 3, 14, ATP_TTDP_SMALL, APC_HELIPORT, STR_AIRPORT_HELISTATION, SPR_AIRPORT_PREVIEW_HELISTATION), - AS_GENERIC(&_airportfta_oilrig, nullptr, _default_airports_rotation, 0, nullptr, 0, 1, 1, 0, 4, 0, 0, 0, ATP_TTDP_OILRIG, APC_HELIPORT, STR_NULL, 0, false), + AS_GENERIC(&_airportfta_oilrig, {}, {}, 1, 1, 0, 4, 0, 0, 0, ATP_TTDP_OILRIG, APC_HELIPORT, STR_NULL, 0, false), }; static_assert(NEW_AIRPORT_OFFSET == lengthof(_origin_airport_specs)); -const AirportSpec AirportSpec::dummy = AS_GENERIC(&_airportfta_dummy, nullptr, _default_airports_rotation, 0, nullptr, 0, 0, 0, 0, 0, CalendarTime::MIN_YEAR, CalendarTime::MIN_YEAR, 0, ATP_TTDP_LARGE, APC_BEGIN, STR_NULL, 0, false); +const AirportSpec AirportSpec::dummy = AS_GENERIC(&_airportfta_dummy, {}, {}, 0, 0, 0, 0, CalendarTime::MIN_YEAR, CalendarTime::MIN_YEAR, 0, ATP_TTDP_LARGE, APC_BEGIN, STR_NULL, 0, false); #undef AS #undef AS_ND From ef99aa81a3c6386833ed98fe528b2d2fde1193c6 Mon Sep 17 00:00:00 2001 From: Koen Bussemaker Date: Tue, 23 Apr 2024 21:01:48 +0200 Subject: [PATCH 444/695] Codechange: Store validity of water regions in separate vector --- src/pathfinder/water_regions.cpp | 55 +++++++++++++++----------------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/src/pathfinder/water_regions.cpp b/src/pathfinder/water_regions.cpp index e34f3ad47e..d9daf3449f 100644 --- a/src/pathfinder/water_regions.cpp +++ b/src/pathfinder/water_regions.cpp @@ -51,7 +51,6 @@ class WaterRegion private: std::array edge_traversability_bits{}; bool has_cross_region_aqueducts = false; - bool initialized = false; TWaterRegionPatchLabel number_of_patches = 0; // 0 = no water, 1 = one single patch of water, etc... const OrthogonalTileArea tile_area; std::unique_ptr tile_patch_labels; ///< Tile patch labels, this may be nullptr in the following trivial cases: region is invalid, region is only land (0 patches), region is only water (1 patch) @@ -76,14 +75,6 @@ public: OrthogonalTileIterator begin() const { return this->tile_area.begin(); } OrthogonalTileIterator end() const { return this->tile_area.end(); } - bool IsInitialized() const { return this->initialized; } - - void Invalidate() - { - if (!IsInitialized()) Debug(map, 3, "Invalidated water region ({},{})", GetWaterRegionX(this->tile_area.tile), GetWaterRegionY(this->tile_area.tile)); - this->initialized = false; - } - /** * Returns a set of bits indicating whether an edge tile on a particular side is traversable or not. These * values can be used to determine whether a ship can enter/leave the region through a particular edge tile. @@ -182,7 +173,6 @@ public: } this->number_of_patches = highest_assigned_label; - this->initialized = true; if (this->number_of_patches == 0 || (this->number_of_patches == 1 && std::all_of(this->tile_patch_labels->begin(), this->tile_patch_labels->end(), [](TWaterRegionPatchLabel label) { return label == 1; }))) { @@ -191,14 +181,6 @@ public: } } - /** - * Updates the patch labels and other data, but only if the region is not yet initialized. - */ - inline void UpdateIfNotInitialized() - { - if (!this->initialized) ForceUpdate(); - } - void PrintDebugInfo() { Debug(map, 9, "Water region {},{} labels and edge traversability = ...", GetWaterRegionX(tile_area.tile), GetWaterRegionY(tile_area.tile)); @@ -228,6 +210,7 @@ public: }; std::vector _water_regions; +std::vector _is_water_region_valid; TileIndex GetTileIndexFromLocalCoordinate(int region_x, int region_y, int local_x, int local_y) { @@ -250,16 +233,18 @@ TileIndex GetEdgeTileCoordinate(int region_x, int region_y, DiagDirection side, WaterRegion &GetUpdatedWaterRegion(uint16_t region_x, uint16_t region_y) { - WaterRegion &result = _water_regions[GetWaterRegionIndex(region_x, region_y)]; - result.UpdateIfNotInitialized(); - return result; + const int index = GetWaterRegionIndex(region_x, region_y); + auto &water_region = _water_regions[index]; + if (!_is_water_region_valid[index]) { + water_region.ForceUpdate(); + _is_water_region_valid[index] = true; + } + return water_region; } WaterRegion &GetUpdatedWaterRegion(TileIndex tile) { - WaterRegion &result = _water_regions[GetWaterRegionIndex(tile)]; - result.UpdateIfNotInitialized(); - return result; + return GetUpdatedWaterRegion(GetWaterRegionX(tile), GetWaterRegionY(tile)); } /** @@ -316,15 +301,21 @@ WaterRegionPatchDesc GetWaterRegionPatchInfo(TileIndex tile) void InvalidateWaterRegion(TileIndex tile) { if (!IsValidTile(tile)) return; - const int water_region_index = GetWaterRegionIndex(tile); - _water_regions[water_region_index].Invalidate(); + + auto invalidate_region = [](TileIndex tile) { + const int water_region_index = GetWaterRegionIndex(tile); + if (!_is_water_region_valid[water_region_index]) Debug(map, 3, "Invalidated water region ({},{})", GetWaterRegionX(tile), GetWaterRegionY(tile)); + _is_water_region_valid[water_region_index] = false; + }; + + invalidate_region(tile); /* When updating the water region we look into the first tile of adjacent water regions to determine edge * traversability. This means that if we invalidate any region edge tiles we might also change the traversability * of the adjacent region. This code ensures the adjacent regions also get invalidated in such a case. */ for (DiagDirection side = DIAGDIR_BEGIN; side < DIAGDIR_END; side++) { - const int adjacent_region_index = GetWaterRegionIndex(TileAddByDiagDir(tile, side)); - if (adjacent_region_index != water_region_index) _water_regions[adjacent_region_index].Invalidate(); + const TileIndex adjacent_tile = TileAddByDiagDir(tile, side); + if (GetWaterRegionIndex(adjacent_tile) != GetWaterRegionIndex(tile)) invalidate_region(adjacent_tile); } } @@ -409,8 +400,12 @@ void VisitWaterRegionPatchNeighbors(const WaterRegionPatchDesc &water_region_pat */ void AllocateWaterRegions() { + const int number_of_regions = GetWaterRegionMapSizeX() * GetWaterRegionMapSizeY(); + _water_regions.clear(); - _water_regions.reserve(static_cast(GetWaterRegionMapSizeX()) * GetWaterRegionMapSizeY()); + _water_regions.reserve(number_of_regions); + + _is_water_region_valid.resize(number_of_regions, false); Debug(map, 2, "Allocating {} x {} water regions", GetWaterRegionMapSizeX(), GetWaterRegionMapSizeY()); @@ -419,6 +414,8 @@ void AllocateWaterRegions() _water_regions.emplace_back(region_x, region_y); } } + + assert(_is_water_region_valid.size() == _water_regions.size()); } void PrintWaterRegionDebugInfo(TileIndex tile) From c17fa6032b2861ff2f39e1808c13eb0a29b73704 Mon Sep 17 00:00:00 2001 From: James Addison <55152140+jayaddison@users.noreply.github.com> Date: Thu, 2 May 2024 14:13:00 +0100 Subject: [PATCH 445/695] Doc: Add Apache 2.0 licensing info for CheckAtomic.cmake (#12603) --- CMakeLists.txt | 2 +- README.md | 3 + cmake/{ => 3rdparty/llvm}/CheckAtomic.cmake | 8 + cmake/3rdparty/llvm/LICENSE.txt | 279 ++++++++++++++++++++ 4 files changed, 291 insertions(+), 1 deletion(-) rename cmake/{ => 3rdparty/llvm}/CheckAtomic.cmake (90%) create mode 100644 cmake/3rdparty/llvm/LICENSE.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 8569e5ec7b..487eb8520d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -343,7 +343,7 @@ if(NOT OPTION_DEDICATED) endif() endif() -include(CheckAtomic) +include(3rdparty/llvm/CheckAtomic) if(APPLE) link_package(Iconv TARGET Iconv::Iconv) diff --git a/README.md b/README.md index 1943ed6bc3..96a3a6eb93 100644 --- a/README.md +++ b/README.md @@ -212,6 +212,9 @@ See `src/3rdparty/monocypher/LICENSE.md` for the complete license text. The OpenTTD Social Integration API in `src/3rdparty/openttd_social_integration_api` is licensed under the MIT license. See `src/3rdparty/openttd_social_integration_api/LICENSE` for the complete license text. +The atomic datatype support detection in `cmake/3rdparty/llvm/CheckAtomic.cmake` is licensed under the Apache 2.0 license. +See `cmake/3rdparty/llvm/LICENSE.txt` for the complete license text. + ## 4.0 Credits See [CREDITS.md](./CREDITS.md) diff --git a/cmake/CheckAtomic.cmake b/cmake/3rdparty/llvm/CheckAtomic.cmake similarity index 90% rename from cmake/CheckAtomic.cmake rename to cmake/3rdparty/llvm/CheckAtomic.cmake index 990c52c37c..2dc895d75b 100644 --- a/cmake/CheckAtomic.cmake +++ b/cmake/3rdparty/llvm/CheckAtomic.cmake @@ -1,3 +1,11 @@ +# +# This was originally part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +# See (https://llvm.org/)LICENSE.txt for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# +# Modifications have been made to suit building OpenTTD. +# + # atomic builtins are required for threading support. INCLUDE(CheckCXXSourceCompiles) diff --git a/cmake/3rdparty/llvm/LICENSE.txt b/cmake/3rdparty/llvm/LICENSE.txt new file mode 100644 index 0000000000..fa6ac54000 --- /dev/null +++ b/cmake/3rdparty/llvm/LICENSE.txt @@ -0,0 +1,279 @@ +============================================================================== +The LLVM Project is under the Apache License v2.0 with LLVM Exceptions: +============================================================================== + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +---- LLVM Exceptions to the Apache 2.0 License ---- + +As an exception, if, as a result of your compiling your source code, portions +of this Software are embedded into an Object form of such source code, you +may redistribute such embedded portions in such Object form without complying +with the conditions of Sections 4(a), 4(b) and 4(d) of the License. + +In addition, if you combine or link compiled forms of this Software with +software that is licensed under the GPLv2 ("Combined Software") and if a +court of competent jurisdiction determines that the patent provision (Section +3), the indemnity provision (Section 9) or other Section of the License +conflicts with the conditions of the GPLv2, you may retroactively and +prospectively choose to deem waived or otherwise exclude such Section(s) of +the License, but only in their entirety and only with respect to the Combined +Software. + +============================================================================== +Software from third parties included in the LLVM Project: +============================================================================== +The LLVM Project contains third party software which is under different license +terms. All such code will be identified clearly using at least one of two +mechanisms: +1) It will be in a separate directory tree with its own `LICENSE.txt` or + `LICENSE` file at the top containing the specific license and restrictions + which apply to that software, or +2) It will contain specific license and restriction terms at the top of every + file. + +============================================================================== +Legacy LLVM License (https://llvm.org/docs/DeveloperPolicy.html#legacy): +============================================================================== +University of Illinois/NCSA +Open Source License + +Copyright (c) 2003-2019 University of Illinois at Urbana-Champaign. +All rights reserved. + +Developed by: + + LLVM Team + + University of Illinois at Urbana-Champaign + + http://llvm.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal with +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimers. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimers in the + documentation and/or other materials provided with the distribution. + + * Neither the names of the LLVM Team, University of Illinois at + Urbana-Champaign, nor the names of its contributors may be used to + endorse or promote products derived from this Software without specific + prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +SOFTWARE. + From 90029beb4919ea8d74b9d646e643beb7a3e3fcd0 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 2 May 2024 23:19:08 +0100 Subject: [PATCH 446/695] Codechange: Ensure SDLK mappings stay in the expected order. (#12608) Add a constexpr constructor that ensures at compile-time that the source SDLK range matches the target range. --- src/video/sdl2_v.cpp | 24 +++++++++++++++--------- src/video/sdl_v.cpp | 18 ++++++++++++------ 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index 2fb0654ee5..93a74a2b13 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -240,18 +240,24 @@ std::vector VideoDriver_SDL_Base::GetListOfMonitorRefreshRates() struct SDLVkMapping { - SDL_Keycode vk_from; - uint8_t vk_count; - uint8_t map_to; - bool unprintable; + const SDL_Keycode vk_from; + const uint8_t vk_count; + const uint8_t map_to; + const bool unprintable; + + constexpr SDLVkMapping(SDL_Keycode vk_first, SDL_Keycode vk_last, uint8_t map_first, [[maybe_unused]] uint8_t map_last, bool unprintable) + : vk_from(vk_first), vk_count(vk_first - vk_last + 1), map_to(map_first), unprintable(unprintable) + { + assert((vk_last - vk_first) == (map_last - map_first)); + } }; -#define AS(x, z) {x, 1, z, false} -#define AM(x, y, z, w) {x, (uint8_t)(y - x + 1), z, false} -#define AS_UP(x, z) {x, 1, z, true} -#define AM_UP(x, y, z, w) {x, (uint8_t)(y - x + 1), z, true} +#define AS(x, z) {x, x, z, z, false} +#define AM(x, y, z, w) {x, y, z, w, false} +#define AS_UP(x, z) {x, x, z, z, true} +#define AM_UP(x, y, z, w) {x, y, z, w, true} -static const SDLVkMapping _vk_mapping[] = { +static constexpr SDLVkMapping _vk_mapping[] = { /* Pageup stuff + up/down */ AS_UP(SDLK_PAGEUP, WKC_PAGEUP), AS_UP(SDLK_PAGEDOWN, WKC_PAGEDOWN), diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index 3619b61fd2..b40e23574d 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -373,15 +373,21 @@ bool VideoDriver_SDL::ClaimMousePointer() } struct SDLVkMapping { - uint16_t vk_from; - uint8_t vk_count; - uint8_t map_to; + const uint16_t vk_from; + const uint8_t vk_count; + const uint8_t map_to; + + constexpr SDLVkMapping(SDL_Keycode vk_first, SDL_Keycode vk_last, uint8_t map_first, [[maybe_unused]] uint8_t map_last) + : vk_from(vk_first), vk_count(vk_first - vk_last + 1), map_to(map_first) + { + assert((vk_last - vk_first) == (map_last - map_first)); + } }; -#define AS(x, z) {x, 1, z} -#define AM(x, y, z, w) {x, (uint8_t)(y - x + 1), z} +#define AS(x, z) {x, x, z, z, false} +#define AM(x, y, z, w) {x, y, z, w, false} -static const SDLVkMapping _vk_mapping[] = { +static constexpr SDLVkMapping _vk_mapping[] = { /* Pageup stuff + up/down */ AM(SDLK_PAGEUP, SDLK_PAGEDOWN, WKC_PAGEUP, WKC_PAGEDOWN), AS(SDLK_UP, WKC_UP), From e0048d798f9024dcadd984524ab8d7cd141994ed Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 3 May 2024 04:41:54 +0000 Subject: [PATCH 447/695] Update: Translations from eints hungarian: 5 changes by egri-nagy --- src/lang/hungarian.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index f7e80766b8..f4230957f5 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -459,7 +459,7 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}A válla STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Gazdasági épületek listázása, ipari lánc megnyitása, vagy új gazdasági épületek építése STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Vonatlista megnyitása. Ctrl+kattintással válszthatsz a csoport- vagy járműlista között STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Közúti járműlista megnyitása. Ctrl+kattintással válszthatsz a csoport- vagy járműlista között -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Hajóista megnyitása. Ctrl+kattintással válszthatsz a csoport- vagy járműlista között +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Hajólista megnyitása. Ctrl+kattintással válszthatsz a csoport- vagy járműlista között STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Repülőgéplista megnyitása. Ctrl+kattintással válszthatsz a csoport- vagy járműlista között STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Nagyítás STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Kicsinyítés @@ -3455,8 +3455,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Tényle STR_GENERATION_PROGRESS :{WHITE}{NUM}% kész STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Világ létrehozása +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Tájkép generálás STR_GENERATION_RIVER_GENERATION :{BLACK}Folyó generálás STR_GENERATION_CLEARING_TILES :{BLACK}Durva és köves területek generálása +STR_GENERATION_TOWN_GENERATION :{BLACK}Város generálás +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Ipar generálás STR_GENERATION_OBJECT_GENERATION :{BLACK}Mozgathatatlan létesítmények létrehozása STR_GENERATION_TREE_GENERATION :{BLACK}Fák generálása STR_GENERATION_SETTINGUP_GAME :{BLACK}Játék beállítása @@ -3550,6 +3553,7 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Út típus STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF változó 60+x paraméter (hexadecimális) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Sprite elhelyezés: ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Következő sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Továbbhaladás a következő normál spritera, kihagyva bármilyen ál/átszínező/betű spriteokat, a végén folytatva az elsővel STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ugrás a spritehoz From 0b50834f8144a457287f3b0c7869dcc630d6a033 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Thu, 2 May 2024 23:30:09 +0200 Subject: [PATCH 448/695] Fix 2955ff3: CMake atomic check fails due to chosen compiler --- cmake/3rdparty/llvm/CheckAtomic.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmake/3rdparty/llvm/CheckAtomic.cmake b/cmake/3rdparty/llvm/CheckAtomic.cmake index 2dc895d75b..86ab2ab136 100644 --- a/cmake/3rdparty/llvm/CheckAtomic.cmake +++ b/cmake/3rdparty/llvm/CheckAtomic.cmake @@ -56,6 +56,8 @@ else() check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITHOUT_LIB) # If not, check if the library exists, and atomics work with it. if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB) + # check_library_exists requires the C-compiler as the atomic functions are built-in declared. + enable_language(C) check_library_exists(atomic __atomic_fetch_add_4 "" HAVE_LIBATOMIC) if(HAVE_LIBATOMIC) list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic") @@ -77,6 +79,8 @@ else() check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITHOUT_LIB) # If not, check if the library exists, and atomics work with it. if(NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB) + # check_library_exists requires the C-compiler as the atomic functions are built-in declared. + enable_language(C) check_library_exists(atomic __atomic_load_8 "" HAVE_CXX_LIBATOMICS64) if(HAVE_CXX_LIBATOMICS64) list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic") From 8b6661d4862cd43d6e98b2e9811a98c6f01d11b2 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Fri, 3 May 2024 07:44:48 +0200 Subject: [PATCH 449/695] Codefix 90029be: build failure for SDL 1.2 --- src/video/sdl_v.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index b40e23574d..2e069271f6 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -377,15 +377,15 @@ struct SDLVkMapping { const uint8_t vk_count; const uint8_t map_to; - constexpr SDLVkMapping(SDL_Keycode vk_first, SDL_Keycode vk_last, uint8_t map_first, [[maybe_unused]] uint8_t map_last) + constexpr SDLVkMapping(SDLKey vk_first, SDLKey vk_last, uint8_t map_first, [[maybe_unused]] uint8_t map_last) : vk_from(vk_first), vk_count(vk_first - vk_last + 1), map_to(map_first) { assert((vk_last - vk_first) == (map_last - map_first)); } }; -#define AS(x, z) {x, x, z, z, false} -#define AM(x, y, z, w) {x, y, z, w, false} +#define AS(x, z) {x, x, z, z} +#define AM(x, y, z, w) {x, y, z, w} static constexpr SDLVkMapping _vk_mapping[] = { /* Pageup stuff + up/down */ From 9d2efd4c96278d5779820935670586f6b2f4fa95 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 2 May 2024 22:27:17 +0100 Subject: [PATCH 450/695] Codechange: Use callback function to set labels of slider widget marks. Slider widgets can only use a predefined list of values and strings to draw labels. This makes it difficult to vary the display by context. Instead of providing a predefined list as a std::map, use a callback function instead. This function can decide what text to display, and can call SetDParam to dynamically set up strings. --- src/lang/english.txt | 12 ++-------- src/music_gui.cpp | 4 ++-- src/settings_gui.cpp | 56 ++++++++++++++++++-------------------------- src/slider.cpp | 30 +++++++++++++++--------- src/slider_func.h | 3 ++- 5 files changed, 48 insertions(+), 57 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 36fea5c491..df48b08dec 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -956,11 +956,7 @@ STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Sound effects STR_GAME_OPTIONS_MUSIC_VOLUME :Music -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Currency units STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Currency units selection @@ -1058,11 +1054,7 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Check th STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias fonts STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Check this box to anti-alias resizable fonts -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -STR_GAME_OPTIONS_GUI_SCALE_3X :3x -STR_GAME_OPTIONS_GUI_SCALE_4X :4x -STR_GAME_OPTIONS_GUI_SCALE_5X :5x +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Automated survey STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participate in automated survey diff --git a/src/music_gui.cpp b/src/music_gui.cpp index c31bfca711..639f360ce0 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -775,11 +775,11 @@ struct MusicWindow : public Window { } case WID_M_MUSIC_VOL: - DrawSliderWidget(r, 0, INT8_MAX, _settings_client.music.music_vol, {}); + DrawSliderWidget(r, 0, INT8_MAX, 0, _settings_client.music.music_vol, nullptr); break; case WID_M_EFFECT_VOL: - DrawSliderWidget(r, 0, INT8_MAX, _settings_client.music.effect_vol, {}); + DrawSliderWidget(r, 0, INT8_MAX, 0, _settings_client.music.effect_vol, nullptr); break; } } diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 0ef8fb330e..889f65d7ad 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -152,37 +152,27 @@ static void AddCustomRefreshRates() std::copy(monitorRates.begin(), monitorRates.end(), std::inserter(_refresh_rates, _refresh_rates.end())); } -static const std::map _scale_labels = { - { 100, STR_GAME_OPTIONS_GUI_SCALE_1X }, - { 125, STR_NULL }, - { 150, STR_NULL }, - { 175, STR_NULL }, - { 200, STR_GAME_OPTIONS_GUI_SCALE_2X }, - { 225, STR_NULL }, - { 250, STR_NULL }, - { 275, STR_NULL }, - { 300, STR_GAME_OPTIONS_GUI_SCALE_3X }, - { 325, STR_NULL }, - { 350, STR_NULL }, - { 375, STR_NULL }, - { 400, STR_GAME_OPTIONS_GUI_SCALE_4X }, - { 425, STR_NULL }, - { 450, STR_NULL }, - { 475, STR_NULL }, - { 500, STR_GAME_OPTIONS_GUI_SCALE_5X }, -}; +static const int SCALE_NMARKS = (MAX_INTERFACE_SCALE - MIN_INTERFACE_SCALE) / 25 + 1; // Show marks at 25% increments +static const int VOLUME_NMARKS = 9; // Show 5 values and 4 empty marks. -static const std::map _volume_labels = { - { 0, STR_GAME_OPTIONS_VOLUME_0 }, - { 15, STR_NULL }, - { 31, STR_GAME_OPTIONS_VOLUME_25 }, - { 47, STR_NULL }, - { 63, STR_GAME_OPTIONS_VOLUME_50 }, - { 79, STR_NULL }, - { 95, STR_GAME_OPTIONS_VOLUME_75 }, - { 111, STR_NULL }, - { 127, STR_GAME_OPTIONS_VOLUME_100 }, -}; +static StringID ScaleMarkFunc(int, int, int value) +{ + /* Label only every 100% mark. */ + if (value % 100 != 0) return STR_NULL; + + SetDParam(0, value / 100); + SetDParam(1, 0); + return STR_GAME_OPTIONS_GUI_SCALE_MARK; +} + +static StringID VolumeMarkFunc(int, int mark, int value) +{ + /* Label only every other mark. */ + if (mark % 2 != 0) return STR_NULL; + + SetDParam(0, value / 31 * 25); // 0-127 does not map nicely to 0-100. Dividing first gives us nice round numbers. + return STR_GAME_OPTIONS_VOLUME_MARK; +} static constexpr NWidgetPart _nested_social_plugins_widgets[] = { NWidget(NWID_HORIZONTAL), @@ -572,7 +562,7 @@ struct GameOptionsWindow : Window { break; case WID_GO_GUI_SCALE: - DrawSliderWidget(r, MIN_INTERFACE_SCALE, MAX_INTERFACE_SCALE, this->gui_scale, _scale_labels); + DrawSliderWidget(r, MIN_INTERFACE_SCALE, MAX_INTERFACE_SCALE, SCALE_NMARKS, this->gui_scale, ScaleMarkFunc); break; case WID_GO_VIDEO_DRIVER_INFO: @@ -581,11 +571,11 @@ struct GameOptionsWindow : Window { break; case WID_GO_BASE_SFX_VOLUME: - DrawSliderWidget(r, 0, INT8_MAX, _settings_client.music.effect_vol, _volume_labels); + DrawSliderWidget(r, 0, INT8_MAX, VOLUME_NMARKS, _settings_client.music.effect_vol, VolumeMarkFunc); break; case WID_GO_BASE_MUSIC_VOLUME: - DrawSliderWidget(r, 0, INT8_MAX, _settings_client.music.music_vol, _volume_labels); + DrawSliderWidget(r, 0, INT8_MAX, VOLUME_NMARKS, _settings_client.music.music_vol, VolumeMarkFunc); break; } } diff --git a/src/slider.cpp b/src/slider.cpp index 67894a88d2..c6f086c006 100644 --- a/src/slider.cpp +++ b/src/slider.cpp @@ -24,13 +24,14 @@ static const int SLIDER_WIDTH = 3; * @param r Rectangle to draw the widget in * @param min_value Minimum value of slider * @param max_value Maximum value of slider + * @param nmarks Number of marks to display (when mark_func is provided.) * @param value Value to put the slider at - * @param labels List of positions and labels to draw along the slider. + * @param mark_func Callback function to get the StringID to draw on a mark. */ -void DrawSliderWidget(Rect r, int min_value, int max_value, int value, const std::map &labels) +void DrawSliderWidget(Rect r, int min_value, int max_value, int nmarks, int value, SliderMarkFunc *mark_func) { /* Allow space for labels. We assume they are in the small font. */ - if (!labels.empty()) r.bottom -= GetCharacterHeight(FS_SMALL) + WidgetDimensions::scaled.hsep_normal; + if (mark_func != nullptr) r.bottom -= GetCharacterHeight(FS_SMALL) + WidgetDimensions::scaled.hsep_normal; max_value -= min_value; @@ -51,15 +52,22 @@ void DrawSliderWidget(Rect r, int min_value, int max_value, int value, const std GfxDrawLine(wedge[0].x, wedge[0].y, wedge[1].x, wedge[1].y, shadow, t); int x; - for (auto label : labels) { - x = label.first - min_value; - if (_current_text_dir == TD_RTL) x = max_value - x; - x = r.left + (x * (r.right - r.left - sw) / max_value) + sw / 2; - GfxDrawLine(x, r.bottom - ha + 1, x, r.bottom + (label.second == STR_NULL ? 0 : WidgetDimensions::scaled.hsep_normal), shadow, t); - if (label.second != STR_NULL) { - Dimension d = GetStringBoundingBox(label.second, FS_SMALL); + if (mark_func != nullptr) { + for (int mark = 0; mark < nmarks; ++mark) { + const int mark_value = (max_value * mark) / (nmarks - 1); + + const StringID str = mark_func(nmarks, mark, mark_value + min_value); + if (str == INVALID_STRING_ID) continue; + + x = mark_value; + if (_current_text_dir == TD_RTL) x = max_value - mark_value; + x = r.left + (x * (r.right - r.left - sw) / max_value) + sw / 2; + GfxDrawLine(x, r.bottom - ha + 1, x, r.bottom + (str == STR_NULL ? 0 : WidgetDimensions::scaled.hsep_normal), shadow, t); + if (str == STR_NULL) continue; + + Dimension d = GetStringBoundingBox(str, FS_SMALL); x = Clamp(x - d.width / 2, r.left, r.right - d.width); - DrawString(x, x + d.width, r.bottom + 1 + WidgetDimensions::scaled.hsep_normal, label.second, TC_BLACK, SA_CENTER, false, FS_SMALL); + DrawString(x, x + d.width, r.bottom + 1 + WidgetDimensions::scaled.hsep_normal, str, TC_BLACK, SA_CENTER, false, FS_SMALL); } } diff --git a/src/slider_func.h b/src/slider_func.h index 0aaa39bf15..f0ff9cc0ac 100644 --- a/src/slider_func.h +++ b/src/slider_func.h @@ -13,7 +13,8 @@ #include "core/geometry_type.hpp" #include "strings_type.h" -void DrawSliderWidget(Rect r, int min_value, int max_value, int value, const std::map &labels); +using SliderMarkFunc = StringID(int nmarks, int mark, int value); +void DrawSliderWidget(Rect r, int min_value, int max_value, int nmarks, int value, SliderMarkFunc *mark_func); bool ClickSliderWidget(Rect r, Point pt, int min_value, int max_value, int &value); inline bool ClickSliderWidget(Rect r, Point pt, int min_value, int max_value, uint8_t &value) From 9a7c30a1091c520b8908e9ed965ff94e6f595fff Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 2 May 2024 22:31:47 +0100 Subject: [PATCH 451/695] Codechange: Let ClickSliderWidget handle rounding to nearest mark. --- src/music_gui.cpp | 2 +- src/settings_gui.cpp | 5 ++--- src/slider.cpp | 10 +++++++++- src/slider_func.h | 6 +++--- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/music_gui.cpp b/src/music_gui.cpp index 639f360ce0..4f9e5b978d 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -826,7 +826,7 @@ struct MusicWindow : public Window { case WID_M_MUSIC_VOL: case WID_M_EFFECT_VOL: { // volume sliders uint8_t &vol = (widget == WID_M_MUSIC_VOL) ? _settings_client.music.music_vol : _settings_client.music.effect_vol; - if (ClickSliderWidget(this->GetWidget(widget)->GetCurrentRect(), pt, 0, INT8_MAX, vol)) { + if (ClickSliderWidget(this->GetWidget(widget)->GetCurrentRect(), pt, 0, INT8_MAX, 0, vol)) { if (widget == WID_M_MUSIC_VOL) { MusicDriver::GetInstance()->SetVolume(vol); } else { diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 889f65d7ad..3dfdccbb14 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -786,8 +786,7 @@ struct GameOptionsWindow : Window { #endif /* HAS_TRUETYPE_FONT */ case WID_GO_GUI_SCALE: - if (ClickSliderWidget(this->GetWidget(widget)->GetCurrentRect(), pt, MIN_INTERFACE_SCALE, MAX_INTERFACE_SCALE, this->gui_scale)) { - if (!_ctrl_pressed) this->gui_scale = ((this->gui_scale + 12) / 25) * 25; + if (ClickSliderWidget(this->GetWidget(widget)->GetCurrentRect(), pt, MIN_INTERFACE_SCALE, MAX_INTERFACE_SCALE, _ctrl_pressed ? 0 : SCALE_NMARKS, this->gui_scale)) { this->SetWidgetDirty(widget); } @@ -822,7 +821,7 @@ struct GameOptionsWindow : Window { case WID_GO_BASE_SFX_VOLUME: case WID_GO_BASE_MUSIC_VOLUME: { uint8_t &vol = (widget == WID_GO_BASE_MUSIC_VOLUME) ? _settings_client.music.music_vol : _settings_client.music.effect_vol; - if (ClickSliderWidget(this->GetWidget(widget)->GetCurrentRect(), pt, 0, INT8_MAX, vol)) { + if (ClickSliderWidget(this->GetWidget(widget)->GetCurrentRect(), pt, 0, INT8_MAX, 0, vol)) { if (widget == WID_GO_BASE_MUSIC_VOLUME) { MusicDriver::GetInstance()->SetVolume(vol); } else { diff --git a/src/slider.cpp b/src/slider.cpp index c6f086c006..30e0591e83 100644 --- a/src/slider.cpp +++ b/src/slider.cpp @@ -82,10 +82,13 @@ void DrawSliderWidget(Rect r, int min_value, int max_value, int nmarks, int valu * Handle click on a slider widget to change the value * @param r Rectangle of the widget * @param pt Clicked point + * @param min_value Minimum value of slider + * @param max_value Maximum value of slider + * @param nmarks Number of marks displayed. Value will be rounded to nearest mark. * @param value[in,out] Value to modify * @return True if the value setting was modified */ -bool ClickSliderWidget(Rect r, Point pt, int min_value, int max_value, int &value) +bool ClickSliderWidget(Rect r, Point pt, int min_value, int max_value, int nmarks, int &value) { max_value -= min_value; @@ -94,6 +97,11 @@ bool ClickSliderWidget(Rect r, Point pt, int min_value, int max_value, int &valu if (_current_text_dir == TD_RTL) new_value = max_value - new_value; new_value += min_value; + if (nmarks > 0) { + const int step = max_value / (nmarks - 1); + new_value = ((new_value + step / 2) / step) * step; + } + if (new_value != value) { value = new_value; return true; diff --git a/src/slider_func.h b/src/slider_func.h index f0ff9cc0ac..cb5b97fe06 100644 --- a/src/slider_func.h +++ b/src/slider_func.h @@ -15,12 +15,12 @@ using SliderMarkFunc = StringID(int nmarks, int mark, int value); void DrawSliderWidget(Rect r, int min_value, int max_value, int nmarks, int value, SliderMarkFunc *mark_func); -bool ClickSliderWidget(Rect r, Point pt, int min_value, int max_value, int &value); +bool ClickSliderWidget(Rect r, Point pt, int min_value, int max_value, int nmarks, int &value); -inline bool ClickSliderWidget(Rect r, Point pt, int min_value, int max_value, uint8_t &value) +inline bool ClickSliderWidget(Rect r, Point pt, int min_value, int max_value, int nmarks, uint8_t &value) { int tmp_value = value; - if (!ClickSliderWidget(r, pt, min_value, max_value, tmp_value)) return false; + if (!ClickSliderWidget(r, pt, min_value, max_value, nmarks, tmp_value)) return false; value = tmp_value; return true; } From 60cf37e0d175a0fe45615f3bc4459afa7b17d41a Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 4 May 2024 04:41:06 +0000 Subject: [PATCH 452/695] Update: Translations from eints --- src/lang/arabic_egypt.txt | 1 - src/lang/belarusian.txt | 10 ---------- src/lang/brazilian_portuguese.txt | 10 ---------- src/lang/bulgarian.txt | 5 ----- src/lang/catalan.txt | 10 ---------- src/lang/czech.txt | 10 ---------- src/lang/danish.txt | 10 ---------- src/lang/dutch.txt | 10 ---------- src/lang/english_AU.txt | 10 ---------- src/lang/english_US.txt | 10 ---------- src/lang/esperanto.txt | 10 ---------- src/lang/estonian.txt | 10 ---------- src/lang/finnish.txt | 10 ---------- src/lang/french.txt | 10 ---------- src/lang/galician.txt | 10 ---------- src/lang/german.txt | 10 ---------- src/lang/greek.txt | 10 ---------- src/lang/hebrew.txt | 3 --- src/lang/hungarian.txt | 10 ---------- src/lang/indonesian.txt | 10 ---------- src/lang/italian.txt | 10 ---------- src/lang/japanese.txt | 10 ---------- src/lang/korean.txt | 10 ---------- src/lang/latvian.txt | 10 ---------- src/lang/lithuanian.txt | 10 ---------- src/lang/luxembourgish.txt | 10 ---------- src/lang/norwegian_bokmal.txt | 10 ---------- src/lang/polish.txt | 10 ---------- src/lang/portuguese.txt | 10 ---------- src/lang/romanian.txt | 10 ---------- src/lang/russian.txt | 10 ---------- src/lang/serbian.txt | 10 ---------- src/lang/simplified_chinese.txt | 10 ---------- src/lang/slovak.txt | 10 ---------- src/lang/spanish.txt | 10 ---------- src/lang/spanish_MX.txt | 5 ----- src/lang/swedish.txt | 10 ---------- src/lang/tamil.txt | 10 ---------- src/lang/traditional_chinese.txt | 10 ---------- src/lang/turkish.txt | 10 ---------- src/lang/ukrainian.txt | 10 ---------- src/lang/vietnamese.txt | 10 ---------- src/lang/welsh.txt | 10 ---------- 43 files changed, 404 deletions(-) diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 9fb0279d03..d935ab0ac7 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -965,7 +965,6 @@ STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}اختر -STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GRAPHICS :{BLACK}الرسومات diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 1bb20e0cd7..6439d49f84 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -1270,11 +1270,6 @@ STR_GAME_OPTIONS_VOLUME :Гучнасц STR_GAME_OPTIONS_SFX_VOLUME :Гукавыя эфекты STR_GAME_OPTIONS_MUSIC_VOLUME :Музыка -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Валюта STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Выбар валюты @@ -1371,11 +1366,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Паст STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Згладжваньне шрыфтоў STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Пастаўце адзнаку, каб уключыць згладжваньне маштабуемых шрыфтоў -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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_PARTICIPATE_SURVEY :{BLACK}Дазволіць збор і адпраўку дадзеных diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index aa24ae7e5b..153f2414ea 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -957,11 +957,6 @@ STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Efeitos sonoros STR_GAME_OPTIONS_MUSIC_VOLUME :Música -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unidades monetárias STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Seleção de unidades monetárias @@ -1059,11 +1054,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marque e STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Fontes com contornos suaves STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marque esta caixa para usar fontes redimensionáveis com contornos suaves -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Pesquisa automatizada STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participar da pesquisa automatizada diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index a196d4cac6..a84aef6305 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -971,11 +971,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Отме STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Анти-Alias шрифтове STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Отметни тук за да се добави anti-alias към променливи шрифтове. -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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_PARTICIPATE_SURVEY :{BLACK}Участвайте в автоматизирано проучване diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 6980aa8e0a..344ae8e80d 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -957,11 +957,6 @@ STR_GAME_OPTIONS_VOLUME :Volum STR_GAME_OPTIONS_SFX_VOLUME :Efectes de so STR_GAME_OPTIONS_MUSIC_VOLUME :Música -STR_GAME_OPTIONS_VOLUME_0 :0{NBSP}% -STR_GAME_OPTIONS_VOLUME_25 :25{NBSP}% -STR_GAME_OPTIONS_VOLUME_50 :50{NBSP}% -STR_GAME_OPTIONS_VOLUME_75 :75{NBSP}% -STR_GAME_OPTIONS_VOLUME_100 :100{NBSP}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Moneda STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selecció de la unitat monetària @@ -1059,11 +1054,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marqueu STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Aplica anti-àlies a les fonts STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marqueu aquesta casella per a fer servir tècniques d'anti-àlies a les fonts redimensionables. -STR_GAME_OPTIONS_GUI_SCALE_1X :x1 -STR_GAME_OPTIONS_GUI_SCALE_2X :x2 -STR_GAME_OPTIONS_GUI_SCALE_3X :x3 -STR_GAME_OPTIONS_GUI_SCALE_4X :x4 -STR_GAME_OPTIONS_GUI_SCALE_5X :x5 STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Sondeig automatitzat STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participa al sondeig automatitzat diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 3fef564e8a..a7febe6752 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1043,11 +1043,6 @@ STR_GAME_OPTIONS_VOLUME :Hlasitost STR_GAME_OPTIONS_SFX_VOLUME :Zvukové efekty STR_GAME_OPTIONS_MUSIC_VOLUME :Hudba -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25 % -STR_GAME_OPTIONS_VOLUME_50 :50 % -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Měna STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Výběr jednotek měny @@ -1144,11 +1139,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Zaškrtn STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-aliasovat písma STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Zaškrtni toto políčko pro zapnutí anti-aliasování škálovatelných písem. -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Automatický průzkum STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Účastnit se automatického průzkumu diff --git a/src/lang/danish.txt b/src/lang/danish.txt index e0f997da92..d4d4e738be 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -956,11 +956,6 @@ STR_GAME_OPTIONS_VOLUME :Lydstyrke STR_GAME_OPTIONS_SFX_VOLUME :Lydeffekter STR_GAME_OPTIONS_MUSIC_VOLUME :musik -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valutaenhed STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valg af valutaenhed @@ -1058,11 +1053,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marker d STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias skrifttyper STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marker dette felt for at skrifttyper, der kan ændres størrelse, kan udlignes -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Automatiseret undersøgelse STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Deltag i automatiseret undersøgelse diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 695afe3d1c..1167a4a985 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -956,11 +956,6 @@ STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Geluidseffecten STR_GAME_OPTIONS_MUSIC_VOLUME :Muziek -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valuta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valuta kiezen @@ -1058,11 +1053,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Vink dit STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Lettertypen met anti-alias STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Vink dit vakje aan voor in grootte aanpasbare lettertypen met anti-alias -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Geautomatiseerd onderzoek STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Deelnemen aan geautomatiseerd onderzoek diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 1c2bebb5f0..c49fcf7674 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -956,11 +956,6 @@ STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Sound effects STR_GAME_OPTIONS_MUSIC_VOLUME :Music -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Currency units STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Currency units selection @@ -1058,11 +1053,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Check th STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias fonts STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Check this box to anti-alias resizable fonts -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Automated survey STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participate in automated survey diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 25082260d7..389e3bd2a7 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -956,11 +956,6 @@ STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Sound effects STR_GAME_OPTIONS_MUSIC_VOLUME :Music -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Currency units STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Currency units selection @@ -1058,11 +1053,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Check th STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias fonts STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Check this box to anti-alias resizable fonts -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Automated survey STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participate in automated survey diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index d7d155197a..a5f58a1e2e 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1018,11 +1018,6 @@ STR_GAME_OPTIONS_VOLUME :Laŭteco STR_GAME_OPTIONS_SFX_VOLUME :Sonefektoj STR_GAME_OPTIONS_MUSIC_VOLUME :Muziko -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Monunuoj STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Elekto de monunuoj @@ -1116,11 +1111,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Ŝaltu STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Glatigu tiparojn STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Ŝaltu ĉi tiun kvadrateton por glatigi aligrandigeblajn tiparojn -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Aŭtomata sondado STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Partopreni aŭtomatan sondadon diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 98f75a5ac6..1a4a40d859 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1013,11 +1013,6 @@ STR_GAME_OPTIONS_VOLUME :Helitase STR_GAME_OPTIONS_SFX_VOLUME :Heliefektid STR_GAME_OPTIONS_MUSIC_VOLUME :Muusika -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valuuta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valuuta valimine @@ -1114,11 +1109,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Märgi, STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias fondid STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Kasti märkimisel tehakse muudetava suurusega fontidele anti-alias. -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Automaatne uuring STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Osale automaatses uuringus diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index e856a755b5..7e6c20e809 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -956,11 +956,6 @@ STR_GAME_OPTIONS_VOLUME :Äänenvoimakku STR_GAME_OPTIONS_SFX_VOLUME :Äänitehosteet STR_GAME_OPTIONS_MUSIC_VOLUME :Musiikki -STR_GAME_OPTIONS_VOLUME_0 :0{NBSP}% -STR_GAME_OPTIONS_VOLUME_25 :25{NBSP}% -STR_GAME_OPTIONS_VOLUME_50 :50{NBSP}% -STR_GAME_OPTIONS_VOLUME_75 :75{NBSP}% -STR_GAME_OPTIONS_VOLUME_100 :100{NBSP}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Rahayksikkö STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Rahayksikön valinta @@ -1058,11 +1053,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Valitse STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Pehmennä kirjasinten reunoja STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Valitse tämä ruutu pehmentääksesi muuttuvan kokoisten fonttien reunoja -STR_GAME_OPTIONS_GUI_SCALE_1X :1× -STR_GAME_OPTIONS_GUI_SCALE_2X :2× -STR_GAME_OPTIONS_GUI_SCALE_3X :3× -STR_GAME_OPTIONS_GUI_SCALE_4X :4× -STR_GAME_OPTIONS_GUI_SCALE_5X :5× STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Automatisoitu tutkimus STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Osallistu automatisoituun tutkimukseen diff --git a/src/lang/french.txt b/src/lang/french.txt index 863c011616..e414e0d44e 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -957,11 +957,6 @@ STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Effets sonores STR_GAME_OPTIONS_MUSIC_VOLUME :Musique -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Devise STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Sélectionner l'unité monétaire @@ -1059,11 +1054,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Cochez c STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Polices d'écriture supportant l'anti-crénelage STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Cochez cette case pour activer l'anti-crénelage sur les polices d'écriture à taille variable -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -STR_GAME_OPTIONS_GUI_SCALE_3X :3x -STR_GAME_OPTIONS_GUI_SCALE_4X :4x -STR_GAME_OPTIONS_GUI_SCALE_5X :x5 STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Données d'analyse STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participer à l'envoi de données d'analyse diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 03d312d83f..bf8478b374 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -957,11 +957,6 @@ STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Efectos de son STR_GAME_OPTIONS_MUSIC_VOLUME :Música -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unidades monetarias STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selección de unidades monetarias @@ -1059,11 +1054,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marca es STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Suavizar fontes STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marca esta opción para suavizar as fontes redimensionables -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Enquisa automática STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participar nunha enquisa automática diff --git a/src/lang/german.txt b/src/lang/german.txt index f35922103e..6bc1480e21 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -957,11 +957,6 @@ STR_GAME_OPTIONS_VOLUME :Lautstärke STR_GAME_OPTIONS_SFX_VOLUME :Sound-Effekte STR_GAME_OPTIONS_MUSIC_VOLUME :Musik -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Währung STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Währung auswählen @@ -1059,11 +1054,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Dieses K STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Kantenglättung für Schriften STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Dieses Kästchen ankreuzen, um Kantenglättung für skalierbare Schriften zu aktivieren -STR_GAME_OPTIONS_GUI_SCALE_1X :1× -STR_GAME_OPTIONS_GUI_SCALE_2X :2× -STR_GAME_OPTIONS_GUI_SCALE_3X :3× -STR_GAME_OPTIONS_GUI_SCALE_4X :4× -STR_GAME_OPTIONS_GUI_SCALE_5X :5x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Automatische Umfrage STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Bei automatischer Umfrage teilnehmen diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 6cb19b60c2..e6cdebcdfd 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1048,11 +1048,6 @@ STR_GAME_OPTIONS_VOLUME :Ένταση Ή STR_GAME_OPTIONS_SFX_VOLUME :Ηχητικά εφέ STR_GAME_OPTIONS_MUSIC_VOLUME :Μουσική -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Νομισματικές μονάδες STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Επιλογή νομισματικών μονάδων @@ -1150,11 +1145,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Τσεκ STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Εξομάλυνση εμφάνισης γραμματοσειράς STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Τσεκάρετε αυτό το κουτάκι για εξομάλυνση εμφάνισης γραμματοσειράς -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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_PARTICIPATE_SURVEY :{BLACK}Συμμετοχή σε αυτοματοποιημένη έρευνα diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 47775a6a37..5fa35a2634 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -940,9 +940,6 @@ STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -STR_GAME_OPTIONS_GUI_SCALE_3X :3x -STR_GAME_OPTIONS_GUI_SCALE_4X :4x STR_GAME_OPTIONS_GRAPHICS :{BLACK}גרפיקה diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index f4230957f5..e8993aff3c 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1020,11 +1020,6 @@ STR_GAME_OPTIONS_VOLUME :Hangerő STR_GAME_OPTIONS_SFX_VOLUME :Hang effektek STR_GAME_OPTIONS_MUSIC_VOLUME :Zene -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Pénznem STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}A használt pénznem kiválasztása @@ -1121,11 +1116,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Jelöld STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Betűtípusok simítása STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Jelöld be ezt, ha lesimított betűket akarsz. -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Automata felmérés STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Részvétel automata felmérésben diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 7156f51f80..17e8dc8082 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -935,11 +935,6 @@ STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Efek suara STR_GAME_OPTIONS_MUSIC_VOLUME :Musik -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Mata uang STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Pilih mata uang @@ -1033,11 +1028,6 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Pilih ko STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Font anti-alias STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Centang kotak ini untuk font anti-alias yang dapat diubah ukurannya. -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Survei Otomatis STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Berpartisipasi pada survey otomatis diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 70c30ec283..98cde9d385 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -958,11 +958,6 @@ STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Effetti sonori STR_GAME_OPTIONS_MUSIC_VOLUME :Musica -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valuta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selezione della valuta @@ -1060,11 +1055,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Selezion STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Font anti-aliasing STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Seleziona questa casella per applicare l'anti-aliasing ai caratteri ridimensionabili -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Sondaggio automatizzato STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Partecipare al sondaggio automatico diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 1ef33a56df..6b784d61cf 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -896,11 +896,6 @@ STR_GAME_OPTIONS_VOLUME :音量 STR_GAME_OPTIONS_SFX_VOLUME :効果音 STR_GAME_OPTIONS_MUSIC_VOLUME :音楽 -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}通貨単位 STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}通貨単位の選択 @@ -991,11 +986,6 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}ベベ STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}ここをチェックするとベベルはインタフェースのサイズに比例します -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -STR_GAME_OPTIONS_GUI_SCALE_3X :3x -STR_GAME_OPTIONS_GUI_SCALE_4X :4x -STR_GAME_OPTIONS_GUI_SCALE_5X :5x STR_GAME_OPTIONS_GRAPHICS :{BLACK}グラフィクス diff --git a/src/lang/korean.txt b/src/lang/korean.txt index acbcc3b9b6..887ccc47f8 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -957,11 +957,6 @@ STR_GAME_OPTIONS_VOLUME :음량 STR_GAME_OPTIONS_SFX_VOLUME :효과음 STR_GAME_OPTIONS_MUSIC_VOLUME :배경음 -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}화폐 단위 STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}화폐 단위 선택 @@ -1059,11 +1054,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}기존 STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}글씨체 테두리를 부드럽게 STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}크기 조절이 가능한 글씨체에 안티 에일리어싱을 적용하여 테두리를 부드럽게 표현하려면 이 박스에 체크하세요 -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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_PARTICIPATE_SURVEY :{BLACK}자동 설문조사 참여 diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 20e9ee837d..9e0dbd86d7 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -958,11 +958,6 @@ STR_GAME_OPTIONS_VOLUME :Skaļums STR_GAME_OPTIONS_SFX_VOLUME :Skaņas efekti STR_GAME_OPTIONS_MUSIC_VOLUME :Mūzika -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Naudas vienības STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Naudas vienību izvēle @@ -1060,11 +1055,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Atzīmē STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias fonti STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Atzīmējiet šo izvēli, ja vēlaties mainīt fontus ar anti-alias izmēru. -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Automatizēta aptauja STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Piedalieties automatizētā aptaujā diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 3c30b47fdd..8e09b94ce3 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1097,11 +1097,6 @@ STR_GAME_OPTIONS_CAPTION :{WHITE}Pagrindi STR_GAME_OPTIONS_VOLUME :Tūris -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valiuta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valiutos pasirinkimas @@ -1190,11 +1185,6 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Skalės STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Pažymėkite šį langelį, jei norite keisti kampus pagal sąsajos dydį -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -STR_GAME_OPTIONS_GUI_SCALE_3X :3x -STR_GAME_OPTIONS_GUI_SCALE_4X :4x -STR_GAME_OPTIONS_GUI_SCALE_5X :5x STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafika diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 8f5674bf2f..819b465daa 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -956,11 +956,6 @@ STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Soundeffekter STR_GAME_OPTIONS_MUSIC_VOLUME :Musik -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Währungseenheet STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Währungseenheet wielen @@ -1057,11 +1052,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Klick d STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias Schrëften STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Klick dës Optioun fir verännerbar Schrëften ze anti-aliasen -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Automatesch Emfro STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}An enger automatescher Emfro matmaachen diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 6a8446158b..d99ca5569a 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -958,11 +958,6 @@ STR_GAME_OPTIONS_VOLUME :Volum STR_GAME_OPTIONS_SFX_VOLUME :Lydeffekter STR_GAME_OPTIONS_MUSIC_VOLUME :Musikk -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valutaenhet STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Velg valutaenhet som skal brukes @@ -1060,11 +1055,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Kryss av STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Kantutjevning av skrift STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Kryss av denne knappen for å kantutjevne skalerbar skrift -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Automatisert undersøkelse STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Delta i automatisert undersøkelse diff --git a/src/lang/polish.txt b/src/lang/polish.txt index db4f189c5a..604bcde35f 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1336,11 +1336,6 @@ STR_GAME_OPTIONS_VOLUME :Głośność STR_GAME_OPTIONS_SFX_VOLUME :Efekty dźwiękowe STR_GAME_OPTIONS_MUSIC_VOLUME :Muzyka -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Waluta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Wybór waluty @@ -1438,11 +1433,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Zaznacz STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Antyaliasing fontów STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Zaznacz to pole, aby wygładzać fonty o zmiennym rozmiarze -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Automatyczna ankieta STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Udział w automatycznej ankiecie diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index d4ed990215..e372f9e7be 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -957,11 +957,6 @@ STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Efeitos sonoros STR_GAME_OPTIONS_MUSIC_VOLUME :Música -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unidades monetárias STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selecção de unidades monetárias @@ -1059,11 +1054,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marque e STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Fontes anti-alias STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marque esta caixa para fontes redimensionáveis com anti-alias -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Sondagem automatizada STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participar numa sondagem automatizada diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index eb2cfade78..931b823d75 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -956,11 +956,6 @@ STR_GAME_OPTIONS_VOLUME :Volum STR_GAME_OPTIONS_SFX_VOLUME :Efecte sonore STR_GAME_OPTIONS_MUSIC_VOLUME :Muzică -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unitate monetară STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Alege unitatea monetară @@ -1057,11 +1052,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Bifați STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Fonturi anti-alias STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Bifați această casetă pentru anti-alias fonturi redimensionabile. -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Sondaj automat STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participă în sondaje automate diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 5d1ec0ffe0..343af553dc 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1101,11 +1101,6 @@ STR_GAME_OPTIONS_VOLUME :Громкос STR_GAME_OPTIONS_SFX_VOLUME :Звуковые эффекты STR_GAME_OPTIONS_MUSIC_VOLUME :Музыка -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Валюта STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Смена используемой в игре валюты @@ -1203,11 +1198,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Пост STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Сглаживание шрифтов STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Поставьте отметку, чтобы включить сглаживание масштабируемых шрифтов -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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_PARTICIPATE_SURVEY :{BLACK}Разрешить сбор и отправку данных diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index ce08c2b73d..8af04fd8f2 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1133,11 +1133,6 @@ STR_GAME_OPTIONS_VOLUME :Jačina zvuka STR_GAME_OPTIONS_SFX_VOLUME :Zvučni efekti STR_GAME_OPTIONS_MUSIC_VOLUME :Muzika -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valuta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Izbor valute @@ -1234,11 +1229,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Označi STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias fontova STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Označi ovde za anti-alias fontova promenljive veličine -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Automatizovana anketa STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Učestvuj u automatizovanoj anketi diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index fc99513c23..5d7154b616 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -956,11 +956,6 @@ STR_GAME_OPTIONS_VOLUME :音量 STR_GAME_OPTIONS_SFX_VOLUME :音效 STR_GAME_OPTIONS_MUSIC_VOLUME :音乐 -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}货币单位 STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}货币单位选择 @@ -1058,11 +1053,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}如果 STR_GAME_OPTIONS_GUI_FONT_AA :字体抗锯齿 STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}勾选此框以对游戏字体应用抗锯齿 -STR_GAME_OPTIONS_GUI_SCALE_1X :1倍 -STR_GAME_OPTIONS_GUI_SCALE_2X :2倍 -STR_GAME_OPTIONS_GUI_SCALE_3X :3倍 -STR_GAME_OPTIONS_GUI_SCALE_4X :4倍 -STR_GAME_OPTIONS_GUI_SCALE_5X :5倍 STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}自动体验调查 STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}参与自动体验调查 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index cc0bac5fc6..810345a117 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1024,11 +1024,6 @@ STR_GAME_OPTIONS_VOLUME :Hlasitosť STR_GAME_OPTIONS_SFX_VOLUME :Zvukové efekty STR_GAME_OPTIONS_MUSIC_VOLUME :Hudba -STR_GAME_OPTIONS_VOLUME_0 :0 % -STR_GAME_OPTIONS_VOLUME_25 :25 % -STR_GAME_OPTIONS_VOLUME_50 :50 % -STR_GAME_OPTIONS_VOLUME_75 :75 % -STR_GAME_OPTIONS_VOLUME_100 :100 % STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Mena STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Výber menovej jednotky @@ -1126,11 +1121,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Začiark STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Vyhladzovacie písma STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Začiarknite toto políčko, ak chcete vyhladiť písma s meniteľnou veľkosťou -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Automatizovaný prieskum STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Zúčastniť sa automatizovaného prieskumu diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index b0fbc6c593..b68ce41e18 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -957,11 +957,6 @@ STR_GAME_OPTIONS_VOLUME :Volumen STR_GAME_OPTIONS_SFX_VOLUME :Efectos de sonido STR_GAME_OPTIONS_MUSIC_VOLUME :Música -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unidad monetaria STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selecciona la nnidad monetaria @@ -1059,11 +1054,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marca es STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Tipos de letra suavizadas STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marca esta casilla para suavizar los tipos de letra escalables -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Encuesta automática STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participar en la encuesta automática diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 86a964d782..cec1e90692 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1030,11 +1030,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marca es STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Tipos de letra suavizadas STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marca esta casilla para suavizar los tipos de letra escalables. -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Encuesta automática STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participar en la encuesta automática diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 06793fe8fb..575581bfef 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -956,11 +956,6 @@ STR_GAME_OPTIONS_VOLUME :Volym STR_GAME_OPTIONS_SFX_VOLUME :Ljudeffekter STR_GAME_OPTIONS_MUSIC_VOLUME :Musik -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valutaenheter STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Välj valutaenhet @@ -1058,11 +1053,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Kryssa i STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias-typsnitt STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Kryssa i den här rutan för anti-aliasing av typsnitt med justerbar storlek -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Automatisk undersökning STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Delta i en automatisk undersökning diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 59bbd6a5cf..d1bab34a0c 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -928,11 +928,6 @@ STR_GAME_OPTIONS_VOLUME :ஒலி அ STR_GAME_OPTIONS_SFX_VOLUME :ஒலி விளைவுகள் STR_GAME_OPTIONS_MUSIC_VOLUME :இசை -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}நாணய பிரிவுகள் STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}நாணய பிரிவு தேர்ந்தெடுத்தல் @@ -1023,11 +1018,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}வழ STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}மாற்றுப்பெயர் எதிர்ப்பு எழுத்துருக்கள் STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}மறுஅளவிடக்கூடிய மாற்றுப்பெயர் எதிர்ப்பு எழுத்துருக்களுக்கு இந்தப் பெட்டியைத் தேர்வு செய்யவும். -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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_PARTICIPATE_SURVEY :{BLACK}தானியங்கி கணக்கெடுப்பில் சேர் diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index cf4d45ea54..cf2b3ea0dd 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -931,11 +931,6 @@ STR_GAME_OPTIONS_VOLUME :音量 STR_GAME_OPTIONS_SFX_VOLUME :音效 STR_GAME_OPTIONS_MUSIC_VOLUME :音樂 -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}幣值單位 STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}選擇幣值單位 @@ -1031,11 +1026,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}勾選 STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}反鋸齒字體 STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}勾選此方框以使用反鋸齒字體。 -STR_GAME_OPTIONS_GUI_SCALE_1X :1倍 -STR_GAME_OPTIONS_GUI_SCALE_2X :2倍 -STR_GAME_OPTIONS_GUI_SCALE_3X :3倍 -STR_GAME_OPTIONS_GUI_SCALE_4X :4倍 -STR_GAME_OPTIONS_GUI_SCALE_5X :5倍 STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}自動問卷 STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}參與自動問卷 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 2035307a74..c6c93827cf 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -957,11 +957,6 @@ STR_GAME_OPTIONS_VOLUME :Ses seviyesi STR_GAME_OPTIONS_SFX_VOLUME :Ses efektleri STR_GAME_OPTIONS_MUSIC_VOLUME :Müzik -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Para birimleri STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Para birimi seçimi @@ -1059,11 +1054,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Yazı ti STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Yazı tipi kenarlarını yumuşatma STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Yeniden boyutlandırılabilir yazı tiplerinin kenarlarını yumuşatmak için bu kutuyu işaretleyin -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Otomatik anket STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Otomatik ankete katılın diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 208f3a2706..ed50872061 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1093,11 +1093,6 @@ STR_GAME_OPTIONS_VOLUME :Гучніст STR_GAME_OPTIONS_SFX_VOLUME :Звукові ефекти STR_GAME_OPTIONS_MUSIC_VOLUME :Музика -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Грошова одиниця STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Виберіть грошову одиницю @@ -1195,11 +1190,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Позн STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Згладжування шрифтів STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Позначте цей прапорець для того, щоби згладжувати шрифти змінних розмірів -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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_PARTICIPATE_SURVEY :{BLACK}Брати участь в автоматизованому зборі даних diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index fb095abf3c..0bc0c86f29 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -956,11 +956,6 @@ STR_GAME_OPTIONS_VOLUME :Âm lượng STR_GAME_OPTIONS_SFX_VOLUME :Hiệu ứng âm thanh STR_GAME_OPTIONS_MUSIC_VOLUME :Âm nhạc -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Đơn vị tiền tệ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Lựa chọn đơn vị tiền tệ @@ -1058,11 +1053,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Tuỳ ch STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Phông chữ chống răng cưa STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Tuỳ chọn này để chống răng cưa phông chữ co dãn được -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Khảo sát tự động STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Tham gia khảo sát tự động diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index b0db82c4b5..68400e83b5 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -956,11 +956,6 @@ STR_GAME_OPTIONS_VOLUME :Lefel Sain STR_GAME_OPTIONS_SFX_VOLUME :Effeithiau sŵn STR_GAME_OPTIONS_MUSIC_VOLUME :Cerddoriaeth -STR_GAME_OPTIONS_VOLUME_0 :0% -STR_GAME_OPTIONS_VOLUME_25 :25% -STR_GAME_OPTIONS_VOLUME_50 :50% -STR_GAME_OPTIONS_VOLUME_75 :75% -STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Uned Arian STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Dewis unedau arian @@ -1058,11 +1053,6 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marciwch STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Gwynebfathau dadamgenu STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marciwch y blwch hwn i ddadamgennu ffontiau y gellir eu hailfeintio -STR_GAME_OPTIONS_GUI_SCALE_1X :1x -STR_GAME_OPTIONS_GUI_SCALE_2X :2x -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}Arolwg awtomatig STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Cymryd rhan mewn arolwg awtomatig From 115ac2629bb395bed14363158fd1cdcce7f50b4c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 4 May 2024 09:41:58 +0100 Subject: [PATCH 453/695] Cleanup: Remove TileMatrix that hasn't been used for 4+ years. (#12621) This 'nice' structure was left around from #8258 just in case it might be used again. Spoiler alert: it hasn't. This removes manual memory management. And otherwise unused and untested code. --- src/CMakeLists.txt | 1 - src/saveload/town_sl.cpp | 9 ++- src/tilematrix_type.hpp | 144 --------------------------------------- 3 files changed, 6 insertions(+), 148 deletions(-) delete mode 100644 src/tilematrix_type.hpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b3339bae04..86abd9f9c1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -476,7 +476,6 @@ add_files( tilearea_type.h tilehighlight_func.h tilehighlight_type.h - tilematrix_type.hpp timetable.h timetable_cmd.cpp timetable_cmd.h diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index 0390cb0792..e09bf9d444 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -18,12 +18,9 @@ #include "../landscape.h" #include "../subsidy_func.h" #include "../strings_func.h" -#include "../tilematrix_type.hpp" #include "../safeguards.h" -typedef TileMatrix AcceptanceMatrix; - /** * Rebuild all the cached variables of towns. */ @@ -182,6 +179,12 @@ public: }; class SlTownAcceptanceMatrix : public DefaultSaveLoadHandler { +private: + /** Compatibility struct with just enough of TileMatrix to facilitate loading. */ + struct AcceptanceMatrix { + TileArea area; + static const uint GRID = 4; + }; public: inline static const SaveLoad description[] = { SLE_VAR(AcceptanceMatrix, area.tile, SLE_UINT32), diff --git a/src/tilematrix_type.hpp b/src/tilematrix_type.hpp deleted file mode 100644 index 006267b5bd..0000000000 --- a/src/tilematrix_type.hpp +++ /dev/null @@ -1,144 +0,0 @@ -/* - * 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 tilematrix_type.hpp Template for storing a value per area of the map. */ - -#ifndef TILEMATRIX_TYPE_HPP -#define TILEMATRIX_TYPE_HPP - -#include "core/alloc_func.hpp" -#include "tilearea_type.h" - -/** - * A simple matrix that stores one value per N*N square of the map. - * Storage is only allocated for the part of the map that has values - * assigned. - * - * @note No constructor is called for newly allocated values, you - * have to do this yourself if needed. - * @tparam T The type of the stored items. - * @tparam N Grid size. - */ -template -class TileMatrix { - - /** Allocates space for a new tile in the matrix. - * @param tile Tile to add. - */ - void AllocateStorage(TileIndex tile) - { - uint old_left = TileX(this->area.tile) / N; - uint old_top = TileY(this->area.tile) / N; - uint old_w = this->area.w / N; - uint old_h = this->area.h / N; - - /* Add the square the tile is in to the tile area. We do this - * by adding top-left and bottom-right of the square. */ - uint grid_x = (TileX(tile) / N) * N; - uint grid_y = (TileY(tile) / N) * N; - this->area.Add(TileXY(grid_x, grid_y)); - this->area.Add(TileXY(grid_x + N - 1, grid_y + N - 1)); - - /* Allocate new storage. */ - T *new_data = CallocT(this->area.w / N * this->area.h / N); - - if (old_w > 0) { - /* Copy old data if present. */ - uint offs_x = old_left - TileX(this->area.tile) / N; - uint offs_y = old_top - TileY(this->area.tile) / N; - - for (uint row = 0; row < old_h; row++) { - MemCpyT(&new_data[(row + offs_y) * this->area.w / N + offs_x], &this->data[row * old_w], old_w); - } - } - - free(this->data); - this->data = new_data; - } - -public: - static const uint GRID = N; - - TileArea area; ///< Area covered by the matrix. - - T *data; ///< Pointer to data array. - - TileMatrix() : area(INVALID_TILE, 0, 0), data(nullptr) {} - - ~TileMatrix() - { - free(this->data); - } - - /** - * Get the total covered area. - * @return The area covered by the matrix. - */ - const TileArea &GetArea() const - { - return this->area; - } - - /** - * Get the area of the matrix square that contains a specific tile. - * @param tile The tile to get the map area for. - * @param extend Extend the area by this many squares on all sides. - * @return Tile area containing the tile. - */ - static TileArea GetAreaForTile(TileIndex tile, uint extend = 0) - { - uint tile_x = (TileX(tile) / N) * N; - uint tile_y = (TileY(tile) / N) * N; - uint w = N, h = N; - - w += std::min(extend * N, tile_x); - h += std::min(extend * N, tile_y); - - tile_x -= std::min(extend * N, tile_x); - tile_y -= std::min(extend * N, tile_y); - - w += std::min(extend * N, Map::SizeX() - tile_x - w); - h += std::min(extend * N, Map::SizeY() - tile_y - h); - - return TileArea(TileXY(tile_x, tile_y), w, h); - } - - /** - * Extend the coverage area to include a tile. - * @param tile The tile to include. - */ - void Add(TileIndex tile) - { - if (!this->area.Contains(tile)) { - this->AllocateStorage(tile); - } - } - - /** - * Get the value associated to a tile index. - * @param tile The tile to get the value for. - * @return Pointer to the value. - */ - T *Get(TileIndex tile) - { - this->Add(tile); - - tile -= this->area.tile; - uint x = TileX(tile) / N; - uint y = TileY(tile) / N; - - return &this->data[y * this->area.w / N + x]; - } - - /** Array access operator, see #Get. */ - inline T &operator[](TileIndex tile) - { - return *this->Get(tile); - } -}; - -#endif /* TILEMATRIX_TYPE_HPP */ From f629d3c921eddf4a453d3a4a8a26510bc1034c06 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 4 May 2024 09:42:20 +0100 Subject: [PATCH 454/695] Codechange: Use vectors instead of CallocT/free for cache checks. (#12619) Vectors are reused for each vehicle chain to save on reallocations. --- src/cachecheck.cpp | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/src/cachecheck.cpp b/src/cachecheck.cpp index 4f97ba66b4..a68fa7871c 100644 --- a/src/cachecheck.cpp +++ b/src/cachecheck.cpp @@ -79,34 +79,29 @@ void CheckCaches() rs->GetEntry(DIAGDIR_NW)->CheckIntegrity(rs); } + std::vector grf_cache; + std::vector veh_cache; + std::vector gro_cache; + std::vector tra_cache; + for (Vehicle *v : Vehicle::Iterate()) { if (v != v->First() || v->vehstatus & VS_CRASHED || !v->IsPrimaryVehicle()) continue; - uint length = 0; - for (const Vehicle *u = v; u != nullptr; u = u->Next()) length++; - - NewGRFCache *grf_cache = CallocT(length); - VehicleCache *veh_cache = CallocT(length); - GroundVehicleCache *gro_cache = CallocT(length); - TrainCache *tra_cache = CallocT(length); - - length = 0; for (const Vehicle *u = v; u != nullptr; u = u->Next()) { FillNewGRFVehicleCache(u); - grf_cache[length] = u->grf_cache; - veh_cache[length] = u->vcache; + grf_cache.emplace_back(u->grf_cache); + veh_cache.emplace_back(u->vcache); switch (u->type) { case VEH_TRAIN: - gro_cache[length] = Train::From(u)->gcache; - tra_cache[length] = Train::From(u)->tcache; + gro_cache.emplace_back(Train::From(u)->gcache); + tra_cache.emplace_back(Train::From(u)->tcache); break; case VEH_ROAD: - gro_cache[length] = RoadVehicle::From(u)->gcache; + gro_cache.emplace_back(RoadVehicle::From(u)->gcache); break; default: break; } - length++; } switch (v->type) { @@ -117,7 +112,7 @@ void CheckCaches() default: break; } - length = 0; + uint length = 0; for (const Vehicle *u = v; u != nullptr; u = u->Next()) { FillNewGRFVehicleCache(u); if (grf_cache[length] != u->grf_cache) { @@ -146,10 +141,10 @@ void CheckCaches() length++; } - free(grf_cache); - free(veh_cache); - free(gro_cache); - free(tra_cache); + grf_cache.clear(); + veh_cache.clear(); + gro_cache.clear(); + tra_cache.clear(); } /* Check whether the caches are still valid */ From cb26b0e92d957e2dfe35d52018735f9de1abcbac Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Sat, 4 May 2024 05:38:59 -0400 Subject: [PATCH 455/695] Doc: Re-order release instructions to not tell the world prematurely (#12620) --- docs/releasing_openttd.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/releasing_openttd.md b/docs/releasing_openttd.md index 08c379dd81..ad16242076 100644 --- a/docs/releasing_openttd.md +++ b/docs/releasing_openttd.md @@ -38,8 +38,7 @@ This guide is for OpenTTD developers/maintainers, to release a new version of Op 1. Go to https://github.com/OpenTTD/OpenTTD/releases/new and create a new tag matching the release number. For the body of the release, copy in the changelog. "Set as a pre-release" for a beta or RC. 2. Wait for the OpenTTD release workflow to be complete. -3. Merge the website PR. This will publish the release post. -4. If this is a full release: +3. If this is a full release: * for `Steam`: under Steamworks -> SteamPipe -> Builds, set the "testing" branch live on the "default" branch. This will request 2FA validation. * for `GOG`: under Builds, "Publish" the freshly uploaded builds to `Master`, `GOG-use only` and `Testing`. * for `Microsoft Store`: ask orudge to publish the new release. @@ -50,4 +49,5 @@ For help and/or access to either or both, please contact TrueBrain. ## Step 4: Tell the world -1. Make announcements on social media and store pages. You may need to coordinate with other developers who can make posts on TT-Forums, Twitter, Reddit, Fosstodon, Discord, Steam, GOG, Microsoft Store, etc. +1. Merge the website PR. This will publish the release post. +2. Make announcements on social media and store pages. You may need to coordinate with other developers who can make posts on TT-Forums, Twitter, Reddit, Fosstodon, Discord, Steam, GOG, Microsoft Store, etc. From d074ab909c54961975903dc3b297b297cc7766ee Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 4 May 2024 10:55:16 +0100 Subject: [PATCH 456/695] Codechange: Replace Array/FixedSizeArray with std::deque. (#12409) Array/FixedSizeArray is actually a resizeable container that allocates space in chunks and allows resizing without invalidating pointers. This is also a behaviour of std::deque, so use that instead. --- src/misc/CMakeLists.txt | 2 - src/misc/array.hpp | 116 ------------------ src/misc/dbg_helpers.h | 28 +++++ src/misc/fixedsizearray.hpp | 158 ------------------------- src/pathfinder/yapf/nodelist.hpp | 5 +- src/pathfinder/yapf/yapf.hpp | 2 - src/pathfinder/yapf/yapf_costcache.hpp | 10 +- 7 files changed, 35 insertions(+), 286 deletions(-) delete mode 100644 src/misc/array.hpp delete mode 100644 src/misc/fixedsizearray.hpp diff --git a/src/misc/CMakeLists.txt b/src/misc/CMakeLists.txt index 24cde73e41..f088dd5f8d 100644 --- a/src/misc/CMakeLists.txt +++ b/src/misc/CMakeLists.txt @@ -1,12 +1,10 @@ add_files( - array.hpp binaryheap.hpp countedobj.cpp countedptr.hpp dbg_helpers.cpp dbg_helpers.h endian_buffer.hpp - fixedsizearray.hpp getoptdata.cpp getoptdata.h hashtable.hpp diff --git a/src/misc/array.hpp b/src/misc/array.hpp deleted file mode 100644 index cc48d295cd..0000000000 --- a/src/misc/array.hpp +++ /dev/null @@ -1,116 +0,0 @@ -/* - * 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 array.hpp Array without an explicit maximum size. */ - -#ifndef ARRAY_HPP -#define ARRAY_HPP - -#include "fixedsizearray.hpp" -#include "../string_func.h" - -/** - * Flexible array with size limit. Implemented as fixed size - * array of fixed size arrays - */ -template -class SmallArray { -protected: - typedef FixedSizeArray SubArray; ///< inner array - typedef FixedSizeArray SuperArray; ///< outer array - - static const uint Tcapacity = B * N; ///< total max number of items - - SuperArray data; ///< array of arrays of items - - /** return first sub-array with free space for new item */ - inline SubArray &FirstFreeSubArray() - { - uint super_size = data.Length(); - if (super_size > 0) { - SubArray &s = data[super_size - 1]; - if (!s.IsFull()) return s; - } - return *data.AppendC(); - } - -public: - /** implicit constructor */ - inline SmallArray() - { - } - - /** Clear (destroy) all items */ - inline void Clear() - { - data.Clear(); - } - - /** Return actual number of items */ - inline uint Length() const - { - uint super_size = data.Length(); - if (super_size == 0) return 0; - uint sub_size = data[super_size - 1].Length(); - return (super_size - 1) * B + sub_size; - } - /** return true if array is empty */ - inline bool IsEmpty() - { - return data.IsEmpty(); - } - - /** return true if array is full */ - inline bool IsFull() - { - return data.IsFull() && data[N - 1].IsFull(); - } - - /** allocate but not construct new item */ - inline T *Append() - { - return FirstFreeSubArray().Append(); - } - - /** allocate and construct new item */ - inline T *AppendC() - { - return FirstFreeSubArray().AppendC(); - } - - /** indexed access (non-const) */ - inline T& operator[](uint index) - { - const SubArray &s = data[index / B]; - T &item = s[index % B]; - return item; - } - /** indexed access (const) */ - inline const T& operator[](uint index) const - { - const SubArray &s = data[index / B]; - const T &item = s[index % B]; - return item; - } - - /** - * Helper for creating a human readable output of this data. - * @param dmp The location to dump to. - */ - template void Dump(D &dmp) const - { - dmp.WriteValue("capacity", Tcapacity); - uint num_items = Length(); - dmp.WriteValue("num_items", num_items); - for (uint i = 0; i < num_items; i++) { - const T &item = (*this)[i]; - dmp.WriteStructT(fmt::format("item[{}]", i), &item); - } - } -}; - -#endif /* ARRAY_HPP */ diff --git a/src/misc/dbg_helpers.h b/src/misc/dbg_helpers.h index 357cd0dd47..71e988873d 100644 --- a/src/misc/dbg_helpers.h +++ b/src/misc/dbg_helpers.h @@ -165,6 +165,34 @@ struct DumpTarget { EndStruct(); } } + + /** Dump nested object (or only its name if this instance is already known). */ + template void WriteStructT(const std::string &name, const std::deque *s) + { + static size_t type_id = ++LastTypeId(); + + if (s == nullptr) { + /* No need to dump nullptr struct. */ + WriteValue(name, ""); + return; + } + std::string known_as; + if (FindKnownName(type_id, s, known_as)) { + /* We already know this one, no need to dump it. */ + std::string known_as_str = std::string("known_as.") + name; + WriteValue(name, known_as_str); + } else { + /* Still unknown, dump it */ + BeginStruct(type_id, name, s); + size_t num_items = s->size(); + this->WriteValue("num_items", std::to_string(num_items)); + for (size_t i = 0; i < num_items; i++) { + const auto &item = (*s)[i]; + this->WriteStructT(fmt::format("item[{}]", i), &item); + } + EndStruct(); + } + } }; #endif /* DBG_HELPERS_H */ diff --git a/src/misc/fixedsizearray.hpp b/src/misc/fixedsizearray.hpp deleted file mode 100644 index f06492ff13..0000000000 --- a/src/misc/fixedsizearray.hpp +++ /dev/null @@ -1,158 +0,0 @@ -/* - * 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 fixedsizearray.hpp A fixed size array that doesn't create items until needed. */ - -#ifndef FIXEDSIZEARRAY_HPP -#define FIXEDSIZEARRAY_HPP - -#include "../core/alloc_func.hpp" - -/** - * fixed size array - * Upon construction it preallocates fixed size block of memory - * for all items, but doesn't construct them. Item's construction - * is delayed. - */ -template -struct FixedSizeArray { -protected: - /** header for fixed size array */ - struct ArrayHeader - { - uint items; ///< number of items in the array - uint reference_count; ///< block reference counter (used by copy constructor and by destructor) - }; - - /* make constants visible from outside */ - static const uint Tsize = sizeof(T); ///< size of item - static const uint HeaderSize = sizeof(ArrayHeader); ///< size of header - - /** - * the only member of fixed size array is pointer to the block - * of C array of items. Header can be found on the offset -sizeof(ArrayHeader). - */ - T *data; - - /** return reference to the array header (non-const) */ - inline ArrayHeader &Hdr() - { - return *(ArrayHeader*)(((uint8_t*)data) - HeaderSize); - } - - /** return reference to the array header (const) */ - inline const ArrayHeader &Hdr() const - { - return *(ArrayHeader*)(((uint8_t*)data) - HeaderSize); - } - - /** return reference to the block reference counter */ - inline uint &RefCnt() - { - return Hdr().reference_count; - } - - /** return reference to number of used items */ - inline uint &SizeRef() - { - return Hdr().items; - } - -public: - /** Default constructor. Preallocate space for items and header, then initialize header. */ - FixedSizeArray() - { - /* Ensure the size won't overflow. */ - static_assert(C < (SIZE_MAX - HeaderSize) / Tsize); - - /* allocate block for header + items (don't construct items) */ - data = (T*)((MallocT(HeaderSize + C * Tsize)) + HeaderSize); - SizeRef() = 0; // initial number of items - RefCnt() = 1; // initial reference counter - } - - /** Copy constructor. Preallocate space for items and header, then initialize header. */ - FixedSizeArray(const FixedSizeArray &src) - { - /* share block (header + items) with the source array */ - data = src.data; - RefCnt()++; // now we share block with the source - } - - /** destroy remaining items and free the memory block */ - ~FixedSizeArray() - { - /* release one reference to the shared block */ - if ((--RefCnt()) > 0) return; // and return if there is still some owner - - Clear(); - /* free the memory block occupied by items */ - free(((uint8_t*)data) - HeaderSize); - data = nullptr; - } - - /** Clear (destroy) all items */ - inline void Clear() - { - /* Walk through all allocated items backward and destroy them - * Note: this->Length() can be zero. In that case data[this->Length() - 1] is evaluated unsigned - * on some compilers with some architectures. (e.g. gcc with x86) */ - for (T *pItem = this->data + this->Length() - 1; pItem >= this->data; pItem--) { - pItem->~T(); - } - /* number of items become zero */ - SizeRef() = 0; - } - - /** return number of used items */ - inline uint Length() const - { - return Hdr().items; - } - - /** return true if array is full */ - inline bool IsFull() const - { - return Length() >= C; - } - - /** return true if array is empty */ - inline bool IsEmpty() const - { - return Length() <= 0; - } - - /** add (allocate), but don't construct item */ - inline T *Append() - { - assert(!IsFull()); - return &data[SizeRef()++]; - } - - /** add and construct item using default constructor */ - inline T *AppendC() - { - T *item = Append(); - new(item)T; - return item; - } - /** return item by index (non-const version) */ - inline T& operator[](uint index) - { - assert(index < Length()); - return data[index]; - } - - /** return item by index (const version) */ - inline const T& operator[](uint index) const - { - assert(index < Length()); - return data[index]; - } -}; - -#endif /* FIXEDSIZEARRAY_HPP */ diff --git a/src/pathfinder/yapf/nodelist.hpp b/src/pathfinder/yapf/nodelist.hpp index b74345e544..9aa30ee07f 100644 --- a/src/pathfinder/yapf/nodelist.hpp +++ b/src/pathfinder/yapf/nodelist.hpp @@ -10,7 +10,6 @@ #ifndef NODELIST_HPP #define NODELIST_HPP -#include "../../misc/array.hpp" #include "../../misc/hashtable.hpp" #include "../../misc/binaryheap.hpp" @@ -24,7 +23,7 @@ class CNodeList_HashTableT { public: typedef Titem_ Titem; ///< Make #Titem_ visible from outside of class. typedef typename Titem_::Key Key; ///< Make Titem_::Key a property of this class. - typedef SmallArray CItemArray; ///< Type that we will use as item container. + using CItemArray = std::deque; ///< Type that we will use as item container. typedef CHashTableT COpenList; ///< How pointers to open nodes will be stored. typedef CHashTableT CClosedList; ///< How pointers to closed nodes will be stored. typedef CBinaryHeapT CPriorityQueue; ///< How the priority queue will be managed. @@ -63,7 +62,7 @@ public: /** allocate new data item from m_arr */ inline Titem_ *CreateNewNode() { - if (m_new_node == nullptr) m_new_node = m_arr.AppendC(); + if (m_new_node == nullptr) m_new_node = &m_arr.emplace_back(); return m_new_node; } diff --git a/src/pathfinder/yapf/yapf.hpp b/src/pathfinder/yapf/yapf.hpp index 36df4db951..db8508fdcd 100644 --- a/src/pathfinder/yapf/yapf.hpp +++ b/src/pathfinder/yapf/yapf.hpp @@ -14,8 +14,6 @@ #include "../pathfinder_func.h" #include "yapf.h" -#include "../../misc/fixedsizearray.hpp" -#include "../../misc/array.hpp" #include "../../misc/hashtable.hpp" #include "../../misc/binaryheap.hpp" #include "../../misc/dbg_helpers.h" diff --git a/src/pathfinder/yapf/yapf_costcache.hpp b/src/pathfinder/yapf/yapf_costcache.hpp index 06e8566a79..0c0aa729fd 100644 --- a/src/pathfinder/yapf/yapf_costcache.hpp +++ b/src/pathfinder/yapf/yapf_costcache.hpp @@ -57,7 +57,7 @@ public: typedef typename Node::Key Key; ///< key to hash tables typedef typename Node::CachedData CachedData; typedef typename CachedData::Key CacheKey; - typedef SmallArray LocalCache; + using LocalCache = std::deque; protected: LocalCache m_local_cache; @@ -76,7 +76,7 @@ public: inline bool PfNodeCacheFetch(Node &n) { CacheKey key(n.GetKey()); - Yapf().ConnectNodeToCachedData(n, *new (m_local_cache.Append()) CachedData(key)); + Yapf().ConnectNodeToCachedData(n, m_local_cache.emplace_back(key)); return false; } @@ -123,7 +123,7 @@ struct CSegmentCostCacheT : public CSegmentCostCacheBase { static const int C_HASH_BITS = 14; typedef CHashTableT HashTable; - typedef SmallArray Heap; + using Heap = std::deque; typedef typename Tsegment::Key Key; ///< key to hash table HashTable m_map; @@ -135,7 +135,7 @@ struct CSegmentCostCacheT : public CSegmentCostCacheBase { inline void Flush() { m_map.Clear(); - m_heap.Clear(); + m_heap.clear(); } inline Tsegment &Get(Key &key, bool *found) @@ -143,7 +143,7 @@ struct CSegmentCostCacheT : public CSegmentCostCacheBase { Tsegment *item = m_map.Find(key); if (item == nullptr) { *found = false; - item = new (m_heap.Append()) Tsegment(key); + item = &m_heap.emplace_back(key); m_map.Push(*item); } else { *found = true; From 9fe9e4d3984da41f251cc613778d8c367fd4ca6f Mon Sep 17 00:00:00 2001 From: Rubidium Date: Tue, 30 Apr 2024 18:29:10 +0200 Subject: [PATCH 457/695] Codechange: use vector instead of manual memory management for decompressing text files --- src/textfile_gui.cpp | 111 +++++++++++++++---------------------------- 1 file changed, 38 insertions(+), 73 deletions(-) diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index 5058def698..a95c15ac48 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -654,54 +654,38 @@ void TextfileWindow::ScrollToLine(size_t line) /** * Do an in-memory gunzip operation. This works on a raw deflate stream, * or a file with gzip or zlib header. - * @param bufp A pointer to a buffer containing the input data. This - * buffer will be freed and replaced by a buffer containing - * the uncompressed data. - * @param sizep A pointer to the buffer size. Before the call, the value - * pointed to should contain the size of the input buffer. - * After the call, it contains the size of the uncompressed - * data. + * @param input Buffer containing the input data. + * @return Decompressed buffer. * - * When decompressing fails, *bufp is set to nullptr and *sizep to 0. The - * compressed buffer passed in is still freed in this case. + * When decompressing fails, an empty buffer is returned. */ -static void Gunzip(uint8_t **bufp, size_t *sizep) +static std::vector Gunzip(std::span input) { - static const int BLOCKSIZE = 8192; - uint8_t *buf = nullptr; - size_t alloc_size = 0; - z_stream z; - int res; + static const int BLOCKSIZE = 8192; + std::vector output; + z_stream z; memset(&z, 0, sizeof(z)); - z.next_in = *bufp; - z.avail_in = (uInt)*sizep; + z.next_in = reinterpret_cast(input.data()); + z.avail_in = static_cast(input.size()); /* window size = 15, add 32 to enable gzip or zlib header processing */ - res = inflateInit2(&z, 15 + 32); + int res = inflateInit2(&z, 15 + 32); /* Z_BUF_ERROR just means we need more space */ while (res == Z_OK || (res == Z_BUF_ERROR && z.avail_out == 0)) { /* When we get here, we're either just starting, or * inflate is out of output space - allocate more */ - alloc_size += BLOCKSIZE; z.avail_out += BLOCKSIZE; - buf = ReallocT(buf, alloc_size); - z.next_out = buf + alloc_size - z.avail_out; + output.resize(output.size() + BLOCKSIZE); + z.next_out = reinterpret_cast(&*output.end() - z.avail_out); res = inflate(&z, Z_FINISH); } - free(*bufp); inflateEnd(&z); + if (res != Z_STREAM_END) return {}; - if (res == Z_STREAM_END) { - *bufp = buf; - *sizep = alloc_size - z.avail_out; - } else { - /* Something went wrong */ - *bufp = nullptr; - *sizep = 0; - free(buf); - } + output.resize(output.size() - z.avail_out); + return output; } #endif @@ -710,52 +694,36 @@ static void Gunzip(uint8_t **bufp, size_t *sizep) /** * Do an in-memory xunzip operation. This works on a .xz or (legacy) * .lzma file. - * @param bufp A pointer to a buffer containing the input data. This - * buffer will be freed and replaced by a buffer containing - * the uncompressed data. - * @param sizep A pointer to the buffer size. Before the call, the value - * pointed to should contain the size of the input buffer. - * After the call, it contains the size of the uncompressed - * data. + * @param input Buffer containing the input data. + * @return Decompressed buffer. * - * When decompressing fails, *bufp is set to nullptr and *sizep to 0. The - * compressed buffer passed in is still freed in this case. + * When decompressing fails, an empty buffer is returned. */ -static void Xunzip(uint8_t **bufp, size_t *sizep) +static std::vector Xunzip(std::span input) { - static const int BLOCKSIZE = 8192; - uint8_t *buf = nullptr; - size_t alloc_size = 0; - lzma_stream z = LZMA_STREAM_INIT; - int res; + static const int BLOCKSIZE = 8192; + std::vector output; - z.next_in = *bufp; - z.avail_in = *sizep; + lzma_stream z = LZMA_STREAM_INIT; + z.next_in = reinterpret_cast(input.data()); + z.avail_in = input.size(); - res = lzma_auto_decoder(&z, UINT64_MAX, LZMA_CONCATENATED); + int res = lzma_auto_decoder(&z, UINT64_MAX, LZMA_CONCATENATED); /* Z_BUF_ERROR just means we need more space */ while (res == LZMA_OK || (res == LZMA_BUF_ERROR && z.avail_out == 0)) { /* When we get here, we're either just starting, or * inflate is out of output space - allocate more */ - alloc_size += BLOCKSIZE; z.avail_out += BLOCKSIZE; - buf = ReallocT(buf, alloc_size); - z.next_out = buf + alloc_size - z.avail_out; + output.resize(output.size() + BLOCKSIZE); + z.next_out = reinterpret_cast(&*output.end() - z.avail_out); res = lzma_code(&z, LZMA_FINISH); } - free(*bufp); lzma_end(&z); + if (res != LZMA_STREAM_END) return {}; - if (res == LZMA_STREAM_END) { - *bufp = buf; - *sizep = alloc_size - z.avail_out; - } else { - /* Something went wrong */ - *bufp = nullptr; - *sizep = 0; - free(buf); - } + output.resize(output.size() - z.avail_out); + return output; } #endif @@ -779,28 +747,26 @@ static void Xunzip(uint8_t **bufp, size_t *sizep) /* Early return on empty files. */ if (filesize == 0) return; - char *buf = MallocT(filesize); - size_t read = fread(buf, 1, filesize, handle); + std::vector buf; + buf.resize(filesize); + size_t read = fread(buf.data(), 1, buf.size(), handle); fclose(handle); - if (read != filesize) { - free(buf); - return; - } + if (read != buf.size()) return; #if defined(WITH_ZLIB) /* In-place gunzip */ - if (textfile.ends_with(".gz")) Gunzip((uint8_t**)&buf, &filesize); + if (textfile.ends_with(".gz")) buf = Gunzip(buf); #endif #if defined(WITH_LIBLZMA) /* In-place xunzip */ - if (textfile.ends_with(".xz")) Xunzip((uint8_t**)&buf, &filesize); + if (textfile.ends_with(".xz")) buf = Xunzip(buf); #endif - if (buf == nullptr) return; + if (buf.empty()) return; - std::string_view sv_buf(buf, filesize); + std::string_view sv_buf(buf.data(), buf.size()); /* Check for the byte-order-mark, and skip it if needed. */ if (sv_buf.starts_with("\ufeff")) sv_buf.remove_prefix(3); @@ -813,7 +779,6 @@ static void Xunzip(uint8_t **bufp, size_t *sizep) /* Process the loaded text into lines, and do any further parsing needed. */ this->LoadText(sv_buf); - free(buf); } /** From 99f497cb08bd6cb19f3fb33ee7bea1b786cc319f Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 5 May 2024 04:40:50 +0000 Subject: [PATCH 458/695] Update: Translations from eints english (au): 2 changes by krysclarke korean: 2 changes by telk5093 russian: 2 changes by Ln-Wolf finnish: 2 changes by hpiirai danish: 2 changes by bscargo lithuanian: 4 changes by dziugas1959 portuguese: 2 changes by azulcosta portuguese (brazilian): 4 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 6 ++++-- src/lang/danish.txt | 2 ++ src/lang/english_AU.txt | 2 ++ src/lang/finnish.txt | 2 ++ src/lang/korean.txt | 2 ++ src/lang/lithuanian.txt | 4 ++++ src/lang/portuguese.txt | 2 ++ src/lang/russian.txt | 2 ++ 8 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 153f2414ea..af21b131a6 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -957,6 +957,7 @@ STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Efeitos sonoros STR_GAME_OPTIONS_MUSIC_VOLUME :Música +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unidades monetárias STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Seleção de unidades monetárias @@ -1054,6 +1055,7 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marque e STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Fontes com contornos suaves STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marque esta caixa para usar fontes redimensionáveis com contornos suaves +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Pesquisa automatizada STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participar da pesquisa automatizada @@ -1423,8 +1425,8 @@ STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Permitir compra STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Se uma empresa comprar direitos exclusivos de transporte para uma localidade, as estações dos concorrentes (passageiros e carga) não receberão carga durante doze meses STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT_MINUTES :Se uma empresa comprar direitos exclusivos de transporte para uma localidade, as estações dos concorrentes (passageiros e carga) não receberão carga durante doze minutos -STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permitir financiar edificações: {STRING} -STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Permitir que empresas doem dinheiro às localidades para custear novas casas +STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permitir financiar construções: {STRING} +STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Permitir que empresas doem dinheiro às localidades para financiar novas casas STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Permitir financiar a reconstrução de estradas locais:{STRING} STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Permitir que empresas doem dinheiro às localidades para reconstrução de estradas e, com isso, sabotar os serviços rodoviários na localidade diff --git a/src/lang/danish.txt b/src/lang/danish.txt index d4d4e738be..ddf49f7b2c 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -956,6 +956,7 @@ STR_GAME_OPTIONS_VOLUME :Lydstyrke STR_GAME_OPTIONS_SFX_VOLUME :Lydeffekter STR_GAME_OPTIONS_MUSIC_VOLUME :musik +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valutaenhed STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valg af valutaenhed @@ -1053,6 +1054,7 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marker d STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias skrifttyper STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marker dette felt for at skrifttyper, der kan ændres størrelse, kan udlignes +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Automatiseret undersøgelse STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Deltag i automatiseret undersøgelse diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index c49fcf7674..8f5e8ab0dc 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -956,6 +956,7 @@ STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Sound effects STR_GAME_OPTIONS_MUSIC_VOLUME :Music +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Currency units STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Currency units selection @@ -1053,6 +1054,7 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Check th STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias fonts STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Check this box to anti-alias resizable fonts +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Automated survey STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participate in automated survey diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 7e6c20e809..cfe6b42ad5 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -956,6 +956,7 @@ STR_GAME_OPTIONS_VOLUME :Äänenvoimakku STR_GAME_OPTIONS_SFX_VOLUME :Äänitehosteet STR_GAME_OPTIONS_MUSIC_VOLUME :Musiikki +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}{NBSP}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Rahayksikkö STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Rahayksikön valinta @@ -1053,6 +1054,7 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Valitse STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Pehmennä kirjasinten reunoja STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Valitse tämä ruutu pehmentääksesi muuttuvan kokoisten fonttien reunoja +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}× STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Automatisoitu tutkimus STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Osallistu automatisoituun tutkimukseen diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 887ccc47f8..32fe04117d 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -957,6 +957,7 @@ STR_GAME_OPTIONS_VOLUME :음량 STR_GAME_OPTIONS_SFX_VOLUME :효과음 STR_GAME_OPTIONS_MUSIC_VOLUME :배경음 +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}화폐 단위 STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}화폐 단위 선택 @@ -1054,6 +1055,7 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}기존 STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}글씨체 테두리를 부드럽게 STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}크기 조절이 가능한 글씨체에 안티 에일리어싱을 적용하여 테두리를 부드럽게 표현하려면 이 박스에 체크하세요 +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}자동 설문 STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}자동 설문조사 참여 diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 8e09b94ce3..8f0c0423bd 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1101,6 +1101,7 @@ STR_GAME_OPTIONS_VOLUME :Tūris STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valiuta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valiutos pasirinkimas +STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) ###length 44 STR_GAME_OPTIONS_CURRENCY_GBP :Svarai sterlingų @@ -1145,6 +1146,7 @@ STR_GAME_OPTIONS_CURRENCY_HKD :Honkongo doleri STR_GAME_OPTIONS_CURRENCY_INR :Indijos rupijos STR_GAME_OPTIONS_CURRENCY_IDR :Indonezijos rupijos STR_GAME_OPTIONS_CURRENCY_MYR :Malaizijos ringitai +STR_GAME_OPTIONS_CURRENCY_LVL :Latvių latas STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Automatinis išsaugojimas STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Pasirink, kaip dažnai išsaugoti žaidimą @@ -4393,6 +4395,7 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Svoris: STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Šių metų pelnas: {LTBLUE}{CURRENCY_LONG} (praėjusiųjų: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Šių metų pelnas: {LTBLUE}{CURRENCY_LONG} (praeitais metais: {CURRENCY_LONG}) {BLACK}Min. įvykdymas: {LTBLUE}{POWER_TO_WEIGHT} +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Pelnas šį periodą: {LTBLUE}{CURRENCY_LONG} (praeito periodo: {CURRENCY_LONG}) STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Patikimumas: {LTBLUE}{COMMA}% {BLACK}Gedimų nuo paskutinės apžiūros: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Pagamintas: {LTBLUE}{NUM}{BLACK} Vertė: {LTBLUE}{CURRENCY_LONG} @@ -5230,6 +5233,7 @@ STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... per STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... lėktuvui paskirties vieta yra per toli # Extra messages which go on the third line of errors, explaining why orders failed +STR_ERROR_NO_BUS_STATION :{WHITE}Nėra autobusų stoties STR_ERROR_NO_AIRPORT :{WHITE}Nėra jokio oro ar sraigtasparnio uosto STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Nėra jokių stabdymų su palaikomu keliu (tipu) STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Nėra jokių stabdymų su palaikomu tramvajaus tipu diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index e372f9e7be..7051f5571e 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -957,6 +957,7 @@ STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Efeitos sonoros STR_GAME_OPTIONS_MUSIC_VOLUME :Música +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unidades monetárias STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selecção de unidades monetárias @@ -1054,6 +1055,7 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marque e STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Fontes anti-alias STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marque esta caixa para fontes redimensionáveis com anti-alias +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Sondagem automatizada STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participar numa sondagem automatizada diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 343af553dc..4d6d5a33dd 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1101,6 +1101,7 @@ STR_GAME_OPTIONS_VOLUME :Громкос STR_GAME_OPTIONS_SFX_VOLUME :Звуковые эффекты STR_GAME_OPTIONS_MUSIC_VOLUME :Музыка +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Валюта STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Смена используемой в игре валюты @@ -1198,6 +1199,7 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Пост STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Сглаживание шрифтов STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Поставьте отметку, чтобы включить сглаживание масштабируемых шрифтов +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Автоматический сбор данных STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Разрешить сбор и отправку данных From 72b2840a97ae689842318b328c612ea330fcfdbf Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 5 May 2024 12:37:45 +0100 Subject: [PATCH 459/695] Codechange: Use PIP spacing instead of spacers in tree picker window. (#12623) --- src/tree_gui.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/tree_gui.cpp b/src/tree_gui.cpp index e751dba3f5..be32a3e07c 100644 --- a/src/tree_gui.cpp +++ b/src/tree_gui.cpp @@ -293,19 +293,16 @@ static constexpr NWidgetPart _nested_build_trees_widgets[] = { NWidget(WWT_STICKYBOX, COLOUR_DARK_GREEN), EndContainer(), NWidget(WWT_PANEL, COLOUR_DARK_GREEN), - NWidget(NWID_VERTICAL), SetPadding(2), + NWidget(NWID_VERTICAL), SetPIP(0, 1, 0), SetPadding(2), NWidgetFunction(MakeTreeTypeButtons), - NWidget(NWID_SPACER), SetMinimalSize(0, 1), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BT_TYPE_RANDOM), SetDataTip(STR_TREES_RANDOM_TYPE, STR_TREES_RANDOM_TYPE_TOOLTIP), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BT_SE_PANE), - NWidget(NWID_VERTICAL), - NWidget(NWID_SPACER), SetMinimalSize(0, 1), + NWidget(NWID_VERTICAL), SetPIP(0, 1, 0), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BT_MODE_NORMAL), SetFill(1, 0), SetDataTip(STR_TREES_MODE_NORMAL_BUTTON, STR_TREES_MODE_NORMAL_TOOLTIP), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BT_MODE_FOREST_SM), SetFill(1, 0), SetDataTip(STR_TREES_MODE_FOREST_SM_BUTTON, STR_TREES_MODE_FOREST_SM_TOOLTIP), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BT_MODE_FOREST_LG), SetFill(1, 0), SetDataTip(STR_TREES_MODE_FOREST_LG_BUTTON, STR_TREES_MODE_FOREST_LG_TOOLTIP), EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(0, 1), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_BT_MANY_RANDOM), SetDataTip(STR_TREES_RANDOM_TREES_BUTTON, STR_TREES_RANDOM_TREES_TOOLTIP), EndContainer(), EndContainer(), From cf94bd321dc28c73e8a72af4a3a31b17045643c1 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 5 May 2024 12:38:00 +0100 Subject: [PATCH 460/695] Codechange: Remove redundant SetMinimalSize of preview buttons. (#12622) These widgets are also sized in UpdateWidgetSize where the current bevel width is accounted for as well. --- src/dock_gui.cpp | 4 ++-- src/object_gui.cpp | 2 +- src/rail_gui.cpp | 14 +++++++------- src/road_gui.cpp | 32 ++++++++++++++++---------------- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp index fec4024a3a..8772a0baa5 100644 --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -587,8 +587,8 @@ static constexpr NWidgetPart _nested_build_docks_depot_widgets[] = { EndContainer(), NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BDD_BACKGROUND), NWidget(NWID_HORIZONTAL_LTR), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), SetPadding(WidgetDimensions::unscaled.picker), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BDD_X), SetMinimalSize(98, 66), SetDataTip(0x0, STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BDD_Y), SetMinimalSize(98, 66), SetDataTip(0x0, STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BDD_X), SetDataTip(0x0, STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BDD_Y), SetDataTip(0x0, STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP), EndContainer(), EndContainer(), }; diff --git a/src/object_gui.cpp b/src/object_gui.cpp index daab1f04de..421b7f8598 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -695,7 +695,7 @@ static constexpr NWidgetPart _nested_build_object_widgets[] = { EndContainer(), NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetScrollbar(WID_BO_SELECT_SCROLL), NWidget(NWID_MATRIX, COLOUR_DARK_GREEN, WID_BO_SELECT_MATRIX), SetPIP(0, 2, 0), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BO_SELECT_IMAGE), SetMinimalSize(66, 60), SetDataTip(0x0, STR_OBJECT_BUILD_TOOLTIP), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BO_SELECT_IMAGE), SetDataTip(0x0, STR_OBJECT_BUILD_TOOLTIP), SetFill(0, 0), SetResize(0, 0), SetScrollbar(WID_BO_SELECT_SCROLL), EndContainer(), EndContainer(), diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 137e78d494..743e3fb920 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1609,8 +1609,8 @@ static constexpr NWidgetPart _nested_station_builder_widgets[] = { EndContainer(), NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_ORIENTATION, STR_NULL), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAS_PLATFORM_DIR_X), SetMinimalSize(66, 60), SetFill(0, 0), SetDataTip(0x0, STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAS_PLATFORM_DIR_Y), SetMinimalSize(66, 60), SetFill(0, 0), SetDataTip(0x0, STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAS_PLATFORM_DIR_X), SetFill(0, 0), SetDataTip(0x0, STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAS_PLATFORM_DIR_Y), SetFill(0, 0), SetDataTip(0x0, STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP), EndContainer(), EndContainer(), NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BRAS_SHOW_NEWST_TYPE), SetMinimalSize(144, 11), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_ORANGE), NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_NUMBER_OF_TRACKS, STR_NULL), @@ -1648,7 +1648,7 @@ static constexpr NWidgetPart _nested_station_builder_widgets[] = { /* We need an additional background for the matrix, as the matrix cannot handle the scrollbar due to not being an NWidgetCore. */ NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetScrollbar(WID_BRAS_MATRIX_SCROLL), NWidget(NWID_MATRIX, COLOUR_DARK_GREEN, WID_BRAS_MATRIX), SetPIP(0, 2, 0), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BRAS_IMAGE), SetMinimalSize(66, 60), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BRAS_IMAGE), SetFill(0, 0), SetResize(0, 0), SetDataTip(0x0, STR_STATION_BUILD_STATION_TYPE_TOOLTIP), SetScrollbar(WID_BRAS_MATRIX_SCROLL), EndContainer(), EndContainer(), @@ -1995,12 +1995,12 @@ static constexpr NWidgetPart _nested_build_depot_widgets[] = { NWidget(WWT_PANEL, COLOUR_DARK_GREEN), NWidget(NWID_HORIZONTAL_LTR), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), SetPadding(WidgetDimensions::unscaled.picker), NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAD_DEPOT_NW), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAD_DEPOT_SW), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAD_DEPOT_NW), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAD_DEPOT_SW), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP), EndContainer(), NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAD_DEPOT_NE), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAD_DEPOT_SE), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAD_DEPOT_NE), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAD_DEPOT_SE), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP), EndContainer(), EndContainer(), EndContainer(), diff --git a/src/road_gui.cpp b/src/road_gui.cpp index efb8cc2713..ade58f844c 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -1070,12 +1070,12 @@ static constexpr NWidgetPart _nested_build_road_depot_widgets[] = { NWidget(WWT_PANEL, COLOUR_DARK_GREEN), NWidget(NWID_HORIZONTAL_LTR), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), SetPadding(WidgetDimensions::unscaled.picker), NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BROD_DEPOT_NW), SetMinimalSize(66, 50), SetFill(0, 0), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BROD_DEPOT_SW), SetMinimalSize(66, 50), SetFill(0, 0), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BROD_DEPOT_NW), SetFill(0, 0), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BROD_DEPOT_SW), SetFill(0, 0), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP), EndContainer(), NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BROD_DEPOT_NE), SetMinimalSize(66, 50), SetFill(0, 0), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BROD_DEPOT_SE), SetMinimalSize(66, 50), SetFill(0, 0), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BROD_DEPOT_NE), SetFill(0, 0), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BROD_DEPOT_SE), SetFill(0, 0), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP), EndContainer(), EndContainer(), EndContainer(), @@ -1644,24 +1644,24 @@ static constexpr NWidgetPart _nested_road_station_picker_widgets[] = { NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), NWidget(NWID_HORIZONTAL_LTR), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_NW), SetMinimalSize(66, 50), SetFill(0, 0), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_NE), SetMinimalSize(66, 50), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_NW), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_NE), SetFill(0, 0), EndContainer(), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_X), SetMinimalSize(66, 50), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_X), SetFill(0, 0), EndContainer(), EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), NWidget(NWID_HORIZONTAL_LTR), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_SW), SetMinimalSize(66, 50), SetFill(0, 0), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_SE), SetMinimalSize(66, 50), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_SW), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_SE), SetFill(0, 0), EndContainer(), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_Y), SetMinimalSize(66, 50), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_Y), SetFill(0, 0), EndContainer(), EndContainer(), EndContainer(), /* 2-orientation plane. */ NWidget(NWID_VERTICAL), SetPIPRatio(0, 0, 1), NWidget(NWID_HORIZONTAL_LTR), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_X), SetMinimalSize(66, 50), SetFill(0, 0), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_Y), SetMinimalSize(66, 50), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_X), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_Y), SetFill(0, 0), EndContainer(), EndContainer(), EndContainer(), EndContainer(), @@ -1680,7 +1680,7 @@ static constexpr NWidgetPart _nested_road_station_picker_widgets[] = { /* Hidden panel as NWID_MATRIX does not support SetScrollbar() */ NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetScrollbar(WID_BROS_MATRIX_SCROLL), NWidget(NWID_MATRIX, COLOUR_DARK_GREEN, WID_BROS_MATRIX), SetPIP(0, 2, 0), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BROS_IMAGE), SetMinimalSize(66, 60), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BROS_IMAGE), SetFill(0, 0), SetResize(0, 0), SetDataTip(0x0, STR_STATION_BUILD_STATION_TYPE_TOOLTIP), SetScrollbar(WID_BROS_MATRIX_SCROLL), EndContainer(), EndContainer(), @@ -1740,8 +1740,8 @@ static constexpr NWidgetPart _nested_tram_station_picker_widgets[] = { NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_ORIENTATION, STR_NULL), SetFill(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL_LTR), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_X), SetMinimalSize(66, 50), SetFill(0, 0), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_Y), SetMinimalSize(66, 50), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_X), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_Y), SetFill(0, 0), EndContainer(), EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_SHOW_NEWST_TYPE_SEL), NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BROS_SHOW_NEWST_TYPE), SetMinimalSize(144, 8), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_ORANGE), SetFill(1, 0), @@ -1758,7 +1758,7 @@ static constexpr NWidgetPart _nested_tram_station_picker_widgets[] = { /* Hidden panel as NWID_MATRIX does not support SetScrollbar() */ NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetScrollbar(WID_BROS_MATRIX_SCROLL), NWidget(NWID_MATRIX, COLOUR_DARK_GREEN, WID_BROS_MATRIX), SetPIP(0, 2, 0), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BROS_IMAGE), SetMinimalSize(66, 60), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BROS_IMAGE), SetFill(0, 0), SetResize(0, 0), SetDataTip(0x0, STR_STATION_BUILD_STATION_TYPE_TOOLTIP), SetScrollbar(WID_BROS_MATRIX_SCROLL), EndContainer(), EndContainer(), From 84ebae0bf590975f317c8a5bd092c3e8908da8bc Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 5 May 2024 14:57:17 +0100 Subject: [PATCH 461/695] Codechange: Tweak layout of network client list. (#12624) Use PIP spacing instead of spacers and more used of standard WidgetDimensions. --- src/network/network_gui.cpp | 73 +++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 39 deletions(-) diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 9d38926b53..fbd90c5a12 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1251,53 +1251,48 @@ static constexpr NWidgetPart _nested_client_list_widgets[] = { NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), - NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER, STR_NULL), SetPadding(4, 4, 0, 4), SetPIP(0, 2, 0), - NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), - NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_NAME, STR_NULL), - NWidget(NWID_SPACER), SetMinimalSize(10, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_NAME), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_SERVER_NAME_EDIT), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP), - EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_CL_SERVER_SELECTOR), - NWidget(NWID_VERTICAL), - NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), - NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY, STR_NULL), - NWidget(NWID_SPACER), SetMinimalSize(10, 0), SetFill(1, 0), SetResize(1, 0), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_CL_SERVER_VISIBILITY), SetDataTip(STR_JUST_STRING, STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP), - EndContainer(), - NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), - NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE, STR_NULL), - NWidget(NWID_SPACER), SetMinimalSize(10, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_INVITE_CODE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), - EndContainer(), - NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), - NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE, STR_NULL), - NWidget(NWID_SPACER), SetMinimalSize(10, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_CONNECTION_TYPE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_STRING, STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), SetPadding(4), + NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER, STR_NULL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), + NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_NAME, STR_NULL), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_NAME), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_SERVER_NAME_EDIT), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP), + EndContainer(), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_CL_SERVER_SELECTOR), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), + NWidget(WWT_TEXT, COLOUR_GREY), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY, STR_NULL), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_CL_SERVER_VISIBILITY), SetDataTip(STR_JUST_STRING, STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP), + EndContainer(), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), + NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE, STR_NULL), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_INVITE_CODE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), + EndContainer(), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), + NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE, STR_NULL), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_CONNECTION_TYPE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_STRING, STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), + EndContainer(), EndContainer(), EndContainer(), EndContainer(), - EndContainer(), - NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_PLAYER, STR_NULL), SetPadding(4, 4, 4, 4), SetPIP(0, 2, 0), - NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), - NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_PLAYER_NAME, STR_NULL), - NWidget(NWID_SPACER), SetMinimalSize(10, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_CLIENT_NAME), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_CLIENT_NAME_EDIT), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP), + NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_PLAYER, STR_NULL), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), + NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_PLAYER_NAME, STR_NULL), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_CLIENT_NAME), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_CLIENT_NAME_EDIT), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP), + EndContainer(), EndContainer(), EndContainer(), EndContainer(), NWidget(NWID_HORIZONTAL), - NWidget(NWID_VERTICAL), - NWidget(WWT_MATRIX, COLOUR_GREY, WID_CL_MATRIX), SetMinimalSize(180, 0), SetResize(1, 1), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_NULL), SetScrollbar(WID_CL_SCROLLBAR), - NWidget(WWT_PANEL, COLOUR_GREY), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_CLIENT_COMPANY_COUNT), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 1, 2, 1), SetAlignment(SA_CENTER), SetDataTip(STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT, STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP), - EndContainer(), - EndContainer(), - NWidget(NWID_VERTICAL), - NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_CL_SCROLLBAR), - NWidget(WWT_RESIZEBOX, COLOUR_GREY), + NWidget(WWT_MATRIX, COLOUR_GREY, WID_CL_MATRIX), SetMinimalSize(180, 0), SetResize(1, 1), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_NULL), SetScrollbar(WID_CL_SCROLLBAR), + NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_CL_SCROLLBAR), + EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_PANEL, COLOUR_GREY), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_CLIENT_COMPANY_COUNT), SetFill(1, 0), SetResize(1, 0), SetPadding(WidgetDimensions::unscaled.framerect), SetAlignment(SA_CENTER), SetDataTip(STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT, STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP), EndContainer(), + NWidget(WWT_RESIZEBOX, COLOUR_GREY), EndContainer(), }; From d2f98440bb820c28e923b6c04bd25a0d9efb8e67 Mon Sep 17 00:00:00 2001 From: Koen Bussemaker Date: Sun, 5 May 2024 14:52:01 +0200 Subject: [PATCH 462/695] Codechange: Make assert in follow_track easier to understand and debug --- src/pathfinder/follow_track.hpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/pathfinder/follow_track.hpp b/src/pathfinder/follow_track.hpp index 513d3ab0c7..63bfabcc8a 100644 --- a/src/pathfinder/follow_track.hpp +++ b/src/pathfinder/follow_track.hpp @@ -121,12 +121,14 @@ struct CFollowTrackT m_old_tile = old_tile; m_old_td = old_td; m_err = EC_NONE; - assert( - ((TrackStatusToTrackdirBits( - GetTileTrackStatus(m_old_tile, TT(), (IsRoadTT() && m_veh != nullptr) ? (this->IsTram() ? RTT_TRAM : RTT_ROAD) : 0) - ) & TrackdirToTrackdirBits(m_old_td)) != 0) || - (IsTram() && GetSingleTramBit(m_old_tile) != INVALID_DIAGDIR) // Disable the assertion for single tram bits - ); + + assert([&]() { + if (IsTram() && GetSingleTramBit(m_old_tile) != INVALID_DIAGDIR) return true; // Skip the check for single tram bits + const uint sub_mode = (IsRoadTT() && m_veh != nullptr) ? (this->IsTram() ? RTT_TRAM : RTT_ROAD) : 0; + const TrackdirBits old_tile_valid_dirs = TrackStatusToTrackdirBits(GetTileTrackStatus(m_old_tile, TT(), sub_mode)); + return (old_tile_valid_dirs & TrackdirToTrackdirBits(m_old_td)) != TRACKDIR_BIT_NONE; + }()); + m_exitdir = TrackdirToExitdir(m_old_td); if (ForcedReverse()) return true; if (!CanExitOldTile()) return false; From 4740eeaa43825977eada2d98148d6c8e4f2ddcaf Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 5 May 2024 16:15:35 +0100 Subject: [PATCH 463/695] Add: 'Get Content' buttons next to base set dropdowns in Game Options. (#12627) This allows base set content to be downloaded more easily, filtered by type and next to where it is set up. --- src/lang/english.txt | 3 +++ src/settings_gui.cpp | 26 ++++++++++++++++++++++++-- src/widgets/settings_widget.h | 3 +++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index df48b08dec..bb55d2194c 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1083,6 +1083,9 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Base mus STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Select the base music set to use STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Additional information about the base music set +STR_GAME_OPTIONS_ONLINE_CONTENT :Get Content +STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Check for new and updated content to download + STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(no plugins to integrate with social platforms installed) STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{BLACK}{RAW_STRING} ({RAW_STRING}) diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 3dfdccbb14..b2eaccc22e 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -14,6 +14,7 @@ #include "textbuf_gui.h" #include "command_func.h" #include "network/network.h" +#include "network/network_content.h" #include "town.h" #include "settings_internal.h" #include "strings_func.h" @@ -855,6 +856,18 @@ struct GameOptionsWindow : Window { OpenBrowser(BaseMusic::GetUsedSet()->url); break; + case WID_GO_BASE_GRF_CONTENT_DOWNLOAD: + ShowNetworkContentListWindow(nullptr, CONTENT_TYPE_BASE_GRAPHICS); + break; + + case WID_GO_BASE_SFX_CONTENT_DOWNLOAD: + ShowNetworkContentListWindow(nullptr, CONTENT_TYPE_BASE_SOUNDS); + break; + + case WID_GO_BASE_MUSIC_CONTENT_DOWNLOAD: + ShowNetworkContentListWindow(nullptr, CONTENT_TYPE_BASE_MUSIC); + break; + case WID_GO_CURRENCY_DROPDOWN: case WID_GO_AUTOSAVE_DROPDOWN: case WID_GO_LANG_DROPDOWN: @@ -988,6 +1001,8 @@ struct GameOptionsWindow : Window { this->SetWidgetDisabledState(WID_GO_BASE_SFX_TEXTFILE + tft, BaseSounds::GetUsedSet() == nullptr || !BaseSounds::GetUsedSet()->GetTextfile(tft).has_value()); this->SetWidgetDisabledState(WID_GO_BASE_MUSIC_TEXTFILE + tft, BaseMusic::GetUsedSet() == nullptr || !BaseMusic::GetUsedSet()->GetTextfile(tft).has_value()); } + + this->SetWidgetsDisabledState(!_network_available, WID_GO_BASE_GRF_CONTENT_DOWNLOAD, WID_GO_BASE_SFX_CONTENT_DOWNLOAD, WID_GO_BASE_MUSIC_CONTENT_DOWNLOAD); } }; @@ -1094,6 +1109,7 @@ static constexpr NWidgetPart _nested_game_options_widgets[] = { NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_GRF_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_JUST_RAW_STRING, STR_GAME_OPTIONS_BASE_GRF_TOOLTIP), SetFill(1, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_PARAMETERS), SetDataTip(STR_NEWGRF_SETTINGS_SET_PARAMETERS, STR_NULL), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_CONTENT_DOWNLOAD), SetDataTip(STR_GAME_OPTIONS_ONLINE_CONTENT, STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP), EndContainer(), NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_GRF_DESCRIPTION), SetMinimalSize(200, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP), SetFill(1, 0), NWidget(NWID_VERTICAL), @@ -1123,7 +1139,10 @@ static constexpr NWidgetPart _nested_game_options_widgets[] = { EndContainer(), NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_BASE_SFX, STR_NULL), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_SFX_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_JUST_RAW_STRING, STR_GAME_OPTIONS_BASE_SFX_TOOLTIP), SetFill(1, 0), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_SFX_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_JUST_RAW_STRING, STR_GAME_OPTIONS_BASE_SFX_TOOLTIP), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_SFX_CONTENT_DOWNLOAD), SetDataTip(STR_GAME_OPTIONS_ONLINE_CONTENT, STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP), + EndContainer(), NWidget(WWT_EMPTY, INVALID_COLOUR, WID_GO_BASE_SFX_DESCRIPTION), SetMinimalSize(200, 0), SetMinimalTextLines(1, 0), SetDataTip(STR_NULL, STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP), SetFill(1, 0), NWidget(NWID_VERTICAL), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), @@ -1138,7 +1157,10 @@ static constexpr NWidgetPart _nested_game_options_widgets[] = { EndContainer(), NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_BASE_MUSIC, STR_NULL), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_MUSIC_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_JUST_RAW_STRING, STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP), SetFill(1, 0), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_MUSIC_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_JUST_RAW_STRING, STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_MUSIC_CONTENT_DOWNLOAD), SetDataTip(STR_GAME_OPTIONS_ONLINE_CONTENT, STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP), + EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), NWidget(WWT_EMPTY, INVALID_COLOUR, WID_GO_BASE_MUSIC_DESCRIPTION), SetMinimalSize(200, 0), SetMinimalTextLines(1, 0), SetDataTip(STR_NULL, STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP), SetFill(1, 0), NWidget(NWID_VERTICAL), SetPIPRatio(0, 0, 1), diff --git a/src/widgets/settings_widget.h b/src/widgets/settings_widget.h index fccba67a2b..9063d79bba 100644 --- a/src/widgets/settings_widget.h +++ b/src/widgets/settings_widget.h @@ -30,16 +30,19 @@ enum GameOptionsWidgets : WidgetID { WID_GO_GUI_FONT_AA, ///< Toggle whether to anti-alias fonts. WID_GO_BASE_GRF_DROPDOWN, ///< Use to select a base GRF. WID_GO_BASE_GRF_PARAMETERS, ///< Base GRF parameters. + WID_GO_BASE_GRF_CONTENT_DOWNLOAD, ///< 'Get Content' button for base GRF. WID_GO_BASE_GRF_OPEN_URL, ///< Open base GRF URL. WID_GO_BASE_GRF_TEXTFILE, ///< Open base GRF readme, changelog (+1) or license (+2). WID_GO_BASE_GRF_DESCRIPTION = WID_GO_BASE_GRF_TEXTFILE + TFT_CONTENT_END, ///< Description of selected base GRF. WID_GO_BASE_SFX_DROPDOWN, ///< Use to select a base SFX. + WID_GO_BASE_SFX_CONTENT_DOWNLOAD, ///< 'Get Content' button for base SFX. WID_GO_TEXT_SFX_VOLUME, ///< Sound effects volume label. WID_GO_BASE_SFX_VOLUME, ///< Change sound effects volume. WID_GO_BASE_SFX_OPEN_URL, ///< Open base SFX URL. WID_GO_BASE_SFX_TEXTFILE, ///< Open base SFX readme, changelog (+1) or license (+2). WID_GO_BASE_SFX_DESCRIPTION = WID_GO_BASE_SFX_TEXTFILE + TFT_CONTENT_END, ///< Description of selected base SFX. WID_GO_BASE_MUSIC_DROPDOWN, ///< Use to select a base music set. + WID_GO_BASE_MUSIC_CONTENT_DOWNLOAD, ///< 'Get Content' button for base music. WID_GO_TEXT_MUSIC_VOLUME, ///< Music volume label. WID_GO_BASE_MUSIC_VOLUME, ///< Change music volume. WID_GO_BASE_MUSIC_JUKEBOX, ///< Open the jukebox. From 455e202e0395bf88cc61faaa13d502cc49baf1b2 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 5 May 2024 19:53:21 +0200 Subject: [PATCH 464/695] Fix: server's client is shown incorrectly in some cases --- src/network/network.cpp | 26 +++++++++++++++++++++++++- src/network/network_func.h | 2 ++ src/openttd.cpp | 11 ++--------- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/network/network.cpp b/src/network/network.cpp index 5eb64da827..899d2a7396 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -884,7 +884,7 @@ static void NetworkInitGameInfo() /* There should be always space for the server. */ assert(NetworkClientInfo::CanAllocateItem()); NetworkClientInfo *ci = new NetworkClientInfo(CLIENT_ID_SERVER); - ci->client_playas = _network_dedicated ? COMPANY_SPECTATOR : COMPANY_FIRST; + ci->client_playas = COMPANY_SPECTATOR; ci->client_name = _settings_client.network.client_name; } @@ -987,6 +987,30 @@ bool NetworkServerStart() return true; } +/** + * Perform tasks when the server is started. This consists of things + * like putting the server's client in a valid company and resetting the restart time. + */ +void NetworkOnGameStart() +{ + if (!_network_server) return; + + /* Update the static game info to set the values from the new game. */ + NetworkServerUpdateGameInfo(); + + ChangeNetworkRestartTime(true); + + if (!_network_dedicated) { + Company *c = Company::GetIfValid(GetFirstPlayableCompanyID()); + NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER); + if (c != nullptr && ci != nullptr) { + ci->client_playas = c->index; + } + + ShowClientList(); + } +} + /* The server is rebooting... * The only difference with NetworkDisconnect, is the packets that is sent */ void NetworkReboot() diff --git a/src/network/network_func.h b/src/network/network_func.h index 4a31943e63..91af613c04 100644 --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -64,6 +64,8 @@ void NetworkPrintClients(); std::string_view NetworkGetPublicKeyOfClient(ClientID client_id); void NetworkHandlePauseChange(PauseMode prev_mode, PauseMode changed_mode); +void NetworkOnGameStart(); + /*** Commands ran by the server ***/ void NetworkServerSendConfigUpdate(); void NetworkServerUpdateGameInfo(); diff --git a/src/openttd.cpp b/src/openttd.cpp index 0d9ef39c0d..10f7e0727b 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -34,7 +34,6 @@ #include "console_func.h" #include "screenshot.h" #include "network/network.h" -#include "network/network_server.h" #include "network/network_func.h" #include "ai/ai.hpp" #include "ai/ai_config.hpp" @@ -859,8 +858,8 @@ static void OnStartGame(bool dedicated_server) * or in the case of a dedicated server, a spectator */ SetLocalCompany(dedicated_server ? COMPANY_SPECTATOR : GetFirstPlayableCompanyID()); - /* Update the static game info to set the values from the new game. */ - NetworkServerUpdateGameInfo(); + NetworkOnGameStart(); + /* Execute the game-start script */ IConsoleCmdExec("exec scripts/game_start.scr 0"); } @@ -911,12 +910,6 @@ static void MakeNewGameDone() CheckEngines(); CheckIndustries(); MarkWholeScreenDirty(); - - if (_network_server) { - ChangeNetworkRestartTime(true); - - if (!_network_dedicated) ShowClientList(); - } } static void MakeNewGame(bool from_heightmap, bool reset_settings) From b9c894b717ae350bfeaa388b20c6b346edd71bf8 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 5 May 2024 20:17:26 +0200 Subject: [PATCH 465/695] Fix: for GUI network servers, name the first company the same as any other company --- src/network/network.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/network/network.cpp b/src/network/network.cpp index 899d2a7396..b37b1aaf68 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -1005,6 +1005,12 @@ void NetworkOnGameStart() NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER); if (c != nullptr && ci != nullptr) { ci->client_playas = c->index; + + /* + * If the company has not been named yet, the company was just started. + * Otherwise it would have gotten a name already, so announce it as a new company. + */ + if (c->name_1 == STR_SV_UNNAMED && c->name.empty()) NetworkServerNewCompany(c, ci); } ShowClientList(); From 4e9a280ef848ed58c6feab5b607be03c35152b0c Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 6 May 2024 04:41:07 +0000 Subject: [PATCH 466/695] Update: Translations from eints swedish: 2 changes by sereneavatar norwegian (bokmal): 2 changes by eriksorngard welsh: 19 changes by Ansbaradigeidfran english (us): 2 changes by 2TallTyler czech: 1 change by JsSusenka lithuanian: 97 changes by khamper french: 2 changes by Lishouuu portuguese (brazilian): 1 change by pasantoro polish: 2 changes by pAter-exe --- src/lang/afrikaans.txt | 1 + src/lang/arabic_egypt.txt | 1 + src/lang/basque.txt | 1 + src/lang/belarusian.txt | 1 + src/lang/brazilian_portuguese.txt | 3 +- src/lang/bulgarian.txt | 1 + src/lang/catalan.txt | 1 + src/lang/chuvash.txt | 1 + src/lang/croatian.txt | 1 + src/lang/czech.txt | 3 +- src/lang/danish.txt | 1 + src/lang/dutch.txt | 1 + src/lang/english_AU.txt | 1 + src/lang/english_US.txt | 3 + src/lang/esperanto.txt | 1 + src/lang/estonian.txt | 1 + src/lang/faroese.txt | 1 + src/lang/finnish.txt | 1 + src/lang/french.txt | 3 + src/lang/frisian.txt | 1 + src/lang/gaelic.txt | 1 + src/lang/galician.txt | 1 + src/lang/german.txt | 1 + src/lang/greek.txt | 1 + src/lang/hebrew.txt | 1 + src/lang/hindi.txt | 1 + src/lang/hungarian.txt | 1 + src/lang/icelandic.txt | 1 + src/lang/ido.txt | 1 + src/lang/indonesian.txt | 1 + src/lang/irish.txt | 1 + src/lang/italian.txt | 1 + src/lang/japanese.txt | 1 + src/lang/korean.txt | 1 + src/lang/latin.txt | 1 + src/lang/latvian.txt | 1 + src/lang/lithuanian.txt | 112 ++++++++++++++++++++++++++---- src/lang/luxembourgish.txt | 1 + src/lang/macedonian.txt | 1 + src/lang/malay.txt | 1 + src/lang/maltese.txt | 1 + src/lang/marathi.txt | 1 + src/lang/norwegian_bokmal.txt | 3 + src/lang/norwegian_nynorsk.txt | 1 + src/lang/persian.txt | 1 + src/lang/polish.txt | 3 + src/lang/portuguese.txt | 1 + src/lang/romanian.txt | 1 + src/lang/russian.txt | 1 + src/lang/serbian.txt | 1 + src/lang/simplified_chinese.txt | 1 + src/lang/slovak.txt | 1 + src/lang/slovenian.txt | 1 + src/lang/spanish.txt | 1 + src/lang/spanish_MX.txt | 1 + src/lang/swedish.txt | 3 + src/lang/tamil.txt | 1 + src/lang/thai.txt | 1 + src/lang/traditional_chinese.txt | 1 + src/lang/turkish.txt | 1 + src/lang/ukrainian.txt | 1 + src/lang/urdu.txt | 1 + src/lang/vietnamese.txt | 1 + src/lang/welsh.txt | 20 ++++++ 64 files changed, 192 insertions(+), 16 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 21aa361b0b..378f99f5f6 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -953,6 +953,7 @@ STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Addision + STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Kon nie 'n lys van beskikbare skermresolusies bepaal nie STR_ERROR_FULLSCREEN_FAILED :{WHITE}Volskerm metode gedop diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index d935ab0ac7..133d9c8f10 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -990,6 +990,7 @@ STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}معلو + STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}فشل في استرداد قائمة الدقة المدعومة STR_ERROR_FULLSCREEN_FAILED :{WHITE}فشل تشغيل نمط الشاشة الكاملة diff --git a/src/lang/basque.txt b/src/lang/basque.txt index c40a398ae2..c5f02432d3 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -924,6 +924,7 @@ STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Musika p + STR_ERROR_FULLSCREEN_FAILED :{WHITE}Pantaila osoko moduak huts egin du # Custom currency window diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 6439d49f84..ea803991bb 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -1394,6 +1394,7 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}База STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Выберыце базавы музычны набор для выкарыстаньня STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Дадатковая інфармацыя аб базавым музычным наборы + STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(модулі ўзаемадзеяньня з сацыяльнымі платформамі не ўсталяваны) STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{BLACK}{STRING} ({STRING}) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index af21b131a6..7ca1fa2c58 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1084,6 +1084,7 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Conjunto STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selecione um conjunto de músicas básicas para usar STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Informação adicional sobre o conjunto de músicas básicas + STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(não existem plugins instalados para integrar com as plataformas sociais) STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{BLACK}{STRING} ({STRING}) @@ -3591,7 +3592,7 @@ STR_INVALID_VEHICLE : Date: Tue, 19 Mar 2024 18:09:35 +0100 Subject: [PATCH 467/695] Codechange: support storing std::string vectors/deques in the savegame --- src/saveload/saveload.cpp | 20 +++++++++++++++----- src/saveload/saveload.h | 10 ++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index e32c64a4ac..ded1a83467 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -1259,13 +1259,17 @@ public: */ static size_t SlCalcLen(const void *storage, VarType conv, SaveLoadType cmd = SL_VAR) { - assert(cmd == SL_VAR || cmd == SL_REF); + assert(cmd == SL_VAR || cmd == SL_REF || cmd == SL_STDSTR); const SlStorageT *list = static_cast(storage); - int type_size = SlGetArrayLength(list->size()); - int item_size = SlCalcConvFileLen(cmd == SL_VAR ? conv : (VarType)SLE_FILE_U32); - return list->size() * item_size + type_size; + size_t type_size = SlGetArrayLength(list->size()); + if constexpr (std::is_same_v, SlStorageT> || std::is_same_v, SlStorageT>) { + return std::accumulate(list->begin(), list->end(), type_size, [](size_t sum, const std::string &str) { return sum + SlCalcStdStringLen(&str); }); + } else { + size_t item_size = SlCalcConvFileLen(cmd == SL_VAR ? conv : (VarType)SLE_FILE_U32); + return list->size() * item_size + type_size; + } } static void SlSaveLoadMember(SaveLoadType cmd, Tvar *item, VarType conv) @@ -1273,6 +1277,7 @@ public: switch (cmd) { case SL_VAR: SlSaveLoadConv(item, conv); break; case SL_REF: SlSaveLoadRef(item, conv); break; + case SL_STDSTR: SlStdString(item, conv); break; default: NOT_REACHED(); } @@ -1286,7 +1291,7 @@ public: */ static void SlSaveLoad(void *storage, VarType conv, SaveLoadType cmd = SL_VAR) { - assert(cmd == SL_VAR || cmd == SL_REF); + assert(cmd == SL_VAR || cmd == SL_REF || cmd == SL_STDSTR); SlStorageT *list = static_cast(storage); @@ -1305,6 +1310,7 @@ public: switch (cmd) { case SL_VAR: length = IsSavegameVersionBefore(SLV_SAVELOAD_LIST_LENGTH) ? SlReadUint32() : SlReadArrayLength(); break; case SL_REF: length = IsSavegameVersionBefore(SLV_69) ? SlReadUint16() : IsSavegameVersionBefore(SLV_SAVELOAD_LIST_LENGTH) ? SlReadUint32() : SlReadArrayLength(); break; + case SL_STDSTR: length = SlReadArrayLength(); break; default: NOT_REACHED(); } @@ -1375,6 +1381,7 @@ static inline size_t SlCalcDequeLen(const void *deque, VarType conv) case SLE_VAR_U32: return SlStorageHelper::SlCalcLen(deque, conv); case SLE_VAR_I64: return SlStorageHelper::SlCalcLen(deque, conv); case SLE_VAR_U64: return SlStorageHelper::SlCalcLen(deque, conv); + case SLE_VAR_STR: return SlStorageHelper::SlCalcLen(deque, conv, SL_STDSTR); default: NOT_REACHED(); } } @@ -1396,6 +1403,7 @@ static void SlDeque(void *deque, VarType conv) case SLE_VAR_U32: SlStorageHelper::SlSaveLoad(deque, conv); break; case SLE_VAR_I64: SlStorageHelper::SlSaveLoad(deque, conv); break; case SLE_VAR_U64: SlStorageHelper::SlSaveLoad(deque, conv); break; + case SLE_VAR_STR: SlStorageHelper::SlSaveLoad(deque, conv, SL_STDSTR); break; default: NOT_REACHED(); } } @@ -1417,6 +1425,7 @@ static inline size_t SlCalcVectorLen(const void *vector, VarType conv) case SLE_VAR_U32: return SlStorageHelper::SlCalcLen(vector, conv); case SLE_VAR_I64: return SlStorageHelper::SlCalcLen(vector, conv); case SLE_VAR_U64: return SlStorageHelper::SlCalcLen(vector, conv); + case SLE_VAR_STR: return SlStorageHelper::SlCalcLen(vector, conv, SL_STDSTR); default: NOT_REACHED(); } } @@ -1438,6 +1447,7 @@ static void SlVector(void *vector, VarType conv) case SLE_VAR_U32: SlStorageHelper::SlSaveLoad(vector, conv); break; case SLE_VAR_I64: SlStorageHelper::SlSaveLoad(vector, conv); break; case SLE_VAR_U64: SlStorageHelper::SlSaveLoad(vector, conv); break; + case SLE_VAR_STR: SlStorageHelper::SlSaveLoad(vector, conv, SL_STDSTR); break; default: NOT_REACHED(); } } diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 05ffac1c04..db9de245c9 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -944,6 +944,16 @@ inline constexpr bool SlCheckVarSize(SaveLoadType cmd, VarType type, size_t leng */ #define SLE_CONDDEQUE(base, variable, type, from, to) SLE_GENERAL(SL_DEQUE, base, variable, type, 0, from, to, 0) +/** + * Storage of a vector of #SL_VAR elements in some savegame versions. + * @param base Name of the class or struct containing the list. + * @param variable Name of the variable in the class or struct referenced by \a base. + * @param type Storage of the data in memory and in the savegame. + * @param from First savegame version that has the list. + * @param to Last savegame version that has the list. + */ +#define SLE_CONDVECTOR(base, variable, type, from, to) SLE_GENERAL(SL_VECTOR, base, variable, type, 0, from, to, 0) + /** * Storage of a variable in every version of a savegame. * @param base Name of the class or struct containing the variable. From 66354ab9ebfe4caa7f6645cea07725c3661d8614 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 23 Mar 2024 11:53:08 +0100 Subject: [PATCH 468/695] Codechange: introduce allow list infrastructure for companies --- src/command_type.h | 1 + src/company_base.h | 2 ++ src/company_cmd.cpp | 18 ++++++++++++++++++ src/company_cmd.h | 2 ++ src/network/core/config.h | 5 +++++ src/network/core/tcp_game.h | 3 ++- src/network/network.cpp | 4 +++- src/network/network_base.h | 1 + src/network/network_client.cpp | 3 +++ src/network/network_server.cpp | 27 +++++++++++++++++++++------ src/saveload/company_sl.cpp | 2 ++ src/saveload/saveload.h | 2 ++ src/tests/test_network_crypto.cpp | 1 + 13 files changed, 63 insertions(+), 8 deletions(-) diff --git a/src/command_type.h b/src/command_type.h index dae768104b..8f3cbedd93 100644 --- a/src/command_type.h +++ b/src/command_type.h @@ -294,6 +294,7 @@ enum Commands : uint16_t { CMD_CREATE_SUBSIDY, ///< create a new subsidy CMD_COMPANY_CTRL, ///< used in multiplayer to create a new companies etc. + CMD_COMPANY_ADD_ALLOW_LIST, ///< Used in multiplayer to add a client's public key to the company's allow list. CMD_CUSTOM_NEWS_ITEM, ///< create a custom news message CMD_CREATE_GOAL, ///< create a new goal CMD_REMOVE_GOAL, ///< remove a goal diff --git a/src/company_base.h b/src/company_base.h index 9d4a3dc87b..d6ab4a8fd1 100644 --- a/src/company_base.h +++ b/src/company_base.h @@ -75,6 +75,8 @@ struct CompanyProperties { uint32_t president_name_2; ///< Parameter of #president_name_1 std::string president_name; ///< Name of the president if the user changed it. + NetworkAuthorizedKeys allow_list; ///< Public keys of clients that are allowed to join this company. + CompanyManagerFace face; ///< Face description of the president. Money money; ///< Money owned by the company. diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 6fa44f4bc5..d937479419 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -980,6 +980,24 @@ CommandCost CmdCompanyCtrl(DoCommandFlag flags, CompanyCtrlAction cca, CompanyID return CommandCost(); } +/** + * Add the given public key to the allow list of this company. + * @param flags Operation to perform. + * @param public_key The public key of the client to add. + * @return The cost of this operation or an error. + */ +CommandCost CmdCompanyAddAllowList(DoCommandFlag flags, const std::string &public_key) +{ + if (flags & DC_EXEC) { + if (Company::Get(_current_company)->allow_list.Add(public_key)) { + InvalidateWindowData(WC_CLIENT_LIST, 0); + SetWindowDirty(WC_COMPANY, _current_company); + } + } + + return CommandCost(); +} + /** * Change the company manager's face. * @param flags operation to perform diff --git a/src/company_cmd.h b/src/company_cmd.h index 8493549c58..5f818c4b8f 100644 --- a/src/company_cmd.h +++ b/src/company_cmd.h @@ -18,6 +18,7 @@ enum ClientID : uint32_t; enum Colours : uint8_t; CommandCost CmdCompanyCtrl(DoCommandFlag flags, CompanyCtrlAction cca, CompanyID company_id, CompanyRemoveReason reason, ClientID client_id); +CommandCost CmdCompanyAddAllowList(DoCommandFlag flags, const std::string &public_key); CommandCost CmdGiveMoney(DoCommandFlag flags, Money money, CompanyID dest_company); CommandCost CmdRenameCompany(DoCommandFlag flags, const std::string &text); CommandCost CmdRenamePresident(DoCommandFlag flags, const std::string &text); @@ -25,6 +26,7 @@ CommandCost CmdSetCompanyManagerFace(DoCommandFlag flags, CompanyManagerFace cmf CommandCost CmdSetCompanyColour(DoCommandFlag flags, LiveryScheme scheme, bool primary, Colours colour); DEF_CMD_TRAIT(CMD_COMPANY_CTRL, CmdCompanyCtrl, CMD_SPECTATOR | CMD_CLIENT_ID | CMD_NO_EST, CMDT_SERVER_SETTING) +DEF_CMD_TRAIT(CMD_COMPANY_ADD_ALLOW_LIST, CmdCompanyAddAllowList, CMD_NO_EST, CMDT_SERVER_SETTING) DEF_CMD_TRAIT(CMD_GIVE_MONEY, CmdGiveMoney, 0, CMDT_MONEY_MANAGEMENT) DEF_CMD_TRAIT(CMD_RENAME_COMPANY, CmdRenameCompany, 0, CMDT_OTHER_MANAGEMENT) DEF_CMD_TRAIT(CMD_RENAME_PRESIDENT, CmdRenamePresident, 0, CMDT_OTHER_MANAGEMENT) diff --git a/src/network/core/config.h b/src/network/core/config.h index e74cfb2fff..99e6a3bd94 100644 --- a/src/network/core/config.h +++ b/src/network/core/config.h @@ -96,5 +96,10 @@ static const uint NETWORK_MAX_GRF_COUNT = 255; * This is related to \c X25519_KEY_SIZE in the network crypto internals. */ static const uint NETWORK_SECRET_KEY_LENGTH = 32 * 2 + 1; +/** + * The maximum length of the hexadecimal encoded public keys, in bytes including '\0'. + * This is related to \c X25519_KEY_SIZE in the network crypto internals. + */ +static const uint NETWORK_PUBLIC_KEY_LENGTH = 32 * 2 + 1; #endif /* NETWORK_CORE_CONFIG_H */ diff --git a/src/network/core/tcp_game.h b/src/network/core/tcp_game.h index ce6f9bdcea..d29a17d8e0 100644 --- a/src/network/core/tcp_game.h +++ b/src/network/core/tcp_game.h @@ -202,7 +202,8 @@ protected: * Send information about a client: * uint32_t ID of the client (always unique on a server. 1 = server, 0 is invalid). * uint8_t ID of the company the client is playing as (255 for spectators). - * string Name of the client. + * string Name of the client. + * string Public key of the client. * @param p The packet that was just received. */ virtual NetworkRecvStatus Receive_SERVER_CLIENT_INFO(Packet &p); diff --git a/src/network/network.cpp b/src/network/network.cpp index b37b1aaf68..5e16ae49fb 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -165,10 +165,12 @@ bool NetworkAuthorizedKeys::Contains(std::string_view key) const /** * Add the given key to the authorized keys, when it is not already contained. * @param key The key to add. - * @return \c true when the key was added, \c false when the key already existed. + * @return \c true when the key was added, \c false when the key already existed or the key was empty. */ bool NetworkAuthorizedKeys::Add(std::string_view key) { + if (key.empty()) return false; + auto iter = FindKey(this, key); if (iter != this->end()) return false; diff --git a/src/network/network_base.h b/src/network/network_base.h index 0b717163f7..0b3cbde7d2 100644 --- a/src/network/network_base.h +++ b/src/network/network_base.h @@ -24,6 +24,7 @@ extern NetworkClientInfoPool _networkclientinfo_pool; struct NetworkClientInfo : NetworkClientInfoPool::PoolItem<&_networkclientinfo_pool> { ClientID client_id; ///< Client identifier (same as ClientState->client_id) std::string client_name; ///< Name of the client + std::string public_key; ///< The public key of the client. CompanyID client_playas; ///< As which company is this client playing (CompanyID) TimerGameEconomy::Date join_date; ///< Gamedate the client has joined diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index f6302a40e3..1e6dda3b57 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -608,6 +608,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CLIENT_INFO(Pac Debug(net, 9, "Client::Receive_SERVER_CLIENT_INFO(): client_id={}, playas={}", client_id, playas); std::string name = p.Recv_string(NETWORK_NAME_LENGTH); + std::string public_key = p.Recv_string(NETWORK_PUBLIC_KEY_LENGTH); if (this->status < STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET; if (this->HasClientQuit()) return NETWORK_RECV_STATUS_CLIENT_QUIT; @@ -632,6 +633,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CLIENT_INFO(Pac ci->client_playas = playas; ci->client_name = name; + ci->public_key = public_key; InvalidateWindowData(WC_CLIENT_LIST, 0); @@ -651,6 +653,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CLIENT_INFO(Pac if (client_id == _network_own_client_id) this->SetInfo(ci); ci->client_name = name; + ci->public_key = public_key; InvalidateWindowData(WC_CLIENT_LIST, 0); diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 8bd2f4c7e4..c1bfdde98c 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -332,6 +332,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendClientInfo(NetworkClientIn p->Send_uint32(ci->client_id); p->Send_uint8 (ci->client_playas); p->Send_string(ci->client_name); + p->Send_string(ci->public_key); this->SendPacket(std::move(p)); } @@ -959,6 +960,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_IDENTIFY(Packet ci->join_date = TimerGameEconomy::date; ci->client_name = client_name; ci->client_playas = playas; + ci->public_key = this->peer_public_key; Debug(desync, 1, "client: {:08x}; {:02x}; {:02x}; {:02x}", TimerGameEconomy::date, TimerGameEconomy::date_fract, (int)ci->client_playas, (int)ci->index); /* Make sure companies to which people try to join are not autocleaned */ @@ -1177,6 +1179,23 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_COMMAND(Packet } } + if (cp.cmd == CMD_COMPANY_ADD_ALLOW_LIST) { + /* Maybe the client just got moved before allowing? */ + if (ci->client_id != CLIENT_ID_SERVER && ci->client_playas != cp.company) return NETWORK_RECV_STATUS_OKAY; + + std::string public_key = std::get<0>(EndianBufferReader::ToValue::Args>(cp.data)); + bool found = false; + for (const NetworkClientInfo *info : NetworkClientInfo::Iterate()) { + if (info->public_key == public_key) { + found = true; + break; + } + } + + /* Maybe the client just left? */ + if (!found) return NETWORK_RECV_STATUS_OKAY; + } + if (GetCommandFlags(cp.cmd) & CMD_CLIENT_ID) NetworkReplaceCommandClientId(cp, this->client_id); this->incoming_queue.push_back(cp); @@ -1541,7 +1560,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_MOVE(Packet &p) if (company_id != COMPANY_SPECTATOR && !Company::IsValidHumanID(company_id)) return NETWORK_RECV_STATUS_OKAY; /* Check if we require a password for this company */ - if (company_id != COMPANY_SPECTATOR && !_network_company_states[company_id].password.empty()) { + if (company_id != COMPANY_SPECTATOR && !Company::Get(company_id)->allow_list.Contains(this->peer_public_key) && !_network_company_states[company_id].password.empty()) { /* we need a password from the client - should be in this packet */ std::string password = p.Recv_string(NETWORK_PASSWORD_LENGTH); @@ -2275,13 +2294,9 @@ void NetworkServerNewCompany(const Company *c, NetworkClientInfo *ci) /* ci is nullptr when replaying, or for AIs. In neither case there is a client. */ ci->client_playas = c->index; NetworkUpdateClientInfo(ci->client_id); + Command::SendNet(STR_NULL, c->index, ci->public_key); Command::SendNet(STR_NULL, c->index, ci->client_name); - } - if (ci != nullptr) { - /* ci is nullptr when replaying, or for AIs. In neither case there is a client. - We need to send Admin port update here so that they first know about the new company - and then learn about a possibly joining client (see FS#6025) */ NetworkServerSendChat(NETWORK_ACTION_COMPANY_NEW, DESTTYPE_BROADCAST, 0, "", ci->client_id, c->index + 1); } } diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp index 50a247da54..651daa1bcb 100644 --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -450,6 +450,8 @@ static const SaveLoad _company_desc[] = { SLE_VAR(CompanyProperties, president_name_2, SLE_UINT32), SLE_CONDSSTR(CompanyProperties, president_name, SLE_STR | SLF_ALLOW_CONTROL, SLV_84, SL_MAX_VERSION), + SLE_CONDVECTOR(CompanyProperties, allow_list, SLE_STR, SLV_COMPANY_ALLOW_LIST, SL_MAX_VERSION), + SLE_VAR(CompanyProperties, face, SLE_UINT32), /* money was changed to a 64 bit field in savegame version 1. */ diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index db9de245c9..94c1303acc 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -379,6 +379,8 @@ enum SaveLoadVersion : uint16_t { SLV_SCRIPT_RANDOMIZER, ///< 333 PR#12063 v14.0-RC1 Save script randomizers. SLV_VEHICLE_ECONOMY_AGE, ///< 334 PR#12141 v14.0 Add vehicle age in economy year, for profit stats minimum age + SLV_COMPANY_ALLOW_LIST, ///< 335 PR#12337 Saving of list of client keys that are allowed to join this company. + SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/tests/test_network_crypto.cpp b/src/tests/test_network_crypto.cpp index 2c8734e11b..1cba244c9b 100644 --- a/src/tests/test_network_crypto.cpp +++ b/src/tests/test_network_crypto.cpp @@ -18,6 +18,7 @@ /* The length of the hexadecimal representation of a X25519 key must fit in the key length. */ static_assert(NETWORK_SECRET_KEY_LENGTH >= X25519_KEY_SIZE * 2 + 1); +static_assert(NETWORK_PUBLIC_KEY_LENGTH >= X25519_KEY_SIZE * 2 + 1); class MockNetworkSocketHandler : public NetworkSocketHandler { public: From 4f3db8eeaf48cb1f712c8900de3b6aeb3dfffedd Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 23 Mar 2024 13:38:37 +0100 Subject: [PATCH 469/695] Feature: authorize specific clients to join network company without password --- src/lang/english.txt | 1 + src/network/network.cpp | 25 +++++++++++++++++++++++++ src/network/network_base.h | 2 ++ src/network/network_crypto.cpp | 9 +++++++++ src/network/network_crypto.h | 1 + src/network/network_func.h | 1 + src/network/network_gui.cpp | 7 +++++++ src/toolbar_gui.cpp | 2 +- 8 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index bb55d2194c..aff5834e51 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2487,6 +2487,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Your player nam STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Administrative actions to perform for this client STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Administrative actions to perform for this company STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Join this company +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Authorize this client to join your company STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Send a message to this player STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Send a message to all players of this company STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Send a message to all spectators diff --git a/src/network/network.cpp b/src/network/network.cpp index 5e16ae49fb..710c2091c4 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -126,6 +126,28 @@ NetworkClientInfo::~NetworkClientInfo() return nullptr; } +/** + * Returns whether the given company can be joined by this client. + * @param company_id The id of the company. + * @return \c true when this company is allowed to join, otherwise \c false. + */ +bool NetworkClientInfo::CanJoinCompany(CompanyID company_id) const +{ + Company *c = Company::GetIfValid(company_id); + return c != nullptr && c->allow_list.Contains(this->public_key); +} + +/** + * Returns whether the given company can be joined by this client. + * @param company_id The id of the company. + * @return \c true when this company is allowed to join, otherwise \c false. + */ +bool NetworkCanJoinCompany(CompanyID company_id) +{ + NetworkClientInfo *info = NetworkClientInfo::GetByClientID(_network_own_client_id); + return info != nullptr && info->CanJoinCompany(company_id); +} + /** * Return the client state given it's client-identifier * @param client_id the ClientID to search for @@ -889,6 +911,9 @@ static void NetworkInitGameInfo() ci->client_playas = COMPANY_SPECTATOR; ci->client_name = _settings_client.network.client_name; + + NetworkAuthenticationClientHandler::EnsureValidSecretKeyAndUpdatePublicKey(_settings_client.network.client_secret_key, _settings_client.network.client_public_key); + ci->public_key = _settings_client.network.client_public_key; } /** diff --git a/src/network/network_base.h b/src/network/network_base.h index 0b3cbde7d2..497db78398 100644 --- a/src/network/network_base.h +++ b/src/network/network_base.h @@ -36,6 +36,8 @@ struct NetworkClientInfo : NetworkClientInfoPool::PoolItem<&_networkclientinfo_p ~NetworkClientInfo(); static NetworkClientInfo *GetByClientID(ClientID client_id); + + bool CanJoinCompany(CompanyID company_id) const; }; #endif /* NETWORK_BASE_H */ diff --git a/src/network/network_crypto.cpp b/src/network/network_crypto.cpp index 3cea679869..38a1f9dd09 100644 --- a/src/network/network_crypto.cpp +++ b/src/network/network_crypto.cpp @@ -443,6 +443,15 @@ void CombinedAuthenticationServerHandler::Add(CombinedAuthenticationServerHandle this->SendResponse(); } +/** + * Ensures that the given secret key is valid, and when not overwrite it with a valid secret key. Then update the public key to be associated with the secret key. + * @param secret_key The location where the secret key is stored; can be overwritten when invalid. + * @param public_key The location where the public key is stored; can be overwritten when invalid. + */ +/* static */ void NetworkAuthenticationClientHandler::EnsureValidSecretKeyAndUpdatePublicKey(std::string &secret_key, std::string &public_key) +{ + X25519AuthorizedKeyClientHandler::GetValidSecretKeyAndUpdatePublicKey(secret_key, public_key); +} /** * Create a NetworkAuthenticationClientHandler. diff --git a/src/network/network_crypto.h b/src/network/network_crypto.h index b63c90d8a0..74424860a9 100644 --- a/src/network/network_crypto.h +++ b/src/network/network_crypto.h @@ -248,6 +248,7 @@ public: */ virtual bool ReceiveEnableEncryption(struct Packet &p) = 0; + static void EnsureValidSecretKeyAndUpdatePublicKey(std::string &secret_key, std::string &public_key); static std::unique_ptr Create(std::shared_ptr password_handler, std::string &secret_key, std::string &public_key); }; diff --git a/src/network/network_func.h b/src/network/network_func.h index 91af613c04..35539fa9f6 100644 --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -75,6 +75,7 @@ void NetworkServerNewCompany(const Company *company, NetworkClientInfo *ci); bool NetworkServerChangeClientName(ClientID client_id, const std::string &new_name); +bool NetworkCanJoinCompany(CompanyID company_id); void NetworkServerDoMove(ClientID client_id, CompanyID company_id); void NetworkServerSendRcon(ClientID client_id, TextColour colour_code, const std::string &string); void NetworkServerSendChat(NetworkAction action, DestType type, int dest, const std::string &msg, ClientID from_id, int64_t data = 0, bool from_admin = false); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index fbd90c5a12..12333ef4d7 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1536,6 +1536,12 @@ private: ShowNetworkChatQueryWindow(DESTTYPE_CLIENT, client_id); } + static void OnClickClientAuthorize([[maybe_unused]] NetworkClientListWindow *w, [[maybe_unused]] Point pt, ClientID client_id) + { + AutoRestoreBackup cur_company(_current_company, NetworkClientInfo::GetByClientID(_network_own_client_id)->client_playas); + Command::Post(NetworkClientInfo::GetByClientID(client_id)->public_key); + } + /** * Part of RebuildList() to create the information for a single company. * @param company_id The company to build the list for. @@ -1558,6 +1564,7 @@ private: if (_network_server) this->buttons[line_count].push_back(std::make_unique(SPR_ADMIN, STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP, COLOUR_RED, ci->client_id, &NetworkClientListWindow::OnClickClientAdmin, _network_own_client_id == ci->client_id)); if (_network_own_client_id != ci->client_id) this->buttons[line_count].push_back(std::make_unique(SPR_CHAT, STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP, COLOUR_ORANGE, ci->client_id, &NetworkClientListWindow::OnClickClientChat)); + if (_network_own_client_id != ci->client_id && client_playas != COMPANY_SPECTATOR && !ci->CanJoinCompany(client_playas)) this->buttons[line_count].push_back(std::make_unique(SPR_JOIN, STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP, COLOUR_GREEN, ci->client_id, &NetworkClientListWindow::OnClickClientAuthorize)); if (ci->client_id == _network_own_client_id) { this->player_self_index = this->line_count; diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 58589da48c..1f71b10671 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -97,7 +97,7 @@ static CallBackFunction _last_started_action = CBF_NONE; ///< Last started user */ class DropDownListCompanyItem : public DropDownIcon, true>> { public: - DropDownListCompanyItem(CompanyID company, bool shaded) : DropDownIcon, true>>(SPR_COMPANY_ICON, COMPANY_SPRITE_COLOUR(company), NetworkCompanyIsPassworded(company) ? SPR_LOCK : SPR_EMPTY, PAL_NONE, STR_NULL, company, false, shaded) + DropDownListCompanyItem(CompanyID company, bool shaded) : DropDownIcon, true>>(SPR_COMPANY_ICON, COMPANY_SPRITE_COLOUR(company), NetworkCanJoinCompany(company) ? SPR_EMPTY : SPR_LOCK, PAL_NONE, STR_NULL, company, false, shaded) { SetDParam(0, company); SetDParam(1, company); From a002803d1cddf6e09106ae7b6afcefc7fa22be69 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 23 Mar 2024 18:40:34 +0100 Subject: [PATCH 470/695] Remove: autoclean_unprotected settings; all companies will be protected --- src/console_cmds.cpp | 10 +--------- src/network/network_server.cpp | 23 +++++++---------------- src/settings_type.h | 3 +-- src/table/settings/network_settings.ini | 8 -------- 4 files changed, 9 insertions(+), 35 deletions(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 781a93f8cc..c9bfa9fde9 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1829,13 +1829,6 @@ DEF_CONSOLE_CMD(ConCompanies) SetDParam(0, c->index); std::string company_name = GetString(STR_COMPANY_NAME); - const char *password_state = ""; - if (c->is_ai) { - password_state = "AI"; - } else if (_network_server) { - password_state = _network_company_states[c->index].password.empty() ? "unprotected" : "protected"; - } - std::string colour = GetString(STR_COLOUR_DARK_BLUE + _company_colours[c->index]); IConsolePrint(CC_INFO, "#:{}({}) Company Name: '{}' Year Founded: {} Money: {} Loan: {} Value: {} (T:{}, R:{}, P:{}, S:{}) {}", c->index + 1, colour, company_name, @@ -1844,7 +1837,7 @@ DEF_CONSOLE_CMD(ConCompanies) c->group_all[VEH_ROAD].num_vehicle, c->group_all[VEH_AIRCRAFT].num_vehicle, c->group_all[VEH_SHIP].num_vehicle, - password_state); + c->is_ai ? "AI" : ""); } return true; @@ -2828,7 +2821,6 @@ void IConsoleStdLibRegister() IConsole::AliasRegister("pause_on_join", "setting pause_on_join %+"); IConsole::AliasRegister("autoclean_companies", "setting autoclean_companies %+"); IConsole::AliasRegister("autoclean_protected", "setting autoclean_protected %+"); - IConsole::AliasRegister("autoclean_unprotected", "setting autoclean_unprotected %+"); IConsole::AliasRegister("restart_game_year", "setting restart_game_year %+"); IConsole::AliasRegister("min_players", "setting min_active_clients %+"); IConsole::AliasRegister("reload_cfg", "setting reload_cfg %+"); diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index c1bfdde98c..3e7bafb0c3 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -1633,11 +1633,10 @@ void NetworkUpdateClientInfo(ClientID client_id) NetworkAdminClientUpdate(ci); } -/** Check if the server has autoclean_companies activated - * Two things happen: - * 1) If a company is not protected, it is closed after 1 year (for example) - * 2) If a company is protected, protection is disabled after 3 years (for example) - * (and item 1. happens a year later) +/** + * Remove companies that have not been used depending on the \c autoclean_companies setting + * and values for \c autoclean_protected, which removes any company, and + * \c autoclean_novehicles, which removes companies without vehicles. */ static void NetworkAutoCleanCompanies() { @@ -1672,19 +1671,11 @@ static void NetworkAutoCleanCompanies() /* The company is empty for one month more */ if (c->months_empty != std::numeric_limitsmonths_empty)>::max()) c->months_empty++; - /* Is the company empty for autoclean_unprotected-months, and is there no protection? */ - if (_settings_client.network.autoclean_unprotected != 0 && c->months_empty > _settings_client.network.autoclean_unprotected && _network_company_states[c->index].password.empty()) { + /* Is the company empty for autoclean_protected-months? */ + if (_settings_client.network.autoclean_protected != 0 && c->months_empty > _settings_client.network.autoclean_protected) { /* Shut the company down */ Command::Post(CCA_DELETE, c->index, CRR_AUTOCLEAN, INVALID_CLIENT_ID); - IConsolePrint(CC_INFO, "Auto-cleaned company #{} with no password.", c->index + 1); - } - /* Is the company empty for autoclean_protected-months, and there is a protection? */ - if (_settings_client.network.autoclean_protected != 0 && c->months_empty > _settings_client.network.autoclean_protected && !_network_company_states[c->index].password.empty()) { - /* Unprotect the company */ - _network_company_states[c->index].password.clear(); - IConsolePrint(CC_INFO, "Auto-removed protection from company #{}.", c->index + 1); - c->months_empty = 0; - NetworkServerUpdateCompanyPassworded(c->index, false); + IConsolePrint(CC_INFO, "Auto-cleaned company #{}.", c->index + 1); } /* Is the company empty for autoclean_novehicles-months, and has no vehicles? */ if (_settings_client.network.autoclean_novehicles != 0 && c->months_empty > _settings_client.network.autoclean_novehicles && !HasBit(has_vehicles, c->index)) { diff --git a/src/settings_type.h b/src/settings_type.h index 017a74664e..cfc6ad7c33 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -324,8 +324,7 @@ struct NetworkSettings { std::string connect_to_ip; ///< default for the "Add server" query std::string network_id; ///< network ID for servers bool autoclean_companies; ///< automatically remove companies that are not in use - uint8_t autoclean_unprotected; ///< remove passwordless companies after this many months - uint8_t autoclean_protected; ///< remove the password from passworded companies after this many months + uint8_t autoclean_protected; ///< Remove companies after this many months. uint8_t autoclean_novehicles; ///< remove companies with no vehicles after this many months uint8_t max_companies; ///< maximum amount of companies uint8_t max_clients; ///< maximum amount of clients diff --git a/src/table/settings/network_settings.ini b/src/table/settings/network_settings.ini index 52a02853bb..12afbd534e 100644 --- a/src/table/settings/network_settings.ini +++ b/src/table/settings/network_settings.ini @@ -193,14 +193,6 @@ var = network.autoclean_companies flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY def = false -[SDTC_VAR] -var = network.autoclean_unprotected -type = SLE_UINT8 -flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL | SF_NETWORK_ONLY -def = 12 -min = 0 -max = 240 - [SDTC_VAR] var = network.autoclean_protected type = SLE_UINT8 From 71fc9075840e9263433a4dbbb0f1c38a6f8eed27 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 23 Mar 2024 18:55:43 +0100 Subject: [PATCH 471/695] Change: remove company passwords over client allow lists --- src/network/network.cpp | 12 ++------ src/network/network_client.cpp | 4 +-- src/network/network_func.h | 2 -- src/network/network_gui.cpp | 20 ++++--------- src/network/network_internal.h | 2 -- src/network/network_server.cpp | 52 ++++++++-------------------------- src/network/network_type.h | 5 ---- 7 files changed, 21 insertions(+), 76 deletions(-) diff --git a/src/network/network.cpp b/src/network/network.cpp index 710c2091c4..04e201ded2 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -67,7 +67,6 @@ bool _network_server; ///< network-server is active bool _network_available; ///< is network mode available? bool _network_dedicated; ///< are we a dedicated server? bool _is_network_server; ///< Does this client wants to be a network-server? -NetworkCompanyState *_network_company_states = nullptr; ///< Statistics about some companies. ClientID _network_own_client_id; ///< Our client identifier. ClientID _redirect_console_to_client; ///< If not invalid, redirect the console output to a client. uint8_t _network_reconnect; ///< Reconnect timeout @@ -85,7 +84,6 @@ uint32_t _sync_seed_2; ///< Second part of the seed. #endif uint32_t _sync_frame; ///< The frame to perform the sync check. bool _network_first_time; ///< Whether we have finished joining or not. -CompanyMask _network_company_passworded; ///< Bitmask of the password status of all companies. static_assert((int)NETWORK_COMPANY_NAME_LENGTH == MAX_LENGTH_COMPANY_NAME_CHARS * MAX_CHAR_LENGTH); @@ -287,9 +285,9 @@ std::string GenerateCompanyPasswordHash(const std::string &password, const std:: * @param company_id id of the company we want to check the 'passworded' flag for. * @return true if the company requires a password. */ -bool NetworkCompanyIsPassworded(CompanyID company_id) +bool NetworkCompanyIsPassworded([[maybe_unused]] CompanyID company_id) { - return HasBit(_network_company_passworded, company_id); + return false; } /* This puts a text-message to the console, or in the future, the chat-box, @@ -687,10 +685,6 @@ void NetworkClose(bool close_admins) NetworkFreeLocalCommandQueue(); - delete[] _network_company_states; - _network_company_states = nullptr; - _network_company_passworded = 0; - InitializeNetworkPools(close_admins); } @@ -985,7 +979,6 @@ bool NetworkServerStart() Debug(net, 5, "Starting listeners for incoming server queries"); NetworkUDPServerListen(); - _network_company_states = new NetworkCompanyState[MAX_COMPANIES]; _network_server = true; _networking = true; _frame_counter = 0; @@ -995,7 +988,6 @@ bool NetworkServerStart() _network_own_client_id = CLIENT_ID_SERVER; _network_clients_connected = 0; - _network_company_passworded = 0; NetworkInitGameInfo(); diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 1e6dda3b57..a6e6f3277b 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -1261,12 +1261,10 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CONFIG_UPDATE(P return NETWORK_RECV_STATUS_OKAY; } -NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_COMPANY_UPDATE(Packet &p) +NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_COMPANY_UPDATE(Packet &) { if (this->status < STATUS_ACTIVE) return NETWORK_RECV_STATUS_MALFORMED_PACKET; - static_assert(sizeof(_network_company_passworded) <= sizeof(uint16_t)); - _network_company_passworded = p.Recv_uint16(); SetWindowClassesDirty(WC_COMPANY); Debug(net, 9, "Client::Receive_SERVER_COMPANY_UPDATE()"); diff --git a/src/network/network_func.h b/src/network/network_func.h index 35539fa9f6..e4a43be710 100644 --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -24,8 +24,6 @@ #include "../company_type.h" #include "../string_type.h" -extern NetworkCompanyState *_network_company_states; - extern ClientID _network_own_client_id; extern ClientID _redirect_console_to_client; extern uint8_t _network_reconnect; diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 12333ef4d7..c9c6333321 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1423,7 +1423,6 @@ using ClientButton = Button; struct NetworkClientListWindow : Window { private: ClientListWidgets query_widget; ///< During a query this tracks what widget caused the query. - CompanyID join_company; ///< During query for company password, this stores what company we wanted to join. ClientID dd_client_id; ///< During admin dropdown, track which client this was for. CompanyID dd_company_id; ///< During admin dropdown, track which company this was for. @@ -1459,10 +1458,6 @@ private: if (_network_server) { NetworkServerDoMove(CLIENT_ID_SERVER, company_id); MarkWholeScreenDirty(); - } else if (NetworkCompanyIsPassworded(company_id)) { - w->query_widget = WID_CL_COMPANY_JOIN; - w->join_company = company_id; - ShowQueryString(STR_EMPTY, STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION, NETWORK_PASSWORD_LENGTH, w, CS_ALPHANUMERAL, QSF_PASSWORD); } else { NetworkClientRequestMove(company_id); } @@ -1546,14 +1541,15 @@ private: * Part of RebuildList() to create the information for a single company. * @param company_id The company to build the list for. * @param client_playas The company the client is joined as. + * @param can_join_company Whether this company can be joined by us. */ - void RebuildListCompany(CompanyID company_id, CompanyID client_playas) + void RebuildListCompany(CompanyID company_id, CompanyID client_playas, bool can_join_company) { ButtonCommon *chat_button = new CompanyButton(SPR_CHAT, company_id == COMPANY_SPECTATOR ? STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP : STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP, COLOUR_ORANGE, company_id, &NetworkClientListWindow::OnClickCompanyChat); if (_network_server) this->buttons[line_count].push_back(std::make_unique(SPR_ADMIN, STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP, COLOUR_RED, company_id, &NetworkClientListWindow::OnClickCompanyAdmin, company_id == COMPANY_SPECTATOR)); this->buttons[line_count].emplace_back(chat_button); - if (client_playas != company_id) this->buttons[line_count].push_back(std::make_unique(SPR_JOIN, STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP, COLOUR_ORANGE, company_id, &NetworkClientListWindow::OnClickCompanyJoin, company_id != COMPANY_SPECTATOR && Company::Get(company_id)->is_ai)); + if (can_join_company) this->buttons[line_count].push_back(std::make_unique(SPR_JOIN, STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP, COLOUR_ORANGE, company_id, &NetworkClientListWindow::OnClickCompanyJoin, company_id != COMPANY_SPECTATOR && Company::Get(company_id)->is_ai)); this->line_count += 1; @@ -1599,18 +1595,18 @@ private: } if (client_playas != COMPANY_SPECTATOR) { - this->RebuildListCompany(client_playas, client_playas); + this->RebuildListCompany(client_playas, client_playas, false); } /* Companies */ for (const Company *c : Company::Iterate()) { if (c->index == client_playas) continue; - this->RebuildListCompany(c->index, client_playas); + this->RebuildListCompany(c->index, client_playas, (own_ci != nullptr && c->allow_list.Contains(own_ci->public_key)) || _network_server); } /* Spectators */ - this->RebuildListCompany(COMPANY_SPECTATOR, client_playas); + this->RebuildListCompany(COMPANY_SPECTATOR, client_playas, client_playas != COMPANY_SPECTATOR); this->vscroll->SetCount(this->line_count); } @@ -1914,10 +1910,6 @@ public: this->InvalidateData(); break; } - - case WID_CL_COMPANY_JOIN: - NetworkClientRequestMove(this->join_company, str); - break; } } diff --git a/src/network/network_internal.h b/src/network/network_internal.h index 35adc68983..1c2fe23ef2 100644 --- a/src/network/network_internal.h +++ b/src/network/network_internal.h @@ -80,8 +80,6 @@ extern std::string _network_server_name; extern uint8_t _network_reconnect; -extern CompanyMask _network_company_passworded; - void NetworkQueryServer(const std::string &connection_string); void GetBindAddresses(NetworkAddressList *addresses, uint16_t port); diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 3e7bafb0c3..b0ff3cf164 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -485,7 +485,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedCompanyPassword() this->status = STATUS_AUTH_COMPANY; NetworkClientInfo *ci = this->GetInfo(); - if (!Company::IsValidID(ci->client_playas) || _network_company_states[ci->client_playas].password.empty()) { + if (!Company::IsValidID(ci->client_playas)) { return this->SendWelcome(); } @@ -847,8 +847,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyUpdate() auto p = std::make_unique(this, PACKET_SERVER_COMPANY_UPDATE); - static_assert(sizeof(_network_company_passworded) <= sizeof(uint16_t)); - p->Send_uint16(_network_company_passworded); + p->Send_uint16(0); this->SendPacket(std::move(p)); return NETWORK_RECV_STATUS_OKAY; } @@ -939,6 +938,11 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_IDENTIFY(Packet if (!Company::IsValidHumanID(playas)) { return this->SendError(NETWORK_ERROR_COMPANY_MISMATCH); } + + if (!Company::Get(playas)->allow_list.Contains(this->peer_public_key)) { + /* When we're not authorized, just bump us to a spectator. */ + playas = COMPANY_SPECTATOR; + } break; } @@ -1021,7 +1025,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_AUTH_RESPONSE(P return NETWORK_RECV_STATUS_OKAY; } -NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_COMPANY_PASSWORD(Packet &p) +NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_COMPANY_PASSWORD(Packet &) { if (this->status != STATUS_AUTH_COMPANY) { return this->SendError(NETWORK_ERROR_NOT_EXPECTED); @@ -1029,18 +1033,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_COMPANY_PASSWOR Debug(net, 9, "client[{}] Receive_CLIENT_COMPANY_PASSWORD()", this->client_id); - std::string password = p.Recv_string(NETWORK_PASSWORD_LENGTH); - - /* Check company password. Allow joining if we cleared the password meanwhile. - * Also, check the company is still valid - client could be moved to spectators - * in the middle of the authorization process */ - CompanyID playas = this->GetInfo()->client_playas; - if (Company::IsValidID(playas) && !_network_company_states[playas].password.empty() && - _network_company_states[playas].password.compare(password) != 0) { - /* Password is invalid */ - return this->SendError(NETWORK_ERROR_WRONG_PASSWORD); - } - return this->SendWelcome(); } @@ -1559,16 +1551,9 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_MOVE(Packet &p) /* Check if the company is valid, we don't allow moving to AI companies */ if (company_id != COMPANY_SPECTATOR && !Company::IsValidHumanID(company_id)) return NETWORK_RECV_STATUS_OKAY; - /* Check if we require a password for this company */ - if (company_id != COMPANY_SPECTATOR && !Company::Get(company_id)->allow_list.Contains(this->peer_public_key) && !_network_company_states[company_id].password.empty()) { - /* we need a password from the client - should be in this packet */ - std::string password = p.Recv_string(NETWORK_PASSWORD_LENGTH); - - /* Incorrect password sent, return! */ - if (_network_company_states[company_id].password.compare(password) != 0) { - Debug(net, 2, "Wrong password from client-id #{} for company #{}", this->client_id, company_id + 1); - return NETWORK_RECV_STATUS_OKAY; - } + if (company_id != COMPANY_SPECTATOR && !Company::Get(company_id)->allow_list.Contains(this->peer_public_key)) { + Debug(net, 2, "Wrong public key from client-id #{} for company #{}", this->client_id, company_id + 1); + return NETWORK_RECV_STATUS_OKAY; } /* if we get here we can move the client */ @@ -1758,17 +1743,8 @@ bool NetworkServerChangeClientName(ClientID client_id, const std::string &new_na * @param password The new password. * @param already_hashed Is the given password already hashed? */ -void NetworkServerSetCompanyPassword(CompanyID company_id, const std::string &password, bool already_hashed) +void NetworkServerSetCompanyPassword([[maybe_unused]] CompanyID company_id, [[maybe_unused]] const std::string &password, [[maybe_unused]] bool already_hashed) { - if (!Company::IsValidHumanID(company_id)) return; - - if (already_hashed) { - _network_company_states[company_id].password = password; - } else { - _network_company_states[company_id].password = GenerateCompanyPasswordHash(password, _settings_client.network.network_id, _settings_game.game_creation.generation_seed); - } - - NetworkServerUpdateCompanyPassworded(company_id, !_network_company_states[company_id].password.empty()); } /** @@ -2088,7 +2064,6 @@ void NetworkServerUpdateCompanyPassworded(CompanyID company_id, bool passworded) { if (NetworkCompanyIsPassworded(company_id) == passworded) return; - SB(_network_company_passworded, company_id, 1, !!passworded); SetWindowClassesDirty(WC_COMPANY); for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { @@ -2278,9 +2253,6 @@ void NetworkServerNewCompany(const Company *c, NetworkClientInfo *ci) if (!_network_server) return; - _network_company_states[c->index].password.clear(); - NetworkServerUpdateCompanyPassworded(c->index, false); - if (ci != nullptr) { /* ci is nullptr when replaying, or for AIs. In neither case there is a client. */ ci->client_playas = c->index; diff --git a/src/network/network_type.h b/src/network/network_type.h index 4f8617ff37..0ab7d51558 100644 --- a/src/network/network_type.h +++ b/src/network/network_type.h @@ -70,11 +70,6 @@ struct NetworkCompanyStats { bool ai; ///< Is this company an AI }; -/** Some state information of a company, especially for servers */ -struct NetworkCompanyState { - std::string password; ///< The password for the company -}; - struct NetworkClientInfo; /** The type of password we're asking for. */ From ca4bef150416b4e10f4aae428c76f2a63ba8248d Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 23 Mar 2024 19:10:39 +0100 Subject: [PATCH 472/695] Cleanup: remove company password related network packets --- src/network/core/tcp_admin.h | 4 +- src/network/core/tcp_game.cpp | 8 --- src/network/core/tcp_game.h | 39 --------------- src/network/network_admin.cpp | 4 +- src/network/network_client.cpp | 88 ++------------------------------- src/network/network_client.h | 7 +-- src/network/network_server.cpp | 90 +++------------------------------- src/network/network_server.h | 5 -- 8 files changed, 16 insertions(+), 229 deletions(-) diff --git a/src/network/core/tcp_admin.h b/src/network/core/tcp_admin.h index 4320a06f66..e14cd060d8 100644 --- a/src/network/core/tcp_admin.h +++ b/src/network/core/tcp_admin.h @@ -333,7 +333,7 @@ protected: * string Name of the company. * string Name of the companies manager. * uint8_t Main company colour. - * bool Company is password protected. + * bool Company is protected. * uint32_t Year the company was inaugurated. * bool Company is an AI. * @param p The packet that was just received. @@ -347,7 +347,7 @@ protected: * string Name of the company. * string Name of the companies manager. * uint8_t Main company colour. - * bool Company is password protected. + * bool Company is protected. * uint8_t Quarters of bankruptcy. * uint8_t Owner of share 1. * uint8_t Owner of share 2. diff --git a/src/network/core/tcp_game.cpp b/src/network/core/tcp_game.cpp index 5b7ef1dfca..c466ceedee 100644 --- a/src/network/core/tcp_game.cpp +++ b/src/network/core/tcp_game.cpp @@ -83,10 +83,8 @@ NetworkRecvStatus NetworkGameSocketHandler::HandlePacket(Packet &p) case PACKET_SERVER_CLIENT_INFO: return this->Receive_SERVER_CLIENT_INFO(p); case PACKET_CLIENT_IDENTIFY: return this->Receive_CLIENT_IDENTIFY(p); case PACKET_SERVER_AUTH_REQUEST: return this->Receive_SERVER_AUTH_REQUEST(p); - case PACKET_SERVER_NEED_COMPANY_PASSWORD: return this->Receive_SERVER_NEED_COMPANY_PASSWORD(p); case PACKET_CLIENT_AUTH_RESPONSE: return this->Receive_CLIENT_AUTH_RESPONSE(p); case PACKET_SERVER_ENABLE_ENCRYPTION: return this->Receive_SERVER_ENABLE_ENCRYPTION(p); - case PACKET_CLIENT_COMPANY_PASSWORD: return this->Receive_CLIENT_COMPANY_PASSWORD(p); case PACKET_SERVER_WELCOME: return this->Receive_SERVER_WELCOME(p); case PACKET_CLIENT_GETMAP: return this->Receive_CLIENT_GETMAP(p); case PACKET_SERVER_WAIT: return this->Receive_SERVER_WAIT(p); @@ -104,7 +102,6 @@ NetworkRecvStatus NetworkGameSocketHandler::HandlePacket(Packet &p) case PACKET_CLIENT_CHAT: return this->Receive_CLIENT_CHAT(p); case PACKET_SERVER_CHAT: return this->Receive_SERVER_CHAT(p); case PACKET_SERVER_EXTERNAL_CHAT: return this->Receive_SERVER_EXTERNAL_CHAT(p); - case PACKET_CLIENT_SET_PASSWORD: return this->Receive_CLIENT_SET_PASSWORD(p); case PACKET_CLIENT_SET_NAME: return this->Receive_CLIENT_SET_NAME(p); case PACKET_CLIENT_QUIT: return this->Receive_CLIENT_QUIT(p); case PACKET_CLIENT_ERROR: return this->Receive_CLIENT_ERROR(p); @@ -118,7 +115,6 @@ NetworkRecvStatus NetworkGameSocketHandler::HandlePacket(Packet &p) case PACKET_CLIENT_NEWGRFS_CHECKED: return this->Receive_CLIENT_NEWGRFS_CHECKED(p); case PACKET_SERVER_MOVE: return this->Receive_SERVER_MOVE(p); case PACKET_CLIENT_MOVE: return this->Receive_CLIENT_MOVE(p); - case PACKET_SERVER_COMPANY_UPDATE: return this->Receive_SERVER_COMPANY_UPDATE(p); case PACKET_SERVER_CONFIG_UPDATE: return this->Receive_SERVER_CONFIG_UPDATE(p); default: @@ -166,10 +162,8 @@ NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_GAME_INFO(Packet &) { NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_CLIENT_INFO(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_CLIENT_INFO); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_IDENTIFY(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_IDENTIFY); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_AUTH_REQUEST(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_AUTH_REQUEST); } -NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_NEED_COMPANY_PASSWORD(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_NEED_COMPANY_PASSWORD); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_AUTH_RESPONSE(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_AUTH_RESPONSE); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_ENABLE_ENCRYPTION(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_ENABLE_ENCRYPTION); } -NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_COMPANY_PASSWORD(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_COMPANY_PASSWORD); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_WELCOME(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_WELCOME); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_GETMAP(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_GETMAP); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_WAIT(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_WAIT); } @@ -187,7 +181,6 @@ NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_COMMAND(Packet &) { r NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_CHAT(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_CHAT); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_CHAT(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_CHAT); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_EXTERNAL_CHAT(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_EXTERNAL_CHAT); } -NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_SET_PASSWORD(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_SET_PASSWORD); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_SET_NAME(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_SET_NAME); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_QUIT(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_QUIT); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_ERROR(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_ERROR); } @@ -201,7 +194,6 @@ NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_CHECK_NEWGRFS(Packet NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_NEWGRFS_CHECKED(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_NEWGRFS_CHECKED); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_MOVE(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_MOVE); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_MOVE(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_MOVE); } -NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_COMPANY_UPDATE(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_COMPANY_UPDATE); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_CONFIG_UPDATE(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_CONFIG_UPDATE); } void NetworkGameSocketHandler::DeferDeletion() diff --git a/src/network/core/tcp_game.h b/src/network/core/tcp_game.h index d29a17d8e0..5795221a2e 100644 --- a/src/network/core/tcp_game.h +++ b/src/network/core/tcp_game.h @@ -71,10 +71,6 @@ enum PacketGameType : uint8_t { PACKET_SERVER_CHECK_NEWGRFS, ///< Server sends NewGRF IDs and MD5 checksums for the client to check. PACKET_CLIENT_NEWGRFS_CHECKED, ///< Client acknowledges that it has all required NewGRFs. - /* Checking the company passwords. */ - PACKET_SERVER_NEED_COMPANY_PASSWORD, ///< Server requests the (hashed) company password. - PACKET_CLIENT_COMPANY_PASSWORD, ///< Client sends the (hashed) company password. - /* The server welcomes the authenticated client and sends information of other clients. */ PACKET_SERVER_WELCOME, ///< Server welcomes you and gives you your #ClientID. PACKET_SERVER_CLIENT_INFO, ///< Server sends you information about a client. @@ -119,9 +115,7 @@ enum PacketGameType : uint8_t { PACKET_SERVER_MOVE, ///< Server tells everyone that someone is moved to another company. /* Configuration updates. */ - PACKET_CLIENT_SET_PASSWORD, ///< A client (re)sets its company's password. PACKET_CLIENT_SET_NAME, ///< A client changes its name. - PACKET_SERVER_COMPANY_UPDATE, ///< Information (password) of a company changed. PACKET_SERVER_CONFIG_UPDATE, ///< Some network configuration important to the client changed. /* A client quitting. */ @@ -225,14 +219,6 @@ protected: */ virtual NetworkRecvStatus Receive_SERVER_AUTH_REQUEST(Packet &p); - /** - * Indication to the client that the server needs a company password: - * uint32_t Generation seed. - * string Network ID of the server. - * @param p The packet that was just received. - */ - virtual NetworkRecvStatus Receive_SERVER_NEED_COMPANY_PASSWORD(Packet &p); - /** * Send the response to the authentication request: * 32 * uint8_t Public key of the client. @@ -250,19 +236,9 @@ protected: */ virtual NetworkRecvStatus Receive_SERVER_ENABLE_ENCRYPTION(Packet &p); - /** - * Send a password to the server to authorize - * uint8_t Password type (see NetworkPasswordType). - * string The password. - * @param p The packet that was just received. - */ - virtual NetworkRecvStatus Receive_CLIENT_COMPANY_PASSWORD(Packet &p); - /** * The client is joined and ready to receive their map: * uint32_t Own client ID. - * uint32_t Generation seed. - * string Network ID of the server. * @param p The packet that was just received. */ virtual NetworkRecvStatus Receive_SERVER_WELCOME(Packet &p); @@ -402,13 +378,6 @@ protected: */ virtual NetworkRecvStatus Receive_SERVER_EXTERNAL_CHAT(Packet &p); - /** - * Set the password for the clients current company: - * string The password. - * @param p The packet that was just received. - */ - virtual NetworkRecvStatus Receive_CLIENT_SET_PASSWORD(Packet &p); - /** * Gives the client a new name: * string New name of the client. @@ -498,18 +467,10 @@ protected: /** * Request the server to move this client into another company: * uint8_t ID of the company the client wants to join. - * string Password, if the company is password protected. * @param p The packet that was just received. */ virtual NetworkRecvStatus Receive_CLIENT_MOVE(Packet &p); - /** - * Update the clients knowledge of which company is password protected: - * uint16_t Bitwise representation of each company - * @param p The packet that was just received. - */ - virtual NetworkRecvStatus Receive_SERVER_COMPANY_UPDATE(Packet &p); - /** * Update the clients knowledge of the max settings: * uint8_t Maximum number of companies allowed. diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp index 82cebe186e..f2a035cc00 100644 --- a/src/network/network_admin.cpp +++ b/src/network/network_admin.cpp @@ -328,7 +328,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyInfo(const Company SetDParam(0, c->index); p->Send_string(GetString(STR_PRESIDENT_NAME)); p->Send_uint8 (c->colour); - p->Send_bool (NetworkCompanyIsPassworded(c->index)); + p->Send_bool (true); p->Send_uint32(c->inaugurated_year.base()); p->Send_bool (c->is_ai); p->Send_uint8 (CeilDiv(c->months_of_bankruptcy, 3)); // send as quarters_of_bankruptcy @@ -353,7 +353,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyUpdate(const Compa SetDParam(0, c->index); p->Send_string(GetString(STR_PRESIDENT_NAME)); p->Send_uint8 (c->colour); - p->Send_bool (NetworkCompanyIsPassworded(c->index)); + p->Send_bool (true); p->Send_uint8 (CeilDiv(c->months_of_bankruptcy, 3)); // send as quarters_of_bankruptcy this->SendPacket(std::move(p)); diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index a6e6f3277b..3ed70a7054 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -313,11 +313,6 @@ ClientNetworkGameSocketHandler * ClientNetworkGameSocketHandler::my_client = nul /** Last frame we performed an ack. */ static uint32_t last_ack_frame; -/** One bit of 'entropy' used to generate a salt for the company passwords. */ -static uint32_t _password_game_seed; -/** The other bit of 'entropy' used to generate a salt for the company passwords. */ -static std::string _password_server_id; - /** Maximum number of companies of the currently joined server. */ static uint8_t _network_server_max_companies; /** The current name of the server you are on. */ @@ -388,20 +383,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendAuthResponse() return NETWORK_RECV_STATUS_OKAY; } -/** - * Set the company password as requested. - * @param password The company password. - */ -NetworkRecvStatus ClientNetworkGameSocketHandler::SendCompanyPassword(const std::string &password) -{ - Debug(net, 9, "Client::SendCompanyPassword()"); - - auto p = std::make_unique(my_client, PACKET_CLIENT_COMPANY_PASSWORD); - p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _password_game_seed)); - my_client->SendPacket(std::move(p)); - return NETWORK_RECV_STATUS_OKAY; -} - /** Request the map from the server. */ NetworkRecvStatus ClientNetworkGameSocketHandler::SendGetMap() { @@ -485,21 +466,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendError(NetworkErrorCode err return NETWORK_RECV_STATUS_OKAY; } -/** - * Tell the server that we like to change the password of the company. - * @param password The new password. - */ -NetworkRecvStatus ClientNetworkGameSocketHandler::SendSetPassword(const std::string &password) -{ - Debug(net, 9, "Client::SendSetPassword()"); - - auto p = std::make_unique(my_client, PACKET_CLIENT_SET_PASSWORD); - - p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _password_game_seed)); - my_client->SendPacket(std::move(p)); - return NETWORK_RECV_STATUS_OKAY; -} - /** * Tell the server that we like to change the name of the client. * @param name The new name. @@ -547,15 +513,13 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendRCon(const std::string &pa /** * Ask the server to move us. * @param company The company to move to. - * @param password The password of the company to move to. */ -NetworkRecvStatus ClientNetworkGameSocketHandler::SendMove(CompanyID company, const std::string &password) +NetworkRecvStatus ClientNetworkGameSocketHandler::SendMove(CompanyID company) { Debug(net, 9, "Client::SendMove(): company={}", company); auto p = std::make_unique(my_client, PACKET_CLIENT_MOVE); p->Send_uint8(company); - p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _password_game_seed)); my_client->SendPacket(std::move(p)); return NETWORK_RECV_STATUS_OKAY; } @@ -796,34 +760,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_ENABLE_ENCRYPTI return this->SendIdentify(); } -class CompanyPasswordRequest : public NetworkAuthenticationPasswordRequest { - virtual void Reply(const std::string &password) override - { - MyClient::SendCompanyPassword(password); - } -}; - -NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_NEED_COMPANY_PASSWORD(Packet &p) -{ - if (this->status < STATUS_ENCRYPTED || this->status >= STATUS_AUTH_COMPANY) return NETWORK_RECV_STATUS_MALFORMED_PACKET; - Debug(net, 9, "Client::status = AUTH_COMPANY"); - this->status = STATUS_AUTH_COMPANY; - - Debug(net, 9, "Client::Receive_SERVER_NEED_COMPANY_PASSWORD()"); - - _password_game_seed = p.Recv_uint32(); - _password_server_id = p.Recv_string(NETWORK_SERVER_ID_LENGTH); - if (this->HasClientQuit()) return NETWORK_RECV_STATUS_MALFORMED_PACKET; - - if (!_network_join.company_password.empty()) { - return SendCompanyPassword(_network_join.company_password); - } - - ShowNetworkNeedPassword(NETWORK_COMPANY_PASSWORD, std::make_shared()); - - return NETWORK_RECV_STATUS_OKAY; -} - NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_WELCOME(Packet &p) { if (this->status < STATUS_ENCRYPTED || this->status >= STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET; @@ -834,10 +770,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_WELCOME(Packet Debug(net, 9, "Client::Receive_SERVER_WELCOME(): client_id={}", _network_own_client_id); - /* Initialize the password hash salting variables, even if they were previously. */ - _password_game_seed = p.Recv_uint32(); - _password_server_id = p.Recv_string(NETWORK_SERVER_ID_LENGTH); - /* Start receiving the map */ return SendGetMap(); } @@ -1261,17 +1193,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CONFIG_UPDATE(P return NETWORK_RECV_STATUS_OKAY; } -NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_COMPANY_UPDATE(Packet &) -{ - if (this->status < STATUS_ACTIVE) return NETWORK_RECV_STATUS_MALFORMED_PACKET; - - SetWindowClassesDirty(WC_COMPANY); - - Debug(net, 9, "Client::Receive_SERVER_COMPANY_UPDATE()"); - - return NETWORK_RECV_STATUS_OKAY; -} - /** * Check the connection's state, i.e. is the connection still up? */ @@ -1331,9 +1252,9 @@ void NetworkClientSendRcon(const std::string &password, const std::string &comma * @param pass the password, is only checked on the server end if a password is needed. * @return void */ -void NetworkClientRequestMove(CompanyID company_id, const std::string &pass) +void NetworkClientRequestMove(CompanyID company_id, [[maybe_unused]] const std::string &pass) { - MyClient::SendMove(company_id, pass); + MyClient::SendMove(company_id); } /** @@ -1447,9 +1368,8 @@ void NetworkClientSendChat(NetworkAction action, DestType type, int dest, const * Set/Reset company password on the client side. * @param password Password to be set. */ -void NetworkClientSetCompanyPassword(const std::string &password) +void NetworkClientSetCompanyPassword([[maybe_unused]] const std::string &password) { - MyClient::SendSetPassword(password); } /** diff --git a/src/network/network_client.h b/src/network/network_client.h index 8d68b8d8ba..0c2dda37eb 100644 --- a/src/network/network_client.h +++ b/src/network/network_client.h @@ -27,7 +27,6 @@ private: STATUS_AUTH_GAME, ///< Last action was requesting game (server) password. STATUS_ENCRYPTED, ///< The game authentication has completed and from here on the connection to the server is encrypted. STATUS_NEWGRFS_CHECK, ///< Last action was checking NewGRFs. - STATUS_AUTH_COMPANY, ///< Last action was requesting company password. STATUS_AUTHORIZED, ///< The client is authorized at the server. STATUS_MAP_WAIT, ///< The client is waiting as someone else is downloading the map. STATUS_MAP, ///< The client is downloading the map. @@ -48,7 +47,6 @@ protected: NetworkRecvStatus Receive_SERVER_CLIENT_INFO(Packet &p) override; NetworkRecvStatus Receive_SERVER_AUTH_REQUEST(Packet &p) override; NetworkRecvStatus Receive_SERVER_ENABLE_ENCRYPTION(Packet &p) override; - NetworkRecvStatus Receive_SERVER_NEED_COMPANY_PASSWORD(Packet &p) override; NetworkRecvStatus Receive_SERVER_WELCOME(Packet &p) override; NetworkRecvStatus Receive_SERVER_WAIT(Packet &p) override; NetworkRecvStatus Receive_SERVER_MAP_BEGIN(Packet &p) override; @@ -68,7 +66,6 @@ protected: NetworkRecvStatus Receive_SERVER_RCON(Packet &p) override; NetworkRecvStatus Receive_SERVER_CHECK_NEWGRFS(Packet &p) override; NetworkRecvStatus Receive_SERVER_MOVE(Packet &p) override; - NetworkRecvStatus Receive_SERVER_COMPANY_UPDATE(Packet &p) override; NetworkRecvStatus Receive_SERVER_CONFIG_UPDATE(Packet &p) override; static NetworkRecvStatus SendNewGRFsOk(); @@ -90,13 +87,11 @@ public: static NetworkRecvStatus SendAck(); static NetworkRecvStatus SendAuthResponse(); - static NetworkRecvStatus SendCompanyPassword(const std::string &password); static NetworkRecvStatus SendChat(NetworkAction action, DestType type, int dest, const std::string &msg, int64_t data); - static NetworkRecvStatus SendSetPassword(const std::string &password); static NetworkRecvStatus SendSetName(const std::string &name); static NetworkRecvStatus SendRCon(const std::string &password, const std::string &command); - static NetworkRecvStatus SendMove(CompanyID company, const std::string &password); + static NetworkRecvStatus SendMove(CompanyID company); static bool IsConnected(); diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index b0ff3cf164..11b000d203 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -413,8 +413,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGRFCheck() this->status = STATUS_NEWGRFS_CHECK; if (_grfconfig == nullptr) { - /* There are no NewGRFs, continue with the company password. */ - return this->SendNeedCompanyPassword(); + /* There are no NewGRFs, so they're welcome. */ + return this->SendWelcome(); } auto p = std::make_unique(this, PACKET_SERVER_CHECK_NEWGRFS, TCP_MTU); @@ -473,39 +473,13 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendEnableEncryption() return NETWORK_RECV_STATUS_OKAY; } -/** Request the company password. */ -NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedCompanyPassword() -{ - Debug(net, 9, "client[{}] SendNeedCompanyPassword()", this->client_id); - - /* Invalid packet when status is anything but STATUS_NEWGRFS_CHECK. */ - if (this->status != STATUS_NEWGRFS_CHECK) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); - - Debug(net, 9, "client[{}] status = AUTH_COMPANY", this->client_id); - this->status = STATUS_AUTH_COMPANY; - - NetworkClientInfo *ci = this->GetInfo(); - if (!Company::IsValidID(ci->client_playas)) { - return this->SendWelcome(); - } - - /* Reset 'lag' counters */ - this->last_frame = this->last_frame_server = _frame_counter; - - auto p = std::make_unique(this, PACKET_SERVER_NEED_COMPANY_PASSWORD); - p->Send_uint32(_settings_game.game_creation.generation_seed); - p->Send_string(_settings_client.network.network_id); - this->SendPacket(std::move(p)); - return NETWORK_RECV_STATUS_OKAY; -} - /** Send the client a welcome message with some basic information. */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendWelcome() { Debug(net, 9, "client[{}] SendWelcome()", this->client_id); - /* Invalid packet when status is anything but STATUS_AUTH_COMPANY. */ - if (this->status != STATUS_AUTH_COMPANY) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); + /* Invalid packet when status is anything but STATUS_NEWGRFS_CHECK. */ + if (this->status != STATUS_NEWGRFS_CHECK) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); Debug(net, 9, "client[{}] status = AUTHORIZED", this->client_id); this->status = STATUS_AUTHORIZED; @@ -517,8 +491,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendWelcome() auto p = std::make_unique(this, PACKET_SERVER_WELCOME); p->Send_uint32(this->client_id); - p->Send_uint32(_settings_game.game_creation.generation_seed); - p->Send_string(_settings_client.network.network_id); this->SendPacket(std::move(p)); /* Transmit info about all the active clients */ @@ -840,18 +812,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMove(ClientID client_id, C return NETWORK_RECV_STATUS_OKAY; } -/** Send an update about the company password states. */ -NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyUpdate() -{ - Debug(net, 9, "client[{}] SendCompanyUpdate()", this->client_id); - - auto p = std::make_unique(this, PACKET_SERVER_COMPANY_UPDATE); - - p->Send_uint16(0); - this->SendPacket(std::move(p)); - return NETWORK_RECV_STATUS_OKAY; -} - /** Send an update about the max company/spectator counts. */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendConfigUpdate() { @@ -885,7 +845,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_NEWGRFS_CHECKED Debug(net, 9, "client[{}] Receive_CLIENT_NEWGRFS_CHECKED()", this->client_id); - return this->SendNeedCompanyPassword(); + return this->SendWelcome(); } NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_JOIN(Packet &p) @@ -1025,17 +985,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_AUTH_RESPONSE(P return NETWORK_RECV_STATUS_OKAY; } -NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_COMPANY_PASSWORD(Packet &) -{ - if (this->status != STATUS_AUTH_COMPANY) { - return this->SendError(NETWORK_ERROR_NOT_EXPECTED); - } - - Debug(net, 9, "client[{}] Receive_CLIENT_COMPANY_PASSWORD()", this->client_id); - - return this->SendWelcome(); -} - NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_GETMAP(Packet &) { /* The client was never joined.. so this is impossible, right? @@ -1096,10 +1045,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_MAP_OK(Packet & NetworkAdminClientInfo(this, true); /* also update the new client with our max values */ - this->SendConfigUpdate(); - - /* quickly update the syncing client with company details */ - return this->SendCompanyUpdate(); + return this->SendConfigUpdate(); } /* Wrong status for this packet, give a warning to client, and close connection */ @@ -1464,22 +1410,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_CHAT(Packet &p) return NETWORK_RECV_STATUS_OKAY; } -NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_SET_PASSWORD(Packet &p) -{ - if (this->status != STATUS_ACTIVE) { - /* Illegal call, return error and ignore the packet */ - return this->SendError(NETWORK_ERROR_NOT_EXPECTED); - } - - Debug(net, 9, "client[{}] Receive_CLIENT_SET_PASSWORD()", this->client_id); - - std::string password = p.Recv_string(NETWORK_PASSWORD_LENGTH); - const NetworkClientInfo *ci = this->GetInfo(); - - NetworkServerSetCompanyPassword(ci->client_playas, password); - return NETWORK_RECV_STATUS_OKAY; -} - NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_SET_NAME(Packet &p) { if (this->status != STATUS_ACTIVE) { @@ -1866,7 +1796,6 @@ void NetworkServer_Tick(bool send_frame) break; case NetworkClientSocket::STATUS_AUTH_GAME: - case NetworkClientSocket::STATUS_AUTH_COMPANY: /* These don't block? */ if (lag > _settings_client.network.max_password_time) { IConsolePrint(CC_WARNING, "Client #{} (IP: {}) is dropped because it took longer than {} ticks to enter the password.", cs->client_id, cs->GetClientIP(), _settings_client.network.max_password_time); @@ -2012,10 +1941,9 @@ void NetworkServerShowStatusToConsole() { static const char * const stat_str[] = { "inactive", - "authorizing (server password)", + "authorizing", "identifing client", "checking NewGRFs", - "authorizing (company password)", "authorized", "waiting", "loading map", @@ -2066,10 +1994,6 @@ void NetworkServerUpdateCompanyPassworded(CompanyID company_id, bool passworded) SetWindowClassesDirty(WC_COMPANY); - for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { - if (cs->status >= NetworkClientSocket::STATUS_PRE_ACTIVE) cs->SendCompanyUpdate(); - } - NetworkAdminCompanyUpdate(Company::GetIfValid(company_id)); } diff --git a/src/network/network_server.h b/src/network/network_server.h index 6b75a123f9..2c91b7cfe1 100644 --- a/src/network/network_server.h +++ b/src/network/network_server.h @@ -30,13 +30,11 @@ protected: NetworkRecvStatus Receive_CLIENT_IDENTIFY(Packet &p) override; NetworkRecvStatus Receive_CLIENT_GAME_INFO(Packet &p) override; NetworkRecvStatus Receive_CLIENT_AUTH_RESPONSE(Packet &p) override; - NetworkRecvStatus Receive_CLIENT_COMPANY_PASSWORD(Packet &p) override; NetworkRecvStatus Receive_CLIENT_GETMAP(Packet &p) override; NetworkRecvStatus Receive_CLIENT_MAP_OK(Packet &p) override; NetworkRecvStatus Receive_CLIENT_ACK(Packet &p) override; NetworkRecvStatus Receive_CLIENT_COMMAND(Packet &p) override; NetworkRecvStatus Receive_CLIENT_CHAT(Packet &p) override; - NetworkRecvStatus Receive_CLIENT_SET_PASSWORD(Packet &p) override; NetworkRecvStatus Receive_CLIENT_SET_NAME(Packet &p) override; NetworkRecvStatus Receive_CLIENT_QUIT(Packet &p) override; NetworkRecvStatus Receive_CLIENT_ERROR(Packet &p) override; @@ -49,7 +47,6 @@ protected: NetworkRecvStatus SendWelcome(); NetworkRecvStatus SendAuthRequest(); NetworkRecvStatus SendEnableEncryption(); - NetworkRecvStatus SendNeedCompanyPassword(); public: /** Status of a client */ @@ -58,7 +55,6 @@ public: STATUS_AUTH_GAME, ///< The client is authorizing with game (server) password. STATUS_IDENTIFY, ///< The client is identifying itself. STATUS_NEWGRFS_CHECK, ///< The client is checking NewGRFs. - STATUS_AUTH_COMPANY, ///< The client is authorizing with company password. STATUS_AUTHORIZED, ///< The client is authorized. STATUS_MAP_WAIT, ///< The client is waiting as someone else is downloading the map. STATUS_MAP, ///< The client is downloading the map. @@ -104,7 +100,6 @@ public: NetworkRecvStatus SendFrame(); NetworkRecvStatus SendSync(); NetworkRecvStatus SendCommand(const CommandPacket &cp); - NetworkRecvStatus SendCompanyUpdate(); NetworkRecvStatus SendConfigUpdate(); static void Send(); From 16639939e9b6ee01dcc208b8139cc76aa229cd6d Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 23 Mar 2024 19:19:12 +0100 Subject: [PATCH 473/695] Cleanup: remove command line option for company password --- docs/openttd.6 | 5 ----- src/network/network.cpp | 6 ++---- src/network/network_client.h | 1 - src/network/network_func.h | 2 +- src/openttd.cpp | 9 ++------- 5 files changed, 5 insertions(+), 18 deletions(-) diff --git a/docs/openttd.6 b/docs/openttd.6 index 0319f98cc8..9e8ff63b34 100644 --- a/docs/openttd.6 +++ b/docs/openttd.6 @@ -20,7 +20,6 @@ .Op Fl M Ar musicset .Op Fl n Ar host Ns Oo : Ns Ar port Oc Ns Op # Ns Ar company .Op Fl p Ar password -.Op Fl P Ar password .Op Fl q Ar savegame .Op Fl r Ar width Ns x Ns Ar height .Op Fl s Ar driver @@ -100,10 +99,6 @@ play as. Password used to join server. Only useful with .Fl n . -.It Fl P Ar password -Password used to join company. -Only useful with -.Fl n . .It Fl q Ar savegame Write some information about the specified savegame and exit. .It Fl Q diff --git a/src/network/network.cpp b/src/network/network.cpp index 04e201ded2..adee472d6e 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -831,7 +831,7 @@ public: /** * Join a client to the server at with the given connection string. - * The default for the passwords is \c nullptr. When the server or company needs a + * The default for the passwords is \c nullptr. When the server needs a * password and none is given, the user is asked to enter the password in the GUI. * This function will return false whenever some information required to join is not * correct such as the company number or the client's name, or when there is not @@ -843,10 +843,9 @@ public: * @param connection_string The IP address, port and company number to join as. * @param default_company The company number to join as when none is given. * @param join_server_password The password for the server. - * @param join_company_password The password for the company. * @return Whether the join has started. */ -bool NetworkClientConnectGame(const std::string &connection_string, CompanyID default_company, const std::string &join_server_password, const std::string &join_company_password) +bool NetworkClientConnectGame(const std::string &connection_string, CompanyID default_company, const std::string &join_server_password) { Debug(net, 9, "NetworkClientConnectGame(): connection_string={}", connection_string); @@ -859,7 +858,6 @@ bool NetworkClientConnectGame(const std::string &connection_string, CompanyID de _network_join.connection_string = resolved_connection_string; _network_join.company = join_as; _network_join.server_password = join_server_password; - _network_join.company_password = join_company_password; if (_game_mode == GM_MENU) { /* From the menu we can immediately continue with the actual join. */ diff --git a/src/network/network_client.h b/src/network/network_client.h index 0c2dda37eb..47fb81b3cd 100644 --- a/src/network/network_client.h +++ b/src/network/network_client.h @@ -112,7 +112,6 @@ struct NetworkJoinInfo { std::string connection_string; ///< The address of the server to join. CompanyID company; ///< The company to join. std::string server_password; ///< The password of the server to join. - std::string company_password; ///< The password of the company to join. }; extern NetworkJoinInfo _network_join; diff --git a/src/network/network_func.h b/src/network/network_func.h index e4a43be710..485ecfcdb1 100644 --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -49,7 +49,7 @@ void NetworkPopulateCompanyStats(NetworkCompanyStats *stats); void NetworkUpdateClientInfo(ClientID client_id); void NetworkClientsToSpectators(CompanyID cid); -bool NetworkClientConnectGame(const std::string &connection_string, CompanyID default_company, const std::string &join_server_password = "", const std::string &join_company_password = ""); +bool NetworkClientConnectGame(const std::string &connection_string, CompanyID default_company, const std::string &join_server_password = ""); void NetworkClientJoinGame(); void NetworkClientRequestMove(CompanyID company, const std::string &pass = ""); void NetworkClientSendRcon(const std::string &password, const std::string &command); diff --git a/src/openttd.cpp b/src/openttd.cpp index 10f7e0727b..4d1c048922 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -168,7 +168,6 @@ static void ShowHelp() " -G seed = Set random seed\n" " -n host[:port][#company]= Join network game\n" " -p password = Password to join server\n" - " -P password = Password to join company\n" " -D [host][:port] = Start dedicated server\n" #if !defined(_WIN32) " -f = Fork into the background (dedicated only)\n" @@ -384,7 +383,6 @@ struct AfterNewGRFScan : NewGRFScanCallback { uint16_t dedicated_port = 0; ///< Port for the dedicated server. std::string connection_string; ///< Information about the server to connect to std::string join_server_password; ///< The password to join the server with. - std::string join_company_password; ///< The password to join the company with. bool save_config = true; ///< The save config setting. /** @@ -448,7 +446,7 @@ struct AfterNewGRFScan : NewGRFScanCallback { LoadIntroGame(); _switch_mode = SM_NONE; - NetworkClientConnectGame(connection_string, COMPANY_NEW_COMPANY, join_server_password, join_company_password); + NetworkClientConnectGame(connection_string, COMPANY_NEW_COMPANY, join_server_password); } /* After the scan we're not used anymore. */ @@ -485,7 +483,7 @@ static std::vector CreateOptions() { std::vector options; /* Options that require a parameter. */ - for (char c : "GIMPSbcmnpqrstv") options.push_back({ .type = ODF_HAS_VALUE, .id = c, .shortname = c }); + for (char c : "GIMSbcmnpqrstv") options.push_back({ .type = ODF_HAS_VALUE, .id = c, .shortname = c }); #if !defined(_WIN32) options.push_back({ .type = ODF_HAS_VALUE, .id = 'f', .shortname = 'f' }); #endif @@ -558,9 +556,6 @@ int openttd_main(std::span arguments) case 'p': scanner->join_server_password = mgo.opt; break; - case 'P': - scanner->join_company_password = mgo.opt; - break; case 'r': ParseResolution(&resolution, mgo.opt); break; case 't': scanner->startyear = atoi(mgo.opt); break; case 'd': { From 9dc1fdc3851f86cdc50738fd3d2015e53838ca15 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 23 Mar 2024 19:26:08 +0100 Subject: [PATCH 474/695] Cleanup: remove client side password checks when moving to a different company --- src/company_gui.cpp | 7 ------- src/console_cmds.cpp | 9 ++++----- src/network/network_client.cpp | 4 +--- src/network/network_func.h | 2 +- src/widgets/network_widget.h | 1 - 5 files changed, 6 insertions(+), 17 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 0c8e58b055..6a8d1fb043 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -2517,9 +2517,6 @@ struct CompanyWindow : Window if (_network_server) { NetworkServerDoMove(CLIENT_ID_SERVER, company); MarkWholeScreenDirty(); - } else if (NetworkCompanyIsPassworded(company)) { - /* ask for the password */ - ShowQueryString(STR_EMPTY, STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION, NETWORK_PASSWORD_LENGTH, this, CS_ALPHANUMERAL, QSF_PASSWORD); } else { /* just send the join command */ NetworkClientRequestMove(company); @@ -2567,10 +2564,6 @@ struct CompanyWindow : Window case WID_C_COMPANY_NAME: Command::Post(STR_ERROR_CAN_T_CHANGE_COMPANY_NAME, str); break; - - case WID_C_COMPANY_JOIN: - NetworkClientRequestMove((CompanyID)this->window_number, str); - break; } } diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index c9bfa9fde9..c91009766d 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -914,7 +914,7 @@ DEF_CONSOLE_CMD(ConClientNickChange) DEF_CONSOLE_CMD(ConJoinCompany) { if (argc < 2) { - IConsolePrint(CC_HELP, "Request joining another company. Usage: 'join []'."); + IConsolePrint(CC_HELP, "Request joining another company. Usage: 'join '."); IConsolePrint(CC_HELP, "For valid company-id see company list, use 255 for spectator."); return true; } @@ -943,9 +943,8 @@ DEF_CONSOLE_CMD(ConJoinCompany) return true; } - /* Check if the company requires a password */ - if (NetworkCompanyIsPassworded(company_id) && argc < 3) { - IConsolePrint(CC_ERROR, "Company {} requires a password to join.", company_id + 1); + if (!info->CanJoinCompany(company_id)) { + IConsolePrint(CC_ERROR, "You are not allowed to join this company."); return true; } @@ -953,7 +952,7 @@ DEF_CONSOLE_CMD(ConJoinCompany) if (_network_server) { NetworkServerDoMove(CLIENT_ID_SERVER, company_id); } else { - NetworkClientRequestMove(company_id, NetworkCompanyIsPassworded(company_id) ? argv[2] : ""); + NetworkClientRequestMove(company_id); } return true; diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 3ed70a7054..78695d8552 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -1249,10 +1249,8 @@ void NetworkClientSendRcon(const std::string &password, const std::string &comma /** * Notify the server of this client wanting to be moved to another company. * @param company_id id of the company the client wishes to be moved to. - * @param pass the password, is only checked on the server end if a password is needed. - * @return void */ -void NetworkClientRequestMove(CompanyID company_id, [[maybe_unused]] const std::string &pass) +void NetworkClientRequestMove(CompanyID company_id) { MyClient::SendMove(company_id); } diff --git a/src/network/network_func.h b/src/network/network_func.h index 485ecfcdb1..af83a0fa30 100644 --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -51,7 +51,7 @@ void NetworkUpdateClientInfo(ClientID client_id); void NetworkClientsToSpectators(CompanyID cid); bool NetworkClientConnectGame(const std::string &connection_string, CompanyID default_company, const std::string &join_server_password = ""); void NetworkClientJoinGame(); -void NetworkClientRequestMove(CompanyID company, const std::string &pass = ""); +void NetworkClientRequestMove(CompanyID company); void NetworkClientSendRcon(const std::string &password, const std::string &command); void NetworkClientSendChat(NetworkAction action, DestType type, int dest, const std::string &msg, int64_t data = 0); bool NetworkClientPreferTeamChat(const NetworkClientInfo *cio); diff --git a/src/widgets/network_widget.h b/src/widgets/network_widget.h index 276874f92e..7efbb236eb 100644 --- a/src/widgets/network_widget.h +++ b/src/widgets/network_widget.h @@ -86,7 +86,6 @@ enum ClientListWidgets : WidgetID { WID_CL_CLIENT_NAME_EDIT, ///< Edit button for client name. WID_CL_MATRIX, ///< Company/client list. WID_CL_SCROLLBAR, ///< Scrollbar for company/client list. - WID_CL_COMPANY_JOIN, ///< Used for QueryWindow when a company has a password. WID_CL_CLIENT_COMPANY_COUNT, ///< Count of clients and companies. }; From a9318cf65383b52f192aaa8168510eafaa188d7d Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 23 Mar 2024 19:36:09 +0100 Subject: [PATCH 475/695] Cleanup: remove UI for changing the password --- src/company_cmd.cpp | 5 -- src/company_gui.cpp | 26 +------ src/console_cmds.cpp | 50 ------------- src/lang/english.txt | 12 ---- src/network/network.cpp | 19 ----- src/network/network_client.cpp | 8 --- src/network/network_client.h | 1 - src/network/network_func.h | 1 - src/network/network_gui.cpp | 126 --------------------------------- src/network/network_gui.h | 1 - src/network/network_server.cpp | 24 ------- src/network/network_server.h | 2 - src/openttd.cpp | 6 -- src/widgets/company_widget.h | 2 - src/widgets/network_widget.h | 11 --- src/window_type.h | 7 -- 16 files changed, 1 insertion(+), 300 deletions(-) diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index d937479419..4dfce1c47d 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -890,8 +890,6 @@ CommandCost CmdCompanyCtrl(DoCommandFlag flags, CompanyCtrlAction cca, CompanyID break; } - /* Send new companies, before potentially setting the password. Otherwise, - * the password update could be sent when the company is not yet known. */ NetworkAdminCompanyNew(c); NetworkServerNewCompany(c, ci); @@ -899,9 +897,6 @@ CommandCost CmdCompanyCtrl(DoCommandFlag flags, CompanyCtrlAction cca, CompanyID if (client_id == _network_own_client_id) { assert(_local_company == COMPANY_SPECTATOR); SetLocalCompany(c->index); - if (!_settings_client.network.default_company_pass.empty()) { - NetworkChangeCompanyPassword(_local_company, _settings_client.network.default_company_pass); - } /* In network games, we need to try setting the company manager face here to sync it to all clients. * If a favorite company manager face is selected, choose it. Otherwise, use a random face. */ diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 6a8d1fb043..c68e9d26e0 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -2147,9 +2147,6 @@ static constexpr NWidgetPart _nested_company_widgets[] = { /* Multi player buttons. */ NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 0), - NWidget(NWID_VERTICAL), SetPIPRatio(1, 0, 0), - NWidget(WWT_EMPTY, COLOUR_GREY, WID_C_HAS_PASSWORD), SetFill(0, 0), - EndContainer(), NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_C_SELECT_HOSTILE_TAKEOVER), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_HOSTILE_TAKEOVER), SetDataTip(STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON, STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP), @@ -2158,7 +2155,6 @@ static constexpr NWidgetPart _nested_company_widgets[] = { NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_GIVE_MONEY), SetDataTip(STR_COMPANY_VIEW_GIVE_MONEY_BUTTON, STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP), EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_C_SELECT_MULTIPLAYER), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_PASSWORD), SetDataTip(STR_COMPANY_VIEW_PASSWORD, STR_COMPANY_VIEW_PASSWORD_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_JOIN), SetDataTip(STR_COMPANY_VIEW_JOIN, STR_COMPANY_VIEW_JOIN_TOOLTIP), EndContainer(), EndContainer(), @@ -2191,10 +2187,6 @@ struct CompanyWindow : Window /** Display planes in the company window. */ enum CompanyWindowPlanes { - /* Display planes of the #WID_C_SELECT_MULTIPLAYER selection widget. */ - CWP_MP_C_PWD = 0, ///< Display the company password button. - CWP_MP_C_JOIN, ///< Display the join company button. - /* Display planes of the #WID_C_SELECT_VIEW_BUILD_HQ selection widget. */ CWP_VB_VIEW = 0, ///< Display the view button CWP_VB_BUILD, ///< Display the build button @@ -2235,7 +2227,7 @@ struct CompanyWindow : Window reinit |= this->GetWidget(WID_C_SELECT_HOSTILE_TAKEOVER)->SetDisplayedPlane((local || _local_company == COMPANY_SPECTATOR || !c->is_ai || _networking) ? SZSP_NONE : 0); /* Multiplayer buttons. */ - reinit |= this->GetWidget(WID_C_SELECT_MULTIPLAYER)->SetDisplayedPlane((!_networking) ? (int)SZSP_NONE : (int)(local ? CWP_MP_C_PWD : CWP_MP_C_JOIN)); + reinit |= this->GetWidget(WID_C_SELECT_MULTIPLAYER)->SetDisplayedPlane((!_networking || !NetworkCanJoinCompany(c->index) || _local_company == c->index) ? (int)SZSP_NONE : 0); this->SetWidgetDisabledState(WID_C_COMPANY_JOIN, c->is_ai); @@ -2293,7 +2285,6 @@ struct CompanyWindow : Window case WID_C_VIEW_INFRASTRUCTURE: case WID_C_GIVE_MONEY: case WID_C_HOSTILE_TAKEOVER: - case WID_C_COMPANY_PASSWORD: case WID_C_COMPANY_JOIN: size.width = GetStringBoundingBox(STR_COMPANY_VIEW_VIEW_HQ_BUTTON).width; size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_BUILD_HQ_BUTTON).width); @@ -2301,14 +2292,9 @@ struct CompanyWindow : Window size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON).width); size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_GIVE_MONEY_BUTTON).width); size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON).width); - size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_PASSWORD).width); size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_JOIN).width); size.width += padding.width; break; - - case WID_C_HAS_PASSWORD: - if (_networking) size = maxdim(size, GetSpriteSize(SPR_LOCK)); - break; } } @@ -2403,12 +2389,6 @@ struct CompanyWindow : Window case WID_C_DESC_INFRASTRUCTURE_COUNTS: DrawInfrastructureCountsWidget(r, c); break; - - case WID_C_HAS_PASSWORD: - if (_networking && NetworkCompanyIsPassworded(c->index)) { - DrawSprite(SPR_LOCK, PAL_NONE, r.left, r.top); - } - break; } } @@ -2507,10 +2487,6 @@ struct CompanyWindow : Window ShowBuyCompanyDialog((CompanyID)this->window_number, true); break; - case WID_C_COMPANY_PASSWORD: - if (this->window_number == _local_company) ShowNetworkCompanyPasswordWindow(this); - break; - case WID_C_COMPANY_JOIN: { this->query_widget = WID_C_COMPANY_JOIN; CompanyID company = (CompanyID)this->window_number; diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index c91009766d..f4bbdc9d65 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1907,53 +1907,6 @@ DEF_CONSOLE_CMD(ConSayClient) return true; } -DEF_CONSOLE_CMD(ConCompanyPassword) -{ - if (argc == 0) { - if (_network_dedicated) { - IConsolePrint(CC_HELP, "Change the password of a company. Usage: 'company_pw \"\"."); - } else if (_network_server) { - IConsolePrint(CC_HELP, "Change the password of your or any other company. Usage: 'company_pw [] \"\"'."); - } else { - IConsolePrint(CC_HELP, "Change the password of your company. Usage: 'company_pw \"\"'."); - } - - IConsolePrint(CC_HELP, "Use \"*\" to disable the password."); - return true; - } - - CompanyID company_id; - std::string password; - const char *errormsg; - - if (argc == 2) { - company_id = _local_company; - password = argv[1]; - errormsg = "You have to own a company to make use of this command."; - } else if (argc == 3 && _network_server) { - company_id = (CompanyID)(atoi(argv[1]) - 1); - password = argv[2]; - errormsg = "You have to specify the ID of a valid human controlled company."; - } else { - return false; - } - - if (!Company::IsValidHumanID(company_id)) { - IConsolePrint(CC_ERROR, errormsg); - return false; - } - - password = NetworkChangeCompanyPassword(company_id, password); - - if (password.empty()) { - IConsolePrint(CC_INFO, "Company password cleared."); - } else { - IConsolePrint(CC_INFO, "Company password changed to '{}'.", password); - } - - return true; -} - /** All the known authorized keys with their name. */ static std::vector> _console_cmd_authorized_keys{ { "rcon", &_settings_client.network.rcon_authorized_keys }, @@ -2802,9 +2755,6 @@ void IConsoleStdLibRegister() IConsole::CmdRegister("authorized_key", ConNetworkAuthorizedKey, ConHookServerOnly); IConsole::AliasRegister("ak", "authorized_key %+"); - IConsole::CmdRegister("company_pw", ConCompanyPassword, ConHookNeedNetwork); - IConsole::AliasRegister("company_password", "company_pw %+"); - IConsole::AliasRegister("net_frame_freq", "setting frame_freq %+"); IConsole::AliasRegister("net_sync_freq", "setting sync_freq %+"); IConsole::AliasRegister("server_pw", "setting server_password %+"); diff --git a/src/lang/english.txt b/src/lang/english.txt index aff5834e51..0127b342b0 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2510,13 +2510,11 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Via rela STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Kick STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Ban STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Delete -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Password unlock STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Admin action STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Are you sure you want to kick player '{RAW_STRING}'? STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Are you sure you want to ban player '{RAW_STRING}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Are you sure you want to delete company '{COMPANY}'? -STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Are you sure you want to reset the password of company '{COMPANY}'? STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Use relay? STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Failed to establish a connection between you and server '{RAW_STRING}'.{}Would you like to relay this session via '{RAW_STRING}'? @@ -2533,19 +2531,9 @@ STR_NETWORK_ASK_SURVEY_YES :Yes STR_NETWORK_SPECTATORS :Spectators -# Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}Do not save the entered password -STR_COMPANY_PASSWORD_OK :{BLACK}Give the company the new password -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Company password -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Default company password -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Use this company password as default for new companies - # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Join STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Join and play as this company -STR_COMPANY_VIEW_PASSWORD :{BLACK}Password -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Password-protect your company to prevent unauthorised users from joining -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Set company password # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Send diff --git a/src/network/network.cpp b/src/network/network.cpp index adee472d6e..18fc255f57 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -227,25 +227,6 @@ uint8_t NetworkSpectatorCount() return count; } -/** - * Change the company password of a given company. - * @param company_id ID of the company the password should be changed for. - * @param password The unhashed password we like to set ('*' or '' resets the password) - * @return The password. - */ -std::string NetworkChangeCompanyPassword(CompanyID company_id, std::string password) -{ - if (password.compare("*") == 0) password = ""; - - if (_network_server) { - NetworkServerSetCompanyPassword(company_id, password, false); - } else { - NetworkClientSetCompanyPassword(password); - } - - return password; -} - /** * Hash the given password using server ID and game seed. * @param password Password to hash. diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 78695d8552..920ac56bd4 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -1362,14 +1362,6 @@ void NetworkClientSendChat(NetworkAction action, DestType type, int dest, const MyClient::SendChat(action, type, dest, msg, data); } -/** - * Set/Reset company password on the client side. - * @param password Password to be set. - */ -void NetworkClientSetCompanyPassword([[maybe_unused]] const std::string &password) -{ -} - /** * Tell whether the client has team members who they can chat to. * @param cio client to check members of. diff --git a/src/network/network_client.h b/src/network/network_client.h index 47fb81b3cd..75a1ce4dd3 100644 --- a/src/network/network_client.h +++ b/src/network/network_client.h @@ -104,7 +104,6 @@ public: typedef ClientNetworkGameSocketHandler MyClient; void NetworkClient_Connected(); -void NetworkClientSetCompanyPassword(const std::string &password); /** Information required to join a server. */ struct NetworkJoinInfo { diff --git a/src/network/network_func.h b/src/network/network_func.h index af83a0fa30..4e88f7c998 100644 --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -39,7 +39,6 @@ bool NetworkValidateServerName(std::string &server_name); void NetworkUpdateClientName(const std::string &client_name); void NetworkUpdateServerGameType(); bool NetworkCompanyHasClients(CompanyID company); -std::string NetworkChangeCompanyPassword(CompanyID company_id, std::string password); void NetworkReboot(); void NetworkDisconnect(bool close_admins = true); void NetworkGameLoop(); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index c9c6333321..bc2530fe87 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1311,7 +1311,6 @@ enum DropDownAdmin { DD_CLIENT_ADMIN_KICK, DD_CLIENT_ADMIN_BAN, DD_COMPANY_ADMIN_RESET, - DD_COMPANY_ADMIN_UNLOCK, }; /** @@ -1344,15 +1343,6 @@ static void AdminCompanyResetCallback(Window *, bool confirmed) } } -/** - * Callback function for admin command to unlock company. - * @param confirmed Iff the user pressed Yes. - */ -static void AdminCompanyUnlockCallback(Window *, bool confirmed) -{ - if (confirmed) NetworkServerSetCompanyPassword(_admin_company_id, "", false); -} - /** * Button shown for either a company or client in the client-list. * @@ -1509,7 +1499,6 @@ private: { DropDownList list; list.push_back(MakeDropDownListStringItem(STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET, DD_COMPANY_ADMIN_RESET, NetworkCompanyHasClients(company_id))); - list.push_back(MakeDropDownListStringItem(STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK, DD_COMPANY_ADMIN_UNLOCK, !NetworkCompanyIsPassworded(company_id))); Rect wi_rect; wi_rect.left = pt.x; @@ -1863,13 +1852,6 @@ public: SetDParam(0, _admin_company_id); break; - case DD_COMPANY_ADMIN_UNLOCK: - _admin_company_id = this->dd_company_id; - text = STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK; - callback = AdminCompanyUnlockCallback; - SetDParam(0, _admin_company_id); - break; - default: NOT_REACHED(); } @@ -2241,114 +2223,6 @@ void ShowNetworkNeedPassword(NetworkPasswordType npt, std::shared_ptrInitNested(0); - this->UpdateWarningStringSize(); - - this->parent = parent; - this->querystrings[WID_NCP_PASSWORD] = &this->password_editbox; - this->password_editbox.cancel_button = WID_NCP_CANCEL; - this->password_editbox.ok_button = WID_NCP_OK; - this->SetFocusedWidget(WID_NCP_PASSWORD); - } - - void UpdateWarningStringSize() - { - assert(this->nested_root->smallest_x > 0); - this->warning_size.width = this->nested_root->current_x - (WidgetDimensions::scaled.framerect.Horizontal()) * 2; - this->warning_size.height = GetStringHeight(STR_WARNING_PASSWORD_SECURITY, this->warning_size.width); - this->warning_size.height += (WidgetDimensions::scaled.framerect.Vertical()) * 2; - - this->ReInit(); - } - - void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override - { - if (widget == WID_NCP_WARNING) { - size = this->warning_size; - } - } - - void DrawWidget(const Rect &r, WidgetID widget) const override - { - if (widget != WID_NCP_WARNING) return; - - DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.framerect), - STR_WARNING_PASSWORD_SECURITY, TC_FROMSTRING, SA_CENTER); - } - - void OnOk() - { - if (this->IsWidgetLowered(WID_NCP_SAVE_AS_DEFAULT_PASSWORD)) { - _settings_client.network.default_company_pass = this->password_editbox.text.buf; - } - - NetworkChangeCompanyPassword(_local_company, this->password_editbox.text.buf); - } - - void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override - { - switch (widget) { - case WID_NCP_OK: - this->OnOk(); - [[fallthrough]]; - - case WID_NCP_CANCEL: - this->Close(); - break; - - case WID_NCP_SAVE_AS_DEFAULT_PASSWORD: - this->ToggleWidgetLoweredState(WID_NCP_SAVE_AS_DEFAULT_PASSWORD); - this->SetDirty(); - break; - } - } -}; - -static constexpr NWidgetPart _nested_network_company_password_window_widgets[] = { - NWidget(NWID_HORIZONTAL), - NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_COMPANY_PASSWORD_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_NCP_BACKGROUND), - NWidget(NWID_VERTICAL), SetPIP(5, 5, 5), - NWidget(NWID_HORIZONTAL), SetPIP(5, 5, 5), - NWidget(WWT_TEXT, COLOUR_GREY, WID_NCP_LABEL), SetDataTip(STR_COMPANY_VIEW_PASSWORD, STR_NULL), - NWidget(WWT_EDITBOX, COLOUR_GREY, WID_NCP_PASSWORD), SetFill(1, 0), SetMinimalSize(194, 12), SetDataTip(STR_COMPANY_VIEW_SET_PASSWORD, STR_NULL), - EndContainer(), - NWidget(NWID_HORIZONTAL), SetPIP(5, 0, 5), - NWidget(NWID_SPACER), SetFill(1, 0), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_NCP_SAVE_AS_DEFAULT_PASSWORD), SetMinimalSize(194, 12), - SetDataTip(STR_COMPANY_PASSWORD_MAKE_DEFAULT, STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP), - EndContainer(), - EndContainer(), - EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_NCP_WARNING), EndContainer(), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_NCP_CANCEL), SetFill(1, 0), SetDataTip(STR_BUTTON_CANCEL, STR_COMPANY_PASSWORD_CANCEL), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_NCP_OK), SetFill(1, 0), SetDataTip(STR_BUTTON_OK, STR_COMPANY_PASSWORD_OK), - EndContainer(), -}; - -static WindowDesc _network_company_password_window_desc( - WDP_AUTO, nullptr, 0, 0, - WC_COMPANY_PASSWORD_WINDOW, WC_NONE, - 0, - std::begin(_nested_network_company_password_window_widgets), std::end(_nested_network_company_password_window_widgets) -); - -void ShowNetworkCompanyPasswordWindow(Window *parent) -{ - CloseWindowById(WC_COMPANY_PASSWORD_WINDOW, 0); - - new NetworkCompanyPasswordWindow(&_network_company_password_window_desc, parent); -} - /** * Window used for asking the user if he is okay using a relay server. */ diff --git a/src/network/network_gui.h b/src/network/network_gui.h index 02283e9ae7..222542e210 100644 --- a/src/network/network_gui.h +++ b/src/network/network_gui.h @@ -22,7 +22,6 @@ void ShowNetworkChatQueryWindow(DestType type, int dest); void ShowJoinStatusWindow(); void ShowNetworkGameWindow(); void ShowClientList(); -void ShowNetworkCompanyPasswordWindow(Window *parent); void ShowNetworkAskRelay(const std::string &server_connection_string, const std::string &relay_connection_string, const std::string &token); void ShowNetworkAskSurvey(); void ShowSurveyResultTextfileWindow(); diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 11b000d203..41f2b9cc50 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -1667,16 +1667,6 @@ bool NetworkServerChangeClientName(ClientID client_id, const std::string &new_na return true; } -/** - * Set/Reset a company password on the server end. - * @param company_id ID of the company the password should be changed for. - * @param password The new password. - * @param already_hashed Is the given password already hashed? - */ -void NetworkServerSetCompanyPassword([[maybe_unused]] CompanyID company_id, [[maybe_unused]] const std::string &password, [[maybe_unused]] bool already_hashed) -{ -} - /** * Handle the command-queue of a socket. * @param cs The socket to handle the queue for. @@ -1983,20 +1973,6 @@ void NetworkServerUpdateGameInfo() if (_network_server) FillStaticNetworkServerGameInfo(); } -/** - * Tell that a particular company is (not) passworded. - * @param company_id The company that got/removed the password. - * @param passworded Whether the password was received or removed. - */ -void NetworkServerUpdateCompanyPassworded(CompanyID company_id, bool passworded) -{ - if (NetworkCompanyIsPassworded(company_id) == passworded) return; - - SetWindowClassesDirty(WC_COMPANY); - - NetworkAdminCompanyUpdate(Company::GetIfValid(company_id)); -} - /** * Handle the tid-bits of moving a client from one company to another. * @param client_id id of the client we want to move. diff --git a/src/network/network_server.h b/src/network/network_server.h index 2c91b7cfe1..31aa2739bc 100644 --- a/src/network/network_server.h +++ b/src/network/network_server.h @@ -123,7 +123,5 @@ public: void NetworkServer_Tick(bool send_frame); void ChangeNetworkRestartTime(bool reset); -void NetworkServerSetCompanyPassword(CompanyID company_id, const std::string &password, bool already_hashed = true); -void NetworkServerUpdateCompanyPassworded(CompanyID company_id, bool passworded); #endif /* NETWORK_SERVER_H */ diff --git a/src/openttd.cpp b/src/openttd.cpp index 4d1c048922..307e60874b 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -894,12 +894,6 @@ static void MakeNewGameDone() InitializeRailGUI(); InitializeRoadGUI(); - /* We are the server, we start a new company (not dedicated), - * so set the default password *if* needed. */ - if (_network_server && !_settings_client.network.default_company_pass.empty()) { - NetworkChangeCompanyPassword(_local_company, _settings_client.network.default_company_pass); - } - if (_settings_client.gui.pause_on_newgame) Command::Post(PM_PAUSED_NORMAL, true); CheckEngines(); diff --git a/src/widgets/company_widget.h b/src/widgets/company_widget.h index f53f83a494..452632dccb 100644 --- a/src/widgets/company_widget.h +++ b/src/widgets/company_widget.h @@ -47,9 +47,7 @@ enum CompanyWidgets : WidgetID { WID_C_SELECT_HOSTILE_TAKEOVER, ///< Selection widget for the hostile takeover button. WID_C_HOSTILE_TAKEOVER, ///< Button to hostile takeover another company. - WID_C_HAS_PASSWORD, ///< Has company password lock. WID_C_SELECT_MULTIPLAYER, ///< Multiplayer selection panel. - WID_C_COMPANY_PASSWORD, ///< Button to set company password. WID_C_COMPANY_JOIN, ///< Button to join company. }; diff --git a/src/widgets/network_widget.h b/src/widgets/network_widget.h index 7efbb236eb..42aba87e18 100644 --- a/src/widgets/network_widget.h +++ b/src/widgets/network_widget.h @@ -96,17 +96,6 @@ enum NetworkJoinStatusWidgets : WidgetID { WID_NJS_CANCELOK, ///< Cancel / OK button. }; -/** Widgets of the #NetworkCompanyPasswordWindow class. */ -enum NetworkCompanyPasswordWidgets : WidgetID { - WID_NCP_BACKGROUND, ///< Background of the window. - WID_NCP_LABEL, ///< Label in front of the password field. - WID_NCP_PASSWORD, ///< Input field for the password. - WID_NCP_SAVE_AS_DEFAULT_PASSWORD, ///< Toggle 'button' for saving the current password as default password. - WID_NCP_WARNING, ///< Warning text about password security - WID_NCP_CANCEL, ///< Close the window without changing anything. - WID_NCP_OK, ///< Safe the password etc. -}; - /** Widgets of the #NetworkAskRelayWindow class. */ enum NetworkAskRelayWidgets : WidgetID { WID_NAR_CAPTION, ///< Caption of the window. diff --git a/src/window_type.h b/src/window_type.h index 9e4d96acbd..a677c34cdd 100644 --- a/src/window_type.h +++ b/src/window_type.h @@ -502,13 +502,6 @@ enum WindowClass { */ WC_SEND_NETWORK_MSG, - /** - * Company password query; %Window numbers: - * - 0 = #NetworkCompanyPasswordWidgets - */ - WC_COMPANY_PASSWORD_WINDOW, - - /** * Industry cargoes chain; %Window numbers: * - 0 = #IndustryCargoesWidgets From 457d51fc492ed1c0fed2524b0de08b8b3f1adb49 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 23 Mar 2024 19:40:42 +0100 Subject: [PATCH 476/695] Cleanup: remove company password hashing and anything related to it --- src/network/core/config.h | 3 +- src/network/network.cpp | 51 ------------------- src/network/network_client.cpp | 3 -- src/network/network_func.h | 1 - src/network/network_internal.h | 1 - src/settings_type.h | 2 - .../settings/network_secrets_settings.ini | 14 ----- 7 files changed, 1 insertion(+), 74 deletions(-) diff --git a/src/network/core/config.h b/src/network/core/config.h index 99e6a3bd94..648ef2a35c 100644 --- a/src/network/core/config.h +++ b/src/network/core/config.h @@ -54,9 +54,8 @@ static const uint NETWORK_NAME_LENGTH = 80; ///< The m static const uint NETWORK_COMPANY_NAME_LENGTH = 128; ///< The maximum length of the company name, in bytes including '\0' static const uint NETWORK_HOSTNAME_LENGTH = 80; ///< The maximum length of the host name, in bytes including '\0' static const uint NETWORK_HOSTNAME_PORT_LENGTH = 80 + 6; ///< The maximum length of the host name + port, in bytes including '\0'. The extra six is ":" + port number (with a max of 65536) -static const uint NETWORK_SERVER_ID_LENGTH = 33; ///< The maximum length of the network id of the servers, in bytes including '\0' static const uint NETWORK_REVISION_LENGTH = 33; ///< The maximum length of the revision, in bytes including '\0' -static const uint NETWORK_PASSWORD_LENGTH = 33; ///< The maximum length of the password, in bytes including '\0' (must be >= NETWORK_SERVER_ID_LENGTH) +static const uint NETWORK_PASSWORD_LENGTH = 33; ///< The maximum length of the password, in bytes including '\0' static const uint NETWORK_CLIENT_NAME_LENGTH = 25; ///< The maximum length of a client's name, in bytes including '\0' static const uint NETWORK_RCONCOMMAND_LENGTH = 500; ///< The maximum length of a rconsole command, in bytes including '\0' static const uint NETWORK_GAMESCRIPT_JSON_LENGTH = 9000; ///< The maximum length of a receiving gamescript json string, in bytes including '\0'. diff --git a/src/network/network.cpp b/src/network/network.cpp index 18fc255f57..6b34df1229 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -227,49 +227,6 @@ uint8_t NetworkSpectatorCount() return count; } -/** - * Hash the given password using server ID and game seed. - * @param password Password to hash. - * @param password_server_id Server ID. - * @param password_game_seed Game seed. - * @return The hashed password. - */ -std::string GenerateCompanyPasswordHash(const std::string &password, const std::string &password_server_id, uint32_t password_game_seed) -{ - if (password.empty()) return password; - - size_t password_length = password.size(); - size_t password_server_id_length = password_server_id.size(); - - std::ostringstream salted_password; - /* Add the password with the server's ID and game seed as the salt. */ - for (uint i = 0; i < NETWORK_SERVER_ID_LENGTH - 1; i++) { - char password_char = (i < password_length ? password[i] : 0); - char server_id_char = (i < password_server_id_length ? password_server_id[i] : 0); - char seed_char = password_game_seed >> (i % 32); - salted_password << (char)(password_char ^ server_id_char ^ seed_char); // Cast needed, otherwise interpreted as integer to format - } - - Md5 checksum; - MD5Hash digest; - - /* Generate the MD5 hash */ - std::string salted_password_string = salted_password.str(); - checksum.Append(salted_password_string.data(), salted_password_string.size()); - checksum.Finish(digest); - - return FormatArrayAsHex(digest); -} - -/** - * Check if the company we want to join requires a password. - * @param company_id id of the company we want to check the 'passworded' flag for. - * @return true if the company requires a password. - */ -bool NetworkCompanyIsPassworded([[maybe_unused]] CompanyID company_id) -{ - return false; -} /* This puts a text-message to the console, or in the future, the chat-box, * (to keep it all a bit more general) @@ -1324,11 +1281,6 @@ void NetworkGameLoop() NetworkSend(); } -static void NetworkGenerateServerId() -{ - _settings_client.network.network_id = GenerateUid("OpenTTD Server ID"); -} - /** This tries to launch the network for a given OS */ void NetworkStartUp() { @@ -1338,9 +1290,6 @@ void NetworkStartUp() _network_available = NetworkCoreInitialize(); _network_dedicated = false; - /* Generate an server id when there is none yet */ - if (_settings_client.network.network_id.empty()) NetworkGenerateServerId(); - _network_game_info = {}; NetworkInitialize(); diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 920ac56bd4..307f38814f 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -321,9 +321,6 @@ std::string _network_server_name; /** Information about the game to join to. */ NetworkJoinInfo _network_join; -/** Make sure the server ID length is the same as a md5 hash. */ -static_assert(NETWORK_SERVER_ID_LENGTH == MD5_HASH_BYTES * 2 + 1); - /*********** * Sending functions ************/ diff --git a/src/network/network_func.h b/src/network/network_func.h index 4e88f7c998..d1dcd05d6c 100644 --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -54,7 +54,6 @@ void NetworkClientRequestMove(CompanyID company); void NetworkClientSendRcon(const std::string &password, const std::string &command); void NetworkClientSendChat(NetworkAction action, DestType type, int dest, const std::string &msg, int64_t data = 0); bool NetworkClientPreferTeamChat(const NetworkClientInfo *cio); -bool NetworkCompanyIsPassworded(CompanyID company_id); uint NetworkMaxCompaniesAllowed(); bool NetworkMaxCompaniesReached(); void NetworkPrintClients(); diff --git a/src/network/network_internal.h b/src/network/network_internal.h index 1c2fe23ef2..aa394f6e44 100644 --- a/src/network/network_internal.h +++ b/src/network/network_internal.h @@ -114,7 +114,6 @@ void NetworkTextMessage(NetworkAction action, TextColour colour, bool self_send, uint NetworkCalculateLag(const NetworkClientSocket *cs); StringID GetNetworkErrorMsg(NetworkErrorCode err); bool NetworkMakeClientNameUnique(std::string &new_name); -std::string GenerateCompanyPasswordHash(const std::string &password, const std::string &password_server_id, uint32_t password_game_seed); std::string_view ParseCompanyFromConnectionString(const std::string &connection_string, CompanyID *company_id); NetworkAddress ParseConnectionString(const std::string &connection_string, uint16_t default_port); diff --git a/src/settings_type.h b/src/settings_type.h index cfc6ad7c33..8064466404 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -320,9 +320,7 @@ struct NetworkSettings { std::string client_name; ///< name of the player (as client) std::string client_secret_key; ///< The secret key of the client for authorized key logins. std::string client_public_key; ///< The public key of the client for authorized key logins. - std::string default_company_pass; ///< default password for new companies in encrypted form std::string connect_to_ip; ///< default for the "Add server" query - std::string network_id; ///< network ID for servers bool autoclean_companies; ///< automatically remove companies that are not in use uint8_t autoclean_protected; ///< Remove companies after this many months. uint8_t autoclean_novehicles; ///< remove companies with no vehicles after this many months diff --git a/src/table/settings/network_secrets_settings.ini b/src/table/settings/network_secrets_settings.ini index 3d7908e75a..ed9ae27130 100644 --- a/src/table/settings/network_secrets_settings.ini +++ b/src/table/settings/network_secrets_settings.ini @@ -79,20 +79,6 @@ def = nullptr ; Prevent the user from setting the public key from the console using 'setting' pre_cb = [](auto) { return false; } -[SDTC_SSTR] -var = network.default_company_pass -type = SLE_STR -length = NETWORK_PASSWORD_LENGTH -flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC -def = nullptr - -[SDTC_SSTR] -var = network.network_id -type = SLE_STR -length = NETWORK_SERVER_ID_LENGTH -flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY -def = nullptr - [SDTC_SSTR] var = network.server_invite_code type = SLE_STR From 849d1fa1b303be842c6ec0f32d4a98062446b491 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 23 Mar 2024 19:43:08 +0100 Subject: [PATCH 477/695] Cleanup: remove UI for asking user for company password --- src/lang/english.txt | 1 - src/network/network_client.cpp | 2 +- src/network/network_gui.cpp | 10 ++-------- src/network/network_gui.h | 2 +- src/network/network_type.h | 6 ------ 5 files changed, 4 insertions(+), 17 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 0127b342b0..b34bd820b9 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2460,7 +2460,6 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Fetching STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Disconnect STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is protected. Enter password -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Company is protected. Enter password # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Online players diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 307f38814f..2aca0fc6ca 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -709,7 +709,7 @@ class ClientGamePasswordRequestHandler : public NetworkAuthenticationPasswordReq if (!_network_join.server_password.empty()) { request->Reply(_network_join.server_password); } else { - ShowNetworkNeedPassword(NETWORK_GAME_PASSWORD, request); + ShowNetworkNeedPassword(request); } } }; diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index bc2530fe87..323188faea 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -2208,19 +2208,13 @@ void ShowJoinStatusWindow() new NetworkJoinStatusWindow(&_network_join_status_window_desc); } -void ShowNetworkNeedPassword(NetworkPasswordType npt, std::shared_ptr request) +void ShowNetworkNeedPassword(std::shared_ptr request) { NetworkJoinStatusWindow *w = dynamic_cast(FindWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN)); if (w == nullptr) return; w->request = request; - StringID caption; - switch (npt) { - default: NOT_REACHED(); - case NETWORK_GAME_PASSWORD: caption = STR_NETWORK_NEED_GAME_PASSWORD_CAPTION; break; - case NETWORK_COMPANY_PASSWORD: caption = STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION; break; - } - ShowQueryString(STR_EMPTY, caption, NETWORK_PASSWORD_LENGTH, w, CS_ALPHANUMERAL, QSF_PASSWORD); + ShowQueryString(STR_EMPTY, STR_NETWORK_NEED_GAME_PASSWORD_CAPTION, NETWORK_PASSWORD_LENGTH, w, CS_ALPHANUMERAL, QSF_NONE); } /** diff --git a/src/network/network_gui.h b/src/network/network_gui.h index 222542e210..6c2555a5bf 100644 --- a/src/network/network_gui.h +++ b/src/network/network_gui.h @@ -17,7 +17,7 @@ #include "network_type.h" #include "network_gamelist.h" -void ShowNetworkNeedPassword(NetworkPasswordType npt, std::shared_ptr request); +void ShowNetworkNeedPassword(std::shared_ptr request); void ShowNetworkChatQueryWindow(DestType type, int dest); void ShowJoinStatusWindow(); void ShowNetworkGameWindow(); diff --git a/src/network/network_type.h b/src/network/network_type.h index 0ab7d51558..911a163de0 100644 --- a/src/network/network_type.h +++ b/src/network/network_type.h @@ -72,12 +72,6 @@ struct NetworkCompanyStats { struct NetworkClientInfo; -/** The type of password we're asking for. */ -enum NetworkPasswordType { - NETWORK_GAME_PASSWORD, ///< The password of the game. - NETWORK_COMPANY_PASSWORD, ///< The password of the company. -}; - /** * Destination of our chat messages. * @warning The values of the enum items are part of the admin network API. Only append at the end. From 1a3cbaec569c2c8d3c84d8ee057ac0523684b50d Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 23 Mar 2024 19:45:21 +0100 Subject: [PATCH 478/695] Cleanup: remove warning about server administrators being able to read passwords --- src/lang/english.txt | 1 - src/misc_gui.cpp | 31 ------------------------------- src/textbuf_gui.h | 1 - src/widgets/misc_widget.h | 1 - 4 files changed, 34 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index b34bd820b9..916d08b45d 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -308,7 +308,6 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}By enabl STR_BUTTON_DEFAULT :{BLACK}Default STR_BUTTON_CANCEL :{BLACK}Cancel STR_BUTTON_OK :{BLACK}OK -STR_WARNING_PASSWORD_SECURITY :{YELLOW}Warning: Server administrators may be able to read any text entered here. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 0f4f3258b0..4f9c11803e 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -948,7 +948,6 @@ struct QueryStringWindow : public Window { QueryString editbox; ///< Editbox. QueryStringFlags flags; ///< Flags controlling behaviour of the window. - Dimension warning_size; ///< How much space to use for the warning text QueryStringWindow(StringID str, StringID caption, uint max_bytes, uint max_chars, WindowDesc *desc, Window *parent, CharSetFilter afilter, QueryStringFlags flags) : Window(desc), editbox(max_bytes, max_chars) @@ -965,27 +964,12 @@ struct QueryStringWindow : public Window this->flags = flags; this->InitNested(WN_QUERY_STRING); - this->UpdateWarningStringSize(); this->parent = parent; this->SetFocusedWidget(WID_QS_TEXT); } - void UpdateWarningStringSize() - { - if (this->flags & QSF_PASSWORD) { - assert(this->nested_root->smallest_x > 0); - this->warning_size.width = this->nested_root->current_x - WidgetDimensions::scaled.frametext.Horizontal() - WidgetDimensions::scaled.framerect.Horizontal(); - this->warning_size.height = GetStringHeight(STR_WARNING_PASSWORD_SECURITY, this->warning_size.width); - this->warning_size.height += WidgetDimensions::scaled.frametext.Vertical() + WidgetDimensions::scaled.framerect.Vertical(); - } else { - this->warning_size = Dimension{ 0, 0 }; - } - - this->ReInit(); - } - void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_QS_DEFAULT && (this->flags & QSF_ENABLE_DEFAULT) == 0) { @@ -994,20 +978,6 @@ struct QueryStringWindow : public Window resize.width = 0; size.width = 0; } - - if (widget == WID_QS_WARNING) { - size = this->warning_size; - } - } - - void DrawWidget(const Rect &r, WidgetID widget) const override - { - if (widget != WID_QS_WARNING) return; - - if (this->flags & QSF_PASSWORD) { - DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.framerect).Shrink(WidgetDimensions::scaled.frametext), - STR_WARNING_PASSWORD_SECURITY, TC_FROMSTRING, SA_CENTER); - } } void SetStringParameters(WidgetID widget) const override @@ -1061,7 +1031,6 @@ static constexpr NWidgetPart _nested_query_string_widgets[] = { NWidget(WWT_PANEL, COLOUR_GREY), NWidget(WWT_EDITBOX, COLOUR_GREY, WID_QS_TEXT), SetMinimalSize(256, 12), SetFill(1, 1), SetPadding(2, 2, 2, 2), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_QS_WARNING), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_QS_DEFAULT), SetMinimalSize(87, 12), SetFill(1, 1), SetDataTip(STR_BUTTON_DEFAULT, STR_NULL), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_QS_CANCEL), SetMinimalSize(86, 12), SetFill(1, 1), SetDataTip(STR_BUTTON_CANCEL, STR_NULL), diff --git a/src/textbuf_gui.h b/src/textbuf_gui.h index 0284bbd57e..15776fb680 100644 --- a/src/textbuf_gui.h +++ b/src/textbuf_gui.h @@ -20,7 +20,6 @@ enum QueryStringFlags { QSF_ACCEPT_UNCHANGED = 0x01, ///< return success even when the text didn't change QSF_ENABLE_DEFAULT = 0x02, ///< enable the 'Default' button ("\0" is returned) QSF_LEN_IN_CHARS = 0x04, ///< the length of the string is counted in characters - QSF_PASSWORD = 0x08, ///< password entry box, show warning about password security }; DECLARE_ENUM_AS_BIT_SET(QueryStringFlags) diff --git a/src/widgets/misc_widget.h b/src/widgets/misc_widget.h index a3ec814f1b..0d59ee4f8e 100644 --- a/src/widgets/misc_widget.h +++ b/src/widgets/misc_widget.h @@ -32,7 +32,6 @@ enum AboutWidgets : WidgetID { enum QueryStringWidgets : WidgetID { WID_QS_CAPTION, ///< Caption of the window. WID_QS_TEXT, ///< Text of the query. - WID_QS_WARNING, ///< Warning label about password security WID_QS_DEFAULT, ///< Default button. WID_QS_CANCEL, ///< Cancel button. WID_QS_OK, ///< OK button. From ab7e2a18836bec283d0213384780e32ccadc14f7 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 7 May 2024 04:41:01 +0000 Subject: [PATCH 479/695] Update: Translations from eints english (au): 2 changes by krysclarke english (us): 2 changes by 2TallTyler greek: 4 changes by gh658804 russian: 2 changes by Ln-Wolf finnish: 4 changes by hpiirai danish: 2 changes by bscargo lithuanian: 170 changes by khamper french: 1 change by ben20471 portuguese: 2 changes by azulcosta portuguese (brazilian): 2 changes by pasantoro polish: 2 changes by pAter-exe --- src/lang/afrikaans.txt | 12 -- src/lang/arabic_egypt.txt | 12 -- src/lang/basque.txt | 11 -- src/lang/belarusian.txt | 14 -- src/lang/brazilian_portuguese.txt | 16 +- src/lang/bulgarian.txt | 13 -- src/lang/catalan.txt | 14 -- src/lang/chuvash.txt | 2 - src/lang/croatian.txt | 12 -- src/lang/czech.txt | 14 -- src/lang/danish.txt | 16 +- src/lang/dutch.txt | 14 -- src/lang/english_AU.txt | 16 +- src/lang/english_US.txt | 16 +- src/lang/esperanto.txt | 12 -- src/lang/estonian.txt | 14 -- src/lang/faroese.txt | 11 -- src/lang/finnish.txt | 20 +-- src/lang/french.txt | 15 +- src/lang/frisian.txt | 9 -- src/lang/gaelic.txt | 11 -- src/lang/galician.txt | 14 -- src/lang/german.txt | 14 -- src/lang/greek.txt | 18 +-- src/lang/hebrew.txt | 13 -- src/lang/hindi.txt | 3 - src/lang/hungarian.txt | 14 -- src/lang/icelandic.txt | 11 -- src/lang/ido.txt | 2 - src/lang/indonesian.txt | 14 -- src/lang/irish.txt | 14 -- src/lang/italian.txt | 14 -- src/lang/japanese.txt | 14 -- src/lang/korean.txt | 14 -- src/lang/latin.txt | 11 -- src/lang/latvian.txt | 14 -- src/lang/lithuanian.txt | 249 ++++++++++++++++++++---------- src/lang/luxembourgish.txt | 14 -- src/lang/macedonian.txt | 2 - src/lang/malay.txt | 11 -- src/lang/maltese.txt | 2 - src/lang/marathi.txt | 2 - src/lang/norwegian_bokmal.txt | 14 -- src/lang/norwegian_nynorsk.txt | 11 -- src/lang/persian.txt | 11 -- src/lang/polish.txt | 16 +- src/lang/portuguese.txt | 16 +- src/lang/romanian.txt | 14 -- src/lang/russian.txt | 16 +- src/lang/serbian.txt | 14 -- src/lang/simplified_chinese.txt | 14 -- src/lang/slovak.txt | 14 -- src/lang/slovenian.txt | 11 -- src/lang/spanish.txt | 14 -- src/lang/spanish_MX.txt | 14 -- src/lang/swedish.txt | 14 -- src/lang/tamil.txt | 12 -- src/lang/thai.txt | 12 -- src/lang/traditional_chinese.txt | 14 -- src/lang/turkish.txt | 14 -- src/lang/ukrainian.txt | 14 -- src/lang/urdu.txt | 11 -- src/lang/vietnamese.txt | 14 -- src/lang/welsh.txt | 14 -- 64 files changed, 193 insertions(+), 843 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 378f99f5f6..7df3302a8d 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -273,7 +273,6 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Deur hie STR_BUTTON_DEFAULT :{BLACK}Gewone STR_BUTTON_CANCEL :{BLACK}Kanselleer STR_BUTTON_OK :{BLACK}OK -STR_WARNING_PASSWORD_SECURITY :{YELLOW}Waarskuwing: bedieneradministrateurs kan moontlik die teks wat hier ingevoer is, lees. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -2137,7 +2136,6 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Maatskap STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Loskoppel STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Verskaffer is beskerm. Voer wagwoord in -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Maatskappy is beskerm. Voer wagwoord in # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klient Lys @@ -2153,19 +2151,9 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klient Lys STR_NETWORK_SPECTATORS :Aanskouers -# Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}Moenie die ingesleutelde wagwoord bewaar nie -STR_COMPANY_PASSWORD_OK :{BLACK}Gee die maatskappy die nuwe wagwoord -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Maatskappy wagwoord -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Voorbepaalde maatskappy wagwoord -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Gebruik die maatskapy wagwoord as die standaard vir nuwe maatskappye - # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Bind STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Bind en speel as maatskapy -STR_COMPANY_VIEW_PASSWORD :{BLACK}Wagwoord -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Beskerm maatskappy met wagwoord om te verhoed dat ongemagtigde spelers toegang verkry -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Stel maatskappy wagwoord # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Stuur diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 133d9c8f10..023824906c 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1990,7 +1990,6 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}جلب STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}فصل STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}الخادم محمى. من فضلك ادخل كلمه المرور -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}الشركه محميه. من فضلك ادخل كلمه المرور # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :اللاعبون عبر الإنترنت @@ -2014,26 +2013,15 @@ STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :منع STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}هل أنت متأكد أنك تريد طرد اللاعب '{STRING}'؟ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}هل أنت متأكد أنك تريد حظر اللاعب '{STRING}'؟ STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}هل أنت متأكد أنك تريد حذف شركة '{COMPANY}'؟ -STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}هل أنت متأكد أنك تريد محو كلمة السر الخاصة بالشركة '{COMPANY}'? STR_NETWORK_ASK_RELAY_NO :{BLACK}لا STR_NETWORK_SPECTATORS :المشاهدين -# Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}لا تحفظ كلمة المرور المدخلة -STR_COMPANY_PASSWORD_OK :{BLACK}اعط الشركة كلمة المرور الجديدة -STR_COMPANY_PASSWORD_CAPTION :{WHITE}كلمة مرور الشركة -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}كلمة مرور الشركة القياسية -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}استخدم كلمة مرور هذه الشركة كافتراضية للشركات الجديدة - # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK} انضم STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK} انضم و العب بهذه الشركة -STR_COMPANY_VIEW_PASSWORD :{BLACK}كلمة المرور -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}احمي شركتك بكلمة مرور خاصة لمنع الوصول الغير مسموح من اللاعبين الآخرين. -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}ادخل كلمة المرور # Network chat STR_NETWORK_CHAT_SEND :{BLACK}ارسل diff --git a/src/lang/basque.txt b/src/lang/basque.txt index c5f02432d3..f1e6216f23 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -2024,7 +2024,6 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Konpaini STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Deskonektatua STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Zerbitzaria babestua dago. Pasahitza sartu -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Konpainia babestua dago. Pasahitza sartu # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Bezero zerrenda @@ -2040,19 +2039,9 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Bezero zerrenda STR_NETWORK_SPECTATORS :Ikusleak -# Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ez gorde sartutako pasahitza -STR_COMPANY_PASSWORD_OK :{BLACK}Konpainiari pasahitz berria ezarri -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Konpainiaren pasahitza -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Konpainiaren pasahitz lehenetsia -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Konpainia pasahitz hau kopainia berrientzako lehenetsi - # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Sartu STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Sartu eta konpainia honekin jokatu -STR_COMPANY_VIEW_PASSWORD :{BLACK}Pasahitza -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Pasahitzak zure konpainia babestuko du ez baimendutako bezeroetaz -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Konpainia pasahitza ezarri # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Bidali diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index ea803991bb..4034002df9 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -621,7 +621,6 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Калі STR_BUTTON_DEFAULT :{BLACK}Па змоўчаньнi STR_BUTTON_CANCEL :{BLACK}Скасаваць STR_BUTTON_OK :{BLACK}OK -STR_WARNING_PASSWORD_SECURITY :{YELLOW}Увага: адміністратары сервера могуць убачыць ваш пароль. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -2766,7 +2765,6 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Здаб STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Адлучыцца STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сэрвэр абаронены. Увядзіце пароль -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Кампанія абароненая. Увядзіце пароль # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Сьпіс гульцоў @@ -2815,13 +2813,11 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Праз STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Адключыць STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Заблакаваць STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Выдаліць -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Скінуць пароль STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Пацверджаньне дзеяньня STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Адключыць гульца «{STRING}»? STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Заблакаваць гульца «{STRING}»? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Выдаліць кампанію «{COMPANY}»? -STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Скінуць пароль у кампаніі «{COMPANY}»? STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Выкарыстоўваць транслятар? STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Не атрымалася ўсталяваць злучэнне з серверам «{STRING}».{}Перанакіраваць злучэнне праз «{STRING}»? @@ -2838,19 +2834,9 @@ STR_NETWORK_ASK_SURVEY_YES :Так STR_NETWORK_SPECTATORS :Гледачы -# Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}Не захоўваць уведзены пароль -STR_COMPANY_PASSWORD_OK :{BLACK}Даць кампаніі новы пароль -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Пароль кампаніі -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Пароль кампаніі па змоўчаньні -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Выкарыстоўваць пароль гэтай кампаніі як пароль па змоўчаньні для новых кампаніяў - # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Далучыцца STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Далучыцца й гуляць за гэтую кампанію -STR_COMPANY_VIEW_PASSWORD :{BLACK}Пароль -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Абараніць вашу кампанію паролем, каб неаўтарызаваныя карыстальнікі не маглі далучыцца -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Усталяваць пароль кампаніі # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Адправіць diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 7ca1fa2c58..f394af90a4 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -309,7 +309,6 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Ativando STR_BUTTON_DEFAULT :{BLACK}Padrão STR_BUTTON_CANCEL :{BLACK}Cancelar STR_BUTTON_OK :{BLACK}OK -STR_WARNING_PASSWORD_SECURITY :{YELLOW}Aviso: os administradores do servidor podem ler qualquer texto inserido aqui. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -1084,6 +1083,8 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Conjunto STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selecione um conjunto de músicas básicas para usar STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Informação adicional sobre o conjunto de músicas básicas +STR_GAME_OPTIONS_ONLINE_CONTENT :Obter Conteúdo +STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Verificar por conteúdo novo e atualizado para download STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(não existem plugins instalados para integrar com as plataformas sociais) @@ -2459,7 +2460,6 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Obtendo STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconectar STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Digite a senha -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Digite a senha # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Jogadores conectados @@ -2508,13 +2508,11 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Via retr STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Expulsar STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Banir STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Excluir -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Desbloquear senha STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Ação administrativa STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Você quer mesmo expulsar o jogador '{STRING}'? STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Você quer mesmo banir o jogador '{STRING}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Você quer mesmo excluir a empresa '{COMPANY}'? -STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Você quer mesmo apagar a senha da empresa '{COMPANY}'? STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Usar retransmissão? STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Erro ao estabelecer uma conexão entre você e o servidor.'{STRING}'Você gostaria de retransmitir essa sessão via '{STRING}'? @@ -2531,19 +2529,9 @@ STR_NETWORK_ASK_SURVEY_YES :Sim STR_NETWORK_SPECTATORS :Espectadores -# Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}Não salvar a senha digitada -STR_COMPANY_PASSWORD_OK :{BLACK}Atribuir nova senha à empresa -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Senha da empresa -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Senha padrão da empresa -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Usar a senha desta empresa como padrão para novas empresas - # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Participar STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Participar e jogar por esta empresa -STR_COMPANY_VIEW_PASSWORD :{BLACK}Senha -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Proteja a sua empresa com uma senha para impedir a participação de usuários não autorizados -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Definir senha para empresa # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Enviar diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 81404dfa34..01d5029bfe 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -288,7 +288,6 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}С ак STR_BUTTON_DEFAULT :{BLACK}По подразбиране STR_BUTTON_CANCEL :{BLACK}Отказ STR_BUTTON_OK :{BLACK}OK -STR_WARNING_PASSWORD_SECURITY :{YELLOW}Внимание: Администраторите на сървъра могат да прочетат всеки текст, въведен тук. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-.,уеишщксдзц;(ьяаожгтнвмчюйъэфхпрлб @@ -2200,7 +2199,6 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Свал STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Изключване STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сървъра е защитен. Въведете парола -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Компанията е защитена. Въведете парола # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Списък с играчите @@ -2217,26 +2215,15 @@ STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :Админис STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Изхвърлен STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Бан STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Изтриване -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Отключване на парола STR_NETWORK_SPECTATORS :Наблюдатели -# Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}Незапазвай паролата -STR_COMPANY_PASSWORD_OK :{BLACK}Дай на компанията новата парола -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Парола на компанията -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Парола по подразбиране за компания -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Използване на тази парола по подразбиране за нови компании - # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Присъедини се STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Присъедини се, управлявайки тази компания -STR_COMPANY_VIEW_PASSWORD :{BLACK}Парола -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Постави парола за да предпазиш компанията си от неоторизирани потребители. -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Поставяне парола на компанията # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Изпращане diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index ecc0fade86..a2fe7beae6 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -309,7 +309,6 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Activant STR_BUTTON_DEFAULT :{BLACK}Predeterminat STR_BUTTON_CANCEL :{BLACK}Cancel·la STR_BUTTON_OK :{BLACK}D'acord -STR_WARNING_PASSWORD_SECURITY :{YELLOW}Avís: Els administradors del servidor potser poden llegir el que escriviu aquí. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -2457,7 +2456,6 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Obtenint STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconnecta STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegit: escriviu-ne la contrasenya -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Companyia protegida: escriviu-ne la contrasenya # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Jugadors en línia @@ -2506,13 +2504,11 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Via serv STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Treu STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Expulsa STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Esborra -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Desbloca la contrasenya STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Acció de l'administrador STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Esteu segur que voleu treure el jugador «{STRING}»? STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Esteu segur que voleu expulsar el jugador «{STRING}»? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Esteu segur que voleu esborrar la companyia «{COMPANY}»? -STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Esteu segur que voleu restablir la contrasenya de la companyia «{COMPANY}»? STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Voleu usar un servei de transmissió? STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}No s'ha pogut establir una connexió amb el servidor «{STRING}».{}Voleu transmetre aquesta sessió via «{STRING}»? @@ -2529,19 +2525,9 @@ STR_NETWORK_ASK_SURVEY_YES :Sí STR_NETWORK_SPECTATORS :Espectadors -# Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}No desis la nova contrasenya. -STR_COMPANY_PASSWORD_OK :{BLACK}Estableix aquesta nova contrasenya per a la companyia. -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Contrasenya de la companyia -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Contrasenya predeterminada de companyies noves -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Utilitza com a contrasenya predeterminada de companyies noves la d'aquesta companyia. - # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Uniu-vos STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Uniu-vos a aquesta companyia per poder-hi jugar. -STR_COMPANY_VIEW_PASSWORD :{BLACK}Contrasenya -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Protegeix la vostra companyia amb una contrasenya per tal d'evitar que la controlin altres usuaris no autoritzats. -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Estableix la contrasenya de la companyia. # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Envia diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index 21a3e74810..0c1dc315fe 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -1000,8 +1000,6 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Вырн -# Network set password - # Network company info join/password # Network chat diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 9962e3e6b6..9a086389a1 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -368,7 +368,6 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Uključi STR_BUTTON_DEFAULT :{BLACK}Zadano STR_BUTTON_CANCEL :{BLACK}Odustani STR_BUTTON_OK :{BLACK}OK -STR_WARNING_PASSWORD_SECURITY :{YELLOW}Upozorenje: Administratori servera mogu pročitati bilo koji tekst upisan ovdje. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -2263,7 +2262,6 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Dohvaća STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Odspoji STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Poslužitelj je zaštićen. Unesite zaporku -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Tvrtka je zaštićena. Unesite zaporku # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Online igrači @@ -2291,19 +2289,9 @@ STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Da, samo STR_NETWORK_SPECTATORS :Promatrači -# Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}Nemoj spremiti upisanu zaporku -STR_COMPANY_PASSWORD_OK :{BLACK}Daj tvrtci novu zaporku -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Zaporka tvrtke -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Inicijalna zaporka tvrtke -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Uporabi zaporku ove tvrtke kao inicijalnu za nove tvrtke - # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Pridruži se STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Pridruži se i igraj kao ova tvrtka -STR_COMPANY_VIEW_PASSWORD :{BLACK}Zaporka -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Zaštiti šifrom svoju tvrtku od korištenja od strane neovlaštenih korisnika. -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Postavi zaporku tvrtke # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Pošalji diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 6a51b95417..8bdb8cf241 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -383,7 +383,6 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Zapnutí STR_BUTTON_DEFAULT :{BLACK}Původní STR_BUTTON_CANCEL :{BLACK}Zrušit STR_BUTTON_OK :{BLACK}OK -STR_WARNING_PASSWORD_SECURITY :{YELLOW}Upozornění: Administrátor serveru může zjistit a přečíst jakýkoliv text sem vložený. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :"+ěščřžýáíé=-\qwertyuiopú)asdfghjklů' zxcvbnm,./ . @@ -2537,7 +2536,6 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Přijím STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Odpojit se STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server je chráněný. Napiš heslo -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Společnost je chráněná. Napiš heslo # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Seznam hráčů @@ -2586,13 +2584,11 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Přes re STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Vyhodit STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Ban STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Smazat -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Odemčení hesla STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Administrátorská akce STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Opravdu chceš vyhodit hráče '{STRING}'? STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Opravdu chceš zabanovat hráče '{STRING}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Jste si jisti, že chcete smazat společnost '{COMPANY}'? -STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Opravdu chcete obnovit heslo společnosti '{COMPANY}'? STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Použít relay? STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Nepodařilo se vytvořit spojení mezi tebou a serverem '{STRING}'.{}Chceš propojit toto sezení přes relay '{STRING}'? @@ -2609,19 +2605,9 @@ STR_NETWORK_ASK_SURVEY_YES :Ano STR_NETWORK_SPECTATORS :Pozorovatelé -# Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}Neukládat zadané heslo -STR_COMPANY_PASSWORD_OK :{BLACK}Změnit heslo společnosti -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Heslo společnosti -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Výchozí heslo společností -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Použít toto heslo jako výchozí pro nově založené společnosti - # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Přidat se STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Připojit se a hrát za tuto společnost -STR_COMPANY_VIEW_PASSWORD :{BLACK}Heslo -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Heslo - zabrání neautorizovaným uživatelům v připojení se k tvé společnosti -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Nastav heslo společnosti # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Poslat diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 3a12415139..4d661d5882 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -308,7 +308,6 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Ved at a STR_BUTTON_DEFAULT :{BLACK}Standard STR_BUTTON_CANCEL :{BLACK}Annuller STR_BUTTON_OK :{BLACK}OK -STR_WARNING_PASSWORD_SECURITY :{YELLOW}Advarsel: Server administratoren kan være i stand til at læse al tekst skrevet her. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -1083,6 +1082,8 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Basis-mu STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Vælg basismusik-sæt STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Yderligere information om basismusik-sættet +STR_GAME_OPTIONS_ONLINE_CONTENT :Hent indhold +STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Søg efter nyt og opdateret indhold, der skal downloades STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(ingen plugins til at integrere med sociale platforme installeret) @@ -2458,7 +2459,6 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Henter s STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Afbryd forbindelse STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serveren er beskyttet. Indtast kodeord -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Selskabet er beskyttet. Indtast kodeord # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Online spillere @@ -2507,13 +2507,11 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Via rel STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Smid ud STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Udeluk STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Slet -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Lås adgangskode op STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Admin handling STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Er du sikker på du ønsker at smide spilleren '{STRING}' ud? STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Er du sikker på du ønsker at udelukke spilleren '{STRING}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Er du sikker på du ønsker at slette selskabet '{COMPANY}'? -STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Er du sikker på du ønsker at nulstille adgangskoden til selskabet '{COMPANY}'? STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Anvend relæ? STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Det lykkedes ikke at etablere en forbindelse mellem dig og serveren '{STRING}'.{}Ønsker du at anvende '{STRING}' som relæ for denne gang? @@ -2530,19 +2528,9 @@ STR_NETWORK_ASK_SURVEY_YES :Ja STR_NETWORK_SPECTATORS :Tilskuere -# Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}Gem ikke den indtastede adgangskode -STR_COMPANY_PASSWORD_OK :{BLACK}Giv firmaet den nye adgangskode -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Firma-adgangskode -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Standard firma-adgangskode -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Brug denne firma-adgangskode som standard for nye firmaer - # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Tilslut dig STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Tilslut dig og spil som dette firma -STR_COMPANY_VIEW_PASSWORD :{BLACK}Kodeord -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Beskyt dit selskab med et kodeord for at undgå, at fremmede slutter sig til det. -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Sæt selskabets kodeord # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Send diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index fbc2e4e249..aa69db71ad 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -308,7 +308,6 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Wanneer STR_BUTTON_DEFAULT :{BLACK}Standaard STR_BUTTON_CANCEL :{BLACK}Annuleren STR_BUTTON_OK :{BLACK}OK -STR_WARNING_PASSWORD_SECURITY :{YELLOW}Waarschuwing: het kan zijn dat serverbeheerders de tekst kunnen lezen die hier is ingevoerd. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -2456,7 +2455,6 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Bedrijfs STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Verbinding verbreken STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is beveiligd. Voer wachtwoord in -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Bedrijf is beveiligd. Voer wachtwoord in # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Spelers online @@ -2505,13 +2503,11 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Via omle STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Eruit schoppen STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Bannen STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Verwijderen -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Wachtwoord ontgrendelen STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Beheeractie STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Weet je zeker dat je de speler '{STRING}' eruit wilt schoppen? STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Weet je zeker dat je de speler '{STRING}' wilt bannen? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Weet je zeker dat je het bedrijf '{COMPANY}' wilt verwijderen? -STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Weet je zeker dat je het wachtwoord voor bedrijf '{COMPANY}' wilt terugstellen? STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Omleiden? STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Kan geen verbinding maken tussen jou en server '{STRING}'.{}Wil je deze sessie omleiden via '{STRING}'? @@ -2528,19 +2524,9 @@ STR_NETWORK_ASK_SURVEY_YES :Ja STR_NETWORK_SPECTATORS :Toeschouwers -# Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ingevoerd wachtwoord niet opslaan -STR_COMPANY_PASSWORD_OK :{BLACK}Bedrijf het nieuwe wachtwoord geven -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Bedrijfswachtwoord -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Standaard bedrijfswachtwoord -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Dit bedrijfswachtwoord gebruiken als standaard voor nieuwe bedrijven - # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Meedoen STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Doe mee en speel als dit bedrijf -STR_COMPANY_VIEW_PASSWORD :{BLACK}Wachtwoord -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Beveilig het bedrijf met een wachtwoord zodat niet-geautoriseerde personen niet mee kunnen doen -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Bedrijfswachtwoord instellen # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Verstuur diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 1eb3986afc..2675920e0f 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -308,7 +308,6 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}By enabl STR_BUTTON_DEFAULT :{BLACK}Default STR_BUTTON_CANCEL :{BLACK}Cancel STR_BUTTON_OK :{BLACK}OK -STR_WARNING_PASSWORD_SECURITY :{YELLOW}Warning: Server administrators may be able to read any text entered here. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -1083,6 +1082,8 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Base mus STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Select the base music set to use STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Additional information about the base music set +STR_GAME_OPTIONS_ONLINE_CONTENT :Get Content +STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Check for new and updated content to download STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(no plugins to integrate with social platforms installed) @@ -2458,7 +2459,6 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Fetching STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Disconnect STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is protected. Enter password -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Company is protected. Enter password # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Online players @@ -2507,13 +2507,11 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Via rela STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Kick STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Ban STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Delete -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Password unlock STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Admin action STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Are you sure you want to kick player '{STRING}'? STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Are you sure you want to ban player '{STRING}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Are you sure you want to delete company '{COMPANY}'? -STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Are you sure you want to reset the password of company '{COMPANY}'? STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Use relay? STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Failed to establish a connection between you and server '{STRING}'.{}Would you like to relay this session via '{STRING}'? @@ -2530,19 +2528,9 @@ STR_NETWORK_ASK_SURVEY_YES :Yes STR_NETWORK_SPECTATORS :Spectators -# Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}Do not save the entered password -STR_COMPANY_PASSWORD_OK :{BLACK}Give the company the new password -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Company password -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Default company password -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Use this company password as default for new companies - # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Join STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Join and play as this company -STR_COMPANY_VIEW_PASSWORD :{BLACK}Password -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Password-protect your company to prevent unauthorised users from joining -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Set company password # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Send diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index c23a64f5c2..42cfe8cf68 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -308,7 +308,6 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}By enabl STR_BUTTON_DEFAULT :{BLACK}Default STR_BUTTON_CANCEL :{BLACK}Cancel STR_BUTTON_OK :{BLACK}OK -STR_WARNING_PASSWORD_SECURITY :{YELLOW}Warning: Server administrators may be able to read any text entered here. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -1083,6 +1082,8 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Base mus STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Select the base music set to use STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Additional information about the base music set +STR_GAME_OPTIONS_ONLINE_CONTENT :Get Content +STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Check for new and updated content to download STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(no plugins to integrate with social platforms installed) @@ -2458,7 +2459,6 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Fetching STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Disconnect STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is protected. Enter password -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Company is protected. Enter password # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Online players @@ -2507,13 +2507,11 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Via rela STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Kick STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Ban STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Delete -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Password unlock STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Admin action STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Are you sure you want to kick player '{STRING}'? STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Are you sure you want to ban player '{STRING}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Are you sure you want to delete company '{COMPANY}'? -STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Are you sure you want to reset the password of company '{COMPANY}'? STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Use relay? STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Failed to establish a connection between you and server '{STRING}'.{}Would you like to relay this session via '{STRING}'? @@ -2530,19 +2528,9 @@ STR_NETWORK_ASK_SURVEY_YES :Yes STR_NETWORK_SPECTATORS :Spectators -# Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}Do not save the entered password -STR_COMPANY_PASSWORD_OK :{BLACK}Give the company the new password -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Company password -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Default company password -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Use this company password as default for new companies - # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Join STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Join and play as this company -STR_COMPANY_VIEW_PASSWORD :{BLACK}Password -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Password-protect your company to prevent unauthorized users from joining -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Set company password # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Send diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 3be9b6e555..cc97ccf1af 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -391,7 +391,6 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Post akt STR_BUTTON_DEFAULT :{BLACK}Normo STR_BUTTON_CANCEL :{BLACK}Nuligu STR_BUTTON_OK :{BLACK}Bone -STR_WARNING_PASSWORD_SECURITY :{YELLOW}Atentu: La serviladministrantoj eventuale povas legi ajnan tekston entajpitan ĉi tie. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -2429,7 +2428,6 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Kaptante STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Malkonektu STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servilo estas protektata. Enigu pasvorton -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Kompanio estas protektata. Enigu pasvorton # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Enretaj ludantoj @@ -2495,19 +2493,9 @@ STR_NETWORK_ASK_SURVEY_YES :Jes STR_NETWORK_SPECTATORS :Spektantoj -# Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ne konservu la pasvorton. -STR_COMPANY_PASSWORD_OK :{BLACK}Donu la novan pasvorton al la kompanio. -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Kompania pasvorto -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Fari defaŭltan kompanipasvorton. -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Uzu ĉi tiun kompanipasvorton kiel defaŭlto por novaj kompanioj. - # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Anigi STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Anigi kaj ludi kiel ĉi tiu kompanio. -STR_COMPANY_VIEW_PASSWORD :{BLACK}Pasvorto -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Pasvorte protektu vian kompanion por eviti ke eksteruloj aliĝu -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Agordu kompanian pasvorton # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Sendu diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index a21df7397f..0ebb28f019 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -365,7 +365,6 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Selle nu STR_BUTTON_DEFAULT :{BLACK}Esialgne STR_BUTTON_CANCEL :{BLACK}Tühista STR_BUTTON_OK :{BLACK}OK -STR_WARNING_PASSWORD_SECURITY :{YELLOW}Hoiatus: Serveriadministraatorid võivad olla võimelised lugema siinset teksti. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -2510,7 +2509,6 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Hangin e STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Katkesta STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server on kaitstud. Sisesta salasõna -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Ettevõte on kaitstud. Sisesta salasõna # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Ühendatud mängijad @@ -2559,13 +2557,11 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Läbi va STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Viska välja STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Keela STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Kustuta -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Salasõnaga avamine STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Haldustoiming STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Kas oled kindel, et välja visata mängija '{STRING}'? STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Kas oled kindel, et sa tahad keelata mängija '{STRING}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Kas oled kindel, et tahad kustutada ettevõtte '{COMPANY}'? -STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Kas oled kindel, et soovid nullida ettevõtte '{COMPANY}' salasõna? STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Kasuta vahendajat? STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Ühenduse loomine sinu ja serveri '{STRING}' vahel ebaõnnestus .{}Kas sa soovid seda sesiooni vahendada läbi '{STRING}'? @@ -2582,19 +2578,9 @@ STR_NETWORK_ASK_SURVEY_YES :Ja STR_NETWORK_SPECTATORS :Vaatlejad -# Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}Sisestatud salasõna ei salvestata -STR_COMPANY_PASSWORD_OK :{BLACK}Määra ettevõtte uus salasõna -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Ettevõtte salasõna -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Esialgne ettevõtte salasõna -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Määra ettevõtte salasõna uute ettevõtete esialgseks salasõnaks - # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Liitu STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Liitu ja mängi selle ettevõttena -STR_COMPANY_VIEW_PASSWORD :{BLACK}Salasõna -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Ettevõtte kaitsmine salasõnaga, et võõrad ei saaks ilma loata ühineda -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Vali ettevõttele salasõna # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Saada diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index b049942e2a..ff2e79733f 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1935,7 +1935,6 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Fær kun STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Slít samband STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servarin er vardur. Skriva loyniorð -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Fyritøka er vard. Skriva loyniorð # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Listi yvir klientar @@ -1951,19 +1950,9 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Listi yvir klie STR_NETWORK_SPECTATORS :Eygleiðarar -# Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}Goym ikki skrivaða loyniorðið -STR_COMPANY_PASSWORD_OK :{BLACK}Gev fyritøkuni tað nýggja loyniorðið -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Fyritøku loyniorð -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Vanligt fyritøku loyniorð -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Nýt hetta fyritøku loyniorðið sum vanligt fyri nýggjar fyritøkur - # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Tak lut STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Tak lut og spæl sum hendan fyritøkan -STR_COMPANY_VIEW_PASSWORD :{BLACK}Loyniorð -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Verj tína fyritøku við einum loyniorðið so eingin óynsktur tekur lut í henni -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Áset fyritøku loyniorð # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Send diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 1eba753a1b..035615e35f 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -308,7 +308,6 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Kun otat STR_BUTTON_DEFAULT :{BLACK}Oletus STR_BUTTON_CANCEL :{BLACK}Peruuta STR_BUTTON_OK :{BLACK}OK -STR_WARNING_PASSWORD_SECURITY :{YELLOW}Varoitus: Palvelimen ylläpitäjät saattavat nähdä kaiken tähän kirjoittamasi. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :§1234567890+´ qwertyuiopå¨asdfghjklöä' zxcvbnm,.- . @@ -1083,6 +1082,8 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Musiikki STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Valitse käytettävä musiikkipaketti STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Lisätietoja musiikkipaketista +STR_GAME_OPTIONS_ONLINE_CONTENT :Hae sisältöä +STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Tarkista, onko ladattavissa uutta tai päivitettyä sisältöä STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(ei sosiaalisten alustojen integroinnin liitännäisiä asennettuna) @@ -2205,7 +2206,7 @@ STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Avaa pis STR_INTRO_TOOLTIP_HELP :{BLACK}Tutustu dokumentaatioon ja online-resursseihin STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Avaa asetukset STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Avaa NewGRF-asetukset -STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Tarkista uutta ja päivitettyä sisältöä ladattavaksi +STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Tarkista, onko ladattavissa uutta tai päivitettyä sisältöä STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Avaa tekoälyasetukset STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Avaa peliskriptiasetukset STR_INTRO_TOOLTIP_QUIT :{BLACK}Lopeta OpenTTD @@ -2458,7 +2459,6 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Haetaan STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Pura yhteys STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Palvelin on suojattu. Anna salasana -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Yhtiö on suojattu. Anna salasana # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Kytkeytyneet pelaajat @@ -2507,13 +2507,11 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Välitys STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Potki STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Estä STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Poista -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Poista salasanalukitus STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Ylläpitäjän toiminta STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Haluatko varmasti potkia pelaajan ”{STRING}” pelistä? STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Haluatko varmasti estää pelaajan ”{STRING}”? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Haluatko varmasti poistaa yhtiön ”{COMPANY}”? -STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Haluatko varmasti nollata yhtiön ”{COMPANY}” salasanan? STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Käytetäänkö välityspalvelua? STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Yhteyden muodostaminen sinun ja palvelimen ”{STRING}” välille epäonnistui.{}Haluatko, että tämä istunto välitetään välityspalvelimen ”{STRING}” kautta? @@ -2530,19 +2528,9 @@ STR_NETWORK_ASK_SURVEY_YES :Osallistun STR_NETWORK_SPECTATORS :Katsojat -# Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}Älä tallenna syötettyä salasanaa -STR_COMPANY_PASSWORD_OK :{BLACK}Anna yhtiölle uusi salasana -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Yhtiön salasana -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Yhtiön oletussalasana -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Käytä tätä yhtiön salasanaa oletuksena uusissa yhtiöissä - # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Liity STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Liity ja pelaa tässä yhtiössä -STR_COMPANY_VIEW_PASSWORD :{BLACK}Salasana -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Salasanalla voit suojata yhtiösi, jotta kukaan vieras ei pääse liittymään -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Aseta yhtiön salasana # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Lähetä @@ -3435,7 +3423,7 @@ STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Käytä STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Ota käyttöön STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Etsi puuttuvaa sisältöä online-palvelusta -STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP :{BLACK}Tarkista löytyykö puuttuvaa sisältöä online-palvelusta +STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP :{BLACK}Tarkista, löytyykö puuttuvaa sisältöä online-palvelusta STR_NEWGRF_SETTINGS_FILENAME :{BLACK}Tiedostonimi: {SILVER}{STRING} STR_NEWGRF_SETTINGS_GRF_ID :{BLACK}GRF ID: {SILVER}{STRING} diff --git a/src/lang/french.txt b/src/lang/french.txt index bdc1b04622..14d4549f40 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -309,7 +309,6 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}En activ STR_BUTTON_DEFAULT :{BLACK}Défaut STR_BUTTON_CANCEL :{BLACK}Annuler STR_BUTTON_OK :{BLACK}OK -STR_WARNING_PASSWORD_SECURITY :{YELLOW}Attention{NBSP}: Les administrateurs du serveur pourraient lire tout texte entré ici. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :²&é"'(-è_çà)= azertyuiop^$qsdfghjklmù* Date: Tue, 7 May 2024 11:58:03 -0400 Subject: [PATCH 480/695] Doc: Clarify how to update version numbers in release guide (#12634) --- docs/releasing_openttd.md | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/docs/releasing_openttd.md b/docs/releasing_openttd.md index ad16242076..426f183c16 100644 --- a/docs/releasing_openttd.md +++ b/docs/releasing_openttd.md @@ -7,15 +7,17 @@ This guide is for OpenTTD developers/maintainers, to release a new version of Op * If this is a beta version release, skip this step. * If this is an RC1 (first Release Candidate) build, create a new branch `release/nn` where `nn` is the major version number, then apply changes similar to [PR#9573](https://github.com/OpenTTD/OpenTTD/pull/9573). You also need to forwardport the changelog, as in [PR#10113](https://github.com/OpenTTD/OpenTTD/pull/10113). - * Update CMakeLists.txt - * Add a new (empty) AI compatibility script in bin/ai/ - * Add the new version to CheckAPIVersion in src/ai/ai_info.cpp + src/game/game_info.cpp - * Add the new version to src/script/api/ai_changelog.hpp + src/script/api/game_changelog.hpp - * Update the version of regression in bin/ai/regression/regression_info.nut - * Add a note to src/saveload/saveload.h about which savegame version is used in the branch. + * Update the version in `CMakeLists.txt` in the master branch, heading for the next major release, e.g. from 14.0 to 15.0. + * Add a new (empty) AI compatibility script in `bin/ai/` + * Add the new version to CheckAPIVersion in `src/ai/ai_info.cpp` and `src/game/game_info.cpp` + * Add the new version to `src/script/api/ai_changelog.hpp` and `src/script/api/game_changelog.hpp` + * Update the version of regression in `bin/ai/regression/regression_info.nut` + * Add a note to `src/saveload/saveload.h` about which savegame version is used in the branch. * If this is a later RC or release build and the release branch already exists, you'll need to backport fixes and language from master to this branch, which were merged after the branch diverged from master. You can use these two helper scripts: https://github.com/OpenTTD/scripts/tree/main/backport +* If this is a maintenance release, update the version in `CMakeLists.txt` in the release branch, e.g. from 14.0 to 14.1. + ## Step 1: Prepare changelog documentation 1. Update the [changelog](../changelog.txt) with new changes since the last release. @@ -36,9 +38,10 @@ This guide is for OpenTTD developers/maintainers, to release a new version of Op ## Step 3: Make the actual OpenTTD release -1. Go to https://github.com/OpenTTD/OpenTTD/releases/new and create a new tag matching the release number. For the body of the release, copy in the changelog. "Set as a pre-release" for a beta or RC. -2. Wait for the OpenTTD release workflow to be complete. -3. If this is a full release: +1. Confirm that the version in `CMakeLists.txt` matches the intended release version. +2. Go to https://github.com/OpenTTD/OpenTTD/releases/new and create a new tag matching the release number. For the body of the release, copy in the changelog. "Set as a pre-release" for a beta or RC. +3. Wait for the OpenTTD release workflow to be complete. +4. If this is a full release: * for `Steam`: under Steamworks -> SteamPipe -> Builds, set the "testing" branch live on the "default" branch. This will request 2FA validation. * for `GOG`: under Builds, "Publish" the freshly uploaded builds to `Master`, `GOG-use only` and `Testing`. * for `Microsoft Store`: ask orudge to publish the new release. From 8710e9b8c8a276f306caa254b803e864ebca02f4 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 6 May 2024 16:50:49 +0100 Subject: [PATCH 481/695] Fix #12608: SDL keycode to vkey mapping --- src/video/sdl2_v.cpp | 2 +- src/video/sdl_v.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index 93a74a2b13..08723ef3b6 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -246,7 +246,7 @@ struct SDLVkMapping { const bool unprintable; constexpr SDLVkMapping(SDL_Keycode vk_first, SDL_Keycode vk_last, uint8_t map_first, [[maybe_unused]] uint8_t map_last, bool unprintable) - : vk_from(vk_first), vk_count(vk_first - vk_last + 1), map_to(map_first), unprintable(unprintable) + : vk_from(vk_first), vk_count(vk_last - vk_first + 1), map_to(map_first), unprintable(unprintable) { assert((vk_last - vk_first) == (map_last - map_first)); } diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index 2e069271f6..17041ab064 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -378,7 +378,7 @@ struct SDLVkMapping { const uint8_t map_to; constexpr SDLVkMapping(SDLKey vk_first, SDLKey vk_last, uint8_t map_first, [[maybe_unused]] uint8_t map_last) - : vk_from(vk_first), vk_count(vk_first - vk_last + 1), map_to(map_first) + : vk_from(vk_first), vk_count(vk_last - vk_first + 1), map_to(map_first) { assert((vk_last - vk_first) == (map_last - map_first)); } From 9008d793ab6e1175ecec2771bb85043a7573db4f Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 7 May 2024 20:01:28 +0100 Subject: [PATCH 482/695] Change: Use per-company group numbers. (#12297) This is used by the default group name, replacing the use of group index. --- regression/regression/result.txt | 2 +- src/company_base.h | 1 + src/economy.cpp | 6 +++++- src/group.h | 1 + src/group_cmd.cpp | 12 +++++++----- src/group_gui.cpp | 2 +- src/saveload/afterload.cpp | 11 +++++++++++ src/saveload/group_sl.cpp | 1 + src/saveload/saveload.h | 1 + src/strings.cpp | 2 +- 10 files changed, 30 insertions(+), 9 deletions(-) diff --git a/regression/regression/result.txt b/regression/regression/result.txt index 8abbcb7e48..27a81675a9 100644 --- a/regression/regression/result.txt +++ b/regression/regression/result.txt @@ -6093,7 +6093,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetNumEngines(): 1 GetNumEngines(): 1 GetNumEngines(): 0 - GetName(): Group 0 + GetName(): Group 1 GetName(): (null : 0x00000000) AIVehicle.SellVehicle(): true AITile.DemolishTile(): true diff --git a/src/company_base.h b/src/company_base.h index d6ab4a8fd1..814665777b 100644 --- a/src/company_base.h +++ b/src/company_base.h @@ -146,6 +146,7 @@ struct Company : CompanyProperties, CompanyPool::PoolItem<&_company_pool> { CompanyInfrastructure infrastructure; ///< NOSAVE: Counts of company owned infrastructure. FreeUnitIDGenerator freeunits[VEH_COMPANY_END]; + FreeUnitIDGenerator freegroups; Money GetMaxLoan() const; diff --git a/src/economy.cpp b/src/economy.cpp index 868b1acb5a..bdb3cb06e0 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -424,8 +424,12 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) if (new_owner == INVALID_OWNER) { RemoveAllGroupsForCompany(old_owner); } else { + Company *c = Company::Get(old_owner); for (Group *g : Group::Iterate()) { - if (g->owner == old_owner) g->owner = new_owner; + if (g->owner == old_owner) { + g->owner = new_owner; + g->number = c->freegroups.UseID(c->freegroups.NextID()); + } } } diff --git a/src/group.h b/src/group.h index 3886b155c4..39d9033d36 100644 --- a/src/group.h +++ b/src/group.h @@ -81,6 +81,7 @@ struct Group : GroupPool::PoolItem<&_group_pool> { bool folded; ///< NOSAVE: Is this group folded in the group view? GroupID parent; ///< Parent group + uint16_t number; ///< Per-company group number. Group(CompanyID owner = INVALID_COMPANY); }; diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index e7a49dd570..96aa2d1c9f 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -350,8 +350,9 @@ std::tuple CmdCreateGroup(DoCommandFlag flags, VehicleType g->vehicle_type = vt; g->parent = INVALID_GROUP; + Company *c = Company::Get(g->owner); + g->number = c->freegroups.UseID(c->freegroups.NextID()); if (pg == nullptr) { - const Company *c = Company::Get(_current_company); g->livery.colour1 = c->livery[LS_DEFAULT].colour1; g->livery.colour2 = c->livery[LS_DEFAULT].colour2; if (c->settings.renew_keep_length) SetBit(g->flags, GroupFlags::GF_REPLACE_WAGON_REMOVAL); @@ -397,14 +398,15 @@ CommandCost CmdDeleteGroup(DoCommandFlag flags, GroupID group_id) /* Update backupped orders if needed */ OrderBackup::ClearGroup(g->index); - /* If we set an autoreplace for the group we delete, remove it. */ - if (_current_company < MAX_COMPANIES) { - Company *c; + if (g->owner < MAX_COMPANIES) { + Company *c = Company::Get(g->owner); - c = Company::Get(_current_company); + /* If we set an autoreplace for the group we delete, remove it. */ for (EngineRenew *er : EngineRenew::Iterate()) { if (er->group_id == g->index) RemoveEngineReplacementForCompany(c, er->from, g->index, flags); } + + c->freegroups.ReleaseID(g->number); } VehicleType vt = g->vehicle_type; diff --git a/src/group_gui.cpp b/src/group_gui.cpp index b355e9f98f..8f3ff5dfcb 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -180,7 +180,7 @@ void BuildGuiGroupList(GUIGroupList &dst, bool fold, Owner owner, VehicleType ve } int r = StrNaturalCompare(last_group[0].second, last_group[1].second); // Sort by name (natural sorting). - if (r == 0) return a.group->index < b.group->index; + if (r == 0) return a.group->number < b.group->number; return r < 0; }); diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index a1d016a1f1..a62f19c05b 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -3286,6 +3286,17 @@ bool AfterLoadGame() UpdateCompanyLiveries(c); } + /* Update free group numbers data for each company, required regardless of savegame version. */ + for (Group *g : Group::Iterate()) { + Company *c = Company::Get(g->owner); + if (IsSavegameVersionBefore(SLV_GROUP_NUMBERS)) { + /* Use the index as group number when converting old savegames. */ + g->number = c->freegroups.UseID(g->index); + } else { + c->freegroups.UseID(g->number); + } + } + AfterLoadLabelMaps(); AfterLoadCompanyStats(); AfterLoadStoryBook(); diff --git a/src/saveload/group_sl.cpp b/src/saveload/group_sl.cpp index 2baae15416..82ef465e08 100644 --- a/src/saveload/group_sl.cpp +++ b/src/saveload/group_sl.cpp @@ -26,6 +26,7 @@ static const SaveLoad _group_desc[] = { SLE_CONDVAR(Group, livery.colour1, SLE_UINT8, SLV_GROUP_LIVERIES, SL_MAX_VERSION), SLE_CONDVAR(Group, livery.colour2, SLE_UINT8, SLV_GROUP_LIVERIES, SL_MAX_VERSION), SLE_CONDVAR(Group, parent, SLE_UINT16, SLV_189, SL_MAX_VERSION), + SLE_CONDVAR(Group, number, SLE_UINT16, SLV_GROUP_NUMBERS, SL_MAX_VERSION), }; struct GRPSChunkHandler : ChunkHandler { diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 94c1303acc..99f74777bf 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -380,6 +380,7 @@ enum SaveLoadVersion : uint16_t { SLV_VEHICLE_ECONOMY_AGE, ///< 334 PR#12141 v14.0 Add vehicle age in economy year, for profit stats minimum age SLV_COMPANY_ALLOW_LIST, ///< 335 PR#12337 Saving of list of client keys that are allowed to join this company. + SLV_GROUP_NUMBERS, ///< 336 PR#12297 Add per-company group numbers. SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/strings.cpp b/src/strings.cpp index 02c57d362b..8a23b93daa 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1539,7 +1539,7 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara auto tmp_params = MakeParameters(g->name); GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); } else { - auto tmp_params = MakeParameters(g->index); + auto tmp_params = MakeParameters(g->number); GetStringWithArgs(builder, STR_FORMAT_GROUP_NAME, tmp_params); } break; From 731d46beb5dbddf417f371b87518e78faee7f5d6 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 8 May 2024 00:57:52 +0100 Subject: [PATCH 483/695] Change: Don't include midi file processing in dedicated server build. (#12632) --- src/music/CMakeLists.txt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/music/CMakeLists.txt b/src/music/CMakeLists.txt index 54105bd3cb..cf60e78669 100644 --- a/src/music/CMakeLists.txt +++ b/src/music/CMakeLists.txt @@ -36,12 +36,15 @@ if(NOT OPTION_DEDICATED) bemidi.h CONDITION HAIKU ) + + add_files( + midi.h + midifile.cpp + midifile.hpp + ) endif() add_files( - midi.h - midifile.cpp - midifile.hpp music_driver.hpp null_m.cpp null_m.h From b74a7e749ba0efd8333e86dec8c7764bfc211fe7 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 8 May 2024 01:52:30 +0100 Subject: [PATCH 484/695] Fix: Console command scrolling did not take account of padding and cursor width. (#12642) --- src/console_gui.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/console_gui.cpp b/src/console_gui.cpp index 98b483ef97..3fbf93faf5 100644 --- a/src/console_gui.cpp +++ b/src/console_gui.cpp @@ -151,6 +151,7 @@ struct IConsoleWindow : Window static size_t scroll; int line_height; ///< Height of one line of text in the console. int line_offset; + int cursor_width; IConsoleWindow() : Window(&_console_window_desc) { @@ -164,6 +165,7 @@ struct IConsoleWindow : Window { this->line_height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.hsep_normal; this->line_offset = GetStringBoundingBox("] ").width + WidgetDimensions::scaled.frametext.left; + this->cursor_width = GetCharacterWidth(FS_NORMAL, '_'); } void Close([[maybe_unused]] int data = 0) override @@ -204,7 +206,7 @@ struct IConsoleWindow : Window if (ypos < 0) break; } /* If the text is longer than the window, don't show the starting ']' */ - int delta = this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH; + int delta = this->width - WidgetDimensions::scaled.frametext.right - cursor_width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH; if (delta > 0) { DrawString(WidgetDimensions::scaled.frametext.left, right, this->height - this->line_height, "]", (TextColour)CC_COMMAND, SA_LEFT | SA_FORCE); delta = 0; From cb3f99859c2c1646337801264a74e97d3678531a Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 8 May 2024 04:40:34 +0000 Subject: [PATCH 485/695] Update: Translations from eints english (au): 1 change by krysclarke estonian: 25 changes by siimsoni korean: 3 changes by telk5093 russian: 1 change by Ln-Wolf finnish: 1 change by hpiirai catalan: 5 changes by J0anJosep latvian: 30 changes by lexuslatvia lithuanian: 140 changes by khamper portuguese: 1 change by azulcosta portuguese (brazilian): 3 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 5 +- src/lang/catalan.txt | 5 + src/lang/english_AU.txt | 1 + src/lang/estonian.txt | 30 +++- src/lang/finnish.txt | 1 + src/lang/korean.txt | 3 + src/lang/latvian.txt | 44 ++++-- src/lang/lithuanian.txt | 224 +++++++++++++++++++----------- src/lang/portuguese.txt | 1 + src/lang/russian.txt | 1 + 10 files changed, 210 insertions(+), 105 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index f394af90a4..39f0aa5243 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -2485,13 +2485,14 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Editar o STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Seu nome de jogador STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Ações administrativas para aplicar neste cliente STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Ações administrativas para aplicar nesta empresa -STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Juntar-se a esta empresa +STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Participar desta empresa +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Autorizar este cliente a participar da sua empresa STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Enviar uma mensagem a este jogador STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Enviar uma mensagem a todos os jogadores desta empresa STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Enviar uma mensagem a todos os espectadores STR_NETWORK_CLIENT_LIST_SPECTATORS :Espectadores STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nova empresa) -STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Criar uma nova empresa e juntar-se a ela +STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Criar uma nova empresa e participar dela STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Esse é você STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Este é o hospedeiro do jogo STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} cliente{P "" s} - {NUM}/{NUM} empresa{P "" s} diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index a2fe7beae6..ec35fbcf25 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -956,6 +956,7 @@ STR_GAME_OPTIONS_VOLUME :Volum STR_GAME_OPTIONS_SFX_VOLUME :Efectes de so STR_GAME_OPTIONS_MUSIC_VOLUME :Música +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}{NBSP}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Moneda STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selecció de la unitat monetària @@ -1053,6 +1054,7 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marqueu STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Aplica anti-àlies a les fonts STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marqueu aquesta casella per a fer servir tècniques d'anti-àlies a les fonts redimensionables. +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Sondeig automatitzat STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participa al sondeig automatitzat @@ -1081,6 +1083,8 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Conjunt STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selecciona el conjunt de peces de música base a utilitzar STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Informació addicional sobre el conjunt de peces de música base +STR_GAME_OPTIONS_ONLINE_CONTENT :Descarrega contingut +STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Comprova si hi ha continguts nous o actualitzats per a descarregar. STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(no s'han instal·lat complements per a interactuar amb plataformes socials) @@ -2482,6 +2486,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :El vostre nom d STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Accions d'administració que s'han de realitzar per a aquest client. STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Accions d'administració que s'han de realitzar per a aquesta companyia. STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Uniu-vos a aquesta companyia. +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Autoritza al client a unir-se a la vostra companyia. STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Envia un missatge a aquest jugador. STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Envia un missatge a tots els jugadors de la companyia. STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Envieu un missatge a tots els espectadors. diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 2675920e0f..3aed56f22b 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -2485,6 +2485,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Your player nam STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Administrative actions to perform for this client STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Administrative actions to perform for this company STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Join this company +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Authorize this client to join your company STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Send a message to this player STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Send a message to all players of this company STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Send a message to all spectators diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 0ebb28f019..2585cee641 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1012,6 +1012,7 @@ STR_GAME_OPTIONS_VOLUME :Helitase STR_GAME_OPTIONS_SFX_VOLUME :Heliefektid STR_GAME_OPTIONS_MUSIC_VOLUME :Muusika +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valuuta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valuuta valimine @@ -1062,6 +1063,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :India ruupia STR_GAME_OPTIONS_CURRENCY_IDR :Indoneesia ruupia STR_GAME_OPTIONS_CURRENCY_MYR :Malaisia ringit STR_GAME_OPTIONS_CURRENCY_LVL :Läti Latt +STR_GAME_OPTIONS_CURRENCY_PTE :Portugali eskuudo STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Salvestusvälp STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Vali salvestamise välp @@ -1104,10 +1106,11 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Skaleeri STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Skaleeri kaldeid liidese suuruse järgi STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Kasuta traditsioonilist märgipõhist fonti -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Märgi, kui eelistad traditsioonilist kindla suurusega märgipõhist fonti. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Märgi, kui eelistad traditsioonilist kindla suurusega märgipõhist fonti STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias fondid -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Kasti märkimisel tehakse muudetava suurusega fontidele anti-alias. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Kasti märkimisel tehakse muudetava suurusega fontidele anti-alias +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Automaatne uuring STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Osale automaatses uuringus @@ -1868,7 +1871,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Kui palju vahem STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Hooldusvälp protsentides: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Kui on aktiveeritud, püüavad sõidukid käia hoolduses, kui nende vastupidavus langeb määratud protsendini suurimast vastupidavusest.{}{}Näiteks, kui sõiduki suurim vastupidavus on 90% ja hooldusvälp on 20%, püüab sõiduk käia hoolduses 72% vastupidavuse juures. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Kui on aktiveeritud, püüavad sõidukid käia hoolduses, kui nende vastupidavus langeb määratud protsendini suurimast vastupidavusest.{}{}Näiteks, kui sõiduki suurim vastupidavus on 90% ja hooldusvälp on 20%, püüab sõiduk käia hoolduses 72% vastupidavuse juures STR_CONFIG_SETTING_SERVINT_TRAINS :Rongide esialgne hooldusvälp: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Määrab uute rööbassõidukite hooldusvälba, kui sõidukile eraldi hooldusvälpa ei määrata @@ -1879,6 +1882,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Määrab uute STR_CONFIG_SETTING_SERVINT_SHIPS :Laevade hooldusvälba vaikeväärtus: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Määrab uute laevade hooldusvälba, kui sõidukile eraldi hooldusvälpa ei määrata ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}Päev{P 0 "" a} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}Minut{P 0 "" it} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Väljas @@ -2535,6 +2541,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Sinu mängija n STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Haldustegevused, mida teha selle ettevõtte peal STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Haldustegevused, mida teha selle ettevõtte peal STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Liitu selle ettevõttega +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Luba sellel kliendil oma ettevõttega liituda STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Saada sellele mängijale sõnum STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Saada sõnum igale selle ettevõtte mängijale STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Saada sõnum igale vaatlejale @@ -2609,6 +2616,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Sinu mä STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Sinu serverile ei ole nime antud. Nime saab määrata mitmikmägu akna ülaosas STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Kliendi osa ei vasta serveri osaga STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Vale salasõna +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Sa ei ole lubatud klientide nimekirjas STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Server on täis STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Sinu sisenemine siia serverisse on keelatud STR_NETWORK_ERROR_KICKED :{WHITE}Sind visati mängust välja @@ -2636,6 +2644,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :saadud pakett o STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :vale osa STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :nimi on juba kasutusel STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :vale salasõna +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :pole lubatute nimekirjas STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :vale ettevõtte id DoCommand-is STR_NETWORK_ERROR_CLIENT_KICKED :server viskas välja STR_NETWORK_ERROR_CLIENT_CHEATER :üritas pettust kasutada @@ -3103,7 +3112,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Vali tö # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Maa-ala andmed -STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Keskenda vaade ruudu asukohale. Ctrl+klõps avab asukohas uue vaate +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Keskenda põhivaade ruudu asukohale. Ctrl+klõps, et avada ruudu kohal uus vaade STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Tühjendamise kulu: {LTBLUE}N/A STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Tühjendamise kulu: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Tühjendamise tulu: {LTBLUE}{CURRENCY_LONG} @@ -3114,7 +3123,9 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Trammite STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Raudtee omanik: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Kohalik omavalitsus: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :puudub -STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Ehitatud: {LTBLUE}{DATE_LONG} +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinaadid: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Ruudu järjekorranumber: {LTBLUE}{NUM} ({HEX}) +STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Ehitatud/renoveeritud: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Jaama järk: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Jaama liik: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Lennuvälja järk: {LTBLUE}{STRING} @@ -3424,8 +3435,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Kas sa STR_GENERATION_PROGRESS :{WHITE}{NUM}% valmis STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Maailma tekitamine +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Maastiku tekitamine STR_GENERATION_RIVER_GENERATION :{BLACK}Jõgede tekitamine STR_GENERATION_CLEARING_TILES :{BLACK}Mägise ja kivise maa-ala tekitamine +STR_GENERATION_TOWN_GENERATION :{BLACK}Asulate tekitamine +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Tööstuse tekitamine STR_GENERATION_OBJECT_GENERATION :{BLACK}Objekti tekitamine STR_GENERATION_TREE_GENERATION :{BLACK}Puude tekitamine STR_GENERATION_SETTINGUP_GAME :{BLACK}Mängu seadistamine @@ -4930,7 +4944,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Eeldatav STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ikka salvestamisel,{}palun oota salvestuse lõpuni! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Välpsalvestus ebaõnnestus STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Ei suuda kettalt lugeda +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Mängu salvestamine nurjus... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Faili ei saa kustutada +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Mängu laadimine nurjus... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Süsteemi viga: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Katkine salvestus - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Salvestus on tehtud uuemas osas @@ -5312,6 +5328,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Muuda Ne STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Sõidukeid ei ole veel saadaval STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Alusta mängu pärast {DATE_SHORT} või kasuta NewGRF-i, milles on varasemaid sõidukeid +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Linnas ehitatavaid maanteeliike pole saadaval +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Muuda oma NewGRF-i seadistust +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Linnas ehitatavaid maanteeliike pole veel saadaval +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Alusta uus mäng pärast {DATE_SHORT} või kasuta NewGRF-i, milles on varajasi linnas ehitatavaid maanteeliike # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Rongi ei saa ohu korral sundida signaale eirama... diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 035615e35f..e05a9874bb 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -2485,6 +2485,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Pelaajanimesi STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Tähän asiakkaaseen kohdistettavat ylläpitotoiminnot STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Tähän yhtiöön kohdistettavat ylläpitotoiminnot STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Liity tähän yhtiöön +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Salli tämän asiakkaan liittyä yhtiöösi STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Lähetä tälle pelaajalle viesti STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Lähetä viesti kaikille tämän yhtiön pelaajille STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Lähetä viesti kaikille katsojille diff --git a/src/lang/korean.txt b/src/lang/korean.txt index a56637dda9..d6b985f960 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1083,6 +1083,8 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}기본 STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}게임에 사용할 기본 배경 음악 세트를 선택하세요 STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}기본 배경 음악 세트에 대한 추가 정보를 봅니다. +STR_GAME_OPTIONS_ONLINE_CONTENT :콘텐츠 다운로드 +STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :다운로드할 신규 & 업데이트된 콘텐츠를 확인합니다 STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(소셜 플랫폼과 연계할 수 있는 플러그인이 없음) @@ -2484,6 +2486,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :접속자 이 STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}관리자가 이 접속자에게 할 수 있는 기능입니다 STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}관리자가 이 접속자에게 할 수 있는 기능입니다 STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}여기에 참여합니다 +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}이 접속자가 내 회사에 참여하는 것을 허용 STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}이 플레이어에게 메시지를 보냅니다 STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}이 회사에 참여 중인 모든 플레이어에게 메시지를 보냅니다 STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}모든 관전자에게 메시지를 보냅니다 diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index f2ee1ed13b..a3e90c764f 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -957,6 +957,7 @@ STR_GAME_OPTIONS_VOLUME :Skaļums STR_GAME_OPTIONS_SFX_VOLUME :Skaņas efekti STR_GAME_OPTIONS_MUSIC_VOLUME :Mūzika +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Naudas vienības STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Naudas vienību izvēle @@ -1054,6 +1055,7 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Atzīmē STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias fonti STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Atzīmējiet šo izvēli, ja vēlaties mainīt fontus ar anti-alias izmēru. +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Automatizēta aptauja STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Piedalieties automatizētā aptaujā @@ -1082,6 +1084,8 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Pamata m STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Atlasīt lietošanai pamata mūzikas kopu STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Papildinformācija par pamata mūzikas kopu +STR_GAME_OPTIONS_ONLINE_CONTENT :Iegūt saturu +STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Pārbaudīt, jauna satura lejupielādi, vai atjauninājumu STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(nav instalētu spraudņu, ko integrēt ar sociālajām platformām) @@ -1553,7 +1557,7 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industriju blī STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Iestatiet, cik industrijas jāģenerē un kāds līmenis jāuztur spēles laikā STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Naftas industriju maksimālais attālums no kartes malas: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limits, cik tālu no kartes malām drīkst taisīt naftas pārstrādes rūpnīcas un un naftas ieguves platformas. Uz salu kartēm tas nodrošina, ka šīs konstrukcijas tiek būvētas piekrastēs. Uz kartēm, kas ir lielākas par 256 lauciņiem šī vērtība tiek palielināta. +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limits, cik tālu no kartes malām drīkst taisīt naftas pārstrādes rūpnīcas un un naftas ieguves platformas. Uz salu kartēm tas nodrošina, ka šīs konstrukcijas tiek būvētas piekrastēs. Uz kartēm, kas ir lielākas par 256 lauciņiem šī vērtība tiek palielināta STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sniega līnijas augstums: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Izvēlieties, kādā augstumā sākas sniegs subarktiskajā ainavā. Sniegs ietekmē arī nozares ražošanas un pilsētu izaugsmi. Var mainīt tikai, izmantojot scenāriju redaktoru, vai citādi aprēķināt, izmantojot "sniega segumu" @@ -1567,7 +1571,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Izvēlieties ap STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Apvidus nelīdzenums: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Izvēlieties pauguru formu un skaitu. Gludās ainavās ir mazāk, bet platāku pauguru, savukārt nelīdzenās ainavās ir vairāk, mazāku kalnu. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Izvēlieties pauguru formu un skaitu. Gludās ainavās ir mazāk, bet platāku pauguru, savukārt nelīdzenās ainavās ir vairāk, mazāku kalnu ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Ļoti gluda STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Gluda @@ -1575,7 +1579,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Nelīdzena STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Ļoti nelīdzena STR_CONFIG_SETTING_VARIETY :Dažādības sadalījums: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :Izvēlieties, vai kartē ir gan kalni, gan līdzenas vietas. Jo augstāka atšķirība, jo lielākas atšķirības kalnu un līdzenu apgabalu augstumā. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Izvēlieties, vai kartē ir gan kalni, gan līdzenas vietas. Jo augstāka atšķirība, jo lielākas atšķirības kalnu un līdzenu apgabalu augstumā STR_CONFIG_SETTING_RIVER_AMOUNT :Upju daudzums: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Izvēlieties, cik daudz upju ģenerēt @@ -1814,7 +1818,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Cik daudz atmi STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Apkopju starplaiki procentos: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Ja tas ir ieslēgts, transportlīdzekļi mēģina veikt apkopi, kad to uzticamība samazinās par noteiktu procentuālo daļu no maksimālās uzticamības.{}{}Piemēram, ja transportlīdzekļa maksimālā uzticamība ir 90% un apkopes intervāls ir 20%, transportlīdzeklis mēģinās veikt apkopi, kad tas sasniedz 72% ticamību. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Ja tas ir ieslēgts, transportlīdzekļi mēģina veikt apkopi, kad to uzticamība samazinās par noteiktu procentuālo daļu no maksimālās uzticamības.{}{}Piemēram, ja transportlīdzekļa maksimālā uzticamība ir 90% un apkopes intervāls ir 20%, transportlīdzeklis mēģinās veikt apkopi, kad tas sasniedz 72% uzticamību STR_CONFIG_SETTING_SERVINT_TRAINS :Vilcienu apkopju noklusējuma starplaiks: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Izvēlēties jaunajiem sliežu transportlīdzekļiem apkopju noklusējuma starplaiku, ja tiem tas nav noteikts @@ -1825,6 +1829,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Izvēlēties ja STR_CONFIG_SETTING_SERVINT_SHIPS :Kuģu apkopju noklusējuma starplaiks: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Izvēlēties jauniem kuģiem apkopju noklusējuma starplaiku, ja transportlīdzeklim tas nav noteikts ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}Dien{P 0 a as nu} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}Minūt{P 0 e es es} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :izslēgts @@ -1833,7 +1840,7 @@ STR_CONFIG_SETTING_NOSERVICE :Aizliegt apkopi STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Ja ieslēgts, transportlīdzekļiem netiek veikta apkope. Jo tie nebojājas STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Iekraušanas ātruma sods vilcieniem, kas ir garāki par staciju: {STRING} -STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Ja aktīs, vilcieni, kas ir pārāk gari stacijai, iekraujas lēnāk nekā vilcieni, kas atbilst stacijai. Šis iestatījums neietekmē ceļa meklēšanu. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Ja aktīvs, vilcieni, kas ir pārāk gari stacijai, iekraujas lēnāk nekā vilcieni, kas atbilst stacijas izmēram. Šis iestatījums neietekmē ceļa meklēšanu. STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ieslēgt vagonu ātruma ierobežojumus: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Ja ieslēgts, var izmantot vagonu ātruma ierobežojumus, lai lemtu par vilcienu maksimālo ātrumu @@ -1898,7 +1905,7 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Gads kad sāk d STR_CONFIG_SETTING_STARTING_YEAR :Sākuma gads: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Vērtēšanas beigu gads: {STRING} -STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Spēles beigas gads (tiek izmantots rezultāta noteikšanai). Šī gada beigās uzņēmuma rezultāti tiek ierakstīti un uz ekrāna tiek parādīti labākie rezultāti, bet spēlētāji var turpināt spēlēt arī pēc šī datuma.{}Ja tas ir norādīts pirms spēles sākuma datuma, labākie rezultāti nekad netiek parādīti. +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Spēles beigas gads (tiek izmantots rezultāta noteikšanai). Šī gada beigās uzņēmuma rezultāti tiek ierakstīti un uz ekrāna tiek parādīti labākie rezultāti, bet spēlētāji var turpināt spēlēt arī pēc šī datuma.{}Ja tas ir norādīts pirms spēles sākuma datuma, labākie rezultāti nekad netiek parādīti STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nekad @@ -1959,7 +1966,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :atļauta STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :atļauta, ar brīvi izvēlētu izkārtojumu STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Pilsētas kravu radīšana: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Cik daudz kravas rada pilsētu mājas, attiecībā pret kopējo pilsētas iedzīvotāju skaitu.{}Kvadrātisks pieaugums: divas reizes lielāka pilsēta rada četras reizes vairāk pasažieru.{}Lineārs pieaugums: divas reizes lielāka pilsēta rada divas reizes vairāk pasažieru. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Cik daudz kravas rada pilsētu mājas, attiecībā pret kopējo pilsētas iedzīvotāju skaitu.{}Kvadrātisks pieaugums: divas reizes lielāka pilsēta rada četras reizes vairāk pasažieru.{}Lineārs pieaugums: divas reizes lielāka pilsēta rada divas reizes vairāk pasažieru ###length 2 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kvadrātisks (sākotnējais) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineārs @@ -2000,7 +2007,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Izmantojamie augstākās izšķirtspējas spriti: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Ierobežojiet sprites maksimālo izšķirtspēju. Ierobežojot sprite izšķirtspēju, netiks izmantota augstas izšķirtspējas grafika, pat ja tā ir pieejama. Tas var palīdzēt saglabāt spēles vienotu izskatu, izmantojot GRF failu kombināciju ar augstas izšķirtspējas grafiku un bez tās. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Ierobežojiet sprites maksimālo izšķirtspēju. Ierobežojot sprite izšķirtspēju, netiks izmantota augstas izšķirtspējas grafika, pat ja tā ir pieejama. Tas var palīdzēt saglabāt spēles vienotu izskatu, izmantojot GRF failu kombināciju ar augstas izšķirtspējas grafiku un bez tās ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2482,6 +2489,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Jūsu spēlēt STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK} Administratīvās darbības, kas jāveic šim klientam STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Administratīvās darbības, kuras jāveic šai kompānijai STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Pievienoties šai kompānijai +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Ļaut šim spēlētājam pievienoties jūsu uzņēmumam STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Sūtīt ziņu šim spēlētājam STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Sūtīt ziņu visiem šīs kompānijas spēlētājiem STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Sūtīt ziņu visiem skatītājiem @@ -2584,6 +2592,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :saņemta neder STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :nepareiza versija STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :šo vārdu jau lieto STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :nepareiza parole +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :nav atļauto sarakstā STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :VeiktKomandā nepareizs uzņēmums STR_NETWORK_ERROR_CLIENT_KICKED :serveris jūs izmeta STR_NETWORK_ERROR_CLIENT_CHEATER :mēģināja blēdīties @@ -2962,7 +2971,7 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Novietoj STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Nejauši koki STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Stādīt nejaušus kokus visā ainavā STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normāls -STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Stādiet atsevišķus kokus, velkot pāri ainavai. +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Stādiet atsevišķus kokus, velkot pāri ainavai STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Birze STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Stādiet nelielus mežus, velkot pāri ainavai. STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Mežs @@ -3182,7 +3191,7 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Kadru nomaiņas ātrums STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulācijas ātrums: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Spēles tikšķu skaits, ko simulēt vienā sekundē. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Spēles tikšķu skaits, ko simulēt vienā sekundē STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafikas kadru ātrums: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Sekundē renderēto video kadru skaits. STR_FRAMERATE_SPEED_FACTOR :{BLACK}Pašreizējās spēles ātruma pakāpe: {DECIMAL}× @@ -3375,8 +3384,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Vai jū STR_GENERATION_PROGRESS :{WHITE}{NUM}% pabeigti STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Pasaules radīšana +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Ainavu veidošana STR_GENERATION_RIVER_GENERATION :{BLACK}Upes radīšana STR_GENERATION_CLEARING_TILES :{BLACK}Nelīdzena un akmeņaina apvidus radīšana +STR_GENERATION_TOWN_GENERATION :{BLACK}Pilsētas veidošana +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Nozares veidošana STR_GENERATION_OBJECT_GENERATION :{BLACK}Objekta radīšana STR_GENERATION_TREE_GENERATION :{BLACK}Koka radīšana STR_GENERATION_SETTINGUP_GAME :{BLACK}Iestatīt spēli @@ -3723,7 +3735,7 @@ STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Globāl STR_STORY_BOOK_SPECTATOR :Globālā stāstu grāmata STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :{NUM} lapa -STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Pārlēkt uz specifisku lapu spiežot to zemāk esošajā sarakstā. +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Pārlēkt uz konkrētu lapu spiežot to zemāk esošajā sarakstā STR_STORY_BOOK_PREV_PAGE :{BLACK}Iepriekšējā STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Doties uz iepriekšējo lapu STR_STORY_BOOK_NEXT_PAGE :{BLACK}Nākamā @@ -4019,12 +4031,12 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Negrupēti lida STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupas - klikšķināt uz grupas, lai iegūtu tās transportlīdzekļu sarakstu +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupas — klikšināt uz grupas, lai rādītu visus šīs grupas transportlīdzekļus. Vilkt un palaist grupas, lai sakārtotu hierarhiju STR_GROUP_CREATE_TOOLTIP :{BLACK}Klikšķināt, lai izveidotu grupu STR_GROUP_DELETE_TOOLTIP :{BLACK}Dzēst izvēlēto grupu STR_GROUP_RENAME_TOOLTIP :{BLACK}Pārdēvēt izvēlēto grupu STR_GROUP_LIVERY_TOOLTIP :{BLACK}Mainīt izvēlētās grupas krāsu -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK} Noklikšķiniet, lai aizsargātu šo grupu no globālās automātiskās aizstāšanas. Ctrl+Noklikšķiniet, lai aizsargātu arī apakšgrupas. +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK} Klikšiniet, lai aizsargātu šo grupu no globālās automātiskās aizstāšanas. Ctrl+klikšķis, lai aizsargātu arī apakšgrupas STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Grupas dzēšana STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Vai tiešām vēlaties dzēst šo grupu un tās atvases (ja ir)? @@ -4986,7 +4998,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Nevar no STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Nevar uzbūvēt uzņēmuma biroju... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Nevar būvēt pilsētas +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Nevar būvēt pilsētas... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Nevar pārdēvēt pilsētu... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Šeit nevar būvēt jaunu pilsētu... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Nevar paplašināt pilsētu... @@ -5274,6 +5286,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Mainiet STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Transportlīdzekļi vēl nav pieejami STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Sākt jaunu spēli pēc {DATE_SHORT} vai izmantot NewGRF, kas nodrošina agrīnus transporta līdzekļus +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Pilsētā būvējami ceļu veidi nav pieejami +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Mainiet savu NewGRF konfigurāciju +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Pagaidām nav pieejami pilsētā būvējamie ceļu veidi +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Sāciet jaunu spēli pēc {DATE_SHORT} vai izmantojiet NewGRF, kas nodrošina agrīnus pilsētu būvējamus ceļu veidus # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Vilciens nevar šķērsot signālu briesmās... diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index d8d19c40be..49adbb4037 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -387,6 +387,7 @@ STR_COLOUR_RANDOM :Atsitiktinė ###length 17 STR_COLOUR_SECONDARY_DARK_BLUE :Tamsiai mėlynas/-a STR_COLOUR_SECONDARY_PALE_GREEN :Pilkšvai žalias/-a +STR_COLOUR_SECONDARY_SECONDARY_PINK :Rausvas/-a STR_COLOUR_SECONDARY_YELLOW :Geltonas/-a STR_COLOUR_SECONDARY_RED :Raudonas/-a STR_COLOUR_SECONDARY_LIGHT_BLUE :Šviesiai mėlynas/-a @@ -414,12 +415,15 @@ STR_UNITS_POWER_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_POWER_METRIC :{DECIMAL}{NBSP}AG STR_UNITS_POWER_SI :{DECIMAL}{NBSP}kW +STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}ag/t STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}ag/t STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}ag/t STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}ag/t STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}ag/Mg +STR_UNITS_POWER_SI_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}kW/t STR_UNITS_POWER_SI_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}kW/t +STR_UNITS_POWER_SI_TO_WEIGHT_SI :{DECIMAL}{NBSP}W/kg STR_UNITS_WEIGHT_SHORT_IMPERIAL :{DECIMAL}{NBSP}t STR_UNITS_WEIGHT_SHORT_METRIC :{DECIMAL}{NBSP}t @@ -451,8 +455,8 @@ STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP} # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtras: -STR_LIST_FILTER_OSKTITLE :{BLACK}Įveskite filtro raktažodį -STR_LIST_FILTER_TOOLTIP :{BLACK}Įveskite raktažodį sąrašui filtruoti +STR_LIST_FILTER_OSKTITLE :{BLACK}Įveskite vieną ar daugiau raktažodžių sąrašui filtruoti +STR_LIST_FILTER_TOOLTIP :{BLACK}Įveskite vieną ar daugiau raktažodžių sąrašui filtruoti STR_TOOLTIP_GROUP_ORDER :{BLACK}Pasirinkti grupavimo tvarką STR_TOOLTIP_SORT_ORDER :{BLACK}Rikiavimo tvarka (didėjančiai/mažėjančiai) @@ -472,7 +476,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Tempkite STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Pakeisti lango matmenis STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Stačioji slankjuostė — paslenka sąrašą aukštyn ar žemyn STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Gulščioji slakjuostė — paslenka sąrašą kairėn ar dešinėn -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Nugriauti pastatus, bėgius ar kitus objektus pasirinktame žemės plote. Velkant laikant nuspaudus Ctrl klavišą, plotas bus žymimas įstrižai. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Nugriauti pastatus, bėgius ar kitus objektus pasirinktame žemės plote. Velkant laikant nuspaudus Ctrl klavišą, plotas bus žymimas įstrižai. Taip pat spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos tik numatomos išlaidos # Show engines button ###length VEHICLE_TYPES @@ -556,6 +560,7 @@ STR_GROUP_BY_NONE :(tuščia) STR_GROUP_BY_SHARED_ORDERS :Bendrinamas užduotis # Order button in shared orders vehicle list +STR_GOTO_ORDER_VIEW :{BLACK}Užduotys STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Atidarykite užsakymo rodinį # Tooltips for the main toolbar @@ -567,7 +572,7 @@ STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Išsaugo STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Rodyti žemėlapį, papildomą peržiūros langą arba ženklų sąrašą STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Rodyti miestų sąrašą STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Rodyti subsidijų sąrašą -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Rodyti stotelių sąrašą +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Atidaryti kompanijos stotelių sąrašą STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Atidaryti kompanijos finansinę informaciją STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Atidaryti bendrąją kompanijos informaciją STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Rodyti scenarijų knygą @@ -575,12 +580,12 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Atidaryt STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Atidaryti kompanijos diagramas ir krovinio apmokėjimo įkainius STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Atidaryti kompanijų įvertinimus STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Rodyti pramonės įmonių sąrašą, gamybos grandines arba įsteigti naują pramonės įmonę -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Rodyti kompanijos traukinių, suskirstytų grupėmis, sąrašą. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus atvertas langas su paprastu sąrašu -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Rodyti kompanijos automobilių, suskirstytų grupėmis, sąrašą. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus atvertas langas su paprastu sąrašu -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Rodyti kompanijos laivų, suskirstytų grupėmis, sąrašą. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus atvertas langas su paprastu sąrašu -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Rodyti kompanijos lėktuvų, suskirstytų grupėmis, sąrašą. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus atvertas langas su paprastu sąrašu -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Priartinti vaizdą -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Nutolinti vaizdą +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Atidaryti kompanijos traukinių, suskirstytų grupėmis, sąrašą. Spragtelėjus laikant nuspaustą Ctrl klavišą, galėsite rodyti arba paslėpti transporto priemonių grupes, priešingai pasirinktai nuostatai +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Atidaryti kompanijos automobilių, suskirstytų grupėmis, sąrašą. Spragtelėjus laikant nuspaustą Ctrl klavišą, galėsite rodyti arba paslėpti transporto priemonių grupes, priešingai pasirinktai nuostatai +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Atidaryti kompanijos laivų, suskirstytų grupėmis, sąrašą. Spragtelėjus laikant nuspaustą Ctrl klavišą, galėsite rodyti arba paslėpti transporto priemonių grupes, priešingai pasirinktai nuostatai +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Atidaryti kompanijos lėktuvų, suskirstytų grupėmis, sąrašą. Spragtelėjus laikant nuspaustą Ctrl klavišą, galėsite rodyti arba paslėpti transporto priemonių grupes, priešingai pasirinktai nuostatai +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Priartinti +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Nutolinti STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Tiesti geležinkelių infrastruktūrą STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Tiesti kelių infrastruktūrą STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Tiesti tramvajaus infrastruktūrą @@ -714,6 +719,7 @@ STR_ABOUT_MENU_ABOUT_OPENTTD :Apie „OpenTTD STR_ABOUT_MENU_SPRITE_ALIGNER :Spruklių lygiuoklė STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Rodyti/slėpti apvadus STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Perjungti paveiktų blokų spalvinimą +STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Perjungti valdiklių kontūrus ###length 31 STR_DAY_NUMBER_1ST :1 @@ -1103,6 +1109,7 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Subsidijų pasiūlymas baigėsi:{}{}{STRING.ko} pervežimas iš {STRING.ko} į {STRING.ka} daugiau nebesubsidijuojamas. STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidijų laikas baigėsi:{}{}{STRING.ko} transportavimas iš {STRING} į {STRING} daugiau nebesubsidijuojamas. +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subsidijų pasiūlymas:{}{}Pirmasis pervežęs {STRING.ka} iš {STRING} į {STRING} gaus {UNITS_YEARS_OR_MINUTES} vietinės valdžios subsidiją! ###length 4 STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subsidijos suteiktos {STRING}!{}{}{STRING} pervėžimas is {STRING} į {STRING} bus apmokamas 50% ateinantiems {UNITS_YEARS_OR_MINUTES}! STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subsidijos suteiktos {STRING}!{}{}{STRING} pervėžimas is {STRING} į {STRING} bus apmokamas dvigubai ateinantiems {UNITS_YEARS_OR_MINUTES}! @@ -1131,7 +1138,10 @@ STR_GAME_OPTIONS_TAB_SOCIAL :Socialumas STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}Pasirinkti socialumo integracijos nustatymus STR_GAME_OPTIONS_VOLUME :Tūris +STR_GAME_OPTIONS_SFX_VOLUME :Garso efektai +STR_GAME_OPTIONS_MUSIC_VOLUME :Muzika +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valiuta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valiutos pasirinkimas @@ -1214,21 +1224,29 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Kad pake STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}Vertikalioji sinchronizacija (VSync) STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Pažymėkite šį langelį, norėdami v-sync ekraną. Pakeistas nustatymas bus pritaikytas tik paleidus žaidimą iš naujo. Veikia tik įjungus aparatūros pagreitį -STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Dabartinis vairuotojas: {STRING} +STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Dabartinė tvarkyklė: {STRING} +STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Sąsajos dydis STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Automatinis dydžio nustatymas STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Pažymėkite šį langelį, kad automatiškai aptiktumėte sąsajos dydį STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Skalės nuožulniai STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Pažymėkite šį langelį, jei norite keisti kampus pagal sąsajos dydį +STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Naudoti tradicišką spruklių šriftą +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Pažymėkite šį langelį, jeigu teikiate pirmenybę tradiciškui fiksuoto dydžio spruklio raštui +STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Išlyginti šriftus +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Pasirinkite šį langelį, kad išlyginti šriftus +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Automatinė apklausa STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Dalyvauti automatinėje apklausoje +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Kai įjungta, OpenTTD išeinant iš žaidimo išsiųs apklausą STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}Apie apklausą ir privatumą STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Atidaryti naršyklę su daugiau informacijos apie automatizuotą apklausą STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Peržiūrėti apklausos rezultatus +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Rodyti dabartinio žaidimo apklausos rezultatą STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafika @@ -1242,7 +1260,7 @@ STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Pasirink STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Papildoma informacija apie bazinės grafikos rinkinį STR_GAME_OPTIONS_BASE_SFX :{BLACK}Bazinis garsų rinkinys -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Pasirinkite, kurį bazinių garsų rinkinį naudoti +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Pasirinkite, kurį bazinių garsų rinkinį naudoti (negali būti pakeista žaidime, tik pagrindiniame ekrane) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Papildoma informacija apie bazinių garsų rinkinį STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Bazinis muzikos rinkinys @@ -1254,6 +1272,7 @@ STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Tikrinti, ar n STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(plėtinių socialinių platformų integravimui nėra įdiegta) +STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{BLACK}{STRING} ({STRING}) STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :{BLACK}Platforma: STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Papildinio būsena: @@ -1261,6 +1280,7 @@ STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_RUNNING :{GREEN}Veikia STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_FAILED :{RED}Nepavyko inicijuoti STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_PLATFORM_NOT_RUNNING :{ORANGE}{STRING} neveikia STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :{RED}Dubliuotas papildinys +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNSUPPORTED_API :{RED}Nepalaikoma versija STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Netinkamas parašas @@ -1277,9 +1297,9 @@ STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Nustatyt STR_CURRENCY_PREFIX :{LTBLUE}Priešdėlis: {ORANGE}{STRING} -STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Nustatyti prefiksą valiutai +STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Nustatyti priešdėlį valiutai STR_CURRENCY_SUFFIX :{LTBLUE}Pavadinimas: {ORANGE}{STRING} -STR_CURRENCY_SET_CUSTOM_CURRENCY_SUFFIX_TOOLTIP :{BLACK}Nustatyti suffix'a valiutai +STR_CURRENCY_SET_CUSTOM_CURRENCY_SUFFIX_TOOLTIP :{BLACK}Nustatyti priesagą valiutai STR_CURRENCY_SWITCH_TO_EURO :{LTBLUE}Pereiti prie Euro: {ORANGE}{NUM} STR_CURRENCY_SWITCH_TO_EURO_NEVER :{LTBLUE}Pereiti prie Euro: {ORANGE}niekada @@ -1468,7 +1488,7 @@ STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Įgalinus šią STR_CONFIG_SETTING_DISASTERS :Katastrofos: {STRING} STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Įgalinti atsitiktines katastrofas, kurių metų gali būti apgadintos ar sunaikintos transporto priemonės bei infrastruktūra -STR_CONFIG_SETTING_CITY_APPROVAL :Miestų gyventojų požiūris į triukšmą ir aplinkos darkymą: {STRING} +STR_CONFIG_SETTING_CITY_APPROVAL :Vietinės institucijos požiūris: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Nustatyti miestų požiūrį į statybas, triukšmą ir kraštovaizdžio keitimą. Nuo to priklauso kompanijos reitingas bei leidimasstatyti įvairius objektus STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Didžiausias žemėlapio aukštis: {STRING} @@ -1485,7 +1505,7 @@ STR_CONFIG_SETTING_CATCHMENT :Aptarnaujamos t STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Skirtingų tipų (traukinių, automobilių, laivų bei lėktuvų) stotelės aptarnauja skirtingo dydžio teritorijas. Paprastai automobilių stotelė aprėpia mažiausią plotą, o oro uostas — didžiausią STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Leisti kompanijos stotims aptarnauti pramonės įmones su nuosavomis neutraliomis stotimis: {STRING} -STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Įgalinus šią nuostatą, pramonės įmonės su nuosavomis stotimis (pvz, naftos platformos) taip pat galės būti aptarnautos žaidėjų stočių, įrengtų netoliese. Išjungus šią nuostatą, minėtos pramonės įmonės galės būti aptarnautos tik iš nuosavų stočių. Tokiu atveju žaidėjų įrengtos stotys įmonės aptarnauti negalės, o įmonės stotis aptarnaus tik pačią įmonę. +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Įgalinus šią nuostatą, pramonės įmonės su nuosavomis stotimis (pvz, naftos platformos) taip pat galės būti aptarnautos žaidėjų stočių, įrengtų netoliese. Išjungus šią nuostatą, minėtos pramonės įmonės galės būti aptarnautos tik iš nuosavų stočių. Tokiu atveju žaidėjų įrengtos stotys įmonės aptarnauti negalės, o įmonės stotis aptarnaus tik pačią įmonę STR_CONFIG_SETTING_EXTRADYNAMITE :Leisti griauti miestams priklausančius tiltus, kelius ir kt.: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Palengvinti miestams priklausančios infrastruktūros (kelių, tiltų, namų ir kitų objektų) pašalinimą @@ -1677,7 +1697,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Grafikų linij STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Grafikų linijų storis. Plonesnė linija yra tikslesnė, tačiau storesnę lengviau pastebėti bei atskirti jos spalvą STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Rodyti plėtinio pavadinimą perkant naują trasnporto priemonę: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Perkant naują transporto priemonę, lange atsiras papildoma eilutė, nurodanti, kuriam plėtiniui priklauso pažymėta transporto priemonė. +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Perkant naują transporto priemonę, lange atsiras papildoma eilutė, nurodanti, kuriam plėtiniui priklauso pažymėta transporto priemonė STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Jei įjungta, transporto priemonės gabenamas krovinys bus rodomas virš jo transporto priemonių sąrašuose STR_CONFIG_SETTING_LANDSCAPE :Kraštovaizdis: {STRING} @@ -1880,10 +1900,10 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Palikti statymo STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Laikyti statybų įrankius tiltams, tuneliams ir pnš. atidarytus po panaudojimo STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatiškai išmontuoti semaforus, tiesiant naujus bėgius: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Semaforai bus automatiškai išmontuoti, jei trukdys tiesti naujus bėgius. Atkreipkite dėmesį, tokia veiksena gali lemti traukinių susidūrimą. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Semaforai bus automatiškai išmontuoti, jei trukdys tiesti naujus bėgius. Atkreipkite dėmesį, tokia veiksena gali lemti traukinių susidūrimą STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Pagreitinto žaidimo spartos riba: {STRING} -STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Didžiausias galimas žaidimo modeliavimo greitis, įgalinus pagreitinto žaidimo veikseną. Parinkus 0, riba taikoma nebus, tad modeliavimo greitis priklausys tik nuo jūsų kompiuterio spartos. Vertės, mažesnės už 100, žaidimą sulėtins. Reali pasiekiama modeliavimo sparta priklauso nuo jūsų kompiuterio spartos bei nuo pačio žaidimo sudėtingumo. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Didžiausias galimas žaidimo modeliavimo greitis, įgalinus pagreitinto žaidimo veikseną. Parinkus 0, riba taikoma nebus, tad modeliavimo greitis priklausys tik nuo jūsų kompiuterio spartos. Vertės, mažesnės už 100, žaidimą sulėtins. Reali pasiekiama modeliavimo sparta priklauso nuo jūsų kompiuterio spartos bei nuo pačio žaidimo sudėtingumo STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}%, lyginant su normalia sparta ###setting-zero-is-special STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Netaikyti (kiek tik leis kompiuteris) @@ -1942,10 +1962,10 @@ STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Įjungus šį n STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Leisti DI Interneto režime: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Leisti DI kompiuterio žaidėjus dalyvauti Interneto režime -STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opkodai prieš skriptus yra nevykdomi: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opkodai prieš scenarijus yra nevykdomi: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Didžiausias skaičius skaičiavimų žingsnių, kuriuos scenarijus vykdo viename ėjime -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Didžiausias skriptui leistinas atminties suvartojimas: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Jei skriptas sunaudos nurodytą kiekį operatyviosios atminties, jis bus priverstinai išjungtas. Didesniuose žemėlapiuose skriptams reikia daugiau atminties +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Didžiausias scenarijui leistinas atminties suvartojimas: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Jei scenarijus sunaudos nurodytą kiekį operatyviosios atminties, jis bus priverstinai išjungtas. Didesniuose žemėlapiuose scenarijams gali reikėti daugiau atminties STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Techninės apžiūros intervalas procentais: {STRING} @@ -2037,7 +2057,7 @@ STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Niekada STR_CONFIG_SETTING_ECONOMY_TYPE :Ekonomika: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Tolygioje ekonomikoje gamyklų produkcija keičiasi mažesniais ir dažnesniais žingsniais. Fiksuotoje ekonomikoje jokie pokyčiai nevyksta. Nuostata gali neveikti pramonės įmonėms, įdiegtoms per plėtinius. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Tolygioje ekonomikoje gamyklų produkcija keičiasi mažesniais ir dažnesniais žingsniais. Fiksuotoje ekonomikoje jokie pokyčiai nevyksta. Nuostata gali neveikti pramonės įmonėms, įdiegtoms per plėtinius ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Originali STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Tolygi @@ -2133,7 +2153,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4 kartai STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8 kartai STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Didžiausia leistina spruklio raiška: {STRING} -STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Spruklio raiška nebus didesnė, nei ši nustatyta riba, net jeigu aukštesnės raiškos grafiniai objektai ir bus pasiekiami. Šis būdas leidžia šiek tiek suvienodinti grafinį atvaizdavimą, kai viename žadime yra ir aukštos, ir žemos raiškos grafikos rinkinių. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Spruklio raiška nebus didesnė, nei ši nustatyta riba, net jeigu aukštesnės raiškos grafiniai objektai ir bus pasiekiami. Šis būdas leidžia šiek tiek suvienodinti grafinį atvaizdavimą, kai viename žadime yra ir aukštos, ir žemos raiškos grafikos rinkinių ###length 3 STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x @@ -2159,13 +2179,13 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Vidutinis miest STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Atnaujinti pasiskirstymo diagramą kas {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX :Keleivių paskirstymas: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :„Simetriškas“ reiškia, jog iš stoties A į stotį B keliaus apytiksliai toks pat keleivių srautas, kaip ir iš B į A. „Asimetriško“ režimo atveju, srautai pirmyn ir atgal gali skirtis. „Originalus“ reiškia, kad srautai nebus reguliuojami ir veiks kaip ir originaliame TTD žaidime. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :„Simetriškas“ reiškia, jog iš stoties A į stotį B keliaus apytiksliai toks pat keleivių srautas, kaip ir iš B į A. „Asimetriško“ režimo atveju, srautai pirmyn ir atgal gali skirtis. „Originalus“ reiškia, kad srautai nebus reguliuojami ir veiks kaip ir originaliame TTD žaidime STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Pasiskirstymo režimas paštui: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :„Simetriškas“ reiškia, jog iš stoties A į stotį B bus išsiųsta apytiksliai tiek pat pašto maišų, kaip ir iš B į A. „Asimetriško“ režimo atveju, pašto srautai pirmyn ir atgal gali skirtis. „Originalus“ reiškia, kad pašto srautai nebus reguliuojami ir veiks kaip ir originaliame TTD žaidime. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :„Simetriškas“ reiškia, jog iš stoties A į stotį B bus išsiųsta apytiksliai tiek pat pašto maišų, kaip ir iš B į A. „Asimetriško“ režimo atveju, pašto srautai pirmyn ir atgal gali skirtis. „Originalus“ reiškia, kad pašto srautai nebus reguliuojami ir veiks kaip ir originaliame TTD žaidime STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Pasiskirstymo režimas „šarvuotoms“ krovinių rūšims: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :„Šarvuotų“ krovinių rūšiai priskiriamos brangenybės (vidutinio klimato juostoje), deimantai (subtropinio klimato juostoje) ir auksas (subarktinio klimato juostoje), bet tai dar gali priklausyti ir nuo aktyvių plėtinių. „Simetriškas“ reiškia, jog iš stoties A į stotį B bus vežamas apytiksliai toks pat krovinių srautas, kaip ir iš B į A. „Asimetriško“ režimo atveju, srautai pirmyn ir atgal gali skirtis. „Originalus“ reiškia, kad srautai nebus reguliuojami ir veiks kaip ir originaliame TTD žaidime. Žaidžiant subarktinio klimato juostoje, rekomenduojama pasirinkti asimetrišką krovinių paskirstymo algoritmą, nes bankai, priėmę auksą, atgal nieko nesiųs. Kitose klimato juostose galima pasirinkti ir asimetrišką algoritmą, nes kroviniai gali keliauti į abi maršruto puses. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Pasiskirstymo režimas kitoms krovinių rūšims: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :„Simetriškas“ reiškia, jog iš stoties A į stotį B bus vežamas apytiksliai toks pat krovinių srautas, kaip ir iš B į A. „Asimetriško“ režimo atveju, srautai pirmyn ir atgal gali skirtis. „Originalus“ reiškia, kad srautai nebus reguliuojami ir veiks kaip ir originaliame TTD žaidime. Rekomenduojama pasirinkti arba asimetrinį, arba originalų algoritmą. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :„Simetriškas“ reiškia, jog iš stoties A į stotį B bus vežamas apytiksliai toks pat krovinių srautas, kaip ir iš B į A. „Asimetriško“ režimo atveju, srautai pirmyn ir atgal gali skirtis. „Originalus“ reiškia, kad srautai nebus reguliuojami ir veiks kaip ir originaliame TTD žaidime. Rekomenduojama pasirinkti arba asimetrinį, arba originalų algoritmą ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :originalus STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimetriškas @@ -2186,15 +2206,15 @@ STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC.kur :simetriškame STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC.kreip :simetriškas STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Pasiskirstymo tikslumas: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Kuo didesnė ši vertė, tuo tiksliau bus apskaičiuojamas krovinių pasiskirstymo grafas, tačiau žaidimas gali sulėtėti. Pasirinktus didesnę reikšmę, grafas bus netikslus ir kroviniai gali būti paskirstomi neoptimaliai. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Kuo didesnė ši vertė, tuo tiksliau bus apskaičiuojamas krovinių pasiskirstymo grafas, tačiau žaidimas gali sulėtėti. Pasirinktus didesnę reikšmę, grafas bus netikslus ir kroviniai gali būti paskirstomi neoptimaliai STR_CONFIG_SETTING_DEMAND_DISTANCE :Įtakos nuo atstumo tarp stotelių daugiklis: {STRING} -STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Šį daugiklį prilyginus nuliui, „Cargodist“ posistemė nekreips dėmesio, kaip toli nuo pradinės stotelės A yra krovinio paskirties stotelė B. Kuo daugiklis bus didesnis, tuo labiau „Cargodist“ pirmenybę teiks artimesnėms stotelėms. +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Šį daugiklį prilyginus nuliui, „Cargodist“ posistemė nekreips dėmesio, kaip toli nuo pradinės stotelės A yra krovinio paskirties stotelė B. Kuo daugiklis bus didesnis, tuo labiau „Cargodist“ pirmenybę teiks artimesnėms stotelėms STR_CONFIG_SETTING_DEMAND_SIZE :Grįžtančių krovinių daugiklis simetriškam režimui: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Nustačius šį parametrą žemiau nei 100%, simetrinis pasiskirstymas panašėja į asimetrinį pasiskirstymą. Jei krovinio į stotį bus atvežama mažiau, nei tam tikra nustatyta riba, jis bus priverstinai išsiųstas atgal. Jei bus nustatyta 0% riba, simetrinis pasiskirstymas taps asimetriniu. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Nustačius šį parametrą žemiau nei 100%, simetrinis pasiskirstymas panašėja į asimetrinį pasiskirstymą. Jei krovinio į stotį bus atvežama mažiau, nei tam tikra nustatyta riba, jis bus priverstinai išsiųstas atgal. Jei bus nustatyta 0% riba, simetrinis pasiskirstymas taps asimetriniu STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Tolimesni maršrutai nebus planuojami kol trumpesniųjų apkrova nepasieks bent: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Dažnai tarp dviejų stotelių yra ne vienas galimas maršrutas. „Cargodist“ posistemė pirmiausia stengsis krovinius nukreipti trumpiausiu įmanomu maršrutu, o kai šis bus pilnai apkrautas, imtis tolimesniųjų. Maršruto apkrova yra apytiksliai įvertinama atsižvelgiant į maršruto pajėgumus ir planuojamus krovinių srautus. Kai tik „Cargodist“ posistemė pilnai apkraus visus galimus maršrutus, ji vėl ims didinti apkrovas visiems maršrutams, pradėdama nuo pačių talpiausiųjų, taip faktiškai juos perkraudama. Tačiau, vėlgi, „Cargodist“ algoritmas yra apytikslis, todėl įmanoma, kad trumpesni maršrutai jau bus perkrauti dar pilnai neišnaudojus tolimesniųjų. Šia nuostata nustatomas slenkstis, ties kuriuo trumpesnis maršrutas jau laikomas optimaliai apkrautu ir kroviniai pradedami skirstyti tolimesniais maršrutais. Rekomenduojama nustatyti mažiau, nei 100%, kad būtų išvengta perkrovų dėl netikslaus „Cargodist“ veikimo. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Dažnai tarp dviejų stotelių yra ne vienas galimas maršrutas. „Cargodist“ posistemė pirmiausia stengsis krovinius nukreipti trumpiausiu įmanomu maršrutu, o kai šis bus pilnai apkrautas, imtis tolimesniųjų. Maršruto apkrova yra apytiksliai įvertinama atsižvelgiant į maršruto pajėgumus ir planuojamus krovinių srautus. Kai tik „Cargodist“ posistemė pilnai apkraus visus galimus maršrutus, ji vėl ims didinti apkrovas visiems maršrutams, pradėdama nuo pačių talpiausiųjų, taip faktiškai juos perkraudama. Tačiau, vėlgi, „Cargodist“ algoritmas yra apytikslis, todėl įmanoma, kad trumpesni maršrutai jau bus perkrauti dar pilnai neišnaudojus tolimesniųjų. Šia nuostata nustatomas slenkstis, ties kuriuo trumpesnis maršrutas jau laikomas optimaliai apkrautu ir kroviniai pradedami skirstyti tolimesniais maršrutais. Rekomenduojama nustatyti mažiau, nei 100%, kad būtų išvengta perkrovų dėl netikslaus „Cargodist“ veikimo STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Greičio vienetai: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Vienetai, kuriais matuojamas greitis @@ -2305,6 +2325,7 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Nepavyko # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Vaizdo nuostatų klaida... STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... nepavyko rasti tinkamos vaizdo plokštės. Aparatinis spartinimas buvo išjungtas +STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}...Vaizdo plokštės tvarkyklė sulaužė žaidimą. Aparatinis spartinimas išjungtas # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -2386,6 +2407,7 @@ STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Keisti d STR_CHEAT_CHANGE_DATE :{LTBLUE}Pakeisti datą: {ORANGE} {DATE_SHORT} STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Pakeisti dabartinius metus STR_CHEAT_SETUP_PROD :{LTBLUE}Leisti keisti produkcijos vertes: {ORANGE}{STRING} +STR_CHEAT_STATION_RATING :{LTBLUE}Užstatyti stočių įvertinimus į 100%: {ORANGE}{STRING} # Livery window STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Kompanijos spalvos @@ -2397,11 +2419,13 @@ STR_LIVERY_SHIP_TOOLTIP :{BLACK}Rodyti l STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Rodyti lėktuvų spalvas STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Rodyti traukinių grupių spalvas STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Rodyti laivų grupių spalvas +STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Rodyti lėktuvų grupių spalvas STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Pasirinkite pirminę spalvą pasirinktai schemai. Spustelėjus laikant nuspaustą Ctrl klavišą, pasirinkta spava bus nustatyta visoms schemoms. -STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Pasirinkite antrinę spalvą pasirinktai schemai. Spustelėjus laikant nuspaustą Ctrl klavišą, pasirinkta spava bus nustatyta visoms schemoms. +STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Pasirinkite antrinę spalvą pasirinktai schemai. Spustelėjus laikant nuspaustą Ctrl klavišą, pasirinkta spava bus nustatyta visoms schemoms STR_LIVERY_PANEL_TOOLTIP :{BLACK}Pasirinkite objektą, kurio spalvas norite pakeisti. Spragsint laikant nuspaustą Ctrl klavišą, galėsite pasirinkti iškart kelis objektus. STR_LIVERY_TRAIN_GROUP_EMPTY :Nėra nustatytų traukinių grupių STR_LIVERY_SHIP_GROUP_EMPTY :Nėra nustatytų laivų grupių +STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Lėktuvų grupės nesudarytos ###length 23 STR_LIVERY_DEFAULT :Numatytosios spalvos @@ -2522,6 +2546,7 @@ STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}Gamtos STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}Žemėlapio dydis: {WHITE}{COMMA}x{COMMA} STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Serverio versija: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Serverio adresas: {WHITE}{STRING} +STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Pakvietimo kodas: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Žaidimo pradžia: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Dabartinė data: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Žaidimo laikas: {WHITE}{NUM}val. {NUM}min. @@ -2543,7 +2568,7 @@ STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Ieškoti STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Ieškoti vietiniame tinkle STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Ieškoti serverių vietiniame tinkle STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Pridėti serverį -STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Prideda serverį į sąrašą, kuris tikrinamas ieškant žaidimų +STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Prideda serverį į sąrašą. Tai gali būti arba serverio adresas arba pakvietimo kodas STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Sukurti serverį STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Sukurti savo serverį @@ -2591,7 +2616,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Atsijung STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serveris apsaugotas. Įvesk slaptažodį # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Žaidėjų sąrašas +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Internetiniai žaidėjai STR_NETWORK_COMPANY_LIST_SPECTATE :Žiūrėti # Network client list @@ -2602,7 +2627,9 @@ STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP :{BLACK}Serverio STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Pakeisti savo serverio pavadinimą STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Serverio pavadinimas STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Matomumas +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Pakvietimo kodas STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Kvietimo kodas, kurį kiti žaidėjai gali naudoti norėdami prisijungti prie šio serverio +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}Ryšio tipas STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Ar ir kaip jūsų serverį gali pasiekti kiti STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Žaidėjas STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Vardas @@ -2610,9 +2637,11 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Jūsų STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Įveskite žaidėjo pavadinimą STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Jūsų žaidėjo vardas STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Šiam klientui atliktini administraciniai veiksmai +STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Prisijungti prie šios kompanijos STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Siųsti žinutę šiam žaidėjui STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Siųsti žinutę visiems žaidėjams šioje kompanijoje STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Siųsti žinutę visiems žiūrovams +STR_NETWORK_CLIENT_LIST_SPECTATORS :Stebėtojai STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nauja kompanija) STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Sukurti naują įmonę ir prie jos prisijungti STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Tai esi tu @@ -2620,6 +2649,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Tai yra # Matches ConnectionType ###length 5 +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Vietinis STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Nuotoliniai žaidėjai negali prisijungti STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Viešas STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Už NAT @@ -2641,6 +2671,7 @@ STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Taip, be STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Taip, ir prašau nebeklausti STR_NETWORK_ASK_SURVEY_CAPTION :Dalyvauti automatinėje apklausoje? +STR_NETWORK_ASK_SURVEY_TEXT :Ar norėtumėte dalyvauti automatizuotoje apklausoje?{}OpenTTD išsiųs apklausą išeinant iš žaidimo.{}Jūs visada galėsite pakeisti savo pasirinkimą po "Pagrindinės nuostatos". STR_NETWORK_ASK_SURVEY_PREVIEW :Peržiūrėti apklausos rezultatus STR_NETWORK_ASK_SURVEY_LINK :Apie apklausą ir privatumą STR_NETWORK_ASK_SURVEY_NO :Ne @@ -2663,6 +2694,7 @@ STR_NETWORK_CHAT_TO_COMPANY :[Komandai] {STR STR_NETWORK_CHAT_CLIENT :[Privačiai] {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_TO_CLIENT :[Privačiai] {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_ALL :[Visiems] {STRING}: {WHITE}{STRING} +STR_NETWORK_CHAT_EXTERNAL :[{3:STRING}] {0:STRING}: {WHITE}{1:STRING} STR_NETWORK_CHAT_OSKTITLE :{BLACK}Įveskite tekstą internetiniam pokalbiui # Network messages @@ -2678,6 +2710,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE} Įveski STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Jūsų serverio pavadinimas nenustatytas. Pavadinimą galima nustatyti kelių žaidėjų lango viršuje STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Žaidimo versija neatitinka serverio žaidimo versijos STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Blogas slaptažodis +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Jūs nesate leistinų žaidėjų sąraše STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Serveris pilnas STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Tau uždrausta prisijungti prie šio serverio (BAN) STR_NETWORK_ERROR_KICKED :{WHITE}Tu išmestas iš žaidimo (KICK) @@ -2688,6 +2721,7 @@ STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Jūs per STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Jūsų kompiuteris užtruko per ilgai prisijungiant STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Per ilgai užtrukote parsisiųsdami žemėlapį STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Per ilgai užtrukote jungdamiesi prie serverio +STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Jūsų žaidėjo vardas netinkamas STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Galimas ryšio praradimas STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Paskutines {NUM} sekund{P ė ės žių} jokių duomenų iš serverio @@ -2704,6 +2738,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :gautas neteisin STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :bloga versija STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :toks vardas jau naudojamas STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :blogas žaidimo slaptažodis +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :nėra leidžiamųjų sąraše STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :neteisinga kompanija DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :išmestas serverio STR_NETWORK_ERROR_CLIENT_CHEATER :bandė sukčiauti @@ -2728,7 +2763,7 @@ STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Žaidimas palei STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :žaidėjų skaičius STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :jungiasi žaidėjai STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :rankinis -STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :žaidimo skriptas +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :žaidimo scenarijus STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :laukiama, kol atsinaujins saitai STR_NETWORK_MESSAGE_CLIENT_LEAVING :išeinama @@ -2801,7 +2836,7 @@ STR_CONTENT_TYPE_SCENARIO :Scenarijus STR_CONTENT_TYPE_HEIGHTMAP :Teminis žemėlapis STR_CONTENT_TYPE_BASE_SOUNDS :Baziniai garsai STR_CONTENT_TYPE_BASE_MUSIC :Bazinė muzika -STR_CONTENT_TYPE_GAME_SCRIPT :Žaidimo skriptas +STR_CONTENT_TYPE_GAME_SCRIPT :Žaidimo scenarijus STR_CONTENT_TYPE_GS_LIBRARY :GS biblioteka # Content downloading progress window @@ -2918,8 +2953,9 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Statyti STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Pasirinkti stoties klasę rodymui STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Pasirinkti stoties statymo tipą -STR_STATION_CLASS_DFLT :Numatytoji stotelė +STR_STATION_CLASS_DFLT :Numatytoji STR_STATION_CLASS_DFLT_STATION :Numatytoji stotelė +STR_STATION_CLASS_DFLT_ROADSTOP :Numatytoji kelio stotelė STR_STATION_CLASS_WAYP :Keliarodžiai # Signal window @@ -2963,20 +2999,20 @@ STR_BRIDGE_TUBULAR_SILICON :Vamzdinis silic # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Kelių tiesimas STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Tramvajaus linijų tiesimas -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Tiesti vienos krypties kelią. Ctrl klavišas suaktyvina laikiną kelio šalinimo veikseną. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Tiesti vienos krypties kelią. Ctrl klavišas suaktyvina laikiną kelio šalinimo veikseną. Taip pat spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos tik numatomos išlaidos STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Tiesti tramvajaus bėgius. Ctrl klavišas suaktyvina laikiną bėgių šalinimo veikseną. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Tiesti kelią visomis kryptimis. Ctrl klavišas suaktyvina laikiną kelio šalinimo veikseną. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Tiesti tramvajaus bėgius visomis kryptimis. Ctrl klavišas įjungia laikiną bėgių šalinimo veikseną. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Statyti garažą automobilių pirkimui ir aptarnavimui. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Statyti garažą automobilių pirkimui ir aptarnavimui. Spragtelėjus laikant nuspaustą Shift klavišą, bus tik parodytos numatomos išlaidos STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Statyti depą tramvajų pirkimui ir aptarnavimui. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Statyti autobusų stotelę. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus galima naująją stotelę sujungti su jau egzistuojančia. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Statyti keleivinio tramvajaus stotelę. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus galima naująją stotelę sujungti su jau egzistuojančia. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Statyti sunkvežimių krovos stotelę. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus galima naująją stotelę sujungti su jau egzistuojančia. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Statyti krovininio tramvajaus stotelę. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus galima naująją stotelę sujungti su jau egzistuojančia. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Aktyvinti vienos krypties kelių tiesimo veikseną -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Statyti automobilių tiltą. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Statyti automobilių tiltą. Taip pat spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos tik numatomos išlaidos STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Statyti tramvajaus tiltą. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Statyti automobilių tunelį. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Statyti automobilių tunelį. Taip pat spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Statyti tramvajaus tunelį. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Aktyvinti automobilių kelių ir stotelių šalinimo veikseną STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Aktyvinti tramvajaus bėgių ir stotelių šalinimo veikseną @@ -3011,8 +3047,8 @@ STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Statyti STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Statyti laivų prieplauką. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus galima naująją prieplauką sujungti su jau egzistuojančia stotele. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Statyti plūdurą, kuris gali būti naudojamas kaip tarpinė stotelė. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Statyti akveduką. Taip pat galite nuspausti Shift klavišą, kad būtų parodytos numatomos išlaidos -STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Kasti kanalus{}Jūros lygyje spragtelėjus laikant nuspaustą Ctrl klavišą, aplinka bus užlieta -STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Kasti upes +STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Kasti kanalus. Jūros lygyje spragtelėjus laikant nuspaustą Ctrl klavišą, aplinka bus užlieta +STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Kasti upes. Velkant laikant nuspaustą Ctrl klavišą, plotas bus žymimas įstrižai # Ship depot construction window STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Pasirinkite doko kryptį @@ -3023,7 +3059,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Prieplau # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Oro uostų statyba -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Statyti oro uostą. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus galima naująjį oro uostą sujungti su jau egzistuojančia stotele. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Statyti oro uostą. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus galima naująjį oro uostą sujungti su jau egzistuojančia stotele. Taip pat spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Pasirinkite oro uosto parametrus @@ -3096,7 +3132,7 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Ar tikra # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Miesto įkūrimas STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Naujas miestas -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Įkurti naują miestą. Shift+Click tik parodys kainą +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Įkurti naują miestą. Taip pat nuspaudus Shift klavišą bus parodyta tik numatoma kaina STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Atsitiktinis miestas STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Pastatyti miestą atsitiktinėje vietoje STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Daug atsitiktinių miestų @@ -3128,7 +3164,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}3x3 tink STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Atsitiktinai # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Pramonės įmonių steigimas +STR_FUND_INDUSTRY_CAPTION :{WHITE}Pramonės apmokėjimas STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Pasirinkite norimą įmonę iš sąrašo STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Įsteigti daug atsitiktinių įmonių STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Įsteigia pramonės įmones atsitiktinėse žemėlapio vietose @@ -3324,7 +3360,7 @@ STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Perži STR_FRAMERATE_VIDEO :{BLACK}Vaizdo išvestis STR_FRAMERATE_SOUND :{BLACK}Garsų maišymas: STR_FRAMERATE_ALLSCRIPTS :{BLACK} Iš viso GS/DI: -STR_FRAMERATE_GAMESCRIPT :{BLACK} Žaidimo skriptas: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Žaidimo scenarijus: STR_FRAMERATE_AI :{BLACK} DI {NUM} {STRING} ###length 15 @@ -3340,8 +3376,8 @@ STR_FRAMETIME_CAPTION_DRAWING :Grafinis vaizda STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Peržiūros langai STR_FRAMETIME_CAPTION_VIDEO :Vaizdo išvestis STR_FRAMETIME_CAPTION_SOUND :Garsų maišymas -STR_FRAMETIME_CAPTION_ALLSCRIPTS :GS/DI skriptai iš viso: -STR_FRAMETIME_CAPTION_GAMESCRIPT :Žaidimo skriptas +STR_FRAMETIME_CAPTION_ALLSCRIPTS :GS/DI scenarijai iš viso: +STR_FRAMETIME_CAPTION_GAMESCRIPT :Žaidimo scenarijus STR_FRAMETIME_CAPTION_AI :DI {NUM} {STRING} @@ -3385,6 +3421,7 @@ STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Pasirink STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Miestų pavadinimai: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Pasirink miestų pavadinimų tipą STR_MAPGEN_DATE :{BLACK}Pradžios data: +STR_MAPGEN_DATE_TOOLTIP :{BLACK}Pasirinkite pradžios datą STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Pramonės įmonių kiekis: STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Pasirinkti pramonės tankumą, arba pasirinktinę reikšmę STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Didžiausias aukštis @@ -3405,12 +3442,13 @@ STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Upių ki STR_MAPGEN_SMOOTHNESS :{BLACK}Jautrumas: STR_MAPGEN_VARIETY :{BLACK}Įvairovės paskirstymas: STR_MAPGEN_GENERATE :{WHITE}Sukurti +STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Sukurti pasaulį ir žaisti OpenTTD! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF Nustatymai STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Atidaryti NewGRF nustatymus STR_MAPGEN_AI_SETTINGS :{BLACK}DI nustatymai STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Rodyti DI nustatymus STR_MAPGEN_GS_SETTINGS :{BLACK}Žaidimo scenarijaus nustatymai -STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Rodyti žaidimo scenarijaus nustatymus +STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Atidaryti žaidimo scenarijaus nustatymus ###length 21 STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Anglų (Oginalus) @@ -3485,7 +3523,7 @@ STR_GENERATION_OBJECT_GENERATION :{BLACK}Nejudina STR_GENERATION_TREE_GENERATION :{BLACK}Medžių generacija STR_GENERATION_SETTINGUP_GAME :{BLACK}Sukurti zaidima STR_GENERATION_PREPARING_TILELOOP :{BLACK}Paleidžiamas tile-loop -STR_GENERATION_PREPARING_SCRIPT :{BLACK}Skriptas veikia +STR_GENERATION_PREPARING_SCRIPT :{BLACK}Veikiantis scenarijus STR_GENERATION_PREPARING_GAME :{BLACK}Ruošiamas žaidimas # NewGRF settings @@ -3574,6 +3612,7 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Kelio tipas STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Plėtinio kintamojo 60+x parametras (šešioliktainėje sistemoje) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Lygiuojamas spruklis: ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Tolesnis spruklys STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Įkelti tolesnį spruklį STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Nurodyti spruklį @@ -3608,14 +3647,14 @@ STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Naujasis STR_NEWGRF_ERROR_POPUP :{WHITE}Naujasis plėtinys "{STRING}" grąžino klaidą:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} neveiks su TTDPatch versija nurodyta pagal OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} skirtas {2:STRING} TTD versijai. -STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} yra pritaikytas naudojimui su {STRING} -STR_NEWGRF_ERROR_INVALID_PARAMETER :Neteisingas parametras {1:STRING}: parametras {STRING} ({NUM}) -STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} turi būti įkeltas prieš {STRING} -STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} turi būti įkeltas po {STRING} -STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} reikalauja OpenTTD versijos {STRING} arba naujesnės +STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} yra pritaikytas naudojimui su {2:STRING} +STR_NEWGRF_ERROR_INVALID_PARAMETER :Neteisingas parametras {1:STRING}: parametras {2:STRING} ({3:NUM}) +STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} turi būti įkeltas prieš {2:STRING} +STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} turi būti įkeltas po {2:STRING} +STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} reikalauja OpenTTD versijos {2:STRING} arba naujesnės STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF failas, kurį turėjo išversti STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Įkelta per daug plėtinių -STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Plėtinio {1:STRING} įkėlimas su {STRING} gali išderinti žaidimą +STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Plėtinio {1:STRING} įkėlimas su {2:STRING} gali išderinti žaidimą STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Netikėtas spruklys ({3:NUM}) STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Nežinoma veiksmo 0 savybė {4:HEX} (spruklys {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Bandymas panaudoti neteisingą ID (spruklys {3:NUM}) @@ -3684,7 +3723,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Įjungti # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Redaguoti ženklo tekstą -STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Centruoti ženklą pagrindiniame lange. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus atidarytas naujas peržiūros langas su vaizdu į šį ženklą. +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Centruoti ženklą pagrindiniame lange. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus atidarytas naujas peržiūros langas su vaizdu į šį ženklą STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Eiti prie kito ženklo STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Eiti prie ankstesnio ženklo @@ -3766,7 +3805,7 @@ STR_GOALS_TEXT :{ORANGE}{STRING STR_GOALS_NONE :{ORANGE}- Nieko - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Centruoti tikslo objektą pagrindiniame lange. Spragtelėjus laikant nuspaustą „Ctrl“ klavišą, bus atidarytas papildomas peržiūros langas su vaizdu į tą objektą +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Centruoti tikslo objektą pagrindiniame lange. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus atidarytas papildomas peržiūros langas su vaizdu į tą objektą # Goal question window STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Klausimas @@ -3908,8 +3947,11 @@ STR_EDIT_WAYPOINT_NAME :{WHITE}Redaguot # Finances window STR_FINANCES_CAPTION :{WHITE}{COMPANY} Finansai {BLACK}{COMPANY_NUM} STR_FINANCES_YEAR :{WHITE}{NUM} +STR_FINANCES_YEAR_CAPTION :{WHITE}Metai +STR_FINANCES_PERIOD_CAPTION :{WHITE}Periodas ###length 3 +STR_FINANCES_REVENUE_TITLE :{WHITE}Pajamos STR_FINANCES_OPERATING_EXPENSES_TITLE :{WHITE}Veikimo sąnaudos STR_FINANCES_CAPITAL_EXPENSES_TITLE :{WHITE}Kapitalinės išlaidos @@ -3921,6 +3963,7 @@ STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Traukinia STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Kelio transporto priemonės STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Lėktuvai STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Laivai +STR_FINANCES_SECTION_INFRASTRUCTURE :{GOLD}Infrastruktūra STR_FINANCES_SECTION_TRAIN_REVENUE :{GOLD}Traukiniai STR_FINANCES_SECTION_ROAD_VEHICLE_REVENUE :{GOLD}Transporto priemonės STR_FINANCES_SECTION_AIRCRAFT_REVENUE :{GOLD}Lėktuvas @@ -3928,6 +3971,7 @@ STR_FINANCES_SECTION_SHIP_REVENUE :{GOLD}Laivai STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Paskolos palūkanos STR_FINANCES_SECTION_OTHER :{GOLD}Kita +STR_FINANCES_TOTAL_CAPTION :{WHITE}Iš viso STR_FINANCES_NEGATIVE_INCOME :-{CURRENCY_LONG} STR_FINANCES_ZERO_INCOME :{CURRENCY_LONG} STR_FINANCES_POSITIVE_INCOME :+{CURRENCY_LONG} @@ -3976,6 +4020,8 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Išsamia STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Peržiūrėti detalesnę infrastruktūros informaciją STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Pervesti pinigų STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Pervesti šiai kompanijai pinigų +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Priešiškas perėmimas +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Priešiškai perimti šią kompaniją STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Veidas STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Keičia direktoriaus veidą @@ -4015,7 +4061,7 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} ir {NUM} daugiau... -STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Pramonės pavadinimai - spragtelėjus ant pavadinimo, pramonė rodoma ekrano centre. Ctrl+Paspaudimas atidaro nauja langą su pramonės vaizdu +STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Pramonės pavadinimai - spragtelėjus ant pavadinimo, pramonė rodoma ekrano centre. Spragtelėjus laikant nuspaustą Ctrl klavišą atidarysite naują langą su pramonės vaizdu STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Priimami kroviniai: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Tiekiami kroviniai: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Visi krovinių tipai @@ -4191,7 +4237,7 @@ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkti p STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkti pažymėtą lėktuvą. Taip pat nuspaudus Shift klavišą bus parodyta tik numatoma kaina ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Pirkti pažymėtą lokomotyvą ir/ar vagonus. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodyta pirkinio kaina nieko realiai nenuperkant +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Pirkti pažymėtą lokomotyvą ir/ar vagonus. Taip pat nuspaudus Shift klavišą bus parodyta tik numatoma kaina STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Pirkti ir pertvarkyti pažymėtą automobilį. Taip pat nuspaudus Shift klavišą bus parodyta tik numatoma kaina STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Pirkti ir pertvarkyti pažymėtą laivą. Taip pat nuspaudus Shift klavišą bus parodyta tik numatoma kaina STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Pirkti ir pertvarkyti pažymėtą lėktuvą. Taip pat nuspaudus Shift klavišą bus parodyta tik numatoma kaina @@ -4286,15 +4332,15 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Kopijuot STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Kopijuoti lėktuvą ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Nupirkti traukinio kopiją įskaitant visus vagonus. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus bendrinamos kopijos ir originalo užduotys. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Nupirkti automobilio kopiją. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus bendrinamos kopijos ir originalo užduotys. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Nupirkti laivo kopiją. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus bendrinamos kopijos ir originalo užduotys. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Nupirkti lėktuvo kopiją. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus bendrinamos kopijos ir originalo užduotys. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Nupirkti traukinio kopiją įskaitant visus vagonus. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus bendrinamos kopijos ir originalo užduotys. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos tik numatomos išlaidos +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Nupirkti automobilio kopiją. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus bendrinamos kopijos ir originalo užduotys. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos tik numatomos išlaidos +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Nupirkti laivo kopiją. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus bendrinamos kopijos ir originalo užduotys. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos tik numatomos išlaidos +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Nupirkti lėktuvo kopiją. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus bendrinamos kopijos ir originalo užduotys. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos tik numatomos išlaidos ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centruoti traukinių depą pagrindiniame lange. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus atidarytas naujas peržiūros langas su vaizdu į šį depą -STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centruoti automobilių garažą pagrindiniame lange. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus atidarytas naujas peržiūros langas su vaizdu į šį garažą -STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centruoti laivų doką pagrindiniame lange. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus atidarytas naujas peržiūros langas su vaizdu į šį doką +STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centruoti traukinių depą pagrindiniame lange. Spragtelėkite laikant nuspaustą Ctrl klavišą, kad atidaryti naują peržiūros langą su vaizdu į šį depą +STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centruoti automobilių garažą pagrindiniame lange. Spragtelėkite laikant nuspaustą Ctrl klavišą, kad atidaryti naują peržiūros langą su vaizdu į šį garažą +STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centruoti laivų doką pagrindiniame lange. Spragtelėkite laikant nuspaustą Ctrl klavišą, kad atidaryti naują peržiūros langą su vaizdu į šį doką STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centruoti lėktuvų angarą pagrindiniame lange. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus atidarytas naujas peržiūros langas su vaizdu į šį angarą ###length VEHICLE_TYPES @@ -4450,7 +4496,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Nukreipt ###length VEHICLE_TYPES STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Nupirkti traukinio kopiją įskaitant visus vagonus. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus bendrinamos kopijos ir originalo užduotys. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Nupirkti automobilio kopiją. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus bendrinamos kopijos ir originalo užduotys. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Nupirkti automobilio kopiją. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus bendrinamos kopijos ir originalo užduotys. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos tik numatomos išlaidos STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Nupirkti laivo kopiją. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus bendrinamos kopijos ir originalo užduotys. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Nupirkti lėktuvo kopiją. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus bendrinamos kopijos ir originalo užduotys. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos @@ -4494,9 +4540,9 @@ STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Nėra ener STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Laukia laisvo kelio STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Paskirties oro uostas per toli -STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}Vyksta į „{STATION}“, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Vyksta į {0:STATION} STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Neturi užduočių, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Vyksta į „{WAYPOINT}“, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Vyksta į {0:WAYPOINT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Vyksta į {0:DEPOT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Vyksta techninei apžiūrai į {0:DEPOT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Iškrauti ir vykti į techninę apžiūrą į {0:DEPOT} @@ -4551,6 +4597,12 @@ STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Pervesti STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Techninė apžiūra kas: {LTBLUE}{COMMA}{NBSP}dien{P ą as ų}{BLACK}{STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Siųsti techninei apžiūrai patikimumui nukritus iki: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Paskutine apžiūra: {LTBLUE}{DATE_LONG} +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Padidinti techninės priežiūros intervalą 10 dienų. Spragtelėkite laikant nuspaustą Ctrl klavišą, kad padidinti intervalą 5 dienomis +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Padidinti techninės priežiūros intervalą 5 minutėmis. Spragtelėkite laikant nuspaustą Ctrl klavišą, kad padidinti intervalą 1 minute +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Padidinti techninės priežiūros intervalą 10 procentų. Spragtelėkite laikant nuspaustą Ctrl klavišą, kad padidinti intervalą 5 procentais +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Sumažinti techninės priežiūros intervalą 10 dienų. Spragtelėkite laikant nuspaustą Ctrl klavišą, kad sumažinti intervalą 5 dienomis +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Sumažinti techninės priežiūros intervalą 5 minutėmis. Spragtelėkite laikant nuspaustą Ctrl klavišą, kad sumažinti intervalą 1 minute +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Sumažinti techninės priežiūros intervalą 10 procentų. Spragtelėkite laikant nuspaustą Ctrl klavišą, kad sumažinti intervalą 5 procentais STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Techninės apžiūros intervalo tipas STR_VEHICLE_DETAILS_DEFAULT :Numatytasis @@ -4618,7 +4670,7 @@ STR_ORDERS_CAPTION :{WHITE}{VEHICLE STR_ORDERS_TIMETABLE_VIEW :{BLACK}Tvarkaraštis STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Pereiti į tvarkaraštį -STR_ORDERS_LIST_TOOLTIP :{BLACK}Užduočių sąrašas — užduotis pažymima ant jos spragtelėjus. Spragtelėjus laikant nuspaustą Ctrl klavišą, užduoties tikslo vieta bus centruojama pagrindiniame ekrane +STR_ORDERS_LIST_TOOLTIP :{BLACK}Užduočių sąrašas — užduotis pažymima ant jos spragtelėjus. Spragtelėjus laikant nuspaustą Ctrl klavišą, kad užduoties tikslo vieta būtų centruojama pagrindiniame ekrane STR_ORDER_INDEX :{COMMA}:{NBSP} STR_ORDER_TEXT :{STRING} {STRING} {STRING} {STRING} @@ -4657,6 +4709,7 @@ STR_ORDER_DROP_REFIT_AUTO_ANY :Galimam krovini STR_ORDER_DROP_GO_ALWAYS_DEPOT :Vykti visuomet STR_ORDER_DROP_SERVICE_DEPOT :Vykti, jei reikia STR_ORDER_DROP_HALT_DEPOT :Nuvykti ir sustoti +STR_ORDER_DROP_UNBUNCH :Iškrauti # Depot action tooltips, one per vehicle type ###length VEHICLE_TYPES @@ -4739,6 +4792,7 @@ STR_ORDER_REFIT_ORDER :(pertvarkyti {S STR_ORDER_REFIT_STOP_ORDER :(pertvarkyti {STRING.kam} ir sustoti) STR_ORDER_STOP_ORDER :(sustoti) +STR_ORDER_WAIT_TO_UNBUNCH :(Palaukti iškrovimo) STR_ORDER_GO_TO_STATION :{STRING} „{STATION}“ {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Negalima naudotis stotimi){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4858,9 +4912,9 @@ STR_DATE_YEAR_TOOLTIP :{BLACK}Pasirink # AI debug window STR_AI_DEBUG :{WHITE}DI / „GameScript“ derinimas STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM}) -STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Skripto pavadinimas +STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Scenarijaus pavadinimas STR_AI_DEBUG_SETTINGS :{BLACK}Nustatymai -STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Keisti skripto nustatymus +STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Keisti scenarijaus nustatymus STR_AI_DEBUG_RELOAD :{BLACK}Perkrauti AI STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Išbraukti DI, perkrauti skritpą, ir perkrauti DI STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Įjungti/išjungti stabdymą, jei DI žurnalo žinutė sutampa su stabdos žinute @@ -4872,17 +4926,17 @@ STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Įjungti STR_AI_DEBUG_CONTINUE :{BLACK}Tęsti STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Pratęsti žaidimą ir tęsti simuliatorių STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Rodyti DI derinimo režimo išeigą. Spragtelėkite laikant nuspaustą Ctrl klavišą, kad atidarytumėte naujame lange -STR_AI_GAME_SCRIPT :{BLACK}Žaidimo skriptas +STR_AI_GAME_SCRIPT :{BLACK}Žaidimo scenarijus STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Patikrinti žaidimo scenarijaus įrašus. Spragtelėkite laikant nuspaustą Ctrl klavišą, kad atidarytumėte naujame lange STR_ERROR_AI_NO_AI_FOUND :Nerasta jokio tinkamo DI.{}Šis DI yra netikras ir nieko nedarys.{}Galite parsisiųsti keletą DI per 'Turinio internete' sistemą. -STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Vienas iš paleistų skriptų išsijungė. Praneškite apie tai šio skripto autoriui su skripto debug lango vaizdu +STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Vienas iš paleistų scenarijų išsijungė. Praneškite apie tai šio scenarijaus autoriui su scenarijaus derinimo lango vaizdu STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}DI / „GameScript“ derinimo langas yra pasiekiamas tik iš serverio # AI configuration window STR_AI_CONFIG_CAPTION_AI :{WHITE}DI nustatymai STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Žaidimo scenarijaus nustatymai -STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Žaidimo skriptas bus įkeltas sekančiame žaidime +STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Žaidimo scenarijus bus įkeltas sekančiame žaidime STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}DI'ai bus įkelti sekančiame žaidime STR_AI_CONFIG_HUMAN_PLAYER :Žaidėjas Žmogus STR_AI_CONFIG_RANDOM_AI :Atsitiktinis DI @@ -4895,30 +4949,30 @@ STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Perkelti STR_AI_CONFIG_MOVE_DOWN :{BLACK}Perkelti žemiau STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Perkelti pasirinktą DI žemiau -STR_AI_CONFIG_GAMESCRIPT :{SILVER}Žaidimo skriptas +STR_AI_CONFIG_GAMESCRIPT :{SILVER}Žaidimo scenarijus STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Parametrai STR_AI_CONFIG_AI :{SILVER}DI'ai STR_AI_CONFIG_CHANGE_AI :{BLACK}Pasirinkti DI -STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Žaidimo skriptas +STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Pasirinkti žaidimo scenarijų STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Užkrauti kitą scenarijų. Spragtelėkite laikant nuspaustą Ctrl klavišą, kad parodyti visas prieinamas versijas STR_AI_CONFIG_CONFIGURE :{BLACK}Derinti -STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Suderinti skripto nustatymus +STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Suderinti scenarijaus nustatymus # Available AIs window STR_AI_LIST_CAPTION :{WHITE}Prieinamas {STRING} STR_AI_LIST_CAPTION_AI :DI'ai -STR_AI_LIST_CAPTION_GAMESCRIPT :Žaidimo skriptai -STR_AI_LIST_TOOLTIP :{BLACK}Pasirinkite skriptą paspausdami +STR_AI_LIST_CAPTION_GAMESCRIPT :Žaidimo scenarijai +STR_AI_LIST_TOOLTIP :{BLACK}Paspauskite, kad pasirinkti scenarijų STR_AI_LIST_AUTHOR :{LTBLUE}Autorius: {ORANGE}{STRING} STR_AI_LIST_VERSION :{LTBLUE}Versija: {ORANGE}{NUM} STR_AI_LIST_URL :{LTBLUE}URL: {ORANGE}{STRING} STR_AI_LIST_ACCEPT :{BLACK}Priimti -STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Pasirinkti pažymėtą skriptą +STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Pasirinkti pažymėtą scenarijų STR_AI_LIST_CANCEL :{BLACK}Atšaukti -STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nekeisti skripto +STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nekeisti scenarijaus STR_SCREENSHOT_CAPTION :{WHITE}Padaryti ekrano kopiją STR_SCREENSHOT_SCREENSHOT :{BLACK}Įprasta kopija @@ -5197,6 +5251,7 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Negalima STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Netinkamas depo tipas # Depot unbunching related errors +STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... gali turėti tik vieną iškrovimo užduotį # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} yra per ilgas po pakeitimo @@ -5282,6 +5337,7 @@ STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Kelyje o STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... trukdo įmonės būstinė STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Neįmanoma užsisakyti šio langelio... STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... jis ir taip priklauso jums! +STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE} ...pasiektas objektų statybos limitas # Group related errors STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Neįmanoma sukurti grupę... diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 9fdfbdaad4..863a2cad41 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -2486,6 +2486,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :O seu nome de j STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Ações administrativas para executar a este cliente STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Ações administrativas para executar a esta empresa STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Juntar-se a esta empresa +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Autorizar este cliente a ingressar na sua empresa STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Enviar uma mensagem a este jogador STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Enviar uma mensagem a todos os jogadores desta empresa STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Enviar uma mensagem a todos os espectadores diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 1e8164a4a6..0a940474e4 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2636,6 +2636,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Ваше игр STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Административные действия, применимые к этому игроку STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Административные действия, применимые к этой компании STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Присоединиться к этой компании +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Разрешить этому клиенту присоединиться к вашей компании STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Отправить сообщение этому игроку STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Послать сообщение всем игрокам этой компании STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Послать сообщение всем зрителям From 00cfd572ffb3f0e6c3469e776cde1d4bbbe5686e Mon Sep 17 00:00:00 2001 From: ladysadie <144490006+ladysadie@users.noreply.github.com> Date: Wed, 8 May 2024 12:42:02 -0700 Subject: [PATCH 486/695] Cleanup: Remove unneeded CheckMissingGlyphs call (#12640) --- src/openttd.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index 307e60874b..fd913f2ce2 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -805,8 +805,6 @@ int openttd_main(std::span arguments) GenerateWorld(GWM_EMPTY, 64, 64); // Make the viewport initialization happy LoadIntroGame(false); - CheckForMissingGlyphs(); - /* ScanNewGRFFiles now has control over the scanner. */ RequestNewGRFScan(scanner.release()); From 132e226b273f76750e6f7b0623f9ff977dd12ff9 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 9 May 2024 04:42:47 +0000 Subject: [PATCH 487/695] Update: Translations from eints greek: 169 changes by KyriakosMich lithuanian: 21 changes by khamper polish: 1 change by pAter-exe --- src/lang/greek.txt | 336 ++++++++++++++++++++-------------------- src/lang/lithuanian.txt | 31 ++-- src/lang/polish.txt | 1 + 3 files changed, 191 insertions(+), 177 deletions(-) diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 618ad305b6..bacd211580 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -28,7 +28,7 @@ STR_JUST_NOTHING :Τίποτα # Plural cargo name STR_CARGO_PLURAL_NOTHING : STR_CARGO_PLURAL_PASSENGERS :{G=m}Επιβάτες -STR_CARGO_PLURAL_PASSENGERS.geniki :Επιβάτη +STR_CARGO_PLURAL_PASSENGERS.geniki :Επιβατών STR_CARGO_PLURAL_COAL :{G=m}Άνθρακας STR_CARGO_PLURAL_MAIL :{G=f}Αλληλογραφία STR_CARGO_PLURAL_MAIL.geniki :Αλληλογραφίας @@ -42,14 +42,14 @@ STR_CARGO_PLURAL_GRAIN :{G=n}Σιτηρ STR_CARGO_PLURAL_GRAIN.geniki :Σιτηρών STR_CARGO_PLURAL_WOOD :{G=f}Ξυλεία STR_CARGO_PLURAL_WOOD.geniki :Ξυλείας -STR_CARGO_PLURAL_IRON_ORE :{G=n}Σιδηρομεταλλεύματα -STR_CARGO_PLURAL_IRON_ORE.geniki :Σιδηρομεταλλευμάτων -STR_CARGO_PLURAL_STEEL :{G=m}Χάλυβα +STR_CARGO_PLURAL_IRON_ORE :{G=n}Σιδηρομετάλλευμα +STR_CARGO_PLURAL_IRON_ORE.geniki :Σιδηρομεταλλεύματος +STR_CARGO_PLURAL_STEEL :{G=m}Χάλυβας STR_CARGO_PLURAL_STEEL.geniki :Χάλυβα STR_CARGO_PLURAL_VALUABLES :{G=n}Πολύτιμα είδη STR_CARGO_PLURAL_VALUABLES.geniki :Πολύτιμων ειδών -STR_CARGO_PLURAL_COPPER_ORE :{G=n}Μεταλλεύματα Χαλκού -STR_CARGO_PLURAL_COPPER_ORE.geniki :Μεταλλευμάτων Χαλκού +STR_CARGO_PLURAL_COPPER_ORE :{G=n}Μετάλλευμα Χαλκού +STR_CARGO_PLURAL_COPPER_ORE.geniki :Μεταλλεύματος Χαλκού STR_CARGO_PLURAL_MAIZE :{G=n}Καλαμπόκια STR_CARGO_PLURAL_MAIZE.geniki :Καλαμποκιών STR_CARGO_PLURAL_FRUIT :{G=n}Φρούτα @@ -114,6 +114,7 @@ STR_CARGO_SINGULAR_VALUABLES :{G=n}Πολύτ STR_CARGO_SINGULAR_VALUABLES.subs :Πολύτιμα είδη STR_CARGO_SINGULAR_COPPER_ORE :{G=n}Μετάλλευμα Χαλκού STR_CARGO_SINGULAR_COPPER_ORE.subs :Μετάλλευμα Χαλκού +STR_CARGO_SINGULAR_COPPER_ORE.geniki :Μεταλλεύματος Χαλκού STR_CARGO_SINGULAR_MAIZE :{G=n}Καλαμπόκι STR_CARGO_SINGULAR_MAIZE.subs :Καλαμπόκι STR_CARGO_SINGULAR_FRUIT :{G=n}Φρούτο @@ -144,7 +145,7 @@ STR_CARGO_SINGULAR_CANDYFLOSS.subs :Μαλλί τη STR_CARGO_SINGULAR_BUBBLE :{G=f}Φυσαλίδα STR_CARGO_SINGULAR_BUBBLE.subs :Φυσαλίδες STR_CARGO_SINGULAR_TOFFEE :{G=n}Καραμέλα βουτύρου -STR_CARGO_SINGULAR_TOFFEE.subs :Ζαχαρωτα +STR_CARGO_SINGULAR_TOFFEE.subs :Καραμέλες βουτύρου STR_CARGO_SINGULAR_BATTERY :{G=f}Μπαταρία STR_CARGO_SINGULAR_BATTERY.subs :Μπαταρίες STR_CARGO_SINGULAR_PLASTIC :{G=n}Πλαστικό @@ -162,7 +163,7 @@ STR_QUANTITY_LIVESTOCK :{COMMA}{NBSP}τ STR_QUANTITY_GOODS :{COMMA}{NBSP}κιβώτι{P ο α} αγαθών STR_QUANTITY_GRAIN :{WEIGHT_LONG} σιτηρών STR_QUANTITY_WOOD :{WEIGHT_LONG} ξυλείας -STR_QUANTITY_IRON_ORE :{WEIGHT_LONG} μεταλλεύματος σιδήρου +STR_QUANTITY_IRON_ORE :{WEIGHT_LONG} σιδηρομεταλλεύματος STR_QUANTITY_STEEL :{WEIGHT_LONG} χάλυβα STR_QUANTITY_VALUABLES :{COMMA}{NBSP}σάκ{P ος οι} με πολύτιμα είδη STR_QUANTITY_COPPER_ORE :{WEIGHT_LONG} μεταλλεύματος χαλκού @@ -191,10 +192,10 @@ STR_QUANTITY_N_A :Μ/Δ STR_ABBREV_NOTHING : STR_ABBREV_PASSENGERS :ΕΠ STR_ABBREV_COAL :AΘ -STR_ABBREV_MAIL :ΑΓ +STR_ABBREV_MAIL :ΑΛ STR_ABBREV_OIL :ΠΤ STR_ABBREV_LIVESTOCK :ΖΩ -STR_ABBREV_GOODS :ΧΡ +STR_ABBREV_GOODS :ΑΓ STR_ABBREV_GRAIN :ΣΡ STR_ABBREV_WOOD :ΞΛ STR_ABBREV_IRON_ORE :ΣΜ @@ -209,7 +210,7 @@ STR_ABBREV_PAPER :ΧΤ STR_ABBREV_GOLD :ΧΡ STR_ABBREV_WATER :ΝΕ STR_ABBREV_WHEAT :ΣΤ -STR_ABBREV_RUBBER :ΚΤ +STR_ABBREV_RUBBER :ΛΣ STR_ABBREV_SUGAR :ΖΧ STR_ABBREV_TOYS :ΠΧ STR_ABBREV_SWEETS :ΓΛ @@ -342,15 +343,15 @@ STR_TOOLTIP_CATCHMENT :{BLACK}Εναλ STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Κλείσιμο παραθύρου STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Τίτλος παραθύρου - σύρετε το για να το μετακινήσετε -STR_TOOLTIP_SHADE :{BLACK}Σκίαση παραθύρου - Εμφάνιση μόνο της μπάρας τιτλου +STR_TOOLTIP_SHADE :{BLACK}Απόκρυψη παραθύρου - Εμφάνιση μόνο της μπάρας τιτλου STR_TOOLTIP_DEBUG :{BLACK}Εμφάνιση πληροφοριών αποσφαλμάτωσης για NewGRF -STR_TOOLTIP_DEFSIZE :{BLACK}Κλιμακώνει το παράθυρο στο προκαθορισμένο μέγεθος. Με Ctrl+Κλικ αποθηκεύεται το τρέχον μέγεθος ως προκαθορισμένο +STR_TOOLTIP_DEFSIZE :{BLACK}Επαναφέρει το παράθυρο στο προκαθορισμένο μέγεθος. Με Ctrl+Κλικ αποθηκεύεται το τρέχον μέγεθος ως προκαθορισμένο STR_TOOLTIP_STICKY :{BLACK}Σημειώστε αυτό το παραθύρο ωστέ να μην κλείνει από το πλήκτρο «Κλείσιμο Όλων των Παραθύρων». Πατήστε Ctrl+Κλικ για να αποθηκεύσετε την κατάσταση απο επιλογή STR_TOOLTIP_RESIZE :{BLACK}Πατήστε και σύρετε για να αλλάξετε το μέγεθος του παραθύρου STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Εναλλαγή μεγάλου/μικρού παραθύρου STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Μπάρα Κύλισης - μετακινεί την λίστα πάνω/κάτω STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Μπάρα κίνησης - κινεί τη λίστα αριστερά/δεξιά -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Κατεδάφιση κτιρίων κλπ. σε συγκεκριμένο τετράγωνο. Ctrl+Κλικ για διαγώνια επιλογή. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Κατεδάφιση κτιρίων κλπ. σε συγκεκριμένο τετράγωνο. Ctrl+Κλικ για διαγώνια επιλογή. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο # Show engines button ###length VEHICLE_TYPES @@ -424,7 +425,7 @@ STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Συνολικ STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD :Συνολικό κέρδος προηγούμενου έτους STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Συνολικό κέρδος τρέχοντος έτους STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Συνολικό κέρδος τρέχοντος έτους -STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Μέσο κέρδος τελευταίου έτους +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Μέσος όρος κέρδους τελευταίου έτους STR_SORT_BY_AVERAGE_PROFIT_LAST_PERIOD :Μέσος όρος κέρδους προηγούμενης περιόδου STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Μέσος όρος κέρδους τρέχοντος έτους STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Μέσος όρος κέρδους τρέχουσας περιόδου @@ -464,7 +465,7 @@ STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Κατα STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Κατασκευή δρόμου STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Κατασκευή τροχιοδρόμων STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Κατασκευή υδάτινης διαδρομής -STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Κατασκευάστε αεροδρόμια +STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Κατασκευή αεροδρομίου STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Ανοίξτε την μπάρα εργαλείων μορφοποίησης εδάφους, δενδροφύτευσης ή τοποθέτησης σήματος STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Εμφάνιση παραθύρου ήχου/μουσικής STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Εμφάνιση τελευταίου μηνύματος/αναφοράς ειδήσεων, ιστορικό μηνυμάτων ή διαγραφή όλων των μηνυμάτων @@ -477,16 +478,16 @@ STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Πρόγραμμα Επεξεργασίας Σεναρίου STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Μετακίνηση ημ/νίας εκκίνησης 1 χρόνο πίσω STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Μετακινήστε την ημερομηνία εκκίνησης 1 χρόνο μπροστά -STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Πατήστε εδώ για να εισάγετε την χρονιά έναρξης +STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Πατήστε εδώ για να εισαγάγετε την χρονιά έναρξης STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Εμφάνιση χάρτη, επιπλέον παραθύρου προβολής, λίστας πινακίδων ή λίστας πόλεων ή βιομηχανιών STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Εμφάνιση μενού δημιουργίας τοπίου ή δημιουργία νέου κόσμου STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Δημιουργία πόλης STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Δημιουργία βιομηχανίας STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Κατασκευή δρόμου STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}{BLACK}Κατασκευή τροχιοδρόμου -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Φύτευση Δέντρων. Ctrl+Κλικ για διαγώνια επιλογή περιοχής. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Φύτευση Δέντρων. Ctrl+Κλικ για διαγώνια επιλογή περιοχής. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Τοποθέτηση πινακίδας -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Τοποθέτηση αντικειμένου. Ctrl+Κλικ για διαγώνια επιλογή περιοχής. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Τοποθέτηση αντικειμένου. Ctrl+Κλικ για διαγώνια επιλογή περιοχής. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο # Scenario editor file menu ###length 7 @@ -537,7 +538,7 @@ STR_TOWN_MENU_FOUND_TOWN :Ιδρύση π STR_SUBSIDIES_MENU_SUBSIDIES :Χρηματοδοτήσεις # Graph menu -STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Γράφημα λειτουργικού κέρδους +STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Γράφημα λειτουργικών κερδών STR_GRAPH_MENU_INCOME_GRAPH :Γράφημα εισοδήματος STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Γράφημα παραδοθέντος φορτίου STR_GRAPH_MENU_PERFORMANCE_HISTORY_GRAPH :Γράφημα ιστορικού απόδοσης @@ -696,7 +697,7 @@ STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STR STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} -STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Γράφημα Ενεργών Εσόδων +STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Γράφημα Λειτουργικών Κερδών STR_GRAPH_INCOME_CAPTION :{WHITE}Γράφημα Εισοδήματος STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Μονάδες φορτίου που παραδόθηκαν STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Ποσοστά απόδοσης εταιρίας (μέγιστη τιμή=1000) @@ -810,7 +811,7 @@ STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLA STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Καθαρισμός STR_PLAYLIST_CHANGE_SET :{BLACK}Αλλαγή σετ STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Καθαρισμός τρέχοντος προγράμματος (μόνο Προσαρμοσμένο 1 ή Προσαρμοσμένο 2) -STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Αλλαγή μουσικής επιλογής σε άλλο εγκατεστημένο σετ +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Αλλαγή μουσικής επιλογής σε άλλο εγκατεστημένο πακέτο STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Πατήστε στο μουσικό κομμάτι για προσθήκη στο τρέχον πρόγραμμα (Προσαρμοσμένο1 ή Προσαρμοσμένο2 μόνο) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Πατήστε στο τραγούδι για να το αφαιρέσετε από το πρόγραμμα (Προσαρμοσμένο 1 ή 2 μόνο) @@ -1164,7 +1165,7 @@ STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Ρυθμ STR_GAME_OPTIONS_BASE_GRF :{BLACK}Βασικό σετ γραφικών STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Επιλογή του βασικού σετ γραφικών που θα χρησιμοποιηθεί (δεν αλλάζει μέσα από ένα παιχνίδι, μόνο από το κεντρικό μενού) -STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Επιπλέον πληροφορίες σχετικά με το βασικό σετ γραφικών +STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Επιπλέον πληροφορίες σχετικά με το βασικό πακέτο γραφικών STR_GAME_OPTIONS_BASE_SFX :{BLACK}Σετ βασικών ήχων STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Επιλογή των βασικών ήχων που θα χρησιμοποιηθούν (δεν αλλάζει μέσα από ένα παιχνίδι, μόνο από το κεντρικό μενού) @@ -1172,7 +1173,7 @@ STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Επιπ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Βασικό σετ μουσικής STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Επιλέξτε το βασικό σετ μουσικής για χρήση -STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Επιπλέον πληροφορίες σχετικά με το βασικό σετ μουσικής +STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Επιπλέον πληροφορίες σχετικά με το βασικό πακέτο μουσικής STR_GAME_OPTIONS_ONLINE_CONTENT :Λήψη Περιεχομένου STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Ελέγξτε για νέο και ενημερωμένο περιεχόμενο προς λήψη @@ -1281,7 +1282,7 @@ STR_CLIMATE_TOYLAND_LANDSCAPE :Τοπίο πα STR_TERRAIN_TYPE_VERY_FLAT :Πολύ Επίπεδο STR_TERRAIN_TYPE_FLAT :Επίπεδο STR_TERRAIN_TYPE_HILLY :Λοφώδες -STR_TERRAIN_TYPE_MOUNTAINOUS :Βουνώδες +STR_TERRAIN_TYPE_MOUNTAINOUS :Ορεινό STR_TERRAIN_TYPE_ALPINIST :Αλπικό STR_TERRAIN_TYPE_CUSTOM :Προσαρμοσμένο ύψος STR_TERRAIN_TYPE_CUSTOM_VALUE :Προσαρμοσμένο ύψος ({NUM}) @@ -1318,7 +1319,7 @@ STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Περι STR_CONFIG_SETTING_RESTRICT_BASIC :Βασικές (εμφάνιση μόνο σημαντικών ρυθμίσεων) STR_CONFIG_SETTING_RESTRICT_ADVANCED :Για προχωρημένους (εμφάνιση των περισσότερων ρυθμίσεων) STR_CONFIG_SETTING_RESTRICT_ALL :Για ειδικούς (εμφάνιση όλων των ρυθμίσεων, ακομη και παράξενων) -STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Ρυθμίσεις με διαφορετική τιμή από την προκαθωρισμένη +STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Ρυθμίσεις με διαφορετική τιμή από την προκαθορισμένη STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Ρυθμίσεις με διαφορετική τιμή από τις ρυθμίσεις νέου παιχνιδιού σας STR_CONFIG_SETTING_TYPE_DROPDOWN_HELPTEXT :{BLACK}Μειώνει την παρακάτω λίστα σε συγκεκριμένους τύπους ρυθμίσεων @@ -1361,7 +1362,7 @@ STR_CONFIG_SETTING_INFINITE_MONEY :Απεριόρ STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Επιτρέπονται απεριόριστες δαπάνες και απενεργοποίηση της χρεοκοπίας εταιρειών STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Μέγιστο αρχικό δάνειο: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Μέγιστο ποσό που μπορεί να δανειστεί μία εταιρία (χωρίς να λαμβάνεται υπόψη ο πληθωρισμός). Εάν οριστεί σε "Χωρίς δάνειο", δεν θα είναι διαθέσιμα χρήματα εκτός εάν παρέχονται από ένα Σενάριο Παιχνιδιού ή τη ρύθμιση "Άπειρα χρήματα" +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Μέγιστο ποσό που μπορεί να δανειστεί μία εταιρία (χωρίς να λαμβάνεται υπόψη ο πληθωρισμός). Εάν οριστεί σε «Χωρίς δάνειο», δεν θα υπάρχουν διαθέσιμα χρήματα εκτός εάν παρέχονται από Σενάριο Παιχνιδιού ή τη ρύθμιση «Άπειρα χρήματα» STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Κανένα δάνειο @@ -1406,7 +1407,7 @@ STR_CONFIG_SETTING_CITY_APPROVAL :Στάση το STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Επιλογή πόσο ο θόρυβος και η περιβαλλοντικη καταστροφή άπο εταιρίες επηρεάζουν τα ποσοστά αποδοχής και περαιτέρω έργα στην πόλη STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Όριο ύψους χάρτη: {STRING} -STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Ορίστε το μέγιστο ύψος του εδάφους του χάρτη. Επιλέγοντας "αυτόματο" μία καλή τιμή θα επιλεχθεί μετά την παραγωγή του εδάφους +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Ορίστε το μέγιστο ύψος του εδάφους του χάρτη. Επιλέγοντας «αυτόματο» μία καλή τιμή θα επιλεχθεί μετά την παραγωγή του εδάφους STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(αυτόματα) @@ -1534,10 +1535,10 @@ STR_CONFIG_SETTING_PLANE_SPEED :Παράγον STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Ορίζεται η σχετική ταχύτητα των αεροπλάνων συγκριτικά με τους άλλους τύπους οχημάτων, ώστε να μειώνεται το ποσό του εισοδήματος από μεταφορές με αεροσκάφη STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} -STR_CONFIG_SETTING_PLANE_CRASHES :Αριθμός αεροπορικών ατυχημάτων: {STRING} +STR_CONFIG_SETTING_PLANE_CRASHES :Αριθμός αεροπορικών δυστυχημάτων: {STRING} STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Ορίστε την πιθανότητα συντριβής ενός τυχαίου αεροσκάφους.{}* Μεγάλα αεροσκάφη πάντα έχουν ένα ρίσκο συντριβής όταν προσγειώνονται σε μικρά αεροδρόμια. ###length 3 -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Κανένα* +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Καμία* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Μειωμένη STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Κανονική @@ -1581,7 +1582,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Τα οχήμα STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Όταν είναι ενεργοποιημένη, όλα τα μοντέλα οχημάτων παραμένουν διαθέσιμα για πάντα μετά την παρουσίασή τους STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Χρονομέτρηση: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Επιλέξτε τις μονάδες χρονομέτρησης του παιχνιδιού. Αυτό δεν μπορεί να αλλάξει αργότερα.{}{}Η λειτουργία "βάσει ημερολογίου" είναι η κλασική εμπειρία του OpenTTD, με το ένα έτος να αποτελείται από 12 μήνες και κάθε μήνα να έχει 28-31 ημέρες.{}{}Εναλλακτικά, στη λειτουργία "βάσει ρολογιού τοίχου", η παραγωγή φορτίου και τα οικονομικά μεγέθη βασίζονται σε προσαυξήσεις ενός λεπτού, που είναι περίπου όσο διαρκεί ένας μήνας 30 ημερών σε λειτουργία "βάσει ημερολογίου". Αυτά ομαδοποιούνται σε περιόδους 12 λεπτών, που ισοδυναμούν με ένα έτος σε λειτουργία "βάσει ημερολογίου".{}{}Σε κάθε λειτουργία υπάρχει πάντα ένα κλασικό ημερολόγιο, το οποίο χρησιμοποιείται για τις ημερομηνίες εισαγωγής οχημάτων, σπιτιών και άλλων υποδομών +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Επιλέξτε τις μονάδες χρονομέτρησης του παιχνιδιού. Αυτό δεν μπορεί να αλλάξει αργότερα.{}{}Η λειτουργία «βάσει ημερολογίου» είναι η κλασική εμπειρία του OpenTTD, με το ένα έτος να αποτελείται από 12 μήνες και κάθε μήνα να έχει 28-31 ημέρες.{}{}Εναλλακτικά, στη λειτουργία «βάσει ρολογιού τοίχου», η παραγωγή φορτίου και τα οικονομικά μεγέθη βασίζονται σε προσαυξήσεις ενός λεπτού, που είναι περίπου όσο διαρκεί ένας μήνας 30 ημερών σε λειτουργία «βάσει ημερολογίου». Αυτά ομαδοποιούνται σε περιόδους 12 λεπτών, που ισοδυναμούν με ένα έτος σε λειτουργία «βάσει ημερολογίου».{}{}Σε κάθε λειτουργία υπάρχει πάντα ένα κλασικό ημερολόγιο, το οποίο χρησιμοποιείται για τις ημερομηνίες εισαγωγής οχημάτων, σπιτιών και άλλων υποδομών ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Ημερολόγιο STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Ρολόι τοίχου @@ -1650,7 +1651,7 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Μέγιστη STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Όριο για το πόσο μακριά από τα σύνορα του χάρτη μπορούν να κατασκευαστούν διυλιστήρια και εξέδρες πετρελαίου. Στους χάρτες νησιών, αυτό διασφαλίζει ότι βρίσκονται κοντά στην ακτή. Σε χάρτες μεγαλύτερους από 256 πλακίδια, αυτή η τιμή κλιμακώνεται προς τα πάνω STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Κορυφογραμμή χιονιού: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Έλεγχος του ύψους στο οποίο ξεκινά το χιόνι στο υποαρκτικό τοπίο. Το χιόνι επηρεάζει επίσης τη δημιουργία βιομηχανιών και τις προυποθέσεις επέκτασης πόλης. Μπορεί να μεταβληθεί μόνο μέσω του Διαχειριστή Σεναρίων ή αλλιώς υπολογίζεται μέσω της "κάλυψης χιονιού" +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Έλεγχος του ύψους στο οποίο ξεκινά το χιόνι στο υποαρκτικό τοπίο. Το χιόνι επηρεάζει επίσης τη δημιουργία βιομηχανιών και τις προϋποθέσεις επέκτασης πόλης. Μπορεί να μεταβληθεί μόνο μέσω του Διαχειριστή Σεναρίων ή αλλιώς υπολογίζεται μέσω της «κάλυψης χιονιού» STR_CONFIG_SETTING_SNOW_COVERAGE :Κάλυψη χιονιού: {STRING} STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Ορισμός της κατα προσέγγιση ποσότητας χιονιού στα υποαρκτικά τοπία. Το χιόνι επηρεάζει επίσης τη δημιουργία βιομηχανιών και τα προαπαιτούμενα για την εξέλιξη πόλεων. Χρησιμοποιήται μόνο κατά τη διάρκεια της παραγωγής του χάρτη. Το έδαφος που βρίσκεται στο επίπεδο της θάλασσας και οι ακτές, δεν έχουν ποτέ χιόνι @@ -1724,7 +1725,7 @@ STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :Γκρι σε STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Ασπρόμαυρο STR_CONFIG_SETTING_SCROLLMODE :Συμπεριφορά κύλισης του παραθύρου εμφάνισης: {STRING} -STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Συμπεριφορά κατά την κύλιση του χάρτη. Οι επιλογές "κλειδωμένης θέσης ποντικιού" δεν λειτουργούν σε όλα τα συστήματα, όπως εκδόσεις που βασίζονται στον ιστό, οθόνες αφής, Linux με Wayland και άλλα +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Συμπεριφορά κατά την κύλιση του χάρτη. Οι επιλογές «κλειδωμένης θέσης ποντικιού» δεν λειτουργούν σε όλα τα συστήματα, όπως εκδόσεις που βασίζονται στον ιστό, οθόνες αφής, Linux με Wayland και άλλα ###length 4 STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Μετακίνηση μικρού χάρτη με ΔΠΠ, θέση ποντικιού κλειδωμένη STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Μετακίνηση χάρτη με ΔΠΠ, θέση ποντικιού κλειδωμένη @@ -1758,7 +1759,7 @@ STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Μετακίν STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Απενεργοποιημένος STR_CONFIG_SETTING_OSK_ACTIVATION :Πληκτρολόγιο στην οθόνη: {STRING} -STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Επιλογή της μεθόδου για το άνοιγμα του πληκτρολογίου της οθόνης για την εισαγωγή κειμένου σε κουτιά με τη χρήση μόνο της δεικτικής συσκευής. Αυτή η ρύθμιση προορίζεται για μικρότερες συσκευές χωρίς πραγματικό πληκτρολόγιο +STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Επιλογή της μεθόδου για το άνοιγμα του πληκτρολογίου οθόνης για την εισαγωγή κειμένου σε κουτιά με τη χρήση μόνο της δεικτικής συσκευής. Αυτή η ρύθμιση προορίζεται για μικρότερες συσκευές χωρίς πραγματικό πληκτρολόγιο ###length 4 STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :Απενεργοποιημένο STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Με διπλό κλικ @@ -1766,7 +1767,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Με απλό STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Με απλό κλικ (άμεσα) STR_CONFIG_SETTING_USE_RELAY_SERVICE :Χρήση υπηρεσίας αναμετάδοσης: {STRING} -STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Εάν η δημιουργία σύνδεσης με τον server αποτύχει, μπορεί να χρησιμοποιηθεί μία υπηρεσία αναμετάδοσσης για να δημιουργηθεί η σύνδεση. Το "Ποτέ" δεν το επιτρέπει αυτό, το "Ερώτηση" θα σας ρωτήσει πρώτα, το "Επιτρέπεται" θα το επιτρέψει χωρίς ερώτηση +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Εάν η δημιουργία σύνδεσης με τον server αποτύχει, μπορεί να χρησιμοποιηθεί μία υπηρεσία αναμετάδοσης για να δημιουργηθεί η σύνδεση. Το «Ποτέ» δεν το επιτρέπει, το «Ερώτηση» θα σας ρωτήσει πρώτα, το «Επιτρέπεται» θα το επιτρέψει χωρίς ερώτηση ###length 3 STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Ποτέ STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Ρώτα @@ -1968,7 +1969,7 @@ STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :Εμφάνισ STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER :Διαφοροποιήσεις στην παραγωγή των βιομηχανιών που εξυπηρετούνται από ανταγωνιστή/ές: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :Εμφάνιση εφημερίδας όταν μεταβάλλεται η παραγωγικότητα μιας βιομηχανίας που εξυπηρετείται από ανταγωνιστές -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Άλλες διαφοροποιήσεις στη παραγωγή: {STRING} +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Άλλες διαφοροποιήσεις στην παραγωγή: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Εμφάνιση εφημερίδας όταν μεταβάλλεται η παραγωγικότητα μιας βιομηχανίας που δεν εξυπηρετείται από την εταιρία ή ανταγωνιστές STR_CONFIG_SETTING_NEWS_ADVICE :Συμβουλές / πληροφορίες για τα εταιρικά οχήματα: {STRING} @@ -2046,7 +2047,7 @@ STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Οι πόλει STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Ενεργοποιώντας αυτήν τη ρύθμιση επιτρέπει στις πόλεις να κατασκευάζουν επίπεδες διαβάσεις STR_CONFIG_SETTING_NOISE_LEVEL :Περιορισμός τοποθέτησης αεροδρομίων ανάλογα με το επίπεδο θορύβου: {STRING} -STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Επιτρέπεται στις πόλεις να μπλοκάρουν την κατασκευή αεροδρομίων με βάση το επίπεδο αποδοχής θορύβου, το οποίο βασίζεται στον πληθυσμό της πόλης και στο μέγεθος και την απόσταση του αεροδρομίου. Εάν αυτή η ρύθμιση είναι απενεργοποιημένη, οι πόλεις επιτρέπουν μόνο δύο αεροδρόμια, εκτός εάν η στάση της τοπικής αρχής έχει οριστεί σε "Επιτρεπτή" +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Επιτρέπεται στις πόλεις να μπλοκάρουν την κατασκευή αεροδρομίων με βάση το επίπεδο αποδοχής θορύβου, το οποίο βασίζεται στον πληθυσμό της πόλης και στο μέγεθος και την απόσταση του αεροδρομίου. Εάν αυτή η ρύθμιση είναι απενεργοποιημένη, οι πόλεις επιτρέπουν μόνο δύο αεροδρόμια, εκτός εάν η στάση της τοπικής αρχής έχει οριστεί σε «Ανεκτική» STR_CONFIG_SETTING_TOWN_FOUNDING :Ίδρυση πόλεων στο παιχνίδι: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Ενεργοποιώντας αυτήν τη ρύθμιση επιτρέπει στους παίκτες να ιδρύσουν νέες πόλεις στο παιχνίδι @@ -2336,7 +2337,7 @@ STR_CHEAT_MONEY :{LTBLUE}Αύξ STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Παίζετε με την εταιρία: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Μαγική μπουλντόζα (αφαιρεί βιομηχανίες, αμετακίνητα αντικείμενα): {ORANGE}{STRING} STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Τα τούνελ μπορούν να διασταυρώνονται: {ORANGE}{STRING} -STR_CHEAT_NO_JETCRASH :{LTBLUE}Τα jet δε θα συγκρούονται (συχνά) σε μικρά αεροδρόμια: {ORANGE} {STRING} +STR_CHEAT_NO_JETCRASH :{LTBLUE}Τα jet δε θα συντρίβονται (συχνά) σε μικρά αεροδρόμια: {ORANGE} {STRING} STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Μεταβολή του μέγιστου ύψους του χάρτη: {ORANGE}{NUM} STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Μεταβολή του μέγιστου ύψους βουνών στο χάρτη STR_CHEAT_CHANGE_DATE :{LTBLUE}Αλλαγή ημ/νίας: {ORANGE}{DATE_SHORT} @@ -2509,7 +2510,7 @@ STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Προσ STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Εκκίνηση διακομιστή STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Ξεκινήστε το δικό σας διακομιστή -STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Εισάγετε το όνομά σας +STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Εισαγάγετε το όνομά σας STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Δώστε την διεύθυνση του server ή τον κωδικό πρόσκλησης # Start new multiplayer server @@ -2529,7 +2530,7 @@ STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} ε STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Μέγιστος αριθμός εταιριών: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Περιορισμός του διακομιστή σε συγκεκριμένο αριθμό εταιρειών -STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Εισάγετε το όνομα του δικτυακού παιχνιδιού +STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Εισαγάγετε το όνομα του δικτυακού παιχνιδιού # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Σύνδεση... @@ -2550,7 +2551,7 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Ανεύ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Αποσύνδεση -STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Η πρόσβαση στον διακομιστή προστατεύεται. Εισάγετε τον κωδικό +STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Η πρόσβαση στον διακομιστή προστατεύεται. Εισαγάγετε τον κωδικό # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Συνδεδεμένοι παίκτες @@ -2577,6 +2578,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Το όνομα STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Διαχειριστικές ενέργειες που μπορείτε να εκτελέσετε σε αυτόν τον πελάτη STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :Διαχειριστικές ενέργειες που μπορείτε να εκτελέσετε σε αυτή την εταιρία STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Συμμετάσχετε σε αυτή την εταιρία +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Εγκρίνετε την πρόσληψη αυτού του πελάτη STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Στείλτε ένα μήνυμα σε αυτόν τον παίκτη STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Στείλτε ένα μήνυμα σε όλους τους παίκτες αυτής της εταιρίας STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Στείλτε μήνυμα σε όλους τους θεατές @@ -2612,7 +2614,7 @@ STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Ναι, STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Ναι, μην ρωτήσεις ξανά STR_NETWORK_ASK_SURVEY_CAPTION :Συμμετοχή σε αυτοματοποιημένη έρευνα; -STR_NETWORK_ASK_SURVEY_TEXT :Θα θέλατε να συμμετάσχετε στην αυτοματοποιημένη έρευνα;{}Το OpenTTD θα μεταδώσει μια έρευνα όταν αποχωρείτε από ένα παιχνίδι.{}Μπορείτε να το αλλάξετε ανά πάσα στιγμή στις "Επιλογές παιχνιδιού". +STR_NETWORK_ASK_SURVEY_TEXT :Θα θέλατε να συμμετάσχετε στην αυτοματοποιημένη έρευνα;{}Το OpenTTD θα μεταδώσει μια έρευνα όταν αποχωρείτε από ένα παιχνίδι.{}Μπορείτε να το αλλάξετε ανά πάσα στιγμή στις «Επιλογές παιχνιδιού». STR_NETWORK_ASK_SURVEY_PREVIEW :Προεπισκόπηση αποτελέσματος έρευνας STR_NETWORK_ASK_SURVEY_LINK :Πληροφορίες για την αυτοματοποιημένη έρευνα και ιδιωτικότητα STR_NETWORK_ASK_SURVEY_NO :Όχι @@ -2636,7 +2638,7 @@ STR_NETWORK_CHAT_CLIENT :[Προσωπι STR_NETWORK_CHAT_TO_CLIENT :[Προσωπικό] Σε {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_ALL :[Όλοι] {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_EXTERNAL :[{3:STRING}] {0:STRING}: {WHITE}{1:STRING} -STR_NETWORK_CHAT_OSKTITLE :{BLACK}Εισάγετε το κείμενο για δικτυακή συζήτηση +STR_NETWORK_CHAT_OSKTITLE :{BLACK}Εισαγάγετε το κείμενο για δικτυακή συζήτηση # Network messages STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Δεν βρέθηκαν συσκευές δικτύου @@ -2722,7 +2724,7 @@ STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Ο δι STR_NETWORK_MESSAGE_KICKED :*** {STRING} εκδιώχθηκε. Λόγος: ({STRING}) STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Η εγγραφή του server απέτυχε -STR_NETWORK_ERROR_COORDINATOR_REUSE_OF_INVITE_CODE :{WHITE}Άλλος ένας server με τον ίδιο κωδικό πρόσκλησης έχει εγγραφεί. Γίνεται αλλαγή σε "τοπικό" παιχνίδι. +STR_NETWORK_ERROR_COORDINATOR_REUSE_OF_INVITE_CODE :{WHITE}Άλλος ένας server με τον ίδιο κωδικό πρόσκλησης έχει εγγραφεί. Γίνεται αλλαγή σε «τοπικό» παιχνίδι. STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}Ο server σας δεν επιτρέπει τις απομακρυσμένες συνδέσεις STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Οι άλλοι παίκτες δεν θα μπορούν να συνδεθούν στον server σας @@ -2814,7 +2816,7 @@ STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Εναλ STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για κτιζόμενα κτίρια όπως σταθμούς, αμαξοστάσια και σημεία καθοδήγησης. Ctrl+Κλικ για να την κλειδώσετε. STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για γέφυρες. Ctrl+Κλικ για να την κλειδώσετε STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για κτίρια όπως φάρους και κεραίες. Ctrl+Κλικ για να την κλειδώσετε -STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για τις συνδέσεις. Ctrl+Κλικ για να την κλειδώσετε +STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για την εναέρια ηλεκτροδότηση. Ctrl+Κλικ για να την κλειδώσετε STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για φόρτωση και κείμενο κόστους/εσόδων. Ctrl+Κλικ για να την κλειδώσετε STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Επιλέξτε τα αντικείμενα που θα είναι αόρατα αντί για διάφανα @@ -2863,16 +2865,16 @@ STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Κατασκε STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Κατασκευή Μονοτρόχιου Σιδηρόδρομου STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Κατασκευή Σιδηροδρόμου Maglev -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Κατασκευή σιδηροτροχιάς. Ctrl+Κλικ για αφαίρεση σιδηροτροχιάς. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Κατασκευή σιδηροτροχιάς με χρήση της Αυτόματης Σιδηροτροχιάς. Ctrl+Κλικ για αφαίρεση σιδηροτροχιάς. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Κατασκευή αμαξοστάσιου (για αγορά και επισκευή τρένων). Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Μετατροπή σιδηροτροχιάς σε σημείο καθοδήγησης. Ctrl+Κλικ για επιλογή πρόσθετου σημείου καθοδήγησης για συνένωση. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Κατασκευή σταθμού τρένων. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Κατασκευή σηματοδοτών. Ctrl+Κλικ για κατασκευή του εναλλακτικού στυλ σηματοδότη{}Με Κλικ+σύρσιμο κατασκευάζονται σηματοδότες κατά μήκος μιας σιδηροτροχιάς ανά το ορισμένο διάστημα. Ctrl+Κλικ+σύρσιμο για κατασκευή σηματοδοτών μέχρι την επομένη διασταύρωση, σταθμό ή σηματοδότη{}Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Κατασκευή γέφυρας σιδηρόδρομου. Επιπρόσθετα πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Κατασκευή τούνελ σιδηρόδρομου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Κατασκευή σιδηροτροχιάς. Ctrl+Κλικ για αφαίρεση σιδηροτροχιάς. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Κατασκευή σιδηροτροχιάς με χρήση της Αυτόματης Σιδηροτροχιάς. Ctrl+Κλικ για αφαίρεση σιδηροτροχιάς. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Κατασκευή αμαξοστάσιου (για αγορά και επισκευή τρένων). Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Μετατροπή σιδηροτροχιάς σε σημείο καθοδήγησης. Ctrl+Κλικ για επιλογή πρόσθετου σημείου καθοδήγησης για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Κατασκευή σταθμού τρένων. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Κατασκευή σηματοδοτών στον σιδηρόδρομο. Ctrl+Κλικ για κατασκευή του εναλλακτικού είδους σηματοδότη{}Με Κλικ+σύρσιμο κατασκευάζονται σηματοδότες κατά μήκος μιας σιδηροτροχιάς ανά το ορισμένο διάστημα. Ctrl+Κλικ+σύρσιμο για κατασκευή σηματοδοτών μέχρι την επομένη διασταύρωση, σταθμό ή σηματοδότη. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Κατασκευή γέφυρας σιδηρόδρομου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Κατασκευή τούνελ σιδηρόδρομου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Εναλλαγή κατασκευής/αφαίρεσης σιδηροτροχιών, σηματοδοτών, σημείων καθοδήγησης και σταθμών. Ctrl+Κλικ για αφαίρεση και της σιδηροτροχιάς από σημεία καθοδήγησης και σταθμούς -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Μετατροπή/Αναβάθμιση του τύπου γραμμής. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Μετατροπή/Αναβάθμιση του τύπου γραμμής. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_RAIL_NAME_RAILROAD :Σιδηρόδρομος STR_RAIL_NAME_ELRAIL :Ηλεκτροδοτημένη σιδηροτροχιά @@ -2928,17 +2930,17 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Μείω STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Αύξηση απόστασης μεταξύ σηματοδοτών με σύρσιμο # Bridge selection window -STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Επιλογή Γέφυρας +STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Επιλογή Γέφυρας Σιδηροδρόμου STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Επιλογή Γέφυρας Δρόμου -STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Επιλογή γέφυρας - πατήστε στην γέφυρα της προτίμησής σας για κατασκευή +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_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} -STR_BRIDGE_NAME_SUSPENSION_STEEL :Ατσάλινη, με Αναρτήσεις +STR_BRIDGE_NAME_SUSPENSION_STEEL :Ατσάλινη, Κρεμαστή STR_BRIDGE_NAME_GIRDER_STEEL :Ατσάλινη, με Δοκούς -STR_BRIDGE_NAME_CANTILEVER_STEEL :Ατσάλινη, Κρεμαστή -STR_BRIDGE_NAME_SUSPENSION_CONCRETE :Τσιμεντένια, με Αναρτήσεις +STR_BRIDGE_NAME_CANTILEVER_STEEL :Ατσάλινη, Αρθρωτή +STR_BRIDGE_NAME_SUSPENSION_CONCRETE :Τσιμεντένια, Κρεμαστή STR_BRIDGE_NAME_WOODEN :Ξύλινη STR_BRIDGE_NAME_CONCRETE :Τσιμεντένια STR_BRIDGE_NAME_TUBULAR_STEEL :Ατσάλινη, Σωληνοειδής @@ -2948,25 +2950,25 @@ STR_BRIDGE_TUBULAR_SILICON :Σιλικόν # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Κατασκευή Δρόμου STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Κατασκευή Τροχιόδρομου -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Κατασκευή τμήματος δρόμου. Ctrl+Κλικ για αφαίρεση τμήματος δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Κατασκευή τμήματος δρόμου. Ctrl+Κλικ για αφαίρεση τμήματος δρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Κατασκευή κομματιού τροχιοδρόμου. Ctrl+Κλικ για αφαίρεση τροχιόδρομου. Επιπρόσθετα πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Κατασκευή οδικού δικτύου με χρήση της λειτουργίας Αυτόματου Δρόμου. Ctrl+Κλικ για αφαίρεση δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Κατασκευή τροχιοδρόμου με χρήση της λειτουργίας Αυτόματης Γραμμής. Ctrl+Κλικ για αφαίρεση τροχιόδρομου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Κατασκευή αμαξοστασίου οχημάτων δρόμου (για αγορά και επισκευή οχημάτων). Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Κατασκευή αμαξοστασίου οχημάτων τραμ (για αγορά και συντήρηση οχημάτων). Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Κατασκευή σταθμού λεωφορείων. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Κατασκευή επιβατικού σταθμού τραμ. Ctrl+Κλικ για επιλογή πρόσθετου επιβατικού σταθμού για συνένωση. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Κατασκευή σταθμού φορτηγών. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Κατασκευή εμπορευματικού σταθμού τραμ. Ctrl+Κλικ για επιλογή πρόσθετου εμπορευματικού σταθμού για συνένωση. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Κατασκευή οδικού δικτύου με χρήση της λειτουργίας Αυτόματου Δρόμου. Ctrl+Κλικ για αφαίρεση δρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Κατασκευή τροχιοδρόμου με χρήση της λειτουργίας Αυτόματης Γραμμής. Ctrl+Κλικ για αφαίρεση τροχιόδρομου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Κατασκευή αμαξοστασίου οχημάτων δρόμου (για αγορά και επισκευή οχημάτων). Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Κατασκευή αμαξοστασίου οχημάτων τραμ (για αγορά και συντήρηση οχημάτων). Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Κατασκευή σταθμού λεωφορείων. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Κατασκευή επιβατικού σταθμού τραμ. Ctrl+Κλικ για επιλογή πρόσθετου επιβατικού σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Κατασκευή σταθμού φορτηγών. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Κατασκευή εμπορευματικού σταθμού τραμ. Ctrl+Κλικ για επιλογή πρόσθετου εμπορευματικού σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Ενεργοποίηση/Απενεργοποίηση μονόδρομων -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Κατασκευή γέφυρας δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Κατασκευή γέφυρας τροχιοδρόμου. Επιπρόσθετα πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Κατασκευή τούνελ δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Κατασκευή γέφυρας δρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Κατασκευή γέφυρας τροχιοδρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Κατασκευή τούνελ δρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Κατασκευή τούνελ τροχιοδρόμου. Επιπρόσθετα πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Εναλλαγή κατασκευής/αφαίρεσης για αυτοκινητόδρομους STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Εναλλαγή προσθήκης/αφαίρεσης για την κατασκευή τροχιόδρομου -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Μετατρέψτε/Αναβαθμίστε τον τύπο του δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Μετατρέψτε/Αναβαθμίστε τον τύπο του τραμ. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Μετατρέψτε/Αναβαθμίστε τον τύπο του δρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Μετατρέψτε/Αναβαθμίστε τον τύπο του τραμ. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_ROAD_NAME_ROAD :Δρόμος STR_ROAD_NAME_TRAM :Τροχιόδρομος @@ -2990,11 +2992,11 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Επιλ # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Κατασκευή Καναλιού Νερού STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Κανάλια Νερού -STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Κατασκευή καναλιών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Κατασκευή υδατοφράκτη. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Κατασκευή ναυπηγείου πλοίων (για αγορά και επισκευή πλοίων). Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Κατασκευή λιμένα πλοίων. Ctrl+Κλικ για επιλογή πρόσθετου λιμένα για συνένωση. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Τοποθετήστε μια σημαδούρα που μπορεί να χρησιμοποιηθεί ως σημείο καθοδήγησης. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Κατασκευή καναλιών. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Κατασκευή υδατοφράκτη. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Κατασκευή ναυπηγείου πλοίων (για αγορά και επισκευή πλοίων). Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Κατασκευή λιμένα πλοίων. Ctrl+Κλικ για επιλογή πρόσθετου λιμένα για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Τοποθετήστε μια σημαδούρα που μπορεί να χρησιμοποιηθεί ως σημείο καθοδήγησης. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Κατασκευή υδραγωγείου. Επιπρόσθετα πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Κατασκευή καναλιού. Εναλλακτικά, Ctrl+Κλικ στο επίπεδο της θάλασσας για να πλημμυρίσετε με θαλασσινό νερό STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Τοποθέτηση ποταμιών. Ctrl+Κλικ για διαγώνια επιλογή @@ -3008,7 +3010,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Λιμά # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Αεροδρόμια -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Κατασκευή αεροδρομίου. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Κατασκευή αεροδρομίου. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Επιλογή Αεροδρομίου @@ -3035,14 +3037,14 @@ STR_STATION_BUILD_NOISE :{BLACK}Παρα # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Μορφοποίηση εδάφους -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Χαμήλωμα μιας γωνίας εδάφους. Κλικ+Σύρσιμο για χαμήλωμα της πρώτης επιλεγμένης γωνίας και ισοπέδωση της επιφάνειας στο νέο ύψος της γωνίας. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή της επιφάνειας. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Ανύψωση μιας γωνίας εδάφους. Κλικ+Σύρσιμο για ανύψωση της πρώτης επιλεγμένης γωνίας και ισοπέδωση της επιφάνειας στο νέο ύψος της γωνίας. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή της επιφάνειας. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Ισοπέδωση της γης στο ύψος της πρώτης επιλεγμένης γωνίας. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή της επιφάνειας. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Αγορά γης για μελλοντική χρήση. Ctrl+Κλικ για διαγώνια επιλογή. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Χαμήλωμα μιας γωνίας εδάφους. Κλικ+Σύρσιμο για χαμήλωμα της πρώτης επιλεγμένης γωνίας και ισοπέδωση της επιφάνειας στο νέο ύψος της γωνίας. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή της επιφάνειας. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Ανύψωση μιας γωνίας εδάφους. Κλικ+Σύρσιμο για ανύψωση της πρώτης επιλεγμένης γωνίας και ισοπέδωση της επιφάνειας στο νέο ύψος της γωνίας. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή της επιφάνειας. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Ισοπέδωση της γης στο ύψος της πρώτης επιλεγμένης γωνίας. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή της επιφάνειας. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Αγορά γης για μελλοντική χρήση. Ctrl+Κλικ για διαγώνια επιλογή. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Επιλογή Αντικείμενου -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Επιλογή αντικείμενου για κατασκευή. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Επιλογή αντικείμενου για κατασκευή. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Επιλογή της κατηγορίας του αντικείμενου για κατασκευή STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Προεπισκόπηση του αντικείμενου STR_OBJECT_BUILD_SIZE :{BLACK}Μέγεθος: {GOLD}{NUM} x {NUM} τετράγωνα @@ -3054,7 +3056,7 @@ STR_OBJECT_CLASS_TRNS :Αναμετα STR_PLANT_TREE_CAPTION :{WHITE}Δέντρα STR_PLANT_TREE_TOOLTIP :{BLACK}Επιλέξτε τύπο δέντρου για φύτευση. Αν το τετραγωνίδιο έχει ήδη ένα δέντρο, αυτό θα προσθέσει περισσότερα δέντρα μεικτών τύπων ανεξάρτητα από τον επιλεγμένο τύπο STR_TREES_RANDOM_TYPE :{BLACK}Δέντρα τυχαίου τύπου -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Τοποθέτηση δέντρων τυχαίου τύπου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Τοποθέτηση δέντρων τυχαίου τύπου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Τυχαία Δέντρα STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Φυτέψτε δέντρα τυχαία στο έδαφος STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Κανονικό @@ -3065,8 +3067,8 @@ STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Δάσο 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_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_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Αύξηση περιοχής για χαμήλωμα/ανύψωση εδάφους STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Μείωση περιοχής για χαμήλωμα/ανύψωση εδάφους @@ -3081,16 +3083,16 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Είστ # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Δημιουργία Πόλης STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Νέα Πόλη -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Ίδρυση νέας πόλης. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Ίδρυση νέας πόλης. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Τυχαία Πόλη STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Ίδρυση πόλης σε τυχαία τοποθεσία STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Πολλές τυχαίες πόλεις STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Κάλυψη του χάρτη με τυχαία τοποθετημένες πόλεις STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Επέκταση όλων των πόλεων -STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Κάνε όλες τις πόλεις να επεκτείνονται λιγάκι +STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Κάνε όλες τις πόλεις να επεκτείνονται πολύ λίγο STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Όνομα πόλης: -STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Εισάγετε το όνομα της πόλης +STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Εισαγάγετε το όνομα της πόλης STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Πατήστε για να δώσετε το όνομα της πόλης STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Τυχαίο όνομα STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Δημιουργία ενός τυχαίου ονόματος @@ -3244,27 +3246,27 @@ STR_LAI_WATER_DESCRIPTION_SHIP_DEPOT :Ναυπηγε STR_LAI_TUNNEL_DESCRIPTION_RAILROAD :Τούνελ σιδηρόδρομου STR_LAI_TUNNEL_DESCRIPTION_ROAD :Τούνελ δρόμου -STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_STEEL :Ατσάλινη σιδηροδρομική γέφυρα με αναρτήσεις +STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_STEEL :Ατσάλινη κρεμαστή σιδηροδρομική γέφυρα STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL :Ατσάλινη σιδηροδρομική γέφυρα με δοκούς -STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL :Ατσάλινη κρεμαστή σιδηροδρομική γέφυρα -STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_CONCRETE :Σιδηροδρομική γέφυρα από ενισχυμένο τσιμέντο +STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL :Ατσάλινη αρθρωτή σιδηροδρομική γέφυρα +STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_CONCRETE :Κρεμαστή σιδηροδρομική γέφυρα από ενισχυμένο τσιμέντο STR_LAI_BRIDGE_DESCRIPTION_RAIL_WOODEN :Ξύλινη σιδηροδρομική γέφυρα STR_LAI_BRIDGE_DESCRIPTION_RAIL_CONCRETE :Τσιμεντένια σιδηροδρομική γέφυρα -STR_LAI_BRIDGE_DESCRIPTION_RAIL_TUBULAR_STEEL :Κυλινδρική σιδηροδρομική γέφυρα +STR_LAI_BRIDGE_DESCRIPTION_RAIL_TUBULAR_STEEL :Ατσάλινη σωληνοειδής σιδηροδρομική γέφυρα -STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_STEEL :Ατσάλινη γέφυρα δρόμου με αναρτήσεις +STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_STEEL :Ατσάλινη κρεμαστή γέφυρα δρόμου STR_LAI_BRIDGE_DESCRIPTION_ROAD_GIRDER_STEEL :Ατσάλινη γέφυρα δρόμου με δοκούς -STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL :Ατσάλινη κρεμαστή γέφυρα δρόμου -STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_CONCRETE :Γέφυρα δρόμου από ενισχυμένο τσιμέντο +STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL :Ατσάλινη αρθρωτή γέφυρα δρόμου +STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_CONCRETE :Κρεμαστή γέφυρα δρόμου από ενισχυμένο τσιμέντο STR_LAI_BRIDGE_DESCRIPTION_ROAD_WOODEN :Ξύλινη γέφυρα δρόμου STR_LAI_BRIDGE_DESCRIPTION_ROAD_CONCRETE :Τσιμεντένια γέφυρα δρόμου -STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL :Κυλινδρική γέφυρα δρόμου +STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL :Σωληνοειδής γέφυρα δρόμου STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT :Υπερυψωμένο κανάλι STR_LAI_OBJECT_DESCRIPTION_TRANSMITTER :Αναμεταδότης STR_LAI_OBJECT_DESCRIPTION_LIGHTHOUSE :Φάρος -STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Κεντρικά γραφεία εταιρίας +STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Έδρα εταιρίας STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ιδιοκτησία γης από εταιρία # About OpenTTD window @@ -3928,7 +3930,7 @@ STR_FINANCES_CAPITAL_EXPENSES_TITLE :{WHITE}Έξοδ STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Κατασκευές STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Νέα Οχήματα STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Τρένα -STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Οχήματα +STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Οχήματα δρόμου STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Αεροσκάφη STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Πλοία STR_FINANCES_SECTION_INFRASTRUCTURE :{GOLD}Υποδομές @@ -3979,12 +3981,12 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} αεροδρόμι{P ο α} STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Τίποτα -STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Κατασκευή Αρχηγείου -STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Κατασκευή αρχηγείου εταιρίας -STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Προβολή Αρχηγείου -STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Προβολή αρχηγείου εταιρίας -STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Ανοικοδόμηση Αρχηγείου -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Ανοικοδόμηση της έδρας της εταιρίας σε άλλο μέρος, με κόστος το 1% της αξίας της εταιρίας. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Κατασκευή Έδρας +STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Κατασκευή έδρας εταιρίας +STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Προβολή Έδρας +STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Προβολή έδρας εταιρίας +STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Μετεγκατάσταση Έδρας +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Επανοικοδόμηση της έδρας της εταιρίας σε άλλο μέρος, με κόστος το 1% της αξίας της εταιρίας. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Λεπτομέρειες STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Προβολή λεπτομερούς μέτρησης υποδομών STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Δώστε χρήματα @@ -4003,7 +4005,7 @@ STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Αλλα STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Όνομα Εταιρίας STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Όνομα Διευθυντή -STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Εισάγετε το χρηματικό ποσό που θέλετε να δώσετε +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Εισαγάγετε το χρηματικό ποσό που θέλετε να δώσετε STR_BUY_COMPANY_MESSAGE :{WHITE}Αναζητούμε μια εταιρία μεταφορών για να εξαγοράσει την εταιρία μας.{}{}Θέλετε να εξαγοράσετε την {COMPANY} για {CURRENCY_LONG}; STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Σε μια εχθρική εξαγορά της {COMPANY} θα αγοράσετε όλα τα περιουσιακά στοιχεία, θα εξοφλήσετε όλα τα δάνεια και θα πληρώσετε κέρδη δύο ετών.{}{}Το σύνολο εκτιμάται ότι είναι {CURRENCY_LONG}.{}{}Θέλετε να προχωρήσετε με αυτήν την εχθρική εξαγορά; @@ -4079,10 +4081,10 @@ STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Διαθέσι STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Διαχείριση λίστας STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Στείλτε οδηγίες σε όλα τα οχήματα σε αυτήν τη λίστα STR_VEHICLE_LIST_REPLACE_VEHICLES :Αντικατάσταση οχημάτων -STR_VEHICLE_LIST_SEND_FOR_SERVICING :Στείλτε για επισκευή +STR_VEHICLE_LIST_SEND_FOR_SERVICING :Στείλτε για συντήρηση STR_VEHICLE_LIST_CREATE_GROUP :Δημιουργία ομάδας -STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Κέρδος αυτό το έτος: {CURRENCY_LONG} (προηγούμενο έτος: {CURRENCY_LONG}) -STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{TINY_FONT}{BLACK}Κέρδος αυτή την περίοδο: {CURRENCY_LONG} (τελευταία περίοδο: {CURRENCY_LONG}) +STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Φετινό κέρδος: {CURRENCY_LONG} (περυσινό: {CURRENCY_LONG}) +STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{TINY_FONT}{BLACK}Κέρδος αυτή την περίοδο: {CURRENCY_LONG} (τελευταίας περιόδου: {CURRENCY_LONG}) STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} @@ -4129,7 +4131,7 @@ STR_GROUP_RENAME_CAPTION :{BLACK}Μετο STR_GROUP_PROFIT_THIS_YEAR :Κέρδος τρέχοντος έτους: STR_GROUP_PROFIT_THIS_PERIOD :Κέρδος τρέχουσας περιόδου: -STR_GROUP_PROFIT_LAST_YEAR :Κέρδος προηγούμενου έτους +STR_GROUP_PROFIT_LAST_YEAR :Κέρδος προηγούμενου έτους: STR_GROUP_PROFIT_LAST_PERIOD :Κέρδος προηγούμενης περιόδου: STR_GROUP_OCCUPANCY :Τρέσουσα χρήση: STR_GROUP_OCCUPANCY_VALUE :{NUM}% @@ -4204,16 +4206,16 @@ STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Αγορ STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Αγορά και μετατροπή του αεροσκάφους ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου οχήματος τρένου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου οχήματος δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά επιλεγμένου πλοίου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου αεροσκάφους. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου οχήματος τρένου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου οχήματος δρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά επιλεγμένου πλοίου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου αεροσκάφους. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου οχήματος τρένου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου οχήματος δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου πλοίου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου αεροσκάφους. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου οχήματος τρένου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου οχήματος δρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου πλοίου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου αεροσκάφους. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Μετονομασία @@ -4305,10 +4307,10 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Κλων STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Κλωνοποίηση Αεροσκάφους ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός τρένου μαζί με όλα τα βαγόνια. Πατήστε αυτό το κουμπί και μετά σε κάποιο τρένο μέσα ή έξω από το αμαξοστάσιο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός οχήματος δρόμου. Πατήστε αυτό το κουμπί και μετά σε κάποιο όχημα μέσα ή έξω από το αμαξοστάσιο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός πλοίου. Πατήστε αυτό το κουμπί και μετά σε κάποιο πλοίο μέσα ή έξω από το ναυπηγείο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Αγορά αντιγράφου του αεροσκάφους. Πατήστε αυτό το κουμπί και μετά σε κάποιο αεροσκάφος μέσα ή έξω από το υπόστεγο. Με Ctrl+Κλικ θα διαμοιραστούν τις εντολές. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός τρένου μαζί με όλα τα βαγόνια. Πατήστε αυτό το κουμπί και μετά σε κάποιο τρένο μέσα ή έξω από το αμαξοστάσιο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός οχήματος δρόμου. Πατήστε αυτό το κουμπί και μετά σε κάποιο όχημα μέσα ή έξω από το αμαξοστάσιο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός πλοίου. Πατήστε αυτό το κουμπί και μετά σε κάποιο πλοίο μέσα ή έξω από το ναυπηγείο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Αγορά αντιγράφου του αεροσκάφους. Πατήστε αυτό το κουμπί και μετά σε κάποιο αεροσκάφος μέσα ή έξω από το υπόστεγο. Με Ctrl+Κλικ θα διαμοιραστούν τις εντολές. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του αμαξοστάσιου. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία του αμαξοστασίου @@ -4438,10 +4440,10 @@ STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλ STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλνει το αεροσκάφος στο υπόστεγο. Με Ctrl+Κλικ κάνει μόνο συντήρηση ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Αγορά αντιγράφου του τρένου μαζί με όλα τα βαγόνια. Ctrl+Κλικ για διαμοιρασμό εντολών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Αγορά αντιγράφου του οχήματος δρόμου. Ctrl+Κλικ για διαμοιρασμό εντολών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Αγορά αντιγράφου του πλοίου. Ctrl+Κλικ για διαμοιρασμό εντολών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Αγορά αντιγράφου του αεροσκάφους. Ctrl+Κλικ για διαμοιρασμό εντολών. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Αγορά αντιγράφου του τρένου μαζί με όλα τα βαγόνια. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Αγορά αντιγράφου του οχήματος δρόμου. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Αγορά αντιγράφου του πλοίου. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Αγορά αντιγράφου του αεροσκάφους. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Αναγκάστε το τρένο να προχωρήσει χωρίς να περιμένει το σηματοδότη να το επιτρέψει STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Αναστροφή κατεύθυνσης τρένου @@ -4525,10 +4527,10 @@ STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Μεγ. STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Βάρος: {LTBLUE}{WEIGHT_SHORT} {BLACK}Δύναμη Κινητήρα: {LTBLUE}{POWER}{BLACK} Μέγ. Ταχύτητα: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Βάρος: {LTBLUE}{WEIGHT_SHORT} {BLACK}Δύναμη Κινητήρα: {LTBLUE}{POWER}{BLACK} Μέγ. Ταχύτητα: {LTBLUE}{VELOCITY} {BLACK}Μέγ. Ε.Δ: {LTBLUE}{FORCE} -STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Κέρδη αυτό το έτος: {LTBLUE}{CURRENCY_LONG} (προηγούμενου έτους: {CURRENCY_LONG}) -STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Φετινό κέρδος: {LTBLUE}{CURRENCY_LONG} (Περσινό: {CURRENCY_LONG}) {BLACK}Ελάχιστη απόδοση: {LTBLUE}{POWER_TO_WEIGHT} -STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Κέρδος αυτή την περίοδο: {LTBLUE}{CURRENCY_LONG} (τελευταία περίοδο: {CURRENCY_LONG}) -STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Κέρδος αυτή την περίοδο: {LTBLUE}{CURRENCY_LONG} (τελευταία περίοδο: {CURRENCY_LONG}) {BLACK}Ελάχ. απόδοση: {LTBLUE}{POWER_TO_WEIGHT} +STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Φετινό κέρδος: {LTBLUE}{CURRENCY_LONG} (περυσινό: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Φετινό κέρδος: {LTBLUE}{CURRENCY_LONG} (Περσινό: {CURRENCY_LONG}) {BLACK}Ελάχ. απόδοση: {LTBLUE}{POWER_TO_WEIGHT} +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Κέρδος αυτή την περίοδο: {LTBLUE}{CURRENCY_LONG} (τελευταίας περιόδου: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Κέρδος αυτή την περίοδο: {LTBLUE}{CURRENCY_LONG} (τελευταίας περιόδου: {CURRENCY_LONG}) {BLACK}Ελάχ. απόδοση: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Αξιοπιστία: {LTBLUE}{COMMA}% {BLACK}Βλάβες μετά από την τελευταία επισκευή: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Κατασκευή: {LTBLUE}{NUM}{BLACK} Αξία: {LTBLUE}{CURRENCY_LONG} @@ -4539,17 +4541,17 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Χωρη STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Έσοδα μεταφοράς: {LTBLUE}{CURRENCY_LONG} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Διάστημα μεταξύ επισκευών: {LTBLUE}{COMMA}{NBSP}ημέρες{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Διάστημα μεταξύ συντηρήσεων : {LTBLUE}{COMMA}{NBSP}ημέρες{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Διάστημα μεταξύ συντηρήσεων: {LTBLUE}{COMMA}{NBSP}λεπτ{P ό ά}{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Διάστημα επισκευών: {LTBLUE}{COMMA}%{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Διάστημα μεταξύ συντηρήσεων: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Τελευταίο service: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Τελευταίο service: {LTBLUE}{NUM} λεπτ{P 0 ό ά} πριν -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Αύξηση του διαστήματος συντήρησης κατά 10 ημέρες. Ctrl+Κλικ για αύξηση του διαστήματος συντήρησης κατά 5 ημέρες -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Αύξηση του διαστήματος συντήρησης κατά 5 λεπτά. Ctrl+Κλικ για αύξηση του διαστήματος συντήρησης κατά 1 λεπτό -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Αύξηση του διαστήματος εξυπηρέτησης κατά 10 τοις εκατό. Ctrl+Κλικ για αύξηση του διαστήματος εξυπηρέτησης κατά 5 τοις εκατό -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Μειώστε το διάστημα μεταξύ των σέρβις κατά 10 ημέρες. Ctrl+Κλικ για να μειώσετε το διάστημα συντήρησης κατά 5 ημέρες -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Μειώστε το διάστημα μεταξύ των σέρβις κατά 5 λεπτά. Ctrl+Κλικ για να μειώσετε το διάστημα συντήρησης κατά 1 λεπτό -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Μειώστε το διάστημα μεταξύ των σέρβις κατά 10 τοις εκατό. Ctrl+Κλικ για να μειώσετε το διάστημα συντήρησης κατά 5 τοις εκατό. +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Αυξήστε το διάστημα μεταξύ συντηρήσεων κατά 10 ημέρες. Ctrl+Κλικ για να αυξήσετε το διάστημα μεταξύ συντηρήσεων κατά 5 ημέρες +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Αυξήστε το διάστημα μεταξύ συντηρήσεων κατά 5 λεπτά. Ctrl+Κλικ για να αυξήσετε το διάστημα μεταξύ συντηρήσεων κατά 1 λεπτό +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Αυξήστε το διάστημα μεταξύ συντηρήσεων κατά 10 τοις εκατό. Ctrl+Κλικ για να αυξήσετε το διάστημα μεταξύ συντηρήσεων κατά 5 τοις εκατό +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Μειώστε το διάστημα μεταξύ συντηρήσεων κατά 10 ημέρες. Ctrl+Κλικ για να μειώσετε το διάστημα μεταξύ συντηρήσεων κατά 5 ημέρες +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Μειώστε το διάστημα μεταξύ συντηρήσεων κατά 5 λεπτά. Ctrl+Κλικ για να μειώσετε το διάστημα μεταξύ συντηρήσεων κατά 1 λεπτό +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Μειώστε το διάστημα μεταξύ συντηρήσεων κατά 10 τοις εκατό. Ctrl+Κλικ για να μειώσετε το διάστημα μεταξύ συντηρήσεων κατά 5 τοις εκατό. STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Αλλάξτε τον τύπο διαστήματος επισκευών STR_VEHICLE_DETAILS_DEFAULT :Προκαθορισμένο @@ -4835,7 +4837,7 @@ STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Καθα STR_TIMETABLE_RESET_LATENESS :{BLACK}Επαναφορά Μετρητή Καθυστέρησης STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Επαναφορά του μετρητή καθυστέρησης, ώστε το όχημα να είναι στην ώρα του. Ctrl+Κλικ για επαναφορά του μετρητή όλης της ομάδας ώστε το τελευταίο όχημα να είναι στην ώρα του και τα υπόλοιπα νωρίτερα -STR_TIMETABLE_AUTOFILL :{BLACK}Αυτόματη Γέμιση +STR_TIMETABLE_AUTOFILL :{BLACK}Αυτόματη Συμπλήρωση STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Συμπληρώστε το δρομολόγιο αυτόματα με τις τιμές από το επόμενο ταξίδι. (Ctrl+Κλικ για να προσπαθήσει να κρατήσει τους χρόνους αναμονής) STR_TIMETABLE_EXPECTED :{BLACK}Αναμενόμενη @@ -4903,7 +4905,7 @@ STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Παρ STR_AI_CONFIG_AI :{SILVER}AI STR_AI_CONFIG_CHANGE_AI :{BLACK}Διάλεξε ΤΝ -STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Δέσμη Ενεργειών +STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Επιλογή Δέσμης Ενεργειών STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Φόρτωση άλλης δέσμης ενεργειών. Ctrl+Κλικ για εμφάνιση όλων των διαθέσιμων εκδόσεων STR_AI_CONFIG_CONFIGURE :{BLACK}Ρυθμίσεις STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Ρύθμιση των παραμέτρων της Δέσμης Ενεργειών @@ -5072,8 +5074,8 @@ STR_ERROR_ALREADY_LEVELLED :{WHITE}... ήδ STR_ERROR_BRIDGE_TOO_HIGH_AFTER_LOWER_LAND :{WHITE}Μετά την αλλαγή, η γέφυρα από πάνω του θα είναι πολύ ψηλή # Company related errors -STR_ERROR_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Δεν ήταν δυνατό να αλλάξει το όνομα της εταιρίας... -STR_ERROR_CAN_T_CHANGE_PRESIDENT :{WHITE}Δεν ήταν δυνατό να αλλάξει το όνομα του διευθυντή... +STR_ERROR_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Δεν μπορεί να αλλάξει το όνομα της εταιρίας... +STR_ERROR_CAN_T_CHANGE_PRESIDENT :{WHITE}Δεν μπορεί να αλλάξει το όνομα του διευθυντή... STR_ERROR_MAXIMUM_PERMITTED_LOAN :{WHITE}... το μέγιστο επιτρεπόμενο δάνειο είναι {CURRENCY_LONG} STR_ERROR_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Δεν μπορείτε να δανειστείτε περισσότερα χρήματα... @@ -5083,7 +5085,7 @@ STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Αδύν STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Δεν είναι δυνατό να δοθούν χρήματα που είναι δανεισμένα από τη τράπεζα... STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Δεν μπορείτε να δώσετε χρήματα σε αυτή την εταιρία... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Αδύνατη η εξαγορά της εταιρίας... -STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Δεν μπορεί να κατασκευαστεί αρχηγείο εταιρίας... +STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Δεν μπορεί να κατασκευαστεί έδρα εταιρίας... # Town related errors STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Αδύνατο να κατασκευαστούν πόλεις... @@ -5170,7 +5172,7 @@ STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Πολύ STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Δεν μπορεί να κατασκευαστεί σημείο καθοδήγησης τρένου εδώ... STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Δεν μπορεί να τοποθετηθεί σημαδούρα εδώ... -STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Αδύνατο να αλλαχτεί το όνομα του σημείου καθοδήγησης... +STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Δεν μπορεί να αλλάξει το όνομα του σημείου καθοδήγησης... STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Αδύνατο να αφαιρεθεί το σημείο καθοδήγησης τρένου από εδώ... STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Πρέπει να αφαιρεθεί το σημείο καθοδήγησης σιδηρόδρομου πρώτα @@ -5275,7 +5277,7 @@ STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Η γέ STR_ERROR_BRIDGE_TOO_HIGH_FOR_TERRAIN :{WHITE}Η γέφυρα είναι πολύ ψηλή για το έδαφος αυτό. STR_ERROR_START_AND_END_MUST_BE_IN :{WHITE}Η αρχή και το τέλος πρέπει να είναι σε ευθεία STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}... και τα δύο άκρα της γέφυρας πρέπει να είναι σε έδαφος -STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... η γέφυρα είναι πολλή μακρυά +STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... η γέφυρα είναι πολλή μακριά STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :{WHITE}Η γέφυρα θα καταλήξει εκτός χάρτη # Tunnel related errors @@ -5291,7 +5293,7 @@ STR_ERROR_TUNNEL_TOO_LONG :{WHITE}... το STR_ERROR_TOO_MANY_OBJECTS :{WHITE}... πάρα πολλά αντικείμενα STR_ERROR_CAN_T_BUILD_OBJECT :{WHITE}Δεν μπορεί να κατασκευαστεί το αντικείμενο... STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Αντικείμενο στη μέση -STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... κεντρικά γραφεία εταιρίας στη μέση +STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... έδρα εταιρίας στη μέση STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Αδύνατο να γίνει αγορά αυτής της περιοχής εδάφους... STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... είστε ήδη ιδιοκτήτης! STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}... έχετε φτάσει το όριο οικοδομήσεων @@ -5363,7 +5365,7 @@ STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Δεν STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Δεν μπορεί να πωληθεί το αεροσκάφος... STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Πάρα πολλά οχήματα στο παιχνίδι -STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Δεν μπορεί να αλλάξει το διάστημα της συντήρησης... +STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Δεν μπορεί να αλλάξει το διάστημα μεταξύ συντηρήσεων... STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... το όχημα καταστράφηκε @@ -5433,7 +5435,7 @@ STR_ERROR_TIMETABLE_NOT_STARTED :{WHITE}... το # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... πάρα πολλά σήματα STR_ERROR_CAN_T_PLACE_SIGN_HERE :{WHITE}Δεν γίνεται να τοποθετηθεί σήμα εδώ... -STR_ERROR_CAN_T_CHANGE_SIGN_NAME :{WHITE}Δεν γίνεται να αλλαχθεί το όνομα της πινακίδας... +STR_ERROR_CAN_T_CHANGE_SIGN_NAME :{WHITE}Δεν μπορεί να αλλάξει το όνομα της πινακίδας... STR_ERROR_CAN_T_DELETE_SIGN :{WHITE}Δεν μπορεί να διαγραφεί η πινακίδα... # Translatable comment for OpenTTD's desktop shortcut @@ -5447,11 +5449,11 @@ STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Αρχικά γ STR_BASEGRAPHICS_WIN_DESCRIPTION :Αρχικά γραφικά από το Transport Tycoon Deluxe έκδοση Windows. STR_BASESOUNDS_DOS_DESCRIPTION :Αρχικοί ήχοι από το Transport Tycoon Deluxe έκδοση DOS. STR_BASESOUNDS_WIN_DESCRIPTION :Αρχικοί ήχοι από το Transport Tycoon Deluxe έκδοση Windows. -STR_BASESOUNDS_NONE_DESCRIPTION :Ένα πάκετο ήχων χώρις ήχους. +STR_BASESOUNDS_NONE_DESCRIPTION :Πακέτο ήχων χωρίς ήχους. STR_BASEMUSIC_WIN_DESCRIPTION :Αρχική μουσική από το Transport Tycoon Deluxe έκδοση Windows. STR_BASEMUSIC_DOS_DESCRIPTION :Αρχική μουσική από το Transport Tycoon Deluxe έκδοση DOS. STR_BASEMUSIC_TTO_DESCRIPTION :Αρχική μουσική από το Transport Tycoon (Αρχικός Επεξεργαστής Κόσμου) έκδοση DOS. -STR_BASEMUSIC_NONE_DESCRIPTION :Ένα πάκετο μουσικής χωρίς πραγματική μουσική. +STR_BASEMUSIC_NONE_DESCRIPTION :Πακέτο μουσικής χωρίς πραγματική μουσική. ##id 0x2000 # Town building names @@ -5509,7 +5511,7 @@ STR_INDUSTRY_NAME_PAPER_MILL :{G=m}Μύλος STR_INDUSTRY_NAME_GOLD_MINE :{G=n}Χρυσωρυχείο STR_INDUSTRY_NAME_BANK_TROPIC_ARCTIC :{G=f}Τράπεζα STR_INDUSTRY_NAME_DIAMOND_MINE :{G=n}Αδαμαντορυχείο -STR_INDUSTRY_NAME_IRON_ORE_MINE :{G=n}Ορυχείο Μεταλλεύματος Σιδήρου +STR_INDUSTRY_NAME_IRON_ORE_MINE :{G=n}Ορυχείο Σιδηρομεταλλεύματος STR_INDUSTRY_NAME_FRUIT_PLANTATION :{G=f}Φυτεία Φρούτων STR_INDUSTRY_NAME_RUBBER_PLANTATION :{G=f}Φυτεία Λάστιχου STR_INDUSTRY_NAME_WATER_SUPPLY :{G=f}Προμήθεια Νερού @@ -5552,12 +5554,12 @@ STR_SV_STNAME_EAST :Ανατολι STR_SV_STNAME_WEST :Δυτικό {STRING} STR_SV_STNAME_CENTRAL :Κεντρικό {STRING} STR_SV_STNAME_TRANSFER :Μετεπιβίβαση {STRING} -STR_SV_STNAME_HALT :Όρια {STRING} +STR_SV_STNAME_HALT :Στάση {STRING} STR_SV_STNAME_VALLEY :Κοιλάδα {STRING} STR_SV_STNAME_HEIGHTS :Λόφοι {STRING} -STR_SV_STNAME_WOODS :Δάσος {STRING} +STR_SV_STNAME_WOODS :Άλσος {STRING} STR_SV_STNAME_LAKESIDE :Λίμνη {STRING} -STR_SV_STNAME_EXCHANGE :{STRING} Ανταλλαγής +STR_SV_STNAME_EXCHANGE :{STRING} Μετεπιβίβασης STR_SV_STNAME_AIRPORT :Αεροδρόμιο {STRING} STR_SV_STNAME_OILFIELD :Πετρελαιοπηγές {STRING} STR_SV_STNAME_MINES :Ορυχεία {STRING} @@ -5614,12 +5616,12 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_LIVESTOCK_VAN :Βαγόνι Μ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_GOODS_VAN :Βαγόνι Αγαθών STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_GRAIN_HOPPER :Βαγόνι Σιτηρών STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_WOOD_TRUCK :Βαγόνι Ξυλείας -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_IRON_ORE_HOPPER :Βαγόνι Μεταλλεύματος Σιδήρου +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_IRON_ORE_HOPPER :Βαγόνι Σιδηρομεταλλεύματος STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_STEEL_TRUCK :Βαγόνι Χάλυβα STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_ARMORED_VAN :Θωρακισμένο Βαγόνι STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FOOD_VAN :Βαγόνι Τροφίμων STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PAPER_TRUCK :Βαγόνι Χαρτιού -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COPPER_ORE_HOPPER :Βαγόνι Μεταλλευμάτων Χαλκού +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COPPER_ORE_HOPPER :Βαγόνι Μεταλλεύματος Χαλκού STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_WATER_TANKER :Βαγόνι Νερού STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FRUIT_TRUCK :Βαγόνι Φρούτων STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_RUBBER_TRUCK :Βαγόνι Λάστιχου @@ -5644,12 +5646,12 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_LIVESTOCK_VAN :Βαγόνι Μ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_GOODS_VAN :Βαγόνι Αγαθών STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_GRAIN_HOPPER :Φορτηγό Σιτηρών STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_WOOD_TRUCK :Βαγόνι Ξυλείας -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_IRON_ORE_HOPPER :Φορτηγό Σιδήρου +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_IRON_ORE_HOPPER :Φορτηγό Σιδηρομεταλλεύματος STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_STEEL_TRUCK :Βαγόνι Χάλυβα STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_ARMORED_VAN :Θωρακισμένο Βαγόνι STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FOOD_VAN :Βαγόνι Τροφίμων STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PAPER_TRUCK :Βαγόνι Χαρτιού -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COPPER_ORE_HOPPER :Βαγόνι Χαλκού +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COPPER_ORE_HOPPER :Βαγόνι Μεταλλεύματος Χαλκού STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_WATER_TANKER :Βαγόνι Νερού STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FRUIT_TRUCK :Βαγόνι Φρούτων STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_RUBBER_TRUCK :Βαγόνι Λάστιχου @@ -5676,12 +5678,12 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_LIVESTOCK_VAN :Βαγόνι Μ STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_GOODS_VAN :Βαγόνι Αγαθών STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_GRAIN_HOPPER :Βαγόνι Σιτηρών STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WOOD_TRUCK :Βαγόνι Ξυλείας -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_IRON_ORE_HOPPER :Βαγόνι Μεταλλεύματος Σιδήρου +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_IRON_ORE_HOPPER :Βαγόνι Σιδηρομεταλλεύματος STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_STEEL_TRUCK :Βαγόνι Χάλυβα STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_ARMORED_VAN :Θωρακισμένο Βαγόνι STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FOOD_VAN :Βαγόνι Τροφίμων STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PAPER_TRUCK :Βαγόνι Χαρτιού -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COPPER_ORE_HOPPER :Βαγόνι Χαλκού +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COPPER_ORE_HOPPER :Βαγόνι Μεταλλεύματος Χαλκού STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WATER_TANKER :Βαγόνι Νερού STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FRUIT_TRUCK :Βαγόνι Φρούτων STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_RUBBER_TRUCK :Βαγόνι Λάστιχου @@ -5728,9 +5730,9 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GRAIN_TRUCK :Φορτηγό STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_WOOD_TRUCK :Φορτηγό Ξυλείας Witcombe STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_WOOD_TRUCK :Φορτηγό Ξυλείας Foster STR_VEHICLE_NAME_ROAD_VEHICLE_MORELAND_WOOD_TRUCK :Φορτηγό Ξυλείας Moreland -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_IRON_ORE_TRUCK :Φορτηγό Μεταλλεύματος Σιδήρου MPS -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_IRON_ORE_TRUCK :Φορτηγό Μεταλλεύματος Σιδήρου Uhl -STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_IRON_ORE_TRUCK :Φορτηγό Μεταλλεύματος Σιδήρου Chippy +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_IRON_ORE_TRUCK :Φορτηγό Σιδηρομεταλλεύματος MPS +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_IRON_ORE_TRUCK :Φορτηγό Σιδηρομεταλλεύματος Uhl +STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_IRON_ORE_TRUCK :Φορτηγό Σιδηρομεταλλεύματος Chippy STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_STEEL_TRUCK :Φορτηγό Χάλυβα Balogh STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_STEEL_TRUCK :Φορτηγό Χάλυβα Uhl STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_STEEL_TRUCK :Φορτηγό Χάλυβα Kelling @@ -5743,9 +5745,9 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_FOOD_VAN :Ημιφορτ STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_PAPER_TRUCK :Φορτηγό Χαρτιού Uhl STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_PAPER_TRUCK :Φορτηγό Χαρτιού Balogh STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_PAPER_TRUCK :Φορτηγό Χαρτιού MPS -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_COPPER_ORE_TRUCK :Φορτηγό Χαλκού MPS -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_COPPER_ORE_TRUCK :Φορτηγό Χαλκού Uhl -STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_COPPER_ORE_TRUCK :Φορτηγό Χαλκού Goss +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_COPPER_ORE_TRUCK :Φορτηγό Μεταλλεύματος Χαλκού MPS +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_COPPER_ORE_TRUCK :Φορτηγό Μεταλλεύματος Χαλκού Uhl +STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_COPPER_ORE_TRUCK :Φορτηγό Μεταλλεύματος Χαλκού Goss STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_WATER_TANKER :Βυτίο Νερού Uhl STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_WATER_TANKER :Βυτίο Νερού Balogh STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_WATER_TANKER :Βυτίο Νερού MPS diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 49adbb4037..0cd2200e0f 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -401,6 +401,7 @@ STR_COLOUR_SECONDARY_ORANGE :Oranžinis/-ė STR_COLOUR_SECONDARY_BROWN :Rudas/-a STR_COLOUR_SECONDARY_GREY :Pilkas/-a STR_COLOUR_SECONDARY_WHITE :Baltas/-a +STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Tokia pati kaip ir pradinė # Units used in OpenTTD @@ -1200,10 +1201,10 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Pasirink # Autosave dropdown ###length 5 STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Išjungta -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_10_MINUTES :Kas 10min. -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_30_MINUTES :Kas 30min. -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES :Kas 60min. -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :Kas 120min. +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_10_MINUTES :Kas 10 minučių +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_30_MINUTES :Kas 30 minučių +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES :Kas 60 minučių +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :Kas 120 minučių STR_GAME_OPTIONS_LANGUAGE :{BLACK}Kalba STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Pasirinkite aplinkos kalbą @@ -1227,6 +1228,7 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Pažymė STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Dabartinė tvarkyklė: {STRING} STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Sąsajos dydis +STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Vilkite slankiklį, kad nustatyti sąsajos dydį. Vilkite laikant nuspaustą Ctrl klavišą nuolatiniam reguliavimui STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Automatinis dydžio nustatymas STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Pažymėkite šį langelį, kad automatiškai aptiktumėte sąsajos dydį @@ -1623,6 +1625,8 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Jokių STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Retesni STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normalus +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Leisti statyti geležinkelio pervažas konkurentams priklausančiuose keliuose ar bėgiuose: {STRING} +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Leisti statyti geležinkelio pervažas konkurentams priklausančiuose keliuose ar bėgiuose STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Leisti pravažiuojamąsias stoteles miesto priklausančiuose keliuose: {STRING} STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Leisti statyti pravažiuojamojo tipo stoteles miestams priklausiančiuose keliuose @@ -1636,6 +1640,8 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Infrastruktūro STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Kompanijos pradinė spalva: {STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Pasirinkite pradinę kompanijos spalvą +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Kompanijos antrinė spalva: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Pasirinkite antrinę spalvą kompanijai, jei naudojamas plėtinys, kuriam jos reikia STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Oro uostai niekada nepasensta: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Kartą atsiradę, oro uostų tipai niekada nebepasens ir galimybė juos statyti niekuomet nebus pašalinta @@ -2216,7 +2222,8 @@ STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Nustačius šį STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Tolimesni maršrutai nebus planuojami kol trumpesniųjų apkrova nepasieks bent: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Dažnai tarp dviejų stotelių yra ne vienas galimas maršrutas. „Cargodist“ posistemė pirmiausia stengsis krovinius nukreipti trumpiausiu įmanomu maršrutu, o kai šis bus pilnai apkrautas, imtis tolimesniųjų. Maršruto apkrova yra apytiksliai įvertinama atsižvelgiant į maršruto pajėgumus ir planuojamus krovinių srautus. Kai tik „Cargodist“ posistemė pilnai apkraus visus galimus maršrutus, ji vėl ims didinti apkrovas visiems maršrutams, pradėdama nuo pačių talpiausiųjų, taip faktiškai juos perkraudama. Tačiau, vėlgi, „Cargodist“ algoritmas yra apytikslis, todėl įmanoma, kad trumpesni maršrutai jau bus perkrauti dar pilnai neišnaudojus tolimesniųjų. Šia nuostata nustatomas slenkstis, ties kuriuo trumpesnis maršrutas jau laikomas optimaliai apkrautu ir kroviniai pradedami skirstyti tolimesniais maršrutais. Rekomenduojama nustatyti mažiau, nei 100%, kad būtų išvengta perkrovų dėl netikslaus „Cargodist“ veikimo -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Greičio vienetai: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Greičio vienetai (sausumoje): {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Greičio vienetai (jūroje): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Vienetai, kuriais matuojamas greitis STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :imperiniai (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :metriniai (km/h) @@ -3517,8 +3524,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Ar jus STR_GENERATION_PROGRESS :{WHITE}{NUM}% užbaigta STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Pasaulio generacija +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Peizažo generavimas STR_GENERATION_RIVER_GENERATION :{BLACK}Upių generavimas STR_GENERATION_CLEARING_TILES :{BLACK}Daubų ir uolų generacija +STR_GENERATION_TOWN_GENERATION :{BLACK}Miestų generavimas +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Pramonės generavimas STR_GENERATION_OBJECT_GENERATION :{BLACK}Nejudinama generacija STR_GENERATION_TREE_GENERATION :{BLACK}Medžių generacija STR_GENERATION_SETTINGUP_GAME :{BLACK}Sukurti zaidima @@ -4540,10 +4550,10 @@ STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Nėra ener STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Laukia laisvo kelio STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Paskirties oro uostas per toli -STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Vyksta į {0:STATION} -STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Neturi užduočių, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Vyksta į {0:WAYPOINT} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Vyksta į {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Vyksta į‌ ‌{0:STATION} +STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Neturi užduočių +STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Vyksta į ‌{0:WAYPOINT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Vyksta į ‌{0:DEPOT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Vyksta techninei apžiūrai į {0:DEPOT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Iškrauti ir vykti į techninę apžiūrą į {0:DEPOT} @@ -4743,7 +4753,7 @@ STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}Reikšm STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Įveskite reikšmę, su kuria bus lyginama STR_ORDERS_SKIP_BUTTON :{BLACK}Praleisti -STR_ORDERS_SKIP_TOOLTIP :{BLACK}Praleisti šiuo metų vykdomą užduotį ir imtis kitos. Spragtelėjus laikant nuspaustą Ctrl klavišą, bus pradėta vykdyti pažymėtoji užduotis +STR_ORDERS_SKIP_TOOLTIP :{BLACK}Praleisti šiuo metų vykdomą užduotį ir imtis kitos. Spragtelėkite laikant nuspaustą Ctrl klavišą, kad pradėtumėte vykdyti pasirinktą užduotį STR_ORDERS_DELETE_BUTTON :{BLACK}Šalinti STR_ORDERS_DELETE_TOOLTIP :{BLACK}Šalinti pažymėtąją užduotį @@ -4875,6 +4885,7 @@ STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Tvarkara STR_TIMETABLE_START :{BLACK}Pradėti tvarkaraštį +STR_TIMETABLE_START_SECONDS_QUERY :Sekundės iki tvarkaraščio pradžios STR_TIMETABLE_CHANGE_TIME :{BLACK}Keisti trukmę STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Keisti pažymėtos užduoties trukmę diff --git a/src/lang/polish.txt b/src/lang/polish.txt index f6926dc770..ac97b5f02b 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2865,6 +2865,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Twoja nazwa gra STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Działania administracyjne, które można wykonać dla tego klienta STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Działania administracyjne, które można wykonać dla tej firmy STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Dołącz do tej firmy +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Zezwól temu klientowi na dołączenie do twojej firmy STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Wyślij wiadomość do tego gracza STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Wyślij wiadomość do wszystkich graczy tej firmy STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Wyślij wiadomość do wszystkich obserwatorów From 5b35fbd6f5ac659e2ccd11957a68b7554916e845 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 9 May 2024 07:01:56 +0100 Subject: [PATCH 488/695] Change: Use button aspect ratio for buttons that show vehicle icons. (#12636) --- src/news_gui.cpp | 2 +- src/waypoint_gui.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 24827d0f19..b7b16dc718 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -203,7 +203,7 @@ static constexpr NWidgetPart _nested_small_news_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_LIGHT_BLUE, WID_N_CLOSEBOX), NWidget(WWT_EMPTY, COLOUR_LIGHT_BLUE, WID_N_CAPTION), SetFill(1, 0), - NWidget(WWT_TEXTBTN, COLOUR_LIGHT_BLUE, WID_N_SHOW_GROUP), SetMinimalSize(14, 11), SetResize(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_LIGHT_BLUE, WID_N_SHOW_GROUP), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetResize(1, 0), SetDataTip(STR_NULL /* filled in later */, STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP), EndContainer(), diff --git a/src/waypoint_gui.cpp b/src/waypoint_gui.cpp index f73e301a17..2259b8b74c 100644 --- a/src/waypoint_gui.cpp +++ b/src/waypoint_gui.cpp @@ -177,7 +177,7 @@ static constexpr NWidgetPart _nested_waypoint_view_widgets[] = { EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_W_CATCHMENT), SetMinimalSize(50, 12), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_BUTTON_CATCHMENT, STR_TOOLTIP_CATCHMENT), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_W_SHOW_VEHICLES), SetMinimalSize(15, 12), SetDataTip(STR_SHIP, STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_W_SHOW_VEHICLES), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetDataTip(STR_SHIP, STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP), NWidget(WWT_RESIZEBOX, COLOUR_GREY), EndContainer(), }; From ec61951512f4ead39090133e830a90ec546409f8 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 9 May 2024 07:03:02 +0100 Subject: [PATCH 489/695] Cleanup: Remove Windows 9x font locale workaround. (#12644) --- src/os/windows/font_win32.cpp | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/src/os/windows/font_win32.cpp b/src/os/windows/font_win32.cpp index d5c50d0f41..a1293b3e47 100644 --- a/src/os/windows/font_win32.cpp +++ b/src/os/windows/font_win32.cpp @@ -65,21 +65,7 @@ static int CALLBACK EnumFontCallback(const ENUMLOGFONTEX *logfont, const NEWTEXT if (info->callback->Monospace() && (logfont->elfLogFont.lfPitchAndFamily & (FF_MODERN | FIXED_PITCH)) != (FF_MODERN | FIXED_PITCH)) return 1; /* The font has to have at least one of the supported locales to be usable. */ - if ((metric->ntmFontSig.fsCsb[0] & info->locale.lsCsbSupported[0]) == 0 && (metric->ntmFontSig.fsCsb[1] & info->locale.lsCsbSupported[1]) == 0) { - /* On win9x metric->ntmFontSig seems to contain garbage. */ - FONTSIGNATURE fs; - memset(&fs, 0, sizeof(fs)); - HFONT font = CreateFontIndirect(&logfont->elfLogFont); - if (font != nullptr) { - HDC dc = GetDC(nullptr); - HGDIOBJ oldfont = SelectObject(dc, font); - GetTextCharsetInfo(dc, &fs, 0); - SelectObject(dc, oldfont); - ReleaseDC(nullptr, dc); - DeleteObject(font); - } - if ((fs.fsCsb[0] & info->locale.lsCsbSupported[0]) == 0 && (fs.fsCsb[1] & info->locale.lsCsbSupported[1]) == 0) return 1; - } + if ((metric->ntmFontSig.fsCsb[0] & info->locale.lsCsbSupported[0]) == 0 && (metric->ntmFontSig.fsCsb[1] & info->locale.lsCsbSupported[1]) == 0) return 1; char font_name[MAX_PATH]; convert_from_fs((const wchar_t *)logfont->elfFullName, font_name, lengthof(font_name)); From 59ac27f38508bf0cbb0b4d9c700d36447a806564 Mon Sep 17 00:00:00 2001 From: Koen Bussemaker Date: Thu, 9 May 2024 09:49:18 +0200 Subject: [PATCH 490/695] Fix #12643: _is_water_region_valid is not cleared/reset in AllocateWaterRegions --- src/pathfinder/water_regions.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pathfinder/water_regions.cpp b/src/pathfinder/water_regions.cpp index d9daf3449f..0310f2c42a 100644 --- a/src/pathfinder/water_regions.cpp +++ b/src/pathfinder/water_regions.cpp @@ -405,6 +405,7 @@ void AllocateWaterRegions() _water_regions.clear(); _water_regions.reserve(number_of_regions); + _is_water_region_valid.clear(); _is_water_region_valid.resize(number_of_regions, false); Debug(map, 2, "Allocating {} x {} water regions", GetWaterRegionMapSizeX(), GetWaterRegionMapSizeY()); From ed888c617baf2d52b1dce8406a80795b46f5dfd9 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Tue, 7 May 2024 16:25:30 +0200 Subject: [PATCH 491/695] Codechange: just use ::Post over ::SendNet for creating new companies --- src/network/network_client.cpp | 2 +- src/network/network_gui.cpp | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 2aca0fc6ca..b62b716b63 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -886,7 +886,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_DONE(Packet Debug(net, 9, "Client::join_status = REGISTERING"); _network_join_status = NETWORK_JOIN_STATUS_REGISTERING; ShowJoinStatusWindow(); - Command::SendNet(STR_NULL, _local_company, CCA_NEW, INVALID_COMPANY, CRR_NONE, INVALID_CLIENT_ID); + Command::Post(CCA_NEW, INVALID_COMPANY, CRR_NONE, _network_own_client_id); } } else { /* take control over an existing company */ diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 323188faea..e8f20eccf9 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1460,11 +1460,7 @@ private: */ static void OnClickCompanyNew([[maybe_unused]] NetworkClientListWindow *w, [[maybe_unused]] Point pt, CompanyID) { - if (_network_server) { - Command::Post(CCA_NEW, INVALID_COMPANY, CRR_NONE, _network_own_client_id); - } else { - Command::SendNet(STR_NULL, _local_company, CCA_NEW, INVALID_COMPANY, CRR_NONE, INVALID_CLIENT_ID); - } + Command::Post(CCA_NEW, INVALID_COMPANY, CRR_NONE, _network_own_client_id); } /** From a31367618978f26d3007899505bd3ca3d6e1d2fd Mon Sep 17 00:00:00 2001 From: Rubidium Date: Tue, 7 May 2024 16:45:02 +0200 Subject: [PATCH 492/695] Doc: reason for using ::SendNet over ::Post in few cases --- src/company_cmd.cpp | 8 ++++++-- src/network/network_server.cpp | 7 +++++++ src/settings.cpp | 5 +++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 4dfce1c47d..fa4dc0e8ef 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -898,8 +898,12 @@ CommandCost CmdCompanyCtrl(DoCommandFlag flags, CompanyCtrlAction cca, CompanyID assert(_local_company == COMPANY_SPECTATOR); SetLocalCompany(c->index); - /* In network games, we need to try setting the company manager face here to sync it to all clients. - * If a favorite company manager face is selected, choose it. Otherwise, use a random face. */ + /* + * If a favorite company manager face is selected, choose it. Otherwise, use a random face. + * Because this needs to be synchronised over the network, only the client knows + * its configuration and we are currently in the execution of a command, we have + * to circumvent the normal ::Post logic for commands and just send the command. + */ if (_company_manager_face != 0) Command::SendNet(STR_NULL, c->index, _company_manager_face); /* Now that we have a new company, broadcast our company settings to diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 41f2b9cc50..099479c158 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -2157,6 +2157,13 @@ void NetworkServerNewCompany(const Company *c, NetworkClientInfo *ci) /* ci is nullptr when replaying, or for AIs. In neither case there is a client. */ ci->client_playas = c->index; NetworkUpdateClientInfo(ci->client_id); + + /* + * This function is called from a command, but is only called for the server. + * The client information is managed out-of-band from the commands, so to not have a + * different state/president/company name in the different clients, we need to + * circumvent the normal ::Post logic and go directly to sending the command. + */ Command::SendNet(STR_NULL, c->index, ci->public_key); Command::SendNet(STR_NULL, c->index, ci->client_name); diff --git a/src/settings.cpp b/src/settings.cpp index ed2f239d8f..293c20fb95 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1790,6 +1790,11 @@ void SyncCompanySettings() const SettingDesc *sd = GetSettingDesc(desc); uint32_t old_value = (uint32_t)sd->AsIntSetting()->Read(old_object); uint32_t new_value = (uint32_t)sd->AsIntSetting()->Read(new_object); + /* + * This is called from a command, and since it contains local configuration information + * that the rest of the clients do not know about, we need to circumvent the normal ::Post + * local command validation and immediately send the command to the server. + */ if (old_value != new_value) Command::SendNet(STR_NULL, _local_company, sd->GetName(), new_value); } } From cef9417c9f0c9de0ff2f49422481a90a50165ec2 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Tue, 7 May 2024 16:49:04 +0200 Subject: [PATCH 493/695] Fix: always allow setting company settings, company/president name/face There is a nice feature that synchronises the client settings upon setting up the company. Before this, those commands would not be executed when no-actions-while-paused is set. This means that, silently and depending on the server configuration, your wished for configuration might not be there. Similarly there is the president's face that's being set while creating a new company and setting of the president/company name upon creation, when no-actions-while-paused is set. So, just allow these operations also while paused to get a uniform experience when joining. To keep the UI somewhat consistent, apply this "freedom" also to the other bits set from the company UI; specifically company name and company colour. --- src/command.cpp | 2 +- src/company_cmd.h | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/command.cpp b/src/command.cpp index 1d6a530b8c..b975c51fbb 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -151,7 +151,7 @@ bool IsCommandAllowedWhilePaused(Commands cmd) CMDPL_NO_CONSTRUCTION, ///< CMDT_VEHICLE_MANAGEMENT CMDPL_NO_CONSTRUCTION, ///< CMDT_ROUTE_MANAGEMENT CMDPL_NO_CONSTRUCTION, ///< CMDT_OTHER_MANAGEMENT - CMDPL_NO_CONSTRUCTION, ///< CMDT_COMPANY_SETTING + CMDPL_NO_ACTIONS, ///< CMDT_COMPANY_SETTING CMDPL_NO_ACTIONS, ///< CMDT_SERVER_SETTING CMDPL_NO_ACTIONS, ///< CMDT_CHEAT }; diff --git a/src/company_cmd.h b/src/company_cmd.h index 5f818c4b8f..4ee9efc1e9 100644 --- a/src/company_cmd.h +++ b/src/company_cmd.h @@ -28,9 +28,9 @@ CommandCost CmdSetCompanyColour(DoCommandFlag flags, LiveryScheme scheme, bool p DEF_CMD_TRAIT(CMD_COMPANY_CTRL, CmdCompanyCtrl, CMD_SPECTATOR | CMD_CLIENT_ID | CMD_NO_EST, CMDT_SERVER_SETTING) DEF_CMD_TRAIT(CMD_COMPANY_ADD_ALLOW_LIST, CmdCompanyAddAllowList, CMD_NO_EST, CMDT_SERVER_SETTING) DEF_CMD_TRAIT(CMD_GIVE_MONEY, CmdGiveMoney, 0, CMDT_MONEY_MANAGEMENT) -DEF_CMD_TRAIT(CMD_RENAME_COMPANY, CmdRenameCompany, 0, CMDT_OTHER_MANAGEMENT) -DEF_CMD_TRAIT(CMD_RENAME_PRESIDENT, CmdRenamePresident, 0, CMDT_OTHER_MANAGEMENT) -DEF_CMD_TRAIT(CMD_SET_COMPANY_MANAGER_FACE, CmdSetCompanyManagerFace, 0, CMDT_OTHER_MANAGEMENT) -DEF_CMD_TRAIT(CMD_SET_COMPANY_COLOUR, CmdSetCompanyColour, 0, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_RENAME_COMPANY, CmdRenameCompany, 0, CMDT_COMPANY_SETTING) +DEF_CMD_TRAIT(CMD_RENAME_PRESIDENT, CmdRenamePresident, 0, CMDT_COMPANY_SETTING) +DEF_CMD_TRAIT(CMD_SET_COMPANY_MANAGER_FACE, CmdSetCompanyManagerFace, 0, CMDT_COMPANY_SETTING) +DEF_CMD_TRAIT(CMD_SET_COMPANY_COLOUR, CmdSetCompanyColour, 0, CMDT_COMPANY_SETTING) #endif /* COMPANY_CMD_H */ From a5c2543efc3e3dc482bba8fab26c66009ca51e1e Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 10 May 2024 04:40:29 +0000 Subject: [PATCH 494/695] Update: Translations from eints chinese (simplified): 7 changes by WenSimEHRP, 4 changes by ahyangyi --- src/lang/simplified_chinese.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 1f46093f25..1394e98f8a 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -955,6 +955,7 @@ STR_GAME_OPTIONS_VOLUME :音量 STR_GAME_OPTIONS_SFX_VOLUME :音效 STR_GAME_OPTIONS_MUSIC_VOLUME :音乐 +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}货币单位 STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}货币单位选择 @@ -1052,6 +1053,7 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}如果 STR_GAME_OPTIONS_GUI_FONT_AA :字体抗锯齿 STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}勾选此框以对游戏字体应用抗锯齿 +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}自动体验调查 STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}参与自动体验调查 @@ -1080,6 +1082,8 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}基础 STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}选择要使用的基础音乐组 STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}有关基础音乐组的附加信息 +STR_GAME_OPTIONS_ONLINE_CONTENT :获取内容 +STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :查询并下载最新内容 STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(未安装社交平台插件) @@ -1823,6 +1827,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :如果没有为 STR_CONFIG_SETTING_SERVINT_SHIPS :船只默认保养周期:{STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :如果没有为船只设定保养周期,按照这里设定的默认保养周期执行 ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}日 +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}分 +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :关闭 @@ -2478,6 +2485,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :你的玩家名 STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}要在此客户端执行的管理命令 STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}要在此公司执行的管理命令 STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}加入该公司 +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}授权此客户端加入你的公司 STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}给这位玩家发消息 STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}给公司中的所有玩家发消息 STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}给所有旁观者发消息 @@ -3469,7 +3477,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :道路类型 STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x 参数 (十六进制) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}对齐中的 Sprite:({STRING}:{NUM}) STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}对齐中的 Sprite:Action 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}对齐中的 Sprite:Action 0x5, 类别 {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}下一个 sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}继续处理下个正常的图形元素,略过任何虚位/重新着色/文字字型相关的图形元素;并且在处理到最后的图形元素后,返回第一个图形元素继续处理。 STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}前往 sprite @@ -3478,6 +3488,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}上一 STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}继续处理上一个正常的图形元素,略过任何虚位/重新着色/文字字型相关的图形元素;并且在处理到第一个图形元素后,返回最后的图形元素继续处理。 STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}显示目前选取的 sprite。当 sprite 正在描绘时会忽略其定位。 STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}从 X 及 Y 座标方向移动图形元素。如按住 Ctrl 键再点击,可一次移动 8 个单位 +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}偏移居中 From 55a7c59d13782dabd4dceb00e9b8a60e9569a5cd Mon Sep 17 00:00:00 2001 From: merni-ns Date: Sat, 2 Mar 2024 18:40:00 +0530 Subject: [PATCH 495/695] Remove: NPF and pathfinder change settings --- src/debug.cpp | 2 - src/debug.h | 1 - src/lang/english.txt | 9 - src/misc.cpp | 3 - src/pathfinder/npf/CMakeLists.txt | 2 - src/pathfinder/npf/aystar.cpp | 2 +- src/pathfinder/npf/npf.cpp | 1338 ------------------- src/pathfinder/npf/npf_func.h | 92 -- src/pathfinder/pathfinder_type.h | 12 - src/roadveh_cmd.cpp | 21 +- src/saveload/afterload.cpp | 19 - src/saveload/compat/settings_sl_compat.h | 34 +- src/settings_gui.cpp | 3 - src/settings_type.h | 37 - src/ship_cmd.cpp | 22 +- src/table/settings/pathfinding_settings.ini | 220 --- src/train_cmd.cpp | 37 +- src/vehicle_type.h | 7 - 18 files changed, 21 insertions(+), 1840 deletions(-) delete mode 100644 src/pathfinder/npf/npf.cpp delete mode 100644 src/pathfinder/npf/npf_func.h diff --git a/src/debug.cpp b/src/debug.cpp index d12265a099..8ba96ef942 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -42,7 +42,6 @@ int _debug_misc_level; int _debug_net_level; int _debug_sprite_level; int _debug_oldloader_level; -int _debug_npf_level; int _debug_yapf_level; int _debug_fontcache_level; int _debug_script_level; @@ -68,7 +67,6 @@ static const DebugLevel _debug_levels[] = { DEBUG_LEVEL(net), DEBUG_LEVEL(sprite), DEBUG_LEVEL(oldloader), - DEBUG_LEVEL(npf), DEBUG_LEVEL(yapf), DEBUG_LEVEL(fontcache), DEBUG_LEVEL(script), diff --git a/src/debug.h b/src/debug.h index de91c21e39..c5afb9180a 100644 --- a/src/debug.h +++ b/src/debug.h @@ -44,7 +44,6 @@ extern int _debug_misc_level; extern int _debug_net_level; extern int _debug_sprite_level; extern int _debug_oldloader_level; -extern int _debug_npf_level; extern int _debug_yapf_level; extern int _debug_fontcache_level; extern int _debug_script_level; diff --git a/src/lang/english.txt b/src/lang/english.txt index 916d08b45d..4e804cd9c2 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2130,17 +2130,8 @@ STR_CONFIG_SETTING_AI :Competitors STR_CONFIG_SETTING_AI_NPC :Computer players STR_CONFIG_SETTING_NETWORK :Network -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Pathfinder for trains: {STRING2} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Path finder to use for trains -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Pathfinder for road vehicles: {STRING2} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Path finder to use for road vehicles -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Pathfinder for ships: {STRING2} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Path finder to use for ships STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatic reversing at signals: {STRING2} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Allow trains to reverse on a signal, if they waited there a long time -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recommended) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Change setting value diff --git a/src/misc.cpp b/src/misc.cpp index 9137c075b6..72701ff23c 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -54,7 +54,6 @@ void InitializeObjects(); void InitializeTrees(); void InitializeCompanies(); void InitializeCheats(); -void InitializeNPF(); void InitializeOldNames(); /** @@ -149,8 +148,6 @@ void InitializeGame(uint size_x, uint size_y, bool reset_date, bool reset_settin InitializeIndustries(); InitializeObjects(); - InitializeNPF(); - InitializeCompanies(); AI::Initialize(); Game::Initialize(); diff --git a/src/pathfinder/npf/CMakeLists.txt b/src/pathfinder/npf/CMakeLists.txt index e3ace57e52..8a79949dce 100644 --- a/src/pathfinder/npf/CMakeLists.txt +++ b/src/pathfinder/npf/CMakeLists.txt @@ -1,8 +1,6 @@ add_files( aystar.cpp aystar.h - npf.cpp - npf_func.h queue.cpp queue.h ) diff --git a/src/pathfinder/npf/aystar.cpp b/src/pathfinder/npf/aystar.cpp index b52b762d84..31cdd13de1 100644 --- a/src/pathfinder/npf/aystar.cpp +++ b/src/pathfinder/npf/aystar.cpp @@ -168,7 +168,7 @@ int AyStar::Loop() if (current == nullptr) return AYSTAR_EMPTY_OPENLIST; /* Check for end node and if found, return that code */ - if (this->EndNodeCheck(this, current) == AYSTAR_FOUND_END_NODE && !CheckIgnoreFirstTile(¤t->path)) { + if (this->EndNodeCheck(this, current) == AYSTAR_FOUND_END_NODE && (¤t->path)->parent != nullptr) { if (this->FoundEndNode != nullptr) { this->FoundEndNode(this, current); } diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp deleted file mode 100644 index 5ac43cd8c9..0000000000 --- a/src/pathfinder/npf/npf.cpp +++ /dev/null @@ -1,1338 +0,0 @@ -/* - * 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 npf.cpp Implementation of the NPF pathfinder. */ - -#include "../../stdafx.h" -#include "../../debug.h" -#include "../../network/network.h" -#include "../../viewport_func.h" -#include "../../ship.h" -#include "../../roadstop_base.h" -#include "../../vehicle_func.h" -#include "../pathfinder_func.h" -#include "../pathfinder_type.h" -#include "../follow_track.hpp" -#include "aystar.h" - -#include "../../safeguards.h" - -static const uint NPF_HASH_BITS = 12; ///< The size of the hash used in pathfinding. Just changing this value should be sufficient to change the hash size. Should be an even value. -/* Do no change below values */ -static const uint NPF_HASH_SIZE = 1 << NPF_HASH_BITS; -static const uint NPF_HASH_HALFBITS = NPF_HASH_BITS / 2; -static const uint NPF_HASH_HALFMASK = (1 << NPF_HASH_HALFBITS) - 1; - -/** Meant to be stored in AyStar.targetdata */ -struct NPFFindStationOrTileData { - TileIndex dest_coords; ///< An indication of where the station is, for heuristic purposes, or the target tile - StationID station_index; ///< station index we're heading for, or INVALID_STATION when we're heading for a tile - bool reserve_path; ///< Indicates whether the found path should be reserved - StationType station_type; ///< The type of station we're heading for - bool not_articulated; ///< The (road) vehicle is not articulated - const Vehicle *v; ///< The vehicle we are pathfinding for -}; - -/** Indices into AyStar.userdata[] */ -struct AyStarUserData { - Owner owner; - TransportType type; - RailTypes railtypes; - RoadTypes roadtypes; - uint subtype; -}; - -/** Indices into AyStarNode.userdata[] */ -enum AyStarNodeUserDataType { - NPF_TRACKDIR_CHOICE = 0, ///< The trackdir chosen to get here - NPF_NODE_FLAGS, -}; - -/** Flags for AyStarNode.userdata[NPF_NODE_FLAGS]. Use NPFSetFlag() and NPFGetFlag() to use them. */ -enum NPFNodeFlag { - NPF_FLAG_SEEN_SIGNAL, ///< Used to mark that a signal was seen on the way, for rail only - NPF_FLAG_2ND_SIGNAL, ///< Used to mark that two signals were seen, rail only - NPF_FLAG_3RD_SIGNAL, ///< Used to mark that three signals were seen, rail only - NPF_FLAG_REVERSE, ///< Used to mark that this node was reached from the second start node, if applicable - NPF_FLAG_LAST_SIGNAL_RED, ///< Used to mark that the last signal on this path was red - NPF_FLAG_LAST_SIGNAL_BLOCK, ///< Used to mark that the last signal on this path was a block signal - NPF_FLAG_IGNORE_START_TILE, ///< Used to mark that the start tile is invalid, and searching should start from the second tile on - NPF_FLAG_TARGET_RESERVED, ///< Used to mark that the possible reservation target is already reserved - NPF_FLAG_IGNORE_RESERVED, ///< Used to mark that reserved tiles should be considered impassable -}; - -/** Meant to be stored in AyStar.userpath */ -struct NPFFoundTargetData { - uint best_bird_dist; ///< The best heuristic found. Is 0 if the target was found - uint best_path_dist; ///< The shortest path. Is UINT_MAX if no path is found - Trackdir best_trackdir; ///< The trackdir that leads to the shortest path/closest birds dist - AyStarNode node; ///< The node within the target the search led us to - bool res_okay; ///< True if a path reservation could be made -}; - -static AyStar _npf_aystar; - -/* The cost of each trackdir. A diagonal piece is the full NPF_TILE_LENGTH, - * the shorter piece is sqrt(2)/2*NPF_TILE_LENGTH =~ 0.7071 - */ -#define NPF_STRAIGHT_LENGTH (uint)(NPF_TILE_LENGTH * STRAIGHT_TRACK_LENGTH) -static const uint _trackdir_length[TRACKDIR_END] = { - NPF_TILE_LENGTH, NPF_TILE_LENGTH, NPF_STRAIGHT_LENGTH, NPF_STRAIGHT_LENGTH, NPF_STRAIGHT_LENGTH, NPF_STRAIGHT_LENGTH, - 0, 0, - NPF_TILE_LENGTH, NPF_TILE_LENGTH, NPF_STRAIGHT_LENGTH, NPF_STRAIGHT_LENGTH, NPF_STRAIGHT_LENGTH, NPF_STRAIGHT_LENGTH -}; - -/** - * Returns the current value of the given flag on the given AyStarNode. - */ -static inline bool NPFGetFlag(const AyStarNode *node, NPFNodeFlag flag) -{ - return HasBit(node->user_data[NPF_NODE_FLAGS], flag); -} - -/** - * Sets the given flag on the given AyStarNode to the given value. - */ -static inline void NPFSetFlag(AyStarNode *node, NPFNodeFlag flag, bool value) -{ - SB(node->user_data[NPF_NODE_FLAGS], flag, 1, value); -} - -bool CheckIgnoreFirstTile(const PathNode *node) -{ - return (node->parent == nullptr && HasBit(node->node.user_data[NPF_NODE_FLAGS], NPF_FLAG_IGNORE_START_TILE)); -} - -/** - * Calculates the minimum distance travelled to get from t0 to t1 when only - * using tracks (ie, only making 45 degree turns). Returns the distance in the - * NPF scale, ie the number of full tiles multiplied by NPF_TILE_LENGTH to - * prevent rounding. - */ -static uint NPFDistanceTrack(TileIndex t0, TileIndex t1) -{ - const uint dx = Delta(TileX(t0), TileX(t1)); - const uint dy = Delta(TileY(t0), TileY(t1)); - - const uint straightTracks = 2 * std::min(dx, dy); // The number of straight (not full length) tracks - /* OPTIMISATION: - * Original: diagTracks = max(dx, dy) - min(dx,dy); - * Proof: - * (dx+dy) - straightTracks == (min + max) - straightTracks = min + max - 2 * min = max - min */ - const uint diagTracks = dx + dy - straightTracks; // The number of diagonal (full tile length) tracks. - - /* Don't factor out NPF_TILE_LENGTH below, this will round values and lose - * precision */ - return diagTracks * NPF_TILE_LENGTH + straightTracks * NPF_TILE_LENGTH * STRAIGHT_TRACK_LENGTH; -} - -/** - * Calculates a hash value for use in the NPF. - * @param tile The TileIndex of the tile to hash - * @param dir The Trackdir of the track on the tile. - * - * @todo Think of a better hash. - */ -static uint NPFHash(TileIndex tile, Trackdir dir) -{ - /* TODO: think of a better hash? */ - uint part1 = TileX(tile) & NPF_HASH_HALFMASK; - uint part2 = TileY(tile) & NPF_HASH_HALFMASK; - - assert(IsValidTrackdir(dir)); - assert(IsValidTile(tile)); - return ((part1 << NPF_HASH_HALFBITS | part2) + (NPF_HASH_SIZE * dir / TRACKDIR_END)) % NPF_HASH_SIZE; -} - -static int32_t NPFCalcZero(AyStar *, AyStarNode *, OpenListNode *) -{ - return 0; -} - -/* Calculates the heuristic to the target station or tile. For train stations, it - * takes into account the direction of approach. - */ -static int32_t NPFCalcStationOrTileHeuristic(AyStar *as, AyStarNode *current, OpenListNode *) -{ - NPFFindStationOrTileData *fstd = (NPFFindStationOrTileData*)as->user_target; - NPFFoundTargetData *ftd = (NPFFoundTargetData*)as->user_path; - TileIndex from = current->tile; - TileIndex to = fstd->dest_coords; - uint dist; - AyStarUserData *user = (AyStarUserData *)as->user_data; - - /* aim for the closest station tile */ - if (fstd->station_index != INVALID_STATION) { - to = CalcClosestStationTile(fstd->station_index, from, fstd->station_type); - } - - if (user->type == TRANSPORT_ROAD) { - /* Since roads only have diagonal pieces, we use manhattan distance here */ - dist = DistanceManhattan(from, to) * NPF_TILE_LENGTH; - } else { - /* Ships and trains can also go diagonal, so the minimum distance is shorter */ - dist = NPFDistanceTrack(from, to); - } - - Debug(npf, 4, "Calculating H for: ({}, {}). Result: {}", TileX(current->tile), TileY(current->tile), dist); - - if (dist < ftd->best_bird_dist) { - ftd->best_bird_dist = dist; - ftd->best_trackdir = (Trackdir)current->user_data[NPF_TRACKDIR_CHOICE]; - } - return dist; -} - - -/* Fills AyStarNode.user_data[NPF_TRACKDIRCHOICE] with the chosen direction to - * get here, either getting it from the current choice or from the parent's - * choice */ -static void NPFFillTrackdirChoice(AyStarNode *current, OpenListNode *parent) -{ - if (parent->path.parent == nullptr) { - Trackdir trackdir = current->direction; - /* This is a first order decision, so we'd better save the - * direction we chose */ - current->user_data[NPF_TRACKDIR_CHOICE] = trackdir; - Debug(npf, 6, "Saving trackdir: 0x{:X}", trackdir); - } else { - /* We've already made the decision, so just save our parent's decision */ - current->user_data[NPF_TRACKDIR_CHOICE] = parent->path.node.user_data[NPF_TRACKDIR_CHOICE]; - } -} - -/* Will return the cost of the tunnel. If it is an entry, it will return the - * cost of that tile. If the tile is an exit, it will return the tunnel length - * including the exit tile. Requires that this is a Tunnel tile */ -static uint NPFTunnelCost(AyStarNode *current) -{ - DiagDirection exitdir = TrackdirToExitdir(current->direction); - TileIndex tile = current->tile; - if (GetTunnelBridgeDirection(tile) == ReverseDiagDir(exitdir)) { - /* We just popped out if this tunnel, since were - * facing the tunnel exit */ - return NPF_TILE_LENGTH * (GetTunnelBridgeLength(current->tile, GetOtherTunnelEnd(current->tile)) + 1); - /* @todo: Penalty for tunnels? */ - } else { - /* We are entering the tunnel, the enter tile is just a - * straight track */ - return NPF_TILE_LENGTH; - } -} - -static inline uint NPFBridgeCost(AyStarNode *current) -{ - return NPF_TILE_LENGTH * GetTunnelBridgeLength(current->tile, GetOtherBridgeEnd(current->tile)); -} - -static uint NPFSlopeCost(AyStarNode *current) -{ - TileIndex next = current->tile + TileOffsByDiagDir(TrackdirToExitdir(current->direction)); - - /* Get center of tiles */ - int x1 = TileX(current->tile) * TILE_SIZE + TILE_SIZE / 2; - int y1 = TileY(current->tile) * TILE_SIZE + TILE_SIZE / 2; - int x2 = TileX(next) * TILE_SIZE + TILE_SIZE / 2; - int y2 = TileY(next) * TILE_SIZE + TILE_SIZE / 2; - - int dx4 = (x2 - x1) / 4; - int dy4 = (y2 - y1) / 4; - - /* Get the height on both sides of the tile edge. - * Avoid testing the height on the tile-center. This will fail for halftile-foundations. - */ - int z1 = GetSlopePixelZ(x1 + dx4, y1 + dy4, true); - int z2 = GetSlopePixelZ(x2 - dx4, y2 - dy4, true); - - if (z2 - z1 > 1) { - /* Slope up */ - return _settings_game.pf.npf.npf_rail_slope_penalty; - } - return 0; - /* Should we give a bonus for slope down? Probably not, we - * could just subtract that bonus from the penalty, because - * there is only one level of steepness... */ -} - -static uint NPFReservedTrackCost(AyStarNode *current) -{ - TileIndex tile = current->tile; - TrackBits track = TrackToTrackBits(TrackdirToTrack(current->direction)); - TrackBits res = GetReservedTrackbits(tile); - - if (NPFGetFlag(current, NPF_FLAG_3RD_SIGNAL) || NPFGetFlag(current, NPF_FLAG_LAST_SIGNAL_BLOCK) || ((res & track) == TRACK_BIT_NONE && !TracksOverlap(res | track))) return 0; - - if (IsTileType(tile, MP_TUNNELBRIDGE)) { - DiagDirection exitdir = TrackdirToExitdir(current->direction); - if (GetTunnelBridgeDirection(tile) == ReverseDiagDir(exitdir)) { - return _settings_game.pf.npf.npf_rail_pbs_cross_penalty * (GetTunnelBridgeLength(tile, GetOtherTunnelBridgeEnd(tile)) + 1); - } - } - return _settings_game.pf.npf.npf_rail_pbs_cross_penalty; -} - -/** - * Mark tiles by mowing the grass when npf debug level >= 1. - * Will not work for multiplayer games, since it can (will) cause desyncs. - */ -static void NPFMarkTile(TileIndex tile) -{ - if (_debug_npf_level < 1 || _networking) return; - switch (GetTileType(tile)) { - case MP_RAILWAY: - /* DEBUG: mark visited tiles by mowing the grass under them ;-) */ - if (!IsRailDepot(tile)) { - SetRailGroundType(tile, RAIL_GROUND_BARREN); - MarkTileDirtyByTile(tile); - } - break; - - case MP_ROAD: - if (!IsRoadDepot(tile)) { - SetRoadside(tile, ROADSIDE_BARREN); - MarkTileDirtyByTile(tile); - } - break; - - default: - break; - } -} - -static Vehicle *CountShipProc(Vehicle *v, void *data) -{ - uint *count = (uint *)data; - /* Ignore other vehicles (aircraft) and ships inside depot. */ - if (v->type == VEH_SHIP && (v->vehstatus & VS_HIDDEN) == 0) (*count)++; - - return nullptr; -} - -static int32_t NPFWaterPathCost(AyStar *, AyStarNode *current, OpenListNode *parent) -{ - int32_t cost = 0; - Trackdir trackdir = current->direction; - - cost = _trackdir_length[trackdir]; // Should be different for diagonal tracks - - if (IsBuoyTile(current->tile) && IsDiagonalTrackdir(trackdir)) { - cost += _settings_game.pf.npf.npf_buoy_penalty; // A small penalty for going over buoys - } - - if (current->direction != NextTrackdir(parent->path.node.direction)) { - cost += _settings_game.pf.npf.npf_water_curve_penalty; - } - - if (IsDockingTile(current->tile)) { - /* Check docking tile for occupancy */ - uint count = 0; - HasVehicleOnPos(current->tile, &count, &CountShipProc); - cost += count * 3 * _trackdir_length[trackdir]; - } - - /* @todo More penalties? */ - - return cost; -} - -/* Determine the cost of this node, for road tracks */ -static int32_t NPFRoadPathCost(AyStar *, AyStarNode *current, OpenListNode *) -{ - TileIndex tile = current->tile; - int32_t cost = 0; - - /* Determine base length */ - switch (GetTileType(tile)) { - case MP_TUNNELBRIDGE: - cost = IsTunnel(tile) ? NPFTunnelCost(current) : NPFBridgeCost(current); - break; - - case MP_ROAD: - cost = NPF_TILE_LENGTH; - /* Increase the cost for level crossings */ - if (IsLevelCrossing(tile)) cost += _settings_game.pf.npf.npf_crossing_penalty; - break; - - case MP_STATION: { - cost = NPF_TILE_LENGTH; - const RoadStop *rs = RoadStop::GetByTile(tile, GetRoadStopType(tile)); - if (IsDriveThroughStopTile(tile)) { - /* Increase the cost for drive-through road stops */ - cost += _settings_game.pf.npf.npf_road_drive_through_penalty; - DiagDirection dir = TrackdirToExitdir(current->direction); - if (!RoadStop::IsDriveThroughRoadStopContinuation(tile, tile - TileOffsByDiagDir(dir))) { - /* When we're the first road stop in a 'queue' of them we increase - * cost based on the fill percentage of the whole queue. */ - const RoadStop::Entry *entry = rs->GetEntry(dir); - cost += entry->GetOccupied() * _settings_game.pf.npf.npf_road_dt_occupied_penalty / entry->GetLength(); - } - } else { - /* Increase cost for filled road stops */ - cost += _settings_game.pf.npf.npf_road_bay_occupied_penalty * (!rs->IsFreeBay(0) + !rs->IsFreeBay(1)) / 2; - } - break; - } - - default: - break; - } - - /* Determine extra costs */ - - /* Check for slope */ - cost += NPFSlopeCost(current); - - /* Check for turns. Road vehicles only really drive diagonal, turns are - * represented by non-diagonal tracks */ - if (!IsDiagonalTrackdir(current->direction)) { - cost += _settings_game.pf.npf.npf_road_curve_penalty; - } - - NPFMarkTile(tile); - Debug(npf, 4, "Calculating G for: ({}, {}). Result: {}", TileX(current->tile), TileY(current->tile), cost); - return cost; -} - - -/* Determine the cost of this node, for railway tracks */ -static int32_t NPFRailPathCost(AyStar *as, AyStarNode *current, OpenListNode *parent) -{ - TileIndex tile = current->tile; - Trackdir trackdir = current->direction; - int32_t cost = 0; - /* HACK: We create a OpenListNode manually, so we can call EndNodeCheck */ - OpenListNode new_node; - - /* Determine base length */ - switch (GetTileType(tile)) { - case MP_TUNNELBRIDGE: - cost = IsTunnel(tile) ? NPFTunnelCost(current) : NPFBridgeCost(current); - break; - - case MP_RAILWAY: - cost = _trackdir_length[trackdir]; // Should be different for diagonal tracks - break; - - case MP_ROAD: // Railway crossing - cost = NPF_TILE_LENGTH; - break; - - case MP_STATION: - /* We give a station tile a penalty. Logically we would only want to give - * station tiles that are not our destination this penalty. This would - * discourage trains to drive through busy stations. But, we can just - * give any station tile a penalty, because every possible route will get - * this penalty exactly once, on its end tile (if it's a station) and it - * will therefore not make a difference. */ - cost = NPF_TILE_LENGTH + _settings_game.pf.npf.npf_rail_station_penalty; - - if (IsRailWaypoint(tile)) { - NPFFindStationOrTileData *fstd = (NPFFindStationOrTileData*)as->user_target; - if (fstd->v->current_order.IsType(OT_GOTO_WAYPOINT) && GetStationIndex(tile) == fstd->v->current_order.GetDestination()) { - /* This waypoint is our destination; maybe this isn't an unreserved - * one, so check that and if so see that as the last signal being - * red. This way waypoints near stations should work better. */ - const Train *train = Train::From(fstd->v); - CFollowTrackRail ft(train); - TileIndex t = tile; - Trackdir td = trackdir; - while (ft.Follow(t, td)) { - assert(t != ft.m_new_tile); - t = ft.m_new_tile; - if (KillFirstBit(ft.m_new_td_bits) != TRACKDIR_BIT_NONE) { - /* We encountered a junction; it's going to be too complex to - * handle this perfectly, so just bail out. There is no simple - * free path, so try the other possibilities. */ - td = INVALID_TRACKDIR; - break; - } - td = RemoveFirstTrackdir(&ft.m_new_td_bits); - /* If this is a safe waiting position we're done searching for it */ - if (IsSafeWaitingPosition(train, t, td, true, _settings_game.pf.forbid_90_deg)) break; - } - if (td == INVALID_TRACKDIR || - !IsSafeWaitingPosition(train, t, td, true, _settings_game.pf.forbid_90_deg) || - !IsWaitingPositionFree(train, t, td, _settings_game.pf.forbid_90_deg)) { - cost += _settings_game.pf.npf.npf_rail_lastred_penalty; - } - } - } - break; - - default: - break; - } - - /* Determine extra costs */ - - /* Check for signals */ - if (IsTileType(tile, MP_RAILWAY)) { - if (HasSignalOnTrackdir(tile, trackdir)) { - SignalType sigtype = GetSignalType(tile, TrackdirToTrack(trackdir)); - /* Ordinary track with signals */ - if (GetSignalStateByTrackdir(tile, trackdir) == SIGNAL_STATE_RED) { - /* Signal facing us is red */ - if (!NPFGetFlag(current, NPF_FLAG_SEEN_SIGNAL)) { - /* Penalize the first signal we - * encounter, if it is red */ - - /* Is this a presignal exit or combo? */ - if (!IsPbsSignal(sigtype)) { - if (sigtype == SIGTYPE_EXIT || sigtype == SIGTYPE_COMBO) { - /* Penalise exit and combo signals differently (heavier) */ - cost += _settings_game.pf.npf.npf_rail_firstred_exit_penalty; - } else { - cost += _settings_game.pf.npf.npf_rail_firstred_penalty; - } - } - } - /* Record the state of this signal. Path signals are assumed to - * be green as the signal state of them has no meaning for this. */ - NPFSetFlag(current, NPF_FLAG_LAST_SIGNAL_RED, !IsPbsSignal(sigtype)); - } else { - /* Record the state of this signal */ - NPFSetFlag(current, NPF_FLAG_LAST_SIGNAL_RED, false); - } - if (NPFGetFlag(current, NPF_FLAG_SEEN_SIGNAL)) { - if (NPFGetFlag(current, NPF_FLAG_2ND_SIGNAL)) { - NPFSetFlag(current, NPF_FLAG_3RD_SIGNAL, true); - } else { - NPFSetFlag(current, NPF_FLAG_2ND_SIGNAL, true); - } - } else { - NPFSetFlag(current, NPF_FLAG_SEEN_SIGNAL, true); - } - NPFSetFlag(current, NPF_FLAG_LAST_SIGNAL_BLOCK, !IsPbsSignal(sigtype)); - } - - if (HasPbsSignalOnTrackdir(tile, ReverseTrackdir(trackdir)) && !NPFGetFlag(current, NPF_FLAG_3RD_SIGNAL)) { - cost += _settings_game.pf.npf.npf_rail_pbs_signal_back_penalty; - } - } - - /* Penalise the tile if it is a target tile and the last signal was - * red */ - /* HACK: We create a new_node here so we can call EndNodeCheck. Ugly as hell - * of course... */ - new_node.path.node = *current; - if (as->EndNodeCheck(as, &new_node) == AYSTAR_FOUND_END_NODE && NPFGetFlag(current, NPF_FLAG_LAST_SIGNAL_RED)) { - cost += _settings_game.pf.npf.npf_rail_lastred_penalty; - } - - /* Check for slope */ - cost += NPFSlopeCost(current); - - /* Check for turns */ - if (current->direction != NextTrackdir(parent->path.node.direction)) { - cost += _settings_game.pf.npf.npf_rail_curve_penalty; - } - /* TODO, with realistic acceleration, also the amount of straight track between - * curves should be taken into account, as this affects the speed limit. */ - - /* Check for reverse in depot */ - if (IsRailDepotTile(tile) && as->EndNodeCheck(as, &new_node) != AYSTAR_FOUND_END_NODE) { - /* Penalise any depot tile that is not the last tile in the path. This - * _should_ penalise every occurrence of reversing in a depot (and only - * that) */ - cost += _settings_game.pf.npf.npf_rail_depot_reverse_penalty; - } - - /* Check for occupied track */ - cost += NPFReservedTrackCost(current); - - NPFMarkTile(tile); - Debug(npf, 4, "Calculating G for: ({}, {}). Result: {}", TileX(current->tile), TileY(current->tile), cost); - return cost; -} - -/* Will find any depot */ -static int32_t NPFFindDepot(const AyStar *as, const OpenListNode *current) -{ - AyStarUserData *user = (AyStarUserData *)as->user_data; - /* It's not worth caching the result with NPF_FLAG_IS_TARGET here as below, - * since checking the cache not that much faster than the actual check */ - return IsDepotTypeTile(current->path.node.tile, user->type) ? - AYSTAR_FOUND_END_NODE : AYSTAR_DONE; -} - -/** Find any safe and free tile. */ -static int32_t NPFFindSafeTile(const AyStar *as, const OpenListNode *current) -{ - const Train *v = Train::From(((NPFFindStationOrTileData *)as->user_target)->v); - - return (IsSafeWaitingPosition(v, current->path.node.tile, current->path.node.direction, true, _settings_game.pf.forbid_90_deg) && - IsWaitingPositionFree(v, current->path.node.tile, current->path.node.direction, _settings_game.pf.forbid_90_deg)) ? - AYSTAR_FOUND_END_NODE : AYSTAR_DONE; -} - -/* Will find a station identified using the NPFFindStationOrTileData */ -static int32_t NPFFindStationOrTile(const AyStar *as, const OpenListNode *current) -{ - NPFFindStationOrTileData *fstd = (NPFFindStationOrTileData*)as->user_target; - const AyStarNode *node = ¤t->path.node; - TileIndex tile = node->tile; - - if (fstd->station_index == INVALID_STATION && tile == fstd->dest_coords) return AYSTAR_FOUND_END_NODE; - - if (fstd->v->type == VEH_SHIP) { - /* Ships do not actually reach the destination station, so we check for a docking tile instead. */ - if (IsDockingTile(tile) && IsShipDestinationTile(tile, fstd->station_index)) return AYSTAR_FOUND_END_NODE; - return AYSTAR_DONE; - } - - if (IsTileType(tile, MP_STATION) && GetStationIndex(tile) == fstd->station_index) { - if (fstd->v->type == VEH_TRAIN) return AYSTAR_FOUND_END_NODE; - - assert(fstd->v->type == VEH_ROAD); - /* Only if it is a valid station *and* we can stop there */ - if (GetStationType(tile) == fstd->station_type && (fstd->not_articulated || IsDriveThroughStopTile(tile))) return AYSTAR_FOUND_END_NODE; - } - return AYSTAR_DONE; -} - -/** - * Find the node containing the first signal on the path. - * - * If the first signal is on the very first two tiles of the path, - * the second signal is returned. If no suitable signal is present, the - * last node of the path is returned. - */ -static const PathNode *FindSafePosition(PathNode *path, const Train *v) -{ - /* If there is no signal, reserve the whole path. */ - PathNode *sig = path; - - for (; path->parent != nullptr; path = path->parent) { - if (IsSafeWaitingPosition(v, path->node.tile, path->node.direction, true, _settings_game.pf.forbid_90_deg)) { - sig = path; - } - } - - return sig; -} - -/** - * Lift the reservation of the tiles from @p start till @p end, excluding @p end itself. - */ -static void ClearPathReservation(const PathNode *start, const PathNode *end) -{ - bool first_run = true; - for (; start != end; start = start->parent) { - if (IsRailStationTile(start->node.tile) && first_run) { - SetRailStationPlatformReservation(start->node.tile, TrackdirToExitdir(start->node.direction), false); - } else { - UnreserveRailTrack(start->node.tile, TrackdirToTrack(start->node.direction)); - } - first_run = false; - } -} - -/** - * To be called when @p current contains the (shortest route to) the target node. - * Will fill the contents of the NPFFoundTargetData using - * AyStarNode[NPF_TRACKDIR_CHOICE]. If requested, path reservation - * is done here. - */ -static void NPFSaveTargetData(AyStar *as, OpenListNode *current) -{ - AyStarUserData *user = (AyStarUserData *)as->user_data; - NPFFoundTargetData *ftd = (NPFFoundTargetData*)as->user_path; - ftd->best_trackdir = (Trackdir)current->path.node.user_data[NPF_TRACKDIR_CHOICE]; - ftd->best_path_dist = current->g; - ftd->best_bird_dist = 0; - ftd->node = current->path.node; - ftd->res_okay = false; - - if (as->user_target != nullptr && ((NPFFindStationOrTileData*)as->user_target)->reserve_path && user->type == TRANSPORT_RAIL) { - /* Path reservation is requested. */ - const Train *v = Train::From(((NPFFindStationOrTileData *)as->user_target)->v); - - const PathNode *target = FindSafePosition(¤t->path, v); - ftd->node = target->node; - - /* If the target is a station skip to platform end. */ - if (IsRailStationTile(target->node.tile)) { - DiagDirection dir = TrackdirToExitdir(target->node.direction); - uint len = Station::GetByTile(target->node.tile)->GetPlatformLength(target->node.tile, dir); - TileIndex end_tile = TileAdd(target->node.tile, (len - 1) * TileOffsByDiagDir(dir)); - - /* Update only end tile, trackdir of a station stays the same. */ - ftd->node.tile = end_tile; - if (!IsWaitingPositionFree(v, end_tile, target->node.direction, _settings_game.pf.forbid_90_deg)) return; - SetRailStationPlatformReservation(target->node.tile, dir, true); - SetRailStationReservation(target->node.tile, false); - } else { - if (!IsWaitingPositionFree(v, target->node.tile, target->node.direction, _settings_game.pf.forbid_90_deg)) return; - } - - for (const PathNode *cur = target; cur->parent != nullptr; cur = cur->parent) { - if (!TryReserveRailTrack(cur->node.tile, TrackdirToTrack(cur->node.direction))) { - /* Reservation failed, undo. */ - ClearPathReservation(target, cur); - return; - } - } - - ftd->res_okay = true; - } -} - -/** - * Finds out if a given company's vehicles are allowed to enter a given tile. - * @param owner The owner of the vehicle. - * @param tile The tile that is about to be entered. - * @param enterdir The direction in which the vehicle wants to enter the tile. - * @return true if the vehicle can enter the tile. - * @todo This function should be used in other places than just NPF, - * maybe moved to another file too. - */ -static bool CanEnterTileOwnerCheck(Owner owner, TileIndex tile, DiagDirection enterdir) -{ - if (IsTileType(tile, MP_RAILWAY) || // Rail tile (also rail depot) - HasStationTileRail(tile) || // Rail station tile/waypoint - IsRoadDepotTile(tile) || // Road depot tile - IsBayRoadStopTile(tile)) { // Road station tile (but not drive-through stops) - return IsTileOwner(tile, owner); // You need to own these tiles entirely to use them - } - - switch (GetTileType(tile)) { - case MP_ROAD: - /* rail-road crossing : are we looking at the railway part? */ - if (IsLevelCrossing(tile) && - DiagDirToAxis(enterdir) != GetCrossingRoadAxis(tile)) { - return IsTileOwner(tile, owner); // Railway needs owner check, while the street is public - } - break; - - case MP_TUNNELBRIDGE: - if (GetTunnelBridgeTransportType(tile) == TRANSPORT_RAIL) { - return IsTileOwner(tile, owner); - } - break; - - default: - break; - } - - return true; // no need to check -} - - -/** - * Returns the direction the exit of the depot on the given tile is facing. - */ -static DiagDirection GetDepotDirection(TileIndex tile, TransportType type) -{ - assert(IsDepotTypeTile(tile, type)); - - switch (type) { - case TRANSPORT_RAIL: return GetRailDepotDirection(tile); - case TRANSPORT_ROAD: return GetRoadDepotDirection(tile); - case TRANSPORT_WATER: return GetShipDepotDirection(tile); - default: return INVALID_DIAGDIR; // Not reached - } -} - -/** Tests if a tile is a road tile with a single tramtrack (tram can reverse) */ -static DiagDirection GetSingleTramBit(TileIndex tile) -{ - if (IsNormalRoadTile(tile)) { - RoadBits rb = GetRoadBits(tile, RTT_TRAM); - switch (rb) { - case ROAD_NW: return DIAGDIR_NW; - case ROAD_SW: return DIAGDIR_SW; - case ROAD_SE: return DIAGDIR_SE; - case ROAD_NE: return DIAGDIR_NE; - default: break; - } - } - return INVALID_DIAGDIR; -} - -/** - * Tests if a tile can be entered or left only from one side. - * - * Depots, non-drive-through roadstops, and tiles with single trambits are tested. - * - * @param tile The tile of interest. - * @param type The transporttype of the vehicle. - * @param subtype For TRANSPORT_ROAD the compatible RoadTypes of the vehicle. - * @return The single entry/exit-direction of the tile, or INVALID_DIAGDIR if there are more or less directions - */ -static DiagDirection GetTileSingleEntry(TileIndex tile, TransportType type, uint subtype) -{ - if (type != TRANSPORT_WATER && IsDepotTypeTile(tile, type)) return GetDepotDirection(tile, type); - - if (type == TRANSPORT_ROAD) { - if (IsBayRoadStopTile(tile)) return GetRoadStopDir(tile); - if ((RoadTramType)subtype == RTT_TRAM) return GetSingleTramBit(tile); - } - - return INVALID_DIAGDIR; -} - -/** - * Tests if a vehicle must reverse on a tile. - * - * @param tile The tile of interest. - * @param dir The direction in which the vehicle drives on a tile. - * @param type The transporttype of the vehicle. - * @param subtype For TRANSPORT_ROAD the compatible RoadTypes of the vehicle. - * @return true iff the vehicle must reverse on the tile. - */ -static inline bool ForceReverse(TileIndex tile, DiagDirection dir, TransportType type, uint subtype) -{ - DiagDirection single_entry = GetTileSingleEntry(tile, type, subtype); - return single_entry != INVALID_DIAGDIR && single_entry != dir; -} - -/** - * Tests if a vehicle can enter a tile. - * - * @param tile The tile of interest. - * @param dir The direction in which the vehicle drives onto a tile. - * @param user Vehicle information. - * @return true iff the vehicle can enter the tile. - */ -static bool CanEnterTile(TileIndex tile, DiagDirection dir, AyStarUserData *user) -{ - /* Check tunnel entries and bridge ramps */ - if (IsTileType(tile, MP_TUNNELBRIDGE) && GetTunnelBridgeDirection(tile) != dir) return false; - - /* Test ownership */ - if (!CanEnterTileOwnerCheck(user->owner, tile, dir)) return false; - - /* check correct rail type (mono, maglev, etc) */ - switch (user->type) { - case TRANSPORT_RAIL: { - RailType rail_type = GetTileRailType(tile); - if (!HasBit(user->railtypes, rail_type)) return false; - break; - } - - case TRANSPORT_ROAD: { - RoadType road_type = GetRoadType(tile, (RoadTramType)user->subtype); - if (!HasBit(user->roadtypes, road_type)) return false; - break; - } - - default: break; - } - - /* Depots, standard roadstops and single tram bits can only be entered from one direction */ - DiagDirection single_entry = GetTileSingleEntry(tile, user->type, user->subtype); - return single_entry == INVALID_DIAGDIR || single_entry == ReverseDiagDir(dir); -} - -/** - * Returns the driveable Trackdirs on a tile. - * - * One-way-roads are taken into account. Signals are not tested. - * - * @param dst_tile The tile of interest. - * @param src_tile The originating tile. - * @param src_trackdir The direction the vehicle is currently moving. - * @param type The transporttype of the vehicle. - * @param subtype For TRANSPORT_ROAD the compatible RoadTypes of the vehicle. - * @return The Trackdirs the vehicle can continue moving on. - */ -static TrackdirBits GetDriveableTrackdirBits(TileIndex dst_tile, TileIndex src_tile, Trackdir src_trackdir, TransportType type, uint subtype) -{ - TrackdirBits trackdirbits = TrackStatusToTrackdirBits(GetTileTrackStatus(dst_tile, type, subtype)); - - if (trackdirbits == TRACKDIR_BIT_NONE && type == TRANSPORT_ROAD && (RoadTramType)subtype == RTT_TRAM) { - /* GetTileTrackStatus() returns 0 for single tram bits. - * As we cannot change it there (easily) without breaking something, change it here */ - switch (GetSingleTramBit(dst_tile)) { - case DIAGDIR_NE: - case DIAGDIR_SW: - trackdirbits = TRACKDIR_BIT_X_NE | TRACKDIR_BIT_X_SW; - break; - - case DIAGDIR_NW: - case DIAGDIR_SE: - trackdirbits = TRACKDIR_BIT_Y_NW | TRACKDIR_BIT_Y_SE; - break; - - default: break; - } - } - - Debug(npf, 4, "Next node: ({}, {}) [{}], possible trackdirs: 0x{:X}", TileX(dst_tile), TileY(dst_tile), dst_tile, trackdirbits); - - /* Select only trackdirs we can reach from our current trackdir */ - trackdirbits &= TrackdirReachesTrackdirs(src_trackdir); - - /* Filter out trackdirs that would make 90 deg turns for trains */ - if (type == TRANSPORT_RAIL && Rail90DegTurnDisallowed(GetTileRailType(src_tile), GetTileRailType(dst_tile))) { - trackdirbits &= ~TrackdirCrossesTrackdirs(src_trackdir); - } - - Debug(npf, 6, "After filtering: ({}, {}), possible trackdirs: 0x{:X}", TileX(dst_tile), TileY(dst_tile), trackdirbits); - - return trackdirbits; -} - - -/* Will just follow the results of GetTileTrackStatus concerning where we can - * go and where not. Uses AyStar.user_data[NPF_TYPE] as the transport type and - * an argument to GetTileTrackStatus. Will skip tunnels, meaning that the - * entry and exit are neighbours. Will fill - * AyStarNode.user_data[NPF_TRACKDIR_CHOICE] with an appropriate value, and - * copy AyStarNode.user_data[NPF_NODE_FLAGS] from the parent */ -static void NPFFollowTrack(AyStar *aystar, OpenListNode *current) -{ - AyStarUserData *user = (AyStarUserData *)aystar->user_data; - /* We leave src_tile on track src_trackdir in direction src_exitdir */ - Trackdir src_trackdir = current->path.node.direction; - TileIndex src_tile = current->path.node.tile; - DiagDirection src_exitdir = TrackdirToExitdir(src_trackdir); - - /* Information about the vehicle: TransportType (road/rail/water) and SubType (compatible rail/road types) */ - TransportType type = user->type; - uint subtype = user->subtype; - - /* Initialize to 0, so we can jump out (return) somewhere an have no neighbours */ - aystar->num_neighbours = 0; - Debug(npf, 4, "Expanding: ({}, {}, {}) [{}]", TileX(src_tile), TileY(src_tile), src_trackdir, src_tile); - - /* We want to determine the tile we arrive, and which choices we have there */ - TileIndex dst_tile; - TrackdirBits trackdirbits; - - /* Find dest tile */ - /* Is src_tile valid, and can be used? - * When choosing track on a junction src_tile is the tile neighboured to the junction wrt. exitdir. - * But we must not check the validity of this move, as src_tile is totally unrelated to the move, if a roadvehicle reversed on a junction. */ - if (CheckIgnoreFirstTile(¤t->path)) { - /* Do not perform any checks that involve src_tile */ - dst_tile = src_tile + TileOffsByDiagDir(src_exitdir); - trackdirbits = GetDriveableTrackdirBits(dst_tile, src_tile, src_trackdir, type, subtype); - } else if (IsTileType(src_tile, MP_TUNNELBRIDGE) && GetTunnelBridgeDirection(src_tile) == src_exitdir) { - /* We drive through the wormhole and arrive on the other side */ - dst_tile = GetOtherTunnelBridgeEnd(src_tile); - trackdirbits = TrackdirToTrackdirBits(src_trackdir); - } else if (ForceReverse(src_tile, src_exitdir, type, subtype)) { - /* We can only reverse on this tile */ - dst_tile = src_tile; - src_trackdir = ReverseTrackdir(src_trackdir); - trackdirbits = TrackdirToTrackdirBits(src_trackdir); - } else { - /* We leave src_tile in src_exitdir and reach dst_tile */ - dst_tile = AddTileIndexDiffCWrap(src_tile, TileIndexDiffCByDiagDir(src_exitdir)); - - if (dst_tile != INVALID_TILE && IsNormalRoadTile(dst_tile) && !CanEnterTile(dst_tile, src_exitdir, user)) dst_tile = INVALID_TILE; - - if (dst_tile == INVALID_TILE) { - /* We cannot enter the next tile. Road vehicles can reverse, others reach dead end */ - if (type != TRANSPORT_ROAD || (RoadTramType)subtype == RTT_TRAM) return; - - dst_tile = src_tile; - src_trackdir = ReverseTrackdir(src_trackdir); - } - - trackdirbits = GetDriveableTrackdirBits(dst_tile, src_tile, src_trackdir, type, subtype); - - if (trackdirbits == TRACKDIR_BIT_NONE) { - /* We cannot enter the next tile. Road vehicles can reverse, others reach dead end */ - if (type != TRANSPORT_ROAD || (RoadTramType)subtype == RTT_TRAM) return; - - dst_tile = src_tile; - src_trackdir = ReverseTrackdir(src_trackdir); - - trackdirbits = GetDriveableTrackdirBits(dst_tile, src_tile, src_trackdir, type, subtype); - } - } - - if (NPFGetFlag(¤t->path.node, NPF_FLAG_IGNORE_RESERVED)) { - /* Mask out any reserved tracks. */ - TrackBits reserved = GetReservedTrackbits(dst_tile); - trackdirbits &= ~TrackBitsToTrackdirBits(reserved); - - for (Track t : SetTrackBitIterator(TrackdirBitsToTrackBits(trackdirbits))) { - if (TracksOverlap(reserved | TrackToTrackBits(t))) trackdirbits &= ~TrackToTrackdirBits(t); - } - } - - /* Enumerate possible track */ - uint i = 0; - while (trackdirbits != TRACKDIR_BIT_NONE) { - Trackdir dst_trackdir = RemoveFirstTrackdir(&trackdirbits); - Debug(npf, 5, "Expanded into trackdir: {}, remaining trackdirs: 0x{:X}", dst_trackdir, trackdirbits); - - /* Tile with signals? */ - if (IsTileType(dst_tile, MP_RAILWAY) && GetRailTileType(dst_tile) == RAIL_TILE_SIGNALS) { - if (HasSignalOnTrackdir(dst_tile, ReverseTrackdir(dst_trackdir)) && !HasSignalOnTrackdir(dst_tile, dst_trackdir) && IsOnewaySignal(dst_tile, TrackdirToTrack(dst_trackdir))) { - /* If there's a one-way signal not pointing towards us, stop going in this direction. */ - break; - } - } - { - /* We've found ourselves a neighbour :-) */ - AyStarNode *neighbour = &aystar->neighbours[i]; - neighbour->tile = dst_tile; - neighbour->direction = dst_trackdir; - /* Save user data */ - neighbour->user_data[NPF_NODE_FLAGS] = current->path.node.user_data[NPF_NODE_FLAGS]; - NPFFillTrackdirChoice(neighbour, current); - } - i++; - } - aystar->num_neighbours = i; -} - -/* - * Plan a route to the specified target (which is checked by target_proc), - * from start1 and if not nullptr, from start2 as well. The type of transport we - * are checking is in type. reverse_penalty is applied to all routes that - * originate from the second start node. - * When we are looking for one specific target (optionally multiple tiles), we - * should use a good heuristic to perform aystar search. When we search for - * multiple targets that are spread around, we should perform a breadth first - * search by specifying CalcZero as our heuristic. - */ -static NPFFoundTargetData NPFRouteInternal(AyStarNode *start1, bool ignore_start_tile1, AyStarNode *start2, bool ignore_start_tile2, NPFFindStationOrTileData *target, AyStar_EndNodeCheck target_proc, AyStar_CalculateH heuristic_proc, AyStarUserData *user, uint reverse_penalty, bool ignore_reserved = false, int max_penalty = 0) -{ - /* Initialize procs */ - _npf_aystar.max_path_cost = max_penalty; - _npf_aystar.CalculateH = heuristic_proc; - _npf_aystar.EndNodeCheck = target_proc; - _npf_aystar.FoundEndNode = NPFSaveTargetData; - _npf_aystar.GetNeighbours = NPFFollowTrack; - switch (user->type) { - default: NOT_REACHED(); - case TRANSPORT_RAIL: _npf_aystar.CalculateG = NPFRailPathCost; break; - case TRANSPORT_ROAD: _npf_aystar.CalculateG = NPFRoadPathCost; break; - case TRANSPORT_WATER: _npf_aystar.CalculateG = NPFWaterPathCost; break; - } - - /* Initialize Start Node(s) */ - start1->user_data[NPF_TRACKDIR_CHOICE] = INVALID_TRACKDIR; - start1->user_data[NPF_NODE_FLAGS] = 0; - NPFSetFlag(start1, NPF_FLAG_IGNORE_START_TILE, ignore_start_tile1); - NPFSetFlag(start1, NPF_FLAG_IGNORE_RESERVED, ignore_reserved); - _npf_aystar.AddStartNode(start1, 0); - if (start2 != nullptr) { - start2->user_data[NPF_TRACKDIR_CHOICE] = INVALID_TRACKDIR; - start2->user_data[NPF_NODE_FLAGS] = 0; - NPFSetFlag(start2, NPF_FLAG_IGNORE_START_TILE, ignore_start_tile2); - NPFSetFlag(start2, NPF_FLAG_REVERSE, true); - NPFSetFlag(start2, NPF_FLAG_IGNORE_RESERVED, ignore_reserved); - _npf_aystar.AddStartNode(start2, reverse_penalty); - } - - /* Initialize result */ - NPFFoundTargetData result; - result.best_bird_dist = UINT_MAX; - result.best_path_dist = UINT_MAX; - result.best_trackdir = INVALID_TRACKDIR; - result.node.tile = INVALID_TILE; - result.res_okay = false; - _npf_aystar.user_path = &result; - - /* Initialize target */ - _npf_aystar.user_target = target; - - /* Initialize user_data */ - _npf_aystar.user_data = user; - - /* We will limit the number of nodes for now, until we have a better - * solution to really fix performance */ - _npf_aystar.max_search_nodes = _settings_game.pf.npf.npf_max_search_nodes; - - /* GO! */ - [[maybe_unused]] int r = _npf_aystar.Main(); - assert(r != AYSTAR_STILL_BUSY); - - if (result.best_bird_dist != 0) { - if (target != nullptr) { - Debug(npf, 1, "Could not find route to tile 0x{:X} from 0x{:X}.", target->dest_coords, start1->tile); - } else { - /* Assumption: target == nullptr, so we are looking for a depot */ - Debug(npf, 1, "Could not find route to a depot from tile 0x{:X}.", start1->tile); - } - - } - return result; -} - -/* Will search as below, but with two start nodes, the second being the - * reverse. Look at the NPF_FLAG_REVERSE flag in the result node to see which - * direction was taken (NPFGetFlag(result.node, NPF_FLAG_REVERSE)) */ -static NPFFoundTargetData NPFRouteToStationOrTileTwoWay(TileIndex tile1, Trackdir trackdir1, bool ignore_start_tile1, TileIndex tile2, Trackdir trackdir2, bool ignore_start_tile2, NPFFindStationOrTileData *target, AyStarUserData *user) -{ - AyStarNode start1; - AyStarNode start2; - - start1.tile = tile1; - start2.tile = tile2; - start1.direction = trackdir1; - start2.direction = trackdir2; - - return NPFRouteInternal(&start1, ignore_start_tile1, (IsValidTile(tile2) ? &start2 : nullptr), ignore_start_tile2, target, NPFFindStationOrTile, NPFCalcStationOrTileHeuristic, user, 0); -} - -/* Will search from the given tile and direction, for a route to the given - * station for the given transport type. See the declaration of - * NPFFoundTargetData above for the meaning of the result. */ -static NPFFoundTargetData NPFRouteToStationOrTile(TileIndex tile, Trackdir trackdir, bool ignore_start_tile, NPFFindStationOrTileData *target, AyStarUserData *user) -{ - return NPFRouteToStationOrTileTwoWay(tile, trackdir, ignore_start_tile, INVALID_TILE, INVALID_TRACKDIR, false, target, user); -} - -/* Search using breadth first. Good for little track choice and inaccurate - * heuristic, such as railway/road with two start nodes, the second being the reverse. Call - * NPFGetFlag(result.node, NPF_FLAG_REVERSE) to see from which node the path - * originated. All paths from the second node will have the given - * reverse_penalty applied (NPF_TILE_LENGTH is the equivalent of one full - * tile). - */ -static NPFFoundTargetData NPFRouteToDepotBreadthFirstTwoWay(TileIndex tile1, Trackdir trackdir1, bool ignore_start_tile1, TileIndex tile2, Trackdir trackdir2, bool ignore_start_tile2, NPFFindStationOrTileData *target, AyStarUserData *user, uint reverse_penalty, int max_penalty) -{ - AyStarNode start1; - AyStarNode start2; - - start1.tile = tile1; - start2.tile = tile2; - start1.direction = trackdir1; - start2.direction = trackdir2; - - /* perform a breadth first search. Target is nullptr, - * since we are just looking for any depot...*/ - return NPFRouteInternal(&start1, ignore_start_tile1, (IsValidTile(tile2) ? &start2 : nullptr), ignore_start_tile2, target, NPFFindDepot, NPFCalcZero, user, reverse_penalty, false, max_penalty); -} - -void InitializeNPF() -{ - static bool first_init = true; - if (first_init) { - first_init = false; - _npf_aystar.Init(NPFHash, NPF_HASH_SIZE); - } else { - _npf_aystar.Clear(); - } - _npf_aystar.loops_per_tick = 0; - _npf_aystar.max_path_cost = 0; -} - -static void NPFFillWithOrderData(NPFFindStationOrTileData *fstd, const Vehicle *v, bool reserve_path = false) -{ - /* Ships don't really reach their stations, but the tile in front. So don't - * save the station id for ships. For roadvehs we don't store it either, - * because multistop depends on vehicles actually reaching the exact - * dest_tile, not just any stop of that station. - * So only for train orders to stations we fill fstd->station_index, for all - * others only dest_coords */ - if (v->current_order.IsType(OT_GOTO_STATION) || v->current_order.IsType(OT_GOTO_WAYPOINT)) { - fstd->station_index = v->current_order.GetDestination(); - if (v->type == VEH_TRAIN) { - fstd->station_type = v->current_order.IsType(OT_GOTO_STATION) ? STATION_RAIL : STATION_WAYPOINT; - } else if (v->type == VEH_ROAD) { - fstd->station_type = RoadVehicle::From(v)->IsBus() ? STATION_BUS : STATION_TRUCK; - } else if (v->type == VEH_SHIP) { - fstd->station_type = v->current_order.IsType(OT_GOTO_STATION) ? STATION_DOCK : STATION_BUOY; - } - - fstd->not_articulated = v->type == VEH_ROAD && !RoadVehicle::From(v)->HasArticulatedPart(); - /* Let's take the closest tile of the station as our target for vehicles */ - fstd->dest_coords = CalcClosestStationTile(fstd->station_index, v->tile, fstd->station_type); - } else { - fstd->dest_coords = v->dest_tile; - fstd->station_index = INVALID_STATION; - } - fstd->reserve_path = reserve_path; - fstd->v = v; -} - -/*** Road vehicles ***/ - -FindDepotData NPFRoadVehicleFindNearestDepot(const RoadVehicle *v, int max_penalty) -{ - Trackdir trackdir = v->GetVehicleTrackdir(); - - AyStarUserData user = { v->owner, TRANSPORT_ROAD, RAILTYPES_NONE, v->compatible_roadtypes, GetRoadTramType(v->roadtype) }; - NPFFoundTargetData ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, false, INVALID_TILE, INVALID_TRACKDIR, false, nullptr, &user, 0, max_penalty); - - if (ftd.best_bird_dist != 0) return FindDepotData(); - - /* Found target */ - /* Our caller expects a number of tiles, so we just approximate that - * number by this. It might not be completely what we want, but it will - * work for now :-) We can possibly change this when the old pathfinder - * is removed. */ - return FindDepotData(ftd.node.tile, ftd.best_path_dist); -} - -Trackdir NPFRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, bool &path_found) -{ - NPFFindStationOrTileData fstd; - - NPFFillWithOrderData(&fstd, v); - Trackdir trackdir = DiagDirToDiagTrackdir(enterdir); - - AyStarUserData user = { v->owner, TRANSPORT_ROAD, RAILTYPES_NONE, v->compatible_roadtypes, GetRoadTramType(v->roadtype) }; - NPFFoundTargetData ftd = NPFRouteToStationOrTile(tile - TileOffsByDiagDir(enterdir), trackdir, true, &fstd, &user); - - assert(ftd.best_trackdir != INVALID_TRACKDIR); - - /* If ftd.best_bird_dist is 0, we found our target and ftd.best_trackdir contains - * the direction we need to take to get there, if ftd.best_bird_dist is not 0, - * we did not find our target, but ftd.best_trackdir contains the direction leading - * to the tile closest to our target. */ - path_found = (ftd.best_bird_dist == 0); - return ftd.best_trackdir; -} - -/*** Ships ***/ - -Track NPFShipChooseTrack(const Ship *v, bool &path_found) -{ - NPFFindStationOrTileData fstd; - Trackdir trackdir = v->GetVehicleTrackdir(); - assert(trackdir != INVALID_TRACKDIR); // Check that we are not in a depot - - NPFFillWithOrderData(&fstd, v); - - AyStarUserData user = { v->owner, TRANSPORT_WATER, RAILTYPES_NONE, ROADTYPES_NONE, 0 }; - NPFFoundTargetData ftd = NPFRouteToStationOrTile(v->tile, trackdir, true, &fstd, &user); - - assert(ftd.best_trackdir != INVALID_TRACKDIR); - - /* If ftd.best_bird_dist is 0, we found our target and ftd.best_trackdir contains - * the direction we need to take to get there, if ftd.best_bird_dist is not 0, - * we did not find our target, but ftd.best_trackdir contains the direction leading - * to the tile closest to our target. */ - path_found = (ftd.best_bird_dist == 0); - return TrackdirToTrack(ftd.best_trackdir); -} - -bool NPFShipCheckReverse(const Ship *v, Trackdir *best_td) -{ - NPFFindStationOrTileData fstd; - NPFFoundTargetData ftd; - - NPFFillWithOrderData(&fstd, v); - - Trackdir trackdir = v->GetVehicleTrackdir(); - Trackdir trackdir_rev = ReverseTrackdir(trackdir); - assert(trackdir != INVALID_TRACKDIR); - assert(trackdir_rev != INVALID_TRACKDIR); - - AyStarUserData user = { v->owner, TRANSPORT_WATER, RAILTYPES_NONE, ROADTYPES_NONE, 0 }; - if (best_td != nullptr) { - DiagDirection entry = ReverseDiagDir(VehicleExitDir(v->direction, v->state)); - TrackdirBits rtds = DiagdirReachesTrackdirs(entry) & TrackStatusToTrackdirBits(GetTileTrackStatus(v->tile, TRANSPORT_WATER, 0, entry)); - Trackdir best = (Trackdir)FindFirstBit(rtds); - rtds = KillFirstBit(rtds); - if (rtds == TRACKDIR_BIT_NONE) return false; /* At most one choice. */ - for (; rtds != TRACKDIR_BIT_NONE; rtds = KillFirstBit(rtds)) { - Trackdir td = (Trackdir)FindFirstBit(rtds); - ftd = NPFRouteToStationOrTileTwoWay(v->tile, best, false, v->tile, td, false, &fstd, &user); - if (ftd.best_bird_dist == 0 && NPFGetFlag(&ftd.node, NPF_FLAG_REVERSE)) best = td; - } - if (ftd.best_bird_dist == 0) { - *best_td = best; - return true; - } - } else { - ftd = NPFRouteToStationOrTileTwoWay(v->tile, trackdir, false, v->tile, trackdir_rev, false, &fstd, &user); - } - /* If we didn't find anything, just keep on going straight ahead, otherwise take the reverse flag */ - return ftd.best_bird_dist == 0 && NPFGetFlag(&ftd.node, NPF_FLAG_REVERSE); -} - -/*** Trains ***/ - -FindDepotData NPFTrainFindNearestDepot(const Train *v, int max_penalty) -{ - const Train *last = v->Last(); - Trackdir trackdir = v->GetVehicleTrackdir(); - Trackdir trackdir_rev = ReverseTrackdir(last->GetVehicleTrackdir()); - NPFFindStationOrTileData fstd; - fstd.v = v; - fstd.reserve_path = false; - - assert(trackdir != INVALID_TRACKDIR); - AyStarUserData user = { v->owner, TRANSPORT_RAIL, v->compatible_railtypes, ROADTYPES_NONE, 0 }; - NPFFoundTargetData ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, false, last->tile, trackdir_rev, false, &fstd, &user, NPF_INFINITE_PENALTY, max_penalty); - if (ftd.best_bird_dist != 0) return FindDepotData(); - - /* Found target */ - /* Our caller expects a number of tiles, so we just approximate that - * number by this. It might not be completely what we want, but it will - * work for now :-) We can possibly change this when the old pathfinder - * is removed. */ - return FindDepotData(ftd.node.tile, ftd.best_path_dist, NPFGetFlag(&ftd.node, NPF_FLAG_REVERSE)); -} - -bool NPFTrainFindNearestSafeTile(const Train *v, TileIndex tile, Trackdir trackdir, bool override_railtype) -{ - assert(v->type == VEH_TRAIN); - - NPFFindStationOrTileData fstd; - fstd.v = v; - fstd.reserve_path = true; - - AyStarNode start1; - start1.tile = tile; - start1.direction = trackdir; - - RailTypes railtypes = v->compatible_railtypes; - if (override_railtype) railtypes |= GetRailTypeInfo(v->railtype)->compatible_railtypes; - - /* perform a breadth first search. Target is nullptr, - * since we are just looking for any safe tile...*/ - AyStarUserData user = { v->owner, TRANSPORT_RAIL, railtypes, ROADTYPES_NONE, 0 }; - return NPFRouteInternal(&start1, true, nullptr, false, &fstd, NPFFindSafeTile, NPFCalcZero, &user, 0, true).res_okay; -} - -bool NPFTrainCheckReverse(const Train *v) -{ - NPFFindStationOrTileData fstd; - NPFFoundTargetData ftd; - const Train *last = v->Last(); - - NPFFillWithOrderData(&fstd, v); - - Trackdir trackdir = v->GetVehicleTrackdir(); - Trackdir trackdir_rev = ReverseTrackdir(last->GetVehicleTrackdir()); - assert(trackdir != INVALID_TRACKDIR); - assert(trackdir_rev != INVALID_TRACKDIR); - - AyStarUserData user = { v->owner, TRANSPORT_RAIL, v->compatible_railtypes, ROADTYPES_NONE, 0 }; - ftd = NPFRouteToStationOrTileTwoWay(v->tile, trackdir, false, last->tile, trackdir_rev, false, &fstd, &user); - /* If we didn't find anything, just keep on going straight ahead, otherwise take the reverse flag */ - return ftd.best_bird_dist == 0 && NPFGetFlag(&ftd.node, NPF_FLAG_REVERSE); -} - -Track NPFTrainChooseTrack(const Train *v, bool &path_found, bool reserve_track, struct PBSTileInfo *target) -{ - NPFFindStationOrTileData fstd; - NPFFillWithOrderData(&fstd, v, reserve_track); - - PBSTileInfo origin = FollowTrainReservation(v); - assert(IsValidTrackdir(origin.trackdir)); - - AyStarUserData user = { v->owner, TRANSPORT_RAIL, v->compatible_railtypes, ROADTYPES_NONE, 0 }; - NPFFoundTargetData ftd = NPFRouteToStationOrTile(origin.tile, origin.trackdir, true, &fstd, &user); - - if (target != nullptr) { - target->tile = ftd.node.tile; - target->trackdir = ftd.node.direction; - target->okay = ftd.res_okay; - } - - assert(ftd.best_trackdir != INVALID_TRACKDIR); - - /* If ftd.best_bird_dist is 0, we found our target and ftd.best_trackdir contains - * the direction we need to take to get there, if ftd.best_bird_dist is not 0, - * we did not find our target, but ftd.best_trackdir contains the direction leading - * to the tile closest to our target. */ - path_found = (ftd.best_bird_dist == 0); - /* Discard enterdir information, making it a normal track */ - return TrackdirToTrack(ftd.best_trackdir); -} diff --git a/src/pathfinder/npf/npf_func.h b/src/pathfinder/npf/npf_func.h deleted file mode 100644 index 9183f76ed5..0000000000 --- a/src/pathfinder/npf/npf_func.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * 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 npf_func.h Functions to access the new pathfinder. */ - -#ifndef NPF_FUNC_H -#define NPF_FUNC_H - -#include "../../track_type.h" -#include "../../direction_type.h" -#include "../../vehicle_type.h" -#include "../pathfinder_type.h" - -/** - * Used when user sends road vehicle to the nearest depot or if road vehicle needs servicing using NPF. - * @param v vehicle that needs to go to some depot - * @param max_penalty max distance (in pathfinder penalty) from the current vehicle position - * (used also as optimization - the pathfinder can stop path finding if max_penalty - * was reached and no depot was seen) - * @return the data about the depot - */ -FindDepotData NPFRoadVehicleFindNearestDepot(const RoadVehicle *v, int max_penalty); - -/** - * Finds the best path for given road vehicle using NPF. - * @param v the RV that needs to find a path - * @param tile the tile to find the path from (should be next tile the RV is about to enter) - * @param enterdir diagonal direction which the RV will enter this new tile from - * @param path_found [out] Whether a path has been found (true) or has been guessed (false) - * @return the best trackdir for next turn or INVALID_TRACKDIR if the path could not be found - */ -Trackdir NPFRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, bool &path_found); - -/** - * Finds the best path for given ship using NPF. - * @param v the ship that needs to find a path - * @param path_found [out] Whether a path has been found (true) or has been guessed (false) - * @return the best trackdir for next turn or INVALID_TRACK if the path could not be found - */ -Track NPFShipChooseTrack(const Ship *v, bool &path_found); - -/** - * Returns true if it is better to reverse the ship before leaving depot using NPF. - * @param v the ship leaving the depot - * @param trackdir [out] the best of all possible reversed trackdirs - * @return true if reversing is better - */ -bool NPFShipCheckReverse(const Ship *v, Trackdir *trackdir); - -/** - * Used when user sends train to the nearest depot or if train needs servicing using NPF - * @param v train that needs to go to some depot - * @param max_penalty max max_penalty (in pathfinder penalty) from the current train position - * (used also as optimization - the pathfinder can stop path finding if max_penalty - * was reached and no depot was seen) - * @return the data about the depot - */ -FindDepotData NPFTrainFindNearestDepot(const Train *v, int max_penalty); - -/** - * Try to extend the reserved path of a train to the nearest safe tile using NPF. - * - * @param v The train that needs to find a safe tile. - * @param tile Last tile of the current reserved path. - * @param td Last trackdir of the current reserved path. - * @param override_railtype Should all physically compatible railtypes be searched, even if the vehicle can't run on them on its own? - * @return True if the path could be extended to a safe tile. - */ -bool NPFTrainFindNearestSafeTile(const Train *v, TileIndex tile, Trackdir td, bool override_railtype); - -/** - * Returns true if it is better to reverse the train before leaving station using NPF. - * @param v the train leaving the station - * @return true if reversing is better - */ -bool NPFTrainCheckReverse(const Train *v); - -/** - * Finds the best path for given train using NPF. - * @param v the train that needs to find a path - * @param path_found [out] Whether a path has been found (true) or has been guessed (false) - * @param reserve_track indicates whether YAPF should try to reserve the found path - * @param target [out] the target tile of the reservation, free is set to true if path was reserved - * @return the best track for next turn - */ -Track NPFTrainChooseTrack(const Train *v, bool &path_found, bool reserve_track, struct PBSTileInfo *target); - -#endif /* NPF_FUNC_H */ diff --git a/src/pathfinder/pathfinder_type.h b/src/pathfinder/pathfinder_type.h index a7e6228a93..7f3a3f474b 100644 --- a/src/pathfinder/pathfinder_type.h +++ b/src/pathfinder/pathfinder_type.h @@ -13,18 +13,6 @@ #include "../tile_type.h" #include "npf/aystar.h" -/** Length (penalty) of one tile with NPF */ -static const int NPF_TILE_LENGTH = 100; - -/** - * This penalty is the equivalent of "infinite", which means that paths that - * get this penalty will be chosen, but only if there is no other route - * without it. Be careful with not applying this penalty too often, or the - * total path cost might overflow. - */ -static const int NPF_INFINITE_PENALTY = 1000 * NPF_TILE_LENGTH; - - /** Length (penalty) of one tile with YAPF */ static const int YAPF_TILE_LENGTH = 100; diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 734059d580..a638f379fe 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -12,7 +12,6 @@ #include "command_func.h" #include "error_func.h" #include "news_func.h" -#include "pathfinder/npf/npf_func.h" #include "station_base.h" #include "company_func.h" #include "articulated_vehicles.h" @@ -342,12 +341,7 @@ static FindDepotData FindClosestRoadDepot(const RoadVehicle *v, int max_distance { if (IsRoadDepotTile(v->tile)) return FindDepotData(v->tile, 0); - switch (_settings_game.pf.pathfinder_for_roadvehs) { - case VPF_NPF: return NPFRoadVehicleFindNearestDepot(v, max_distance); - case VPF_YAPF: return YapfRoadVehicleFindNearestDepot(v, max_distance); - - default: NOT_REACHED(); - } + return YapfRoadVehicleFindNearestDepot(v, max_distance); } ClosestDepot RoadVehicle::FindClosestDepot() @@ -989,12 +983,8 @@ static Trackdir RoadFindPathToDest(RoadVehicle *v, TileIndex tile, DiagDirection } } - switch (_settings_game.pf.pathfinder_for_roadvehs) { - case VPF_NPF: best_track = NPFRoadVehicleChooseTrack(v, tile, enterdir, path_found); break; - case VPF_YAPF: best_track = YapfRoadVehicleChooseTrack(v, tile, enterdir, trackdirs, path_found, v->path); break; + best_track = YapfRoadVehicleChooseTrack(v, tile, enterdir, trackdirs, path_found, v->path); - default: NOT_REACHED(); - } v->HandlePathfindingResult(path_found); found_best_track:; @@ -1683,12 +1673,7 @@ static void CheckIfRoadVehNeedsService(RoadVehicle *v) return; } - uint max_penalty; - switch (_settings_game.pf.pathfinder_for_roadvehs) { - case VPF_NPF: max_penalty = _settings_game.pf.npf.maximum_go_to_depot_penalty; break; - case VPF_YAPF: max_penalty = _settings_game.pf.yapf.maximum_go_to_depot_penalty; break; - default: NOT_REACHED(); - } + uint max_penalty = _settings_game.pf.yapf.maximum_go_to_depot_penalty; FindDepotData rfdd = FindClosestRoadDepot(v, max_penalty); /* Only go to the depot if it is not too far out of our way. */ diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index a62f19c05b..4771490268 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -1889,25 +1889,6 @@ bool AfterLoadGame() if (!Company::IsValidID(GetTileOwner(t))) FixOwnerOfRailTrack(t); } } - - /* Convert old PF settings to new */ - if (_settings_game.pf.yapf.rail_use_yapf || IsSavegameVersionBefore(SLV_28)) { - _settings_game.pf.pathfinder_for_trains = VPF_YAPF; - } else { - _settings_game.pf.pathfinder_for_trains = VPF_NPF; - } - - if (_settings_game.pf.yapf.road_use_yapf || IsSavegameVersionBefore(SLV_28)) { - _settings_game.pf.pathfinder_for_roadvehs = VPF_YAPF; - } else { - _settings_game.pf.pathfinder_for_roadvehs = VPF_NPF; - } - - if (_settings_game.pf.yapf.ship_use_yapf) { - _settings_game.pf.pathfinder_for_ships = VPF_YAPF; - } else { - _settings_game.pf.pathfinder_for_ships = VPF_NPF; - } } if (IsSavegameVersionBefore(SLV_88)) { diff --git a/src/saveload/compat/settings_sl_compat.h b/src/saveload/compat/settings_sl_compat.h index 84a0464c71..37005b98e2 100644 --- a/src/saveload/compat/settings_sl_compat.h +++ b/src/saveload/compat/settings_sl_compat.h @@ -95,13 +95,9 @@ const SaveLoadCompat _settings_sl_compat[] = { SLC_VAR("vehicle.smoke_amount"), SLC_NULL(1, SL_MIN_VERSION, SLV_159), SLC_VAR("pf.roadveh_queue"), - SLC_VAR("pf.new_pathfinding_all"), - SLC_VAR("pf.yapf.ship_use_yapf"), - SLC_VAR("pf.yapf.road_use_yapf"), - SLC_VAR("pf.yapf.rail_use_yapf"), - SLC_VAR("pf.pathfinder_for_trains"), - SLC_VAR("pf.pathfinder_for_roadvehs"), - SLC_VAR("pf.pathfinder_for_ships"), + SLC_NULL(1, SL_MIN_VERSION, SLV_87), + SLC_NULL(3, SLV_28, SLV_87), + SLC_NULL(3, SLV_87, SLV_TABLE_CHUNKS), SLC_VAR("vehicle.never_expire_vehicles"), SLC_VAR("vehicle.max_trains"), SLC_VAR("vehicle.max_roadveh"), @@ -183,24 +179,12 @@ const SaveLoadCompat _settings_sl_compat[] = { SLC_VAR("pf.reserve_paths"), SLC_VAR("pf.path_backoff_interval"), SLC_NULL(3, SL_MIN_VERSION, SLV_REMOVE_OPF), - SLC_VAR("pf.npf.npf_max_search_nodes"), - SLC_VAR("pf.npf.npf_rail_firstred_penalty"), - SLC_VAR("pf.npf.npf_rail_firstred_exit_penalty"), - SLC_VAR("pf.npf.npf_rail_lastred_penalty"), - SLC_VAR("pf.npf.npf_rail_station_penalty"), - SLC_VAR("pf.npf.npf_rail_slope_penalty"), - SLC_VAR("pf.npf.npf_rail_curve_penalty"), - SLC_VAR("pf.npf.npf_rail_depot_reverse_penalty"), - SLC_VAR("pf.npf.npf_rail_pbs_cross_penalty"), - SLC_VAR("pf.npf.npf_rail_pbs_signal_back_penalty"), - SLC_VAR("pf.npf.npf_buoy_penalty"), - SLC_VAR("pf.npf.npf_water_curve_penalty"), - SLC_VAR("pf.npf.npf_road_curve_penalty"), - SLC_VAR("pf.npf.npf_crossing_penalty"), - SLC_VAR("pf.npf.npf_road_drive_through_penalty"), - SLC_VAR("pf.npf.npf_road_dt_occupied_penalty"), - SLC_VAR("pf.npf.npf_road_bay_occupied_penalty"), - SLC_VAR("pf.npf.maximum_go_to_depot_penalty"), + SLC_NULL(32, SL_MIN_VERSION, SLV_TABLE_CHUNKS), + SLC_NULL(8, SLV_100, SLV_TABLE_CHUNKS), + SLC_NULL(16, SL_MIN_VERSION, SLV_TABLE_CHUNKS), + SLC_NULL(4, SLV_47, SLV_TABLE_CHUNKS), + SLC_NULL(8, SLV_130, SLV_TABLE_CHUNKS), + SLC_NULL(4, SLV_131, SLV_TABLE_CHUNKS), SLC_VAR("pf.yapf.disable_node_optimization"), SLC_VAR("pf.yapf.max_search_nodes"), SLC_VAR("pf.yapf.rail_firstred_twoway_eol"), diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index b2eaccc22e..8c7233a469 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2129,12 +2129,9 @@ static SettingsContainer &GetSettingsTree() SettingsPage *routing = vehicles->Add(new SettingsPage(STR_CONFIG_SETTING_VEHICLES_ROUTING)); { routing->Add(new SettingEntry("vehicle.road_side")); - routing->Add(new SettingEntry("pf.pathfinder_for_trains")); routing->Add(new SettingEntry("difficulty.line_reverse_mode")); routing->Add(new SettingEntry("pf.reverse_at_signals")); routing->Add(new SettingEntry("pf.forbid_90_deg")); - routing->Add(new SettingEntry("pf.pathfinder_for_roadvehs")); - routing->Add(new SettingEntry("pf.pathfinder_for_ships")); } SettingsPage *orders = vehicles->Add(new SettingsPage(STR_CONFIG_SETTING_VEHICLES_ORDERS)); diff --git a/src/settings_type.h b/src/settings_type.h index 8064466404..239a845a90 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -409,42 +409,11 @@ struct ScriptSettings { uint32_t script_max_memory_megabytes; ///< limit on memory a single script instance may have allocated }; -/** Settings related to the new pathfinder. */ -struct NPFSettings { - /** - * The maximum amount of search nodes a single NPF run should take. This - * limit should make sure performance stays at acceptable levels at the cost - * of not being perfect anymore. - */ - uint32_t npf_max_search_nodes; - uint32_t maximum_go_to_depot_penalty; ///< What is the maximum penalty that may be endured for going to a depot - - uint32_t npf_rail_firstred_penalty; ///< the penalty for when the first signal is red (and it is not an exit or combo signal) - uint32_t npf_rail_firstred_exit_penalty; ///< the penalty for when the first signal is red (and it is an exit or combo signal) - uint32_t npf_rail_lastred_penalty; ///< the penalty for when the last signal is red - uint32_t npf_rail_station_penalty; ///< the penalty for station tiles - uint32_t npf_rail_slope_penalty; ///< the penalty for sloping upwards - uint32_t npf_rail_curve_penalty; ///< the penalty for curves - uint32_t npf_rail_depot_reverse_penalty; ///< the penalty for reversing in depots - uint32_t npf_rail_pbs_cross_penalty; ///< the penalty for crossing a reserved rail track - uint32_t npf_rail_pbs_signal_back_penalty; ///< the penalty for passing a pbs signal from the backside - uint32_t npf_buoy_penalty; ///< the penalty for going over (through) a buoy - uint32_t npf_water_curve_penalty; ///< the penalty for curves - uint32_t npf_road_curve_penalty; ///< the penalty for curves - uint32_t npf_crossing_penalty; ///< the penalty for level crossings - uint32_t npf_road_drive_through_penalty; ///< the penalty for going through a drive-through road stop - uint32_t npf_road_dt_occupied_penalty; ///< the penalty multiplied by the fill percentage of a drive-through road stop - uint32_t npf_road_bay_occupied_penalty; ///< the penalty multiplied by the fill percentage of a road bay -}; - /** Settings related to the yet another pathfinder. */ struct YAPFSettings { bool disable_node_optimization; ///< whether to use exit-dir instead of trackdir in node key uint32_t max_search_nodes; ///< stop path-finding when this number of nodes visited uint32_t maximum_go_to_depot_penalty; ///< What is the maximum penalty that may be endured for going to a depot - bool ship_use_yapf; ///< use YAPF for ships - bool road_use_yapf; ///< use YAPF for road - bool rail_use_yapf; ///< use YAPF for rail uint32_t road_slope_penalty; ///< penalty for up-hill slope uint32_t road_curve_penalty; ///< penalty for curves uint32_t road_crossing_penalty; ///< penalty for level crossing @@ -481,11 +450,6 @@ struct YAPFSettings { /** Settings related to all pathfinders. */ struct PathfinderSettings { - uint8_t pathfinder_for_trains; ///< the pathfinder to use for trains - uint8_t pathfinder_for_roadvehs; ///< the pathfinder to use for roadvehicles - uint8_t pathfinder_for_ships; ///< the pathfinder to use for ships - bool new_pathfinding_all; ///< use the newest pathfinding algorithm for all - bool roadveh_queue; ///< buggy road vehicle queueing bool forbid_90_deg; ///< forbid trains to make 90 deg turns @@ -497,7 +461,6 @@ struct PathfinderSettings { uint8_t wait_for_pbs_path; ///< how long to wait for a path reservation. uint8_t path_backoff_interval; ///< ticks between checks for a free path. - NPFSettings npf; ///< pathfinder settings for the new pathfinder YAPFSettings yapf; ///< pathfinder settings for the yet another pathfinder }; diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index d674d4d919..dcd2f6825f 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -13,7 +13,6 @@ #include "timetable.h" #include "news_func.h" #include "company_func.h" -#include "pathfinder/npf/npf_func.h" #include "depot_base.h" #include "station_base.h" #include "newgrf_engine.h" @@ -210,12 +209,7 @@ static void CheckIfShipNeedsService(Vehicle *v) return; } - uint max_distance; - switch (_settings_game.pf.pathfinder_for_ships) { - case VPF_NPF: max_distance = _settings_game.pf.npf.maximum_go_to_depot_penalty / NPF_TILE_LENGTH; break; - case VPF_YAPF: max_distance = _settings_game.pf.yapf.maximum_go_to_depot_penalty / YAPF_TILE_LENGTH; break; - default: NOT_REACHED(); - } + uint max_distance = _settings_game.pf.yapf.maximum_go_to_depot_penalty / YAPF_TILE_LENGTH; const Depot *depot = FindClosestShipDepot(v, max_distance); @@ -376,13 +370,7 @@ static Vehicle *EnsureNoMovingShipProc(Vehicle *v, void *) static bool CheckReverseShip(const Ship *v, Trackdir *trackdir = nullptr) { /* Ask pathfinder for best direction */ - bool reverse = false; - switch (_settings_game.pf.pathfinder_for_ships) { - case VPF_NPF: reverse = NPFShipCheckReverse(v, trackdir); break; - case VPF_YAPF: reverse = YapfShipCheckReverse(v, trackdir); break; - default: NOT_REACHED(); - } - return reverse; + return YapfShipCheckReverse(v, trackdir); } static bool CheckShipLeaveDepot(Ship *v) @@ -530,11 +518,7 @@ static Track ChooseShipTrack(Ship *v, TileIndex tile, TrackBits tracks) v->path.clear(); } - switch (_settings_game.pf.pathfinder_for_ships) { - case VPF_NPF: track = NPFShipChooseTrack(v, path_found); break; - case VPF_YAPF: track = YapfShipChooseTrack(v, tile, path_found, v->path); break; - default: NOT_REACHED(); - } + track = YapfShipChooseTrack(v, tile, path_found, v->path); } v->HandlePathfindingResult(path_found); diff --git a/src/table/settings/pathfinding_settings.ini b/src/table/settings/pathfinding_settings.ini index 75ec95e7a6..3a558130fd 100644 --- a/src/table/settings/pathfinding_settings.ini +++ b/src/table/settings/pathfinding_settings.ini @@ -52,76 +52,6 @@ var = pf.roadveh_queue def = true cat = SC_EXPERT -[SDT_BOOL] -var = pf.new_pathfinding_all -to = SLV_87 -def = false -cat = SC_EXPERT - -[SDT_BOOL] -var = pf.yapf.ship_use_yapf -from = SLV_28 -to = SLV_87 -def = false -cat = SC_EXPERT - -[SDT_BOOL] -var = pf.yapf.road_use_yapf -from = SLV_28 -to = SLV_87 -def = true -cat = SC_EXPERT - -[SDT_BOOL] -var = pf.yapf.rail_use_yapf -from = SLV_28 -to = SLV_87 -def = true -cat = SC_EXPERT - -[SDT_VAR] -var = pf.pathfinder_for_trains -type = SLE_UINT8 -from = SLV_87 -flags = SF_GUI_DROPDOWN -def = 2 -min = 1 -max = 2 -interval = 1 -str = STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS -strhelp = STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT -strval = STR_CONFIG_SETTING_PATHFINDER_NPF -cat = SC_EXPERT - -[SDT_VAR] -var = pf.pathfinder_for_roadvehs -type = SLE_UINT8 -from = SLV_87 -flags = SF_GUI_DROPDOWN -def = 2 -min = 1 -max = 2 -interval = 1 -str = STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES -strhelp = STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT -strval = STR_CONFIG_SETTING_PATHFINDER_NPF -cat = SC_EXPERT - -[SDT_VAR] -var = pf.pathfinder_for_ships -type = SLE_UINT8 -from = SLV_87 -flags = SF_GUI_DROPDOWN -def = 2 -min = 1 -max = 2 -interval = 1 -str = STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS -strhelp = STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT -strval = STR_CONFIG_SETTING_PATHFINDER_NPF -post_cb = InvalidateShipPathCache -cat = SC_EXPERT - [SDT_BOOL] var = pf.reverse_at_signals from = SLV_159 @@ -169,156 +99,6 @@ min = 1 max = 255 cat = SC_EXPERT -[SDT_VAR] -var = pf.npf.npf_max_search_nodes -type = SLE_UINT -def = AYSTAR_DEF_MAX_SEARCH_NODES -min = 500 -max = 100000 -cat = SC_EXPERT - -[SDT_VAR] -var = pf.npf.npf_rail_firstred_penalty -type = SLE_UINT -def = 10 * NPF_TILE_LENGTH -min = 0 -max = 100000 -cat = SC_EXPERT - -[SDT_VAR] -var = pf.npf.npf_rail_firstred_exit_penalty -type = SLE_UINT -def = 100 * NPF_TILE_LENGTH -min = 0 -max = 100000 -cat = SC_EXPERT - -[SDT_VAR] -var = pf.npf.npf_rail_lastred_penalty -type = SLE_UINT -def = 10 * NPF_TILE_LENGTH -min = 0 -max = 100000 -cat = SC_EXPERT - -[SDT_VAR] -var = pf.npf.npf_rail_station_penalty -type = SLE_UINT -def = 1 * NPF_TILE_LENGTH -min = 0 -max = 100000 -cat = SC_EXPERT - -[SDT_VAR] -var = pf.npf.npf_rail_slope_penalty -type = SLE_UINT -def = 1 * NPF_TILE_LENGTH -min = 0 -max = 100000 -cat = SC_EXPERT - -[SDT_VAR] -var = pf.npf.npf_rail_curve_penalty -type = SLE_UINT -def = 1 * NPF_TILE_LENGTH -min = 0 -max = 100000 -cat = SC_EXPERT - -[SDT_VAR] -var = pf.npf.npf_rail_depot_reverse_penalty -type = SLE_UINT -def = 50 * NPF_TILE_LENGTH -min = 0 -max = 100000 -cat = SC_EXPERT - -[SDT_VAR] -var = pf.npf.npf_rail_pbs_cross_penalty -type = SLE_UINT -from = SLV_100 -def = 3 * NPF_TILE_LENGTH -min = 0 -max = 100000 -cat = SC_EXPERT - -[SDT_VAR] -var = pf.npf.npf_rail_pbs_signal_back_penalty -type = SLE_UINT -from = SLV_100 -def = 15 * NPF_TILE_LENGTH -min = 0 -max = 100000 -cat = SC_EXPERT - -[SDT_VAR] -var = pf.npf.npf_buoy_penalty -type = SLE_UINT -def = 2 * NPF_TILE_LENGTH -min = 0 -max = 100000 -cat = SC_EXPERT - -[SDT_VAR] -var = pf.npf.npf_water_curve_penalty -type = SLE_UINT -def = 1 * NPF_TILE_LENGTH -min = 0 -max = 100000 -cat = SC_EXPERT - -[SDT_VAR] -var = pf.npf.npf_road_curve_penalty -type = SLE_UINT -def = 1 * NPF_TILE_LENGTH -min = 0 -max = 100000 -cat = SC_EXPERT - -[SDT_VAR] -var = pf.npf.npf_crossing_penalty -type = SLE_UINT -def = 3 * NPF_TILE_LENGTH -min = 0 -max = 100000 -cat = SC_EXPERT - -[SDT_VAR] -var = pf.npf.npf_road_drive_through_penalty -type = SLE_UINT -from = SLV_47 -def = 8 * NPF_TILE_LENGTH -min = 0 -max = 100000 -cat = SC_EXPERT - -[SDT_VAR] -var = pf.npf.npf_road_dt_occupied_penalty -type = SLE_UINT -from = SLV_130 -def = 8 * NPF_TILE_LENGTH -min = 0 -max = 100000 -cat = SC_EXPERT - -[SDT_VAR] -var = pf.npf.npf_road_bay_occupied_penalty -type = SLE_UINT -from = SLV_130 -def = 15 * NPF_TILE_LENGTH -min = 0 -max = 100000 -cat = SC_EXPERT - -[SDT_VAR] -var = pf.npf.maximum_go_to_depot_penalty -type = SLE_UINT -from = SLV_131 -def = 20 * NPF_TILE_LENGTH -min = 0 -max = 1000000 -cat = SC_EXPERT - [SDT_BOOL] var = pf.yapf.disable_node_optimization from = SLV_28 diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 51353c5281..9664204f14 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -12,7 +12,6 @@ #include "articulated_vehicles.h" #include "command_func.h" #include "error_func.h" -#include "pathfinder/npf/npf_func.h" #include "pathfinder/yapf/yapf.hpp" #include "news_func.h" #include "company_func.h" @@ -2171,12 +2170,7 @@ static FindDepotData FindClosestTrainDepot(Train *v, int max_distance) PBSTileInfo origin = FollowTrainReservation(v); if (IsRailDepotTile(origin.tile)) return FindDepotData(origin.tile, 0); - switch (_settings_game.pf.pathfinder_for_trains) { - case VPF_NPF: return NPFTrainFindNearestDepot(v, max_distance); - case VPF_YAPF: return YapfTrainFindNearestDepot(v, max_distance); - - default: NOT_REACHED(); - } + return YapfTrainFindNearestDepot(v, max_distance); } ClosestDepot Train::FindClosestDepot() @@ -2473,13 +2467,7 @@ static const uint8_t _initial_tile_subcoord[6][4][3] = { static Track DoTrainPathfind(const Train *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, bool do_track_reservation, PBSTileInfo *dest, TileIndex *final_dest) { if (final_dest != nullptr) *final_dest = INVALID_TILE; - - switch (_settings_game.pf.pathfinder_for_trains) { - case VPF_NPF: return NPFTrainChooseTrack(v, path_found, do_track_reservation, dest); - case VPF_YAPF: return YapfTrainChooseTrack(v, tile, enterdir, tracks, path_found, do_track_reservation, dest, final_dest); - - default: NOT_REACHED(); - } + return YapfTrainChooseTrack(v, tile, enterdir, tracks, path_found, do_track_reservation, dest, final_dest); } /** @@ -2581,12 +2569,7 @@ static PBSTileInfo ExtendTrainReservation(const Train *v, TrackBits *new_tracks, */ static bool TryReserveSafeTrack(const Train *v, TileIndex tile, Trackdir td, bool override_railtype) { - switch (_settings_game.pf.pathfinder_for_trains) { - case VPF_NPF: return NPFTrainFindNearestSafeTile(v, tile, td, override_railtype); - case VPF_YAPF: return YapfTrainFindNearestSafeTile(v, tile, td, override_railtype); - - default: NOT_REACHED(); - } + return YapfTrainFindNearestSafeTile(v, tile, td, override_railtype); } /** This class will save the current order of a vehicle and restore it on destruction. */ @@ -2934,12 +2917,7 @@ static bool CheckReverseTrain(const Train *v) assert(v->track != TRACK_BIT_NONE); - switch (_settings_game.pf.pathfinder_for_trains) { - case VPF_NPF: return NPFTrainCheckReverse(v); - case VPF_YAPF: return YapfTrainCheckReverse(v); - - default: NOT_REACHED(); - } + return YapfTrainCheckReverse(v); } /** @@ -4142,12 +4120,7 @@ static void CheckIfTrainNeedsService(Train *v) return; } - uint max_penalty; - switch (_settings_game.pf.pathfinder_for_trains) { - case VPF_NPF: max_penalty = _settings_game.pf.npf.maximum_go_to_depot_penalty; break; - case VPF_YAPF: max_penalty = _settings_game.pf.yapf.maximum_go_to_depot_penalty; break; - default: NOT_REACHED(); - } + uint max_penalty = _settings_game.pf.yapf.maximum_go_to_depot_penalty; FindDepotData tfdd = FindClosestTrainDepot(v, max_penalty); /* Only go to the depot if it is not too far out of our way. */ diff --git a/src/vehicle_type.h b/src/vehicle_type.h index 89003224e4..bb645f6ef2 100644 --- a/src/vehicle_type.h +++ b/src/vehicle_type.h @@ -53,13 +53,6 @@ struct BaseVehicle static const VehicleID INVALID_VEHICLE = 0xFFFFF; ///< Constant representing a non-existing vehicle. -/** Pathfinding option states */ -enum VehiclePathFinders { - // Original PathFinder (OPF) used to be 0 - VPF_NPF = 1, ///< New PathFinder - VPF_YAPF = 2, ///< Yet Another PathFinder -}; - /** Flags for goto depot commands. */ enum class DepotCommand : uint8_t { None = 0, ///< No special flags. From 798ec4184b6ec8a579ab27b7b6acaa7f9e60cd38 Mon Sep 17 00:00:00 2001 From: merni-ns Date: Sat, 2 Mar 2024 22:05:02 +0530 Subject: [PATCH 496/695] Cleanup: Remove unused function InvalidateShipPathCache This was only used in the callback when changing the ship pathfinder setting. --- src/settings_table.cpp | 7 ------- src/table/settings/pathfinding_settings.ini | 2 -- 2 files changed, 9 deletions(-) diff --git a/src/settings_table.cpp b/src/settings_table.cpp index dcf19c8254..3ca66dd9ee 100644 --- a/src/settings_table.cpp +++ b/src/settings_table.cpp @@ -555,13 +555,6 @@ static void MaxVehiclesChanged(int32_t) MarkWholeScreenDirty(); } -static void InvalidateShipPathCache(int32_t) -{ - for (Ship *s : Ship::Iterate()) { - s->path.clear(); - } -} - /** * Replace a passwords that are a literal asterisk with an empty string. * @param newval The new string value for this password field. diff --git a/src/table/settings/pathfinding_settings.ini b/src/table/settings/pathfinding_settings.ini index 3a558130fd..8d7521b661 100644 --- a/src/table/settings/pathfinding_settings.ini +++ b/src/table/settings/pathfinding_settings.ini @@ -8,8 +8,6 @@ ; and in the savegame PATS chunk. [pre-amble] -static void InvalidateShipPathCache(int32_t new_value); - static const SettingVariant _pathfinding_settings_table[] = { [post-amble] }; From c3ee5e58a3e409666fac38f3ed8e0a4610ff33ba Mon Sep 17 00:00:00 2001 From: merni-ns Date: Sat, 2 Mar 2024 22:12:47 +0530 Subject: [PATCH 497/695] Cleanup: Move remaining NPF files into pathfinder directory --- src/landscape.cpp | 2 +- src/pathfinder/CMakeLists.txt | 5 ++++- src/pathfinder/{npf => }/aystar.cpp | 0 src/pathfinder/{npf => }/aystar.h | 0 src/pathfinder/npf/CMakeLists.txt | 6 ------ src/pathfinder/pathfinder_type.h | 2 +- src/pathfinder/{npf => }/queue.cpp | 0 src/pathfinder/{npf => }/queue.h | 0 8 files changed, 6 insertions(+), 9 deletions(-) rename src/pathfinder/{npf => }/aystar.cpp (100%) rename src/pathfinder/{npf => }/aystar.h (100%) delete mode 100644 src/pathfinder/npf/CMakeLists.txt rename src/pathfinder/{npf => }/queue.cpp (100%) rename src/pathfinder/{npf => }/queue.h (100%) diff --git a/src/landscape.cpp b/src/landscape.cpp index 932b4167f1..9abadda591 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -30,7 +30,7 @@ #include "core/random_func.hpp" #include "object_base.h" #include "company_func.h" -#include "pathfinder/npf/aystar.h" +#include "pathfinder/aystar.h" #include "saveload/saveload.h" #include "framerate_type.h" #include "landscape_cmd.h" diff --git a/src/pathfinder/CMakeLists.txt b/src/pathfinder/CMakeLists.txt index adf896895d..f34463cbf6 100644 --- a/src/pathfinder/CMakeLists.txt +++ b/src/pathfinder/CMakeLists.txt @@ -1,8 +1,11 @@ -add_subdirectory(npf) add_subdirectory(yapf) add_files( + aystar.h + aystar.cpp follow_track.hpp + queue.h + queue.cpp pathfinder_func.h pathfinder_type.h water_regions.h diff --git a/src/pathfinder/npf/aystar.cpp b/src/pathfinder/aystar.cpp similarity index 100% rename from src/pathfinder/npf/aystar.cpp rename to src/pathfinder/aystar.cpp diff --git a/src/pathfinder/npf/aystar.h b/src/pathfinder/aystar.h similarity index 100% rename from src/pathfinder/npf/aystar.h rename to src/pathfinder/aystar.h diff --git a/src/pathfinder/npf/CMakeLists.txt b/src/pathfinder/npf/CMakeLists.txt deleted file mode 100644 index 8a79949dce..0000000000 --- a/src/pathfinder/npf/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -add_files( - aystar.cpp - aystar.h - queue.cpp - queue.h -) diff --git a/src/pathfinder/pathfinder_type.h b/src/pathfinder/pathfinder_type.h index 7f3a3f474b..aadcdac8d2 100644 --- a/src/pathfinder/pathfinder_type.h +++ b/src/pathfinder/pathfinder_type.h @@ -11,7 +11,7 @@ #define PATHFINDER_TYPE_H #include "../tile_type.h" -#include "npf/aystar.h" +#include "aystar.h" /** Length (penalty) of one tile with YAPF */ static const int YAPF_TILE_LENGTH = 100; diff --git a/src/pathfinder/npf/queue.cpp b/src/pathfinder/queue.cpp similarity index 100% rename from src/pathfinder/npf/queue.cpp rename to src/pathfinder/queue.cpp diff --git a/src/pathfinder/npf/queue.h b/src/pathfinder/queue.h similarity index 100% rename from src/pathfinder/npf/queue.h rename to src/pathfinder/queue.h From ffe76a0133eb3dcc405cd6a0a809e12e8c436733 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 24 Mar 2024 14:17:47 +0100 Subject: [PATCH 498/695] Update: Doxyfiles to doxygen 1.9.4 --- Doxyfile.in | 32 ++++++- src/script/api/Doxyfile_AI.in | 168 ++++++++++++++++++++++++++++------ src/script/api/Doxyfile_GS.in | 168 ++++++++++++++++++++++++++++------ 3 files changed, 312 insertions(+), 56 deletions(-) diff --git a/Doxyfile.in b/Doxyfile.in index 4e287889af..0e8eee4b2e 100644 --- a/Doxyfile.in +++ b/Doxyfile.in @@ -3,6 +3,8 @@ # 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 . +# Doxyfile 1.9.4 + #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- @@ -13,6 +15,7 @@ PROJECT_BRIEF = PROJECT_LOGO = OUTPUT_DIRECTORY = ${CPACK_BINARY_DIR}/docs/source/ CREATE_SUBDIRS = YES +CREATE_SUBDIRS_LEVEL = 8 ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES @@ -35,8 +38,10 @@ STRIP_FROM_PATH = ./ STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = YES +JAVADOC_BANNER = NO QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO +PYTHON_DOCSTRING = YES INHERIT_DOCS = YES SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 2 @@ -45,6 +50,7 @@ OPTIMIZE_OUTPUT_FOR_C = YES OPTIMIZE_OUTPUT_JAVA = NO OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO +OPTIMIZE_OUTPUT_SLICE = NO EXTENSION_MAPPING = MARKDOWN_SUPPORT = YES TOC_INCLUDE_HEADINGS = 0 @@ -60,16 +66,19 @@ INLINE_GROUPED_CLASSES = NO INLINE_SIMPLE_STRUCTS = NO TYPEDEF_HIDES_STRUCT = NO LOOKUP_CACHE_SIZE = 0 +NUM_PROC_THREADS = 1 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = NO EXTRACT_PRIVATE = YES +EXTRACT_PRIV_VIRTUAL = NO EXTRACT_PACKAGE = NO EXTRACT_STATIC = YES EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = YES EXTRACT_ANON_NSPACES = YES +RESOLVE_UNNAMED_PARAMS = YES HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO @@ -78,6 +87,7 @@ INTERNAL_DOCS = NO CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO HIDE_COMPOUND_REFERENCE= NO +SHOW_HEADERFILE = YES SHOW_INCLUDE_FILES = YES SHOW_GROUPED_MEMB_INC = NO FORCE_LOCAL_INCLUDES = NO @@ -107,9 +117,11 @@ QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES +WARN_IF_INCOMPLETE_DOC = YES WARN_NO_PARAMDOC = NO WARN_AS_ERROR = NO WARN_FORMAT = "$file:$line: $text" +WARN_LINE_FORMAT = "at line $line of file $file" WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files @@ -150,6 +162,10 @@ REFERENCES_LINK_SOURCE = YES SOURCE_TOOLTIPS = YES USE_HTAGS = NO VERBATIM_HEADERS = YES +CLANG_ASSISTED_PARSING = NO +CLANG_ADD_INC_PATHS = YES +CLANG_OPTIONS = +CLANG_DATABASE_PATH = #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- @@ -175,6 +191,7 @@ HTML_DYNAMIC_SECTIONS = NO HTML_INDEX_NUM_ENTRIES = 100 GENERATE_DOCSET = NO DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_FEEDURL = DOCSET_BUNDLE_ID = org.doxygen.Project DOCSET_PUBLISHER_ID = org.doxygen.Publisher DOCSET_PUBLISHER_NAME = Publisher @@ -197,12 +214,17 @@ GENERATE_ECLIPSEHELP = NO ECLIPSE_DOC_ID = org.doxygen.Project DISABLE_INDEX = NO GENERATE_TREEVIEW = YES +FULL_SIDEBAR = NO ENUM_VALUES_PER_LINE = 4 TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO +OBFUSCATE_EMAILS = YES +HTML_FORMULA_FORMAT = png FORMULA_FONTSIZE = 10 FORMULA_TRANSPARENT = YES +FORMULA_MACROFILE = USE_MATHJAX = NO +MATHJAX_VERSION = MathJax_2 MATHJAX_FORMAT = HTML-CSS MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/ MATHJAX_EXTENSIONS = @@ -221,6 +243,7 @@ GENERATE_LATEX = NO LATEX_OUTPUT = latex LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex +LATEX_MAKEINDEX_CMD = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4 EXTRA_PACKAGES = @@ -232,9 +255,9 @@ PDF_HYPERLINKS = NO USE_PDFLATEX = NO LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO -LATEX_SOURCE_CODE = NO LATEX_BIB_STYLE = plain LATEX_TIMESTAMP = NO +LATEX_EMOJI_DIRECTORY = #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- @@ -244,7 +267,6 @@ COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = -RTF_SOURCE_CODE = NO #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- @@ -259,12 +281,12 @@ MAN_LINKS = NO GENERATE_XML = NO XML_OUTPUT = xml XML_PROGRAMLISTING = YES +XML_NS_MEMB_FILE_SCOPE = NO #--------------------------------------------------------------------------- # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook -DOCBOOK_PROGRAMLISTING = NO #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- @@ -311,7 +333,6 @@ EXTERNAL_PAGES = YES #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- -CLASS_DIAGRAMS = YES DIA_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO @@ -324,6 +345,8 @@ COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = NO UML_LIMIT_NUM_FIELDS = 10 +DOT_UML_DETAILS = NO +DOT_WRAP_THRESHOLD = 17 TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES @@ -331,6 +354,7 @@ CALL_GRAPH = NO CALLER_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES +DIR_GRAPH_MAX_DEPTH = 1 DOT_IMAGE_FORMAT = png INTERACTIVE_SVG = NO DOT_PATH = diff --git a/src/script/api/Doxyfile_AI.in b/src/script/api/Doxyfile_AI.in index cde1f21350..71ed743b37 100644 --- a/src/script/api/Doxyfile_AI.in +++ b/src/script/api/Doxyfile_AI.in @@ -3,7 +3,7 @@ # 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 . -# Doxyfile 1.5.4 +# Doxyfile 1.9.4 #--------------------------------------------------------------------------- # Project related configuration options @@ -11,14 +11,18 @@ DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "OpenTTD AI API" PROJECT_NUMBER = ${REV_VERSION} +PROJECT_BRIEF = +PROJECT_LOGO = OUTPUT_DIRECTORY = ${CPACK_BINARY_DIR}/docs/ai-api/ CREATE_SUBDIRS = NO +CREATE_SUBDIRS_LEVEL = 8 +ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES -ABBREVIATE_BRIEF = "The $name class " \ - "The $name widget " \ - "The $name file " \ +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ is \ provides \ specifies \ @@ -34,29 +38,47 @@ STRIP_FROM_PATH = ./ STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = YES +JAVADOC_BANNER = NO QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO +PYTHON_DOCSTRING = YES INHERIT_DOCS = YES SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 2 ALIASES = OPTIMIZE_OUTPUT_FOR_C = YES OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO +OPTIMIZE_OUTPUT_SLICE = NO +EXTENSION_MAPPING = +MARKDOWN_SUPPORT = YES +TOC_INCLUDE_HEADINGS = 5 +AUTOLINK_SUPPORT = YES BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES DISTRIBUTE_GROUP_DOC = NO +GROUP_NESTED_COMPOUNDS = NO SUBGROUPING = YES +INLINE_GROUPED_CLASSES = NO +INLINE_SIMPLE_STRUCTS = NO TYPEDEF_HIDES_STRUCT = NO +LOOKUP_CACHE_SIZE = 0 +NUM_PROC_THREADS = 1 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = NO EXTRACT_PRIVATE = NO +EXTRACT_PRIV_VIRTUAL = NO +EXTRACT_PACKAGE = NO EXTRACT_STATIC = YES EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = YES EXTRACT_ANON_NSPACES = NO +RESOLVE_UNNAMED_PARAMS = YES HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO @@ -64,11 +86,18 @@ HIDE_IN_BODY_DOCS = YES INTERNAL_DOCS = YES CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO +HIDE_COMPOUND_REFERENCE= NO +SHOW_HEADERFILE = YES SHOW_INCLUDE_FILES = NO +SHOW_GROUPED_MEMB_INC = NO +FORCE_LOCAL_INCLUDES = NO INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO +SORT_MEMBERS_CTORS_1ST = NO +SORT_GROUP_NAMES = YES SORT_BY_SCOPE_NAME = NO +STRICT_PROTO_MATCHING = NO GENERATE_TODOLIST = NO GENERATE_TESTLIST = NO GENERATE_BUGLIST = NO @@ -76,21 +105,29 @@ GENERATE_DEPRECATEDLIST= NO ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = NO +SHOW_FILES = YES +SHOW_NAMESPACES = YES FILE_VERSION_FILTER = +LAYOUT_FILE = +CITE_BIB_FILES = #--------------------------------------------------------------------------- -# configuration options related to warning and progress messages +# Configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES +WARN_IF_INCOMPLETE_DOC = YES WARN_NO_PARAMDOC = YES -WARN_FORMAT = "$file:$line: $text " +WARN_AS_ERROR = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LINE_FORMAT = "at line $line of file $file" WARN_LOGFILE = #--------------------------------------------------------------------------- -# configuration options related to the input files +# Configuration options related to the input files #--------------------------------------------------------------------------- -INPUT = . ${FIND_VERSION_BINARY_DIR}/script/api +INPUT = . \ + ${FIND_VERSION_BINARY_DIR}/script/api INPUT_ENCODING = UTF-8 FILE_PATTERNS = script_*.hpp \ ai_*.hpp @@ -98,7 +135,9 @@ RECURSIVE = YES EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = ai_includes.hpp -EXCLUDE_SYMBOLS = GetClassName DECLARE_ENUM_AS_BIT_SET DECLARE_POSTFIX_INCREMENT +EXCLUDE_SYMBOLS = GetClassName \ + DECLARE_ENUM_AS_BIT_SET \ + DECLARE_POSTFIX_INCREMENT EXAMPLE_PATH = EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO @@ -106,8 +145,10 @@ IMAGE_PATH = INPUT_FILTER = "./doxygen_filter.sh AI" FILTER_PATTERNS = FILTER_SOURCE_FILES = NO +FILTER_SOURCE_PATTERNS = +USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- -# configuration options related to source browsing +# Configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = NO INLINE_SOURCES = NO @@ -115,15 +156,20 @@ STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = NO REFERENCES_RELATION = NO REFERENCES_LINK_SOURCE = YES +SOURCE_TOOLTIPS = YES USE_HTAGS = NO VERBATIM_HEADERS = NO +CLANG_ASSISTED_PARSING = NO +CLANG_ADD_INC_PATHS = YES +CLANG_OPTIONS = +CLANG_DATABASE_PATH = #--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index +# Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = NO IGNORE_PREFIX = #--------------------------------------------------------------------------- -# configuration options related to the HTML output +# Configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html @@ -131,34 +177,86 @@ HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = -GENERATE_HTMLHELP = NO +HTML_EXTRA_STYLESHEET = +HTML_EXTRA_FILES = +HTML_COLORSTYLE_HUE = 220 +HTML_COLORSTYLE_SAT = 100 +HTML_COLORSTYLE_GAMMA = 80 +HTML_TIMESTAMP = NO +HTML_DYNAMIC_MENUS = YES HTML_DYNAMIC_SECTIONS = NO +HTML_INDEX_NUM_ENTRIES = 100 +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_FEEDURL = +DOCSET_BUNDLE_ID = org.doxygen.Project +DOCSET_PUBLISHER_ID = org.doxygen.Publisher +DOCSET_PUBLISHER_NAME = Publisher +GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO +CHM_INDEX_ENCODING = BINARY_TOC = NO TOC_EXPAND = NO +GENERATE_QHP = NO +QCH_FILE = +QHP_NAMESPACE = org.doxygen.Project +QHP_VIRTUAL_FOLDER = doc +QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = +QHG_LOCATION = +GENERATE_ECLIPSEHELP = NO +ECLIPSE_DOC_ID = org.doxygen.Project DISABLE_INDEX = NO -ENUM_VALUES_PER_LINE = 1 GENERATE_TREEVIEW = NO +FULL_SIDEBAR = NO +ENUM_VALUES_PER_LINE = 1 TREEVIEW_WIDTH = 250 +EXT_LINKS_IN_WINDOW = NO +OBFUSCATE_EMAILS = YES +HTML_FORMULA_FORMAT = png +FORMULA_FONTSIZE = 10 +FORMULA_TRANSPARENT = YES +FORMULA_MACROFILE = +USE_MATHJAX = NO +MATHJAX_VERSION = MathJax_2 +MATHJAX_FORMAT = HTML-CSS +MATHJAX_RELPATH = +MATHJAX_EXTENSIONS = +MATHJAX_CODEFILE = +SEARCHENGINE = NO +SERVER_BASED_SEARCH = NO +EXTERNAL_SEARCH = NO +SEARCHENGINE_URL = +SEARCHDATA_FILE = searchdata.xml +EXTERNAL_SEARCH_ID = +EXTRA_SEARCH_MAPPINGS = #--------------------------------------------------------------------------- -# configuration options related to the LaTeX output +# Configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = latex LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex +LATEX_MAKEINDEX_CMD = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4 EXTRA_PACKAGES = LATEX_HEADER = +LATEX_FOOTER = +LATEX_EXTRA_STYLESHEET = +LATEX_EXTRA_FILES = PDF_HYPERLINKS = NO USE_PDFLATEX = NO LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO +LATEX_BIB_STYLE = plain +LATEX_TIMESTAMP = NO +LATEX_EMOJI_DIRECTORY = #--------------------------------------------------------------------------- -# configuration options related to the RTF output +# Configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf @@ -167,24 +265,31 @@ RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- -# configuration options related to the man page output +# Configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = man MAN_EXTENSION = .3 +MAN_SUBDIR = MAN_LINKS = NO #--------------------------------------------------------------------------- -# configuration options related to the XML output +# Configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml XML_PROGRAMLISTING = YES +XML_NS_MEMB_FILE_SCOPE = NO #--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output +# Configuration options related to the DOCBOOK output +#--------------------------------------------------------------------------- +GENERATE_DOCBOOK = NO +DOCBOOK_OUTPUT = docbook +#--------------------------------------------------------------------------- +# Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- -# configuration options related to the Perl module output +# Configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO @@ -203,22 +308,30 @@ PREDEFINED = DOXYGEN_API EXPAND_AS_DEFINED = DEF_COMMAND SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- -# Configuration::additions related to external references +# Configuration options related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ${CPACK_BINARY_DIR}/docs/openttd_ai_api.tag ALLEXTERNALS = NO EXTERNAL_GROUPS = YES +EXTERNAL_PAGES = YES #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- -CLASS_DIAGRAMS = YES +DIA_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO +DOT_NUM_THREADS = 0 +DOT_FONTNAME = Helvetica +DOT_FONTSIZE = 10 +DOT_FONTPATH = CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = NO +UML_LIMIT_NUM_FIELDS = 10 +DOT_UML_DETAILS = NO +DOT_WRAP_THRESHOLD = 17 TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES @@ -226,16 +339,19 @@ CALL_GRAPH = NO CALLER_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES +DIR_GRAPH_MAX_DEPTH = 1 DOT_IMAGE_FORMAT = png +INTERACTIVE_SVG = NO DOT_PATH = DOTFILE_DIRS = +MSCFILE_DIRS = +DIAFILE_DIRS = +PLANTUML_JAR_PATH = +PLANTUML_CFG_FILE = +PLANTUML_INCLUDE_PATH = DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 1000 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO GENERATE_LEGEND = NO DOT_CLEANUP = YES -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- -SEARCHENGINE = NO diff --git a/src/script/api/Doxyfile_GS.in b/src/script/api/Doxyfile_GS.in index b017bc94c5..2a1ba5dbd9 100644 --- a/src/script/api/Doxyfile_GS.in +++ b/src/script/api/Doxyfile_GS.in @@ -3,7 +3,7 @@ # 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 . -# Doxyfile 1.5.4 +# Doxyfile 1.9.4 #--------------------------------------------------------------------------- # Project related configuration options @@ -11,14 +11,18 @@ DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "OpenTTD GameScript API" PROJECT_NUMBER = ${REV_VERSION} +PROJECT_BRIEF = +PROJECT_LOGO = OUTPUT_DIRECTORY = ${CPACK_BINARY_DIR}/docs/gs-api/ CREATE_SUBDIRS = NO +CREATE_SUBDIRS_LEVEL = 8 +ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES -ABBREVIATE_BRIEF = "The $name class " \ - "The $name widget " \ - "The $name file " \ +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ is \ provides \ specifies \ @@ -34,29 +38,47 @@ STRIP_FROM_PATH = ./ STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = YES +JAVADOC_BANNER = NO QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO +PYTHON_DOCSTRING = YES INHERIT_DOCS = YES SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 2 ALIASES = OPTIMIZE_OUTPUT_FOR_C = YES OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO +OPTIMIZE_OUTPUT_SLICE = NO +EXTENSION_MAPPING = +MARKDOWN_SUPPORT = YES +TOC_INCLUDE_HEADINGS = 5 +AUTOLINK_SUPPORT = YES BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES DISTRIBUTE_GROUP_DOC = NO +GROUP_NESTED_COMPOUNDS = NO SUBGROUPING = YES +INLINE_GROUPED_CLASSES = NO +INLINE_SIMPLE_STRUCTS = NO TYPEDEF_HIDES_STRUCT = NO +LOOKUP_CACHE_SIZE = 0 +NUM_PROC_THREADS = 1 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = NO EXTRACT_PRIVATE = NO +EXTRACT_PRIV_VIRTUAL = NO +EXTRACT_PACKAGE = NO EXTRACT_STATIC = YES EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = YES EXTRACT_ANON_NSPACES = NO +RESOLVE_UNNAMED_PARAMS = YES HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO @@ -64,11 +86,18 @@ HIDE_IN_BODY_DOCS = YES INTERNAL_DOCS = YES CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO +HIDE_COMPOUND_REFERENCE= NO +SHOW_HEADERFILE = YES SHOW_INCLUDE_FILES = NO +SHOW_GROUPED_MEMB_INC = NO +FORCE_LOCAL_INCLUDES = NO INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO +SORT_MEMBERS_CTORS_1ST = NO +SORT_GROUP_NAMES = NO SORT_BY_SCOPE_NAME = NO +STRICT_PROTO_MATCHING = NO GENERATE_TODOLIST = NO GENERATE_TESTLIST = NO GENERATE_BUGLIST = NO @@ -76,21 +105,29 @@ GENERATE_DEPRECATEDLIST= NO ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = NO +SHOW_FILES = YES +SHOW_NAMESPACES = YES FILE_VERSION_FILTER = +LAYOUT_FILE = +CITE_BIB_FILES = #--------------------------------------------------------------------------- -# configuration options related to warning and progress messages +# Configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES +WARN_IF_INCOMPLETE_DOC = YES WARN_NO_PARAMDOC = YES -WARN_FORMAT = "$file:$line: $text " +WARN_AS_ERROR = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LINE_FORMAT = "at line $line of file $file" WARN_LOGFILE = #--------------------------------------------------------------------------- -# configuration options related to the input files +# Configuration options related to the input files #--------------------------------------------------------------------------- -INPUT = . ${FIND_VERSION_BINARY_DIR}/script/api +INPUT = . \ + ${FIND_VERSION_BINARY_DIR}/script/api INPUT_ENCODING = UTF-8 FILE_PATTERNS = script_*.hpp \ game_*.hpp @@ -98,7 +135,9 @@ RECURSIVE = YES EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = game_includes.hpp -EXCLUDE_SYMBOLS = GetClassName DECLARE_ENUM_AS_BIT_SET DECLARE_POSTFIX_INCREMENT +EXCLUDE_SYMBOLS = GetClassName \ + DECLARE_ENUM_AS_BIT_SET \ + DECLARE_POSTFIX_INCREMENT EXAMPLE_PATH = EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO @@ -106,8 +145,10 @@ IMAGE_PATH = INPUT_FILTER = "./doxygen_filter.sh GS" FILTER_PATTERNS = FILTER_SOURCE_FILES = NO +FILTER_SOURCE_PATTERNS = +USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- -# configuration options related to source browsing +# Configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = NO INLINE_SOURCES = NO @@ -115,15 +156,20 @@ STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = NO REFERENCES_RELATION = NO REFERENCES_LINK_SOURCE = YES +SOURCE_TOOLTIPS = YES USE_HTAGS = NO VERBATIM_HEADERS = NO +CLANG_ASSISTED_PARSING = NO +CLANG_ADD_INC_PATHS = YES +CLANG_OPTIONS = +CLANG_DATABASE_PATH = #--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index +# Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = NO IGNORE_PREFIX = #--------------------------------------------------------------------------- -# configuration options related to the HTML output +# Configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html @@ -131,34 +177,86 @@ HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = -GENERATE_HTMLHELP = NO +HTML_EXTRA_STYLESHEET = +HTML_EXTRA_FILES = +HTML_COLORSTYLE_HUE = 220 +HTML_COLORSTYLE_SAT = 100 +HTML_COLORSTYLE_GAMMA = 80 +HTML_TIMESTAMP = NO +HTML_DYNAMIC_MENUS = YES HTML_DYNAMIC_SECTIONS = NO +HTML_INDEX_NUM_ENTRIES = 100 +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_FEEDURL = +DOCSET_BUNDLE_ID = org.doxygen.Project +DOCSET_PUBLISHER_ID = org.doxygen.Publisher +DOCSET_PUBLISHER_NAME = Publisher +GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO +CHM_INDEX_ENCODING = BINARY_TOC = NO TOC_EXPAND = NO +GENERATE_QHP = NO +QCH_FILE = +QHP_NAMESPACE = org.doxygen.Project +QHP_VIRTUAL_FOLDER = doc +QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = +QHG_LOCATION = +GENERATE_ECLIPSEHELP = NO +ECLIPSE_DOC_ID = org.doxygen.Project DISABLE_INDEX = NO -ENUM_VALUES_PER_LINE = 1 GENERATE_TREEVIEW = NO +FULL_SIDEBAR = NO +ENUM_VALUES_PER_LINE = 1 TREEVIEW_WIDTH = 250 +EXT_LINKS_IN_WINDOW = NO +OBFUSCATE_EMAILS = YES +HTML_FORMULA_FORMAT = png +FORMULA_FONTSIZE = 10 +FORMULA_TRANSPARENT = YES +FORMULA_MACROFILE = +USE_MATHJAX = NO +MATHJAX_VERSION = MathJax_2 +MATHJAX_FORMAT = HTML-CSS +MATHJAX_RELPATH = +MATHJAX_EXTENSIONS = +MATHJAX_CODEFILE = +SEARCHENGINE = NO +SERVER_BASED_SEARCH = NO +EXTERNAL_SEARCH = NO +SEARCHENGINE_URL = +SEARCHDATA_FILE = searchdata.xml +EXTERNAL_SEARCH_ID = +EXTRA_SEARCH_MAPPINGS = #--------------------------------------------------------------------------- -# configuration options related to the LaTeX output +# Configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = latex LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex +LATEX_MAKEINDEX_CMD = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4 EXTRA_PACKAGES = LATEX_HEADER = +LATEX_FOOTER = +LATEX_EXTRA_STYLESHEET = +LATEX_EXTRA_FILES = PDF_HYPERLINKS = NO USE_PDFLATEX = NO LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO +LATEX_BIB_STYLE = plain +LATEX_TIMESTAMP = NO +LATEX_EMOJI_DIRECTORY = #--------------------------------------------------------------------------- -# configuration options related to the RTF output +# Configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf @@ -167,24 +265,31 @@ RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- -# configuration options related to the man page output +# Configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = man MAN_EXTENSION = .3 +MAN_SUBDIR = MAN_LINKS = NO #--------------------------------------------------------------------------- -# configuration options related to the XML output +# Configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml XML_PROGRAMLISTING = YES +XML_NS_MEMB_FILE_SCOPE = NO #--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output +# Configuration options related to the DOCBOOK output +#--------------------------------------------------------------------------- +GENERATE_DOCBOOK = NO +DOCBOOK_OUTPUT = docbook +#--------------------------------------------------------------------------- +# Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- -# configuration options related to the Perl module output +# Configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO @@ -203,22 +308,30 @@ PREDEFINED = DOXYGEN_API EXPAND_AS_DEFINED = DEF_COMMAND SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- -# Configuration::additions related to external references +# Configuration options related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ${CPACK_BINARY_DIR}/docs/openttd_gs_api.tag ALLEXTERNALS = NO EXTERNAL_GROUPS = YES +EXTERNAL_PAGES = YES #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- -CLASS_DIAGRAMS = YES +DIA_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO +DOT_NUM_THREADS = 0 +DOT_FONTNAME = Helvetica +DOT_FONTSIZE = 10 +DOT_FONTPATH = CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = NO +UML_LIMIT_NUM_FIELDS = 10 +DOT_UML_DETAILS = NO +DOT_WRAP_THRESHOLD = 17 TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES @@ -226,16 +339,19 @@ CALL_GRAPH = NO CALLER_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES +DIR_GRAPH_MAX_DEPTH = 1 DOT_IMAGE_FORMAT = png +INTERACTIVE_SVG = NO DOT_PATH = DOTFILE_DIRS = +MSCFILE_DIRS = +DIAFILE_DIRS = +PLANTUML_JAR_PATH = +PLANTUML_CFG_FILE = +PLANTUML_INCLUDE_PATH = DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 1000 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO GENERATE_LEGEND = NO DOT_CLEANUP = YES -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- -SEARCHENGINE = NO From c1375cecf855ebee3a4f63913d546360bc114e38 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 24 Mar 2024 12:47:58 +0100 Subject: [PATCH 499/695] Codefix: [Script] script_types was excluded from API documentation --- src/script/api/doxygen_filter.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/src/script/api/doxygen_filter.sh b/src/script/api/doxygen_filter.sh index e63c7183d8..451e7d20d6 100755 --- a/src/script/api/doxygen_filter.sh +++ b/src/script/api/doxygen_filter.sh @@ -21,6 +21,7 @@ fi case $2 in *ai_changelog.hpp) cat $2; exit 0;; *game_changelog.hpp) cat $2; exit 0;; + *script_types.hpp) cat $2; exit 0;; esac ${AWK} -v api=$1 -f doxygen_filter.awk $2 From 4bf2dc31483db5034d9f4694e01275817687cb2d Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 24 Mar 2024 14:17:08 +0100 Subject: [PATCH 500/695] Codefix: Script API did not link simple types correctly --- src/script/api/script_types.hpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/script/api/script_types.hpp b/src/script/api/script_types.hpp index ca525a9ede..9deba0681d 100644 --- a/src/script/api/script_types.hpp +++ b/src/script/api/script_types.hpp @@ -85,27 +85,32 @@ #include "../../tile_type.h" #include -/* Define all types here, so we don't have to include the whole _type.h maze */ -typedef uint BridgeType; ///< Internal name, not of any use for you. -typedef uint8_t CargoID; ///< The ID of a cargo. -class CommandCost; ///< The cost of a command. +/* Define all types here, so they are added to the API docs. */ +typedef uint BridgeID; ///< The ID of a bridge type. +typedef uint8_t CargoID; ///< The ID of a cargo. typedef uint16_t EngineID; ///< The ID of an engine. typedef uint16_t GoalID; ///< The ID of a goal. typedef uint16_t GroupID; ///< The ID of a group. typedef uint16_t IndustryID; ///< The ID of an industry. typedef uint8_t IndustryType; ///< The ID of an industry-type. -typedef OverflowSafeInt64 Money; ///< Money, stored in a 32bit/64bit safe way. For scripts money is always in pounds. +#ifdef DOXYGEN_API +typedef int64_t Money; ///< Money, stored in a 32bit/64bit safe way. For scripts money is always in pounds. +#else +typedef OverflowSafeInt64 Money; +#endif /* DOXYGEN_API */ +typedef uint16_t ObjectType; ///< The ID of an object-type. typedef uint16_t SignID; ///< The ID of a sign. typedef uint16_t StationID; ///< The ID of a station. typedef uint32_t StringID; ///< The ID of a string. typedef uint16_t SubsidyID; ///< The ID of a subsidy. typedef uint16_t StoryPageID; ///< The ID of a story page. typedef uint16_t StoryPageElementID; ///< The ID of a story page element. +#ifdef DOXYGEN_API +typedef uint32_t TileIndex; ///< The ID of a map location. +#endif /* DOXYGEN_API */ typedef uint16_t TownID; ///< The ID of a town. typedef uint32_t VehicleID; ///< The ID of a vehicle. -/* Types we defined ourself, as the OpenTTD core doesn't have them (yet) */ typedef uint ScriptErrorType;///< The types of errors inside the script framework. -typedef BridgeType BridgeID; ///< The ID of a bridge. #endif /* SCRIPT_TYPES_HPP */ From 64e1f1d4d939e61d85a0aad475afd139b452806a Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 24 Mar 2024 18:52:10 +0100 Subject: [PATCH 501/695] Codefix: Script API documentation about IDs was incomplete --- src/script/api/script_types.hpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/script/api/script_types.hpp b/src/script/api/script_types.hpp index 9deba0681d..20289bdf39 100644 --- a/src/script/api/script_types.hpp +++ b/src/script/api/script_types.hpp @@ -46,6 +46,14 @@ * game start \ref newgrf_changes "(1)" * never \ref newgrf_changes "(1)" * no + * #ObjectType NewGRF object type + * game start \ref newgrf_changes "(1)" + * never \ref newgrf_changes "(1)" + * no + * #ScriptErrorType error message + * OpenTTD start \ref transient_id "(3)" + * OpenTTD exit + * no * #SignID sign * construction * deletion @@ -54,10 +62,22 @@ * construction * expiration of 'grey' station sign after deletion * yes + * #StringID translatable text + * OpenTTD start \ref transient_id "(3)" + * OpenTTD exit + * no * #SubsidyID subsidy * offer announcement * (offer) expiration * yes + * #StoryPageID story page + * creation + * deletion + * yes + * #StoryPageElementID story page element + * creation + * deletion + * yes * #TileIndex tile on map * game start * never @@ -75,6 +95,7 @@ * @remarks * \li \anchor newgrf_changes (1) in-game changes of newgrfs may reassign/invalidate IDs (will also cause other trouble though). * \li \anchor dynamic_engines (2) engine IDs are reassigned/invalidated on changing 'allow multiple newgrf engine sets' (only allowed as long as no vehicles are built). + * \li \anchor transient_id (3) string/error IDs are only valid during a session, and may be reassigned/invalidated when loading savegames (so you cannot store them). */ #ifndef SCRIPT_TYPES_HPP From e436e2ef405ad1ff3a3a26856f30504582888e0e Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 24 Mar 2024 19:00:06 +0100 Subject: [PATCH 502/695] Codefix: broken links and syntax issues in script API documentation --- src/script/api/doxygen_filter.awk | 5 ++++- src/script/api/script_companymode.hpp | 4 ++-- src/script/api/script_grouplist.hpp | 8 +++++--- src/script/api/script_industrylist.hpp | 11 +++++++---- src/script/api/script_league.cpp | 4 ++-- src/script/api/script_league.hpp | 4 ++-- src/script/api/script_list.hpp | 6 ++++-- src/script/api/script_signlist.hpp | 8 +++++--- src/script/api/script_story_page.hpp | 8 ++++---- src/script/api/script_subsidylist.hpp | 8 +++++--- src/script/api/script_townlist.hpp | 11 +++++++---- src/script/api/script_vehiclelist.hpp | 11 +++++++---- 12 files changed, 54 insertions(+), 34 deletions(-) diff --git a/src/script/api/doxygen_filter.awk b/src/script/api/doxygen_filter.awk index 7e3f387a0d..d396cc66e8 100644 --- a/src/script/api/doxygen_filter.awk +++ b/src/script/api/doxygen_filter.awk @@ -24,7 +24,10 @@ BEGIN { } { + # replace Script with AI/GS, except for ScriptErrorType gsub(/Script/, api) + gsub(/AIErrorType/, "ScriptErrorType") + gsub(/GSErrorType/, "ScriptErrorType") } { @@ -245,7 +248,7 @@ BEGIN { } # Add a const (non-enum) value -/^[ ]*static const \w+ \w+ = -?\(?\w*\)?\w+;/ { +/^[ ]*static const \w+ \w+ = [^;]+;/ { if (api_selected == "") api_selected = cls_in_api if (api_selected == "false") { api_selected = "" diff --git a/src/script/api/script_companymode.hpp b/src/script/api/script_companymode.hpp index 8378e11c4c..1514eefe86 100644 --- a/src/script/api/script_companymode.hpp +++ b/src/script/api/script_companymode.hpp @@ -52,7 +52,7 @@ public: * Check whether a company mode is valid. In other words, are commands * being executed under some company and does the company still exist? * @return true When a company mode is valid. - * @post !ScriptCompanyMode::IsDeity(). + * @post If IsValid() is true, then IsDeity() is false. */ static bool IsValid(); @@ -60,7 +60,7 @@ public: * Check whether the company mode is not active, i.e. whether we are a deity. * In other words, are commands are not being executed under some company. * @return true When we are a deity, i.e. company mode is not active. - * @post !ScriptCompanyMode::IsValid(). + * @post if IsDeity() is true, then IsValid() is false. */ static bool IsDeity(); }; diff --git a/src/script/api/script_grouplist.hpp b/src/script/api/script_grouplist.hpp index d85303b854..c4b2bb4fcc 100644 --- a/src/script/api/script_grouplist.hpp +++ b/src/script/api/script_grouplist.hpp @@ -29,20 +29,22 @@ public: /** * Apply a filter when building the list. * @param filter_function The function which will be doing the filtering. - * @param params The params to give to the filters (minus the first param, + * @param ... The params to give to the filters (minus the first param, * which is always the index-value). * @game @pre ScriptCompanyMode::IsValid(). * @note You can write your own filters and use them. Just remember that * the first parameter should be the index-value, and it should return * a bool. * @note Example: + * @code * function IsType(group_id, type) * { * return ScriptGroup.GetVehicleType(group_id) == type; * } - * ScriptGroupList(IsType, ScriptVehicle.VT_ROAD); + * local rv_groups = ScriptGroupList(IsType, ScriptVehicle.VT_ROAD); + * @endcode */ - ScriptGroupList(void *filter_function, int params, ...); + ScriptGroupList(function filter_function, ...); #else /** * The constructor wrapper from Squirrel. diff --git a/src/script/api/script_industrylist.hpp b/src/script/api/script_industrylist.hpp index 2139b2258e..9390c19645 100644 --- a/src/script/api/script_industrylist.hpp +++ b/src/script/api/script_industrylist.hpp @@ -25,20 +25,23 @@ public: /** * Apply a filter when building the list. * @param filter_function The function which will be doing the filtering. - * @param params The params to give to the filters (minus the first param, + * @param ... The params to give to the filters (minus the first param, * which is always the index-value). * @note You can write your own filters and use them. Just remember that * the first parameter should be the index-value, and it should return * a bool. * @note Example: - * ScriptIndustryList(ScriptIndustry.HasDock); + * @code + * local water_industries = ScriptIndustryList(ScriptIndustry.HasDock); + * * function IsType(industry_id, type) * { * return ScriptIndustry.GetIndustryType(industry_id) == type; * } - * ScriptIndustryList(IsType, 0); + * local industries = ScriptIndustryList(IsType, 0); + * @endcode */ - ScriptIndustryList(void *filter_function, int params, ...); + ScriptIndustryList(function filter_function, ...); #else /** * The constructor wrapper from Squirrel. diff --git a/src/script/api/script_league.cpp b/src/script/api/script_league.cpp index 28a4e8e674..a2b6b93795 100644 --- a/src/script/api/script_league.cpp +++ b/src/script/api/script_league.cpp @@ -49,7 +49,7 @@ return ::LeagueTableElement::IsValidID(element_id); } -/* static */ ScriptLeagueTable::LeagueTableElementID ScriptLeagueTable::NewElement(ScriptLeagueTable::LeagueTableID table, SQInteger rating, ScriptCompany::CompanyID company, Text *text, Text *score, LinkType link_type, LinkTargetID link_target) +/* static */ ScriptLeagueTable::LeagueTableElementID ScriptLeagueTable::NewElement(ScriptLeagueTable::LeagueTableID table, SQInteger rating, ScriptCompany::CompanyID company, Text *text, Text *score, LinkType link_type, SQInteger link_target) { CCountedPtr text_counter(text); CCountedPtr score_counter(score); @@ -78,7 +78,7 @@ return (ScriptLeagueTable::LeagueTableElementID)0; } -/* static */ bool ScriptLeagueTable::UpdateElementData(LeagueTableElementID element, ScriptCompany::CompanyID company, Text *text, LinkType link_type, LinkTargetID link_target) +/* static */ bool ScriptLeagueTable::UpdateElementData(LeagueTableElementID element, ScriptCompany::CompanyID company, Text *text, LinkType link_type, SQInteger link_target) { CCountedPtr text_counter(text); diff --git a/src/script/api/script_league.hpp b/src/script/api/script_league.hpp index d57e5a484a..0cfa858c37 100644 --- a/src/script/api/script_league.hpp +++ b/src/script/api/script_league.hpp @@ -92,7 +92,7 @@ public: * @pre score != null && len(score) != 0. * @pre IsValidLink(Link(link_type, link_target)). */ - static LeagueTableElementID NewElement(LeagueTableID table, SQInteger rating, ScriptCompany::CompanyID company, Text *text, Text *score, LinkType link_type, LinkTargetID link_target); + static LeagueTableElementID NewElement(LeagueTableID table, SQInteger rating, ScriptCompany::CompanyID company, Text *text, Text *score, LinkType link_type, SQInteger link_target); /** * Update the attributes of a league table element. @@ -107,7 +107,7 @@ public: * @pre text != null && len(text) != 0. * @pre IsValidLink(Link(link_type, link_target)). */ - static bool UpdateElementData(LeagueTableElementID element, ScriptCompany::CompanyID company, Text *text, LinkType link_type, LinkTargetID link_target); + static bool UpdateElementData(LeagueTableElementID element, ScriptCompany::CompanyID company, Text *text, LinkType link_type, SQInteger link_target); /** * Create a new league table element. diff --git a/src/script/api/script_list.hpp b/src/script/api/script_list.hpp index 199869ed71..0fb6d9ea6d 100644 --- a/src/script/api/script_list.hpp +++ b/src/script/api/script_list.hpp @@ -370,7 +370,7 @@ public: /** * Give all items a value defined by the valuator you give. * @param valuator_function The function which will be doing the valuation. - * @param params The params to give to the valuators (minus the first param, + * @param ... The params to give to the valuators (minus the first param, * which is always the index-value we are valuating). * @note You may not add, remove or change (setting the value of) items while * valuating. You may also not (re)sort while valuating. @@ -378,6 +378,7 @@ public: * the first parameter should be the index-value, and it should return * an integer. * @note Example: + * @code * list.Valuate(ScriptBridge.GetPrice, 5); * list.Valuate(ScriptBridge.GetMaxLength); * function MyVal(bridge_id, myparam) @@ -385,8 +386,9 @@ public: * return myparam * bridge_id; // This is silly * } * list.Valuate(MyVal, 12); + * @endcode */ - void Valuate(void *valuator_function, int params, ...); + void Valuate(function valuator_function, ...); #endif /* DOXYGEN_API */ }; diff --git a/src/script/api/script_signlist.hpp b/src/script/api/script_signlist.hpp index 7e5117fca0..e814b441ef 100644 --- a/src/script/api/script_signlist.hpp +++ b/src/script/api/script_signlist.hpp @@ -25,20 +25,22 @@ public: /** * Apply a filter when building the list. * @param filter_function The function which will be doing the filtering. - * @param params The params to give to the filters (minus the first param, + * @param ... The params to give to the filters (minus the first param, * which is always the index-value). * @note You can write your own filters and use them. Just remember that * the first parameter should be the index-value, and it should return * a bool. * @note Example: + * @code * function Contains(sign_id, str) * { * local name = ScriptSign.GetName(sign_id); * return name != null && name.find(str) != null; * } - * ScriptSignList(Contains, "something"); + * local signs = ScriptSignList(Contains, "something"); + * @endcode */ - ScriptSignList(void *filter_function, int params, ...); + ScriptSignList(function filter_function, ...); #else ScriptSignList(HSQUIRRELVM); #endif /* DOXYGEN_API */ diff --git a/src/script/api/script_story_page.hpp b/src/script/api/script_story_page.hpp index 4213f5afe6..a15af1dc4e 100644 --- a/src/script/api/script_story_page.hpp +++ b/src/script/api/script_story_page.hpp @@ -203,8 +203,8 @@ public: * @param reference A reference value to the object that is referred to by some page element types. * When type is SPET_GOAL, this is the goal ID. * When type is SPET_LOCATION, this is the TileIndex. - * When type is a button, this is additional parameters for the button, - * use the #BuildPushButtonReference, #BuildTileButtonReference, or #BuildVehicleButtonReference functions to make the values. + * When type is a button, this is the ID returned by + * #MakePushButtonReference, #MakeTileButtonReference, or #MakeVehicleButtonReference. * @param text The body text of page elements that allow custom text. (SPET_TEXT and SPET_LOCATION) * @return The new StoryPageElementID, or STORY_PAGE_ELEMENT_INVALID if it failed. * @pre ScriptCompanyMode::IsDeity(). @@ -329,14 +329,14 @@ public: /** * Check whether this is a valid story page button flag. - * @param colour The StoryPageButtonFlags to check. + * @param flags The StoryPageButtonFlags to check. * @return True if and only if this story page button flag is valid. */ static bool IsValidStoryPageButtonFlags(StoryPageButtonFlags flags); /** * Check whether this is a valid story page button cursor. - * @param colour The StoryPageButtonCursor to check. + * @param cursor The StoryPageButtonCursor to check. * @return True if and only if this story page button cursor is valid. */ static bool IsValidStoryPageButtonCursor(StoryPageButtonCursor cursor); diff --git a/src/script/api/script_subsidylist.hpp b/src/script/api/script_subsidylist.hpp index 281a6a5880..f0fa9d97d2 100644 --- a/src/script/api/script_subsidylist.hpp +++ b/src/script/api/script_subsidylist.hpp @@ -25,19 +25,21 @@ public: /** * Apply a filter when building the list. * @param filter_function The function which will be doing the filtering. - * @param params The params to give to the filters (minus the first param, + * @param ... The params to give to the filters (minus the first param, * which is always the index-value). * @note You can write your own filters and use them. Just remember that * the first parameter should be the index-value, and it should return * a bool. * @note Example: + * @code * function IsType(subsidy_id, type) * { * return ScriptSubsidy.GetSourceType(subsidy_id) == type; * } - * ScriptSubsidyList(IsType, ScriptSubsidy.SPT_TOWN); + * local town_subs = ScriptSubsidyList(IsType, ScriptSubsidy.SPT_TOWN); + * @endcode */ - ScriptSubsidyList(void *filter_function, int params, ...); + ScriptSubsidyList(function filter_function, ...); #else ScriptSubsidyList(HSQUIRRELVM vm); #endif /* DOXYGEN_API */ diff --git a/src/script/api/script_townlist.hpp b/src/script/api/script_townlist.hpp index 8e24d8af0e..42d15d06e5 100644 --- a/src/script/api/script_townlist.hpp +++ b/src/script/api/script_townlist.hpp @@ -25,20 +25,23 @@ public: /** * Apply a filter when building the list. * @param filter_function The function which will be doing the filtering. - * @param params The params to give to the filters (minus the first param, + * @param ... The params to give to the filters (minus the first param, * which is always the index-value). * @note You can write your own filters and use them. Just remember that * the first parameter should be the index-value, and it should return * a bool. * @note Example: - * ScriptTownList(ScriptTown.IsActionAvailable, ScriptTown.TOWN_ACTION_BRIBE); + * @code + * local bribeable_towns = ScriptTownList(ScriptTown.IsActionAvailable, ScriptTown.TOWN_ACTION_BRIBE); + * * function MinPopulation(town_id, pop) * { * return ScriptTown.GetPopulation(town_id) >= pop; * } - * ScriptTownList(MinPopulation, 1000); + * local proper_towns = ScriptTownList(MinPopulation, 1000); + * @endcode */ - ScriptTownList(void *filter_function, int params, ...); + ScriptTownList(function filter_function, ...); #else ScriptTownList(HSQUIRRELVM vm); #endif /* DOXYGEN_API */ diff --git a/src/script/api/script_vehiclelist.hpp b/src/script/api/script_vehiclelist.hpp index c629bc48d2..ad4b3cb0ef 100644 --- a/src/script/api/script_vehiclelist.hpp +++ b/src/script/api/script_vehiclelist.hpp @@ -26,20 +26,23 @@ public: /** * Apply a filter when building the list. * @param filter_function The function which will be doing the filtering. - * @param params The params to give to the filters (minus the first param, + * @param ... The params to give to the filters (minus the first param, * which is always the index-value). * @note You can write your own filters and use them. Just remember that * the first parameter should be the index-value, and it should return * a bool. * @note Example: - * ScriptVehicleList(ScriptVehicle.IsInDepot); + * @code + * local vehs_in_depot = ScriptVehicleList(ScriptVehicle.IsInDepot); + * * function IsType(vehicle_id, type) * { * return ScriptVehicle.GetVehicleType(vehicle_id) == type; * } - * ScriptVehicleList(IsType, ScriptVehicle.VT_ROAD); + * local road_vehs = ScriptVehicleList(IsType, ScriptVehicle.VT_ROAD); + * @endcode */ - ScriptVehicleList(void *filter_function, int params, ...); + ScriptVehicleList(function filter_function, ...); #else /** * The constructor wrapper from Squirrel. From dfa262215344adabdc370191523ff08f32c93914 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 24 Mar 2024 19:02:16 +0100 Subject: [PATCH 503/695] Codechange: Unify naming of squirrel built-in types in Script API docs --- src/script/api/doxygen_filter.awk | 10 ++++++++++ src/script/api/script_admin.hpp | 4 ++-- src/script/api/script_controller.hpp | 4 ++-- src/script/api/script_info_docs.hpp | 2 +- src/script/api/script_priorityqueue.hpp | 8 ++++---- src/script/api/script_text.hpp | 4 ++-- 6 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/script/api/doxygen_filter.awk b/src/script/api/doxygen_filter.awk index d396cc66e8..342d90abd5 100644 --- a/src/script/api/doxygen_filter.awk +++ b/src/script/api/doxygen_filter.awk @@ -136,6 +136,16 @@ BEGIN { next } +# Convert/unify type names +{ + gsub(/\/, "int") + gsub(/\/, "table") + gsub(/\/, "int") + gsub(/\/, "object") + gsub(/std::optional/, "string") + gsub(/(const )?std::string *[*&]?/, "string ") +} + # Store comments /\/\*\*.*\*\// { comment_buffer = $0; comment = "false"; next; } /\/\*.*\*\// { comment_buffer = ""; comment = "false"; next; } diff --git a/src/script/api/script_admin.hpp b/src/script/api/script_admin.hpp index 877506e98d..b168b3423b 100644 --- a/src/script/api/script_admin.hpp +++ b/src/script/api/script_admin.hpp @@ -27,13 +27,13 @@ public: /** * Send information to the AdminPort. The information can be anything * as long as it isn't a class or instance thereof. - * @param table The information to send, in a table. For example: { param = "param" }. + * @param data The information to send, in a table. For example: { param = "param" }. * @return True if and only if the data was successfully converted to JSON * and send to the AdminPort. * @note If the resulting JSON of your table is larger than 1450 bytes, * nothing will be sent (and false will be returned). */ - static bool Send(void *table); + static bool Send(table data); #endif /* DOXYGEN_API */ }; diff --git a/src/script/api/script_controller.hpp b/src/script/api/script_controller.hpp index 1a26c006d4..aed7596f03 100644 --- a/src/script/api/script_controller.hpp +++ b/src/script/api/script_controller.hpp @@ -92,7 +92,7 @@ public: * * @return Data of the script that should be stored in the save game. */ - SquirrelTable Save(); + table Save(); /** * Load saved data just before calling #Start. @@ -100,7 +100,7 @@ public: * @param version Version number of the script that created the \a data. * @param data Data that was saved (return value of #Save). */ - void Load(int version, SquirrelTable data); + void Load(int version, table data); #endif /* DOXYGEN_API */ /** diff --git a/src/script/api/script_info_docs.hpp b/src/script/api/script_info_docs.hpp index b0b32ffc95..286dc9e33a 100644 --- a/src/script/api/script_info_docs.hpp +++ b/src/script/api/script_info_docs.hpp @@ -252,5 +252,5 @@ public: * @note This is a function provided by OpenTTD, you don't have to * include it in your Script but should just call it from GetSettings. */ - void AddLabels(const char *setting_name, table value_names); + void AddLabels(string setting_name, table value_names); }; diff --git a/src/script/api/script_priorityqueue.hpp b/src/script/api/script_priorityqueue.hpp index 43c173b350..74aecc7507 100644 --- a/src/script/api/script_priorityqueue.hpp +++ b/src/script/api/script_priorityqueue.hpp @@ -42,21 +42,21 @@ public: * @param priority The priority to assign the item. * @return True if the item was inserted, false if it was already in the queue. */ - bool Insert(void *item, SQInteger priority); + bool Insert(object item, SQInteger priority); /** * Remove and return the item with the lowest priority. * @return The item with the lowest priority, removed from the queue. Returns null on an empty queue. * @pre !IsEmpty() */ - void *Pop(); + object Pop(); /** * Get the item with the lowest priority, keeping it in the queue. * @return The item with the lowest priority. Returns null on an empty queue. * @pre !IsEmpty() */ - void *Peek(); + object Peek(); /** * Check if an items is already included in the queue. @@ -64,7 +64,7 @@ public: * @return true if the items is already in the queue. * @note Performance is O(n), use only when absolutely required. */ - bool Exists(void *item); + bool Exists(object item); /** * Clear the queue, making Count() returning 0 and IsEmpty() returning true. diff --git a/src/script/api/script_text.hpp b/src/script/api/script_text.hpp index dc9f1c1513..5cc3a52fe3 100644 --- a/src/script/api/script_text.hpp +++ b/src/script/api/script_text.hpp @@ -112,14 +112,14 @@ public: * @param parameter Which parameter to set. * @param value The value of the parameter. Has to be string, integer or an instance of the class ScriptText. */ - void SetParam(int parameter, Object value); + void SetParam(int parameter, object value); /** * Add a value as parameter (appending it). * @param value The value of the parameter. Has to be string, integer or an instance of the class ScriptText. * @return The same object as on which this is called, so you can chain. */ - ScriptText *AddParam(Object value); + ScriptText *AddParam(object value); #endif /* DOXYGEN_API */ /** From 40e623090012da438886fb2199e25c4a87067ab9 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 24 Mar 2024 18:54:12 +0100 Subject: [PATCH 504/695] Codechange: Add main page to script API documentation --- src/script/api/ai_changelog.hpp | 16 +++++++++++++++- src/script/api/game_changelog.hpp | 16 +++++++++++++++- src/script/api/script_types.hpp | 5 ++++- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index 39037efd06..902e93c547 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -6,7 +6,7 @@ */ /** - * @file ai_changelog.hpp Lists all changes / additions to the API. + * @page ai_changelog Lists all changes / additions to the API. * * Only new / renamed / deleted api functions will be listed here. A list of * bug fixes can be found in the normal changelog. Note that removed API @@ -457,3 +457,17 @@ * \b 0.7.0 * \li First stable release with the NoAI framework. */ + +/** + * @mainpage + * + * What's new? + * \li \ref ai_changelog + * + * Main classes: + * \li \ref AIInfo + * \li \ref AIController + * + * Detail topics: + * \li \ref script_ids + */ diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index 8963190e26..c3365eb94c 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -6,7 +6,7 @@ */ /** - * @file game_changelog.hpp Lists all changes / additions to the API. + * @page game_changelog Lists all changes / additions to the API. * * Only new / renamed / deleted api functions will be listed here. A list of * bug fixes can be found in the normal changelog. Note that removed API @@ -301,3 +301,17 @@ * \b 1.2.0 * \li First stable release with the NoGo framework. */ + +/** + * @mainpage + * + * What's new? + * \li \ref game_changelog + * + * Main classes: + * \li \ref GSInfo + * \li \ref GSController + * + * Detail topics: + * \li \ref script_ids + */ diff --git a/src/script/api/script_types.hpp b/src/script/api/script_types.hpp index 20289bdf39..bd925079c0 100644 --- a/src/script/api/script_types.hpp +++ b/src/script/api/script_types.hpp @@ -7,7 +7,10 @@ /** * @file script_types.hpp Defines all the types of the game, like IDs of various objects. - * + */ + +/** + * @page script_ids Identifying game object * IDs are used to identify certain objects. They are only unique within the object type, so for example a vehicle may have VehicleID 2009, * while a station has StationID 2009 at the same time. Also IDs are assigned arbitrary, you cannot assume them to be consecutive. * Also note that some IDs are static and never change, while others are allocated dynamically and might be From 04cc0c8125dac493624e898fbac3016964ff77f1 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 24 Mar 2024 18:48:24 +0100 Subject: [PATCH 505/695] Codechange: [Script] Document relation between ScriptErrorType and ErrorMessages enums --- src/script/api/script_bridge.hpp | 2 ++ src/script/api/script_error.hpp | 2 ++ src/script/api/script_marine.hpp | 2 ++ src/script/api/script_order.hpp | 2 ++ src/script/api/script_rail.hpp | 2 ++ src/script/api/script_road.hpp | 2 ++ src/script/api/script_sign.hpp | 2 ++ src/script/api/script_station.hpp | 2 ++ src/script/api/script_tile.hpp | 2 ++ src/script/api/script_tunnel.hpp | 2 ++ src/script/api/script_types.hpp | 7 ++++++- src/script/api/script_vehicle.hpp | 2 ++ src/script/api/script_waypoint.hpp | 2 ++ 13 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/script/api/script_bridge.hpp b/src/script/api/script_bridge.hpp index 01f52a55bd..964341244a 100644 --- a/src/script/api/script_bridge.hpp +++ b/src/script/api/script_bridge.hpp @@ -20,6 +20,8 @@ class ScriptBridge : public ScriptObject { public: /** * All bridge related error messages. + * + * @see ScriptErrorType */ enum ErrorMessages { /** Base for bridge related errors */ diff --git a/src/script/api/script_error.hpp b/src/script/api/script_error.hpp index 0fe7d92d56..84f2d6e86f 100644 --- a/src/script/api/script_error.hpp +++ b/src/script/api/script_error.hpp @@ -120,6 +120,8 @@ public: /** * All general related error messages. + * + * @see ScriptErrorType */ enum ErrorMessages { /** Initial error value */ diff --git a/src/script/api/script_marine.hpp b/src/script/api/script_marine.hpp index e6d5a2600b..7337c8df12 100644 --- a/src/script/api/script_marine.hpp +++ b/src/script/api/script_marine.hpp @@ -20,6 +20,8 @@ class ScriptMarine : public ScriptObject { public: /** * All marine related error messages. + * + * @see ScriptErrorType */ enum ErrorMessages { /** Base for marine related errors */ diff --git a/src/script/api/script_order.hpp b/src/script/api/script_order.hpp index d3e7066cd5..752136134e 100644 --- a/src/script/api/script_order.hpp +++ b/src/script/api/script_order.hpp @@ -21,6 +21,8 @@ class ScriptOrder : public ScriptObject { public: /** * All order related error messages. + * + * @see ScriptErrorType */ enum ErrorMessages { /** Base for all order related errors */ diff --git a/src/script/api/script_rail.hpp b/src/script/api/script_rail.hpp index b17b86d7a3..2a55a72048 100644 --- a/src/script/api/script_rail.hpp +++ b/src/script/api/script_rail.hpp @@ -22,6 +22,8 @@ class ScriptRail : public ScriptObject { public: /** * All rail related error messages. + * + * @see ScriptErrorType */ enum ErrorMessages { /** Base for rail building / maintaining errors */ diff --git a/src/script/api/script_road.hpp b/src/script/api/script_road.hpp index 007c44adce..46f75ae2f9 100644 --- a/src/script/api/script_road.hpp +++ b/src/script/api/script_road.hpp @@ -22,6 +22,8 @@ class ScriptRoad : public ScriptObject { public: /** * All road related error messages. + * + * @see ScriptErrorType */ enum ErrorMessages { /** Base for road building / maintaining errors */ diff --git a/src/script/api/script_sign.hpp b/src/script/api/script_sign.hpp index 1569ad9932..3e9d0c8ff8 100644 --- a/src/script/api/script_sign.hpp +++ b/src/script/api/script_sign.hpp @@ -21,6 +21,8 @@ class ScriptSign : public ScriptObject { public: /** * All sign related error messages. + * + * @see ScriptErrorType */ enum ErrorMessages { diff --git a/src/script/api/script_station.hpp b/src/script/api/script_station.hpp index 4f705a518a..6837eea418 100644 --- a/src/script/api/script_station.hpp +++ b/src/script/api/script_station.hpp @@ -22,6 +22,8 @@ class ScriptStation : public ScriptBaseStation { public: /** * All station related error messages. + * + * @see ScriptErrorType */ enum ErrorMessages { /** Base for station related errors */ diff --git a/src/script/api/script_tile.hpp b/src/script/api/script_tile.hpp index de476ffb69..8abf47a793 100644 --- a/src/script/api/script_tile.hpp +++ b/src/script/api/script_tile.hpp @@ -23,6 +23,8 @@ class ScriptTile : public ScriptObject { public: /** * Error messages related to modifying tiles. + * + * @see ScriptErrorType */ enum ErrorMessages { diff --git a/src/script/api/script_tunnel.hpp b/src/script/api/script_tunnel.hpp index 5f226370b4..2331d8b313 100644 --- a/src/script/api/script_tunnel.hpp +++ b/src/script/api/script_tunnel.hpp @@ -20,6 +20,8 @@ class ScriptTunnel : public ScriptObject { public: /** * All tunnel related errors. + * + * @see ScriptErrorType */ enum ErrorMessages { diff --git a/src/script/api/script_types.hpp b/src/script/api/script_types.hpp index bd925079c0..f020427fa2 100644 --- a/src/script/api/script_types.hpp +++ b/src/script/api/script_types.hpp @@ -135,6 +135,11 @@ typedef uint32_t TileIndex; ///< The ID of a map location. typedef uint16_t TownID; ///< The ID of a town. typedef uint32_t VehicleID; ///< The ID of a vehicle. -typedef uint ScriptErrorType;///< The types of errors inside the script framework. +/** + * The types of errors inside the script framework. + * + * Possible value are defined inside each API class in an ErrorMessages enum. + */ +typedef uint ScriptErrorType; #endif /* SCRIPT_TYPES_HPP */ diff --git a/src/script/api/script_vehicle.hpp b/src/script/api/script_vehicle.hpp index bd6d79ebcc..d9c5309956 100644 --- a/src/script/api/script_vehicle.hpp +++ b/src/script/api/script_vehicle.hpp @@ -20,6 +20,8 @@ class ScriptVehicle : public ScriptObject { public: /** * All vehicle related error messages. + * + * @see ScriptErrorType */ enum ErrorMessages { /** Base for vehicle related errors */ diff --git a/src/script/api/script_waypoint.hpp b/src/script/api/script_waypoint.hpp index 9dada43966..62f9e6c875 100644 --- a/src/script/api/script_waypoint.hpp +++ b/src/script/api/script_waypoint.hpp @@ -22,6 +22,8 @@ class ScriptWaypoint : public ScriptBaseStation { public: /** * All waypoint related error messages. + * + * @see ScriptErrorType */ enum ErrorMessages { /** Base for waypoint related errors */ From dc22edc556965591958b996e7777580062f46861 Mon Sep 17 00:00:00 2001 From: frosch Date: Sat, 23 Mar 2024 21:34:31 +0100 Subject: [PATCH 506/695] Doc: [Script] Extend API documentation on calendar- vs economy-time --- src/script/api/script_airport.hpp | 3 +- src/script/api/script_basestation.hpp | 5 +- src/script/api/script_client.hpp | 5 +- src/script/api/script_company.hpp | 43 ++++++++++-------- src/script/api/script_date.hpp | 24 ++++++++++ src/script/api/script_engine.hpp | 13 +++--- src/script/api/script_event_types.hpp | 4 +- src/script/api/script_group.hpp | 6 ++- src/script/api/script_industry.hpp | 30 +++++++----- src/script/api/script_infrastructure.hpp | 9 ++-- src/script/api/script_order.hpp | 4 +- src/script/api/script_story_page.hpp | 6 ++- src/script/api/script_subsidy.hpp | 7 +-- src/script/api/script_town.hpp | 58 +++++++++++++++--------- src/script/api/script_vehicle.hpp | 26 ++++++----- 15 files changed, 154 insertions(+), 89 deletions(-) diff --git a/src/script/api/script_airport.hpp b/src/script/api/script_airport.hpp index e46658219a..cb3fc3c227 100644 --- a/src/script/api/script_airport.hpp +++ b/src/script/api/script_airport.hpp @@ -204,7 +204,8 @@ public: * Get the monthly maintenance cost of an airport type. * @param type The airport type to get the monthly maintenance cost of. * @pre IsAirportInformationAvailable(type) - * @return Monthly maintenance cost of the airport type. + * @return Maintenance cost of the airport type per economy-month. + * @see \ref ScriptEconomyTime */ static Money GetMonthlyMaintenanceCost(AirportType type); diff --git a/src/script/api/script_basestation.hpp b/src/script/api/script_basestation.hpp index 52df57f78c..cf6388f327 100644 --- a/src/script/api/script_basestation.hpp +++ b/src/script/api/script_basestation.hpp @@ -68,9 +68,10 @@ public: static TileIndex GetLocation(StationID station_id); /** - * Get the last date a station part was added to this station. + * Get the last calendar-date a station part was added to this station. * @param station_id The station to look at. - * @return The last date some part of this station was build. + * @return The last calendar-date some part of this station was build. + * @see \ref ScriptCalendarTime */ static ScriptDate::Date GetConstructionDate(StationID station_id); }; diff --git a/src/script/api/script_client.hpp b/src/script/api/script_client.hpp index 7b5d6f5dc3..7e463e4f94 100644 --- a/src/script/api/script_client.hpp +++ b/src/script/api/script_client.hpp @@ -56,10 +56,11 @@ public: static ScriptCompany::CompanyID GetCompany(ClientID client); /** - * Get the game date when the given client has joined. + * Get the economy-date when the given client has joined. * @param client The client to get joining date for. * @pre ResolveClientID(client) != CLIENT_INVALID. - * @return The date when client has joined. + * @return The economy-date when client has joined. + * @see \ref ScriptEconomyTime */ static ScriptDate::Date GetJoinDate(ClientID client); }; diff --git a/src/script/api/script_company.hpp b/src/script/api/script_company.hpp index ab330296c6..e5dad4c194 100644 --- a/src/script/api/script_company.hpp +++ b/src/script/api/script_company.hpp @@ -281,59 +281,64 @@ public: static bool ChangeBankBalance(CompanyID company, Money delta, ExpensesType expenses_type, TileIndex tile); /** - * Get the income of the company in the given quarter. + * Get the income of the company in the given economy-quarter. * Note that this function only considers recurring income from vehicles; * it does not include one-time income from selling stuff. * @param company The company to get the quarterly income of. - * @param quarter The quarter to get the income of. + * @param quarter The economy-quarter to get the income of. * @pre ResolveCompanyID(company) != COMPANY_INVALID. * @pre quarter <= EARLIEST_QUARTER. - * @return The gross income of the company in the given quarter. + * @return The gross income of the company in the given economy-quarter. + * @see \ref ScriptEconomyTime */ static Money GetQuarterlyIncome(CompanyID company, SQInteger quarter); /** - * Get the expenses of the company in the given quarter. + * Get the expenses of the company in the given economy-quarter. * Note that this function only considers recurring expenses from vehicle * running cost, maintenance and interests; it does not include one-time * expenses from construction and buying stuff. * @param company The company to get the quarterly expenses of. - * @param quarter The quarter to get the expenses of. + * @param quarter The economy-quarter to get the expenses of. * @pre ResolveCompanyID(company) != COMPANY_INVALID. * @pre quarter <= EARLIEST_QUARTER. - * @return The expenses of the company in the given quarter. + * @return The expenses of the company in the given economy-quarter. + * @see \ref ScriptEconomyTime */ static Money GetQuarterlyExpenses(CompanyID company, SQInteger quarter); /** - * Get the amount of cargo delivered by the given company in the given quarter. + * Get the amount of cargo delivered by the given company in the given economy-quarter. * @param company The company to get the amount of delivered cargo of. - * @param quarter The quarter to get the amount of delivered cargo of. + * @param quarter The economy-quarter to get the amount of delivered cargo of. * @pre ResolveCompanyID(company) != COMPANY_INVALID. * @pre quarter <= EARLIEST_QUARTER. - * @return The amount of cargo delivered by the given company in the given quarter. + * @return The amount of cargo delivered by the given company in the given economy-quarter. + * @see \ref ScriptEconomyTime */ static SQInteger GetQuarterlyCargoDelivered(CompanyID company, SQInteger quarter); /** - * Get the performance rating of the given company in the given quarter. + * Get the performance rating of the given company in the given economy-quarter. * @param company The company to get the performance rating of. - * @param quarter The quarter to get the performance rating of. + * @param quarter The economy-quarter to get the performance rating of. * @pre ResolveCompanyID(company) != COMPANY_INVALID. * @pre quarter <= EARLIEST_QUARTER. * @pre quarter != CURRENT_QUARTER. - * @note The performance rating is calculated after every quarter, so the value for CURRENT_QUARTER is undefined. - * @return The performance rating of the given company in the given quarter. + * @note The performance rating is calculated after every economy-quarter, so the value for CURRENT_QUARTER is undefined. + * @return The performance rating of the given company in the given economy-quarter. + * @see \ref ScriptEconomyTime */ static SQInteger GetQuarterlyPerformanceRating(CompanyID company, SQInteger quarter); /** - * Get the value of the company in the given quarter. + * Get the value of the company in the given economy-quarter. * @param company The company to get the value of. - * @param quarter The quarter to get the value of. + * @param quarter The economy-quarter to get the value of. * @pre ResolveCompanyID(company) != COMPANY_INVALID. * @pre quarter <= EARLIEST_QUARTER. - * @return The value of the company in the given quarter. + * @return The value of the company in the given economy-quarter. + * @see \ref ScriptEconomyTime */ static Money GetQuarterlyCompanyValue(CompanyID company, SQInteger quarter); @@ -377,10 +382,11 @@ public: /** * Set the number of months before/after max age to autorenew an engine for your company. - * @param months The new months between autorenew. + * @param months The number of calendar-months before/after max age of engine. * The value will be clamped to MIN(int16_t) .. MAX(int16_t). * @game @pre ScriptCompanyMode::IsValid(). * @return True if autorenew months has been modified. + * @see \ref ScriptCalendarTime */ static bool SetAutoRenewMonths(SQInteger months); @@ -388,7 +394,8 @@ public: * Return the number of months before/after max age to autorenew an engine for a company. * @param company The company to get the autorenew months of. * @pre ResolveCompanyID(company) != COMPANY_INVALID. - * @return The months before/after max age of engine. + * @return The number of calendar-months before/after max age of engine. + * @see \ref ScriptCalendarTime */ static SQInteger GetAutoRenewMonths(CompanyID company); diff --git a/src/script/api/script_date.hpp b/src/script/api/script_date.hpp index 5c7ddec042..44f609d80b 100644 --- a/src/script/api/script_date.hpp +++ b/src/script/api/script_date.hpp @@ -23,6 +23,30 @@ * @note Dates can be used to determine the number of days between * two different moments in time because they count the number * of days since the year 0. + * + * \anchor ScriptCalendarTime + * \b Calendar-Time + * + * Calendar time measures the technological progression in the game. + * \li The calendar date is shown in the status bar. + * \li The calendar date affects engine model introduction and expiration. + * \li Progression of calendar time can be slowed or even halted via game settings. + * + * Calendar time uses the Gregorian calendar with 365 or 366 days per year. + * + * \anchor ScriptEconomyTime + * \b Economy-Time + * + * Economy time measures the in-game time progression, while the game is not paused. + * \li Cargo production and consumption follows economy time. + * \li Recurring income and expenses follow economy time. + * \li Production and income statistics and balances are created per economy month/quarter/year. + * + * Depending on game settings economy time is represented differently: + * \li Calendar-based timekeeping: Economy- and calendar-time use the identical Gregorian calendar. + * \li Wallclock-based timekeeping: Economy- and calendar-time are separate. + * Economy-time will use a 360 day calendar (12 months with 30 days each), which runs at a constant speed of one economy-month per realtime-minute. + * Calendar-time will use a Gregorian calendar, which can be slowed to stopped via game settings. */ class ScriptDate : public ScriptObject { public: diff --git a/src/script/api/script_engine.hpp b/src/script/api/script_engine.hpp index 2baed5bec3..a8ad60d0ac 100644 --- a/src/script/api/script_engine.hpp +++ b/src/script/api/script_engine.hpp @@ -125,8 +125,8 @@ public: * Get the maximum age of a brand new engine. * @param engine_id The engine to get the maximum age of. * @pre IsValidEngine(engine_id). - * @returns The maximum age of a new engine in days. - * @note Age is in days; divide by 366 to get per year. + * @returns The maximum age of a new engine in calendar-days. + * @see \ref ScriptCalendarTime */ static SQInteger GetMaxAge(EngineID engine_id); @@ -134,8 +134,8 @@ public: * Get the running cost of an engine. * @param engine_id The engine to get the running cost of. * @pre IsValidEngine(engine_id). - * @return The running cost of a vehicle per year. - * @note Cost is per year; divide by 365 to get per day. + * @return The running cost of a vehicle per economy-year. + * @see \ref ScriptEconomyTime */ static Money GetRunningCost(EngineID engine_id); @@ -167,10 +167,11 @@ public: static SQInteger GetMaxTractiveEffort(EngineID engine_id); /** - * Get the date this engine was designed. + * Get the calendar-date this engine was designed. * @param engine_id The engine to get the design date of. * @pre IsValidEngine(engine_id). - * @return The date this engine was designed. + * @return The calendar-date this engine was designed. + * @see \ref ScriptCalendarTime */ static ScriptDate::Date GetDesignDate(EngineID engine_id); diff --git a/src/script/api/script_event_types.hpp b/src/script/api/script_event_types.hpp index da9cdf3a6d..8142893d11 100644 --- a/src/script/api/script_event_types.hpp +++ b/src/script/api/script_event_types.hpp @@ -272,8 +272,8 @@ public: /** * Get the running cost of the offered engine. - * @return The running cost of the vehicle per year. - * @note Cost is per year; divide by 365 to get per day. + * @return The running cost of the vehicle per economy-year. + * @see \ref ScriptEconomyTime */ Money GetRunningCost(); diff --git a/src/script/api/script_group.hpp b/src/script/api/script_group.hpp index 153fff3279..9b7da3e90b 100644 --- a/src/script/api/script_group.hpp +++ b/src/script/api/script_group.hpp @@ -222,7 +222,8 @@ public: * Get the current profit of a group. * @param group_id The group to get the profit of. * @pre IsValidGroup(group_id). - * @return The current profit the group has. + * @return The profit the vehicles in this group have made this economy-year so far. + * @see \ref ScriptEconomyTime */ static Money GetProfitThisYear(GroupID group_id); @@ -230,7 +231,8 @@ public: * Get the profit of last year of a group. * @param group_id The group to get the profit of. * @pre IsValidGroup(group_id). - * @return The current profit the group had last year. + * @return The profit the vehicles in this group made in the previous economy-year. + * @see \ref ScriptEconomyTime */ static Money GetProfitLastYear(GroupID group_id); diff --git a/src/script/api/script_industry.hpp b/src/script/api/script_industry.hpp index 3bca023d56..72f144663e 100644 --- a/src/script/api/script_industry.hpp +++ b/src/script/api/script_industry.hpp @@ -86,10 +86,11 @@ public: static std::optional GetName(IndustryID industry_id); /** - * Get the construction date of an industry. + * Get the construction calendar-date of an industry. * @param industry_id The index of the industry. * @pre IsValidIndustry(industry_id). - * @return Date the industry was constructed. + * @return Calendar-date the industry was constructed. + * @see \ref ScriptCalendarTime * @api -ai */ static ScriptDate::Date GetConstructionDate(IndustryID industry_id); @@ -126,32 +127,35 @@ public: static SQInteger GetStockpiledCargo(IndustryID industry_id, CargoID cargo_id); /** - * Get the total last month's production of the given cargo at an industry. + * Get the total last economy-month's production of the given cargo at an industry. * @param industry_id The index of the industry. * @param cargo_id The index of the cargo. * @pre IsValidIndustry(industry_id). * @pre ScriptCargo::IsValidCargo(cargo_id). - * @return The last month's production of the given cargo for this industry. + * @return The last economy-month's production of the given cargo for this industry. + * @see \ref ScriptEconomyTime */ static SQInteger GetLastMonthProduction(IndustryID industry_id, CargoID cargo_id); /** - * Get the total amount of cargo transported from an industry last month. + * Get the total amount of cargo transported from an industry last economy-month. * @param industry_id The index of the industry. * @param cargo_id The index of the cargo. * @pre IsValidIndustry(industry_id). * @pre ScriptCargo::IsValidCargo(cargo_id). - * @return The amount of given cargo transported from this industry last month. + * @return The amount of given cargo transported from this industry last economy-month. + * @see \ref ScriptEconomyTime */ static SQInteger GetLastMonthTransported(IndustryID industry_id, CargoID cargo_id); /** - * Get the percentage of cargo transported from an industry last month. + * Get the percentage of cargo transported from an industry last economy-month. * @param industry_id The index of the industry. * @param cargo_id The index of the cargo. * @pre IsValidIndustry(industry_id). * @pre ScriptCargo::IsValidCargo(cargo_id). - * @return The percentage of given cargo transported from this industry last month. + * @return The percentage of given cargo transported from this industry last economy-month. + * @see \ref ScriptEconomyTime */ static SQInteger GetLastMonthTransportedPercentage(IndustryID industry_id, CargoID cargo_id); @@ -246,21 +250,23 @@ public: static IndustryType GetIndustryType(IndustryID industry_id); /** - * Get the last year this industry had any production output. + * Get the last economy-year this industry had any production output. * @param industry_id The index of the industry. * @pre IsValidIndustry(industry_id). - * @return Year the industry last had production, 0 if error. + * @return Economy-year the industry last had production, 0 if error. + * @see \ref ScriptEconomyTime * @api -ai */ static SQInteger GetLastProductionYear(IndustryID industry_id); /** - * Get the last date this industry accepted any cargo delivery. + * Get the last economy-date this industry accepted any cargo delivery. * @param industry_id The index of the industry. * @param cargo_type The cargo to query, or INVALID_CARGO to query latest of all accepted cargoes. * @pre IsValidIndustry(industry_id). * @pre IsValidCargo(cargo_type) || cargo_type == INVALID_CARGO. - * @return Date the industry last received cargo from a delivery, or ScriptDate::DATE_INVALID on error. + * @return Economy-date the industry last received cargo from a delivery, or ScriptDate::DATE_INVALID on error. + * @see \ref ScriptEconomyTime * @api -ai */ static ScriptDate::Date GetCargoLastAcceptedDate(IndustryID industry_id, CargoID cargo_type); diff --git a/src/script/api/script_infrastructure.hpp b/src/script/api/script_infrastructure.hpp index 9b3a499b7d..79ced1b586 100644 --- a/src/script/api/script_infrastructure.hpp +++ b/src/script/api/script_infrastructure.hpp @@ -58,7 +58,8 @@ public: * Return the monthly maintenance costs of a specific rail type for a company. * @param company The company to get the monthly cost for. * @param railtype Rail type to get the cost of. - * @return Monthly maintenance cost for the rail type. + * @return Maintenance cost for the rail type per economy-month. + * @see \ref ScriptEconomyTime */ static Money GetMonthlyRailCosts(ScriptCompany::CompanyID company, ScriptRail::RailType railtype); @@ -66,7 +67,8 @@ public: * Return the monthly maintenance costs of a specific road type for a company. * @param company The company to get the monthly cost for. * @param roadtype Road type to get the cost of. - * @return Monthly maintenance cost for the road type. + * @return Maintenance cost for the road type per economy-month. + * @see \ref ScriptEconomyTime */ static Money GetMonthlyRoadCosts(ScriptCompany::CompanyID company, ScriptRoad::RoadType roadtype); @@ -74,8 +76,9 @@ public: * Return the monthly maintenance costs of an infrastructure category for a company. * @param company The company to get the monthly cost for. * @param infra_type Infrastructure category to get the cost of. - * @return Monthly maintenance cost for the wanted category. + * @return Maintenance cost for the wanted category per economy-month. * @note #INFRASTRUCTURE_RAIL and #INFRASTRUCTURE_ROAD return the total cost for all rail/road types. + * @see \ref ScriptEconomyTime */ static Money GetMonthlyInfrastructureCosts(ScriptCompany::CompanyID company, Infrastructure infra_type); }; diff --git a/src/script/api/script_order.hpp b/src/script/api/script_order.hpp index 752136134e..68cc756cb2 100644 --- a/src/script/api/script_order.hpp +++ b/src/script/api/script_order.hpp @@ -93,10 +93,10 @@ public: OC_RELIABILITY = ::OCV_RELIABILITY, ///< Skip based on the reliability, value is percent (0..100). OC_MAX_RELIABILITY = ::OCV_MAX_RELIABILITY, ///< Skip based on the maximum reliability. Value in percent OC_MAX_SPEED = ::OCV_MAX_SPEED, ///< Skip based on the maximum speed, value is in OpenTTD's internal speed unit, see ScriptEngine::GetMaxSpeed. - OC_AGE = ::OCV_AGE, ///< Skip based on the age, value is in years. + OC_AGE = ::OCV_AGE, ///< Skip based on the age, value is in calender-years. @see \ref ScriptCalendarTime OC_REQUIRES_SERVICE = ::OCV_REQUIRES_SERVICE, ///< Skip when the vehicle requires service, no value. OC_UNCONDITIONALLY = ::OCV_UNCONDITIONALLY, ///< Always skip, no compare function, no value. - OC_REMAINING_LIFETIME = ::OCV_REMAINING_LIFETIME, ///< Skip based on the remaining lifetime + OC_REMAINING_LIFETIME = ::OCV_REMAINING_LIFETIME, ///< Skip based on the remaining lifetime in calendar-years. @see \ref ScriptCalendarTime /* Custom added value, only valid for this API */ OC_INVALID = -1, ///< An invalid condition, do not use. diff --git a/src/script/api/script_story_page.hpp b/src/script/api/script_story_page.hpp index a15af1dc4e..65ea06f29b 100644 --- a/src/script/api/script_story_page.hpp +++ b/src/script/api/script_story_page.hpp @@ -265,18 +265,20 @@ public: /** * Get the page date which is displayed at the top of each page. * @param story_page_id The story page to get the date of. - * @return The date + * @return The calendar-date * @pre IsValidStoryPage(story_page_id). + * @see \ref ScriptCalendarTime */ static ScriptDate::Date GetDate(StoryPageID story_page_id); /** * Update date of a story page. The date is shown in the top left of the page * @param story_page_id The story page to set the date for. - * @param date Date to display at the top of story page or ScriptDate::DATE_INVALID to disable showing date on this page. (also, @see ScriptDate) + * @param date Calendar-date to display at the top of story page or ScriptDate::DATE_INVALID to disable showing date on this page. (also, @see ScriptDate) * @return True if the action succeeded. * @pre ScriptCompanyMode::IsDeity(). * @pre IsValidStoryPage(story_page_id). + * @see \ref ScriptCalendarTime */ static bool SetDate(StoryPageID story_page_id, ScriptDate::Date date); diff --git a/src/script/api/script_subsidy.hpp b/src/script/api/script_subsidy.hpp index 5bfcf1c9a2..4c139458f6 100644 --- a/src/script/api/script_subsidy.hpp +++ b/src/script/api/script_subsidy.hpp @@ -74,14 +74,15 @@ public: static ScriptCompany::CompanyID GetAwardedTo(SubsidyID subsidy_id); /** - * Get the date this subsidy expires. In case the subsidy is already - * awarded, return the date the subsidy expires, else, return the date the + * Get the economy-date this subsidy expires. In case the subsidy is already + * awarded, return the economy-date the subsidy expires, else, return the economy-date the * offer expires. * @param subsidy_id The SubsidyID to check. * @pre IsValidSubsidy(subsidy_id). - * @return The last valid date of this subsidy. + * @return The last valid economy-date of this subsidy. * @note The return value of this function will change if the subsidy is * awarded. + * @see \ref ScriptEconomyTime */ static ScriptDate::Date GetExpireDate(SubsidyID subsidy_id); diff --git a/src/script/api/script_town.hpp b/src/script/api/script_town.hpp index 0c13ef8914..ab2ce1f807 100644 --- a/src/script/api/script_town.hpp +++ b/src/script/api/script_town.hpp @@ -48,7 +48,8 @@ public: TOWN_ACTION_ADVERTISE_LARGE = 2, /** - * Rebuild the roads of this town for 6 months. + * Rebuild the roads of this town for 6 economy-months. + * @see \ref ScriptEconomyTime */ TOWN_ACTION_ROAD_REBUILD = 3, @@ -58,12 +59,14 @@ public: TOWN_ACTION_BUILD_STATUE = 4, /** - * Fund the creation of extra buildings for 3 months. + * Fund the creation of extra buildings for 3 economy-months. + * @see \ref ScriptEconomyTime */ TOWN_ACTION_FUND_BUILDINGS = 5, /** - * Buy exclusive rights for this town for 12 months. + * Buy exclusive rights for this town for 12 economy-months. + * @see \ref ScriptEconomyTime */ TOWN_ACTION_BUY_RIGHTS = 6, @@ -191,92 +194,100 @@ public: static TileIndex GetLocation(TownID town_id); /** - * Get the total last month's production of the given cargo at a town. + * Get the total last economy-month's production of the given cargo at a town. * @param town_id The index of the town. * @param cargo_id The index of the cargo. * @pre IsValidTown(town_id). * @pre ScriptCargo::IsValidCargo(cargo_id). - * @return The last month's production of the given cargo for this town. + * @return The last economy-month's production of the given cargo for this town. + * @see \ref ScriptEconomyTime */ static SQInteger GetLastMonthProduction(TownID town_id, CargoID cargo_id); /** - * Get the total amount of cargo supplied from a town last month. + * Get the total amount of cargo supplied from a town last economy-month. * @param town_id The index of the town. * @param cargo_id The index of the cargo. * @pre IsValidTown(town_id). * @pre ScriptCargo::IsValidCargo(cargo_id). - * @return The amount of cargo supplied for transport from this town last month. + * @return The amount of cargo supplied for transport from this town last economy-month. + * @see \ref ScriptEconomyTime */ static SQInteger GetLastMonthSupplied(TownID town_id, CargoID cargo_id); /** - * Get the percentage of transported production of the given cargo at a town. + * Get the percentage of transported production of the given cargo at a town last economy-month. * @param town_id The index of the town. * @param cargo_id The index of the cargo. * @pre IsValidTown(town_id). * @pre ScriptCargo::IsValidCargo(cargo_id). - * @return The percentage of given cargo transported from this town last month. + * @return The percentage of given cargo transported from this town last economy-month. + * @see \ref ScriptEconomyTime */ static SQInteger GetLastMonthTransportedPercentage(TownID town_id, CargoID cargo_id); /** - * Get the total amount of cargo effects received by a town last month. + * Get the total amount of cargo effects received by a town last economy-month. * @param town_id The index of the town. * @param towneffect_id The index of the cargo. * @pre IsValidTown(town_id). * @pre ScriptCargo::IsValidTownEffect(cargo_id). - * @return The amount of cargo received by this town last month for this cargo effect. + * @return The amount of cargo received by this town last economy-month for this cargo effect. + * @see \ref ScriptEconomyTime */ static SQInteger GetLastMonthReceived(TownID town_id, ScriptCargo::TownEffect towneffect_id); /** - * Set the goal of a cargo for this town. + * Set the goal of a cargo per economy-month for this town. * @param town_id The index of the town. * @param towneffect_id The index of the towneffect. - * @param goal The new goal. + * @param goal The new goal amount for cargo delivered per economy-month. * The value will be clamped to 0 .. MAX(uint32_t). * @pre IsValidTown(town_id). * @pre ScriptCargo::IsValidTownEffect(towneffect_id). * @pre ScriptCompanyMode::IsDeity(). * @return True if the action succeeded. + * @see \ref ScriptEconomyTime * @api -ai */ static bool SetCargoGoal(TownID town_id, ScriptCargo::TownEffect towneffect_id, SQInteger goal); /** - * Get the amount of cargo that needs to be delivered (per TownEffect) for a + * Get the amount of cargo per economy-month that needs to be delivered (per TownEffect) for a * town to grow. All goals need to be reached before a town will grow. * @param town_id The index of the town. * @param towneffect_id The index of the towneffect. * @pre IsValidTown(town_id). * @pre ScriptCargo::IsValidTownEffect(towneffect_id). - * @return The goal of the cargo. + * @return The goal of the cargo (amount per economy-month). * @note Goals can change over time. For example with a changing snowline, or * with a growing town. + * @see \ref ScriptEconomyTime */ static SQInteger GetCargoGoal(TownID town_id, ScriptCargo::TownEffect towneffect_id); /** - * Set the amount of days between town growth. + * Set the amount of economy-days between town growth. * @param town_id The index of the town. - * @param days_between_town_growth The amount of days between town growth, TOWN_GROWTH_NONE or TOWN_GROWTH_NORMAL. + * @param days_between_town_growth The amount of economy-days between town growth, TOWN_GROWTH_NONE or TOWN_GROWTH_NORMAL. * @pre IsValidTown(town_id). * @pre days_between_town_growth <= 880 || days_between_town_growth == TOWN_GROWTH_NONE || days_between_town_growth == TOWN_GROWTH_NORMAL. * @return True if the action succeeded. * @note Even when setting a growth rate, towns only grow when the conditions for growth (SetCargoCoal) are met, * and the game settings (economy.town_growth_rate) allow town growth at all. * @note When changing the growth rate, the relative progress is preserved and scaled to the new rate. + * @see \ref ScriptEconomyTime * @api -ai */ static bool SetGrowthRate(TownID town_id, SQInteger days_between_town_growth); /** - * Get the amount of days between town growth. + * Get the amount of economy-days between town growth. * @param town_id The index of the town. * @pre IsValidTown(town_id). - * @return Amount of days between town growth, or TOWN_GROWTH_NONE. + * @return Amount of economy-days between town growth, or TOWN_GROWTH_NONE. * @note This function does not indicate when it will grow next. It only tells you the time between growths. + * @see \ref ScriptEconomyTime */ static SQInteger GetGrowthRate(TownID town_id); @@ -332,8 +343,9 @@ public: * Find out how long the town is undergoing road reconstructions. * @param town_id The town to check. * @pre IsValidTown(town_id). - * @return The number of months the road reworks are still going to take. + * @return The number of economy-months the road reworks are still going to take. * The value 0 means that there are currently no road reworks. + * @see \ref ScriptEconomyTime */ static SQInteger GetRoadReworkDuration(TownID town_id); @@ -341,8 +353,9 @@ public: * Find out how long new buildings are still being funded in a town. * @param town_id The town to check. * @pre IsValidTown(town_id). - * @return The number of months building construction is still funded. + * @return The number of economy-months building construction is still funded. * The value 0 means that there is currently no funding. + * @see \ref ScriptEconomyTime */ static SQInteger GetFundBuildingsDuration(TownID town_id); @@ -361,9 +374,10 @@ public: * Find out how long the town is under influence of the exclusive rights. * @param town_id The town to check. * @pre IsValidTown(town_id). - * @return The number of months the exclusive rights hold. + * @return The number of economy-months the exclusive rights hold. * The value 0 means that there are currently no exclusive rights * given out to anyone. + * @see \ref ScriptEconomyTime */ static SQInteger GetExclusiveRightsDuration(TownID town_id); diff --git a/src/script/api/script_vehicle.hpp b/src/script/api/script_vehicle.hpp index d9c5309956..9344d65086 100644 --- a/src/script/api/script_vehicle.hpp +++ b/src/script/api/script_vehicle.hpp @@ -188,8 +188,8 @@ public: * Get the current age of a vehicle. * @param vehicle_id The vehicle to get the age of. * @pre IsValidVehicle(vehicle_id). - * @return The current age the vehicle has. - * @note The age is in days. + * @return The current age of the vehicle in calendar-days. + * @see \ref ScriptCalendarTime */ static SQInteger GetAge(VehicleID vehicle_id); @@ -199,8 +199,8 @@ public: * @param wagon The wagon in the vehicle to get the age of. * @pre IsValidVehicle(vehicle_id). * @pre wagon < GetNumWagons(vehicle_id). - * @return The current age the vehicle has. - * @note The age is in days. + * @return The current age of the vehicle in calendar-days. + * @see \ref ScriptCalendarTime */ static SQInteger GetWagonAge(VehicleID vehicle_id, SQInteger wagon); @@ -208,8 +208,8 @@ public: * Get the maximum age of a vehicle. * @param vehicle_id The vehicle to get the age of. * @pre IsPrimaryVehicle(vehicle_id). - * @return The maximum age the vehicle has. - * @note The age is in days. + * @return The maximum age for the vehicle in calendar-days. + * @see \ref ScriptCalendarTime */ static SQInteger GetMaxAge(VehicleID vehicle_id); @@ -217,8 +217,8 @@ public: * Get the age a vehicle has left (maximum - current). * @param vehicle_id The vehicle to get the age of. * @pre IsPrimaryVehicle(vehicle_id). - * @return The age the vehicle has left. - * @note The age is in days. + * @return The remaining age of the vehicle in calendar-days. + * @see \ref ScriptCalendarTime */ static SQInteger GetAgeLeft(VehicleID vehicle_id); @@ -245,10 +245,10 @@ public: * Get the running cost of this vehicle. * @param vehicle_id The vehicle to get the running cost of. * @pre IsPrimaryVehicle(vehicle_id). - * @return The running cost of the vehicle per year. - * @note Cost is per year; divide by 365 to get per day. + * @return The running cost of the vehicle per economy-year. * @note This is not equal to ScriptEngine::GetRunningCost for Trains, because * wagons and second engines can add up in the calculation too. + * @see \ref ScriptEconomyTime */ static Money GetRunningCost(VehicleID vehicle_id); @@ -256,7 +256,8 @@ public: * Get the current profit of a vehicle. * @param vehicle_id The vehicle to get the profit of. * @pre IsPrimaryVehicle(vehicle_id). - * @return The current profit the vehicle has. + * @return The profit the vehicle has made this economy-year so far. + * @see \ref ScriptEconomyTime */ static Money GetProfitThisYear(VehicleID vehicle_id); @@ -264,7 +265,8 @@ public: * Get the profit of last year of a vehicle. * @param vehicle_id The vehicle to get the profit of. * @pre IsPrimaryVehicle(vehicle_id). - * @return The profit the vehicle had last year. + * @return The profit the vehicle made in the previous economy-year. + * @see \ref ScriptEconomyTime */ static Money GetProfitLastYear(VehicleID vehicle_id); From 31c306c6cde36628f88c9a239ac8fc19e42b86bf Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 10 Mar 2024 11:22:46 +0000 Subject: [PATCH 507/695] Codechange: Return std::string from GetMusicCatEntryName. Return std::string instead of pointer to C-string with manual memory management. --- src/base_media_base.h | 2 +- src/music.cpp | 34 ++++++++++++++++------------------ 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/base_media_base.h b/src/base_media_base.h index 92396cd616..a9a70c2278 100644 --- a/src/base_media_base.h +++ b/src/base_media_base.h @@ -313,7 +313,7 @@ static const uint NUM_SONGS_AVAILABLE = 1 + NUM_SONG_CLASSES * NUM_SONGS_CLASS; static const uint NUM_SONGS_PLAYLIST = 32; /* Functions to read DOS music CAT files, similar to but not quite the same as sound effect CAT files */ -char *GetMusicCatEntryName(const std::string &filename, size_t entrynum); +std::optional GetMusicCatEntryName(const std::string &filename, size_t entrynum); uint8_t *GetMusicCatEntryData(const std::string &filename, size_t entrynum, size_t &entrylen); enum MusicTrackType { diff --git a/src/music.cpp b/src/music.cpp index 64601cb769..1974ee261b 100644 --- a/src/music.cpp +++ b/src/music.cpp @@ -8,6 +8,7 @@ /** @file music.cpp The songs that OpenTTD knows. */ #include "stdafx.h" +#include "string_func.h" /** The type of set we're replacing */ @@ -22,26 +23,24 @@ * Read the name of a music CAT file entry. * @param filename Name of CAT file to read from * @param entrynum Index of entry whose name to read - * @return Pointer to string, caller is responsible for freeing memory, - * nullptr if entrynum does not exist. + * @return Name of CAT file entry if it could be read. */ -char *GetMusicCatEntryName(const std::string &filename, size_t entrynum) +std::optional GetMusicCatEntryName(const std::string &filename, size_t entrynum) { - if (!FioCheckFileExists(filename, BASESET_DIR)) return nullptr; + if (!FioCheckFileExists(filename, BASESET_DIR)) return std::nullopt; RandomAccessFile file(filename, BASESET_DIR); uint32_t ofs = file.ReadDword(); size_t entry_count = ofs / 8; - if (entrynum < entry_count) { - file.SeekTo(entrynum * 8, SEEK_SET); - file.SeekTo(file.ReadDword(), SEEK_SET); - uint8_t namelen = file.ReadByte(); - char *name = MallocT(namelen + 1); - file.ReadBlock(name, namelen); - name[namelen] = '\0'; - return name; - } - return nullptr; + if (entrynum >= entry_count) return std::nullopt; + + file.SeekTo(entrynum * 8, SEEK_SET); + file.SeekTo(file.ReadDword(), SEEK_SET); + uint8_t namelen = file.ReadByte(); + + std::string name(namelen, '\0'); + file.ReadBlock(name.data(), namelen); + return StrMakeValid(name); } /** @@ -138,13 +137,12 @@ bool MusicSet::FillSetDetails(const IniFile &ini, const std::string &path, const /* Song has a CAT file index, assume it's MPS MIDI format */ this->songinfo[i].filetype = MTT_MPSMIDI; this->songinfo[i].cat_index = atoi(item->value->c_str()); - char *songname = GetMusicCatEntryName(filename, this->songinfo[i].cat_index); - if (songname == nullptr) { + auto songname = GetMusicCatEntryName(filename, this->songinfo[i].cat_index); + if (!songname.has_value()) { Debug(grf, 0, "Base music set song missing from CAT file: {}/{}", filename, this->songinfo[i].cat_index); continue; } - this->songinfo[i].songname = songname; - free(songname); + this->songinfo[i].songname = *songname; } else { this->songinfo[i].filetype = MTT_STANDARDMIDI; } From 733284cc168c16dd52d6772432659ea78f3f545c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 10 Mar 2024 11:24:03 +0000 Subject: [PATCH 508/695] Codechange: Return std::vector from GetMusicCatEntryData. Return std::vector instead of pointer to array with manual memory management. --- src/base_media_base.h | 2 +- src/music.cpp | 31 ++++++++++++++----------------- src/music/midifile.cpp | 18 ++++++------------ 3 files changed, 21 insertions(+), 30 deletions(-) diff --git a/src/base_media_base.h b/src/base_media_base.h index a9a70c2278..0bd288a9a2 100644 --- a/src/base_media_base.h +++ b/src/base_media_base.h @@ -314,7 +314,7 @@ static const uint NUM_SONGS_PLAYLIST = 32; /* Functions to read DOS music CAT files, similar to but not quite the same as sound effect CAT files */ std::optional GetMusicCatEntryName(const std::string &filename, size_t entrynum); -uint8_t *GetMusicCatEntryData(const std::string &filename, size_t entrynum, size_t &entrylen); +std::optional> GetMusicCatEntryData(const std::string &filename, size_t entrynum); enum MusicTrackType { MTT_STANDARDMIDI, ///< Standard MIDI file diff --git a/src/music.cpp b/src/music.cpp index 1974ee261b..52a8ef259c 100644 --- a/src/music.cpp +++ b/src/music.cpp @@ -47,29 +47,26 @@ std::optional GetMusicCatEntryName(const std::string &filename, siz * Read the full data of a music CAT file entry. * @param filename Name of CAT file to read from. * @param entrynum Index of entry to read - * @param[out] entrylen Receives length of data read - * @return Pointer to buffer with data read, caller is responsible for freeind memory, - * nullptr if entrynum does not exist. + * @return Data of CAT file entry. */ -uint8_t *GetMusicCatEntryData(const std::string &filename, size_t entrynum, size_t &entrylen) +std::optional> GetMusicCatEntryData(const std::string &filename, size_t entrynum) { - entrylen = 0; - if (!FioCheckFileExists(filename, BASESET_DIR)) return nullptr; + if (!FioCheckFileExists(filename, BASESET_DIR)) return std::nullopt; RandomAccessFile file(filename, BASESET_DIR); uint32_t ofs = file.ReadDword(); size_t entry_count = ofs / 8; - if (entrynum < entry_count) { - file.SeekTo(entrynum * 8, SEEK_SET); - size_t entrypos = file.ReadDword(); - entrylen = file.ReadDword(); - file.SeekTo(entrypos, SEEK_SET); - file.SkipBytes(file.ReadByte()); - uint8_t *data = MallocT(entrylen); - file.ReadBlock(data, entrylen); - return data; - } - return nullptr; + if (entrynum >= entry_count) return std::nullopt; + + file.SeekTo(entrynum * 8, SEEK_SET); + size_t entrypos = file.ReadDword(); + size_t entrylen = file.ReadDword(); + file.SeekTo(entrypos, SEEK_SET); + file.SkipBytes(file.ReadByte()); + + std::vector data(entrylen); + file.ReadBlock(data.data(), entrylen); + return data; } INSTANTIATE_BASE_MEDIA_METHODS(BaseMedia, MusicSet) diff --git a/src/music/midifile.cpp b/src/music/midifile.cpp index ece0046c8d..a5eddd6278 100644 --- a/src/music/midifile.cpp +++ b/src/music/midifile.cpp @@ -843,11 +843,9 @@ bool MidiFile::LoadSong(const MusicSongInfo &song) return this->LoadFile(song.filename); case MTT_MPSMIDI: { - size_t songdatalen = 0; - uint8_t *songdata = GetMusicCatEntryData(song.filename, song.cat_index, songdatalen); - if (songdata != nullptr) { - bool result = this->LoadMpsData(songdata, songdatalen); - free(songdata); + auto songdata = GetMusicCatEntryData(song.filename, song.cat_index); + if (songdata.has_value()) { + bool result = this->LoadMpsData(songdata->data(), songdata->size()); return result; } else { return false; @@ -1078,17 +1076,13 @@ std::string MidiFile::GetSMFFile(const MusicSongInfo &song) return output_filename; } - uint8_t *data; - size_t datalen; - data = GetMusicCatEntryData(song.filename, song.cat_index, datalen); - if (data == nullptr) return std::string(); + auto songdata = GetMusicCatEntryData(song.filename, song.cat_index); + if (!songdata.has_value()) return std::string(); MidiFile midifile; - if (!midifile.LoadMpsData(data, datalen)) { - free(data); + if (!midifile.LoadMpsData(songdata->data(), songdata->size())) { return std::string(); } - free(data); if (midifile.WriteSMF(output_filename)) { return output_filename; From d5671030b16fb5e9be1982da70560efdda56b1e3 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 7 May 2024 12:13:46 +0100 Subject: [PATCH 509/695] Codechange: Add NewGRFSpecsBase class to hold class/index information. Standardises how the class index is stored in the spec, instead of relying ot the Spec structs having the same members. This allows retrieving class_index and index without searching or using pointer arithmetic. 'cls_id' is renamed to 'class_index' to make it clearer that it is an index rather than the multichar label of the class. --- src/newgrf.cpp | 16 +++---- src/newgrf_airport.h | 3 +- src/newgrf_class.h | 26 +++++++---- src/newgrf_class_func.h | 82 +++++++++++++++++----------------- src/newgrf_object.cpp | 6 +-- src/newgrf_object.h | 3 +- src/newgrf_roadstop.h | 3 +- src/newgrf_station.h | 5 +-- src/saveload/station_sl.cpp | 4 +- src/script/api/script_rail.cpp | 5 +-- src/station_cmd.cpp | 4 +- src/table/airport_defaults.h | 2 +- src/table/object_land.h | 2 +- 13 files changed, 83 insertions(+), 78 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 479552a880..01f96961f2 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -1945,7 +1945,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte /* Swap classid because we read it in BE meaning WAYP or DFLT */ uint32_t classid = buf->ReadDWord(); - statspec->cls_id = StationClass::Allocate(BSWAP32(classid)); + statspec->class_index = StationClass::Allocate(BSWAP32(classid)); break; } @@ -2141,7 +2141,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte break; case 0x1D: // Station Class name - AddStringForMapping(buf->ReadWord(), [statspec](StringID str) { StationClass::Get(statspec->cls_id)->name = str; }); + AddStringForMapping(buf->ReadWord(), [statspec](StringID str) { StationClass::Get(statspec->class_index)->name = str; }); break; default: @@ -4103,12 +4103,12 @@ static ChangeInfoResult ObjectChangeInfo(uint id, int numinfo, int prop, ByteRea /* Swap classid because we read it in BE. */ uint32_t classid = buf->ReadDWord(); - spec->cls_id = ObjectClass::Allocate(BSWAP32(classid)); + spec->class_index = ObjectClass::Allocate(BSWAP32(classid)); break; } case 0x09: { // Class name - AddStringForMapping(buf->ReadWord(), [spec](StringID str) { ObjectClass::Get(spec->cls_id)->name = str; }); + AddStringForMapping(buf->ReadWord(), [spec](StringID str) { ObjectClass::Get(spec->class_index)->name = str; }); break; } @@ -4790,7 +4790,7 @@ static ChangeInfoResult RoadStopChangeInfo(uint id, int numinfo, int prop, ByteR } uint32_t classid = buf->ReadDWord(); - rs->cls_id = RoadStopClass::Allocate(BSWAP32(classid)); + rs->class_index = RoadStopClass::Allocate(BSWAP32(classid)); break; } @@ -4803,7 +4803,7 @@ static ChangeInfoResult RoadStopChangeInfo(uint id, int numinfo, int prop, ByteR break; case 0x0B: // Road Stop Class name - AddStringForMapping(buf->ReadWord(), [rs](StringID str) { RoadStopClass::Get(rs->cls_id)->name = str; }); + AddStringForMapping(buf->ReadWord(), [rs](StringID str) { RoadStopClass::Get(rs->class_index)->name = str; }); break; case 0x0C: // The draw mode @@ -6270,8 +6270,8 @@ static void FeatureNewName(ByteReader *buf) if (GB(id, 0, 8) >= _cur.grffile->stations.size() || _cur.grffile->stations[GB(id, 0, 8)] == nullptr) { GrfMsg(1, "FeatureNewName: Attempt to name undefined station 0x{:X}, ignoring", GB(id, 0, 8)); } else { - StationClassID cls_id = _cur.grffile->stations[GB(id, 0, 8)]->cls_id; - StationClass::Get(cls_id)->name = AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, false, name, STR_UNDEFINED); + StationClassID class_index = _cur.grffile->stations[GB(id, 0, 8)]->class_index; + StationClass::Get(class_index)->name = AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, false, name, STR_UNDEFINED); } break; diff --git a/src/newgrf_airport.h b/src/newgrf_airport.h index 057ae346fc..21ca905e37 100644 --- a/src/newgrf_airport.h +++ b/src/newgrf_airport.h @@ -102,7 +102,7 @@ struct AirportTileLayout { /** * Defines the data structure for an airport. */ -struct AirportSpec { +struct AirportSpec : NewGRFSpecBase { const struct AirportFTAClass *fsm; ///< the finite statemachine for the default airports std::vector layouts; ///< List of layouts composing the airport. std::span depots; ///< Position of the depots on the airports. @@ -114,7 +114,6 @@ struct AirportSpec { TimerGameCalendar::Year max_year; ///< last year the airport is available StringID name; ///< name of this airport TTDPAirportType ttd_airport_type; ///< ttdpatch airport type (Small/Large/Helipad/Oilrig) - AirportClassID cls_id; ///< the class to which this airport type belongs SpriteID preview_sprite; ///< preview sprite for this airport uint16_t maintenance_cost; ///< maintenance cost multiplier /* Newgrf data */ diff --git a/src/newgrf_class.h b/src/newgrf_class.h index 2097a9eaca..a4c12f1cfc 100644 --- a/src/newgrf_class.h +++ b/src/newgrf_class.h @@ -12,21 +12,31 @@ #include "strings_type.h" +/* Base for each type of NewGRF spec to be used with NewGRFClass. */ +template +struct NewGRFSpecBase { + Tindex class_index; ///< Class index of this spec, invalid until class is allocated. + uint16_t index; ///< Index within class of this spec, invalid until inserted into class. +}; /** * Struct containing information relating to NewGRF classes for stations and airports. */ -template +template class NewGRFClass { private: + /* Tspec must be of NewGRFSpecBase. */ + static_assert(std::is_base_of_v, Tspec>); + uint ui_count = 0; ///< Number of specs in this class potentially available to the user. + Tindex index; ///< Index of class within the list of classes. std::vector spec; ///< List of specifications. /** * The actual classes. * @note This may be reallocated during initialization so pointers may be invalidated. */ - static inline std::vector> classes; + static inline std::vector> classes; /** Initialise the defaults. */ static void InsertDefaults(); @@ -48,11 +58,11 @@ public: * Get read-only span of all classes of this type. * @return Read-only span of classes. */ - static std::span const> Classes() { return NewGRFClass::classes; } + static std::span const> Classes() { return NewGRFClass::classes; } void Insert(Tspec *spec); - Tid Index() const { return static_cast(std::distance(&*std::cbegin(NewGRFClass::classes), this)); } + Tindex Index() const { return this->index; } /** Get the number of allocated specs within the class. */ uint GetSpecCount() const { return static_cast(this->spec.size()); } /** Get the number of potentially user-available specs within the class. */ @@ -66,14 +76,14 @@ public: bool IsUIAvailable(uint index) const; static void Reset(); - static Tid Allocate(uint32_t global_id); + static Tindex Allocate(uint32_t global_id); static void Assign(Tspec *spec); static uint GetClassCount(); static uint GetUIClassCount(); - static Tid GetUIClass(uint index); - static NewGRFClass *Get(Tid cls_id); + static Tindex GetUIClass(uint index); + static NewGRFClass *Get(Tindex class_index); - static const Tspec *GetByGrf(uint32_t grfid, uint16_t local_id, int *index); + static const Tspec *GetByGrf(uint32_t grfid, uint16_t local_id); }; #endif /* NEWGRF_CLASS_H */ diff --git a/src/newgrf_class_func.h b/src/newgrf_class_func.h index ef9490a0c1..dce269649b 100644 --- a/src/newgrf_class_func.h +++ b/src/newgrf_class_func.h @@ -12,8 +12,8 @@ #include "table/strings.h" /** Reset the classes, i.e. clear everything. */ -template -void NewGRFClass::Reset() +template +void NewGRFClass::Reset() { NewGRFClass::classes.clear(); NewGRFClass::classes.shrink_to_fit(); @@ -28,8 +28,8 @@ void NewGRFClass::Reset() * @note Upon allocating the same global class ID for a * second time, this first allocation will be given. */ -template -Tid NewGRFClass::Allocate(uint32_t global_id) +template +Tindex NewGRFClass::Allocate(uint32_t global_id) { auto found = std::find_if(std::begin(NewGRFClass::classes), std::end(NewGRFClass::classes), [global_id](const auto &cls) { return cls.global_id == global_id; }); @@ -38,56 +38,59 @@ Tid NewGRFClass::Allocate(uint32_t global_id) /* More slots available, allocate a slot to the global id. */ if (NewGRFClass::classes.size() < Tmax) { - auto &cls = NewGRFClass::classes.emplace_back(global_id, STR_EMPTY); - return cls.Index(); + auto it = NewGRFClass::classes.emplace(std::end(NewGRFClass::classes), global_id, STR_EMPTY); + it->index = static_cast(std::distance(std::begin(NewGRFClass::classes), it)); + return it->Index(); } GrfMsg(2, "ClassAllocate: already allocated {} classes, using default", Tmax); - return static_cast(0); + return static_cast(0); } /** - * Insert a spec into the class. + * Insert a spec into the class, and update its index. * @param spec The spec to insert. */ -template -void NewGRFClass::Insert(Tspec *spec) +template +void NewGRFClass::Insert(Tspec *spec) { - this->spec.push_back(spec); + auto it = this->spec.insert(std::end(this->spec), spec); + uint16_t index = static_cast(std::distance(std::begin(this->spec), it)); + if (spec != nullptr) (*it)->index = index; - if (this->IsUIAvailable(static_cast(this->spec.size() - 1))) this->ui_count++; + if (this->IsUIAvailable(index)) this->ui_count++; } /** * Assign a spec to one of the classes. * @param spec The spec to assign. - * @note The spec must have a valid class id set. + * @note The spec must have a valid class index set. */ -template -void NewGRFClass::Assign(Tspec *spec) +template +void NewGRFClass::Assign(Tspec *spec) { - assert(static_cast(spec->cls_id) < NewGRFClass::classes.size()); - Get(spec->cls_id)->Insert(spec); + assert(static_cast(spec->class_index) < NewGRFClass::classes.size()); + Get(spec->class_index)->Insert(spec); } /** * Get a particular class. - * @param cls_id The id for the class. - * @pre cls_id < Tmax + * @param class_index The index of the class. + * @pre class_index < Tmax */ -template -NewGRFClass *NewGRFClass::Get(Tid cls_id) +template +NewGRFClass *NewGRFClass::Get(Tindex class_index) { - assert(static_cast(cls_id) < NewGRFClass::classes.size()); - return &NewGRFClass::classes[cls_id]; + assert(static_cast(class_index) < NewGRFClass::classes.size()); + return &NewGRFClass::classes[class_index]; } /** * Get the number of allocated classes. * @return The number of classes. */ -template -uint NewGRFClass::GetClassCount() +template +uint NewGRFClass::GetClassCount() { return static_cast(NewGRFClass::classes.size()); } @@ -96,8 +99,8 @@ uint NewGRFClass::GetClassCount() * Get the number of classes available to the user. * @return The number of classes. */ -template -uint NewGRFClass::GetUIClassCount() +template +uint NewGRFClass::GetUIClassCount() { return std::count_if(std::begin(NewGRFClass::classes), std::end(NewGRFClass::classes), [](const auto &cls) { return cls.GetUISpecCount() > 0; }); } @@ -107,8 +110,8 @@ uint NewGRFClass::GetUIClassCount() * @param index UI index of a class. * @return The class ID of the class. */ -template -Tid NewGRFClass::GetUIClass(uint index) +template +Tindex NewGRFClass::GetUIClass(uint index) { for (const auto &cls : NewGRFClass::classes) { if (cls.GetUISpecCount() == 0) continue; @@ -122,8 +125,8 @@ Tid NewGRFClass::GetUIClass(uint index) * @param index The index where to find the spec. * @return The spec at given location. */ -template -const Tspec *NewGRFClass::GetSpec(uint index) const +template +const Tspec *NewGRFClass::GetSpec(uint index) const { /* If the custom spec isn't defined any more, then the GRF file probably was not loaded. */ return index < this->GetSpecCount() ? this->spec[index] : nullptr; @@ -134,8 +137,8 @@ const Tspec *NewGRFClass::GetSpec(uint index) const * @param ui_index UI index of the spec. * @return index of the spec, or -1 if out of range. */ -template -int NewGRFClass::GetIndexFromUI(int ui_index) const +template +int NewGRFClass::GetIndexFromUI(int ui_index) const { if (ui_index < 0) return -1; for (uint i = 0; i < this->GetSpecCount(); i++) { @@ -150,8 +153,8 @@ int NewGRFClass::GetIndexFromUI(int ui_index) const * @param index index of the spec. * @return UI index of the spec, or -1 if out of range. */ -template -int NewGRFClass::GetUIFromIndex(int index) const +template +int NewGRFClass::GetUIFromIndex(int index) const { if ((uint)index >= this->GetSpecCount()) return -1; uint ui_index = 0; @@ -168,16 +171,13 @@ int NewGRFClass::GetUIFromIndex(int index) const * @param index Pointer to return the index of the spec in its class. If nullptr then not used. * @return The spec. */ -template -const Tspec *NewGRFClass::GetByGrf(uint32_t grfid, uint16_t local_id, int *index) +template +const Tspec *NewGRFClass::GetByGrf(uint32_t grfid, uint16_t local_id) { for (const auto &cls : NewGRFClass::classes) { for (const auto &spec : cls.spec) { if (spec == nullptr) continue; - if (spec->grf_prop.grffile->grfid == grfid && spec->grf_prop.local_id == local_id) { - if (index != nullptr) *index = static_cast(std::distance(cls.spec.data(), &spec)); - return spec; - } + if (spec->grf_prop.grffile->grfid == grfid && spec->grf_prop.local_id == local_id) return spec; } } diff --git a/src/newgrf_object.cpp b/src/newgrf_object.cpp index 7d9765f1f6..8491c98382 100644 --- a/src/newgrf_object.cpp +++ b/src/newgrf_object.cpp @@ -111,7 +111,7 @@ uint ObjectSpec::Index() const /* static */ void ObjectSpec::BindToClasses() { for (auto &spec : _object_specs) { - if (spec.IsEnabled() && spec.cls_id != INVALID_OBJECT_CLASS) { + if (spec.IsEnabled() && spec.class_index != INVALID_OBJECT_CLASS) { ObjectClass::Assign(&spec); } } @@ -132,8 +132,8 @@ void ResetObjects() } /* Set class for originals. */ - _object_specs[OBJECT_LIGHTHOUSE].cls_id = ObjectClass::Allocate('LTHS'); - _object_specs[OBJECT_TRANSMITTER].cls_id = ObjectClass::Allocate('TRNS'); + _object_specs[OBJECT_LIGHTHOUSE].class_index = ObjectClass::Allocate('LTHS'); + _object_specs[OBJECT_TRANSMITTER].class_index = ObjectClass::Allocate('TRNS'); } template <> diff --git a/src/newgrf_object.h b/src/newgrf_object.h index 9b124ab0f8..2308d100ed 100644 --- a/src/newgrf_object.h +++ b/src/newgrf_object.h @@ -57,11 +57,10 @@ DECLARE_POSTFIX_INCREMENT(ObjectClassID) * @note If you change this struct, adopt the initialization of * default objects in table/object_land.h */ -struct ObjectSpec { +struct ObjectSpec : NewGRFSpecBase { /* 2 because of the "normal" and "buy" sprite stacks. */ GRFFilePropsBase<2> grf_prop; ///< Properties related the the grf file AnimationInfo animation; ///< Information about the animation. - ObjectClassID cls_id; ///< The class to which this spec belongs. StringID name; ///< The name for this object. uint8_t climate; ///< In which climates is this object available? diff --git a/src/newgrf_roadstop.h b/src/newgrf_roadstop.h index 4a6980883d..4c031c560a 100644 --- a/src/newgrf_roadstop.h +++ b/src/newgrf_roadstop.h @@ -118,7 +118,7 @@ struct RoadStopResolverObject : public ResolverObject { }; /** Road stop specification. */ -struct RoadStopSpec { +struct RoadStopSpec : NewGRFSpecBase { /** * Properties related the the grf file. * NUM_CARGO real cargo plus three pseudo cargo sprite groups. @@ -126,7 +126,6 @@ struct RoadStopSpec { * evaluating callbacks. */ GRFFilePropsBase grf_prop; - RoadStopClassID cls_id; ///< The class to which this spec belongs. StringID name; ///< Name of this stop RoadStopAvailabilityType stop_type = ROADSTOPTYPE_ALL; diff --git a/src/newgrf_station.h b/src/newgrf_station.h index f1c619153e..3fd47d8676 100644 --- a/src/newgrf_station.h +++ b/src/newgrf_station.h @@ -108,8 +108,8 @@ enum StationRandomTrigger { }; /** Station specification. */ -struct StationSpec { - StationSpec() : cls_id(STAT_CLASS_DFLT), name(0), +struct StationSpec : NewGRFSpecBase { + StationSpec() : name(0), disallowed_platforms(0), disallowed_lengths(0), cargo_threshold(0), cargo_triggers(0), callback_mask(0), flags(0), pylons(0), wires(0), blocked(0), @@ -121,7 +121,6 @@ struct StationSpec { * evaluating callbacks. */ GRFFilePropsBase grf_prop; - StationClassID cls_id; ///< The class to which this spec belongs. StringID name; ///< Name of this station. /** diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index 0db9509e53..c964ceb46a 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -114,11 +114,11 @@ void AfterLoadStations() for (BaseStation *st : BaseStation::Iterate()) { for (auto &sm : GetStationSpecList(st)) { if (sm.grfid == 0) continue; - sm.spec = StationClass::GetByGrf(sm.grfid, sm.localidx, nullptr); + sm.spec = StationClass::GetByGrf(sm.grfid, sm.localidx); } for (auto &sm : GetStationSpecList(st)) { if (sm.grfid == 0) continue; - sm.spec = RoadStopClass::GetByGrf(sm.grfid, sm.localidx, nullptr); + sm.spec = RoadStopClass::GetByGrf(sm.grfid, sm.localidx); } if (Station::IsExpected(st)) { diff --git a/src/script/api/script_rail.cpp b/src/script/api/script_rail.cpp index 92188c2ab7..ac1b9fc5a9 100644 --- a/src/script/api/script_rail.cpp +++ b/src/script/api/script_rail.cpp @@ -193,13 +193,12 @@ bool adjacent = station_id != ScriptStation::STATION_JOIN_ADJACENT; StationID to_join = ScriptStation::IsValidStation(station_id) ? station_id : INVALID_STATION; if (res != CALLBACK_FAILED) { - int index = 0; - const StationSpec *spec = StationClass::GetByGrf(file->grfid, res, &index); + const StationSpec *spec = StationClass::GetByGrf(file->grfid, res); if (spec == nullptr) { Debug(grf, 1, "{} returned an invalid station ID for 'AI construction/purchase selection (18)' callback", file->filename); } else { /* We might have gotten an usable station spec. Try to build it, but if it fails we'll fall back to the original station. */ - if (ScriptObject::Command::Do(tile, (::RailType)GetCurrentRailType(), axis, num_platforms, platform_length, spec->cls_id, index, to_join, adjacent)) return true; + if (ScriptObject::Command::Do(tile, (::RailType)GetCurrentRailType(), axis, num_platforms, platform_length, spec->class_index, spec->index, to_join, adjacent)) return true; } } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index de949f9a2d..dad0f4561c 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -3346,7 +3346,7 @@ void FillTileDescRailStation(TileIndex tile, TileDesc *td) const StationSpec *spec = GetStationSpec(tile); if (spec != nullptr) { - td->station_class = StationClass::Get(spec->cls_id)->name; + td->station_class = StationClass::Get(spec->class_index)->name; td->station_name = spec->name; if (spec->grf_prop.grffile != nullptr) { @@ -3363,7 +3363,7 @@ void FillTileDescRailStation(TileIndex tile, TileDesc *td) void FillTileDescAirport(TileIndex tile, TileDesc *td) { const AirportSpec *as = Station::GetByTile(tile)->airport.GetSpec(); - td->airport_class = AirportClass::Get(as->cls_id)->name; + td->airport_class = AirportClass::Get(as->class_index)->name; td->airport_name = as->name; const AirportTileSpec *ats = AirportTileSpec::GetByTile(tile); diff --git a/src/table/airport_defaults.h b/src/table/airport_defaults.h index d9db0c15b6..0a41f7ec8c 100644 --- a/src/table/airport_defaults.h +++ b/src/table/airport_defaults.h @@ -378,7 +378,7 @@ static const std::initializer_list _tile_table_helistation = /** General AirportSpec definition. */ #define AS_GENERIC(fsm, layouts, depots, size_x, size_y, noise, catchment, min_year, max_year, maint_cost, ttdpatch_type, class_id, name, preview, enabled) \ - {fsm, layouts, depots, size_x, size_y, noise, catchment, min_year, max_year, name, ttdpatch_type, class_id, preview, maint_cost, enabled, GRFFileProps(AT_INVALID)} + {{class_id, 0}, fsm, layouts, depots, size_x, size_y, noise, catchment, min_year, max_year, name, ttdpatch_type, preview, maint_cost, enabled, GRFFileProps(AT_INVALID)} /** AirportSpec definition for airports without any depot. */ #define AS_ND(ap_name, size_x, size_y, min_year, max_year, catchment, noise, maint_cost, ttdpatch_type, class_id, name, preview) \ diff --git a/src/table/object_land.h b/src/table/object_land.h index ac1653c97b..ee4ab59c8c 100644 --- a/src/table/object_land.h +++ b/src/table/object_land.h @@ -121,7 +121,7 @@ static const DrawTileSprites _object_hq[] = { #undef TILE_SPRITE_LINE -#define M(name, size, build_cost_multiplier, clear_cost_multiplier, height, climate, gen_amount, flags) { GRFFilePropsBase<2>(), {0, 0, 0, 0}, INVALID_OBJECT_CLASS, name, climate, size, build_cost_multiplier, clear_cost_multiplier, 0, CalendarTime::MAX_DATE + 1, flags, 0, height, 1, gen_amount } +#define M(name, size, build_cost_multiplier, clear_cost_multiplier, height, climate, gen_amount, flags) {{INVALID_OBJECT_CLASS, 0}, GRFFilePropsBase<2>(), {0, 0, 0, 0}, name, climate, size, build_cost_multiplier, clear_cost_multiplier, 0, CalendarTime::MAX_DATE + 1, flags, 0, height, 1, gen_amount} /* Climates * T = Temperate From 9f8c9724be89c2a836361627af227b39041c0805 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 7 May 2024 12:13:47 +0100 Subject: [PATCH 510/695] Codechange: Add station/roadstop class labels for DFLT/WAYP. This avoids repeating the same multichar literal value. --- src/newgrf_roadstop.cpp | 8 ++++---- src/newgrf_roadstop.h | 3 +++ src/newgrf_station.cpp | 8 ++++---- src/newgrf_station.h | 3 +++ 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/newgrf_roadstop.cpp b/src/newgrf_roadstop.cpp index eaa76fe5f9..ff84e3a52a 100644 --- a/src/newgrf_roadstop.cpp +++ b/src/newgrf_roadstop.cpp @@ -31,10 +31,10 @@ template <> void RoadStopClass::InsertDefaults() { /* Set up initial data */ - RoadStopClass::Get(RoadStopClass::Allocate('DFLT'))->name = STR_STATION_CLASS_DFLT; - RoadStopClass::Get(RoadStopClass::Allocate('DFLT'))->Insert(nullptr); - RoadStopClass::Get(RoadStopClass::Allocate('WAYP'))->name = STR_STATION_CLASS_WAYP; - RoadStopClass::Get(RoadStopClass::Allocate('WAYP'))->Insert(nullptr); + RoadStopClass::Get(RoadStopClass::Allocate(ROADSTOP_CLASS_LABEL_DEFAULT))->name = STR_STATION_CLASS_DFLT; + RoadStopClass::Get(RoadStopClass::Allocate(ROADSTOP_CLASS_LABEL_DEFAULT))->Insert(nullptr); + RoadStopClass::Get(RoadStopClass::Allocate(ROADSTOP_CLASS_LABEL_WAYPOINT))->name = STR_STATION_CLASS_WAYP; + RoadStopClass::Get(RoadStopClass::Allocate(ROADSTOP_CLASS_LABEL_WAYPOINT))->Insert(nullptr); } template <> diff --git a/src/newgrf_roadstop.h b/src/newgrf_roadstop.h index 4c031c560a..233e1f9cc8 100644 --- a/src/newgrf_roadstop.h +++ b/src/newgrf_roadstop.h @@ -22,6 +22,9 @@ /** The maximum amount of roadstops a single GRF is allowed to add */ static const int NUM_ROADSTOPS_PER_GRF = UINT16_MAX - 1; +static const uint32_t ROADSTOP_CLASS_LABEL_DEFAULT = 'DFLT'; +static const uint32_t ROADSTOP_CLASS_LABEL_WAYPOINT = 'WAYP'; + enum RoadStopClassID : uint16_t { ROADSTOP_CLASS_BEGIN = 0, ///< The lowest valid value ROADSTOP_CLASS_DFLT = 0, ///< Default road stop class. diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index a6d0d77f8c..a53983e56c 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -32,10 +32,10 @@ template <> /* static */ void StationClass::InsertDefaults() { /* Set up initial data */ - StationClass::Get(StationClass::Allocate('DFLT'))->name = STR_STATION_CLASS_DFLT; - StationClass::Get(StationClass::Allocate('DFLT'))->Insert(nullptr); - StationClass::Get(StationClass::Allocate('WAYP'))->name = STR_STATION_CLASS_WAYP; - StationClass::Get(StationClass::Allocate('WAYP'))->Insert(nullptr); + StationClass::Get(StationClass::Allocate(STATION_CLASS_LABEL_DEFAULT))->name = STR_STATION_CLASS_DFLT; + StationClass::Get(StationClass::Allocate(STATION_CLASS_LABEL_DEFAULT))->Insert(nullptr); + StationClass::Get(StationClass::Allocate(STATION_CLASS_LABEL_WAYPOINT))->name = STR_STATION_CLASS_WAYP; + StationClass::Get(StationClass::Allocate(STATION_CLASS_LABEL_WAYPOINT))->Insert(nullptr); } template <> diff --git a/src/newgrf_station.h b/src/newgrf_station.h index 3fd47d8676..fbb7ac7fd6 100644 --- a/src/newgrf_station.h +++ b/src/newgrf_station.h @@ -79,6 +79,9 @@ struct StationResolverObject : public ResolverObject { uint32_t GetDebugID() const override; }; +static const uint32_t STATION_CLASS_LABEL_DEFAULT = 'DFLT'; +static const uint32_t STATION_CLASS_LABEL_WAYPOINT = 'WAYP'; + enum StationClassID : uint16_t { STAT_CLASS_BEGIN = 0, ///< the lowest valid value STAT_CLASS_DFLT = 0, ///< Default station class. From d2c8b476b5c189cd1a43c8f886f08fd96f0afe62 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 7 May 2024 12:13:47 +0100 Subject: [PATCH 511/695] Codechange: Add functions to test if a station/roadstop class is a waypoint. This is now checked by class label instead of by index. --- src/newgrf_roadstop.cpp | 2 +- src/newgrf_roadstop.h | 10 ++++++++++ src/newgrf_station.h | 10 ++++++++++ src/rail_gui.cpp | 2 +- src/road_gui.cpp | 2 +- src/station_cmd.cpp | 14 +++++++++----- src/waypoint_cmd.cpp | 6 ++++-- 7 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/newgrf_roadstop.cpp b/src/newgrf_roadstop.cpp index ff84e3a52a..d8f6b196df 100644 --- a/src/newgrf_roadstop.cpp +++ b/src/newgrf_roadstop.cpp @@ -459,7 +459,7 @@ bool GetIfNewStopsByType(RoadStopType rs, RoadType roadtype) { for (const auto &cls : RoadStopClass::Classes()) { /* Ignore the waypoint class. */ - if (cls.Index() == ROADSTOP_CLASS_WAYP) continue; + if (IsWaypointClass(cls)) continue; /* Ignore the default class with only the default station. */ if (cls.Index() == ROADSTOP_CLASS_DFLT && cls.GetSpecCount() == 1) continue; if (GetIfClassHasNewStopsByType(&cls, rs, roadtype)) return true; diff --git a/src/newgrf_roadstop.h b/src/newgrf_roadstop.h index 233e1f9cc8..89111b5c62 100644 --- a/src/newgrf_roadstop.h +++ b/src/newgrf_roadstop.h @@ -181,4 +181,14 @@ int AllocateSpecToRoadStop(const RoadStopSpec *statspec, BaseStation *st, bool e void DeallocateSpecFromRoadStop(BaseStation *st, uint8_t specindex); void RoadStopUpdateCachedTriggers(BaseStation *st); +/** + * Test if a RoadStopClass is the waypoint class. + * @param cls RoadStopClass to test. + * @return true if the class is the waypoint class. + */ +inline bool IsWaypointClass(const RoadStopClass &cls) +{ + return cls.global_id == ROADSTOP_CLASS_LABEL_WAYPOINT; +} + #endif /* NEWGRF_ROADSTATION_H */ diff --git a/src/newgrf_station.h b/src/newgrf_station.h index fbb7ac7fd6..225fd0fd51 100644 --- a/src/newgrf_station.h +++ b/src/newgrf_station.h @@ -181,6 +181,16 @@ using StationClass = NewGRFClass; const StationSpec *GetStationSpec(TileIndex t); +/** + * Test if a StationClass is the waypoint class. + * @param cls StationClass to test. + * @return true if the class is the waypoint class. + */ +inline bool IsWaypointClass(const StationClass &cls) +{ + return cls.global_id == STATION_CLASS_LABEL_WAYPOINT; +} + /* Evaluate a tile's position within a station, and return the result a bitstuffed format. */ uint32_t GetPlatformInfo(Axis axis, uint8_t tile, int platforms, int length, int x, int y, bool centred); diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 743e3fb920..9d6728804b 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1112,7 +1112,7 @@ public: for (const auto &cls : StationClass::Classes()) { /* Skip waypoints. */ - if (cls.Index() == STAT_CLASS_WAYP) continue; + if (IsWaypointClass(cls)) continue; if (cls.GetUISpecCount() == 0) continue; station_classes.push_back(cls.Index()); } diff --git a/src/road_gui.cpp b/src/road_gui.cpp index ade58f844c..90b58e47d9 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -1267,7 +1267,7 @@ public: for (const auto &cls : RoadStopClass::Classes()) { /* Skip waypoints. */ - if (cls.Index() == ROADSTOP_CLASS_WAYP) continue; + if (IsWaypointClass(cls)) continue; if (GetIfClassHasNewStopsByType(&cls, this->roadStopType, _cur_roadtype)) this->roadstop_classes.push_back(cls.Index()); } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index dad0f4561c..1464beef8d 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1335,8 +1335,10 @@ CommandCost CmdBuildRailStation(DoCommandFlag flags, TileIndex tile_org, RailTyp if (!ValParamRailType(rt) || !IsValidAxis(axis)) return CMD_ERROR; /* Check if the given station class is valid */ - if ((uint)spec_class >= StationClass::GetClassCount() || spec_class == STAT_CLASS_WAYP) return CMD_ERROR; - if (spec_index >= StationClass::Get(spec_class)->GetSpecCount()) return CMD_ERROR; + if (static_cast(spec_class) >= StationClass::GetClassCount()) return CMD_ERROR; + const StationClass *cls = StationClass::Get(spec_class); + if (IsWaypointClass(*cls)) return CMD_ERROR; + if (spec_index >= cls->GetSpecCount()) return CMD_ERROR; if (plat_len == 0 || numtracks == 0) return CMD_ERROR; int w_org, h_org; @@ -1946,10 +1948,12 @@ CommandCost CmdBuildRoadStop(DoCommandFlag flags, TileIndex tile, uint8_t width, bool distant_join = (station_to_join != INVALID_STATION); /* Check if the given station class is valid */ - if ((uint)spec_class >= RoadStopClass::GetClassCount() || spec_class == ROADSTOP_CLASS_WAYP) return CMD_ERROR; - if (spec_index >= RoadStopClass::Get(spec_class)->GetSpecCount()) return CMD_ERROR; + if (static_cast(spec_class) >= RoadStopClass::GetClassCount()) return CMD_ERROR; + const RoadStopClass *cls = RoadStopClass::Get(spec_class); + if (IsWaypointClass(*cls)) return CMD_ERROR; + if (spec_index >= cls->GetSpecCount()) return CMD_ERROR; - const RoadStopSpec *roadstopspec = RoadStopClass::Get(spec_class)->GetSpec(spec_index); + const RoadStopSpec *roadstopspec = cls->GetSpec(spec_index); if (roadstopspec != nullptr) { if (stop_type == ROADSTOP_TRUCK && roadstopspec->stop_type != ROADSTOPTYPE_FREIGHT && roadstopspec->stop_type != ROADSTOPTYPE_ALL) return CMD_ERROR; if (stop_type == ROADSTOP_BUS && roadstopspec->stop_type != ROADSTOPTYPE_PASSENGER && roadstopspec->stop_type != ROADSTOPTYPE_ALL) return CMD_ERROR; diff --git a/src/waypoint_cmd.cpp b/src/waypoint_cmd.cpp index 0ffffcfc09..4fa43cb0b9 100644 --- a/src/waypoint_cmd.cpp +++ b/src/waypoint_cmd.cpp @@ -177,8 +177,10 @@ CommandCost CmdBuildRailWaypoint(DoCommandFlag flags, TileIndex start_tile, Axis { if (!IsValidAxis(axis)) return CMD_ERROR; /* Check if the given station class is valid */ - if (spec_class != STAT_CLASS_WAYP) return CMD_ERROR; - if (spec_index >= StationClass::Get(spec_class)->GetSpecCount()) return CMD_ERROR; + if (static_cast(spec_class) >= StationClass::GetClassCount()) return CMD_ERROR; + const StationClass *cls = StationClass::Get(spec_class); + if (!IsWaypointClass(*cls)) return CMD_ERROR; + if (spec_index >= cls->GetSpecCount()) return CMD_ERROR; /* The number of parts to build */ uint8_t count = axis == AXIS_X ? height : width; From cdc356e7bfeca4788c23f8e330f38afea6930c8e Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 7 May 2024 12:13:48 +0100 Subject: [PATCH 512/695] Change: Unify station/waypoint/roadstop/object build-picker window code. These windows now share a common code base for choosing and display class and types. An additional text filter is added to search types by name instead of just classes. --- src/CMakeLists.txt | 2 + src/lang/english.txt | 15 +- src/newgrf_class.h | 6 +- src/newgrf_class_func.h | 50 +-- src/object_gui.cpp | 619 +++++++-------------------- src/picker_gui.cpp | 465 ++++++++++++++++++++ src/picker_gui.h | 181 ++++++++ src/rail_gui.cpp | 829 +++++++++--------------------------- src/road_gui.cpp | 706 +++++++++--------------------- src/waypoint.cpp | 7 +- src/waypoint_func.h | 4 +- src/widgets/CMakeLists.txt | 1 + src/widgets/object_widget.h | 8 - src/widgets/picker_widget.h | 31 ++ src/widgets/rail_widget.h | 14 - src/widgets/road_widget.h | 14 - 16 files changed, 1261 insertions(+), 1691 deletions(-) create mode 100644 src/picker_gui.cpp create mode 100644 src/picker_gui.h create mode 100644 src/widgets/picker_widget.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 86abd9f9c1..c913e1f190 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -338,6 +338,8 @@ add_files( palette_func.h pbs.cpp pbs.h + picker_gui.cpp + picker_gui.h progress.cpp progress.h querystring_gui.h diff --git a/src/lang/english.txt b/src/lang/english.txt index 4e804cd9c2..66858310f6 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2785,7 +2785,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Select r # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Waypoint -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Select waypoint type # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Rail Station Selection @@ -2798,8 +2797,16 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Select l STR_STATION_BUILD_DRAG_DROP :{BLACK}Drag & Drop STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Build a station using drag & drop -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Select a station class to display -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Select the station type to build +STR_PICKER_STATION_CLASS_TOOLTIP :Select a station class to display +STR_PICKER_STATION_TYPE_TOOLTIP :Select a station type to build. Ctrl+Click to add or remove in saved items +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Select a waypoint class to display +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Select a waypoint to build. Ctrl+Click to add or remove in saved items +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Select a bus station class to display +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Select a bus station type to build. Ctrl+Click to add or remove in saved items +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Select a lorry station class to display +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Select a lorry station type to build. Ctrl+Click to add or remove in saved items +STR_PICKER_OBJECT_CLASS_TOOLTIP :Select an object class to display +STR_PICKER_OBJECT_TYPE_TOOLTIP :Select an object type to build. Ctrl+Click to add or remove in saved items. Ctrl+Click+Drag to select the area diagonally. Also press Shift to show cost estimate only STR_STATION_CLASS_DFLT :Default STR_STATION_CLASS_DFLT_STATION :Default station @@ -2942,8 +2949,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Purchase # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Object Selection -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Select object to build. Ctrl+Click+Drag to select the area diagonally. Also press Shift to show cost estimate only -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Select class of the object to build STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Preview of the object STR_OBJECT_BUILD_SIZE :{BLACK}Size: {GOLD}{NUM} x {NUM} tiles diff --git a/src/newgrf_class.h b/src/newgrf_class.h index a4c12f1cfc..e04c86adac 100644 --- a/src/newgrf_class.h +++ b/src/newgrf_class.h @@ -42,6 +42,9 @@ private: static void InsertDefaults(); public: + using spec_type = Tspec; + using index_type = Tindex; + uint32_t global_id; ///< Global ID for class, e.g. 'DFLT', 'WAYP', etc. StringID name; ///< Name of this class. @@ -67,8 +70,6 @@ public: uint GetSpecCount() const { return static_cast(this->spec.size()); } /** Get the number of potentially user-available specs within the class. */ uint GetUISpecCount() const { return this->ui_count; } - int GetUIFromIndex(int index) const; - int GetIndexFromUI(int ui_index) const; const Tspec *GetSpec(uint index) const; @@ -80,7 +81,6 @@ public: static void Assign(Tspec *spec); static uint GetClassCount(); static uint GetUIClassCount(); - static Tindex GetUIClass(uint index); static NewGRFClass *Get(Tindex class_index); static const Tspec *GetByGrf(uint32_t grfid, uint16_t local_id); diff --git a/src/newgrf_class_func.h b/src/newgrf_class_func.h index dce269649b..47656f1e23 100644 --- a/src/newgrf_class_func.h +++ b/src/newgrf_class_func.h @@ -105,21 +105,6 @@ uint NewGRFClass::GetUIClassCount() return std::count_if(std::begin(NewGRFClass::classes), std::end(NewGRFClass::classes), [](const auto &cls) { return cls.GetUISpecCount() > 0; }); } -/** - * Get the nth-class with user available specs. - * @param index UI index of a class. - * @return The class ID of the class. - */ -template -Tindex NewGRFClass::GetUIClass(uint index) -{ - for (const auto &cls : NewGRFClass::classes) { - if (cls.GetUISpecCount() == 0) continue; - if (index-- == 0) return cls.Index(); - } - NOT_REACHED(); -} - /** * Get a spec from the class at a given index. * @param index The index where to find the spec. @@ -132,38 +117,6 @@ const Tspec *NewGRFClass::GetSpec(uint index) const return index < this->GetSpecCount() ? this->spec[index] : nullptr; } -/** - * Translate a UI spec index into a spec index. - * @param ui_index UI index of the spec. - * @return index of the spec, or -1 if out of range. - */ -template -int NewGRFClass::GetIndexFromUI(int ui_index) const -{ - if (ui_index < 0) return -1; - for (uint i = 0; i < this->GetSpecCount(); i++) { - if (!this->IsUIAvailable(i)) continue; - if (ui_index-- == 0) return i; - } - return -1; -} - -/** - * Translate a spec index into a UI spec index. - * @param index index of the spec. - * @return UI index of the spec, or -1 if out of range. - */ -template -int NewGRFClass::GetUIFromIndex(int index) const -{ - if ((uint)index >= this->GetSpecCount()) return -1; - uint ui_index = 0; - for (int i = 0; i < index; i++) { - if (this->IsUIAvailable(i)) ui_index++; - } - return ui_index; -} - /** * Retrieve a spec by GRF location. * @param grfid GRF ID of spec. @@ -177,7 +130,8 @@ const Tspec *NewGRFClass::GetByGrf(uint32_t grfid, uint16_t for (const auto &cls : NewGRFClass::classes) { for (const auto &spec : cls.spec) { if (spec == nullptr) continue; - if (spec->grf_prop.grffile->grfid == grfid && spec->grf_prop.local_id == local_id) return spec; + if (spec->grf_prop.local_id != local_id) continue; + if ((spec->grf_prop.grffile == nullptr ? 0 : spec->grf_prop.grffile->grfid) == grfid) return spec; } } diff --git a/src/object_gui.cpp b/src/object_gui.cpp index 421b7f8598..42f4c743b9 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -14,10 +14,8 @@ #include "newgrf_object.h" #include "newgrf_text.h" #include "object.h" -#include "querystring_gui.h" -#include "sortlist_type.h" -#include "stringfilter_type.h" -#include "string_func.h" +#include "picker_gui.h" +#include "sound_func.h" #include "strings_func.h" #include "viewport_func.h" #include "tilehighlight_func.h" @@ -34,199 +32,108 @@ #include "safeguards.h" -static ObjectClassID _selected_object_class; ///< Currently selected available object class. -static int _selected_object_index; ///< Index of the currently selected object if existing, else \c -1. -static uint8_t _selected_object_view; ///< the view of the selected object - -/** Enum referring to the Hotkeys in the build object window */ -enum BuildObjectHotkeys { - BOHK_FOCUS_FILTER_BOX, ///< Focus the edit box for editing the filter string +struct ObjectPickerSelection { + ObjectClassID sel_class; ///< Selected object class. + uint16_t sel_type; ///< Selected object type within the class. + uint8_t sel_view; ///< Selected view of the object. }; +static ObjectPickerSelection _object_gui; ///< Settings of the object picker. + +class ObjectPickerCallbacks : public PickerCallbacksNewGRFClass { +public: + StringID GetClassTooltip() const override { return STR_PICKER_OBJECT_CLASS_TOOLTIP; } + StringID GetTypeTooltip() const override { return STR_PICKER_OBJECT_TYPE_TOOLTIP; } + + bool IsActive() const override + { + for (const auto &cls : ObjectClass::Classes()) { + for (const auto *spec : cls.Specs()) { + if (spec != nullptr && spec->IsEverAvailable()) return true; + } + } + return false; + } + + int GetSelectedClass() const override { return _object_gui.sel_class; } + void SetSelectedClass(int id) const override { _object_gui.sel_class = this->GetClassIndex(id); } + + StringID GetClassName(int id) const override + { + const auto *objclass = this->GetClass(id); + if (objclass->GetUISpecCount() == 0) return INVALID_STRING_ID; + return objclass->name; + } + + int GetSelectedType() const override { return _object_gui.sel_type; } + void SetSelectedType(int id) const override { _object_gui.sel_type = id; } + + StringID GetTypeName(int cls_id, int id) const override + { + const auto *spec = this->GetSpec(cls_id, id); + return (spec == nullptr || !spec->IsEverAvailable()) ? INVALID_STRING_ID : spec->name; + } + + bool IsTypeAvailable(int cls_id, int id) const override + { + const auto *spec = this->GetSpec(cls_id, id); + return spec->IsAvailable(); + } + + void DrawType(int x, int y, int cls_id, int id) const override + { + const auto *spec = this->GetSpec(cls_id, id); + if (spec->grf_prop.grffile == nullptr) { + extern const DrawTileSprites _objects[]; + const DrawTileSprites *dts = &_objects[spec->grf_prop.local_id]; + DrawOrigTileSeqInGUI(x, y, dts, PAL_NONE); + } else { + DrawNewObjectTileInGUI(x, y, spec, std::min(_object_gui.sel_view, spec->views - 1)); + } + } + + static ObjectPickerCallbacks instance; +}; +/* static */ ObjectPickerCallbacks ObjectPickerCallbacks::instance; /** The window used for building objects. */ -class BuildObjectWindow : public Window { - typedef GUIList GUIObjectClassList; ///< Type definition for the list to hold available object classes. - - static const uint EDITBOX_MAX_SIZE = 16; ///< The maximum number of characters for the filter edit box. - - int object_margin; ///< The margin (in pixels) around an object. - int line_height; ///< The height of a single line. - int info_height; ///< The height of the info box. - Scrollbar *vscroll; ///< The scrollbar. - - static Listing last_sorting; ///< Default sorting of #GUIObjectClassList. - static Filtering last_filtering; ///< Default filtering of #GUIObjectClassList. - static const std::initializer_list sorter_funcs; ///< Sort functions of the #GUIObjectClassList. - static const std::initializer_list filter_funcs; ///< Filter functions of the #GUIObjectClassList. - GUIObjectClassList object_classes; ///< Available object classes. - StringFilter string_filter; ///< Filter for available objects. - QueryString filter_editbox; ///< Filter editbox. - - /** Scroll #WID_BO_CLASS_LIST so that the selected object class is visible. */ - void EnsureSelectedObjectClassIsVisible() - { - uint pos = 0; - for (auto object_class_id : this->object_classes) { - if (object_class_id == _selected_object_class) break; - pos++; - } - this->vscroll->ScrollTowards(pos); - } - - /** - * Tests whether the previously selected object can be selected. - * @return \c true if the selected object is available, \c false otherwise. - */ - bool CanRestoreSelectedObject() - { - if (_selected_object_index == -1) return false; - - ObjectClass *objclass = ObjectClass::Get(_selected_object_class); - if ((int)objclass->GetSpecCount() <= _selected_object_index) return false; - - return objclass->GetSpec(_selected_object_index)->IsAvailable(); - } +class BuildObjectWindow : public PickerWindow { + int info_height; ///< The height of the info box. public: - BuildObjectWindow(WindowDesc *desc, WindowNumber number) : Window(desc), info_height(1), filter_editbox(EDITBOX_MAX_SIZE * MAX_CHAR_LENGTH, EDITBOX_MAX_SIZE) + BuildObjectWindow(WindowDesc *desc, WindowNumber) : PickerWindow(desc, nullptr, 0, ObjectPickerCallbacks::instance), info_height(1) { - this->CreateNestedTree(); - - this->vscroll = this->GetScrollbar(WID_BO_SCROLLBAR); - - this->querystrings[WID_BO_FILTER] = &this->filter_editbox; - - this->object_classes.SetListing(this->last_sorting); - this->object_classes.SetFiltering(this->last_filtering); - this->object_classes.SetSortFuncs(this->sorter_funcs); - this->object_classes.SetFilterFuncs(this->filter_funcs); - this->object_classes.ForceRebuild(); - - BuildObjectClassesAvailable(); - SelectClassAndObject(); - - this->FinishInitNested(number); - - NWidgetMatrix *matrix = this->GetWidget(WID_BO_SELECT_MATRIX); - matrix->SetScrollbar(this->GetScrollbar(WID_BO_SELECT_SCROLL)); - matrix->SetCount(ObjectClass::Get(_selected_object_class)->GetUISpecCount()); - - this->GetWidget(WID_BO_OBJECT_MATRIX)->SetCount(4); - ResetObjectToPlace(); - - this->vscroll->SetCount(this->object_classes.size()); - - EnsureSelectedObjectClassIsVisible(); - + this->ConstructWindow(); this->InvalidateData(); } - /** Sort object classes by ObjectClassID. */ - static bool ObjectClassIDSorter(ObjectClassID const &a, ObjectClassID const &b) - { - return a < b; - } - - /** Filter object classes by class name. */ - static bool TagNameFilter(ObjectClassID const *oc, StringFilter &filter) - { - ObjectClass *objclass = ObjectClass::Get(*oc); - - filter.ResetState(); - filter.AddLine(GetString(objclass->name)); - return filter.GetState(); - } - - /** Builds the filter list of available object classes. */ - void BuildObjectClassesAvailable() - { - if (!this->object_classes.NeedRebuild()) return; - - this->object_classes.clear(); - this->object_classes.reserve(ObjectClass::GetClassCount()); - - for (const auto &cls : ObjectClass::Classes()) { - if (cls.GetUISpecCount() == 0) continue; // Is this needed here? - object_classes.push_back(cls.Index()); - } - - this->object_classes.Filter(this->string_filter); - this->object_classes.RebuildDone(); - this->object_classes.Sort(); - - this->vscroll->SetCount(this->object_classes.size()); - } - - /** - * Checks if the previously selected current object class and object - * can be shown as selected to the user when the dialog is opened. - */ - void SelectClassAndObject() - { - assert(!this->object_classes.empty()); // object GUI should be disabled elsewise - if (_selected_object_class == ObjectClassID::OBJECT_CLASS_BEGIN) { - /* This happens during the first time the window is open during the game life cycle. */ - this->SelectOtherClass(this->object_classes[0]); - } else { - /* Check if the previously selected object class is not available anymore as a - * result of starting a new game without the corresponding NewGRF. */ - bool available = _selected_object_class < ObjectClass::GetClassCount(); - this->SelectOtherClass(available ? _selected_object_class : this->object_classes[0]); - } - - if (this->CanRestoreSelectedObject()) { - this->SelectOtherObject(_selected_object_index); - } else { - this->SelectFirstAvailableObject(true); - } - assert(ObjectClass::Get(_selected_object_class)->GetUISpecCount() > 0); // object GUI should be disabled elsewise - } - void SetStringParameters(WidgetID widget) const override { switch (widget) { - case WID_BO_OBJECT_NAME: { - ObjectClass *objclass = ObjectClass::Get(_selected_object_class); - const ObjectSpec *spec = objclass->GetSpec(_selected_object_index); - SetDParam(0, spec != nullptr ? spec->name : STR_EMPTY); - break; - } - case WID_BO_OBJECT_SIZE: { - ObjectClass *objclass = ObjectClass::Get(_selected_object_class); - const ObjectSpec *spec = objclass->GetSpec(_selected_object_index); + ObjectClass *objclass = ObjectClass::Get(_object_gui.sel_class); + const ObjectSpec *spec = objclass->GetSpec(_object_gui.sel_type); int size = spec == nullptr ? 0 : spec->size; - SetDParam(0, GB(size, HasBit(_selected_object_view, 0) ? 4 : 0, 4)); - SetDParam(1, GB(size, HasBit(_selected_object_view, 0) ? 0 : 4, 4)); + SetDParam(0, GB(size, HasBit(_object_gui.sel_view, 0) ? 4 : 0, 4)); + SetDParam(1, GB(size, HasBit(_object_gui.sel_view, 0) ? 0 : 4, 4)); break; } - default: break; + default: + this->PickerWindow::SetStringParameters(widget); + break; } } void OnInit() override { - this->object_margin = ScaleGUITrad(4); + this->GetWidget(WID_BO_OBJECT_MATRIX)->SetCount(4); + this->PickerWindow::OnInit(); } void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { - case WID_BO_CLASS_LIST: { - for (auto object_class_id : this->object_classes) { - ObjectClass *objclass = ObjectClass::Get(object_class_id); - if (objclass->GetUISpecCount() == 0) continue; - size.width = std::max(size.width, GetStringBoundingBox(objclass->name).width + padding.width); - } - this->line_height = GetCharacterHeight(FS_NORMAL) + padding.height; - resize.height = this->line_height; - size.height = 5 * this->line_height; - break; - } - - case WID_BO_OBJECT_NAME: case WID_BO_OBJECT_SIZE: /* We do not want the window to resize when selecting objects; better clip texts */ size.width = 0; @@ -234,8 +141,8 @@ public: case WID_BO_OBJECT_MATRIX: { /* Get the right amount of buttons based on the current spec. */ - ObjectClass *objclass = ObjectClass::Get(_selected_object_class); - const ObjectSpec *spec = objclass->GetSpec(_selected_object_index); + const ObjectClass *objclass = ObjectClass::Get(_object_gui.sel_class); + const ObjectSpec *spec = objclass->GetSpec(_object_gui.sel_type); if (spec != nullptr) { if (spec->views >= 2) size.width += resize.width; if (spec->views >= 4) size.height += resize.height; @@ -246,41 +153,14 @@ public: } case WID_BO_OBJECT_SPRITE: { - bool two_wide = false; // Whether there will be two widgets next to each other in the matrix or not. - uint height[2] = {0, 0}; // The height for the different views; in this case views 1/2 and 4. - - /* Get the height and view information. */ - for (const auto &spec : ObjectSpec::Specs()) { - if (!spec.IsEverAvailable()) continue; - two_wide |= spec.views >= 2; - height[spec.views / 4] = std::max(spec.height, height[spec.views / 4]); - } - - /* Determine the pixel heights. */ - for (auto &h : height) { - h *= ScaleGUITrad(TILE_HEIGHT); - h += ScaleGUITrad(TILE_PIXELS) + 2 * this->object_margin; - } - - /* Now determine the size of the minimum widgets. When there are two columns, then - * we want these columns to be slightly less wide. When there are two rows, then - * determine the size of the widgets based on the maximum size for a single row - * of widgets, or just the twice the widget height of the two row ones. */ - size.height = std::max(height[0], height[1] * 2); - if (two_wide) { - size.width = (3 * ScaleGUITrad(TILE_PIXELS) + 2 * this->object_margin) * 2; - } else { - size.width = 4 * ScaleGUITrad(TILE_PIXELS) + 2 * this->object_margin; - } - - /* Get the right size for the single widget based on the current spec. */ - ObjectClass *objclass = ObjectClass::Get(_selected_object_class); - const ObjectSpec *spec = objclass->GetSpec(_selected_object_index); + /* Get the right amount of buttons based on the current spec. */ + const ObjectClass *objclass = ObjectClass::Get(_object_gui.sel_class); + const ObjectSpec *spec = objclass->GetSpec(_object_gui.sel_type); + size.width = ScaleGUITrad(PREVIEW_WIDTH) + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height = ScaleGUITrad(PREVIEW_HEIGHT) + WidgetDimensions::scaled.fullbevel.Vertical(); if (spec != nullptr) { - if (spec->views <= 1) size.width += WidgetDimensions::scaled.hsep_normal; - if (spec->views <= 2) size.height += WidgetDimensions::scaled.vsep_normal; - if (spec->views >= 2) size.width /= 2; - if (spec->views >= 4) size.height /= 2; + if (spec->views <= 1) size.width = size.width * 2 + WidgetDimensions::scaled.hsep_normal; + if (spec->views <= 2) size.height = size.height * 2 + WidgetDimensions::scaled.vsep_normal; } break; } @@ -289,103 +169,49 @@ public: size.height = this->info_height; break; - case WID_BO_SELECT_MATRIX: - fill.height = 1; - resize.height = 1; + default: + this->PickerWindow::UpdateWidgetSize(widget, size, padding, fill, resize); break; - - case WID_BO_SELECT_IMAGE: - size.width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); - size.height = ScaleGUITrad(58) + WidgetDimensions::scaled.fullbevel.Vertical(); - break; - - default: break; } } void DrawWidget(const Rect &r, WidgetID widget) const override { switch (widget) { - case WID_BO_CLASS_LIST: { - Rect mr = r.Shrink(WidgetDimensions::scaled.matrix); - uint pos = 0; - for (auto object_class_id : this->object_classes) { - ObjectClass *objclass = ObjectClass::Get(object_class_id); - if (objclass->GetUISpecCount() == 0) continue; - if (!this->vscroll->IsVisible(pos++)) continue; - DrawString(mr, objclass->name, - (object_class_id == _selected_object_class) ? TC_WHITE : TC_BLACK); - mr.top += this->line_height; - } - break; - } - case WID_BO_OBJECT_SPRITE: { - if (_selected_object_index == -1) break; - - ObjectClass *objclass = ObjectClass::Get(_selected_object_class); - const ObjectSpec *spec = objclass->GetSpec(_selected_object_index); + const ObjectClass *objclass = ObjectClass::Get(_object_gui.sel_class); + const ObjectSpec *spec = objclass->GetSpec(_object_gui.sel_type); if (spec == nullptr) break; - /* Height of the selection matrix. - * Depending on the number of views, the matrix has a 1x1, 1x2, 2x1 or 2x2 layout. To make the previews - * look nice in all layouts, we use the 4x4 layout (smallest previews) as starting point. For the bigger - * previews in the layouts with less views we add space homogeneously on all sides, so the 4x4 preview-rectangle - * is centered in the 2x1, 1x2 resp. 1x1 buttons. */ const NWidgetMatrix *matrix = this->GetWidget(widget)->GetParentWidget(); - uint matrix_height = matrix->current_y; DrawPixelInfo tmp_dpi; /* Set up a clipping area for the preview. */ Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); if (FillDrawPixelInfo(&tmp_dpi, ir)) { AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); + int x = (ir.Width() - ScaleSpriteTrad(PREVIEW_WIDTH)) / 2 + ScaleSpriteTrad(PREVIEW_LEFT); + int y = (ir.Height() + ScaleSpriteTrad(PREVIEW_HEIGHT)) / 2 - ScaleSpriteTrad(PREVIEW_BOTTOM); + if (spec->grf_prop.grffile == nullptr) { extern const DrawTileSprites _objects[]; const DrawTileSprites *dts = &_objects[spec->grf_prop.local_id]; - DrawOrigTileSeqInGUI(ir.Width() / 2 - 1, (ir.Height() + matrix_height / 2) / 2 - this->object_margin - ScaleSpriteTrad(TILE_PIXELS), dts, PAL_NONE); + DrawOrigTileSeqInGUI(x, y, dts, PAL_NONE); } else { - DrawNewObjectTileInGUI(ir.Width() / 2 - 1, (ir.Height() + matrix_height / 2) / 2 - this->object_margin - ScaleSpriteTrad(TILE_PIXELS), spec, matrix->GetCurrentElement()); + DrawNewObjectTileInGUI(x, y, spec, matrix->GetCurrentElement()); } } break; } - case WID_BO_SELECT_IMAGE: { - ObjectClass *objclass = ObjectClass::Get(_selected_object_class); - int obj_index = objclass->GetIndexFromUI(this->GetWidget(widget)->GetParentWidget()->GetCurrentElement()); - if (obj_index < 0) break; - const ObjectSpec *spec = objclass->GetSpec(obj_index); - if (spec == nullptr) break; - - DrawPixelInfo tmp_dpi; - /* Set up a clipping area for the preview. */ - Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); - if (FillDrawPixelInfo(&tmp_dpi, ir)) { - AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); - if (spec->grf_prop.grffile == nullptr) { - extern const DrawTileSprites _objects[]; - const DrawTileSprites *dts = &_objects[spec->grf_prop.local_id]; - DrawOrigTileSeqInGUI(ir.Width() / 2 - 1, ir.Height() - this->object_margin - ScaleSpriteTrad(TILE_PIXELS), dts, PAL_NONE); - } else { - DrawNewObjectTileInGUI(ir.Width() / 2 - 1, ir.Height() - this->object_margin - ScaleSpriteTrad(TILE_PIXELS), spec, - std::min(_selected_object_view, spec->views - 1)); - } - } - if (!spec->IsAvailable()) { - GfxFillRect(ir, PC_BLACK, FILLRECT_CHECKER); - } - break; - } - case WID_BO_INFO: { - ObjectClass *objclass = ObjectClass::Get(_selected_object_class); - const ObjectSpec *spec = objclass->GetSpec(_selected_object_index); + const ObjectClass *objclass = ObjectClass::Get(_object_gui.sel_class); + const ObjectSpec *spec = objclass->GetSpec(_object_gui.sel_type); if (spec == nullptr) break; /* Get the extra message for the GUI */ if (HasBit(spec->callback_mask, CBM_OBJ_FUND_MORE_TEXT)) { - uint16_t callback_res = GetObjectCallback(CBID_OBJECT_FUND_MORE_TEXT, 0, 0, spec, nullptr, INVALID_TILE, _selected_object_view); + uint16_t callback_res = GetObjectCallback(CBID_OBJECT_FUND_MORE_TEXT, 0, 0, spec, nullptr, INVALID_TILE, _object_gui.sel_view); if (callback_res != CALLBACK_FAILED && callback_res != 0x400) { if (callback_res > 0x400) { ErrorUnknownCallbackResult(spec->grf_prop.grffile->grfid, CBID_OBJECT_FUND_MORE_TEXT, callback_res); @@ -407,131 +233,80 @@ public: } } } + break; } + + default: + this->PickerWindow::DrawWidget(r, widget); + break; } } - /** - * Select the specified object class. - * @param object_class Object class select. - */ - void SelectOtherClass(ObjectClassID object_class) + void UpdateSelectSize(const ObjectSpec *spec) { - _selected_object_class = object_class; - ObjectClass *objclass = ObjectClass::Get(object_class); - this->GetWidget(WID_BO_SELECT_MATRIX)->SetCount(objclass->GetUISpecCount()); - } - - /** - * Select the specified object in #_selected_object_class class. - * @param object_index Object index to select, \c -1 means select nothing. - */ - void SelectOtherObject(int object_index) - { - _selected_object_index = object_index; - if (_selected_object_index != -1) { - ObjectClass *objclass = ObjectClass::Get(_selected_object_class); - const ObjectSpec *spec = objclass->GetSpec(_selected_object_index); - _selected_object_view = std::min(_selected_object_view, spec->views - 1); - this->ReInit(); - } else { - _selected_object_view = 0; - } - - if (_selected_object_index != -1) { - SetObjectToPlaceWnd(SPR_CURSOR_TRANSMITTER, PAL_NONE, HT_RECT | HT_DIAGONAL, this); - } else { - ResetObjectToPlace(); - } - - this->UpdateButtons(_selected_object_class, _selected_object_index, _selected_object_view); - } - - void UpdateSelectSize() - { - if (_selected_object_index == -1) { + if (spec == nullptr) { SetTileSelectSize(1, 1); + ResetObjectToPlace(); } else { - ObjectClass *objclass = ObjectClass::Get(_selected_object_class); - const ObjectSpec *spec = objclass->GetSpec(_selected_object_index); - int w = GB(spec->size, HasBit(_selected_object_view, 0) ? 4 : 0, 4); - int h = GB(spec->size, HasBit(_selected_object_view, 0) ? 0 : 4, 4); + _object_gui.sel_view = std::min(_object_gui.sel_view, spec->views - 1); + SetObjectToPlaceWnd(SPR_CURSOR_TRANSMITTER, PAL_NONE, HT_RECT | HT_DIAGONAL, this); + int w = GB(spec->size, HasBit(_object_gui.sel_view, 0) ? 4 : 0, 4); + int h = GB(spec->size, HasBit(_object_gui.sel_view, 0) ? 0 : 4, 4); SetTileSelectSize(w, h); + this->ReInit(); } } /** * Update buttons to show the selection to the user. - * @param object_class The class of the selected object. - * @param sel_index Index of the object to select, or \c -1 . - * @param sel_view View of the object to select. + * @param spec The object spec of the selected object. */ - void UpdateButtons(ObjectClassID object_class, int sel_index, uint sel_view) + void UpdateButtons(const ObjectSpec *spec) { - int view_number, object_number; - if (sel_index == -1) { - view_number = -1; // If no object selected, also hide the selected view. - object_number = -1; - } else { - view_number = sel_view; - ObjectClass *objclass = ObjectClass::Get(object_class); - object_number = objclass->GetUIFromIndex(sel_index); - } - - this->GetWidget(WID_BO_OBJECT_MATRIX)->SetClicked(view_number); - this->GetWidget(WID_BO_SELECT_MATRIX)->SetClicked(object_number); - this->UpdateSelectSize(); + this->GetWidget(WID_BO_OBJECT_MATRIX)->SetClicked(_object_gui.sel_view); + this->UpdateSelectSize(spec); this->SetDirty(); } void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override { + this->PickerWindow::OnInvalidateData(data, gui_scope); + if (!gui_scope) return; - this->BuildObjectClassesAvailable(); - } - - void OnResize() override - { - this->vscroll->SetCapacityFromWidget(this, WID_BO_CLASS_LIST); + if ((data & PickerWindow::PFI_POSITION) != 0) { + const auto objclass = ObjectClass::Get(_object_gui.sel_class); + const auto spec = objclass->GetSpec(_object_gui.sel_type); + _object_gui.sel_view = std::min(_object_gui.sel_view, spec->views - 1); + this->UpdateButtons(spec); + } } void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override { switch (widget) { - case WID_BO_CLASS_LIST: { - auto it = this->vscroll->GetScrolledItemFromWidget(this->object_classes, pt.y, this, widget); - if (it == this->object_classes.end()) break; - - this->SelectOtherClass(*it); - this->SelectFirstAvailableObject(false); - break; - } - - case WID_BO_SELECT_IMAGE: { - ObjectClass *objclass = ObjectClass::Get(_selected_object_class); - int num_clicked = objclass->GetIndexFromUI(this->GetWidget(widget)->GetParentWidget()->GetCurrentElement()); - if (num_clicked >= 0 && objclass->GetSpec(num_clicked)->IsAvailable()) this->SelectOtherObject(num_clicked); - break; - } - case WID_BO_OBJECT_SPRITE: - if (_selected_object_index != -1) { - _selected_object_view = this->GetWidget(widget)->GetParentWidget()->GetCurrentElement(); - this->SelectOtherObject(_selected_object_index); // Re-select the object for a different view. + if (_object_gui.sel_type != MAX_UVALUE(uint16_t)) { + _object_gui.sel_view = this->GetWidget(widget)->GetParentWidget()->GetCurrentElement(); + this->InvalidateData(PickerWindow::PFI_POSITION); + if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); } break; + + default: + this->PickerWindow::OnClick(pt, widget, click_count); + break; } } void OnPlaceObject([[maybe_unused]] Point pt, TileIndex tile) override { - const ObjectSpec *spec = ObjectClass::Get(_selected_object_class)->GetSpec(_selected_object_index); + const ObjectSpec *spec = ObjectClass::Get(_object_gui.sel_class)->GetSpec(_object_gui.sel_type); if (spec->size == OBJECT_SIZE_1X1) { VpStartPlaceSizing(tile, VPM_X_AND_Y, DDSP_BUILD_OBJECT); } else { - Command::Post(STR_ERROR_CAN_T_BUILD_OBJECT, CcPlaySound_CONSTRUCTION_OTHER, tile, spec->Index(), _selected_object_view); + Command::Post(STR_ERROR_CAN_T_BUILD_OBJECT, CcPlaySound_CONSTRUCTION_OTHER, tile, spec->Index(), _object_gui.sel_view); } } @@ -552,85 +327,14 @@ public: if (TileX(end_tile) == Map::MaxX()) end_tile += TileDiffXY(-1, 0); if (TileY(end_tile) == Map::MaxY()) end_tile += TileDiffXY(0, -1); } - const ObjectSpec *spec = ObjectClass::Get(_selected_object_class)->GetSpec(_selected_object_index); + const ObjectSpec *spec = ObjectClass::Get(_object_gui.sel_class)->GetSpec(_object_gui.sel_type); Command::Post(STR_ERROR_CAN_T_BUILD_OBJECT, CcPlaySound_CONSTRUCTION_OTHER, - end_tile, start_tile, spec->Index(), _selected_object_view, (_ctrl_pressed ? true : false)); + end_tile, start_tile, spec->Index(), _object_gui.sel_view, (_ctrl_pressed ? true : false)); } void OnPlaceObjectAbort() override { - this->UpdateButtons(_selected_object_class, -1, _selected_object_view); - } - - EventState OnHotkey(int hotkey) override - { - switch (hotkey) { - case BOHK_FOCUS_FILTER_BOX: - this->SetFocusedWidget(WID_BO_FILTER); - SetFocusedWindow(this); // The user has asked to give focus to the text box, so make sure this window is focused. - break; - - default: - return ES_NOT_HANDLED; - } - - return ES_HANDLED; - } - - void OnEditboxChanged(WidgetID widget) override - { - if (widget == WID_BO_FILTER) { - string_filter.SetFilterTerm(this->filter_editbox.text.buf); - this->object_classes.SetFilterState(!string_filter.IsEmpty()); - this->object_classes.ForceRebuild(); - this->InvalidateData(); - } - } - - /** - * Select the first available object. - * @param change_class If true, change the class if no object in the current - * class is available. - */ - void SelectFirstAvailableObject(bool change_class) - { - ObjectClass *objclass = ObjectClass::Get(_selected_object_class); - - /* First try to select an object in the selected class. */ - for (uint i = 0; i < objclass->GetSpecCount(); i++) { - const ObjectSpec *spec = objclass->GetSpec(i); - if (spec->IsAvailable()) { - this->SelectOtherObject(i); - return; - } - } - if (change_class) { - /* If that fails, select the first available object - * from a random class. */ - for (auto object_class_id : this->object_classes) { - ObjectClass *objclass = ObjectClass::Get(object_class_id); - for (uint i = 0; i < objclass->GetSpecCount(); i++) { - const ObjectSpec *spec = objclass->GetSpec(i); - if (spec->IsAvailable()) { - this->SelectOtherClass(object_class_id); - this->SelectOtherObject(i); - return; - } - } - } - } - /* If all objects are unavailable, select nothing... */ - if (objclass->GetUISpecCount() == 0) { - /* ... but make sure that the class is not empty. */ - for (auto object_class_id : this->object_classes) { - ObjectClass *objclass = ObjectClass::Get(object_class_id); - if (objclass->GetUISpecCount() > 0) { - this->SelectOtherClass(object_class_id); - break; - } - } - } - this->SelectOtherObject(-1); + this->UpdateButtons(nullptr); } /** @@ -647,22 +351,10 @@ public: } static inline HotkeyList hotkeys{"buildobject", { - Hotkey('F', "focus_filter_box", BOHK_FOCUS_FILTER_BOX), + Hotkey('F', "focus_filter_box", PCWHK_FOCUS_FILTER_BOX), }, BuildObjectGlobalHotkeys}; }; - -Listing BuildObjectWindow::last_sorting = { false, 0 }; -Filtering BuildObjectWindow::last_filtering = { false, 0 }; - -const std::initializer_list BuildObjectWindow::sorter_funcs = { - &ObjectClassIDSorter, -}; - -const std::initializer_list BuildObjectWindow::filter_funcs = { - &TagNameFilter, -}; - static constexpr NWidgetPart _nested_build_object_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), @@ -672,41 +364,22 @@ static constexpr NWidgetPart _nested_build_object_widgets[] = { NWidget(WWT_STICKYBOX, COLOUR_DARK_GREEN), EndContainer(), NWidget(NWID_HORIZONTAL), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPadding(WidgetDimensions::unscaled.picker), - NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_picker, 0), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), - NWidget(WWT_TEXT, COLOUR_DARK_GREEN), SetFill(0, 1), SetDataTip(STR_LIST_FILTER_TITLE, STR_NULL), - NWidget(WWT_EDITBOX, COLOUR_GREY, WID_BO_FILTER), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), - EndContainer(), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_MATRIX, COLOUR_GREY, WID_BO_CLASS_LIST), SetFill(1, 0), SetMatrixDataTip(1, 0, STR_OBJECT_BUILD_CLASS_TOOLTIP), SetScrollbar(WID_BO_SCROLLBAR), - NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_BO_SCROLLBAR), - EndContainer(), + NWidget(NWID_VERTICAL), + NWidgetFunction(MakePickerClassWidgets), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_picker, 0), SetPadding(WidgetDimensions::unscaled.picker), NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_ORIENTATION, STR_NULL), SetFill(1, 0), NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), NWidget(NWID_MATRIX, COLOUR_DARK_GREEN, WID_BO_OBJECT_MATRIX), SetPIP(0, 2, 0), NWidget(WWT_PANEL, COLOUR_GREY, WID_BO_OBJECT_SPRITE), SetDataTip(0x0, STR_OBJECT_BUILD_PREVIEW_TOOLTIP), EndContainer(), + EndContainer(), EndContainer(), - EndContainer(), - NWidget(WWT_TEXT, COLOUR_DARK_GREEN, WID_BO_OBJECT_NAME), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_ORANGE), SetAlignment(SA_CENTER), - NWidget(WWT_TEXT, COLOUR_DARK_GREEN, WID_BO_OBJECT_SIZE), SetDataTip(STR_OBJECT_BUILD_SIZE, STR_NULL), SetAlignment(SA_CENTER), - EndContainer(), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetScrollbar(WID_BO_SELECT_SCROLL), - NWidget(NWID_MATRIX, COLOUR_DARK_GREEN, WID_BO_SELECT_MATRIX), SetPIP(0, 2, 0), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BO_SELECT_IMAGE), SetDataTip(0x0, STR_OBJECT_BUILD_TOOLTIP), - SetFill(0, 0), SetResize(0, 0), SetScrollbar(WID_BO_SELECT_SCROLL), - EndContainer(), + NWidget(WWT_TEXT, COLOUR_DARK_GREEN, WID_BO_OBJECT_SIZE), SetDataTip(STR_OBJECT_BUILD_SIZE, STR_NULL), SetAlignment(SA_CENTER), + NWidget(WWT_EMPTY, INVALID_COLOUR, WID_BO_INFO), SetFill(1, 0), SetResize(1, 0), EndContainer(), EndContainer(), EndContainer(), - NWidget(WWT_EMPTY, INVALID_COLOUR, WID_BO_INFO), SetPadding(WidgetDimensions::unscaled.framerect), SetFill(1, 0), SetResize(1, 0), - EndContainer(), - NWidget(NWID_VERTICAL), - NWidget(NWID_VSCROLLBAR, COLOUR_DARK_GREEN, WID_BO_SELECT_SCROLL), - NWidget(WWT_RESIZEBOX, COLOUR_DARK_GREEN), - EndContainer(), + NWidgetFunction(MakePickerTypeWidgets), EndContainer(), }; @@ -722,7 +395,7 @@ static WindowDesc _build_object_desc( Window *ShowBuildObjectPicker() { /* Don't show the place object button when there are no objects to place. */ - if (ObjectClass::GetUIClassCount() > 0) { + if (ObjectPickerCallbacks::instance.IsActive()) { return AllocateWindowDescFront(&_build_object_desc, 0); } return nullptr; @@ -731,5 +404,5 @@ Window *ShowBuildObjectPicker() /** Reset all data of the object GUI. */ void InitializeObjectGui() { - _selected_object_class = ObjectClassID::OBJECT_CLASS_BEGIN; + _object_gui.sel_class = ObjectClassID::OBJECT_CLASS_BEGIN; } diff --git a/src/picker_gui.cpp b/src/picker_gui.cpp new file mode 100644 index 0000000000..a9eda4298f --- /dev/null +++ b/src/picker_gui.cpp @@ -0,0 +1,465 @@ +/* + * 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 picker_gui.cpp %File for dealing with picker windows */ + +#include "stdafx.h" +#include "core/backup_type.hpp" +#include "gui.h" +#include "hotkeys.h" +#include "picker_gui.h" +#include "querystring_gui.h" +#include "settings_type.h" +#include "sortlist_type.h" +#include "sound_func.h" +#include "sound_type.h" +#include "stringfilter_type.h" +#include "strings_func.h" +#include "widget_type.h" +#include "window_func.h" +#include "window_gui.h" +#include "window_type.h" +#include "zoom_func.h" + +#include "widgets/picker_widget.h" + +#include "safeguards.h" + +/** Sort classes by id. */ +static bool ClassIDSorter(int const &a, int const &b) +{ + return a < b; +} + +/** Filter classes by class name. */ +static bool ClassTagNameFilter(int const *item, PickerFilterData &filter) +{ + filter.ResetState(); + filter.AddLine(GetString(filter.callbacks->GetClassName(*item))); + return filter.GetState(); +} + +/** Sort types by id. */ +static bool TypeIDSorter(PickerItem const &a, PickerItem const &b) +{ + int r = a.class_index - b.class_index; + if (r == 0) r = a.index - b.index; + return r < 0; +} + +/** Filter types by class name. */ +static bool TypeTagNameFilter(PickerItem const *item, PickerFilterData &filter) +{ + filter.ResetState(); + filter.AddLine(GetString(filter.callbacks->GetTypeName(item->class_index, item->index))); + return filter.GetState(); +} + +static const std::initializer_list _class_sorter_funcs = { &ClassIDSorter }; ///< Sort functions of the #PickerClassList +static const std::initializer_list _class_filter_funcs = { &ClassTagNameFilter }; ///< Filter functions of the #PickerClassList. +static const std::initializer_list _type_sorter_funcs = { TypeIDSorter }; ///< Sort functions of the #PickerTypeList. +static const std::initializer_list _type_filter_funcs = { TypeTagNameFilter }; ///< Filter functions of the #PickerTypeList. + +PickerWindow::PickerWindow(WindowDesc *desc, Window *parent, int window_number, PickerCallbacks &callbacks) : PickerWindowBase(desc, parent), callbacks(callbacks), + class_editbox(EDITBOX_MAX_SIZE * MAX_CHAR_LENGTH, EDITBOX_MAX_SIZE), + type_editbox(EDITBOX_MAX_SIZE * MAX_CHAR_LENGTH, EDITBOX_MAX_SIZE) +{ + this->window_number = window_number; + + /* Init of nested tree is deferred. + * PickerWindow::ConstructWindow must be called by the inheriting window. */ +} + +void PickerWindow::ConstructWindow() +{ + this->CreateNestedTree(); + + /* Test if pickers should be active.*/ + bool isActive = this->callbacks.IsActive(); + + /* Functionality depends on widgets being present, not window class. */ + this->has_class_picker = isActive && this->GetWidget(WID_PW_CLASS_LIST) != nullptr && this->callbacks.HasClassChoice(); + this->has_type_picker = isActive && this->GetWidget(WID_PW_TYPE_MATRIX) != nullptr; + + if (this->has_class_picker) { + this->GetWidget(WID_PW_CLASS_LIST)->tool_tip = this->callbacks.GetClassTooltip(); + + this->querystrings[WID_PW_CLASS_FILTER] = &this->class_editbox; + } else { + if (auto *nwid = this->GetWidget(WID_PW_CLASS_SEL); nwid != nullptr) { + /* Check the container orientation. MakeNWidgets adds an additional NWID_VERTICAL container so we check the grand-parent. */ + bool is_vertical = (nwid->parent->parent->type == NWID_VERTICAL); + nwid->SetDisplayedPlane(is_vertical ? SZSP_HORIZONTAL : SZSP_VERTICAL); + } + } + + this->class_editbox.cancel_button = QueryString::ACTION_CLEAR; + this->class_string_filter.SetFilterTerm(this->class_editbox.text.buf); + this->class_string_filter.callbacks = &this->callbacks; + + this->classes.SetListing(this->callbacks.class_last_sorting); + this->classes.SetFiltering(this->callbacks.class_last_filtering); + this->classes.SetSortFuncs(_class_sorter_funcs); + this->classes.SetFilterFuncs(_class_filter_funcs); + + if (this->has_type_picker) { + this->GetWidget(WID_PW_TYPE_ITEM)->tool_tip = this->callbacks.GetTypeTooltip(); + + auto *matrix = this->GetWidget(WID_PW_TYPE_MATRIX); + matrix->SetScrollbar(this->GetScrollbar(WID_PW_TYPE_SCROLL)); + + this->querystrings[WID_PW_TYPE_FILTER] = &this->type_editbox; + } else { + if (auto *nwid = this->GetWidget(WID_PW_TYPE_SEL); nwid != nullptr) { + /* Check the container orientation. MakeNWidgets adds an additional NWID_VERTICAL container so we check the grand-parent. */ + bool is_vertical = (nwid->parent->parent->type == NWID_VERTICAL); + nwid->SetDisplayedPlane(is_vertical ? SZSP_HORIZONTAL : SZSP_VERTICAL); + } + } + + this->type_editbox.cancel_button = QueryString::ACTION_CLEAR; + this->type_string_filter.SetFilterTerm(this->type_editbox.text.buf); + this->type_string_filter.callbacks = &this->callbacks; + + this->types.SetListing(this->callbacks.type_last_sorting); + this->types.SetFiltering(this->callbacks.type_last_filtering); + this->types.SetSortFuncs(_type_sorter_funcs); + this->types.SetFilterFuncs(_type_filter_funcs); + + this->FinishInitNested(this->window_number); + + this->InvalidateData(PFI_CLASS | PFI_TYPE | PFI_POSITION | PFI_VALIDATE); +} + +void PickerWindow::Close(int data) +{ + this->callbacks.Close(data); + this->PickerWindowBase::Close(data); +} + +void PickerWindow::UpdateWidgetSize(WidgetID widget, Dimension &size, const Dimension &padding, Dimension &fill, Dimension &resize) +{ + switch (widget) { + /* Class picker */ + case WID_PW_CLASS_LIST: + resize.height = GetCharacterHeight(FS_NORMAL) + padding.height; + size.height = 5 * resize.height; + break; + + /* Type picker */ + case WID_PW_TYPE_MATRIX: + /* At least two items wide. */ + size.width += resize.width; + fill.width = resize.width; + fill.height = 1; + + /* Resizing in X direction only at blob size, but at pixel level in Y. */ + resize.height = 1; + break; + + /* Type picker */ + case WID_PW_TYPE_ITEM: + size.width = ScaleGUITrad(PREVIEW_WIDTH) + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height = ScaleGUITrad(PREVIEW_HEIGHT) + WidgetDimensions::scaled.fullbevel.Vertical(); + break; + } +} + +void PickerWindow::DrawWidget(const Rect &r, WidgetID widget) const +{ + switch (widget) { + /* Class picker */ + case WID_PW_CLASS_LIST: { + Rect ir = r.Shrink(WidgetDimensions::scaled.matrix); + const int selected = this->callbacks.GetSelectedClass(); + const auto vscroll = this->GetScrollbar(WID_PW_CLASS_SCROLL); + auto [first, last] = vscroll->GetVisibleRangeIterators(this->classes); + for (auto it = first; it != last; ++it) { + DrawString(ir, this->callbacks.GetClassName(*it), *it == selected ? TC_WHITE : TC_BLACK); + ir.top += this->resize.step_height; + } + break; + } + + /* Type picker */ + case WID_PW_TYPE_ITEM: { + assert(this->GetWidget(widget)->GetParentWidget()->GetCurrentElement() < static_cast(this->types.size())); + const auto &item = this->types[this->GetWidget(widget)->GetParentWidget()->GetCurrentElement()]; + + DrawPixelInfo tmp_dpi; + Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); + if (FillDrawPixelInfo(&tmp_dpi, ir)) { + AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); + int x = (ir.Width() - ScaleSpriteTrad(PREVIEW_WIDTH)) / 2 + ScaleSpriteTrad(PREVIEW_LEFT); + int y = (ir.Height() + ScaleSpriteTrad(PREVIEW_HEIGHT)) / 2 - ScaleSpriteTrad(PREVIEW_BOTTOM); + + this->callbacks.DrawType(x, y, item.class_index, item.index); + } + + if (!this->callbacks.IsTypeAvailable(item.class_index, item.index)) { + GfxFillRect(ir, GetColourGradient(COLOUR_GREY, SHADE_DARKER), FILLRECT_CHECKER); + } + break; + } + + case WID_PW_TYPE_NAME: + DrawString(r, this->callbacks.GetTypeName(this->callbacks.GetSelectedClass(), this->callbacks.GetSelectedType()), TC_ORANGE, SA_CENTER); + break; + } +} + +void PickerWindow::OnResize() +{ + if (this->has_class_picker) { + this->GetScrollbar(WID_PW_CLASS_SCROLL)->SetCapacityFromWidget(this, WID_PW_CLASS_LIST); + } +} + +void PickerWindow::OnClick(Point pt, WidgetID widget, int) +{ + switch (widget) { + /* Class Picker */ + case WID_PW_CLASS_LIST: { + const auto vscroll = this->GetWidget(WID_PW_CLASS_SCROLL); + auto it = vscroll->GetScrolledItemFromWidget(this->classes, pt.y, this, WID_PW_CLASS_LIST); + if (it == this->classes.end()) return; + + if (this->callbacks.GetSelectedClass() != *it) { + this->callbacks.SetSelectedClass(*it); + this->InvalidateData(PFI_TYPE | PFI_POSITION | PFI_VALIDATE); + } + if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); + CloseWindowById(WC_SELECT_STATION, 0); + break; + } + + /* Type Picker */ + case WID_PW_TYPE_ITEM: { + int sel = this->GetWidget(widget)->GetParentWidget()->GetCurrentElement(); + assert(sel < (int)this->types.size()); + const auto &item = this->types[sel]; + if (this->callbacks.IsTypeAvailable(item.class_index, item.index)) { + this->callbacks.SetSelectedClass(item.class_index); + this->callbacks.SetSelectedType(item.index); + this->InvalidateData(PFI_POSITION); + } + if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); + CloseWindowById(WC_SELECT_STATION, 0); + break; + } + } +} + +void PickerWindow::OnInvalidateData(int data, bool gui_scope) +{ + if (!gui_scope) return; + + if ((data & PFI_CLASS) != 0) this->classes.ForceRebuild(); + if ((data & PFI_TYPE) != 0) this->types.ForceRebuild(); + + this->BuildPickerClassList(); + if ((data & PFI_VALIDATE) != 0) this->EnsureSelectedClassIsValid(); + if ((data & PFI_POSITION) != 0) this->EnsureSelectedClassIsVisible(); + + this->BuildPickerTypeList(); + if ((data & PFI_VALIDATE) != 0) this->EnsureSelectedTypeIsValid(); + if ((data & PFI_POSITION) != 0) this->EnsureSelectedTypeIsVisible(); +} + +EventState PickerWindow::OnHotkey(int hotkey) +{ + switch (hotkey) { + case PCWHK_FOCUS_FILTER_BOX: + /* Cycle between the two edit boxes. */ + if (this->has_type_picker && (this->nested_focus == nullptr || this->nested_focus->index != WID_PW_TYPE_FILTER)) { + this->SetFocusedWidget(WID_PW_TYPE_FILTER); + } else if (this->has_class_picker && (this->nested_focus == nullptr || this->nested_focus->index != WID_PW_CLASS_FILTER)) { + this->SetFocusedWidget(WID_PW_CLASS_FILTER); + } + SetFocusedWindow(this); + return ES_HANDLED; + + default: + return ES_NOT_HANDLED; + } +} + +void PickerWindow::OnEditboxChanged(WidgetID wid) +{ + switch (wid) { + case WID_PW_CLASS_FILTER: + this->class_string_filter.SetFilterTerm(this->class_editbox.text.buf); + this->classes.SetFilterState(!class_string_filter.IsEmpty()); + this->InvalidateData(PFI_CLASS); + break; + + case WID_PW_TYPE_FILTER: + this->type_string_filter.SetFilterTerm(this->type_editbox.text.buf); + this->types.SetFilterState(!type_string_filter.IsEmpty()); + this->InvalidateData(PFI_TYPE); + break; + + default: + break; + } +} + +/** Builds the filter list of classes. */ +void PickerWindow::BuildPickerClassList() +{ + if (!this->classes.NeedRebuild()) return; + + int count = this->callbacks.GetClassCount(); + + this->classes.clear(); + this->classes.reserve(count); + + for (int i = 0; i < count; i++) { + if (this->callbacks.GetClassName(i) == INVALID_STRING_ID) continue; + this->classes.emplace_back(i); + } + + this->classes.Filter(this->class_string_filter); + this->classes.RebuildDone(); + this->classes.Sort(); + + if (!this->has_class_picker) return; + this->GetScrollbar(WID_PW_CLASS_SCROLL)->SetCount(this->classes.size()); +} + +void PickerWindow::EnsureSelectedClassIsValid() +{ + int class_index = this->callbacks.GetSelectedClass(); + if (std::binary_search(std::begin(this->classes), std::end(this->classes), class_index)) return; + + class_index = this->classes.front(); + this->callbacks.SetSelectedClass(class_index); +} + +void PickerWindow::EnsureSelectedClassIsVisible() +{ + if (!this->has_class_picker) return; + if (this->classes.empty()) return; + + auto it = std::find(std::begin(this->classes), std::end(this->classes), this->callbacks.GetSelectedClass()); + if (it == std::end(this->classes)) return; + + int pos = static_cast(std::distance(std::begin(this->classes), it)); + this->GetScrollbar(WID_PW_CLASS_SCROLL)->ScrollTowards(pos); +} + +/** Builds the filter list of types. */ +void PickerWindow::BuildPickerTypeList() +{ + if (!this->types.NeedRebuild()) return; + + this->types.clear(); + int cls_id = this->callbacks.GetSelectedClass(); + + { + /* Add types in only the selected class. */ + if (cls_id >= 0 && cls_id < this->callbacks.GetClassCount()) { + int count = this->callbacks.GetTypeCount(cls_id); + this->types.reserve(count); + for (int i = 0; i < count; i++) { + if (this->callbacks.GetTypeName(cls_id, i) == INVALID_STRING_ID) continue; + this->types.emplace_back(this->callbacks.GetPickerItem(cls_id, i)); + } + } + } + + this->types.Filter(this->type_string_filter); + this->types.RebuildDone(); + this->types.Sort(); + + if (!this->has_type_picker) return; + this->GetWidget(WID_PW_TYPE_MATRIX)->SetCount(static_cast(this->types.size())); +} + +void PickerWindow::EnsureSelectedTypeIsValid() +{ + int class_index = this->callbacks.GetSelectedClass(); + int index = this->callbacks.GetSelectedType(); + if (std::any_of(std::begin(this->types), std::end(this->types), [class_index, index](const auto &item) { return item.class_index == class_index && item.index == index; })) return; + + class_index = this->types.front().class_index; + index = this->types.front().index; + this->callbacks.SetSelectedClass(class_index); + this->callbacks.SetSelectedType(index); +} + +void PickerWindow::EnsureSelectedTypeIsVisible() +{ + if (!this->has_type_picker) return; + if (this->types.empty()) { + this->GetWidget(WID_PW_TYPE_MATRIX)->SetClicked(-1); + return; + } + + int class_index = this->callbacks.GetSelectedClass(); + int index = this->callbacks.GetSelectedType(); + + auto it = std::find_if(std::begin(this->types), std::end(this->types), [class_index, index](const auto &item) { return item.class_index == class_index && item.index == index; }); + if (it == std::end(this->types)) return; + + int pos = static_cast(std::distance(std::begin(this->types), it)); + this->GetWidget(WID_PW_TYPE_MATRIX)->SetClicked(pos); +} + +/** Create nested widgets for the class picker widgets. */ +std::unique_ptr MakePickerClassWidgets() +{ + static constexpr NWidgetPart picker_class_widgets[] = { + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_PW_CLASS_SEL), + NWidget(NWID_VERTICAL), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN), + NWidget(WWT_EDITBOX, COLOUR_DARK_GREEN, WID_PW_CLASS_FILTER), SetMinimalSize(144, 0), SetPadding(2), SetFill(1, 0), SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), + EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN), + NWidget(WWT_MATRIX, COLOUR_GREY, WID_PW_CLASS_LIST), SetFill(1, 1), SetResize(1, 1), SetPadding(WidgetDimensions::unscaled.picker), + SetMatrixDataTip(1, 0, STR_NULL), SetScrollbar(WID_PW_CLASS_SCROLL), + EndContainer(), + NWidget(NWID_VSCROLLBAR, COLOUR_DARK_GREEN, WID_PW_CLASS_SCROLL), + EndContainer(), + EndContainer(), + EndContainer(), + }; + + return MakeNWidgets(std::begin(picker_class_widgets), std::end(picker_class_widgets), nullptr); +} + +/** Create nested widgets for the type picker widgets. */ +std::unique_ptr MakePickerTypeWidgets() +{ + static constexpr NWidgetPart picker_type_widgets[] = { + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_PW_TYPE_SEL), + NWidget(NWID_VERTICAL), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN), + NWidget(WWT_EDITBOX, COLOUR_DARK_GREEN, WID_PW_TYPE_FILTER), SetPadding(2), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), + EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetScrollbar(WID_PW_TYPE_SCROLL), + NWidget(NWID_MATRIX, COLOUR_DARK_GREEN, WID_PW_TYPE_MATRIX), SetPIP(0, 2, 0), SetPadding(WidgetDimensions::unscaled.picker), + NWidget(WWT_PANEL, COLOUR_GREY, WID_PW_TYPE_ITEM), SetScrollbar(WID_PW_TYPE_SCROLL), + EndContainer(), + EndContainer(), + EndContainer(), + NWidget(NWID_VSCROLLBAR, COLOUR_DARK_GREEN, WID_PW_TYPE_SCROLL), + EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN), + NWidget(WWT_EMPTY, INVALID_COLOUR, WID_PW_TYPE_NAME), SetPadding(WidgetDimensions::unscaled.framerect), SetResize(1, 0), SetFill(1, 0), SetMinimalTextLines(1, 0), + EndContainer(), + NWidget(WWT_RESIZEBOX, COLOUR_DARK_GREEN, WID_PW_TYPE_RESIZE), + EndContainer(), + EndContainer(), + EndContainer(), + }; + + return MakeNWidgets(std::begin(picker_type_widgets), std::end(picker_type_widgets), nullptr); +} diff --git a/src/picker_gui.h b/src/picker_gui.h new file mode 100644 index 0000000000..861abe0811 --- /dev/null +++ b/src/picker_gui.h @@ -0,0 +1,181 @@ +/* + * 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 picker_gui.h Functions/types etc. related to the picker GUI. */ + +#ifndef PICKER_GUI_H +#define PICKER_GUI_H + +#include "querystring_gui.h" +#include "sortlist_type.h" +#include "stringfilter_type.h" +#include "strings_type.h" +#include "timer/timer.h" +#include "timer/timer_game_calendar.h" +#include "window_gui.h" +#include "window_type.h" + +struct PickerItem { + uint32_t grfid; + uint16_t local_id; + int class_index; + int index; + + inline auto operator<=>(const PickerItem &other) const + { + if (auto cmp = this->grfid <=> other.grfid; cmp != 0) return cmp; + return this->local_id <=> other.local_id; + } +}; + +/** Class for PickerClassWindow to collect information and retain state. */ +class PickerCallbacks { +public: + virtual ~PickerCallbacks() {} + virtual void Close(int) { } + + /** Should picker class/type selection be enabled? */ + virtual bool IsActive() const = 0; + /** Are there multiple classes to chose from? */ + virtual bool HasClassChoice() const = 0; + + /* Class callbacks */ + /** Get the tooltip string for the class list. */ + virtual StringID GetClassTooltip() const = 0; + /** Get the number of classes. @note Used only to estimate space requirements. */ + virtual int GetClassCount() const = 0; + /** Get the index of the selected class. */ + virtual int GetSelectedClass() const = 0; + /** Set the selected class. */ + virtual void SetSelectedClass(int id) const = 0; + /** Get the name of a class. */ + virtual StringID GetClassName(int id) const = 0; + + /* Type callbacks */ + /** Get the tooltip string for the type grid. */ + virtual StringID GetTypeTooltip() const = 0; + /** Get the number of types in a class. @note Used only to estimate space requirements. */ + virtual int GetTypeCount(int cls_id) const = 0; + + /** Get the selected type. */ + virtual int GetSelectedType() const = 0; + /** Set the selected type. */ + virtual void SetSelectedType(int id) const = 0; + /** Get data about an item. */ + virtual PickerItem GetPickerItem(int cls_id, int id) const = 0; + /** Get the item of a type. */ + virtual StringID GetTypeName(int cls_id, int id) const = 0; + /** Test if an item is currently buildable. */ + virtual bool IsTypeAvailable(int cls_id, int id) const = 0; + /** Draw preview image of an item. */ + virtual void DrawType(int x, int y, int cls_id, int id) const = 0; + + Listing class_last_sorting = { false, 0 }; ///< Default sorting of #PickerClassList. + Filtering class_last_filtering = { false, 0 }; ///< Default filtering of #PickerClassList. + + Listing type_last_sorting = { false, 0 }; ///< Default sorting of #PickerTypeList. + Filtering type_last_filtering = { false, 0 }; ///< Default filtering of #PickerTypeList. +}; + +/** Helper for PickerCallbacks when the class system is based on NewGRFClass. */ +template +class PickerCallbacksNewGRFClass : public PickerCallbacks { +public: + inline typename T::index_type GetClassIndex(int cls_id) const { return static_cast(cls_id); } + inline const T *GetClass(int cls_id) const { return T::Get(this->GetClassIndex(cls_id)); } + inline const typename T::spec_type *GetSpec(int cls_id, int id) const { return this->GetClass(cls_id)->GetSpec(id); } + + bool HasClassChoice() const override { return T::GetUIClassCount() > 1; } + + int GetClassCount() const override { return T::GetClassCount(); } + int GetTypeCount(int cls_id) const override { return this->GetClass(cls_id)->GetSpecCount(); } + + PickerItem GetPickerItem(const typename T::spec_type *spec, int cls_id = -1, int id = -1) const + { + if (spec == nullptr) return {0, 0, cls_id, id}; + return {spec->grf_prop.grffile == nullptr ? 0 : spec->grf_prop.grffile->grfid, spec->grf_prop.local_id, spec->class_index, spec->index}; + } + + PickerItem GetPickerItem(int cls_id, int id) const override + { + return GetPickerItem(GetClass(cls_id)->GetSpec(id), cls_id, id); + } +}; + +struct PickerFilterData : StringFilter { + const PickerCallbacks *callbacks; ///< Callbacks for filter functions to access to callbacks. +}; + +using PickerClassList = GUIList; ///< GUIList holding classes to display. +using PickerTypeList = GUIList; ///< GUIList holding classes/types to display. + +class PickerWindow : public PickerWindowBase { +public: + enum PickerFilterInvalidation { + PFI_CLASS = 1U << 0, ///< Refresh the class list. + PFI_TYPE = 1U << 1, ///< Refresh the type list. + PFI_POSITION = 1U << 2, ///< Update scroll positions. + PFI_VALIDATE = 1U << 3, ///< Validate selected item. + }; + + static const int PREVIEW_WIDTH = 64; ///< Width of each preview button. + static const int PREVIEW_HEIGHT = 48; ///< Height of each preview button. + static const int PREVIEW_LEFT = 31; ///< Offset from left edge to draw preview. + static const int PREVIEW_BOTTOM = 31; ///< Offset from bottom edge to draw preview. + + static const uint EDITBOX_MAX_SIZE = 16; ///< The maximum number of characters for the filter edit box. + + bool has_class_picker = false; ///< Set if this window has a class picker 'component'. + bool has_type_picker = false; ///< Set if this window has a type picker 'component'. + + PickerWindow(WindowDesc *desc, Window *parent, int window_number, PickerCallbacks &callbacks); + void Close(int data = 0) override; + void UpdateWidgetSize(WidgetID widget, Dimension &size, const Dimension &padding, Dimension &fill, Dimension &resize) override; + void DrawWidget(const Rect &r, WidgetID widget) const override; + void OnResize() override; + void OnClick(Point pt, WidgetID widget, int click_count) override; + void OnInvalidateData(int data = 0, bool gui_scope = true) override; + EventState OnHotkey(int hotkey) override; + void OnEditboxChanged(WidgetID wid) override; + + /** Enum referring to the Hotkeys in the picker window */ + enum PickerClassWindowHotkeys { + PCWHK_FOCUS_FILTER_BOX, ///< Focus the edit box for editing the filter string + }; + +protected: + void ConstructWindow(); + + PickerCallbacks &callbacks; + +private: + PickerClassList classes; ///< List of classes. + PickerFilterData class_string_filter; + QueryString class_editbox; ///< Filter editbox. + + void BuildPickerClassList(); + void EnsureSelectedClassIsValid(); + void EnsureSelectedClassIsVisible(); + + PickerTypeList types; ///< List of types. + PickerFilterData type_string_filter; + QueryString type_editbox; ///< Filter editbox + + void BuildPickerTypeList(); + void EnsureSelectedTypeIsValid(); + void EnsureSelectedTypeIsVisible(); + + IntervalTimer yearly_interval = {{TimerGameCalendar::YEAR, TimerGameCalendar::Priority::NONE}, [this](auto) { + this->SetDirty(); + }}; +}; + +class NWidgetBase; +std::unique_ptr MakePickerClassWidgets(); +std::unique_ptr MakePickerTypeWidgets(); + +#endif /* PICKER_GUI_H */ diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 9d6728804b..eea214f670 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -32,16 +32,13 @@ #include "vehicle_func.h" #include "zoom_func.h" #include "rail_gui.h" -#include "querystring_gui.h" -#include "sortlist_type.h" -#include "stringfilter_type.h" -#include "string_func.h" #include "station_cmd.h" #include "tunnelbridge_cmd.h" #include "waypoint_cmd.h" #include "rail_cmd.h" #include "timer/timer.h" #include "timer/timer_game_calendar.h" +#include "picker_gui.h" #include "station_map.h" #include "tunnelbridge_map.h" @@ -54,20 +51,22 @@ static RailType _cur_railtype; ///< Rail type of the current build-rail toolbar. static bool _remove_button_clicked; ///< Flag whether 'remove' toggle-button is currently enabled static DiagDirection _build_depot_direction; ///< Currently selected depot direction -static uint16_t _cur_waypoint_type; ///< Currently selected waypoint type static bool _convert_signal_button; ///< convert signal button in the signal GUI pressed static SignalVariant _cur_signal_variant; ///< set the signal variant (for signal GUI) static SignalType _cur_signal_type; ///< set the signal type (for signal GUI) -struct RailStationGUISettings { - Axis orientation; ///< Currently selected rail station orientation - - bool newstations; ///< Are custom station definitions available? - StationClassID station_class; ///< Currently selected custom station class (if newstations is \c true ) - uint16_t station_type; ///< %Station type within the currently selected custom station class (if newstations is \c true ) - uint16_t station_count; ///< Number of custom stations (if newstations is \c true ) +struct WaypointPickerSelection { + StationClassID sel_class; ///< Selected station class. + uint16_t sel_type; ///< Selected station type within the class. }; -static RailStationGUISettings _railstation; ///< Settings of the station builder GUI +static WaypointPickerSelection _waypoint_gui; ///< Settings of the waypoint picker. + +struct StationPickerSelection { + StationClassID sel_class; ///< Selected station class. + uint16_t sel_type; ///< Selected station type within the class. + Axis axis; ///< Selected orientation of the station. +}; +static StationPickerSelection _station_gui; ///< Settings of the station picker. static void HandleStationPlacement(TileIndex start, TileIndex end); @@ -181,7 +180,7 @@ void CcStation(Commands, const CommandCost &result, TileIndex tile) if (_settings_client.sound.confirm) SndPlayTileFx(SND_20_CONSTRUCTION_RAIL, tile); /* Only close the station builder window if the default station and non persistent building is chosen. */ - if (_railstation.station_class == STAT_CLASS_DFLT && _railstation.station_type == 0 && !_settings_client.gui.persistent_buildingtools) ResetObjectToPlace(); + if (_station_gui.sel_class == STAT_CLASS_DFLT && _station_gui.sel_type == 0 && !_settings_client.gui.persistent_buildingtools) ResetObjectToPlace(); } /** @@ -199,9 +198,9 @@ static void PlaceRail_Station(TileIndex tile) } else { int w = _settings_client.gui.station_numtracks; int h = _settings_client.gui.station_platlength; - if (!_railstation.orientation) Swap(w, h); + if (!_station_gui.axis) Swap(w, h); - RailStationGUISettings params = _railstation; + StationPickerSelection params = _station_gui; RailType rt = _cur_railtype; uint8_t numtracks = _settings_client.gui.station_numtracks; uint8_t platlength = _settings_client.gui.station_platlength; @@ -209,9 +208,9 @@ static void PlaceRail_Station(TileIndex tile) auto proc = [=](bool test, StationID to_join) -> bool { if (test) { - return Command::Do(CommandFlagsToDCFlags(GetCommandFlags()), tile, rt, params.orientation, numtracks, platlength, params.station_class, params.station_type, INVALID_STATION, adjacent).Succeeded(); + return Command::Do(CommandFlagsToDCFlags(GetCommandFlags()), tile, rt, params.axis, numtracks, platlength, params.sel_class, params.sel_type, INVALID_STATION, adjacent).Succeeded(); } else { - return Command::Post(STR_ERROR_CAN_T_BUILD_RAILROAD_STATION, CcStation, tile, rt, params.orientation, numtracks, platlength, params.station_class, params.station_type, to_join, adjacent); + return Command::Post(STR_ERROR_CAN_T_BUILD_RAILROAD_STATION, CcStation, tile, rt, params.axis, numtracks, platlength, params.sel_class, params.sel_type, to_join, adjacent); } }; @@ -363,7 +362,7 @@ static void BuildRailClick_Remove(Window *w) if (!_settings_client.gui.station_dragdrop) { int x = _settings_client.gui.station_numtracks; int y = _settings_client.gui.station_platlength; - if (_railstation.orientation == 0) Swap(x, y); + if (_station_gui.axis == 0) Swap(x, y); SetTileSelectSize(x, y); } else { VpSetPlaceSizingLimit(_settings_game.station.station_spread); @@ -602,7 +601,7 @@ struct BuildRailToolbarWindow : Window { case WID_RAT_BUILD_WAYPOINT: this->last_user_action = widget; - if (HandlePlacePushButton(this, WID_RAT_BUILD_WAYPOINT, SPR_CURSOR_WAYPOINT, HT_RECT) && StationClass::Get(STAT_CLASS_WAYP)->GetSpecCount() > 1) { + if (HandlePlacePushButton(this, WID_RAT_BUILD_WAYPOINT, SPR_CURSOR_WAYPOINT, HT_RECT)) { ShowBuildWaypointPicker(this); } break; @@ -766,13 +765,12 @@ struct BuildRailToolbarWindow : Window { TileArea ta(start_tile, end_tile); Axis axis = select_method == VPM_X_LIMITED ? AXIS_X : AXIS_Y; bool adjacent = _ctrl_pressed; - uint16_t waypoint_type = _cur_waypoint_type; auto proc = [=](bool test, StationID to_join) -> bool { if (test) { - return Command::Do(CommandFlagsToDCFlags(GetCommandFlags()), ta.tile, axis, ta.w, ta.h, STAT_CLASS_WAYP, waypoint_type, INVALID_STATION, adjacent).Succeeded(); + return Command::Do(CommandFlagsToDCFlags(GetCommandFlags()), ta.tile, axis, ta.w, ta.h, _waypoint_gui.sel_class, _waypoint_gui.sel_type, INVALID_STATION, adjacent).Succeeded(); } else { - return Command::Post(STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT, CcPlaySound_CONSTRUCTION_RAIL, ta.tile, axis, ta.w, ta.h, STAT_CLASS_WAYP, waypoint_type, to_join, adjacent); + return Command::Post(STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT, CcPlaySound_CONSTRUCTION_RAIL, ta.tile, axis, ta.w, ta.h, _waypoint_gui.sel_class, _waypoint_gui.sel_type, to_join, adjacent); } }; @@ -929,65 +927,83 @@ static void HandleStationPlacement(TileIndex start, TileIndex end) uint numtracks = ta.w; uint platlength = ta.h; - if (_railstation.orientation == AXIS_X) Swap(numtracks, platlength); + if (_station_gui.axis == AXIS_X) Swap(numtracks, platlength); - RailStationGUISettings params = _railstation; + StationPickerSelection params = _station_gui; RailType rt = _cur_railtype; bool adjacent = _ctrl_pressed; auto proc = [=](bool test, StationID to_join) -> bool { if (test) { - return Command::Do(CommandFlagsToDCFlags(GetCommandFlags()), ta.tile, rt, params.orientation, numtracks, platlength, params.station_class, params.station_type, INVALID_STATION, adjacent).Succeeded(); + return Command::Do(CommandFlagsToDCFlags(GetCommandFlags()), ta.tile, rt, params.axis, numtracks, platlength, params.sel_class, params.sel_type, INVALID_STATION, adjacent).Succeeded(); } else { - return Command::Post(STR_ERROR_CAN_T_BUILD_RAILROAD_STATION, CcStation, ta.tile, rt, params.orientation, numtracks, platlength, params.station_class, params.station_type, to_join, adjacent); + return Command::Post(STR_ERROR_CAN_T_BUILD_RAILROAD_STATION, CcStation, ta.tile, rt, params.axis, numtracks, platlength, params.sel_class, params.sel_type, to_join, adjacent); } }; ShowSelectStationIfNeeded(ta, proc); } -/** Enum referring to the Hotkeys in the build rail station window */ -enum BuildRalStationHotkeys { - BRASHK_FOCUS_FILTER_BOX, ///< Focus the edit box for editing the filter string -}; +class StationPickerCallbacks : public PickerCallbacksNewGRFClass { +public: + StringID GetClassTooltip() const override { return STR_PICKER_STATION_CLASS_TOOLTIP; } + StringID GetTypeTooltip() const override { return STR_PICKER_STATION_TYPE_TOOLTIP; } -struct BuildRailStationWindow : public PickerWindowBase { -private: - uint line_height; ///< Height of a single line in the newstation selection matrix (#WID_BRAS_NEWST_LIST widget). - uint coverage_height; ///< Height of the coverage texts. - Scrollbar *vscroll; ///< Vertical scrollbar of the new station list. - Scrollbar *vscroll2; ///< Vertical scrollbar of the matrix with new stations. - - typedef GUIList GUIStationClassList; ///< Type definition for the list to hold available station classes. - - static const uint EDITBOX_MAX_SIZE = 16; ///< The maximum number of characters for the filter edit box. - - static Listing last_sorting; ///< Default sorting of #GUIStationClassList. - static Filtering last_filtering; ///< Default filtering of #GUIStationClassList. - static const std::initializer_list sorter_funcs; ///< Sort functions of the #GUIStationClassList. - static const std::initializer_list filter_funcs; ///< Filter functions of the #GUIStationClassList. - GUIStationClassList station_classes; ///< Available station classes. - StringFilter string_filter; ///< Filter for available station classes. - QueryString filter_editbox; ///< Filter editbox. - - /** - * Scrolls #WID_BRAS_NEWST_SCROLL so that the selected station class is visible. - * - * Note that this method should be called shortly after SelectClassAndStation() which will ensure - * an actual existing station class is selected, or the one at position 0 which will always be - * the default TTD rail station. - */ - void EnsureSelectedStationClassIsVisible() + bool IsActive() const override { - uint pos = 0; - for (auto station_class : this->station_classes) { - if (station_class == _railstation.station_class) break; - pos++; + for (const auto &cls : StationClass::Classes()) { + if (IsWaypointClass(cls)) continue; + for (const auto *spec : cls.Specs()) { + if (spec != nullptr) return true; + } } - this->vscroll->SetCount(this->station_classes.size()); - this->vscroll->ScrollTowards(pos); + return false; } + bool HasClassChoice() const override + { + return std::count_if(std::begin(StationClass::Classes()), std::end(StationClass::Classes()), std::not_fn(IsWaypointClass)) > 1; + } + + int GetSelectedClass() const override { return _station_gui.sel_class; } + void SetSelectedClass(int id) const override { _station_gui.sel_class = this->GetClassIndex(id); } + + StringID GetClassName(int id) const override + { + const auto *sc = GetClass(id); + if (IsWaypointClass(*sc)) return INVALID_STRING_ID; + return sc->name; + } + + int GetSelectedType() const override { return _station_gui.sel_type; } + void SetSelectedType(int id) const override { _station_gui.sel_type = id; } + + StringID GetTypeName(int cls_id, int id) const override + { + const auto *spec = this->GetSpec(cls_id, id); + return (spec == nullptr) ? STR_STATION_CLASS_DFLT_STATION : spec->name; + } + + bool IsTypeAvailable(int cls_id, int id) const override + { + return IsStationAvailable(this->GetSpec(cls_id, id)); + } + + void DrawType(int x, int y, int cls_id, int id) const override + { + if (!DrawStationTile(x, y, _cur_railtype, _station_gui.axis, this->GetClassIndex(cls_id), id)) { + StationPickerDrawSprite(x, y, STATION_RAIL, _cur_railtype, INVALID_ROADTYPE, 2 + _station_gui.axis); + } + } + + static StationPickerCallbacks instance; +}; +/* static */ StationPickerCallbacks StationPickerCallbacks::instance; + +struct BuildRailStationWindow : public PickerWindow { +private: + uint coverage_height; ///< Height of the coverage texts. + /** * Verify whether the currently selected station size is allowed after selecting a new station class/type. * If not, change the station size variables ( _settings_client.gui.station_numtracks and _settings_client.gui.station_platlength ). @@ -1022,38 +1038,16 @@ private: } public: - BuildRailStationWindow(WindowDesc *desc, Window *parent, bool newstation) : PickerWindowBase(desc, parent), filter_editbox(EDITBOX_MAX_SIZE * MAX_CHAR_LENGTH, EDITBOX_MAX_SIZE) + BuildRailStationWindow(WindowDesc *desc, Window *parent) : PickerWindow(desc, parent, TRANSPORT_RAIL, StationPickerCallbacks::instance) { this->coverage_height = 2 * GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal; - this->vscroll = nullptr; - _railstation.newstations = newstation; + this->ConstructWindow(); + this->InvalidateData(); + } - this->CreateNestedTree(); - this->GetWidget(WID_BRAS_SHOW_NEWST_ADDITIONS)->SetDisplayedPlane(newstation ? 0 : SZSP_NONE); - this->GetWidget(WID_BRAS_SHOW_NEWST_MATRIX)->SetDisplayedPlane(newstation ? 0 : SZSP_NONE); - this->GetWidget(WID_BRAS_SHOW_NEWST_DEFSIZE)->SetDisplayedPlane(newstation ? 0 : SZSP_NONE); - this->GetWidget(WID_BRAS_SHOW_NEWST_RESIZE)->SetDisplayedPlane(newstation ? 0 : SZSP_NONE); - /* Hide the station class filter if no stations other than the default one are available. */ - this->GetWidget(WID_BRAS_FILTER_CONTAINER)->SetDisplayedPlane(newstation ? 0 : SZSP_NONE); - if (newstation) { - this->vscroll = this->GetScrollbar(WID_BRAS_NEWST_SCROLL); - this->vscroll2 = this->GetScrollbar(WID_BRAS_MATRIX_SCROLL); - - this->querystrings[WID_BRAS_FILTER_EDITBOX] = &this->filter_editbox; - this->station_classes.SetListing(this->last_sorting); - this->station_classes.SetFiltering(this->last_filtering); - this->station_classes.SetSortFuncs(this->sorter_funcs); - this->station_classes.SetFilterFuncs(this->filter_funcs); - } - - this->station_classes.ForceRebuild(); - - BuildStationClassesAvailable(); - SelectClassAndStation(); - - this->FinishInitNested(TRANSPORT_RAIL); - - this->LowerWidget(WID_BRAS_PLATFORM_DIR_X + _railstation.orientation); + void OnInit() override + { + this->LowerWidget(WID_BRAS_PLATFORM_DIR_X + _station_gui.axis); if (_settings_client.gui.station_dragdrop) { this->LowerWidget(WID_BRAS_PLATFORM_DRAG_N_DROP); } else { @@ -1063,138 +1057,35 @@ public: this->SetWidgetLoweredState(WID_BRAS_HIGHLIGHT_OFF, !_settings_client.gui.station_show_coverage); this->SetWidgetLoweredState(WID_BRAS_HIGHLIGHT_ON, _settings_client.gui.station_show_coverage); - if (!newstation) { - _railstation.station_class = StationClassID::STAT_CLASS_DFLT; - _railstation.station_type = 0; - this->vscroll2 = nullptr; - } else { - _railstation.station_count = StationClass::Get(_railstation.station_class)->GetSpecCount(); - _railstation.station_type = std::min(_railstation.station_type, _railstation.station_count - 1); - - NWidgetMatrix *matrix = this->GetWidget(WID_BRAS_MATRIX); - matrix->SetScrollbar(this->vscroll2); - matrix->SetCount(_railstation.station_count); - matrix->SetClicked(_railstation.station_type); - - EnsureSelectedStationClassIsVisible(); - } - - this->InvalidateData(); + this->PickerWindow::OnInit(); } void Close([[maybe_unused]] int data = 0) override { CloseWindowById(WC_SELECT_STATION, 0); - this->PickerWindowBase::Close(); - } - - /** Sort station classes by StationClassID. */ - static bool StationClassIDSorter(StationClassID const &a, StationClassID const &b) - { - return a < b; - } - - /** Filter station classes by class name. */ - static bool TagNameFilter(StationClassID const * sc, StringFilter &filter) - { - filter.ResetState(); - filter.AddLine(GetString(StationClass::Get(*sc)->name)); - return filter.GetState(); - } - - /** Builds the filter list of available station classes. */ - void BuildStationClassesAvailable() - { - if (!this->station_classes.NeedRebuild()) return; - - this->station_classes.clear(); - this->station_classes.reserve(StationClass::GetClassCount()); - - for (const auto &cls : StationClass::Classes()) { - /* Skip waypoints. */ - if (IsWaypointClass(cls)) continue; - if (cls.GetUISpecCount() == 0) continue; - station_classes.push_back(cls.Index()); - } - - if (_railstation.newstations) { - this->station_classes.Filter(this->string_filter); - this->station_classes.RebuildDone(); - this->station_classes.Sort(); - - this->vscroll->SetCount(this->station_classes.size()); - } - } - - /** - * Checks if the previously selected current station class and station - * can be shown as selected to the user when the dialog is opened. - */ - void SelectClassAndStation() - { - if (_railstation.station_class == StationClassID::STAT_CLASS_DFLT) { - /* This happens during the first time the window is open during the game life cycle. */ - this->SelectOtherClass(StationClassID::STAT_CLASS_DFLT); - } else { - /* Check if the previously selected station class is not available anymore as a - * result of starting a new game without the corresponding NewGRF. */ - bool available = _railstation.station_class < StationClass::GetClassCount(); - this->SelectOtherClass(available ? _railstation.station_class : StationClassID::STAT_CLASS_DFLT); - } - } - - /** - * Select the specified station class. - * @param station_class Station class select. - */ - void SelectOtherClass(StationClassID station_class) - { - _railstation.station_class = station_class; + this->PickerWindow::Close(); } void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override { - if (!gui_scope) return; - - this->BuildStationClassesAvailable(); - } - - EventState OnHotkey(int hotkey) override - { - switch (hotkey) { - case BRASHK_FOCUS_FILTER_BOX: - this->SetFocusedWidget(WID_BRAS_FILTER_EDITBOX); - SetFocusedWindow(this); // The user has asked to give focus to the text box, so make sure this window is focused. - break; - - default: - return ES_NOT_HANDLED; + if (gui_scope) { + const StationSpec *statspec = StationClass::Get(_station_gui.sel_class)->GetSpec(_station_gui.sel_type); + this->CheckSelectedSize(statspec); } - return ES_HANDLED; - } - - void OnEditboxChanged(WidgetID widget) override - { - if (widget == WID_BRAS_FILTER_EDITBOX) { - string_filter.SetFilterTerm(this->filter_editbox.text.buf); - this->station_classes.SetFilterState(!string_filter.IsEmpty()); - this->station_classes.ForceRebuild(); - this->InvalidateData(); - } + this->PickerWindow::OnInvalidateData(data, gui_scope); } void OnPaint() override { - bool newstations = _railstation.newstations; - const StationSpec *statspec = newstations ? StationClass::Get(_railstation.station_class)->GetSpec(_railstation.station_type) : nullptr; + const StationSpec *statspec = StationClass::Get(_station_gui.sel_class)->GetSpec(_station_gui.sel_type); if (_settings_client.gui.station_dragdrop) { SetTileSelectSize(1, 1); } else { int x = _settings_client.gui.station_numtracks; int y = _settings_client.gui.station_platlength; - if (_railstation.orientation == AXIS_X) Swap(x, y); + if (_station_gui.axis == AXIS_X) Swap(x, y); if (!_remove_button_clicked) { SetTileSelectSize(x, y); } @@ -1235,54 +1126,18 @@ public: void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { - case WID_BRAS_NEWST_LIST: { - Dimension d = {0, 0}; - for (auto station_class : this->station_classes) { - d = maxdim(d, GetStringBoundingBox(StationClass::Get(station_class)->name)); - } - size.width = std::max(size.width, d.width + padding.width); - this->line_height = GetCharacterHeight(FS_NORMAL) + padding.height; - size.height = 5 * this->line_height; - resize.height = this->line_height; - break; - } - - case WID_BRAS_SHOW_NEWST_TYPE: { - if (!_railstation.newstations) { - size.width = 0; - size.height = 0; - break; - } - - /* If newstations exist, compute the non-zero minimal size. */ - Dimension d = {0, 0}; - StringID str = this->GetWidget(widget)->widget_data; - for (auto station_class : this->station_classes) { - StationClass *stclass = StationClass::Get(station_class); - for (uint j = 0; j < stclass->GetSpecCount(); j++) { - const StationSpec *statspec = stclass->GetSpec(j); - SetDParam(0, (statspec != nullptr && statspec->name != 0) ? statspec->name : STR_STATION_CLASS_DFLT_STATION); - d = maxdim(d, GetStringBoundingBox(str)); - } - } - size.width = std::max(size.width, d.width + padding.width); - break; - } - case WID_BRAS_PLATFORM_DIR_X: case WID_BRAS_PLATFORM_DIR_Y: - case WID_BRAS_IMAGE: - size.width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); - size.height = ScaleGUITrad(58) + WidgetDimensions::scaled.fullbevel.Vertical(); + size.width = ScaleGUITrad(PREVIEW_WIDTH) + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height = ScaleGUITrad(PREVIEW_HEIGHT) + WidgetDimensions::scaled.fullbevel.Vertical(); break; case WID_BRAS_COVERAGE_TEXTS: size.height = this->coverage_height; break; - case WID_BRAS_MATRIX: - fill.height = 1; - resize.height = 1; + default: + this->PickerWindow::UpdateWidgetSize(widget, size, padding, fill, resize); break; } } @@ -1297,9 +1152,9 @@ public: Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); if (FillDrawPixelInfo(&tmp_dpi, ir)) { AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); - int x = (ir.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); - int y = (ir.Height() + ScaleSpriteTrad(58)) / 2 - ScaleSpriteTrad(31); - if (!DrawStationTile(x, y, _cur_railtype, AXIS_X, _railstation.station_class, _railstation.station_type)) { + int x = (ir.Width() - ScaleSpriteTrad(PREVIEW_WIDTH)) / 2 + ScaleSpriteTrad(PREVIEW_LEFT); + int y = (ir.Height() + ScaleSpriteTrad(PREVIEW_HEIGHT)) / 2 - ScaleSpriteTrad(PREVIEW_BOTTOM); + if (!DrawStationTile(x, y, _cur_railtype, AXIS_X, _station_gui.sel_class, _station_gui.sel_type)) { StationPickerDrawSprite(x, y, STATION_RAIL, _cur_railtype, INVALID_ROADTYPE, 2); } } @@ -1311,66 +1166,18 @@ public: Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); if (FillDrawPixelInfo(&tmp_dpi, ir)) { AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); - int x = (ir.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); - int y = (ir.Height() + ScaleSpriteTrad(58)) / 2 - ScaleSpriteTrad(31); - if (!DrawStationTile(x, y, _cur_railtype, AXIS_Y, _railstation.station_class, _railstation.station_type)) { + int x = (ir.Width() - ScaleSpriteTrad(PREVIEW_WIDTH)) / 2 + ScaleSpriteTrad(PREVIEW_LEFT); + int y = (ir.Height() + ScaleSpriteTrad(PREVIEW_HEIGHT)) / 2 - ScaleSpriteTrad(PREVIEW_BOTTOM); + if (!DrawStationTile(x, y, _cur_railtype, AXIS_Y, _station_gui.sel_class, _station_gui.sel_type)) { StationPickerDrawSprite(x, y, STATION_RAIL, _cur_railtype, INVALID_ROADTYPE, 3); } } break; } - case WID_BRAS_NEWST_LIST: { - Rect ir = r.Shrink(WidgetDimensions::scaled.matrix); - uint statclass = 0; - for (auto station_class : this->station_classes) { - if (this->vscroll->IsVisible(statclass)) { - DrawString(ir, - StationClass::Get(station_class)->name, - station_class == _railstation.station_class ? TC_WHITE : TC_BLACK); - ir.top += this->line_height; - } - statclass++; - } + default: + this->PickerWindow::DrawWidget(r, widget); break; - } - - case WID_BRAS_IMAGE: { - uint16_t type = this->GetWidget(widget)->GetParentWidget()->GetCurrentElement(); - assert(type < _railstation.station_count); - /* Check station availability callback */ - const StationSpec *statspec = StationClass::Get(_railstation.station_class)->GetSpec(type); - - /* Set up a clipping area for the station preview. */ - Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); - if (FillDrawPixelInfo(&tmp_dpi, ir)) { - AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); - int x = (ir.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); - int y = (ir.Height() + ScaleSpriteTrad(58)) / 2 - ScaleSpriteTrad(31); - if (!DrawStationTile(x, y, _cur_railtype, _railstation.orientation, _railstation.station_class, type)) { - StationPickerDrawSprite(x, y, STATION_RAIL, _cur_railtype, INVALID_ROADTYPE, 2 + _railstation.orientation); - } - } - if (!IsStationAvailable(statspec)) { - GfxFillRect(ir, PC_BLACK, FILLRECT_CHECKER); - } - break; - } - } - } - - void OnResize() override - { - if (this->vscroll != nullptr) { // New stations available. - this->vscroll->SetCapacityFromWidget(this, WID_BRAS_NEWST_LIST); - } - } - - void SetStringParameters(WidgetID widget) const override - { - if (widget == WID_BRAS_SHOW_NEWST_TYPE) { - const StationSpec *statspec = StationClass::Get(_railstation.station_class)->GetSpec(_railstation.station_type); - SetDParam(0, (statspec != nullptr && statspec->name != 0) ? statspec->name : STR_STATION_CLASS_DFLT_STATION); } } @@ -1379,9 +1186,9 @@ public: switch (widget) { case WID_BRAS_PLATFORM_DIR_X: case WID_BRAS_PLATFORM_DIR_Y: - this->RaiseWidget(WID_BRAS_PLATFORM_DIR_X + _railstation.orientation); - _railstation.orientation = (Axis)(widget - WID_BRAS_PLATFORM_DIR_X); - this->LowerWidget(WID_BRAS_PLATFORM_DIR_X + _railstation.orientation); + this->RaiseWidget(WID_BRAS_PLATFORM_DIR_X + _station_gui.axis); + _station_gui.axis = (Axis)(widget - WID_BRAS_PLATFORM_DIR_X); + this->LowerWidget(WID_BRAS_PLATFORM_DIR_X + _station_gui.axis); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); this->SetDirty(); CloseWindowById(WC_SELECT_STATION, 0); @@ -1400,7 +1207,7 @@ public: _settings_client.gui.station_numtracks = widget - WID_BRAS_PLATFORM_NUM_BEGIN; _settings_client.gui.station_dragdrop = false; - const StationSpec *statspec = _railstation.newstations ? StationClass::Get(_railstation.station_class)->GetSpec(_railstation.station_type) : nullptr; + const StationSpec *statspec = StationClass::Get(_station_gui.sel_class)->GetSpec(_station_gui.sel_type); if (statspec != nullptr && HasBit(statspec->disallowed_lengths, _settings_client.gui.station_platlength - 1)) { /* The previously selected number of platforms in invalid */ for (uint i = 0; i < 7; i++) { @@ -1433,7 +1240,7 @@ public: _settings_client.gui.station_platlength = widget - WID_BRAS_PLATFORM_LEN_BEGIN; _settings_client.gui.station_dragdrop = false; - const StationSpec *statspec = _railstation.newstations ? StationClass::Get(_railstation.station_class)->GetSpec(_railstation.station_type) : nullptr; + const StationSpec *statspec = StationClass::Get(_station_gui.sel_class)->GetSpec(_station_gui.sel_type); if (statspec != nullptr && HasBit(statspec->disallowed_platforms, _settings_client.gui.station_numtracks - 1)) { /* The previously selected number of tracks in invalid */ for (uint i = 0; i < 7; i++) { @@ -1459,7 +1266,7 @@ public: this->ToggleWidgetLoweredState(WID_BRAS_PLATFORM_DRAG_N_DROP); /* get the first allowed length/number of platforms */ - const StationSpec *statspec = _railstation.newstations ? StationClass::Get(_railstation.station_class)->GetSpec(_railstation.station_type) : nullptr; + const StationSpec *statspec = StationClass::Get(_station_gui.sel_class)->GetSpec(_station_gui.sel_type); if (statspec != nullptr && HasBit(statspec->disallowed_lengths, _settings_client.gui.station_platlength - 1)) { for (uint i = 0; i < 7; i++) { if (!HasBit(statspec->disallowed_lengths, i)) { @@ -1498,46 +1305,9 @@ public: SetViewportCatchmentStation(nullptr, true); break; - case WID_BRAS_NEWST_LIST: { - auto it = this->vscroll->GetScrolledItemFromWidget(this->station_classes, pt.y, this, WID_BRAS_NEWST_LIST); - if (it == this->station_classes.end()) return; - StationClassID station_class_id = *it; - if (_railstation.station_class != station_class_id) { - StationClass *station_class = StationClass::Get(station_class_id); - _railstation.station_class = station_class_id; - _railstation.station_count = station_class->GetSpecCount(); - _railstation.station_type = 0; - - this->CheckSelectedSize(station_class->GetSpec(_railstation.station_type)); - - NWidgetMatrix *matrix = this->GetWidget(WID_BRAS_MATRIX); - matrix->SetCount(_railstation.station_count); - matrix->SetClicked(_railstation.station_type); - } - if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); - this->SetDirty(); - CloseWindowById(WC_SELECT_STATION, 0); + default: + this->PickerWindow::OnClick(pt, widget, click_count); break; - } - - case WID_BRAS_IMAGE: { - uint16_t y = this->GetWidget(widget)->GetParentWidget()->GetCurrentElement(); - if (y >= _railstation.station_count) return; - - /* Check station availability callback */ - const StationSpec *statspec = StationClass::Get(_railstation.station_class)->GetSpec(y); - if (!IsStationAvailable(statspec)) return; - - _railstation.station_type = y; - - this->CheckSelectedSize(statspec); - this->GetWidget(widget)->GetParentWidget()->SetClicked(_railstation.station_type); - - if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); - this->SetDirty(); - CloseWindowById(WC_SELECT_STATION, 0); - break; - } } } @@ -1546,10 +1316,6 @@ public: CheckRedrawStationCoverage(this); } - IntervalTimer yearly_interval = {{TimerGameCalendar::YEAR, TimerGameCalendar::Priority::NONE}, [this](auto) { - this->SetDirty(); - }}; - /** * Handler for global hotkeys of the BuildRailStationWindow. * @param hotkey Hotkey @@ -1564,112 +1330,66 @@ public: } static inline HotkeyList hotkeys{"buildrailstation", { - Hotkey('F', "focus_filter_box", BRASHK_FOCUS_FILTER_BOX), + Hotkey('F', "focus_filter_box", PCWHK_FOCUS_FILTER_BOX), }, BuildRailStationGlobalHotkeys}; }; -Listing BuildRailStationWindow::last_sorting = { false, 0 }; -Filtering BuildRailStationWindow::last_filtering = { false, 0 }; - -const std::initializer_list BuildRailStationWindow::sorter_funcs = { - &StationClassIDSorter, -}; - -const std::initializer_list BuildRailStationWindow::filter_funcs = { - &TagNameFilter, -}; - static constexpr NWidgetPart _nested_station_builder_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), NWidget(WWT_CAPTION, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_RAIL_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_SHADEBOX, COLOUR_DARK_GREEN), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BRAS_SHOW_NEWST_DEFSIZE), - NWidget(WWT_DEFSIZEBOX, COLOUR_DARK_GREEN), - EndContainer(), + NWidget(WWT_DEFSIZEBOX, COLOUR_DARK_GREEN), EndContainer(), NWidget(NWID_HORIZONTAL), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN), - NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), SetPadding(WidgetDimensions::unscaled.picker), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), - NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_picker, 0), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BRAS_FILTER_CONTAINER), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), - NWidget(WWT_TEXT, COLOUR_DARK_GREEN), SetFill(0, 1), SetDataTip(STR_LIST_FILTER_TITLE, STR_NULL), - NWidget(WWT_EDITBOX, COLOUR_GREY, WID_BRAS_FILTER_EDITBOX), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), - EndContainer(), - EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BRAS_SHOW_NEWST_ADDITIONS), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_MATRIX, COLOUR_GREY, WID_BRAS_NEWST_LIST), SetMinimalSize(122, 71), SetFill(1, 0), - SetMatrixDataTip(1, 0, STR_STATION_BUILD_STATION_CLASS_TOOLTIP), SetScrollbar(WID_BRAS_NEWST_SCROLL), - NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_BRAS_NEWST_SCROLL), - EndContainer(), - EndContainer(), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_ORIENTATION, STR_NULL), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAS_PLATFORM_DIR_X), SetFill(0, 0), SetDataTip(0x0, STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAS_PLATFORM_DIR_Y), SetFill(0, 0), SetDataTip(0x0, STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP), EndContainer(), - EndContainer(), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BRAS_SHOW_NEWST_TYPE), SetMinimalSize(144, 11), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_ORANGE), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_NUMBER_OF_TRACKS, STR_NULL), - NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_1), SetAspect(1.25f), SetDataTip(STR_BLACK_1, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_2), SetAspect(1.25f), SetDataTip(STR_BLACK_2, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_3), SetAspect(1.25f), SetDataTip(STR_BLACK_3, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_4), SetAspect(1.25f), SetDataTip(STR_BLACK_4, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_5), SetAspect(1.25f), SetDataTip(STR_BLACK_5, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_6), SetAspect(1.25f), SetDataTip(STR_BLACK_6, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_7), SetAspect(1.25f), SetDataTip(STR_BLACK_7, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - EndContainer(), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_PLATFORM_LENGTH, STR_NULL), - NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_1), SetAspect(1.25f), SetDataTip(STR_BLACK_1, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_2), SetAspect(1.25f), SetDataTip(STR_BLACK_2, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_3), SetAspect(1.25f), SetDataTip(STR_BLACK_3, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_4), SetAspect(1.25f), SetDataTip(STR_BLACK_4, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_5), SetAspect(1.25f), SetDataTip(STR_BLACK_5, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_6), SetAspect(1.25f), SetDataTip(STR_BLACK_6, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_7), SetAspect(1.25f), SetDataTip(STR_BLACK_7, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - EndContainer(), - NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_DRAG_N_DROP), SetMinimalSize(75, 12), SetDataTip(STR_STATION_BUILD_DRAG_DROP, STR_STATION_BUILD_DRAG_DROP_TOOLTIP), - EndContainer(), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_COVERAGE_AREA_TITLE, STR_NULL), SetFill(1, 0), - NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_HIGHLIGHT_OFF), SetMinimalSize(60, 12), - SetDataTip(STR_STATION_BUILD_COVERAGE_OFF, STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_HIGHLIGHT_ON), SetMinimalSize(60, 12), - SetDataTip(STR_STATION_BUILD_COVERAGE_ON, STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP), - EndContainer(), + NWidget(NWID_VERTICAL), + NWidgetFunction(MakePickerClassWidgets), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_picker, 0), SetPadding(WidgetDimensions::unscaled.picker), + NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_ORIENTATION, STR_NULL), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAS_PLATFORM_DIR_X), SetFill(0, 0), SetDataTip(0x0, STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAS_PLATFORM_DIR_Y), SetFill(0, 0), SetDataTip(0x0, STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP), EndContainer(), EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BRAS_SHOW_NEWST_MATRIX), - /* We need an additional background for the matrix, as the matrix cannot handle the scrollbar due to not being an NWidgetCore. */ - NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetScrollbar(WID_BRAS_MATRIX_SCROLL), - NWidget(NWID_MATRIX, COLOUR_DARK_GREEN, WID_BRAS_MATRIX), SetPIP(0, 2, 0), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BRAS_IMAGE), - SetFill(0, 0), SetResize(0, 0), SetDataTip(0x0, STR_STATION_BUILD_STATION_TYPE_TOOLTIP), SetScrollbar(WID_BRAS_MATRIX_SCROLL), - EndContainer(), - EndContainer(), - EndContainer(), + NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_NUMBER_OF_TRACKS, STR_NULL), + NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_1), SetAspect(1.25f), SetDataTip(STR_BLACK_1, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_2), SetAspect(1.25f), SetDataTip(STR_BLACK_2, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_3), SetAspect(1.25f), SetDataTip(STR_BLACK_3, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_4), SetAspect(1.25f), SetDataTip(STR_BLACK_4, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_5), SetAspect(1.25f), SetDataTip(STR_BLACK_5, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_6), SetAspect(1.25f), SetDataTip(STR_BLACK_6, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_7), SetAspect(1.25f), SetDataTip(STR_BLACK_7, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), EndContainer(), + NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_PLATFORM_LENGTH, STR_NULL), + NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_1), SetAspect(1.25f), SetDataTip(STR_BLACK_1, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_2), SetAspect(1.25f), SetDataTip(STR_BLACK_2, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_3), SetAspect(1.25f), SetDataTip(STR_BLACK_3, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_4), SetAspect(1.25f), SetDataTip(STR_BLACK_4, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_5), SetAspect(1.25f), SetDataTip(STR_BLACK_5, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_6), SetAspect(1.25f), SetDataTip(STR_BLACK_6, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_7), SetAspect(1.25f), SetDataTip(STR_BLACK_7, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + EndContainer(), + NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_DRAG_N_DROP), SetMinimalSize(75, 12), SetDataTip(STR_STATION_BUILD_DRAG_DROP, STR_STATION_BUILD_DRAG_DROP_TOOLTIP), + EndContainer(), + NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_COVERAGE_AREA_TITLE, STR_NULL), SetFill(1, 0), + NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_HIGHLIGHT_OFF), SetMinimalSize(60, 12), SetDataTip(STR_STATION_BUILD_COVERAGE_OFF, STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_HIGHLIGHT_ON), SetMinimalSize(60, 12), SetDataTip(STR_STATION_BUILD_COVERAGE_ON, STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP), + EndContainer(), + NWidget(WWT_EMPTY, INVALID_COLOUR, WID_BRAS_COVERAGE_TEXTS), SetFill(1, 1), SetResize(1, 0), SetMinimalTextLines(2, 0), EndContainer(), - NWidget(WWT_EMPTY, INVALID_COLOUR, WID_BRAS_COVERAGE_TEXTS), SetFill(1, 1), SetResize(1, 0), SetMinimalTextLines(2, WidgetDimensions::unscaled.vsep_normal), - EndContainer(), - EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BRAS_SHOW_NEWST_RESIZE), - NWidget(NWID_VERTICAL), - NWidget(NWID_VSCROLLBAR, COLOUR_DARK_GREEN, WID_BRAS_MATRIX_SCROLL), - NWidget(WWT_RESIZEBOX, COLOUR_DARK_GREEN), EndContainer(), EndContainer(), + NWidgetFunction(MakePickerTypeWidgets), EndContainer(), }; /** High level window description of the station-build window (default & newGRF) */ static WindowDesc _station_builder_desc( - WDP_AUTO, "build_station_rail", 350, 0, + WDP_AUTO, "build_station_rail", 0, 0, WC_BUILD_STATION, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, std::begin(_nested_station_builder_widgets), std::end(_nested_station_builder_widgets), @@ -1679,8 +1399,7 @@ static WindowDesc _station_builder_desc( /** Open station build window */ static Window *ShowStationBuilder(Window *parent) { - bool newstations = StationClass::GetClassCount() > 2 || StationClass::Get(STAT_CLASS_DFLT)->GetSpecCount() != 1; - return new BuildRailStationWindow(&_station_builder_desc, parent, newstations); + return new BuildRailStationWindow(&_station_builder_desc, parent); } struct BuildSignalWindow : public PickerWindowBase { @@ -2018,196 +1737,72 @@ static void ShowBuildTrainDepotPicker(Window *parent) new BuildRailDepotWindow(&_build_depot_desc, parent); } -struct BuildRailWaypointWindow : PickerWindowBase { - using WaypointList = GUIList; - static const uint FILTER_LENGTH = 20; +class WaypointPickerCallbacks : public PickerCallbacksNewGRFClass { +public: + StringID GetClassTooltip() const override { return STR_PICKER_WAYPOINT_CLASS_TOOLTIP; } + StringID GetTypeTooltip() const override { return STR_PICKER_WAYPOINT_TYPE_TOOLTIP; } - const StationClass *waypoints; - WaypointList list; - StringFilter string_filter; ///< Filter for waypoint name - static QueryString editbox; ///< Filter editbox - - BuildRailWaypointWindow(WindowDesc *desc, Window *parent) : PickerWindowBase(desc, parent) + bool IsActive() const override { - this->waypoints = StationClass::Get(STAT_CLASS_WAYP); - - this->CreateNestedTree(); - - NWidgetMatrix *matrix = this->GetWidget(WID_BRW_WAYPOINT_MATRIX); - matrix->SetScrollbar(this->GetScrollbar(WID_BRW_SCROLL)); - - this->FinishInitNested(TRANSPORT_RAIL); - - this->querystrings[WID_BRW_FILTER] = &this->editbox; - this->editbox.cancel_button = QueryString::ACTION_CLEAR; - this->string_filter.SetFilterTerm(this->editbox.text.buf); - - this->list.ForceRebuild(); - this->BuildPickerList(); - } - - void Close([[maybe_unused]] int data = 0) override - { - CloseWindowById(WC_SELECT_STATION, 0); - this->PickerWindowBase::Close(); - } - - bool FilterByText(const StationSpec *statspec) - { - if (this->string_filter.IsEmpty()) return true; - this->string_filter.ResetState(); - if (statspec == nullptr) { - this->string_filter.AddLine(GetString(STR_STATION_CLASS_WAYP_WAYPOINT)); - } else { - this->string_filter.AddLine(GetString(statspec->name)); - if (statspec->grf_prop.grffile != nullptr) { - const GRFConfig *gc = GetGRFConfig(statspec->grf_prop.grffile->grfid); - this->string_filter.AddLine(gc->GetName()); + for (const auto &cls : StationClass::Classes()) { + if (!IsWaypointClass(cls)) continue; + for (const auto *spec : cls.Specs()) { + if (spec != nullptr) return true; } } - return this->string_filter.GetState(); + return false; } - void BuildPickerList() + bool HasClassChoice() const override { - if (!this->list.NeedRebuild()) return; - - this->list.clear(); - this->list.reserve(this->waypoints->GetSpecCount()); - for (uint i = 0; i < this->waypoints->GetSpecCount(); i++) { - const StationSpec *statspec = this->waypoints->GetSpec(i); - if (!FilterByText(statspec)) continue; - - this->list.push_back(i); - } - this->list.RebuildDone(); - - NWidgetMatrix *matrix = this->GetWidget(WID_BRW_WAYPOINT_MATRIX); - matrix->SetCount((int)this->list.size()); - matrix->SetClicked(this->UpdateSelection(_cur_waypoint_type)); + return std::count_if(std::begin(StationClass::Classes()), std::end(StationClass::Classes()), IsWaypointClass) > 1; } - uint UpdateSelection(uint type) + void Close(int) override { ResetObjectToPlace(); } + int GetSelectedClass() const override { return _waypoint_gui.sel_class; } + void SetSelectedClass(int id) const override { _waypoint_gui.sel_class = this->GetClassIndex(id); } + + StringID GetClassName(int id) const override { - auto found = std::find(std::begin(this->list), std::end(this->list), type); - if (found != std::end(this->list)) return found - std::begin(this->list); - - /* Selection isn't in the list, default to first */ - if (this->list.empty()) { - _cur_waypoint_type = 0; - return -1; - } else { - _cur_waypoint_type = this->list.front(); - return 0; - } + const auto *sc = GetClass(id); + if (!IsWaypointClass(*sc)) return INVALID_STRING_ID; + return sc->name; } - void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override + int GetSelectedType() const override { return _waypoint_gui.sel_type; } + void SetSelectedType(int id) const override { _waypoint_gui.sel_type = id; } + + StringID GetTypeName(int cls_id, int id) const override { - switch (widget) { - case WID_BRW_WAYPOINT_MATRIX: - /* Two blobs high and three wide. */ - size.width += resize.width * 2; - size.height += resize.height * 1; - - /* Resizing in X direction only at blob size, but at pixel level in Y. */ - resize.height = 1; - break; - - case WID_BRW_WAYPOINT: - size.width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); - size.height = ScaleGUITrad(58) + WidgetDimensions::scaled.fullbevel.Vertical(); - break; - } + const auto *spec = this->GetSpec(cls_id, id); + return (spec == nullptr) ? STR_STATION_CLASS_WAYP_WAYPOINT : spec->name; } - void SetStringParameters(WidgetID widget) const override + bool IsTypeAvailable(int cls_id, int id) const override { - if (widget == WID_BRW_NAME) { - if (!this->list.empty() && IsInsideBS(_cur_waypoint_type, 0, this->waypoints->GetSpecCount())) { - const StationSpec *statspec = this->waypoints->GetSpec(_cur_waypoint_type); - if (statspec == nullptr) { - SetDParam(0, STR_STATION_CLASS_WAYP_WAYPOINT); - } else { - SetDParam(0, statspec->name); - } - } else { - SetDParam(0, STR_EMPTY); - } - } + return IsStationAvailable(this->GetSpec(cls_id, id)); } - void OnPaint() override + void DrawType(int x, int y, int cls_id, int id) const override { - this->BuildPickerList(); - this->DrawWidgets(); + DrawWaypointSprite(x, y, this->GetClassIndex(cls_id), id, _cur_railtype); } - void DrawWidget(const Rect &r, WidgetID widget) const override - { - switch (widget) { - case WID_BRW_WAYPOINT: { - uint16_t type = this->list.at(this->GetWidget(widget)->GetParentWidget()->GetCurrentElement()); - const StationSpec *statspec = this->waypoints->GetSpec(type); - - DrawPixelInfo tmp_dpi; - Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); - if (FillDrawPixelInfo(&tmp_dpi, ir)) { - AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); - int x = (ir.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); - int y = (ir.Height() + ScaleSpriteTrad(58)) / 2 - ScaleSpriteTrad(31); - DrawWaypointSprite(x, y, type, _cur_railtype); - } - - if (!IsStationAvailable(statspec)) { - GfxFillRect(ir, PC_BLACK, FILLRECT_CHECKER); - } - } - } - } - - void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override - { - switch (widget) { - case WID_BRW_WAYPOINT: { - uint16_t sel = this->GetWidget(widget)->GetParentWidget()->GetCurrentElement(); - assert(sel < this->list.size()); - uint16_t type = this->list.at(sel); - - /* Check station availability callback */ - const StationSpec *statspec = this->waypoints->GetSpec(type); - if (!IsStationAvailable(statspec)) return; - - _cur_waypoint_type = type; - this->GetWidget(widget)->GetParentWidget()->SetClicked(sel); - if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); - this->SetDirty(); - break; - } - } - } - - void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override - { - if (!gui_scope) return; - this->list.ForceRebuild(); - } - - void OnEditboxChanged(WidgetID wid) override - { - if (wid == WID_BRW_FILTER) { - this->string_filter.SetFilterTerm(this->editbox.text.buf); - this->InvalidateData(); - } - } - - void OnRealtimeTick([[maybe_unused]] uint delta_ms) override - { - CheckRedrawWaypointCoverage(this); - } + static WaypointPickerCallbacks instance; }; +/* static */ WaypointPickerCallbacks WaypointPickerCallbacks::instance; -/* static */ QueryString BuildRailWaypointWindow::editbox(BuildRailWaypointWindow::FILTER_LENGTH * MAX_CHAR_LENGTH, BuildRailWaypointWindow::FILTER_LENGTH); +struct BuildRailWaypointWindow : public PickerWindow { + BuildRailWaypointWindow(WindowDesc *desc, Window *parent) : PickerWindow(desc, parent, TRANSPORT_RAIL, WaypointPickerCallbacks::instance) + { + this->ConstructWindow(); + this->InvalidateData(); + } + + static inline HotkeyList hotkeys{"buildrailwaypoint", { + Hotkey('F', "focus_filter_box", PCWHK_FOCUS_FILTER_BOX), + }}; +}; /** Nested widget definition for the build NewGRF rail waypoint window */ static constexpr NWidgetPart _nested_build_waypoint_widgets[] = { @@ -2216,22 +1811,9 @@ static constexpr NWidgetPart _nested_build_waypoint_widgets[] = { NWidget(WWT_CAPTION, COLOUR_DARK_GREEN), SetDataTip(STR_WAYPOINT_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_DEFSIZEBOX, COLOUR_DARK_GREEN), EndContainer(), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN), - NWidget(WWT_EDITBOX, COLOUR_DARK_GREEN, WID_BRW_FILTER), SetPadding(2), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), - EndContainer(), NWidget(NWID_HORIZONTAL), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetScrollbar(WID_BRW_SCROLL), - NWidget(NWID_MATRIX, COLOUR_DARK_GREEN, WID_BRW_WAYPOINT_MATRIX), SetPIP(0, 2, 0), SetPadding(WidgetDimensions::unscaled.picker), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BRW_WAYPOINT), SetDataTip(0x0, STR_WAYPOINT_GRAPHICS_TOOLTIP), SetScrollbar(WID_BRW_SCROLL), EndContainer(), - EndContainer(), - EndContainer(), - NWidget(NWID_VSCROLLBAR, COLOUR_DARK_GREEN, WID_BRW_SCROLL), - EndContainer(), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN), - NWidget(WWT_TEXT, COLOUR_DARK_GREEN, WID_BRW_NAME), SetPadding(2), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_ORANGE), SetAlignment(SA_CENTER), - EndContainer(), - NWidget(WWT_RESIZEBOX, COLOUR_DARK_GREEN), + NWidgetFunction(MakePickerClassWidgets), + NWidgetFunction(MakePickerTypeWidgets), EndContainer(), }; @@ -2239,11 +1821,13 @@ static WindowDesc _build_waypoint_desc( WDP_AUTO, "build_waypoint", 0, 0, WC_BUILD_WAYPOINT, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, - std::begin(_nested_build_waypoint_widgets), std::end(_nested_build_waypoint_widgets) + std::begin(_nested_build_waypoint_widgets), std::end(_nested_build_waypoint_widgets), + &BuildRailWaypointWindow::hotkeys ); static void ShowBuildWaypointPicker(Window *parent) { + if (!WaypointPickerCallbacks::instance.IsActive()) return; new BuildRailWaypointWindow(&_build_waypoint_desc, parent); } @@ -2253,7 +1837,10 @@ static void ShowBuildWaypointPicker(Window *parent) void InitializeRailGui() { _build_depot_direction = DIAGDIR_NW; - _railstation.station_class = StationClassID::STAT_CLASS_DFLT; + _station_gui.sel_class = StationClassID::STAT_CLASS_DFLT; + _station_gui.sel_type = 0; + _waypoint_gui.sel_class = StationClassID::STAT_CLASS_WAYP; + _waypoint_gui.sel_type = 0; } /** diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 90b58e47d9..18ed083687 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -36,10 +36,7 @@ #include "road_cmd.h" #include "tunnelbridge_cmd.h" #include "newgrf_roadstop.h" -#include "querystring_gui.h" -#include "sortlist_type.h" -#include "stringfilter_type.h" -#include "string_func.h" +#include "picker_gui.h" #include "timer/timer.h" #include "timer/timer_game_calendar.h" @@ -64,40 +61,43 @@ static RoadType _cur_roadtype; static DiagDirection _road_depot_orientation; -struct RoadStopGUISettings { - DiagDirection orientation; - - RoadStopClassID roadstop_class; - uint16_t roadstop_type; - uint16_t roadstop_count; +struct RoadStopPickerSelection { + RoadStopClassID sel_class; ///< Selected road stop class. + uint16_t sel_type; ///< Selected road stop type within the class. + DiagDirection orientation; ///< Selected orientation of the road stop. }; -static RoadStopGUISettings _roadstop_gui_settings; +static RoadStopPickerSelection _roadstop_gui; + +static bool IsRoadStopEverAvailable(const RoadStopSpec *spec, StationType type) +{ + if (spec == nullptr) return true; + + if (HasBit(spec->flags, RSF_BUILD_MENU_ROAD_ONLY) && !RoadTypeIsRoad(_cur_roadtype)) return false; + if (HasBit(spec->flags, RSF_BUILD_MENU_TRAM_ONLY) && !RoadTypeIsTram(_cur_roadtype)) return false; + + switch (spec->stop_type) { + case ROADSTOPTYPE_ALL: return true; + case ROADSTOPTYPE_PASSENGER: return type == STATION_BUS; + case ROADSTOPTYPE_FREIGHT: return type == STATION_TRUCK; + default: NOT_REACHED(); + } +} /** * Check whether a road stop type can be built. * @return true if building is allowed. */ -static bool IsRoadStopAvailable(const RoadStopSpec *roadstopspec, StationType type) +static bool IsRoadStopAvailable(const RoadStopSpec *spec, StationType type) { - if (roadstopspec == nullptr) return true; + if (spec == nullptr) return true; + if (IsRoadStopEverAvailable(spec, type)) return true; - if (HasBit(roadstopspec->flags, RSF_BUILD_MENU_ROAD_ONLY) && !RoadTypeIsRoad(_cur_roadtype)) return false; - if (HasBit(roadstopspec->flags, RSF_BUILD_MENU_TRAM_ONLY) && !RoadTypeIsTram(_cur_roadtype)) return false; + if (!HasBit(spec->callback_mask, CBM_ROAD_STOP_AVAIL)) return true; - if (roadstopspec->stop_type != ROADSTOPTYPE_ALL) { - switch (type) { - case STATION_BUS: if (roadstopspec->stop_type != ROADSTOPTYPE_PASSENGER) return false; break; - case STATION_TRUCK: if (roadstopspec->stop_type != ROADSTOPTYPE_FREIGHT) return false; break; - default: break; - } - } - - if (!HasBit(roadstopspec->callback_mask, CBM_ROAD_STOP_AVAIL)) return true; - - uint16_t cb_res = GetRoadStopCallback(CBID_STATION_AVAILABILITY, 0, 0, roadstopspec, nullptr, INVALID_TILE, _cur_roadtype, type, 0); + uint16_t cb_res = GetRoadStopCallback(CBID_STATION_AVAILABILITY, 0, 0, spec, nullptr, INVALID_TILE, _cur_roadtype, type, 0); if (cb_res == CALLBACK_FAILED) return true; - return Convert8bitBooleanCallback(roadstopspec->grf_prop.grffile, CBID_STATION_AVAILABILITY, cb_res); + return Convert8bitBooleanCallback(spec->grf_prop.grffile, CBID_STATION_AVAILABILITY, cb_res); } void CcPlaySound_CONSTRUCTION_OTHER(Commands, const CommandCost &result, TileIndex tile) @@ -217,11 +217,11 @@ void CcRoadStop(Commands, const CommandCost &result, TileIndex tile, uint8_t wid static void PlaceRoadStop(TileIndex start_tile, TileIndex end_tile, RoadStopType stop_type, bool adjacent, RoadType rt, StringID err_msg) { TileArea ta(start_tile, end_tile); - DiagDirection ddir = _roadstop_gui_settings.orientation; + DiagDirection ddir = _roadstop_gui.orientation; bool drive_through = ddir >= DIAGDIR_END; if (drive_through) ddir = static_cast(ddir - DIAGDIR_END); // Adjust picker result to actual direction. - RoadStopClassID spec_class = _roadstop_gui_settings.roadstop_class; - uint16_t spec_index = _roadstop_gui_settings.roadstop_type; + RoadStopClassID spec_class = _roadstop_gui.sel_class; + uint16_t spec_index = _roadstop_gui.sel_type; auto proc = [=](bool test, StationID to_join) -> bool { if (test) { @@ -245,8 +245,8 @@ static void PlaceRoad_BusStation(TileIndex tile) if (_remove_button_clicked) { VpStartPlaceSizing(tile, VPM_X_AND_Y, DDSP_REMOVE_BUSSTOP); } else { - if (_roadstop_gui_settings.orientation < DIAGDIR_END) { // Not a drive-through stop. - VpStartPlaceSizing(tile, (DiagDirToAxis(_roadstop_gui_settings.orientation) == AXIS_X) ? VPM_X_LIMITED : VPM_Y_LIMITED, DDSP_BUILD_BUSSTOP); + if (_roadstop_gui.orientation < DIAGDIR_END) { // Not a drive-through stop. + VpStartPlaceSizing(tile, (DiagDirToAxis(_roadstop_gui.orientation) == AXIS_X) ? VPM_X_LIMITED : VPM_Y_LIMITED, DDSP_BUILD_BUSSTOP); } else { VpStartPlaceSizing(tile, VPM_X_AND_Y_LIMITED, DDSP_BUILD_BUSSTOP); } @@ -263,8 +263,8 @@ static void PlaceRoad_TruckStation(TileIndex tile) if (_remove_button_clicked) { VpStartPlaceSizing(tile, VPM_X_AND_Y, DDSP_REMOVE_TRUCKSTOP); } else { - if (_roadstop_gui_settings.orientation < DIAGDIR_END) { // Not a drive-through stop. - VpStartPlaceSizing(tile, (DiagDirToAxis(_roadstop_gui_settings.orientation) == AXIS_X) ? VPM_X_LIMITED : VPM_Y_LIMITED, DDSP_BUILD_TRUCKSTOP); + if (_roadstop_gui.orientation < DIAGDIR_END) { // Not a drive-through stop. + VpStartPlaceSizing(tile, (DiagDirToAxis(_roadstop_gui.orientation) == AXIS_X) ? VPM_X_LIMITED : VPM_Y_LIMITED, DDSP_BUILD_TRUCKSTOP); } else { VpStartPlaceSizing(tile, VPM_X_AND_Y_LIMITED, DDSP_BUILD_TRUCKSTOP); } @@ -708,7 +708,7 @@ struct BuildRoadToolbarWindow : Window { case DDSP_BUILD_BUSSTOP: case DDSP_REMOVE_BUSSTOP: - if (this->IsWidgetLowered(WID_ROT_BUS_STATION) && GetIfClassHasNewStopsByType(RoadStopClass::Get(_roadstop_gui_settings.roadstop_class), ROADSTOP_BUS, _cur_roadtype)) { + if (this->IsWidgetLowered(WID_ROT_BUS_STATION) && GetIfClassHasNewStopsByType(RoadStopClass::Get(_roadstop_gui.sel_class), ROADSTOP_BUS, _cur_roadtype)) { if (_remove_button_clicked) { TileArea ta(start_tile, end_tile); Command::Post(this->rti->strings.err_remove_station[ROADSTOP_BUS], CcPlaySound_CONSTRUCTION_OTHER, ta.tile, ta.w, ta.h, ROADSTOP_BUS, _ctrl_pressed); @@ -720,7 +720,7 @@ struct BuildRoadToolbarWindow : Window { case DDSP_BUILD_TRUCKSTOP: case DDSP_REMOVE_TRUCKSTOP: - if (this->IsWidgetLowered(WID_ROT_TRUCK_STATION) && GetIfClassHasNewStopsByType(RoadStopClass::Get(_roadstop_gui_settings.roadstop_class), ROADSTOP_TRUCK, _cur_roadtype)) { + if (this->IsWidgetLowered(WID_ROT_TRUCK_STATION) && GetIfClassHasNewStopsByType(RoadStopClass::Get(_roadstop_gui.sel_class), ROADSTOP_TRUCK, _cur_roadtype)) { if (_remove_button_clicked) { TileArea ta(start_tile, end_tile); Command::Post(this->rti->strings.err_remove_station[ROADSTOP_TRUCK], CcPlaySound_CONSTRUCTION_OTHER, ta.tile, ta.w, ta.h, ROADSTOP_TRUCK, _ctrl_pressed); @@ -1093,101 +1093,126 @@ static void ShowRoadDepotPicker(Window *parent) new BuildRoadDepotWindow(&_build_road_depot_desc, parent); } -/** Enum referring to the Hotkeys in the build road stop window */ -enum BuildRoadStopHotkeys { - BROSHK_FOCUS_FILTER_BOX, ///< Focus the edit box for editing the filter string +template +class RoadStopPickerCallbacks : public PickerCallbacksNewGRFClass { +public: + StringID GetClassTooltip() const override; + StringID GetTypeTooltip() const override; + + bool IsActive() const override + { + for (const auto &cls : RoadStopClass::Classes()) { + if (IsWaypointClass(cls)) continue; + for (const auto *spec : cls.Specs()) { + if (spec == nullptr) continue; + if (roadstoptype == ROADSTOP_TRUCK && spec->stop_type != ROADSTOPTYPE_FREIGHT && spec->stop_type != ROADSTOPTYPE_ALL) continue; + if (roadstoptype == ROADSTOP_BUS && spec->stop_type != ROADSTOPTYPE_PASSENGER && spec->stop_type != ROADSTOPTYPE_ALL) continue; + return true; + } + } + return false; + } + + static bool IsClassChoice(const RoadStopClass &cls) + { + return !IsWaypointClass(cls) && GetIfClassHasNewStopsByType(&cls, roadstoptype, _cur_roadtype); + } + + bool HasClassChoice() const override + { + return std::count_if(std::begin(RoadStopClass::Classes()), std::end(RoadStopClass::Classes()), IsClassChoice); + } + + int GetSelectedClass() const override { return _roadstop_gui.sel_class; } + void SetSelectedClass(int id) const override { _roadstop_gui.sel_class = this->GetClassIndex(id); } + + StringID GetClassName(int id) const override + { + const auto *rsc = this->GetClass(id); + if (!IsClassChoice(*rsc)) return INVALID_STRING_ID; + return rsc->name; + } + + int GetSelectedType() const override { return _roadstop_gui.sel_type; } + void SetSelectedType(int id) const override { _roadstop_gui.sel_type = id; } + + StringID GetTypeName(int cls_id, int id) const override + { + const auto *spec = this->GetSpec(cls_id, id); + if (!IsRoadStopEverAvailable(spec, roadstoptype == ROADSTOP_BUS ? STATION_BUS : STATION_TRUCK)) return INVALID_STRING_ID; + return (spec == nullptr) ? STR_STATION_CLASS_DFLT_ROADSTOP : spec->name; + } + + bool IsTypeAvailable(int cls_id, int id) const override + { + const auto *spec = this->GetSpec(cls_id, id); + return IsRoadStopAvailable(spec, roadstoptype == ROADSTOP_BUS ? STATION_BUS : STATION_TRUCK); + } + + void DrawType(int x, int y, int cls_id, int id) const override + { + const auto *spec = this->GetSpec(cls_id, id); + if (spec == nullptr) { + StationPickerDrawSprite(x, y, roadstoptype == ROADSTOP_BUS ? STATION_BUS : STATION_TRUCK, INVALID_RAILTYPE, _cur_roadtype, _roadstop_gui.orientation); + } else { + DiagDirection orientation = _roadstop_gui.orientation; + if (orientation < DIAGDIR_END && HasBit(spec->flags, RSF_DRIVE_THROUGH_ONLY)) orientation = DIAGDIR_END; + DrawRoadStopTile(x, y, _cur_roadtype, spec, roadstoptype == ROADSTOP_BUS ? STATION_BUS : STATION_TRUCK, (uint8_t)orientation); + } + } }; -struct BuildRoadStationWindow : public PickerWindowBase { +template <> StringID RoadStopPickerCallbacks::GetClassTooltip() const { return STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP; } +template <> StringID RoadStopPickerCallbacks::GetTypeTooltip() const { return STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP; } + +template <> StringID RoadStopPickerCallbacks::GetClassTooltip() const { return STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP; } +template <> StringID RoadStopPickerCallbacks::GetTypeTooltip() const { return STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP; } + +static RoadStopPickerCallbacks _bus_callback_instance; +static RoadStopPickerCallbacks _truck_callback_instance; + +static PickerCallbacks &GetRoadStopPickerCallbacks(RoadStopType rs) +{ + return rs == ROADSTOP_BUS ? static_cast(_bus_callback_instance) : static_cast(_truck_callback_instance); +} + +struct BuildRoadStationWindow : public PickerWindow { private: - RoadStopType roadStopType; ///< The RoadStopType for this Window. - uint line_height; ///< Height of a single line in the newstation selection matrix. uint coverage_height; ///< Height of the coverage texts. - Scrollbar *vscrollList; ///< Vertical scrollbar of the new station list. - Scrollbar *vscrollMatrix; ///< Vertical scrollbar of the station picker matrix. - - typedef GUIList GUIRoadStopClassList; ///< Type definition for the list to hold available road stop classes. - - static const uint EDITBOX_MAX_SIZE = 16; ///< The maximum number of characters for the filter edit box. - - static Listing last_sorting; ///< Default sorting of #GUIRoadStopClassList. - static Filtering last_filtering; ///< Default filtering of #GUIRoadStopClassList. - static const std::initializer_list sorter_funcs; ///< Sort functions of the #GUIRoadStopClassList. - static const std::initializer_list filter_funcs; ///< Filter functions of the #GUIRoadStopClassList. - GUIRoadStopClassList roadstop_classes; ///< Available road stop classes. - StringFilter string_filter; ///< Filter for available road stop classes. - QueryString filter_editbox; ///< Filter editbox. - - void EnsureSelectedClassIsVisible() - { - uint pos = 0; - for (auto rs_class : this->roadstop_classes) { - if (rs_class == _roadstop_gui_settings.roadstop_class) break; - pos++; - } - this->vscrollList->SetCount(this->roadstop_classes.size()); - this->vscrollList->ScrollTowards(pos); - } void CheckOrientationValid() { - const RoadStopSpec *spec = RoadStopClass::Get(_roadstop_gui_settings.roadstop_class)->GetSpec(_roadstop_gui_settings.roadstop_type); + const RoadStopSpec *spec = RoadStopClass::Get(_roadstop_gui.sel_class)->GetSpec(_roadstop_gui.sel_type); /* Raise and lower to ensure the correct widget is lowered after changing displayed orientation plane. */ if (RoadTypeIsRoad(_cur_roadtype)) { - this->RaiseWidget(WID_BROS_STATION_NE + _roadstop_gui_settings.orientation); + this->RaiseWidget(WID_BROS_STATION_NE + _roadstop_gui.orientation); this->GetWidget(WID_BROS_AVAILABLE_ORIENTATIONS)->SetDisplayedPlane((spec != nullptr && HasBit(spec->flags, RSF_DRIVE_THROUGH_ONLY)) ? 1 : 0); - this->LowerWidget(WID_BROS_STATION_NE + _roadstop_gui_settings.orientation); + this->LowerWidget(WID_BROS_STATION_NE + _roadstop_gui.orientation); } - if (_roadstop_gui_settings.orientation >= DIAGDIR_END) return; + if (_roadstop_gui.orientation >= DIAGDIR_END) return; if (spec != nullptr && HasBit(spec->flags, RSF_DRIVE_THROUGH_ONLY)) { - this->RaiseWidget(WID_BROS_STATION_NE + _roadstop_gui_settings.orientation); - _roadstop_gui_settings.orientation = DIAGDIR_END; - this->LowerWidget(WID_BROS_STATION_NE + _roadstop_gui_settings.orientation); + this->RaiseWidget(WID_BROS_STATION_NE + _roadstop_gui.orientation); + _roadstop_gui.orientation = DIAGDIR_END; + this->LowerWidget(WID_BROS_STATION_NE + _roadstop_gui.orientation); this->SetDirty(); CloseWindowById(WC_SELECT_STATION, 0); } } public: - BuildRoadStationWindow(WindowDesc *desc, Window *parent, RoadStopType rs) : PickerWindowBase(desc, parent), filter_editbox(EDITBOX_MAX_SIZE * MAX_CHAR_LENGTH, EDITBOX_MAX_SIZE) + BuildRoadStationWindow(WindowDesc *desc, Window *parent, RoadStopType rs) : PickerWindow(desc, parent, TRANSPORT_ROAD, GetRoadStopPickerCallbacks(rs)) { this->coverage_height = 2 * GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal; - this->vscrollList = nullptr; - this->vscrollMatrix = nullptr; - this->roadStopType = rs; - bool newstops = GetIfNewStopsByType(rs, _cur_roadtype); - - this->CreateNestedTree(); - - /* Hide the station class filter if no stations other than the default one are available. */ - this->GetWidget(WID_BROS_SHOW_NEWST_DEFSIZE)->SetDisplayedPlane(newstops ? 0 : SZSP_NONE); - this->GetWidget(WID_BROS_FILTER_CONTAINER)->SetDisplayedPlane(newstops ? 0 : SZSP_HORIZONTAL); - this->GetWidget(WID_BROS_SHOW_NEWST_ADDITIONS)->SetDisplayedPlane(newstops ? 0 : SZSP_HORIZONTAL); - this->GetWidget(WID_BROS_SHOW_NEWST_ORIENTATION)->SetDisplayedPlane(newstops ? 0 : SZSP_HORIZONTAL); - this->GetWidget(WID_BROS_SHOW_NEWST_TYPE_SEL)->SetDisplayedPlane(newstops ? 0 : SZSP_HORIZONTAL); - this->GetWidget(WID_BROS_SHOW_NEWST_MATRIX)->SetDisplayedPlane(newstops ? 0 : SZSP_NONE); - this->GetWidget(WID_BROS_SHOW_NEWST_RESIZE)->SetDisplayedPlane(newstops ? 0 : SZSP_NONE); - if (newstops) { - this->vscrollList = this->GetScrollbar(WID_BROS_NEWST_SCROLL); - this->vscrollMatrix = this->GetScrollbar(WID_BROS_MATRIX_SCROLL); - - this->querystrings[WID_BROS_FILTER_EDITBOX] = &this->filter_editbox; - this->roadstop_classes.SetListing(this->last_sorting); - this->roadstop_classes.SetFiltering(this->last_filtering); - this->roadstop_classes.SetSortFuncs(this->sorter_funcs); - this->roadstop_classes.SetFilterFuncs(this->filter_funcs); - } - - this->roadstop_classes.ForceRebuild(); - BuildRoadStopClassesAvailable(); /* Trams don't have non-drivethrough stations */ - if (RoadTypeIsTram(_cur_roadtype) && _roadstop_gui_settings.orientation < DIAGDIR_END) { - _roadstop_gui_settings.orientation = DIAGDIR_END; + if (RoadTypeIsTram(_cur_roadtype) && _roadstop_gui.orientation < DIAGDIR_END) { + _roadstop_gui.orientation = DIAGDIR_END; } + this->ConstructWindow(); + const RoadTypeInfo *rti = GetRoadTypeInfo(_cur_roadtype); this->GetWidget(WID_BROS_CAPTION)->widget_data = rti->strings.picker_title[rs]; @@ -1195,130 +1220,24 @@ public: this->GetWidget(i)->tool_tip = rti->strings.picker_tooltip[rs]; } - this->LowerWidget(WID_BROS_STATION_NE + _roadstop_gui_settings.orientation); + this->LowerWidget(WID_BROS_STATION_NE + _roadstop_gui.orientation); this->LowerWidget(WID_BROS_LT_OFF + _settings_client.gui.station_show_coverage); - this->FinishInitNested(TRANSPORT_ROAD); - this->window_class = (rs == ROADSTOP_BUS) ? WC_BUS_STATION : WC_TRUCK_STATION; - if (!newstops || _roadstop_gui_settings.roadstop_class >= RoadStopClass::GetClassCount()) { - /* There's no new stops available or the list has reduced in size. - * Now, set the default road stops as selected. */ - _roadstop_gui_settings.roadstop_class = ROADSTOP_CLASS_DFLT; - _roadstop_gui_settings.roadstop_type = 0; - } - if (newstops) { - /* The currently selected class doesn't have any stops for this RoadStopType, reset the selection. */ - if (!GetIfClassHasNewStopsByType(RoadStopClass::Get(_roadstop_gui_settings.roadstop_class), rs, _cur_roadtype)) { - _roadstop_gui_settings.roadstop_class = ROADSTOP_CLASS_DFLT; - _roadstop_gui_settings.roadstop_type = 0; - } - _roadstop_gui_settings.roadstop_count = RoadStopClass::Get(_roadstop_gui_settings.roadstop_class)->GetSpecCount(); - _roadstop_gui_settings.roadstop_type = std::min((int)_roadstop_gui_settings.roadstop_type, _roadstop_gui_settings.roadstop_count - 1); - - /* Reset back to default class if the previously selected class is not available for this road stop type. */ - if (!GetIfClassHasNewStopsByType(RoadStopClass::Get(_roadstop_gui_settings.roadstop_class), roadStopType, _cur_roadtype)) { - _roadstop_gui_settings.roadstop_class = ROADSTOP_CLASS_DFLT; - } - - this->SelectFirstAvailableTypeIfUnavailable(); - - NWidgetMatrix *matrix = this->GetWidget(WID_BROS_MATRIX); - matrix->SetScrollbar(this->vscrollMatrix); - matrix->SetCount(_roadstop_gui_settings.roadstop_count); - matrix->SetClicked(_roadstop_gui_settings.roadstop_type); - - this->EnsureSelectedClassIsVisible(); - this->CheckOrientationValid(); - } } void Close([[maybe_unused]] int data = 0) override { CloseWindowById(WC_SELECT_STATION, 0); - this->PickerWindowBase::Close(); - } - - /** Sort classes by RoadStopClassID. */ - static bool RoadStopClassIDSorter(RoadStopClassID const &a, RoadStopClassID const &b) - { - return a < b; - } - - /** Filter classes by class name. */ - static bool TagNameFilter(RoadStopClassID const *sc, StringFilter &filter) - { - filter.ResetState(); - filter.AddLine(GetString(RoadStopClass::Get(*sc)->name)); - return filter.GetState(); - } - - inline bool ShowNewStops() const - { - return this->vscrollList != nullptr; - } - - void BuildRoadStopClassesAvailable() - { - if (!this->roadstop_classes.NeedRebuild()) return; - - this->roadstop_classes.clear(); - this->roadstop_classes.reserve(RoadStopClass::GetClassCount()); - - for (const auto &cls : RoadStopClass::Classes()) { - /* Skip waypoints. */ - if (IsWaypointClass(cls)) continue; - if (GetIfClassHasNewStopsByType(&cls, this->roadStopType, _cur_roadtype)) this->roadstop_classes.push_back(cls.Index()); - } - - if (this->ShowNewStops()) { - this->roadstop_classes.Filter(this->string_filter); - this->roadstop_classes.RebuildDone(); - this->roadstop_classes.Sort(); - - this->vscrollList->SetCount(this->roadstop_classes.size()); - } - } - - void SelectFirstAvailableTypeIfUnavailable() - { - const RoadStopClass *rs_class = RoadStopClass::Get(_roadstop_gui_settings.roadstop_class); - StationType st = GetRoadStationTypeByWindowClass(this->window_class); - - if (IsRoadStopAvailable(rs_class->GetSpec(_roadstop_gui_settings.roadstop_type), st)) return; - for (uint i = 0; i < _roadstop_gui_settings.roadstop_count; i++) { - if (IsRoadStopAvailable(rs_class->GetSpec(i), st)) { - _roadstop_gui_settings.roadstop_type = i; - break; - } - } + this->PickerWindow::Close(); } void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override { - if (!gui_scope) return; + this->PickerWindow::OnInvalidateData(data, gui_scope); - this->BuildRoadStopClassesAvailable(); - } - - EventState OnHotkey(int hotkey) override - { - if (hotkey == BROSHK_FOCUS_FILTER_BOX) { - this->SetFocusedWidget(WID_BROS_FILTER_EDITBOX); - SetFocusedWindow(this); // The user has asked to give focus to the text box, so make sure this window is focused. - return ES_HANDLED; - } - - return ES_NOT_HANDLED; - } - - void OnEditboxChanged(WidgetID widget) override - { - if (widget == WID_BROS_FILTER_EDITBOX) { - string_filter.SetFilterTerm(this->filter_editbox.text.buf); - this->roadstop_classes.SetFilterState(!string_filter.IsEmpty()); - this->roadstop_classes.ForceRebuild(); - this->InvalidateData(); + if (gui_scope) { + this->CheckOrientationValid(); } } @@ -1353,52 +1272,23 @@ public: void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { - case WID_BROS_NEWST_LIST: { - Dimension d = { 0, 0 }; - for (auto rs_class : this->roadstop_classes) { - d = maxdim(d, GetStringBoundingBox(RoadStopClass::Get(rs_class)->name)); - } - size.width = std::max(size.width, d.width + padding.width); - this->line_height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.matrix.Vertical(); - size.height = 5 * this->line_height; - resize.height = this->line_height; - break; - } - - case WID_BROS_SHOW_NEWST_TYPE: { - Dimension d = {0, 0}; - StringID str = this->GetWidget(widget)->widget_data; - for (auto roadstop_class : this->roadstop_classes) { - RoadStopClass *rs_class = RoadStopClass::Get(roadstop_class); - for (uint j = 0; j < rs_class->GetSpecCount(); j++) { - const RoadStopSpec *roadstopspec = rs_class->GetSpec(j); - SetDParam(0, (roadstopspec != nullptr && roadstopspec->name != 0) ? roadstopspec->name : STR_STATION_CLASS_DFLT_ROADSTOP); - d = maxdim(d, GetStringBoundingBox(str)); - } - } - size.width = std::max(size.width, d.width + padding.width); - break; - } - case WID_BROS_STATION_NE: case WID_BROS_STATION_SE: case WID_BROS_STATION_SW: case WID_BROS_STATION_NW: case WID_BROS_STATION_X: case WID_BROS_STATION_Y: - case WID_BROS_IMAGE: - size.width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); - size.height = ScaleGUITrad(48) + WidgetDimensions::scaled.fullbevel.Vertical(); - break; - - case WID_BROS_MATRIX: - fill.height = 1; - resize.height = 1; + size.width = ScaleGUITrad(PREVIEW_WIDTH) + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height = ScaleGUITrad(PREVIEW_HEIGHT) + WidgetDimensions::scaled.fullbevel.Vertical(); break; case WID_BROS_ACCEPTANCE: size.height = this->coverage_height; break; + + default: + this->PickerWindow::UpdateWidgetSize(widget, size, padding, fill, resize); + break; } } @@ -1424,13 +1314,13 @@ public: case WID_BROS_STATION_X: case WID_BROS_STATION_Y: { StationType st = GetRoadStationTypeByWindowClass(this->window_class); - const RoadStopSpec *spec = RoadStopClass::Get(_roadstop_gui_settings.roadstop_class)->GetSpec(_roadstop_gui_settings.roadstop_type); + const RoadStopSpec *spec = RoadStopClass::Get(_roadstop_gui.sel_class)->GetSpec(_roadstop_gui.sel_type); DrawPixelInfo tmp_dpi; Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); if (FillDrawPixelInfo(&tmp_dpi, ir)) { AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); - int x = (ir.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); - int y = (ir.Height() + ScaleSpriteTrad(48)) / 2 - ScaleSpriteTrad(31); + int x = (ir.Width() - ScaleSpriteTrad(PREVIEW_WIDTH)) / 2 + ScaleSpriteTrad(PREVIEW_LEFT); + int y = (ir.Height() + ScaleSpriteTrad(PREVIEW_HEIGHT)) / 2 - ScaleSpriteTrad(PREVIEW_BOTTOM); if (spec == nullptr) { StationPickerDrawSprite(x, y, st, INVALID_RAILTYPE, _cur_roadtype, widget - WID_BROS_STATION_NE); } else { @@ -1440,63 +1330,9 @@ public: break; } - case WID_BROS_NEWST_LIST: { - uint statclass = 0; - uint row = 0; - for (auto rs_class : this->roadstop_classes) { - if (this->vscrollList->IsVisible(statclass)) { - DrawString(r.left + WidgetDimensions::scaled.matrix.left, r.right, row * this->line_height + r.top + WidgetDimensions::scaled.matrix.top, - RoadStopClass::Get(rs_class)->name, - rs_class == _roadstop_gui_settings.roadstop_class ? TC_WHITE : TC_BLACK); - row++; - } - statclass++; - } + default: + this->PickerWindow::DrawWidget(r, widget); break; - } - - case WID_BROS_IMAGE: { - uint16_t type = this->GetWidget(widget)->GetParentWidget()->GetCurrentElement(); - assert(type < _roadstop_gui_settings.roadstop_count); - - const RoadStopSpec *spec = RoadStopClass::Get(_roadstop_gui_settings.roadstop_class)->GetSpec(type); - StationType st = GetRoadStationTypeByWindowClass(this->window_class); - - /* Set up a clipping area for the sprite preview. */ - DrawPixelInfo tmp_dpi; - Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); - if (FillDrawPixelInfo(&tmp_dpi, ir)) { - AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); - int x = (ir.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); - int y = (ir.Height() + ScaleSpriteTrad(48)) / 2 - ScaleSpriteTrad(31); - if (spec == nullptr) { - StationPickerDrawSprite(x, y, st, INVALID_RAILTYPE, _cur_roadtype, _roadstop_gui_settings.orientation); - } else { - DiagDirection orientation = _roadstop_gui_settings.orientation; - if (orientation < DIAGDIR_END && HasBit(spec->flags, RSF_DRIVE_THROUGH_ONLY)) orientation = DIAGDIR_END; - DrawRoadStopTile(x, y, _cur_roadtype, spec, st, (uint8_t)orientation); - } - } - if (!IsRoadStopAvailable(spec, st)) { - GfxFillRect(ir, PC_BLACK, FILLRECT_CHECKER); - } - break; - } - } - } - - void OnResize() override - { - if (this->vscrollList != nullptr) { - this->vscrollList->SetCapacityFromWidget(this, WID_BROS_NEWST_LIST); - } - } - - void SetStringParameters(WidgetID widget) const override - { - if (widget == WID_BROS_SHOW_NEWST_TYPE) { - const RoadStopSpec *roadstopspec = RoadStopClass::Get(_roadstop_gui_settings.roadstop_class)->GetSpec(_roadstop_gui_settings.roadstop_type); - SetDParam(0, (roadstopspec != nullptr && roadstopspec->name != 0) ? roadstopspec->name : STR_STATION_CLASS_DFLT_ROADSTOP); } } @@ -1510,12 +1346,12 @@ public: case WID_BROS_STATION_X: case WID_BROS_STATION_Y: if (widget < WID_BROS_STATION_X) { - const RoadStopSpec *spec = RoadStopClass::Get(_roadstop_gui_settings.roadstop_class)->GetSpec(_roadstop_gui_settings.roadstop_type); + const RoadStopSpec *spec = RoadStopClass::Get(_roadstop_gui.sel_class)->GetSpec(_roadstop_gui.sel_type); if (spec != nullptr && HasBit(spec->flags, RSF_DRIVE_THROUGH_ONLY)) return; } - this->RaiseWidget(WID_BROS_STATION_NE + _roadstop_gui_settings.orientation); - _roadstop_gui_settings.orientation = (DiagDirection)(widget - WID_BROS_STATION_NE); - this->LowerWidget(WID_BROS_STATION_NE + _roadstop_gui_settings.orientation); + this->RaiseWidget(WID_BROS_STATION_NE + _roadstop_gui.orientation); + _roadstop_gui.orientation = (DiagDirection)(widget - WID_BROS_STATION_NE); + this->LowerWidget(WID_BROS_STATION_NE + _roadstop_gui.orientation); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); this->SetDirty(); CloseWindowById(WC_SELECT_STATION, 0); @@ -1531,49 +1367,8 @@ public: SetViewportCatchmentStation(nullptr, true); break; - case WID_BROS_NEWST_LIST: { - auto it = this->vscrollList->GetScrolledItemFromWidget(this->roadstop_classes, pt.y, this, WID_BROS_NEWST_LIST); - if (it == this->roadstop_classes.end()) return; - RoadStopClassID class_id = *it; - if (_roadstop_gui_settings.roadstop_class != class_id && GetIfClassHasNewStopsByType(RoadStopClass::Get(class_id), roadStopType, _cur_roadtype)) { - _roadstop_gui_settings.roadstop_class = class_id; - RoadStopClass *rsclass = RoadStopClass::Get(_roadstop_gui_settings.roadstop_class); - _roadstop_gui_settings.roadstop_count = rsclass->GetSpecCount(); - _roadstop_gui_settings.roadstop_type = std::min((int)_roadstop_gui_settings.roadstop_type, std::max(0, (int)_roadstop_gui_settings.roadstop_count - 1)); - this->SelectFirstAvailableTypeIfUnavailable(); - - NWidgetMatrix *matrix = this->GetWidget(WID_BROS_MATRIX); - matrix->SetCount(_roadstop_gui_settings.roadstop_count); - matrix->SetClicked(_roadstop_gui_settings.roadstop_type); - } - if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); - this->SetDirty(); - CloseWindowById(WC_SELECT_STATION, 0); - this->CheckOrientationValid(); - break; - } - - case WID_BROS_IMAGE: { - uint16_t y = this->GetWidget(widget)->GetParentWidget()->GetCurrentElement(); - if (y >= _roadstop_gui_settings.roadstop_count) return; - - const RoadStopSpec *spec = RoadStopClass::Get(_roadstop_gui_settings.roadstop_class)->GetSpec(y); - StationType st = GetRoadStationTypeByWindowClass(this->window_class); - - if (!IsRoadStopAvailable(spec, st)) return; - - _roadstop_gui_settings.roadstop_type = y; - - this->GetWidget(widget)->GetParentWidget()->SetClicked(_roadstop_gui_settings.roadstop_type); - - if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); - this->SetDirty(); - CloseWindowById(WC_SELECT_STATION, 0); - this->CheckOrientationValid(); - break; - } - default: + this->PickerWindow::OnClick(pt, widget, click_count); break; } } @@ -1583,119 +1378,66 @@ public: CheckRedrawStationCoverage(this); } - IntervalTimer yearly_interval = {{TimerGameCalendar::YEAR, TimerGameCalendar::Priority::NONE}, [this](auto) { - this->InvalidateData(); - }}; - static inline HotkeyList road_hotkeys{"buildroadstop", { - Hotkey('F', "focus_filter_box", BROSHK_FOCUS_FILTER_BOX), + Hotkey('F', "focus_filter_box", PCWHK_FOCUS_FILTER_BOX), }}; static inline HotkeyList tram_hotkeys{"buildtramstop", { - Hotkey('F', "focus_filter_box", BROSHK_FOCUS_FILTER_BOX), + Hotkey('F', "focus_filter_box", PCWHK_FOCUS_FILTER_BOX), }}; }; -Listing BuildRoadStationWindow::last_sorting = { false, 0 }; -Filtering BuildRoadStationWindow::last_filtering = { false, 0 }; - -const std::initializer_list BuildRoadStationWindow::sorter_funcs = { - &RoadStopClassIDSorter, -}; - -const std::initializer_list BuildRoadStationWindow::filter_funcs = { - &TagNameFilter, -}; - /** Widget definition of the build road station window */ static constexpr NWidgetPart _nested_road_station_picker_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, WID_BROS_CAPTION), NWidget(WWT_SHADEBOX, COLOUR_DARK_GREEN), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_SHOW_NEWST_DEFSIZE), - NWidget(WWT_DEFSIZEBOX, COLOUR_DARK_GREEN), - EndContainer(), + NWidget(WWT_DEFSIZEBOX, COLOUR_DARK_GREEN), EndContainer(), NWidget(NWID_HORIZONTAL), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN), - NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), SetPadding(WidgetDimensions::unscaled.picker), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), - NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_picker, 0), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_FILTER_CONTAINER), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), - NWidget(WWT_TEXT, COLOUR_DARK_GREEN), SetFill(0, 1), SetDataTip(STR_LIST_FILTER_TITLE, STR_NULL), - NWidget(WWT_EDITBOX, COLOUR_GREY, WID_BROS_FILTER_EDITBOX), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), + NWidget(NWID_VERTICAL), + NWidgetFunction(MakePickerClassWidgets), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_picker, 0), SetPadding(WidgetDimensions::unscaled.picker), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_AVAILABLE_ORIENTATIONS), + /* 6-orientation plane. */ + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), + NWidget(NWID_HORIZONTAL_LTR), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_NW), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_NE), SetFill(0, 0), EndContainer(), + EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_X), SetFill(0, 0), EndContainer(), + EndContainer(), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), + NWidget(NWID_HORIZONTAL_LTR), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_SW), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_SE), SetFill(0, 0), EndContainer(), + EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_Y), SetFill(0, 0), EndContainer(), EndContainer(), EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_SHOW_NEWST_ADDITIONS), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_MATRIX, COLOUR_GREY, WID_BROS_NEWST_LIST), SetMinimalSize(122, 71), SetFill(1, 0), - SetMatrixDataTip(1, 0, STR_STATION_BUILD_STATION_CLASS_TOOLTIP), SetScrollbar(WID_BROS_NEWST_SCROLL), - NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_BROS_NEWST_SCROLL), - EndContainer(), - EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_SHOW_NEWST_ORIENTATION), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_ORIENTATION, STR_NULL), SetFill(1, 0), - EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_AVAILABLE_ORIENTATIONS), - /* 6-orientation plane. */ - NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), - NWidget(NWID_HORIZONTAL_LTR), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_NW), SetFill(0, 0), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_NE), SetFill(0, 0), EndContainer(), - EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_X), SetFill(0, 0), EndContainer(), - EndContainer(), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), - NWidget(NWID_HORIZONTAL_LTR), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_SW), SetFill(0, 0), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_SE), SetFill(0, 0), EndContainer(), - EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_Y), SetFill(0, 0), EndContainer(), - EndContainer(), - EndContainer(), - /* 2-orientation plane. */ - NWidget(NWID_VERTICAL), SetPIPRatio(0, 0, 1), - NWidget(NWID_HORIZONTAL_LTR), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_X), SetFill(0, 0), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_Y), SetFill(0, 0), EndContainer(), - EndContainer(), - EndContainer(), - EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_SHOW_NEWST_TYPE_SEL), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BROS_SHOW_NEWST_TYPE), SetMinimalSize(144, 8), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_ORANGE), SetFill(1, 0), - EndContainer(), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_COVERAGE_AREA_TITLE, STR_NULL), SetFill(1, 0), - NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BROS_LT_OFF), SetMinimalSize(60, 12), - SetDataTip(STR_STATION_BUILD_COVERAGE_OFF, STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BROS_LT_ON), SetMinimalSize(60, 12), - SetDataTip(STR_STATION_BUILD_COVERAGE_ON, STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP), - EndContainer(), - EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_SHOW_NEWST_MATRIX), - /* Hidden panel as NWID_MATRIX does not support SetScrollbar() */ - NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetScrollbar(WID_BROS_MATRIX_SCROLL), - NWidget(NWID_MATRIX, COLOUR_DARK_GREEN, WID_BROS_MATRIX), SetPIP(0, 2, 0), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BROS_IMAGE), - SetFill(0, 0), SetResize(0, 0), SetDataTip(0x0, STR_STATION_BUILD_STATION_TYPE_TOOLTIP), SetScrollbar(WID_BROS_MATRIX_SCROLL), - EndContainer(), + /* 2-orientation plane. */ + NWidget(NWID_VERTICAL), SetPIPRatio(0, 0, 1), + NWidget(NWID_HORIZONTAL_LTR), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_X), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_Y), SetFill(0, 0), EndContainer(), EndContainer(), EndContainer(), EndContainer(), + NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_COVERAGE_AREA_TITLE, STR_NULL), SetFill(1, 0), + NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BROS_LT_OFF), SetMinimalSize(60, 12), + SetDataTip(STR_STATION_BUILD_COVERAGE_OFF, STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BROS_LT_ON), SetMinimalSize(60, 12), + SetDataTip(STR_STATION_BUILD_COVERAGE_ON, STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP), + EndContainer(), + NWidget(WWT_EMPTY, INVALID_COLOUR, WID_BROS_ACCEPTANCE), SetFill(1, 1), SetResize(1, 0), SetMinimalTextLines(2, 0), EndContainer(), - NWidget(WWT_EMPTY, INVALID_COLOUR, WID_BROS_ACCEPTANCE), SetFill(1, 1), SetResize(1, 0), SetMinimalTextLines(2, WidgetDimensions::unscaled.vsep_normal), - EndContainer(), - EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_SHOW_NEWST_RESIZE), - NWidget(NWID_VERTICAL), - NWidget(NWID_VSCROLLBAR, COLOUR_DARK_GREEN, WID_BROS_MATRIX_SCROLL), - NWidget(WWT_RESIZEBOX, COLOUR_DARK_GREEN), EndContainer(), EndContainer(), + NWidgetFunction(MakePickerTypeWidgets), EndContainer(), }; @@ -1713,67 +1455,29 @@ static constexpr NWidgetPart _nested_tram_station_picker_widgets[] = { NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, WID_BROS_CAPTION), NWidget(WWT_SHADEBOX, COLOUR_DARK_GREEN), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_SHOW_NEWST_DEFSIZE), - NWidget(WWT_DEFSIZEBOX, COLOUR_DARK_GREEN), - EndContainer(), + NWidget(WWT_DEFSIZEBOX, COLOUR_DARK_GREEN), EndContainer(), NWidget(NWID_HORIZONTAL), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN), - NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), SetPadding(WidgetDimensions::unscaled.picker), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), - NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_picker, 0), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_FILTER_CONTAINER), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), - NWidget(WWT_TEXT, COLOUR_DARK_GREEN), SetFill(0, 1), SetDataTip(STR_LIST_FILTER_TITLE, STR_NULL), - NWidget(WWT_EDITBOX, COLOUR_GREY, WID_BROS_FILTER_EDITBOX), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), - EndContainer(), - EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_SHOW_NEWST_ADDITIONS), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_MATRIX, COLOUR_GREY, WID_BROS_NEWST_LIST), SetMinimalSize(122, 71), SetFill(1, 0), - SetMatrixDataTip(1, 0, STR_STATION_BUILD_STATION_CLASS_TOOLTIP), SetScrollbar(WID_BROS_NEWST_SCROLL), - NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_BROS_NEWST_SCROLL), - EndContainer(), - EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_SHOW_NEWST_ORIENTATION), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_ORIENTATION, STR_NULL), SetFill(1, 0), - EndContainer(), - NWidget(NWID_HORIZONTAL_LTR), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_X), SetFill(0, 0), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_Y), SetFill(0, 0), EndContainer(), - EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_SHOW_NEWST_TYPE_SEL), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BROS_SHOW_NEWST_TYPE), SetMinimalSize(144, 8), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_ORANGE), SetFill(1, 0), - EndContainer(), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_COVERAGE_AREA_TITLE, STR_NULL), SetFill(1, 0), - NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BROS_LT_OFF), SetMinimalSize(60, 12), - SetDataTip(STR_STATION_BUILD_COVERAGE_OFF, STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BROS_LT_ON), SetMinimalSize(60, 12), - SetDataTip(STR_STATION_BUILD_COVERAGE_ON, STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP), - EndContainer(), + NWidget(NWID_VERTICAL), + NWidgetFunction(MakePickerClassWidgets), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_picker, 0), SetPadding(WidgetDimensions::unscaled.picker), + NWidget(NWID_HORIZONTAL_LTR), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_X), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_Y), SetFill(0, 0), EndContainer(), EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_SHOW_NEWST_MATRIX), - /* Hidden panel as NWID_MATRIX does not support SetScrollbar() */ - NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetScrollbar(WID_BROS_MATRIX_SCROLL), - NWidget(NWID_MATRIX, COLOUR_DARK_GREEN, WID_BROS_MATRIX), SetPIP(0, 2, 0), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BROS_IMAGE), - SetFill(0, 0), SetResize(0, 0), SetDataTip(0x0, STR_STATION_BUILD_STATION_TYPE_TOOLTIP), SetScrollbar(WID_BROS_MATRIX_SCROLL), - EndContainer(), - EndContainer(), - EndContainer(), + NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_COVERAGE_AREA_TITLE, STR_NULL), SetFill(1, 0), + NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BROS_LT_OFF), SetMinimalSize(60, 12), + SetDataTip(STR_STATION_BUILD_COVERAGE_OFF, STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BROS_LT_ON), SetMinimalSize(60, 12), + SetDataTip(STR_STATION_BUILD_COVERAGE_ON, STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP), EndContainer(), + NWidget(WWT_EMPTY, INVALID_COLOUR, WID_BROS_ACCEPTANCE), SetFill(1, 1), SetResize(1, 0), SetMinimalTextLines(2, 0), EndContainer(), - NWidget(WWT_EMPTY, INVALID_COLOUR, WID_BROS_ACCEPTANCE), SetFill(1, 1), SetResize(1, 0), SetMinimalTextLines(2, WidgetDimensions::unscaled.vsep_normal), - EndContainer(), - EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_SHOW_NEWST_RESIZE), - NWidget(NWID_VERTICAL), - NWidget(NWID_VSCROLLBAR, COLOUR_DARK_GREEN, WID_BROS_MATRIX_SCROLL), - NWidget(WWT_RESIZEBOX, COLOUR_DARK_GREEN), EndContainer(), EndContainer(), + NWidgetFunction(MakePickerTypeWidgets), EndContainer(), }; @@ -1793,7 +1497,7 @@ static void ShowRVStationPicker(Window *parent, RoadStopType rs) void InitializeRoadGui() { _road_depot_orientation = DIAGDIR_NW; - _roadstop_gui_settings.orientation = DIAGDIR_NW; + _roadstop_gui.orientation = DIAGDIR_NW; } /** diff --git a/src/waypoint.cpp b/src/waypoint.cpp index db1b36b1ec..78f9ba0df7 100644 --- a/src/waypoint.cpp +++ b/src/waypoint.cpp @@ -21,12 +21,13 @@ * Draw a waypoint * @param x coordinate * @param y coordinate - * @param stat_id station id + * @param station_class Station class. + * @param station_type Station type within class. * @param railtype RailType to use for */ -void DrawWaypointSprite(int x, int y, int stat_id, RailType railtype) +void DrawWaypointSprite(int x, int y, StationClassID station_class, uint16_t station_type, RailType railtype) { - if (!DrawStationTile(x, y, railtype, AXIS_X, STAT_CLASS_WAYP, stat_id)) { + if (!DrawStationTile(x, y, railtype, AXIS_X, station_class, station_type)) { StationPickerDrawSprite(x, y, STATION_WAYPOINT, railtype, INVALID_ROADTYPE, AXIS_X); } } diff --git a/src/waypoint_func.h b/src/waypoint_func.h index 2906fa6369..e919390576 100644 --- a/src/waypoint_func.h +++ b/src/waypoint_func.h @@ -14,10 +14,12 @@ #include "command_type.h" #include "station_type.h" +enum StationClassID : uint16_t; + CommandCost RemoveBuoy(TileIndex tile, DoCommandFlag flags); Axis GetAxisForNewWaypoint(TileIndex tile); void ShowWaypointWindow(const Waypoint *wp); -void DrawWaypointSprite(int x, int y, int stat_id, RailType railtype); +void DrawWaypointSprite(int x, int y, StationClassID station_class, uint16_t station_type, RailType railtype); #endif /* WAYPOINT_FUNC_H */ diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt index 933e8c5056..a69f7e7b16 100644 --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -39,6 +39,7 @@ add_files( object_widget.h order_widget.h osk_widget.h + picker_widget.h rail_widget.h road_widget.h screenshot_widget.h diff --git a/src/widgets/object_widget.h b/src/widgets/object_widget.h index 9adf13dde7..b01e1d3ae4 100644 --- a/src/widgets/object_widget.h +++ b/src/widgets/object_widget.h @@ -12,18 +12,10 @@ /** Widgets of the #BuildObjectWindow class. */ enum BuildObjectWidgets : WidgetID { - WID_BO_FILTER, ///< The filter text box for the object list. - WID_BO_CLASS_LIST, ///< The list with classes. - WID_BO_SCROLLBAR, ///< The scrollbar associated with the list. WID_BO_OBJECT_MATRIX, ///< The matrix with preview sprites. WID_BO_OBJECT_SPRITE, ///< A preview sprite of the object. - WID_BO_OBJECT_NAME, ///< The name of the selected object. WID_BO_OBJECT_SIZE, ///< The size of the selected object. WID_BO_INFO, ///< Other information about the object (from the NewGRF). - - WID_BO_SELECT_MATRIX, ///< Selection preview matrix of objects of a given class. - WID_BO_SELECT_IMAGE, ///< Preview image in the #WID_BO_SELECT_MATRIX. - WID_BO_SELECT_SCROLL, ///< Scrollbar next to the #WID_BO_SELECT_MATRIX. }; #endif /* WIDGETS_OBJECT_WIDGET_H */ diff --git a/src/widgets/picker_widget.h b/src/widgets/picker_widget.h new file mode 100644 index 0000000000..6e89da98e8 --- /dev/null +++ b/src/widgets/picker_widget.h @@ -0,0 +1,31 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file picker_widget.h Types related to the picker widgets. */ + +#ifndef WIDGETS_PICKER_WIDGET_H +#define WIDGETS_PICKER_WIDGET_H + +/** Widgets of the #PickerWindow class. */ +enum PickerClassWindowWidgets : WidgetID { + WID_PW_START = 1 << 16, ///< Dummy to ensure widgets don't overlap. + + WID_PW_CLASS_SEL, ///< Stack to hide the class picker. + WID_PW_CLASS_FILTER, ///< Editbox filter. + WID_PW_CLASS_LIST, ///< List of classes. + WID_PW_CLASS_SCROLL, ///< Scrollbar for list of classes. + + WID_PW_TYPE_SEL, ///< Stack to hide the type picker. + WID_PW_TYPE_FILTER, ///< Text filter. + WID_PW_TYPE_MATRIX, ///< Matrix with items. + WID_PW_TYPE_ITEM, ///< A single item. + WID_PW_TYPE_SCROLL, ///< Scrollbar for the matrix. + WID_PW_TYPE_NAME, ///< Name of selected item. + WID_PW_TYPE_RESIZE, ///< Type resize handle. +}; + +#endif /* WIDGETS_PICKER_WIDGET_H */ diff --git a/src/widgets/rail_widget.h b/src/widgets/rail_widget.h index a5834b2779..f90280c52b 100644 --- a/src/widgets/rail_widget.h +++ b/src/widgets/rail_widget.h @@ -60,20 +60,6 @@ enum BuildRailStationWidgets : WidgetID { WID_BRAS_HIGHLIGHT_ON, ///< Button for turning coverage highlighting on. WID_BRAS_COVERAGE_TEXTS, ///< Empty space for the coverage texts. - WID_BRAS_MATRIX, ///< Matrix widget displaying the available stations. - WID_BRAS_IMAGE, ///< Panel used at each cell of the matrix. - WID_BRAS_MATRIX_SCROLL, ///< Scrollbar of the matrix widget. - - WID_BRAS_FILTER_CONTAINER, ///< Container for the filter text box for the station class list. - WID_BRAS_FILTER_EDITBOX, ///< Filter text box for the station class list. - WID_BRAS_SHOW_NEWST_DEFSIZE, ///< Selection for default-size button for newstation. - WID_BRAS_SHOW_NEWST_ADDITIONS, ///< Selection for newstation class selection list. - WID_BRAS_SHOW_NEWST_MATRIX, ///< Selection for newstation image matrix. - WID_BRAS_SHOW_NEWST_RESIZE, ///< Selection for panel and resize at bottom right for newstation. - WID_BRAS_SHOW_NEWST_TYPE, ///< Display of selected station type. - WID_BRAS_NEWST_LIST, ///< List with available newstation classes. - WID_BRAS_NEWST_SCROLL, ///< Scrollbar of the #WID_BRAS_NEWST_LIST. - WID_BRAS_PLATFORM_NUM_BEGIN = WID_BRAS_PLATFORM_NUM_1 - 1, ///< Helper for determining the chosen platform width. WID_BRAS_PLATFORM_LEN_BEGIN = WID_BRAS_PLATFORM_LEN_1 - 1, ///< Helper for determining the chosen platform length. }; diff --git a/src/widgets/road_widget.h b/src/widgets/road_widget.h index 5da57d024c..c876acbad2 100644 --- a/src/widgets/road_widget.h +++ b/src/widgets/road_widget.h @@ -53,21 +53,7 @@ enum BuildRoadStationWidgets : WidgetID { WID_BROS_LT_OFF, ///< Turn off area highlight. WID_BROS_LT_ON, ///< Turn on area highlight. WID_BROS_ACCEPTANCE, ///< Station acceptance info. - WID_BROS_MATRIX, ///< Matrix widget displaying all available road stops. - WID_BROS_IMAGE, ///< Panel used for each image of the matrix. - WID_BROS_MATRIX_SCROLL, ///< Scrollbar of the #WID_BROS_SHOW_NEWST_ADDITIONS. - WID_BROS_FILTER_CONTAINER, ///< Container for the filter text box for the road stop class list. - WID_BROS_FILTER_EDITBOX, ///< Filter text box for the road stop class list. WID_BROS_AVAILABLE_ORIENTATIONS, ///< Selection for selecting 6 or 2 orientations. - WID_BROS_SHOW_NEWST_DEFSIZE, ///< Selection for default-size button for new road stops. - WID_BROS_SHOW_NEWST_ADDITIONS, ///< Selection for new class selection list. - WID_BROS_SHOW_NEWST_MATRIX, ///< Selection for new stop image matrix. - WID_BROS_SHOW_NEWST_RESIZE, ///< Selection for panel and resize at bottom right for new stops. - WID_BROS_SHOW_NEWST_ORIENTATION, ///< Selection for the orientation string for new stops. - WID_BROS_SHOW_NEWST_TYPE_SEL, ///< Selection for the type name. - WID_BROS_SHOW_NEWST_TYPE, ///< Display of selected stop type. - WID_BROS_NEWST_LIST, ///< List with new road stops. - WID_BROS_NEWST_SCROLL, ///< Scrollbar of the #WID_BROS_NEWST_LIST. }; #endif /* WIDGETS_ROAD_WIDGET_H */ From b76517816e214694b5ed212f93563ec4ea6afc29 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 7 May 2024 12:13:48 +0100 Subject: [PATCH 513/695] Feature: Add "All" filter to build-picker show types from all classes. Toggling the "All" filter causes the class selection to be ignored, so that items from all classes can be displayed together. The class text filter is still applied. This makes it easier to search amongst types for a feature. --- src/lang/english.txt | 3 +++ src/picker_gui.cpp | 35 +++++++++++++++++++++++++++++++++-- src/picker_gui.h | 6 ++++++ src/widgets/picker_widget.h | 1 + 4 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 66858310f6..62298a8c07 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2797,6 +2797,9 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Select l STR_STATION_BUILD_DRAG_DROP :{BLACK}Drag & Drop STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Build a station using drag & drop +STR_PICKER_MODE_ALL :All +STR_PICKER_MODE_ALL_TOOLTIP :Toggle showing items from all classes + STR_PICKER_STATION_CLASS_TOOLTIP :Select a station class to display STR_PICKER_STATION_TYPE_TOOLTIP :Select a station type to build. Ctrl+Click to add or remove in saved items STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Select a waypoint class to display diff --git a/src/picker_gui.cpp b/src/picker_gui.cpp index a9eda4298f..291532a5c5 100644 --- a/src/picker_gui.cpp +++ b/src/picker_gui.cpp @@ -107,6 +107,8 @@ void PickerWindow::ConstructWindow() this->classes.SetFilterFuncs(_class_filter_funcs); if (this->has_type_picker) { + SetWidgetDisabledState(WID_PW_MODE_ALL, !this->callbacks.HasClassChoice()); + this->GetWidget(WID_PW_TYPE_ITEM)->tool_tip = this->callbacks.GetTypeTooltip(); auto *matrix = this->GetWidget(WID_PW_TYPE_MATRIX); @@ -228,7 +230,9 @@ void PickerWindow::OnClick(Point pt, WidgetID widget, int) auto it = vscroll->GetScrolledItemFromWidget(this->classes, pt.y, this, WID_PW_CLASS_LIST); if (it == this->classes.end()) return; - if (this->callbacks.GetSelectedClass() != *it) { + if (this->callbacks.GetSelectedClass() != *it || HasBit(this->callbacks.mode, PFM_ALL)) { + ClrBit(this->callbacks.mode, PFM_ALL); // Disable showing all. + SetWidgetLoweredState(WID_PW_MODE_ALL, false); this->callbacks.SetSelectedClass(*it); this->InvalidateData(PFI_TYPE | PFI_POSITION | PFI_VALIDATE); } @@ -237,6 +241,12 @@ void PickerWindow::OnClick(Point pt, WidgetID widget, int) break; } + case WID_PW_MODE_ALL: + ToggleBit(this->callbacks.mode, widget - WID_PW_MODE_ALL); + SetWidgetLoweredState(widget, HasBit(this->callbacks.mode, widget - WID_PW_MODE_ALL)); + this->InvalidateData(PFI_TYPE | PFI_POSITION); + break; + /* Type Picker */ case WID_PW_TYPE_ITEM: { int sel = this->GetWidget(widget)->GetParentWidget()->GetCurrentElement(); @@ -268,6 +278,10 @@ void PickerWindow::OnInvalidateData(int data, bool gui_scope) this->BuildPickerTypeList(); if ((data & PFI_VALIDATE) != 0) this->EnsureSelectedTypeIsValid(); if ((data & PFI_POSITION) != 0) this->EnsureSelectedTypeIsVisible(); + + if (this->has_type_picker) { + SetWidgetLoweredState(WID_PW_MODE_ALL, HasBit(this->callbacks.mode, PFM_ALL)); + } } EventState PickerWindow::OnHotkey(int hotkey) @@ -358,9 +372,23 @@ void PickerWindow::BuildPickerTypeList() if (!this->types.NeedRebuild()) return; this->types.clear(); + bool show_all = HasBit(this->callbacks.mode, PFM_ALL); int cls_id = this->callbacks.GetSelectedClass(); - { + if (show_all) { + /* Reserve enough space for everything. */ + int total = 0; + for (int class_index : this->classes) total += this->callbacks.GetTypeCount(class_index); + this->types.reserve(total); + /* Add types in all classes. */ + for (int class_index : this->classes) { + int count = this->callbacks.GetTypeCount(class_index); + for (int i = 0; i < count; i++) { + if (this->callbacks.GetTypeName(class_index, i) == INVALID_STRING_ID) continue; + this->types.emplace_back(this->callbacks.GetPickerItem(class_index, i)); + } + } + } else { /* Add types in only the selected class. */ if (cls_id >= 0 && cls_id < this->callbacks.GetClassCount()) { int count = this->callbacks.GetTypeCount(cls_id); @@ -442,6 +470,9 @@ std::unique_ptr MakePickerTypeWidgets() NWidget(WWT_PANEL, COLOUR_DARK_GREEN), NWidget(WWT_EDITBOX, COLOUR_DARK_GREEN, WID_PW_TYPE_FILTER), SetPadding(2), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_TEXTBTN, COLOUR_DARK_GREEN, WID_PW_MODE_ALL), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_PICKER_MODE_ALL, STR_PICKER_MODE_ALL_TOOLTIP), + EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetScrollbar(WID_PW_TYPE_SCROLL), NWidget(NWID_MATRIX, COLOUR_DARK_GREEN, WID_PW_TYPE_MATRIX), SetPIP(0, 2, 0), SetPadding(WidgetDimensions::unscaled.picker), diff --git a/src/picker_gui.h b/src/picker_gui.h index 861abe0811..e48cc5f269 100644 --- a/src/picker_gui.h +++ b/src/picker_gui.h @@ -79,6 +79,8 @@ public: Listing type_last_sorting = { false, 0 }; ///< Default sorting of #PickerTypeList. Filtering type_last_filtering = { false, 0 }; ///< Default filtering of #PickerTypeList. + + uint8_t mode = 0; ///< Bitmask of \c PickerFilterModes. }; /** Helper for PickerCallbacks when the class system is based on NewGRFClass. */ @@ -115,6 +117,10 @@ using PickerTypeList = GUIList; class PickerWindow : public PickerWindowBase { public: + enum PickerFilterModes { + PFM_ALL = 0, ///< Show all classes. + }; + enum PickerFilterInvalidation { PFI_CLASS = 1U << 0, ///< Refresh the class list. PFI_TYPE = 1U << 1, ///< Refresh the type list. diff --git a/src/widgets/picker_widget.h b/src/widgets/picker_widget.h index 6e89da98e8..fe45a2a427 100644 --- a/src/widgets/picker_widget.h +++ b/src/widgets/picker_widget.h @@ -21,6 +21,7 @@ enum PickerClassWindowWidgets : WidgetID { WID_PW_TYPE_SEL, ///< Stack to hide the type picker. WID_PW_TYPE_FILTER, ///< Text filter. + WID_PW_MODE_ALL, ///< Toggle "Show all" filter mode. WID_PW_TYPE_MATRIX, ///< Matrix with items. WID_PW_TYPE_ITEM, ///< A single item. WID_PW_TYPE_SCROLL, ///< Scrollbar for the matrix. From fde3b35a24cd2556564356ed3f5ce71fd849711f Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 7 May 2024 12:13:49 +0100 Subject: [PATCH 514/695] Feature: New filter to show only used types in build-pickers. This filters the build-picker type lists to only show types that have already been placed in the current game, making it simpler to get to build matching features. --- src/lang/english.txt | 2 ++ src/object_gui.cpp | 12 ++++++++++ src/picker_gui.cpp | 42 +++++++++++++++++++++++++++++---- src/picker_gui.h | 13 ++++++++++ src/rail_gui.cpp | 47 +++++++++++++++++++++++++++++++++++++ src/road_gui.cpp | 17 ++++++++++++++ src/widgets/picker_widget.h | 1 + 7 files changed, 130 insertions(+), 4 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 62298a8c07..d45870a205 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2799,6 +2799,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Build a STR_PICKER_MODE_ALL :All STR_PICKER_MODE_ALL_TOOLTIP :Toggle showing items from all classes +STR_PICKER_MODE_USED :Used +STR_PICKER_MODE_USED_TOOLTIP :Toggle showing only existing items STR_PICKER_STATION_CLASS_TOOLTIP :Select a station class to display STR_PICKER_STATION_TYPE_TOOLTIP :Select a station type to build. Ctrl+Click to add or remove in saved items diff --git a/src/object_gui.cpp b/src/object_gui.cpp index 42f4c743b9..ff4d86824f 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -9,11 +9,13 @@ #include "stdafx.h" #include "command_func.h" +#include "company_func.h" #include "hotkeys.h" #include "newgrf.h" #include "newgrf_object.h" #include "newgrf_text.h" #include "object.h" +#include "object_base.h" #include "picker_gui.h" #include "sound_func.h" #include "strings_func.h" @@ -91,6 +93,16 @@ public: } } + void FillUsedItems(std::set &items) override + { + for (const Object *o : Object::Iterate()) { + if (GetTileOwner(o->location.tile) != _current_company) continue; + const ObjectSpec *spec = ObjectSpec::Get(o->type); + if (spec == nullptr || spec->class_index == INVALID_OBJECT_CLASS || !spec->IsEverAvailable()) continue; + items.insert(GetPickerItem(spec)); + } + } + static ObjectPickerCallbacks instance; }; /* static */ ObjectPickerCallbacks ObjectPickerCallbacks::instance; diff --git a/src/picker_gui.cpp b/src/picker_gui.cpp index 291532a5c5..94841519bf 100644 --- a/src/picker_gui.cpp +++ b/src/picker_gui.cpp @@ -27,6 +27,8 @@ #include "widgets/picker_widget.h" +#include "table/sprites.h" + #include "safeguards.h" /** Sort classes by id. */ @@ -107,6 +109,10 @@ void PickerWindow::ConstructWindow() this->classes.SetFilterFuncs(_class_filter_funcs); if (this->has_type_picker) { + /* Update used type information. */ + this->callbacks.used.clear(); + this->callbacks.FillUsedItems(this->callbacks.used); + SetWidgetDisabledState(WID_PW_MODE_ALL, !this->callbacks.HasClassChoice()); this->GetWidget(WID_PW_TYPE_ITEM)->tool_tip = this->callbacks.GetTypeTooltip(); @@ -200,6 +206,9 @@ void PickerWindow::DrawWidget(const Rect &r, WidgetID widget) const int y = (ir.Height() + ScaleSpriteTrad(PREVIEW_HEIGHT)) / 2 - ScaleSpriteTrad(PREVIEW_BOTTOM); this->callbacks.DrawType(x, y, item.class_index, item.index); + if (this->callbacks.used.contains(item)) { + DrawSprite(SPR_BLOT, PALETTE_TO_GREEN, ir.Width() - GetSpriteSize(SPR_BLOT).width, 0); + } } if (!this->callbacks.IsTypeAvailable(item.class_index, item.index)) { @@ -232,7 +241,6 @@ void PickerWindow::OnClick(Point pt, WidgetID widget, int) if (this->callbacks.GetSelectedClass() != *it || HasBit(this->callbacks.mode, PFM_ALL)) { ClrBit(this->callbacks.mode, PFM_ALL); // Disable showing all. - SetWidgetLoweredState(WID_PW_MODE_ALL, false); this->callbacks.SetSelectedClass(*it); this->InvalidateData(PFI_TYPE | PFI_POSITION | PFI_VALIDATE); } @@ -242,9 +250,13 @@ void PickerWindow::OnClick(Point pt, WidgetID widget, int) } case WID_PW_MODE_ALL: + case WID_PW_MODE_USED: ToggleBit(this->callbacks.mode, widget - WID_PW_MODE_ALL); - SetWidgetLoweredState(widget, HasBit(this->callbacks.mode, widget - WID_PW_MODE_ALL)); - this->InvalidateData(PFI_TYPE | PFI_POSITION); + if (!this->IsWidgetDisabled(WID_PW_MODE_ALL) && HasBit(this->callbacks.mode, widget - WID_PW_MODE_ALL)) { + /* Enabling used or saved filters automatically enables all. */ + SetBit(this->callbacks.mode, PFM_ALL); + } + this->InvalidateData(PFI_CLASS | PFI_TYPE | PFI_POSITION); break; /* Type Picker */ @@ -281,6 +293,7 @@ void PickerWindow::OnInvalidateData(int data, bool gui_scope) if (this->has_type_picker) { SetWidgetLoweredState(WID_PW_MODE_ALL, HasBit(this->callbacks.mode, PFM_ALL)); + SetWidgetLoweredState(WID_PW_MODE_USED, HasBit(this->callbacks.mode, PFM_USED)); } } @@ -332,8 +345,10 @@ void PickerWindow::BuildPickerClassList() this->classes.clear(); this->classes.reserve(count); + bool filter_used = HasBit(this->callbacks.mode, PFM_USED); for (int i = 0; i < count; i++) { if (this->callbacks.GetClassName(i) == INVALID_STRING_ID) continue; + if (filter_used && std::none_of(std::begin(this->callbacks.used), std::end(this->callbacks.used), [i](const PickerItem &item) { return item.class_index == i; })) continue; this->classes.emplace_back(i); } @@ -366,6 +381,15 @@ void PickerWindow::EnsureSelectedClassIsVisible() this->GetScrollbar(WID_PW_CLASS_SCROLL)->ScrollTowards(pos); } +void PickerWindow::RefreshUsedTypeList() +{ + if (!this->has_type_picker) return; + + this->callbacks.used.clear(); + this->callbacks.FillUsedItems(this->callbacks.used); + this->InvalidateData(PFI_TYPE); +} + /** Builds the filter list of types. */ void PickerWindow::BuildPickerTypeList() { @@ -373,9 +397,18 @@ void PickerWindow::BuildPickerTypeList() this->types.clear(); bool show_all = HasBit(this->callbacks.mode, PFM_ALL); + bool filter_used = HasBit(this->callbacks.mode, PFM_USED); int cls_id = this->callbacks.GetSelectedClass(); - if (show_all) { + if (filter_used) { + /* Showing used items. */ + this->types.reserve(this->callbacks.used.size()); + for (const PickerItem &item : this->callbacks.used) { + if (!show_all && item.class_index != cls_id) continue; + if (this->callbacks.GetTypeName(item.class_index, item.index) == INVALID_STRING_ID) continue; + this->types.emplace_back(item); + } + } else if (show_all) { /* Reserve enough space for everything. */ int total = 0; for (int class_index : this->classes) total += this->callbacks.GetTypeCount(class_index); @@ -472,6 +505,7 @@ std::unique_ptr MakePickerTypeWidgets() EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_TEXTBTN, COLOUR_DARK_GREEN, WID_PW_MODE_ALL), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_PICKER_MODE_ALL, STR_PICKER_MODE_ALL_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_DARK_GREEN, WID_PW_MODE_USED), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_PICKER_MODE_USED, STR_PICKER_MODE_USED_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetScrollbar(WID_PW_TYPE_SCROLL), diff --git a/src/picker_gui.h b/src/picker_gui.h index e48cc5f269..6f323372ee 100644 --- a/src/picker_gui.h +++ b/src/picker_gui.h @@ -16,6 +16,7 @@ #include "strings_type.h" #include "timer/timer.h" #include "timer/timer_game_calendar.h" +#include "timer/timer_window.h" #include "window_gui.h" #include "window_type.h" @@ -74,6 +75,9 @@ public: /** Draw preview image of an item. */ virtual void DrawType(int x, int y, int cls_id, int id) const = 0; + /** Fill a set with all items that are used by the current player. */ + virtual void FillUsedItems(std::set &items) = 0; + Listing class_last_sorting = { false, 0 }; ///< Default sorting of #PickerClassList. Filtering class_last_filtering = { false, 0 }; ///< Default filtering of #PickerClassList. @@ -81,6 +85,8 @@ public: Filtering type_last_filtering = { false, 0 }; ///< Default filtering of #PickerTypeList. uint8_t mode = 0; ///< Bitmask of \c PickerFilterModes. + + std::set used; ///< Set of items used in the current game by the current company. }; /** Helper for PickerCallbacks when the class system is based on NewGRFClass. */ @@ -108,6 +114,7 @@ public: } }; + struct PickerFilterData : StringFilter { const PickerCallbacks *callbacks; ///< Callbacks for filter functions to access to callbacks. }; @@ -119,6 +126,7 @@ class PickerWindow : public PickerWindowBase { public: enum PickerFilterModes { PFM_ALL = 0, ///< Show all classes. + PFM_USED = 1, ///< Show used types. }; enum PickerFilterInvalidation { @@ -171,6 +179,7 @@ private: PickerFilterData type_string_filter; QueryString type_editbox; ///< Filter editbox + void RefreshUsedTypeList(); void BuildPickerTypeList(); void EnsureSelectedTypeIsValid(); void EnsureSelectedTypeIsVisible(); @@ -178,6 +187,10 @@ private: IntervalTimer yearly_interval = {{TimerGameCalendar::YEAR, TimerGameCalendar::Priority::NONE}, [this](auto) { this->SetDirty(); }}; + + IntervalTimer refresh_interval = {std::chrono::seconds(3), [this](auto) { + RefreshUsedTypeList(); + }}; }; class NWidgetBase; diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index eea214f670..6e2e87ab93 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -9,6 +9,8 @@ #include "stdafx.h" #include "gui.h" +#include "station_base.h" +#include "waypoint_base.h" #include "window_gui.h" #include "station_gui.h" #include "terraform_gui.h" @@ -944,6 +946,19 @@ static void HandleStationPlacement(TileIndex start, TileIndex end) ShowSelectStationIfNeeded(ta, proc); } +/** + * Test if a station/waypoint uses the default graphics. + * @param bst Station to test. + * @return true if at least one of its rail station tiles uses the default graphics. + */ +static bool StationUsesDefaultType(const BaseStation *bst) +{ + for (TileIndex t : bst->train_station) { + if (bst->TileBelongsToRailStation(t) && IsRailStation(t) && GetCustomStationSpecIndex(t) == 0) return true; + } + return false; +} + class StationPickerCallbacks : public PickerCallbacksNewGRFClass { public: StringID GetClassTooltip() const override { return STR_PICKER_STATION_CLASS_TOOLTIP; } @@ -996,6 +1011,22 @@ public: } } + void FillUsedItems(std::set &items) override + { + bool default_added = false; + for (const Station *st : Station::Iterate()) { + if (st->owner != _local_company) continue; + if (!default_added && StationUsesDefaultType(st)) { + items.insert({0, 0, STAT_CLASS_DFLT, 0}); + default_added = true; + } + for (const auto &sm : st->speclist) { + if (sm.spec == nullptr) continue; + items.insert({sm.grfid, sm.localidx, sm.spec->class_index, sm.spec->index}); + } + } + } + static StationPickerCallbacks instance; }; /* static */ StationPickerCallbacks StationPickerCallbacks::instance; @@ -1788,6 +1819,22 @@ public: DrawWaypointSprite(x, y, this->GetClassIndex(cls_id), id, _cur_railtype); } + void FillUsedItems(std::set &items) override + { + bool default_added = false; + for (const Waypoint *wp : Waypoint::Iterate()) { + if (wp->owner != _local_company) continue; + if (!default_added && StationUsesDefaultType(wp)) { + items.insert({0, 0, STAT_CLASS_WAYP, 0}); + default_added = true; + } + for (const auto &sm : wp->speclist) { + if (sm.spec == nullptr) continue; + items.insert({0, 0, sm.spec->class_index, sm.spec->index}); + } + } + } + static WaypointPickerCallbacks instance; }; /* static */ WaypointPickerCallbacks WaypointPickerCallbacks::instance; diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 18ed083687..dc21a4fadb 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -30,6 +30,7 @@ #include "dropdown_type.h" #include "dropdown_func.h" #include "engine_base.h" +#include "station_base.h" #include "strings_func.h" #include "core/geometry_func.hpp" #include "station_cmd.h" @@ -1160,6 +1161,22 @@ public: DrawRoadStopTile(x, y, _cur_roadtype, spec, roadstoptype == ROADSTOP_BUS ? STATION_BUS : STATION_TRUCK, (uint8_t)orientation); } } + + void FillUsedItems(std::set &items) override + { + for (const Station *st : Station::Iterate()) { + if (st->owner != _local_company) continue; + if (roadstoptype == ROADSTOP_TRUCK && !(st->facilities & FACIL_TRUCK_STOP)) continue; + if (roadstoptype == ROADSTOP_BUS && !(st->facilities & FACIL_BUS_STOP)) continue; + items.insert({0, 0, ROADSTOP_CLASS_DFLT, 0}); // We would need to scan the map to find out if default is used. + for (const auto &sm : st->roadstop_speclist) { + if (sm.spec == nullptr) continue; + if (roadstoptype == ROADSTOP_TRUCK && sm.spec->stop_type != ROADSTOPTYPE_FREIGHT && sm.spec->stop_type != ROADSTOPTYPE_ALL) continue; + if (roadstoptype == ROADSTOP_BUS && sm.spec->stop_type != ROADSTOPTYPE_PASSENGER && sm.spec->stop_type != ROADSTOPTYPE_ALL) continue; + items.insert({sm.grfid, sm.localidx, sm.spec->class_index, sm.spec->index}); + } + } + } }; template <> StringID RoadStopPickerCallbacks::GetClassTooltip() const { return STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP; } diff --git a/src/widgets/picker_widget.h b/src/widgets/picker_widget.h index fe45a2a427..ee026db0e0 100644 --- a/src/widgets/picker_widget.h +++ b/src/widgets/picker_widget.h @@ -22,6 +22,7 @@ enum PickerClassWindowWidgets : WidgetID { WID_PW_TYPE_SEL, ///< Stack to hide the type picker. WID_PW_TYPE_FILTER, ///< Text filter. WID_PW_MODE_ALL, ///< Toggle "Show all" filter mode. + WID_PW_MODE_USED, ///< Toggle showing only used types. WID_PW_TYPE_MATRIX, ///< Matrix with items. WID_PW_TYPE_ITEM, ///< A single item. WID_PW_TYPE_SCROLL, ///< Scrollbar for the matrix. From b30fe0d7dac7be58353da0c2b7e2626a256e809d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 7 May 2024 12:13:49 +0100 Subject: [PATCH 515/695] Feature: Ctrl-click to toggle favourites in build-pickers. This allows ctrl-click on a type in a build-picker window to remember it as a favourite. An new filter button to show only favourites makes it simpler to use these types. Favourite types are saved locally in favs.cfg, so are remembered between games. --- src/CMakeLists.txt | 1 + src/fileio.cpp | 2 + src/lang/english.txt | 2 + src/object_gui.cpp | 2 + src/picker_func.h | 16 +++++ src/picker_gui.cpp | 126 +++++++++++++++++++++++++++++++++++- src/picker_gui.h | 28 +++++++- src/rail_gui.cpp | 4 ++ src/road_gui.cpp | 6 +- src/settings.cpp | 8 +++ src/widgets/picker_widget.h | 1 + 11 files changed, 190 insertions(+), 6 deletions(-) create mode 100644 src/picker_func.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c913e1f190..9b946e02a1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -338,6 +338,7 @@ add_files( palette_func.h pbs.cpp pbs.h + picker_func.h picker_gui.cpp picker_gui.h progress.cpp diff --git a/src/fileio.cpp b/src/fileio.cpp index c99ec88bc1..7bf8a76198 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -959,6 +959,8 @@ void DeterminePaths(const char *exe, bool only_local_path) _private_file = config_dir + "private.cfg"; extern std::string _secrets_file; _secrets_file = config_dir + "secrets.cfg"; + extern std::string _favs_file; + _favs_file = config_dir + "favs.cfg"; #ifdef USE_XDG if (config_dir == config_home) { diff --git a/src/lang/english.txt b/src/lang/english.txt index d45870a205..12eed0068a 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2801,6 +2801,8 @@ STR_PICKER_MODE_ALL :All STR_PICKER_MODE_ALL_TOOLTIP :Toggle showing items from all classes STR_PICKER_MODE_USED :Used STR_PICKER_MODE_USED_TOOLTIP :Toggle showing only existing items +STR_PICKER_MODE_SAVED :Saved +STR_PICKER_MODE_SAVED_TOOLTIP :Toogle showing only saved items STR_PICKER_STATION_CLASS_TOOLTIP :Select a station class to display STR_PICKER_STATION_TYPE_TOOLTIP :Select a station type to build. Ctrl+Click to add or remove in saved items diff --git a/src/object_gui.cpp b/src/object_gui.cpp index ff4d86824f..bc8a9f6b5e 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -43,6 +43,8 @@ static ObjectPickerSelection _object_gui; ///< Settings of the object picker. class ObjectPickerCallbacks : public PickerCallbacksNewGRFClass { public: + ObjectPickerCallbacks() : PickerCallbacksNewGRFClass("fav_objects") {} + StringID GetClassTooltip() const override { return STR_PICKER_OBJECT_CLASS_TOOLTIP; } StringID GetTypeTooltip() const override { return STR_PICKER_OBJECT_TYPE_TOOLTIP; } diff --git a/src/picker_func.h b/src/picker_func.h new file mode 100644 index 0000000000..b3c1a8a16b --- /dev/null +++ b/src/picker_func.h @@ -0,0 +1,16 @@ +/* + * 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 picker_func.h Functions/types etc. related to non-GUI parts of the Picker system. */ + +#ifndef PICKER_FUNC_H +#define PICKER_FUNC_H + +void PickerLoadConfig(const IniFile &ini); +void PickerSaveConfig(IniFile &ini); + +#endif /* PICKER_FUNC_H */ diff --git a/src/picker_gui.cpp b/src/picker_gui.cpp index 94841519bf..f1fd6f661b 100644 --- a/src/picker_gui.cpp +++ b/src/picker_gui.cpp @@ -11,12 +11,14 @@ #include "core/backup_type.hpp" #include "gui.h" #include "hotkeys.h" +#include "ini_type.h" #include "picker_gui.h" #include "querystring_gui.h" #include "settings_type.h" #include "sortlist_type.h" #include "sound_func.h" #include "sound_type.h" +#include "string_func.h" #include "stringfilter_type.h" #include "strings_func.h" #include "widget_type.h" @@ -29,8 +31,95 @@ #include "table/sprites.h" +#include + #include "safeguards.h" +static std::vector &GetPickerCallbacks() +{ + static std::vector callbacks; + return callbacks; +} + +PickerCallbacks::PickerCallbacks(const std::string &ini_group) : ini_group(ini_group) +{ + GetPickerCallbacks().push_back(this); +} + +PickerCallbacks::~PickerCallbacks() +{ + auto &callbacks = GetPickerCallbacks(); + callbacks.erase(std::find(callbacks.begin(), callbacks.end(), this)); +} + +/** + * Load favourites of a picker from config. + * @param ini IniFile to load to. + * @param callbacks Picker to load. + */ +static void PickerLoadConfig(const IniFile &ini, PickerCallbacks &callbacks) +{ + const IniGroup *group = ini.GetGroup(callbacks.ini_group); + if (group == nullptr) return; + + callbacks.saved.clear(); + for (const IniItem &item : group->items) { + std::array grfid_buf; + + std::string_view str = item.name; + + /* Try reading "|" */ + auto grfid_pos = str.find('|'); + if (grfid_pos == std::string_view::npos) continue; + + std::string_view grfid_str = str.substr(0, grfid_pos); + if (!ConvertHexToBytes(grfid_str, grfid_buf)) continue; + + str = str.substr(grfid_pos + 1); + uint32_t grfid = grfid_buf[0] | (grfid_buf[1] << 8) | (grfid_buf[2] << 16) | (grfid_buf[3] << 24); + uint16_t localid; + auto [ptr, err] = std::from_chars(str.data(), str.data() + str.size(), localid); + + if (err == std::errc{} && ptr == str.data() + str.size()) { + callbacks.saved.insert({grfid, localid, 0, 0}); + } + } +} + +/** + * Save favourites of a picker to config. + * @param ini IniFile to save to. + * @param callbacks Picker to save. + */ +static void PickerSaveConfig(IniFile &ini, const PickerCallbacks &callbacks) +{ + IniGroup &group = ini.GetOrCreateGroup(callbacks.ini_group); + group.Clear(); + + for (const PickerItem &item : callbacks.saved) { + std::string key = fmt::format("{:08X}|{}", BSWAP32(item.grfid), item.local_id); + group.CreateItem(key); + } +} + +/** + * Load favourites of all registered Pickers from config. + * @param ini IniFile to load to. + */ +void PickerLoadConfig(const IniFile &ini) +{ + for (auto *cb : GetPickerCallbacks()) PickerLoadConfig(ini, *cb); +} + +/** + * Save favourites of all registered Pickers to config. + * @param ini IniFile to save to. + */ +void PickerSaveConfig(IniFile &ini) +{ + for (const auto *cb : GetPickerCallbacks()) PickerSaveConfig(ini, *cb); +} + /** Sort classes by id. */ static bool ClassIDSorter(int const &a, int const &b) { @@ -109,7 +198,8 @@ void PickerWindow::ConstructWindow() this->classes.SetFilterFuncs(_class_filter_funcs); if (this->has_type_picker) { - /* Update used type information. */ + /* Update used and saved type information. */ + this->callbacks.saved = this->callbacks.UpdateSavedItems(this->callbacks.saved); this->callbacks.used.clear(); this->callbacks.FillUsedItems(this->callbacks.used); @@ -206,6 +296,9 @@ void PickerWindow::DrawWidget(const Rect &r, WidgetID widget) const int y = (ir.Height() + ScaleSpriteTrad(PREVIEW_HEIGHT)) / 2 - ScaleSpriteTrad(PREVIEW_BOTTOM); this->callbacks.DrawType(x, y, item.class_index, item.index); + if (this->callbacks.saved.contains(item)) { + DrawSprite(SPR_BLOT, PALETTE_TO_YELLOW, 0, 0); + } if (this->callbacks.used.contains(item)) { DrawSprite(SPR_BLOT, PALETTE_TO_GREEN, ir.Width() - GetSpriteSize(SPR_BLOT).width, 0); } @@ -251,6 +344,7 @@ void PickerWindow::OnClick(Point pt, WidgetID widget, int) case WID_PW_MODE_ALL: case WID_PW_MODE_USED: + case WID_PW_MODE_SAVED: ToggleBit(this->callbacks.mode, widget - WID_PW_MODE_ALL); if (!this->IsWidgetDisabled(WID_PW_MODE_ALL) && HasBit(this->callbacks.mode, widget - WID_PW_MODE_ALL)) { /* Enabling used or saved filters automatically enables all. */ @@ -264,6 +358,18 @@ void PickerWindow::OnClick(Point pt, WidgetID widget, int) int sel = this->GetWidget(widget)->GetParentWidget()->GetCurrentElement(); assert(sel < (int)this->types.size()); const auto &item = this->types[sel]; + + if (_ctrl_pressed) { + auto it = this->callbacks.saved.find(item); + if (it == std::end(this->callbacks.saved)) { + this->callbacks.saved.insert(item); + } else { + this->callbacks.saved.erase(it); + } + this->InvalidateData(PFI_TYPE); + break; + } + if (this->callbacks.IsTypeAvailable(item.class_index, item.index)) { this->callbacks.SetSelectedClass(item.class_index); this->callbacks.SetSelectedType(item.index); @@ -294,6 +400,7 @@ void PickerWindow::OnInvalidateData(int data, bool gui_scope) if (this->has_type_picker) { SetWidgetLoweredState(WID_PW_MODE_ALL, HasBit(this->callbacks.mode, PFM_ALL)); SetWidgetLoweredState(WID_PW_MODE_USED, HasBit(this->callbacks.mode, PFM_USED)); + SetWidgetLoweredState(WID_PW_MODE_SAVED, HasBit(this->callbacks.mode, PFM_SAVED)); } } @@ -346,9 +453,11 @@ void PickerWindow::BuildPickerClassList() this->classes.reserve(count); bool filter_used = HasBit(this->callbacks.mode, PFM_USED); + bool filter_saved = HasBit(this->callbacks.mode, PFM_SAVED); for (int i = 0; i < count; i++) { if (this->callbacks.GetClassName(i) == INVALID_STRING_ID) continue; if (filter_used && std::none_of(std::begin(this->callbacks.used), std::end(this->callbacks.used), [i](const PickerItem &item) { return item.class_index == i; })) continue; + if (filter_saved && std::none_of(std::begin(this->callbacks.saved), std::end(this->callbacks.saved), [i](const PickerItem &item) { return item.class_index == i; })) continue; this->classes.emplace_back(i); } @@ -396,18 +505,30 @@ void PickerWindow::BuildPickerTypeList() if (!this->types.NeedRebuild()) return; this->types.clear(); + bool show_all = HasBit(this->callbacks.mode, PFM_ALL); bool filter_used = HasBit(this->callbacks.mode, PFM_USED); + bool filter_saved = HasBit(this->callbacks.mode, PFM_SAVED); int cls_id = this->callbacks.GetSelectedClass(); if (filter_used) { - /* Showing used items. */ + /* Showing used items. May also be filtered by saved items. */ this->types.reserve(this->callbacks.used.size()); for (const PickerItem &item : this->callbacks.used) { if (!show_all && item.class_index != cls_id) continue; if (this->callbacks.GetTypeName(item.class_index, item.index) == INVALID_STRING_ID) continue; this->types.emplace_back(item); } + } else if (filter_saved) { + /* Showing only saved items. */ + this->types.reserve(this->callbacks.saved.size()); + for (const PickerItem &item : this->callbacks.saved) { + /* The used list may contain items that aren't currently loaded, skip these. */ + if (item.class_index == -1) continue; + if (!show_all && item.class_index != cls_id) continue; + if (this->callbacks.GetTypeName(item.class_index, item.index) == INVALID_STRING_ID) continue; + this->types.emplace_back(item); + } } else if (show_all) { /* Reserve enough space for everything. */ int total = 0; @@ -506,6 +627,7 @@ std::unique_ptr MakePickerTypeWidgets() NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_TEXTBTN, COLOUR_DARK_GREEN, WID_PW_MODE_ALL), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_PICKER_MODE_ALL, STR_PICKER_MODE_ALL_TOOLTIP), NWidget(WWT_TEXTBTN, COLOUR_DARK_GREEN, WID_PW_MODE_USED), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_PICKER_MODE_USED, STR_PICKER_MODE_USED_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_DARK_GREEN, WID_PW_MODE_SAVED), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_PICKER_MODE_SAVED, STR_PICKER_MODE_SAVED_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetScrollbar(WID_PW_TYPE_SCROLL), diff --git a/src/picker_gui.h b/src/picker_gui.h index 6f323372ee..78403be187 100644 --- a/src/picker_gui.h +++ b/src/picker_gui.h @@ -36,7 +36,9 @@ struct PickerItem { /** Class for PickerClassWindow to collect information and retain state. */ class PickerCallbacks { public: - virtual ~PickerCallbacks() {} + explicit PickerCallbacks(const std::string &ini_group); + virtual ~PickerCallbacks(); + virtual void Close(int) { } /** Should picker class/type selection be enabled? */ @@ -77,6 +79,8 @@ public: /** Fill a set with all items that are used by the current player. */ virtual void FillUsedItems(std::set &items) = 0; + /** Update link between grfid/localidx and class_index/index in saved items. */ + virtual std::set UpdateSavedItems(const std::set &src) = 0; Listing class_last_sorting = { false, 0 }; ///< Default sorting of #PickerClassList. Filtering class_last_filtering = { false, 0 }; ///< Default filtering of #PickerClassList. @@ -84,15 +88,19 @@ public: Listing type_last_sorting = { false, 0 }; ///< Default sorting of #PickerTypeList. Filtering type_last_filtering = { false, 0 }; ///< Default filtering of #PickerTypeList. + const std::string ini_group; ///< Ini Group for saving favourites. uint8_t mode = 0; ///< Bitmask of \c PickerFilterModes. std::set used; ///< Set of items used in the current game by the current company. + std::set saved; ///< Set of saved favourite items. }; /** Helper for PickerCallbacks when the class system is based on NewGRFClass. */ template class PickerCallbacksNewGRFClass : public PickerCallbacks { public: + explicit PickerCallbacksNewGRFClass(const std::string &ini_group) : PickerCallbacks(ini_group) {} + inline typename T::index_type GetClassIndex(int cls_id) const { return static_cast(cls_id); } inline const T *GetClass(int cls_id) const { return T::Get(this->GetClassIndex(cls_id)); } inline const typename T::spec_type *GetSpec(int cls_id, int id) const { return this->GetClass(cls_id)->GetSpec(id); } @@ -112,8 +120,23 @@ public: { return GetPickerItem(GetClass(cls_id)->GetSpec(id), cls_id, id); } -}; + std::set UpdateSavedItems(const std::set &src) override + { + if (src.empty()) return {}; + + std::set dst; + for (const auto &item : src) { + const auto *spec = T::GetByGrf(item.grfid, item.local_id); + if (spec == nullptr) { + dst.insert({item.grfid, item.local_id, -1, -1}); + } else { + dst.insert(GetPickerItem(spec)); + } + } + return dst; + } +}; struct PickerFilterData : StringFilter { const PickerCallbacks *callbacks; ///< Callbacks for filter functions to access to callbacks. @@ -127,6 +150,7 @@ public: enum PickerFilterModes { PFM_ALL = 0, ///< Show all classes. PFM_USED = 1, ///< Show used types. + PFM_SAVED = 2, ///< Show saved types. }; enum PickerFilterInvalidation { diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 6e2e87ab93..316ea47ee2 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -961,6 +961,8 @@ static bool StationUsesDefaultType(const BaseStation *bst) class StationPickerCallbacks : public PickerCallbacksNewGRFClass { public: + StationPickerCallbacks() : PickerCallbacksNewGRFClass("fav_stations") {} + StringID GetClassTooltip() const override { return STR_PICKER_STATION_CLASS_TOOLTIP; } StringID GetTypeTooltip() const override { return STR_PICKER_STATION_TYPE_TOOLTIP; } @@ -1770,6 +1772,8 @@ static void ShowBuildTrainDepotPicker(Window *parent) class WaypointPickerCallbacks : public PickerCallbacksNewGRFClass { public: + WaypointPickerCallbacks() : PickerCallbacksNewGRFClass("fav_waypoints") {} + StringID GetClassTooltip() const override { return STR_PICKER_WAYPOINT_CLASS_TOOLTIP; } StringID GetTypeTooltip() const override { return STR_PICKER_WAYPOINT_TYPE_TOOLTIP; } diff --git a/src/road_gui.cpp b/src/road_gui.cpp index dc21a4fadb..6cb897e20e 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -1097,6 +1097,8 @@ static void ShowRoadDepotPicker(Window *parent) template class RoadStopPickerCallbacks : public PickerCallbacksNewGRFClass { public: + RoadStopPickerCallbacks(const std::string &ini_group) : PickerCallbacksNewGRFClass(ini_group) {} + StringID GetClassTooltip() const override; StringID GetTypeTooltip() const override; @@ -1185,8 +1187,8 @@ template <> StringID RoadStopPickerCallbacks::GetTypeTooltip() con template <> StringID RoadStopPickerCallbacks::GetClassTooltip() const { return STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP; } template <> StringID RoadStopPickerCallbacks::GetTypeTooltip() const { return STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP; } -static RoadStopPickerCallbacks _bus_callback_instance; -static RoadStopPickerCallbacks _truck_callback_instance; +static RoadStopPickerCallbacks _bus_callback_instance("fav_passenger_roadstops"); +static RoadStopPickerCallbacks _truck_callback_instance("fav_freight_roadstops"); static PickerCallbacks &GetRoadStopPickerCallbacks(RoadStopType rs) { diff --git a/src/settings.cpp b/src/settings.cpp index 293c20fb95..33f6b1d0bf 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -43,6 +43,7 @@ #include "ai/ai_config.hpp" #include "game/game_config.hpp" #include "newgrf_config.h" +#include "picker_func.h" #include "base_media_base.h" #include "fios.h" #include "fileio_func.h" @@ -59,6 +60,7 @@ VehicleDefaultSettings _old_vds; ///< Used for loading default vehicles settings std::string _config_file; ///< Configuration file of OpenTTD. std::string _private_file; ///< Private configuration file of OpenTTD. std::string _secrets_file; ///< Secrets configuration file of OpenTTD. +std::string _favs_file; ///< Picker favourites configuration file of OpenTTD. static ErrorList _settings_error_list; ///< Errors while loading minimal settings. @@ -1352,6 +1354,7 @@ void LoadFromConfig(bool startup) ConfigIniFile generic_ini(_config_file); ConfigIniFile private_ini(_private_file); ConfigIniFile secrets_ini(_secrets_file); + ConfigIniFile favs_ini(_favs_file); if (!startup) ResetCurrencies(false); // Initialize the array of currencies, without preserving the custom one @@ -1423,6 +1426,7 @@ void LoadFromConfig(bool startup) _grfconfig_static = GRFLoadConfig(generic_ini, "newgrf-static", true); AILoadConfig(generic_ini, "ai_players"); GameLoadConfig(generic_ini, "game_scripts"); + PickerLoadConfig(favs_ini); PrepareOldDiffCustom(); IniLoadSettings(generic_ini, _old_gameopt_settings, "gameopt", &_settings_newgame, false); @@ -1443,6 +1447,7 @@ void SaveToConfig() ConfigIniFile generic_ini(_config_file); ConfigIniFile private_ini(_private_file); ConfigIniFile secrets_ini(_secrets_file); + ConfigIniFile favs_ini(_favs_file); IniFileVersion generic_version = LoadVersionFromConfig(generic_ini); @@ -1494,14 +1499,17 @@ void SaveToConfig() GRFSaveConfig(generic_ini, "newgrf-static", _grfconfig_static); AISaveConfig(generic_ini, "ai_players"); GameSaveConfig(generic_ini, "game_scripts"); + PickerSaveConfig(favs_ini); SaveVersionInConfig(generic_ini); SaveVersionInConfig(private_ini); SaveVersionInConfig(secrets_ini); + SaveVersionInConfig(favs_ini); generic_ini.SaveToDisk(_config_file); private_ini.SaveToDisk(_private_file); secrets_ini.SaveToDisk(_secrets_file); + favs_ini.SaveToDisk(_favs_file); } /** diff --git a/src/widgets/picker_widget.h b/src/widgets/picker_widget.h index ee026db0e0..c6612c2b9d 100644 --- a/src/widgets/picker_widget.h +++ b/src/widgets/picker_widget.h @@ -23,6 +23,7 @@ enum PickerClassWindowWidgets : WidgetID { WID_PW_TYPE_FILTER, ///< Text filter. WID_PW_MODE_ALL, ///< Toggle "Show all" filter mode. WID_PW_MODE_USED, ///< Toggle showing only used types. + WID_PW_MODE_SAVED, ///< Toggle showing only saved types. WID_PW_TYPE_MATRIX, ///< Matrix with items. WID_PW_TYPE_ITEM, ///< A single item. WID_PW_TYPE_SCROLL, ///< Scrollbar for the matrix. From 721cd2b8ad43beec0f53b478333045631413c517 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 11 May 2024 04:41:26 +0000 Subject: [PATCH 516/695] Update: Translations from eints ukrainian: 1 change by Quantom2 dutch: 5 changes by Afoklala lithuanian: 1 change by khamper --- src/lang/afrikaans.txt | 15 +-------------- src/lang/arabic_egypt.txt | 14 +------------- src/lang/basque.txt | 15 +-------------- src/lang/belarusian.txt | 15 +-------------- src/lang/brazilian_portuguese.txt | 15 +-------------- src/lang/bulgarian.txt | 15 +-------------- src/lang/catalan.txt | 15 +-------------- src/lang/chuvash.txt | 3 +-- src/lang/croatian.txt | 15 +-------------- src/lang/czech.txt | 15 +-------------- src/lang/danish.txt | 15 +-------------- src/lang/dutch.txt | 20 ++++++-------------- src/lang/english_AU.txt | 15 +-------------- src/lang/english_US.txt | 15 +-------------- src/lang/esperanto.txt | 13 +------------ src/lang/estonian.txt | 15 +-------------- src/lang/faroese.txt | 13 +------------ src/lang/finnish.txt | 15 +-------------- src/lang/french.txt | 15 +-------------- src/lang/frisian.txt | 12 +----------- src/lang/gaelic.txt | 15 +-------------- src/lang/galician.txt | 15 +-------------- src/lang/german.txt | 15 +-------------- src/lang/greek.txt | 15 +-------------- src/lang/hebrew.txt | 15 +-------------- src/lang/hindi.txt | 3 +-- src/lang/hungarian.txt | 15 +-------------- src/lang/icelandic.txt | 15 +-------------- src/lang/ido.txt | 2 +- src/lang/indonesian.txt | 15 +-------------- src/lang/irish.txt | 15 +-------------- src/lang/italian.txt | 15 +-------------- src/lang/japanese.txt | 15 +-------------- src/lang/korean.txt | 15 +-------------- src/lang/latin.txt | 15 +-------------- src/lang/latvian.txt | 15 +-------------- src/lang/lithuanian.txt | 17 ++--------------- src/lang/luxembourgish.txt | 15 +-------------- src/lang/macedonian.txt | 3 +-- src/lang/malay.txt | 12 +----------- src/lang/maltese.txt | 3 +-- src/lang/marathi.txt | 2 +- src/lang/norwegian_bokmal.txt | 15 +-------------- src/lang/norwegian_nynorsk.txt | 15 +-------------- src/lang/persian.txt | 13 +------------ src/lang/polish.txt | 15 +-------------- src/lang/portuguese.txt | 15 +-------------- src/lang/romanian.txt | 15 +-------------- src/lang/russian.txt | 15 +-------------- src/lang/serbian.txt | 15 +-------------- src/lang/simplified_chinese.txt | 15 +-------------- src/lang/slovak.txt | 15 +-------------- src/lang/slovenian.txt | 15 +-------------- src/lang/spanish.txt | 15 +-------------- src/lang/spanish_MX.txt | 15 +-------------- src/lang/swedish.txt | 15 +-------------- src/lang/tamil.txt | 14 +------------- src/lang/thai.txt | 15 +-------------- src/lang/traditional_chinese.txt | 15 +-------------- src/lang/turkish.txt | 15 +-------------- src/lang/ukrainian.txt | 17 ++--------------- src/lang/urdu.txt | 12 +----------- src/lang/vietnamese.txt | 15 +-------------- src/lang/welsh.txt | 15 +-------------- 64 files changed, 71 insertions(+), 807 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 7df3302a8d..abfda221b7 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1856,17 +1856,8 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Vragverspreidin STR_CONFIG_SETTING_AI :Mededingers STR_CONFIG_SETTING_AI_NPC :Rekenaar spelers -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Padvinder vir treine: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Pad speurder om vir teine te gebruik -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Padvinder vir pad voertuie: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Pad speurder om vir pad vervoer te gebruik -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Padvinder vir skepe: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Pad speurder om vir skepe te gebruik STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Outomatiese rigting verandering op seine: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Laat treine toe om agteruit te gaan by signale, as hulle daar lank gewag het -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Aanbevole) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Verander stel waarde @@ -2391,7 +2382,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Kies spo # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Roetebaken -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Kies tipe roetebaken # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Spoor Stasie Keuse @@ -2404,8 +2394,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Kies tre STR_STATION_BUILD_DRAG_DROP :{BLACK}Sleep & Drop STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bou 'n stasie gebruikend sleep & drop -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Kies 'n stasie klas om te vertoon -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Kies die stasie tipe om te bou + STR_STATION_CLASS_DFLT :Verstek stasie STR_STATION_CLASS_WAYP :Roetebakens @@ -2540,8 +2529,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Koop gro # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Voorwerp Keuse -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Selekteer voorwerp om te bou. Shift skakel gebou/wys koste beraaming -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Kies klas van die voorwerp te bou STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Voorskou van 'n voorwerp STR_OBJECT_BUILD_SIZE :{BLACK}Grootte: {GOLD}{NUM} x {NUM} teels diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 023824906c..0fd30dbe14 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1713,15 +1713,7 @@ STR_CONFIG_SETTING_AI :المتناف STR_CONFIG_SETTING_AI_NPC : لاعبين الحاسوب STR_CONFIG_SETTING_NETWORK :شبكة الاتصال -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :موجد الطريق- قصاص الطريق - للقطارات:{STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :موجد الطريق (قصاص الأثر) للعربات: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :مكتشف المسار لاستخدامه لعربات الطرق -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :موجد طريق العبور للسفن: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :مكتشف المسار لاستخدامه للسفن STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :العكس عند الإشارات: {STRING} -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(مفضل) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}عدل قيمة التغيير @@ -2257,7 +2249,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}اختر # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}نقطة عبور -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK} اختر نوع نقطة العبور # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}اختر محطة القطار @@ -2270,8 +2261,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}اختر STR_STATION_BUILD_DRAG_DROP :{BLACK}أسحب وأفلت STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}بناء محطة بطريقة السحب والإفلات -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK} اختر فئة المحطات لعرضها -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}أختر نوع المحطة لبنائها + STR_STATION_CLASS_DFLT :المحطة القياسية STR_STATION_CLASS_WAYP :نقطة عبور @@ -2406,8 +2396,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}شراء # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}اختيار الاجسام -STR_OBJECT_BUILD_TOOLTIP :{BLACK}اختر جسم لبنائة -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}اختر صنف الكائن للبناء STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}عرض الجسم STR_OBJECT_BUILD_SIZE :{BLACK}حجم: {GOLD}{NUM} x {NUM} مربع diff --git a/src/lang/basque.txt b/src/lang/basque.txt index f1e6216f23..d36172f297 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1747,17 +1747,8 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Zama banaketa STR_CONFIG_SETTING_AI :Lehiakideak STR_CONFIG_SETTING_AI_NPC :Ordenagailu jokalariak -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Trenen ibilbide bilatzailea: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Trenek erabiliko duten ibilbide bilatzailea -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Errepide ibilgailuen ibilbide bilatzailea: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Errepide ibilgailuek erabiliko duten ibilbide bilatzailea -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Itsasontzien ibilbide bilatzailea: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Itsasontziek erabiliko duten ibilbide bilatzailea STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Seinaletan automatikoki buelta ematea: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Trenak seinaleetan buelta ematea baimendu, denbora luzez itxaroten ari badira -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Gomendatua) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Ezarpenaren balioa aldatu @@ -2271,7 +2262,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Tren gor # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Bidepuntua -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Bidepuntu mota aukeratu # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Tren geltokiak aukeratu @@ -2284,8 +2274,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Geltokia STR_STATION_BUILD_DRAG_DROP :{BLACK}Arrastratzerakoan eraiki STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Geltokia eraiki arrastratzerakoan -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Eraikiko den geltoki mota -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Eraikiko den geltoki mota + STR_STATION_CLASS_DFLT :Geltoki lehenetsia STR_STATION_CLASS_WAYP :Bidepuntuak @@ -2416,8 +2405,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Lur sail # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objektu hautaketa -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Aukeratu objektua eraikitzeko. Mayus eraikinaren kostuen estimazioa aktibatzen du -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Hautatu objektu klase bat eraikitzeko STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Objektua aurreikusi STR_OBJECT_BUILD_SIZE :{BLACK}Tamainua: {GOLD}{NUM} x {NUM} karratu diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 4034002df9..86544b096b 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2436,17 +2436,8 @@ STR_CONFIG_SETTING_AI :Канкурэ STR_CONFIG_SETTING_AI_NPC :Кампутарныя гульцы STR_CONFIG_SETTING_NETWORK :Сетка -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Альґарытм пошуку шляху для цягнікоў: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Мэханізм пошуку шляху для цягнікоў. -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Альґарытм пошуку шляху для аўтатранспарту: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Мэханізм пошуку шляху для аўтатранспарту. -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Альґарытм пошуку шляху для караблёў: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Мэханізм пошуку шляху для караблёў. STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Аўтаматычны разварот перад сыґналамi: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Дазволіць цягнікам разварочвацца перад сыґналамі, калі яны чакаюць доўгі час. -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(рэкамэндуецца) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Зьмяніць значэньне @@ -3113,7 +3104,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Выбе # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Маршрутны пункт -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Выберыце тып маршрутнага пункта # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Выбар чыгуначнай станцыі @@ -3126,8 +3116,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Выбе STR_STATION_BUILD_DRAG_DROP :{BLACK}Участак STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Пабудаваць станцыю на выбраным участку зямлі -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Выберыце клясу станцыі для паказу -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Выберыце тып станцыі для пабудовы + STR_STATION_CLASS_DFLT :Стандартная станцыя STR_STATION_CLASS_DFLT_STATION :Стандартная чыг. станцыя @@ -3274,8 +3263,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Набы # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Выбар аб'екта -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Абярыце аб'ект для пабудовы. Ctrl+пстрычка+перацягваньне — выбар вобласці па дыяганалі. Пры націснутым Shift — ацэнка кошту пабудовы. -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Абярыце клясу аб'екта для будаўніцтва STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Прагляд аб'екта STR_OBJECT_BUILD_SIZE :{BLACK}Памер: {GOLD}{NUM} x {NUM} клетак diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 39f0aa5243..5dee827e29 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -2131,17 +2131,8 @@ STR_CONFIG_SETTING_AI :Competidores STR_CONFIG_SETTING_AI_NPC :Competidores IA STR_CONFIG_SETTING_NETWORK :Rede -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Gerador de rotas para trens: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Algoritmo usado para estabelecer as rotas dos trens -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Gerador de rotas para veículos: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Algoritmo usado para estabelecer as rotas dos veículos rodoviários -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Gerador de rotas para embarcações: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Algoritmo usado para estabelecer as rotas das embarcações STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Reversão automática em sinais: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permitir que os trens invertam a direção num sinal, se eles tiverem esperado lá muito tempo -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recomendado) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Modificar o valor @@ -2795,7 +2786,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Escolher # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Ponto de controle -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Escolher um tipo de ponto de controle # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Seleção de Estação Ferroviária @@ -2808,8 +2798,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Escolher STR_STATION_BUILD_DRAG_DROP :{BLACK}Arrastar & Soltar STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construir estação usando arrastar e soltar -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Escolher uma classe de estação para mostrar -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Escolher um tipo de estação para construir + STR_STATION_CLASS_DFLT :Padrão STR_STATION_CLASS_DFLT_STATION :Estação padrão @@ -2952,8 +2941,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Seleção de Objeto -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Escolher um objeto para construir. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para só mostrar o custo estimado -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Escolher a classe do objeto para construir STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Pré-visualização do objeto STR_OBJECT_BUILD_SIZE :{BLACK}Tamanho: {GOLD}{NUM} x {NUM} quadrados diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 01d5029bfe..1c93081ad2 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1902,17 +1902,8 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Индустр STR_CONFIG_SETTING_AI :Съперници STR_CONFIG_SETTING_AI_NPC :Компютърни играчи -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Пътенамирач за влакове: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Маршрутизатор използван за влакове -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Пътенамирач за автомобили: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Маршрутизатор използван за автомобили -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Пътенамирач за кораби: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Маршрутизатор използван за кораби STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Автоматично обръщане при сигнали: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Позволява на влаковете да обръщат ако са чакали твърде дълго -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(препоръчва се) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Промяна стойноста на настройка @@ -2460,7 +2451,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Изби # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Пътна точка -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Избор тип на пътни точки # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Избор на жп гара @@ -2473,8 +2463,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Дълж STR_STATION_BUILD_DRAG_DROP :{BLACK}Влачене & Пускане STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Строене на станция чрез изтегляне -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Избор на клас станция за показване -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Избор тип на станция за строене + STR_STATION_CLASS_DFLT :Станция по подразбиране STR_STATION_CLASS_WAYP :Пътни точки @@ -2606,8 +2595,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Купи # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Избор на обект -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Избери обект за построяване. Shift строеж/цена за построяване -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Избор на клас на обекта за строене STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Изглед на обекта STR_OBJECT_BUILD_SIZE :{BLACK}Размер: {GOLD}{NUM} x {NUM} плочки diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index ec35fbcf25..f6a1237327 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -2131,17 +2131,8 @@ STR_CONFIG_SETTING_AI :Competidors STR_CONFIG_SETTING_AI_NPC :Jugadors IA STR_CONFIG_SETTING_NETWORK :Xarxa -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Encaminador dels trens: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Algorisme a emprar per a escollir les rutes dels trens -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Encaminador d'automòbils: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Algorisme a emprar per a escollir les rutes dels automòbils -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Encaminador dels vaixells: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Algorisme a emprar per a escollir les rutes dels vaixells STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Canvi de sentit automàtic als senyals: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permetre als trens girar en un senyal, si esperaven allà durant molt temps -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recomanat) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Canvia el valor de l'ajustament @@ -2795,7 +2786,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Seleccio # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Punt de pas -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Seleccioneu el tipus de punt de pas. # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Estacions de Tren @@ -2808,8 +2798,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Seleccio STR_STATION_BUILD_DRAG_DROP :{BLACK}Arrossega i solta STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construeix una estació amb el mètode arrossega i solta. -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Selecciona un tipus de estació a mostrar -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Selecciona el tipus de estació a construir + STR_STATION_CLASS_DFLT :Per defecte STR_STATION_CLASS_DFLT_STATION :Estació per defecte @@ -2952,8 +2941,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Compra t # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Selecció d'objecte -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Seleccioneu l'objecte a construir. Amb Ctrl, se selecciona una àrea diagonal. Amb Maj, es commuta entre construir i mostrar el cost estimat. -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Selecciona la classe d'objecte a construir STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Previsualització de l'objecte STR_OBJECT_BUILD_SIZE :{BLACK}Mida: {GOLD}{NUM} x {NUM} cel·les diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index 0c1dc315fe..a6e67827d0 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -846,8 +846,6 @@ STR_CONFIG_SETTING_VEHICLES :Ҫул-йӗр: STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :Хуласем STR_CONFIG_SETTING_AI :Ӑмӑртуҫӑсем -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF # Config errors @@ -1058,6 +1056,7 @@ STR_CONTENT_DETAIL_VERSION :{SILVER}Вер + # Signal window # Bridge selection window diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 9a086389a1..7b316863de 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1975,17 +1975,8 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Distribucija te STR_CONFIG_SETTING_AI :Suparnici STR_CONFIG_SETTING_AI_NPC :Računalni igrači -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Pronalaženje putanje za vlakove: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Pronalazač puteva koji će se koristiti za vlakove -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Pronalaženje putanje za cestovna vozila: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Pronalazač puteva koji će se koristiti za cestovna vozila -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Pronalaženje putanje za brodove: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Pronalazač puteva koji će se koristiti za brodove STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatsko okretanje na signalima: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Dozvoli vlakovima okretanje kod signala ako tamo čekaju duže vrijeme -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Preporučljivo) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Promijeni vrijednost postavke @@ -2534,7 +2525,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Odaberi # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Čvorište -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Odaberi vrstu čvorišta # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Izbor željezničke postaje @@ -2547,8 +2537,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Odaberi STR_STATION_BUILD_DRAG_DROP :{BLACK}Povuci i spusti STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Napravi postaju koristeći drag & drop -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Odaberi vrstu postaje za prikazivanje -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Odaberi vrstu postaje za izgradnju + STR_STATION_CLASS_DFLT :Zadana postaja STR_STATION_CLASS_WAYP :Čvorišta @@ -2683,8 +2672,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Kupi zem # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Odabir objekta -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Odaberi objekt za izgradnju. Shift mijenja prikaz građenje/procjena troškova. -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Odaberi vrstu objekta za izgradnju STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Pregled objekta STR_OBJECT_BUILD_SIZE :{BLACK}Veličina: {GOLD}{NUM} x {NUM} polja diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 8bdb8cf241..a85a351922 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -2207,17 +2207,8 @@ STR_CONFIG_SETTING_AI :Konkurenti STR_CONFIG_SETTING_AI_NPC :Umělá inteligence STR_CONFIG_SETTING_NETWORK :Síť -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Hledač cesty pro vlaky: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Hledač cesty pro vlaky -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Hledač cesty pro silniční vozidla: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Hledač cesty pro vozidla -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Hledač cesty pro lodě: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Hledač cesty pro lodě STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatické otáčení vlaků na semaforech: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Povoluje vlakům otočit se na semaforech, pokud čekají příliš dlouho -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(doporučený) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Změnit hodnotu nastavení @@ -2868,7 +2859,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Zvolit o # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Směrování -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Vyber typ směrování # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Výběr nádraží @@ -2881,8 +2871,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Zvolit d STR_STATION_BUILD_DRAG_DROP :{BLACK}Táhni a pusť STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Stavět stanice pomocí tahaní myši -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Vyber, který druh stanic se má zobrazit -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Vyber typ stavěné stanice + STR_STATION_CLASS_DFLT :Původní STR_STATION_CLASS_DFLT_STATION :Původní stanice @@ -3025,8 +3014,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Zakoupit # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Výběr objektu -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vyberte objekt k postavení. Při stisknutí Ctrl+Klik+Tažení vyberte oblast diagonálně. Pro zobrazení pouze odhadovaných nákladů stiskněte také klávesu Shift. -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Vyberte třídu objektu, který chcete postavit STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Náhled objektu STR_OBJECT_BUILD_SIZE :{BLACK}Velikost: {GOLD}{NUM}{NBSP}x{NBSP}{NUM} diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 4d661d5882..b1bbde7b58 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -2130,17 +2130,8 @@ STR_CONFIG_SETTING_AI :Modstandere STR_CONFIG_SETTING_AI_NPC :Computerstyrede spillere STR_CONFIG_SETTING_NETWORK :Netværk -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Stifinder til tog: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Stifinder til brug for toge -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Stifinder til vejkøretøjer: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Stifinder til brug for vejkøretøjer -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Stifinder til skibe: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Stifinder til brug for skibe STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Vend automatisk ved signaler: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Tillad tog at vende ved et signal, hvis det har ventet i lang tid -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Anbefalet) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Skift indstillingsværdi @@ -2793,7 +2784,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Vælg or # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Rutepunkt -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Vælg udseende af rutepunkt # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Valg af banegård @@ -2806,8 +2796,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Vælg l STR_STATION_BUILD_DRAG_DROP :{BLACK}Træk & slip STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Byg en station vha. træk & slip -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Vælg hvilken stationstype, der skal vises -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Vælg hvilken stationstype du vil bygge + STR_STATION_CLASS_DFLT :Standard station STR_STATION_CLASS_DFLT_STATION :Standard station @@ -2950,8 +2939,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Køb lan # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objekt valg -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vælg objekt, der skal bygges. Ctrl+klik+træk for at markere området diagonalt. Tryk også på Shift for kun at vise omkostningsestimat -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Vælg hvilken objekttype du vil bygge STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Forvisning af objektet STR_OBJECT_BUILD_SIZE :{BLACK}Størrelse: {GOLD}{NUM} x {NUM} felter diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index aa69db71ad..9ccd45adad 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -955,6 +955,7 @@ STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Geluidseffecten STR_GAME_OPTIONS_MUSIC_VOLUME :Muziek +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valuta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valuta kiezen @@ -1052,6 +1053,7 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Vink dit STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Lettertypen met anti-alias STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Vink dit vakje aan voor in grootte aanpasbare lettertypen met anti-alias +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Geautomatiseerd onderzoek STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Deelnemen aan geautomatiseerd onderzoek @@ -1080,6 +1082,8 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Basisset STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selecteer de te gebruiken basisset voor muziek STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Aanvullende informatie over the basisset voor muziek +STR_GAME_OPTIONS_ONLINE_CONTENT :Inhoud ophalen +STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Controleren op nieuwe en aangepaste inhoud om te downloaden STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(geen invoegtoepassingen voor integratie met sociale platforms geïnstalleerd) @@ -2126,17 +2130,8 @@ STR_CONFIG_SETTING_AI :Tegenstanders STR_CONFIG_SETTING_AI_NPC :Computerspelers STR_CONFIG_SETTING_NETWORK :Netwerk -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Routezoeker voor treinen: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Routezoeker voor treinen. -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Routezoeker voor wegvoertuigen: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Routezoeker voor wegvoertuigen -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Routezoeker voor schepen: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Routezoeker voor schepen STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatisch omdraaien bij seinen: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Treinen mogen keren bij een sein als ze hier lang staan wachten -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Aanbevolen) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Instelwaarde wijzigen @@ -2481,6 +2476,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Je spelernaam STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Beheeracties die nodig zijn voor deze client STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Beheeracties die nodig zijn voor dit bedrijf STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Meedoen met dit bedrijf +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Geef deze client toestemming om met je bedrijf mee te doen STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Een bericht sturen naar deze speler STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Een bericht versturen naar alle spelers van dit bedrijf STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Een bericht sturen naar alle toeschouwers @@ -2789,7 +2785,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Selectee # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Routepunt -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Type routepunt selecteren # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Stationskeuze @@ -2802,8 +2797,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Selectee STR_STATION_BUILD_DRAG_DROP :{BLACK}Slepen STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Je kunt een station bouwen door te slepen -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Selecteer een stationsklasse om weer te geven -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Selecteer het type station om te bouwen + STR_STATION_CLASS_DFLT :Standaard STR_STATION_CLASS_DFLT_STATION :Standaard station @@ -2946,8 +2940,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Land kop # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Keuze van object -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Selecteer object om te bouwen. Ctrl+klik voor diagonaal gebied. Voeg Shift toe voor alleen inschatting van de kosten -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Hiermee selecteer je de klasse van het te bouwen object STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Bekijk het object STR_OBJECT_BUILD_SIZE :{BLACK}Grootte: {GOLD}{NUM} x {NUM} tegels diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 3aed56f22b..97ce636492 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -2130,17 +2130,8 @@ STR_CONFIG_SETTING_AI :Competitors STR_CONFIG_SETTING_AI_NPC :Computer players STR_CONFIG_SETTING_NETWORK :Network -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Pathfinder for trains: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Path finder to use for trains -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Pathfinder for road vehicles: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Path finder to use for road vehicles -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Pathfinder for ships: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Path finder to use for ships STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatic reversing at signals: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Allow trains to reverse on a signal, if they have waited there a long time -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recommended) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Change setting value @@ -2794,7 +2785,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Select r # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Waypoint -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Select waypoint type # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Rail Station Selection @@ -2807,8 +2797,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Select l STR_STATION_BUILD_DRAG_DROP :{BLACK}Drag & Drop STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Build a station using drag & drop -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Select a station class to display -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Select the station type to build + STR_STATION_CLASS_DFLT :Default STR_STATION_CLASS_DFLT_STATION :Default station @@ -2951,8 +2940,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Purchase # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Object Selection -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Select object to build. Ctrl+Click+Drag to select the area diagonally. Also press Shift to show cost estimate only -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Select class of the object to build STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Preview of the object STR_OBJECT_BUILD_SIZE :{BLACK}Size: {GOLD}{NUM} x {NUM} tiles diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 42cfe8cf68..d86a8a7369 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -2130,17 +2130,8 @@ STR_CONFIG_SETTING_AI :Competitors STR_CONFIG_SETTING_AI_NPC :Computer players STR_CONFIG_SETTING_NETWORK :Network -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Pathfinder for trains: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Path finder to use for trains -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Pathfinder for road vehicles: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Path finder to use for road vehicles -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Pathfinder for ships: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Path finder to use for ships STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatic reversing at signals: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Allow trains to reverse on a signal, if they waited there a long time -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recommended) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Change setting value @@ -2793,7 +2784,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Select r # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Waypoint -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Select waypoint type # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Rail Station Selection @@ -2806,8 +2796,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Select l STR_STATION_BUILD_DRAG_DROP :{BLACK}Drag & Drop STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Build a station with drag & drop -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Select a station class to display -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Select the station type to build + STR_STATION_CLASS_DFLT :Default STR_STATION_CLASS_DFLT_STATION :Default station @@ -2950,8 +2939,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Purchase # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Object Selection -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Select object to build. Ctrl+Click+Drag to select the area diagonally. Also press Shift to show cost estimate only -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Select class of the object to build STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Preview of the object STR_OBJECT_BUILD_SIZE :{BLACK}Size: {GOLD}{NUM} x {NUM} tiles diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index cc97ccf1af..3e03a52c07 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -2114,15 +2114,8 @@ STR_CONFIG_SETTING_AI :Konkurantoj STR_CONFIG_SETTING_AI_NPC :Komputil-ludantoj STR_CONFIG_SETTING_NETWORK :Reto -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Padtrovilo por vagonaroj: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Padtrovilo por stratveturiloj: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Padtrovilo uzota por stratveturiloj -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Padtrovilo por ŝipoj: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Aŭtomata dorsflankante ĉe signaloj: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permesu al vagonaro turniĝi ĉe semaforo, se ĝi jam atendis dum longa tempo -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Rekomendite) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Ŝanĝu agord-valoron @@ -2746,7 +2739,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Elekti d # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Vojpunkto -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Elekti tipon de vojpunkto # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Elekto de Stacidomo @@ -2759,8 +2751,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Elektu l STR_STATION_BUILD_DRAG_DROP :{BLACK}Tiru k metu STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Tiru por konstrui stacidomon -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Elekti stacidomklason por montri. -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Elekti stacidomotipon por konstrui. + STR_STATION_CLASS_DFLT :Defaŭlta STR_STATION_CLASS_DFLT_STATION :Defaŭlta stacio @@ -2895,8 +2886,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Aĉetu l # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Elekto de Objekto -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Elektu objekton por konstrui. La majuskliga klavo baskuligas inter konstrui/(kosto)taksi -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Elektu klason de la objekto konstrui STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Antaŭvido de la objekto STR_OBJECT_BUILD_SIZE :{BLACK}Grandeco: {GOLD}{NUM} x {NUM} kaheloj diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 2585cee641..e5662adc31 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -2185,17 +2185,8 @@ STR_CONFIG_SETTING_AI :Konkurendid STR_CONFIG_SETTING_AI_NPC :Arvuti STR_CONFIG_SETTING_NETWORK :Võrk -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Rongide marsruudileidja: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Marsruudileidja rongide jaoks -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Maanteesõidukite marsruudileidja: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Marsruudileidja maanteesõidukite jaoks -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Laevade marsruudileidja: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Marsruudileidja veesõidukite jaoks STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automaatne tagasipööre signaalide juures: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Luba rongidel ümber pöörata kui nad on pikka aega foori taga oodanud -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(soovitatud) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Määra seade väärtus @@ -2850,7 +2841,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Depoole # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Meldepunkt -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Vali meldepunkti liik # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Raudteejaama valik @@ -2863,8 +2853,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Vali rau STR_STATION_BUILD_DRAG_DROP :{BLACK}Lohistamine STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Ehita jaam kasutades hiirega lohistamist -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Vali näidatav jaamajärk -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Vali näidatav jaamaliik + STR_STATION_CLASS_DFLT :Vaikimisi STR_STATION_CLASS_DFLT_STATION :Vaikimisi jaam @@ -3007,8 +2996,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Maa ostm # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objekti valik -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vali ehitatav objekt. Ctrl+klõps+lohistus valib ala diagonaaliti. Lisaks hoia all Shift-klahvi, et vaid näidata eeldatavat hinda -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Vali ehitatava objekti järk STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Objekti eelvaade STR_OBJECT_BUILD_SIZE :{BLACK}Suurus: {GOLD}{NUM} x {NUM} ruutu diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index ff2e79733f..d36de93d2e 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1673,15 +1673,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Ídnaðir STR_CONFIG_SETTING_AI :Kappingarneytar STR_CONFIG_SETTING_AI_NPC :Teldu spælarir -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Leiðbeinari fyri tok: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Leið beinari at nýta til tok -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Leiðbeinari fyri akfør: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Leið beinari at nýta fyri akfør -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Leiðbeinari fyri skip: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Leið beinari at nýta fyri skip -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Viðmældur) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Broyt ásetings virði @@ -2167,7 +2158,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Vel hvø # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Waypoint -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Vel waypoint slag # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Tok støðs úrval @@ -2180,8 +2170,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Vel hvus STR_STATION_BUILD_DRAG_DROP :{BLACK}Toga & Slepp STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg eina støð vi at nýta toga & slepp -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Vel ein klassa av støð at vísa -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Vel hvat slag av støð skal byggjast + STR_STATION_CLASS_DFLT :Vanlig støð STR_STATION_CLASS_WAYP :Waypoint diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index e05a9874bb..ad1a84fff0 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -2130,17 +2130,8 @@ STR_CONFIG_SETTING_AI :Kilpailijat STR_CONFIG_SETTING_AI_NPC :Tietokonepelaajat STR_CONFIG_SETTING_NETWORK :Verkko -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Junien käyttämä reitinetsijä: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Junien käyttämä reitinetsijä -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Ajoneuvojen käyttämä reitinetsijä: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Ajoneuvojen käyttämä reitinetsijä -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Laivojen käyttämä reitinetsijä: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Laivojen käyttämä reitinetsijä STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automaattinen kääntyminen opastimilla: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Sallii junien kääntymisen opastimen edessä pitkän odotusajan jälkeen -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Suositeltu) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Muuta asetusarvo @@ -2794,7 +2785,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Valitse # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Reittipiste -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Valitse reittipisteen tyyppi # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Rautatieaseman valinta @@ -2807,8 +2797,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Valitse STR_STATION_BUILD_DRAG_DROP :{BLACK}Vedä ja pudota STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Rakenna asema vetämällä ja pudottamalla -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Valitse asemaluokka -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Valitse asematyyppi + STR_STATION_CLASS_DFLT :Oletus STR_STATION_CLASS_DFLT_STATION :Oletusasema @@ -2951,8 +2940,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Osta maa # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objektin valinta -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Valitse rakennettava objekti. Ctrl+napsautus+veto valitaksesi alueen vinottain. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Valitse rakennettavan objektin luokka STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Objektin esikatselu STR_OBJECT_BUILD_SIZE :{BLACK}Koko: {GOLD}{NUM}×{NUM} ruutua diff --git a/src/lang/french.txt b/src/lang/french.txt index 14d4549f40..1d77071d49 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -2130,17 +2130,8 @@ STR_CONFIG_SETTING_AI :Compétiteurs STR_CONFIG_SETTING_AI_NPC :Intelligence artificielle STR_CONFIG_SETTING_NETWORK :Réseau -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Recherche de chemin des trains{NBSP}: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Recherche de chemin à utiliser pour les trains -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Recherche de chemin des véhicules routiers{NBSP}: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Recherche de chemin à utiliser pour les véhicules routiers -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Recherche de chemin des navires{NBSP}: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Recherche de chemin à utiliser pour les navires STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Demi-tour automatique aux signaux{NBSP}: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Autoriser les trains a faire demi-tour à un signal, si ils attendent depuis un long moment -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(recommandé) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Changer la valeur du paramètre @@ -2793,7 +2784,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Choisir # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Point de contrôle -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Choisir le type de point de contrôle # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Choix de la gare @@ -2806,8 +2796,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Choisir STR_STATION_BUILD_DRAG_DROP :{BLACK}Glisser/Déposer STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construire une gare par glisser/déposer -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Choisir le type de station à afficher -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Choisir le type de station à construire + STR_STATION_CLASS_DFLT :Par défaut STR_STATION_CLASS_DFLT_STATION :Stations par défaut @@ -2950,8 +2939,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Acheter # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Sélection de l'objet -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Sélectionner l'objet à construire.{}Ctrl pour sélectionner en diagonale.{}Shift pour afficher seulement le coût estimé. -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Choisir le type d'objet à construire STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Aperçu de l'objet STR_OBJECT_BUILD_SIZE :{BLACK}Taille{NBSP}: {GOLD}{NUM}{NBSP}×{NBSP}{NUM} cases diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index 62583dc37c..7717892a7f 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -1802,14 +1802,7 @@ STR_CONFIG_SETTING_AI :Tsjinstânners STR_CONFIG_SETTING_AI_NPC :Computer spilers STR_CONFIG_SETTING_NETWORK :Netwurk -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Pathfinder foar treinen: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Pathfinder foar auto's: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Pathfinder foar skippen: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Pathfinder te brûken foar skippen STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Omkeare fan treinen by seinen: {STRING} -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recommended) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Feroarje wearde @@ -2269,7 +2262,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Selektea # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Kontrôlepost -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Selectear type kontrôlepost # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Treinstasjon Seleksje @@ -2281,7 +2273,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Stasjon STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Selektear lengte fan treinstasjon STR_STATION_BUILD_DRAG_DROP :Sleepe en los litte -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Selektearje type stasjon om te bouwe + STR_STATION_CLASS_DFLT :Standert stasjon STR_STATION_CLASS_WAYP :Kontrôleposten @@ -2385,8 +2377,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Keapje l # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objekt seleksje -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Selektearje te bouen objekt -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Selektearje klasse fan it te bouwen objekt STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Besjoch objekt yn it foar STR_OBJECT_BUILD_SIZE :{BLACK}Grutte: {GOLD}{NUM} x {NUM} Flakken diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index cace9eb2b9..1743fcc4b5 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -2028,17 +2028,8 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Sgaoileadh cara STR_CONFIG_SETTING_AI :Co-farpaisichean STR_CONFIG_SETTING_AI_NPC :Cluicheadairean coimpiutair -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Lorg shlighean aig trèanaichean: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :An dòigh a lorgas trèanaichean an slighe -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Lorg shlighean aig carbadan-rathaid: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :An dòigh a lorgas carbadan-rathaid an slighe -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Lorg slighean aig longan: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :An dòigh a lorgas longan an slighe STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Taobh contrarra aig comharran gu fèin-obrachail: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Faodaidh trèanaichean tilleadh aig comharra nuair a bhios iad air feitheamh ann ùine fada -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(molta) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Atharraich luach na roghainn @@ -2573,7 +2564,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Tagh com # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Puing-thurais -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Tagh seòrsa na puinge-turais # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Roghainnean nan stèiseanan-rèile @@ -2586,8 +2576,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Tagh dè STR_STATION_BUILD_DRAG_DROP :{BLACK}Slaod is leig às STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Tog stèisean le slaodadh is leigeil às -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Tagh seòrsa stèisean gus a shealltainn -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Tagh seòrsa an stèisein a tha thu airson togail + STR_STATION_CLASS_DFLT :Stèisean bunaiteach STR_STATION_CLASS_WAYP :Puingean-turais @@ -2727,8 +2716,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Ceannaic # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Tagh oibseact -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Tagh oibseact airson togail. Toglaidh Shift togail/sealladh air tuairmse chosgaisean -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Tagh seòrsa na h-oibseicte a tha thu airson togail STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Ro-shealladh an oibseict STR_OBJECT_BUILD_SIZE :{BLACK}Meud: {GOLD}{NUM} x {NUM} leacan diff --git a/src/lang/galician.txt b/src/lang/galician.txt index cedea630de..a806c93b18 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -2127,17 +2127,8 @@ STR_CONFIG_SETTING_AI :Competidores STR_CONFIG_SETTING_AI_NPC :Xogadores da computadora STR_CONFIG_SETTING_NETWORK :Rede -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Buscador de ruta para trens: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Buscador de ruta empregado polos trens -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Buscador de ruta para vehículos de estrada: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Buscador de ruta empregado polos vehículos de estrada -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Buscador de ruta para barcos: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Buscador de ruta empregado polos barcos STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Cambio de sentido automático nos sinais: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permite aos trens cambiar de sentido nun sinal, se agardaron durante moito tempo -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recomendado) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Cambia-lo valor @@ -2790,7 +2781,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Seleccio # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Punto de ruta -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Selecciona-lo tipo de punto de ruta # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Selección da estación @@ -2803,8 +2793,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Seleccio STR_STATION_BUILD_DRAG_DROP :{BLACK}Arrastrar e soltar STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construír estación arrastrando e soltando -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Selecciona a clase de estación a mostrar -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Selecciona o tipo da estación a construir + STR_STATION_CLASS_DFLT :Por defecto STR_STATION_CLASS_DFLT_STATION :Estación por defecto @@ -2947,8 +2936,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Selección de obxectos -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Selecciona o obxecto a construír. Ctrl+Clic+Arrastrar para seleccionar a área diagonalmente. Tamén podes premer Shift para amosar unha estimación do custo -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Selecciona a clase de obxecto a construír STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Previsualización do obxecto STR_OBJECT_BUILD_SIZE :{BLACK}Tamaño: {GOLD}{NUM} x {NUM} cadros diff --git a/src/lang/german.txt b/src/lang/german.txt index 40f2224963..3717684bec 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -2124,17 +2124,8 @@ STR_CONFIG_SETTING_AI :Mitbewerber STR_CONFIG_SETTING_AI_NPC :Computerspieler STR_CONFIG_SETTING_NETWORK :Netzwerk -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Pfadsucher für Züge: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Pfadsuch-Algorithmus für Züge -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Pfadsucher für Straßenfahrzeuge: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Pfadsuch-Algorithmus für Straßenfahrzeuge -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Pfadsucher für Schiffe: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Pfadsuch-Algorithmus für Schiffe STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatisches Umdrehen an Signalen: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Erlaube Zügen, an Signalen umzudrehen, wenn sie dort zu lange gewartet haben -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(empfohlen) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Wert der Einstellung ändern @@ -2787,7 +2778,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Ausricht # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Wegpunkt -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Wegpunktbauform auswählen # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Bahnhof bauen @@ -2800,8 +2790,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Bahnstei STR_STATION_BUILD_DRAG_DROP :{BLACK}Klicken und Ziehen STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Stationsgröße durch Klicken und Ziehen frei wählbar -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Eine Stationsart zum Anzeigen auswählen -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Die Stationsart auswählen, die gebaut werden soll + STR_STATION_CLASS_DFLT :Standard STR_STATION_CLASS_DFLT_STATION :Standart-Haltestelle @@ -2944,8 +2933,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Land fü # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objektauswahl -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Zu bauendes Objekt auswählen. Strg+Klick+Ziehen wählt das Gebiet diagonal. Außerdem Umschalt drücken, um nur einen Kostenvoranschlag anzuzeigen -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Objektklasse auswählen STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Vorschau des Objekts STR_OBJECT_BUILD_SIZE :{BLACK}Größe: {GOLD}{NUM} × {NUM} Felder diff --git a/src/lang/greek.txt b/src/lang/greek.txt index bacd211580..818a1f3111 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -2223,17 +2223,8 @@ STR_CONFIG_SETTING_AI :Ανταγων STR_CONFIG_SETTING_AI_NPC :Παίκτες υπολογιστή STR_CONFIG_SETTING_NETWORK :Δίκτυο -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Μέθοδος δρομολόγησης για τρένα: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Μέθοδος διαπίστωσης διαδρομής που χρησιμοποιείται για τα τρένα -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Μέθοδος δρομολόγησης για οχήματα δρόμου: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Μέθοδος διαπίστωσης διαδρομής που χρησιμοποιείται για τα οδικά οχήματα -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Μέθοδος δρομολόγησης για πλοία: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Μέθοδος διαπίστωσης διαδρομής που χρησιμοποιείται για τα πλοία STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Αυτόματη αναστροφή σε σηματοδότες: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Επιτρέπεται στα τρένα να αντιστραφούν σε σήμα, εάν περιμένουν εκεί για πολύ ώρα -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Συνιστάται) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Αλλαγή τιμής ρύθμισης @@ -2887,7 +2878,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Επιλ # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Σημείο καθοδήγησης -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Επιλογή τύπου σημείου καθοδήγησης # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Επιλογή Σιδηροδρομικού Σταθμού @@ -2900,8 +2890,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Επιλ STR_STATION_BUILD_DRAG_DROP :{BLACK}Σύρετε και Ελευθερώστε STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Φτιάξε ένα σταθμό χρησιμοποιώντας σύρσιμο και ελευθέρωση -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Επιλογή τύπου σταθμών για εμφάνιση -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Επιλέξτε τον τύπο του σταθμού προς κατασκευή + STR_STATION_CLASS_DFLT :Προεπιλεγμένος STR_STATION_CLASS_DFLT_STATION :Προεπιλεγμένος σταθμός @@ -3044,8 +3033,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Αγορ # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Επιλογή Αντικείμενου -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Επιλογή αντικείμενου για κατασκευή. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Επιλογή της κατηγορίας του αντικείμενου για κατασκευή STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Προεπισκόπηση του αντικείμενου STR_OBJECT_BUILD_SIZE :{BLACK}Μέγεθος: {GOLD}{NUM} x {NUM} τετράγωνα diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 21e941978e..871d82b0bb 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1881,17 +1881,8 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :התפלגות STR_CONFIG_SETTING_AI :מתחרים STR_CONFIG_SETTING_AI_NPC :שחקני מחשב -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :{STRING} :אלגוריתם איתור נתיב עבור רכבות -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :אלגוריתם איתור נתיב עבור רכבות -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :{STRING} :אלגוריתם איתור נתיב עבור רכבי כביש -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :אלגוריתם איתור נתיב עבור רכבי כביש -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :{STRING} :אלגוריתם איתור נתיב עבור כלי שייט -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :אלגוריתם איתור נתיב עבור אוניות STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :החלפת כיוון אוטומטית ברמזורים: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :אפשר לרכבות להחליף כיוון ברמזור, אם הן חיכו שם זמן ממושך -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(מומלץ) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}שנה ערך @@ -2447,7 +2438,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}בחר # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}נקודת ציון -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}בחר את סוג נקודות הציון # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}בחירת תחנת רכבת @@ -2460,8 +2450,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}בחר STR_STATION_BUILD_DRAG_DROP :{BLACK}גרירה ושחרור STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}בניית תחנה ע"י גרירה ושחרור -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}בחר את סוג התחנה שיוצג -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}בחר את סוג התחנה לבנייה + STR_STATION_CLASS_DFLT :תחנת בחירת מחדל STR_STATION_CLASS_WAYP :נקודות דרך @@ -2595,8 +2584,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}קנה # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}פירט נבחר -STR_OBJECT_BUILD_TOOLTIP :{BLACK}בחר פריט לבנייה. Shift בורר בניה/הצגה של הערכת עלות -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}בחר את סוג הפריט לבנייה STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}צפיה מקדימה של האובייקט STR_OBJECT_BUILD_SIZE :{BLACK}גודל: {GOLD}{NUM} x {NUM} משבצת diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index 5558603d75..3632773fca 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -712,9 +712,7 @@ STR_CONFIG_SETTING_INTERFACE_GENERAL :सामान STR_CONFIG_SETTING_COMPANY :कंपनी STR_CONFIG_SETTING_VEHICLES_ROUTING :मार्ग -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :नौकाओं द्वारा उपयोग किया जाने वाला पथान्वेषी STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :यदि ट्रेनें लंबे समय तक वहां प्रतीक्षा करती हैं तो उन्हें सिग्नल पर रिवर्स करने की अनुमति दें -###length 2 # Config errors @@ -870,6 +868,7 @@ STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}अक # Rail station construction window + STR_STATION_CLASS_DFLT :मानक स्टेशन STR_STATION_CLASS_WAYP :पथ-संकेत diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 1f89103c67..1cad1053dd 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -2186,17 +2186,8 @@ STR_CONFIG_SETTING_AI :Ellenfelek STR_CONFIG_SETTING_AI_NPC :Számítógép által vezérelt ellenfelek STR_CONFIG_SETTING_NETWORK :Hálózat -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Útvonalkereső vonatokhoz: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :A vonatokhoz használt útvonalkereső -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Útvonalkereső közúti járművekhez: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :A közúti járművekhez használt útvonalkereső -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Útvonalkereső hajókhoz: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :A hajókhoz használt útvonalkereső STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatikus megfordulás jelzőknél: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :A vonatok automatikus megfordításának engedélyezése, ha azok túl hosszú ideje várakoznak egy jelző előtt -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Ajánlott) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Válassz beállítási értéket @@ -2847,7 +2838,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Járműt # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Ellenőrző pont -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Válassz ellenőrző pont típust # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Vasútállomás kiválasztása @@ -2860,8 +2850,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}A vasút STR_STATION_BUILD_DRAG_DROP :{BLACK}Fogd és dobd STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Állomás építése fogd és dobd módon -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Válassz egy megjelenítendő állomásfajtát -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Megépítendő állomástípus kiválasztása + STR_STATION_CLASS_DFLT :Alapértelmezett STR_STATION_CLASS_DFLT_STATION :Alapértelmezett állomás @@ -3004,8 +2993,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Földter # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objektum kiválasztása -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Építendő objektum kiválasztása. Ctrl+kattintás+húzással átlós terület jelölhető ki. Shift+kattintással csak a becsült költséget jeleníti meg -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Építendő objektum típusának kiválasztása STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Objektum előnézete STR_OBJECT_BUILD_SIZE :{BLACK}Méret: {GOLD}{NUM} x {NUM} mező diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 5b239822b0..bfde6f150b 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1698,17 +1698,8 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Iðnaður STR_CONFIG_SETTING_AI :Mótherji STR_CONFIG_SETTING_AI_NPC :Gervigreind -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Leiðsögukerfi lesta: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Leiðsögukerfi sem nota á fyrir lestir -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Leiðsögukerfi bifreiða: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Leiðsögukerfi sem nota á fyrir bíla og sporvagna -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Leiðsögukerfi skipa: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Leiðsögukerfi sem nota á fyrir skip STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Snúa járnbrautarlestum sjálfkrafa við á umferðarmerkjum: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Leyfa járnbrautarlestum að snúa við á umferðarmerkjum ef þau hafa beðið þar í langan tíma -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Ráðlegt) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Breyta gildi stillingar @@ -2218,7 +2209,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Veldu le # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Leiðarvísir -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Velja tegund leiðarvísis # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Lestarstöðvastillingar @@ -2231,8 +2221,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Veldu le STR_STATION_BUILD_DRAG_DROP :{BLACK}Draga & Sleppa STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Byggja lestarstöð með 'draga og sleppa' aðferðinni -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Veldu flokk stöðva sem á að sýna -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Veldu tegund stöðvar til að reisa + STR_STATION_CLASS_DFLT :Sjálfgefin stöð STR_STATION_CLASS_WAYP :Millistöð @@ -2363,8 +2352,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Kaupa la # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Hlutaval -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Veldu hlut til að byggja. Shift sýnir áætlaðan kostnað -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Veldu flokk hlutarins sem á að byggja STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Sýnishorn af hlutnum STR_OBJECT_BUILD_SIZE :{BLACK}Stærð: {GOLD}{NUM} x {NUM} reitir diff --git a/src/lang/ido.txt b/src/lang/ido.txt index 1b97724100..f711c1fdca 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -810,7 +810,6 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violkolora ###length 3 -###length 2 # Config errors @@ -945,6 +944,7 @@ STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Aceptas: + # Signal window # Bridge selection window diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 2aef11719c..41612ecd91 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -2077,17 +2077,8 @@ STR_CONFIG_SETTING_AI :Pesaing STR_CONFIG_SETTING_AI_NPC :Pemain Komputer STR_CONFIG_SETTING_NETWORK :Jaringan -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Pencari jejak untuk kereta: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Pencari jejak untuk kereta -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Pencari jejak untuk kendaraan jalan raya: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Pencari jejak untuk kendaraan jalan raya -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Pencari jejak untuk kapal : {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Pencari jejak untuk kapal STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Berputar otomatis di sinyal: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Perbolehkan kereta berputar di sinyal, jika telah menunggu lama -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recommended) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Ganti nilai tetapan @@ -2730,7 +2721,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Tentukan # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Waypoint -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Pilih jenis waypoint # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Pilih stasiun kereta @@ -2743,8 +2733,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Pilih pa STR_STATION_BUILD_DRAG_DROP :{BLACK}Drag & Drop STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Membangun stasiun dengan Drag & Drop -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Pilih kelas stasiun yang akan ditampilkan -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Pilih jenis stasiun yang akan dibangun + STR_STATION_CLASS_DFLT :Standar STR_STATION_CLASS_DFLT_STATION :Stasiun standar @@ -2887,8 +2876,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Beli tan # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Pemilihan obyek -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Pilih obyek yg akan dibangun. Ctrl untuk memilih area secara diagonal. Shift untuk menampilkan perkiraan biaya -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Pilih kelas dari objek yang dibangun STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Pra-tayang obyek STR_OBJECT_BUILD_SIZE :{BLACK}Ukuran: {GOLD}{NUM} x {NUM} kotak diff --git a/src/lang/irish.txt b/src/lang/irish.txt index ea7823a7a5..0905a3b1f6 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1932,17 +1932,8 @@ STR_CONFIG_SETTING_AI :Iomaitheoirí STR_CONFIG_SETTING_AI_NPC :Ríomh-imreoirí STR_CONFIG_SETTING_NETWORK :Líonra -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Aimsitheoir bealaigh do thraenacha: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :An t-aimsitheoir bealaigh a úsáidfear do thraenacha -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Aimsitheoir bealaigh d'fheithiclí bóthair: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :An t-aimsitheoir bealaigh a úsáidfear d'fheithiclí bóthair -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Aimsitheoir bealaigh do longa: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :An t-aimsitheoir bealaigh a úsáidfear do longa STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Aisiompú uathoibríoch ag comharthaí: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Ceadaigh do thraenacha aisiompú ag comhartha, más rud é go raibh siad ag fanacht ann píosa fada -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Molta) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Athraigh luach an tsocraithe @@ -2547,7 +2538,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Roghnaig # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Pointe bealaigh -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Roghnaigh an cineál pointe bealaigh # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Stáisiún Iarnróid a Thógáil @@ -2560,8 +2550,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Roghnaig STR_STATION_BUILD_DRAG_DROP :{BLACK}Tarraing & Scaoil STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Tóg stáisiún ag úsáid tarraing & scaoil -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Roghnaigh aicme stáisiúin le taispeáint -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Roghnaigh an cineál stáisiúin le tógáil + STR_STATION_CLASS_DFLT :Stáisiún réamhshocraithe STR_STATION_CLASS_WAYP :Pointí bealaigh @@ -2696,8 +2685,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Ceannaig # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Roghnú oibiachta -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Roghnaigh oibiacht le tógáil -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Roghnaigh aicme na hoibiachta le tógáil STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Réamhamharc ar an oibiacht STR_OBJECT_BUILD_SIZE :{BLACK}Méid: {GOLD}{NUM} x {NUM} tíl diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 0f015a35f7..b5a27518c3 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -2158,17 +2158,8 @@ STR_CONFIG_SETTING_AI :Avversari STR_CONFIG_SETTING_AI_NPC :Giocatori controllati dal computer STR_CONFIG_SETTING_NETWORK :Rete -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Pathfinder per i treni: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Pathfinder da utilizzare per i treni -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Pathfinder per gli automezzi: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Pathfinder da utilizzare per gli automezzi -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Pathfinder per le navi: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Pathfinder da utilizzare per le navi STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Inversione automatica ai segnali: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Consente ai treni di invertire la marcia dopo aver atteso a lungo a un segnale. -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(raccomandato) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Cambia impostazione @@ -2825,7 +2816,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Selezion # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Waypoint -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Seleziona il tipo di waypoint # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Selezione stazione @@ -2838,8 +2828,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Selezion STR_STATION_BUILD_DRAG_DROP :{BLACK}Drag & drop STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Costruisce una stazione con il drag & drop -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Seleziona il tipo di stazioni da mostrare -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Seleziona il tipo di stazione da costruire + STR_STATION_CLASS_DFLT :Predefinita STR_STATION_CLASS_DFLT_STATION :Stazione predefinita @@ -2982,8 +2971,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Acquista # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Selezione oggetto -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Seleziona l'oggetto da costruire. Ctrl+Clic+trascinamento per selezionare l'area in diagonale. Premere anche Shift per visualizzare solo la stima dei costi -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Seleziona la classe dell'oggetto da costruire STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Anteprima dell'oggetto STR_OBJECT_BUILD_SIZE :{BLACK}Dimensione: {GOLD}{NUM} x {NUM} caselle diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 5d6d5ad7cc..f605687409 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1988,17 +1988,8 @@ STR_CONFIG_SETTING_AI :競争会社 STR_CONFIG_SETTING_AI_NPC :コンピュータプレイヤー STR_CONFIG_SETTING_NETWORK :ネットワーク -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :列車の経路探索アルゴリズム: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :列車の経路探索アルゴリズムを決めます -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :車両の経路探索アルゴリズム: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :車両の経路探索アルゴリズムを決めます -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :船舶の経路探索アルゴリズム: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :船舶の経路探索アルゴリズムを決めます STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :信号待ちでの折返し: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :列車が信号で長く待たされた場合、進路を反転することを許可します -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF{BLUE}(おすすめ) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}設定を変更します @@ -2610,7 +2601,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}列車 # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}中継駅 -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}中継駅の種類を選択します # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}駅の選択 @@ -2623,8 +2613,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}駅の STR_STATION_BUILD_DRAG_DROP :{BLACK}任意のサイズ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}ドラッグ&ドロップで任意のサイズの駅を建設します -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}駅の種類を選択します -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}駅の種類を選択します + STR_STATION_CLASS_DFLT :標準駅 STR_STATION_CLASS_WAYP :中継駅 @@ -2764,8 +2753,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}将来 # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}オブジェクトを配置 -STR_OBJECT_BUILD_TOOLTIP :{BLACK}設置するオブジェクトを選択して下さい。Ctrlで斜めに選択できます。Shift+クリックで費用を見積もります -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}設置するオブジェクトを選びます STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}オブジェクトをプレビューします STR_OBJECT_BUILD_SIZE :{BLACK}サイズ: {GOLD}{NUM} x {NUM} マス diff --git a/src/lang/korean.txt b/src/lang/korean.txt index d6b985f960..a1f8442e22 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2131,17 +2131,8 @@ STR_CONFIG_SETTING_AI :경쟁자 STR_CONFIG_SETTING_AI_NPC :컴퓨터 플레이어 STR_CONFIG_SETTING_NETWORK :네트워크 -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :열차에 사용할 경로 탐색법: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :열차에 사용할 경로 탐색 방법을 선택합니다. -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :자동차/전차에 사용할 경로 탐색법: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :자동차/전차에 사용할 경로 탐색 방법을 선택합니다. -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :선박에 사용할 경로 탐색법: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :선박에 사용할 경로 탐색 방법을 선택합니다. STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :신호기 앞에서 회차: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :열차가 신호기 앞에서 너무 오래 기다리면 뒤로 되돌아갈 수 있도록 허용합니다. -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(권장) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}설정값 변경 @@ -2795,7 +2786,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}차량 # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}경유지 -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}경유지 종류 설정 # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}철도 역사 선택 @@ -2808,8 +2798,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}철도 STR_STATION_BUILD_DRAG_DROP :{BLACK}드래그 & 드롭 STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}드래그 & 드롭으로 역을 건설합니다 -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}표시할 역의 종류를 선택합니다 -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}건설할 역의 종류를 선택합니다 + STR_STATION_CLASS_DFLT :기본 STR_STATION_CLASS_DFLT_STATION :기본 역 @@ -2952,8 +2941,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}나중 # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}오브젝트 선택 -STR_OBJECT_BUILD_TOOLTIP :{BLACK}건설할 오브젝트를 선택합니다. CTRL+클릭+드래그하면 대각선 방향의 영역을 선택할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}건설할 오브젝트의 등급을 선택합니다 STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}오브젝트 미리보기 STR_OBJECT_BUILD_SIZE :{BLACK}크기: {GOLD}{NUM} x {NUM} 칸 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index bede118290..ffcd61eeb4 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -2030,17 +2030,8 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Partitio onerum STR_CONFIG_SETTING_AI :Competitores STR_CONFIG_SETTING_AI_NPC :Lusores computatrales -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Inventrum itineris traminum: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Inventrum itineris hamaxostichis adhibendum -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Inventrum itineris vehiculorum viariorum: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Inventrum itineris vehiculis viariis adhibendum -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Inventrum itineris navium: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Inventrum itineris navibus adhibendum STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Reversio automatica apud signalia: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Sinere tramina reverti apud signale, si illic valde morati sunt -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Commendatum) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Mutare valorem optionis @@ -2578,7 +2569,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Eligere # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Interlocus -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Eligere typum interloci # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Electio Ferriviariae Stationis @@ -2591,8 +2581,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Eligere STR_STATION_BUILD_DRAG_DROP :{BLACK}Trahere Ponereque STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Struere stationem trahendo ponendoque -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Eligere classem stationum monstrandam -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Eligere typum stationis struendum + STR_STATION_CLASS_DFLT :Statio solita STR_STATION_CLASS_WAYP :Interloci @@ -2723,8 +2712,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Emere te # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Electio ornamentorum -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Eligere ornamentum struendum. Shift mutat inter constructionem et aestimationem monstrandam -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Eligere classem ornamenti struendi STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Praevisum ornamenti STR_OBJECT_BUILD_SIZE :{BLACK}Magnitudo: {GOLD}{NUM} x {NUM} tegulae diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index a3e90c764f..56b0adca4f 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -2134,17 +2134,8 @@ STR_CONFIG_SETTING_AI :Sāncenši STR_CONFIG_SETTING_AI_NPC :Nespēlētāju tēli (datora vadīti) STR_CONFIG_SETTING_NETWORK :Tīkls -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Vilcienu ceļa meklētājs: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Vilcieniem pielietotais ceļa meklētājs -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Autotransporta līdzekļu ceļa meklētājs: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Autotransporta līdzekļiem pielietotais ceļa meklētājs -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Kuģu ceļa meklētājs: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Kuģiem pielietotais ceļa meklētājs STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automātiska apgriešanās pie luksoforiem: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Atļauj vilcieniem apgriezties pie signālierīcēm, ja tie te ir gaidījuši ilgu laiku -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(ieteicamais) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Mainīt iestatījuma vērtību @@ -2798,7 +2789,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Izvēlē # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Pieturas punkts -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Izvēlēties pieturas punkta veidu # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Dzelzceļa stacijas izvēle @@ -2811,8 +2801,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Izvēlē STR_STATION_BUILD_DRAG_DROP :{BLACK}Vilkt un nomest STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Būvēt staciju izmantojot "vilkt un nomest" -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Izvēlēties kuru stacijas klasi rādīt -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Izvēlēties kuru stacijas veidu būvēt + STR_STATION_CLASS_DFLT :Noklusējuma STR_STATION_CLASS_DFLT_STATION :Noklusējuma stacija @@ -2955,8 +2944,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Iegādā # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objektu izvēle -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Izvēlēlaties buvējamo objektu. Ctrl atlasa apgabalu pa diagonāli. Shift parāda novērtētās izmaksas, neveicot būvēšanu -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Izvēlēties būvējamā objekta klasi STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Objekta priekšskatījums STR_OBJECT_BUILD_SIZE :{BLACK}Izmērs: {GOLD}{NUM} x {NUM} lauciņi diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 0cd2200e0f..6f9e45b8ac 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -2295,17 +2295,8 @@ STR_CONFIG_SETTING_AI :Konkurentai STR_CONFIG_SETTING_AI_NPC :Kompiuterio žaidėjai STR_CONFIG_SETTING_NETWORK :Žaidimas tinkle -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Traukinių maršrutų paieškos algoritmas: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Maršruto naudojamas ieškotojas traukiniams -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Automobilių maršrutų paieškos algoritmas: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Maršruto naudojamas ieškotojas kelių transporto priemonėms -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Laivų maršrutų paieškos algoritmas: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Maršruto naudojamas ieškotojas laivams STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Apsisukimas prie šviesoforų: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Leisti traukiniams apsisukti ir bandyti važiuoti priešinga kryptimi, jei ties šviesoforu jiems tenka laukti pernelyg ilgai -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Rekomenduojama) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Keisti reikšmes @@ -2944,7 +2935,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Pasirink # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Kontrolės punktas -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Pasirinkite punkto tipą # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Pasirinkite stotelės parametrus @@ -2957,8 +2947,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Pasirink STR_STATION_BUILD_DRAG_DROP :{BLACK}Vilkti STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Statyti stotelę vilkimo būdu -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Pasirinkti stoties klasę rodymui -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Pasirinkti stoties statymo tipą + STR_STATION_CLASS_DFLT :Numatytoji STR_STATION_CLASS_DFLT_STATION :Numatytoji stotelė @@ -3020,7 +3009,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Aktyvint STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Statyti automobilių tiltą. Taip pat spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos tik numatomos išlaidos STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Statyti tramvajaus tiltą. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Statyti automobilių tunelį. Taip pat spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Statyti tramvajaus tunelį. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Statyti tramvajaus tunelį. Taip pat spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos tik numatomos išlaidos STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Aktyvinti automobilių kelių ir stotelių šalinimo veikseną STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Aktyvinti tramvajaus bėgių ir stotelių šalinimo veikseną STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Pakeisti kelio tipą. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos @@ -3100,8 +3089,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Nusipirk # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Pasirinkite objektą -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Pasirinkite norimą objektą statymui. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodytos numatomos išlaidos -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Pasirinkite objekto tipą STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Objekto peržiūra STR_OBJECT_BUILD_SIZE :{BLACK}Dydis langeliais: {GOLD}{NUM} x {NUM} diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 98bd3a4d8f..618a02efec 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -2122,17 +2122,8 @@ STR_CONFIG_SETTING_AI :Géigner STR_CONFIG_SETTING_AI_NPC :Computergéigner STR_CONFIG_SETTING_NETWORK :Netzwierk -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Pfadfinder fir Zich: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Pfadfinder dee fir Zich benotzt gëtt -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Pfadfinder fir Stroossegefierer: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Pfadfinder dee fir Gefierer benotzt gëtt -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Pfadfinder fir Schëffer: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Pfadfinder dee fir Schëffer benotzt gëtt STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatescht Emdréinen bei Signaler: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Erlab Zich bei engem Signal emzedréinen, wann se eng laang Zäit geward hunn -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(recommandéiert) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Astellung änneren @@ -2783,7 +2774,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Wielt d' # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Weepunkt -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Wielt de Weepunktyp # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Gare Auswiel @@ -2796,8 +2786,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Wielt d' STR_STATION_BUILD_DRAG_DROP :{BLACK}Drag & Drop STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}D'Statioun per drag & drop bauen -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Wielt eng Statiounsklass déi ugewise gëtt -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Wielt den Typ vu Statioun dee gebaut gëtt + STR_STATION_CLASS_DFLT :Standard STR_STATION_CLASS_DFLT_STATION :Standardstatioun @@ -2940,8 +2929,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Kaf Land # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objetsauswiel -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Wiel den Objet dee gebaut gëtt. Ctrl+Klick+Zéien wielt d'Areal diagonal. Dréck Shift fir nëmmen déi ongeféier Käschten unzeweisen -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Wiel d'Klass vun dem Objet dee sollt gebaut ginn STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Preview vum Objet STR_OBJECT_BUILD_SIZE :{BLACK}Gréisst: {GOLD}{NUM} x {NUM} Felder diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index 0aa4525330..b264482165 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -1125,7 +1125,6 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x ###length 3 -###length 2 # Config errors @@ -1288,6 +1287,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Изгр + # Signal window STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Влез сигнализација (електрика){}Зелено е се додека има барем еден зелен излез-сигнал во продолжението на траката, во спротивно е црвено. STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Излез Сигнализација (електрика){}Се однесува на ист начин како блок-сигналот, но потребно е да ја има точната боја на влезен и комбо пресигнал. @@ -1335,7 +1335,6 @@ STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Поди # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Избор на објект -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Одберете објект да се изгради STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Преглед на објектот STR_OBJECT_BUILD_SIZE :{BLACK}Големина: {GOLD}{NUM} x {NUM} плочки diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 7bdfdf9438..aee8674dea 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1596,14 +1596,8 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Industri-indust STR_CONFIG_SETTING_AI :Pesaing STR_CONFIG_SETTING_AI_NPC :Pemain komputer -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Pencari laluan untuk keretapi: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Pencari laluan untuk kenderaan jalanraya: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Pencari laluan untuk kapal: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Berundur secara automatik di isyarat: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Benarkan keretapi berundur di lampu isyarat, jika ia menuggu lama -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Disyorkan) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Tukar nilai tetapan @@ -2113,7 +2107,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Pilih pe # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Tandatuju -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Pilih jenis tandatuju # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Pilihan Stesen Keretapi @@ -2126,8 +2119,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Pilih ke STR_STATION_BUILD_DRAG_DROP :{BLACK}Seret & Lepas STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bina stesen menggunakan kaedah seret & lepas -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Pilih kelas stesen untuk dipaparkan -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Pilih jenis stesen untuk dibina + STR_STATION_CLASS_DFLT :Stesen lazim STR_STATION_CLASS_WAYP :Tandatuju @@ -2258,8 +2250,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Beli tan # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Pilihan Objek -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Pilih objek untuk dibina. Shift untuk anggaran kos -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Pilih kelas untuk objek yang ingin dibina STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Pranonton objek STR_OBJECT_BUILD_SIZE :{BLACK}Saiz: {GOLD}{NUM} x {NUM} petak diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index 1d6e1ebd64..abc21a91a2 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -742,7 +742,6 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ippermetti l-uz ###length 3 -###length 2 # Config errors @@ -874,6 +873,7 @@ STR_NETWORK_SERVER_MESSAGE :*** {1:STRING} + # Signal window # Bridge selection window @@ -902,7 +902,6 @@ STR_NETWORK_SERVER_MESSAGE :*** {1:STRING} # Landscaping toolbar # Object construction window -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Aghzel il-klassi tal-oggett li se tibni # Tree planting window (last eight for SE only) diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index 321192ff88..7bffb779ce 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -1030,7 +1030,6 @@ STR_CONFIG_SETTING_STATUSBAR_POS :स्टेट ###length 3 -###length 2 # Config errors @@ -1197,6 +1196,7 @@ STR_NETWORK_SERVER_MESSAGE :*** {1:STRING} + # Signal window # Bridge selection window diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 1e2eb37786..d10c76178f 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -2130,17 +2130,8 @@ STR_CONFIG_SETTING_AI :Konkurrenter STR_CONFIG_SETTING_AI_NPC :Datamaskinspillere STR_CONFIG_SETTING_NETWORK :Nettverk -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Veifinner for tog: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Stifinner som skal brukes for tog -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Veifinner for kjøretøy: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Stifinner som skal brukes for kjøretøyer -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Veifinner for skip: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Stifinner som brukes for skip STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatisk reversering ved signaler: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :La tog reversere ved signaler om de har ventet der lenge -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Anbefalt) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Endre verdi @@ -2793,7 +2784,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Velg tog # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Veipunkt -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Velg type veipunkt # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Velg jernbanestasjonstype @@ -2806,8 +2796,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Velg hvo STR_STATION_BUILD_DRAG_DROP :{BLACK}Dra og slipp STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg en stasjon med dra og slipp -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Velg en stasjonstype å vise -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Velg stasjonstypen du vil bygge + STR_STATION_CLASS_DFLT :Standard STR_STATION_CLASS_DFLT_STATION :Standard stasjon @@ -2950,8 +2939,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Kjøp op # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objektvalg -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Velg objekt å bygge. Ctrl+klikk+dra for å velge arealet diagonalt. Trykk også Shift for å kun vise kostnadsestimat -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Velg objektstype du vil bygge STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Forhåndsvisning av objektet STR_OBJECT_BUILD_SIZE :{BLACK}Størrelse: {GOLD}{NUM} x {NUM} ruter diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index b53b3a9f42..e58a70908d 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1751,17 +1751,8 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Varefordeling STR_CONFIG_SETTING_AI :Motstandarar STR_CONFIG_SETTING_AI_NPC :Datamaskinspelarar -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Vegfinnar for tog: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Kva for vegfinnar som skal nyttast for tog -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Vegfinnar for køyretøy på vegar: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Kva for vegfinnar som skal nyttast for bilar og bussar -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Vegfinnar for skip: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Kva for vegfinnar som skal nyttast for skip STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatisk reversering ved signal: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :La tog snu ved signal, når dei har venta lengje -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Anbefalt) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Byt innstillingsverdi @@ -2282,7 +2273,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Vel retn # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Kontrollpunkt -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Vel kontrollpunkttype # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Vel jernbanestasjontype @@ -2295,8 +2285,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Vel kor STR_STATION_BUILD_DRAG_DROP :{BLACK}Dra og slipp STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg stasjon med dra og slipp -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Vel den stasjonstypen som skal visast -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Vel stasjonen du vil byggje + STR_STATION_CLASS_DFLT :Standard stasjon STR_STATION_CLASS_WAYP :Kontrollpunkt @@ -2427,8 +2416,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Kjøp la # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objektval -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vel objekt å byggje. Skift vekslar mellom byggjing/syning av prisoverslag. -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Velg objekttype du vil byggje STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Førehandsvisning av objektet STR_OBJECT_BUILD_SIZE :{BLACK}Storleik: {GOLD}{NUM} x {NUM} ruter diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 40804370cf..3efb85ad35 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -1591,14 +1591,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :توزیع مح STR_CONFIG_SETTING_AI :رقیبان STR_CONFIG_SETTING_AI_NPC :بازیگران رایانه -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :مسیریاب برای قطارها: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :مسیریاب برای خودروهای جاده ای: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :مسیریاب برای خودروهای جاده ای -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :مسیریاب برای کشتی ها: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :برگشت خودکار با رسیدن به نشانه ها: {STRING} -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(توصیه می گردد) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}تغییر مقدار @@ -2108,7 +2101,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}جهت # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}نقطه مسیر -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}نوع نقطه مسیر را انتخاب نمایید # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}انتخاب ایستگاه راه آهن @@ -2121,8 +2113,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}انتخ STR_STATION_BUILD_DRAG_DROP :{BLACK}بکشید و بیاندازید STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}ساخت ایستگاه با استفاده از کشیدن و انداختن -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}کلاس ایستگاه را برای نمایش انتخاب کنید -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}ایک نوع ایستگاه را برای ساخت انتخاب کنید + STR_STATION_CLASS_DFLT :ایستگاه پیش فرض STR_STATION_CLASS_WAYP :نقطه مسیر ها @@ -2253,8 +2244,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}خرید # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}انتخاب شیء -STR_OBJECT_BUILD_TOOLTIP :{BLACK}شیء را برای ساخت انتخاب نمایید. گرفتن دکمه شیفت برآورد هزینه ساخت را نمایش می دهد -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}نوع شیء را برای ساخت انتخاب کنید STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}پیش نمای شیء STR_OBJECT_BUILD_SIZE :{BLACK}اندازه: {GOLD}{NUM} x {NUM} قطعه diff --git a/src/lang/polish.txt b/src/lang/polish.txt index ac97b5f02b..ff954468cd 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2510,17 +2510,8 @@ STR_CONFIG_SETTING_AI :Rywale STR_CONFIG_SETTING_AI_NPC :Gracze komputerowi STR_CONFIG_SETTING_NETWORK :Sieć -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Wytyczanie drogi dla pociągów: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :System wyszukiwania trasy dla pociągów -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Wytyczanie drogi dla pojazdów: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :System wyszukiwania trasy dla pojazdów drogowych -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Wytyczanie drogi dla statków: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :System wyszukiwania trasy dla statków STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatycznie zawracaj przy sygnałach: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Pozwól pociągom zawracać przed semaforem, jeśli czekają tam bardzo długo -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Zalecane) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Zmiana wartości @@ -3174,7 +3165,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Wybierz # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Posterunek -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Wybierz typ posterunku # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Wybór stacji @@ -3187,8 +3177,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Wybierz STR_STATION_BUILD_DRAG_DROP :{BLACK}Przeciągnij i upuść STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Buduj stację używając „przeciągnij i upuść” -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Wybierz rodzaj stacji do pokazania -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Wybierz typ stacji do zbudowania + STR_STATION_CLASS_DFLT :Standardowa STR_STATION_CLASS_DFLT_STATION :Standardowa stacja @@ -3331,8 +3320,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Zakup te # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Wybór obiektu -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Wybierz obiekt do budowy. Ctrl+klik+przeciągnięcie zaznacza obszar po przekątnej. Dodatkowo wciśnięcie Shift wyświetli jedynie szacunkowy koszt -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Wybierz rodzaj obiektu do budowy STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Podgląd obiektu STR_OBJECT_BUILD_SIZE :{BLACK}Rozmiar: {GOLD}{NUM} x {NUM} pól diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 863a2cad41..9e6cfb57c4 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -2131,17 +2131,8 @@ STR_CONFIG_SETTING_AI :Oponentes STR_CONFIG_SETTING_AI_NPC :Jogadores Computador STR_CONFIG_SETTING_NETWORK :Rede -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Sistema de encaminhar comboios: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Sistema de encaminhar comboios -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Sistema de encaminhar veículos rodoviários: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Sistema de encaminhar veículos rodoviários -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Sistema de encaminhar navios: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Sistema de encaminhar navios STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Inversão automática nos sinais: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permitir que os comboios invertam o sentido de marcha nos sinais, caso estejam à espera muito tempo -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recomendado) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Alterar valor @@ -2795,7 +2786,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Selecion # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Ponto de controlo -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Selecione um tipo de ponto de controlo # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Selecção de Estação @@ -2808,8 +2798,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Seleccio STR_STATION_BUILD_DRAG_DROP :{BLACK}Arrastar STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construir estação arrastando -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Escolher a classe da estação a mostrar -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Escolher o tipo de estação a construir + STR_STATION_CLASS_DFLT :Padrão STR_STATION_CLASS_DFLT_STATION :Estação padrão @@ -2952,8 +2941,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Selecção de Objecto -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Selecionar objeto para construir. Ctrl+Clique+Arrastar para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Selecionar a classe do objecto a construir STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Pré-visualização do objecto STR_OBJECT_BUILD_SIZE :{BLACK}Tamanho: {GOLD}{NUM} x {NUM} mosaicos diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 7214d9fc86..5ba59f559f 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -2120,17 +2120,8 @@ STR_CONFIG_SETTING_AI :Concurenți STR_CONFIG_SETTING_AI_NPC :Jucători virtuali STR_CONFIG_SETTING_NETWORK :Rețea -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Algoritm de rutare pentru trenuri: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Algoritm de rutare pentru trenuri -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Algoritm de rutare pentru autovehicule: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Algoritmul de rutare folosit pentru autovehicule -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Algoritm de rutare pentru nave: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Algoritmul de rutare folosit pentru nave STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Întoarcere automată la semafoare: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permite trenurilor să întoarcă la semafor, dacă așteaptă de mult timp -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recomandat) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Schimbă valoarea setării @@ -2781,7 +2772,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Alege or # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Punct de tranzit -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Alege tipul de punct de tranzit # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Alege tipul de gară @@ -2794,8 +2784,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Alege lu STR_STATION_BUILD_DRAG_DROP :{BLACK}Drag & Drop STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construiește o stație prin drag & drop -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Alege o clasă de stații pentru afișare -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Alege tipul de stație pentru construcție + STR_STATION_CLASS_DFLT :Implicită STR_STATION_CLASS_DFLT_STATION :Stație implicită @@ -2938,8 +2927,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Cumpăra # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Selecția obiectelor -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Selectați obiectul de construit. Ctrl+Click+Drag pentru a selecta zona în diagonală. De asemenea, apăsați Shift pentru a afișa numai estimarea costurilor -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Selectează clasa obiectului de construit STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Previzualizarea obiectului STR_OBJECT_BUILD_SIZE :{BLACK}Dimensiune: {GOLD}{NUM} x {NUM} pătrățele diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 0a940474e4..560effeca9 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2281,17 +2281,8 @@ STR_CONFIG_SETTING_AI :Конкуре STR_CONFIG_SETTING_AI_NPC :Искусственный интеллект STR_CONFIG_SETTING_NETWORK :Сеть -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Алгоритм поиска пути для поездов: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Алгоритм поиска пути, используемый поездами -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Алгоритм поиска пути для автотранспорта: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Алгоритм поиска пути, используемый автомобилями -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Алгоритм поиска пути для судов: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Алгоритм поиска пути, используемый водным транспортом STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Автоматический разворот у сигналов: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Разрешить поездам разворачиваться у светофора, если они долго ждут разрешающего сигнала -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Рекомендуется) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Изменить значение @@ -2965,7 +2956,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Выбо # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Маршрутная точка -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Выбор типа маршрутной точки # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Выбор ж/д станции @@ -2978,8 +2968,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Укаж STR_STATION_BUILD_DRAG_DROP :{BLACK}Произвольно STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Постройка станции на указанном игроком участке -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Выберите класс станций для отображения -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Выберите тип станции для постройки + STR_STATION_CLASS_DFLT :Стандартная станция STR_STATION_CLASS_DFLT_STATION :Стандартная ж/д станция @@ -3126,8 +3115,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Поку # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Выбор объекта -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Выберите создаваемый объект. Ctrl+щелчок+перетаскивание - выбор диагональной области. При нажатом Shift - оценка стоимости строительства. -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Выберите класс объекта для строительства STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Предварительный просмотр объекта STR_OBJECT_BUILD_SIZE :{BLACK}Размер: {GOLD}{NUM} × {NUM} клеток diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 38a0eb6e47..e796c9afd2 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -2271,17 +2271,8 @@ STR_CONFIG_SETTING_AI :Suparnici STR_CONFIG_SETTING_AI_NPC :Računar STR_CONFIG_SETTING_NETWORK :Mreža -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Pretraživanje putanja vozova: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Algoritam pronalaženja puta za vozove -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Pretraživanje putanja drumskih vozila: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Algoritam pronalaženja puta za drumska vozila -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Pretraživanje putanja brodova: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Algoritam pronalaženja puta za brodove STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatska promena smera kod signalizacije: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Dozvoljeno okretanje vozova na signalu, ako su dugo čekali -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Preporučuje se) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Promena vrednosti @@ -2925,7 +2916,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Odabir o # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Putanja -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Odaberi tip putanje # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Izbor železničke stanice @@ -2938,8 +2928,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Odabir d STR_STATION_BUILD_DRAG_DROP :{BLACK}Prevlačenje STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Gradnja stanice prevlačenjem -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Odabir klase stanica za prikaz -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Odabir vrste stanice za izgradnju + STR_STATION_CLASS_DFLT :Podrazumevana stanica STR_STATION_CLASS_WAYP :Putanje @@ -3079,8 +3068,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Kupovina # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Izbor Objekta -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Odabir objekta za izgradnju. Ctrl dijagonalno obeležava područje. Shift prebacuje između izgradnje i prikaza procene troškova -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Odabir klase objekata za izgradnju STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Privremeno prikazuje objekat STR_OBJECT_BUILD_SIZE :{BLACK}Veličina: {GOLD}{NUM} x {NUM} pločica diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 1394e98f8a..7a1f5c7b1a 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -2130,17 +2130,8 @@ STR_CONFIG_SETTING_AI :竞争 STR_CONFIG_SETTING_AI_NPC :电脑玩家 STR_CONFIG_SETTING_NETWORK :网络 -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :火车寻路: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :列车寻路方式 -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :汽车寻路: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :汽车寻路方式 -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :船只寻路: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :船只寻路方式 STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :遇到红灯时自动掉头 {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :当列车在信号灯前长时间等待时,允许掉头 -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(推荐) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}改变设置值 @@ -2794,7 +2785,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}选择 # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}路点 -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}选择路点类型 # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}火车站选单 @@ -2807,8 +2797,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}选择 STR_STATION_BUILD_DRAG_DROP :{BLACK}拖动模式 STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}使用拖动模式建设车站 -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}选择一个要显示车站类型 -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}选择要建造的车站类型 + STR_STATION_CLASS_DFLT :默认 STR_STATION_CLASS_DFLT_STATION :默认车站 @@ -2951,8 +2940,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}购买 # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}物体选单 -STR_OBJECT_BUILD_TOOLTIP :{BLACK}选择要建设的物体。按住 键以沿对角线建设,按住 键操作以显示预计成本。 -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}选择要建造的物件类型 STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}物件预览 STR_OBJECT_BUILD_SIZE :{BLACK}大小: {GOLD}{NUM} x {NUM} 格 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 9a7fbbb03e..f34e689a7f 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -2191,17 +2191,8 @@ STR_CONFIG_SETTING_AI :Konkurenti STR_CONFIG_SETTING_AI_NPC :Počítačový hráči STR_CONFIG_SETTING_NETWORK :Sieť -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Algoritmus hľadania cesty pre vlaky: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Vyhľadávač trasy pre vlaky -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Algoritmus hľadania cesty pre cestné vozidlá: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Vyhľadávač trasy pre cestné vozidlá -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Algoritmus hľadania cesty pre lode: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Vyhľadávač trasy pre lode STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatické obrátenie na návestidlách: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Povoliť vlakom otočiť sa na návestidlách, ak tam čakajú dlhý čas -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(odporučený) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Zmeniť hodnotu nastavenia @@ -2854,7 +2845,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Vybrať # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Smerový bod -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Vyber typ kontrolného bodu # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Výber železničnej stanice @@ -2867,8 +2857,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Dĺžka STR_STATION_BUILD_DRAG_DROP :{BLACK}Automaticky STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Automaticky postaviť stanicu podľa označeného bloku terénu -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Vyberte druh stanice pre zobrazenie -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Vyberte typ stanice pre vystavbu + STR_STATION_CLASS_DFLT :Pôvodná STR_STATION_CLASS_DFLT_STATION :Predvolená stanica @@ -3011,8 +3000,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Zakúpi # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Výber objektu -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vyberte objekt na vybudovanie. Ctrl+Klik+Ťah myšou označí oblasť diagonálne. Shift zobrazí odhadovanú cenu -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Vyberte triedu objektu na vybudovanie STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Náhľad objektu STR_OBJECT_BUILD_SIZE :{BLACK}Rozmery: {GOLD}{NUM} x {NUM} políčok diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 7ffa3dd4ac..38d257676b 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1979,17 +1979,8 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Razpored tovora STR_CONFIG_SETTING_AI :Tekmeci STR_CONFIG_SETTING_AI_NPC :Računalniški igralci -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Iskalnik poti za vlake: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Iskalnik poti za vlake. -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Iskalnik poti za vozila: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Iskalnik poti za cestna vozila. -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Logaritem poti za ladje: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Iskalnik poti za ladje. STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Avtomatično obračanje pri signalih: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Dovoli vlakom obračanje na signalih, če so tam čakali že dolgo. -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Priporočeno) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Spremeni vrednost @@ -2517,7 +2508,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Izberi s # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Točka poti -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Izberi vrsto točke poti # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Izbira železniške postaje @@ -2530,8 +2520,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Izberi d STR_STATION_BUILD_DRAG_DROP :{BLACK}Vleci in spusti STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Zgradi postajo s povleci in spusti -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Izberi vrsto postaje za prikaz -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Izberi vrsto postaje za gradnjo + STR_STATION_CLASS_DFLT :Privzeta postaja STR_STATION_CLASS_WAYP :Točke poti @@ -2663,8 +2652,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Kupi zem # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Izbor zgradbe -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Izberi zgradbo za postavitev. Shift preklaplja med izgradnjo in predvidenimi stroški -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Izberi vrsto objekta za gradnjo STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Predogled zgradbe STR_OBJECT_BUILD_SIZE :{BLACK}Velikost: {GOLD}{NUM} x {NUM} polj diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 7a757c0ce5..0a83870f0e 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -2124,17 +2124,8 @@ STR_CONFIG_SETTING_AI :Competidores STR_CONFIG_SETTING_AI_NPC :Jugadores del ordenador (IA) STR_CONFIG_SETTING_NETWORK :Red -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Enrutador para trenes: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Enrutador a emplear en trenes -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Enrutador para vehículos de carretera: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Enrutador a emplear en vehículos de carretera -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Enrutador para barcos: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Enrutador a emplear en barcos STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Cambio de sentido automático en señales: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permite a los trenes darse la vuelta ante una señal, si han esperado durante un tiempo lo suficientemente largo -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recomendado) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Cambiar valor de la opción @@ -2787,7 +2778,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Seleccio # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Punto de ruta -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Selecciona el tipo de punto de ruta # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Selección de estación @@ -2800,8 +2790,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Seleccio STR_STATION_BUILD_DRAG_DROP :{BLACK}Arrastrar y soltar STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construye una estación arrastrando y soltando -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Selecciona el tipo de estación a mostrar -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Selecciona el tipo de estación a construir + STR_STATION_CLASS_DFLT :Por defecto STR_STATION_CLASS_DFLT_STATION :Estación por defecto @@ -2944,8 +2933,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Compra e # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Selección de Objeto -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Selecciona el objeto a construir. Ctrl+clic+arrastrar permite seleccionar un área diagonalmente. Con Mayús sólo muestra una estimación del coste -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Selecciona el tipo de objeto a construir STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Vista previa del objeto STR_OBJECT_BUILD_SIZE :{BLACK}Tamaño: {GOLD}{NUM} x {NUM} casillas diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 207f87a43c..1271954a8c 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2084,17 +2084,8 @@ STR_CONFIG_SETTING_AI :Competidores STR_CONFIG_SETTING_AI_NPC :Jugadores no humanos STR_CONFIG_SETTING_NETWORK :Red -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Algoritmo de rutas para trenes: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Algoritmo de búsqueda de rutas para trenes -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Algoritmo de rutas para autotransportes: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Algoritmo de búsqueda de rutas para autotransportes -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Algoritmo de rutas para barcos: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Algoritmo de búsqueda de rutas para barcos STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Cambio de sentido automático en señales: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Los trenes se darán la vuelta ante una señal si han estado esperado durante un tiempo largo -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(recomendado) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Establecer valor @@ -2731,7 +2722,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Elegir l # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Punto de ruta -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Elegir el tipo de punto de ruta # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Selección de estación @@ -2744,8 +2734,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Elegir l STR_STATION_BUILD_DRAG_DROP :{BLACK}Arrastrar y soltar STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construir una estación mediante arrastrar y soltar el ratón -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Mostrar el tipo de estación elegida -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Construir el tipo de estación elegida + STR_STATION_CLASS_DFLT :por defecto STR_STATION_CLASS_DFLT_STATION :Estación por defecto @@ -2888,8 +2877,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Selección de objeto -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Elegir una estructura u objeto a construir. Ctrl para seleccionar un área en diagonal. Mayús muestra un costo estimado -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Elegir el tipo de objeto o estructura a construir STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Vista previa del objeto STR_OBJECT_BUILD_SIZE :{BLACK}Tamaño: {GOLD}{NUM}×{NUM} casillas diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 97845f00ce..575321c0c7 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -2128,17 +2128,8 @@ STR_CONFIG_SETTING_AI :Motståndare STR_CONFIG_SETTING_AI_NPC :Datorspelare STR_CONFIG_SETTING_NETWORK :Nätverk -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Vägfinnare för tåg: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Vägfinnare som tåg ska använda -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Vägfinnare för vägfordon: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Vägfinnare som vägfordon ska använda -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Vägfinnare för skepp: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Vägfinnare som skepp ska använda STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Vänd automatiskt vid signaler: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Tillåt att tåg vänder vid en signal om de har väntat där länge -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Rekommenderad) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Ändra inställningsvärde @@ -2791,7 +2782,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Välj ri # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Riktmärke -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Välj riktmärkestyp # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Val av tågstation @@ -2804,8 +2794,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Välj l STR_STATION_BUILD_DRAG_DROP :{BLACK}Drag & Släpp STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg en station genom att dra & släppa -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Välj vilken stationsklass som ska visas -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Välj stationstyp att bygga + STR_STATION_CLASS_DFLT :Original STR_STATION_CLASS_DFLT_STATION :Standardstation @@ -2948,8 +2937,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Köp mar # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Val av objekt -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Välj objekt att bygga. Ctrl+Klick+Drag för att välja ytan diagonalt. Håll även in Shift för att endast visa uppskattad kostnad -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Välj typ av objekt att bygga STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Förhandsvisning av objektet STR_OBJECT_BUILD_SIZE :{BLACK}Storlek: {GOLD}{NUM} x {NUM} rutor diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index c7d72f4223..33f70d8c45 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1937,17 +1937,8 @@ STR_CONFIG_SETTING_AI :போட்ட STR_CONFIG_SETTING_AI_NPC :கணினி வீரர்கள் STR_CONFIG_SETTING_NETWORK :இணையம் -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :இரயில்களுக்கான வழிகண்டுபிடிப்பான்: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :இரயில்கள் பயன்படுத்தப்போகும் வழிகண்டுபிடிப்பான் -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :சாலை வாகனங்களுக்கான வழிகண்டுபிடிப்பான்: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :சாலை வாகனங்கள் பயன்படுத்தப்போகும் வழிகண்டுபிடிப்பான் -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :கப்பல்களுக்கான வழிகண்டுபிடிப்பான்: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :கப்பல்கள் பயன்படுத்தப்போகும் வழிகண்டுபிடிப்பான் STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :சிக்னல்களில் தானியங்கி மீட்சி: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :இரயில்கள் நீண்ட நேரம் காத்திருந்தால், சிக்னலில் திரும்புவதற்கு அனுமதிக்கவும் -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(பரிந்துரைக்கப்பட்டது) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}அமைப்பின் மதிப்பினை மாற்று @@ -2554,7 +2545,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}இர # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}பாதைப்புள்ளி -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}பாதைப்புள்ளி வகையினைத் தேர்ந்தெடுக்கவும் # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}இரயில் நிலையம் தேர்ந்தெடுத்தல் @@ -2567,8 +2557,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}இர STR_STATION_BUILD_DRAG_DROP :{BLACK}இழுத்து விடவும் STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}இழுத்து விடுவதன் மூலம் நிலையத்தினைக் கட்டவும் -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}காட்டுவதற்கு ஒரு நிலைய வகையினைத் தேர்ந்தெடுக்கவும் -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}கட்டப்போகும் நிலையத்தின் வகையினைத் தேர்ந்தெடுக்கவும் + STR_STATION_CLASS_DFLT :இயல்பிருப்பு STR_STATION_CLASS_DFLT_STATION :இயல்பிருப்பு நிலையம் @@ -2688,7 +2677,6 @@ STR_LANDSCAPING_TOOLBAR :{WHITE}நி # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}பொருள் தேர்ந்தெடுத்தல் -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}கட்டப்போகும் பொருளின் வகையினைத் தேர்ந்தெடு STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}பொருளின் முன்பார்வை STR_OBJECT_BUILD_SIZE :{BLACK}அளவு: {GOLD}{NUM} x {NUM} கட்டங்கள் diff --git a/src/lang/thai.txt b/src/lang/thai.txt index de9991c03d..270ddb4edb 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1840,17 +1840,8 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :การกร STR_CONFIG_SETTING_AI :คู่แข่ง STR_CONFIG_SETTING_AI_NPC :ผู้เล่นคอมพิวเตอร์ -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :ตัวค้นหาเส้นทางสำหรับรถไฟ: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :การหาค้นหาเส้นทางของขบวนรถไฟ -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :ตัวค้นหาเส้นทางสำหรับรถยนต์: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :การค้นหาเส้นทางของยานพาหนะทางบก -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :ตัวค้นหาเส้นทางสำหรับเรือ: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :การค้นหาเส้นทางของยานพาหนะทางน้ำ STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :หมุนกลับขบวนอัตโนมัติที่เสาอาณัติสัญญาณ: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :อนุญาตให้ขบวนรถไฟกลับขบวนที่เสาอาณัติสัญญาณเมื่อมีการรอสัญญาณอนุญาตเป็นเวลานาน -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(แนะนำ) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}เปลี่ยนค่าการตั้งค่า @@ -2407,7 +2398,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}เล # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}จุดตรวจ -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}เลือกชนิดของจุดตรวจ # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}ตัวเลือกของสถานีรถไฟ @@ -2420,8 +2410,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}เล STR_STATION_BUILD_DRAG_DROP :{BLACK}ลากและวาง STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}สร้างสถานีโดยใช้การลากและวาง -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}เลือกชนิดของสถานีที่จะแสดง -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}เลือกชนิดของสถานีที่จะสร้าง + STR_STATION_CLASS_DFLT :สถานีมาตรฐาน STR_STATION_CLASS_WAYP :จุดตรวจ @@ -2554,8 +2543,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}ซื # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}การเลือกวัตถุ -STR_OBJECT_BUILD_TOOLTIP :{BLACK}เลือกวัตถุเพื่อสร้าง กด Shift เพื่อสลับระหว่างสิ่งปลูกสร้างและการแสดงมูลค่าโดยประมาณ -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}เลือกชนิดของวัตถุที่จะสร้าง STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}ตัวอย่างวัตถุ STR_OBJECT_BUILD_SIZE :{BLACK}ขนาด: {GOLD}{NUM} x {NUM} ช่อง diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 42fe756939..c3a726b229 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -2041,17 +2041,8 @@ STR_CONFIG_SETTING_AI :競爭對手 STR_CONFIG_SETTING_AI_NPC :電腦玩家 STR_CONFIG_SETTING_NETWORK :網路 -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :列車的路徑搜尋方式:{STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :設定列車使用的路徑搜尋方式。 -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :車輛的路徑搜尋方式:{STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :設定公路車輛(包括電車)使用的路徑搜尋方式。 -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :船舶的路徑搜尋方式:{STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :設定船舶使用的路徑搜尋方式。 STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :在號誌自動倒轉:{STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :設定是否容許列車在號誌前等候超過一段時間後調頭。 -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(建議) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}修改設定值 @@ -2682,7 +2673,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}選擇 # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}號誌站 -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}顯示號誌站種類 # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}選擇火車站 @@ -2695,8 +2685,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}選擇 STR_STATION_BUILD_DRAG_DROP :{BLACK}拖放 STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}以拖曳方式興建車站 -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}選擇要顯示的車站種類 -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}選擇要興建的車站種類 + STR_STATION_CLASS_DFLT :預設 STR_STATION_CLASS_DFLT_STATION :預設車站 @@ -2839,8 +2828,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}購買 # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}選擇物件 -STR_OBJECT_BUILD_TOOLTIP :{BLACK}選擇要建立的物件。按 Ctrl 以對角線選擇區域。按 Shift 可切換建立/顯示預估的建立費用。 -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}選擇物件的類別以進行建造 STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}預覽此物件 STR_OBJECT_BUILD_SIZE :{BLACK}大小:{GOLD}{NUM} x {NUM} 格 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 4720447a90..022bda2835 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -2124,17 +2124,8 @@ STR_CONFIG_SETTING_AI :Rakipler STR_CONFIG_SETTING_AI_NPC :Bilgisayar oyuncuları STR_CONFIG_SETTING_NETWORK :Ağ -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Trenler için yol bulucu: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Trenler için kullanılacak "yol bulucu" algoritma -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Karayolu taşıtları için yol bulucu: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Karayolu araçları için kullanılacak "yol bulucu" algoritma -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Gemiler için yol bulucu: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Gemiler için kullanılacak "yol bulucu" algoritma STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :İşaretlerde otomatik geri çevirme: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Tren sinyalde uzun süre beklediği takdirde ters yöne gitmesine izin ver -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Önerilen) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Ayar değerini değiştir @@ -2786,7 +2777,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Tren gar # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Yerimi -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Yerimi türü seç # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Tren istasyonu Seçimi @@ -2799,8 +2789,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Tren ist STR_STATION_BUILD_DRAG_DROP :{BLACK}Sürükle Bırak STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Sürükle bırak tekniğiyle istasyon kur -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Görüntülenecek istasyon türünü seçin -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Yapılacak istasyon türünü seçin + STR_STATION_CLASS_DFLT :Varsayılan STR_STATION_CLASS_DFLT_STATION :Varsayılan istasyon @@ -2943,8 +2932,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Gelecekt # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Nesne Seçimi -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Yapılacak nesneyi seçin.Ctrl + Sol Tık'a basılı tutarak sürüklerseniz çapraz olarak seçersiniz. Ayrıca Shift tuşuna basılı tutarsanız sadece maliyetini görüntülersiniz. -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}İnşa edilecek nesnenin sınıfını seçin STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Nesnenin önizlemesi STR_OBJECT_BUILD_SIZE :{BLACK}Boyut: {GOLD}{NUM} x {NUM} kare diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 89d06a40f4..e54ac9bd0a 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -249,7 +249,7 @@ STR_QUANTITY_TOFFEE :{WEIGHT_LONG} STR_QUANTITY_BATTERIES :{COMMA} батарей{P ка ки ок} STR_QUANTITY_PLASTIC :{VOLUME_LONG} пластику STR_QUANTITY_FIZZY_DRINKS :{COMMA} пляш{P ка ки ок} газованої води -STR_QUANTITY_N_A :немає +STR_QUANTITY_N_A :Відсутня # Two letter abbreviation of cargo name STR_ABBREV_NOTHING : @@ -2260,17 +2260,8 @@ STR_CONFIG_SETTING_AI :Конкуре STR_CONFIG_SETTING_AI_NPC :Віртуальні гравці STR_CONFIG_SETTING_NETWORK :Мережа -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Алгоритм пошуку шляху для поїздів: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Вибір алгоритма пошуку шляху для залізничного транспорту. -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Алгоритм пошуку шляху для автомобілів: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Вибір алгоритма пошуку шляху для дорожнього транспорту. -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Алгоритм пошуку шляху для кораблів: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Вибір алгоритма пошуку шляху для водного транспорту. STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Автоматично розвертатися біля сигналів: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Дозволяє поїздам розвертатися на сигналах, котрі не вдається проїхати впродовж довгого часу. -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(рекомендовано) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Змініть значення @@ -2926,7 +2917,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Вибі # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Точка маршруту -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Виберіть тип точки маршруту # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Вибір станції @@ -2939,8 +2929,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Вибе STR_STATION_BUILD_DRAG_DROP :{BLACK}Довільно STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Будувати станцію за методом "перетягнути й відпустити" -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Виберіть тип станції для відображення -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Виберіть тип станції для забудови + STR_STATION_CLASS_DFLT :Звичайна STR_STATION_CLASS_DFLT_STATION :Звичайна станція @@ -3083,8 +3072,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Купи # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Вибір об'єкта -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Обрання об'єкту для побудови. Ctrl+клац+протягування для виділення діагональної ділянки. Утримуйте Shift для показу очікуваних витрат -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Вибрати тип об'єкту для будівництва STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Попередній перегляд об'єкта STR_OBJECT_BUILD_SIZE :{BLACK}Розмір: {GOLD}{NUM} x {NUM} клітинок diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index bfd321ce8a..3d0dcc7c71 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -1471,13 +1471,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :صنعتیں STR_CONFIG_SETTING_AI :مد مقابل STR_CONFIG_SETTING_AI_NPC :کمپیوٹر کے کھلاڑی -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :ریل گاڑیوں کے لئے راستہ ڈھونڈنے والا: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :گاڑیوں کا راستہ تلاش کرنے والا: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :بحری جہازوں کا راستہ تلاش کرنے والا: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :اشاروں پر خودکار ریورس ہونا: {STRING} -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recommended) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}سیٹنگ کی ولیو بدلیں @@ -1973,7 +1967,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}ریلو # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}گزرگاہ -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}گزرگاہ کی طرز منتخب کریں # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}ریلوے اسٹیشن منتخب کریں @@ -1986,8 +1979,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}ریلو STR_STATION_BUILD_DRAG_DROP :{BLACK}کھینچ کر رکھ دیں STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}کھینچ کر رکھ کر اسٹیشن تعمیر کریں -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}دکھانے کے لئے ریلوے اسٹیشن کی قسم کا انتخاب کریں -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}تعمیر کے لئے اسٹیشن کی طرز منتخب کریں + STR_STATION_CLASS_DFLT :طے شدہ اسٹیشن STR_STATION_CLASS_WAYP :گزرگاہیں @@ -2104,8 +2096,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}مستق # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}چیز کا انتخاب -STR_OBJECT_BUILD_TOOLTIP :{BLACK}تعمیرکرنے کے لئے چیز منتخب کریں۔ Shift تعمیر/اندازاّ خرچے میں تدویم کرتا ہے۔ -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}تعمیر کرنے کے لئے چیز کی قسم کا انتخاب کریں STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}چیز کا جائزہ STR_OBJECT_BUILD_SIZE :{BLACK}سائز: {GOLD}{NUM} x {NUM} ٹائلیں diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index a5fb6fd027..0119ce112f 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -2123,17 +2123,8 @@ STR_CONFIG_SETTING_AI :Đối Thủ STR_CONFIG_SETTING_AI_NPC :Nhân vật máy STR_CONFIG_SETTING_NETWORK :Kết nối -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Cơ chế tìm đường cho tàu hoả: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Cơ chế tìm đường cho tàu hỏa -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Cơ chế tìm đường cho xe ôtô: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Cơ chế tìm đường cho xe ôtô -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Cơ chế tìm đường cho tàu thủy: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Cơ chế tìm đường dùng cho tàu thủy STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Tự động đổi chiều chạy tại đèn hiệu: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Cho phép xe lửa vòng lại nơi đèn báo, khi nó chờ quá lâu -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Nên dùng) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Thay đổi giá trị @@ -2786,7 +2777,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Chọn h # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Điểm mốc -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Chọn kiểu điểm mốc # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Chọn Ga Tàu Hỏa @@ -2799,8 +2789,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Độ d STR_STATION_BUILD_DRAG_DROP :{BLACK}Kéo & thả STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Xây dựng ga bằng các kéo & thả -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Chọn loại ga để hiển thị -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Chọn loại ga để xây dựng + STR_STATION_CLASS_DFLT :Mặc định STR_STATION_CLASS_DFLT_STATION :Trạm mặc định @@ -2943,8 +2932,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Mua đ # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Trình Chọn Đối Tượng -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Chọn đối tượng để xây. Ctrl + Click + kéo để chọn khu vực theo đường chéo. Shift để xem chi phí dự tính -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Chọn lớp đối tượng để xây dựng STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Xem trước đối tượng STR_OBJECT_BUILD_SIZE :{BLACK}Kích thước: {GOLD}{NUM} x {NUM} ô diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 166fdfd253..167d33b58d 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -2128,17 +2128,8 @@ STR_CONFIG_SETTING_AI :Cystadleuwyr STR_CONFIG_SETTING_AI_NPC :Chwaraewyr Cyfrifiadurol STR_CONFIG_SETTING_NETWORK :Rhwydwaith -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Llwybrwr ar gyfer trenau: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Llwybrwr i'w ddefnyddio ar gyfer trenau -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Llwybrwr ar gyfer cerbydau ffordd: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Llwybrwr i'w ddefnyddio ar gyfer cerbydau ffordd -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Llwybrwr ar gyfer llongau: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Llwybrwr i'w ddefnyddio ar gyfer llongau STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Troi'n ôl yn awtomatig wrth signalau: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Caniatáu i drenau gwrthdroi wrth signal, os ydynt wedi aros yno am beth amser -###length 2 -STR_CONFIG_SETTING_PATHFINDER_NPF :NPF -STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Argymellir) STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Newid gwerth gosodiad @@ -2791,7 +2782,6 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Dewiswch # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Pwynt Llwybro -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Dewis math o bwynt llwybro # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Dewiswch Orsaf Reilffordd @@ -2804,8 +2794,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Dewiswch STR_STATION_BUILD_DRAG_DROP :{BLACK}Llusgo a Gollwng STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Adeiladu gorsaf gan ddefnyddio llusgo a gollwng -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Dewiswch y dosbarth o orsaf i'w dangos -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Dewiswch y math o orsaf i'w hadeiladu + STR_STATION_CLASS_DFLT :Rhagosodiad STR_STATION_CLASS_DFLT_STATION :Gorsaf rhagosodedig @@ -2948,8 +2937,6 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Prynu ti # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Dewis Gwrthrych -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Dewisiwch wrthrych i'w hadeiladu. Ctrl+Clic+Llusgo i dewis yr ardal yn ddeiagonal. Pwyso Shift hefyd i ddangos amcangyfrif o'r gost yn unig -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Dewisiwch dosbarth y gwrthrych i'w hadeiladu STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Rhagolwg o'r gwrthrych STR_OBJECT_BUILD_SIZE :{BLACK}Maint: {GOLD}{NUM} x {NUM} teil From d78f39a9df2cb42a519ef8a5077beb116e208a98 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 11 May 2024 14:50:34 +0100 Subject: [PATCH 517/695] Cleanup: Remove GetUnitsPerEM and units_per_em. (#12656) GetUnitsPerEM is never called. --- src/fontcache.cpp | 3 +-- src/fontcache.h | 7 ------- src/fontcache/freetypefontcache.cpp | 1 - src/os/macosx/font_osx.cpp | 1 - src/os/windows/font_win32.cpp | 1 - 5 files changed, 1 insertion(+), 12 deletions(-) diff --git a/src/fontcache.cpp b/src/fontcache.cpp index 1f01e9b327..80defbd24b 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -33,8 +33,7 @@ FontCacheSettings _fcsettings; * @param fs The size of the font. */ FontCache::FontCache(FontSize fs) : parent(FontCache::Get(fs)), fs(fs), height(_default_font_height[fs]), - ascender(_default_font_ascender[fs]), descender(_default_font_ascender[fs] - _default_font_height[fs]), - units_per_em(1) + ascender(_default_font_ascender[fs]), descender(_default_font_ascender[fs] - _default_font_height[fs]) { assert(this->parent == nullptr || this->fs == this->parent->fs); FontCache::caches[this->fs] = this; diff --git a/src/fontcache.h b/src/fontcache.h index fee0e26f3e..648fe4caa4 100644 --- a/src/fontcache.h +++ b/src/fontcache.h @@ -26,7 +26,6 @@ protected: int height; ///< The height of the font. int ascender; ///< The ascender value of the font. int descender; ///< The descender value of the font. - int units_per_em; ///< The units per EM value of the font. public: FontCache(FontSize fs); @@ -60,12 +59,6 @@ public: */ inline int GetDescender() const{ return this->descender; } - /** - * Get the units per EM value of the font. - * @return The units per EM value of the font. - */ - inline int GetUnitsPerEM() const { return this->units_per_em; } - /** * Get the nominal font size of the font. * @return The nominal font size. diff --git a/src/fontcache/freetypefontcache.cpp b/src/fontcache/freetypefontcache.cpp index 00d45a251a..72dae34111 100644 --- a/src/fontcache/freetypefontcache.cpp +++ b/src/fontcache/freetypefontcache.cpp @@ -105,7 +105,6 @@ void FreeTypeFontCache::SetFontSize(FontSize, FT_Face, int pixels) } if (err == FT_Err_Ok) { - this->units_per_em = this->face->units_per_EM; this->ascender = this->face->size->metrics.ascender >> 6; this->descender = this->face->size->metrics.descender >> 6; this->height = this->ascender - this->descender; diff --git a/src/os/macosx/font_osx.cpp b/src/os/macosx/font_osx.cpp index 6339f7f64e..7cb557fed3 100644 --- a/src/os/macosx/font_osx.cpp +++ b/src/os/macosx/font_osx.cpp @@ -166,7 +166,6 @@ void CoreTextFontCache::SetFontSize(int pixels) /* Query the font metrics we needed. We generally round all values up to * make sure we don't inadvertently cut off a row or column of pixels, * except when determining glyph to glyph advances. */ - this->units_per_em = CTFontGetUnitsPerEm(this->font.get()); this->ascender = (int)std::ceil(CTFontGetAscent(this->font.get())); this->descender = -(int)std::ceil(CTFontGetDescent(this->font.get())); this->height = this->ascender - this->descender; diff --git a/src/os/windows/font_win32.cpp b/src/os/windows/font_win32.cpp index a1293b3e47..767dfb83ab 100644 --- a/src/os/windows/font_win32.cpp +++ b/src/os/windows/font_win32.cpp @@ -168,7 +168,6 @@ void Win32FontCache::SetFontSize(int pixels) POUTLINETEXTMETRIC otm = (POUTLINETEXTMETRIC)new BYTE[otmSize]; GetOutlineTextMetrics(this->dc, otmSize, otm); - this->units_per_em = otm->otmEMSquare; this->ascender = otm->otmTextMetrics.tmAscent; this->descender = otm->otmTextMetrics.tmDescent; this->height = this->ascender + this->descender; From 34da94ffc8e3b4faa1e455151abeb7bf1dfa311b Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 11 May 2024 20:51:44 +0100 Subject: [PATCH 518/695] Fix: Use widget resize step instead of window resize step. (#12659) Build Picker class list filter could be drawn incorrectly depending on how the window can be resized. --- src/picker_gui.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/picker_gui.cpp b/src/picker_gui.cpp index f1fd6f661b..4cb2f16c55 100644 --- a/src/picker_gui.cpp +++ b/src/picker_gui.cpp @@ -275,10 +275,11 @@ void PickerWindow::DrawWidget(const Rect &r, WidgetID widget) const Rect ir = r.Shrink(WidgetDimensions::scaled.matrix); const int selected = this->callbacks.GetSelectedClass(); const auto vscroll = this->GetScrollbar(WID_PW_CLASS_SCROLL); + const int y_step = this->GetWidget(widget)->resize_y; auto [first, last] = vscroll->GetVisibleRangeIterators(this->classes); for (auto it = first; it != last; ++it) { DrawString(ir, this->callbacks.GetClassName(*it), *it == selected ? TC_WHITE : TC_BLACK); - ir.top += this->resize.step_height; + ir.top += y_step; } break; } From 95a89e43b2a9e4d0027524a02bdd2ae83203b263 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 12 May 2024 04:41:31 +0000 Subject: [PATCH 519/695] Update: Translations from eints english (au): 16 changes by krysclarke chinese (simplified): 16 changes by XiaoJi-Game korean: 19 changes by telk5093 russian: 1 change by Ln-Wolf finnish: 16 changes by hpiirai lithuanian: 1 change by khamper portuguese: 17 changes by azulcosta portuguese (brazilian): 16 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 16 ++++++++++++++++ src/lang/english_AU.txt | 16 ++++++++++++++++ src/lang/finnish.txt | 16 ++++++++++++++++ src/lang/korean.txt | 22 +++++++++++++++++++--- src/lang/lithuanian.txt | 1 + src/lang/portuguese.txt | 18 +++++++++++++++++- src/lang/russian.txt | 1 + src/lang/simplified_chinese.txt | 16 ++++++++++++++++ 8 files changed, 102 insertions(+), 4 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 5dee827e29..5d3d802f47 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -2798,7 +2798,23 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Escolher STR_STATION_BUILD_DRAG_DROP :{BLACK}Arrastar & Soltar STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construir estação usando arrastar e soltar +STR_PICKER_MODE_ALL :Todos +STR_PICKER_MODE_ALL_TOOLTIP :Mostrar itens de todas as classes +STR_PICKER_MODE_USED :Usado +STR_PICKER_MODE_USED_TOOLTIP :Mostrar somente itens existentes +STR_PICKER_MODE_SAVED :Salvo +STR_PICKER_MODE_SAVED_TOOLTIP :Mostrar somente itens salvos +STR_PICKER_STATION_CLASS_TOOLTIP :Selecione uma classe de estação para mostrar +STR_PICKER_STATION_TYPE_TOOLTIP :Escolher um tipo de estação para construir. Ctrl+Clique para adicionar ou remover nos itens salvos +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Selecione uma classe de ponto de controle para mostrar +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Escolher um ponto de controle para construir. Ctrl+Clique para adicionar ou remover nos itens salvos +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Selecione uma classe de estação de ônibus para mostrar +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Escolher um tipo de estação de ônibus para construir. Ctrl+Clique para adicionar ou remover nos itens salvos +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Selecione uma classe de estação de caminhão para mostrar +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Escolher um tipo de estação de caminhão para construir. Ctrl+Clique para adicionar ou remover nos itens salvos +STR_PICKER_OBJECT_CLASS_TOOLTIP :Selecione uma classe de objeto para mostrar +STR_PICKER_OBJECT_TYPE_TOOLTIP :Escolher um tipo de objeto para construir. Ctrl+Clique para adicionar ou remover nos itens salvos. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para só mostrar o custo estimado STR_STATION_CLASS_DFLT :Padrão STR_STATION_CLASS_DFLT_STATION :Estação padrão diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 97ce636492..602e1d32af 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -2797,7 +2797,23 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Select l STR_STATION_BUILD_DRAG_DROP :{BLACK}Drag & Drop STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Build a station using drag & drop +STR_PICKER_MODE_ALL :All +STR_PICKER_MODE_ALL_TOOLTIP :Toggle showing items from all classes +STR_PICKER_MODE_USED :Used +STR_PICKER_MODE_USED_TOOLTIP :Toggle showing only existing items +STR_PICKER_MODE_SAVED :Saved +STR_PICKER_MODE_SAVED_TOOLTIP :Toogle showing only saved items +STR_PICKER_STATION_CLASS_TOOLTIP :Select a station class to display +STR_PICKER_STATION_TYPE_TOOLTIP :Select a station type to build. Ctrl+Click to add or remove in saved items +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Select a waypoint class to display +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Select a waypoint to build. Ctrl+Click to add or remove in saved items +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Select a bus station class to display +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Select a bus station type to build. Ctrl+Click to add or remove in saved items +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Select a lorry station class to display +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Select a lorry station type to build. Ctrl+Click to add or remove in saved items +STR_PICKER_OBJECT_CLASS_TOOLTIP :Select an object class to display +STR_PICKER_OBJECT_TYPE_TOOLTIP :Select an object type to build. Ctrl+Click to add or remove in saved items. Ctrl+Click+Drag to select the area diagonally. Also press Shift to show cost estimate only STR_STATION_CLASS_DFLT :Default STR_STATION_CLASS_DFLT_STATION :Default station diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index ad1a84fff0..7372a98e50 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -2797,7 +2797,23 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Valitse STR_STATION_BUILD_DRAG_DROP :{BLACK}Vedä ja pudota STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Rakenna asema vetämällä ja pudottamalla +STR_PICKER_MODE_ALL :Kaikki +STR_PICKER_MODE_ALL_TOOLTIP :Valitse, näytetäänkö kohteet kaikista luokista +STR_PICKER_MODE_USED :Käytössä +STR_PICKER_MODE_USED_TOOLTIP :Valitse, näytetäänkö vain olemassa olevat kohteet +STR_PICKER_MODE_SAVED :Tallennettu +STR_PICKER_MODE_SAVED_TOOLTIP :Valitse, näytetäänkö vain tallennetut kohteet +STR_PICKER_STATION_CLASS_TOOLTIP :Valitse näytettävä asemien luokka +STR_PICKER_STATION_TYPE_TOOLTIP :Valitse rakennettavan aseman tyyppi. Ctrl+napsautus lisää tallennettuihin tai poistaa tallennetuista +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Valitse näytettävä reittipisteiden luokka +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Valitse rakennettava reittipiste. Ctrl+napsautus lisää tallennettuihin tai poistaa tallennetuista +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Valitse näytettävä linja-autopysäkkien luokka +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Valitse rakennettavan linja-autopysäkin tyyppi. Ctrl+napsautus lisää tallennettuihin tai poistaa tallennetuista +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Valitse näytettävä lastauslaitureiden luokka +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Valitse rakennettavan lastauslaiturin tyyppi. Ctrl+napsautus lisää tallennettuihin tai poistaa tallennetuista +STR_PICKER_OBJECT_CLASS_TOOLTIP :Valitse näytettävä objektien luokka +STR_PICKER_OBJECT_TYPE_TOOLTIP :Valitse rakennettavan objektin tyyppi. Ctrl+napsautus lisää tallennettuihin tai poistaa tallennetuista. Ctrl+napsautus+veto valitsee alueen vinottain. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion STR_STATION_CLASS_DFLT :Oletus STR_STATION_CLASS_DFLT_STATION :Oletusasema diff --git a/src/lang/korean.txt b/src/lang/korean.txt index a1f8442e22..5f88868c3c 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -426,7 +426,7 @@ STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}도로 STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}전차 기반 시설을 건설합니다 STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}나무를 심습니다. CTRL+클릭+드래그하면 대각선 방향의 영역을 선택할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}팻말을 답니다. -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}오브젝트를 설치합니다. CTRL 키를 누르면 대각선 방향의 영역을 선택할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}오브젝트를 설치합니다. CTRL+클릭+드래그하면 대각선 방향의 영역을 선택할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 # Scenario editor file menu ###length 7 @@ -2798,7 +2798,23 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}철도 STR_STATION_BUILD_DRAG_DROP :{BLACK}드래그 & 드롭 STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}드래그 & 드롭으로 역을 건설합니다 +STR_PICKER_MODE_ALL :전체 +STR_PICKER_MODE_ALL_TOOLTIP :모든 종류의 항목 표시 전환 +STR_PICKER_MODE_USED :사용한 것 +STR_PICKER_MODE_USED_TOOLTIP :존재하는 항목만 표시 전환 +STR_PICKER_MODE_SAVED :즐겨찾기 +STR_PICKER_MODE_SAVED_TOOLTIP :즐겨찾기된 항목만 표시 전환 +STR_PICKER_STATION_CLASS_TOOLTIP :표시할 역 종류를 선택하세요 +STR_PICKER_STATION_TYPE_TOOLTIP :설치하려는 역 종류를 선택하세요. CTRL+클릭하면 즐겨찾기 추가/제거가 가능합니다 +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :표시할 경유지 종류를 선택하세요 +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :설치하려는 경유지를 선택하세요. CTRL+클릭하면 즐겨찾기 추가/제거가 가능합니다 +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :표시할 버스 정류장 종류를 선택하세요 +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :설치하려는 버스 정류장 종류를 선택하세요. CTRL+클릭하면 즐겨찾기 추가/제거가 가능합니다 +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :표시할 트럭 적하장 종류를 선택하세요 +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :설치하려는 트럭 적하장 종류를 선택하세요. CTRL+클릭하면 즐겨찾기 추가/제거가 가능합니다 +STR_PICKER_OBJECT_CLASS_TOOLTIP :표시할 오브젝트 종류를 선택하세요 +STR_PICKER_OBJECT_TYPE_TOOLTIP :설치하려는 오브젝트 종류를 선택합니다. CTRL+클릭+드래그하면 대각선 방향의 영역을 선택할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 STR_STATION_CLASS_DFLT :기본 STR_STATION_CLASS_DFLT_STATION :기본 역 @@ -2934,7 +2950,7 @@ STR_STATION_BUILD_NOISE :{BLACK}발생 # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}지형 편집 -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}땅의 모퉁이를 낮춥니다. 드래그하면 시작점의 땅을 낮추고 선택한 영역의 도착점까지 지형을 적절히 맞춥니다. CTRL 키를 누르면 대각선 방향의 영역을 선택할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}땅의 모퉁이를 낮춥니다. 드래그하면 시작점의 땅을 낮추고 선택한 영역의 도착점까지 지형을 적절히 맞춥니다. CTRL+클릭+드래그하면 대각선 방향의 영역을 선택할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}땅의 모퉁이를 높입니다. 드래그하면 시작점의 땅을 높이고 선택한 영역의 도착점까지 지형을 적절히 맞춥니다. CTRL+클릭+드래그하면 대각선 방향의 영역을 선택할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}처음 선택한 모퉁이의 고도에 맞추어 땅을 평평하게 고릅니다. CTRL+클릭+드래그하면 대각선 방향의 영역을 선택할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}나중에 그 땅을 사용하기 위해 소유권을 구입합니다. CTRL+클릭+드래그하면 대각선 방향의 영역을 선택할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 @@ -2951,7 +2967,7 @@ STR_OBJECT_CLASS_TRNS :송신기 STR_PLANT_TREE_CAPTION :{WHITE}나무 STR_PLANT_TREE_TOOLTIP :{BLACK}심고싶은 나무의 종류를 선택합니다. 이미 나무가 심어져있는 경우에는 선택한 나무의 크기를 키웁니다 STR_TREES_RANDOM_TYPE :{BLACK}여러 종류의 나무 같이 심기 -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}여러 종류의 나무를 심습니다. CTRL+클릭+드래그하면 대각선 방향의 영역을 선택할 수 있습니다. SHIFT 키를 이용하면 예상 비용을 볼 수 있습니다 +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}여러 종류의 나무를 심습니다. CTRL+클릭+드래그하면 대각선 방향의 영역을 선택할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 STR_TREES_RANDOM_TREES_BUTTON :{BLACK}무작위로 나무 심기 STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}전 지역에 걸쳐 무작위로 나무를 심습니다 STR_TREES_MODE_NORMAL_BUTTON :{BLACK}일반 diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 6f9e45b8ac..12f40f69b9 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1986,6 +1986,7 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Numatytoji nauj STR_CONFIG_SETTING_SERVINT_SHIPS :Laivų techninės apžiūros intervalas: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Numatytoji naujo laivo techninės apžiūros intervalo reikšmė ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Išjungta diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 9e6cfb57c4..4ba0ae0f46 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -426,7 +426,7 @@ STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Construi STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construir infraestrutura para elétricos STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árvores. Ctrl+Clique+Arrastar para selecionar a área na diagonal. Pressione também Shift para apenas mostrar o custo estimado STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Colocar letreiros -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objeto. Ctrl+Clique+Arrastar para selecionar a área diagonalmente. Pressione também Shift para mostrar o custo estimado +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objeto. Ctrl+Clique+Arrastar para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado # Scenario editor file menu ###length 7 @@ -2798,7 +2798,23 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Seleccio STR_STATION_BUILD_DRAG_DROP :{BLACK}Arrastar STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construir estação arrastando +STR_PICKER_MODE_ALL :Todos +STR_PICKER_MODE_ALL_TOOLTIP :Alterna a exibição de itens de todas as classes +STR_PICKER_MODE_USED :Usado +STR_PICKER_MODE_USED_TOOLTIP :Alterna a exibição só de itens existentes +STR_PICKER_MODE_SAVED :Guardado +STR_PICKER_MODE_SAVED_TOOLTIP :Alterna a exibição só de itens guardados +STR_PICKER_STATION_CLASS_TOOLTIP :Selecionar uma classe de estação para mostrar +STR_PICKER_STATION_TYPE_TOOLTIP :Escolher um tipo de estação para construir. Ctrl+Clique para adicionar ou remover nos itens guardados +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Selecionar uma classe de ponto de controlo para mostrar +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Escolher um tipo de ponto de controlo para construir. Ctrl+Clique para adicionar ou remover nos itens guardados +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Selecionar uma classe de estação rodoviária para mostrar +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Escolher um tipo de estação rodoviária para construir. Ctrl+Clique para adicionar ou remover nos itens guardados +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Selecionar uma classe de estação de camiões para mostrar +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Escolher um tipo de estação de camiões para construir. Ctrl+Clique para adicionar ou remover nos itens guardados +STR_PICKER_OBJECT_CLASS_TOOLTIP :Selecionar uma classe de objeto para mostrar +STR_PICKER_OBJECT_TYPE_TOOLTIP :Selecione um tipo de objeto para construir. Ctrl+Clique para adicionar ou remover nos itens guardados. Ctrl+Clique+Arrastar para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado STR_STATION_CLASS_DFLT :Padrão STR_STATION_CLASS_DFLT_STATION :Estação padrão diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 560effeca9..4d73d31610 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2968,6 +2968,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Укаж STR_STATION_BUILD_DRAG_DROP :{BLACK}Произвольно STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Постройка станции на указанном игроком участке +STR_PICKER_MODE_USED :Используется STR_STATION_CLASS_DFLT :Стандартная станция diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 7a1f5c7b1a..79efe3bd8a 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -2797,7 +2797,23 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}选择 STR_STATION_BUILD_DRAG_DROP :{BLACK}拖动模式 STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}使用拖动模式建设车站 +STR_PICKER_MODE_ALL :全部 +STR_PICKER_MODE_ALL_TOOLTIP :切换为显示所有类别中的项目 +STR_PICKER_MODE_USED :已使用 +STR_PICKER_MODE_USED_TOOLTIP :切换为仅显示现有的项目 +STR_PICKER_MODE_SAVED :已保存 +STR_PICKER_MODE_SAVED_TOOLTIP :切换为仅显示已保存的项目 +STR_PICKER_STATION_CLASS_TOOLTIP :选择一个要显示的车站类型 +STR_PICKER_STATION_TYPE_TOOLTIP :选择要建造的车站类型。按住键以添加或删除已保存的项目。 +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :选择一个要显示的路点类型 +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :选择要建造的路点类型。按住键以添加或删除已保存的项目。 +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :选择一个要显示的公共汽车站类型 +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :选择要建造的公共汽车站类型。按住键以添加或删除已保存的项目。 +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :选择一个要显示的汽车货场类型 +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :选择要建造的汽车货场类型。按住键以添加或删除已保存的项目。 +STR_PICKER_OBJECT_CLASS_TOOLTIP :选择一个要显示的物件类型 +STR_PICKER_OBJECT_TYPE_TOOLTIP :选择要建造的物件类型。按住键选择物件以添加或删除已保存的项目。按住 键以沿对角线放置,按住 键以显示预计费用。 STR_STATION_CLASS_DFLT :默认 STR_STATION_CLASS_DFLT_STATION :默认车站 From f939e81bf0aef5bdb1cf825536418f17e81b85a3 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 11 May 2024 21:39:14 +0200 Subject: [PATCH 520/695] Fix #12655, 4f6d75f: inconsistent state in client list and potential crash after client leaves --- src/network/network_server.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 099479c158..0db16a5660 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -216,6 +216,8 @@ ServerNetworkGameSocketHandler::~ServerNetworkGameSocketHandler() this->savegame->Destroy(); this->savegame = nullptr; } + + InvalidateWindowData(WC_CLIENT_LIST, 0); } std::unique_ptr ServerNetworkGameSocketHandler::ReceivePacket() @@ -279,8 +281,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::CloseConnection(NetworkRecvSta this->DeferDeletion(); - InvalidateWindowData(WC_CLIENT_LIST, 0); - return status; } From 77a7113ba6e8a69eddcd2220a57c1808a9d08f8a Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 12 May 2024 08:39:40 +0100 Subject: [PATCH 521/695] Cleanup: Remove unused parameters from FreeTypeFontCache::SetFontSize. (#12663) --- src/fontcache/freetypefontcache.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/fontcache/freetypefontcache.cpp b/src/fontcache/freetypefontcache.cpp index 72dae34111..a16e76b055 100644 --- a/src/fontcache/freetypefontcache.cpp +++ b/src/fontcache/freetypefontcache.cpp @@ -33,7 +33,7 @@ class FreeTypeFontCache : public TrueTypeFontCache { private: FT_Face face; ///< The font face associated with this font. - void SetFontSize(FontSize fs, FT_Face face, int pixels); + void SetFontSize(int pixels); const void *InternalGetFontTable(uint32_t tag, size_t &length) override; const Sprite *InternalGetGlyph(GlyphID key, bool aa) override; @@ -60,10 +60,10 @@ FreeTypeFontCache::FreeTypeFontCache(FontSize fs, FT_Face face, int pixels) : Tr { assert(face != nullptr); - this->SetFontSize(fs, face, pixels); + this->SetFontSize(pixels); } -void FreeTypeFontCache::SetFontSize(FontSize, FT_Face, int pixels) +void FreeTypeFontCache::SetFontSize(int pixels) { if (pixels == 0) { /* Try to determine a good height based on the minimal height recommended by the font. */ @@ -245,7 +245,7 @@ FreeTypeFontCache::~FreeTypeFontCache() void FreeTypeFontCache::ClearFontCache() { /* Font scaling might have changed, determine font size anew if it was automatically selected. */ - if (this->face != nullptr) this->SetFontSize(this->fs, this->face, this->req_size); + if (this->face != nullptr) this->SetFontSize(this->req_size); this->TrueTypeFontCache::ClearFontCache(); } From 83492030384d8cb21a2bb0f72edb9a177a5864db Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 12 May 2024 08:58:22 +0200 Subject: [PATCH 522/695] Cleanup: remove unused Aystar variables --- src/pathfinder/aystar.cpp | 5 ----- src/pathfinder/aystar.h | 4 +--- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/pathfinder/aystar.cpp b/src/pathfinder/aystar.cpp index 31cdd13de1..5246731300 100644 --- a/src/pathfinder/aystar.cpp +++ b/src/pathfinder/aystar.cpp @@ -130,17 +130,12 @@ void AyStar::CheckTile(AyStarNode *current, OpenListNode *parent) /* Check if this item is already in the OpenList */ check = this->OpenListIsInList(current); if (check != nullptr) { - uint i; /* Yes, check if this g value is lower.. */ if (new_g > check->g) return; this->openlist_queue.Delete(check, 0); /* It is lower, so change it to this item */ check->g = new_g; check->path.parent = closedlist_parent; - /* Copy user data, will probably have changed */ - for (i = 0; i < lengthof(current->user_data); i++) { - check->path.node.user_data[i] = current->user_data[i]; - } /* Re-add it in the openlist_queue. */ this->openlist_queue.Push(check, new_f); } else { diff --git a/src/pathfinder/aystar.h b/src/pathfinder/aystar.h index 98d4c17d14..c157259a3e 100644 --- a/src/pathfinder/aystar.h +++ b/src/pathfinder/aystar.h @@ -38,7 +38,6 @@ static const int AYSTAR_INVALID_NODE = -1; ///< Item is not valid (for example, struct AyStarNode { TileIndex tile; Trackdir direction; - uint user_data[2]; }; /** A path of nodes. */ @@ -115,7 +114,7 @@ typedef void AyStar_FoundEndNode(AyStar *aystar, OpenListNode *current); */ struct AyStar { /* These fields should be filled before initing the AyStar, but not changed - * afterwards (except for user_data and user_path)! (free and init again to change them) */ + * afterwards (except for user_data)! (free and init again to change them) */ /* These should point to the application specific routines that do the * actual work */ @@ -131,7 +130,6 @@ struct AyStar { * afterwards, user_target should typically contain information about * what you where looking for, and user_data can contain just about * everything */ - void *user_path; void *user_target; void *user_data; From 6cea49c117656a2f47d5e8a1ee57571ad8ae034e Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 12 May 2024 09:45:39 +0200 Subject: [PATCH 523/695] Codechange: replace uint with size_t in binary heap --- src/misc/binaryheap.hpp | 30 +++++++++++++++--------------- src/pathfinder/yapf/nodelist.hpp | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/misc/binaryheap.hpp b/src/misc/binaryheap.hpp index 067ad1f291..d3dfdfdefa 100644 --- a/src/misc/binaryheap.hpp +++ b/src/misc/binaryheap.hpp @@ -50,8 +50,8 @@ template class CBinaryHeapT { private: - uint items; ///< Number of items in the heap - uint capacity; ///< Maximum number of items the heap can hold + size_t items; ///< Number of items in the heap + size_t capacity; ///< Maximum number of items the heap can hold T **data; ///< The pointer to the heap item pointers public: @@ -59,7 +59,7 @@ public: * Create a binary heap. * @param max_items The limit of the heap */ - explicit CBinaryHeapT(uint max_items) + explicit CBinaryHeapT(size_t max_items) : items(0) , capacity(max_items) { @@ -83,12 +83,12 @@ protected: * @param item The proposed item for filling the gap * @return The (gap)position where the item fits */ - inline uint HeapifyDown(uint gap, T *item) + inline size_t HeapifyDown(size_t gap, T *item) { assert(gap != 0); /* The first child of the gap is at [parent * 2] */ - uint child = gap * 2; + size_t child = gap * 2; /* while children are valid */ while (child <= this->items) { @@ -119,11 +119,11 @@ protected: * @param item The proposed item for filling the gap * @return The (gap)position where the item fits */ - inline uint HeapifyUp(uint gap, T *item) + inline size_t HeapifyUp(size_t gap, T *item) { assert(gap != 0); - uint parent; + size_t parent; while (gap > 1) { /* compare [gap] with its parent */ @@ -142,8 +142,8 @@ protected: /** Verify the heap consistency */ inline void CheckConsistency() { - for (uint child = 2; child <= this->items; child++) { - uint parent = child / 2; + for (size_t child = 2; child <= this->items; child++) { + size_t parent = child / 2; assert(!(*this->data[child] < *this->data[parent])); } } @@ -155,7 +155,7 @@ public: * * @return The number of items in the queue */ - inline uint Length() const + inline size_t Length() const { return this->items; } @@ -218,7 +218,7 @@ public: } /* Make place for new item. A gap is now at the end of the tree. */ - uint gap = this->HeapifyUp(++items, new_item); + size_t gap = this->HeapifyUp(++items, new_item); this->data[gap] = new_item; CHECK_CONSISTY(); } @@ -238,7 +238,7 @@ public: this->items--; /* at index 1 we have a gap now */ T *last = this->End(); - uint gap = this->HeapifyDown(1, last); + size_t gap = this->HeapifyDown(1, last); /* move last item to the proper place */ if (!this->IsEmpty()) this->data[gap] = last; @@ -251,7 +251,7 @@ public: * * @param index The position of the item in the heap */ - inline void Remove(uint index) + inline void Remove(size_t index) { if (index < this->items) { assert(index != 0); @@ -260,7 +260,7 @@ public: T *last = this->End(); /* Fix binary tree up and downwards */ - uint gap = this->HeapifyUp(index, last); + size_t gap = this->HeapifyUp(index, last); gap = this->HeapifyDown(gap, last); /* move last item to the proper place */ if (!this->IsEmpty()) this->data[gap] = last; @@ -279,7 +279,7 @@ public: * @param item The reference to the item * @return The index of the item or zero if not found */ - inline uint FindIndex(const T &item) const + inline size_t FindIndex(const T &item) const { if (this->IsEmpty()) return 0; for (T **ppI = this->data + 1, **ppLast = ppI + this->items; ppI <= ppLast; ppI++) { diff --git a/src/pathfinder/yapf/nodelist.hpp b/src/pathfinder/yapf/nodelist.hpp index 9aa30ee07f..09179075f4 100644 --- a/src/pathfinder/yapf/nodelist.hpp +++ b/src/pathfinder/yapf/nodelist.hpp @@ -118,7 +118,7 @@ public: inline Titem_ &PopOpenNode(const Key &key) { Titem_ &item = m_open.Pop(key); - uint idxPop = m_open_queue.FindIndex(item); + size_t idxPop = m_open_queue.FindIndex(item); m_open_queue.Remove(idxPop); return item; } From 77c188e6da1a8bcaa564982270bb071baf75c9d5 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 12 May 2024 09:47:14 +0200 Subject: [PATCH 524/695] Codechange: use std::vector instead of malloced array --- src/misc/binaryheap.hpp | 61 ++++++++++++++--------------------------- 1 file changed, 20 insertions(+), 41 deletions(-) diff --git a/src/misc/binaryheap.hpp b/src/misc/binaryheap.hpp index d3dfdfdefa..377d4d9548 100644 --- a/src/misc/binaryheap.hpp +++ b/src/misc/binaryheap.hpp @@ -10,8 +10,6 @@ #ifndef BINARYHEAP_HPP #define BINARYHEAP_HPP -#include "../core/alloc_func.hpp" - /** Enable it if you suspect binary heap doesn't work well */ #define BINARYHEAP_CHECK 0 @@ -27,7 +25,11 @@ * Binary Heap as C++ template. * A carrier which keeps its items automatically holds the smallest item at * the first position. The order of items is maintained by using a binary tree. - * The implementation is used for priority queue's. + * The implementation is used for priority queues. + * + * There are two major differences compared to std::priority_queue. First the + * std::priority_queue does not support indexing/removing elements in the + * middle of the heap/queue and second it has the biggest item first. * * @par Usage information: * Item of the binary heap should support the 'lower-than' operator '<'. @@ -50,27 +52,18 @@ template class CBinaryHeapT { private: - size_t items; ///< Number of items in the heap - size_t capacity; ///< Maximum number of items the heap can hold - T **data; ///< The pointer to the heap item pointers + size_t items = 0; ///< Number of valid items in the heap + std::vector data; ///< The pointer to the heap item pointers public: /** * Create a binary heap. - * @param max_items The limit of the heap + * @param initial_capacity The initial reserved capacity for the heap. */ - explicit CBinaryHeapT(size_t max_items) - : items(0) - , capacity(max_items) - { - this->data = MallocT(max_items + 1); - } - - ~CBinaryHeapT() + explicit CBinaryHeapT(size_t initial_capacity) { + this->data.reserve(initial_capacity); this->Clear(); - free(this->data); - this->data = nullptr; } protected: @@ -142,6 +135,7 @@ protected: /** Verify the heap consistency */ inline void CheckConsistency() { + assert(this->items == this->data.size() - 1); for (size_t child = 2; child <= this->items; child++) { size_t parent = child / 2; assert(!(*this->data[child] < *this->data[parent])); @@ -170,16 +164,6 @@ public: return this->items == 0; } - /** - * Test if the priority queue is full. - * - * @return True if full. - */ - inline bool IsFull() const - { - return this->items >= this->capacity; - } - /** * Get the smallest item in the binary tree. * @@ -210,14 +194,8 @@ public: */ inline void Include(T *new_item) { - if (this->IsFull()) { - assert(this->capacity < UINT_MAX / 2); - - this->capacity *= 2; - this->data = ReallocT(this->data, this->capacity + 1); - } - /* Make place for new item. A gap is now at the end of the tree. */ + this->data.emplace_back(); size_t gap = this->HeapifyUp(++items, new_item); this->data[gap] = new_item; CHECK_CONSISTY(); @@ -241,6 +219,7 @@ public: size_t gap = this->HeapifyDown(1, last); /* move last item to the proper place */ if (!this->IsEmpty()) this->data[gap] = last; + this->data.pop_back(); CHECK_CONSISTY(); return first; @@ -268,6 +247,8 @@ public: assert(index == this->items); this->items--; } + this->data.pop_back(); + CHECK_CONSISTY(); } @@ -281,13 +262,8 @@ public: */ inline size_t FindIndex(const T &item) const { - if (this->IsEmpty()) return 0; - for (T **ppI = this->data + 1, **ppLast = ppI + this->items; ppI <= ppLast; ppI++) { - if (*ppI == &item) { - return ppI - this->data; - } - } - return 0; + auto it = std::find(this->data.begin(), this->data.end(), &item); + return it == this->data.end() ? 0 : std::distance(this->data.begin(), it); } /** @@ -297,6 +273,9 @@ public: inline void Clear() { this->items = 0; + this->data.resize(1); + + CHECK_CONSISTY(); } }; From f2f7573c3fc9ab04ae2a2db4686a6e70a905eee0 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 12 May 2024 20:14:29 +0100 Subject: [PATCH 525/695] Fix #12668: Crash opening picker window with filter when no results available. (#12669) When first opening the picker window, we attempt to find a valid class and type to select. If the picker window was closed with filters enabled, there may not be anything list that is usable. Resolve this by using callbacks to find the first usable type when no types are listed. --- src/picker_gui.cpp | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/picker_gui.cpp b/src/picker_gui.cpp index 4cb2f16c55..ba221d22f4 100644 --- a/src/picker_gui.cpp +++ b/src/picker_gui.cpp @@ -475,8 +475,20 @@ void PickerWindow::EnsureSelectedClassIsValid() int class_index = this->callbacks.GetSelectedClass(); if (std::binary_search(std::begin(this->classes), std::end(this->classes), class_index)) return; - class_index = this->classes.front(); + if (!this->classes.empty()) { + class_index = this->classes.front(); + } else { + /* Classes can be empty if filters are enabled, find the first usable class. */ + int count = this->callbacks.GetClassCount(); + for (int i = 0; i < count; i++) { + if (this->callbacks.GetClassName(i) == INVALID_STRING_ID) continue; + class_index = i; + break; + } + } + this->callbacks.SetSelectedClass(class_index); + this->types.ForceRebuild(); } void PickerWindow::EnsureSelectedClassIsVisible() @@ -569,8 +581,18 @@ void PickerWindow::EnsureSelectedTypeIsValid() int index = this->callbacks.GetSelectedType(); if (std::any_of(std::begin(this->types), std::end(this->types), [class_index, index](const auto &item) { return item.class_index == class_index && item.index == index; })) return; - class_index = this->types.front().class_index; - index = this->types.front().index; + if (!this->types.empty()) { + class_index = this->types.front().class_index; + index = this->types.front().index; + } else { + /* Types can be empty if filters are enabled, find the first usable type. */ + int count = this->callbacks.GetTypeCount(class_index); + for (int i = 0; i < count; i++) { + if (this->callbacks.GetTypeName(class_index, i) == INVALID_STRING_ID) continue; + index = i; + break; + } + } this->callbacks.SetSelectedClass(class_index); this->callbacks.SetSelectedType(index); } From 18e56df5e104c1710fb01daec9af92ee8632b018 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 13 May 2024 01:18:07 +0100 Subject: [PATCH 526/695] Fix #12674: Non-NewGRF Build Station widgets may not fill window properly. (#12675) Allow labels in Build Station window to fill width as needed. --- src/rail_gui.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 316ea47ee2..954926f06a 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1379,12 +1379,12 @@ static constexpr NWidgetPart _nested_station_builder_widgets[] = { NWidgetFunction(MakePickerClassWidgets), NWidget(WWT_PANEL, COLOUR_DARK_GREEN), NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_picker, 0), SetPadding(WidgetDimensions::unscaled.picker), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_ORIENTATION, STR_NULL), + NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetFill(1, 0), SetDataTip(STR_STATION_BUILD_ORIENTATION, STR_NULL), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAS_PLATFORM_DIR_X), SetFill(0, 0), SetDataTip(0x0, STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAS_PLATFORM_DIR_Y), SetFill(0, 0), SetDataTip(0x0, STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP), EndContainer(), EndContainer(), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_NUMBER_OF_TRACKS, STR_NULL), + NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetFill(1, 0), SetDataTip(STR_STATION_BUILD_NUMBER_OF_TRACKS, STR_NULL), NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_1), SetAspect(1.25f), SetDataTip(STR_BLACK_1, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_2), SetAspect(1.25f), SetDataTip(STR_BLACK_2, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), @@ -1394,7 +1394,7 @@ static constexpr NWidgetPart _nested_station_builder_widgets[] = { NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_6), SetAspect(1.25f), SetDataTip(STR_BLACK_6, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_7), SetAspect(1.25f), SetDataTip(STR_BLACK_7, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), EndContainer(), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_PLATFORM_LENGTH, STR_NULL), + NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetFill(1, 0), SetDataTip(STR_STATION_BUILD_PLATFORM_LENGTH, STR_NULL), NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_1), SetAspect(1.25f), SetDataTip(STR_BLACK_1, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_2), SetAspect(1.25f), SetDataTip(STR_BLACK_2, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), From 870149406a5c80155bd22bade1c8c6eae2513a3d Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 13 May 2024 04:41:24 +0000 Subject: [PATCH 527/695] Update: Translations from eints chinese (simplified): 23 changes by WenSimEHRP russian: 17 changes by Ln-Wolf portuguese (brazilian): 8 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 16 +++++------ src/lang/russian.txt | 19 +++++++++++-- src/lang/simplified_chinese.txt | 46 +++++++++++++++---------------- 3 files changed, 48 insertions(+), 33 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 5d3d802f47..fd238dbf49 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -2800,20 +2800,20 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construi STR_PICKER_MODE_ALL :Todos STR_PICKER_MODE_ALL_TOOLTIP :Mostrar itens de todas as classes -STR_PICKER_MODE_USED :Usado +STR_PICKER_MODE_USED :Usados STR_PICKER_MODE_USED_TOOLTIP :Mostrar somente itens existentes -STR_PICKER_MODE_SAVED :Salvo +STR_PICKER_MODE_SAVED :Salvos STR_PICKER_MODE_SAVED_TOOLTIP :Mostrar somente itens salvos -STR_PICKER_STATION_CLASS_TOOLTIP :Selecione uma classe de estação para mostrar +STR_PICKER_STATION_CLASS_TOOLTIP :Selecionar uma classe de estação para mostrar STR_PICKER_STATION_TYPE_TOOLTIP :Escolher um tipo de estação para construir. Ctrl+Clique para adicionar ou remover nos itens salvos -STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Selecione uma classe de ponto de controle para mostrar +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Selecionar uma classe de ponto de controle para mostrar STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Escolher um ponto de controle para construir. Ctrl+Clique para adicionar ou remover nos itens salvos -STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Selecione uma classe de estação de ônibus para mostrar +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Selecionar uma classe de estação de ônibus para mostrar STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Escolher um tipo de estação de ônibus para construir. Ctrl+Clique para adicionar ou remover nos itens salvos -STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Selecione uma classe de estação de caminhão para mostrar -STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Escolher um tipo de estação de caminhão para construir. Ctrl+Clique para adicionar ou remover nos itens salvos -STR_PICKER_OBJECT_CLASS_TOOLTIP :Selecione uma classe de objeto para mostrar +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Selecionar uma classe de estação de caminhões para mostrar +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Escolher um tipo de estação de caminhões para construir. Ctrl+Clique para adicionar ou remover nos itens salvos +STR_PICKER_OBJECT_CLASS_TOOLTIP :Selecionar uma classe de objeto para mostrar STR_PICKER_OBJECT_TYPE_TOOLTIP :Escolher um tipo de objeto para construir. Ctrl+Clique para adicionar ou remover nos itens salvos. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para só mostrar o custo estimado STR_STATION_CLASS_DFLT :Padrão diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 4d73d31610..8b9e8e4566 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2968,8 +2968,23 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Укаж STR_STATION_BUILD_DRAG_DROP :{BLACK}Произвольно STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Постройка станции на указанном игроком участке -STR_PICKER_MODE_USED :Используется +STR_PICKER_MODE_ALL :Все +STR_PICKER_MODE_ALL_TOOLTIP :Показать все элементы +STR_PICKER_MODE_USED :Существующие +STR_PICKER_MODE_USED_TOOLTIP :Показать уже существующие элементы +STR_PICKER_MODE_SAVED :Избранное +STR_PICKER_MODE_SAVED_TOOLTIP :Показать сохранённые элементы +STR_PICKER_STATION_CLASS_TOOLTIP :Выберите тип станций для отображения +STR_PICKER_STATION_TYPE_TOOLTIP :Выберите станцию для строительства. Ctrl+щелчок добавит её в «избранное» или удалит. +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Выберите тип маршрутных точек для отображения +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Выберите маршрутную точку для строительства. Ctrl+щелчок добавит её в «избранное» или удалит. +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Выберите тип остановок для отображения +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Выберите остановку для строительства. Ctrl+щелчок добавит её в «избранное» или удалит. +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Выберите тип грузовых терминалов для отображения +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Выберите грузовой терминал для строительства. Ctrl+щелчок добавит его в «избранное» или удалит. +STR_PICKER_OBJECT_CLASS_TOOLTIP :Выберите тип объектов для отображения +STR_PICKER_OBJECT_TYPE_TOOLTIP :Выберите объект для строительства. Ctrl+щелчок добавит его в «избранное» или удалит. Ctrl+перетаскивание - выбор диагональной области. При нажатом Shift - оценка стоимости строительства. STR_STATION_CLASS_DFLT :Стандартная станция STR_STATION_CLASS_DFLT_STATION :Стандартная ж/д станция @@ -3126,7 +3141,7 @@ STR_OBJECT_CLASS_TRNS :Передат STR_PLANT_TREE_CAPTION :{WHITE}Деревья STR_PLANT_TREE_TOOLTIP :{BLACK}Выберите тип деревьев для посадки. Если на участке уже есть деревья, будут добавлены несколько деревьев различного типа, независимо от выбранного. STR_TREES_RANDOM_TYPE :{BLACK}Деревья случайного типа -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Высадка деревьев случайного типа. Ctrl+щелчок+перетаскивание - выбор диагональной области. При нажатом Shift - оценка стоимости высадки. +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Высадка деревьев случайного типа. Ctrl+перетаскивание - выбор диагональной области. При нажатом Shift - оценка стоимости высадки. STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Расставить по карте STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Разместить деревья на местности случайным образом STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Дерево diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 79efe3bd8a..8947e1b6a2 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -347,7 +347,7 @@ STR_SORT_BY_WAITING_TOTAL :等候中的货 STR_SORT_BY_WAITING_AVAILABLE :等候中的可运载货物总量 STR_SORT_BY_RATING_MAX :车站中最高的货物评价 STR_SORT_BY_RATING_MIN :车站中最低的货物评价 -STR_SORT_BY_ENGINE_ID :引擎ID (默认方式) +STR_SORT_BY_ENGINE_ID :引擎编号 STR_SORT_BY_COST :售价 STR_SORT_BY_POWER :功率 STR_SORT_BY_TRACTIVE_EFFORT :牵引力 @@ -862,7 +862,7 @@ STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDE STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} 赞助了城镇 {TOWN} 的建设! STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}一个名叫{TOWN}的城镇刚刚成立了! -STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}新的{STRING} 正在 {TOWN} 加紧建设! +STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}新的{STRING}正在 {TOWN} 附近建设! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}新的{STRING} 即将落户 {TOWN}! STR_NEWS_INDUSTRY_CLOSURE_GENERAL :{BIG_FONT}{BLACK}{STRING} 即将倒闭! @@ -1130,7 +1130,7 @@ STR_CURRENCY_PREVIEW :{LTBLUE}预览 STR_CURRENCY_CUSTOM_CURRENCY_PREVIEW_TOOLTIP :{BLACK}10000 英磅(£) 兑换自定义货币的数量 STR_CURRENCY_CHANGE_PARAMETER :{BLACK}改变当前的货币参数 -STR_NONE :没有 +STR_NONE :无 STR_FUNDING_ONLY :不生成 STR_MINIMAL :每种仅一个 STR_NUM_VERY_LOW :非常低 @@ -2231,8 +2231,8 @@ STR_HELP_WINDOW_COMMUNITY :{BLACK}社区 # Cheat window STR_CHEATS :{WHITE}沙盒选项 -STR_CHEAT_MONEY :{LTBLUE}增加 {CURRENCY_LONG} 现金 -STR_CHEAT_CHANGE_COMPANY :{LTBLUE}作为{ORANGE}{COMMA}进行游戏 +STR_CHEAT_MONEY :{LTBLUE}增加现金 {CURRENCY_LONG} +STR_CHEAT_CHANGE_COMPANY :{LTBLUE}作为{ORANGE}公司 {COMMA} {LTBLUE}进行游戏 STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}神奇推土机 (清除工业设施和其他不可移除物): {ORANGE}{STRING} STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}隧道可以相交:{ORANGE}{STRING} STR_CHEAT_NO_JETCRASH :{LTBLUE}喷气式飞机不会(经常)在小机场坠毁:{ORANGE}{STRING} @@ -2512,7 +2512,7 @@ STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}是, STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}是,不要再次询问 STR_NETWORK_ASK_SURVEY_CAPTION :是否参与自动调查? -STR_NETWORK_ASK_SURVEY_TEXT :您是否愿意参与自动体验调查?{} OpenTTD 会在结束游戏时传输调查结果。{} 您可以在任意时刻在“游戏选项”菜单修改本选项。 +STR_NETWORK_ASK_SURVEY_TEXT :您是否愿意参与自动体验调查?{} OpenTTD 会在结束游戏时传输调查结果。{}您可以在任意时刻在“游戏选项”菜单修改本选项。 STR_NETWORK_ASK_SURVEY_PREVIEW :预览调查结果 STR_NETWORK_ASK_SURVEY_LINK :关于体验调查和隐私 STR_NETWORK_ASK_SURVEY_NO :否 @@ -2743,7 +2743,7 @@ STR_STATION_BUILD_COVERAGE_ON :{BLACK}开启 STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}不显示覆盖的区域 STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}显示可以覆盖的区域 STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}接受:{GOLD}{CARGO_LIST} -STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}供给: {GOLD}{CARGO_LIST} +STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}供给:{GOLD}{CARGO_LIST} STR_STATION_BUILD_INFRASTRUCTURE_COST_YEAR :{BLACK}维护成本:{GOLD}{CURRENCY_SHORT}/年 STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}维护成本:{GOLD}{CURRENCY_SHORT}/周期 @@ -2804,16 +2804,16 @@ STR_PICKER_MODE_USED_TOOLTIP :切换为仅显 STR_PICKER_MODE_SAVED :已保存 STR_PICKER_MODE_SAVED_TOOLTIP :切换为仅显示已保存的项目 -STR_PICKER_STATION_CLASS_TOOLTIP :选择一个要显示的车站类型 -STR_PICKER_STATION_TYPE_TOOLTIP :选择要建造的车站类型。按住键以添加或删除已保存的项目。 -STR_PICKER_WAYPOINT_CLASS_TOOLTIP :选择一个要显示的路点类型 +STR_PICKER_STATION_CLASS_TOOLTIP :选择显示的车站类别 +STR_PICKER_STATION_TYPE_TOOLTIP :选择建造的车站类型。按住 键操作以保存或删除当前项目 +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :选择显示的路点类别 STR_PICKER_WAYPOINT_TYPE_TOOLTIP :选择要建造的路点类型。按住键以添加或删除已保存的项目。 -STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :选择一个要显示的公共汽车站类型 -STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :选择要建造的公共汽车站类型。按住键以添加或删除已保存的项目。 -STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :选择一个要显示的汽车货场类型 -STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :选择要建造的汽车货场类型。按住键以添加或删除已保存的项目。 -STR_PICKER_OBJECT_CLASS_TOOLTIP :选择一个要显示的物件类型 -STR_PICKER_OBJECT_TYPE_TOOLTIP :选择要建造的物件类型。按住键选择物件以添加或删除已保存的项目。按住 键以沿对角线放置,按住 键以显示预计费用。 +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :选择显示的公共汽车站类别 +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :选择建造的公共汽车站类型。按住 键操作以保存或删除当前项目 +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :选择显示的汽车货场类别 +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :选择建造的汽车货场类型。按住 键操作以保存或删除当前项目 +STR_PICKER_OBJECT_CLASS_TOOLTIP :选择显示的物件类别 +STR_PICKER_OBJECT_TYPE_TOOLTIP :选择建造的物件类型。按住 键选择物件以保存或删除当前项目。按住 键拖拽以沿对角线放置,按住 键以显示预计费用 STR_STATION_CLASS_DFLT :默认 STR_STATION_CLASS_DFLT_STATION :默认车站 @@ -3053,7 +3053,7 @@ STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}显示 STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}在缩略地图显示 STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}将该产业链的工业显示在缩略地图中 STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}选择货物 -STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}选择需要显示的货物 +STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}选择显示的货物 STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}选择工业 STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}选择需要显示的工业 @@ -3738,7 +3738,7 @@ STR_STORY_BOOK_INVALID_GOAL_REF :{RED}无效的 # Station list window STR_STATION_LIST_TOOLTIP :{BLACK}车站名称 - 点选名称以将屏幕中心移动到车站的位置。按住 键点选会在新视点中显示车站位置。 STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}按住 键点选以选择多个项目 -STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} 车站 +STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - 车站 {COMMA} 座 STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- 没有 - @@ -3896,7 +3896,7 @@ STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}查看 STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}查看公司总部 STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}重置总部 STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}以公司市值 1% 的代价重建总部,按住 键单击可以显示所需资金。 -STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}固定资产维护费明细 +STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}基建详情 STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}显示详细的设施情况 STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}给予资金 STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}给予该公司资金 @@ -3939,12 +3939,12 @@ STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- 没 STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW}({COMMA}% 已运输){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} -STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} -STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}、{STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}、{STRING}、{STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}、{STRING}、{STRING}……(尚有 {NUM} 个未显示) STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}工业名称 - 点选名称以将屏幕中心移动到当前工业的位置。按住 键点选会在新视点中显示工业位置。 -STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}接受的货物:{SILVER}{STRING} -STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}产出的货物:{SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}接受货物:{SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}产出货物:{SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :所有货物类型 STR_INDUSTRY_DIRECTORY_FILTER_NONE :无 From 9f63b9f65d212e4993755e7430654b25a31b6d77 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Mon, 13 May 2024 10:10:03 -0400 Subject: [PATCH 528/695] Fix #12594: Give descriptive error when company takeover fails due to vehicle limit (#12676) --- src/company_cmd.cpp | 6 +++--- src/company_func.h | 2 +- src/economy.cpp | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index fa4dc0e8ef..ec9d273857 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -668,12 +668,12 @@ void InitializeCompanies() } /** - * May company \a cbig buy company \a csmall? + * Can company \a cbig buy company \a csmall without exceeding vehicle limits? * @param cbig Company buying \a csmall. * @param csmall Company getting bought. * @return Return \c true if it is allowed. */ -bool MayCompanyTakeOver(CompanyID cbig, CompanyID csmall) +bool CheckTakeoverVehicleLimit(CompanyID cbig, CompanyID csmall) { const Company *c1 = Company::Get(cbig); const Company *c2 = Company::Get(csmall); @@ -725,7 +725,7 @@ static void HandleBankruptcyTakeover(Company *c) if (c2->bankrupt_asked == 0 && // Don't ask companies going bankrupt themselves !HasBit(c->bankrupt_asked, c2->index) && best_performance < c2->old_economy[1].performance_history && - MayCompanyTakeOver(c2->index, c->index)) { + CheckTakeoverVehicleLimit(c2->index, c->index)) { best_performance = c2->old_economy[1].performance_history; best = c2; } diff --git a/src/company_func.h b/src/company_func.h index 5d2d0df1dd..33885516c4 100644 --- a/src/company_func.h +++ b/src/company_func.h @@ -15,7 +15,7 @@ #include "gfx_type.h" #include "vehicle_type.h" -bool MayCompanyTakeOver(CompanyID cbig, CompanyID small); +bool CheckTakeoverVehicleLimit(CompanyID cbig, CompanyID small); void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner); static const int OWNED_BY_OWNER_IN_PARAMETERS_OFFSET = 2; ///< The index in the parameters for the owner information. void SetDParamsForOwnedBy(Owner owner, TileIndex tile); diff --git a/src/economy.cpp b/src/economy.cpp index bdb3cb06e0..04a1131d30 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -2066,8 +2066,8 @@ CommandCost CmdBuyCompany(DoCommandFlag flags, CompanyID target_company, bool ho /* Do not allow companies to take over themselves */ if (target_company == _current_company) return CMD_ERROR; - /* Disable taking over when not allowed. */ - if (!MayCompanyTakeOver(_current_company, target_company)) return CMD_ERROR; + /* Do not allow takeover if the resulting company would have too many vehicles. */ + if (!CheckTakeoverVehicleLimit(_current_company, target_company)) return_cmd_error(STR_ERROR_TOO_MANY_VEHICLES_IN_GAME); /* Get the cost here as the company is deleted in DoAcquireCompany. * For bankruptcy this amount is calculated when the offer was made; From 3f06aa441b5bb76ec22a0364659f5dd52bbeb5bf Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 14 May 2024 04:40:19 +0000 Subject: [PATCH 529/695] Update: Translations from eints english (us): 17 changes by 2TallTyler greek: 147 changes by KyriakosMich --- src/lang/english_US.txt | 17 +++ src/lang/greek.txt | 278 +++++++++++++++++++++------------------- 2 files changed, 164 insertions(+), 131 deletions(-) diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index d86a8a7369..e6f331e3ae 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -2476,6 +2476,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Your player nam STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Administrative actions to perform for this client STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Administrative actions to perform for this company STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Join this company +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Authorize this client to join your company STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Send a message to this player STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Send a message to all players of this company STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Send a message to all spectators @@ -2796,7 +2797,23 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Select l STR_STATION_BUILD_DRAG_DROP :{BLACK}Drag & Drop STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Build a station with drag & drop +STR_PICKER_MODE_ALL :All +STR_PICKER_MODE_ALL_TOOLTIP :Toggle showing items from all classes +STR_PICKER_MODE_USED :Used +STR_PICKER_MODE_USED_TOOLTIP :Toggle showing only existing items +STR_PICKER_MODE_SAVED :Saved +STR_PICKER_MODE_SAVED_TOOLTIP :Toogle showing only saved items +STR_PICKER_STATION_CLASS_TOOLTIP :Select a station class to display +STR_PICKER_STATION_TYPE_TOOLTIP :Select a station type to build. Ctrl+Click to add or remove in saved items +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Select a waypoint class to display +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Select a waypoint to build. Ctrl+Click to add or remove in saved items +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Select a bus station class to display +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Select a bus station type to build. Ctrl+Click to add or remove in saved items +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Select a truck station class to display +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Select a truck station type to build. Ctrl+Click to add or remove in saved items +STR_PICKER_OBJECT_CLASS_TOOLTIP :Select an object class to display +STR_PICKER_OBJECT_TYPE_TOOLTIP :Select an object type to build. Ctrl+Click to add or remove in saved items. Ctrl+Click+Drag to select the area diagonally. Also press Shift to show cost estimate only STR_STATION_CLASS_DFLT :Default STR_STATION_CLASS_DFLT_STATION :Default station diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 818a1f3111..c8b1f04429 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -351,7 +351,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Πατή STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Εναλλαγή μεγάλου/μικρού παραθύρου STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Μπάρα Κύλισης - μετακινεί την λίστα πάνω/κάτω STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Μπάρα κίνησης - κινεί τη λίστα αριστερά/δεξιά -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Κατεδάφιση κτιρίων κλπ. σε συγκεκριμένο τετράγωνο. Ctrl+Κλικ για διαγώνια επιλογή. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Κατεδάφιση κτιρίων κλπ. σε συγκεκριμένο τετράγωνο. Ctrl+Κλικ για διαγώνια επιλογή. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο # Show engines button ###length VEHICLE_TYPES @@ -362,7 +362,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT :{BLACK}Εμφά ###length VEHICLE_TYPES STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP :{BLACK}Ενεργοποιώντας αυτό το κουμπί, εμφανίζονται και τα κρυφά βαγόνια -STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE_TOOLTIP :{BLACK}Ενεργοποιώντας αυτό το κουμπί, εμφανίζονται και τα κρυφά οχήματα δρόμου +STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE_TOOLTIP :{BLACK}Ενεργοποιώντας αυτό το κουμπί, εμφανίζονται και τα κρυφά οδικά οχήματα STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP_TOOLTIP :{BLACK}Ενεργοποιώντας αυτό το κουμπί, εμφανίζονται και τα κρυφά πλοία STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Ενεργοποιώντας αυτό το κουμπί, εμφανίζονται και τα κρυφά αεροσκάφη @@ -456,7 +456,7 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Εμφά STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Εμφάνιση πίνακα κατάταξης των εταιριών STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Εμφάνιση λίστας βιομηχανιών ή χρηματοδότηση κατασκευής νέας βιομηχανίας STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Εμφάνιση λίστας με τα τραίνα της εταιρίας. Με Ctrl+Κλικ εναλλάσσεται η εμφάνιση/απόκρυψη των ομάδων οχημάτων -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Εμφάνιση λίστας με τα οχήματα δρόμου της εταιρίας. Με Ctrl+Κλικ εναλλάσσεται η εμφάνιση/απόκρυψη των ομάδων οχημάτων +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Εμφάνιση λίστας με τα οδικά οχήματα της εταιρίας. Με Ctrl+Κλικ εναλλάσσεται η εμφάνιση/απόκρυψη των ομάδων οχημάτων STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Εμφάνιση λίστας με τα πλοία της εταιρίας. Με Ctrl+Κλικ εναλλάσσεται η εμφάνιση/απόκρυψη των ομάδων οχημάτων STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Εμφάνιση λίστας με τα αεροσκάφη της εταιρίας. Με Ctrl+Κλικ εναλλάσσεται η εμφάνιση/απόκρυψη των ομάδων οχημάτων STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Μεγέθυνση εικόνας @@ -485,9 +485,9 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Δημι STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Δημιουργία βιομηχανίας STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Κατασκευή δρόμου STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}{BLACK}Κατασκευή τροχιοδρόμου -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Φύτευση Δέντρων. Ctrl+Κλικ για διαγώνια επιλογή περιοχής. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Φύτευση Δέντρων. Ctrl+Κλικ για διαγώνια επιλογή περιοχής. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Τοποθέτηση πινακίδας -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Τοποθέτηση αντικειμένου. Ctrl+Κλικ για διαγώνια επιλογή περιοχής. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Τοποθέτηση αντικειμένου. Ctrl+Κλικ για διαγώνια επιλογή περιοχής. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο # Scenario editor file menu ###length 7 @@ -1019,8 +1019,8 @@ STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLAC STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Η επιχορήγηση υπηρεσία που δόθηκε στην {STRING}!{}{}{STRING} από {STRING} έως {STRING} θα πληρώνει τριπλές τιμές για το/α επόμενο/α {UNITS_YEARS_OR_MINUTES}! STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Η επιχορήγηση υπηρεσίας που δόθηκε στην {STRING}!{}{}{STRING} από {STRING} έως {STRING} θα πληρώνει τετραπλές τιμές για το/α επόμενο/α {UNITS_YEARS_OR_MINUTES}! -STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Κυκλοφοριακό χάος στην {TOWN}!{}{}Το πρόγραμμα ανοικοδόμησης δρόμου που χρηματοδοτείται από το {STRING} φέρνει 6 μήνες δυστυχίας στους αυτοκινητιστές! -STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}Κυκλοφοριακό χάος στην {TOWN}!{}{}Το πρόγραμμα ανοικοδόμησης δρόμου που χρηματοδοτείται από το {STRING} φέρνει 6 λεπτά δυστυχίας στους οδηγούς! +STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Κυκλοφοριακό χάος στην {TOWN}!{}{}Το πρόγραμμα ανακατασκευής δρόμων που χρηματοδοτείται από το {STRING} φέρνει 6 μήνες δυστυχίας στους αυτοκινητιστές! +STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}Κυκλοφοριακό χάος στην {TOWN}!{}{}Το πρόγραμμα ανακατασκευής δρόμων που χρηματοδοτείται από το {STRING} φέρνει 6 λεπτά δυστυχίας στους οδηγούς! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Μονοπώλιο μεταφορών! STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLACK}Η τοπική αρχή της {TOWN} υπογράφει σύμβαση με την {STRING} για 12 μήνες αποκλειστικών δικαιωμάτων μεταφοράς! STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}Η τοπική αρχή της {TOWN} υπογράφει σύμβαση με την {STRING} για 12 λεπτά αποκλειστικών δικαιωμάτων μεταφοράς! @@ -1435,7 +1435,7 @@ STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Ορίστε τ STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Μοντέλο επιτάχυνσης τρένων: {STRING} STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Επιλέξτε το μοντέλο φυσικής για την επιτάχυνση των τρένων. Με το «αρχικό» μοντέλο οι κλίσεις επιβαρύνουν το ίδιο όλα τα οχήματα. Με το «ρεαλιστικό» μοντέλο οι κλίσεις και οι στροφές τα επιβαρύνουν ανάλογα με διάφορες ιδιότητες όπως το μήκος και το ελκτικό φορτίο -STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Μοντέλο επιτάχυνσης οχημάτων δρόμου: {STRING} +STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Μοντέλο επιτάχυνσης οδικών οχημάτων: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Επιλέξτε το μοντέλο φυσικής για την επιτάχυνση των οχημάτων. Με το «αρχικό» μοντέλο οι κλίσεις επιβαρύνουν το ίδιο όλα τα οχήματα. Με το «ρεαλιστικό» μοντέλο οι κλίσεις και οι στροφές τα επιβαρύνουν ανάλογα με διάφορες ιδιότητες όπως το μήκος και το ελκτικό φορτίο STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :Κλίση εδάφους για τα τρένα: {STRING} @@ -1682,7 +1682,7 @@ STR_CONFIG_SETTING_TREE_PLACER_NONE :Κανένας STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Αυθεντικός STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Βελτιωμένος -STR_CONFIG_SETTING_ROAD_SIDE :Οχήματα δρόμου: {STRING} +STR_CONFIG_SETTING_ROAD_SIDE :Οδικά Οχήματα: {STRING} STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Επιλέξτε την πλευρά οδήγησης ###length 2 @@ -1878,7 +1878,7 @@ STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Παίζει τ STR_CONFIG_SETTING_MAX_TRAINS :Μέγιστος αριθμός τρένων ανά εταιρία: {STRING} STR_CONFIG_SETTING_MAX_TRAINS_HELPTEXT :Μέγιστος αριθμός τρένων που μπορεί να έχει μια εταιρεία -STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Μέγιστος αριθμός οχημάτων δρόμου ανά εταιρία: {STRING} +STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Μέγιστος αριθμός οδικών οχημάτων ανά εταιρία: {STRING} STR_CONFIG_SETTING_MAX_ROAD_VEHICLES_HELPTEXT :Μέγιστος αριθμός οδικών οχημάτων που μπορεί να έχει μια εταιρεία STR_CONFIG_SETTING_MAX_AIRCRAFT :Μέγιστος αριθμός αεροσκαφών ανά εταιρία: {STRING} @@ -2327,7 +2327,7 @@ STR_CHEATS :{WHITE}Ρυθμ STR_CHEAT_MONEY :{LTBLUE}Αύξηση χρημάτων κατά {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Παίζετε με την εταιρία: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Μαγική μπουλντόζα (αφαιρεί βιομηχανίες, αμετακίνητα αντικείμενα): {ORANGE}{STRING} -STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Τα τούνελ μπορούν να διασταυρώνονται: {ORANGE}{STRING} +STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Οι σήραγγες μπορούν να διασταυρώνονται: {ORANGE}{STRING} STR_CHEAT_NO_JETCRASH :{LTBLUE}Τα jet δε θα συντρίβονται (συχνά) σε μικρά αεροδρόμια: {ORANGE} {STRING} STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Μεταβολή του μέγιστου ύψους του χάρτη: {ORANGE}{NUM} STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Μεταβολή του μέγιστου ύψους βουνών στο χάρτη @@ -2341,18 +2341,18 @@ STR_LIVERY_CAPTION :{WHITE}{COMPANY STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Εμφάνιση γενικών χρωματικών μοτίβων STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Εμφάνιση χρωματικών μοτίβων τρένων -STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Εμφάνιση χρωματικών μοτίβων οχημάτων δρόμου +STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Εμφάνιση χρωματικών μοτίβων οδικών οχημάτων STR_LIVERY_SHIP_TOOLTIP :{BLACK}Εμφάνιση χρωματικών μοτίβων πλοίων STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Εμφάνιση χρωματικών μοτίβων αεροσκαφών STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Εμφάνιση χρωμάτων ομάδων τραίνων -STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Εμφάνιση χρωμάτων ομάδων οχημάτων δρόμου +STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Εμφάνιση χρωμάτων ομάδων οδικών οχημάτων STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Εμφάνιση χρωμάτων ομάδων πλοίων STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Εμφάνιση χρωμάτων ομάδων αεροσκαφών STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Επιλογή του βασικού χρώματος για το επιλεγμένο θέμα. Ctrl+Κλικ για ορισμό αυτού του χρώματος για κάθε θέμα STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Επιλογή του δευτερεύοντος χρώματος για το επιλεγμένο θέμα. Ctrl+Κλικ για ορισμό αυτού του χρώματος για κάθε θέμα STR_LIVERY_PANEL_TOOLTIP :{BLACK}Επιλέξτε το χρωματικό μοτίβο για αλλαγή ή πολλαπλά μοτίβα με Ctrl+Κλικ. Πατήστε στο κουτάκι για να επιλέξετε τη χρήση του μοτίβου STR_LIVERY_TRAIN_GROUP_EMPTY :Δεν έχουν οριστεί ομάδες τραίνων -STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Δεν έχουν οριστεί ομάδες οχημάτων δρόμου +STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Δεν έχουν οριστεί ομάδες οδικών οχημάτων STR_LIVERY_SHIP_GROUP_EMPTY :Δεν έχουν οριστεί ομάδες πλοίων STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Δεν έχουν οριστεί ομάδες αεροσκαφών @@ -2856,16 +2856,16 @@ STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Κατασκε STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Κατασκευή Μονοτρόχιου Σιδηρόδρομου STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Κατασκευή Σιδηροδρόμου Maglev -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Κατασκευή σιδηροτροχιάς. Ctrl+Κλικ για αφαίρεση σιδηροτροχιάς. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Κατασκευή σιδηροτροχιάς με χρήση της Αυτόματης Σιδηροτροχιάς. Ctrl+Κλικ για αφαίρεση σιδηροτροχιάς. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Κατασκευή αμαξοστάσιου (για αγορά και επισκευή τρένων). Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Μετατροπή σιδηροτροχιάς σε σημείο καθοδήγησης. Ctrl+Κλικ για επιλογή πρόσθετου σημείου καθοδήγησης για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Κατασκευή σταθμού τρένων. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Κατασκευή σηματοδοτών στον σιδηρόδρομο. Ctrl+Κλικ για κατασκευή του εναλλακτικού είδους σηματοδότη{}Με Κλικ+σύρσιμο κατασκευάζονται σηματοδότες κατά μήκος μιας σιδηροτροχιάς ανά το ορισμένο διάστημα. Ctrl+Κλικ+σύρσιμο για κατασκευή σηματοδοτών μέχρι την επομένη διασταύρωση, σταθμό ή σηματοδότη. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Κατασκευή γέφυρας σιδηρόδρομου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Κατασκευή τούνελ σιδηρόδρομου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Κατασκευή σιδηροτροχιάς. Ctrl+Κλικ για αφαίρεση σιδηροτροχιάς. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Κατασκευή σιδηροτροχιάς με χρήση της Αυτόματης Σιδηροτροχιάς. Ctrl+Κλικ για αφαίρεση σιδηροτροχιάς. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Κατασκευή αμαξοστάσιου (για αγορά και επισκευή τρένων). Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Μετατροπή σιδηροτροχιάς σε σημείο καθοδήγησης. Ctrl+Κλικ για επιλογή πρόσθετου σημείου καθοδήγησης για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Κατασκευή σταθμού τρένων. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Κατασκευή σηματοδοτών στον σιδηρόδρομο. Ctrl+Κλικ για κατασκευή του εναλλακτικού είδους σηματοδότη{}Με Κλικ+σύρσιμο κατασκευάζονται σηματοδότες κατά μήκος μιας σιδηροτροχιάς ανά ορισμένο διάστημα. Ctrl+Κλικ+σύρσιμο για κατασκευή σηματοδοτών μέχρι την επομένη διασταύρωση, σταθμό ή σηματοδότη. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Κατασκευή σιδηροδρομικής γέφυρας. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Κατασκευή σιδηροδρομικής σήραγγας. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Εναλλαγή κατασκευής/αφαίρεσης σιδηροτροχιών, σηματοδοτών, σημείων καθοδήγησης και σταθμών. Ctrl+Κλικ για αφαίρεση και της σιδηροτροχιάς από σημεία καθοδήγησης και σταθμούς -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Μετατροπή/Αναβάθμιση του τύπου γραμμής. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Μετατροπή/Αναβάθμιση του τύπου σιδηροτροχιάς. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο STR_RAIL_NAME_RAILROAD :Σιδηρόδρομος STR_RAIL_NAME_ELRAIL :Ηλεκτροδοτημένη σιδηροτροχιά @@ -2890,7 +2890,23 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Επιλ STR_STATION_BUILD_DRAG_DROP :{BLACK}Σύρετε και Ελευθερώστε STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Φτιάξε ένα σταθμό χρησιμοποιώντας σύρσιμο και ελευθέρωση +STR_PICKER_MODE_ALL :Όλα +STR_PICKER_MODE_ALL_TOOLTIP :Εναλλαγή εμφάνισης στοιχείων από όλες τις κατηγορίες +STR_PICKER_MODE_USED :Χρησιμοποιείται +STR_PICKER_MODE_USED_TOOLTIP :Εναλλαγή εμφάνισης μόνο υπαρχόντων στοιχείων +STR_PICKER_MODE_SAVED :Αποθηκεύτηκε +STR_PICKER_MODE_SAVED_TOOLTIP :Εναλλαγή εμφάνισης μόνο αποθηκευμένων στοιχείων +STR_PICKER_STATION_CLASS_TOOLTIP :Επιλογή κατηγορίας σταθμού για εμφάνιση +STR_PICKER_STATION_TYPE_TOOLTIP :Επιλογή τύπου σταθμού για κατασκευή. Ctrl+κλικ για προσθήκη σε ή αφαίρεση από αποθηκευμένα στοιχεία +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Επιλογή κατηγορίας σημείου καθοδήγησης για εμφάνιση +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Επιλογή σημείου καθοδήγησης για κατασκευή. Ctrl+κλικ για προσθήκη σε ή αφαίρεση από αποθηκευμένα στοιχεία +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Επιλογή κατηγορίας στάσεων λεωφορείων για εμφάνιση +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Επιλογή κατηγορίας στάσεων λεωφορείων για κατασκευή. Ctrl+κλικ για προσθήκη σε ή αφαίρεση από αποθηκευμένα στοιχεία +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Επιλογή κατηγορίας σταθμών φορτηγών για εμφάνιση. +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Επιλογή κατηγορίας σταθμών φορτηγών για κατασκευή. Ctrl+κλικ για προσθήκη σε ή αφαίρεση από αποθηκευμένα στοιχεία +STR_PICKER_OBJECT_CLASS_TOOLTIP :Επιλογή κατηγορίας αντικειμένων για εμφάνιση +STR_PICKER_OBJECT_TYPE_TOOLTIP :Επιλογή κατηγορίας αντικειμένων για εμφάνιση. Ctrl+κλικ για προσθήκη σε ή αφαίρεση από αποθηκευμένα στοιχεία. Ctrl+κλικ+σύρσιμο για να επιλεγεί διαγώνια περιοχή. Επίσης, πατήστε Shift για εμφάνιση εκτιμώμενου κόστους μόνο STR_STATION_CLASS_DFLT :Προεπιλεγμένος STR_STATION_CLASS_DFLT_STATION :Προεπιλεγμένος σταθμός @@ -2913,14 +2929,14 @@ STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Σημα STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Συνδυαστικός Σηματοδότης (ηλεκτρικός){}Ο συνδυαστικός σηματοδότης δουλεύει απλά ως σηματοδότης εισόδου και εξόδου ταυτόχρονα. Αυτό σας επιτρέπει την κατασκευή μεγάλων «δέντρων» με προ-σηματοδότες STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Σηματοδότης Τροχιάς (ηλεκτρικός){}Ένας σηματοδότης τροχιάς επιτρέπει σε περισσότερα από ένα τρένο να είναι σε ένα κομμάτι ελέγχου την ίδια στιγμή, εάν το τρένο μπορεί να δεσμεύσει τροχιά σε ασφαλές σημείο στάσης. Κανονικοί σηματοδότες τροχιάς μπορούν να περαστούν από την πίσω πλευρά STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Μονόδρομος Σηματοδότης Τροχιάς (ηλεκτρικός){}Ένας σηματοδότης τροχιάς επιτρέπει σε περισσότερα από ένα τρένο να είναι σε ένα κομμάτι ελέγχου την ίδια στιγμή, εάν το τρένο μπορεί να δεσμεύσει τροχιά σε ασφαλές σημείο στάσης. Μονόδρομοι σηματοδότες τροχιάς δεν μπορούν να περαστούν από την πίσω πλευρά -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Μετατροπή σήματος{}Πατήστε σε ένα υπάρχον σήμα για να το μετατρέψετε στον επιλεγμένο τύπο και παραλλαγή. Ctrl+Κλικ για εναλλαγή της υπάρχουσας παραλλαγής. Το Shift+Κλικ εμφανίζει το εκτιμώμενο κόστος μετατροπής +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Μετατροπή σήματος{}Πατήστε σε ένα υπάρχον σήμα για να το μετατρέψετε στον επιλεγμένο τύπο και παραλλαγή. Ctrl+Κλικ για εναλλαγή της υπάρχουσας παραλλαγής. Shift+Κλικ για εμφάνιση του εκτιμώμενου κόστους μετατροπής STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Απόσταση μεταξύ σηματοδοτών με σύρσιμο STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Μείωση απόστασης μεταξύ σηματοδοτών με σύρσιμο STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Αύξηση απόστασης μεταξύ σηματοδοτών με σύρσιμο # Bridge selection window -STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Επιλογή Γέφυρας Σιδηροδρόμου -STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Επιλογή Γέφυρας Δρόμου +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} @@ -2939,25 +2955,25 @@ STR_BRIDGE_TUBULAR_SILICON :Σιλικόν # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Κατασκευή Δρόμου STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Κατασκευή Τροχιόδρομου -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Κατασκευή τμήματος δρόμου. Ctrl+Κλικ για αφαίρεση τμήματος δρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Κατασκευή κομματιού τροχιοδρόμου. Ctrl+Κλικ για αφαίρεση τροχιόδρομου. Επιπρόσθετα πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Κατασκευή οδικού δικτύου με χρήση της λειτουργίας Αυτόματου Δρόμου. Ctrl+Κλικ για αφαίρεση δρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Κατασκευή τροχιοδρόμου με χρήση της λειτουργίας Αυτόματης Γραμμής. Ctrl+Κλικ για αφαίρεση τροχιόδρομου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Κατασκευή αμαξοστασίου οχημάτων δρόμου (για αγορά και επισκευή οχημάτων). Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Κατασκευή αμαξοστασίου οχημάτων τραμ (για αγορά και συντήρηση οχημάτων). Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Κατασκευή σταθμού λεωφορείων. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Κατασκευή επιβατικού σταθμού τραμ. Ctrl+Κλικ για επιλογή πρόσθετου επιβατικού σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Κατασκευή σταθμού φορτηγών. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Κατασκευή εμπορευματικού σταθμού τραμ. Ctrl+Κλικ για επιλογή πρόσθετου εμπορευματικού σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Κατασκευή οδικού τμήματος. Ctrl+Κλικ για αφαίρεση οδικού τμήματος. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Κατασκευή τμήματος τροχιοδρόμου. Ctrl+Κλικ για αφαίρεση τροχιόδρομου. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Κατασκευή οδικού δικτύου χρησιμοποιώντας τη λειτουργία Αυτόματου Δρόμου. Ctrl+Κλικ για αφαίρεση δρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Κατασκευή τροχιοδρόμου χρησιμοποιώντας τη λειτουργία Αυτόματου Τροχιοδρόμου. Ctrl+Κλικ για αφαίρεση τροχιόδρομου. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Κατασκευή αμαξοστασίου οδικών οχημάτων (για αγορά και επισκευή οχημάτων). Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Κατασκευή αμαξοστασίου οχημάτων τροχιοδρόμου (για αγορά και συντήρηση οχημάτων). Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Κατασκευή σταθμού λεωφορείων. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Κατασκευή επιβατικού σταθμού τροχιοδρόμου. Ctrl+Κλικ για επιλογή πρόσθετου επιβατικού σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Κατασκευή σταθμού φορτηγών. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Κατασκευή εμπορευματικού σταθμού τροχιοδρόμου. Ctrl+Κλικ για επιλογή πρόσθετου εμπορευματικού σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Ενεργοποίηση/Απενεργοποίηση μονόδρομων -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Κατασκευή γέφυρας δρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Κατασκευή γέφυρας τροχιοδρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Κατασκευή τούνελ δρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Κατασκευή τούνελ τροχιοδρόμου. Επιπρόσθετα πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Εναλλαγή κατασκευής/αφαίρεσης για αυτοκινητόδρομους +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Κατασκευή οδικής γέφυρας. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Κατασκευή γέφυρας τροχιοδρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Κατασκευή οδικής σήραγγας. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Κατασκευή σήραγγας τροχιοδρόμου. Επιπρόσθετα πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Εναλλαγή κατασκευής/αφαίρεσης στην κατασκευή δρόμων STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Εναλλαγή προσθήκης/αφαίρεσης για την κατασκευή τροχιόδρομου -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Μετατρέψτε/Αναβαθμίστε τον τύπο του δρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Μετατρέψτε/Αναβαθμίστε τον τύπο του τραμ. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Μετατρέψτε/Αναβαθμίστε τον τύπο του δρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Μετατρέψτε/Αναβαθμίστε τον τύπο του τροχιοδρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο STR_ROAD_NAME_ROAD :Δρόμος STR_ROAD_NAME_TRAM :Τροχιόδρομος @@ -2981,12 +2997,12 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Επιλ # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Κατασκευή Καναλιού Νερού STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Κανάλια Νερού -STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Κατασκευή καναλιών. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Κατασκευή υδατοφράκτη. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Κατασκευή ναυπηγείου πλοίων (για αγορά και επισκευή πλοίων). Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Κατασκευή λιμένα πλοίων. Ctrl+Κλικ για επιλογή πρόσθετου λιμένα για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Τοποθετήστε μια σημαδούρα που μπορεί να χρησιμοποιηθεί ως σημείο καθοδήγησης. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Κατασκευή υδραγωγείου. Επιπρόσθετα πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Κατασκευή καναλιών. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Κατασκευή υδατοφράκτη. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Κατασκευή ναυπηγείου πλοίων (για αγορά και επισκευή πλοίων). Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Κατασκευή λιμένα πλοίων. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Τοποθετήστε σημαδούρα η οποία μπορεί να χρησιμοποιηθεί ως σημείο καθοδήγησης. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Κατασκευή υδραγωγείου. Επιπρόσθετα πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Κατασκευή καναλιού. Εναλλακτικά, Ctrl+Κλικ στο επίπεδο της θάλασσας για να πλημμυρίσετε με θαλασσινό νερό STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Τοποθέτηση ποταμιών. Ctrl+Κλικ για διαγώνια επιλογή @@ -2999,7 +3015,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Λιμά # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Αεροδρόμια -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Κατασκευή αεροδρομίου. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Κατασκευή αεροδρομίου. Ctrl+Κλικ για επιλογή πρόσθετου σταθμού για συνένωση. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Επιλογή Αεροδρομίου @@ -3026,10 +3042,10 @@ STR_STATION_BUILD_NOISE :{BLACK}Παρα # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Μορφοποίηση εδάφους -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Χαμήλωμα μιας γωνίας εδάφους. Κλικ+Σύρσιμο για χαμήλωμα της πρώτης επιλεγμένης γωνίας και ισοπέδωση της επιφάνειας στο νέο ύψος της γωνίας. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή της επιφάνειας. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Ανύψωση μιας γωνίας εδάφους. Κλικ+Σύρσιμο για ανύψωση της πρώτης επιλεγμένης γωνίας και ισοπέδωση της επιφάνειας στο νέο ύψος της γωνίας. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή της επιφάνειας. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Ισοπέδωση της γης στο ύψος της πρώτης επιλεγμένης γωνίας. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή της επιφάνειας. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Αγορά γης για μελλοντική χρήση. Ctrl+Κλικ για διαγώνια επιλογή. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Χαμήλωμα μιας γωνίας εδάφους. Κλικ+Σύρσιμο για χαμήλωμα της πρώτης επιλεγμένης γωνίας και ισοπέδωση της επιφάνειας στο νέο ύψος της γωνίας. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή της επιφάνειας. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Ανύψωση μιας γωνίας εδάφους. Κλικ+Σύρσιμο για ανύψωση της πρώτης επιλεγμένης γωνίας και ισοπέδωση της επιφάνειας στο νέο ύψος της γωνίας. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή της επιφάνειας. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Ισοπέδωση της γης στο ύψος της πρώτης επιλεγμένης γωνίας. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή της επιφάνειας. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Αγορά γης για μελλοντική χρήση. Ctrl+Κλικ για διαγώνια επιλογή. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Επιλογή Αντικείμενου @@ -3043,7 +3059,7 @@ STR_OBJECT_CLASS_TRNS :Αναμετα STR_PLANT_TREE_CAPTION :{WHITE}Δέντρα STR_PLANT_TREE_TOOLTIP :{BLACK}Επιλέξτε τύπο δέντρου για φύτευση. Αν το τετραγωνίδιο έχει ήδη ένα δέντρο, αυτό θα προσθέσει περισσότερα δέντρα μεικτών τύπων ανεξάρτητα από τον επιλεγμένο τύπο STR_TREES_RANDOM_TYPE :{BLACK}Δέντρα τυχαίου τύπου -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Τοποθέτηση δέντρων τυχαίου τύπου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Τοποθέτηση δέντρων τυχαίου τύπου. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Τυχαία Δέντρα STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Φυτέψτε δέντρα τυχαία στο έδαφος STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Κανονικό @@ -3070,7 +3086,7 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Είστ # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Δημιουργία Πόλης STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Νέα Πόλη -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Ίδρυση νέας πόλης. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Ίδρυση νέας πόλης. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Τυχαία Πόλη STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Ίδρυση πόλης σε τυχαία τοποθεσία STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Πολλές τυχαίες πόλεις @@ -3142,7 +3158,7 @@ STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Κόστ STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Κέρδος όταν καθαριστεί: {LTBLUE}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_OWNER_N_A :Μ/Δ STR_LAND_AREA_INFORMATION_OWNER :{BLACK}Ιδιοκτήτης: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_ROAD_OWNER :{BLACK}Ιδιοκτήτης δρόμου: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_ROAD_OWNER :{BLACK}Ιδιοκτήτης του δρόμου: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Ιδιοκτήτης του τροχιοδρόμου: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Ιδιοκτήτης του σιδηροδρόμου: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Τοπική αρχή: {LTBLUE}{STRING} @@ -3185,7 +3201,7 @@ STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Σιδηροδ STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Σιδηροδρομική τροχιά με σήματα τμήματος και εξόδου STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Σιδηροδρομική τροχιά με σήματα τμήματος και συνδυαστικά STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Σιδηροδρομική τροχιά με σήματα τμήματος και διαδρομής -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Σιδηροδρομική τροχιά με σήματα τμήματος και μονόδρομους διαδρομής +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Σιδηροδρομική τροχιά με σήματα τμήματος και μονόδρομης διαδρομής STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Σιδηροδρομική τροχιά με σήματα ειδοποίησης και εξόδου STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Σιδηροδρομική τροχιά με σήματα ειδοποίησης και συνδυαστικά STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Σιδηροδρομική τροχιά με σήματα ειδοποίησης και διαδρομής @@ -3230,8 +3246,8 @@ STR_LAI_WATER_DESCRIPTION_SHIP_DEPOT :Ναυπηγε # Industries come directly from their industry names -STR_LAI_TUNNEL_DESCRIPTION_RAILROAD :Τούνελ σιδηρόδρομου -STR_LAI_TUNNEL_DESCRIPTION_ROAD :Τούνελ δρόμου +STR_LAI_TUNNEL_DESCRIPTION_RAILROAD :Σιδηροδρομική σήραγγα +STR_LAI_TUNNEL_DESCRIPTION_ROAD :Οδική σήραγγα STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_STEEL :Ατσάλινη κρεμαστή σιδηροδρομική γέφυρα STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL :Ατσάλινη σιδηροδρομική γέφυρα με δοκούς @@ -3241,13 +3257,13 @@ STR_LAI_BRIDGE_DESCRIPTION_RAIL_WOODEN :Ξύλινη σ STR_LAI_BRIDGE_DESCRIPTION_RAIL_CONCRETE :Τσιμεντένια σιδηροδρομική γέφυρα STR_LAI_BRIDGE_DESCRIPTION_RAIL_TUBULAR_STEEL :Ατσάλινη σωληνοειδής σιδηροδρομική γέφυρα -STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_STEEL :Ατσάλινη κρεμαστή γέφυρα δρόμου -STR_LAI_BRIDGE_DESCRIPTION_ROAD_GIRDER_STEEL :Ατσάλινη γέφυρα δρόμου με δοκούς -STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL :Ατσάλινη αρθρωτή γέφυρα δρόμου -STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_CONCRETE :Κρεμαστή γέφυρα δρόμου από ενισχυμένο τσιμέντο -STR_LAI_BRIDGE_DESCRIPTION_ROAD_WOODEN :Ξύλινη γέφυρα δρόμου -STR_LAI_BRIDGE_DESCRIPTION_ROAD_CONCRETE :Τσιμεντένια γέφυρα δρόμου -STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL :Σωληνοειδής γέφυρα δρόμου +STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_STEEL :Ατσάλινη κρεμαστή οδική γέφυρα +STR_LAI_BRIDGE_DESCRIPTION_ROAD_GIRDER_STEEL :Ατσάλινη οδική γέφυρα με δοκούς +STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL :Ατσάλινη αρθρωτή οδική γέφυρα +STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_CONCRETE :Κρεμαστή οδική γέφυρα από ενισχυμένο τσιμέντο +STR_LAI_BRIDGE_DESCRIPTION_ROAD_WOODEN :Ξύλινη οδική γέφυρα +STR_LAI_BRIDGE_DESCRIPTION_ROAD_CONCRETE :Τσιμεντένια οδική γέφυρα +STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL :Σωληνοειδής οδική γέφυρα STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT :Υπερυψωμένο κανάλι @@ -3289,7 +3305,7 @@ STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COM STR_FRAMERATE_GAMELOOP :{BLACK}Σύνολο βρόγχου παιχνιδιού: STR_FRAMERATE_GL_ECONOMY :{BLACK} Διαχείριση φορτίου: STR_FRAMERATE_GL_TRAINS :{BLACK} Στιγμές τρένων: -STR_FRAMERATE_GL_ROADVEHS :{BLACK} Στιγμές οχημάτων δρόμου: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Στιγμές οδικών οχημάτων: STR_FRAMERATE_GL_SHIPS :{BLACK} Στιγμές πλοίων: STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Στιγμές αεροσκαφών: STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Στιγμές κόσμου: @@ -3306,7 +3322,7 @@ STR_FRAMERATE_AI :{BLACK} AI {N STR_FRAMETIME_CAPTION_GAMELOOP :Βρόγχος παιχνιδιού STR_FRAMETIME_CAPTION_GL_ECONOMY :Διαχείριση φορτίου STR_FRAMETIME_CAPTION_GL_TRAINS :Στιγμές τρένων -STR_FRAMETIME_CAPTION_GL_ROADVEHS :Στιγμές οχημάτων δρόμου +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Στιγμές οδικών οχημάτων STR_FRAMETIME_CAPTION_GL_SHIPS :Στιγμές πλοίων STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Στιγμές αεροσκαφών STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Στιγμές κόσμου @@ -3917,12 +3933,12 @@ STR_FINANCES_CAPITAL_EXPENSES_TITLE :{WHITE}Έξοδ STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Κατασκευές STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Νέα Οχήματα STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Τρένα -STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Οχήματα δρόμου +STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Οδικά οχήματα STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Αεροσκάφη STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Πλοία STR_FINANCES_SECTION_INFRASTRUCTURE :{GOLD}Υποδομές STR_FINANCES_SECTION_TRAIN_REVENUE :{GOLD}Τρένα -STR_FINANCES_SECTION_ROAD_VEHICLE_REVENUE :{GOLD}Οχήματα δρόμου +STR_FINANCES_SECTION_ROAD_VEHICLE_REVENUE :{GOLD}Οδικά οχήματα STR_FINANCES_SECTION_AIRCRAFT_REVENUE :{GOLD}Αεροσκάφη STR_FINANCES_SECTION_SHIP_REVENUE :{GOLD}Πλοία STR_FINANCES_SECTION_SHIP_REVENUE.geniki :{GOLD}Πλοίων @@ -3955,14 +3971,14 @@ STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Ίδρυ STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Χρωματισμός: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Οχήματα: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} τρέν{P ο α} -STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} {P όχημα οχήματα} δρόμου +STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} οδικ{P ό ά} {P όχημα οχήματα} STR_COMPANY_VIEW_AIRCRAFT :{WHITE}{COMMA} αεροσκάφ{P ος η} STR_COMPANY_VIEW_SHIPS :{WHITE}{COMMA} πλοί{P ο α} STR_COMPANY_VIEW_VEHICLES_NONE :{WHITE}Κανένα STR_COMPANY_VIEW_COMPANY_VALUE :{GOLD}Αξία εταιρίας: {WHITE}{CURRENCY_LONG} STR_COMPANY_VIEW_INFRASTRUCTURE :{GOLD}Υποδομή: STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA} κομμάτι{P "" α} σιδηροτροχιάς -STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} κομμάτι{P "" α} δρόμου +STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} οδικ{P ό ά} τμήμ{P α ατα} STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} τετραγωνίδι{P ο α} νερού STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} τετραγωνίδι{P ο α} σταθμού STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} αεροδρόμι{P ο α} @@ -3973,7 +3989,7 @@ STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Κατα STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Προβολή Έδρας STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Προβολή έδρας εταιρίας STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Μετεγκατάσταση Έδρας -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Επανοικοδόμηση της έδρας της εταιρίας σε άλλο μέρος, με κόστος το 1% της αξίας της εταιρίας. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Επανοικοδόμηση της έδρας της εταιρίας σε άλλο μέρος, με κόστος το 1% της αξίας της εταιρίας. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Λεπτομέρειες STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Προβολή λεπτομερούς μέτρησης υποδομών STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Δώστε χρήματα @@ -4001,7 +4017,7 @@ STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Σε μ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Υποδομή της {COMPANY} STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Κομμάτια σιδηροτροχιάς: STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Σήματα -STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Κομμάτια δρόμου: +STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Οδικά τμήματα: STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Κομμάτια τραμ: STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Τετραγωνίδια νερού: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Κανάλια @@ -4049,13 +4065,13 @@ STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Αλλα # Vehicle lists ###length VEHICLE_TYPES STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} Τρέν{P ο α} -STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} {P Όχημα Οχήματα} δρόμου +STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} Οδικ{P ό ά} {P Όχημα Οχήματα} STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} Πλοί{P ο α} STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} Αεροσκάφ{P ος η} ###length VEHICLE_TYPES STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Τρένα - πατήστε στο τρένο για πληροφορίες -STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Οχήματα δρόμου - πατήστε στο όχημα για πληροφορίες +STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Οδικά Οχήματα - πατήστε στο όχημα για πληροφορίες STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Πλοία - πατήστε στο πλοίο για πληροφορίες STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Αεροσκάφη - πατήστε στο αεροσκάφος για πληροφορίες @@ -4089,13 +4105,13 @@ STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}Κοιν # Group window ###length VEHICLE_TYPES STR_GROUP_ALL_TRAINS :Όλα τα τρένα -STR_GROUP_ALL_ROAD_VEHICLES :Όλα τα οχήματα δρόμου +STR_GROUP_ALL_ROAD_VEHICLES :Όλα τα οδικά οχήματα STR_GROUP_ALL_SHIPS :Όλα τα πλοία STR_GROUP_ALL_AIRCRAFTS :Όλα τα αεροσκάφη ###length VEHICLE_TYPES STR_GROUP_DEFAULT_TRAINS :Μη ομαδοποιημένα τρένα -STR_GROUP_DEFAULT_ROAD_VEHICLES :Μη ομαδοποιημένα οχήματα δρόμου +STR_GROUP_DEFAULT_ROAD_VEHICLES :Μη ομαδοποιημένα οδικά οχήματα STR_GROUP_DEFAULT_SHIPS :Μη ομαδοποιημένα πλοία STR_GROUP_DEFAULT_AIRCRAFTS :Μη ομαδοποιημένα αεροσκάφη @@ -4130,13 +4146,13 @@ STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Νέα Οχήμ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Νέα Οχήματα Μονοτρόχιου STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Νέα Οχήματα Maglev -STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Νέα Οχήματα Δρόμου +STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Νέα Οδικά Οχήματα STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Νέα οχήματα τραμ # Vehicle availability ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Νέα Οχήματα Σιδηρόδρομου -STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Νέα Όχήματα Δρόμου +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Νέα Οδικά Οχήματα STR_BUY_VEHICLE_SHIP_CAPTION :Νέα Πλοία STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Νέα Αεροσκάφη @@ -4176,7 +4192,7 @@ STR_CARGO_TYPE_FILTER_NONE :Κανένα ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Λίστα επιλογής βαγονιού τρένου. Πατήστε σε ένα βαγόνι για πληροφορίες. Ctrl+Κλικ για εμφάνιση/απόκρυψη αυτού του τύπου βαγονιού -STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Λίστα επιλογής οχήματος δρόμου. Πατήστε σε ένα όχημα για πληροφορίες. Ctrl+Κλικ για εμφάνιση/απόκρυψη αυτού του τύπου οχήματος +STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Λίστα επιλογής οδικού οχήματος. Πατήστε σε ένα όχημα για πληροφορίες. Ctrl+Κλικ για εμφάνιση/απόκρυψη αυτού του τύπου οχήματος STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Λίστα επιλογής πλοίου. Πατήστε σε ένα πλοίο για πληροφορίες. Ctrl+Κλικ για εμφάνιση/απόκρυψη αυτού του τύπου πλοίου STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Λίστα επιλογής αεροσκάφους. Πατήστε σε ένα αεροσκάφος για πληροφορίες. Ctrl+Κλικ για εμφάνιση/απόκρυψη αυτού του τύπου αεροσκάφους @@ -4193,16 +4209,16 @@ STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Αγορ STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Αγορά και μετατροπή του αεροσκάφους ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου οχήματος τρένου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου οχήματος δρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά επιλεγμένου πλοίου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου αεροσκάφους. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου οχήματος τρένου. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου οδικού οχήματος. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά επιλεγμένου πλοίου. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου αεροσκάφους. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο ###length VEHICLE_TYPES -STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου οχήματος τρένου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου οχήματος δρόμου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου πλοίου. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου αεροσκάφους. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου οχήματος τρένου. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου οδικού οχήματος. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου πλοίου. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου αεροσκάφους. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Μετονομασία @@ -4212,7 +4228,7 @@ STR_BUY_VEHICLE_AIRCRAFT_RENAME_BUTTON :{BLACK}Μετο ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Μετονομάζει τον τύπο οχήματος τρένου -STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Μετονομάζει τον τύπο οχήματος δρόμου +STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Μετονομάζει τον τύπο οδικού οχήματος STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Μετονομάζει τον τύπο πλοίου STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Μετονομάζει τον τύπο αεροσκάφους @@ -4230,13 +4246,13 @@ STR_BUY_VEHICLE_AIRCRAFT_SHOW_TOGGLE_BUTTON :{BLACK}Εμφά ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Εμφάνιση/απόκρυψη του τύπου βαγονιού -STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Εμφάνιση/απόκρυψη του τύπου οχήματος δρόμου +STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Εμφάνιση/απόκρυψη του τύπου οδικού οχήματος STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Εμφάνιση/απόκρυψη του τύπου πλοίου STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Εμφάνιση/απόκρυψη του τύπου αεροσκάφους ###length VEHICLE_TYPES STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}Μετονομασία τύπου τρένου -STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE}Μετονομασία τύπου οχήματος δρόμου +STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE}Μετονομασία τύπου οδικού οχήματος STR_QUERY_RENAME_SHIP_TYPE_CAPTION :{WHITE}Μετονομασία τύπου πλοίου STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Μετονομασία τύπου αεροσκάφους @@ -4253,19 +4269,19 @@ STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Τρένα - τραβήξτε ένα όχημα με αριστερό κλικ για να το προσθέστε/αφαιρέστε από ένα τρένο, δεξί κλικ για πληροφορίες. Ctrl+Κλικ για εφαρμογή οποιασδήποτε από τις δύο λειτουργίες στην ακόλουθη αλυσίδα -STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Οχήματα δρόμου - δεξί κλικ σε ένα όχημα για πληροφορίες +STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Οδικά οχήματα - δεξί κλικ σε ένα όχημα για πληροφορίες STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Πλοία - δεξί κλικ σε ένα πλοίο για πληροφορίες STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Αεροσκάφη - δεξί κλικ σε ένα αεροσκάφος για πληροφορίες ###length VEHICLE_TYPES STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Τραβήξτε το όχημα τρένου εδώ για να το πουλήσετε -STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Σύρετε το όχημα δρόμου εδώ για να το πουλήσετε +STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Σύρετε το οδικό όχημα εδώ για να το πουλήσετε STR_DEPOT_SHIP_SELL_TOOLTIP :{BLACK}Τραβήξτε το πλοίο εδώ για να το πουλήσετε STR_DEPOT_AIRCRAFT_SELL_TOOLTIP :{BLACK}Σύρετε το αεροσκάφος εδώ για να το πουλήσετε ###length VEHICLE_TYPES STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TOOLTIP :{BLACK}Πουλήστε όλα τα τρένα στο αμαξοστάσιο -STR_DEPOT_SELL_ALL_BUTTON_ROAD_VEHICLE_TOOLTIP :{BLACK}Πουλήστε όλα τα οχήματα δρόμου στο αμαξοστάσιο +STR_DEPOT_SELL_ALL_BUTTON_ROAD_VEHICLE_TOOLTIP :{BLACK}Πουλήστε όλα τα οδικά οχήματα στο αμαξοστάσιο STR_DEPOT_SELL_ALL_BUTTON_SHIP_TOOLTIP :{BLACK}Πουλήστε όλα τα πλοία στο ναυπηγείο STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TOOLTIP :{BLACK}Πουλήστε όλα τα αεροσκάφη στο υπόστεγο @@ -4283,7 +4299,7 @@ STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Νέα ###length VEHICLE_TYPES STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Αγορά νέου οχήματος τρένου -STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Αγορά νέου οχήματος δρόμου +STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Αγορά νέου ποδικού οχήματος STR_DEPOT_SHIP_NEW_VEHICLES_TOOLTIP :{BLACK}Αγορά νέου πλοίου STR_DEPOT_AIRCRAFT_NEW_VEHICLES_TOOLTIP :{BLACK}Αγορά νέου αεροσκάφους @@ -4294,10 +4310,10 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Κλων STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Κλωνοποίηση Αεροσκάφους ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός τρένου μαζί με όλα τα βαγόνια. Πατήστε αυτό το κουμπί και μετά σε κάποιο τρένο μέσα ή έξω από το αμαξοστάσιο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός οχήματος δρόμου. Πατήστε αυτό το κουμπί και μετά σε κάποιο όχημα μέσα ή έξω από το αμαξοστάσιο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός πλοίου. Πατήστε αυτό το κουμπί και μετά σε κάποιο πλοίο μέσα ή έξω από το ναυπηγείο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Αγορά αντιγράφου του αεροσκάφους. Πατήστε αυτό το κουμπί και μετά σε κάποιο αεροσκάφος μέσα ή έξω από το υπόστεγο. Με Ctrl+Κλικ θα διαμοιραστούν τις εντολές. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός τρένου μαζί με όλα τα βαγόνια. Πατήστε αυτό το κουμπί και μετά σε κάποιο τρένο μέσα ή έξω από το αμαξοστάσιο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός οδικού οχήματος. Πατήστε αυτό το κουμπί και μετά σε κάποιο όχημα μέσα ή έξω από το αμαξοστάσιο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Αγορά αντιγράφου ενός πλοίου. Πατήστε αυτό το κουμπί και μετά σε κάποιο πλοίο μέσα ή έξω από το ναυπηγείο. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Αγορά αντιγράφου του αεροσκάφους. Πατήστε αυτό το κουμπί και μετά σε κάποιο αεροσκάφος μέσα ή έξω από το υπόστεγο. Με Ctrl+Κλικ θα διαμοιραστούν τις εντολές. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του αμαξοστάσιου. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην τοποθεσία του αμαξοστασίου @@ -4307,7 +4323,7 @@ STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Κεντ ###length VEHICLE_TYPES STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Παίρνετε μια λίστα με όλα τα τρένα με το επιλεγμένο αμαξοστάσιο στις εντολές τους -STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Παίρνετε μια λίστα με όλα τα οχήματα δρόμου με το επιλεγμένο αμαξοστάσιο στις εντολές τους +STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Παίρνετε μια λίστα με όλα τα οδικά οχήματα με το επιλεγμένο αμαξοστάσιο στις εντολές τους STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TOOLTIP :{BLACK}Παίρνετε μια λίστα με όλα τα πλοία με το επιλεγμένο ναυπηγείο στις εντολές τους STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Παίρνετε μια λίστα με όλα τα αεροσκάφη που έχουν οποιοδήποτε υπόστεγο αυτού του αεροδρομίου στις εντολές τους @@ -4338,8 +4354,8 @@ STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE.geniki :μηχανής STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :{G=f}μηχανής maglev STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE.geniki :μηχανής maglev -STR_ENGINE_PREVIEW_ROAD_VEHICLE :{G=n}οχήματος δρόμου -STR_ENGINE_PREVIEW_ROAD_VEHICLE.geniki :Οχήματος δρόμου +STR_ENGINE_PREVIEW_ROAD_VEHICLE :{G=n} οδικού οχήματος +STR_ENGINE_PREVIEW_ROAD_VEHICLE.geniki :Οδικού οχήματος STR_ENGINE_PREVIEW_TRAM_VEHICLE :όχημα τροχιοδρόμου STR_ENGINE_PREVIEW_AIRCRAFT :{G=n}αεροσκάφους @@ -4370,7 +4386,7 @@ STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP :{BLACK}Στήλ ###length VEHICLE_TYPES STR_REPLACE_VEHICLE_TRAIN :Τρένο -STR_REPLACE_VEHICLE_ROAD_VEHICLE :Όχημα Δρόμου +STR_REPLACE_VEHICLE_ROAD_VEHICLE :Οδικό όχημα STR_REPLACE_VEHICLE_SHIP :Πλοίο STR_REPLACE_VEHICLE_AIRCRAFT :Αεροσκάφος @@ -4390,8 +4406,8 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Πατή STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Εναλλαγή μεταξύ των παραθύρων αντικατάστασης μηχανών και βαγονιών STR_REPLACE_ENGINES :Μηχανές STR_REPLACE_WAGONS :Βαγόνια -STR_REPLACE_ALL_RAILTYPE :Όλα τα οχήματα σιδηρόδρομου -STR_REPLACE_ALL_ROADTYPE :Όλα τα οχήματα δρόμου +STR_REPLACE_ALL_RAILTYPE :Όλα τα σιδηροδρομικά οχήματα +STR_REPLACE_ALL_ROADTYPE :Όλα τα οδικά οχήματα ###length 2 STR_REPLACE_HELP_RAILTYPE :{BLACK}Επιλέξτε τον τύπο σιδηροδρόμου για τον οποίο θέλετε να γίνει η αντικατάσταση των μηχανών @@ -4399,12 +4415,12 @@ STR_REPLACE_HELP_ROADTYPE :{BLACK}Επιλ ###next-name-looks-similar STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Εμφανίζει ποια μηχανή αυτή στα αριστερά θα αντικατασταθεί, εάν υπάρχει -STR_REPLACE_RAIL_VEHICLES :Οχήματα Σιδηροδρόμου +STR_REPLACE_RAIL_VEHICLES :Σιδηροδρομικά οχήματα STR_REPLACE_ELRAIL_VEHICLES :Οχήματα Ηλεκτρικού Σιδηροδρόμου STR_REPLACE_MONORAIL_VEHICLES :Οχήματα Μονοτρόχιου STR_REPLACE_MAGLEV_VEHICLES :Οχήματα Maglev -STR_REPLACE_ROAD_VEHICLES :Οχήματα Δρόμου +STR_REPLACE_ROAD_VEHICLES :Οδικά οχήματα STR_REPLACE_TRAM_VEHICLES :Οχήματα τροχιοδρόμου STR_REPLACE_REMOVE_WAGON :{BLACK}Αφαίρεση βαγονιού: ({STRING}): {ORANGE}{STRING} @@ -4427,10 +4443,10 @@ STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλ STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλνει το αεροσκάφος στο υπόστεγο. Με Ctrl+Κλικ κάνει μόνο συντήρηση ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Αγορά αντιγράφου του τρένου μαζί με όλα τα βαγόνια. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Αγορά αντιγράφου του οχήματος δρόμου. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Αγορά αντιγράφου του πλοίου. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Αγορά αντιγράφου του αεροσκάφους. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Αγορά αντιγράφου του τρένου μαζί με όλα τα βαγόνια. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Αγορά αντιγράφου του οδικού οχήματος. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Αγορά αντιγράφου του πλοίου. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Αγορά αντιγράφου του αεροσκάφους. Ctrl+Κλικ για διαμοιρασμό εντολών. Επίσης, πατήστε το Shift για εμφάνιση εκτιμώμενου κόστους μόνο STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Αναγκάστε το τρένο να προχωρήσει χωρίς να περιμένει το σηματοδότη να το επιτρέψει STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Αναστροφή κατεύθυνσης τρένου @@ -4451,7 +4467,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Εμφά ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Εμφάνιση λεπτομερειών τρένου -STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Εμφάνιση λεπτομερειών οχήματος δρόμου +STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Εμφάνιση λεπτομερειών οδικού οχήματος STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Εμφάνιση λεπτομερειών πλοίου STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Εμφάνιση λεπτομερειών αεροσκάφους @@ -4499,7 +4515,7 @@ STR_VEHICLE_DETAILS_CAPTION :{WHITE}{VEHICLE ###length VEHICLE_TYPES STR_VEHICLE_DETAILS_TRAIN_RENAME :{BLACK}Ονομασία τρένου -STR_VEHICLE_DETAILS_ROAD_VEHICLE_RENAME :{BLACK}Ονομασία οχήματος δρόμου +STR_VEHICLE_DETAILS_ROAD_VEHICLE_RENAME :{BLACK}Ονομασία οδικού οχήματος STR_VEHICLE_DETAILS_SHIP_RENAME :{BLACK}Ονομασία πλοίου STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Ονομασία αεροσκάφους @@ -4548,7 +4564,7 @@ STR_VEHICLE_DETAILS_PERCENT :Ποσοστό ###length VEHICLE_TYPES STR_QUERY_RENAME_TRAIN_CAPTION :{WHITE}Όνομα τρένου -STR_QUERY_RENAME_ROAD_VEHICLE_CAPTION :{WHITE}Όνομα οχήματος δρόμου +STR_QUERY_RENAME_ROAD_VEHICLE_CAPTION :{WHITE}Όνομα οδικού οχήματος STR_QUERY_RENAME_SHIP_CAPTION :{WHITE}Όνομα πλοίου STR_QUERY_RENAME_AIRCRAFT_CAPTION :{WHITE}Όνομα αεροσκάφους @@ -5054,7 +5070,7 @@ STR_ERROR_BRIBE_FAILED :{WHITE}Η δω STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}Δεν είναι δυνατό να υψωθεί η γη εδώ... STR_ERROR_CAN_T_LOWER_LAND_HERE :{WHITE}Δεν είναι δυνατό να χαμηλώσει η γη εδώ... STR_ERROR_CAN_T_LEVEL_LAND_HERE :{WHITE}Δεν είναι δυνατό να έρθει στο ίδιο επίπεδο η γη εδώ... -STR_ERROR_EXCAVATION_WOULD_DAMAGE :{WHITE}Η εκσκαφή θα κατέστρεφε το τούνελ +STR_ERROR_EXCAVATION_WOULD_DAMAGE :{WHITE}Η εκσκαφή θα κατέστρεφε τη σήραγγα STR_ERROR_ALREADY_AT_SEA_LEVEL :{WHITE}... ήδη στο επίπεδο της θάλασσας STR_ERROR_TOO_HIGH :{WHITE}... πολύ ψηλά STR_ERROR_ALREADY_LEVELLED :{WHITE}... ήδη επίπεδο @@ -5268,13 +5284,13 @@ STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... η STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :{WHITE}Η γέφυρα θα καταλήξει εκτός χάρτη # Tunnel related errors -STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί τούνελ εδώ... -STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Ακατάλληλη τοποθεσία για είσοδο τούνελ -STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Πρέπει να καταστραφεί το τούνελ πρώτα -STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Υπάρχει άλλο τούνελ στη μέση -STR_ERROR_TUNNEL_THROUGH_MAP_BORDER :{WHITE}Το τούνελ θα καταλήξει εκτός του χάρτη -STR_ERROR_UNABLE_TO_EXCAVATE_LAND :{WHITE}Αδύνατο να γίνει εκσκαφή γης στην άλλη άκρη του τούνελ -STR_ERROR_TUNNEL_TOO_LONG :{WHITE}... το τούνελ είναι πολύ μακρύ +STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί σήραγγα εδώ... +STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Ακατάλληλη τοποθεσία για είσοδο σήραγγας +STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Πρέπει να καταστραφεί η σήραγγα πρώτα +STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Υπάρχει άλλη σήραγγα στη μέση +STR_ERROR_TUNNEL_THROUGH_MAP_BORDER :{WHITE} Η σήραγγα θα καταλήξει εκτός του χάρτη +STR_ERROR_UNABLE_TO_EXCAVATE_LAND :{WHITE}Αδύνατο να γίνει εκσκαφή γης στην άλλη άκρη της σήραγγας +STR_ERROR_TUNNEL_TOO_LONG :{WHITE}... η σήραγγα είναι πολύ μακριά # Object related errors STR_ERROR_TOO_MANY_OBJECTS :{WHITE}... πάρα πολλά αντικείμενα @@ -5335,19 +5351,19 @@ STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR :{WHITE}Δεν ###length VEHICLE_TYPES STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Δεν μπορεί να γίνει αγορά οχήματος σιδηροδρόμου... -STR_ERROR_CAN_T_BUY_ROAD_VEHICLE :{WHITE}Δεν μπορεί να γίνει αγορά οχήματος δρόμου... +STR_ERROR_CAN_T_BUY_ROAD_VEHICLE :{WHITE}Δεν μπορεί να γίνει αγορά οδικού οχήματος... STR_ERROR_CAN_T_BUY_SHIP :{WHITE}Δεν μπορεί να γίνει αγορά πλοίου... STR_ERROR_CAN_T_BUY_AIRCRAFT :{WHITE}Δεν μπορεί να γίνει αγορά αεροσκάφους... ###length VEHICLE_TYPES STR_ERROR_CAN_T_RENAME_TRAIN_TYPE :{WHITE}Δεν μπορεί να μετονομαστεί ο τύπος τρένου... -STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Δεν μπορεί να μετονομαστεί ο τύπος οχήματος δρόμου... +STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Δεν μπορεί να μετονομαστεί ο τύπος οδικού οχήματος... STR_ERROR_CAN_T_RENAME_SHIP_TYPE :{WHITE}Δεν μπορεί να μετονομαστεί ο τύπος πλοίου... STR_ERROR_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Δεν μπορεί να μετονομαστεί ο τύπος αεροσκάφους... ###length VEHICLE_TYPES STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}Δεν μπορεί να πωληθεί το όχημα σιδηρόδρομου... -STR_ERROR_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Δεν μπορεί να πωληθεί το όχημα δρόμου... +STR_ERROR_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Δεν μπορεί να πωληθεί το οδικό όχημα... STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Δεν μπορεί να πωληθεί το πλοίο... STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Δεν μπορεί να πωληθεί το αεροσκάφος... @@ -5526,8 +5542,8 @@ STR_SV_EMPTY : STR_SV_UNNAMED :Ανώνυμο STR_SV_TRAIN_NAME :{G=n}Τρένο #{COMMA} STR_SV_TRAIN_NAME.geniki :Τρένου {COMMA} -STR_SV_ROAD_VEHICLE_NAME :{G=n}Όχημα Δρόμου #{COMMA} -STR_SV_ROAD_VEHICLE_NAME.geniki :Οχήματος Δρόμου {COMMA} +STR_SV_ROAD_VEHICLE_NAME :{G=n}Οδικό όχημα #{COMMA} +STR_SV_ROAD_VEHICLE_NAME.geniki :Οδικού οχήματος {COMMA} STR_SV_SHIP_NAME :{G=n}Πλοίο #{COMMA} STR_SV_SHIP_NAME.geniki :Πλοίου {COMMA} STR_SV_AIRCRAFT_NAME :{G=n}Αεροσκάφος #{COMMA} @@ -5854,8 +5870,8 @@ STR_FORMAT_WAYPOINT_NAME_SERIAL :Σημείο Κ ###length 6 STR_FORMAT_DEPOT_NAME_TRAIN :Αμαξοστάσιο Τρένων {TOWN} STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :Αμαξοστάσιο Τρένων {TOWN} #{COMMA} -STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :Αμαξοστάσιο Οχημάτων Δρόμου {TOWN} -STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :Αμαξοστάσιο Οχημάτων Δρόμου {TOWN} #{COMMA} +STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :Αμαξοστάσιο Οδικών Οχημάτων {TOWN} +STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :Αμαξοστάσιο Οδικών Οχημάτων {TOWN} #{COMMA} STR_FORMAT_DEPOT_NAME_SHIP :Ναυπηγείο Πλοίων {TOWN} STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :Ναυπηγείο Πλοίων {TOWN} #{COMMA} ###next-name-looks-similar From 00c4b232b31441a1bc6c48739003614e5d5c5d1a Mon Sep 17 00:00:00 2001 From: Rubidium Date: Mon, 13 May 2024 23:26:05 +0200 Subject: [PATCH 530/695] Fix #12550: files were not saved in the right location when binary and configuration are in the same folder --- src/fileio.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index 7bf8a76198..84f38eabac 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -84,7 +84,7 @@ static void FillValidSearchPaths(bool only_local_path) std::set seen{}; for (Searchpath sp = SP_FIRST_DIR; sp < NUM_SEARCHPATHS; sp++) { - if (sp == SP_WORKING_DIR) continue; + if (sp == SP_WORKING_DIR && !_do_scan_working_directory) continue; if (only_local_path) { switch (sp) { From 460fab920c1fed2b6bc504b060ff3ebf4625fd0b Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 14 May 2024 18:18:30 +0100 Subject: [PATCH 531/695] Fix #12418, 338def1b06: Filename extension taken from wrong string. (#12680) --- src/openttd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index fd913f2ce2..495486afd9 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -612,7 +612,7 @@ int openttd_main(std::span arguments) return ret; } - std::string extension = std::filesystem::path(_file_to_saveload.name).extension().string(); + std::string extension = std::filesystem::path(mgo.opt).extension().string(); auto [_, title] = FiosGetSavegameListCallback(SLO_LOAD, mgo.opt, extension); _load_check_data.Clear(); From 486af1a6fc8353d89536cd809bed8bdc561783ae Mon Sep 17 00:00:00 2001 From: Muxy Date: Sun, 12 May 2024 21:11:59 +0200 Subject: [PATCH 532/695] Fix: [Admin] #12411 Send Network Welcome Packet to admin port after game creation completed WelcomeAll moved into NetworkOnGameStart Signed-off-by: Muxy --- src/network/network.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/network/network.cpp b/src/network/network.cpp index 6b34df1229..c0c13efb1d 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -936,9 +936,6 @@ bool NetworkServerStart() /* if the server is dedicated ... add some other script */ if (_network_dedicated) IConsoleCmdExec("exec scripts/on_dedicated.scr 0"); - /* welcome possibly still connected admins - this can only happen on a dedicated server. */ - if (_network_dedicated) ServerNetworkAdminSocketHandler::WelcomeAll(); - return true; } @@ -969,6 +966,9 @@ void NetworkOnGameStart() } ShowClientList(); + } else { + /* welcome possibly still connected admins - this can only happen on a dedicated server. */ + ServerNetworkAdminSocketHandler::WelcomeAll(); } } From bb77d16e40359c01bda8157f040df574e3db5ce4 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Tue, 14 May 2024 14:43:56 -0400 Subject: [PATCH 533/695] Add: Shade button to waypoint picker (#12682) --- src/rail_gui.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 954926f06a..aee5ef4848 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1860,6 +1860,7 @@ static constexpr NWidgetPart _nested_build_waypoint_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), NWidget(WWT_CAPTION, COLOUR_DARK_GREEN), SetDataTip(STR_WAYPOINT_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_SHADEBOX, COLOUR_DARK_GREEN), NWidget(WWT_DEFSIZEBOX, COLOUR_DARK_GREEN), EndContainer(), NWidget(NWID_HORIZONTAL), From f90172206615460d687339a1a663473025105f06 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 14 May 2024 17:29:57 +0100 Subject: [PATCH 534/695] Codechange: Rename BuildTownHouse to TryBuildTownHouse. --- src/town_cmd.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 2fae67fc47..e7a8a0e58e 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -232,7 +232,7 @@ enum TownGrowthResult { // GROWTH_SEARCH_RUNNING >= 1 }; -static bool BuildTownHouse(Town *t, TileIndex tile); +static bool TryBuildTownHouse(Town *t, TileIndex tile); static Town *CreateRandomTown(uint attempts, uint32_t townnameparts, TownSize size, bool city, TownLayout layout); static void TownDrawHouseLift(const TileInfo *ti) @@ -694,7 +694,7 @@ static void TileLoop_Town(TileIndex tile) } } - BuildTownHouse(t, tile); + TryBuildTownHouse(t, tile); } } @@ -1183,7 +1183,7 @@ static bool GrowTownWithExtraHouse(Town *t, TileIndex tile) /* If there are enough neighbors stop here */ if (counter >= 3) { - if (BuildTownHouse(t, tile)) { + if (TryBuildTownHouse(t, tile)) { _grow_town_result = GROWTH_SUCCEED; return true; } @@ -1668,7 +1668,7 @@ static void GrowTownInTile(TileIndex *tile_ptr, RoadBits cur_rb, DiagDirection t /* And build a house. * Set result to -1 if we managed to build it. */ - if (BuildTownHouse(t1, house_tile)) { + if (TryBuildTownHouse(t1, house_tile)) { _grow_town_result = GROWTH_SUCCEED; } } @@ -2672,7 +2672,7 @@ static bool CheckTownBuild2x2House(TileIndex *tile, Town *t, int maxz, bool nosl * @param tile The tile to try building on. * @return false iff no house can be built on this tile. */ -static bool BuildTownHouse(Town *t, TileIndex tile) +static bool TryBuildTownHouse(Town *t, TileIndex tile) { /* forbidden building here by town layout */ if (!TownLayoutAllowsHouseHere(t, tile)) return false; From d99c1337a2e0bbafa4b6fcfba66d1efb4c8066d6 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 14 May 2024 17:29:57 +0100 Subject: [PATCH 535/695] Add: Command to build an individual house on a specific tile. --- src/command_type.h | 1 + src/town_cmd.cpp | 106 +++++++++++++++++++++++++++++++++++---------- src/town_cmd.h | 3 ++ 3 files changed, 88 insertions(+), 22 deletions(-) diff --git a/src/command_type.h b/src/command_type.h index 8f3cbedd93..193802ef17 100644 --- a/src/command_type.h +++ b/src/command_type.h @@ -283,6 +283,7 @@ enum Commands : uint16_t { CMD_TOWN_SET_TEXT, ///< set the custom text of a town CMD_EXPAND_TOWN, ///< expand a town CMD_DELETE_TOWN, ///< delete a town + CMD_PLACE_HOUSE, ///< place a house CMD_ORDER_REFIT, ///< change the refit information of an order (for "goto depot" ) CMD_CLONE_ORDER, ///< clone (and share) an order diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index e7a8a0e58e..5a339161f7 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2665,6 +2665,39 @@ static bool CheckTownBuild2x2House(TileIndex *tile, Town *t, int maxz, bool nosl return false; } +/** + * Build a house at this tile. + * @param t The town the house will belong to. + * @param tile The tile to try building on. + * @param hs The @a HouseSpec of the house. + * @param house The @a HouseID of the house. + * @param random_bits The random data to be associated with the house. + */ +static void BuildTownHouse(Town *t, TileIndex tile, const HouseSpec *hs, HouseID house, uint8_t random_bits) +{ + /* build the house */ + t->cache.num_houses++; + + uint8_t construction_counter = 0; + uint8_t construction_stage = 0; + + if (_generating_world || _game_mode == GM_EDITOR) { + uint32_t construction_random = Random(); + + construction_stage = TOWN_HOUSE_COMPLETED; + if (Chance16(1, 7)) construction_stage = GB(construction_random, 0, 2); + + if (construction_stage == TOWN_HOUSE_COMPLETED) { + ChangePopulation(t, hs->population); + } else { + construction_counter = GB(construction_random, 2, 2); + } + } + + MakeTownHouse(tile, t, construction_counter, construction_stage, house, random_bits); + UpdateTownRadius(t); + UpdateTownGrowthRate(t); +} /** * Tries to build a house at this tile. @@ -2784,31 +2817,10 @@ static bool TryBuildTownHouse(Town *t, TileIndex tile) if (callback_res != CALLBACK_FAILED && !Convert8bitBooleanCallback(hs->grf_prop.grffile, CBID_HOUSE_ALLOW_CONSTRUCTION, callback_res)) continue; } - /* build the house */ - t->cache.num_houses++; - /* Special houses that there can be only one of. */ t->flags |= oneof; - uint8_t construction_counter = 0; - uint8_t construction_stage = 0; - - if (_generating_world || _game_mode == GM_EDITOR) { - uint32_t construction_random = Random(); - - construction_stage = TOWN_HOUSE_COMPLETED; - if (Chance16(1, 7)) construction_stage = GB(construction_random, 0, 2); - - if (construction_stage == TOWN_HOUSE_COMPLETED) { - ChangePopulation(t, hs->population); - } else { - construction_counter = GB(construction_random, 2, 2); - } - } - - MakeTownHouse(tile, t, construction_counter, construction_stage, house, random_bits); - UpdateTownRadius(t); - UpdateTownGrowthRate(t); + BuildTownHouse(t, tile, hs, house, random_bits); return true; } @@ -2816,6 +2828,56 @@ static bool TryBuildTownHouse(Town *t, TileIndex tile) return false; } +CommandCost CmdPlaceHouse(DoCommandFlag flags, TileIndex tile, HouseID house) +{ + if (_game_mode != GM_EDITOR) return CMD_ERROR; + if (Town::GetNumItems() == 0) return_cmd_error(STR_ERROR_MUST_FOUND_TOWN_FIRST); + + if (static_cast(house) >= HouseSpec::Specs().size()) return CMD_ERROR; + const HouseSpec *hs = HouseSpec::Get(house); + if (!hs->enabled) return CMD_ERROR; + + if (TimerGameCalendar::year < hs->min_year || TimerGameCalendar::year > hs->max_year) return CMD_ERROR; + + Town *t = ClosestTownFromTile(tile, UINT_MAX); + + /* cannot build on these slopes... */ + Slope slope = GetTileSlope(tile); + if (IsSteepSlope(slope)) return_cmd_error(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION); + + /* building under a bridge? */ + if (IsBridgeAbove(tile)) return_cmd_error(STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST); + + /* can we clear the land? */ + CommandCost cost = Command::Do(DC_AUTO | DC_NO_WATER, tile); + if (!cost.Succeeded()) return cost; + + int maxz = GetTileMaxZ(tile); + + /* Make sure there is no slope? */ + bool noslope = (hs->building_flags & TILE_NOT_SLOPED) != 0; + if (noslope && slope != SLOPE_FLAT) return_cmd_error(STR_ERROR_FLAT_LAND_REQUIRED); + + TileArea ta = tile; + if (hs->building_flags & TILE_SIZE_2x2) ta.Add(TileAddXY(tile, 1, 1)); + if (hs->building_flags & TILE_SIZE_2x1) ta.Add(TileAddByDiagDir(tile, DIAGDIR_SW)); + if (hs->building_flags & TILE_SIZE_1x2) ta.Add(TileAddByDiagDir(tile, DIAGDIR_SE)); + + /* Check additonal tiles covered by this house. */ + for (const TileIndex &subtile : ta) { + cost = Command::Do(DC_AUTO | DC_NO_WATER, subtile); + if (!cost.Succeeded()) return cost; + + if (!CheckBuildHouseSameZ(subtile, maxz, noslope)) return_cmd_error(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION); + } + + if (flags & DC_EXEC) { + BuildTownHouse(t, tile, hs, house, Random()); + } + + return CommandCost(); +} + /** * Update data structures when a house is removed * @param tile Tile of the house diff --git a/src/town_cmd.h b/src/town_cmd.h index edabfd0433..3c492eb434 100644 --- a/src/town_cmd.h +++ b/src/town_cmd.h @@ -15,6 +15,7 @@ #include "town_type.h" enum TownAcceptanceEffect : uint8_t; +using HouseID = uint16_t; std::tuple CmdFoundTown(DoCommandFlag flags, TileIndex tile, TownSize size, bool city, TownLayout layout, bool random_location, uint32_t townnameparts, const std::string &text); CommandCost CmdRenameTown(DoCommandFlag flags, TownID town_id, const std::string &text); @@ -25,6 +26,7 @@ CommandCost CmdTownCargoGoal(DoCommandFlag flags, TownID town_id, TownAcceptance CommandCost CmdTownSetText(DoCommandFlag flags, TownID town_id, const std::string &text); CommandCost CmdExpandTown(DoCommandFlag flags, TownID town_id, uint32_t grow_amount); CommandCost CmdDeleteTown(DoCommandFlag flags, TownID town_id); +CommandCost CmdPlaceHouse(DoCommandFlag flags, TileIndex tile, HouseID house); DEF_CMD_TRAIT(CMD_FOUND_TOWN, CmdFoundTown, CMD_DEITY | CMD_NO_TEST, CMDT_LANDSCAPE_CONSTRUCTION) // founding random town can fail only in exec run DEF_CMD_TRAIT(CMD_RENAME_TOWN, CmdRenameTown, CMD_DEITY | CMD_SERVER, CMDT_OTHER_MANAGEMENT) @@ -35,6 +37,7 @@ DEF_CMD_TRAIT(CMD_TOWN_RATING, CmdTownRating, CMD_DEITY, DEF_CMD_TRAIT(CMD_TOWN_SET_TEXT, CmdTownSetText, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT) DEF_CMD_TRAIT(CMD_EXPAND_TOWN, CmdExpandTown, CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION) DEF_CMD_TRAIT(CMD_DELETE_TOWN, CmdDeleteTown, CMD_OFFLINE, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_PLACE_HOUSE, CmdPlaceHouse, CMD_DEITY, CMDT_OTHER_MANAGEMENT) CommandCallback CcFoundTown; void CcFoundRandomTown(Commands cmd, const CommandCost &result, Money, TownID town_id); From b731ab0632304ae16587405184bc5e8012fb1096 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 14 May 2024 17:29:58 +0100 Subject: [PATCH 536/695] Change: Allow sprite resolver to evaluate non-existent houses. This could previous be done but only with a town and tile in mind, but for drawing in the UI, neither of those exist yet. --- src/newgrf_house.cpp | 41 +++++++++++++++++++++++++++++++++-------- src/newgrf_house.h | 10 ++++++---- 2 files changed, 39 insertions(+), 12 deletions(-) diff --git a/src/newgrf_house.cpp b/src/newgrf_house.cpp index e31c49964a..4f98c088b1 100644 --- a/src/newgrf_house.cpp +++ b/src/newgrf_house.cpp @@ -105,11 +105,14 @@ void ResetHouses() */ HouseResolverObject::HouseResolverObject(HouseID house_id, TileIndex tile, Town *town, CallbackID callback, uint32_t param1, uint32_t param2, - bool not_yet_constructed, uint8_t initial_random_bits, CargoTypes watched_cargo_triggers) + bool not_yet_constructed, uint8_t initial_random_bits, CargoTypes watched_cargo_triggers, int view) : ResolverObject(GetHouseSpecGrf(house_id), callback, param1, param2), - house_scope(*this, house_id, tile, town, not_yet_constructed, initial_random_bits, watched_cargo_triggers), + house_scope(*this, house_id, tile, town, not_yet_constructed, initial_random_bits, watched_cargo_triggers, view), town_scope(*this, town, not_yet_constructed) // Don't access StorePSA if house is not yet constructed. { + /* Tile must be valid and a house tile, unless not yet constructed in which case it may also be INVALID_TILE. */ + assert((IsValidTile(tile) && (not_yet_constructed || IsTileType(tile, MP_HOUSE))) || (not_yet_constructed && tile == INVALID_TILE)); + this->root_spritegroup = HouseSpec::Get(house_id)->grf_prop.spritegroup[0]; } @@ -210,14 +213,12 @@ void DecreaseBuildingCount(Town *t, HouseID house_id) /* virtual */ uint32_t HouseScopeResolver::GetRandomBits() const { /* Note: Towns build houses over houses. So during construction checks 'tile' may be a valid but unrelated house. */ - assert(IsValidTile(this->tile) && (this->not_yet_constructed || IsTileType(this->tile, MP_HOUSE))); return this->not_yet_constructed ? this->initial_random_bits : GetHouseRandomBits(this->tile); } /* virtual */ uint32_t HouseScopeResolver::GetTriggers() const { /* Note: Towns build houses over houses. So during construction checks 'tile' may be a valid but unrelated house. */ - assert(IsValidTile(this->tile) && (this->not_yet_constructed || IsTileType(this->tile, MP_HOUSE))); return this->not_yet_constructed ? 0 : GetHouseTriggers(this->tile); } @@ -362,6 +363,32 @@ static uint32_t GetDistanceFromNearbyHouse(uint8_t parameter, TileIndex tile, Ho */ /* virtual */ uint32_t HouseScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const { + if (this->tile == INVALID_TILE) { + /* House does not yet exist, nor is it being planned to exist. Provide some default values intead. */ + switch (variable) { + case 0x40: return TOWN_HOUSE_COMPLETED | this->view << 2; /* Construction stage. */ + case 0x41: return 0; + case 0x42: return 0; + case 0x43: return 0; + case 0x44: return 0; + case 0x45: return _generating_world ? 1 : 0; + case 0x46: return 0; + case 0x47: return 0; + case 0x60: return 0; + case 0x61: return 0; + case 0x62: return 0; + case 0x63: return 0; + case 0x64: return 0; + case 0x65: return 0; + case 0x66: return 0xFFFFFFFF; /* Class and ID of nearby house. */ + case 0x67: return 0; + } + + Debug(grf, 1, "Unhandled house variable 0x{:X}", variable); + *available = false; + return UINT_MAX; + } + switch (variable) { /* Construction stage. */ case 0x40: return (IsTileType(this->tile, MP_HOUSE) ? GetHouseBuildingStage(this->tile) : 0) | TileHash2Bit(TileX(this->tile), TileY(this->tile)) << 2; @@ -481,12 +508,10 @@ static uint32_t GetDistanceFromNearbyHouse(uint8_t parameter, TileIndex tile, Ho } uint16_t GetHouseCallback(CallbackID callback, uint32_t param1, uint32_t param2, HouseID house_id, Town *town, TileIndex tile, - bool not_yet_constructed, uint8_t initial_random_bits, CargoTypes watched_cargo_triggers) + bool not_yet_constructed, uint8_t initial_random_bits, CargoTypes watched_cargo_triggers, int view) { - assert(IsValidTile(tile) && (not_yet_constructed || IsTileType(tile, MP_HOUSE))); - HouseResolverObject object(house_id, tile, town, callback, param1, param2, - not_yet_constructed, initial_random_bits, watched_cargo_triggers); + not_yet_constructed, initial_random_bits, watched_cargo_triggers, view); return object.ResolveCallback(); } diff --git a/src/newgrf_house.h b/src/newgrf_house.h index 1987406777..a56b5390e8 100644 --- a/src/newgrf_house.h +++ b/src/newgrf_house.h @@ -24,6 +24,7 @@ struct HouseScopeResolver : public ScopeResolver { bool not_yet_constructed; ///< True for construction check. uint16_t initial_random_bits; ///< Random bits during construction checks. CargoTypes watched_cargo_triggers; ///< Cargo types that triggered the watched cargo callback. + int view; ///< View when house does yet exist. /** * Constructor of a house scope resolver. @@ -36,9 +37,9 @@ struct HouseScopeResolver : public ScopeResolver { * @param watched_cargo_triggers Cargo types that triggered the watched cargo callback. */ HouseScopeResolver(ResolverObject &ro, HouseID house_id, TileIndex tile, Town *town, - bool not_yet_constructed, uint8_t initial_random_bits, CargoTypes watched_cargo_triggers) + bool not_yet_constructed, uint8_t initial_random_bits, CargoTypes watched_cargo_triggers, int view) : ScopeResolver(ro), house_id(house_id), tile(tile), town(town), not_yet_constructed(not_yet_constructed), - initial_random_bits(initial_random_bits), watched_cargo_triggers(watched_cargo_triggers) + initial_random_bits(initial_random_bits), watched_cargo_triggers(watched_cargo_triggers), view(view) { } @@ -54,7 +55,7 @@ struct HouseResolverObject : public ResolverObject { HouseResolverObject(HouseID house_id, TileIndex tile, Town *town, CallbackID callback = CBID_NO_CALLBACK, uint32_t param1 = 0, uint32_t param2 = 0, - bool not_yet_constructed = false, uint8_t initial_random_bits = 0, CargoTypes watched_cargo_triggers = 0); + bool not_yet_constructed = false, uint8_t initial_random_bits = 0, CargoTypes watched_cargo_triggers = 0, int view = 0); ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, uint8_t relative = 0) override { @@ -94,13 +95,14 @@ void InitializeBuildingCounts(); void InitializeBuildingCounts(Town *t); void IncreaseBuildingCount(Town *t, HouseID house_id); void DecreaseBuildingCount(Town *t, HouseID house_id); +std::span GetBuildingHouseIDCounts(); void DrawNewHouseTile(TileInfo *ti, HouseID house_id); void AnimateNewHouseTile(TileIndex tile); void AnimateNewHouseConstruction(TileIndex tile); uint16_t GetHouseCallback(CallbackID callback, uint32_t param1, uint32_t param2, HouseID house_id, Town *town, TileIndex tile, - bool not_yet_constructed = false, uint8_t initial_random_bits = 0, CargoTypes watched_cargo_triggers = 0); + bool not_yet_constructed = false, uint8_t initial_random_bits = 0, CargoTypes watched_cargo_triggers = 0, int view = 0); void WatchedCargoCallback(TileIndex tile, CargoTypes trigger_cargoes); bool CanDeleteHouse(TileIndex tile); From 874cfe000ba64815eb59e211d5f852f7e6d894ef Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 14 May 2024 17:29:58 +0100 Subject: [PATCH 537/695] Codechange: Set underlying type for HouseSpec enums. --- src/house.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/house.h b/src/house.h index f80aeb3746..63e0344c71 100644 --- a/src/house.h +++ b/src/house.h @@ -32,7 +32,7 @@ static const HouseID INVALID_HOUSE_ID = 0xFFFF; static const uint HOUSE_NUM_ACCEPTS = 16; ///< Max number of cargoes accepted by a tile static const uint HOUSE_ORIGINAL_NUM_ACCEPTS = 3; ///< Original number of accepted cargo types. -enum BuildingFlags { +enum BuildingFlags : uint8_t { TILE_NO_FLAG = 0, TILE_SIZE_1x1 = 1U << 0, TILE_NOT_SLOPED = 1U << 1, @@ -50,7 +50,7 @@ enum BuildingFlags { }; DECLARE_ENUM_AS_BIT_SET(BuildingFlags) -enum HouseZonesBits { +enum HouseZonesBits : uint8_t { HZB_BEGIN = 0, HZB_TOWN_EDGE = 0, HZB_TOWN_OUTSKIRT, @@ -63,7 +63,7 @@ static_assert(HZB_END == 5); DECLARE_POSTFIX_INCREMENT(HouseZonesBits) -enum HouseZones { ///< Bit Value Meaning +enum HouseZones : uint16_t { HZ_NOZNS = 0x0000, ///< 0 This is just to get rid of zeros, meaning none HZ_ZON1 = 1U << HZB_TOWN_EDGE, ///< 0..4 1,2,4,8,10 which town zones the building can be built in, Zone1 been the further suburb HZ_ZON2 = 1U << HZB_TOWN_OUTSKIRT, @@ -80,7 +80,7 @@ enum HouseZones { ///< Bit Value Meaning }; DECLARE_ENUM_AS_BIT_SET(HouseZones) -enum HouseExtraFlags { +enum HouseExtraFlags : uint8_t { NO_EXTRA_FLAG = 0, BUILDING_IS_HISTORICAL = 1U << 0, ///< this house will only appear during town generation in random games, thus the historical BUILDING_IS_PROTECTED = 1U << 1, ///< towns and AI will not remove this house, while human players will be able to From ed67aedabf8383447bd7f541b139f3c3e00bf536 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 14 May 2024 17:29:59 +0100 Subject: [PATCH 538/695] Feature: Allow manually placing town buildings in scenario editor. House picker is accessed from the Landscaping toolbar as there is no town toolbar. Once placed these houses behave like any other and can be removed by players and towns. Uses the unified picker system, so also supports used/saved favourites. As town building don't have class labels, town zones are use to imitate them. --- src/house.h | 2 + src/lang/english.txt | 14 ++ src/newgrf_house.cpp | 9 ++ src/terraform_gui.cpp | 1 + src/toolbar_gui.cpp | 23 +-- src/town.h | 1 + src/town_cmd.cpp | 5 + src/town_gui.cpp | 321 ++++++++++++++++++++++++++++++++++++++++++ src/window_type.h | 6 + 9 files changed, 374 insertions(+), 8 deletions(-) diff --git a/src/house.h b/src/house.h index 63e0344c71..04cddb5c2d 100644 --- a/src/house.h +++ b/src/house.h @@ -136,4 +136,6 @@ inline HouseID GetTranslatedHouseID(HouseID hid) return hs->grf_prop.override == INVALID_HOUSE_ID ? hid : hs->grf_prop.override; } +void ShowBuildHousePicker(struct Window *); + #endif /* HOUSE_H */ diff --git a/src/lang/english.txt b/src/lang/english.txt index 12eed0068a..6d64e76672 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -437,6 +437,9 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Abandon scenari STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Exit +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Generate towns +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Place houses + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Game options @@ -2814,6 +2817,16 @@ STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Select a lorry STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Select a lorry station type to build. Ctrl+Click to add or remove in saved items STR_PICKER_OBJECT_CLASS_TOOLTIP :Select an object class to display STR_PICKER_OBJECT_TYPE_TOOLTIP :Select an object type to build. Ctrl+Click to add or remove in saved items. Ctrl+Click+Drag to select the area diagonally. Also press Shift to show cost estimate only +STR_PICKER_HOUSE_CLASS_TOOLTIP :Select a town zone to display +STR_PICKER_HOUSE_TYPE_TOOLTIP :Select a house type to build. Ctrl+Click to add or remove in saved items + +STR_HOUSE_PICKER_CAPTION :House Selection + +STR_HOUSE_PICKER_CLASS_ZONE1 :Edge +STR_HOUSE_PICKER_CLASS_ZONE2 :Outskirts +STR_HOUSE_PICKER_CLASS_ZONE3 :Outer Suburbs +STR_HOUSE_PICKER_CLASS_ZONE4 :Inner Suburbs +STR_HOUSE_PICKER_CLASS_ZONE5 :Town centre STR_STATION_CLASS_DFLT :Default STR_STATION_CLASS_DFLT_STATION :Default station @@ -5001,6 +5014,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... ther STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Road works in progress STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Can't delete this town...{}A station or depot is referring to the town or a town owned tile can't be removed STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... there is no suitable place for a statue in the centre of this town +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Can't build house... # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... too many industries diff --git a/src/newgrf_house.cpp b/src/newgrf_house.cpp index 4f98c088b1..cd90684a53 100644 --- a/src/newgrf_house.cpp +++ b/src/newgrf_house.cpp @@ -172,6 +172,15 @@ void InitializeBuildingCounts() } } +/** + * Get read-only span of total HouseID building counts. + * @return span of HouseID building counts. + */ +std::span GetBuildingHouseIDCounts() +{ + return _building_counts.id_count; +} + /** * IncreaseBuildingCount() * Increase the count of a building when it has been added by a town. diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp index 417c7fa427..df1d442742 100644 --- a/src/terraform_gui.cpp +++ b/src/terraform_gui.cpp @@ -12,6 +12,7 @@ #include "clear_map.h" #include "company_func.h" #include "company_base.h" +#include "house.h" #include "gui.h" #include "window_gui.h" #include "window_func.h" diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 1f71b10671..77a5b265b9 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -16,6 +16,7 @@ #include "dropdown_type.h" #include "dropdown_func.h" #include "dropdown_common_type.h" +#include "house.h" #include "vehicle_gui.h" #include "rail_gui.h" #include "road.h" @@ -1211,12 +1212,18 @@ static CallBackFunction ToolbarScenGenLand(Window *w) return CBF_NONE; } - -static CallBackFunction ToolbarScenGenTown(Window *w) +static CallBackFunction ToolbarScenGenTownClick(Window *w) { - w->HandleButtonClick(WID_TE_TOWN_GENERATE); - if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); - ShowFoundTownWindow(); + PopupMainToolbarMenu(w, WID_TE_TOWN_GENERATE, {STR_SCENEDIT_TOWN_MENU_BUILD_TOWN, STR_SCENEDIT_TOWN_MENU_PACE_HOUSE}); + return CBF_NONE; +} + +static CallBackFunction ToolbarScenGenTown(int index) +{ + switch (index) { + case 0: ShowFoundTownWindow(); break; + case 1: ShowBuildHousePicker(nullptr); break; + } return CBF_NONE; } @@ -2223,7 +2230,7 @@ static MenuClickedProc * const _scen_toolbar_dropdown_procs[] = { nullptr, // 9 nullptr, // 10 nullptr, // 11 - nullptr, // 12 + ToolbarScenGenTown, // 12 nullptr, // 13 ToolbarScenBuildRoad, // 14 ToolbarScenBuildTram, // 15 @@ -2249,7 +2256,7 @@ static ToolbarButtonProc * const _scen_toolbar_button_procs[] = { ToolbarZoomInClick, ToolbarZoomOutClick, ToolbarScenGenLand, - ToolbarScenGenTown, + ToolbarScenGenTownClick, ToolbarScenGenIndustry, ToolbarScenBuildRoadClick, ToolbarScenBuildTramClick, @@ -2376,7 +2383,7 @@ struct ScenarioEditorToolbarWindow : Window { case MTEHK_SETTINGS: ShowGameOptions(); break; case MTEHK_SAVEGAME: MenuClickSaveLoad(); break; case MTEHK_GENLAND: ToolbarScenGenLand(this); break; - case MTEHK_GENTOWN: ToolbarScenGenTown(this); break; + case MTEHK_GENTOWN: ToolbarScenGenTownClick(this); break; case MTEHK_GENINDUSTRY: ToolbarScenGenIndustry(this); break; case MTEHK_BUILD_ROAD: ToolbarScenBuildRoadClick(this); break; case MTEHK_BUILD_TRAM: ToolbarScenBuildTramClick(this); break; diff --git a/src/town.h b/src/town.h index 5034041136..ce930bb180 100644 --- a/src/town.h +++ b/src/town.h @@ -320,5 +320,6 @@ inline uint16_t TownTicksToGameTicks(uint16_t ticks) RoadType GetTownRoadType(); bool CheckTownRoadTypes(); +std::span GetTownDrawTileData(); #endif /* TOWN_H */ diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 5a339161f7..192b369ca7 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -4066,3 +4066,8 @@ extern const TileTypeProcs _tile_type_town_procs = { GetFoundation_Town, // get_foundation_proc TerraformTile_Town, // terraform_tile_proc }; + +std::span GetTownDrawTileData() +{ + return _town_draw_tile_data; +} diff --git a/src/town_gui.cpp b/src/town_gui.cpp index a4d9f40761..0b8b39e5c6 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -12,6 +12,9 @@ #include "viewport_func.h" #include "error.h" #include "gui.h" +#include "house.h" +#include "newgrf_house.h" +#include "picker_gui.h" #include "command_func.h" #include "company_func.h" #include "company_base.h" @@ -1304,3 +1307,321 @@ void InitializeTownGui() { _town_local_authority_kdtree.Clear(); } + +/** + * Draw representation of a house tile for GUI purposes. + * @param x Position x of image. + * @param y Position y of image. + * @param spec House spec to draw. + * @param house_id House ID to draw. + * @param view The house's 'view'. + */ +void DrawNewHouseTileInGUI(int x, int y, const HouseSpec *spec, HouseID house_id, int view) +{ + HouseResolverObject object(house_id, INVALID_TILE, nullptr, CBID_NO_CALLBACK, 0, 0, true, view); + const SpriteGroup *group = object.Resolve(); + if (group == nullptr || group->type != SGT_TILELAYOUT) return; + + uint8_t stage = TOWN_HOUSE_COMPLETED; + const DrawTileSprites *dts = reinterpret_cast(group)->ProcessRegisters(&stage); + + PaletteID palette = GENERAL_SPRITE_COLOUR(spec->random_colour[0]); + if (HasBit(spec->callback_mask, CBM_HOUSE_COLOUR)) { + uint16_t callback = GetHouseCallback(CBID_HOUSE_COLOUR, 0, 0, house_id, nullptr, INVALID_TILE, true, view); + if (callback != CALLBACK_FAILED) { + /* If bit 14 is set, we should use a 2cc colour map, else use the callback value. */ + palette = HasBit(callback, 14) ? GB(callback, 0, 8) + SPR_2CCMAP_BASE : callback; + } + } + + SpriteID image = dts->ground.sprite; + PaletteID pal = dts->ground.pal; + + if (HasBit(image, SPRITE_MODIFIER_CUSTOM_SPRITE)) image += stage; + if (HasBit(pal, SPRITE_MODIFIER_CUSTOM_SPRITE)) pal += stage; + + if (GB(image, 0, SPRITE_WIDTH) != 0) { + DrawSprite(image, GroundSpritePaletteTransform(image, pal, palette), x, y); + } + + DrawNewGRFTileSeqInGUI(x, y, dts, stage, palette); +} + +/** + * Draw a house that does not exist. + * @param x Position x of image. + * @param y Position y of image. + * @param house_id House ID to draw. + * @param view The house's 'view'. + */ +void DrawHouseInGUI(int x, int y, HouseID house_id, int view) +{ + auto draw = [](int x, int y, HouseID house_id, int view) { + if (house_id >= NEW_HOUSE_OFFSET) { + /* Houses don't necessarily need new graphics. If they don't have a + * spritegroup associated with them, then the sprite for the substitute + * house id is drawn instead. */ + const HouseSpec *spec = HouseSpec::Get(house_id); + if (spec->grf_prop.spritegroup[0] != nullptr) { + DrawNewHouseTileInGUI(x, y, spec, house_id, view); + return; + } else { + house_id = HouseSpec::Get(house_id)->grf_prop.subst_id; + } + } + + /* Retrieve data from the draw town tile struct */ + const DrawBuildingsTileStruct &dcts = GetTownDrawTileData()[house_id << 4 | view << 2 | TOWN_HOUSE_COMPLETED]; + DrawSprite(dcts.ground.sprite, dcts.ground.pal, x, y); + + /* Add a house on top of the ground? */ + if (dcts.building.sprite != 0) { + Point pt = RemapCoords(dcts.subtile_x, dcts.subtile_y, 0); + DrawSprite(dcts.building.sprite, dcts.building.pal, x + UnScaleGUI(pt.x), y + UnScaleGUI(pt.y)); + } + }; + + /* Houses can have 1x1, 1x2, 2x1 and 2x2 layouts which are individual HouseIDs. For the GUI we need + * draw all of the tiles with appropriate positions. */ + int x_delta = ScaleGUITrad(TILE_PIXELS); + int y_delta = ScaleGUITrad(TILE_PIXELS / 2); + + const HouseSpec *hs = HouseSpec::Get(house_id); + if (hs->building_flags & TILE_SIZE_2x2) { + draw(x, y - y_delta - y_delta, house_id, view); // North corner. + draw(x + x_delta, y - y_delta, house_id + 1, view); // West corner. + draw(x - x_delta, y - y_delta, house_id + 2, view); // East corner. + draw(x, y, house_id + 3, view); // South corner. + } else if (hs->building_flags & TILE_SIZE_2x1) { + draw(x + x_delta / 2, y - y_delta, house_id, view); // North east tile. + draw(x - x_delta / 2, y, house_id + 1, view); // South west tile. + } else if (hs->building_flags & TILE_SIZE_1x2) { + draw(x - x_delta / 2, y - y_delta, house_id, view); // North west tile. + draw(x + x_delta / 2, y, house_id + 1, view); // South east tile. + } else { + draw(x, y, house_id, view); + } +} + + +class HousePickerCallbacks : public PickerCallbacks { +public: + HousePickerCallbacks() : PickerCallbacks("fav_houses") {} + + /** + * Set climate mask for filtering buildings from current landscape. + */ + void SetClimateMask() + { + switch (_settings_game.game_creation.landscape) { + case LT_TEMPERATE: climate_mask = HZ_TEMP; break; + case LT_ARCTIC: climate_mask = HZ_SUBARTC_ABOVE | HZ_SUBARTC_BELOW; break; + case LT_TROPIC: climate_mask = HZ_SUBTROPIC; break; + case LT_TOYLAND: climate_mask = HZ_TOYLND; break; + default: NOT_REACHED(); + } + } + + HouseZones climate_mask; + + static inline int sel_class; ///< Currently selected 'class'. + static inline int sel_type; ///< Currently selected HouseID. + static inline int sel_view; ///< Currently selected 'view'. This is not controllable as its based on random data. + + /* Houses do not have classes like NewGRFClass. We'll make up fake classes based on town zone + * availability instead. */ + static inline const std::array zone_names = { + STR_HOUSE_PICKER_CLASS_ZONE1, + STR_HOUSE_PICKER_CLASS_ZONE2, + STR_HOUSE_PICKER_CLASS_ZONE3, + STR_HOUSE_PICKER_CLASS_ZONE4, + STR_HOUSE_PICKER_CLASS_ZONE5, + }; + + StringID GetClassTooltip() const override { return STR_PICKER_HOUSE_CLASS_TOOLTIP; } + StringID GetTypeTooltip() const override { return STR_PICKER_HOUSE_TYPE_TOOLTIP; } + bool IsActive() const override { return true; } + + bool HasClassChoice() const override { return true; } + int GetClassCount() const override { return static_cast(zone_names.size()); } + + void Close([[maybe_unused]] int data) override { ResetObjectToPlace(); } + + int GetSelectedClass() const override { return HousePickerCallbacks::sel_class; } + void SetSelectedClass(int cls_id) const override { HousePickerCallbacks::sel_class = cls_id; } + + StringID GetClassName(int id) const override + { + if (id < GetClassCount()) return zone_names[id]; + return INVALID_STRING_ID; + } + + int GetTypeCount(int cls_id) const override + { + if (cls_id < GetClassCount()) return static_cast(HouseSpec::Specs().size()); + return 0; + } + + PickerItem GetPickerItem(int cls_id, int id) const override + { + const auto *spec = HouseSpec::Get(id); + if (spec->grf_prop.grffile == nullptr) return {0, spec->Index(), cls_id, id}; + return {spec->grf_prop.grffile->grfid, spec->grf_prop.local_id, cls_id, id}; + } + + int GetSelectedType() const override { return sel_type; } + void SetSelectedType(int id) const override { sel_type = id; } + + StringID GetTypeName(int cls_id, int id) const override + { + const HouseSpec *spec = HouseSpec::Get(id); + if (spec == nullptr) return INVALID_STRING_ID; + if (!spec->enabled) return INVALID_STRING_ID; + if ((spec->building_availability & climate_mask) == 0) return INVALID_STRING_ID; + if (!HasBit(spec->building_availability, cls_id)) return INVALID_STRING_ID; + for (int i = 0; i < cls_id; i++) { + /* Don't include if it's already included in an earlier zone. */ + if (HasBit(spec->building_availability, i)) return INVALID_STRING_ID; + } + + return spec->building_name; + } + + bool IsTypeAvailable(int, int id) const override + { + const HouseSpec *hs = HouseSpec::Get(id); + if (!hs->enabled) return false; + if (TimerGameCalendar::year < hs->min_year || TimerGameCalendar::year > hs->max_year) return false; + return true; + } + + void DrawType(int x, int y, int, int id) const override + { + DrawHouseInGUI(x, y, id, HousePickerCallbacks::sel_view); + } + + void FillUsedItems(std::set &items) override + { + auto id_count = GetBuildingHouseIDCounts(); + for (auto it = id_count.begin(); it != id_count.end(); ++it) { + if (*it == 0) continue; + HouseID house = static_cast(std::distance(id_count.begin(), it)); + const HouseSpec *hs = HouseSpec::Get(house); + int class_index = FindFirstBit(hs->building_availability & HZ_ZONALL); + items.insert({0, house, class_index, house}); + } + } + + std::set UpdateSavedItems(const std::set &src) override + { + if (src.empty()) return src; + + const auto specs = HouseSpec::Specs(); + std::set dst; + for (const auto &item : src) { + if (item.grfid == 0) { + dst.insert(item); + } else { + /* Search for spec by grfid and local index. */ + auto it = std::find_if(specs.begin(), specs.end(), [&item](const HouseSpec &spec) { return spec.grf_prop.grffile != nullptr && spec.grf_prop.grffile->grfid == item.grfid && spec.grf_prop.local_id == item.local_id; }); + if (it == specs.end()) { + /* Not preset, hide from UI. */ + dst.insert({item.grfid, item.local_id, -1, -1}); + } else { + int class_index = FindFirstBit(it->building_availability & HZ_ZONALL); + dst.insert( {item.grfid, item.local_id, class_index, it->Index()}); + } + } + } + + return dst; + } + + static HousePickerCallbacks instance; +}; +/* static */ HousePickerCallbacks HousePickerCallbacks::instance; + +struct BuildHouseWindow : public PickerWindow { + BuildHouseWindow(WindowDesc *desc, Window *parent) : PickerWindow(desc, parent, 0, HousePickerCallbacks::instance) + { + HousePickerCallbacks::instance.SetClimateMask(); + this->ConstructWindow(); + this->InvalidateData(); + } + + void UpdateSelectSize(const HouseSpec *spec) + { + if (spec == nullptr) { + SetTileSelectSize(1, 1); + ResetObjectToPlace(); + } else { + SetObjectToPlaceWnd(SPR_CURSOR_TOWN, PAL_NONE, HT_RECT | HT_DIAGONAL, this); + if (spec->building_flags & TILE_SIZE_2x2) { + SetTileSelectSize(2, 2); + } else if (spec->building_flags & TILE_SIZE_2x1) { + SetTileSelectSize(2, 1); + } else if (spec->building_flags & TILE_SIZE_1x2) { + SetTileSelectSize(1, 2); + } else if (spec->building_flags & TILE_SIZE_1x1) { + SetTileSelectSize(1, 1); + } + } + } + + void OnInvalidateData(int data = 0, bool gui_scope = true) override + { + this->PickerWindow::OnInvalidateData(data, gui_scope); + if (!gui_scope) return; + + if ((data & PickerWindow::PFI_POSITION) != 0) { + const HouseSpec *spec = HouseSpec::Get(HousePickerCallbacks::sel_type); + UpdateSelectSize(spec); + } + } + + void OnPlaceObject([[maybe_unused]] Point pt, TileIndex tile) override + { + const HouseSpec *spec = HouseSpec::Get(HousePickerCallbacks::sel_type); + Command::Post(STR_ERROR_CAN_T_BUILD_HOUSE, CcPlaySound_CONSTRUCTION_OTHER, tile, spec->Index()); + } + + IntervalTimer view_refresh_interval = {std::chrono::milliseconds(2500), [this](auto) { + /* There are four different 'views' that are random based on house tile position. As this is not + * user-controllable, instead we automatically cycle through them. */ + HousePickerCallbacks::sel_view = (HousePickerCallbacks::sel_view + 1) % 4; + this->SetDirty(); + }}; + + static inline HotkeyList hotkeys{"buildhouse", { + Hotkey('F', "focus_filter_box", PCWHK_FOCUS_FILTER_BOX), + }}; +}; + +/** Nested widget definition for the build NewGRF rail waypoint window */ +static constexpr NWidgetPart _nested_build_house_widgets[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), + NWidget(WWT_CAPTION, COLOUR_DARK_GREEN), SetDataTip(STR_HOUSE_PICKER_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_SHADEBOX, COLOUR_DARK_GREEN), + NWidget(WWT_DEFSIZEBOX, COLOUR_DARK_GREEN), + NWidget(WWT_STICKYBOX, COLOUR_DARK_GREEN), + EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidgetFunction(MakePickerClassWidgets), + NWidgetFunction(MakePickerTypeWidgets), + EndContainer(), +}; + +static WindowDesc _build_house_desc( + WDP_AUTO, "build_house", 0, 0, + WC_BUILD_HOUSE, WC_BUILD_TOOLBAR, + WDF_CONSTRUCTION, + std::begin(_nested_build_house_widgets), std::end(_nested_build_house_widgets), + &BuildHouseWindow::hotkeys +); + +void ShowBuildHousePicker(Window *parent) +{ + if (BringWindowToFrontById(WC_BUILD_HOUSE, 0)) return; + new BuildHouseWindow(&_build_house_desc, parent); +} diff --git a/src/window_type.h b/src/window_type.h index a677c34cdd..0896d5ff6f 100644 --- a/src/window_type.h +++ b/src/window_type.h @@ -375,6 +375,12 @@ enum WindowClass { */ WC_BUILD_OBJECT, + /** + * Build house; %Window numbers: + * - 0 = #BuildHouseWidgets + */ + WC_BUILD_HOUSE, + /** * Build vehicle; %Window numbers: * - #VehicleType = #BuildVehicleWidgets From 980dcaac6e7654a6146306ef00834e19b22696ab Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 14 May 2024 21:13:26 +0100 Subject: [PATCH 539/695] Cleanup: Remove GetFontTable from FontCache. (#12677) This interface is no longer used, so does not need to be implemented. Removes manual memory management with malloc/free. --- src/fontcache.h | 8 -------- src/fontcache/freetypefontcache.cpp | 17 ----------------- src/fontcache/spritefontcache.h | 1 - src/fontcache/truetypefontcache.cpp | 18 ------------------ src/fontcache/truetypefontcache.h | 5 ----- src/os/macosx/font_osx.cpp | 12 ------------ src/os/macosx/font_osx.h | 1 - src/os/windows/font_win32.cpp | 14 -------------- src/os/windows/font_win32.h | 1 - src/tests/mock_fontcache.h | 1 - 10 files changed, 78 deletions(-) diff --git a/src/fontcache.h b/src/fontcache.h index 648fe4caa4..769bc66ac7 100644 --- a/src/fontcache.h +++ b/src/fontcache.h @@ -106,14 +106,6 @@ public: */ virtual GlyphID MapCharToGlyph(char32_t key, bool fallback = true) = 0; - /** - * Read a font table from the font. - * @param tag The of the table to load. - * @param length The length of the read data. - * @return The loaded table data. - */ - virtual const void *GetFontTable(uint32_t tag, size_t &length) = 0; - /** * Get the native OS font handle, if there is one. * @return Opaque OS font handle. diff --git a/src/fontcache/freetypefontcache.cpp b/src/fontcache/freetypefontcache.cpp index a16e76b055..e0fc7a2b61 100644 --- a/src/fontcache/freetypefontcache.cpp +++ b/src/fontcache/freetypefontcache.cpp @@ -34,7 +34,6 @@ private: FT_Face face; ///< The font face associated with this font. void SetFontSize(int pixels); - const void *InternalGetFontTable(uint32_t tag, size_t &length) override; const Sprite *InternalGetGlyph(GlyphID key, bool aa) override; public: @@ -324,22 +323,6 @@ GlyphID FreeTypeFontCache::MapCharToGlyph(char32_t key, bool allow_fallback) return glyph; } -const void *FreeTypeFontCache::InternalGetFontTable(uint32_t tag, size_t &length) -{ - FT_ULong len = 0; - FT_Byte *result = nullptr; - - FT_Load_Sfnt_Table(this->face, tag, 0, nullptr, &len); - - if (len > 0) { - result = MallocT(len); - FT_Load_Sfnt_Table(this->face, tag, 0, result, &len); - } - - length = len; - return result; -} - /** * Free everything allocated w.r.t. freetype. */ diff --git a/src/fontcache/spritefontcache.h b/src/fontcache/spritefontcache.h index e35cb1a5d6..e176aeb9b1 100644 --- a/src/fontcache/spritefontcache.h +++ b/src/fontcache/spritefontcache.h @@ -30,7 +30,6 @@ public: uint GetGlyphWidth(GlyphID key) override; bool GetDrawGlyphShadow() override; GlyphID MapCharToGlyph(char32_t key, [[maybe_unused]] bool allow_fallback = true) override { assert(IsPrintable(key)); return SPRITE_GLYPH | key; } - const void *GetFontTable(uint32_t, size_t &length) override { length = 0; return nullptr; } std::string GetFontName() override { return "sprite"; } bool IsBuiltInFont() override { return true; } }; diff --git a/src/fontcache/truetypefontcache.cpp b/src/fontcache/truetypefontcache.cpp index 9e16c363c1..462eac249e 100644 --- a/src/fontcache/truetypefontcache.cpp +++ b/src/fontcache/truetypefontcache.cpp @@ -33,10 +33,6 @@ TrueTypeFontCache::~TrueTypeFontCache() { /* Virtual functions get called statically in destructors, so make it explicit to remove any confusion. */ this->TrueTypeFontCache::ClearFontCache(); - - for (auto &iter : this->font_tables) { - free(iter.second.second); - } } /** @@ -164,17 +160,3 @@ const Sprite *TrueTypeFontCache::GetGlyph(GlyphID key) return this->InternalGetGlyph(key, GetFontAAState()); } - -const void *TrueTypeFontCache::GetFontTable(uint32_t tag, size_t &length) -{ - const auto iter = this->font_tables.find(tag); - if (iter != this->font_tables.end()) { - length = iter->second.first; - return iter->second.second; - } - - const void *result = this->InternalGetFontTable(tag, length); - - this->font_tables[tag] = std::pair(length, result); - return result; -} diff --git a/src/fontcache/truetypefontcache.h b/src/fontcache/truetypefontcache.h index 53f1965816..8433e6ddbd 100644 --- a/src/fontcache/truetypefontcache.h +++ b/src/fontcache/truetypefontcache.h @@ -27,9 +27,6 @@ protected: int req_size; ///< Requested font size. int used_size; ///< Used font size. - using FontTable = std::map>; ///< Table with font table cache - FontTable font_tables; ///< Cached font tables. - /** Container for information about a glyph. */ struct GlyphEntry { Sprite *sprite; ///< The loaded sprite. @@ -55,7 +52,6 @@ protected: GlyphEntry *GetGlyphPtr(GlyphID key); void SetGlyphPtr(GlyphID key, const GlyphEntry *glyph, bool duplicate = false); - virtual const void *InternalGetFontTable(uint32_t tag, size_t &length) = 0; virtual const Sprite *InternalGetGlyph(GlyphID key, bool aa) = 0; public: @@ -65,7 +61,6 @@ public: void SetUnicodeGlyph(char32_t key, SpriteID sprite) override { this->parent->SetUnicodeGlyph(key, sprite); } void InitializeUnicodeGlyphMap() override { this->parent->InitializeUnicodeGlyphMap(); } const Sprite *GetGlyph(GlyphID key) override; - const void *GetFontTable(uint32_t tag, size_t &length) override; void ClearFontCache() override; uint GetGlyphWidth(GlyphID key) override; bool GetDrawGlyphShadow() override; diff --git a/src/os/macosx/font_osx.cpp b/src/os/macosx/font_osx.cpp index 7cb557fed3..2bd290f4e6 100644 --- a/src/os/macosx/font_osx.cpp +++ b/src/os/macosx/font_osx.cpp @@ -204,18 +204,6 @@ GlyphID CoreTextFontCache::MapCharToGlyph(char32_t key, bool allow_fallback) return 0; } -const void *CoreTextFontCache::InternalGetFontTable(uint32_t tag, size_t &length) -{ - CFAutoRelease data(CTFontCopyTable(this->font.get(), (CTFontTableTag)tag, kCTFontTableOptionNoOptions)); - if (!data) return nullptr; - - length = CFDataGetLength(data.get()); - auto buf = MallocT(length); - - CFDataGetBytes(data.get(), CFRangeMake(0, (CFIndex)length), buf); - return buf; -} - const Sprite *CoreTextFontCache::InternalGetGlyph(GlyphID key, bool use_aa) { /* Get glyph size. */ diff --git a/src/os/macosx/font_osx.h b/src/os/macosx/font_osx.h index ca2ac1d5e9..3ef86fba99 100644 --- a/src/os/macosx/font_osx.h +++ b/src/os/macosx/font_osx.h @@ -23,7 +23,6 @@ class CoreTextFontCache : public TrueTypeFontCache { void SetFontSize(int pixels); const Sprite *InternalGetGlyph(GlyphID key, bool use_aa) override; - const void *InternalGetFontTable(uint32_t tag, size_t &length) override; public: CoreTextFontCache(FontSize fs, CFAutoRelease &&font, int pixels); ~CoreTextFontCache() {} diff --git a/src/os/windows/font_win32.cpp b/src/os/windows/font_win32.cpp index 767dfb83ab..cb82b2b794 100644 --- a/src/os/windows/font_win32.cpp +++ b/src/os/windows/font_win32.cpp @@ -284,20 +284,6 @@ void Win32FontCache::ClearFontCache() return allow_fallback && key >= SCC_SPRITE_START && key <= SCC_SPRITE_END ? this->parent->MapCharToGlyph(key) : 0; } -/* virtual */ const void *Win32FontCache::InternalGetFontTable(uint32_t tag, size_t &length) -{ - DWORD len = GetFontData(this->dc, tag, 0, nullptr, 0); - - void *result = nullptr; - if (len != GDI_ERROR && len > 0) { - result = MallocT(len); - GetFontData(this->dc, tag, 0, result, len); - } - - length = len; - return result; -} - static bool TryLoadFontFromFile(const std::string &font_name, LOGFONT &logfont) { diff --git a/src/os/windows/font_win32.h b/src/os/windows/font_win32.h index bdb2cc9a9b..5d5555341c 100644 --- a/src/os/windows/font_win32.h +++ b/src/os/windows/font_win32.h @@ -28,7 +28,6 @@ private: void SetFontSize(int pixels); protected: - const void *InternalGetFontTable(uint32_t tag, size_t &length) override; const Sprite *InternalGetGlyph(GlyphID key, bool aa) override; public: diff --git a/src/tests/mock_fontcache.h b/src/tests/mock_fontcache.h index e6cee2d022..1a43cd1821 100644 --- a/src/tests/mock_fontcache.h +++ b/src/tests/mock_fontcache.h @@ -30,7 +30,6 @@ public: uint GetGlyphWidth(GlyphID) override { return this->height / 2; } bool GetDrawGlyphShadow() override { return false; } GlyphID MapCharToGlyph(char32_t key, [[maybe_unused]] bool allow_fallback = true) override { return key; } - const void *GetFontTable(uint32_t, size_t &length) override { length = 0; return nullptr; } std::string GetFontName() override { return "mock"; } bool IsBuiltInFont() override { return true; } From 56ea00228313b2c6939ab64e2c23544a6f732305 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 15 May 2024 04:41:37 +0000 Subject: [PATCH 540/695] Update: Translations from eints catalan: 16 changes by J0anJosep latvian: 2 changes by lexuslatvia --- src/lang/afrikaans.txt | 3 +++ src/lang/arabic_egypt.txt | 3 +++ src/lang/basque.txt | 3 +++ src/lang/belarusian.txt | 3 +++ src/lang/brazilian_portuguese.txt | 3 +++ src/lang/bulgarian.txt | 3 +++ src/lang/catalan.txt | 19 +++++++++++++++++++ src/lang/chuvash.txt | 3 +++ src/lang/croatian.txt | 3 +++ src/lang/czech.txt | 3 +++ src/lang/danish.txt | 3 +++ src/lang/dutch.txt | 3 +++ src/lang/english_AU.txt | 3 +++ src/lang/english_US.txt | 3 +++ src/lang/esperanto.txt | 3 +++ src/lang/estonian.txt | 3 +++ src/lang/faroese.txt | 3 +++ src/lang/finnish.txt | 3 +++ src/lang/french.txt | 3 +++ src/lang/frisian.txt | 3 +++ src/lang/gaelic.txt | 3 +++ src/lang/galician.txt | 3 +++ src/lang/german.txt | 3 +++ src/lang/greek.txt | 3 +++ src/lang/hebrew.txt | 3 +++ src/lang/hindi.txt | 3 +++ src/lang/hungarian.txt | 3 +++ src/lang/icelandic.txt | 3 +++ src/lang/ido.txt | 3 +++ src/lang/indonesian.txt | 3 +++ src/lang/irish.txt | 3 +++ src/lang/italian.txt | 3 +++ src/lang/japanese.txt | 3 +++ src/lang/korean.txt | 3 +++ src/lang/latin.txt | 3 +++ src/lang/latvian.txt | 5 +++++ src/lang/lithuanian.txt | 3 +++ src/lang/luxembourgish.txt | 3 +++ src/lang/macedonian.txt | 3 +++ src/lang/malay.txt | 3 +++ src/lang/maltese.txt | 3 +++ src/lang/marathi.txt | 3 +++ src/lang/norwegian_bokmal.txt | 3 +++ src/lang/norwegian_nynorsk.txt | 3 +++ src/lang/persian.txt | 3 +++ src/lang/polish.txt | 3 +++ src/lang/portuguese.txt | 3 +++ src/lang/romanian.txt | 3 +++ src/lang/russian.txt | 3 +++ src/lang/serbian.txt | 3 +++ src/lang/simplified_chinese.txt | 3 +++ src/lang/slovak.txt | 3 +++ src/lang/slovenian.txt | 3 +++ src/lang/spanish.txt | 3 +++ src/lang/spanish_MX.txt | 3 +++ src/lang/swedish.txt | 3 +++ src/lang/tamil.txt | 3 +++ src/lang/thai.txt | 3 +++ src/lang/traditional_chinese.txt | 3 +++ src/lang/turkish.txt | 3 +++ src/lang/ukrainian.txt | 3 +++ src/lang/urdu.txt | 3 +++ src/lang/vietnamese.txt | 3 +++ src/lang/welsh.txt | 3 +++ 64 files changed, 210 insertions(+) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index abfda221b7..9dbe309d74 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -387,6 +387,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Verlaat redigee STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Verlaat + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Spel opsies @@ -2396,6 +2397,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bou 'n s + + STR_STATION_CLASS_DFLT :Verstek stasie STR_STATION_CLASS_WAYP :Roetebakens diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 0fd30dbe14..8296611f5f 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -408,6 +408,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :خروج من STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :انهاء + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :إعدادات اللعبه @@ -2263,6 +2264,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}بناء + + STR_STATION_CLASS_DFLT :المحطة القياسية STR_STATION_CLASS_WAYP :نقطة عبور diff --git a/src/lang/basque.txt b/src/lang/basque.txt index d36172f297..6e5a45a4dd 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -377,6 +377,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Eszenario edito STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Irten + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Jokoaren aukerak @@ -2276,6 +2277,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Geltokia + + STR_STATION_CLASS_DFLT :Geltoki lehenetsia STR_STATION_CLASS_WAYP :Bidepuntuak diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 86544b096b..0607876ede 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -750,6 +750,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Выйсьці STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Выхад + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Наладкі гульні @@ -3118,6 +3119,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Пабу + + STR_STATION_CLASS_DFLT :Стандартная станцыя STR_STATION_CLASS_DFLT_STATION :Стандартная чыг. станцыя STR_STATION_CLASS_DFLT_ROADSTOP :Стандартны прыпынак diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index fd238dbf49..ac32ec49eb 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -438,6 +438,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Sair do editor STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Sair + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Opções do jogo @@ -2816,6 +2817,8 @@ STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Escolher um tip STR_PICKER_OBJECT_CLASS_TOOLTIP :Selecionar uma classe de objeto para mostrar STR_PICKER_OBJECT_TYPE_TOOLTIP :Escolher um tipo de objeto para construir. Ctrl+Clique para adicionar ou remover nos itens salvos. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para só mostrar o custo estimado + + STR_STATION_CLASS_DFLT :Padrão STR_STATION_CLASS_DFLT_STATION :Estação padrão STR_STATION_CLASS_DFLT_ROADSTOP :Parada de estrada padrão diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 1c93081ad2..2ddeb07639 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -399,6 +399,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Изход от STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Изход + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Игрови опции @@ -2465,6 +2466,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Стро + + STR_STATION_CLASS_DFLT :Станция по подразбиране STR_STATION_CLASS_WAYP :Пътни точки diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index f6a1237327..8ab9e52fc2 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -438,6 +438,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Surt de l'edito STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Surt + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Opcions de la partida @@ -2798,6 +2799,24 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Seleccio STR_STATION_BUILD_DRAG_DROP :{BLACK}Arrossega i solta STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construeix una estació amb el mètode arrossega i solta. +STR_PICKER_MODE_ALL :Tots +STR_PICKER_MODE_ALL_TOOLTIP :Commuta entre mostrar o no els elements de totes les classes. +STR_PICKER_MODE_USED :Fets servir +STR_PICKER_MODE_USED_TOOLTIP :Commuta entre mostrar o no només els elements que ja s'hagin construït. +STR_PICKER_MODE_SAVED :Desats +STR_PICKER_MODE_SAVED_TOOLTIP :Commuta entre mostrar o no només els elements desats. + +STR_PICKER_STATION_CLASS_TOOLTIP :Trieu quina classe d'estació voleu veure. +STR_PICKER_STATION_TYPE_TOOLTIP :Trieu quin tipus d'estació voleu construir. Amb Ctrl+clic, s'afegeix o es trau l'element de la llista de desats. +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Trieu quina classe de punts de control voleu veure. +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Trieu quin tipus de punt de control voleu construir. Amb Ctrl+clic, s'afegeix o es trau l'element de la llista de desats. +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Trieu quina classe d'estacions d'autobús voleu veure. +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Trieu quin tipus d'estació d'autobús voleu construir. Amb Ctrl+clic, s'afegeix o es trau l'element de la llista de desats. +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Trieu quina classe d'estació de camions voleu veure. +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Trieu un tipus d'estació de camió a construir. Amb Ctrl+clic, s'afegeix o es trau l'element de la llista de desats. +STR_PICKER_OBJECT_CLASS_TOOLTIP :Trieu quina classe d'objectes voleu veure. +STR_PICKER_OBJECT_TYPE_TOOLTIP :Trieu quin tipus d'objecte voleu construir. Amb Ctrl+clic, s'afegeix o es trau l'element de la llista de desats. Amb Ctrl+clic+arrossega es selecciona l'àrea en diagonal. Amb Maj, només es mostrarà el cost estimat de l'acció. + STR_STATION_CLASS_DFLT :Per defecte diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index a6e67827d0..835a6e4102 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -231,6 +231,7 @@ STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Объе STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Вӗҫле + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Вӑййи майлаштару @@ -1057,6 +1058,8 @@ STR_CONTENT_DETAIL_VERSION :{SILVER}Вер + + # Signal window # Bridge selection window diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 7b316863de..ac8576519b 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -485,6 +485,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Odustani od ure STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Izlaz + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Postavke igre @@ -2539,6 +2540,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Napravi + + STR_STATION_CLASS_DFLT :Zadana postaja STR_STATION_CLASS_WAYP :Čvorišta diff --git a/src/lang/czech.txt b/src/lang/czech.txt index a85a351922..d9f359d540 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -512,6 +512,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Ukončit editor STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Ukončit + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Možnosti hry @@ -2873,6 +2874,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Stavět + + STR_STATION_CLASS_DFLT :Původní STR_STATION_CLASS_DFLT_STATION :Původní stanice STR_STATION_CLASS_DFLT_ROADSTOP :Původní silniční stanoviště diff --git a/src/lang/danish.txt b/src/lang/danish.txt index b1bbde7b58..4ade7af644 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -437,6 +437,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Forlad scenarie STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Afslut + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Opsætning @@ -2798,6 +2799,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Byg en s + + STR_STATION_CLASS_DFLT :Standard station STR_STATION_CLASS_DFLT_STATION :Standard station STR_STATION_CLASS_DFLT_ROADSTOP :Standard vejstop diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 9ccd45adad..3c2dc6042b 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -437,6 +437,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Scenariobewerke STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Afsluiten + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Spelopties @@ -2799,6 +2800,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Je kunt + + STR_STATION_CLASS_DFLT :Standaard STR_STATION_CLASS_DFLT_STATION :Standaard station STR_STATION_CLASS_DFLT_ROADSTOP :Standaard wegstation diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 602e1d32af..c629d5ed60 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -437,6 +437,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Abandon scenari STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Exit + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Game options @@ -2815,6 +2816,8 @@ STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Select a lorry STR_PICKER_OBJECT_CLASS_TOOLTIP :Select an object class to display STR_PICKER_OBJECT_TYPE_TOOLTIP :Select an object type to build. Ctrl+Click to add or remove in saved items. Ctrl+Click+Drag to select the area diagonally. Also press Shift to show cost estimate only + + STR_STATION_CLASS_DFLT :Default STR_STATION_CLASS_DFLT_STATION :Default station STR_STATION_CLASS_DFLT_ROADSTOP :Default road stop diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index e6f331e3ae..70f60a6cd7 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -437,6 +437,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Abandon scenari STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Quit + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Game options @@ -2815,6 +2816,8 @@ STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Select a truck STR_PICKER_OBJECT_CLASS_TOOLTIP :Select an object class to display STR_PICKER_OBJECT_TYPE_TOOLTIP :Select an object type to build. Ctrl+Click to add or remove in saved items. Ctrl+Click+Drag to select the area diagonally. Also press Shift to show cost estimate only + + STR_STATION_CLASS_DFLT :Default STR_STATION_CLASS_DFLT_STATION :Default station STR_STATION_CLASS_DFLT_ROADSTOP :Default road stop diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 3e03a52c07..66f418249d 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -518,6 +518,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Forlasi scenaro STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Forlasi + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Ludaj agordoj @@ -2753,6 +2754,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Tiru por + + STR_STATION_CLASS_DFLT :Defaŭlta STR_STATION_CLASS_DFLT_STATION :Defaŭlta stacio STR_STATION_CLASS_DFLT_ROADSTOP :Defaŭlta vojhaltejo diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index e5662adc31..b775256ebb 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -494,6 +494,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Lahku redaktori STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Välju + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Mängu seadistus @@ -2855,6 +2856,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Ehita ja + + STR_STATION_CLASS_DFLT :Vaikimisi STR_STATION_CLASS_DFLT_STATION :Vaikimisi jaam STR_STATION_CLASS_DFLT_ROADSTOP :Vaikimisi peatus diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index d36de93d2e..a3fa5e3579 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -360,6 +360,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Far frá tilbur STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Gevst + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Spæl møguleikar @@ -2172,6 +2173,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg ein + + STR_STATION_CLASS_DFLT :Vanlig støð STR_STATION_CLASS_WAYP :Waypoint diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 7372a98e50..ffb0b95441 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -437,6 +437,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Sulje skenaario STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Lopeta + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Pelin valinnat @@ -2815,6 +2816,8 @@ STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Valitse rakenne STR_PICKER_OBJECT_CLASS_TOOLTIP :Valitse näytettävä objektien luokka STR_PICKER_OBJECT_TYPE_TOOLTIP :Valitse rakennettavan objektin tyyppi. Ctrl+napsautus lisää tallennettuihin tai poistaa tallennetuista. Ctrl+napsautus+veto valitsee alueen vinottain. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion + + STR_STATION_CLASS_DFLT :Oletus STR_STATION_CLASS_DFLT_STATION :Oletusasema STR_STATION_CLASS_DFLT_ROADSTOP :Oletuspysäkki diff --git a/src/lang/french.txt b/src/lang/french.txt index 1d77071d49..37967bca8e 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -438,6 +438,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Abandonner l'é STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Quitter + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Options du Jeu @@ -2798,6 +2799,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construi + + STR_STATION_CLASS_DFLT :Par défaut STR_STATION_CLASS_DFLT_STATION :Stations par défaut STR_STATION_CLASS_DFLT_ROADSTOP :Arrêts routiers par défaut diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index 7717892a7f..18273a9050 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -381,6 +381,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Senariobouwer STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Ofslute + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Spulopsjes @@ -2275,6 +2276,8 @@ STR_STATION_BUILD_DRAG_DROP :Sleepe en los l + + STR_STATION_CLASS_DFLT :Standert stasjon STR_STATION_CLASS_WAYP :Kontrôleposten diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 1743fcc4b5..d92a3eb12e 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -568,6 +568,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Fàg deasaiche STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Fàg an-seo + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Roghainnean a' gheama @@ -2578,6 +2579,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Tog stè + + STR_STATION_CLASS_DFLT :Stèisean bunaiteach STR_STATION_CLASS_WAYP :Puingean-turais diff --git a/src/lang/galician.txt b/src/lang/galician.txt index a806c93b18..4f1ebb1365 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -438,6 +438,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Saír do editor STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Saír + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Opcións do xogo @@ -2795,6 +2796,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Constru + + STR_STATION_CLASS_DFLT :Por defecto STR_STATION_CLASS_DFLT_STATION :Estación por defecto STR_STATION_CLASS_DFLT_ROADSTOP :Parada de estrada por defecto diff --git a/src/lang/german.txt b/src/lang/german.txt index 3717684bec..7e778f17e8 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -438,6 +438,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Editor verlasse STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Beenden + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Spieleinstellungen @@ -2792,6 +2793,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Stations + + STR_STATION_CLASS_DFLT :Standard STR_STATION_CLASS_DFLT_STATION :Standart-Haltestelle STR_STATION_CLASS_DFLT_ROADSTOP :Standard-Staßenhaltestelle diff --git a/src/lang/greek.txt b/src/lang/greek.txt index c8b1f04429..6ea0bb8ae0 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -499,6 +499,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Έξοδος α STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Έξοδος + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Επιλογές παιχνιδιού @@ -2908,6 +2909,8 @@ STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Επιλογή STR_PICKER_OBJECT_CLASS_TOOLTIP :Επιλογή κατηγορίας αντικειμένων για εμφάνιση STR_PICKER_OBJECT_TYPE_TOOLTIP :Επιλογή κατηγορίας αντικειμένων για εμφάνιση. Ctrl+κλικ για προσθήκη σε ή αφαίρεση από αποθηκευμένα στοιχεία. Ctrl+κλικ+σύρσιμο για να επιλεγεί διαγώνια περιοχή. Επίσης, πατήστε Shift για εμφάνιση εκτιμώμενου κόστους μόνο + + STR_STATION_CLASS_DFLT :Προεπιλεγμένος STR_STATION_CLASS_DFLT_STATION :Προεπιλεγμένος σταθμός STR_STATION_CLASS_DFLT_ROADSTOP :Προεπιλεγμένη οδική στάση diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 871d82b0bb..52631218fb 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -396,6 +396,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :עזוב את STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :יציאה + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :אפשרויות המשחק @@ -2452,6 +2453,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}בניי + + STR_STATION_CLASS_DFLT :תחנת בחירת מחדל STR_STATION_CLASS_WAYP :נקודות דרך diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index 3632773fca..d52fc63e1e 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -154,6 +154,7 @@ STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}वस STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :निकास + # Settings menu ###length 16 STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :समायोजन @@ -869,6 +870,8 @@ STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}अक + + STR_STATION_CLASS_DFLT :मानक स्टेशन STR_STATION_CLASS_WAYP :पथ-संकेत diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 1cad1053dd..b006a75544 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -500,6 +500,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Pályaszerkeszt STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Kilépés az OpenTTD-ből + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Játékbeállítások @@ -2852,6 +2853,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Állomá + + STR_STATION_CLASS_DFLT :Alapértelmezett STR_STATION_CLASS_DFLT_STATION :Alapértelmezett állomás STR_STATION_CLASS_DFLT_ROADSTOP :Alapértelmezett úttorlasz diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index bfde6f150b..2c85c9c275 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -360,6 +360,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Hætta í korta STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Hætta + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Stillingar @@ -2223,6 +2224,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Byggja l + + STR_STATION_CLASS_DFLT :Sjálfgefin stöð STR_STATION_CLASS_WAYP :Millistöð diff --git a/src/lang/ido.txt b/src/lang/ido.txt index f711c1fdca..0379d0a787 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -292,6 +292,7 @@ STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Pozez ob ###length 7 STR_SCENEDIT_FILE_MENU_SEPARATOR : + # Settings menu ###length 16 STR_SETTINGS_MENU_FULL_DETAIL :Plene detaloza @@ -945,6 +946,8 @@ STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Aceptas: + + # Signal window # Bridge selection window diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 41612ecd91..718a389cfb 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -432,6 +432,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Batalkan skenar STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Keluar + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Pengaturan permainan @@ -2735,6 +2736,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Membangu + + STR_STATION_CLASS_DFLT :Standar STR_STATION_CLASS_DFLT_STATION :Stasiun standar STR_STATION_CLASS_DFLT_ROADSTOP :Pemberhentian jalan standar diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 0905a3b1f6..cf5f2851cd 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -395,6 +395,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Fág eagarthói STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Scoir + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Roghanna an chluiche @@ -2552,6 +2553,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Tóg st + + STR_STATION_CLASS_DFLT :Stáisiún réamhshocraithe STR_STATION_CLASS_WAYP :Pointí bealaigh diff --git a/src/lang/italian.txt b/src/lang/italian.txt index b5a27518c3..938191ea06 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -439,6 +439,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Esci dall'edito STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Esci + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Opzioni gioco @@ -2830,6 +2831,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Costruis + + STR_STATION_CLASS_DFLT :Predefinita STR_STATION_CLASS_DFLT_STATION :Stazione predefinita STR_STATION_CLASS_DFLT_ROADSTOP :Fermata stradale predefinita diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index f605687409..987bff5324 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -405,6 +405,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :タイトルに STR_SCENEDIT_FILE_MENU_SEPARATOR :――――――――― STR_SCENEDIT_FILE_MENU_QUIT :OpenTTDを終了 + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :ゲームオプション設定 @@ -2615,6 +2616,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}ドラ + + STR_STATION_CLASS_DFLT :標準駅 STR_STATION_CLASS_WAYP :中継駅 diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 5f88868c3c..dc04946589 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -438,6 +438,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :시나리오 STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :게임 종료 + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :게임 기본 설정 @@ -2816,6 +2817,8 @@ STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :설치하려는 STR_PICKER_OBJECT_CLASS_TOOLTIP :표시할 오브젝트 종류를 선택하세요 STR_PICKER_OBJECT_TYPE_TOOLTIP :설치하려는 오브젝트 종류를 선택합니다. CTRL+클릭+드래그하면 대각선 방향의 영역을 선택할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 + + STR_STATION_CLASS_DFLT :기본 STR_STATION_CLASS_DFLT_STATION :기본 역 STR_STATION_CLASS_DFLT_ROADSTOP :기본 도로 정류장 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index ffcd61eeb4..506a6c3a68 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -570,6 +570,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Relinquere scri STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Exire + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Ludi optiones @@ -2583,6 +2584,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Struere + + STR_STATION_CLASS_DFLT :Statio solita STR_STATION_CLASS_WAYP :Interloci diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 56b0adca4f..63df7d6c7e 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -439,6 +439,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Pamest scenāri STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Iziet + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Spēles opcijas @@ -2801,6 +2802,10 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Izvēlē STR_STATION_BUILD_DRAG_DROP :{BLACK}Vilkt un nomest STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Būvēt staciju izmantojot "vilkt un nomest" +STR_PICKER_MODE_ALL :Visi +STR_PICKER_MODE_SAVED :Saglabāts + + STR_STATION_CLASS_DFLT :Noklusējuma diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 12f40f69b9..81941eac9f 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -625,6 +625,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Uždaryti redak STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Išeiti + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Pagrindinės nuostatos @@ -2950,6 +2951,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Statyti + + STR_STATION_CLASS_DFLT :Numatytoji STR_STATION_CLASS_DFLT_STATION :Numatytoji stotelė STR_STATION_CLASS_DFLT_ROADSTOP :Numatytoji kelio stotelė diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 618a02efec..1051e72608 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -437,6 +437,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Eraus aus dem E STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Eraus + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Spilloptiounen @@ -2788,6 +2789,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}D'Statio + + STR_STATION_CLASS_DFLT :Standard STR_STATION_CLASS_DFLT_STATION :Standardstatioun STR_STATION_CLASS_DFLT_ROADSTOP :Standard Stroossenarrêt diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index b264482165..956400b4c8 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -358,6 +358,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Напушти STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Напушти + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :игра опции @@ -1288,6 +1289,8 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Изгр + + # Signal window STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Влез сигнализација (електрика){}Зелено е се додека има барем еден зелен излез-сигнал во продолжението на траката, во спротивно е црвено. STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Излез Сигнализација (електрика){}Се однесува на ист начин како блок-сигналот, но потребно е да ја има точната боја на влезен и комбо пресигнал. diff --git a/src/lang/malay.txt b/src/lang/malay.txt index aee8674dea..eca37f6f79 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -363,6 +363,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Abai penyunting STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Keluar + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Pilihan permainan @@ -2121,6 +2122,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bina ste + + STR_STATION_CLASS_DFLT :Stesen lazim STR_STATION_CLASS_WAYP :Tandatuju diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index abc21a91a2..741139620f 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -272,6 +272,7 @@ STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Ibni ind ###length 7 STR_SCENEDIT_FILE_MENU_SEPARATOR : + # Settings menu ###length 16 @@ -874,6 +875,8 @@ STR_NETWORK_SERVER_MESSAGE :*** {1:STRING} + + # Signal window # Bridge selection window diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index 7bffb779ce..9a9d274186 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -352,6 +352,7 @@ STR_SCENEDIT_FILE_MENU_LOAD_SCENARIO :उद्दे STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :बंद करा + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :खेळाचे पर्याय @@ -1197,6 +1198,8 @@ STR_NETWORK_SERVER_MESSAGE :*** {1:STRING} + + # Signal window # Bridge selection window diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index d10c76178f..492d838973 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -439,6 +439,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Avslutt rediger STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Avslutt + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Spillinnstillinger @@ -2798,6 +2799,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg en + + STR_STATION_CLASS_DFLT :Standard STR_STATION_CLASS_DFLT_STATION :Standard stasjon STR_STATION_CLASS_DFLT_ROADSTOP :Standard veistans diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index e58a70908d..ed2d9f398d 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -382,6 +382,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Avbryt redigeri STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Avslutt + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Spelinstillingar @@ -2287,6 +2288,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg sta + + STR_STATION_CLASS_DFLT :Standard stasjon STR_STATION_CLASS_WAYP :Kontrollpunkt diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 3efb85ad35..b19a03818a 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -376,6 +376,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :خارج شدن STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :خروج + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :تنظیمات بازی @@ -2115,6 +2116,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}ساخت + + STR_STATION_CLASS_DFLT :ایستگاه پیش فرض STR_STATION_CLASS_WAYP :نقطه مسیر ها diff --git a/src/lang/polish.txt b/src/lang/polish.txt index ff954468cd..2573a13b56 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -816,6 +816,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Opuść edytor STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Wyjście + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Opcje gry @@ -3179,6 +3180,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Buduj st + + STR_STATION_CLASS_DFLT :Standardowa STR_STATION_CLASS_DFLT_STATION :Standardowa stacja STR_STATION_CLASS_DFLT_ROADSTOP :Standardowy przystanek diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 4ba0ae0f46..604badbf77 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -438,6 +438,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Abandonar edito STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Sair + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Opções do Jogo @@ -2816,6 +2817,8 @@ STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Escolher um tip STR_PICKER_OBJECT_CLASS_TOOLTIP :Selecionar uma classe de objeto para mostrar STR_PICKER_OBJECT_TYPE_TOOLTIP :Selecione um tipo de objeto para construir. Ctrl+Clique para adicionar ou remover nos itens guardados. Ctrl+Clique+Arrastar para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado + + STR_STATION_CLASS_DFLT :Padrão STR_STATION_CLASS_DFLT_STATION :Estação padrão STR_STATION_CLASS_DFLT_ROADSTOP :Paragem rodoviária padrão diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 5ba59f559f..aa2c948f4e 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -437,6 +437,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Ieșire din edi STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Ieșire din joc + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Opțiunile jocului @@ -2786,6 +2787,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construi + + STR_STATION_CLASS_DFLT :Implicită STR_STATION_CLASS_DFLT_STATION :Stație implicită STR_STATION_CLASS_DFLT_ROADSTOP :Oprire implicită a drumului diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 8b9e8e4566..b56175f39a 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -563,6 +563,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Выйти из STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Выход + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Основные настройки @@ -2986,6 +2987,8 @@ STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Выберит STR_PICKER_OBJECT_CLASS_TOOLTIP :Выберите тип объектов для отображения STR_PICKER_OBJECT_TYPE_TOOLTIP :Выберите объект для строительства. Ctrl+щелчок добавит его в «избранное» или удалит. Ctrl+перетаскивание - выбор диагональной области. При нажатом Shift - оценка стоимости строительства. + + STR_STATION_CLASS_DFLT :Стандартная станция STR_STATION_CLASS_DFLT_STATION :Стандартная ж/д станция STR_STATION_CLASS_DFLT_ROADSTOP :Стандартная остановка diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index e796c9afd2..0d452ad2e5 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -620,6 +620,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Napusti editor STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Izađi + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Opcije @@ -2930,6 +2931,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Gradnja + + STR_STATION_CLASS_DFLT :Podrazumevana stanica STR_STATION_CLASS_WAYP :Putanje diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 8947e1b6a2..0a17c0191d 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -437,6 +437,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :退出编辑器 STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :退出 + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :游戏选项 @@ -2815,6 +2816,8 @@ STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :选择建造的 STR_PICKER_OBJECT_CLASS_TOOLTIP :选择显示的物件类别 STR_PICKER_OBJECT_TYPE_TOOLTIP :选择建造的物件类型。按住 键选择物件以保存或删除当前项目。按住 键拖拽以沿对角线放置,按住 键以显示预计费用 + + STR_STATION_CLASS_DFLT :默认 STR_STATION_CLASS_DFLT_STATION :默认车站 STR_STATION_CLASS_DFLT_ROADSTOP :默认车站 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index f34e689a7f..96d21e947a 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -501,6 +501,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Opustiť editor STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Ukončiť + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Možnosti hry @@ -2859,6 +2860,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Automati + + STR_STATION_CLASS_DFLT :Pôvodná STR_STATION_CLASS_DFLT_STATION :Predvolená stanica STR_STATION_CLASS_DFLT_ROADSTOP :Predvolená zastávka diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 38d257676b..b0bd09f3db 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -534,6 +534,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Izhod iz urejev STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Izhod + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Možnosti igre @@ -2522,6 +2523,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Zgradi p + + STR_STATION_CLASS_DFLT :Privzeta postaja STR_STATION_CLASS_WAYP :Točke poti diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 0a83870f0e..06e4c73e93 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -438,6 +438,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Salir del edito STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Salir + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Opciones de juego @@ -2792,6 +2793,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construy + + STR_STATION_CLASS_DFLT :Por defecto STR_STATION_CLASS_DFLT_STATION :Estación por defecto STR_STATION_CLASS_DFLT_ROADSTOP :Estación de carretera por defecto diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 1271954a8c..deb50f5ee6 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -433,6 +433,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Salir del edito STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Salir + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Opciones de juego @@ -2736,6 +2737,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construi + + STR_STATION_CLASS_DFLT :por defecto STR_STATION_CLASS_DFLT_STATION :Estación por defecto STR_STATION_CLASS_DFLT_ROADSTOP :Estación de carretera por defecto diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 575321c0c7..147969632c 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -437,6 +437,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Avsluta scenari STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Avsluta + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Spelinställningar @@ -2796,6 +2797,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg en + + STR_STATION_CLASS_DFLT :Original STR_STATION_CLASS_DFLT_STATION :Standardstation STR_STATION_CLASS_DFLT_ROADSTOP :Standardvägstopp diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 33f70d8c45..ffceb12dd9 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -435,6 +435,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :சித்த STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :வெளியேறு + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :விளையாட்டு விருப்ப பேரம் @@ -2559,6 +2560,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}இழ + + STR_STATION_CLASS_DFLT :இயல்பிருப்பு STR_STATION_CLASS_DFLT_STATION :இயல்பிருப்பு நிலையம் STR_STATION_CLASS_DFLT_ROADSTOP :இயல்பிருப்பு சாலை நிறுத்தம் diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 270ddb4edb..a784c6da8d 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -385,6 +385,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :ออกจา STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :ออก + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :ตัวเลือกเกม @@ -2412,6 +2413,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}สร + + STR_STATION_CLASS_DFLT :สถานีมาตรฐาน STR_STATION_CLASS_WAYP :จุดตรวจ diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index c3a726b229..aae01a631e 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -435,6 +435,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :離開編輯器 STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :離開 + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :遊戲選項 @@ -2687,6 +2688,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}以拖 + + STR_STATION_CLASS_DFLT :預設 STR_STATION_CLASS_DFLT_STATION :預設車站 STR_STATION_CLASS_DFLT_ROADSTOP :預設車站 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 022bda2835..36f2de1328 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -438,6 +438,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Editörden çı STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Oyundan Çık + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Seçenekler @@ -2791,6 +2792,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Sürükl + + STR_STATION_CLASS_DFLT :Varsayılan STR_STATION_CLASS_DFLT_STATION :Varsayılan istasyon STR_STATION_CLASS_DFLT_ROADSTOP :Varsayılan yol durağı diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index e54ac9bd0a..2ae0cb7e4a 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -571,6 +571,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Вийти з STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Вихід + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Налаштування гри @@ -2931,6 +2932,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Буду + + STR_STATION_CLASS_DFLT :Звичайна STR_STATION_CLASS_DFLT_STATION :Звичайна станція STR_STATION_CLASS_DFLT_ROADSTOP :Звичайна зупинка diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index 3d0dcc7c71..70c09e1d3a 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -366,6 +366,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :مدیر بند STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :باہر نکلو + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :کھیل کے اختیارات @@ -1981,6 +1982,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}کھین + + STR_STATION_CLASS_DFLT :طے شدہ اسٹیشن STR_STATION_CLASS_WAYP :گزرگاہیں diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 0119ce112f..4b32743d4c 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -437,6 +437,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Thoát khỏi t STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Thoát + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Cấu hình trò chơi @@ -2791,6 +2792,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Xây d + + STR_STATION_CLASS_DFLT :Mặc định STR_STATION_CLASS_DFLT_STATION :Trạm mặc định STR_STATION_CLASS_DFLT_ROADSTOP :Điểm dừng trên đường mặc định diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 167d33b58d..e4987f3bd1 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -437,6 +437,7 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Gwaredu a'r gol STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Gadael + # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Dewisiadau Gêm @@ -2796,6 +2797,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Adeiladu + + STR_STATION_CLASS_DFLT :Rhagosodiad STR_STATION_CLASS_DFLT_STATION :Gorsaf rhagosodedig STR_STATION_CLASS_DFLT_ROADSTOP :Gorsaf ffordd rhagosodedig From d1b7619822d505e1f5efe45ec6b1dcd820dcdcab Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 15 May 2024 23:17:58 +0100 Subject: [PATCH 541/695] Change: Ignore min/max years for manual house placer. (#12687) --- src/town_cmd.cpp | 2 -- src/town_gui.cpp | 4 +--- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 192b369ca7..de252cdb41 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2837,8 +2837,6 @@ CommandCost CmdPlaceHouse(DoCommandFlag flags, TileIndex tile, HouseID house) const HouseSpec *hs = HouseSpec::Get(house); if (!hs->enabled) return CMD_ERROR; - if (TimerGameCalendar::year < hs->min_year || TimerGameCalendar::year > hs->max_year) return CMD_ERROR; - Town *t = ClosestTownFromTile(tile, UINT_MAX); /* cannot build on these slopes... */ diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 0b8b39e5c6..483ff890c9 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -1490,9 +1490,7 @@ public: bool IsTypeAvailable(int, int id) const override { const HouseSpec *hs = HouseSpec::Get(id); - if (!hs->enabled) return false; - if (TimerGameCalendar::year < hs->min_year || TimerGameCalendar::year > hs->max_year) return false; - return true; + return hs->enabled; } void DrawType(int x, int y, int, int id) const override From ca52da6c953bb0733f5b8489c7d9b29b6c080482 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 16 May 2024 00:38:23 +0100 Subject: [PATCH 542/695] Fix: Unable to choose a font containing hyphen. (#12684) FcNameParse may require some characters be escaped. Instead, pass name as FC_FAMILY. --- src/os/unix/font_unix.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/os/unix/font_unix.cpp b/src/os/unix/font_unix.cpp index 548fd410cc..6ab1d99823 100644 --- a/src/os/unix/font_unix.cpp +++ b/src/os/unix/font_unix.cpp @@ -55,8 +55,9 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face) auto [font_family, font_style] = SplitFontFamilyAndStyle(font_name); /* Resolve the name and populate the information structure */ - FcPattern *pat = FcNameParse((FcChar8 *)font_family.data()); - if (!font_style.empty()) FcPatternAddString(pat, FC_STYLE, (FcChar8 *)font_style.data()); + FcPattern *pat = FcPatternCreate(); + if (!font_family.empty()) FcPatternAddString(pat, FC_FAMILY, reinterpret_cast(font_family.c_str())); + if (!font_style.empty()) FcPatternAddString(pat, FC_STYLE, reinterpret_cast(font_style.c_str())); FcConfigSubstitute(nullptr, pat, FcMatchPattern); FcDefaultSubstitute(pat); FcFontSet *fs = FcFontSetCreate(); From 26113e3622a8bb2af1fb5f01b1e3460c735e1a34 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 16 May 2024 04:41:07 +0000 Subject: [PATCH 543/695] Update: Translations from eints english (au): 11 changes by krysclarke swedish: 7 changes by joeax910 english (us): 11 changes by 2TallTyler chinese (simplified): 11 changes by WenSimEHRP russian: 11 changes by Ln-Wolf catalan: 11 changes by J0anJosep portuguese: 13 changes by azulcosta portuguese (brazilian): 11 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 11 +++++++++++ src/lang/catalan.txt | 11 +++++++++++ src/lang/english_AU.txt | 11 +++++++++++ src/lang/english_US.txt | 11 +++++++++++ src/lang/portuguese.txt | 15 +++++++++++++-- src/lang/russian.txt | 11 +++++++++++ src/lang/simplified_chinese.txt | 11 +++++++++++ src/lang/swedish.txt | 7 +++++++ 8 files changed, 86 insertions(+), 2 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index ac32ec49eb..9d98197b03 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -438,6 +438,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Sair do editor STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Sair +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Gerar localidades +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Colocar casas # Settings menu ###length 16 @@ -2816,8 +2818,16 @@ STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Selecionar uma STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Escolher um tipo de estação de caminhões para construir. Ctrl+Clique para adicionar ou remover nos itens salvos STR_PICKER_OBJECT_CLASS_TOOLTIP :Selecionar uma classe de objeto para mostrar STR_PICKER_OBJECT_TYPE_TOOLTIP :Escolher um tipo de objeto para construir. Ctrl+Clique para adicionar ou remover nos itens salvos. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para só mostrar o custo estimado +STR_PICKER_HOUSE_CLASS_TOOLTIP :Selecionar uma zona urbana para mostrar +STR_PICKER_HOUSE_TYPE_TOOLTIP :Selecionar um tipo de casa para construir. Ctrl+Clique para adicionar ou remover nos itens salvos +STR_HOUSE_PICKER_CAPTION :Seleção de Casas +STR_HOUSE_PICKER_CLASS_ZONE1 :Borda +STR_HOUSE_PICKER_CLASS_ZONE2 :Subúrbio +STR_HOUSE_PICKER_CLASS_ZONE3 :Periferia Distante +STR_HOUSE_PICKER_CLASS_ZONE4 :Periferia Próxima +STR_HOUSE_PICKER_CLASS_ZONE5 :Centro da cidade STR_STATION_CLASS_DFLT :Padrão STR_STATION_CLASS_DFLT_STATION :Estação padrão @@ -5005,6 +5015,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... não STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Trabalhos sendo realizados na estrada STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Não é possível remover esta localidade...{}Uma estação ou depósito refere-se à localidade ou não é possível remover um quadrado que pertence à mesma STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... não há local adequado para uma estátua no centro desta localidade +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Não é possível construir casa... # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... há indústrias demais diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 8ab9e52fc2..cd06c08a1e 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -438,6 +438,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Surt de l'edito STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Surt +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Genera poblacions +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Posa cases # Settings menu ###length 16 @@ -2816,8 +2818,16 @@ STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Trieu quina cla STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Trieu un tipus d'estació de camió a construir. Amb Ctrl+clic, s'afegeix o es trau l'element de la llista de desats. STR_PICKER_OBJECT_CLASS_TOOLTIP :Trieu quina classe d'objectes voleu veure. STR_PICKER_OBJECT_TYPE_TOOLTIP :Trieu quin tipus d'objecte voleu construir. Amb Ctrl+clic, s'afegeix o es trau l'element de la llista de desats. Amb Ctrl+clic+arrossega es selecciona l'àrea en diagonal. Amb Maj, només es mostrarà el cost estimat de l'acció. +STR_PICKER_HOUSE_CLASS_TOOLTIP :Trieu quina zona de població voleu veure. +STR_PICKER_HOUSE_TYPE_TOOLTIP :Trieu quin tipus de casa construir. Amb Ctrl+clic, s'afegeix o es trau l'element de la llista de desats. +STR_HOUSE_PICKER_CAPTION :Selecció de cases +STR_HOUSE_PICKER_CLASS_ZONE1 :Vora +STR_HOUSE_PICKER_CLASS_ZONE2 :Afores +STR_HOUSE_PICKER_CLASS_ZONE3 :Suburbi exterior +STR_HOUSE_PICKER_CLASS_ZONE4 :Suburbi interior +STR_HOUSE_PICKER_CLASS_ZONE5 :Centre de la població STR_STATION_CLASS_DFLT :Per defecte STR_STATION_CLASS_DFLT_STATION :Estació per defecte @@ -5005,6 +5015,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}...no qu STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Obres en progrés STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}No es pot eliminar aquesta població...{}Hi ha una estació, un dipòsit o una cel·la pertanyent a la població que no pot ser eliminada STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... no hi ha un lloc adequat per situar l'estàtua al centre d'aquesta població +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}La casa no es pot construir... # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... massa indústries diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index c629d5ed60..bbb6f3d2b8 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -437,6 +437,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Abandon scenari STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Exit +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Generate towns +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Place houses # Settings menu ###length 16 @@ -2815,8 +2817,16 @@ STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Select a lorry STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Select a lorry station type to build. Ctrl+Click to add or remove in saved items STR_PICKER_OBJECT_CLASS_TOOLTIP :Select an object class to display STR_PICKER_OBJECT_TYPE_TOOLTIP :Select an object type to build. Ctrl+Click to add or remove in saved items. Ctrl+Click+Drag to select the area diagonally. Also press Shift to show cost estimate only +STR_PICKER_HOUSE_CLASS_TOOLTIP :Select a town zone to display +STR_PICKER_HOUSE_TYPE_TOOLTIP :Select a house type to build. Ctrl+Click to add or remove in saved items +STR_HOUSE_PICKER_CAPTION :House Selection +STR_HOUSE_PICKER_CLASS_ZONE1 :Edge +STR_HOUSE_PICKER_CLASS_ZONE2 :Outskirts +STR_HOUSE_PICKER_CLASS_ZONE3 :Outer Suburbs +STR_HOUSE_PICKER_CLASS_ZONE4 :Inner Suburbs +STR_HOUSE_PICKER_CLASS_ZONE5 :Town centre STR_STATION_CLASS_DFLT :Default STR_STATION_CLASS_DFLT_STATION :Default station @@ -5004,6 +5014,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... ther STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Road works in progress STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Can't delete this town...{}A station or depot is referring to the town or a town owned tile can't be removed STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... there is no suitable place for a statue in the centre of this town +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Can't build house... # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... too many industries diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 70f60a6cd7..ade2067f22 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -437,6 +437,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Abandon scenari STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Quit +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Generate towns +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Place houses # Settings menu ###length 16 @@ -2815,8 +2817,16 @@ STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Select a truck STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Select a truck station type to build. Ctrl+Click to add or remove in saved items STR_PICKER_OBJECT_CLASS_TOOLTIP :Select an object class to display STR_PICKER_OBJECT_TYPE_TOOLTIP :Select an object type to build. Ctrl+Click to add or remove in saved items. Ctrl+Click+Drag to select the area diagonally. Also press Shift to show cost estimate only +STR_PICKER_HOUSE_CLASS_TOOLTIP :Select a town zone to display +STR_PICKER_HOUSE_TYPE_TOOLTIP :Select a house type to build. Ctrl+Click to add or remove in saved items +STR_HOUSE_PICKER_CAPTION :House Selection +STR_HOUSE_PICKER_CLASS_ZONE1 :Edge +STR_HOUSE_PICKER_CLASS_ZONE2 :Outskirts +STR_HOUSE_PICKER_CLASS_ZONE3 :Outer Suburbs +STR_HOUSE_PICKER_CLASS_ZONE4 :Inner Suburbs +STR_HOUSE_PICKER_CLASS_ZONE5 :Town center STR_STATION_CLASS_DFLT :Default STR_STATION_CLASS_DFLT_STATION :Default station @@ -5004,6 +5014,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... ther STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Road work in progress STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Can't delete this town...{}A station or depot is referring to the town or a town owned tile can't be removed STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... there is no suitable place for a statue in the center of this town +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Can't build house... # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... too many industries diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 604badbf77..ce832bde1d 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -438,6 +438,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Abandonar edito STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Sair +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Gerar localidades +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Colocar casas # Settings menu ###length 16 @@ -2816,8 +2818,16 @@ STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Selecionar uma STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Escolher um tipo de estação de camiões para construir. Ctrl+Clique para adicionar ou remover nos itens guardados STR_PICKER_OBJECT_CLASS_TOOLTIP :Selecionar uma classe de objeto para mostrar STR_PICKER_OBJECT_TYPE_TOOLTIP :Selecione um tipo de objeto para construir. Ctrl+Clique para adicionar ou remover nos itens guardados. Ctrl+Clique+Arrastar para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado +STR_PICKER_HOUSE_CLASS_TOOLTIP :Selecione uma zona de localidade para mostrar +STR_PICKER_HOUSE_TYPE_TOOLTIP :Escolher um tipo de casa para construir. Ctrl+Clique para adicionar ou remover nos itens guardados +STR_HOUSE_PICKER_CAPTION :Seleção de Casas +STR_HOUSE_PICKER_CLASS_ZONE1 :Borda +STR_HOUSE_PICKER_CLASS_ZONE2 :Arredores +STR_HOUSE_PICKER_CLASS_ZONE3 :Subúrbios Externos +STR_HOUSE_PICKER_CLASS_ZONE4 :Subúrbios Internos +STR_HOUSE_PICKER_CLASS_ZONE5 :Centro da localidade STR_STATION_CLASS_DFLT :Padrão STR_STATION_CLASS_DFLT_STATION :Estação padrão @@ -3059,7 +3069,7 @@ STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Também STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}Selecionar carga STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}Selecione a carga que pretende mostrar STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}Selecione a indústria -STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Selecione a industria que pretende mostrar +STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Selecione a indústria que pretende mostrar # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Informações do Terreno @@ -3285,7 +3295,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Num. de localidades: STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Selecionar a densidade das cidades, ou um número personalizado STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Nomes das localidades: -STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Seleccionar o estilo dos nomes das localidades +STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Selecionar o estilo dos nomes das localidades STR_MAPGEN_DATE :{BLACK}Data: STR_MAPGEN_DATE_TOOLTIP :{BLACK}Selecionar a data inicial STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Num. de indústrias: @@ -5005,6 +5015,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... não STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Trabalhos na estrada em curso STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Não é possível eliminar esta localidade...{}Uma estação ou depósito refere-se à localidade ou não é possível remover terreno pertencente à mesma STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... não há um sítio adequado para uma estátua no centro desta localidade +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Não é possível construir casa... # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... demasiadas indústrias diff --git a/src/lang/russian.txt b/src/lang/russian.txt index b56175f39a..4759fac882 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -563,6 +563,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Выйти из STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Выход +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Создание городов +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Размещение домов # Settings menu ###length 16 @@ -2986,8 +2988,16 @@ STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Выберит STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Выберите грузовой терминал для строительства. Ctrl+щелчок добавит его в «избранное» или удалит. STR_PICKER_OBJECT_CLASS_TOOLTIP :Выберите тип объектов для отображения STR_PICKER_OBJECT_TYPE_TOOLTIP :Выберите объект для строительства. Ctrl+щелчок добавит его в «избранное» или удалит. Ctrl+перетаскивание - выбор диагональной области. При нажатом Shift - оценка стоимости строительства. +STR_PICKER_HOUSE_CLASS_TOOLTIP :Выберите городскую зону для отображения соответствующих строений +STR_PICKER_HOUSE_TYPE_TOOLTIP :Выберите дом для строительства. Ctrl+щелчок добавит его в «избранное» или удалит. +STR_HOUSE_PICKER_CAPTION :Выбор типов домов +STR_HOUSE_PICKER_CLASS_ZONE1 :Край +STR_HOUSE_PICKER_CLASS_ZONE2 :Окраина +STR_HOUSE_PICKER_CLASS_ZONE3 :Периферия +STR_HOUSE_PICKER_CLASS_ZONE4 :Пригород +STR_HOUSE_PICKER_CLASS_ZONE5 :Центр STR_STATION_CLASS_DFLT :Стандартная станция STR_STATION_CLASS_DFLT_STATION :Стандартная ж/д станция @@ -5191,6 +5201,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... не STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Идут дорожные работы... STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Невозможно уничтожить город:{}к нему относится станция или депо, либо невозможно очистить одну из занимаемых им клеток. STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... в центре города нет места для статуи +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Невозможно поставить дом... # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... слишком много предприятий diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 0a17c0191d..9fb2754939 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -437,6 +437,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :退出编辑器 STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :退出 +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :生成城镇 +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :放置房屋 # Settings menu ###length 16 @@ -2815,8 +2817,16 @@ STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :选择显示的 STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :选择建造的汽车货场类型。按住 键操作以保存或删除当前项目 STR_PICKER_OBJECT_CLASS_TOOLTIP :选择显示的物件类别 STR_PICKER_OBJECT_TYPE_TOOLTIP :选择建造的物件类型。按住 键选择物件以保存或删除当前项目。按住 键拖拽以沿对角线放置,按住 键以显示预计费用 +STR_PICKER_HOUSE_CLASS_TOOLTIP :选择显示的城镇区域 +STR_PICKER_HOUSE_TYPE_TOOLTIP :选择建造的房屋类型。按住 键操作以保存或删除当前项目 +STR_HOUSE_PICKER_CAPTION :房屋选择 +STR_HOUSE_PICKER_CLASS_ZONE1 :城镇边缘 +STR_HOUSE_PICKER_CLASS_ZONE2 :郊区边缘 +STR_HOUSE_PICKER_CLASS_ZONE3 :外郊区 +STR_HOUSE_PICKER_CLASS_ZONE4 :内郊区 +STR_HOUSE_PICKER_CLASS_ZONE5 :城镇中心 STR_STATION_CLASS_DFLT :默认 STR_STATION_CLASS_DFLT_STATION :默认车站 @@ -5004,6 +5014,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}地图 STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}正在进行道路工程 STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}无法删除城镇...{}城镇范围内还有车站、车库或无法移除的区块 STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... 城市中心没有合适的地方放置公司塑像 +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}不能建造房屋…… # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}…… 游戏中的工业过多 diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 147969632c..7cbc5b5395 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -2795,9 +2795,15 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Välj l STR_STATION_BUILD_DRAG_DROP :{BLACK}Drag & Släpp STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg en station genom att dra & släppa +STR_PICKER_MODE_ALL :Alla +STR_PICKER_MODE_USED :Använda +STR_PICKER_HOUSE_CLASS_TOOLTIP :Välj vilken stadszon som ska visas +STR_HOUSE_PICKER_CAPTION :Husval +STR_HOUSE_PICKER_CLASS_ZONE4 :Innerförorterna +STR_HOUSE_PICKER_CLASS_ZONE5 :Stadskärnan STR_STATION_CLASS_DFLT :Original STR_STATION_CLASS_DFLT_STATION :Standardstation @@ -4985,6 +4991,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... det STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Vägarbete pågår STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kan inte ta bort den här staden...{}En station eller depå refererar till staden eller så kan inte en stadsägd ruta tas bort. STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... det finns ingen lämplig plats för en staty i stadens centrum +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Kan inte bygga hus... # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... för många industrier From 4940b6ff0b86fa01d3a3ea43234a2a4ad7c4c302 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 16 May 2024 12:09:19 +0100 Subject: [PATCH 544/695] Codefix: Compile warning with newer C++ compiler on MinGW. (#12689) > template-id not allowed for constructor in C++20 --- src/base_station_base.h | 2 +- src/vehicle_base.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/base_station_base.h b/src/base_station_base.h index b414183b9c..f2e2e58843 100644 --- a/src/base_station_base.h +++ b/src/base_station_base.h @@ -221,7 +221,7 @@ struct SpecializedStation : public BaseStation { * Set station type correctly * @param tile The base tile of the station. */ - inline SpecializedStation(TileIndex tile) : + inline SpecializedStation(TileIndex tile) : BaseStation(tile) { this->facilities = EXPECTED_FACIL; diff --git a/src/vehicle_base.h b/src/vehicle_base.h index 7f05ef19b2..65fac6e103 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -1100,7 +1100,7 @@ struct SpecializedVehicle : public Vehicle { /** * Set vehicle type correctly */ - inline SpecializedVehicle() : Vehicle(Type) + inline SpecializedVehicle() : Vehicle(Type) { this->sprite_cache.sprite_seq.count = 1; } From c85481564f1f4b709f960184cd55cd6643968116 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 17 May 2024 08:50:59 +0100 Subject: [PATCH 545/695] Codechange: Use reusable temporary buffer in Win32FontCache. (#12666) This avoids allocating and deleting a temporary buffer for every glyph that is rendered into a sprite. --- src/os/windows/font_win32.cpp | 5 +---- src/os/windows/font_win32.h | 3 +++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/os/windows/font_win32.cpp b/src/os/windows/font_win32.cpp index cb82b2b794..23a0be297c 100644 --- a/src/os/windows/font_win32.cpp +++ b/src/os/windows/font_win32.cpp @@ -10,7 +10,6 @@ #include "../../stdafx.h" #include "../../debug.h" #include "../../blitter/factory.hpp" -#include "../../core/alloc_func.hpp" #include "../../core/math_func.hpp" #include "../../core/mem_func.hpp" #include "../../error_func.h" @@ -209,7 +208,7 @@ void Win32FontCache::ClearFontCache() if (width > MAX_GLYPH_DIM || height > MAX_GLYPH_DIM) UserError("Font glyph is too large"); /* Call GetGlyphOutline again with size to actually render the glyph. */ - uint8_t *bmp = new uint8_t[size]; + uint8_t *bmp = this->render_buffer.Allocate(size); GetGlyphOutline(this->dc, key, GGO_GLYPH_INDEX | (aa ? GGO_GRAY8_BITMAP : GGO_BITMAP), &gm, size, bmp, &mat); /* GDI has rendered the glyph, now we allocate a sprite and copy the image into it. */ @@ -259,8 +258,6 @@ void Win32FontCache::ClearFontCache() this->SetGlyphPtr(key, &new_glyph); - delete[] bmp; - return new_glyph.sprite; } diff --git a/src/os/windows/font_win32.h b/src/os/windows/font_win32.h index 5d5555341c..b8f40ad74d 100644 --- a/src/os/windows/font_win32.h +++ b/src/os/windows/font_win32.h @@ -10,6 +10,7 @@ #ifndef FONT_WIN32_H #define FONT_WIN32_H +#include "../../core/alloc_type.hpp" #include "../../fontcache/truetypefontcache.h" #include "win32.h" @@ -25,6 +26,8 @@ private: SIZE glyph_size; ///< Maximum size of regular glyphs. std::string fontname; ///< Cached copy of loaded font facename + ReusableBuffer render_buffer; ///< Temporary buffer for rendering glyphs. + void SetFontSize(int pixels); protected: From 8d26d032e115af22866b0b023ad3bc203eae55ae Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 17 May 2024 20:50:04 +0100 Subject: [PATCH 546/695] Fix #12497: [NewGRF] Increase vehicle motion counter for all parts. (#12561) NewGRFs relied on the incorrectly motion counter that was 'fixed' in #12229, so always update v->motion_counter for all vehicle parts. --- src/vehicle.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 2e1b82b172..d0a16880f6 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1033,6 +1033,9 @@ void CallVehicleTicks() /* Do not play any sound when stopped */ if ((front->vehstatus & VS_STOPPED) && (front->type != VEH_TRAIN || front->cur_speed == 0)) continue; + /* Update motion counter for animation purposes. */ + v->motion_counter += front->cur_speed; + /* Check vehicle type specifics */ switch (v->type) { case VEH_TRAIN: @@ -1051,7 +1054,6 @@ void CallVehicleTicks() break; } - v->motion_counter += front->cur_speed; /* Play a running sound if the motion counter passes 256 (Do we not skip sounds?) */ if (GB(v->motion_counter, 0, 8) < front->cur_speed) PlayVehicleSound(v, VSE_RUNNING); From 7fd2487c4676c6175eef4b392ee8cb7d7606935e Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 18 May 2024 04:40:26 +0000 Subject: [PATCH 547/695] Update: Translations from eints swedish: 6 changes by joeax910 chinese (simplified): 2 changes by WenSimEHRP dutch: 27 changes by Afoklala --- src/lang/dutch.txt | 27 +++++++++++++++++++++++++++ src/lang/simplified_chinese.txt | 4 ++-- src/lang/swedish.txt | 7 ++++++- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 3c2dc6042b..3162267db6 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -437,6 +437,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Scenariobewerke STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Afsluiten +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Steden genereren +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Huizen plaatsen # Settings menu ###length 16 @@ -2798,9 +2800,33 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Selectee STR_STATION_BUILD_DRAG_DROP :{BLACK}Slepen STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Je kunt een station bouwen door te slepen +STR_PICKER_MODE_ALL :Alle +STR_PICKER_MODE_ALL_TOOLTIP :Weergave van alle klassen onderdelen omschakelen +STR_PICKER_MODE_USED :Gebruikt +STR_PICKER_MODE_USED_TOOLTIP :Weergave van alleen bestaande onderdelen omschakelen +STR_PICKER_MODE_SAVED :Opgeslagen +STR_PICKER_MODE_SAVED_TOOLTIP :Weergave van alleen opgeslagen onderdelen omschakelen +STR_PICKER_STATION_CLASS_TOOLTIP :Selecteer een klasse stations voor weergave +STR_PICKER_STATION_TYPE_TOOLTIP :Selecteer een type station om te bouwen. Ctrl+klik om toe te voegen aan of te verwijderen uit opgeslagen onderdelen +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Selecteer een klasse routepunten voor weergave +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Selecteer een routepunt om te bouwen. Ctrl+klik om toe te voegen aan of te verwijderen uit opgeslagen onderdelen +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Selecteer een klasse busstations voor weergave +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Selecteer een type busstation om te bouwen. Ctrl+klik om toe te voegen aan of te verwijderen uit opgeslagen onderdelen +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Selecteer een klasse vrachtwagenstations voor weergave +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Selecteer een type vrachtwagenstation om te bouwen. Ctrl+klik om toe te voegen aan of te verwijderen uit opgeslagen onderdelen +STR_PICKER_OBJECT_CLASS_TOOLTIP :Selecteer een onderdeelklasse voor weergave +STR_PICKER_OBJECT_TYPE_TOOLTIP :Selecteer een type objet voor bouwen. Ctrr+klik om toe te voegen aan of te verwijderen uit opgeslagen onderdelen. Ctrl+klik+slepen om diagonaal te selecteren. Voeg Shift toe voor alleen inschatting van de kosten +STR_PICKER_HOUSE_CLASS_TOOLTIP :Selecteer een stadsgebied voor weergave +STR_PICKER_HOUSE_TYPE_TOOLTIP :Selecteer een type huizen om te bouwen. Ctrl+klik om toe te voegen aan of te verwijderen uit opgeslagen onderdelen +STR_HOUSE_PICKER_CAPTION :Huizen selecteren +STR_HOUSE_PICKER_CLASS_ZONE1 :Rand +STR_HOUSE_PICKER_CLASS_ZONE2 :Buitenwijken +STR_HOUSE_PICKER_CLASS_ZONE3 :Buitenste voorsteden +STR_HOUSE_PICKER_CLASS_ZONE4 :Binnenste voorsteden +STR_HOUSE_PICKER_CLASS_ZONE5 :Stadscentrum STR_STATION_CLASS_DFLT :Standaard STR_STATION_CLASS_DFLT_STATION :Standaard station @@ -4988,6 +5014,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... er i STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Wegwerkzaamheden in uitvoering STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kan deze stad niet verwijderen...{}Een station of depot verwijst naar deze plaats of een door de stad beheerde tegel kan niet worden verwijderd STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... er is geen geschikte plaats voor een standbeeld in het centrum van dit dorp +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Kan huis niet bouwen... # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... te veel industrieën diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 9fb2754939..3d70202780 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -2155,7 +2155,7 @@ STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}...存 STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... 禁用基础图形设置 '{STRING}': 未找到 STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}……禁用基础音效设置 '{STRING}': 未找到 STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... 禁用基础音乐设置 '{STRING}': 未找到 -STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}内存溢出 +STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}内存不足 STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}无法分配 {BYTES} 的 Sprite 缓存。Sprite 缓存的大小已降至 {BYTES}。OpenTTD 的性能将受到影响。请尝试停用 32bpp 图形及/或减少放大倍数,以降低内存需求 # Video initalization errors @@ -2921,7 +2921,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}修建 STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}建设船闸。按住 键点选以显示预计费用。 STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}建造船坞(可以购买或保养船只),按住 键以显示预计费用。 STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}建造码头。按住 键以合并车站,按住 Shift 键以显示预计费用。 -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}放置一个浮标,可以用作路点。按住 键操作以显示预计费用 +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}放置浮标,可以用作路点。按住 键操作以显示预计费用 STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}建设渡槽,按住 Shift 键操作可以显示所需资金 STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}修建运河。在海平面按住 键则会淹没周围土地。 STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}放置河流。按住 键以沿对角线放置。 diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 7cbc5b5395..ac78e3304e 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -437,6 +437,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Avsluta scenari STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Avsluta +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Generera städer +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Placera ut hus # Settings menu ###length 16 @@ -1083,6 +1085,7 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Musikpak STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Välj vilket musikpaket som ska användas STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Yttligare information om musikpaketet +STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Kontrollera om det finns nytt och uppdaterat innehåll att ladda ned STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(inga tillägg för att integrera med sociala plattformar installerade) @@ -2796,7 +2799,9 @@ STR_STATION_BUILD_DRAG_DROP :{BLACK}Drag & S STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg en station genom att dra & släppa STR_PICKER_MODE_ALL :Alla +STR_PICKER_MODE_ALL_TOOLTIP :Slå av/på visning av objekt från alla klasser STR_PICKER_MODE_USED :Använda +STR_PICKER_MODE_USED_TOOLTIP :Slå av/på visning av endast existerande objekt STR_PICKER_HOUSE_CLASS_TOOLTIP :Välj vilken stadszon som ska visas @@ -2809,7 +2814,7 @@ STR_STATION_CLASS_DFLT :Original STR_STATION_CLASS_DFLT_STATION :Standardstation STR_STATION_CLASS_DFLT_ROADSTOP :Standardvägstopp STR_STATION_CLASS_WAYP :Riktmärken -STR_STATION_CLASS_WAYP_WAYPOINT :Standard vägpunkt +STR_STATION_CLASS_WAYP_WAYPOINT :Standardriktmärke # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Signalval From 856ec901ca9523812b16e367b49d2baf4a28d26b Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 18 May 2024 09:17:06 +0100 Subject: [PATCH 548/695] Fix #12685: nullptr dereference when checking for equal loaded/loading groups. (#12686) Always treat empty groups as non-equal. Given that the case of both being empty is handled earlier, they cannot both be equal and empty. Additionally if a loaded or loading set are all the same, only add one reference. --- src/newgrf.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 01f96961f2..51514054fa 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -5360,10 +5360,9 @@ static void NewSpriteGroup(ByteReader *buf) GrfMsg(8, "NewSpriteGroup: + rg->loading[{}] = subset {}", i, loading[i]); } - if (std::adjacent_find(loaded.begin(), loaded.end(), std::not_equal_to<>()) == loaded.end() && - std::adjacent_find(loading.begin(), loading.end(), std::not_equal_to<>()) == loading.end() && - loaded[0] == loading[0]) - { + bool loaded_same = !loaded.empty() && std::adjacent_find(loaded.begin(), loaded.end(), std::not_equal_to<>()) == loaded.end(); + bool loading_same = !loading.empty() && std::adjacent_find(loading.begin(), loading.end(), std::not_equal_to<>()) == loading.end(); + if (loaded_same && loading_same && loaded[0] == loading[0]) { /* Both lists only contain the same value, so don't create 'Real' sprite group */ act_group = CreateGroupFromGroupID(feature, setid, type, loaded[0]); GrfMsg(8, "NewSpriteGroup: same result, skipping RealSpriteGroup = subset {}", loaded[0]); @@ -5375,11 +5374,13 @@ static void NewSpriteGroup(ByteReader *buf) group->nfo_line = _cur.nfo_line; act_group = group; + if (loaded_same && loaded.size() > 1) loaded.resize(1); for (uint16_t spriteid : loaded) { const SpriteGroup *t = CreateGroupFromGroupID(feature, setid, type, spriteid); group->loaded.push_back(t); } + if (loading_same && loading.size() > 1) loading.resize(1); for (uint16_t spriteid : loading) { const SpriteGroup *t = CreateGroupFromGroupID(feature, setid, type, spriteid); group->loading.push_back(t); From 3f5a354f37146eddfdda58411127a27d2ebf4ed6 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 18 May 2024 09:17:38 +0100 Subject: [PATCH 549/695] Codechange: Use emplace with ICURun and UniscribeRun. (#12693) --- src/gfx_layout_icu.cpp | 6 +++--- src/os/windows/string_uniscribe.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gfx_layout_icu.cpp b/src/gfx_layout_icu.cpp index 1e53d15c8a..a300d9a255 100644 --- a/src/gfx_layout_icu.cpp +++ b/src/gfx_layout_icu.cpp @@ -284,7 +284,7 @@ std::vector ItemizeBidi(UChar *buff, size_t length) UBiDiLevel level; ubidi_getLogicalRun(ubidi, start_pos, &logical_pos, &level); - runs.emplace_back(ICURun(start_pos, logical_pos - start_pos, level)); + runs.emplace_back(start_pos, logical_pos - start_pos, level); } assert(static_cast(count) == runs.size()); @@ -315,7 +315,7 @@ std::vector ItemizeScript(UChar *buff, size_t length, std::vectorstart + cur_run->length); assert(stop_pos - cur_pos > 0); - runs.push_back(ICURun(cur_pos, stop_pos - cur_pos, cur_run->level, script_itemizer.getScriptCode())); + runs.emplace_back(cur_pos, stop_pos - cur_pos, cur_run->level, script_itemizer.getScriptCode()); if (stop_pos == cur_run->start + cur_run->length) cur_run++; cur_pos = stop_pos; @@ -347,7 +347,7 @@ std::vector ItemizeStyle(std::vector &runs_current, FontMap &fon int stop_pos = std::min(font_map.first, cur_run->start + cur_run->length); assert(stop_pos - cur_pos > 0); - runs.push_back(ICURun(cur_pos, stop_pos - cur_pos, cur_run->level, cur_run->script, font_map.second)); + runs.emplace_back(cur_pos, stop_pos - cur_pos, cur_run->level, cur_run->script, font_map.second); if (stop_pos == cur_run->start + cur_run->length) cur_run++; cur_pos = stop_pos; diff --git a/src/os/windows/string_uniscribe.cpp b/src/os/windows/string_uniscribe.cpp index 3045d694f3..2baace1eda 100644 --- a/src/os/windows/string_uniscribe.cpp +++ b/src/os/windows/string_uniscribe.cpp @@ -302,7 +302,7 @@ static std::vector UniscribeItemizeString(UniscribeParagraphLayoutF /* Add a range that spans the intersection of the remaining item and font run. */ int stop_pos = std::min(i.first, (cur_item + 1)->iCharPos); assert(stop_pos - cur_pos > 0); - ranges.push_back(UniscribeRun(cur_pos, stop_pos - cur_pos, i.second, cur_item->a)); + ranges.emplace_back(cur_pos, stop_pos - cur_pos, i.second, cur_item->a); /* Shape the range. */ if (!UniscribeShapeRun(buff, ranges.back())) { From ba47d1ca2b443d61babebcdad93666d15737e685 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 18 May 2024 12:33:50 +0100 Subject: [PATCH 550/695] Fix: Allow resolving house parent scope (town) of unbuilt houses. (#12695) Return unavailable variable result, instead of nullptr dereference. --- src/newgrf_town.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/newgrf_town.cpp b/src/newgrf_town.cpp index 2843869de4..fb4f2e1ae1 100644 --- a/src/newgrf_town.cpp +++ b/src/newgrf_town.cpp @@ -17,6 +17,11 @@ /* virtual */ uint32_t TownScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const { + if (this->t == nullptr) { + *available = false; + return UINT_MAX; + } + CargoID cid; switch (variable) { /* Larger towns */ From 29ce013eda4fea147e83b23a70eebd5a216d4a27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Sat, 18 May 2024 17:04:16 +0200 Subject: [PATCH 551/695] Codechange: Pass avail(able) as reference instead of pointer since they are never nullptr (#12696) --- src/base_station_base.h | 2 +- src/newgrf_airport.cpp | 4 ++-- src/newgrf_airport.h | 2 +- src/newgrf_airporttiles.cpp | 4 ++-- src/newgrf_airporttiles.h | 2 +- src/newgrf_canal.cpp | 6 +++--- src/newgrf_debug_gui.cpp | 4 ++-- src/newgrf_engine.cpp | 10 +++++----- src/newgrf_engine.h | 2 +- src/newgrf_generic.cpp | 6 +++--- src/newgrf_house.cpp | 6 +++--- src/newgrf_house.h | 2 +- src/newgrf_industries.cpp | 6 +++--- src/newgrf_industries.h | 2 +- src/newgrf_industrytiles.cpp | 4 ++-- src/newgrf_industrytiles.h | 2 +- src/newgrf_object.cpp | 4 ++-- src/newgrf_object.h | 2 +- src/newgrf_railtype.cpp | 4 ++-- src/newgrf_railtype.h | 2 +- src/newgrf_roadstop.cpp | 4 ++-- src/newgrf_roadstop.h | 2 +- src/newgrf_roadtype.cpp | 4 ++-- src/newgrf_roadtype.h | 2 +- src/newgrf_spritegroup.cpp | 10 +++++----- src/newgrf_spritegroup.h | 2 +- src/newgrf_station.cpp | 12 ++++++------ src/newgrf_station.h | 2 +- src/newgrf_town.cpp | 6 +++--- src/newgrf_town.h | 2 +- src/station_base.h | 2 +- src/table/newgrf_debug_data.h | 24 ++++++++++++------------ src/waypoint_base.h | 2 +- 33 files changed, 75 insertions(+), 75 deletions(-) diff --git a/src/base_station_base.h b/src/base_station_base.h index f2e2e58843..0c0ad22770 100644 --- a/src/base_station_base.h +++ b/src/base_station_base.h @@ -113,7 +113,7 @@ struct BaseStation : StationPool::PoolItem<&_station_pool> { * @param available will return false if ever the variable asked for does not exist * @return the value stored in the corresponding variable */ - virtual uint32_t GetNewGRFVariable(const struct ResolverObject &object, uint8_t variable, uint8_t parameter, bool *available) const = 0; + virtual uint32_t GetNewGRFVariable(const struct ResolverObject &object, uint8_t variable, uint8_t parameter, bool &available) const = 0; /** * Update the coordinated of the sign (as shown in the viewport). diff --git a/src/newgrf_airport.cpp b/src/newgrf_airport.cpp index dca77bb3c7..1471f417e2 100644 --- a/src/newgrf_airport.cpp +++ b/src/newgrf_airport.cpp @@ -154,14 +154,14 @@ void AirportOverrideManager::SetEntitySpec(AirportSpec *as) } } -/* virtual */ uint32_t AirportScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t AirportScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const { switch (variable) { case 0x40: return this->layout; } if (this->st == nullptr) { - *available = false; + available = false; return UINT_MAX; } diff --git a/src/newgrf_airport.h b/src/newgrf_airport.h index 21ca905e37..5ac58bc72d 100644 --- a/src/newgrf_airport.h +++ b/src/newgrf_airport.h @@ -167,7 +167,7 @@ struct AirportScopeResolver : public ScopeResolver { } uint32_t GetRandomBits() const override; - uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const override; void StorePSA(uint pos, int32_t value) override; }; diff --git a/src/newgrf_airporttiles.cpp b/src/newgrf_airporttiles.cpp index d2a34fb28d..a4adf748a8 100644 --- a/src/newgrf_airporttiles.cpp +++ b/src/newgrf_airporttiles.cpp @@ -159,7 +159,7 @@ static uint32_t GetAirportTileIDAtOffset(TileIndex tile, const Station *st, uint return 0xFF << 8 | ats->grf_prop.subst_id; // so just give it the substitute } -/* virtual */ uint32_t AirportTileScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t AirportTileScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const { assert(this->st != nullptr); @@ -194,7 +194,7 @@ static uint32_t GetAirportTileIDAtOffset(TileIndex tile, const Station *st, uint Debug(grf, 1, "Unhandled airport tile variable 0x{:X}", variable); - *available = false; + available = false; return UINT_MAX; } diff --git a/src/newgrf_airporttiles.h b/src/newgrf_airporttiles.h index 53f10bab44..34b3669128 100644 --- a/src/newgrf_airporttiles.h +++ b/src/newgrf_airporttiles.h @@ -38,7 +38,7 @@ struct AirportTileScopeResolver : public ScopeResolver { } uint32_t GetRandomBits() const override; - uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const override; }; /** Resolver for tiles of an airport. */ diff --git a/src/newgrf_canal.cpp b/src/newgrf_canal.cpp index 4425ee00ff..b3e725b0d7 100644 --- a/src/newgrf_canal.cpp +++ b/src/newgrf_canal.cpp @@ -30,7 +30,7 @@ struct CanalScopeResolver : public ScopeResolver { } uint32_t GetRandomBits() const override; - uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const override; }; /** Resolver object for canals. */ @@ -59,7 +59,7 @@ struct CanalResolverObject : public ResolverObject { return IsTileType(this->tile, MP_WATER) ? GetWaterTileRandomBits(this->tile) : 0; } -/* virtual */ uint32_t CanalScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t CanalScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const { switch (variable) { /* Height of tile */ @@ -102,7 +102,7 @@ struct CanalResolverObject : public ResolverObject { Debug(grf, 1, "Unhandled canal variable 0x{:02X}", variable); - *available = false; + available = false; return UINT_MAX; } diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index e19ccba54b..18ce097972 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -169,7 +169,7 @@ public: * @param avail Return whether the variable is available. * @return The resolved variable's value. */ - virtual uint Resolve(uint index, uint var, uint param, bool *avail) const = 0; + virtual uint Resolve(uint index, uint var, uint param, bool &avail) const = 0; /** * Used to decide if the PSA needs a parameter or not. @@ -449,7 +449,7 @@ struct NewGRFInspectWindow : Window { for (const NIVariable *niv = nif->variables; niv->name != nullptr; niv++) { bool avail = true; uint param = HasVariableParameter(niv->var) ? NewGRFInspectWindow::var60params[GetFeatureNum(this->window_number)][niv->var - 0x60] : 0; - uint value = nih->Resolve(index, niv->var, param, &avail); + uint value = nih->Resolve(index, niv->var, param, avail); if (!avail) continue; diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index 4a5abcdce0..b5659581bd 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -412,7 +412,7 @@ static uint32_t PositionHelper(const Vehicle *v, bool consecutive) return chain_before | chain_after << 8 | (chain_before + chain_after + consecutive) << 16; } -static uint32_t VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *object, uint8_t variable, uint32_t parameter, bool *available) +static uint32_t VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *object, uint8_t variable, uint32_t parameter, bool &available) { /* Calculated vehicle parameters */ switch (variable) { @@ -935,11 +935,11 @@ static uint32_t VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *objec Debug(grf, 1, "Unhandled vehicle variable 0x{:X}, type 0x{:X}", variable, (uint)v->type); - *available = false; + available = false; return UINT_MAX; } -/* virtual */ uint32_t VehicleScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t VehicleScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const { if (this->v == nullptr) { /* Vehicle does not exist, so we're in a purchase list */ @@ -968,7 +968,7 @@ static uint32_t VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *objec case 0xF2: return 0; // Cargo subtype } - *available = false; + available = false; return UINT_MAX; } @@ -1398,7 +1398,7 @@ void FillNewGRFVehicleCache(const Vehicle *v) /* Only resolve when the cache isn't valid. */ if (HasBit(v->grf_cache.cache_valid, cache_entry[1])) continue; bool stub; - ro.GetScope(VSG_SCOPE_SELF)->GetVariable(cache_entry[0], 0, &stub); + ro.GetScope(VSG_SCOPE_SELF)->GetVariable(cache_entry[0], 0, stub); } /* Make sure really all bits are set. */ diff --git a/src/newgrf_engine.h b/src/newgrf_engine.h index a2795a8d2c..88e8e41303 100644 --- a/src/newgrf_engine.h +++ b/src/newgrf_engine.h @@ -39,7 +39,7 @@ struct VehicleScopeResolver : public ScopeResolver { void SetVehicle(const Vehicle *v) { this->v = v; } uint32_t GetRandomBits() const override; - uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const override; uint32_t GetTriggers() const override; }; diff --git a/src/newgrf_generic.cpp b/src/newgrf_generic.cpp index 30e3d840fe..f633715fa8 100644 --- a/src/newgrf_generic.cpp +++ b/src/newgrf_generic.cpp @@ -41,7 +41,7 @@ struct GenericScopeResolver : public ScopeResolver { { } - uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const override; private: bool ai_callback; ///< Callback comes from the AI. @@ -118,7 +118,7 @@ void AddGenericCallback(uint8_t feature, const GRFFile *file, const SpriteGroup _gcl[feature].push_front(GenericCallback(file, group)); } -/* virtual */ uint32_t GenericScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t GenericScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const { if (this->ai_callback) { switch (variable) { @@ -140,7 +140,7 @@ void AddGenericCallback(uint8_t feature, const GRFFile *file, const SpriteGroup Debug(grf, 1, "Unhandled generic feature variable 0x{:02X}", variable); - *available = false; + available = false; return UINT_MAX; } diff --git a/src/newgrf_house.cpp b/src/newgrf_house.cpp index cd90684a53..5cc41c6049 100644 --- a/src/newgrf_house.cpp +++ b/src/newgrf_house.cpp @@ -370,7 +370,7 @@ static uint32_t GetDistanceFromNearbyHouse(uint8_t parameter, TileIndex tile, Ho /** * @note Used by the resolver to get values for feature 07 deterministic spritegroups. */ -/* virtual */ uint32_t HouseScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t HouseScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const { if (this->tile == INVALID_TILE) { /* House does not yet exist, nor is it being planned to exist. Provide some default values intead. */ @@ -394,7 +394,7 @@ static uint32_t GetDistanceFromNearbyHouse(uint8_t parameter, TileIndex tile, Ho } Debug(grf, 1, "Unhandled house variable 0x{:X}", variable); - *available = false; + available = false; return UINT_MAX; } @@ -512,7 +512,7 @@ static uint32_t GetDistanceFromNearbyHouse(uint8_t parameter, TileIndex tile, Ho Debug(grf, 1, "Unhandled house variable 0x{:X}", variable); - *available = false; + available = false; return UINT_MAX; } diff --git a/src/newgrf_house.h b/src/newgrf_house.h index a56b5390e8..954417b7a7 100644 --- a/src/newgrf_house.h +++ b/src/newgrf_house.h @@ -44,7 +44,7 @@ struct HouseScopeResolver : public ScopeResolver { } uint32_t GetRandomBits() const override; - uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const override; uint32_t GetTriggers() const override; }; diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp index 7ad754f8d5..bd8fe0084b 100644 --- a/src/newgrf_industries.cpp +++ b/src/newgrf_industries.cpp @@ -156,7 +156,7 @@ static uint32_t GetCountAndDistanceOfClosestInstance(uint8_t param_setID, uint8_ return count << 16 | GB(closest_dist, 0, 16); } -/* virtual */ uint32_t IndustriesScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t IndustriesScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const { if (this->ro.callback == CBID_INDUSTRY_LOCATION) { /* Variables available during construction check. */ @@ -202,7 +202,7 @@ static uint32_t GetCountAndDistanceOfClosestInstance(uint8_t param_setID, uint8_ if (this->industry == nullptr) { Debug(grf, 1, "Unhandled variable 0x{:X} (no available industry) in callback 0x{:x}", variable, this->ro.callback); - *available = false; + available = false; return UINT_MAX; } @@ -411,7 +411,7 @@ static uint32_t GetCountAndDistanceOfClosestInstance(uint8_t param_setID, uint8_ Debug(grf, 1, "Unhandled industry variable 0x{:X}", variable); - *available = false; + available = false; return UINT_MAX; } diff --git a/src/newgrf_industries.h b/src/newgrf_industries.h index 827302ec5d..f4ac7dab0a 100644 --- a/src/newgrf_industries.h +++ b/src/newgrf_industries.h @@ -33,7 +33,7 @@ struct IndustriesScopeResolver : public ScopeResolver { } uint32_t GetRandomBits() const override; - uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const override; uint32_t GetTriggers() const override; void StorePSA(uint pos, int32_t value) override; }; diff --git a/src/newgrf_industrytiles.cpp b/src/newgrf_industrytiles.cpp index f4c6ce5aeb..bafd2a5731 100644 --- a/src/newgrf_industrytiles.cpp +++ b/src/newgrf_industrytiles.cpp @@ -58,7 +58,7 @@ uint32_t GetRelativePosition(TileIndex tile, TileIndex ind_tile) return ((y & 0xF) << 20) | ((x & 0xF) << 16) | (y << 8) | x; } -/* virtual */ uint32_t IndustryTileScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t IndustryTileScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const { switch (variable) { /* Construction state of the tile: a value between 0 and 3 */ @@ -95,7 +95,7 @@ uint32_t GetRelativePosition(TileIndex tile, TileIndex ind_tile) Debug(grf, 1, "Unhandled industry tile variable 0x{:X}", variable); - *available = false; + available = false; return UINT_MAX; } diff --git a/src/newgrf_industrytiles.h b/src/newgrf_industrytiles.h index 538c0b7675..e9431edf00 100644 --- a/src/newgrf_industrytiles.h +++ b/src/newgrf_industrytiles.h @@ -31,7 +31,7 @@ struct IndustryTileScopeResolver : public ScopeResolver { } uint32_t GetRandomBits() const override; - uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const override; uint32_t GetTriggers() const override; }; diff --git a/src/newgrf_object.cpp b/src/newgrf_object.cpp index 8491c98382..14046a469b 100644 --- a/src/newgrf_object.cpp +++ b/src/newgrf_object.cpp @@ -254,7 +254,7 @@ static uint32_t GetCountAndDistanceOfClosestInstance(uint8_t local_id, uint32_t } /** Used by the resolver to get values for feature 0F deterministic spritegroups. */ -/* virtual */ uint32_t ObjectScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t ObjectScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const { /* We get the town from the object, or we calculate the closest * town if we need to when there's no object. */ @@ -361,7 +361,7 @@ static uint32_t GetCountAndDistanceOfClosestInstance(uint8_t local_id, uint32_t unhandled: Debug(grf, 1, "Unhandled object variable 0x{:X}", variable); - *available = false; + available = false; return UINT_MAX; } diff --git a/src/newgrf_object.h b/src/newgrf_object.h index 2308d100ed..799896f309 100644 --- a/src/newgrf_object.h +++ b/src/newgrf_object.h @@ -126,7 +126,7 @@ struct ObjectScopeResolver : public ScopeResolver { } uint32_t GetRandomBits() const override; - uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const override; }; /** A resolver object to be used with feature 0F spritegroups. */ diff --git a/src/newgrf_railtype.cpp b/src/newgrf_railtype.cpp index 25f6ea6c19..f6ca99148d 100644 --- a/src/newgrf_railtype.cpp +++ b/src/newgrf_railtype.cpp @@ -23,7 +23,7 @@ return GB(tmp, 0, 2); } -/* virtual */ uint32_t RailTypeScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t RailTypeScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const { if (this->tile == INVALID_TILE) { switch (variable) { @@ -55,7 +55,7 @@ Debug(grf, 1, "Unhandled rail type tile variable 0x{:X}", variable); - *available = false; + available = false; return UINT_MAX; } diff --git a/src/newgrf_railtype.h b/src/newgrf_railtype.h index 3995409e9f..ca48a40c8d 100644 --- a/src/newgrf_railtype.h +++ b/src/newgrf_railtype.h @@ -32,7 +32,7 @@ struct RailTypeScopeResolver : public ScopeResolver { } uint32_t GetRandomBits() const override; - uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const override; }; /** Resolver object for rail types. */ diff --git a/src/newgrf_roadstop.cpp b/src/newgrf_roadstop.cpp index d8f6b196df..7e4e9be24a 100644 --- a/src/newgrf_roadstop.cpp +++ b/src/newgrf_roadstop.cpp @@ -64,7 +64,7 @@ uint32_t RoadStopScopeResolver::GetTriggers() const return this->st == nullptr ? 0 : this->st->waiting_triggers; } -uint32_t RoadStopScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const +uint32_t RoadStopScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const { auto get_road_type_variable = [&](RoadTramType rtt) -> uint32_t { RoadType rt; @@ -196,7 +196,7 @@ uint32_t RoadStopScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] u if (this->st != nullptr) return this->st->GetNewGRFVariable(this->ro, variable, parameter, available); - *available = false; + available = false; return UINT_MAX; } diff --git a/src/newgrf_roadstop.h b/src/newgrf_roadstop.h index 89111b5c62..e0b1a38ab6 100644 --- a/src/newgrf_roadstop.h +++ b/src/newgrf_roadstop.h @@ -92,7 +92,7 @@ struct RoadStopScopeResolver : public ScopeResolver { uint32_t GetRandomBits() const override; uint32_t GetTriggers() const override; - uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const override; }; /** Road stop resolver. */ diff --git a/src/newgrf_roadtype.cpp b/src/newgrf_roadtype.cpp index eeae364e0b..11aaa8ffde 100644 --- a/src/newgrf_roadtype.cpp +++ b/src/newgrf_roadtype.cpp @@ -23,7 +23,7 @@ return GB(tmp, 0, 2); } -/* virtual */ uint32_t RoadTypeScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t RoadTypeScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const { if (this->tile == INVALID_TILE) { switch (variable) { @@ -55,7 +55,7 @@ Debug(grf, 1, "Unhandled road type tile variable 0x{:X}", variable); - *available = false; + available = false; return UINT_MAX; } diff --git a/src/newgrf_roadtype.h b/src/newgrf_roadtype.h index 40d5166c56..9f0566837a 100644 --- a/src/newgrf_roadtype.h +++ b/src/newgrf_roadtype.h @@ -33,7 +33,7 @@ struct RoadTypeScopeResolver : public ScopeResolver { } uint32_t GetRandomBits() const override; - uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const override; }; /** Resolver object for road types. */ diff --git a/src/newgrf_spritegroup.cpp b/src/newgrf_spritegroup.cpp index 4dc4f72c45..95d10d6308 100644 --- a/src/newgrf_spritegroup.cpp +++ b/src/newgrf_spritegroup.cpp @@ -53,7 +53,7 @@ TemporaryStorageArray _temp_store; } } -static inline uint32_t GetVariable(const ResolverObject &object, ScopeResolver *scope, uint8_t variable, uint32_t parameter, bool *available) +static inline uint32_t GetVariable(const ResolverObject &object, ScopeResolver *scope, uint8_t variable, uint32_t parameter, bool &available) { uint32_t value; switch (variable) { @@ -103,10 +103,10 @@ static inline uint32_t GetVariable(const ResolverObject &object, ScopeResolver * * @param[out] available Set to false, in case the variable does not exist. * @return Value */ -/* virtual */ uint32_t ScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t ScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const { Debug(grf, 1, "Unhandled scope variable 0x{:X}", variable); - *available = false; + available = false; return UINT_MAX; } @@ -205,9 +205,9 @@ const SpriteGroup *DeterministicSpriteGroup::Resolve(ResolverObject &object) con /* Note: 'last_value' and 'reseed' are shared between the main chain and the procedure */ } else if (adjust.variable == 0x7B) { - value = GetVariable(object, scope, adjust.parameter, last_value, &available); + value = GetVariable(object, scope, adjust.parameter, last_value, available); } else { - value = GetVariable(object, scope, adjust.variable, adjust.parameter, &available); + value = GetVariable(object, scope, adjust.variable, adjust.parameter, available); } if (!available) { diff --git a/src/newgrf_spritegroup.h b/src/newgrf_spritegroup.h index 7ca6d01ec0..cda6f4b3a3 100644 --- a/src/newgrf_spritegroup.h +++ b/src/newgrf_spritegroup.h @@ -294,7 +294,7 @@ struct ScopeResolver { virtual uint32_t GetRandomBits() const; virtual uint32_t GetTriggers() const; - virtual uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const; + virtual uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const; virtual void StorePSA(uint reg, int32_t value); }; diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index a53983e56c..af67fbf648 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -267,7 +267,7 @@ TownScopeResolver *StationResolverObject::GetTown() return &*this->town_scope; } -/* virtual */ uint32_t StationScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t StationScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const { if (this->st == nullptr) { /* Station does not exist, so we're in a purchase list or the land slope check callback. */ @@ -295,7 +295,7 @@ TownScopeResolver *StationResolverObject::GetTown() case 0xFA: return ClampTo(TimerGameCalendar::date - CalendarTime::DAYS_TILL_ORIGINAL_BASE_YEAR); // Build date, clamped to a 16 bit value } - *available = false; + available = false; return UINT_MAX; } @@ -404,7 +404,7 @@ TownScopeResolver *StationResolverObject::GetTown() return this->st->GetNewGRFVariable(this->ro, variable, parameter, available); } -uint32_t Station::GetNewGRFVariable(const ResolverObject &object, uint8_t variable, uint8_t parameter, bool *available) const +uint32_t Station::GetNewGRFVariable(const ResolverObject &object, uint8_t variable, uint8_t parameter, bool &available) const { switch (variable) { case 0x48: { // Accepted cargo types @@ -466,11 +466,11 @@ uint32_t Station::GetNewGRFVariable(const ResolverObject &object, uint8_t variab Debug(grf, 1, "Unhandled station variable 0x{:X}", variable); - *available = false; + available = false; return UINT_MAX; } -uint32_t Waypoint::GetNewGRFVariable(const ResolverObject &, uint8_t variable, [[maybe_unused]] uint8_t parameter, bool *available) const +uint32_t Waypoint::GetNewGRFVariable(const ResolverObject &, uint8_t variable, [[maybe_unused]] uint8_t parameter, bool &available) const { switch (variable) { case 0x48: return 0; // Accepted cargo types @@ -498,7 +498,7 @@ uint32_t Waypoint::GetNewGRFVariable(const ResolverObject &, uint8_t variable, [ Debug(grf, 1, "Unhandled station variable 0x{:X}", variable); - *available = false; + available = false; return UINT_MAX; } diff --git a/src/newgrf_station.h b/src/newgrf_station.h index 225fd0fd51..5c244a270e 100644 --- a/src/newgrf_station.h +++ b/src/newgrf_station.h @@ -43,7 +43,7 @@ struct StationScopeResolver : public ScopeResolver { uint32_t GetRandomBits() const override; uint32_t GetTriggers() const override; - uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const override; }; /** Station resolver. */ diff --git a/src/newgrf_town.cpp b/src/newgrf_town.cpp index fb4f2e1ae1..d144d56561 100644 --- a/src/newgrf_town.cpp +++ b/src/newgrf_town.cpp @@ -15,10 +15,10 @@ #include "safeguards.h" -/* virtual */ uint32_t TownScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const +/* virtual */ uint32_t TownScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const { if (this->t == nullptr) { - *available = false; + available = false; return UINT_MAX; } @@ -119,7 +119,7 @@ Debug(grf, 1, "Unhandled town variable 0x{:X}", variable); - *available = false; + available = false; return UINT_MAX; } diff --git a/src/newgrf_town.h b/src/newgrf_town.h index 7c9bc3729e..b8bdb1f061 100644 --- a/src/newgrf_town.h +++ b/src/newgrf_town.h @@ -34,7 +34,7 @@ struct TownScopeResolver : public ScopeResolver { { } - uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool *available) const override; + uint32_t GetVariable(uint8_t variable, [[maybe_unused]] uint32_t parameter, bool &available) const override; void StorePSA(uint reg, int32_t value) override; }; diff --git a/src/station_base.h b/src/station_base.h index 5b73de95ef..155e2fe420 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -516,7 +516,7 @@ public: return IsAirportTile(tile) && GetStationIndex(tile) == this->index; } - uint32_t GetNewGRFVariable(const ResolverObject &object, uint8_t variable, uint8_t parameter, bool *available) const override; + uint32_t GetNewGRFVariable(const ResolverObject &object, uint8_t variable, uint8_t parameter, bool &available) const override; void GetTileArea(TileArea *ta, StationType type) const override; }; diff --git a/src/table/newgrf_debug_data.h b/src/table/newgrf_debug_data.h index 836cec3445..1be431a939 100644 --- a/src/table/newgrf_debug_data.h +++ b/src/table/newgrf_debug_data.h @@ -78,7 +78,7 @@ class NIHVehicle : public NIHelper { void SetStringParameters(uint index) const override { this->SetSimpleStringParameters(STR_VEHICLE_NAME, index); } uint32_t GetGRFID(uint index) const override { return Vehicle::Get(index)->GetGRFID(); } - uint Resolve(uint index, uint var, uint param, bool *avail) const override + uint Resolve(uint index, uint var, uint param, bool &avail) const override { Vehicle *v = Vehicle::Get(index); VehicleResolverObject ro(v->engine_type, v, VehicleResolverObject::WO_CACHED); @@ -143,7 +143,7 @@ class NIHStation : public NIHelper { void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_STATION_NAME, GetStationIndex(index), index); } uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? GetStationSpec(index)->grf_prop.grffile->grfid : 0; } - uint Resolve(uint index, uint var, uint param, bool *avail) const override + uint Resolve(uint index, uint var, uint param, bool &avail) const override { StationResolverObject ro(GetStationSpec(index), Station::GetByTile(index), index); return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); @@ -208,7 +208,7 @@ class NIHHouse : public NIHelper { void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_TOWN_NAME, GetTownIndex(index), index); } uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? HouseSpec::Get(GetHouseType(index))->grf_prop.grffile->grfid : 0; } - uint Resolve(uint index, uint var, uint param, bool *avail) const override + uint Resolve(uint index, uint var, uint param, bool &avail) const override { HouseResolverObject ro(GetHouseType(index), index, Town::GetByTile(index)); return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); @@ -258,7 +258,7 @@ class NIHIndustryTile : public NIHelper { void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_INDUSTRY_NAME, GetIndustryIndex(index), index); } uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? GetIndustryTileSpec(GetIndustryGfx(index))->grf_prop.grffile->grfid : 0; } - uint Resolve(uint index, uint var, uint param, bool *avail) const override + uint Resolve(uint index, uint var, uint param, bool &avail) const override { IndustryTileResolverObject ro(GetIndustryGfx(index), index, Industry::GetByTile(index)); return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); @@ -371,7 +371,7 @@ class NIHIndustry : public NIHelper { void SetStringParameters(uint index) const override { this->SetSimpleStringParameters(STR_INDUSTRY_NAME, index); } uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? GetIndustrySpec(Industry::Get(index)->type)->grf_prop.grffile->grfid : 0; } - uint Resolve(uint index, uint var, uint param, bool *avail) const override + uint Resolve(uint index, uint var, uint param, bool &avail) const override { Industry *i = Industry::Get(index); IndustriesResolverObject ro(i->location.tile, i, i->type); @@ -434,7 +434,7 @@ class NIHObject : public NIHelper { void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT, INVALID_STRING_ID, index); } uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? ObjectSpec::GetByTile(index)->grf_prop.grffile->grfid : 0; } - uint Resolve(uint index, uint var, uint param, bool *avail) const override + uint Resolve(uint index, uint var, uint param, bool &avail) const override { ObjectResolverObject ro(ObjectSpec::GetByTile(index), Object::GetByTile(index), index); return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); @@ -468,7 +468,7 @@ class NIHRailType : public NIHelper { void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE, INVALID_STRING_ID, index); } uint32_t GetGRFID(uint) const override { return 0; } - uint Resolve(uint index, uint var, uint param, bool *avail) const override + uint Resolve(uint index, uint var, uint param, bool &avail) const override { /* There is no unique GRFFile for the tile. Multiple GRFs can define different parts of the railtype. * However, currently the NewGRF Debug GUI does not display variables depending on the GRF (like 0x7F) anyway. */ @@ -504,7 +504,7 @@ class NIHAirportTile : public NIHelper { void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_STATION_NAME, GetStationIndex(index), index); } uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? AirportTileSpec::Get(GetAirportGfx(index))->grf_prop.grffile->grfid : 0; } - uint Resolve(uint index, uint var, uint param, bool *avail) const override + uint Resolve(uint index, uint var, uint param, bool &avail) const override { AirportTileResolverObject ro(AirportTileSpec::GetByTile(index), index, Station::GetByTile(index)); return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); @@ -545,7 +545,7 @@ class NIHAirport : public NIHelper { void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_STATION_NAME, index, Station::Get(index)->airport.tile); } uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? AirportSpec::Get(Station::Get(index)->airport.type)->grf_prop.grffile->grfid : 0; } - uint Resolve(uint index, uint var, uint param, bool *avail) const override + uint Resolve(uint index, uint var, uint param, bool &avail) const override { Station *st = Station::Get(index); AirportResolverObject ro(st->airport.tile, st, st->airport.type, st->airport.layout); @@ -592,7 +592,7 @@ class NIHTown : public NIHelper { uint32_t GetGRFID(uint) const override { return 0; } bool PSAWithParameter() const override { return true; } - uint Resolve(uint index, uint var, uint param, bool *avail) const override + uint Resolve(uint index, uint var, uint param, bool &avail) const override { TownResolverObject ro(nullptr, Town::Get(index), true); return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); @@ -636,7 +636,7 @@ class NIHRoadType : public NIHelper { void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE, INVALID_STRING_ID, index); } uint32_t GetGRFID(uint) const override { return 0; } - uint Resolve(uint index, uint var, uint param, bool *avail) const override + uint Resolve(uint index, uint var, uint param, bool &avail) const override { /* There is no unique GRFFile for the tile. Multiple GRFs can define different parts of the railtype. * However, currently the NewGRF Debug GUI does not display variables depending on the GRF (like 0x7F) anyway. */ @@ -702,7 +702,7 @@ class NIHRoadStop : public NIHelper { void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_STATION_NAME, GetStationIndex(index), index); } uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? GetRoadStopSpec(index)->grf_prop.grffile->grfid : 0; } - uint Resolve(uint index, uint var, uint32_t param, bool *avail) const override + uint Resolve(uint index, uint var, uint32_t param, bool &avail) const override { int view = GetRoadStopDir(index); if (IsDriveThroughStopTile(index)) view += 4; diff --git a/src/waypoint_base.h b/src/waypoint_base.h index f431958e6e..5e13f6e134 100644 --- a/src/waypoint_base.h +++ b/src/waypoint_base.h @@ -32,7 +32,7 @@ struct Waypoint final : SpecializedStation { return IsRailWaypointTile(tile) && GetStationIndex(tile) == this->index; } - uint32_t GetNewGRFVariable(const struct ResolverObject &object, uint8_t variable, uint8_t parameter, bool *available) const override; + uint32_t GetNewGRFVariable(const struct ResolverObject &object, uint8_t variable, uint8_t parameter, bool &available) const override; void GetTileArea(TileArea *ta, StationType type) const override; From 46d7586ab187848c50e0f3dc212d853e69d79c54 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 19 May 2024 04:43:16 +0000 Subject: [PATCH 552/695] Update: Translations from eints estonian: 8 changes by siimsoni chinese (simplified): 4 changes by ahyangyi korean: 13 changes by telk5093 --- src/lang/estonian.txt | 8 ++++++++ src/lang/korean.txt | 15 +++++++++++++-- src/lang/simplified_chinese.txt | 8 ++++---- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index b775256ebb..2b6cc2abfa 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -2854,9 +2854,16 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Vali rau STR_STATION_BUILD_DRAG_DROP :{BLACK}Lohistamine STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Ehita jaam kasutades hiirega lohistamist +STR_PICKER_MODE_ALL :Kõik +STR_HOUSE_PICKER_CAPTION :Maja valik +STR_HOUSE_PICKER_CLASS_ZONE1 :Äär +STR_HOUSE_PICKER_CLASS_ZONE2 :Äärealad +STR_HOUSE_PICKER_CLASS_ZONE3 :Äärelinnad +STR_HOUSE_PICKER_CLASS_ZONE4 :Eeslinnad +STR_HOUSE_PICKER_CLASS_ZONE5 :Kesklinn STR_STATION_CLASS_DFLT :Vaikimisi STR_STATION_CLASS_DFLT_STATION :Vaikimisi jaam @@ -5041,6 +5048,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... pole STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Teede ehitamine STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Seda asulat ei saa kõrvaldada...{}Jaam või depoo viitab asulale, või asulale kuuluvat ruutu ei saa kõrvaldada STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... asula keskuses ei leidu kujule sobivat kohta +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Maja ei saa ehitada... # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... liiga palju tööstuseid diff --git a/src/lang/korean.txt b/src/lang/korean.txt index dc04946589..030964ac9d 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -438,6 +438,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :시나리오 STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :게임 종료 +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :도시 생성 +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :건물 건설 # Settings menu ###length 16 @@ -2711,7 +2713,7 @@ STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}OpenTTD STR_TRANSPARENCY_CAPTION :{WHITE}투명 설정 STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}역명판을 보여줄 지 선택합니다. 고정하려면 CTRL+클릭하세요 STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}나무를 보여줄 지 선택합니다. 고정하려면 CTRL+클릭하세요 -STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}집을 보여줄 지 선택합니다. 고정하려면 CTRL+클릭하세요 +STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}건물을 보여줄 지 선택합니다. 고정하려면 CTRL+클릭하세요 STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}산업시설을 보여줄 지 선택합니다. 고정하려면 CTRL+클릭하세요 STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}정거장, 차량기지, 경유지 등과 같은 건물을 보여줄 지 선택합니다. 고정하려면 CTRL+클릭하세요 STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}다리를 보여줄 지 선택합니다. 고정하려면 CTRL+클릭하세요 @@ -2816,8 +2818,16 @@ STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :표시할 트 STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :설치하려는 트럭 적하장 종류를 선택하세요. CTRL+클릭하면 즐겨찾기 추가/제거가 가능합니다 STR_PICKER_OBJECT_CLASS_TOOLTIP :표시할 오브젝트 종류를 선택하세요 STR_PICKER_OBJECT_TYPE_TOOLTIP :설치하려는 오브젝트 종류를 선택합니다. CTRL+클릭+드래그하면 대각선 방향의 영역을 선택할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 +STR_PICKER_HOUSE_CLASS_TOOLTIP :표시할 도시 구역을 선택하세요 +STR_PICKER_HOUSE_TYPE_TOOLTIP :지으려는 건물 종류를 선택하세요. CTRL+클릭하면 즐겨찾기 추가/제거가 가능합니다 +STR_HOUSE_PICKER_CAPTION :건물 선택 +STR_HOUSE_PICKER_CLASS_ZONE1 :가장자리 +STR_HOUSE_PICKER_CLASS_ZONE2 :교외 +STR_HOUSE_PICKER_CLASS_ZONE3 :바깥쪽 시내 +STR_HOUSE_PICKER_CLASS_ZONE4 :안쪽 시내 +STR_HOUSE_PICKER_CLASS_ZONE5 :도시 중심 STR_STATION_CLASS_DFLT :기본 STR_STATION_CLASS_DFLT_STATION :기본 역 @@ -5005,6 +5015,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... 지 STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}도로 작업이 진행 중입니다 STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}이 도시를 삭제할 수 없습니다...{}도시나 도시 소유의 땅에 역, 정류장, 항구, 공항 또는 차량기지, 차고지, 정박소 등이 존재하면 도시를 삭제할 수 없습니다. STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... 이 도시의 중심에 동상을 세우기 적합한 장소가 없습니다 +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}건물을 지을 수 없습니다... # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... 산업시설이 너무 많습니다 @@ -5018,7 +5029,7 @@ STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... 한 STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... 인구 1200명 이상의 도시에만 지을 수 있습니다 STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... 열대우림 지역에만 지을 수 있습니다 STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... 사막 지역에만 지을 수 있습니다 -STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... 도시 안의 집이 있는 위치에만 지을 수 있습니다 +STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... 도시 안의 건물이 있는 위치에만 지을 수 있습니다 STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... 도시의 가운데 근처에만 지을 수 있습니다 STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... 낮은 지역에만 지을 수 있습니다 STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... 지도 가장자리 근처에만 놓을 수 있습니다 diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 3d70202780..96228ac0e3 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -2643,9 +2643,9 @@ STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}更新 STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}取消全选 STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}取消全部选择 STR_CONTENT_SEARCH_EXTERNAL :{BLACK}在外部网站搜索 -STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}在与 OpenTTD 没有联系的网站搜寻没有纳入 OpenTTD 內容服务的內容 +STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}在与 OpenTTD 没有联系的网站搜索没有纳入 OpenTTD 内容服务的内容 STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}正在离开游戏! -STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}在外部网站下载內容的规则及条款可能跟 OpenTTD 引用的规则及条款不同。{}您需要参照有关网站以取得在 OpenTTD 安装有关內容的资讯。{}您要継续吗? +STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}在外部网站下载内容的规则及条款可能跟 OpenTTD 引用的规则及条款不同。{}您需要参照有关网站以取得在 OpenTTD 安装有关内容的资讯。{}您要继续吗? STR_CONTENT_FILTER_TITLE :{BLACK}标签/名称过滤器 STR_CONTENT_OPEN_URL :{BLACK}主页 STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}打开该扩展包主页 @@ -4863,8 +4863,8 @@ STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}通过 STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING} STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}退回到定位历史 STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}取消定位历史撤回 -STR_TEXTFILE_WRAP_TEXT :{WHITE}強迫文字换行 -STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}強迫宽于窗格的內文自动换行 +STR_TEXTFILE_WRAP_TEXT :{WHITE}强制文字换行 +STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}强制宽于窗口的文本自动换行 STR_TEXTFILE_VIEW_README :{BLACK}查看说明 STR_TEXTFILE_VIEW_README_TOOLTIP :查看此项目的说明文件 STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}更新日志 From fb4a370d3fd4287a1d025f181f8cb0d8e648680a Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 20 May 2024 04:43:22 +0000 Subject: [PATCH 553/695] Update: Translations from eints vietnamese: 13 changes by KhoiCanDev chinese (simplified): 1 change by WenSimEHRP finnish: 11 changes by hpiirai french: 29 changes by ottdfevr polish: 1 change by aefoes --- src/lang/finnish.txt | 11 +++++++++++ src/lang/french.txt | 29 +++++++++++++++++++++++++++++ src/lang/polish.txt | 1 + src/lang/simplified_chinese.txt | 2 +- src/lang/vietnamese.txt | 13 +++++++++++++ 5 files changed, 55 insertions(+), 1 deletion(-) diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index ffb0b95441..45661c26e3 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -437,6 +437,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Sulje skenaario STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Lopeta +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Luo kuntia +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Sijoita taloja # Settings menu ###length 16 @@ -2815,8 +2817,16 @@ STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Valitse näytet STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Valitse rakennettavan lastauslaiturin tyyppi. Ctrl+napsautus lisää tallennettuihin tai poistaa tallennetuista STR_PICKER_OBJECT_CLASS_TOOLTIP :Valitse näytettävä objektien luokka STR_PICKER_OBJECT_TYPE_TOOLTIP :Valitse rakennettavan objektin tyyppi. Ctrl+napsautus lisää tallennettuihin tai poistaa tallennetuista. Ctrl+napsautus+veto valitsee alueen vinottain. Paina lisäksi vaihtonäppäintä nähdäksesi vain kustannusarvion +STR_PICKER_HOUSE_CLASS_TOOLTIP :Valitse näytettävä kunnan vyöhyke +STR_PICKER_HOUSE_TYPE_TOOLTIP :Valitse rakennettavan talon tyyppi. Ctrl+napsautus lisää tallennettuihin tai poistaa tallennetuista +STR_HOUSE_PICKER_CAPTION :Talojen valinta +STR_HOUSE_PICKER_CLASS_ZONE1 :Reuna-alueet +STR_HOUSE_PICKER_CLASS_ZONE2 :Laitamat +STR_HOUSE_PICKER_CLASS_ZONE3 :Ulommat lähiöt +STR_HOUSE_PICKER_CLASS_ZONE4 :Sisemmät lähiöt +STR_HOUSE_PICKER_CLASS_ZONE5 :Keskusta STR_STATION_CLASS_DFLT :Oletus STR_STATION_CLASS_DFLT_STATION :Oletusasema @@ -5004,6 +5014,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... kart STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Tietyöt ovat käynnissä. STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kuntaa ei voida poistaa...{}Asema tai varikko viittaa kuntaan tai kunnan omistamaa ruutua ei voida poistaa STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... tämän kunnan keskustassa ei ole sopivaa paikkaa patsaalle +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Taloa ei voida rakentaa… # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... liikaa teollisuuslaitoksia diff --git a/src/lang/french.txt b/src/lang/french.txt index 37967bca8e..a9aae4b6fb 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -438,6 +438,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Abandonner l'é STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Quitter +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Générer des villes +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Placer des maisons # Settings menu ###length 16 @@ -1084,6 +1086,7 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Musique STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Sélectionner la musique de base à utiliser STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Informations additionnelles sur la musique de base +STR_GAME_OPTIONS_ONLINE_CONTENT :Obtenir le contenu STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Vérifier les contenus nouveaux ou mis à jour téléchargeables STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(aucun plugin d'intégration avec les plateformes sociales installé) @@ -2477,6 +2480,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Votre nom de je STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Actions administratives à accomplir pour ce client STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Actions administratives à accomplir pour cette compagnie STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Rejoindre cette compagnie +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Autoriser ce client à joindre votre compagnie STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Envoyer un message à cette personne STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Envoyer un message à tous les joueurs de cette compagnie STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Envoyer un message à tous les spectateurs @@ -2797,9 +2801,33 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Choisir STR_STATION_BUILD_DRAG_DROP :{BLACK}Glisser/Déposer STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construire une gare par glisser/déposer +STR_PICKER_MODE_ALL :Tout +STR_PICKER_MODE_ALL_TOOLTIP :Basculer l'affichage des éléments de toutes les classes +STR_PICKER_MODE_USED :Utilisé +STR_PICKER_MODE_USED_TOOLTIP :Basculer l'affichage exclusif d'éléments existants +STR_PICKER_MODE_SAVED :Sauvegardé +STR_PICKER_MODE_SAVED_TOOLTIP :Basculer l'affichage exclusif des éléments sauvegardés +STR_PICKER_STATION_CLASS_TOOLTIP :Séléctionner un type de station à afficher +STR_PICKER_STATION_TYPE_TOOLTIP :Séléctionner un type de station à construire. Ctrl+Clic pour ajouter ou retirer des éléments sauvegardés. +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Séléctionner un type de point à afficher +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Séléctionner un point à construire. Ctrl+Clic pour ajouter ou retirer des éléments sauvegardés. +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Séléctionner un type d'arrêt de bus à afficher +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Séléctionner un type d'arrêt de bus à construire. Ctrl+Clic pour ajouter ou retirer des éléments sauvegardés. +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Séléctionner un type d'aire de chargement à afficher +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Séléctionner un type d'aire de chargement à construire. Ctrl+Clic pour ajouter ou retirer des éléments sauvegardés. +STR_PICKER_OBJECT_CLASS_TOOLTIP :Séléctionner un type d'objet à afficher +STR_PICKER_OBJECT_TYPE_TOOLTIP :Séléctionner un type d'objet à construire. Ctrl+Clic pour ajouter ou retirer des éléments sauvegardés. Ctrl+Clic+Déplacer pour séléctionner en diagonale. Shift pour afficher seulement le coût estimé. +STR_PICKER_HOUSE_CLASS_TOOLTIP :Séléctionner un type de zone de ville à afficher +STR_PICKER_HOUSE_TYPE_TOOLTIP :Séléctionner un type de maison à construire. Ctrl+Clic pour ajouter ou retirer des éléments sauvegardés. +STR_HOUSE_PICKER_CAPTION :Séléction de maison +STR_HOUSE_PICKER_CLASS_ZONE1 :Bord +STR_HOUSE_PICKER_CLASS_ZONE2 :Périphérie +STR_HOUSE_PICKER_CLASS_ZONE3 :Banlieue extérieure +STR_HOUSE_PICKER_CLASS_ZONE4 :Banlieue intérieure +STR_HOUSE_PICKER_CLASS_ZONE5 :Centre-ville STR_STATION_CLASS_DFLT :Par défaut STR_STATION_CLASS_DFLT_STATION :Stations par défaut @@ -4987,6 +5015,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... il n STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Route en travaux STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Impossible de supprimer cette ville...{}Une station ou un dépôt fait référence à cette ville ou une propriété municipale ne peut pas être supprimée. STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... aucun emplacement convenable disponible pour une statue dans ce centre-ville +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Impossible de construire une maison # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... trop d'industries diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 2573a13b56..9b95092768 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3181,6 +3181,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Buduj st +STR_HOUSE_PICKER_CLASS_ZONE5 :Centrum miasta STR_STATION_CLASS_DFLT :Standardowa STR_STATION_CLASS_DFLT_STATION :Standardowa stacja diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 96228ac0e3..eb61c4b4da 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -903,7 +903,7 @@ STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE} 已经达到报废年限 STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} 已经达到报废年限,必须马上更新! STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} 无法找到道路 -STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} 无法找到路线. +STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} 无法找到路线 STR_NEWS_VEHICLE_UNPROFITABLE_YEAR :{WHITE}{VEHICLE} 的去年损益为 {CURRENCY_LONG} STR_NEWS_VEHICLE_UNPROFITABLE_PERIOD :{WHITE}{VEHICLE} 上期的损益为 {CURRENCY_LONG} STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} 由于航程过远,航班无法到达。 diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 4b32743d4c..de61386a2d 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -437,6 +437,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Thoát khỏi t STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Thoát +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Khởi tạo đô thị +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Sắp xếp nhà # Settings menu ###length 16 @@ -956,6 +958,7 @@ STR_GAME_OPTIONS_VOLUME :Âm lượng STR_GAME_OPTIONS_SFX_VOLUME :Hiệu ứng âm thanh STR_GAME_OPTIONS_MUSIC_VOLUME :Âm nhạc +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Đơn vị tiền tệ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Lựa chọn đơn vị tiền tệ @@ -1053,6 +1056,7 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Tuỳ ch STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Phông chữ chống răng cưa STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Tuỳ chọn này để chống răng cưa phông chữ co dãn được +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Khảo sát tự động STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Tham gia khảo sát tự động @@ -1081,6 +1085,8 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Gói nh STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Chọn gói nhạc để sử dụng STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Thông tin thêm về gói nhạc chuẩn +STR_GAME_OPTIONS_ONLINE_CONTENT :Tải Nội Dung +STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Kiểm tra những nội dung mới & cập nhật để tải về STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(không có plugins được cài đặt để tích hợp vào nền tảng xã hội) @@ -1824,6 +1830,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Thiết lập k STR_CONFIG_SETTING_SERVINT_SHIPS :Tần suất bảo trì mặc định đối với tàu thủy: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Thiết lập khoảng thời gian bảo trì tùy chọn đối với các tàu thủy, nếu phương tiện không có riêng thời gian bảo trì này ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}Ngày +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}Phút +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :tắt @@ -2470,6 +2479,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Tên người c STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Các tác vụ quản lý thực hiện cho client này STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Các tác vụ quản lý thực hiện cho công ty này STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Gia nhập công ty này +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Cho phép máy khách này gia nhập công ty của bạn STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Gửi tin nhắn tới người chơi này STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Gửi tin nhắn tới tất cả người chơi trong công ty này STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Gửi tin nhắn tới tất cả người xem @@ -2790,6 +2800,8 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Độ d STR_STATION_BUILD_DRAG_DROP :{BLACK}Kéo & thả STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Xây dựng ga bằng các kéo & thả +STR_PICKER_MODE_ALL :Tất cả +STR_PICKER_MODE_SAVED :Đã lưu @@ -4980,6 +4992,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... khô STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Xây dựng cầu đường đang tiến hành STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Không thể xoá đo thị này...{}Có một ga, bến hoặc xưởng thuộc đô thị hoặc là 1 ô đất của đô thị không thể xoá được. STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... không có nơi nào hợp lý để dựng tượng đài ở trung tâm đô thị này +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Không thể xây dựng nhà... # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... quá nhiều nhà máy From 28e814f62a0cbf4eb0918a648dd4c35eaf5ea87c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 20 May 2024 18:34:22 +0100 Subject: [PATCH 554/695] Codechange: Use L"" instead of _T("") (#12703) --- src/video/win32_v.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index 1e65ab6ac0..315c6e3e4e 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -1276,7 +1276,7 @@ static void LoadWGLExtensions() * regarding context creation. To get around this, we create * a dummy window with a dummy context. The extension functions * remain valid even after this context is destroyed. */ - HWND wnd = CreateWindow(_T("STATIC"), _T("dummy"), WS_OVERLAPPEDWINDOW, 0, 0, 0, 0, nullptr, nullptr, GetModuleHandle(nullptr), nullptr); + HWND wnd = CreateWindow(L"STATIC", L"dummy", WS_OVERLAPPEDWINDOW, 0, 0, 0, 0, nullptr, nullptr, GetModuleHandle(nullptr), nullptr); HDC dc = GetDC(wnd); /* Set pixel format of the window. */ From 5442b0dd2dc34230f341f57d040095479ef7bfd8 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 21 May 2024 00:40:08 +0100 Subject: [PATCH 555/695] Fix: Make progress bars obey language direction. (#12704) With RTL languages, progress bars should start from the right. --- src/genworld_gui.cpp | 2 +- src/network/network_content_gui.cpp | 2 +- src/network/network_gui.cpp | 2 +- src/newgrf_gui.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index 827223e932..e8dfa4b999 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -1429,7 +1429,7 @@ struct GenerateProgressWindow : public Window { /* Draw the % complete with a bar and a text */ DrawFrameRect(r, COLOUR_GREY, FR_BORDERONLY | FR_LOWERED); Rect br = r.Shrink(WidgetDimensions::scaled.bevel); - DrawFrameRect(br.WithWidth(br.Width() * _gws.percent / 100, false), COLOUR_MAUVE, FR_NONE); + DrawFrameRect(br.WithWidth(br.Width() * _gws.percent / 100, _current_text_dir == TD_RTL), COLOUR_MAUVE, FR_NONE); SetDParam(0, _gws.percent); DrawString(br.left, br.right, CenterBounds(br.top, br.bottom, GetCharacterHeight(FS_NORMAL)), STR_GENERATION_PROGRESS, TC_FROMSTRING, SA_HOR_CENTER); break; diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index a1a8472b76..8facf62fe4 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -142,7 +142,7 @@ void BaseNetworkContentDownloadStatusWindow::DrawWidget(const Rect &r, WidgetID /* Draw the % complete with a bar and a text */ DrawFrameRect(r, COLOUR_GREY, FR_BORDERONLY | FR_LOWERED); Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); - DrawFrameRect(ir.WithWidth((uint64_t)ir.Width() * this->downloaded_bytes / this->total_bytes, false), COLOUR_MAUVE, FR_NONE); + DrawFrameRect(ir.WithWidth((uint64_t)ir.Width() * this->downloaded_bytes / this->total_bytes, _current_text_dir == TD_RTL), COLOUR_MAUVE, FR_NONE); SetDParam(0, this->downloaded_bytes); SetDParam(1, this->total_bytes); SetDParam(2, this->downloaded_bytes * 100LL / this->total_bytes); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index e8f20eccf9..e6a45e5ce9 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -2111,7 +2111,7 @@ struct NetworkJoinStatusWindow : Window { progress = 15 + _network_join_bytes * (100 - 15) / _network_join_bytes_total; break; } - DrawFrameRect(ir.WithWidth(ir.Width() * progress / 100, false), COLOUR_MAUVE, FR_NONE); + DrawFrameRect(ir.WithWidth(ir.Width() * progress / 100, _current_text_dir == TD_RTL), COLOUR_MAUVE, FR_NONE); DrawString(ir.left, ir.right, CenterBounds(ir.top, ir.bottom, GetCharacterHeight(FS_NORMAL)), STR_NETWORK_CONNECTING_1 + _network_join_status, TC_FROMSTRING, SA_HOR_CENTER); break; } diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 7cf2a5283c..163a1cc709 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -2243,7 +2243,7 @@ struct ScanProgressWindow : public Window { DrawFrameRect(r, COLOUR_GREY, FR_BORDERONLY | FR_LOWERED); Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); uint percent = scanned * 100 / std::max(1U, _settings_client.gui.last_newgrf_count); - DrawFrameRect(ir.WithWidth(ir.Width() * percent / 100, false), COLOUR_MAUVE, FR_NONE); + DrawFrameRect(ir.WithWidth(ir.Width() * percent / 100, _current_text_dir == TD_RTL), COLOUR_MAUVE, FR_NONE); SetDParam(0, percent); DrawString(ir.left, ir.right, CenterBounds(ir.top, ir.bottom, GetCharacterHeight(FS_NORMAL)), STR_GENERATION_PROGRESS, TC_FROMSTRING, SA_HOR_CENTER); break; From 5bc3723bcc9c6b9978b3810fea237546063afe6f Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 22 May 2024 04:42:40 +0000 Subject: [PATCH 556/695] Update: Translations from eints czech: 11 changes by vladoschreiner --- src/lang/czech.txt | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/lang/czech.txt b/src/lang/czech.txt index d9f359d540..bb0c3eb535 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -2875,6 +2875,8 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Stavět +STR_HOUSE_PICKER_CLASS_ZONE1 :Okraj +STR_HOUSE_PICKER_CLASS_ZONE2 :Periferie STR_STATION_CLASS_DFLT :Původní STR_STATION_CLASS_DFLT_STATION :Původní stanice @@ -4440,7 +4442,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Stávaj # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Nakládá nebo vykládá STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Odjíždí -STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Čeká na vyložení +STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Čeká na dostatečný rozestup STR_VEHICLE_STATUS_CRASHED :{RED}Nehoda! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Porucha STR_VEHICLE_STATUS_STOPPED :{RED}Zastaveno @@ -4454,7 +4456,7 @@ STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Bez př STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Míří do {WAYPOINT}, {VELOCITY} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Míří do {DEPOT}, {VELOCITY} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Údržba v {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}Rozbalit a poslat do servisu do {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}Poslat do servisu a vytvořit rozestup v {DEPOT}, {VELOCITY} STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}Nelze dosáhnout {STATION}, {VELOCITY} STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}Nelze dosáhnout {WAYPOINT}, {VELOCITY} @@ -4622,7 +4624,7 @@ STR_ORDER_DROP_REFIT_AUTO_ANY :Dostupný nákl STR_ORDER_DROP_GO_ALWAYS_DEPOT :Jeď vždy STR_ORDER_DROP_SERVICE_DEPOT :Údržba v případě potřeby STR_ORDER_DROP_HALT_DEPOT :Zastavit -STR_ORDER_DROP_UNBUNCH :Vyložit +STR_ORDER_DROP_UNBUNCH :Vytvořit rozestup # Depot action tooltips, one per vehicle type ###length VEHICLE_TYPES @@ -4699,7 +4701,7 @@ STR_ORDER_REFIT_ORDER :(Přestavět na STR_ORDER_REFIT_STOP_ORDER :(Přestavět na {STRING} a zastavit) STR_ORDER_STOP_ORDER :(Zastavit) -STR_ORDER_WAIT_TO_UNBUNCH :(čeká na vykládku) +STR_ORDER_WAIT_TO_UNBUNCH :(Vytvořit rozestup) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Nemůže použít stanici){POP_COLOUR} {STRING} {STATION} {STRING} @@ -5167,11 +5169,11 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Nelze na STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Nevhodný druh depa # Depot unbunching related errors -STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... může mít pouze jeden příkaz nalož -STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... příkaz plně naložit nelze použít dokud má vozidlo sdílený příkaz -STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... nelze vyložit vozidlo s příkazem plně naložit -STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... nelze použít podmíněné příkazy dokud má vozidlo sdílený příkaz -STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... nelze rozplánovat vozidla s podmíněným příkazem. +STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... může mít pouze jeden příkaz pro vytvoření rozestupu +STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... příkaz plně naložit nelze použít dokud má vozidlo příkaz na vytvoření rozestupu +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... nelze vytvořit rozestup pro vozidlo s příkazem plně naložit +STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... nelze použít podmíněné příkazy dokud má vozidlo příkaz pro vytvoření rozestupu +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... nelze vytvořit rozestup pro vozidla s podmíněným příkazem. # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} je po výměně moc dlouhý From 19ca4089a13edde4e69fd98111b597cd575df13a Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 22 May 2024 09:23:01 +0100 Subject: [PATCH 557/695] Codechange: Use std::filesystem::exists instead of access. (#12702) --- src/fileio.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index 84f38eabac..48c6c26db9 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -16,7 +16,6 @@ #include "tar_type.h" #ifdef _WIN32 #include -# define access _taccess #elif defined(__HAIKU__) #include #include @@ -135,7 +134,8 @@ bool FioCheckFileExists(const std::string &filename, Subdirectory subdir) */ bool FileExists(const std::string &filename) { - return access(OTTD2FS(filename).c_str(), 0) == 0; + std::error_code ec; + return std::filesystem::exists(OTTD2FS(filename), ec); } /** From 42fc32243d615fdaf0f9d2ea4393fc2d446f5ff9 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 22 May 2024 09:43:01 +0100 Subject: [PATCH 558/695] Fix #12681: Abstract filetype not set for network client join savegames (#12701) --- src/network/network_client.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index b62b716b63..5e85deaefe 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -853,6 +853,10 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_DONE(Packet /* The map is done downloading, load it */ ClearErrorMessages(); + + /* Set the abstract filetype. This is read during savegame load. */ + _file_to_saveload.SetMode(SLO_LOAD, FT_SAVEGAME, DFT_GAME_FILE); + bool load_success = SafeLoad({}, SLO_LOAD, DFT_GAME_FILE, GM_NORMAL, NO_DIRECTORY, this->savegame); this->savegame = nullptr; From 7e12b5ff0f531a62197c6d5f53896270261c60ae Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 22 May 2024 18:06:34 +0100 Subject: [PATCH 559/695] Fix: Crash if interface scale or font size changes with chat box present. (#12705) Caused by the chat box being undrawn with the new dimensions, leading to out-of-bounding memory access. --- src/window.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/window.cpp b/src/window.cpp index 142ba017e8..6a5a2eee34 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -3330,6 +3330,7 @@ void ReInitAllWindows(bool zoom_changed) ReInitWindow(w, zoom_changed); } + if (_networking) NetworkUndrawChatMessage(); NetworkReInitChatBoxSize(); /* Make sure essential parts of all windows are visible */ From 766350bfd2dd1d333cbb60d37f93b3818e492b3c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 22 May 2024 18:06:59 +0100 Subject: [PATCH 560/695] Fix: Hide empty house 'classes' in house picker. (#12694) Picker class list should not list classes with no items. The house picker could break this 'rule' with NewGRFs loaded. --- src/town_gui.cpp | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 483ff890c9..4a9c536301 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -1414,15 +1414,32 @@ public: void SetClimateMask() { switch (_settings_game.game_creation.landscape) { - case LT_TEMPERATE: climate_mask = HZ_TEMP; break; - case LT_ARCTIC: climate_mask = HZ_SUBARTC_ABOVE | HZ_SUBARTC_BELOW; break; - case LT_TROPIC: climate_mask = HZ_SUBTROPIC; break; - case LT_TOYLAND: climate_mask = HZ_TOYLND; break; + case LT_TEMPERATE: this->climate_mask = HZ_TEMP; break; + case LT_ARCTIC: this->climate_mask = HZ_SUBARTC_ABOVE | HZ_SUBARTC_BELOW; break; + case LT_TROPIC: this->climate_mask = HZ_SUBTROPIC; break; + case LT_TOYLAND: this->climate_mask = HZ_TOYLND; break; default: NOT_REACHED(); } + + /* In some cases, not all 'classes' (house zones) have distinct houses, so we need to disable those. + * As we need to check all types, and this cannot change with the picker window open, pre-calculate it. + * This loop calls GetTypeName() instead of directly checking properties so that there is no discrepancy. */ + this->class_mask = 0; + + int num_classes = this->GetClassCount(); + for (int cls_id = 0; cls_id < num_classes; ++cls_id) { + int num_types = this->GetTypeCount(cls_id); + for (int id = 0; id < num_types; ++id) { + if (this->GetTypeName(cls_id, id) != INVALID_STRING_ID) { + SetBit(this->class_mask, cls_id); + break; + } + } + } } HouseZones climate_mask; + uint8_t class_mask; ///< Mask of available 'classes'. static inline int sel_class; ///< Currently selected 'class'. static inline int sel_type; ///< Currently selected HouseID. @@ -1452,8 +1469,9 @@ public: StringID GetClassName(int id) const override { - if (id < GetClassCount()) return zone_names[id]; - return INVALID_STRING_ID; + if (id >= GetClassCount()) return INVALID_STRING_ID; + if (!HasBit(this->class_mask, id)) return INVALID_STRING_ID; + return zone_names[id]; } int GetTypeCount(int cls_id) const override From 8a6745b26f0087d9a801ed2cf4dd7e4b99ce0b09 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 22 May 2024 19:06:52 +0100 Subject: [PATCH 561/695] Codechange: Use PIP instead of spacer widgets for OSK spacing. (#12709) This (slightly) simplifies the OSK widget layout. --- src/osk_gui.cpp | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/osk_gui.cpp b/src/osk_gui.cpp index 23c1a676e1..72d10e960f 100644 --- a/src/osk_gui.cpp +++ b/src/osk_gui.cpp @@ -227,16 +227,10 @@ static void AddKey(std::unique_ptr &hor, int pad_y, int num_h int key_width = HALF_KEY_WIDTH + (INTER_KEY_SPACE + HALF_KEY_WIDTH) * (num_half - 1); if (widtype == NWID_SPACER) { - if (!hor->IsEmpty()) key_width += INTER_KEY_SPACE; auto spc = std::make_unique(key_width, 0); spc->SetMinimalTextLines(1, pad_y, FS_NORMAL); hor->Add(std::move(spc)); } else { - if (!hor->IsEmpty()) { - auto spc = std::make_unique(INTER_KEY_SPACE, 0); - spc->SetMinimalTextLines(1, pad_y, FS_NORMAL); - hor->Add(std::move(spc)); - } auto leaf = std::make_unique(widtype, COLOUR_GREY, widnum, widdata, STR_NULL); leaf->SetMinimalSize(key_width, 0); leaf->SetMinimalTextLines(1, pad_y, FS_NORMAL); @@ -248,6 +242,7 @@ static void AddKey(std::unique_ptr &hor, int pad_y, int num_h static std::unique_ptr MakeTopKeys() { auto hor = std::make_unique(); + hor->SetPIP(0, INTER_KEY_SPACE, 0); AddKey(hor, TOP_KEY_PADDING, 6 * 2, WWT_TEXTBTN, WID_OSK_CANCEL, STR_BUTTON_CANCEL); AddKey(hor, TOP_KEY_PADDING, 6 * 2, WWT_TEXTBTN, WID_OSK_OK, STR_BUTTON_OK ); @@ -259,6 +254,7 @@ static std::unique_ptr MakeTopKeys() static std::unique_ptr MakeNumberKeys() { std::unique_ptr hor = std::make_unique(); + hor->SetPIP(0, INTER_KEY_SPACE, 0); for (WidgetID widnum = WID_OSK_NUMBERS_FIRST; widnum <= WID_OSK_NUMBERS_LAST; widnum++) { AddKey(hor, KEY_PADDING, 2, WWT_PUSHBTN, widnum, 0x0); @@ -270,6 +266,7 @@ static std::unique_ptr MakeNumberKeys() static std::unique_ptr MakeQwertyKeys() { std::unique_ptr hor = std::make_unique(); + hor->SetPIP(0, INTER_KEY_SPACE, 0); AddKey(hor, KEY_PADDING, 3, WWT_PUSHIMGBTN, WID_OSK_SPECIAL, SPR_OSK_SPECIAL); for (WidgetID widnum = WID_OSK_QWERTY_FIRST; widnum <= WID_OSK_QWERTY_LAST; widnum++) { @@ -283,6 +280,7 @@ static std::unique_ptr MakeQwertyKeys() static std::unique_ptr MakeAsdfgKeys() { std::unique_ptr hor = std::make_unique(); + hor->SetPIP(0, INTER_KEY_SPACE, 0); AddKey(hor, KEY_PADDING, 4, WWT_IMGBTN, WID_OSK_CAPS, SPR_OSK_CAPS); for (WidgetID widnum = WID_OSK_ASDFG_FIRST; widnum <= WID_OSK_ASDFG_LAST; widnum++) { @@ -295,6 +293,7 @@ static std::unique_ptr MakeAsdfgKeys() static std::unique_ptr MakeZxcvbKeys() { std::unique_ptr hor = std::make_unique(); + hor->SetPIP(0, INTER_KEY_SPACE, 0); AddKey(hor, KEY_PADDING, 3, WWT_IMGBTN, WID_OSK_SHIFT, SPR_OSK_SHIFT); for (WidgetID widnum = WID_OSK_ZXCVB_FIRST; widnum <= WID_OSK_ZXCVB_LAST; widnum++) { @@ -308,6 +307,7 @@ static std::unique_ptr MakeZxcvbKeys() static std::unique_ptr MakeSpacebarKeys() { auto hor = std::make_unique(); + hor->SetPIP(0, INTER_KEY_SPACE, 0); AddKey(hor, KEY_PADDING, 8, NWID_SPACER, 0, 0); AddKey(hor, KEY_PADDING, 13, WWT_PUSHTXTBTN, WID_OSK_SPACE, STR_EMPTY); @@ -323,13 +323,15 @@ static constexpr NWidgetPart _nested_osk_widgets[] = { NWidget(WWT_PANEL, COLOUR_GREY), NWidget(WWT_EDITBOX, COLOUR_GREY, WID_OSK_TEXT), SetMinimalSize(252, 12), SetPadding(2, 2, 2, 2), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY), SetPIP(5, 2, 3), - NWidgetFunction(MakeTopKeys), SetPadding(0, 3, 0, 3), - NWidgetFunction(MakeNumberKeys), SetPadding(0, 3, 0, 3), - NWidgetFunction(MakeQwertyKeys), SetPadding(0, 3, 0, 3), - NWidgetFunction(MakeAsdfgKeys), SetPadding(0, 3, 0, 3), - NWidgetFunction(MakeZxcvbKeys), SetPadding(0, 3, 0, 3), - NWidgetFunction(MakeSpacebarKeys), SetPadding(0, 3, 0, 3), + NWidget(WWT_PANEL, COLOUR_GREY), + NWidget(NWID_VERTICAL), SetPadding(3), SetPIP(0, INTER_KEY_SPACE, 0), + NWidgetFunction(MakeTopKeys), + NWidgetFunction(MakeNumberKeys), + NWidgetFunction(MakeQwertyKeys), + NWidgetFunction(MakeAsdfgKeys), + NWidgetFunction(MakeZxcvbKeys), + NWidgetFunction(MakeSpacebarKeys), + EndContainer(), EndContainer(), }; From fea9ffa808b040a197e2a84507c68640ea824c77 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Thu, 4 Apr 2024 20:45:00 +0200 Subject: [PATCH 562/695] Codechange: also allow removing clients from the company allow lists --- src/command_type.h | 2 +- src/company_cmd.cpp | 38 ++++++++++++++++++++++++++++++---- src/company_cmd.h | 4 ++-- src/company_type.h | 8 +++++++ src/network/network_gui.cpp | 2 +- src/network/network_server.cpp | 7 ++++--- 6 files changed, 50 insertions(+), 11 deletions(-) diff --git a/src/command_type.h b/src/command_type.h index 193802ef17..2d7fc86672 100644 --- a/src/command_type.h +++ b/src/command_type.h @@ -295,7 +295,7 @@ enum Commands : uint16_t { CMD_CREATE_SUBSIDY, ///< create a new subsidy CMD_COMPANY_CTRL, ///< used in multiplayer to create a new companies etc. - CMD_COMPANY_ADD_ALLOW_LIST, ///< Used in multiplayer to add a client's public key to the company's allow list. + CMD_COMPANY_ALLOW_LIST_CTRL, ///< Used in multiplayer to add/remove a client's public key to/from the company's allow list. CMD_CUSTOM_NEWS_ITEM, ///< create a custom news message CMD_CREATE_GOAL, ///< create a new goal CMD_REMOVE_GOAL, ///< remove a goal diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index ec9d273857..74ad2893f4 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -979,16 +979,46 @@ CommandCost CmdCompanyCtrl(DoCommandFlag flags, CompanyCtrlAction cca, CompanyID return CommandCost(); } +static bool ExecuteAllowListCtrlAction(CompanyAllowListCtrlAction action, Company *c, const std::string &public_key) +{ + switch (action) { + case CALCA_ADD: + return c->allow_list.Add(public_key); + + case CALCA_REMOVE: + return c->allow_list.Remove(public_key); + + default: + NOT_REACHED(); + } +} + /** - * Add the given public key to the allow list of this company. + * Add or remove the given public key to the allow list of this company. * @param flags Operation to perform. - * @param public_key The public key of the client to add. + * @param action The action to perform. + * @param public_key The public key of the client to add or remove. * @return The cost of this operation or an error. */ -CommandCost CmdCompanyAddAllowList(DoCommandFlag flags, const std::string &public_key) +CommandCost CmdCompanyAllowListCtrl(DoCommandFlag flags, CompanyAllowListCtrlAction action, const std::string &public_key) { + Company *c = Company::GetIfValid(_current_company); + if (c == nullptr) return CMD_ERROR; + + /* The public key length includes the '\0'. */ + if (public_key.size() != NETWORK_PUBLIC_KEY_LENGTH - 1) return CMD_ERROR; + + switch (action) { + case CALCA_ADD: + case CALCA_REMOVE: + break; + + default: + return CMD_ERROR; + } + if (flags & DC_EXEC) { - if (Company::Get(_current_company)->allow_list.Add(public_key)) { + if (ExecuteAllowListCtrlAction(action, c, public_key)) { InvalidateWindowData(WC_CLIENT_LIST, 0); SetWindowDirty(WC_COMPANY, _current_company); } diff --git a/src/company_cmd.h b/src/company_cmd.h index 4ee9efc1e9..513293a995 100644 --- a/src/company_cmd.h +++ b/src/company_cmd.h @@ -18,7 +18,7 @@ enum ClientID : uint32_t; enum Colours : uint8_t; CommandCost CmdCompanyCtrl(DoCommandFlag flags, CompanyCtrlAction cca, CompanyID company_id, CompanyRemoveReason reason, ClientID client_id); -CommandCost CmdCompanyAddAllowList(DoCommandFlag flags, const std::string &public_key); +CommandCost CmdCompanyAllowListCtrl(DoCommandFlag flags, CompanyAllowListCtrlAction action, const std::string &public_key); CommandCost CmdGiveMoney(DoCommandFlag flags, Money money, CompanyID dest_company); CommandCost CmdRenameCompany(DoCommandFlag flags, const std::string &text); CommandCost CmdRenamePresident(DoCommandFlag flags, const std::string &text); @@ -26,7 +26,7 @@ CommandCost CmdSetCompanyManagerFace(DoCommandFlag flags, CompanyManagerFace cmf CommandCost CmdSetCompanyColour(DoCommandFlag flags, LiveryScheme scheme, bool primary, Colours colour); DEF_CMD_TRAIT(CMD_COMPANY_CTRL, CmdCompanyCtrl, CMD_SPECTATOR | CMD_CLIENT_ID | CMD_NO_EST, CMDT_SERVER_SETTING) -DEF_CMD_TRAIT(CMD_COMPANY_ADD_ALLOW_LIST, CmdCompanyAddAllowList, CMD_NO_EST, CMDT_SERVER_SETTING) +DEF_CMD_TRAIT(CMD_COMPANY_ALLOW_LIST_CTRL, CmdCompanyAllowListCtrl, CMD_NO_EST, CMDT_SERVER_SETTING) DEF_CMD_TRAIT(CMD_GIVE_MONEY, CmdGiveMoney, 0, CMDT_MONEY_MANAGEMENT) DEF_CMD_TRAIT(CMD_RENAME_COMPANY, CmdRenameCompany, 0, CMDT_COMPANY_SETTING) DEF_CMD_TRAIT(CMD_RENAME_PRESIDENT, CmdRenamePresident, 0, CMDT_COMPANY_SETTING) diff --git a/src/company_type.h b/src/company_type.h index c119a17719..355bde8630 100644 --- a/src/company_type.h +++ b/src/company_type.h @@ -72,4 +72,12 @@ enum CompanyCtrlAction : uint8_t { CCA_END, ///< Sentinel for end. }; +/** The action to do with CMD_COMPANY_ALLOW_LIST_CTRL. */ +enum CompanyAllowListCtrlAction : uint8_t { + CALCA_ADD, ///< Create a public key. + CALCA_REMOVE, ///< Remove a public key. + + CALCA_END, ///< Sentinel for end. +}; + #endif /* COMPANY_TYPE_H */ diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index e6a45e5ce9..fb5ced4066 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1519,7 +1519,7 @@ private: static void OnClickClientAuthorize([[maybe_unused]] NetworkClientListWindow *w, [[maybe_unused]] Point pt, ClientID client_id) { AutoRestoreBackup cur_company(_current_company, NetworkClientInfo::GetByClientID(_network_own_client_id)->client_playas); - Command::Post(NetworkClientInfo::GetByClientID(client_id)->public_key); + Command::Post(CALCA_ADD, NetworkClientInfo::GetByClientID(client_id)->public_key); } /** diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 0db16a5660..be04e39a99 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -1117,11 +1117,12 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_COMMAND(Packet } } - if (cp.cmd == CMD_COMPANY_ADD_ALLOW_LIST) { + if (cp.cmd == CMD_COMPANY_ALLOW_LIST_CTRL) { /* Maybe the client just got moved before allowing? */ if (ci->client_id != CLIENT_ID_SERVER && ci->client_playas != cp.company) return NETWORK_RECV_STATUS_OKAY; - std::string public_key = std::get<0>(EndianBufferReader::ToValue::Args>(cp.data)); + /* Only allow clients to add/remove currently joined clients. The server owner does not go via this method, so is allowed to do more. */ + std::string public_key = std::get<1>(EndianBufferReader::ToValue::Args>(cp.data)); bool found = false; for (const NetworkClientInfo *info : NetworkClientInfo::Iterate()) { if (info->public_key == public_key) { @@ -2164,7 +2165,7 @@ void NetworkServerNewCompany(const Company *c, NetworkClientInfo *ci) * different state/president/company name in the different clients, we need to * circumvent the normal ::Post logic and go directly to sending the command. */ - Command::SendNet(STR_NULL, c->index, ci->public_key); + Command::SendNet(STR_NULL, c->index, CALCA_ADD, ci->public_key); Command::SendNet(STR_NULL, c->index, ci->client_name); NetworkServerSendChat(NETWORK_ACTION_COMPANY_NEW, DESTTYPE_BROADCAST, 0, "", ci->client_id, c->index + 1); From b2f1a06defd7b1e7a1ebe09855bb122cc9613e1b Mon Sep 17 00:00:00 2001 From: Rubidium Date: Thu, 4 Apr 2024 21:30:36 +0200 Subject: [PATCH 563/695] Change: support listing/updating authorized keys of companies by the admin in the console --- src/console_cmds.cpp | 128 ++++++++++++++++++++++++++++++------------- 1 file changed, 91 insertions(+), 37 deletions(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index f4bbdc9d65..a39bca463d 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1913,6 +1913,52 @@ static std::vector> _consol { "server", &_settings_client.network.server_authorized_keys }, }; +enum ConNetworkAuthorizedKeyAction { + CNAKA_LIST, + CNAKA_ADD, + CNAKA_REMOVE, +}; + +static void PerformNetworkAuthorizedKeyAction(std::string_view name, NetworkAuthorizedKeys *authorized_keys, ConNetworkAuthorizedKeyAction action, const std::string &authorized_key, CompanyID company = INVALID_COMPANY) +{ + switch (action) { + case CNAKA_LIST: + IConsolePrint(CC_WHITE, "The authorized keys for {} are:", name); + for (auto &ak : *authorized_keys) IConsolePrint(CC_INFO, " {}", ak); + return; + + case CNAKA_ADD: + if (authorized_keys->Contains(authorized_key)) { + IConsolePrint(CC_WARNING, "Not added {} to {} as it already exists.", authorized_key, name); + return; + } + + if (company == INVALID_COMPANY) { + authorized_keys->Add(authorized_key); + } else { + AutoRestoreBackup backup(_current_company, company); + Command::Post(CALCA_ADD, authorized_key); + } + IConsolePrint(CC_INFO, "Added {} to {}.", authorized_key, name); + return; + + case CNAKA_REMOVE: + if (!authorized_keys->Contains(authorized_key)) { + IConsolePrint(CC_WARNING, "Not removed {} from {} as it does not exist.", authorized_key, name); + return; + } + + if (company == INVALID_COMPANY) { + authorized_keys->Remove(authorized_key); + } else { + AutoRestoreBackup backup(_current_company, company); + Command::Post(CALCA_REMOVE, authorized_key); + } + IConsolePrint(CC_INFO, "Removed {} from {}.", authorized_key, name); + return; + } +} + DEF_CONSOLE_CMD(ConNetworkAuthorizedKey) { if (argc <= 2) { @@ -1924,29 +1970,31 @@ DEF_CONSOLE_CMD(ConNetworkAuthorizedKey) std::string buffer; for (auto [name, _] : _console_cmd_authorized_keys) fmt::format_to(std::back_inserter(buffer), ", {}", name); - IConsolePrint(CC_HELP, "The supported types are: all{}.", buffer); + IConsolePrint(CC_HELP, "The supported types are: all{} and company:.", buffer); return true; } - bool valid_type = false; ///< Whether a valid type was given. - - for (auto [name, authorized_keys] : _console_cmd_authorized_keys) { - if (!StrEqualsIgnoreCase(argv[2], name) && !StrEqualsIgnoreCase(argv[2], "all")) continue; - - valid_type = true; - - if (StrEqualsIgnoreCase(argv[1], "list")) { - IConsolePrint(CC_WHITE, "The authorized keys for {} are:", name); - for (auto &authorized_key : *authorized_keys) IConsolePrint(CC_INFO, " {}", authorized_key); - continue; - } + ConNetworkAuthorizedKeyAction action; + std::string_view action_string = argv[1]; + if (StrEqualsIgnoreCase(action_string, "list")) { + action = CNAKA_LIST; + } else if (StrEqualsIgnoreCase(action_string, "add")) { + action = CNAKA_ADD; + } else if (StrEqualsIgnoreCase(action_string, "remove") || StrEqualsIgnoreCase(action_string, "delete")) { + action = CNAKA_REMOVE; + } else { + IConsolePrint(CC_WARNING, "No valid action was given."); + return false; + } + std::string authorized_key; + if (action != CNAKA_LIST) { if (argc <= 3) { IConsolePrint(CC_ERROR, "You must enter the key."); return false; } - std::string authorized_key = argv[3]; + authorized_key = argv[3]; if (StrStartsWithIgnoreCase(authorized_key, "client:")) { std::string id_string(authorized_key.substr(7)); authorized_key = NetworkGetPublicKeyOfClient(static_cast(std::stoi(id_string))); @@ -1956,34 +2004,40 @@ DEF_CONSOLE_CMD(ConNetworkAuthorizedKey) } } - if (StrEqualsIgnoreCase(argv[1], "add")) { - if (authorized_keys->Add(authorized_key)) { - IConsolePrint(CC_INFO, "Added {} to {}.", authorized_key, name); - } else { - IConsolePrint(CC_WARNING, "Not added {} to {} as it already exists.", authorized_key, name); - } - continue; + if (authorized_key.size() != NETWORK_PUBLIC_KEY_LENGTH - 1) { + IConsolePrint(CC_ERROR, "You must enter a valid authorized key."); + return false; } - - if (StrEqualsIgnoreCase(argv[1], "remove")) { - if (authorized_keys->Remove(authorized_key)) { - IConsolePrint(CC_INFO, "Removed {} from {}.", authorized_key, name); - } else { - IConsolePrint(CC_WARNING, "Not removed {} from {} as it does not exist.", authorized_key, name); - } - continue; - } - - IConsolePrint(CC_WARNING, "No valid action was given."); - return false; } - if (!valid_type) { - IConsolePrint(CC_WARNING, "No valid type was given."); - return false; + std::string_view type = argv[2]; + if (StrEqualsIgnoreCase(type, "all")) { + for (auto [name, authorized_keys] : _console_cmd_authorized_keys) PerformNetworkAuthorizedKeyAction(name, authorized_keys, action, authorized_key); + for (Company *c : Company::Iterate()) PerformNetworkAuthorizedKeyAction(fmt::format("company:{}", c->index + 1), &c->allow_list, action, authorized_key, c->index); + return true; } - return true; + if (StrStartsWithIgnoreCase(type, "company:")) { + std::string id_string(type.substr(8)); + Company *c = Company::GetIfValid(std::stoi(id_string) - 1); + if (c == nullptr) { + IConsolePrint(CC_ERROR, "You must enter a valid company id; see 'companies'."); + return false; + } + + PerformNetworkAuthorizedKeyAction(type, &c->allow_list, action, authorized_key, c->index); + return true; + } + + for (auto [name, authorized_keys] : _console_cmd_authorized_keys) { + if (StrEqualsIgnoreCase(type, name)) continue; + + PerformNetworkAuthorizedKeyAction(name, authorized_keys, action, authorized_key); + return true; + } + + IConsolePrint(CC_WARNING, "No valid type was given."); + return false; } From 8f6e21617fd505d25e377c0295e131f3ce22ee75 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Wed, 22 May 2024 17:56:03 -0400 Subject: [PATCH 564/695] Fix #12591: Give descriptive error when station construction fails due to wrong layout (#12678) --- src/lang/english.txt | 2 ++ src/station_cmd.cpp | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 6d64e76672..881db7cfc7 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -5052,6 +5052,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Can't bu STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Adjoins more than one existing station/loading area STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... station too spread out +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... unsupported number of tracks +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... unsupported length STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Too many stations/loading areas STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Too many railway station parts STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Too many bus stops diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 1464beef8d..ffca7085b4 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1389,9 +1389,8 @@ CommandCost CmdBuildRailStation(DoCommandFlag flags, TileIndex tile_org, RailTyp /* Perform NewStation checks */ /* Check if the station size is permitted */ - if (HasBit(statspec->disallowed_platforms, std::min(numtracks - 1, 7)) || HasBit(statspec->disallowed_lengths, std::min(plat_len - 1, 7))) { - return CMD_ERROR; - } + if (HasBit(statspec->disallowed_platforms, std::min(numtracks - 1, 7))) return_cmd_error(STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS); + if (HasBit(statspec->disallowed_lengths, std::min(plat_len - 1, 7))) return_cmd_error(STR_ERROR_STATION_DISALLOWED_LENGTH); /* Check if the station is buildable */ if (HasBit(statspec->callback_mask, CBM_STATION_AVAIL)) { From 9f13d3ff2b7ce8cada09d40951eb89fdb51595d0 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 23 May 2024 04:40:46 +0000 Subject: [PATCH 565/695] Update: Translations from eints chinese (simplified): 2 changes by WenSimEHRP greek: 11 changes by gh658804 --- src/lang/greek.txt | 11 +++++++++++ src/lang/simplified_chinese.txt | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 6ea0bb8ae0..0d25b665f8 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -499,6 +499,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Έξοδος α STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Έξοδος +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Δημιουργία πόλεων +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Τοποθέτηση σπιτιών # Settings menu ###length 16 @@ -2908,8 +2910,16 @@ STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Επιλογή STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Επιλογή κατηγορίας σταθμών φορτηγών για κατασκευή. Ctrl+κλικ για προσθήκη σε ή αφαίρεση από αποθηκευμένα στοιχεία STR_PICKER_OBJECT_CLASS_TOOLTIP :Επιλογή κατηγορίας αντικειμένων για εμφάνιση STR_PICKER_OBJECT_TYPE_TOOLTIP :Επιλογή κατηγορίας αντικειμένων για εμφάνιση. Ctrl+κλικ για προσθήκη σε ή αφαίρεση από αποθηκευμένα στοιχεία. Ctrl+κλικ+σύρσιμο για να επιλεγεί διαγώνια περιοχή. Επίσης, πατήστε Shift για εμφάνιση εκτιμώμενου κόστους μόνο +STR_PICKER_HOUSE_CLASS_TOOLTIP :Επιλέξτε τη ζώνη της πόλης που θέλετε να εμφανίσετε +STR_PICKER_HOUSE_TYPE_TOOLTIP :Επιλογή τύπου σπιτιού για κατασκευή. Ctrl+κλικ για προσθήκη σε ή αφαίρεση από αποθηκευμένα στοιχεία +STR_HOUSE_PICKER_CAPTION :Επιλογή Σπιτιού +STR_HOUSE_PICKER_CLASS_ZONE1 :Άκρη +STR_HOUSE_PICKER_CLASS_ZONE2 :Περίχωρα +STR_HOUSE_PICKER_CLASS_ZONE3 :Εξωτερικά Προάστια +STR_HOUSE_PICKER_CLASS_ZONE4 :Εσωτερικά Προάστια +STR_HOUSE_PICKER_CLASS_ZONE5 :Κέντρο της πόλης STR_STATION_CLASS_DFLT :Προεπιλεγμένος STR_STATION_CLASS_DFLT_STATION :Προεπιλεγμένος σταθμός @@ -5105,6 +5115,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... δε STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Έργα οδοποιίας σε εξέλιξη STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Δεν γίνεται να διαγραφεί η πόλη...{}Ένας σταθμός ή ένα αμαξοστάσιο που αναφέρεται στην πόλη ή ένα τετραγωνίδιο της πόλης δεν μπορεί να αφαιρεθεί STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... δεν υπάρχει κατάλληλο μέρος για άγαλμα στο κέντρο αυτής της πόλης +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Δεν ήταν δυνατό το χτίσιμο του σπιτιού... # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... πάρα πολλές βιομηχανίες diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index eb61c4b4da..80630600e6 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -529,7 +529,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :删除全部消 STR_ABOUT_MENU_LAND_BLOCK_INFO :查询地块信息 STR_ABOUT_MENU_HELP :帮助和指南 STR_ABOUT_MENU_TOGGLE_CONSOLE :切换到控制台模式 -STR_ABOUT_MENU_AI_DEBUG :AI /游戏脚本调试 +STR_ABOUT_MENU_AI_DEBUG :AI / 游戏脚本调试 STR_ABOUT_MENU_SCREENSHOT :屏幕截图 STR_ABOUT_MENU_SHOW_FRAMERATE :显示帧率 STR_ABOUT_MENU_ABOUT_OPENTTD :关于 OpenTTD @@ -2567,7 +2567,7 @@ STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}您的 STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}您的计算机加入服务器用时过长 STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}您的玩家名不合法 -STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}失去链接 +STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}连接可能中断 STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}已经有 {NUM} 秒没有从服务器收到任何数据 ###length 22 From b2572c7ca8f0df9bd1d8ee09f313fd318abe7e0c Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 11 May 2024 10:05:31 +0100 Subject: [PATCH 566/695] Fix #12563: Race condition setting finish flag in WinHTTP --- src/network/core/http_winhttp.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/network/core/http_winhttp.cpp b/src/network/core/http_winhttp.cpp index ccba25ee62..11fa7bf5b7 100644 --- a/src/network/core/http_winhttp.cpp +++ b/src/network/core/http_winhttp.cpp @@ -121,8 +121,8 @@ void NetworkHTTPRequest::WinHttpCallback(DWORD code, void *info, DWORD length) /* Make sure we are not in a redirect loop. */ if (this->depth++ > 5) { Debug(net, 0, "HTTP request failed: too many redirects"); - this->finished = true; this->callback.OnFailure(); + this->finished = true; return; } break; @@ -144,8 +144,8 @@ void NetworkHTTPRequest::WinHttpCallback(DWORD code, void *info, DWORD length) if (status_code >= 400) { /* No need to be verbose about rate limiting. */ Debug(net, status_code == HTTP_429_TOO_MANY_REQUESTS ? 1 : 0, "HTTP request failed: status-code {}", status_code); - this->finished = true; this->callback.OnFailure(); + this->finished = true; return; } @@ -183,14 +183,14 @@ void NetworkHTTPRequest::WinHttpCallback(DWORD code, void *info, DWORD length) case WINHTTP_CALLBACK_STATUS_SECURE_FAILURE: case WINHTTP_CALLBACK_STATUS_REQUEST_ERROR: Debug(net, 0, "HTTP request failed: {}", GetLastErrorAsString()); - this->finished = true; this->callback.OnFailure(); + this->finished = true; break; default: Debug(net, 0, "HTTP request failed: unexepected callback code 0x{:x}", code); - this->finished = true; this->callback.OnFailure(); + this->finished = true; return; } } @@ -233,8 +233,8 @@ void NetworkHTTPRequest::Connect() this->connection = WinHttpConnect(_winhttp_session, url_components.lpszHostName, url_components.nPort, 0); if (this->connection == nullptr) { Debug(net, 0, "HTTP request failed: {}", GetLastErrorAsString()); - this->finished = true; this->callback.OnFailure(); + this->finished = true; return; } @@ -243,8 +243,8 @@ void NetworkHTTPRequest::Connect() WinHttpCloseHandle(this->connection); Debug(net, 0, "HTTP request failed: {}", GetLastErrorAsString()); - this->finished = true; this->callback.OnFailure(); + this->finished = true; return; } @@ -267,8 +267,8 @@ bool NetworkHTTPRequest::Receive() { if (this->callback.cancelled && !this->finished) { Debug(net, 1, "HTTP request failed: cancelled by user"); - this->finished = true; this->callback.OnFailure(); + this->finished = true; /* Fall-through, as we are waiting for IsQueueEmpty() to happen. */ } From c2daabc010e268bd36115e854d032b0753f09830 Mon Sep 17 00:00:00 2001 From: yeah-its-gloria <32610623+yeah-its-gloria@users.noreply.github.com> Date: Sat, 18 May 2024 15:28:59 -0400 Subject: [PATCH 567/695] Fix: Add entitlements needed for plugins on macOS Fixes social plugin loading on macOS, particularly for Steam. --- cmake/PackageBundle.cmake | 1 + os/macosx/openttd.entitlements | 11 +++++++++++ 2 files changed, 12 insertions(+) create mode 100644 os/macosx/openttd.entitlements diff --git a/cmake/PackageBundle.cmake b/cmake/PackageBundle.cmake index 737f4809aa..e737c02005 100644 --- a/cmake/PackageBundle.cmake +++ b/cmake/PackageBundle.cmake @@ -4,6 +4,7 @@ set(CPACK_BUNDLE_NAME "OpenTTD") set(CPACK_BUNDLE_ICON "${CMAKE_SOURCE_DIR}/os/macosx/openttd.icns") set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_BINARY_DIR}/Info.plist") set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/os/macosx/splash.png") +set(CPACK_BUNDLE_APPLE_ENTITLEMENTS "${CMAKE_SOURCE_DIR}/os/macosx/openttd.entitlements") set(CPACK_DMG_FORMAT "UDBZ") # Create a temporary Info.plist.in, where we will fill in the version via diff --git a/os/macosx/openttd.entitlements b/os/macosx/openttd.entitlements new file mode 100644 index 0000000000..47c24e0756 --- /dev/null +++ b/os/macosx/openttd.entitlements @@ -0,0 +1,11 @@ + + + + + + com.apple.security.cs.allow-dyld-environment-variables + + com.apple.security.cs.disable-library-validation + + + From 071796660d387884c2c54a946bb78dfd90c182ab Mon Sep 17 00:00:00 2001 From: yeah-its-gloria <32610623+yeah-its-gloria@users.noreply.github.com> Date: Sat, 18 May 2024 15:39:54 -0400 Subject: [PATCH 568/695] Fix: Implement support for secure state coding on macOS Fixes a warning when running on macOS 14 and newer about not officially supporting secure state coding. --- src/video/cocoa/cocoa_wnd.mm | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/video/cocoa/cocoa_wnd.mm b/src/video/cocoa/cocoa_wnd.mm index a36ef78dea..068fa3cedb 100644 --- a/src/video/cocoa/cocoa_wnd.mm +++ b/src/video/cocoa/cocoa_wnd.mm @@ -261,6 +261,18 @@ static NSImage *NSImageFromSprite(SpriteID sprite_id, ZoomLevel zoom) { [ [ NSNotificationCenter defaultCenter ] removeObserver:self ]; } + +/** + * Indicates to AppKit that OpenTTD is compatible with secure state storage. + * Starting with macOS 12, macOS expects us to be better compatible with NSSecureCoding, as to prevent attacks through restorable storage. + * Starting with 14, macOS logs a warning if we don't implement this ourselves. Since OpenTTD does not (yet) make use of restorable state, we simply don't care what happens with it. + * + * Explained here: https://developer.apple.com/documentation/foundation/nssecurecoding + */ +- (BOOL)applicationSupportsSecureRestorableState:(NSApplication*) sender +{ + return YES; +} @end /** From f87c6990b062bf0c7bb08a64d86b691547d06e07 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 23 May 2024 21:07:11 +0100 Subject: [PATCH 569/695] Fix: Memory leak in CoreTextFontCache. (#12662) Temporary buffer for rendering glyphs was not freed after use. Instead let CGBitmapContextCreate() handle the buffer. > data may be a pointer to pixels. If you pass NULL, the context will create its own buffer and free that buffer itself later. If you pass your own buffer, the context will not free it; it remains your buffer that you must free after you release the context, hopefully for the last time. --- src/os/macosx/font_osx.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/os/macosx/font_osx.cpp b/src/os/macosx/font_osx.cpp index 2bd290f4e6..8d7987119a 100644 --- a/src/os/macosx/font_osx.cpp +++ b/src/os/macosx/font_osx.cpp @@ -242,8 +242,8 @@ const Sprite *CoreTextFontCache::InternalGetGlyph(GlyphID key, bool use_aa) /* We only need the alpha channel, as we apply our own colour constants to the sprite. */ int pitch = Align(bb_width, 16); - uint8_t *bmp = CallocT(bb_height * pitch); - CFAutoRelease context(CGBitmapContextCreate(bmp, bb_width, bb_height, 8, pitch, nullptr, kCGImageAlphaOnly)); + CFAutoRelease context(CGBitmapContextCreate(nullptr, bb_width, bb_height, 8, pitch, nullptr, kCGImageAlphaOnly)); + const uint8_t *bmp = static_cast(CGBitmapContextGetData(context.get())); /* Set antialias according to requirements. */ CGContextSetAllowsAntialiasing(context.get(), use_aa); CGContextSetAllowsFontSubpixelPositioning(context.get(), use_aa); From 5fefe0b61fb384a474c6b8aabd31564091f8a568 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 23 May 2024 21:34:05 +0100 Subject: [PATCH 570/695] Fix: Reverse left/right keypress when editing RTL text. (#12711) When editing RTL text, pressing left should increment instead of decrement the character position to move left, and vice versa. --- src/textbuf.cpp | 54 ++++++++++++++++++++++++++++++++-------------- src/textbuf_type.h | 3 +++ 2 files changed, 41 insertions(+), 16 deletions(-) diff --git a/src/textbuf.cpp b/src/textbuf.cpp index 1c94f74f1c..4b5f1e5b7f 100644 --- a/src/textbuf.cpp +++ b/src/textbuf.cpp @@ -322,6 +322,40 @@ void Textbuf::UpdateMarkedText() } } +/** + * Move to previous character position. + * @param what Move ITER_CHARACTER or ITER_WORD. + * @return true iff able to move. + */ +bool Textbuf::MovePrev(StringIterator::IterType what) +{ + if (this->caretpos == 0) return false; + + size_t pos = this->char_iter->Prev(what); + if (pos == StringIterator::END) return true; + + this->caretpos = static_cast(pos); + this->UpdateCaretPosition(); + return true; +} + +/** + * Move to next character position. + * @param what Move ITER_CHARACTER or ITER_WORD. + * @return true iff able to move. + */ +bool Textbuf::MoveNext(StringIterator::IterType what) +{ + if (this->caretpos >= this->bytes - 1) return false; + + size_t pos = this->char_iter->Next(what); + if (pos == StringIterator::END) return true; + + this->caretpos = static_cast(pos); + this->UpdateCaretPosition(); + return true; +} + /** * Handle text navigation with arrow keys left/right. * This defines where the caret will blink and the next character interaction will occur @@ -333,26 +367,14 @@ bool Textbuf::MovePos(uint16_t keycode) switch (keycode) { case WKC_LEFT: case WKC_CTRL | WKC_LEFT: { - if (this->caretpos == 0) break; - - size_t pos = this->char_iter->Prev(keycode & WKC_CTRL ? StringIterator::ITER_WORD : StringIterator::ITER_CHARACTER); - if (pos == StringIterator::END) return true; - - this->caretpos = (uint16_t)pos; - this->UpdateCaretPosition(); - return true; + auto move_type = (keycode & WKC_CTRL) != 0 ? StringIterator::ITER_WORD : StringIterator::ITER_CHARACTER; + return (_current_text_dir == TD_LTR) ? this->MovePrev(move_type) : this->MoveNext(move_type); } case WKC_RIGHT: case WKC_CTRL | WKC_RIGHT: { - if (this->caretpos >= this->bytes - 1) break; - - size_t pos = this->char_iter->Next(keycode & WKC_CTRL ? StringIterator::ITER_WORD : StringIterator::ITER_CHARACTER); - if (pos == StringIterator::END) return true; - - this->caretpos = (uint16_t)pos; - this->UpdateCaretPosition(); - return true; + auto move_type = (keycode & WKC_CTRL) != 0 ? StringIterator::ITER_WORD : StringIterator::ITER_CHARACTER; + return (_current_text_dir == TD_LTR) ? this->MoveNext(move_type) : this->MovePrev(move_type); } case WKC_HOME: diff --git a/src/textbuf_type.h b/src/textbuf_type.h index 78c58adb53..2b6b5c8e42 100644 --- a/src/textbuf_type.h +++ b/src/textbuf_type.h @@ -72,6 +72,9 @@ private: bool CanDelChar(bool backspace); + bool MovePrev(StringIterator::IterType what); + bool MoveNext(StringIterator::IterType what); + void DeleteText(uint16_t from, uint16_t to, bool update); void UpdateStringIter(); From d9cadb49b069fc27f4778665bd1db8f0c31037bb Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 24 May 2024 04:43:08 +0000 Subject: [PATCH 571/695] Update: Translations from eints english (au): 2 changes by krysclarke chinese (simplified): 7 changes by WenSimEHRP korean: 4 changes by telk5093 russian: 2 changes by Ln-Wolf finnish: 2 changes by hpiirai portuguese (brazilian): 2 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 2 ++ src/lang/english_AU.txt | 2 ++ src/lang/finnish.txt | 2 ++ src/lang/korean.txt | 6 ++++-- src/lang/russian.txt | 2 ++ src/lang/simplified_chinese.txt | 12 +++++++----- 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 9d98197b03..2cb5271936 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -5053,6 +5053,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Não é STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Adjacente a mais de uma estação/local de carga existente STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... estação muito extensa +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... número de linhas não suportado +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... comprimento não suportado STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Há estações/locais de carga demais STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Há partes de estação ferroviária demais STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Há paradas de ônibus demais diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index bbb6f3d2b8..400091fa6f 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -5052,6 +5052,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Can't bu STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Adjoins more than one existing station/loading area STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... station too spread out +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... unsupported number of tracks +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... unsupported length STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Too many stations/loading areas STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Too many railway station parts STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Too many bus stops diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 45661c26e3..bf5a03c749 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -5052,6 +5052,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Lentoken STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Vieressä on useampi kuin yksi olemassaoleva asema tai kuormausalue. STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... asema liian levittäytynyt +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}… raiteiden lukumäärää ei tueta +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}… pituutta ei tueta STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Liian monta asemaa ja lastausaluetta. STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Rautatieasema on jakautunut liian moneen osaan STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Liian monta linja-autopysäkkiä. diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 030964ac9d..62dc73dbb8 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2795,8 +2795,8 @@ STR_STATION_BUILD_RAIL_CAPTION :{WHITE}철도 STR_STATION_BUILD_ORIENTATION :{BLACK}방향 선택 STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}철도역 방향을 설정합니다 STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}선로 수 -STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}철도역 플랫폼 개수를 설정합니다 -STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}플랫폼 길이 +STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}철도역 승강장 개수를 설정합니다 +STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}승강장 길이 STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}철도역 길이를 설정합니다 STR_STATION_BUILD_DRAG_DROP :{BLACK}드래그 & 드롭 STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}드래그 & 드롭으로 역을 건설합니다 @@ -5053,6 +5053,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}여기 STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}두 개 이상의 역이 인접합니다 STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... 역이 너무 크게 퍼져있습니다 +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... 지원하지 않는 선로 수입니다 +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... 지원하지 않는 길이입니다 STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}역이 너무 많습니다 STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}철도역 조각이 너무 많습니다 STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}버스 정류장이 너무 많습니다 diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 4759fac882..193f0f2511 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -5239,6 +5239,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Здес STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Примыкает к нескольким станциям STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... станция слишком большая +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... станции с таким количеством путей не поддерживаются +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... станции такой длины не поддерживаются STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Слишком много станций и остановок STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Слишком большая ж/д станция STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Слишком много автобусных остановок diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 80630600e6..3c693c4c50 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -404,7 +404,7 @@ STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}建设 STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}建设电车设施 STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}建设水运设施 STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}建设机场 -STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}打开景观美化工具栏以修改地形、设置地貌等 +STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}打开地形工具栏以修改地形、种植树木或放置标志等 STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}显示声音与音乐控制菜单 STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}显示最新消息、新闻,消息历史或删除所有消息 STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}查询地块信息、截图、关于 OpenTTD 和开发者工具 @@ -513,7 +513,7 @@ STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :水运建设 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :机场建设 # Landscaping menu -STR_LANDSCAPING_MENU_LANDSCAPING :景观美化 +STR_LANDSCAPING_MENU_LANDSCAPING :地形 STR_LANDSCAPING_MENU_PLANT_TREES :植树 STR_LANDSCAPING_MENU_PLACE_SIGN :放置标志 @@ -1616,8 +1616,8 @@ STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :设置车站的 STR_CONFIG_SETTING_SERVICEATHELIPAD :直升机在降落平台自动保养:{STRING} STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :直升飞机在降落平台自动保养,即使机场没有机库 -STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :将景观美化工具栏与铁路/公路/船只/机场工具栏连接:{STRING} -STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :“打开”时,在打开交通建设工具栏时同时打开景观美化工具栏 +STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :链接地形工具栏与铁路 / 公路 / 船只 / 机场工具栏:{STRING} +STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :设定否在开启建设交通设施的工具栏时同时开启地形工具栏 STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :缩略地图颜色选择: {STRING} STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :设置缩略地图的颜色 @@ -2961,7 +2961,7 @@ STR_AIRPORT_CLASS_HELIPORTS :直升机机场 STR_STATION_BUILD_NOISE :{BLACK}产生的噪音: {GOLD}{COMMA} # Landscaping toolbar -STR_LANDSCAPING_TOOLBAR :{WHITE}景观美化 +STR_LANDSCAPING_TOOLBAR :{WHITE}地形 STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}降低地面。按住 键以沿对角线操作,按住 键操作以显示预计成本。 STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}升高地面。按住 键以沿对角线操作,按住 键操作以显示预计成本。 STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}拉平地面。按住 键以沿对角线操作,按住 键操作以显示预计成本。 @@ -5052,6 +5052,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}不能 STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}与另一车站相连 STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}……车站范围过大 +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}……轨道数量不正确 +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}……站台长度不正确 STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}车站过多 STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}分体站台太多 STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}公共汽车站过多 From 676d64037d42a542240e6773339cf115edffcd3b Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 24 May 2024 15:33:30 +0100 Subject: [PATCH 572/695] Fix d6ccfdb: GetCharPosition failed for RTL text. (#12710) Changes in d6ccfdb assumed that character indexes only incremented, which is not true for RTL text. --- src/gfx_layout.cpp | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index dbead01676..28a3c7a57d 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -11,6 +11,7 @@ #include "core/math_func.hpp" #include "gfx_layout.h" #include "string_func.h" +#include "strings_func.h" #include "debug.h" #include "table/control_codes.h" @@ -231,7 +232,7 @@ Point Layouter::GetCharPosition(std::string_view::const_iterator ch) const /* Pointer to the end-of-string marker? Return total line width. */ if (ch == this->string.end()) { - Point p = { line->GetWidth(), 0 }; + Point p = {_current_text_dir == TD_LTR ? line->GetWidth() : 0, 0}; return p; } @@ -245,8 +246,8 @@ Point Layouter::GetCharPosition(std::string_view::const_iterator ch) const } /* Initial position, returned if character not found. */ - static const std::vector zero = { {0, 0} }; - auto position = zero.begin(); + const Point initial_position = {_current_text_dir == TD_LTR ? 0 : line->GetWidth(), 0}; + const Point *position = &initial_position; /* We couldn't find the code point index. */ if (str != ch) return *position; @@ -254,24 +255,26 @@ Point Layouter::GetCharPosition(std::string_view::const_iterator ch) const /* Valid character. */ /* Scan all runs until we've found our code point index. */ + size_t best_index = SIZE_MAX; for (int run_index = 0; run_index < line->CountRuns(); run_index++) { const ParagraphLayouter::VisualRun &run = line->GetVisualRun(run_index); const auto &positions = run.GetPositions(); const auto &charmap = run.GetGlyphToCharMap(); - /* Run starts after our character, use the last found position. */ - if (static_cast(charmap.front()) > index) return *position; + auto itp = positions.begin(); + for (auto it = charmap.begin(); it != charmap.end(); ++it, ++itp) { + const size_t cur_index = static_cast(*it); + /* Found exact character match? */ + if (cur_index == index) return *itp; - position = positions.begin(); - for (auto it = charmap.begin(); it != charmap.end(); /* nothing */) { - /* Plain honest-to-$deity match. */ - if (static_cast(*it) == index) return *position; - ++it; - if (it == charmap.end()) break; - - /* We just passed our character, it's probably a ligature, use the last found position. */ - if (static_cast(*it) > index) return *position; - ++position; + /* If the character we are looking for has been combined with other characters to form a ligature then + * we may not be able to find an exact match. We don't actually know if our character is part of a + * ligature. In this case we will aim to select the first character of the ligature instead, so the best + * index is the index nearest to but lower than the desired index. */ + if (cur_index < index && (best_index < cur_index || best_index == SIZE_MAX)) { + best_index = cur_index; + position = &*itp; + } } } From c325a2ebd4dfc5dd940a784f7dbda69060790061 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 25 May 2024 04:42:07 +0000 Subject: [PATCH 573/695] Update: Translations from eints estonian: 3 changes by siimsoni dutch: 2 changes by Afoklala french: 2 changes by ben20471 portuguese: 2 changes by azulcosta --- src/lang/dutch.txt | 2 ++ src/lang/estonian.txt | 3 +++ src/lang/french.txt | 2 ++ src/lang/portuguese.txt | 2 ++ 4 files changed, 9 insertions(+) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 3162267db6..f914ec27eb 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -5052,6 +5052,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Kan hier STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Voegt meer dan één bestaand (laad)station samen STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... station te omvangrijk +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... niet-ondersteund aantal sporen +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... niet-ondersteunde lengte STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Te veel (laad)stations STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Te veel treinstationsdelen STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Te veel bushaltes diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 2b6cc2abfa..c839571973 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -2856,6 +2856,9 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Ehita ja STR_PICKER_MODE_ALL :Kõik +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Vali, milliseid veoautojaamu näidatakse +STR_PICKER_HOUSE_CLASS_TOOLTIP :Vali näidatud asulaosa +STR_PICKER_HOUSE_TYPE_TOOLTIP :Vali, millist maja ehitada. Ctrl+ klõps lisab või eemaldab salvestatud asjadest STR_HOUSE_PICKER_CAPTION :Maja valik diff --git a/src/lang/french.txt b/src/lang/french.txt index a9aae4b6fb..7d82c7d0e2 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -5053,6 +5053,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Impossib STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Adjacent à plus d'une gare à la fois STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... gare trop étendue +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... nombre de voies non supporté +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... longueur non supportée STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Trop de gares STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Trop de parties de gare STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Trop d'arrêts d'autobus diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index ce832bde1d..3e2c6de1c4 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -5053,6 +5053,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Não é STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Muito junto de uma estação/local de carga já existente STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... estação muito extensa +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... número de linhas não suportado +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... comprimento não suportado STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Demasiadas estações/locais de carga STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Demasiadas partes na estação ferroviária STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Demasiadas paragens de autocarro From d72917b285d0773c400ee4c83b9c8f032824aba1 Mon Sep 17 00:00:00 2001 From: Gloria <32610623+yeah-its-gloria@users.noreply.github.com> Date: Sat, 25 May 2024 09:19:41 -0400 Subject: [PATCH 574/695] Add: Use macOS Game Mode identification (#12700) --- os/macosx/Info.plist.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/os/macosx/Info.plist.in b/os/macosx/Info.plist.in index 71619d8936..9ed3579a09 100644 --- a/os/macosx/Info.plist.in +++ b/os/macosx/Info.plist.in @@ -33,5 +33,7 @@ True LSMinimumSystemVersion 10.13.0 + LSApplicationCategoryType + public.app-category.simulation-games From 6efc1fa250d2016f6a212dfed7e12aae6a411cc8 Mon Sep 17 00:00:00 2001 From: Koen Bussemaker Date: Sat, 25 May 2024 11:33:53 +0200 Subject: [PATCH 575/695] Codechange: Removed unused yapf PfNodeCachFlush function --- src/pathfinder/yapf/yapf_base.hpp | 4 -- src/pathfinder/yapf/yapf_costcache.hpp | 80 ++++---------------------- 2 files changed, 10 insertions(+), 74 deletions(-) diff --git a/src/pathfinder/yapf/yapf_base.hpp b/src/pathfinder/yapf/yapf_base.hpp index de46ebb6c9..0c49d16ca5 100644 --- a/src/pathfinder/yapf/yapf_base.hpp +++ b/src/pathfinder/yapf/yapf_base.hpp @@ -227,10 +227,6 @@ public: bool bValid = Yapf().PfCalcCost(n, &tf); - if (bCached) { - Yapf().PfNodeCacheFlush(n); - } - if (bValid) bValid = Yapf().PfCalcEstimate(n); /* have the cost or estimate callbacks marked this node as invalid? */ diff --git a/src/pathfinder/yapf/yapf_costcache.hpp b/src/pathfinder/yapf/yapf_costcache.hpp index 0c0aa729fd..5b7c0c0c65 100644 --- a/src/pathfinder/yapf/yapf_costcache.hpp +++ b/src/pathfinder/yapf/yapf_costcache.hpp @@ -14,7 +14,7 @@ /** * CYapfSegmentCostCacheNoneT - the formal only yapf cost cache provider that implements - * PfNodeCacheFetch() and PfNodeCacheFlush() callbacks. Used when nodes don't have CachedData + * PfNodeCacheFetch(). Used when nodes don't have CachedData * defined (they don't count with any segment cost caching). */ template @@ -32,64 +32,8 @@ public: { return false; } - - /** - * Called by YAPF to flush the cached segment cost data back into cache storage. - * Current cache implementation doesn't use that. - */ - inline void PfNodeCacheFlush(Node &) - { - } }; - -/** - * CYapfSegmentCostCacheLocalT - the yapf cost cache provider that implements fake segment - * cost caching functionality for yapf. Used when node needs caching, but you don't want to - * cache the segment costs. - */ -template -class CYapfSegmentCostCacheLocalT -{ -public: - typedef typename Types::Tpf Tpf; ///< the pathfinder class (derived from THIS class) - typedef typename Types::NodeList::Titem Node; ///< this will be our node type - typedef typename Node::Key Key; ///< key to hash tables - typedef typename Node::CachedData CachedData; - typedef typename CachedData::Key CacheKey; - using LocalCache = std::deque; - -protected: - LocalCache m_local_cache; - - /** to access inherited path finder */ - inline Tpf &Yapf() - { - return *static_cast(this); - } - -public: - /** - * Called by YAPF to attach cached or local segment cost data to the given node. - * @return true if globally cached data were used or false if local data was used - */ - inline bool PfNodeCacheFetch(Node &n) - { - CacheKey key(n.GetKey()); - Yapf().ConnectNodeToCachedData(n, m_local_cache.emplace_back(key)); - return false; - } - - /** - * Called by YAPF to flush the cached segment cost data back into cache storage. - * Current cache implementation doesn't use that. - */ - inline void PfNodeCacheFlush(Node &) - { - } -}; - - /** * Base class for segment cost cache providers. Contains global counter * of track layout changes and static notification function called whenever @@ -158,18 +102,19 @@ struct CSegmentCostCacheT : public CSegmentCostCacheBase { * segment cost caching services for your Nodes. */ template -class CYapfSegmentCostCacheGlobalT : public CYapfSegmentCostCacheLocalT { +class CYapfSegmentCostCacheGlobalT { public: - typedef CYapfSegmentCostCacheLocalT Tlocal; typedef typename Types::Tpf Tpf; ///< the pathfinder class (derived from THIS class) typedef typename Types::NodeList::Titem Node; ///< this will be our node type typedef typename Node::Key Key; ///< key to hash tables typedef typename Node::CachedData CachedData; typedef typename CachedData::Key CacheKey; typedef CSegmentCostCacheT Cache; + using LocalCache = std::deque; protected: Cache &m_global_cache; + LocalCache m_local_cache; inline CYapfSegmentCostCacheGlobalT() : m_global_cache(stGetGlobalCache()) {}; @@ -199,23 +144,18 @@ public: */ inline bool PfNodeCacheFetch(Node &n) { - if (!Yapf().CanUseGlobalCache(n)) { - return Tlocal::PfNodeCacheFetch(n); - } CacheKey key(n.GetKey()); + + if (!Yapf().CanUseGlobalCache(n)) { + Yapf().ConnectNodeToCachedData(n, m_local_cache.emplace_back(key)); + return false; + } + bool found; CachedData &item = m_global_cache.Get(key, &found); Yapf().ConnectNodeToCachedData(n, item); return found; } - - /** - * Called by YAPF to flush the cached segment cost data back into cache storage. - * Current cache implementation doesn't use that. - */ - inline void PfNodeCacheFlush(Node &) - { - } }; #endif /* YAPF_COSTCACHE_HPP */ From d11823df36f0d255a3cc09dd89a35b37df288d8e Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 26 May 2024 04:42:20 +0000 Subject: [PATCH 576/695] Update: Translations from eints korean: 2 changes by telk5093 --- src/lang/korean.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 62dc73dbb8..be9589f04a 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1934,8 +1934,8 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :전자식 신 STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :신호기를 CTRL 클릭할 때 바뀌는 신호기의 종류: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :신호기 건설에서 CTRL+클릭할 때 바뀌는 신호기의 종류를 선택합니다 ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :경로 신호기만 보여주기 -STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :모두 보여주기 +STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :현재 사용 중인 신호기만 +STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :모든 신호기 STR_CONFIG_SETTING_SIGNAL_GUI_MODE :보여줄 신호기 종류: {STRING} STR_CONFIG_SETTING_SIGNAL_GUI_MODE_HELPTEXT :신호기 창에서 보여줄 신호기 종류를 선택하세요 From 2c70ccb137c53c59e230699199d94e317b8c5b68 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 26 May 2024 09:53:33 +0100 Subject: [PATCH 577/695] Add: [NewGRF] Extended custom waypoint classes. (#12653) This allows waypoints to be split into categories just like stations, instead of all being lumped together. Station class labels with the first byte set to 0xFF will be treated in the same way as the 'WAYP' class. --- src/newgrf_roadstop.h | 2 +- src/newgrf_station.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/newgrf_roadstop.h b/src/newgrf_roadstop.h index e0b1a38ab6..6ec42f508b 100644 --- a/src/newgrf_roadstop.h +++ b/src/newgrf_roadstop.h @@ -188,7 +188,7 @@ void RoadStopUpdateCachedTriggers(BaseStation *st); */ inline bool IsWaypointClass(const RoadStopClass &cls) { - return cls.global_id == ROADSTOP_CLASS_LABEL_WAYPOINT; + return cls.global_id == ROADSTOP_CLASS_LABEL_WAYPOINT || GB(cls.global_id, 24, 8) == UINT8_MAX; } #endif /* NEWGRF_ROADSTATION_H */ diff --git a/src/newgrf_station.h b/src/newgrf_station.h index 5c244a270e..21a833227d 100644 --- a/src/newgrf_station.h +++ b/src/newgrf_station.h @@ -188,7 +188,7 @@ const StationSpec *GetStationSpec(TileIndex t); */ inline bool IsWaypointClass(const StationClass &cls) { - return cls.global_id == STATION_CLASS_LABEL_WAYPOINT; + return cls.global_id == STATION_CLASS_LABEL_WAYPOINT || GB(cls.global_id, 24, 8) == UINT8_MAX; } /* Evaluate a tile's position within a station, and return the result a bitstuffed format. */ From 3c42f701d789757dece000e2600291de0b9ded37 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 26 May 2024 15:59:25 +0100 Subject: [PATCH 578/695] Fix: Allow changing size of default OpenTTD font. (#12641) * Fix: Allow changing size of default OpenTTD font. Size configuration for default font was ignored as a different code path to load the font was followed. Resolved by removing this additional path and conditionally selecting the default font. --- src/fontcache.cpp | 81 +++++++++++++++-------------- src/fontcache.h | 1 + src/fontcache/freetypefontcache.cpp | 33 ++---------- src/os/macosx/font_osx.cpp | 25 +++------ src/os/macosx/font_osx.h | 1 - src/os/windows/font_win32.cpp | 29 ++--------- src/os/windows/font_win32.h | 1 - 7 files changed, 57 insertions(+), 114 deletions(-) diff --git a/src/fontcache.cpp b/src/fontcache.cpp index 80defbd24b..93d56416ae 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -138,50 +138,57 @@ void SetFont(FontSize fontsize, const std::string &font, uint size) #ifdef WITH_FREETYPE extern void LoadFreeTypeFont(FontSize fs); -extern void LoadFreeTypeFont(FontSize fs, const std::string &file_name, uint size); extern void UninitFreeType(); #elif defined(_WIN32) extern void LoadWin32Font(FontSize fs); -extern void LoadWin32Font(FontSize fs, const std::string &file_name, uint size); #elif defined(WITH_COCOA) extern void LoadCoreTextFont(FontSize fs); -extern void LoadCoreTextFont(FontSize fs, const std::string &file_name, uint size); #endif -static void TryLoadDefaultTrueTypeFont([[maybe_unused]] FontSize fs) -{ #if defined(WITH_FREETYPE) || defined(_WIN32) || defined(WITH_COCOA) - std::string font_name{}; +/** + * Get name of default font file for a given font size. + * @param fs Font size. + * @return Name of default font file. + */ +static std::string GetDefaultTruetypeFont(FontSize fs) +{ switch (fs) { - case FS_NORMAL: - font_name = "OpenTTD-Sans.ttf"; - break; - case FS_SMALL: - font_name = "OpenTTD-Small.ttf"; - break; - case FS_LARGE: - font_name = "OpenTTD-Serif.ttf"; - break; - case FS_MONO: - font_name = "OpenTTD-Mono.ttf"; - break; - + case FS_NORMAL: return "OpenTTD-Sans.ttf"; + case FS_SMALL: return "OpenTTD-Small.ttf"; + case FS_LARGE: return "OpenTTD-Serif.ttf"; + case FS_MONO: return "OpenTTD-Mono.ttf"; default: NOT_REACHED(); } - - /* Find font file. */ - std::string full_font = FioFindFullPath(BASESET_DIR, font_name); - if (!full_font.empty()) { - int size = FontCache::GetDefaultFontHeight(fs); -#ifdef WITH_FREETYPE - LoadFreeTypeFont(fs, full_font, size); -#elif defined(_WIN32) - LoadWin32Font(fs, full_font, size); -#elif defined(WITH_COCOA) - LoadCoreTextFont(fs, full_font, size); -#endif - } +} #endif /* defined(WITH_FREETYPE) || defined(_WIN32) || defined(WITH_COCOA) */ + +/** + * Get path of default font file for a given font size. + * @param fs Font size. + * @return Full path of default font file. + */ +static std::string GetDefaultTruetypeFontFile([[maybe_unused]] FontSize fs) +{ +#if defined(WITH_FREETYPE) || defined(_WIN32) || defined(WITH_COCOA) + /* Find font file. */ + return FioFindFullPath(BASESET_DIR, GetDefaultTruetypeFont(fs)); +#else + return {}; +#endif /* defined(WITH_FREETYPE) || defined(_WIN32) || defined(WITH_COCOA) */ +} + +/** + * Get font to use for a given font size. + * @param fs Font size. + * @return If configured, the font name to use, or the path of the default TrueType font if sprites are not preferred. + */ +std::string GetFontCacheFontName(FontSize fs) +{ + const FontCacheSubSetting *settings = GetFontCacheSubSetting(fs); + if (!settings->font.empty()) return settings->font; + if (_fcsettings.prefer_sprite) return {}; + return GetDefaultTruetypeFontFile(fs); } /** @@ -198,17 +205,13 @@ void InitFontCache(bool monospace) FontCache *fc = FontCache::Get(fs); if (fc->HasParent()) delete fc; - if (!_fcsettings.prefer_sprite && GetFontCacheSubSetting(fs)->font.empty()) { - TryLoadDefaultTrueTypeFont(fs); - } else { #ifdef WITH_FREETYPE - LoadFreeTypeFont(fs); + LoadFreeTypeFont(fs); #elif defined(_WIN32) - LoadWin32Font(fs); + LoadWin32Font(fs); #elif defined(WITH_COCOA) - LoadCoreTextFont(fs); + LoadCoreTextFont(fs); #endif - } } } diff --git a/src/fontcache.h b/src/fontcache.h index 769bc66ac7..8c0eef0f7a 100644 --- a/src/fontcache.h +++ b/src/fontcache.h @@ -224,6 +224,7 @@ inline FontCacheSubSetting *GetFontCacheSubSetting(FontSize fs) } } +std::string GetFontCacheFontName(FontSize fs); void InitFontCache(bool monospace); void UninitFontCache(); diff --git a/src/fontcache/freetypefontcache.cpp b/src/fontcache/freetypefontcache.cpp index e0fc7a2b61..7e83bbf48d 100644 --- a/src/fontcache/freetypefontcache.cpp +++ b/src/fontcache/freetypefontcache.cpp @@ -160,7 +160,8 @@ void LoadFreeTypeFont(FontSize fs) { FontCacheSubSetting *settings = GetFontCacheSubSetting(fs); - if (settings->font.empty()) return; + std::string font = GetFontCacheFontName(fs); + if (font.empty()) return; if (_library == nullptr) { if (FT_Init_FreeType(&_library) != FT_Err_Ok) { @@ -171,7 +172,7 @@ void LoadFreeTypeFont(FontSize fs) Debug(fontcache, 2, "Initialized"); } - const char *font_name = settings->font.c_str(); + const char *font_name = font.c_str(); FT_Face face = nullptr; /* If font is an absolute path to a ttf, try loading that first. */ @@ -200,34 +201,6 @@ void LoadFreeTypeFont(FontSize fs) } } -/** - * Load a TrueType font from a file. - * @param fs The font size to load. - * @param file_name Path to the font file. - * @param size Requested font size. - */ -void LoadFreeTypeFont(FontSize fs, const std::string &file_name, uint size) -{ - if (_library == nullptr) { - if (FT_Init_FreeType(&_library) != FT_Err_Ok) { - ShowInfo("Unable to initialize FreeType, using sprite fonts instead"); - return; - } - - Debug(fontcache, 2, "Initialized"); - } - - FT_Face face = nullptr; - int32_t index = 0; - FT_Error error = FT_New_Face(_library, file_name.c_str(), index, &face); - if (error == FT_Err_Ok) { - LoadFont(fs, face, file_name.c_str(), size); - } else { - FT_Done_Face(face); - } -} - - /** * Free everything that was allocated for this font cache. */ diff --git a/src/os/macosx/font_osx.cpp b/src/os/macosx/font_osx.cpp index 8d7987119a..c73a799a69 100644 --- a/src/os/macosx/font_osx.cpp +++ b/src/os/macosx/font_osx.cpp @@ -328,7 +328,8 @@ void LoadCoreTextFont(FontSize fs) { FontCacheSubSetting *settings = GetFontCacheSubSetting(fs); - if (settings->font.empty()) return; + std::string font = GetFontCacheFontName(fs); + if (font.empty()) return; CFAutoRelease font_ref; @@ -339,12 +340,12 @@ void LoadCoreTextFont(FontSize fs) if (!font_ref && MacOSVersionIsAtLeast(10, 6, 0)) { /* Might be a font file name, try load it. */ - font_ref.reset(LoadFontFromFile(settings->font)); - if (!font_ref) ShowInfo("Unable to load file '{}' for {} font, using default OS font selection instead", settings->font, FontSizeToName(fs)); + font_ref.reset(LoadFontFromFile(font)); + if (!font_ref) ShowInfo("Unable to load file '{}' for {} font, using default OS font selection instead", font, FontSizeToName(fs)); } if (!font_ref) { - CFAutoRelease name(CFStringCreateWithCString(kCFAllocatorDefault, settings->font.c_str(), kCFStringEncodingUTF8)); + CFAutoRelease name(CFStringCreateWithCString(kCFAllocatorDefault, font.c_str(), kCFStringEncodingUTF8)); /* Simply creating the font using CTFontCreateWithNameAndSize will *always* return * something, no matter the name. As such, we can't use it to check for existence. @@ -362,23 +363,9 @@ void LoadCoreTextFont(FontSize fs) } if (!font_ref) { - ShowInfo("Unable to use '{}' for {} font, using sprite font instead", settings->font, FontSizeToName(fs)); + ShowInfo("Unable to use '{}' for {} font, using sprite font instead", font, FontSizeToName(fs)); return; } new CoreTextFontCache(fs, std::move(font_ref), settings->size); } - -/** - * Load a TrueType font from a file. - * @param fs The font size to load. - * @param file_name Path to the font file. - * @param size Requested font size. - */ -void LoadCoreTextFont(FontSize fs, const std::string &file_name, uint size) -{ - CFAutoRelease font_ref{LoadFontFromFile(file_name)}; - if (font_ref) { - new CoreTextFontCache(fs, std::move(font_ref), size); - } -} diff --git a/src/os/macosx/font_osx.h b/src/os/macosx/font_osx.h index 3ef86fba99..d2ba5f3b3f 100644 --- a/src/os/macosx/font_osx.h +++ b/src/os/macosx/font_osx.h @@ -35,6 +35,5 @@ public: }; void LoadCoreTextFont(FontSize fs); -void LoadCoreTextFont(FontSize fs, const std::string &file_name, uint size); #endif /* FONT_OSX_H */ diff --git a/src/os/windows/font_win32.cpp b/src/os/windows/font_win32.cpp index 23a0be297c..1f4aa775bb 100644 --- a/src/os/windows/font_win32.cpp +++ b/src/os/windows/font_win32.cpp @@ -352,9 +352,10 @@ void LoadWin32Font(FontSize fs) { FontCacheSubSetting *settings = GetFontCacheSubSetting(fs); - if (settings->font.empty()) return; + std::string font = GetFontCacheFontName(fs); + if (font.empty()) return; - const char *font_name = settings->font.c_str(); + const char *font_name = font.c_str(); LOGFONT logfont; MemSetT(&logfont, 0); logfont.lfPitchAndFamily = fs == FS_MONO ? FIXED_PITCH : VARIABLE_PITCH; @@ -366,8 +367,8 @@ void LoadWin32Font(FontSize fs) logfont = *(const LOGFONT *)settings->os_handle; } else if (strchr(font_name, '.') != nullptr) { /* Might be a font file name, try load it. */ - if (!TryLoadFontFromFile(settings->font, logfont)) { - ShowInfo("Unable to load file '{}' for {} font, using default windows font selection instead", font_name, FontSizeToName(fs)); + if (!TryLoadFontFromFile(font, logfont)) { + ShowInfo("Unable to load file '{}' for {} font, using default windows font selection instead", font, FontSizeToName(fs)); } } @@ -378,23 +379,3 @@ void LoadWin32Font(FontSize fs) LoadWin32Font(fs, logfont, settings->size, font_name); } - -/** - * Load a TrueType font from a file. - * @param fs The font size to load. - * @param file_name Path to the font file. - * @param size Requested font size. - */ -void LoadWin32Font(FontSize fs, const std::string &file_name, uint size) -{ - LOGFONT logfont; - MemSetT(&logfont, 0); - logfont.lfPitchAndFamily = fs == FS_MONO ? FIXED_PITCH : VARIABLE_PITCH; - logfont.lfCharSet = DEFAULT_CHARSET; - logfont.lfOutPrecision = OUT_OUTLINE_PRECIS; - logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS; - - if (TryLoadFontFromFile(file_name, logfont)) { - LoadWin32Font(fs, logfont, size, file_name.c_str()); - } -} diff --git a/src/os/windows/font_win32.h b/src/os/windows/font_win32.h index b8f40ad74d..8aa0a42180 100644 --- a/src/os/windows/font_win32.h +++ b/src/os/windows/font_win32.h @@ -43,6 +43,5 @@ public: }; void LoadWin32Font(FontSize fs); -void LoadWin32Font(FontSize fs, const std::string &file_name, uint size); #endif /* FONT_WIN32_H */ From 517dab35b19ebd0a91c2db05ae56fd41071ddb0a Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 26 May 2024 16:46:18 +0100 Subject: [PATCH 579/695] Codechange: Use range-for to iterate base media files. (#12721) --- src/base_media_base.h | 4 ++-- src/base_media_func.h | 4 ++-- src/gfxinit.cpp | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/base_media_base.h b/src/base_media_base.h index 0bd288a9a2..0164a1176a 100644 --- a/src/base_media_base.h +++ b/src/base_media_base.h @@ -158,8 +158,8 @@ struct BaseSet { */ std::optional GetTextfile(TextfileType type) const { - for (uint i = 0; i < NUM_FILES; i++) { - auto textfile = ::GetTextfile(type, BASESET_DIR, this->files[i].filename); + for (const auto &file : this->files) { + auto textfile = ::GetTextfile(type, BASESET_DIR, file.filename); if (textfile.has_value()) { return textfile; } diff --git a/src/base_media_func.h b/src/base_media_func.h index d04485579c..2d68caaa6b 100644 --- a/src/base_media_func.h +++ b/src/base_media_func.h @@ -325,8 +325,8 @@ template const char *TryGetBaseSetFile(const ContentInfo *ci, if (!md5sum) return s->files[0].filename.c_str(); MD5Hash md5; - for (uint i = 0; i < Tbase_set::NUM_FILES; i++) { - md5 ^= s->files[i].hash; + for (const auto &file : s->files) { + md5 ^= file.hash; } if (md5 == ci->md5sum) return s->files[0].filename.c_str(); } diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index 62b69f2646..f2fccc890c 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -127,9 +127,9 @@ void CheckExternalFiles() if (used_set->GetNumInvalid() != 0) { /* Not all files were loaded successfully, see which ones */ fmt::format_to(output_iterator, "Trying to load graphics set '{}', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of README.md.\n\nThe following files are corrupted or missing:\n", used_set->name); - for (uint i = 0; i < GraphicsSet::NUM_FILES; i++) { - MD5File::ChecksumResult res = GraphicsSet::CheckMD5(&used_set->files[i], BASESET_DIR); - if (res != MD5File::CR_MATCH) fmt::format_to(output_iterator, "\t{} is {} ({})\n", used_set->files[i].filename, res == MD5File::CR_MISMATCH ? "corrupt" : "missing", used_set->files[i].missing_warning); + for (const auto &file : used_set->files) { + MD5File::ChecksumResult res = GraphicsSet::CheckMD5(&file, BASESET_DIR); + if (res != MD5File::CR_MATCH) fmt::format_to(output_iterator, "\t{} is {} ({})\n", file.filename, res == MD5File::CR_MISMATCH ? "corrupt" : "missing", file.missing_warning); } fmt::format_to(output_iterator, "\n"); } From 692943669d6431d48ceea51bcafcafbe558ce6a8 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 27 May 2024 04:41:33 +0000 Subject: [PATCH 580/695] Update: Translations from eints galician: 34 changes by pvillaverde greek: 3 changes by gh658804 --- src/lang/galician.txt | 34 ++++++++++++++++++++++++++++++++++ src/lang/greek.txt | 4 +++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 4f1ebb1365..22be17d592 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -438,6 +438,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Saír do editor STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Saír +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Xerar vilas +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Colocar casas # Settings menu ###length 16 @@ -957,6 +959,7 @@ STR_GAME_OPTIONS_VOLUME :Volume STR_GAME_OPTIONS_SFX_VOLUME :Efectos de son STR_GAME_OPTIONS_MUSIC_VOLUME :Música +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unidades monetarias STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selección de unidades monetarias @@ -1054,6 +1057,7 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Marca es STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Suavizar fontes STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Marca esta opción para suavizar as fontes redimensionables +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Enquisa automática STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participar nunha enquisa automática @@ -1082,6 +1086,8 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Conxunto STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selecciona o conxunto de música base a empregar STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Información adicional sobre o conxunto de música base +STR_GAME_OPTIONS_ONLINE_CONTENT :Obter contido +STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Comprobar contido novo e actualizado para descargar STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(non hai instalado ningún complemento para integrar con plataformas sociais) @@ -2474,6 +2480,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :O teu nome de x STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Accións administrativas a executar neste cliente STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Accións administrativas a executar para esta compañía STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Unirse a esta compañía +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Autorizar a este cliente a unirse a túa compañía STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Envía unha mensaxe a este xogador STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Envía unha mensaxe a todos os xogadores desta compañía STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Enviar unha mensaxe a todos os espectadores @@ -2794,9 +2801,33 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Seleccio STR_STATION_BUILD_DRAG_DROP :{BLACK}Arrastrar e soltar STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construír estación arrastrando e soltando +STR_PICKER_MODE_ALL :Todo +STR_PICKER_MODE_ALL_TOOLTIP :Alternar amosar elementos de todas as clases +STR_PICKER_MODE_USED :Usado +STR_PICKER_MODE_USED_TOOLTIP :Alternar amosar só elementos existentes +STR_PICKER_MODE_SAVED :Gardados +STR_PICKER_MODE_SAVED_TOOLTIP :Alternar amosar só elementos gardados +STR_PICKER_STATION_CLASS_TOOLTIP :Selecciona unha clase de estación para amosar +STR_PICKER_STATION_TYPE_TOOLTIP :Selecciona un tipo de estación a construír. Ctrl+Click para engadir ou eliminar nos elementos gardados. +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Selecciona unha clase de punto de ruta para amosar +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Selecciona un punto de ruta a construír. Ctrl+Click para engadir ou eliminar nos elementos gardados. +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Selecciona unha clase de estación de autobús para amosar +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Selecciona o tipo de estación de autobuses a construír. Ctrl+Click para engadir ou eliminar nos elementos gardados. +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Selecciona unha clase de estación de carga de camións para amosar. +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Selecciona un tipo de estación de camións a construír. Ctrl+Click para engadir ou eliminar nos elementos gardados. +STR_PICKER_OBJECT_CLASS_TOOLTIP :Selecciona unha clase de obxecto para amosar +STR_PICKER_OBJECT_TYPE_TOOLTIP :Selecciona un tipo de obxecto a construír. Ctrl+Click para engadir ou eliminar nos elementos gardados. Ctrl+Click+Arrastrar para seleccionar a área diagonalmente. Tamén podes premer Shift para amosar unha estimación do custo +STR_PICKER_HOUSE_CLASS_TOOLTIP :Selecciona unha zona da vila para amosar +STR_PICKER_HOUSE_TYPE_TOOLTIP :Selecciona un tipo de casa a construír. Ctrl+Click para engadir ou eliminar nos elementos gardados. +STR_HOUSE_PICKER_CAPTION :Selección de casas +STR_HOUSE_PICKER_CLASS_ZONE1 :Borde +STR_HOUSE_PICKER_CLASS_ZONE2 :Periferia +STR_HOUSE_PICKER_CLASS_ZONE3 :Suburbios da periferia +STR_HOUSE_PICKER_CLASS_ZONE4 :Suburbios interiores +STR_HOUSE_PICKER_CLASS_ZONE5 :Centro da vila STR_STATION_CLASS_DFLT :Por defecto STR_STATION_CLASS_DFLT_STATION :Estación por defecto @@ -4984,6 +5015,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... non STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Obras na estrada en curso STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Non se pode borrar esta vila...{}Unha estación ou depósito está relacionado coa vila ou un cadro propiedade da vila non pode ser eliminado STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... non hai ningún sitio adecuado para unha estatua no centro desta vila +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Non se pode construír a casa... # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... demasiadas industrias @@ -5021,6 +5053,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Non se p STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Xunta máis dunha estación/área de carga existente STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... a estación ocupa demasiado +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... número de vías non soportado +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... lonxitude non soportada STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Demasiadas estacións/áreas de carga STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Demasiadas partes de estación de tren STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Demasiadas paradas de autobús diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 0d25b665f8..da0bdd6b99 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -2886,7 +2886,7 @@ STR_WAYPOINT_CAPTION :{WHITE}Σημε STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Επιλογή Σιδηροδρομικού Σταθμού STR_STATION_BUILD_ORIENTATION :{BLACK}Προσανατολισμός STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}Επιλογή προσανατολισμού σιδηροδρομικού σταθμού -STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Αριθμός γραμμών +STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Αριθμός σιδηροτροχιών STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Επιλέξτε τον αριθμό πλατφορμών για το σιδηροδρομικό σταθμό STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Μήκος πλατφόρμας STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Επιλέξτε το μήκος του σιδηροδρομικού σταθμού @@ -5153,6 +5153,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Δεν STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Γειτονεύει με περισσότερες από μια υπάρχουσες περιοχές σταθμών/φόρτωσης STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... ο σταθμός είναι υπερβολικά απλωμένος +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... μη υποστηριζόμενος αριθμός σιδηροτροχιών +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... μη υποστηριζόμενο μήκος STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Πάρα πολλές περιοχές σταθμών/φόρτωσης STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Πάρα πολλά κομμάτια σιδηροδρομικού σταθμού STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Πάρα πολλές στάσεις λεωφορείου From 4b81b62b72febe0eadebd5bdeb549bca07e5df36 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 27 May 2024 12:44:34 +0100 Subject: [PATCH 581/695] Change: Don't reinitialise font caches when setting initial interface scale. (#12722) --- src/gfx_func.h | 1 + src/openttd.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gfx_func.h b/src/gfx_func.h index c6c1a46a4c..d40431ba7b 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -79,6 +79,7 @@ void ChangeGameSpeed(bool enable_fast_forward); void DrawMouseCursor(); void ScreenSizeChanged(); void GameSizeChanged(); +void UpdateGUIZoom(); bool AdjustGUIZoom(bool automatic); void UndrawMouseCursor(); diff --git a/src/openttd.cpp b/src/openttd.cpp index 495486afd9..e24a9d21fd 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -757,7 +757,7 @@ int openttd_main(std::span arguments) _screen.zoom = ZOOM_LVL_MIN; /* The video driver is now selected, now initialise GUI zoom */ - AdjustGUIZoom(false); + UpdateGUIZoom(); SocialIntegration::Initialize(); NetworkStartUp(); // initialize network-core From f6c5da4cad88553cd070be6fe94f94f123e2e517 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 27 May 2024 12:44:49 +0100 Subject: [PATCH 582/695] Fix: Incorrect dump_info output with labels outside of ascii range. (#12723) An unspecified cargo label is 0x00000000, which terminates C-strings. --- src/console_cmds.cpp | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index a39bca463d..4656ecc52f 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -2543,6 +2543,22 @@ DEF_CONSOLE_CMD(ConFramerateWindow) return true; } +/** + * Format a label as a string. + * If all elements are visible ASCII (excluding space) then the label will be formatted as a string of 4 characters, + * otherwise it will be output as an 8-digit hexadecimal value. + * @param label Label to format. + * @return string representation of label. + **/ +static std::string FormatLabel(uint32_t label) +{ + if (std::isgraph(GB(label, 24, 8)) && std::isgraph(GB(label, 16, 8)) && std::isgraph(GB(label, 8, 8)) && std::isgraph(GB(label, 0, 8))) { + return fmt::format("{:c}{:c}{:c}{:c}", GB(label, 24, 8), GB(label, 16, 8), GB(label, 8, 8), GB(label, 0, 8)); + } + + return fmt::format("{:08X}", BSWAP32(label)); +} + static void ConDumpRoadTypes() { IConsolePrint(CC_DEFAULT, " Flags:"); @@ -2562,10 +2578,10 @@ static void ConDumpRoadTypes() grfid = grf->grfid; grfs.emplace(grfid, grf); } - IConsolePrint(CC_DEFAULT, " {:02d} {} {:c}{:c}{:c}{:c}, Flags: {}{}{}{}{}, GRF: {:08X}, {}", + IConsolePrint(CC_DEFAULT, " {:02d} {} {}, Flags: {}{}{}{}{}, GRF: {:08X}, {}", (uint)rt, RoadTypeIsTram(rt) ? "Tram" : "Road", - rti->label >> 24, rti->label >> 16, rti->label >> 8, rti->label, + FormatLabel(rti->label), HasBit(rti->flags, ROTF_CATENARY) ? 'c' : '-', HasBit(rti->flags, ROTF_NO_LEVEL_CROSSING) ? 'l' : '-', HasBit(rti->flags, ROTF_NO_HOUSES) ? 'X' : '-', @@ -2600,9 +2616,9 @@ static void ConDumpRailTypes() grfid = grf->grfid; grfs.emplace(grfid, grf); } - IConsolePrint(CC_DEFAULT, " {:02d} {:c}{:c}{:c}{:c}, Flags: {}{}{}{}{}{}, GRF: {:08X}, {}", + IConsolePrint(CC_DEFAULT, " {:02d} {}, Flags: {}{}{}{}{}{}, GRF: {:08X}, {}", (uint)rt, - rti->label >> 24, rti->label >> 16, rti->label >> 8, rti->label, + FormatLabel(rti->label), HasBit(rti->flags, RTF_CATENARY) ? 'c' : '-', HasBit(rti->flags, RTF_NO_LEVEL_CROSSING) ? 'l' : '-', HasBit(rti->flags, RTF_HIDDEN) ? 'h' : '-', @@ -2642,10 +2658,10 @@ static void ConDumpCargoTypes() grfid = grf->grfid; grfs.emplace(grfid, grf); } - IConsolePrint(CC_DEFAULT, " {:02d} Bit: {:2d}, Label: {:c}{:c}{:c}{:c}, Callback mask: 0x{:02X}, Cargo class: {}{}{}{}{}{}{}{}{}{}{}, GRF: {:08X}, {}", + IConsolePrint(CC_DEFAULT, " {:02d} Bit: {:2d}, Label: {}, Callback mask: 0x{:02X}, Cargo class: {}{}{}{}{}{}{}{}{}{}{}, GRF: {:08X}, {}", spec->Index(), spec->bitnum, - spec->label.base() >> 24, spec->label.base() >> 16, spec->label.base() >> 8, spec->label.base(), + FormatLabel(spec->label.base()), spec->callback_mask, (spec->classes & CC_PASSENGERS) != 0 ? 'p' : '-', (spec->classes & CC_MAIL) != 0 ? 'm' : '-', From 37f68a65ee652bf5df9f89d79e4ff0e47c2d5851 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Mon, 27 May 2024 16:26:07 -0400 Subject: [PATCH 583/695] Fix #12283: Vehicle group dropdown shouldn't have default action (#12727) --- src/group_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 8f3ff5dfcb..095a371244 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -846,7 +846,7 @@ public: break; case WID_GL_MANAGE_VEHICLES_DROPDOWN: { - ShowDropDownList(this, this->BuildActionDropdownList(true, Group::IsValidID(this->vli.index), IsDefaultGroupID(this->vli.index)), 0, WID_GL_MANAGE_VEHICLES_DROPDOWN); + ShowDropDownList(this, this->BuildActionDropdownList(true, Group::IsValidID(this->vli.index), IsDefaultGroupID(this->vli.index)), -1, WID_GL_MANAGE_VEHICLES_DROPDOWN); break; } From 605dff492029c33fb3c073a19aacc3ba3349734f Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 28 May 2024 04:45:37 +0000 Subject: [PATCH 584/695] Update: Translations from eints swedish: 9 changes by joeax910 english (us): 2 changes by 2TallTyler luxembourgish: 4 changes by phreeze83 catalan: 2 changes by J0anJosep latvian: 27 changes by lexuslatvia --- src/lang/catalan.txt | 2 ++ src/lang/english_US.txt | 2 ++ src/lang/latvian.txt | 27 +++++++++++++++++++++++++++ src/lang/luxembourgish.txt | 4 ++++ src/lang/swedish.txt | 9 +++++++++ 5 files changed, 44 insertions(+) diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index cd06c08a1e..8bd84d6011 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -5053,6 +5053,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Aquí no STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Fusiona més d'una estació/àrea de càrrega existent STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... estació massa extensa +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... nombre de vies no vàlid +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... llargada no vàlida STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Massa estacions/àrees de càrrega STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Hi ha massa parts d'estacions de tren STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Massa parades d'autobús diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index ade2067f22..3cbb9f4e5a 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -5052,6 +5052,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Can't bu STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Adjoins more than one existing station/loading area STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... station too spread out +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... unsupported number of tracks +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... unsupported length STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Too many stations/loading areas STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Too many railroad station parts STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Too many bus stops diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 63df7d6c7e..ab69a4e164 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -439,6 +439,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Pamest scenāri STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Iziet +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Izveidot pilsētas +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Novietojiet mājas # Settings menu ###length 16 @@ -2803,10 +2805,32 @@ STR_STATION_BUILD_DRAG_DROP :{BLACK}Vilkt un STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Būvēt staciju izmantojot "vilkt un nomest" STR_PICKER_MODE_ALL :Visi +STR_PICKER_MODE_ALL_TOOLTIP :Pārslēgt visu klašu vienumu rādīšanu +STR_PICKER_MODE_USED :Lietots +STR_PICKER_MODE_USED_TOOLTIP :Pārslēgt tikai esošo vienumu rādīšanu STR_PICKER_MODE_SAVED :Saglabāts +STR_PICKER_MODE_SAVED_TOOLTIP :Pārslēgt tikai saglabāto vienumu rādīšanu +STR_PICKER_STATION_CLASS_TOOLTIP :Izvēlieties rādāmo staciju klasi +STR_PICKER_STATION_TYPE_TOOLTIP :Izvēlieties izveidojamās stacijas veidu. Ctrl+klikšķis, lai pievienotu vai noņemtu saglabātos vienumus +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Izvēlieties rādāmo pieturas punkta klasi +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Izvēlieties ceļa punktu, ko veidot. Ctrl+klikšķis, lai pievienotu vai noņemtu saglabātos vienumus +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Izvēlieties parādāmās autoostas klasi +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Izvēlieties būvējamās autoostas veidu. Ctrl+klikšķis, lai pievienotu vai noņemtu saglabātos vienumus +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Izvēlieties parādāmās kravas automašīnas stacijas klasi +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Izvēlieties būvējamās kravas stacijas veidu. Ctrl+klikšķis, lai pievienotu vai noņemtu saglabātos vienumus +STR_PICKER_OBJECT_CLASS_TOOLTIP :Atlasiet rādāmo objekta klasi +STR_PICKER_OBJECT_TYPE_TOOLTIP :Atlasiet veidojamā objekta veidu. Ctrl+klikšķis, lai pievienotu vai noņemtu saglabātos vienumus. Vilkt Ctrl+klikšķis, lai atlasītu apgabalu pa diagonāli. Nospiediet arī taustiņu Shift, lai rādītu tikai izmaksu tāmi, neveicot iegādi +STR_PICKER_HOUSE_CLASS_TOOLTIP :Atlasiet pilsētas zonu, ko parādīt +STR_PICKER_HOUSE_TYPE_TOOLTIP :Izvēlieties būvējamās mājas veidu. Ctrl+klikšķis, lai pievienotu vai noņemtu saglabātos vienumus +STR_HOUSE_PICKER_CAPTION :Māju izvēle +STR_HOUSE_PICKER_CLASS_ZONE1 :Mala +STR_HOUSE_PICKER_CLASS_ZONE2 :Nomale +STR_HOUSE_PICKER_CLASS_ZONE3 :Ārējās priekšpilsētas +STR_HOUSE_PICKER_CLASS_ZONE4 :Iekšējās priekšpilsētas +STR_HOUSE_PICKER_CLASS_ZONE5 :Pilsētas centrs STR_STATION_CLASS_DFLT :Noklusējuma STR_STATION_CLASS_DFLT_STATION :Noklusējuma stacija @@ -5001,6 +5025,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... uz k STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Notiek ceļa remonts STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Šo pilsētu nevar dzēst...{}Kāda stacija vai depo attiecas uz pilsētu. Vai pilsētai pieder nenoņemams lauciņš STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... šās pilsētas centrā statujai nav piemērotas vietas +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Nevar uzcelt māju... # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... pārāk daudz ražotņu @@ -5038,6 +5063,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Šeit ne STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Blakus atrodas vairāk nekā viena stacija/iekraušanas zona STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... stacija ir pārāk izplesta +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... neatbalstīts sliežu skaits +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... neatbalstīts garums STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Pārāk daudz staciju/iekraušanas zonu STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Pārāk daudz dzelzceļa stacijas daļu STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Pārāk daudz autobusu pieturvietu diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 1051e72608..2b4e80f177 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -2790,6 +2790,10 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}D'Statio +STR_HOUSE_PICKER_CLASS_ZONE1 :Rand +STR_HOUSE_PICKER_CLASS_ZONE2 :Ausseberäich +STR_HOUSE_PICKER_CLASS_ZONE3 :Aner Viruerter +STR_HOUSE_PICKER_CLASS_ZONE4 :Bannescht Viruerter STR_STATION_CLASS_DFLT :Standard STR_STATION_CLASS_DFLT_STATION :Standardstatioun diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index ac78e3304e..e4ae5d19e6 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1085,6 +1085,7 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Musikpak STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Välj vilket musikpaket som ska användas STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Yttligare information om musikpaketet +STR_GAME_OPTIONS_ONLINE_CONTENT :Hämta innehåll STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Kontrollera om det finns nytt och uppdaterat innehåll att ladda ned STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(inga tillägg för att integrera med sociala plattformar installerade) @@ -2478,6 +2479,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Ditt spelarnamn STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Administrativa handlingar att utföra för denna klient STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Administrativa handlingar att utföra för detta företag STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Gå med i detta företag +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Tillåt att denna klient ansluter till ditt företag STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Skicka ett meddelande till denna spelare STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Skicka ett meddelande till alla spelare i detta företag STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Skicka ett meddelande till alla åskådare @@ -2802,7 +2804,12 @@ STR_PICKER_MODE_ALL :Alla STR_PICKER_MODE_ALL_TOOLTIP :Slå av/på visning av objekt från alla klasser STR_PICKER_MODE_USED :Använda STR_PICKER_MODE_USED_TOOLTIP :Slå av/på visning av endast existerande objekt +STR_PICKER_MODE_SAVED :Sparade +STR_PICKER_MODE_SAVED_TOOLTIP :Slå av/på visning av endast sparade objekt +STR_PICKER_STATION_CLASS_TOOLTIP :Välj vilken klass av stationer som ska visas +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Välj vilken klass av riktmärken som ska visas +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Välj vilken klass av busstationer som ska visas STR_PICKER_HOUSE_CLASS_TOOLTIP :Välj vilken stadszon som ska visas STR_HOUSE_PICKER_CAPTION :Husval @@ -5034,6 +5041,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Kan inte STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Angränsar till mer än en station/hållplats STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... stationen för utspridd +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... antalet spår stöds ej +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... längden stöds ej STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}För många stationer/hållplatser STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}För många delar på järnvägsstationen STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}För många busshållplatser From 3d4b98845ada37979ab4d00ff4ef1fcb5166f6cc Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 28 May 2024 19:33:44 +0100 Subject: [PATCH 585/695] Codechange: Remove initial colour from layouter cache. (#12728) Initial colour is now always TC_INVALID, which is substituted with the desired colour when drawing the layout line. This allows strings which differ only by initial colour to use the same layout cache entry, increasing the efficacy of the cache. --- src/gfx.cpp | 20 +++++++++++--------- src/gfx_layout.cpp | 5 ++--- src/gfx_layout.h | 4 ++-- src/textfile_gui.cpp | 2 +- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/gfx.cpp b/src/gfx.cpp index 3d652ab18d..5cc3ee9b90 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -491,11 +491,12 @@ static void SetColourRemap(TextColour colour) * will be drawn in the right direction. * @param underline Whether to underline what has been drawn or not. * @param truncation Whether to perform string truncation or not. + * @param default_colour Colour of text if not specified within string. * * @return In case of left or center alignment the right most pixel we have drawn to. * In case of right alignment the left most pixel we have drawn to. */ -static int DrawLayoutLine(const ParagraphLayouter::Line &line, int y, int left, int right, StringAlignment align, bool underline, bool truncation) +static int DrawLayoutLine(const ParagraphLayouter::Line &line, int y, int left, int right, StringAlignment align, bool underline, bool truncation, TextColour default_colour) { if (line.CountRuns() == 0) return 0; @@ -589,6 +590,7 @@ static int DrawLayoutLine(const ParagraphLayouter::Line &line, int y, int left, FontCache *fc = f->fc; TextColour colour = f->colour; + if (colour == TC_INVALID) colour = default_colour; colour_has_shadow = (colour & TC_NO_SHADE) == 0 && colour != TC_BLACK; SetColourRemap(do_shadow ? TC_BLACK : colour); // the last run also sets the colour for the truncation dots if (do_shadow && (!fc->GetDrawGlyphShadow() || !colour_has_shadow)) continue; @@ -665,10 +667,10 @@ int DrawString(int left, int right, int top, std::string_view str, TextColour co return 0; } - Layouter layout(str, INT32_MAX, colour, fontsize); + Layouter layout(str, INT32_MAX, fontsize); if (layout.empty()) return 0; - return DrawLayoutLine(*layout.front(), top, left, right, align, underline, true); + return DrawLayoutLine(*layout.front(), top, left, right, align, underline, true, colour); } /** @@ -702,7 +704,7 @@ int DrawString(int left, int right, int top, StringID str, TextColour colour, St int GetStringHeight(std::string_view str, int maxw, FontSize fontsize) { assert(maxw > 0); - Layouter layout(str, maxw, TC_FROMSTRING, fontsize); + Layouter layout(str, maxw, fontsize); return layout.GetBounds().height; } @@ -778,7 +780,7 @@ int DrawStringMultiLine(int left, int right, int top, int bottom, std::string_vi * do we really want to support fonts of 0 or less pixels high? */ if (maxh <= 0) return top; - Layouter layout(str, maxw, colour, fontsize); + Layouter layout(str, maxw, fontsize); int total_height = layout.GetBounds().height; int y; switch (align & SA_VERT_MASK) { @@ -807,7 +809,7 @@ int DrawStringMultiLine(int left, int right, int top, int bottom, std::string_vi last_line = y + line_height; if (first_line > y) first_line = y; - DrawLayoutLine(*line, y, left, right, align, underline, false); + DrawLayoutLine(*line, y, left, right, align, underline, false, colour); } y += line_height; } @@ -848,7 +850,7 @@ int DrawStringMultiLine(int left, int right, int top, int bottom, StringID str, */ Dimension GetStringBoundingBox(std::string_view str, FontSize start_fontsize) { - Layouter layout(str, INT32_MAX, TC_FROMSTRING, start_fontsize); + Layouter layout(str, INT32_MAX, start_fontsize); return layout.GetBounds(); } @@ -907,7 +909,7 @@ Point GetCharPosInString(std::string_view str, const char *ch, FontSize start_fo assert(ch >= str.data() && (ch - str.data()) <= static_cast(str.size())); auto it_ch = str.begin() + (ch - str.data()); - Layouter layout(str, INT32_MAX, TC_FROMSTRING, start_fontsize); + Layouter layout(str, INT32_MAX, start_fontsize); return layout.GetCharPosition(it_ch); } @@ -922,7 +924,7 @@ ptrdiff_t GetCharAtPosition(std::string_view str, int x, FontSize start_fontsize { if (x < 0) return -1; - Layouter layout(str, INT32_MAX, TC_FROMSTRING, start_fontsize); + Layouter layout(str, INT32_MAX, start_fontsize); return layout.GetCharAtPosition(x, 0); } diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index 28a3c7a57d..392ba1fa4a 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -125,12 +125,11 @@ static inline void GetLayouter(Layouter::LineCacheItem &line, std::string_view s * Create a new layouter. * @param str The string to create the layout for. * @param maxw The maximum width. - * @param colour The colour of the font. * @param fontsize The size of font to use. */ -Layouter::Layouter(std::string_view str, int maxw, TextColour colour, FontSize fontsize) : string(str) +Layouter::Layouter(std::string_view str, int maxw, FontSize fontsize) : string(str) { - FontState state(colour, fontsize); + FontState state(TC_INVALID, fontsize); while (true) { auto line_length = str.find_first_of('\n'); diff --git a/src/gfx_layout.h b/src/gfx_layout.h index 636b5cdadc..42b809f561 100644 --- a/src/gfx_layout.h +++ b/src/gfx_layout.h @@ -36,7 +36,7 @@ struct FontState { */ inline void SetColour(TextColour c) { - assert((c & TC_COLOUR_MASK) >= TC_BLUE && (c & TC_COLOUR_MASK) <= TC_BLACK); + assert(((c & TC_COLOUR_MASK) >= TC_BLUE && (c & TC_COLOUR_MASK) <= TC_BLACK) || (c & TC_COLOUR_MASK) == TC_INVALID); assert((c & (TC_COLOUR_MASK | TC_FLAGS_MASK)) == c); if ((this->cur_colour & TC_FORCED) == 0) this->cur_colour = c; } @@ -174,7 +174,7 @@ private: public: static Font *GetFont(FontSize size, TextColour colour); - Layouter(std::string_view str, int maxw = INT32_MAX, TextColour colour = TC_FROMSTRING, FontSize fontsize = FS_NORMAL); + Layouter(std::string_view str, int maxw = INT32_MAX, FontSize fontsize = FS_NORMAL); Dimension GetBounds(); Point GetCharPosition(std::string_view::const_iterator ch) const; ptrdiff_t GetCharAtPosition(int x, size_t line_index) const; diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index a95c15ac48..1ae7673715 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -331,7 +331,7 @@ void TextfileWindow::CheckHyperlinkClick(Point pt) /* Build line layout to figure out character position that was clicked. */ uint window_width = IsWidgetLowered(WID_TF_WRAPTEXT) ? this->GetWidget(WID_TF_BACKGROUND)->current_x - WidgetDimensions::scaled.frametext.Horizontal() : INT_MAX; - Layouter layout(this->lines[line_index].text, window_width, this->lines[line_index].colour, FS_MONO); + Layouter layout(this->lines[line_index].text, window_width, FS_MONO); assert(subline < layout.size()); ptrdiff_t char_index = layout.GetCharAtPosition(pt.x - WidgetDimensions::scaled.frametext.left, subline); if (char_index < 0) return; From f220ed179dc259e35d39e027d9e456ed5e30a5cd Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 28 May 2024 19:34:03 +0100 Subject: [PATCH 586/695] Codechange: Use std::unordered_map for SpriteFontCache's glyph map. (#12724) Replaces a C-style malloc'd array and malloc'd contents, and no manual memory clean up is necessary. --- src/fontcache/spritefontcache.cpp | 42 +++++++++---------------------- src/fontcache/spritefontcache.h | 10 +++----- 2 files changed, 16 insertions(+), 36 deletions(-) diff --git a/src/fontcache/spritefontcache.cpp b/src/fontcache/spritefontcache.cpp index d9ad15d55e..9d945d394b 100644 --- a/src/fontcache/spritefontcache.cpp +++ b/src/fontcache/spritefontcache.cpp @@ -35,7 +35,7 @@ static int ScaleFontTrad(int value) * Create a new sprite font cache. * @param fs The font size to create the cache for. */ -SpriteFontCache::SpriteFontCache(FontSize fs) : FontCache(fs), glyph_to_spriteid_map(nullptr) +SpriteFontCache::SpriteFontCache(FontSize fs) : FontCache(fs) { this->InitializeUnicodeGlyphMap(); this->height = ScaleGUITrad(FontCache::GetDefaultFontHeight(this->fs)); @@ -43,30 +43,26 @@ SpriteFontCache::SpriteFontCache(FontSize fs) : FontCache(fs), glyph_to_spriteid } /** - * Free everything we allocated. + * Get SpriteID associated with a GlyphID. + * @param key Glyph to find. + * @return SpriteID of glyph, or 0 if not present. */ -SpriteFontCache::~SpriteFontCache() +SpriteID SpriteFontCache::GetUnicodeGlyph(GlyphID key) { - this->ClearGlyphToSpriteMap(); -} - -SpriteID SpriteFontCache::GetUnicodeGlyph(char32_t key) -{ - if (this->glyph_to_spriteid_map[GB(key, 8, 8)] == nullptr) return 0; - return this->glyph_to_spriteid_map[GB(key, 8, 8)][GB(key, 0, 8)]; + const auto found = this->glyph_to_spriteid_map.find(key & ~SPRITE_GLYPH); + if (found == std::end(this->glyph_to_spriteid_map)) return 0; + return found->second; } void SpriteFontCache::SetUnicodeGlyph(char32_t key, SpriteID sprite) { - if (this->glyph_to_spriteid_map == nullptr) this->glyph_to_spriteid_map = CallocT(256); - if (this->glyph_to_spriteid_map[GB(key, 8, 8)] == nullptr) this->glyph_to_spriteid_map[GB(key, 8, 8)] = CallocT(256); - this->glyph_to_spriteid_map[GB(key, 8, 8)][GB(key, 0, 8)] = sprite; + this->glyph_to_spriteid_map[key] = sprite; } void SpriteFontCache::InitializeUnicodeGlyphMap() { /* Clear out existing glyph map if it exists */ - this->ClearGlyphToSpriteMap(); + this->glyph_to_spriteid_map.clear(); SpriteID base; switch (this->fs) { @@ -98,20 +94,6 @@ void SpriteFontCache::InitializeUnicodeGlyphMap() } } -/** - * Clear the glyph to sprite mapping. - */ -void SpriteFontCache::ClearGlyphToSpriteMap() -{ - if (this->glyph_to_spriteid_map == nullptr) return; - - for (uint i = 0; i < 256; i++) { - free(this->glyph_to_spriteid_map[i]); - } - free(this->glyph_to_spriteid_map); - this->glyph_to_spriteid_map = nullptr; -} - void SpriteFontCache::ClearFontCache() { Layouter::ResetFontCache(this->fs); @@ -121,14 +103,14 @@ void SpriteFontCache::ClearFontCache() const Sprite *SpriteFontCache::GetGlyph(GlyphID key) { - SpriteID sprite = this->GetUnicodeGlyph(key); + SpriteID sprite = this->GetUnicodeGlyph(static_cast(key & ~SPRITE_GLYPH)); if (sprite == 0) sprite = this->GetUnicodeGlyph('?'); return GetSprite(sprite, SpriteType::Font); } uint SpriteFontCache::GetGlyphWidth(GlyphID key) { - SpriteID sprite = this->GetUnicodeGlyph(key); + SpriteID sprite = this->GetUnicodeGlyph(static_cast(key & ~SPRITE_GLYPH)); if (sprite == 0) sprite = this->GetUnicodeGlyph('?'); return SpriteExists(sprite) ? GetSprite(sprite, SpriteType::Font)->width + ScaleFontTrad(this->fs != FS_NORMAL ? 1 : 0) : 0; } diff --git a/src/fontcache/spritefontcache.h b/src/fontcache/spritefontcache.h index e176aeb9b1..4e43b8752c 100644 --- a/src/fontcache/spritefontcache.h +++ b/src/fontcache/spritefontcache.h @@ -15,14 +15,8 @@ /** Font cache for fonts that are based on a freetype font. */ class SpriteFontCache : public FontCache { -private: - SpriteID **glyph_to_spriteid_map; ///< Mapping of glyphs to sprite IDs. - SpriteID GetUnicodeGlyph(char32_t key); - - void ClearGlyphToSpriteMap(); public: SpriteFontCache(FontSize fs); - ~SpriteFontCache(); void SetUnicodeGlyph(char32_t key, SpriteID sprite) override; void InitializeUnicodeGlyphMap() override; void ClearFontCache() override; @@ -32,6 +26,10 @@ public: GlyphID MapCharToGlyph(char32_t key, [[maybe_unused]] bool allow_fallback = true) override { assert(IsPrintable(key)); return SPRITE_GLYPH | key; } std::string GetFontName() override { return "sprite"; } bool IsBuiltInFont() override { return true; } + +private: + std::unordered_map glyph_to_spriteid_map{}; ///< Mapping of glyphs to sprite IDs. + SpriteID GetUnicodeGlyph(GlyphID key); }; #endif /* SPRITEFONTCACHE_H */ From 51e170a8d0c3927dde87fd3e9340120d13c4e19c Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 29 May 2024 04:42:57 +0000 Subject: [PATCH 587/695] Update: Translations from eints swedish: 12 changes by sereneavatar --- src/lang/swedish.txt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index e4ae5d19e6..a05709de92 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -2808,13 +2808,24 @@ STR_PICKER_MODE_SAVED :Sparade STR_PICKER_MODE_SAVED_TOOLTIP :Slå av/på visning av endast sparade objekt STR_PICKER_STATION_CLASS_TOOLTIP :Välj vilken klass av stationer som ska visas +STR_PICKER_STATION_TYPE_TOOLTIP :Välj en stationstyp att bygga. Ctrl+Klick för att lägga till eller ta bort i sparade objekt STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Välj vilken klass av riktmärken som ska visas +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Välj ett riktmärke att bygga. Ctrl+Klick för att lägga till eller ta bort i sparade objekt STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Välj vilken klass av busstationer som ska visas +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Välj en busstationstyp att bygga. Ctrl+Klick för att lägga till eller ta bort i sparade objekt +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Välj vilken klass av laststationer som ska visas +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Välj en laststationstyp att bygga. Ctrl+Klick för att lägga till eller ta bort i sparade objekt +STR_PICKER_OBJECT_CLASS_TOOLTIP :Välj vilken klass av objekt som ska visas +STR_PICKER_OBJECT_TYPE_TOOLTIP :Välj en objektstyp att bygga. Ctrl+Klick för att lägga till eller ta bort i sparade objekt. Ctrl+Klick+Drag för att välja ytan diagonalt. Håll även in Shift för att endast visa uppskattad kostnad STR_PICKER_HOUSE_CLASS_TOOLTIP :Välj vilken stadszon som ska visas +STR_PICKER_HOUSE_TYPE_TOOLTIP :Välj en hustyp att bygga. Ctrl+Klick för att lägga till eller ta bort i sparade objekt STR_HOUSE_PICKER_CAPTION :Husval -STR_HOUSE_PICKER_CLASS_ZONE4 :Innerförorterna +STR_HOUSE_PICKER_CLASS_ZONE1 :Gräns +STR_HOUSE_PICKER_CLASS_ZONE2 :Utkanter +STR_HOUSE_PICKER_CLASS_ZONE3 :Yttrerförorter +STR_HOUSE_PICKER_CLASS_ZONE4 :Innerförorter STR_HOUSE_PICKER_CLASS_ZONE5 :Stadskärnan STR_STATION_CLASS_DFLT :Original From 2e7819927f00cfc06d59f1267ef010cf823b50ce Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 29 May 2024 17:05:04 +0100 Subject: [PATCH 588/695] Fix: Invalidate game options window after changing base sounds set. (#12731) --- src/sound.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/sound.cpp b/src/sound.cpp index 7bb6d1ef26..c4ab75df6c 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -12,6 +12,7 @@ #include "mixer.h" #include "newgrf_sound.h" #include "random_access_file_type.h" +#include "window_func.h" #include "window_gui.h" #include "vehicle_base.h" @@ -259,6 +260,8 @@ void ChangeSoundSet(int index) sound->volume = _sound_base_vol[i]; sound->priority = 0; } + + InvalidateWindowData(WC_GAME_OPTIONS, WN_GAME_OPTIONS_GAME_OPTIONS, 0, true); } /** From 85918fc23ed4044409750365cd745eb477034998 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Tue, 28 May 2024 20:26:34 +0100 Subject: [PATCH 589/695] Fix: Water infrastructure total when changing owner of object on water --- src/object_cmd.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp index 7320786ce0..c3f926eba8 100644 --- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -880,6 +880,10 @@ static void ChangeTileOwner_Object(TileIndex tile, Owner old_owner, Owner new_ow ObjectType type = GetObjectType(tile); if ((type == OBJECT_OWNED_LAND || type >= NEW_OBJECT_OFFSET) && new_owner != INVALID_OWNER) { SetTileOwner(tile, new_owner); + if (GetWaterClass(tile) == WATER_CLASS_CANAL) { + Company::Get(old_owner)->infrastructure.water--; + Company::Get(new_owner)->infrastructure.water++; + } } else if (type == OBJECT_STATUE) { Town *t = Object::GetByTile(tile)->town; ClrBit(t->statues, old_owner); From deb77463b0170b83003d14acafe20b23d24a6760 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Wed, 29 May 2024 14:58:36 -0400 Subject: [PATCH 590/695] Fix #12492: Clarify helptext for "minutes per year" setting (#12726) --- src/lang/english.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 881db7cfc7..ece722b4b6 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1498,7 +1498,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendar STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Wallclock STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutes per year: {STRING2} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Choose the number of minutes in a calendar year. The default is 12 minutes. Set to 0 to stop calendar time from changing. This setting does not affect the economic simulation of the game, and is only available when using wallclock timekeeping +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Choose the number of minutes in a calendar year. The default is 12 minutes. Set to 0 to stop calendar time from changing. Increasing the length of the calendar year slows down the introduction of vehicles, houses, and other infrastructure. It does not affect vehicle speed or economic simulation, except for inflation. This setting is only available when using wallclock timekeeping STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special From 0f230244fe2725bd497ca5a8cf1c60bcca9bae01 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 30 May 2024 08:34:26 +0100 Subject: [PATCH 591/695] Codechange: [UI] Remove redundant SetMinimalSize for WWT_EDITBOX widgets. (#12733) --- src/fios_gui.cpp | 6 +++--- src/misc_gui.cpp | 2 +- src/network/network_chat_gui.cpp | 2 +- src/network/network_gui.cpp | 6 +++--- src/newgrf_gui.cpp | 2 +- src/osk_gui.cpp | 2 +- src/settings_gui.cpp | 2 +- src/signs_gui.cpp | 4 ++-- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index bf7812570e..311f095703 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -80,7 +80,7 @@ static constexpr NWidgetPart _nested_load_dialog_widgets[] = { NWidget(NWID_HORIZONTAL), SetPadding(WidgetDimensions::unscaled.framerect.top, 0, WidgetDimensions::unscaled.framerect.bottom, 0), SetPIP(WidgetDimensions::unscaled.frametext.left, WidgetDimensions::unscaled.frametext.right, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetFill(0, 1), SetDataTip(STR_SAVELOAD_FILTER_TITLE , STR_NULL), - NWidget(WWT_EDITBOX, COLOUR_GREY, WID_SL_FILTER), SetFill(1, 0), SetMinimalSize(50, 12), SetResize(1, 0), + NWidget(WWT_EDITBOX, COLOUR_GREY, WID_SL_FILTER), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), EndContainer(), EndContainer(), @@ -138,7 +138,7 @@ static constexpr NWidgetPart _nested_load_heightmap_dialog_widgets[] = { NWidget(NWID_HORIZONTAL), SetPadding(WidgetDimensions::unscaled.framerect.top, 0, WidgetDimensions::unscaled.framerect.bottom, 0), SetPIP(WidgetDimensions::unscaled.frametext.left, WidgetDimensions::unscaled.frametext.right, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetFill(0, 1), SetDataTip(STR_SAVELOAD_FILTER_TITLE , STR_NULL), - NWidget(WWT_EDITBOX, COLOUR_GREY, WID_SL_FILTER), SetFill(1, 0), SetMinimalSize(50, 12), SetResize(1, 0), + NWidget(WWT_EDITBOX, COLOUR_GREY, WID_SL_FILTER), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), EndContainer(), EndContainer(), @@ -185,7 +185,7 @@ static constexpr NWidgetPart _nested_save_dialog_widgets[] = { NWidget(NWID_HORIZONTAL), SetPadding(WidgetDimensions::unscaled.framerect.top, 0, WidgetDimensions::unscaled.framerect.bottom, 0), SetPIP(WidgetDimensions::unscaled.frametext.left, WidgetDimensions::unscaled.frametext.right, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetFill(0, 1), SetDataTip(STR_SAVELOAD_FILTER_TITLE , STR_NULL), - NWidget(WWT_EDITBOX, COLOUR_GREY, WID_SL_FILTER), SetFill(1, 0), SetMinimalSize(50, 12), SetResize(1, 0), + NWidget(WWT_EDITBOX, COLOUR_GREY, WID_SL_FILTER), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), EndContainer(), EndContainer(), diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 4f9c11803e..085f5aaf8e 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -1029,7 +1029,7 @@ static constexpr NWidgetPart _nested_query_string_widgets[] = { NWidget(WWT_CAPTION, COLOUR_GREY, WID_QS_CAPTION), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_WHITE), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), - NWidget(WWT_EDITBOX, COLOUR_GREY, WID_QS_TEXT), SetMinimalSize(256, 12), SetFill(1, 1), SetPadding(2, 2, 2, 2), + NWidget(WWT_EDITBOX, COLOUR_GREY, WID_QS_TEXT), SetMinimalSize(256, 0), SetFill(1, 0), SetPadding(2, 2, 2, 2), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_QS_DEFAULT), SetMinimalSize(87, 12), SetFill(1, 1), SetDataTip(STR_BUTTON_DEFAULT, STR_NULL), diff --git a/src/network/network_chat_gui.cpp b/src/network/network_chat_gui.cpp index be61d5cbf8..25ab13d932 100644 --- a/src/network/network_chat_gui.cpp +++ b/src/network/network_chat_gui.cpp @@ -420,7 +420,7 @@ static constexpr NWidgetPart _nested_chat_window_widgets[] = { NWidget(WWT_PANEL, COLOUR_GREY, WID_NC_BACKGROUND), NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXT, COLOUR_GREY, WID_NC_DESTINATION), SetMinimalSize(62, 12), SetPadding(1, 0, 1, 0), SetAlignment(SA_VERT_CENTER | SA_RIGHT), SetDataTip(STR_NULL, STR_NULL), - NWidget(WWT_EDITBOX, COLOUR_GREY, WID_NC_TEXTBOX), SetMinimalSize(100, 12), SetPadding(1, 0, 1, 0), SetResize(1, 0), + NWidget(WWT_EDITBOX, COLOUR_GREY, WID_NC_TEXTBOX), SetMinimalSize(100, 0), SetPadding(1, 0, 1, 0), SetResize(1, 0), SetDataTip(STR_NETWORK_CHAT_OSKTITLE, STR_NULL), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_NC_SENDBUTTON), SetMinimalSize(62, 12), SetPadding(1, 0, 1, 0), SetDataTip(STR_NETWORK_CHAT_SEND, STR_NULL), EndContainer(), diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index fb5ced4066..7f279f9004 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -891,7 +891,7 @@ static constexpr NWidgetPart _nested_network_game_widgets[] = { NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_wide, 0), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NG_FILTER_LABEL), SetDataTip(STR_LIST_FILTER_TITLE, STR_NULL), - NWidget(WWT_EDITBOX, COLOUR_LIGHT_BLUE, WID_NG_FILTER), SetMinimalSize(251, 12), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_EDITBOX, COLOUR_LIGHT_BLUE, WID_NG_FILTER), SetMinimalSize(251, 0), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), @@ -917,7 +917,7 @@ static constexpr NWidgetPart _nested_network_game_widgets[] = { NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_wide, 0), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NG_CLIENT_LABEL), SetDataTip(STR_NETWORK_SERVER_LIST_PLAYER_NAME, STR_NULL), - NWidget(WWT_EDITBOX, COLOUR_LIGHT_BLUE, WID_NG_CLIENT), SetMinimalSize(151, 12), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_EDITBOX, COLOUR_LIGHT_BLUE, WID_NG_CLIENT), SetMinimalSize(151, 0), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE, STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP), EndContainer(), NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), @@ -1166,7 +1166,7 @@ static constexpr NWidgetPart _nested_network_start_server_window_widgets[] = { NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), /* Game name widgets */ NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_GAMENAME_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_NEW_GAME_NAME, STR_NULL), - NWidget(WWT_EDITBOX, COLOUR_LIGHT_BLUE, WID_NSS_GAMENAME), SetMinimalSize(10, 12), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE, STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP), + NWidget(WWT_EDITBOX, COLOUR_LIGHT_BLUE, WID_NSS_GAMENAME), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE, STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 163a1cc709..c9c11151fc 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -1867,7 +1867,7 @@ static constexpr NWidgetPart _nested_newgrf_availables_widgets[] = { /* Left side, available grfs, filter edit box. */ NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), NWidget(WWT_TEXT, COLOUR_MAUVE), SetFill(0, 1), SetDataTip(STR_NEWGRF_FILTER_TITLE, STR_NULL), - NWidget(WWT_EDITBOX, COLOUR_MAUVE, WID_NS_FILTER), SetFill(1, 0), SetMinimalSize(50, 12), SetResize(1, 0), + NWidget(WWT_EDITBOX, COLOUR_MAUVE, WID_NS_FILTER), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), EndContainer(), diff --git a/src/osk_gui.cpp b/src/osk_gui.cpp index 72d10e960f..1949b8008e 100644 --- a/src/osk_gui.cpp +++ b/src/osk_gui.cpp @@ -321,7 +321,7 @@ static std::unique_ptr MakeSpacebarKeys() static constexpr NWidgetPart _nested_osk_widgets[] = { NWidget(WWT_CAPTION, COLOUR_GREY, WID_OSK_CAPTION), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_WHITE), NWidget(WWT_PANEL, COLOUR_GREY), - NWidget(WWT_EDITBOX, COLOUR_GREY, WID_OSK_TEXT), SetMinimalSize(252, 12), SetPadding(2, 2, 2, 2), + NWidget(WWT_EDITBOX, COLOUR_GREY, WID_OSK_TEXT), SetMinimalSize(252, 0), SetPadding(2, 2, 2, 2), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), NWidget(NWID_VERTICAL), SetPadding(3), SetPIP(0, INTER_KEY_SPACE, 0), diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 8c7233a469..6da28e6db5 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2876,7 +2876,7 @@ static constexpr NWidgetPart _nested_settings_selection_widgets[] = { EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(WidgetDimensions::unscaled.frametext.left, WidgetDimensions::unscaled.hsep_wide, WidgetDimensions::unscaled.frametext.right), NWidget(WWT_TEXT, COLOUR_MAUVE), SetFill(0, 1), SetDataTip(STR_CONFIG_SETTING_FILTER_TITLE, STR_NULL), - NWidget(WWT_EDITBOX, COLOUR_MAUVE, WID_GS_FILTER), SetMinimalSize(50, 12), SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_EDITBOX, COLOUR_MAUVE, WID_GS_FILTER), SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), SetFill(1, 0), SetResize(1, 0), EndContainer(), EndContainer(), EndContainer(), diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index dbef9641c7..abdd0b0b14 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -370,7 +370,7 @@ static constexpr NWidgetPart _nested_sign_list_widgets[] = { SetResize(1, 1), SetFill(1, 0), SetScrollbar(WID_SIL_SCROLLBAR), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PANEL, COLOUR_BROWN), SetFill(1, 1), - NWidget(WWT_EDITBOX, COLOUR_BROWN, WID_SIL_FILTER_TEXT), SetMinimalSize(80, 12), SetResize(1, 0), SetFill(1, 0), SetPadding(2, 2, 2, 2), + NWidget(WWT_EDITBOX, COLOUR_BROWN, WID_SIL_FILTER_TEXT), SetMinimalSize(80, 0), SetResize(1, 0), SetFill(1, 0), SetPadding(2, 2, 2, 2), SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), EndContainer(), NWidget(WWT_TEXTBTN, COLOUR_BROWN, WID_SIL_FILTER_MATCH_CASE_BTN), SetDataTip(STR_SIGN_LIST_MATCH_CASE, STR_SIGN_LIST_MATCH_CASE_TOOLTIP), @@ -537,7 +537,7 @@ static constexpr NWidgetPart _nested_query_sign_edit_widgets[] = { NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_QES_LOCATION), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_EDIT_SIGN_LOCATION_TOOLTIP), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), - NWidget(WWT_EDITBOX, COLOUR_GREY, WID_QES_TEXT), SetMinimalSize(256, 12), SetDataTip(STR_EDIT_SIGN_SIGN_OSKTITLE, STR_NULL), SetPadding(2, 2, 2, 2), + NWidget(WWT_EDITBOX, COLOUR_GREY, WID_QES_TEXT), SetMinimalSize(256, 0), SetDataTip(STR_EDIT_SIGN_SIGN_OSKTITLE, STR_NULL), SetPadding(2, 2, 2, 2), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_QES_OK), SetMinimalSize(61, 12), SetDataTip(STR_BUTTON_OK, STR_NULL), From 9c19cf06e4779ae2fa29947de51c9a20becc704e Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 30 May 2024 12:31:21 +0100 Subject: [PATCH 592/695] Change: [UI] Use SetMinimalTextLines to set label height correctly. (#12734) SetMinimalSize does not know about font size, so these labels were incorrectly sized if the font height is different from normal. --- src/autoreplace_gui.cpp | 12 ++++++------ src/group_gui.cpp | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index e1f4cf174e..eab2b14117 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -715,10 +715,10 @@ static constexpr NWidgetPart _nested_replace_rail_vehicle_widgets[] = { EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_PANEL, COLOUR_GREY), - NWidget(WWT_LABEL, COLOUR_GREY), SetDataTip(STR_REPLACE_VEHICLE_VEHICLES_IN_USE, STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP), SetFill(1, 1), SetMinimalSize(0, 12), SetResize(1, 0), + NWidget(WWT_LABEL, COLOUR_GREY), SetDataTip(STR_REPLACE_VEHICLE_VEHICLES_IN_USE, STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP), SetFill(1, 1), SetMinimalTextLines(1, WidgetDimensions::unscaled.framerect.Vertical()), SetResize(1, 0), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), - NWidget(WWT_LABEL, COLOUR_GREY), SetDataTip(STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES, STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP), SetFill(1, 1), SetMinimalSize(0, 12), SetResize(1, 0), + NWidget(WWT_LABEL, COLOUR_GREY), SetDataTip(STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES, STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP), SetFill(1, 1), SetMinimalTextLines(1, WidgetDimensions::unscaled.framerect.Vertical()), SetResize(1, 0), EndContainer(), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), @@ -779,10 +779,10 @@ static constexpr NWidgetPart _nested_replace_road_vehicle_widgets[] = { EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_PANEL, COLOUR_GREY), - NWidget(WWT_LABEL, COLOUR_GREY), SetDataTip(STR_REPLACE_VEHICLE_VEHICLES_IN_USE, STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP), SetFill(1, 1), SetMinimalSize(0, 12), SetResize(1, 0), + NWidget(WWT_LABEL, COLOUR_GREY), SetDataTip(STR_REPLACE_VEHICLE_VEHICLES_IN_USE, STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP), SetFill(1, 1), SetMinimalTextLines(1, WidgetDimensions::unscaled.framerect.Vertical()), SetResize(1, 0), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), - NWidget(WWT_LABEL, COLOUR_GREY), SetDataTip(STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES, STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP), SetFill(1, 1), SetMinimalSize(0, 12), SetResize(1, 0), + NWidget(WWT_LABEL, COLOUR_GREY), SetDataTip(STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES, STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP), SetFill(1, 1), SetMinimalTextLines(1, WidgetDimensions::unscaled.framerect.Vertical()), SetResize(1, 0), EndContainer(), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), @@ -837,10 +837,10 @@ static constexpr NWidgetPart _nested_replace_vehicle_widgets[] = { EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_PANEL, COLOUR_GREY), - NWidget(WWT_LABEL, COLOUR_GREY), SetDataTip(STR_REPLACE_VEHICLE_VEHICLES_IN_USE, STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP), SetFill(1, 1), SetMinimalSize(0, 12), SetResize(1, 0), + NWidget(WWT_LABEL, COLOUR_GREY), SetDataTip(STR_REPLACE_VEHICLE_VEHICLES_IN_USE, STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP), SetFill(1, 1), SetMinimalTextLines(1, WidgetDimensions::unscaled.framerect.Vertical()), SetResize(1, 0), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), - NWidget(WWT_LABEL, COLOUR_GREY), SetDataTip(STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES, STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP), SetFill(1, 1), SetMinimalSize(0, 12), SetResize(1, 0), + NWidget(WWT_LABEL, COLOUR_GREY), SetDataTip(STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES, STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP), SetFill(1, 1), SetMinimalTextLines(1, WidgetDimensions::unscaled.framerect.Vertical()), SetResize(1, 0), EndContainer(), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 095a371244..7e68691306 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -82,7 +82,7 @@ static constexpr NWidgetPart _nested_group_widgets[] = { NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_SORT_BY_DROPDOWN), SetFill(1, 0), SetMinimalSize(0, 12), SetDataTip(0x0, STR_TOOLTIP_SORT_CRITERIA), EndContainer(), NWidget(NWID_VERTICAL), - NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(0, 12), SetResize(1, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalTextLines(1, WidgetDimensions::unscaled.framerect.Vertical()), SetResize(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_FILTER_BY_CARGO), SetMinimalSize(0, 12), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_FILTER_CRITERIA), NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(0, 12), SetResize(1, 0), EndContainer(), From de16655f766eb7bdaa43b2e7add895bd37118623 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 30 May 2024 18:33:58 +0100 Subject: [PATCH 593/695] Change: [UI] Remove substitution of missing glyph with '?' glyph. (#12736) When a glyph does not exist, we substitute it with the '?' glyph instead, but layouters are not aware of this substitution. --- src/fontcache/truetypefontcache.cpp | 51 +---------------------------- src/fontcache/truetypefontcache.h | 5 ++- 2 files changed, 3 insertions(+), 53 deletions(-) diff --git a/src/fontcache/truetypefontcache.cpp b/src/fontcache/truetypefontcache.cpp index 462eac249e..c897221d10 100644 --- a/src/fontcache/truetypefontcache.cpp +++ b/src/fontcache/truetypefontcache.cpp @@ -46,7 +46,6 @@ void TrueTypeFontCache::ClearFontCache() if (this->glyph_to_sprite[i] == nullptr) continue; for (int j = 0; j < 256; j++) { - if (this->glyph_to_sprite[i][j].duplicate) continue; free(this->glyph_to_sprite[i][j].sprite); } @@ -67,7 +66,7 @@ TrueTypeFontCache::GlyphEntry *TrueTypeFontCache::GetGlyphPtr(GlyphID key) return &this->glyph_to_sprite[GB(key, 8, 8)][GB(key, 0, 8)]; } -void TrueTypeFontCache::SetGlyphPtr(GlyphID key, const GlyphEntry *glyph, bool duplicate) +void TrueTypeFontCache::SetGlyphPtr(GlyphID key, const GlyphEntry *glyph) { if (this->glyph_to_sprite == nullptr) { Debug(fontcache, 3, "Allocating root glyph cache for size {}", this->fs); @@ -82,7 +81,6 @@ void TrueTypeFontCache::SetGlyphPtr(GlyphID key, const GlyphEntry *glyph, bool d Debug(fontcache, 4, "Set glyph for unicode character 0x{:04X}, size {}", key, this->fs); this->glyph_to_sprite[GB(key, 8, 8)][GB(key, 0, 8)].sprite = glyph->sprite; this->glyph_to_sprite[GB(key, 8, 8)][GB(key, 0, 8)].width = glyph->width; - this->glyph_to_sprite[GB(key, 8, 8)][GB(key, 0, 8)].duplicate = duplicate; } bool TrueTypeFontCache::GetDrawGlyphShadow() @@ -111,52 +109,5 @@ const Sprite *TrueTypeFontCache::GetGlyph(GlyphID key) GlyphEntry *glyph = this->GetGlyphPtr(key); if (glyph != nullptr && glyph->sprite != nullptr) return glyph->sprite; - if (key == 0) { - GlyphID question_glyph = this->MapCharToGlyph('?'); - if (question_glyph == 0) { - /* The font misses the '?' character. Use built-in sprite. - * Note: We cannot use the baseset as this also has to work in the bootstrap GUI. */ -#define CPSET { 0, 0, 0, 0, 1 } -#define CP___ { 0, 0, 0, 0, 0 } - static SpriteLoader::CommonPixel builtin_questionmark_data[10 * 8] = { - CP___, CP___, CPSET, CPSET, CPSET, CPSET, CP___, CP___, - CP___, CPSET, CPSET, CP___, CP___, CPSET, CPSET, CP___, - CP___, CP___, CP___, CP___, CP___, CPSET, CPSET, CP___, - CP___, CP___, CP___, CP___, CPSET, CPSET, CP___, CP___, - CP___, CP___, CP___, CPSET, CPSET, CP___, CP___, CP___, - CP___, CP___, CP___, CPSET, CPSET, CP___, CP___, CP___, - CP___, CP___, CP___, CPSET, CPSET, CP___, CP___, CP___, - CP___, CP___, CP___, CP___, CP___, CP___, CP___, CP___, - CP___, CP___, CP___, CPSET, CPSET, CP___, CP___, CP___, - CP___, CP___, CP___, CPSET, CPSET, CP___, CP___, CP___, - }; -#undef CPSET -#undef CP___ - static const SpriteLoader::SpriteCollection builtin_questionmark = {{ { - 10, // height - 8, // width - 0, // x_offs - 0, // y_offs - SpriteType::Font, - SCC_PAL, - builtin_questionmark_data - } }}; - - Sprite *spr = BlitterFactory::GetCurrentBlitter()->Encode(builtin_questionmark, SimpleSpriteAlloc); - assert(spr != nullptr); - GlyphEntry new_glyph; - new_glyph.sprite = spr; - new_glyph.width = spr->width + (this->fs != FS_NORMAL); - this->SetGlyphPtr(key, &new_glyph, false); - return new_glyph.sprite; - } else { - /* Use '?' for missing characters. */ - this->GetGlyph(question_glyph); - glyph = this->GetGlyphPtr(question_glyph); - this->SetGlyphPtr(key, glyph, true); - return glyph->sprite; - } - } - return this->InternalGetGlyph(key, GetFontAAState()); } diff --git a/src/fontcache/truetypefontcache.h b/src/fontcache/truetypefontcache.h index 8433e6ddbd..6661b72ee3 100644 --- a/src/fontcache/truetypefontcache.h +++ b/src/fontcache/truetypefontcache.h @@ -30,8 +30,7 @@ protected: /** Container for information about a glyph. */ struct GlyphEntry { Sprite *sprite; ///< The loaded sprite. - uint8_t width; ///< The width of the glyph. - bool duplicate; ///< Whether this glyph entry is a duplicate, i.e. may this be freed? + uint8_t width; ///< The width of the glyph. }; /** @@ -50,7 +49,7 @@ protected: GlyphEntry **glyph_to_sprite; GlyphEntry *GetGlyphPtr(GlyphID key); - void SetGlyphPtr(GlyphID key, const GlyphEntry *glyph, bool duplicate = false); + void SetGlyphPtr(GlyphID key, const GlyphEntry *glyph); virtual const Sprite *InternalGetGlyph(GlyphID key, bool aa) = 0; From 7b717fcccb731b61cfc3a9de8711ef47e59af022 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 12 May 2024 11:23:22 +0100 Subject: [PATCH 594/695] Codechange: Replace AllocatorProc with SpriteAllocator class. This allows for state to be passed to or maintained by the allocator. --- src/blitter/32bpp_anim_sse4.hpp | 2 +- src/blitter/32bpp_optimized.cpp | 10 +++++----- src/blitter/32bpp_optimized.hpp | 4 ++-- src/blitter/32bpp_simple.cpp | 4 ++-- src/blitter/32bpp_simple.hpp | 2 +- src/blitter/32bpp_sse2.cpp | 4 ++-- src/blitter/32bpp_sse2.hpp | 4 ++-- src/blitter/40bpp_anim.cpp | 2 +- src/blitter/40bpp_anim.hpp | 2 +- src/blitter/8bpp_optimized.cpp | 4 ++-- src/blitter/8bpp_optimized.hpp | 2 +- src/blitter/8bpp_simple.cpp | 4 ++-- src/blitter/8bpp_simple.hpp | 2 +- src/blitter/null.cpp | 4 ++-- src/blitter/null.hpp | 2 +- src/fontcache/freetypefontcache.cpp | 3 ++- src/fontcache/truetypefontcache.cpp | 1 - src/os/macosx/font_osx.cpp | 3 ++- src/os/windows/font_win32.cpp | 3 ++- src/spritecache.cpp | 28 +++++++++++++++------------- src/spritecache.h | 9 ++++++--- src/spritecache_internal.h | 7 ++++++- src/spriteloader/spriteloader.hpp | 29 +++++++++++++++++++++++++++-- src/tests/mock_spritecache.cpp | 3 ++- src/video/opengl.cpp | 7 ++++--- src/video/opengl.h | 2 +- 26 files changed, 93 insertions(+), 54 deletions(-) diff --git a/src/blitter/32bpp_anim_sse4.hpp b/src/blitter/32bpp_anim_sse4.hpp index b787c14e06..8217e7d805 100644 --- a/src/blitter/32bpp_anim_sse4.hpp +++ b/src/blitter/32bpp_anim_sse4.hpp @@ -39,7 +39,7 @@ public: template void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom); void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; - Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override { + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) override { return Blitter_32bppSSE_Base::Encode(sprite, allocator); } std::string_view GetName() override { return "32bpp-sse4-anim"; } diff --git a/src/blitter/32bpp_optimized.cpp b/src/blitter/32bpp_optimized.cpp index 943e9a0297..848bb7e9c7 100644 --- a/src/blitter/32bpp_optimized.cpp +++ b/src/blitter/32bpp_optimized.cpp @@ -285,7 +285,7 @@ void Blitter_32bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode, this->Draw(bp, mode, zoom); } -template Sprite *Blitter_32bppOptimized::EncodeInternal(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) +template Sprite *Blitter_32bppOptimized::EncodeInternal(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) { /* streams of pixels (a, r, g, b channels) * @@ -414,7 +414,7 @@ template Sprite *Blitter_32bppOptimized::EncodeInternal(const len += lengths[z][0] + lengths[z][1]; } - Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + sizeof(SpriteData) + len); + Sprite *dest_sprite = allocator.Allocate(sizeof(*dest_sprite) + sizeof(SpriteData) + len); dest_sprite->height = sprite[ZOOM_LVL_MIN].height; dest_sprite->width = sprite[ZOOM_LVL_MIN].width; @@ -438,10 +438,10 @@ template Sprite *Blitter_32bppOptimized::EncodeInternal(const return dest_sprite; } -template Sprite *Blitter_32bppOptimized::EncodeInternal(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator); -template Sprite *Blitter_32bppOptimized::EncodeInternal(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator); +template Sprite *Blitter_32bppOptimized::EncodeInternal(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator); +template Sprite *Blitter_32bppOptimized::EncodeInternal(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator); -Sprite *Blitter_32bppOptimized::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) +Sprite *Blitter_32bppOptimized::Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) { return this->EncodeInternal(sprite, allocator); } diff --git a/src/blitter/32bpp_optimized.hpp b/src/blitter/32bpp_optimized.hpp index b1e076faa4..862c1d9e7e 100644 --- a/src/blitter/32bpp_optimized.hpp +++ b/src/blitter/32bpp_optimized.hpp @@ -22,7 +22,7 @@ public: }; void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; - Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) override; std::string_view GetName() override { return "32bpp-optimized"; } @@ -30,7 +30,7 @@ public: protected: template void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom); - template Sprite *EncodeInternal(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator); + template Sprite *EncodeInternal(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator); }; /** Factory for the optimised 32 bpp blitter (without palette animation). */ diff --git a/src/blitter/32bpp_simple.cpp b/src/blitter/32bpp_simple.cpp index 9fcb224b08..ae660e372f 100644 --- a/src/blitter/32bpp_simple.cpp +++ b/src/blitter/32bpp_simple.cpp @@ -115,10 +115,10 @@ void Blitter_32bppSimple::DrawColourMappingRect(void *dst, int width, int height Debug(misc, 0, "32bpp blitter doesn't know how to draw this colour table ('{}')", pal); } -Sprite *Blitter_32bppSimple::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) +Sprite *Blitter_32bppSimple::Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) { Blitter_32bppSimple::Pixel *dst; - Sprite *dest_sprite = static_cast(allocator(sizeof(*dest_sprite) + static_cast(sprite[ZOOM_LVL_MIN].height) * static_cast(sprite[ZOOM_LVL_MIN].width) * sizeof(*dst))); + Sprite *dest_sprite = allocator.Allocate(sizeof(*dest_sprite) + static_cast(sprite[ZOOM_LVL_MIN].height) * static_cast(sprite[ZOOM_LVL_MIN].width) * sizeof(*dst)); dest_sprite->height = sprite[ZOOM_LVL_MIN].height; dest_sprite->width = sprite[ZOOM_LVL_MIN].width; diff --git a/src/blitter/32bpp_simple.hpp b/src/blitter/32bpp_simple.hpp index 8c2dc3a346..902af2905a 100644 --- a/src/blitter/32bpp_simple.hpp +++ b/src/blitter/32bpp_simple.hpp @@ -26,7 +26,7 @@ class Blitter_32bppSimple : public Blitter_32bppBase { public: void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) override; - Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) override; std::string_view GetName() override { return "32bpp-simple"; } }; diff --git a/src/blitter/32bpp_sse2.cpp b/src/blitter/32bpp_sse2.cpp index 72919b9bc4..2b4505253b 100644 --- a/src/blitter/32bpp_sse2.cpp +++ b/src/blitter/32bpp_sse2.cpp @@ -20,7 +20,7 @@ /** Instantiation of the SSE2 32bpp blitter factory. */ static FBlitter_32bppSSE2 iFBlitter_32bppSSE2; -Sprite *Blitter_32bppSSE_Base::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) +Sprite *Blitter_32bppSSE_Base::Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) { /* First uint32_t of a line = the number of transparent pixels from the left. * Second uint32_t of a line = the number of transparent pixels from the right. @@ -51,7 +51,7 @@ Sprite *Blitter_32bppSSE_Base::Encode(const SpriteLoader::SpriteCollection &spri all_sprites_size += rgba_size + mv_size; } - Sprite *dst_sprite = (Sprite *) allocator(sizeof(Sprite) + sizeof(SpriteData) + all_sprites_size); + Sprite *dst_sprite = allocator.Allocate(sizeof(Sprite) + sizeof(SpriteData) + all_sprites_size); dst_sprite->height = sprite[ZOOM_LVL_MIN].height; dst_sprite->width = sprite[ZOOM_LVL_MIN].width; dst_sprite->x_offs = sprite[ZOOM_LVL_MIN].x_offs; diff --git a/src/blitter/32bpp_sse2.hpp b/src/blitter/32bpp_sse2.hpp index 402c732546..ebbb31e059 100644 --- a/src/blitter/32bpp_sse2.hpp +++ b/src/blitter/32bpp_sse2.hpp @@ -76,7 +76,7 @@ public: uint8_t data[]; ///< Data, all zoomlevels. }; - Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator); + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator); }; DECLARE_ENUM_AS_BIT_SET(Blitter_32bppSSE_Base::SpriteFlags); @@ -88,7 +88,7 @@ public: template void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom); - Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override { + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) override { return Blitter_32bppSSE_Base::Encode(sprite, allocator); } diff --git a/src/blitter/40bpp_anim.cpp b/src/blitter/40bpp_anim.cpp index cf2ee68897..3a9b89e4bd 100644 --- a/src/blitter/40bpp_anim.cpp +++ b/src/blitter/40bpp_anim.cpp @@ -397,7 +397,7 @@ void Blitter_40bppAnim::DrawColourMappingRect(void *dst, int width, int height, } } -Sprite *Blitter_40bppAnim::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) +Sprite *Blitter_40bppAnim::Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) { return this->EncodeInternal(sprite, allocator); } diff --git a/src/blitter/40bpp_anim.hpp b/src/blitter/40bpp_anim.hpp index 928af303c2..0174735c3a 100644 --- a/src/blitter/40bpp_anim.hpp +++ b/src/blitter/40bpp_anim.hpp @@ -27,7 +27,7 @@ public: void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y) override; void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) override; - Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) override; size_t BufferSize(uint width, uint height) override; Blitter::PaletteAnimation UsePaletteAnimation() override; bool NeedsAnimationBuffer() override; diff --git a/src/blitter/8bpp_optimized.cpp b/src/blitter/8bpp_optimized.cpp index 3d050744cb..c4bef59b53 100644 --- a/src/blitter/8bpp_optimized.cpp +++ b/src/blitter/8bpp_optimized.cpp @@ -120,7 +120,7 @@ void Blitter_8bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode, Z } } -Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) +Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) { /* Make memory for all zoom-levels */ uint memory = sizeof(SpriteData); @@ -219,7 +219,7 @@ Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::SpriteCollection &spri assert(size < memory); /* Allocate the exact amount of memory we need */ - Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + size); + Sprite *dest_sprite = allocator.Allocate(sizeof(*dest_sprite) + size); dest_sprite->height = sprite[ZOOM_LVL_MIN].height; dest_sprite->width = sprite[ZOOM_LVL_MIN].width; diff --git a/src/blitter/8bpp_optimized.hpp b/src/blitter/8bpp_optimized.hpp index b999676648..c3c8e381d0 100644 --- a/src/blitter/8bpp_optimized.hpp +++ b/src/blitter/8bpp_optimized.hpp @@ -23,7 +23,7 @@ public: }; void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; - Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) override; std::string_view GetName() override { return "8bpp-optimized"; } }; diff --git a/src/blitter/8bpp_simple.cpp b/src/blitter/8bpp_simple.cpp index 8dfa599a61..6686ec0e2a 100644 --- a/src/blitter/8bpp_simple.cpp +++ b/src/blitter/8bpp_simple.cpp @@ -61,10 +61,10 @@ void Blitter_8bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, Zoom } } -Sprite *Blitter_8bppSimple::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) +Sprite *Blitter_8bppSimple::Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) { Sprite *dest_sprite; - dest_sprite = static_cast(allocator(sizeof(*dest_sprite) + static_cast(sprite[ZOOM_LVL_MIN].height) * static_cast(sprite[ZOOM_LVL_MIN].width))); + dest_sprite = allocator.Allocate(sizeof(*dest_sprite) + static_cast(sprite[ZOOM_LVL_MIN].height) * static_cast(sprite[ZOOM_LVL_MIN].width)); dest_sprite->height = sprite[ZOOM_LVL_MIN].height; dest_sprite->width = sprite[ZOOM_LVL_MIN].width; diff --git a/src/blitter/8bpp_simple.hpp b/src/blitter/8bpp_simple.hpp index eebccac158..12e7f0fd8e 100644 --- a/src/blitter/8bpp_simple.hpp +++ b/src/blitter/8bpp_simple.hpp @@ -17,7 +17,7 @@ class Blitter_8bppSimple final : public Blitter_8bppBase { public: void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; - Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) override; std::string_view GetName() override { return "8bpp-simple"; } }; diff --git a/src/blitter/null.cpp b/src/blitter/null.cpp index 865c225917..dc8b1c0ea2 100644 --- a/src/blitter/null.cpp +++ b/src/blitter/null.cpp @@ -15,10 +15,10 @@ /** Instantiation of the null blitter factory. */ static FBlitter_Null iFBlitter_Null; -Sprite *Blitter_Null::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) +Sprite *Blitter_Null::Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) { Sprite *dest_sprite; - dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite)); + dest_sprite = allocator.Allocate(sizeof(*dest_sprite)); dest_sprite->height = sprite[ZOOM_LVL_MIN].height; dest_sprite->width = sprite[ZOOM_LVL_MIN].width; diff --git a/src/blitter/null.hpp b/src/blitter/null.hpp index 5f5ed81646..a0ecfbe8db 100644 --- a/src/blitter/null.hpp +++ b/src/blitter/null.hpp @@ -18,7 +18,7 @@ public: uint8_t GetScreenDepth() override { return 0; } void Draw(Blitter::BlitterParams *, BlitterMode, ZoomLevel) override {}; void DrawColourMappingRect(void *, int, int, PaletteID) override {}; - Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) override; void *MoveTo(void *, int, int) override { return nullptr; }; void SetPixel(void *, int, int, uint8_t) override {}; void DrawRect(void *, int, int, uint8_t) override {}; diff --git a/src/fontcache/freetypefontcache.cpp b/src/fontcache/freetypefontcache.cpp index 7e83bbf48d..51187047c7 100644 --- a/src/fontcache/freetypefontcache.cpp +++ b/src/fontcache/freetypefontcache.cpp @@ -274,7 +274,8 @@ const Sprite *FreeTypeFontCache::InternalGetGlyph(GlyphID key, bool aa) } GlyphEntry new_glyph; - new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(spritecollection, SimpleSpriteAlloc); + SimpleSpriteAllocator allocator; + new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(spritecollection, allocator); new_glyph.width = slot->advance.x >> 6; this->SetGlyphPtr(key, &new_glyph); diff --git a/src/fontcache/truetypefontcache.cpp b/src/fontcache/truetypefontcache.cpp index c897221d10..df07f802e0 100644 --- a/src/fontcache/truetypefontcache.cpp +++ b/src/fontcache/truetypefontcache.cpp @@ -10,7 +10,6 @@ #include "../stdafx.h" #include "../debug.h" #include "../fontcache.h" -#include "../blitter/factory.hpp" #include "../core/bitmath_func.hpp" #include "../gfx_layout.h" #include "truetypefontcache.h" diff --git a/src/os/macosx/font_osx.cpp b/src/os/macosx/font_osx.cpp index c73a799a69..ab54485929 100644 --- a/src/os/macosx/font_osx.cpp +++ b/src/os/macosx/font_osx.cpp @@ -277,7 +277,8 @@ const Sprite *CoreTextFontCache::InternalGetGlyph(GlyphID key, bool use_aa) } GlyphEntry new_glyph; - new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(spritecollection, SimpleSpriteAlloc); + SimpleSpriteAllocator allocator; + new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(spritecollection, allocator); new_glyph.width = (uint8_t)std::round(CTFontGetAdvancesForGlyphs(this->font.get(), kCTFontOrientationDefault, &glyph, nullptr, 1)); this->SetGlyphPtr(key, &new_glyph); diff --git a/src/os/windows/font_win32.cpp b/src/os/windows/font_win32.cpp index 1f4aa775bb..dbab716f1a 100644 --- a/src/os/windows/font_win32.cpp +++ b/src/os/windows/font_win32.cpp @@ -253,7 +253,8 @@ void Win32FontCache::ClearFontCache() } GlyphEntry new_glyph; - new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(spritecollection, SimpleSpriteAlloc); + SimpleSpriteAllocator allocator; + new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(spritecollection, allocator); new_glyph.width = gm.gmCellIncX; this->SetGlyphPtr(key, &new_glyph); diff --git a/src/spritecache.cpp b/src/spritecache.cpp index ca7fbba6c9..1c688c2c38 100644 --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -423,14 +423,14 @@ static bool ResizeSprites(SpriteLoader::SpriteCollection &sprite, uint8_t sprite * @param num Size of the sprite in the GRF. * @return Sprite data. */ -static void *ReadRecolourSprite(SpriteFile &file, uint num) +static void *ReadRecolourSprite(SpriteFile &file, uint num, SpriteAllocator &allocator) { /* "Normal" recolour sprites are ALWAYS 257 bytes. Then there is a small * number of recolour sprites that are 17 bytes that only exist in DOS * GRFs which are the same as 257 byte recolour sprites, but with the last * 240 bytes zeroed. */ static const uint RECOLOUR_SPRITE_SIZE = 257; - uint8_t *dest = (uint8_t *)AllocSprite(std::max(RECOLOUR_SPRITE_SIZE, num)); + uint8_t *dest = allocator.Allocate(std::max(RECOLOUR_SPRITE_SIZE, num)); if (file.NeedsPaletteRemap()) { uint8_t *dest_tmp = new uint8_t[std::max(RECOLOUR_SPRITE_SIZE, num)]; @@ -460,7 +460,7 @@ static void *ReadRecolourSprite(SpriteFile &file, uint num) * @param encoder Sprite encoder to use. * @return Read sprite data. */ -static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_type, AllocatorProc *allocator, SpriteEncoder *encoder) +static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_type, SpriteAllocator &allocator, SpriteEncoder *encoder) { /* Use current blitter if no other sprite encoder is given. */ if (encoder == nullptr) encoder = BlitterFactory::GetCurrentBlitter(); @@ -490,7 +490,7 @@ static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_ty if (sprite_avail == 0) { if (sprite_type == SpriteType::MapGen) return nullptr; if (id == SPR_IMG_QUERY) UserError("Okay... something went horribly wrong. I couldn't load the fallback sprite. What should I do?"); - return (void*)GetRawSprite(SPR_IMG_QUERY, SpriteType::Normal, allocator, encoder); + return (void*)GetRawSprite(SPR_IMG_QUERY, SpriteType::Normal, &allocator, encoder); } if (sprite_type == SpriteType::MapGen) { @@ -505,7 +505,7 @@ static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_ty * (so type = 0xFF basically). */ uint num = sprite[ZOOM_LVL_MIN].width * sprite[ZOOM_LVL_MIN].height; - Sprite *s = (Sprite *)allocator(sizeof(*s) + num); + Sprite *s = allocator.Allocate(sizeof(*s) + num); s->width = sprite[ZOOM_LVL_MIN].width; s->height = sprite[ZOOM_LVL_MIN].height; s->x_offs = sprite[ZOOM_LVL_MIN].x_offs; @@ -523,7 +523,7 @@ static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_ty if (!ResizeSprites(sprite, sprite_avail, encoder)) { if (id == SPR_IMG_QUERY) UserError("Okay... something went horribly wrong. I couldn't resize the fallback sprite. What should I do?"); - return (void*)GetRawSprite(SPR_IMG_QUERY, SpriteType::Normal, allocator, encoder); + return (void*)GetRawSprite(SPR_IMG_QUERY, SpriteType::Normal, &allocator, encoder); } if (sprite[ZOOM_LVL_MIN].type == SpriteType::Font && _font_zoom != ZOOM_LVL_MIN) { @@ -637,7 +637,8 @@ bool LoadNextSprite(int load_index, SpriteFile &file, uint file_sprite_id) return false; } type = SpriteType::Recolour; - data = ReadRecolourSprite(file, num); + CacheSpriteAllocator allocator; + data = ReadRecolourSprite(file, num, allocator); } else if (file.GetContainerVersion() >= 2 && grf_type == 0xFD) { if (num != 4) { /* Invalid sprite section include, ignore. */ @@ -848,7 +849,7 @@ static void DeleteEntryFromSpriteCache() DeleteEntryFromSpriteCache(best); } -void *AllocSprite(size_t mem_req) +void *CacheSpriteAllocator::AllocatePtr(size_t mem_req) { mem_req += sizeof(MemBlock); @@ -888,7 +889,7 @@ void *AllocSprite(size_t mem_req) /** * Sprite allocator simply using malloc. */ -void *SimpleSpriteAlloc(size_t size) +void *SimpleSpriteAllocator::AllocatePtr(size_t size) { return MallocT(size); } @@ -902,7 +903,7 @@ void *SimpleSpriteAlloc(size_t size) * @return fallback sprite * @note this function will do UserError() in the case the fallback sprite isn't available */ -static void *HandleInvalidSpriteRequest(SpriteID sprite, SpriteType requested, SpriteCache *sc, AllocatorProc *allocator) +static void *HandleInvalidSpriteRequest(SpriteID sprite, SpriteType requested, SpriteCache *sc, SpriteAllocator *allocator) { static const char * const sprite_types[] = { "normal", // SpriteType::Normal @@ -947,7 +948,7 @@ static void *HandleInvalidSpriteRequest(SpriteID sprite, SpriteType requested, S * @param encoder Sprite encoder to use. Set to nullptr to use the currently active blitter. * @return Sprite raw data */ -void *GetRawSprite(SpriteID sprite, SpriteType type, AllocatorProc *allocator, SpriteEncoder *encoder) +void *GetRawSprite(SpriteID sprite, SpriteType type, SpriteAllocator *allocator, SpriteEncoder *encoder) { assert(type != SpriteType::MapGen || IsMapgenSpriteID(sprite)); assert(type < SpriteType::Invalid); @@ -965,17 +966,18 @@ void *GetRawSprite(SpriteID sprite, SpriteType type, AllocatorProc *allocator, S if (allocator == nullptr && encoder == nullptr) { /* Load sprite into/from spritecache */ + CacheSpriteAllocator cache_allocator; /* Update LRU */ sc->lru = ++_sprite_lru_counter; /* Load the sprite, if it is not loaded, yet */ - if (sc->ptr == nullptr) sc->ptr = ReadSprite(sc, sprite, type, AllocSprite, nullptr); + if (sc->ptr == nullptr) sc->ptr = ReadSprite(sc, sprite, type, cache_allocator, nullptr); return sc->ptr; } else { /* Do not use the spritecache, but a different allocator. */ - return ReadSprite(sc, sprite, type, allocator, encoder); + return ReadSprite(sc, sprite, type, *allocator, encoder); } } diff --git a/src/spritecache.h b/src/spritecache.h index 78447d700d..c2be62bdec 100644 --- a/src/spritecache.h +++ b/src/spritecache.h @@ -31,10 +31,13 @@ enum SpriteCacheCtrlFlags { extern uint _sprite_cache_size; -typedef void *AllocatorProc(size_t size); +/** SpriteAllocate that uses malloc to allocate memory. */ +class SimpleSpriteAllocator : public SpriteAllocator { +protected: + void *AllocatePtr(size_t size) override; +}; -void *SimpleSpriteAlloc(size_t size); -void *GetRawSprite(SpriteID sprite, SpriteType type, AllocatorProc *allocator = nullptr, SpriteEncoder *encoder = nullptr); +void *GetRawSprite(SpriteID sprite, SpriteType type, SpriteAllocator *allocator = nullptr, SpriteEncoder *encoder = nullptr); bool SpriteExists(SpriteID sprite); SpriteType GetSpriteType(SpriteID sprite); diff --git a/src/spritecache_internal.h b/src/spritecache_internal.h index 5c49c54aed..f4f328eb4d 100644 --- a/src/spritecache_internal.h +++ b/src/spritecache_internal.h @@ -31,12 +31,17 @@ struct SpriteCache { uint8_t control_flags; ///< Control flags, see SpriteCacheCtrlFlags }; +/** SpriteAllocator that allocates memory from the sprite cache. */ +class CacheSpriteAllocator : public SpriteAllocator { +protected: + void *AllocatePtr(size_t size) override; +}; + inline bool IsMapgenSpriteID(SpriteID sprite) { return IsInsideMM(sprite, SPR_MAPGEN_BEGIN, SPR_MAPGEN_END); } -void *AllocSprite(size_t mem_req); SpriteCache *AllocateSpriteCache(uint index); #endif /* SPRITECACHE_INTERNAL_H */ diff --git a/src/spriteloader/spriteloader.hpp b/src/spriteloader/spriteloader.hpp index afb7baa48c..88db68671f 100644 --- a/src/spriteloader/spriteloader.hpp +++ b/src/spriteloader/spriteloader.hpp @@ -16,7 +16,6 @@ #include "sprite_file_type.hpp" struct Sprite; -typedef void *AllocatorProc(size_t size); /** The different colour components a sprite can have. */ enum SpriteColourComponent { @@ -85,6 +84,32 @@ public: virtual ~SpriteLoader() = default; }; +/** Interface for something that can allocate memory for a sprite. */ +class SpriteAllocator { +public: + virtual ~SpriteAllocator() = default; + + /** + * Allocate memory for a sprite. + * @tparam T Type to return memory as. + * @param size Size of memory to allocate in bytes. + * @return Pointer to allocated memory. + */ + template + T *Allocate(size_t size) + { + return static_cast(this->AllocatePtr(size)); + } + +protected: + /** + * Allocate memory for a sprite. + * @param size Size of memory to allocate. + * @return Pointer to allocated memory. + */ + virtual void *AllocatePtr(size_t size) = 0; +}; + /** Interface for something that can encode a sprite. */ class SpriteEncoder { public: @@ -99,7 +124,7 @@ public: /** * Convert a sprite from the loader to our own format. */ - virtual Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) = 0; + virtual Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) = 0; /** * Get the value which the height and width on a sprite have to be aligned by. diff --git a/src/tests/mock_spritecache.cpp b/src/tests/mock_spritecache.cpp index 5a5910cfdd..38bb6804cd 100644 --- a/src/tests/mock_spritecache.cpp +++ b/src/tests/mock_spritecache.cpp @@ -17,7 +17,8 @@ static bool MockLoadNextSprite(int load_index) { - static Sprite *sprite = (Sprite *)AllocSprite(sizeof(*sprite)); + SimpleSpriteAllocator allocator; + static Sprite *sprite = allocator.Allocate(sizeof(*sprite)); bool is_mapgen = IsMapgenSpriteID(load_index); diff --git a/src/video/opengl.cpp b/src/video/opengl.cpp index 13920cb543..a7b43da317 100644 --- a/src/video/opengl.cpp +++ b/src/video/opengl.cpp @@ -1105,7 +1105,8 @@ void OpenGLBackend::PopulateCursorCache() this->cursor_sprites.emplace_back(sc); if (!this->cursor_cache.Contains(sc.image.sprite)) { - Sprite *old = this->cursor_cache.Insert(sc.image.sprite, (Sprite *)GetRawSprite(sc.image.sprite, SpriteType::Normal, &SimpleSpriteAlloc, this)); + SimpleSpriteAllocator allocator; + Sprite *old = this->cursor_cache.Insert(sc.image.sprite, static_cast(GetRawSprite(sc.image.sprite, SpriteType::Normal, &allocator, this))); if (old != nullptr) { OpenGLSprite *gl_sprite = (OpenGLSprite *)old->data; gl_sprite->~OpenGLSprite(); @@ -1257,10 +1258,10 @@ void OpenGLBackend::ReleaseAnimBuffer(const Rect &update_rect) } } -/* virtual */ Sprite *OpenGLBackend::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) +/* virtual */ Sprite *OpenGLBackend::Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) { /* Allocate and construct sprite data. */ - Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + sizeof(OpenGLSprite)); + Sprite *dest_sprite = allocator.Allocate(sizeof(*dest_sprite) + sizeof(OpenGLSprite)); OpenGLSprite *gl_sprite = (OpenGLSprite *)dest_sprite->data; new (gl_sprite) OpenGLSprite(sprite[ZOOM_LVL_MIN].width, sprite[ZOOM_LVL_MIN].height, sprite[ZOOM_LVL_MIN].type == SpriteType::Font ? 1 : ZOOM_LVL_END, sprite[ZOOM_LVL_MIN].colours); diff --git a/src/video/opengl.h b/src/video/opengl.h index 0fd706ffb2..14633c44cd 100644 --- a/src/video/opengl.h +++ b/src/video/opengl.h @@ -107,7 +107,7 @@ public: bool Is32BppSupported() override { return true; } uint GetSpriteAlignment() override { return 1u << (ZOOM_LVL_END - 1); } - Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) override; }; From 48539992e8b0195f75878c18933f5339cd1eb6b2 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 12 May 2024 15:03:03 +0100 Subject: [PATCH 595/695] Codechange: Use std::unordered_map for storing TrueTypeFontCache's GlyphEntry. --- src/fontcache/freetypefontcache.cpp | 12 ++++---- src/fontcache/truetypefontcache.cpp | 45 +++++++---------------------- src/fontcache/truetypefontcache.h | 23 ++++----------- src/os/macosx/font_osx.cpp | 13 +++++---- src/os/windows/font_win32.cpp | 10 +++---- src/spritecache.cpp | 6 ++++ src/spritecache.h | 8 +++++ 7 files changed, 48 insertions(+), 69 deletions(-) diff --git a/src/fontcache/freetypefontcache.cpp b/src/fontcache/freetypefontcache.cpp index 51187047c7..57a07ffb13 100644 --- a/src/fontcache/freetypefontcache.cpp +++ b/src/fontcache/freetypefontcache.cpp @@ -273,14 +273,14 @@ const Sprite *FreeTypeFontCache::InternalGetGlyph(GlyphID key, bool aa) } } + UniquePtrSpriteAllocator allocator; + BlitterFactory::GetCurrentBlitter()->Encode(spritecollection, allocator); + GlyphEntry new_glyph; - SimpleSpriteAllocator allocator; - new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(spritecollection, allocator); - new_glyph.width = slot->advance.x >> 6; + new_glyph.data = std::move(allocator.data); + new_glyph.width = slot->advance.x >> 6; - this->SetGlyphPtr(key, &new_glyph); - - return new_glyph.sprite; + return this->SetGlyphPtr(key, std::move(new_glyph)).GetSprite(); } diff --git a/src/fontcache/truetypefontcache.cpp b/src/fontcache/truetypefontcache.cpp index df07f802e0..890464e039 100644 --- a/src/fontcache/truetypefontcache.cpp +++ b/src/fontcache/truetypefontcache.cpp @@ -21,7 +21,7 @@ * @param fs The font size that is going to be cached. * @param pixels The number of pixels this font should be high. */ -TrueTypeFontCache::TrueTypeFontCache(FontSize fs, int pixels) : FontCache(fs), req_size(pixels), glyph_to_sprite(nullptr) +TrueTypeFontCache::TrueTypeFontCache(FontSize fs, int pixels) : FontCache(fs), req_size(pixels) { } @@ -39,47 +39,22 @@ TrueTypeFontCache::~TrueTypeFontCache() */ void TrueTypeFontCache::ClearFontCache() { - if (this->glyph_to_sprite == nullptr) return; - - for (int i = 0; i < 256; i++) { - if (this->glyph_to_sprite[i] == nullptr) continue; - - for (int j = 0; j < 256; j++) { - free(this->glyph_to_sprite[i][j].sprite); - } - - free(this->glyph_to_sprite[i]); - } - - free(this->glyph_to_sprite); - this->glyph_to_sprite = nullptr; - + this->glyph_to_sprite_map.clear(); Layouter::ResetFontCache(this->fs); } TrueTypeFontCache::GlyphEntry *TrueTypeFontCache::GetGlyphPtr(GlyphID key) { - if (this->glyph_to_sprite == nullptr) return nullptr; - if (this->glyph_to_sprite[GB(key, 8, 8)] == nullptr) return nullptr; - return &this->glyph_to_sprite[GB(key, 8, 8)][GB(key, 0, 8)]; + auto found = this->glyph_to_sprite_map.find(key); + if (found == std::end(this->glyph_to_sprite_map)) return nullptr; + return &found->second; } -void TrueTypeFontCache::SetGlyphPtr(GlyphID key, const GlyphEntry *glyph) +TrueTypeFontCache::GlyphEntry &TrueTypeFontCache::SetGlyphPtr(GlyphID key, GlyphEntry &&glyph) { - if (this->glyph_to_sprite == nullptr) { - Debug(fontcache, 3, "Allocating root glyph cache for size {}", this->fs); - this->glyph_to_sprite = CallocT(256); - } - - if (this->glyph_to_sprite[GB(key, 8, 8)] == nullptr) { - Debug(fontcache, 3, "Allocating glyph cache for range 0x{:02X}00, size {}", GB(key, 8, 8), this->fs); - this->glyph_to_sprite[GB(key, 8, 8)] = CallocT(256); - } - - Debug(fontcache, 4, "Set glyph for unicode character 0x{:04X}, size {}", key, this->fs); - this->glyph_to_sprite[GB(key, 8, 8)][GB(key, 0, 8)].sprite = glyph->sprite; - this->glyph_to_sprite[GB(key, 8, 8)][GB(key, 0, 8)].width = glyph->width; + this->glyph_to_sprite_map[key] = std::move(glyph); + return this->glyph_to_sprite_map[key]; } bool TrueTypeFontCache::GetDrawGlyphShadow() @@ -92,7 +67,7 @@ uint TrueTypeFontCache::GetGlyphWidth(GlyphID key) if ((key & SPRITE_GLYPH) != 0) return this->parent->GetGlyphWidth(key); GlyphEntry *glyph = this->GetGlyphPtr(key); - if (glyph == nullptr || glyph->sprite == nullptr) { + if (glyph == nullptr || glyph->data == nullptr) { this->GetGlyph(key); glyph = this->GetGlyphPtr(key); } @@ -106,7 +81,7 @@ const Sprite *TrueTypeFontCache::GetGlyph(GlyphID key) /* Check for the glyph in our cache */ GlyphEntry *glyph = this->GetGlyphPtr(key); - if (glyph != nullptr && glyph->sprite != nullptr) return glyph->sprite; + if (glyph != nullptr && glyph->data != nullptr) return glyph->GetSprite(); return this->InternalGetGlyph(key, GetFontAAState()); } diff --git a/src/fontcache/truetypefontcache.h b/src/fontcache/truetypefontcache.h index 6661b72ee3..3eb275df6e 100644 --- a/src/fontcache/truetypefontcache.h +++ b/src/fontcache/truetypefontcache.h @@ -29,27 +29,16 @@ protected: /** Container for information about a glyph. */ struct GlyphEntry { - Sprite *sprite; ///< The loaded sprite. - uint8_t width; ///< The width of the glyph. + std::unique_ptr data; ///< The loaded sprite. + uint8_t width = 0; ///< The width of the glyph. + + Sprite *GetSprite() { return reinterpret_cast(data.get()); } }; - /** - * The glyph cache. This is structured to reduce memory consumption. - * 1) There is a 'segment' table for each font size. - * 2) Each segment table is a discrete block of characters. - * 3) Each block contains 256 (aligned) characters sequential characters. - * - * The cache is accessed in the following way: - * For character 0x0041 ('A'): glyph_to_sprite[0x00][0x41] - * For character 0x20AC (Euro): glyph_to_sprite[0x20][0xAC] - * - * Currently only 256 segments are allocated, "limiting" us to 65536 characters. - * This can be simply changed in the two functions Get & SetGlyphPtr. - */ - GlyphEntry **glyph_to_sprite; + std::unordered_map glyph_to_sprite_map{}; GlyphEntry *GetGlyphPtr(GlyphID key); - void SetGlyphPtr(GlyphID key, const GlyphEntry *glyph); + GlyphEntry &SetGlyphPtr(GlyphID key, GlyphEntry &&glyph); virtual const Sprite *InternalGetGlyph(GlyphID key, bool aa) = 0; diff --git a/src/os/macosx/font_osx.cpp b/src/os/macosx/font_osx.cpp index ab54485929..db4d4c1f83 100644 --- a/src/os/macosx/font_osx.cpp +++ b/src/os/macosx/font_osx.cpp @@ -276,13 +276,14 @@ const Sprite *CoreTextFontCache::InternalGetGlyph(GlyphID key, bool use_aa) } } - GlyphEntry new_glyph; - SimpleSpriteAllocator allocator; - new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(spritecollection, allocator); - new_glyph.width = (uint8_t)std::round(CTFontGetAdvancesForGlyphs(this->font.get(), kCTFontOrientationDefault, &glyph, nullptr, 1)); - this->SetGlyphPtr(key, &new_glyph); + UniquePtrSpriteAllocator allocator; + BlitterFactory::GetCurrentBlitter()->Encode(spritecollection, allocator); - return new_glyph.sprite; + GlyphEntry new_glyph; + new_glyph.data = std::move(allocator.data); + new_glyph.width = (uint8_t)std::round(CTFontGetAdvancesForGlyphs(this->font.get(), kCTFontOrientationDefault, &glyph, nullptr, 1)); + + return this->SetGlyphPtr(key, std::move(new_glyph)).GetSprite(); } static CTFontDescriptorRef LoadFontFromFile(const std::string &font_name) diff --git a/src/os/windows/font_win32.cpp b/src/os/windows/font_win32.cpp index dbab716f1a..b2eac91314 100644 --- a/src/os/windows/font_win32.cpp +++ b/src/os/windows/font_win32.cpp @@ -252,14 +252,14 @@ void Win32FontCache::ClearFontCache() } } + UniquePtrSpriteAllocator allocator; + BlitterFactory::GetCurrentBlitter()->Encode(spritecollection, allocator); + GlyphEntry new_glyph; - SimpleSpriteAllocator allocator; - new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(spritecollection, allocator); + new_glyph.data = std::move(allocator.data); new_glyph.width = gm.gmCellIncX; - this->SetGlyphPtr(key, &new_glyph); - - return new_glyph.sprite; + return this->SetGlyphPtr(key, std::move(new_glyph)).GetSprite(); } /* virtual */ GlyphID Win32FontCache::MapCharToGlyph(char32_t key, bool allow_fallback) diff --git a/src/spritecache.cpp b/src/spritecache.cpp index 1c688c2c38..a1f99de871 100644 --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -894,6 +894,12 @@ void *SimpleSpriteAllocator::AllocatePtr(size_t size) return MallocT(size); } +void *UniquePtrSpriteAllocator::AllocatePtr(size_t size) +{ + this->data = std::make_unique(size); + return this->data.get(); +} + /** * Handles the case when a sprite of different type is requested than is present in the SpriteCache. * For SpriteType::Font sprites, it is normal. In other cases, default sprite is loaded instead. diff --git a/src/spritecache.h b/src/spritecache.h index c2be62bdec..7aa01765d4 100644 --- a/src/spritecache.h +++ b/src/spritecache.h @@ -37,6 +37,14 @@ protected: void *AllocatePtr(size_t size) override; }; +/** SpriteAllocator that allocates memory via a unique_ptr array. */ +class UniquePtrSpriteAllocator : public SpriteAllocator { +public: + std::unique_ptr data; +protected: + void *AllocatePtr(size_t size) override; +}; + void *GetRawSprite(SpriteID sprite, SpriteType type, SpriteAllocator *allocator = nullptr, SpriteEncoder *encoder = nullptr); bool SpriteExists(SpriteID sprite); From 0e75dfd49fc98fc8366dc0f05ccb31dfc523127f Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 12 May 2024 14:04:35 +0200 Subject: [PATCH 596/695] Codechange: migrate aystar to use YAPF's nodelist infrastructure --- src/landscape.cpp | 49 +++------ src/pathfinder/aystar.cpp | 179 +++++-------------------------- src/pathfinder/aystar.h | 63 ++++------- src/pathfinder/pathfinder_type.h | 1 - src/settings_table.cpp | 1 + 5 files changed, 64 insertions(+), 229 deletions(-) diff --git a/src/landscape.cpp b/src/landscape.cpp index 9abadda591..9065844904 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -1201,48 +1201,48 @@ struct River_UserData { }; /* AyStar callback for checking whether we reached our destination. */ -static int32_t River_EndNodeCheck(const AyStar *aystar, const OpenListNode *current) +static int32_t River_EndNodeCheck(const AyStar *aystar, const PathNode *current) { - return current->path.node.tile == *(TileIndex*)aystar->user_target ? AYSTAR_FOUND_END_NODE : AYSTAR_DONE; + return current->GetTile() == *(TileIndex*)aystar->user_target ? AYSTAR_FOUND_END_NODE : AYSTAR_DONE; } /* AyStar callback for getting the cost of the current node. */ -static int32_t River_CalculateG(AyStar *, AyStarNode *, OpenListNode *) +static int32_t River_CalculateG(AyStar *, AyStarNode *, PathNode *) { return 1 + RandomRange(_settings_game.game_creation.river_route_random); } /* AyStar callback for getting the estimated cost to the destination. */ -static int32_t River_CalculateH(AyStar *aystar, AyStarNode *current, OpenListNode *) +static int32_t River_CalculateH(AyStar *aystar, AyStarNode *current, PathNode *) { - return DistanceManhattan(*(TileIndex*)aystar->user_target, current->tile); + return DistanceManhattan(*(TileIndex*)aystar->user_target, current->m_tile); } /* AyStar callback for getting the neighbouring nodes of the given node. */ -static void River_GetNeighbours(AyStar *aystar, OpenListNode *current) +static void River_GetNeighbours(AyStar *aystar, PathNode *current) { - TileIndex tile = current->path.node.tile; + TileIndex tile = current->GetTile(); aystar->num_neighbours = 0; for (DiagDirection d = DIAGDIR_BEGIN; d < DIAGDIR_END; d++) { TileIndex t2 = tile + TileOffsByDiagDir(d); if (IsValidTile(t2) && FlowsDown(tile, t2)) { - aystar->neighbours[aystar->num_neighbours].tile = t2; - aystar->neighbours[aystar->num_neighbours].direction = INVALID_TRACKDIR; + aystar->neighbours[aystar->num_neighbours].m_tile = t2; + aystar->neighbours[aystar->num_neighbours].m_td = INVALID_TRACKDIR; aystar->num_neighbours++; } } } /* AyStar callback when an route has been found. */ -static void River_FoundEndNode(AyStar *aystar, OpenListNode *current) +static void River_FoundEndNode(AyStar *aystar, PathNode *current) { River_UserData *data = (River_UserData *)aystar->user_data; /* First, build the river without worrying about its width. */ uint cur_pos = 0; - for (PathNode *path = ¤t->path; path != nullptr; path = path->parent, cur_pos++) { - TileIndex tile = path->node.tile; + for (PathNode *path = current->m_parent; path != nullptr; path = path->m_parent, cur_pos++) { + TileIndex tile = path->GetTile(); if (!IsWaterTile(tile)) { MakeRiverAndModifyDesertZoneAround(tile); } @@ -1257,30 +1257,18 @@ static void River_FoundEndNode(AyStar *aystar, OpenListNode *current) uint radius; cur_pos = 0; - for (PathNode *path = ¤t->path; path != nullptr; path = path->parent, cur_pos++) { - TileIndex tile = path->node.tile; + for (PathNode *path = current->m_parent; path != nullptr; path = path->m_parent, cur_pos++) { + TileIndex tile = path->GetTile(); /* Check if we should widen river depending on how far we are away from the source. */ current_river_length = DistanceManhattan(data->spring, tile); radius = std::min(3u, (current_river_length / (long_river_length / 3u)) + 1u); - if (radius > 1) CircularTileSearch(&tile, radius, RiverMakeWider, (void *)&path->node.tile); + if (radius > 1) CircularTileSearch(&tile, radius, RiverMakeWider, (void *)&path->m_key.m_tile); } } } -static const uint RIVER_HASH_SIZE = 8; ///< The number of bits the hash for river finding should have. - -/** - * Simple hash function for river tiles to be used by AyStar. - * @param tile The tile to hash. - * @return The hash for the tile. - */ -static uint River_Hash(TileIndex tile, Trackdir) -{ - return GB(TileHash(TileX(tile), TileY(tile)), 0, RIVER_HASH_SIZE); -} - /** * Actually build the river between the begin and end tiles using AyStar. * @param begin The begin of the river. @@ -1301,14 +1289,11 @@ static void BuildRiver(TileIndex begin, TileIndex end, TileIndex spring, bool ma finder.user_target = &end; finder.user_data = &user_data; - finder.Init(River_Hash, 1 << RIVER_HASH_SIZE); - AyStarNode start; - start.tile = begin; - start.direction = INVALID_TRACKDIR; + start.m_tile = begin; + start.m_td = INVALID_TRACKDIR; finder.AddStartNode(&start, 0); finder.Main(); - finder.Free(); } /** diff --git a/src/pathfinder/aystar.cpp b/src/pathfinder/aystar.cpp index 5246731300..711f7c0467 100644 --- a/src/pathfinder/aystar.cpp +++ b/src/pathfinder/aystar.cpp @@ -13,69 +13,11 @@ * http://en.wikipedia.org/wiki/A-star_search_algorithm. */ -/* - * Friendly reminder: - * Call (AyStar).free() when you are done with Aystar. It reserves a lot of memory - * And when not free'd, it can cause system-crashes. - * Also remember that when you stop an algorithm before it is finished, your - * should call clear() yourself! - */ - #include "../../stdafx.h" -#include "../../core/alloc_func.hpp" #include "aystar.h" #include "../../safeguards.h" -/** - * This looks in the hash whether a node exists in the closed list. - * @param node Node to search. - * @return The #PathNode if it is available, else \c nullptr - */ -PathNode *AyStar::ClosedListIsInList(const AyStarNode *node) -{ - return (PathNode*)this->closedlist_hash.Get(node->tile, node->direction); -} - -/** - * This adds a node to the closed list. - * It makes a copy of the data. - * @param node Node to add to the closed list. - */ -void AyStar::ClosedListAdd(const PathNode *node) -{ - /* Add a node to the ClosedList */ - PathNode *new_node = MallocT(1); - *new_node = *node; - this->closedlist_hash.Set(node->node.tile, node->node.direction, new_node); -} - -/** - * Check whether a node is in the open list. - * @param node Node to search. - * @return If the node is available, it is returned, else \c nullptr is returned. - */ -OpenListNode *AyStar::OpenListIsInList(const AyStarNode *node) -{ - return (OpenListNode*)this->openlist_hash.Get(node->tile, node->direction); -} - -/** - * Gets the best node from the open list. - * It deletes the returned node from the open list. - * @returns the best node available, or \c nullptr of none is found. - */ -OpenListNode *AyStar::OpenListPop() -{ - /* Return the item the Queue returns.. the best next OpenList item. */ - OpenListNode *res = (OpenListNode*)this->openlist_queue.Pop(); - if (res != nullptr) { - this->openlist_hash.DeleteValue(res->path.node.tile, res->path.node.direction); - } - - return res; -} - /** * Adds a node to the open list. * It makes a copy of node, and puts the pointer of parent in the struct. @@ -83,61 +25,55 @@ OpenListNode *AyStar::OpenListPop() void AyStar::OpenListAdd(PathNode *parent, const AyStarNode *node, int f, int g) { /* Add a new Node to the OpenList */ - OpenListNode *new_node = MallocT(1); - new_node->g = g; - new_node->path.parent = parent; - new_node->path.node = *node; - this->openlist_hash.Set(node->tile, node->direction, new_node); - - /* Add it to the queue */ - this->openlist_queue.Push(new_node, f); + PathNode *new_node = this->nodes.CreateNewNode(); + new_node->Set(parent, node->m_tile, node->m_td, true); + new_node->m_estimate = f; + new_node->m_cost = g; + this->nodes.InsertOpenNode(*new_node); } /** * Checks one tile and calculate its f-value */ -void AyStar::CheckTile(AyStarNode *current, OpenListNode *parent) +void AyStar::CheckTile(AyStarNode *current, PathNode *parent) { - int new_f, new_g, new_h; - PathNode *closedlist_parent; - OpenListNode *check; - /* Check the new node against the ClosedList */ - if (this->ClosedListIsInList(current) != nullptr) return; + if (this->nodes.FindClosedNode(*current) != nullptr) return; /* Calculate the G-value for this node */ - new_g = this->CalculateG(this, current, parent); + int new_g = this->CalculateG(this, current, parent); /* If the value was INVALID_NODE, we don't do anything with this node */ if (new_g == AYSTAR_INVALID_NODE) return; /* There should not be given any other error-code.. */ assert(new_g >= 0); /* Add the parent g-value to the new g-value */ - new_g += parent->g; - if (this->max_path_cost != 0 && (uint)new_g > this->max_path_cost) return; + new_g += parent->m_cost; + if (this->max_path_cost != 0 && new_g > this->max_path_cost) return; /* Calculate the h-value */ - new_h = this->CalculateH(this, current, parent); + int new_h = this->CalculateH(this, current, parent); /* There should not be given any error-code.. */ assert(new_h >= 0); /* The f-value if g + h */ - new_f = new_g + new_h; + int new_f = new_g + new_h; /* Get the pointer to the parent in the ClosedList (the current one is to a copy of the one in the OpenList) */ - closedlist_parent = this->ClosedListIsInList(&parent->path.node); + PathNode *closedlist_parent = this->nodes.FindClosedNode(parent->m_key); /* Check if this item is already in the OpenList */ - check = this->OpenListIsInList(current); + PathNode *check = this->nodes.FindOpenNode(*current); if (check != nullptr) { /* Yes, check if this g value is lower.. */ - if (new_g > check->g) return; - this->openlist_queue.Delete(check, 0); + if (new_g > check->m_cost) return; + this->nodes.PopOpenNode(check->m_key); /* It is lower, so change it to this item */ - check->g = new_g; - check->path.parent = closedlist_parent; + check->m_estimate = new_f; + check->m_cost = new_g; + check->m_parent = closedlist_parent; /* Re-add it in the openlist_queue. */ - this->openlist_queue.Push(check, new_f); + this->nodes.InsertOpenNode(*check); } else { /* A new node, add it to the OpenList */ this->OpenListAdd(closedlist_parent, current, new_f, new_g); @@ -155,38 +91,32 @@ void AyStar::CheckTile(AyStarNode *current, OpenListNode *parent) */ int AyStar::Loop() { - int i; - /* Get the best node from OpenList */ - OpenListNode *current = this->OpenListPop(); + PathNode *current = this->nodes.PopBestOpenNode(); /* If empty, drop an error */ if (current == nullptr) return AYSTAR_EMPTY_OPENLIST; /* Check for end node and if found, return that code */ - if (this->EndNodeCheck(this, current) == AYSTAR_FOUND_END_NODE && (¤t->path)->parent != nullptr) { + if (this->EndNodeCheck(this, current) == AYSTAR_FOUND_END_NODE && current->m_parent != nullptr) { if (this->FoundEndNode != nullptr) { this->FoundEndNode(this, current); } - free(current); return AYSTAR_FOUND_END_NODE; } /* Add the node to the ClosedList */ - this->ClosedListAdd(¤t->path); + this->nodes.InsertClosedNode(*current); /* Load the neighbours */ this->GetNeighbours(this, current); /* Go through all neighbours */ - for (i = 0; i < this->num_neighbours; i++) { + for (int i = 0; i < this->num_neighbours; i++) { /* Check and add them to the OpenList if needed */ this->CheckTile(&this->neighbours[i], current); } - /* Free the node */ - free(current); - - if (this->max_search_nodes != 0 && this->closedlist_hash.GetSize() >= this->max_search_nodes) { + if (this->max_search_nodes != 0 && this->nodes.ClosedCount() >= this->max_search_nodes) { /* We've expanded enough nodes */ return AYSTAR_LIMIT_REACHED; } else { @@ -195,39 +125,6 @@ int AyStar::Loop() } } -/** - * This function frees the memory it allocated - */ -void AyStar::Free() -{ - this->openlist_queue.Free(false); - /* 2nd argument above is false, below is true, to free the values only - * once */ - this->openlist_hash.Delete(true); - this->closedlist_hash.Delete(true); -#ifdef AYSTAR_DEBUG - Debug(misc, 0, "[AyStar] Memory free'd"); -#endif -} - -/** - * This function make the memory go back to zero. - * This function should be called when you are using the same instance again. - */ -void AyStar::Clear() -{ - /* Clean the Queue, but not the elements within. That will be done by - * the hash. */ - this->openlist_queue.Clear(false); - /* Clean the hashes */ - this->openlist_hash.Clear(true); - this->closedlist_hash.Clear(true); - -#ifdef AYSTAR_DEBUG - Debug(misc, 0, "[AyStar] Cleared AyStar"); -#endif -} - /** * This is the function you call to run AyStar. * @return Possible values: @@ -251,10 +148,6 @@ int AyStar::Main() default: break; } #endif - if (r != AYSTAR_STILL_BUSY) { - /* We're done, clean up */ - this->Clear(); - } switch (r) { case AYSTAR_FOUND_END_NODE: return AYSTAR_FOUND_END_NODE; @@ -272,7 +165,7 @@ int AyStar::Main() * @param start_node Node to start with. * @param g the cost for starting with this node. */ -void AyStar::AddStartNode(AyStarNode *start_node, uint g) +void AyStar::AddStartNode(AyStarNode *start_node, int g) { #ifdef AYSTAR_DEBUG Debug(misc, 0, "[AyStar] Starting A* Algorithm from node ({}, {}, {})\n", @@ -280,23 +173,3 @@ void AyStar::AddStartNode(AyStarNode *start_node, uint g) #endif this->OpenListAdd(nullptr, start_node, 0, g); } - -/** - * Initialize an #AyStar. You should fill all appropriate fields before - * calling #Init (see the declaration of #AyStar for which fields are internal). - */ -void AyStar::Init(Hash_HashProc hash, uint num_buckets) -{ - /* Allocated the Hash for the OpenList and ClosedList */ - this->openlist_hash.Init(hash, num_buckets); - this->closedlist_hash.Init(hash, num_buckets); - - /* Set up our sorting queue - * BinaryHeap allocates a block of 1024 nodes - * When that one gets full it reserves another one, till this number - * That is why it can stay this high */ - this->openlist_queue.Init(102400); - - /* Set a reasonable default limit */ - this->max_search_nodes = AYSTAR_DEF_MAX_SEARCH_NODES; -} diff --git a/src/pathfinder/aystar.h b/src/pathfinder/aystar.h index c157259a3e..d375a052a5 100644 --- a/src/pathfinder/aystar.h +++ b/src/pathfinder/aystar.h @@ -16,9 +16,14 @@ #ifndef AYSTAR_H #define AYSTAR_H -#include "queue.h" -#include "../../tile_type.h" -#include "../../track_type.h" +#include "../track_func.h" + +#include "../misc/hashtable.hpp" +#include "../misc/binaryheap.hpp" +#include "../misc/dbg_helpers.h" + +#include "yapf/nodelist.hpp" +#include "yapf/yapf_node.hpp" static const int AYSTAR_DEF_MAX_SEARCH_NODES = 10000; ///< Reference limit for #AyStar::max_search_nodes @@ -34,26 +39,9 @@ enum AystarStatus { static const int AYSTAR_INVALID_NODE = -1; ///< Item is not valid (for example, not walkable). -/** Node in the search. */ -struct AyStarNode { - TileIndex tile; - Trackdir direction; -}; +using AyStarNode = CYapfNodeKeyTrackDir; -/** A path of nodes. */ -struct PathNode { - AyStarNode node; - PathNode *parent; ///< The parent of this item. -}; - -/** - * Internal node. - * @note We do not save the h-value, because it is only needed to calculate the f-value. - * h-value should \em always be the distance left to the end-tile. - */ -struct OpenListNode { - int g; - PathNode path; +struct PathNode : CYapfNodeT { }; bool CheckIgnoreFirstTile(const PathNode *node); @@ -74,7 +62,7 @@ struct AyStar; * - #AYSTAR_FOUND_END_NODE : indicates this is the end tile * - #AYSTAR_DONE : indicates this is not the end tile (or direction was wrong) */ -typedef int32_t AyStar_EndNodeCheck(const AyStar *aystar, const OpenListNode *current); +typedef int32_t AyStar_EndNodeCheck(const AyStar *aystar, const PathNode *current); /** * Calculate the G-value for the %AyStar algorithm. @@ -82,27 +70,27 @@ typedef int32_t AyStar_EndNodeCheck(const AyStar *aystar, const OpenListNode *cu * - #AYSTAR_INVALID_NODE : indicates an item is not valid (e.g.: unwalkable) * - Any value >= 0 : the g-value for this tile */ -typedef int32_t AyStar_CalculateG(AyStar *aystar, AyStarNode *current, OpenListNode *parent); +typedef int32_t AyStar_CalculateG(AyStar *aystar, AyStarNode *current, PathNode *parent); /** * Calculate the H-value for the %AyStar algorithm. * Mostly, this must return the distance (Manhattan way) between the current point and the end point. * @return The h-value for this tile (any value >= 0) */ -typedef int32_t AyStar_CalculateH(AyStar *aystar, AyStarNode *current, OpenListNode *parent); +typedef int32_t AyStar_CalculateH(AyStar *aystar, AyStarNode *current, PathNode *parent); /** * This function requests the tiles around the current tile and put them in #neighbours. * #neighbours is never reset, so if you are not using directions, just leave it alone. * @warning Never add more #neighbours than memory allocated for it. */ -typedef void AyStar_GetNeighbours(AyStar *aystar, OpenListNode *current); +typedef void AyStar_GetNeighbours(AyStar *aystar, PathNode *current); /** * If the End Node is found, this function is called. * It can do, for example, calculate the route and put that in an array. */ -typedef void AyStar_FoundEndNode(AyStar *aystar, OpenListNode *current); +typedef void AyStar_FoundEndNode(AyStar *aystar, PathNode *current); /** * %AyStar search algorithm struct. @@ -134,36 +122,25 @@ struct AyStar { void *user_data; uint8_t loops_per_tick; ///< How many loops are there called before Main() gives control back to the caller. 0 = until done. - uint max_path_cost; ///< If the g-value goes over this number, it stops searching, 0 = infinite. - uint max_search_nodes; ///< The maximum number of nodes that will be expanded, 0 = infinite. + int max_path_cost; ///< If the g-value goes over this number, it stops searching, 0 = infinite. + int max_search_nodes = AYSTAR_DEF_MAX_SEARCH_NODES; ///< The maximum number of nodes that will be expanded, 0 = infinite. /* These should be filled with the neighbours of a tile by * GetNeighbours */ AyStarNode neighbours[12]; uint8_t num_neighbours; - void Init(Hash_HashProc hash, uint num_buckets); - /* These will contain the methods for manipulating the AyStar. Only * Main() should be called externally */ - void AddStartNode(AyStarNode *start_node, uint g); + void AddStartNode(AyStarNode *start_node, int g); int Main(); int Loop(); - void Free(); - void Clear(); - void CheckTile(AyStarNode *current, OpenListNode *parent); + void CheckTile(AyStarNode *current, PathNode *parent); protected: - Hash closedlist_hash; ///< The actual closed list. - BinaryHeap openlist_queue; ///< The open queue. - Hash openlist_hash; ///< An extra hash to speed up the process of looking up an element in the open list. + CNodeList_HashTableT nodes; void OpenListAdd(PathNode *parent, const AyStarNode *node, int f, int g); - OpenListNode *OpenListIsInList(const AyStarNode *node); - OpenListNode *OpenListPop(); - - void ClosedListAdd(const PathNode *node); - PathNode *ClosedListIsInList(const AyStarNode *node); }; #endif /* AYSTAR_H */ diff --git a/src/pathfinder/pathfinder_type.h b/src/pathfinder/pathfinder_type.h index aadcdac8d2..93b2561d32 100644 --- a/src/pathfinder/pathfinder_type.h +++ b/src/pathfinder/pathfinder_type.h @@ -11,7 +11,6 @@ #define PATHFINDER_TYPE_H #include "../tile_type.h" -#include "aystar.h" /** Length (penalty) of one tile with YAPF */ static const int YAPF_TILE_LENGTH = 100; diff --git a/src/settings_table.cpp b/src/settings_table.cpp index 3ca66dd9ee..0fd874a38c 100644 --- a/src/settings_table.cpp +++ b/src/settings_table.cpp @@ -17,6 +17,7 @@ #include "network/network_func.h" #include "network/core/config.h" #include "pathfinder/pathfinder_type.h" +#include "pathfinder/aystar.h" #include "linkgraph/linkgraphschedule.h" #include "genworld.h" #include "train.h" From 2864f3b3ebaa9e6446c519f4f8f101afb791b3cd Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 12 May 2024 14:05:49 +0200 Subject: [PATCH 597/695] Cleanup: remove C-style hash, binary heap and priority queue --- src/pathfinder/CMakeLists.txt | 2 - src/pathfinder/queue.cpp | 487 ---------------------------------- src/pathfinder/queue.h | 112 -------- 3 files changed, 601 deletions(-) delete mode 100644 src/pathfinder/queue.cpp delete mode 100644 src/pathfinder/queue.h diff --git a/src/pathfinder/CMakeLists.txt b/src/pathfinder/CMakeLists.txt index f34463cbf6..dd6d63bb4d 100644 --- a/src/pathfinder/CMakeLists.txt +++ b/src/pathfinder/CMakeLists.txt @@ -4,8 +4,6 @@ add_files( aystar.h aystar.cpp follow_track.hpp - queue.h - queue.cpp pathfinder_func.h pathfinder_type.h water_regions.h diff --git a/src/pathfinder/queue.cpp b/src/pathfinder/queue.cpp deleted file mode 100644 index 7bb0a06f22..0000000000 --- a/src/pathfinder/queue.cpp +++ /dev/null @@ -1,487 +0,0 @@ -/* - * 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 queue.cpp Implementation of the #BinaryHeap/#Hash. */ - -#include "../../stdafx.h" -#include "../../core/alloc_func.hpp" -#include "queue.h" - -#include "../../safeguards.h" - - -/* - * Binary Heap - * For information, see: http://www.policyalmanac.org/games/binaryHeaps.htm - */ - -const int BinaryHeap::BINARY_HEAP_BLOCKSIZE_BITS = 10; ///< The number of elements that will be malloc'd at a time. -const int BinaryHeap::BINARY_HEAP_BLOCKSIZE = 1 << BinaryHeap::BINARY_HEAP_BLOCKSIZE_BITS; -const int BinaryHeap::BINARY_HEAP_BLOCKSIZE_MASK = BinaryHeap::BINARY_HEAP_BLOCKSIZE - 1; - -/** - * Clears the queue, by removing all values from it. Its state is - * effectively reset. If free_items is true, each of the items cleared - * in this way are free()'d. - */ -void BinaryHeap::Clear(bool free_values) -{ - /* Free all items if needed and free all but the first blocks of memory */ - uint i; - uint j; - - for (i = 0; i < this->blocks; i++) { - if (this->elements[i] == nullptr) { - /* No more allocated blocks */ - break; - } - /* For every allocated block */ - if (free_values) { - for (j = 0; j < (1 << BINARY_HEAP_BLOCKSIZE_BITS); j++) { - /* For every element in the block */ - if ((this->size >> BINARY_HEAP_BLOCKSIZE_BITS) == i && - (this->size & BINARY_HEAP_BLOCKSIZE_MASK) == j) { - break; // We're past the last element - } - free(this->elements[i][j].item); - } - } - if (i != 0) { - /* Leave the first block of memory alone */ - free(this->elements[i]); - this->elements[i] = nullptr; - } - } - this->size = 0; - this->blocks = 1; -} - -/** - * Frees the queue, by reclaiming all memory allocated by it. After - * this it is no longer usable. If free_items is true, any remaining - * items are free()'d too. - */ -void BinaryHeap::Free(bool free_values) -{ - uint i; - - this->Clear(free_values); - for (i = 0; i < this->blocks; i++) { - if (this->elements[i] == nullptr) break; - free(this->elements[i]); - } - free(this->elements); -} - -/** - * Pushes an element into the queue, at the appropriate place for the queue. - * Requires the queue pointer to be of an appropriate type, of course. - */ -bool BinaryHeap::Push(void *item, int priority) -{ - if (this->size == this->max_size) return false; - assert(this->size < this->max_size); - - if (this->elements[this->size >> BINARY_HEAP_BLOCKSIZE_BITS] == nullptr) { - /* The currently allocated blocks are full, allocate a new one */ - assert((this->size & BINARY_HEAP_BLOCKSIZE_MASK) == 0); - this->elements[this->size >> BINARY_HEAP_BLOCKSIZE_BITS] = MallocT(BINARY_HEAP_BLOCKSIZE); - this->blocks++; - } - - /* Add the item at the end of the array */ - this->GetElement(this->size + 1).priority = priority; - this->GetElement(this->size + 1).item = item; - this->size++; - - /* Now we are going to check where it belongs. As long as the parent is - * bigger, we switch with the parent */ - { - BinaryHeapNode temp; - int i; - int j; - - i = this->size; - while (i > 1) { - /* Get the parent of this object (divide by 2) */ - j = i / 2; - /* Is the parent bigger than the current, switch them */ - if (this->GetElement(i).priority <= this->GetElement(j).priority) { - temp = this->GetElement(j); - this->GetElement(j) = this->GetElement(i); - this->GetElement(i) = temp; - i = j; - } else { - /* It is not, we're done! */ - break; - } - } - } - - return true; -} - -/** - * Deletes the item from the queue. priority should be specified if - * known, which speeds up the deleting for some queue's. Should be -1 - * if not known. - */ -bool BinaryHeap::Delete(void *item, int) -{ - uint i = 0; - - /* First, we try to find the item.. */ - do { - if (this->GetElement(i + 1).item == item) break; - i++; - } while (i < this->size); - /* We did not find the item, so we return false */ - if (i == this->size) return false; - - /* Now we put the last item over the current item while decreasing the size of the elements */ - this->size--; - this->GetElement(i + 1) = this->GetElement(this->size + 1); - - /* Now the only thing we have to do, is resort it.. - * On place i there is the item to be sorted.. let's start there */ - { - uint j; - BinaryHeapNode temp; - /* Because of the fact that Binary Heap uses array from 1 to n, we need to - * increase i by 1 - */ - i++; - - for (;;) { - j = i; - /* Check if we have 2 children */ - if (2 * j + 1 <= this->size) { - /* Is this child smaller than the parent? */ - if (this->GetElement(j).priority >= this->GetElement(2 * j).priority) i = 2 * j; - /* Yes, we _need_ to use i here, not j, because we want to have the smallest child - * This way we get that straight away! */ - if (this->GetElement(i).priority >= this->GetElement(2 * j + 1).priority) i = 2 * j + 1; - /* Do we have one child? */ - } else if (2 * j <= this->size) { - if (this->GetElement(j).priority >= this->GetElement(2 * j).priority) i = 2 * j; - } - - /* One of our children is smaller than we are, switch */ - if (i != j) { - temp = this->GetElement(j); - this->GetElement(j) = this->GetElement(i); - this->GetElement(i) = temp; - } else { - /* None of our children is smaller, so we stay here.. stop :) */ - break; - } - } - } - - return true; -} - -/** - * Pops the first element from the queue. What exactly is the first element, - * is defined by the exact type of queue. - */ -void *BinaryHeap::Pop() -{ - void *result; - - if (this->size == 0) return nullptr; - - /* The best item is always on top, so give that as result */ - result = this->GetElement(1).item; - /* And now we should get rid of this item... */ - this->Delete(this->GetElement(1).item, this->GetElement(1).priority); - - return result; -} - -/** - * Initializes a binary heap and allocates internal memory for maximum of - * max_size elements - */ -void BinaryHeap::Init(uint max_size) -{ - this->max_size = max_size; - this->size = 0; - /* We malloc memory in block of BINARY_HEAP_BLOCKSIZE - * It autosizes when it runs out of memory */ - this->elements = CallocT((max_size - 1) / BINARY_HEAP_BLOCKSIZE + 1); - this->elements[0] = MallocT(BINARY_HEAP_BLOCKSIZE); - this->blocks = 1; -} - -/* Because we don't want anyone else to bother with our defines */ -#undef BIN_HEAP_ARR - -/* - * Hash - */ - -/** - * Builds a new hash in an existing struct. Make sure that hash() always - * returns a hash less than num_buckets! Call delete_hash after use - */ -void Hash::Init(Hash_HashProc *hash, uint num_buckets) -{ - /* Allocate space for the Hash, the buckets and the bucket flags */ - uint i; - - /* Ensure the size won't overflow. */ - CheckAllocationConstraints(sizeof(*this->buckets) + sizeof(*this->buckets_in_use), num_buckets); - - this->hash = hash; - this->size = 0; - this->num_buckets = num_buckets; - this->buckets = (HashNode*)MallocT(num_buckets * (sizeof(*this->buckets) + sizeof(*this->buckets_in_use))); - this->buckets_in_use = (bool*)(this->buckets + num_buckets); - for (i = 0; i < num_buckets; i++) this->buckets_in_use[i] = false; -} - -/** - * Deletes the hash and cleans up. Only cleans up memory allocated by new_Hash - * & friends. If free is true, it will call free() on all the values that - * are left in the hash. - */ -void Hash::Delete(bool free_values) -{ - uint i; - - /* Iterate all buckets */ - for (i = 0; i < this->num_buckets; i++) { - if (this->buckets_in_use[i]) { - HashNode *node; - - /* Free the first value */ - if (free_values) free(this->buckets[i].value); - node = this->buckets[i].next; - while (node != nullptr) { - HashNode *prev = node; - - node = node->next; - /* Free the value */ - if (free_values) free(prev->value); - /* Free the node */ - free(prev); - } - } - } - free(this->buckets); - /* No need to free buckets_in_use, it is always allocated in one - * malloc with buckets */ -} - -#ifdef HASH_STATS -void Hash::PrintStatistics() const -{ - uint used_buckets = 0; - uint max_collision = 0; - uint max_usage = 0; - uint usage[200] = {}; - - for (uint i = 0; i < this->num_buckets; i++) { - uint collision = 0; - if (this->buckets_in_use[i]) { - const HashNode *node; - - used_buckets++; - for (node = &this->buckets[i]; node != nullptr; node = node->next) collision++; - if (collision > max_collision) max_collision = collision; - } - if (collision >= lengthof(usage)) collision = lengthof(usage) - 1; - usage[collision]++; - if (collision > 0 && usage[collision] >= max_usage) { - max_usage = usage[collision]; - } - } - Debug(misc, 0, "Hash size: {}, Nodes used: {}, Non empty buckets: {}, Max collision: {}", - this->num_buckets, this->size, used_buckets, max_collision - ); - std::string line; - line += "{ "; - for (uint i = 0; i <= max_collision; i++) { - if (usage[i] > 0) { - fmt::format_to(std::back_inserter(line), "{}:{} ", i, usage[i]); -#if 0 - if (i > 0) { - uint j; - - for (j = 0; j < usage[i] * 160 / 800; j++) line += "#"; - } - line += "\n"; -#endif - } - } - line += "}"; - Debug(misc, 0, "{}", line); -} -#endif - -/** - * Cleans the hash, but keeps the memory allocated - */ -void Hash::Clear(bool free_values) -{ - uint i; - -#ifdef HASH_STATS - if (this->size > 2000) this->PrintStatistics(); -#endif - - /* Iterate all buckets */ - for (i = 0; i < this->num_buckets; i++) { - if (this->buckets_in_use[i]) { - HashNode *node; - - this->buckets_in_use[i] = false; - /* Free the first value */ - if (free_values) free(this->buckets[i].value); - node = this->buckets[i].next; - while (node != nullptr) { - HashNode *prev = node; - - node = node->next; - if (free_values) free(prev->value); - free(prev); - } - } - } - this->size = 0; -} - -/** - * Finds the node that that saves this key pair. If it is not - * found, returns nullptr. If it is found, *prev is set to the - * node before the one found, or if the node found was the first in the bucket - * to nullptr. If it is not found, *prev is set to the last HashNode in the - * bucket, or nullptr if it is empty. prev can also be nullptr, in which case it is - * not used for output. - */ -HashNode *Hash::FindNode(TileIndex tile, Trackdir dir, HashNode** prev_out) const -{ - uint hash = this->hash(tile, dir); - HashNode *result = nullptr; - - /* Check if the bucket is empty */ - if (!this->buckets_in_use[hash]) { - if (prev_out != nullptr) *prev_out = nullptr; - result = nullptr; - /* Check the first node specially */ - } else if (this->buckets[hash].tile == tile && this->buckets[hash].dir == dir) { - /* Save the value */ - result = this->buckets + hash; - if (prev_out != nullptr) *prev_out = nullptr; - /* Check all other nodes */ - } else { - HashNode *prev = this->buckets + hash; - HashNode *node; - - for (node = prev->next; node != nullptr; node = node->next) { - if (node->tile == tile && node->dir == dir) { - /* Found it */ - result = node; - break; - } - prev = node; - } - if (prev_out != nullptr) *prev_out = prev; - } - return result; -} - -/** - * Deletes the value with the specified key pair from the hash and returns - * that value. Returns nullptr when the value was not present. The value returned - * is _not_ free()'d! - */ -void *Hash::DeleteValue(TileIndex tile, Trackdir dir) -{ - void *result; - HashNode *prev; // Used as output var for below function call - HashNode *node = this->FindNode(tile, dir, &prev); - - if (node == nullptr) { - /* not found */ - result = nullptr; - } else if (prev == nullptr) { - /* It is in the first node, we can't free that one, so we free - * the next one instead (if there is any)*/ - /* Save the value */ - result = node->value; - if (node->next != nullptr) { - HashNode *next = node->next; - /* Copy the second to the first */ - *node = *next; - /* Free the second */ - free(next); - } else { - /* This was the last in this bucket - * Mark it as empty */ - uint hash = this->hash(tile, dir); - this->buckets_in_use[hash] = false; - } - } else { - /* It is in another node - * Save the value */ - result = node->value; - /* Link previous and next nodes */ - prev->next = node->next; - /* Free the node */ - free(node); - } - if (result != nullptr) this->size--; - return result; -} - -/** - * Sets the value associated with the given key pair to the given value. - * Returns the old value if the value was replaced, nullptr when it was not yet present. - */ -void *Hash::Set(TileIndex tile, Trackdir dir, void *value) -{ - HashNode *prev; - HashNode *node = this->FindNode(tile, dir, &prev); - - if (node != nullptr) { - /* Found it */ - void *result = node->value; - - node->value = value; - return result; - } - /* It is not yet present, let's add it */ - if (prev == nullptr) { - /* The bucket is still empty */ - uint hash = this->hash(tile, dir); - this->buckets_in_use[hash] = true; - node = this->buckets + hash; - } else { - /* Add it after prev */ - node = MallocT(1); - prev->next = node; - } - node->next = nullptr; - node->tile = tile; - node->dir = dir; - node->value = value; - this->size++; - return nullptr; -} - -/** - * Gets the value associated with the given key pair, or nullptr when it is not - * present. - */ -void *Hash::Get(TileIndex tile, Trackdir dir) const -{ - HashNode *node = this->FindNode(tile, dir, nullptr); - - return (node != nullptr) ? node->value : nullptr; -} diff --git a/src/pathfinder/queue.h b/src/pathfinder/queue.h deleted file mode 100644 index 53b62ac6b9..0000000000 --- a/src/pathfinder/queue.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * 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 queue.h Binary heap implementation, hash implementation. */ - -#ifndef QUEUE_H -#define QUEUE_H - -#include "../../tile_type.h" -#include "../../track_type.h" - -//#define HASH_STATS - - -struct BinaryHeapNode { - void *item; - int priority; -}; - - -/** - * Binary Heap. - * For information, see: http://www.policyalmanac.org/games/binaryHeaps.htm - */ -struct BinaryHeap { - static const int BINARY_HEAP_BLOCKSIZE; - static const int BINARY_HEAP_BLOCKSIZE_BITS; - static const int BINARY_HEAP_BLOCKSIZE_MASK; - - void Init(uint max_size); - - bool Push(void *item, int priority); - void *Pop(); - bool Delete(void *item, int priority); - void Clear(bool free_values); - void Free(bool free_values); - - /** - * Get an element from the #elements. - * @param i Element to access (starts at offset \c 1). - * @return Value of the element. - */ - inline BinaryHeapNode &GetElement(uint i) - { - assert(i > 0); - return this->elements[(i - 1) >> BINARY_HEAP_BLOCKSIZE_BITS][(i - 1) & BINARY_HEAP_BLOCKSIZE_MASK]; - } - - uint max_size; - uint size; - uint blocks; ///< The amount of blocks for which space is reserved in elements - BinaryHeapNode **elements; -}; - - -/* - * Hash - */ -struct HashNode { - TileIndex tile; - Trackdir dir; - void *value; - HashNode *next; -}; -/** - * Generates a hash code from the given key pair. You should make sure that - * the resulting range is clearly defined. - */ -typedef uint Hash_HashProc(TileIndex tile, Trackdir dir); -struct Hash { - /* The hash function used */ - Hash_HashProc *hash; - /* The amount of items in the hash */ - uint size; - /* The number of buckets allocated */ - uint num_buckets; - /* A pointer to an array of num_buckets buckets. */ - HashNode *buckets; - /* A pointer to an array of numbuckets booleans, which will be true if - * there are any Nodes in the bucket */ - bool *buckets_in_use; - - void Init(Hash_HashProc *hash, uint num_buckets); - - void *Get(TileIndex tile, Trackdir dir) const; - void *Set(TileIndex tile, Trackdir dir, void *value); - - void *DeleteValue(TileIndex tile, Trackdir dir); - - void Clear(bool free_values); - void Delete(bool free_values); - - /** - * Gets the current size of the hash. - */ - inline uint GetSize() const - { - return this->size; - } - -protected: -#ifdef HASH_STATS - void PrintStatistics() const; -#endif - HashNode *FindNode(TileIndex tile, Trackdir dir, HashNode** prev_out) const; -}; - -#endif /* QUEUE_H */ From 31085230a6d9cf43b59c269c7a145741334e7bda Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 12 May 2024 15:31:41 +0200 Subject: [PATCH 598/695] Codechange: use std::vector for the available neighbours --- src/landscape.cpp | 8 ++++---- src/pathfinder/aystar.cpp | 4 ++-- src/pathfinder/aystar.h | 6 ++---- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/landscape.cpp b/src/landscape.cpp index 9065844904..d9bc4bc659 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -1223,13 +1223,13 @@ static void River_GetNeighbours(AyStar *aystar, PathNode *current) { TileIndex tile = current->GetTile(); - aystar->num_neighbours = 0; + aystar->neighbours.clear(); for (DiagDirection d = DIAGDIR_BEGIN; d < DIAGDIR_END; d++) { TileIndex t2 = tile + TileOffsByDiagDir(d); if (IsValidTile(t2) && FlowsDown(tile, t2)) { - aystar->neighbours[aystar->num_neighbours].m_tile = t2; - aystar->neighbours[aystar->num_neighbours].m_td = INVALID_TRACKDIR; - aystar->num_neighbours++; + auto &neighbour = aystar->neighbours.emplace_back(); + neighbour.m_tile = t2; + neighbour.m_td = INVALID_TRACKDIR; } } } diff --git a/src/pathfinder/aystar.cpp b/src/pathfinder/aystar.cpp index 711f7c0467..41ffc84668 100644 --- a/src/pathfinder/aystar.cpp +++ b/src/pathfinder/aystar.cpp @@ -111,9 +111,9 @@ int AyStar::Loop() this->GetNeighbours(this, current); /* Go through all neighbours */ - for (int i = 0; i < this->num_neighbours; i++) { + for (auto &neighbour : this->neighbours) { /* Check and add them to the OpenList if needed */ - this->CheckTile(&this->neighbours[i], current); + this->CheckTile(&neighbour, current); } if (this->max_search_nodes != 0 && this->nodes.ClosedCount() >= this->max_search_nodes) { diff --git a/src/pathfinder/aystar.h b/src/pathfinder/aystar.h index d375a052a5..8fa8490644 100644 --- a/src/pathfinder/aystar.h +++ b/src/pathfinder/aystar.h @@ -125,10 +125,8 @@ struct AyStar { int max_path_cost; ///< If the g-value goes over this number, it stops searching, 0 = infinite. int max_search_nodes = AYSTAR_DEF_MAX_SEARCH_NODES; ///< The maximum number of nodes that will be expanded, 0 = infinite. - /* These should be filled with the neighbours of a tile by - * GetNeighbours */ - AyStarNode neighbours[12]; - uint8_t num_neighbours; + /* These should be filled with the neighbours of a tile by GetNeighbours */ + std::vector neighbours; /* These will contain the methods for manipulating the AyStar. Only * Main() should be called externally */ From 5bca185923e644be7e7399bf8ac9168ae4e94b5a Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 31 May 2024 04:43:36 +0000 Subject: [PATCH 599/695] Update: Translations from eints english (au): 1 change by krysclarke chinese (simplified): 1 change by WenSimEHRP russian: 1 change by Ln-Wolf slovak: 20 changes by Kukoluk latvian: 1 change by lexuslatvia portuguese: 1 change by azulcosta portuguese (brazilian): 1 change by pasantoro --- src/lang/brazilian_portuguese.txt | 2 +- src/lang/english_AU.txt | 2 +- src/lang/latvian.txt | 2 +- src/lang/portuguese.txt | 2 +- src/lang/russian.txt | 2 +- src/lang/simplified_chinese.txt | 2 +- src/lang/slovak.txt | 25 +++++++++++++++++++++---- 7 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 2cb5271936..485dd14f73 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1499,7 +1499,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendário STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Relógio de parede STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutos por ano: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Escolher o número de minutos em um ano do calendário. O padrão é 12 minutos. Defina como 0 para o tempo do calendário não mudar. Essa configuração não afeta a simulação econômica do jogo e só está disponível quando o tempo é baseado em relógio de parede +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Escolher o número de minutos em um ano do calendário. O padrão é 12 minutos. Defina como 0 para o tempo do calendário não mudar. Aumentar a duração do ano do calendário torna mais lenta a introdução de veículos, casas e outras infraestruturas. Isso não afeta a velocidade dos veículos nem a simulação econômica, exceto a inflação. Essa configuração só está disponível quando o tempo é baseado em relógio de parede STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 400091fa6f..39ae6d234c 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1498,7 +1498,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendar STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Wallclock STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutes per year: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Choose the number of minutes in a calendar year. The default is 12 minutes. Set to 0 to stop calendar time from changing. This setting does not affect the economic simulation of the game, and is only available when using wallclock timekeeping +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Choose the number of minutes in a calendar year. The default is 12 minutes. Set to 0 to stop calendar time from changing. Increasing the length of the calendar year slows down the introduction of vehicles, houses, and other infrastructure. It does not affect vehicle speed or economic simulation, except for inflation. This setting is only available when using wallclock timekeeping STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index ab69a4e164..2b5b60f061 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1500,7 +1500,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalendārs STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Sienas pulkstenis STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minūtes gadā: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Izvēlieties minūšu skaitu kalendārajā gadā. Noklusējums ir 12 minūtes. Iestatiet uz 0, lai apturētu kalendāra laika izmaiņas. Šis iestatījums neietekmē spēles ekonomisko simulāciju un ir pieejams tikai tad, ja tiek izmantots sienas pulksteņa laika mērijums +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Izvēlieties minūšu skaitu kalendārajā gadā. Noklusējums ir 12 minūtes. Iestatiet uz 0, lai apturētu kalendāra laika izmaiņas. Kalendārā gada garuma palielināšana bremzē transportlīdzekļu, māju un citas infrastruktūras ieviešanu. Tas neietekmē transportlīdzekļa ātrumu vai ekonomisko simulāciju, izņemot inflāciju. Šis iestatījums ir pieejams tikai tad, ja tiek izmantots pulksteņa režīms STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 3e2c6de1c4..22c3cbd39b 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1499,7 +1499,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendário STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Relógio de parede STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutos por ano: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Escolher o número de minutos num ano civil. Valor por omissão é 12 minutos. Defina como 0 para impedir que a hora do calendário seja alterada. Esta configuração não afeta a simulação económica do jogo e só está disponível ao usar a cronometragem do relógio de parede +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Escolher o número de minutos por cada ano do calendário. O padrão é 12 minutos. Defina como 0 (zero) para impedir que a hora do calendário seja alterada. O aumento da duração do ano civil retarda a introdução de veículos, casas e outras infra-estruturas. Não afeta a velocidade do veículo nem a simulação económica, exceto a inflação. Esta configuração só está disponível ao usar o relógio de parede STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 193f0f2511..9a24a421c6 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1649,7 +1649,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Календа STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Реальное время STR_CONFIG_SETTING_MINUTES_PER_YEAR :Продолжительность года: {STRING} мин. -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Выберите, сколько минут реального времени длится год в игре. По умолчанию - 12 минут. Значение «0» остановит календарное время. Эта настройка не влияет на расчёт экономической модели в игре, и работает только в режиме реального времени. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Выберите, сколько минут реального времени длится год в игре. По умолчанию - 12 минут. Значение «0» остановит календарное время. Увеличение продолжительности года замедляет появление новых моделей транспортных средств, домов и иной инфраструктуры. Это не влияет на скорость транспортных средств и на расчёт экономической модели в игре (за исключением инфляции) и работает только в режиме реального времени. STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 3c693c4c50..121c5bf9f7 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1498,7 +1498,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :日历 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :挂钟 STR_CONFIG_SETTING_MINUTES_PER_YEAR :一年分钟数:{STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :选择在挂钟模式下一年所对应的现实时间长度。默认为 12 分钟。设置为 0 则日期不会变化。此设定不会影响游戏的经济模拟系统,而且仅在启用挂钟计时模式时生效 +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :选择在挂钟模式下一年所对应的时间长度。默认为 12 分钟;设置为 0 则日期不会变化。增加一年的长度会使新载具、房屋和其他基础设施的发明时间被推迟;此选项不会影响载具速度或经济模拟,但会影响通货膨胀。此选项仅在使用挂钟模式时有效。 STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 96d21e947a..e2e2b887e6 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1024,6 +1024,7 @@ STR_GAME_OPTIONS_VOLUME :Hlasitosť STR_GAME_OPTIONS_SFX_VOLUME :Zvukové efekty STR_GAME_OPTIONS_MUSIC_VOLUME :Hudba +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% hlasitosť STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Mena STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Výber menovej jednotky @@ -1116,11 +1117,12 @@ STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Začiark STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Mierkové úkosy STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Začiarknutím tohto políčka zmeníte úkosy podľa veľkosti rozhrania -STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Použite tradičné sprite písmo +STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Použiť tradičné "Sprite" písmo STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Začiarknite toto políčko, ak uprednostňujete použitie tradičného písma sprite s pevnou veľkosťou STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Vyhladzovacie písma STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Začiarknite toto políčko, ak chcete vyhladiť písma s meniteľnou veľkosťou +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Automatizovaný prieskum STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Zúčastniť sa automatizovaného prieskumu @@ -1149,6 +1151,7 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Základn STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Výber sady hudby, ktorá má byť použitá STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Dodatočné informácie o základnej sade hudby +STR_GAME_OPTIONS_ONLINE_CONTENT :Získať Obsah STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(žiadne nainštalované doplnky na integráciu so sociálnymi platformami) @@ -1560,7 +1563,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalendár STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Hodiny STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minút za rok: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Zvoľte počet minút za jeden kalendárny rok. Predvolená hodnota je 12. Nastavte 0, aby sa kalendárne obdobie nemenilo. Toto nastavenie neovlivňuje simuláciu ekonómie, a je dostupná len v hodinovom móde +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Zvoľte počet minút za jeden kalendárny rok. Predvolená hodnota je 12. Nastavte 0, aby sa kalendárne obdobie nemenilo. Zväčšovanie dĺžky jedného kalendárneho roka spomaľuje priebeh celej hry(uvádzanie nových vozidiel, domov a inej infraštruktúry). Nemá však vplyv na rýchlosť vozidiel, alebo ekonomickú simuláciu (mimo inflácie). Toto nastavenie je dostupné len v hodinovom móde STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special @@ -2858,9 +2861,14 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Dĺžka STR_STATION_BUILD_DRAG_DROP :{BLACK}Automaticky STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Automaticky postaviť stanicu podľa označeného bloku terénu +STR_PICKER_MODE_ALL :Všetko +STR_PICKER_MODE_USED :Použité +STR_PICKER_MODE_SAVED :Uložené. + +STR_PICKER_HOUSE_CLASS_TOOLTIP :Zvoľ veľkosť zóny mesta na zobrazenie - +STR_HOUSE_PICKER_CLASS_ZONE1 :Okraj STR_STATION_CLASS_DFLT :Pôvodná STR_STATION_CLASS_DFLT_STATION :Predvolená stanica @@ -3429,8 +3437,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Skutoč STR_GENERATION_PROGRESS :{WHITE}{NUM}% hotových STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generovanie sveta +STR_GENERATION_LANDSCAPE_GENERATION :Generujem krajinu STR_GENERATION_RIVER_GENERATION :{BLACK}Generovanie riek STR_GENERATION_CLEARING_TILES :{BLACK}Generovanie nerovností a skál +STR_GENERATION_TOWN_GENERATION :Vytváranie mesta +STR_GENERATION_INDUSTRY_GENERATION :Vytváranie priemyslu STR_GENERATION_OBJECT_GENERATION :{BLACK}Generovanie objektov STR_GENERATION_TREE_GENERATION :{BLACK}Generovanie stromov STR_GENERATION_SETTINGUP_GAME :{BLACK}Nastavovanie hry @@ -4678,7 +4689,7 @@ STR_ORDER_REFIT_ORDER :(Prestavba na { STR_ORDER_REFIT_STOP_ORDER :(Prestavba na {STRING} a zastav) STR_ORDER_STOP_ORDER :(Zastav) -STR_ORDER_WAIT_TO_UNBUNCH :(počkať na rozdelenie) +STR_ORDER_WAIT_TO_UNBUNCH :(Počkať na rozdelenie) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Nemožno použiť stanicu){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4934,7 +4945,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Odhadova STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ukladanie hry ešte beží,{}počkajte prosím na dokončenie! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatické ukladanie zlyhalo STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Zariadenie je nečitateľné +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Uloženie hry zlyhalo... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Súbor sa nedá vymazať +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Nahratie hry zlyhalo... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interná chyba: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Poškodená uložená hra - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Hra bola uložená vo vyššej verzii @@ -5076,6 +5089,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Nemôže STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Susedí z viacerými stanicami/výkladkami STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... stanica je príliš veľká +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :V stanici je príliš veľa kolají. +STR_ERROR_STATION_DISALLOWED_LENGTH :Príliš dlhá stanica. STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Príliš veľa staníc/vykládok STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Veľa častí vlakovej stanice STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Príliš veľa autobusových zastávok @@ -5316,6 +5331,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Zmena va STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Zatiaľ nie sú dostupné žiadne vozidlá STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Začnite novú hru po {DATE_SHORT} alebo použite NewGRF, ktoré zabezpečí vozidlá v skoršom čase +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Zmena vašej konfigurácie NewGRF # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Nemožno nechať vlak prejsť návestidlo ak hrozí nebezpečenstvo... @@ -5868,6 +5884,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} From 7e914a05681c30a939d48b6647193f564d2fab31 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 31 May 2024 20:26:20 +0100 Subject: [PATCH 600/695] Fix #12738, de16655f: Fallback font searcher failure since ? substitution removed. Fallback font searcher looked for the substituted ? glyph, which was removed by #12736. Instead of comparing against a sprite, test against the font returning a missing glyph. This should also improve performance of fallback font searching, as previously glyphs were actually rendered while searching. --- src/strings.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/strings.cpp b/src/strings.cpp index 8a23b93daa..e069370e94 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -2158,23 +2158,20 @@ const char *GetCurrentLanguageIsoCode() bool MissingGlyphSearcher::FindMissingGlyphs() { InitFontCache(this->Monospace()); - const Sprite *question_mark[FS_END]; - - for (FontSize size = this->Monospace() ? FS_MONO : FS_BEGIN; size < (this->Monospace() ? FS_END : FS_MONO); size++) { - question_mark[size] = GetGlyph(size, '?'); - } this->Reset(); for (auto text = this->NextString(); text.has_value(); text = this->NextString()) { auto src = text->cbegin(); FontSize size = this->DefaultSize(); + FontCache *fc = FontCache::Get(size); while (src != text->cend()) { char32_t c = Utf8Consume(src); if (c >= SCC_FIRST_FONT && c <= SCC_LAST_FONT) { size = (FontSize)(c - SCC_FIRST_FONT); - } else if (!IsInsideMM(c, SCC_SPRITE_START, SCC_SPRITE_END) && IsPrintable(c) && !IsTextDirectionChar(c) && c != '?' && GetGlyph(size, c) == question_mark[size]) { + fc = FontCache::Get(size); + } else if (!IsInsideMM(c, SCC_SPRITE_START, SCC_SPRITE_END) && IsPrintable(c) && !IsTextDirectionChar(c) && fc->MapCharToGlyph(c, false) == 0) { /* The character is printable, but not in the normal font. This is the case we were testing for. */ std::string size_name; From 3827229c7434427e282688021591265f212720fe Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 1 Jun 2024 04:41:17 +0000 Subject: [PATCH 601/695] Update: Translations from eints english (us): 1 change by 2TallTyler finnish: 1 change by hpiirai dutch: 1 change by Afoklala --- src/lang/dutch.txt | 2 +- src/lang/english_US.txt | 2 +- src/lang/finnish.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index f914ec27eb..c6b7e06c56 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1498,7 +1498,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalender STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Muurklok STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minuten per jaar: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Kies het aantal minuten in een kalenderjaar. Standaard is 12 minuten. Bij 0 wijzigt de kalendertijd niet. Deze instelling heeft geen invloed op de economische simulatie van het spel en is alleen beschikbaar met tijdbasis Muurklok +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Kies het aantal minuten in een kalenderjaar. Standaard is 12 minuten. Bij 0 wijzigt de kalendertijd niet. Als je het kalenderjaar langer maakt, komen voertuigen, huizen en andere infrastructuur langzamer beschikbaar. Deze instelling heeft geen invloed op voertuigsnelheid en op de economische simulatie van het spel, afgezien van inflatie. Deze instelling is alleen beschikbaar met tijdbasis Muurklok STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 3cbb9f4e5a..8aeeb6fdd9 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1498,7 +1498,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendar STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Wallclock STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutes per year: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Choose the number of minutes in a calendar year. The default is 12 minutes. Set to 0 to stop calendar time from changing. This setting does not affect the economic simulation of the game, and is only available when using wallclock timekeeping +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Choose the number of minutes in a calendar year. The default is 12 minutes. Set to 0 to stop calendar time from changing. Increasing the length of the calendar year slows down the introduction of vehicles, houses, and other infrastructure. It does not affect vehicle speed or economic simulation, except for inflation. This setting is only available when using wallclock timekeeping STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index bf5a03c749..6ed8e0f7fe 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1498,7 +1498,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalenteri STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Seinäkello STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minuuttia vuodessa: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Valitse minuuttien määrä kalenterivuodessa. Oletusarvo on 12 minuuttia. Aseta arvoksi 0, jos et halua kalenteriajan muuttuvan. Tämä asetus ei vaikuta pelin taloussimulaatioon, ja se on valittavissa vain seinäkelloaikaa käytettäessä +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Valitse minuuttien määrä kalenterivuodessa. Oletusarvo on 12 minuuttia. Aseta arvoksi 0, jos et halua kalenteriajan muuttuvan. Kalenterivuoden pidentäminen hidastaa kulkuneuvojen, talojen ja muun infrastruktuurin käyttöönottoa. Se ei vaikuta kulkuneuvojen nopeuteen eikä taloussimulaatioon inflaatiota lukuun ottamatta. Tämä asetus on valittavissa vain seinäkelloaikaa käytettäessä STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special From 96fc367bcf1fb3e957b37f3a0aefeb10fbef9202 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 1 Jun 2024 12:54:49 +0100 Subject: [PATCH 602/695] Change: [NewGRF] Treat house max year 0xFFFF as MAX_YEAR. (#12740) --- src/newgrf.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 51514054fa..fee478d7aa 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -2594,6 +2594,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt case 0x22: // long maximum year housespec->max_year = buf->ReadWord(); + if (housespec->max_year == UINT16_MAX) housespec->max_year = CalendarTime::MAX_YEAR; break; case 0x23: { // variable length cargo types accepted From 6d2424c0efc12b31c80e67f3b2a0be4cba7a5a63 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 1 Jun 2024 16:57:17 +0100 Subject: [PATCH 603/695] Codechange: Update each town label dimensions once during map gen. (#12742) This avoids re-layouting the label for each change in population as the town is grown. --- src/town_cmd.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index de252cdb41..1f0aecd4ab 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -79,6 +79,8 @@ void RebuildTownKdtree() _town_kdtree.Build(townids.begin(), townids.end()); } +/** Set if a town is being generated. */ +static bool _generating_town = false; /** * Check if a town 'owns' a bridge. @@ -442,6 +444,8 @@ void ClearAllTownCachedNames() static void ChangePopulation(Town *t, int mod) { t->cache.population += mod; + if (_generating_town) [[unlikely]] return; + InvalidateWindowData(WC_TOWN_VIEW, t->index); // Cargo requirements may appear/vanish for small populations if (_settings_client.gui.population_in_label) t->UpdateVirtCoord(); @@ -1973,6 +1977,8 @@ static void UpdateTownGrowth(Town *t); */ static void DoCreateTown(Town *t, TileIndex tile, uint32_t townnameparts, TownSize size, bool city, TownLayout layout, bool manual) { + AutoRestoreBackup backup(_generating_town, true); + t->xy = tile; t->cache.num_houses = 0; t->time_until_rebuild = 10; @@ -2016,9 +2022,6 @@ static void DoCreateTown(Town *t, TileIndex tile, uint32_t townnameparts, TownSi } t->townnameparts = townnameparts; - t->UpdateVirtCoord(); - InvalidateWindowData(WC_TOWN_DIRECTORY, 0, TDIWD_FORCE_REBUILD); - t->InitializeLayout(layout); t->larger_town = city; @@ -2036,6 +2039,9 @@ static void DoCreateTown(Town *t, TileIndex tile, uint32_t townnameparts, TownSi GrowTown(t); } while (--i); + t->UpdateVirtCoord(); + InvalidateWindowData(WC_TOWN_DIRECTORY, 0, TDIWD_FORCE_REBUILD); + t->cache.num_houses -= x; UpdateTownRadius(t); UpdateTownGrowthRate(t); From 0d10c5e93c868deb12f04e92b36d07c2f5be16a9 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 2 Jun 2024 04:41:25 +0000 Subject: [PATCH 604/695] Update: Translations from eints greek: 1 change by gh658804 --- src/lang/greek.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/greek.txt b/src/lang/greek.txt index da0bdd6b99..52284399e3 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1591,7 +1591,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Ημερολό STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Ρολόι τοίχου STR_CONFIG_SETTING_MINUTES_PER_YEAR :Λεπτά ανά έτος: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Επιλέξτε τον αριθμό των λεπτών σε ένα ημερολογιακό έτος. Η προεπιλογή είναι 12 λεπτά. Ρυθμίστε στο 0 για να σταματήσετε την αλλαγή της ημερολογιακής ώρας. Αυτή η ρύθμιση δεν επηρεάζει την οικονομική προσομοίωση του παιχνιδιού και είναι διαθέσιμη μόνο όταν χρησιμοποιείτε χρονομέτρηση ρολογιού τοίχου +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Επιλέξτε τον αριθμό των λεπτών σε ένα ημερολογιακό έτος. Η προεπιλογή είναι 12 λεπτά. Ρυθμίστε στο 0 για να σταματήσετε την αλλαγή της ημερολογιακής ώρας. Η αύξηση της διάρκειας του ημερολογιακού έτους επιβραδύνει την εισαγωγή οχημάτων, σπιτιών και άλλων υποδομών. Δεν επηρεάζει την ταχύτητα του οχήματος ή την οικονομική προσομοίωση, εκτός από τον πληθωρισμό. Αυτή η ρύθμιση είναι διαθέσιμη μόνο όταν χρησιμοποιείται χρονομέτρηση ρολογιού τοίχου STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special From 1ab280a27aec9c50cbf7c54e82da92bf8747a0b8 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 2 Jun 2024 15:28:51 +0100 Subject: [PATCH 605/695] Change: Use UK OSK layout for English (UK) (#12720) --- src/lang/english.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index ece722b4b6..cbb10cf08b 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -310,8 +310,8 @@ STR_BUTTON_CANCEL :{BLACK}Cancel STR_BUTTON_OK :{BLACK}OK # On screen keyboard window -STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . -STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:" ZXCVBNM<>? . +STR_OSK_KEYBOARD_LAYOUT :`1234567890-= qwertyuiop[]asdfghjkl;'#\zxcvbnm,./ . +STR_OSK_KEYBOARD_LAYOUT_CAPS :¬!"£$%^&*()_+ QWERTYUIOP{{}}ASDFGHJKL:@~|ZXCVBNM<>? . # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Length: {NUM} From 01c75fc5781efd494a0bbe91dcbe435c838e660b Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 3 Jun 2024 04:42:34 +0000 Subject: [PATCH 606/695] Update: Translations from eints urdu: 24 changes by haidermazhar --- src/lang/urdu.txt | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index 70c09e1d3a..129e4b7dab 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -1158,9 +1158,14 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :گاڑیوں ک STR_CONFIG_SETTING_AUTORENEW_VEHICLE :گاڑی پرانی ہونے کی صورت میں خودکار طریقے سے بدل دیں: {STRING} +STR_CONFIG_SETTING_AUTORENEW_MONTHS :گاڑی کی زیادہ سے زیادہ عمر {STRING} ہونے پر خودکار تجدید کریں۔ +STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :متعلقہ عمر جب کسی گاڑی کو خودکار تجدید کے لیے سمجھا جانا چاہیے۔ ###length 2 +STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} ماہ پہلے +STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} ماہ بعد STR_CONFIG_SETTING_AUTORENEW_MONEY :خودکار تبدیلی کے لئے ضروری کم سے کم رقم کو خودکار طریقے سے بدل دیں: {STRING} +STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :گاڑیوں کی خودکار تجدید کرنے پر غور کرنے سے پہلے کم سے کم رقم جو بینک میں رہنی چاہیے۔ ###setting-zero-is-special @@ -1331,9 +1336,12 @@ STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :اسکرپٹس STR_CONFIG_SETTING_SERVINT_ISPERCENT :مرمتی وقفے فیصد میں ہیں: {STRING} +STR_CONFIG_SETTING_SERVINT_AIRCRAFT :ہوائی جہاز کے لیے طے شدہ مرمتی وقفہ: {STRING} +STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :اگر گاڑی کے لیے کوئی واضح مرمتی وقفہ مقرر نہیں کیا گیا ہے تو نئے ہوائی جہاز کے لیے پہلے سے طے شدہ مرمتی وقفہ مقرر کریں ###length 3 ###setting-zero-is-special +STR_CONFIG_SETTING_SERVINT_DISABLED :غیر فعال STR_CONFIG_SETTING_NOSERVICE :گاڑیوں کی خرابی غیر فعال ہونے کی صورت میں مرمت بھی غیر فعال کر دیں: {STRING} @@ -1737,6 +1745,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}کلائ # Matches ConnectionType ###length 5 +STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :مٹا دو @@ -2152,6 +2161,9 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{G=f}{BLACK}ک # Fund new industry window # Industry cargoes window +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}کارگو چین - {STRING} +STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}قبول کرنے والی صنعتیں۔ +STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}اس کے فروخت کنندہ اور گاہک کو دیکھنے کے لیے سامان پر کلک کریں۔ # Land area window @@ -2213,6 +2225,13 @@ STR_MAPGEN_TOWN_NAME_ITALIAN :اِٹالین STR_MAPGEN_TOWN_NAME_CATALAN :کاٹالن # Strings for map borders at game generation +STR_MAPGEN_BORDER_TYPE :{BLACK}نقشے کے کنارے: +STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}کھیل کی دنیا کے بارڈرز کا انتخاب کریں۔ +STR_MAPGEN_BORDER_FREEFORM :{BLACK}فری فارم +STR_MAPGEN_BORDER_WATER :{BLACK}پانی +STR_MAPGEN_BORDER_RANDOM :{BLACK}بے ترتیب +STR_MAPGEN_BORDER_RANDOMIZE :{BLACK}بے ترتیب +STR_MAPGEN_BORDER_MANUAL :{BLACK}دستی @@ -2331,6 +2350,7 @@ STR_GOAL_QUESTION_CAPTION_ERROR :خرابی # Subsidies window # Story book window +STR_STORY_BOOK_INVALID_GOAL_REF :{RED}غلط مقصد کا حوالہ # Station list window STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} @@ -2894,6 +2914,9 @@ STR_TOWN_BUILDING_NAME_CHURCH_1 :چرچ ##id 0x4800 # industry names STR_INDUSTRY_NAME_POWER_STATION :بجلی گھر +STR_INDUSTRY_NAME_FARM :کھیت +STR_INDUSTRY_NAME_BANK :بینک +STR_INDUSTRY_NAME_BANK_TROPIC_ARCTIC :بینک ############ WARNING, using range 0x6000 for strings that are stored in the savegame ############ These strings may never get a new id, or savegames will break! @@ -2915,6 +2938,7 @@ STR_SV_STNAME_WAYPOINT :{STRING} STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_CHOO_CHOO :Ploddyphut Choo-Choo STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_CHOO_CHOO :Powernaut Choo-Choo STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MIGHTYMOVER_CHOO_CHOO :MightyMover Choo-Choo +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MANLEY_MOREL_DMU_DIESEL :مینلی-موریل DMU (ڈیزل) STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_WIZZOWOW_Z99 :Wizzowow Z99 STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COAL_CAR :کوئلے کا ٹرک STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_WIZZOWOW_ROCKETEER :Wizzowow Rocketeer From 1c738e50845f3f8c985c31840cb864b2e0b948cc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 15:45:02 +0200 Subject: [PATCH 607/695] Upgrade: [CI] Bump Apple-Actions/import-codesign-certs in the actions group (#12745) Bumps the actions group with 1 update: [Apple-Actions/import-codesign-certs](https://github.com/apple-actions/import-codesign-certs). Updates `Apple-Actions/import-codesign-certs` from 2 to 3 - [Release notes](https://github.com/apple-actions/import-codesign-certs/releases) - [Commits](https://github.com/apple-actions/import-codesign-certs/compare/v2...v3) --- updated-dependencies: - dependency-name: Apple-Actions/import-codesign-certs dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release-macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-macos.yml b/.github/workflows/release-macos.yml index e9cefa0813..7859af6e68 100644 --- a/.github/workflows/release-macos.yml +++ b/.github/workflows/release-macos.yml @@ -86,7 +86,7 @@ jobs: echo "::endgroup::" - name: Import code signing certificates - uses: Apple-Actions/import-codesign-certs@v2 + uses: Apple-Actions/import-codesign-certs@v3 with: # The certificates in a PKCS12 file encoded as a base64 string p12-file-base64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }} From 5fd23a2d70879feda0ba4d9d681f1b56f13abb3e Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 3 Jun 2024 18:40:27 +0100 Subject: [PATCH 608/695] Codechange: Pre-reserve vectors during NewGRF loading. (#12748) Call reserve when we are given the number of elements up front. This reduces the number of reallocations and over-allocations done during loading. --- src/newgrf.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index fee478d7aa..4a885cb197 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -2660,6 +2660,7 @@ static ChangeInfoResult LoadTranslationTable(uint gvid, int numinfo, ByteReader } translation_table.clear(); + translation_table.reserve(numinfo); for (int i = 0; i < numinfo; i++) { translation_table.push_back(T(BSWAP32(buf->ReadDWord()))); } @@ -3571,6 +3572,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, for (uint8_t j = 0; j < new_num_layouts; j++) { layout.clear(); + layout.reserve(new_num_layouts); for (uint k = 0;; k++) { if (bytes_read >= definition_size) { @@ -5238,6 +5240,7 @@ static void NewSpriteGroup(ByteReader *buf) /* Sort ranges ascending. When ranges overlap, this may required clamping or splitting them */ std::vector bounds; + bounds.reserve(ranges.size()); for (const auto &range : ranges) { bounds.push_back(range.low); if (range.high != UINT32_MAX) bounds.push_back(range.high + 1); @@ -5246,6 +5249,7 @@ static void NewSpriteGroup(ByteReader *buf) bounds.erase(std::unique(bounds.begin(), bounds.end()), bounds.end()); std::vector target; + target.reserve(bounds.size()); for (const auto &bound : bounds) { const SpriteGroup *t = group->default_group; for (const auto &range : ranges) { @@ -5301,6 +5305,7 @@ static void NewSpriteGroup(ByteReader *buf) GrfMsg(1, "NewSpriteGroup: Random Action 2 nrand should be power of 2"); } + group->groups.reserve(num_groups); for (uint i = 0; i < num_groups; i++) { group->groups.push_back(GetGroupFromGroupID(setid, type, buf->ReadWord())); } @@ -5351,11 +5356,13 @@ static void NewSpriteGroup(ByteReader *buf) std::vector loaded; std::vector loading; + loaded.reserve(num_loaded); for (uint i = 0; i < num_loaded; i++) { loaded.push_back(buf->ReadWord()); GrfMsg(8, "NewSpriteGroup: + rg->loaded[{}] = subset {}", i, loaded[i]); } + loading.reserve(num_loading); for (uint i = 0; i < num_loading; i++) { loading.push_back(buf->ReadWord()); GrfMsg(8, "NewSpriteGroup: + rg->loading[{}] = subset {}", i, loading[i]); @@ -5376,12 +5383,14 @@ static void NewSpriteGroup(ByteReader *buf) act_group = group; if (loaded_same && loaded.size() > 1) loaded.resize(1); + group->loaded.reserve(loaded.size()); for (uint16_t spriteid : loaded) { const SpriteGroup *t = CreateGroupFromGroupID(feature, setid, type, spriteid); group->loaded.push_back(t); } if (loading_same && loading.size() > 1) loading.resize(1); + group->loading.reserve(loading.size()); for (uint16_t spriteid : loading) { const SpriteGroup *t = CreateGroupFromGroupID(feature, setid, type, spriteid); group->loading.push_back(t); From 342a7cebd6620ae321370b0fd54be93dee398a2b Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 4 Jun 2024 04:41:49 +0000 Subject: [PATCH 609/695] Update: Translations from eints english (au): 2 changes by krysclarke chinese (simplified): 2 changes by WenSimEHRP urdu: 6 changes by haidermazhar russian: 2 changes by Ln-Wolf catalan: 3 changes by J0anJosep latvian: 2 changes by lexuslatvia portuguese (brazilian): 2 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 4 ++-- src/lang/catalan.txt | 6 +++--- src/lang/english_AU.txt | 4 ++-- src/lang/latvian.txt | 4 ++-- src/lang/russian.txt | 4 ++-- src/lang/simplified_chinese.txt | 4 ++-- src/lang/urdu.txt | 6 ++++++ 7 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 485dd14f73..f5b918f6a6 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -311,8 +311,8 @@ STR_BUTTON_CANCEL :{BLACK}Cancelar STR_BUTTON_OK :{BLACK}OK # On screen keyboard window -STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . -STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:" ZXCVBNM<>? . +STR_OSK_KEYBOARD_LAYOUT :`1234567890-= qwertyuiop[]asdfghjkl;'#\zxcvbnm,./ . +STR_OSK_KEYBOARD_LAYOUT_CAPS :¬!"£$%^&*()_+ QWERTYUIOP{{}}ASDFGHJKL:@~|ZXCVBNM<>? . # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Comprimento: {NUM} diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 8bd84d6011..a696c7c792 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -311,8 +311,8 @@ STR_BUTTON_CANCEL :{BLACK}Cancel· STR_BUTTON_OK :{BLACK}D'acord # On screen keyboard window -STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . -STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:" ZXCVBNM<>? . +STR_OSK_KEYBOARD_LAYOUT :`1234567890-= qwertyuiop[]asdfghjkl;'#\zxcvbnm,./ . +STR_OSK_KEYBOARD_LAYOUT_CAPS :¬!"£$%^&*()_+ QWERTYUIOP{{}}ASDFGHJKL:@~|ZXCVBNM<>? . # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Llargada: {NUM} @@ -1499,7 +1499,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendari STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Rellotge de paret STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minuts per any: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Trieu el nombre de minuts d'un any de calendari. Per defecte són 12 minuts. Establiu-ho a 0 per a parar el temps del calendari. Aquesta opció no afecta a la simulació econòmica de la partida i només està disponible quan es fa servir el temps amb rellotge de paret. +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Trieu el nombre de minuts d'un any de calendari. Per defecte són 12 minuts. Establiu-ho a 0 per a parar el temps del calendari. Si s'augmenta la durada de l'any del calendari s'alenteix la introducció de vehicles, cases i altres tipus d'infraestructures noves. No afecta a la velocitat dels vehicles o de la simulació econòmica, excepte per la inflació. Aquesta opció només està disponible quan es fa servir el temps amb rellotge de paret. STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 39ae6d234c..4ac69ed6ba 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -310,8 +310,8 @@ STR_BUTTON_CANCEL :{BLACK}Cancel STR_BUTTON_OK :{BLACK}OK # On screen keyboard window -STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . -STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:" ZXCVBNM<>? . +STR_OSK_KEYBOARD_LAYOUT :`1234567890-= qwertyuiop[]asdfghjkl;'#\zxcvbnm,./ . +STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+ QWERTYUIOP{{}}ASDFGHJKL:@~|ZXCVBNM<>? . # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Length: {NUM} diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 2b5b60f061..04e091c581 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -312,8 +312,8 @@ STR_BUTTON_CANCEL :{BLACK}Atcelt STR_BUTTON_OK :{BLACK}Labi # On screen keyboard window -STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . -STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:" ZXCVBNM<>? . +STR_OSK_KEYBOARD_LAYOUT :`1234567890-= qwertyuiop[]asdfghjkl;'#\zxcvbnm,./ . +STR_OSK_KEYBOARD_LAYOUT_CAPS :¬!"£$%^&*()_+ QWERTYUIOP{{}}ASDFGHJKL:@~|ZXCVBNM<>? . # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Garums: {NUM} diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 9a24a421c6..25f4d6c8d7 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -436,8 +436,8 @@ STR_BUTTON_CANCEL :{BLACK}Отме STR_BUTTON_OK :{BLACK}OK # On screen keyboard window -STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . -STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:" ZXCVBNM<>? . +STR_OSK_KEYBOARD_LAYOUT :`1234567890-= qwertyuiop[]asdfghjkl;'#\zxcvbnm,./ . +STR_OSK_KEYBOARD_LAYOUT_CAPS :¬!"£$%^&*()_+ QWERTYUIOP{{}}ASDFGHJKL:@~|ZXCVBNM<>? . # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Длина: {NUM} diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 121c5bf9f7..e0fb3c0353 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -310,8 +310,8 @@ STR_BUTTON_CANCEL :{BLACK}取消 STR_BUTTON_OK :{BLACK}确定 # On screen keyboard window -STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . -STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:" ZXCVBNM<>? . +STR_OSK_KEYBOARD_LAYOUT :`1234567890-= qwertyuiop[]asdfghjkl;'#\zxcvbnm,./ . +STR_OSK_KEYBOARD_LAYOUT_CAPS :¬!"£$%^&*()_+ QWERTYUIOP{{}}ASDFGHJKL:@~|ZXCVBNM<>? . # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}长度:{NUM} diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index 129e4b7dab..f191cb70c8 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -2455,7 +2455,13 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}گروپ ###length VEHICLE_TYPES STR_BUY_VEHICLE_AIRCRAFT_CAPTION :نیا طیارہ +STR_PURCHASE_INFO_CAPACITY :{BLACK}گنجائش: {GOLD}{CARGO_LONG} {STRING} +STR_PURCHASE_INFO_COST :{BLACK}لاگت: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}گنجائش: {GOLD}{CARGO_LONG}, {CARGO_LONG} +STR_PURCHASE_INFO_ALL_TYPES :تمام اقسام کا سامان +STR_PURCHASE_INFO_ALL_BUT :{CARGO_LIST} کے علاوہ سبھی STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}پہنچ: {GOLD}{COMMA} ٹائلیں +STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}ہوائی جہاز کی قسم: {GOLD}{STRING} ###length 3 From 579ce8eae0d6342077ce899d982f1675a3df602c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 4 Jun 2024 18:06:19 +0100 Subject: [PATCH 610/695] Codefix: Find GRF override entries properly. (#12743) My naive code from 16 years ago tested for GRF overrides in a way that will create empty 0 entries for each source GRF tested. --- src/newgrf.cpp | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 4a885cb197..92ccd79b3b 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -590,8 +590,13 @@ static std::map _grf_id_overrides; */ static void SetNewGRFOverride(uint32_t source_grfid, uint32_t target_grfid) { - _grf_id_overrides[source_grfid] = target_grfid; - GrfMsg(5, "SetNewGRFOverride: Added override of 0x{:X} to 0x{:X}", BSWAP32(source_grfid), BSWAP32(target_grfid)); + if (target_grfid == 0) { + _grf_id_overrides.erase(source_grfid); + GrfMsg(5, "SetNewGRFOverride: Removed override of 0x{:X}", BSWAP32(source_grfid)); + } else { + _grf_id_overrides[source_grfid] = target_grfid; + GrfMsg(5, "SetNewGRFOverride: Added override of 0x{:X} to 0x{:X}", BSWAP32(source_grfid), BSWAP32(target_grfid)); + } } /** @@ -610,14 +615,13 @@ static Engine *GetNewEngine(const GRFFile *file, VehicleType type, uint16_t inte if (_settings_game.vehicle.dynamic_engines) { /* If dynamic_engies is enabled, there can be multiple independent ID ranges. */ scope_grfid = file->grfid; - uint32_t override = _grf_id_overrides[file->grfid]; - if (override != 0) { - scope_grfid = override; - const GRFFile *grf_match = GetFileByGRFID(override); + if (auto it = _grf_id_overrides.find(file->grfid); it != std::end(_grf_id_overrides)) { + scope_grfid = it->second; + const GRFFile *grf_match = GetFileByGRFID(scope_grfid); if (grf_match == nullptr) { - GrfMsg(5, "Tried mapping from GRFID {:x} to {:x} but target is not loaded", BSWAP32(file->grfid), BSWAP32(override)); + GrfMsg(5, "Tried mapping from GRFID {:x} to {:x} but target is not loaded", BSWAP32(file->grfid), BSWAP32(scope_grfid)); } else { - GrfMsg(5, "Mapping from GRFID {:x} to {:x}", BSWAP32(file->grfid), BSWAP32(override)); + GrfMsg(5, "Mapping from GRFID {:x} to {:x}", BSWAP32(file->grfid), BSWAP32(scope_grfid)); } } @@ -699,8 +703,9 @@ EngineID GetNewEngineID(const GRFFile *file, VehicleType type, uint16_t internal uint32_t scope_grfid = INVALID_GRFID; // If not using dynamic_engines, all newgrfs share their ID range if (_settings_game.vehicle.dynamic_engines) { scope_grfid = file->grfid; - uint32_t override = _grf_id_overrides[file->grfid]; - if (override != 0) scope_grfid = override; + if (auto it = _grf_id_overrides.find(file->grfid); it != std::end(_grf_id_overrides)) { + scope_grfid = it->second; + } } return _engine_mngr.GetID(type, internal_id, scope_grfid); @@ -9790,8 +9795,9 @@ static void FinalisePriceBaseMultipliers() std::vector grf_overrides(num_grfs, -1); for (int i = 0; i < num_grfs; i++) { GRFFile *source = _grf_files[i]; - uint32_t override = _grf_id_overrides[source->grfid]; - if (override == 0) continue; + auto it = _grf_id_overrides.find(source->grfid); + if (it == std::end(_grf_id_overrides)) continue; + uint32_t override = it->second; GRFFile *dest = GetFileByGRFID(override); if (dest == nullptr) continue; From 57186d46503fba9ad14bae134bc310fc07419d6a Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 4 Jun 2024 23:05:51 +0100 Subject: [PATCH 611/695] Fix: Editbox behaved improperly with RTL languages. (#12746) Text in the editbox was always left-aligned and did not scroll with the caret position. --- src/misc_gui.cpp | 53 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 085f5aaf8e..7ed51cac1d 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -780,6 +780,25 @@ static int GetCaretWidth() return GetCharacterWidth(FS_NORMAL, '_'); } +/** + * Reposition edit text box rect based on textbuf length can caret position. + * @param r Initial rect of edit text box. + * @param tb The Textbuf being processed. + * @return Updated rect. + */ +static Rect ScrollEditBoxTextRect(Rect r, const Textbuf &tb) +{ + const int linewidth = tb.pixels + GetCaretWidth(); + const int boxwidth = r.Width(); + if (linewidth <= boxwidth) return r; + + /* Extend to cover whole string. This is left-aligned, adjusted by caret position. */ + r = r.WithWidth(linewidth, false); + + /* Slide so that the caret is at the centre unless limited by bounds of the line, i.e. near either end. */ + return r.Translate(-std::clamp(tb.caretxoffs - (boxwidth / 2), 0, linewidth - boxwidth), 0); +} + void QueryString::DrawEditBox(const Window *w, WidgetID wid) const { const NWidgetLeaf *wi = w->GetWidget(wid); @@ -805,24 +824,29 @@ void QueryString::DrawEditBox(const Window *w, WidgetID wid) const /* Limit the drawing of the string inside the widget boundaries */ DrawPixelInfo dpi; if (!FillDrawPixelInfo(&dpi, fr)) return; + /* Keep coordinates relative to the window. */ + dpi.left += fr.left; + dpi.top += fr.top; AutoRestoreBackup dpi_backup(_cur_dpi, &dpi); /* We will take the current widget length as maximum width, with a small * space reserved at the end for the caret to show */ const Textbuf *tb = &this->text; - int delta = std::min(0, (fr.right - fr.left) - tb->pixels - GetCaretWidth()); - - if (tb->caretxoffs + delta < 0) delta = -tb->caretxoffs; + fr = ScrollEditBoxTextRect(fr, *tb); /* If we have a marked area, draw a background highlight. */ - if (tb->marklength != 0) GfxFillRect(delta + tb->markxoffs, 0, delta + tb->markxoffs + tb->marklength - 1, fr.bottom - fr.top, PC_GREY); + if (tb->marklength != 0) GfxFillRect(fr.left + tb->markxoffs, fr.top, fr.left + tb->markxoffs + tb->marklength - 1, fr.bottom, PC_GREY); - DrawString(delta, tb->pixels, 0, tb->buf, TC_YELLOW); + DrawString(fr.left, fr.right, CenterBounds(fr.top, fr.bottom, GetCharacterHeight(FS_NORMAL)), tb->buf, TC_YELLOW); bool focussed = w->IsWidgetGloballyFocused(wid) || IsOSKOpenedFor(w, wid); if (focussed && tb->caret) { - int caret_width = GetStringBoundingBox("_").width; - DrawString(tb->caretxoffs + delta, tb->caretxoffs + delta + caret_width, 0, "_", TC_WHITE); + int caret_width = GetCaretWidth(); + if (rtl) { + DrawString(fr.right - tb->pixels + tb->caretxoffs - caret_width, fr.right - tb->pixels + tb->caretxoffs, CenterBounds(fr.top, fr.bottom, GetCharacterHeight(FS_NORMAL)), "_", TC_WHITE); + } else { + DrawString(fr.left + tb->caretxoffs, fr.left + tb->caretxoffs + caret_width, CenterBounds(fr.top, fr.bottom, GetCharacterHeight(FS_NORMAL)), "_", TC_WHITE); + } } } @@ -846,10 +870,9 @@ Point QueryString::GetCaretPosition(const Window *w, WidgetID wid) const /* Clamp caret position to be inside out current width. */ const Textbuf *tb = &this->text; - int delta = std::min(0, (r.right - r.left) - tb->pixels - GetCaretWidth()); - if (tb->caretxoffs + delta < 0) delta = -tb->caretxoffs; + r = ScrollEditBoxTextRect(r, *tb); - Point pt = {r.left + tb->caretxoffs + delta, r.top}; + Point pt = {r.left + tb->caretxoffs, r.top}; return pt; } @@ -875,14 +898,13 @@ Rect QueryString::GetBoundingRect(const Window *w, WidgetID wid, const char *fro /* Clamp caret position to be inside our current width. */ const Textbuf *tb = &this->text; - int delta = std::min(0, r.Width() - tb->pixels - GetCaretWidth()); - if (tb->caretxoffs + delta < 0) delta = -tb->caretxoffs; + r = ScrollEditBoxTextRect(r, *tb); /* Get location of first and last character. */ Point p1 = GetCharPosInString(tb->buf, from, FS_NORMAL); Point p2 = from != to ? GetCharPosInString(tb->buf, to, FS_NORMAL) : p1; - return { Clamp(r.left + p1.x + delta, r.left, r.right), r.top, Clamp(r.left + p2.x + delta, r.left, r.right), r.bottom }; + return { Clamp(r.left + p1.x, r.left, r.right), r.top, Clamp(r.left + p2.x, r.left, r.right), r.bottom }; } /** @@ -908,10 +930,9 @@ ptrdiff_t QueryString::GetCharAtPosition(const Window *w, WidgetID wid, const Po /* Clamp caret position to be inside our current width. */ const Textbuf *tb = &this->text; - int delta = std::min(0, r.Width() - tb->pixels - GetCaretWidth()); - if (tb->caretxoffs + delta < 0) delta = -tb->caretxoffs; + r = ScrollEditBoxTextRect(r, *tb); - return ::GetCharAtPosition(tb->buf, pt.x - delta - r.left); + return ::GetCharAtPosition(tb->buf, pt.x - r.left); } void QueryString::ClickEditBox(Window *w, Point pt, WidgetID wid, int click_count, bool focus_changed) From 1f636d94d41c76a56edb21a9bbe1433a109c8e37 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 5 Jun 2024 04:43:21 +0000 Subject: [PATCH 612/695] Update: Translations from eints finnish: 2 changes by hpiirai --- src/lang/finnish.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 6ed8e0f7fe..4055b73c88 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -310,8 +310,8 @@ STR_BUTTON_CANCEL :{BLACK}Peruuta STR_BUTTON_OK :{BLACK}OK # On screen keyboard window -STR_OSK_KEYBOARD_LAYOUT :§1234567890+´ qwertyuiopå¨asdfghjklöä' zxcvbnm,.- . -STR_OSK_KEYBOARD_LAYOUT_CAPS :½!"#¤%&/()=?` QWERTYUIOPÅ^ASDFGHJKLÖÄ* ZXCVBNM;:_ . +STR_OSK_KEYBOARD_LAYOUT :§1234567890+´ qwertyuiopå¨asdfghjklöä'ZXCVBNM;:_ . # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Pituus: {NUM} From fa24a3ec6b4b54f6c41c359b800aafe3396ae2a1 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 6 Jun 2024 04:41:41 +0000 Subject: [PATCH 613/695] Update: Translations from eints korean: 1 change by telk5093 --- src/lang/korean.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index be9589f04a..14b39323be 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1499,7 +1499,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :달력 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :벽시계 STR_CONFIG_SETTING_MINUTES_PER_YEAR :1년의 길이: {STRING}{ORANGE}분 -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :달력의 1년을 몇 분으로 할 지 선택합니다. 기본값은 12분입니다. 달력 시간이 변하는 것을 막으려면 0으로 설정하세요. 이 설정은 게임의 경제 시뮬레이션에는 영향을 미치지 않고, 벽시계 시간 설정을 사용할 때만 이용 가능합니다 +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :달력의 1년을 몇 분으로 할 지 선택합니다. 기본값은 12분입니다. 달력 시간이 변하는 것을 막으려면 0으로 설정하세요. 1년의 길이를 늘리면 차량, 주택 및 기타 기반 시설 도입이 느려집니다. 인플레이션을 제외하고 차량 속력이나 경제 시뮬레이션에는 영향을 미치지 않습니다. 이 설정은 벽시계 시간 모드를 사용할 때만 사용할 수 있습니다 STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special From fee73f32539fb338135dcb06af2009c05c613525 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 6 Jun 2024 08:29:20 +0100 Subject: [PATCH 614/695] Codechange: Split types out of newgrf_text.h --- src/CMakeLists.txt | 1 + src/newgrf_text.h | 40 +-------------------------------- src/newgrf_text_type.h | 50 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 39 deletions(-) create mode 100644 src/newgrf_text_type.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9b946e02a1..5f7847ff8a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -307,6 +307,7 @@ add_files( newgrf_storage.h newgrf_text.cpp newgrf_text.h + newgrf_text_type.h newgrf_town.cpp newgrf_town.h newgrf_townname.cpp diff --git a/src/newgrf_text.h b/src/newgrf_text.h index dfefac89ed..bcd27190c6 100644 --- a/src/newgrf_text.h +++ b/src/newgrf_text.h @@ -10,24 +10,9 @@ #ifndef NEWGRF_TEXT_H #define NEWGRF_TEXT_H -#include "string_type.h" +#include "newgrf_text_type.h" #include "strings_type.h" #include "table/control_codes.h" -#include - -/** This character, the thorn ('þ'), indicates a unicode string to NFO. */ -static const char32_t NFO_UTF8_IDENTIFIER = 0x00DE; - -/** A GRF text with associated language ID. */ -struct GRFText { - uint8_t langid; ///< The language associated with this GRFText. - std::string text; ///< The actual (translated) text. -}; - -/** A GRF text with a list of translations. */ -typedef std::vector GRFTextList; -/** Reference counted wrapper around a GRFText pointer. */ -typedef std::shared_ptr GRFTextWrapper; StringID AddGRFString(uint32_t grfid, uint16_t stringid, uint8_t langid, bool new_scheme, bool allow_newlines, std::string_view text_to_add, StringID def_string); StringID GetGRFStringID(uint32_t grfid, StringID stringid); @@ -49,27 +34,4 @@ bool UsingNewGRFTextStack(); struct TextRefStack *CreateTextRefStackBackup(); void RestoreTextRefStackBackup(struct TextRefStack *backup); -/** Mapping of language data between a NewGRF and OpenTTD. */ -struct LanguageMap { - /** Mapping between NewGRF and OpenTTD IDs. */ - struct Mapping { - uint8_t newgrf_id; ///< NewGRF's internal ID for a case/gender. - uint8_t openttd_id; ///< OpenTTD's internal ID for a case/gender. - }; - - /* We need a vector and can't use SmallMap due to the fact that for "setting" a - * gender of a string or requesting a case for a substring we want to map from - * the NewGRF's internal ID to OpenTTD's ID whereas for the choice lists we map - * the genders/cases/plural OpenTTD IDs to the NewGRF's internal IDs. In this - * case a NewGRF developer/translator might want a different translation for - * both cases. Thus we are basically implementing a multi-map. */ - std::vector gender_map; ///< Mapping of NewGRF and OpenTTD IDs for genders. - std::vector case_map; ///< Mapping of NewGRF and OpenTTD IDs for cases. - int plural_form; ///< The plural form used for this language. - - int GetMapping(int newgrf_id, bool gender) const; - int GetReverseMapping(int openttd_id, bool gender) const; - static const LanguageMap *GetLanguageMap(uint32_t grfid, uint8_t language_id); -}; - #endif /* NEWGRF_TEXT_H */ diff --git a/src/newgrf_text_type.h b/src/newgrf_text_type.h new file mode 100644 index 0000000000..374046237a --- /dev/null +++ b/src/newgrf_text_type.h @@ -0,0 +1,50 @@ +/* + * 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 newgrf_text_type.h Header of Action 04 "universal holder" structure */ + +#ifndef NEWGRF_TEXT_TYPE_H +#define NEWGRF_TEXT_TYPE_H + +/** This character (thorn) indicates a unicode string to NFO. */ +static const char32_t NFO_UTF8_IDENTIFIER = 0x00DE; + +/** A GRF text with associated language ID. */ +struct GRFText { + uint8_t langid; ///< The language associated with this GRFText. + std::string text; ///< The actual (translated) text. +}; + +/** A GRF text with a list of translations. */ +using GRFTextList = std::vector; +/** Reference counted wrapper around a GRFText pointer. */ +using GRFTextWrapper = std::shared_ptr; + +/** Mapping of language data between a NewGRF and OpenTTD. */ +struct LanguageMap { + /** Mapping between NewGRF and OpenTTD IDs. */ + struct Mapping { + uint8_t newgrf_id; ///< NewGRF's internal ID for a case/gender. + uint8_t openttd_id; ///< OpenTTD's internal ID for a case/gender. + }; + + /* We need a vector and can't use SmallMap due to the fact that for "setting" a + * gender of a string or requesting a case for a substring we want to map from + * the NewGRF's internal ID to OpenTTD's ID whereas for the choice lists we map + * the genders/cases/plural OpenTTD IDs to the NewGRF's internal IDs. In this + * case a NewGRF developer/translator might want a different translation for + * both cases. Thus we are basically implementing a multi-map. */ + std::vector gender_map; ///< Mapping of NewGRF and OpenTTD IDs for genders. + std::vector case_map; ///< Mapping of NewGRF and OpenTTD IDs for cases. + int plural_form; ///< The plural form used for this language. + + int GetMapping(int newgrf_id, bool gender) const; + int GetReverseMapping(int openttd_id, bool gender) const; + static const LanguageMap *GetLanguageMap(uint32_t grfid, uint8_t language_id); +}; + +#endif /* NEWGRF_TEXT_TYPE_H */ From 66044472d7b34bc358ccea744f98804376c7ea76 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 10 Mar 2024 19:48:44 +0000 Subject: [PATCH 615/695] Codechange: Use std::unordered_map for NewGRF language_map. NewGRFs only use a small subset of the available language IDs. Using an unordered_map allows only the reference languages to have space allocated. This avoids manual new/delete of array. --- src/newgrf.cpp | 14 ++++++-------- src/newgrf.h | 4 ++-- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 92ccd79b3b..d547674e68 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -2644,7 +2644,12 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt { /* LanguageID "MAX_LANG", i.e. 7F is any. This language can't have a gender/case mapping, but has to be handled gracefully. */ const GRFFile *grffile = GetFileByGRFID(grfid); - return (grffile != nullptr && grffile->language_map != nullptr && language_id < MAX_LANG) ? &grffile->language_map[language_id] : nullptr; + if (grffile == nullptr) return nullptr; + + auto it = grffile->language_map.find(language_id); + if (it == std::end(grffile->language_map)) return nullptr; + + return &it->second; } /** @@ -2859,8 +2864,6 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By break; } - if (_cur.grffile->language_map == nullptr) _cur.grffile->language_map = new LanguageMap[MAX_LANG]; - if (prop == 0x15) { uint plural_form = buf->ReadByte(); if (plural_form >= LANGUAGE_MAX_PLURAL) { @@ -8933,11 +8936,6 @@ GRFFile::GRFFile(const GRFConfig *config) this->param_end = config->num_params; } -GRFFile::~GRFFile() -{ - delete[] this->language_map; -} - /** * Find first cargo label that exists and is active from a list of cargo labels. * @param labels List of cargo labels. diff --git a/src/newgrf.h b/src/newgrf.h index 18d643a14b..f67f802320 100644 --- a/src/newgrf.h +++ b/src/newgrf.h @@ -14,6 +14,7 @@ #include "rail_type.h" #include "road_type.h" #include "fileio_type.h" +#include "newgrf_text_type.h" #include "core/bitmath_func.hpp" #include "core/alloc_type.hpp" #include "core/mem_func.hpp" @@ -140,7 +141,7 @@ struct GRFFile : ZeroedMemoryAllocator { CanalProperties canal_local_properties[CF_END]; ///< Canal properties as set by this NewGRF - struct LanguageMap *language_map; ///< Mappings related to the languages. + std::unordered_map language_map; ///< Mappings related to the languages. int traininfo_vehicle_pitch; ///< Vertical offset for drawing train images in depot GUI and vehicle details uint traininfo_vehicle_width; ///< Width (in pixels) of a 8/8 train vehicle in depot GUI and vehicle details @@ -149,7 +150,6 @@ struct GRFFile : ZeroedMemoryAllocator { PriceMultipliers price_base_multipliers; ///< Price base multipliers as set by the grf. GRFFile(const struct GRFConfig *config); - ~GRFFile(); /** Get GRF Parameter with range checking */ uint32_t GetParam(uint number) const From 79b573704b5c800e0481bdfc474f5c0366b0e539 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 7 Jun 2024 04:43:07 +0000 Subject: [PATCH 616/695] Update: Translations from eints french: 1 change by ottdfevr portuguese: 2 changes by azulcosta polish: 33 changes by pAter-exe --- src/lang/french.txt | 2 +- src/lang/polish.txt | 38 +++++++++++++++++++++++++++++++++----- src/lang/portuguese.txt | 4 ++-- 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/lang/french.txt b/src/lang/french.txt index 7d82c7d0e2..dc097b1abb 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1499,7 +1499,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendrier STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Pendule STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutes par année{NBSP}: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Sélectionner le nombre de minutes dans une année calendaire. La valeur par défaut est 12 minutes.Régler sur 0 pour arrêter la progression du calendrier. Ce paramètre n'affecte pas la simulation économique du jeu, et il n'est disponible qu'en utilisant le mode "pendule" +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Sélectionner le nombre de minutes dans une année calendaire. La valeur par défaut est 12 minutes. Régler sur 0 pour arrêter la progression du calendrier. Augmenter cette valeur ralentit la mise à disposition de véhicules, maisons, et autres infrastructures. Cela n'affecte ni la vitesse des véhicules, ni la simulation économique, excepté l'inflation. Ce paramètre n'est disponible qu'en utilisant le mode "pendule". STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 9b95092768..7e8f58b918 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -689,7 +689,7 @@ STR_BUTTON_CANCEL :{BLACK}Anuluj STR_BUTTON_OK :{BLACK}OK # On screen keyboard window -STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . +STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:" ZXCVBNM<>? . # Measurement tooltip @@ -816,6 +816,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Opuść edytor STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Wyjście +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Tworzenie miast +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Stawianie budynków # Settings menu ###length 16 @@ -1000,7 +1002,7 @@ STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLA STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Wyłącz wszystko STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Wyświetl wszystkie ładunki na wykresie stawek za ładunek STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Ukryj wszystkie ładunki na wykresie stawek za ładunek -STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Przełącznik wykresu ładunku wł./wył. +STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Przełącz ukrywanie/wyświetlanie wykresu danego typu ładunku STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Pokaż szczegóły oceny wydajności @@ -1876,7 +1878,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalendarz STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Tarcza zegara STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minuty na rok: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Wybierz liczbę minut trwania jednego roku kalendarzowego. Domyślnie jest to 12 minut. Ustaw na 0, aby wstrzymać zmianę daty kalendarza. To ustawienie nie ma wpływu na symulację ekonomiczną gry i jest dostępne tylko w przypadku korzystania z zegarowej miary czasu +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Wybierz liczbę minut trwania jednego roku kalendarzowego. Domyślnie jest to 12 minut. Ustaw na 0, aby wstrzymać zmianę daty kalendarza. Zwiększenie długości roku kalendarzowego opóźnia wprowadzanie pojazdów, budynków i innej infrastruktury. Nie wpływa to na prędkość pojazdów, ani symulację ekonomii, z wyjątkiem inflacji. To ustawienie jest dostępne tylko w przypadku korzystania z zegarowej miary czasu STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special @@ -3178,9 +3180,32 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Wybierz STR_STATION_BUILD_DRAG_DROP :{BLACK}Przeciągnij i upuść STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Buduj stację używając „przeciągnij i upuść” +STR_PICKER_MODE_ALL :Wszystkie +STR_PICKER_MODE_ALL_TOOLTIP :Przełącz wyświetlanie elementów ze wszystkich klas +STR_PICKER_MODE_USED :Użyte +STR_PICKER_MODE_USED_TOOLTIP :Przełącz wyświetlanie tylko już istniejących elementów +STR_PICKER_MODE_SAVED :Zapisane +STR_PICKER_MODE_SAVED_TOOLTIP :Przełącz wyświetlanie tylko zapisanych elementów +STR_PICKER_STATION_CLASS_TOOLTIP :Wybierz klasę stacji do wyświetlenia +STR_PICKER_STATION_TYPE_TOOLTIP :Wybierz typ stacji do zbudowania. Użyj Ctrl, aby dodać lub usunąć z zapisanych elementów +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Wybierz klasę posterunku do wyświetlenia +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Wybierz typ posterunku do zbudowania. Użyj Ctrl, aby dodać lub usunąć z zapisanych elementów +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Wybierz klasę przystanku do wyświetlenia +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Wybierz typ przystanku do zbudowania. Użyj Ctrl, aby dodać lub usunąć z zapisanych elementów +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Wybierz klasę stacji ciężarówek do wyświetlenia +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Wybierz typ stacji ciężarówek do zbudowania. Użyj Ctrl, aby dodać lub usunąć z zapisanych elementów +STR_PICKER_OBJECT_CLASS_TOOLTIP :Wybierz klasę obiektu do wyświetlenia +STR_PICKER_OBJECT_TYPE_TOOLTIP :Wybierz typ obiektu do zbudowania. Użyj Ctrl, aby dodać lub usunąć z zapisanych elementów. Przeciągnij z użyciem Ctrl, aby zaznaczyć obszar po przekątnej. Użyj Shift, aby tylko wyświetlić szacunkowy koszt +STR_PICKER_HOUSE_CLASS_TOOLTIP :Wybierz strefę miasta do wyświetlenia +STR_PICKER_HOUSE_TYPE_TOOLTIP :Wybierz typ budynku do zbudowania. Użyj Ctrl, aby dodać lub usunąć z zapisanych elementów +STR_HOUSE_PICKER_CAPTION :Wybór Budynków +STR_HOUSE_PICKER_CLASS_ZONE1 :Obrzeża +STR_HOUSE_PICKER_CLASS_ZONE2 :Peryferia +STR_HOUSE_PICKER_CLASS_ZONE3 :Przedmieścia zewnętrzne +STR_HOUSE_PICKER_CLASS_ZONE4 :Przedmieścia wewnętrzne STR_HOUSE_PICKER_CLASS_ZONE5 :Centrum miasta STR_STATION_CLASS_DFLT :Standardowa @@ -3350,7 +3375,7 @@ STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Umieść STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Wyznacz obszar pustyni.{}Użyj Ctrl, aby usunąć obszar pustyni STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Zwiększ powierzchnie do podwyższenia/obniżenia STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Zmniejsz powierzchnie do podwyższenia/obniżenia -STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Tworzenie przypadkowego lądu +STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Wygeneruj losowy teren STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Stwórz nowy scenariusz STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Resetuj krajobraz STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Usuń całą własność firmy z mapy @@ -3359,7 +3384,7 @@ STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Resetuj STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Czy na pewno chcesz usunąć całą własność firmy? # Town generation window (SE) -STR_FOUND_TOWN_CAPTION :{WHITE}Tworzenie miast +STR_FOUND_TOWN_CAPTION :{WHITE}Tworzenie Miast STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Nowe miasto STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Zbuduj nowe miasto. Użyj Shift, aby tylko wyświetlić szacunkowy koszt STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Losowe miasto @@ -5375,6 +5400,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... nie STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Trwają roboty drogowe STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Nie można usunąć tego miasta...{}Stacja lub zajezdnia przynależy do tego miasta lub obszar miasta nie może być usunięty STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... w centrum tego miasta nie ma odpowiedniego miejsca na pomnik +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Nie można postawić budynku... # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... zbyt wiele przedsiębiorstw @@ -5412,6 +5438,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Nie moż STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Przylega do więcej niż jednej stacji STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... stacja zbyt rozległa +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... nieobsługiwana liczba torów +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... nieobsługiwana długość STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Za dużo stacji STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Za dużo części stacji kolejowej STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Zbyt wiele przystanków autobusowych diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 22c3cbd39b..303822d984 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -311,8 +311,8 @@ STR_BUTTON_CANCEL :{BLACK}Cancelar STR_BUTTON_OK :{BLACK}Confirmar # On screen keyboard window -STR_OSK_KEYBOARD_LAYOUT :\1234567890'« qwertyuiop+´asdfghjklçº~ZXCVBNM;:_ +STR_OSK_KEYBOARD_LAYOUT :`1234567890-= qwertyuiop[]asdfghjkl;'#\zxcvbnm,./ . +STR_OSK_KEYBOARD_LAYOUT_CAPS :¬!"£$%^&*()_+ QWERTYUIOP{{}}ASDFGHJKL:@~|ZXCVBNM<>? . # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Tamanho: {NUM} From df1b6a933bc0208e4b62d6ee44359a15fa2354fe Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 7 Jun 2024 21:57:18 +0100 Subject: [PATCH 617/695] Fix #12764: Crash when opening Detailed performance rating window with no companies. (#12765) --- src/graph_gui.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 10d7e1c495..e705e3749a 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -1402,7 +1402,9 @@ struct PerformanceRatingDetailWindow : Window { } /* Make sure the widget is lowered */ - this->LowerWidget(WID_PRD_COMPANY_FIRST + this->company); + if (this->company != INVALID_COMPANY) { + this->LowerWidget(WID_PRD_COMPANY_FIRST + this->company); + } } }; From d7eb29d2922e10cd1f2fa8d7bba8069931e0a3f6 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 8 Jun 2024 04:42:12 +0000 Subject: [PATCH 618/695] Update: Translations from eints dutch: 2 changes by Afoklala --- src/lang/dutch.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index c6b7e06c56..f255f6003a 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -310,8 +310,8 @@ STR_BUTTON_CANCEL :{BLACK}Annulere STR_BUTTON_OK :{BLACK}OK # On screen keyboard window -STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . -STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:" ZXCVBNM<>? . +STR_OSK_KEYBOARD_LAYOUT :`1234567890-= qwertyuiop[]asdfghjkl;'#\zxcvbnm,./ . +STR_OSK_KEYBOARD_LAYOUT_CAPS :¬!"£$%^&*()_+ QWERTYUIOP{{}}ASDFGHJKL:@~|ZXCVBNM<>? . # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Lengte: {NUM} From af7ad964dd205a0731a8e62463272e546f690c2b Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 8 Jun 2024 21:21:02 +0100 Subject: [PATCH 619/695] Codechange: Avoid unnecessary allocation of temporaries in layout line cache (#12737) --- src/gfx_layout.cpp | 2 +- src/gfx_layout.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index 392ba1fa4a..fbdfe10ec2 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -388,7 +388,7 @@ Layouter::LineCacheItem &Layouter::GetCachedParagraphLayout(std::string_view str LineCacheKey key; key.state_before = state; key.str.assign(str); - return (*linecache)[key]; + return (*linecache)[std::move(key)]; } /** diff --git a/src/gfx_layout.h b/src/gfx_layout.h index 42b809f561..f635d80dc3 100644 --- a/src/gfx_layout.h +++ b/src/gfx_layout.h @@ -132,7 +132,7 @@ class Layouter : public std::vector Date: Sat, 8 Jun 2024 21:59:56 +0100 Subject: [PATCH 620/695] Codechange: Use unique_ptr in MemoryDumper. (#12766) This replaces C-style manual memory management. --- src/saveload/saveload.cpp | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index ded1a83467..6155e3723d 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -126,21 +126,9 @@ struct ReadBuffer { /** Container for dumping the savegame (quickly) to memory. */ struct MemoryDumper { - std::vector blocks; ///< Buffer with blocks of allocated memory. - uint8_t *buf; ///< Buffer we're going to write to. - uint8_t *bufe; ///< End of the buffer we write to. - - /** Initialise our variables. */ - MemoryDumper() : buf(nullptr), bufe(nullptr) - { - } - - ~MemoryDumper() - { - for (auto p : this->blocks) { - free(p); - } - } + std::vector> blocks{}; ///< Buffer with blocks of allocated memory. + uint8_t *buf = nullptr; ///< Buffer we're going to write to. + uint8_t *bufe = nullptr; ///< End of the buffer we write to. /** * Write a single byte into the dumper. @@ -150,8 +138,7 @@ struct MemoryDumper { { /* Are we at the end of this chunk? */ if (this->buf == this->bufe) { - this->buf = CallocT(MEMORY_CHUNK_SIZE); - this->blocks.push_back(this->buf); + this->buf = this->blocks.emplace_back(std::make_unique(MEMORY_CHUNK_SIZE)).get(); this->bufe = this->buf + MEMORY_CHUNK_SIZE; } @@ -170,7 +157,7 @@ struct MemoryDumper { while (t > 0) { size_t to_write = std::min(MEMORY_CHUNK_SIZE, t); - writer->Write(this->blocks[i++], to_write); + writer->Write(this->blocks[i++].get(), to_write); t -= to_write; } From 6bf214af6ebf6c2090160e037bcc66a3866ef792 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 9 Jun 2024 04:41:27 +0000 Subject: [PATCH 621/695] Update: Translations from eints vietnamese: 3 changes by KhoiCanDev polish: 13 changes by pAter-exe --- src/lang/polish.txt | 26 +++++++++++++------------- src/lang/vietnamese.txt | 6 +++--- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 7e8f58b918..55ef48909e 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -647,7 +647,7 @@ STR_UNITS_PERIODS :{NUM}{NBSP}okre # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtr: -STR_LIST_FILTER_OSKTITLE :{BLACK}Wpisz jedno lub więcej słów kluczowych, aby przefiltrować listę +STR_LIST_FILTER_OSKTITLE :{BLACK}Wpisz jedno lub więcej słów, aby przefiltrować listę STR_LIST_FILTER_TOOLTIP :{BLACK}Wpisz jedno lub więcej słów kluczowych, aby przefiltrować listę STR_TOOLTIP_GROUP_ORDER :{BLACK}Wybierz kolejność grupowania @@ -690,7 +690,7 @@ STR_BUTTON_OK :{BLACK}OK # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . -STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:" ZXCVBNM<>? . +STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:" ZXCVBNM<>? . # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Długość: {NUM} @@ -1009,7 +1009,7 @@ STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Pokaż s # Graph key window STR_GRAPH_KEY_CAPTION :{WHITE}Legenda do wykresów firm -STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Kliknij tutaj aby wł./wył. wyświetlanie danych firmy na wykresie +STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Kliknij tutaj, aby przełączyć wyświetlanie wykresu firmy # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Ranking firm @@ -3120,7 +3120,7 @@ STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Średni czas podróży: {UNITS_DAYS_OR_SECONDS} # Base for station construction window(s) -STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Podświetlaj zasięg +STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Podświetlanie zasięgu STR_STATION_BUILD_COVERAGE_OFF :{BLACK}Wył. STR_STATION_BUILD_COVERAGE_ON :{BLACK}Wł. STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Nie podświetlaj zasięgu projektowanej stacji @@ -3173,8 +3173,8 @@ STR_WAYPOINT_CAPTION :{WHITE}Posterun STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Wybór stacji STR_STATION_BUILD_ORIENTATION :{BLACK}Ukierunkowanie STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}Wybierz ukierunkowanie stacji -STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Ilość peronów -STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Wybierz ilość peronów na stacji +STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Liczba peronów +STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Wybierz liczbę peronów stacji STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Długość peronu STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Wybierz długość stacji STR_STATION_BUILD_DRAG_DROP :{BLACK}Przeciągnij i upuść @@ -3643,12 +3643,12 @@ STR_SAVELOAD_SAVE_SCENARIO :{WHITE}Zapisz s STR_SAVELOAD_LOAD_SCENARIO :{WHITE}Wczytaj scenariusz STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Wczytaj mapę wysokości STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Zapisz mapę wysokości -STR_SAVELOAD_HOME_BUTTON :{BLACK}Kliknij tutaj aby przejść do domyślnego katalogu +STR_SAVELOAD_HOME_BUTTON :{BLACK}Kliknij tutaj, aby przejść do domyślnego katalogu zapisów STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} wolnego miejsca STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Lista napędów, katalogów i zapisanych gier -STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Obecnie zaznaczona nazwa dla zapisanej gry +STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Obecnie wybrana nazwa dla zapisywanej gry STR_SAVELOAD_DELETE_BUTTON :{BLACK}Usuń -STR_SAVELOAD_DELETE_TOOLTIP :{BLACK}Skasuj zaznaczoną zapisaną grę +STR_SAVELOAD_DELETE_TOOLTIP :{BLACK}Usuń zaznaczony zapis gry STR_SAVELOAD_SAVE_BUTTON :{BLACK}Zapisz STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Zapisz bieżącą grę używając wybranej nazwy STR_SAVELOAD_LOAD_BUTTON :{BLACK}Wczytaj @@ -3664,7 +3664,7 @@ STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Czy na STR_SAVELOAD_DIRECTORY :{STRING} (folder) STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (folder nadrzędny) -STR_SAVELOAD_OSKTITLE :{BLACK}Wprowadź nazwę pod jaką zapisać grę +STR_SAVELOAD_OSKTITLE :{BLACK}Wprowadź nazwę dla zapisywanej gry # World generation STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Tworzenie świata @@ -4627,9 +4627,9 @@ STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Pokaż l ###length VEHICLE_TYPES STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP :{BLACK}Kliknij, aby zatrzymać wszystkie pociągi w hali warsztatów -STR_DEPOT_MASS_STOP_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Kliknij aby zatrzymać wszystkie pojazdy w zajezdni -STR_DEPOT_MASS_STOP_DEPOT_SHIP_TOOLTIP :{BLACK}Kliknij aby zatrzymać wszystkie statki w stoczni -STR_DEPOT_MASS_STOP_HANGAR_TOOLTIP :{BLACK}Kliknij aby zatrzymać wszystkie samoloty w hangarze +STR_DEPOT_MASS_STOP_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Kliknij, aby zatrzymać wszystkie pojazdy w zajezdni +STR_DEPOT_MASS_STOP_DEPOT_SHIP_TOOLTIP :{BLACK}Kliknij, aby zatrzymać wszystkie statki w stoczni +STR_DEPOT_MASS_STOP_HANGAR_TOOLTIP :{BLACK}Kliknij, aby zatrzymać wszystkie samoloty w hangarze ###length VEHICLE_TYPES STR_DEPOT_MASS_START_DEPOT_TRAIN_TOOLTIP :{BLACK}Kliknij, aby uruchomić wszystkie pociągi z warsztatów diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index de61386a2d..9ad2284e10 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -310,8 +310,8 @@ STR_BUTTON_CANCEL :{BLACK}Thôi STR_BUTTON_OK :{BLACK}Đồng ý # On screen keyboard window -STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . -STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:" ZXCVBNM<>? . +STR_OSK_KEYBOARD_LAYOUT :`1234567890-= qwertyuiop[]asdfghjkl;'#\zxcvbnm,./ . +STR_OSK_KEYBOARD_LAYOUT_CAPS :¬!"£$%^&*()_+ QWERTYUIOP{{}}ASDFGHJKL:@~|ZXCVBNM<>? . # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Chiều dài: {NUM} @@ -1498,7 +1498,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Lịch STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Đồng hồ tính giờ STR_CONFIG_SETTING_MINUTES_PER_YEAR :Số phút tính cho mỗi năm: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Chọn số phút trong mỗi lịch năm. Mặc định là 12 phút/năm. Đặt bằng 0 để ngưng lịch thời gian. Tuỳ chọn này sẽ không ảnh hưởng đến việc giả lập kinh tế trong trò chơi, và nó chỉ sẵn có khi sử dụng đồng hồ giữ nhịp +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Chọn số phút tương ứng với một năm trong trò chơi. Mặc định là 12 phút. Đặt bằng 0 để ngưng đọng thời gian. Tăng giá trị này có thể làm chậm việc ra mắt những mẫu phương tiện, nhà cửa, và những cơ sở hạ tầng khác. Giá trị này không làm ảnh hưởng tới tốc độ của phương tiện hoặc nền kinh tế trong trò chơi, ngoại trừ lạm phát. Thiết lập này chỉ được dùng khi sử dụng đồng hồ tính giờ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special From bbbf2b5282d69663462e3087e379567659f41d79 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 1 Jun 2024 22:32:36 +0100 Subject: [PATCH 622/695] Codechange: Return read-only span instead of vector from layout run functions. --- src/gfx_layout.h | 6 +++--- src/gfx_layout_fallback.cpp | 6 +++--- src/gfx_layout_icu.cpp | 6 +++--- src/os/macosx/string_osx.cpp | 6 +++--- src/os/windows/string_uniscribe.cpp | 8 ++++---- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/gfx_layout.h b/src/gfx_layout.h index f635d80dc3..90aa7bd84b 100644 --- a/src/gfx_layout.h +++ b/src/gfx_layout.h @@ -96,10 +96,10 @@ public: virtual ~VisualRun() = default; virtual const Font *GetFont() const = 0; virtual int GetGlyphCount() const = 0; - virtual const std::vector &GetGlyphs() const = 0; - virtual const std::vector &GetPositions() const = 0; + virtual std::span GetGlyphs() const = 0; + virtual std::span GetPositions() const = 0; virtual int GetLeading() const = 0; - virtual const std::vector &GetGlyphToCharMap() const = 0; + virtual std::span GetGlyphToCharMap() const = 0; }; /** A single line worth of VisualRuns. */ diff --git a/src/gfx_layout_fallback.cpp b/src/gfx_layout_fallback.cpp index 2b8fc617eb..a169cb75b6 100644 --- a/src/gfx_layout_fallback.cpp +++ b/src/gfx_layout_fallback.cpp @@ -49,10 +49,10 @@ public: FallbackVisualRun(Font *font, const char32_t *chars, int glyph_count, int char_offset, int x); const Font *GetFont() const override { return this->font; } int GetGlyphCount() const override { return static_cast(this->glyphs.size()); } - const std::vector &GetGlyphs() const override { return this->glyphs; } - const std::vector &GetPositions() const override { return this->positions; } + std::span GetGlyphs() const override { return this->glyphs; } + std::span GetPositions() const override { return this->positions; } int GetLeading() const override { return this->GetFont()->fc->GetHeight(); } - const std::vector &GetGlyphToCharMap() const override { return this->glyph_to_char; } + std::span GetGlyphToCharMap() const override { return this->glyph_to_char; } }; /** A single line worth of VisualRuns. */ diff --git a/src/gfx_layout_icu.cpp b/src/gfx_layout_icu.cpp index a300d9a255..9947e62391 100644 --- a/src/gfx_layout_icu.cpp +++ b/src/gfx_layout_icu.cpp @@ -71,9 +71,9 @@ public: public: ICUVisualRun(const ICURun &run, int x); - const std::vector &GetGlyphs() const override { return this->glyphs; } - const std::vector &GetPositions() const override { return this->positions; } - const std::vector &GetGlyphToCharMap() const override { return this->glyph_to_char; } + std::span GetGlyphs() const override { return this->glyphs; } + std::span GetPositions() const override { return this->positions; } + std::span GetGlyphToCharMap() const override { return this->glyph_to_char; } const Font *GetFont() const override { return this->font; } int GetLeading() const override { return this->font->fc->GetHeight(); } diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp index 6a7a45285e..08cf974f23 100644 --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -81,9 +81,9 @@ public: CoreTextVisualRun(CTRunRef run, Font *font, const CoreTextParagraphLayoutFactory::CharType *buff); CoreTextVisualRun(CoreTextVisualRun &&other) = default; - const std::vector &GetGlyphs() const override { return this->glyphs; } - const std::vector &GetPositions() const override { return this->positions; } - const std::vector &GetGlyphToCharMap() const override { return this->glyph_to_char; } + std::span GetGlyphs() const override { return this->glyphs; } + std::span GetPositions() const override { return this->positions; } + std::span GetGlyphToCharMap() const override { return this->glyph_to_char; } const Font *GetFont() const override { return this->font; } int GetLeading() const override { return this->font->fc->GetHeight(); } diff --git a/src/os/windows/string_uniscribe.cpp b/src/os/windows/string_uniscribe.cpp index 2baace1eda..7b289734d2 100644 --- a/src/os/windows/string_uniscribe.cpp +++ b/src/os/windows/string_uniscribe.cpp @@ -88,9 +88,9 @@ public: UniscribeVisualRun(const UniscribeRun &range, int x); UniscribeVisualRun(UniscribeVisualRun &&other) noexcept; - const std::vector &GetGlyphs() const override { return this->glyphs; } - const std::vector &GetPositions() const override { return this->positions; } - const std::vector &GetGlyphToCharMap() const override; + std::span GetGlyphs() const override { return this->glyphs; } + std::span GetPositions() const override { return this->positions; } + std::span GetGlyphToCharMap() const override; const Font *GetFont() const override { return this->font; } int GetLeading() const override { return this->font->fc->GetHeight(); } @@ -493,7 +493,7 @@ UniscribeParagraphLayout::UniscribeVisualRun::UniscribeVisualRun(UniscribeVisual { } -const std::vector &UniscribeParagraphLayout::UniscribeVisualRun::GetGlyphToCharMap() const +std::span UniscribeParagraphLayout::UniscribeVisualRun::GetGlyphToCharMap() const { if (this->glyph_to_char.empty()) { this->glyph_to_char.resize(this->GetGlyphCount()); From 80ddcb9d7d297a1e29caa9d84b398200657dda10 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 1 Jun 2024 22:37:46 +0100 Subject: [PATCH 623/695] Codechange: Move GetCharPosInString/GetCharAtPosition to gfx_layout. These functions are related more to layouting than graphics. --- src/console_gui.cpp | 1 + src/gfx.cpp | 33 --------------------------------- src/gfx_func.h | 2 -- src/gfx_layout.cpp | 33 +++++++++++++++++++++++++++++++++ src/gfx_layout.h | 3 +++ src/misc_gui.cpp | 1 + src/textbuf.cpp | 1 + 7 files changed, 39 insertions(+), 35 deletions(-) diff --git a/src/console_gui.cpp b/src/console_gui.cpp index 3fbf93faf5..a95a5e0c80 100644 --- a/src/console_gui.cpp +++ b/src/console_gui.cpp @@ -17,6 +17,7 @@ #include "string_func.h" #include "strings_func.h" #include "gfx_func.h" +#include "gfx_layout.h" #include "settings_type.h" #include "console_func.h" #include "rev.h" diff --git a/src/gfx.cpp b/src/gfx.cpp index 5cc3ee9b90..51a053a354 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -895,39 +895,6 @@ Dimension GetStringListBoundingBox(std::span list, FontSize font return d; } -/** - * Get the leading corner of a character in a single-line string relative - * to the start of the string. - * @param str String containing the character. - * @param ch Pointer to the character in the string. - * @param start_fontsize Font size to start the text with. - * @return Upper left corner of the glyph associated with the character. - */ -Point GetCharPosInString(std::string_view str, const char *ch, FontSize start_fontsize) -{ - /* Ensure "ch" is inside "str" or at the exact end. */ - assert(ch >= str.data() && (ch - str.data()) <= static_cast(str.size())); - auto it_ch = str.begin() + (ch - str.data()); - - Layouter layout(str, INT32_MAX, start_fontsize); - return layout.GetCharPosition(it_ch); -} - -/** - * Get the character from a string that is drawn at a specific position. - * @param str String to test. - * @param x Position relative to the start of the string. - * @param start_fontsize Font size to start the text with. - * @return Index of the character position or -1 if there is no character at the position. - */ -ptrdiff_t GetCharAtPosition(std::string_view str, int x, FontSize start_fontsize) -{ - if (x < 0) return -1; - - Layouter layout(str, INT32_MAX, start_fontsize); - return layout.GetCharAtPosition(x, 0); -} - /** * Draw single character horizontally centered around (x,y) * @param c Character (glyph) to draw diff --git a/src/gfx_func.h b/src/gfx_func.h index d40431ba7b..63927c475d 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -142,8 +142,6 @@ int GetStringLineCount(StringID str, int maxw); Dimension GetStringMultiLineBoundingBox(StringID str, const Dimension &suggestion); Dimension GetStringMultiLineBoundingBox(std::string_view str, const Dimension &suggestion); void LoadStringWidthTable(bool monospace = false); -Point GetCharPosInString(std::string_view str, const char *ch, FontSize start_fontsize = FS_NORMAL); -ptrdiff_t GetCharAtPosition(std::string_view str, int x, FontSize start_fontsize = FS_NORMAL); void DrawDirtyBlocks(); void AddDirtyBlock(int left, int top, int right, int bottom); diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index fbdfe10ec2..fc355d79af 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -409,3 +409,36 @@ void Layouter::ReduceLineCache() if (linecache->size() > 4096) ResetLineCache(); } } + +/** + * Get the leading corner of a character in a single-line string relative + * to the start of the string. + * @param str String containing the character. + * @param ch Pointer to the character in the string. + * @param start_fontsize Font size to start the text with. + * @return Upper left corner of the glyph associated with the character. + */ +Point GetCharPosInString(std::string_view str, const char *ch, FontSize start_fontsize) +{ + /* Ensure "ch" is inside "str" or at the exact end. */ + assert(ch >= str.data() && (ch - str.data()) <= static_cast(str.size())); + auto it_ch = str.begin() + (ch - str.data()); + + Layouter layout(str, INT32_MAX, start_fontsize); + return layout.GetCharPosition(it_ch); +} + +/** + * Get the character from a string that is drawn at a specific position. + * @param str String to test. + * @param x Position relative to the start of the string. + * @param start_fontsize Font size to start the text with. + * @return Index of the character position or -1 if there is no character at the position. + */ +ptrdiff_t GetCharAtPosition(std::string_view str, int x, FontSize start_fontsize) +{ + if (x < 0) return -1; + + Layouter layout(str, INT32_MAX, start_fontsize); + return layout.GetCharAtPosition(x, 0); +} diff --git a/src/gfx_layout.h b/src/gfx_layout.h index 90aa7bd84b..88aa28deb7 100644 --- a/src/gfx_layout.h +++ b/src/gfx_layout.h @@ -185,4 +185,7 @@ public: static void ReduceLineCache(); }; +Point GetCharPosInString(std::string_view str, const char *ch, FontSize start_fontsize = FS_NORMAL); +ptrdiff_t GetCharAtPosition(std::string_view str, int x, FontSize start_fontsize = FS_NORMAL); + #endif /* GFX_LAYOUT_H */ diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 7ed51cac1d..ea5e01cb86 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -12,6 +12,7 @@ #include "landscape.h" #include "error.h" #include "gui.h" +#include "gfx_layout.h" #include "command_func.h" #include "company_func.h" #include "town.h" diff --git a/src/textbuf.cpp b/src/textbuf.cpp index 4b5f1e5b7f..ee09223a75 100644 --- a/src/textbuf.cpp +++ b/src/textbuf.cpp @@ -14,6 +14,7 @@ #include "strings_func.h" #include "gfx_type.h" #include "gfx_func.h" +#include "gfx_layout.h" #include "window_func.h" #include "core/alloc_func.hpp" From 5cd81a980e7ae2a93de4656f7b99f5ae0e35da2f Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 22 May 2024 20:36:18 +0100 Subject: [PATCH 624/695] Codechange: Store both left and right glyph positions in a run. This also allows the end of a run to be known without using an extra position entry. --- src/console_gui.cpp | 6 +++--- src/gfx.cpp | 6 +++--- src/gfx_layout.cpp | 12 ++++++------ src/gfx_layout.h | 19 ++++++++++++++++--- src/gfx_layout_fallback.cpp | 23 +++++++++++------------ src/gfx_layout_icu.cpp | 24 ++++++++++-------------- src/misc_gui.cpp | 6 +++--- src/os/macosx/string_osx.cpp | 14 +++++++------- src/os/windows/string_uniscribe.cpp | 13 ++++++------- src/textbuf.cpp | 6 +++--- 10 files changed, 68 insertions(+), 61 deletions(-) diff --git a/src/console_gui.cpp b/src/console_gui.cpp index a95a5e0c80..14f8ac7ec2 100644 --- a/src/console_gui.cpp +++ b/src/console_gui.cpp @@ -349,10 +349,10 @@ struct IConsoleWindow : Window { int delta = std::min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0); - Point p1 = GetCharPosInString(_iconsole_cmdline.buf, from, FS_NORMAL); - Point p2 = from != to ? GetCharPosInString(_iconsole_cmdline.buf, to, FS_NORMAL) : p1; + const auto p1 = GetCharPosInString(_iconsole_cmdline.buf, from, FS_NORMAL); + const auto p2 = from != to ? GetCharPosInString(_iconsole_cmdline.buf, to, FS_NORMAL) : p1; - Rect r = {this->line_offset + delta + p1.x, this->height - this->line_height, this->line_offset + delta + p2.x, this->height}; + Rect r = {this->line_offset + delta + p1.left, this->height - this->line_height, this->line_offset + delta + p2.right, this->height}; return r; } diff --git a/src/gfx.cpp b/src/gfx.cpp index 51a053a354..d97e343b23 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -605,9 +605,9 @@ static int DrawLayoutLine(const ParagraphLayouter::Line &line, int y, int left, /* Not a valid glyph (empty) */ if (glyph == 0xFFFF) continue; - int begin_x = positions[i].x + left - offset_x; - int end_x = positions[i + 1].x + left - offset_x - 1; - int top = positions[i].y + y; + int begin_x = positions[i].left + left - offset_x; + int end_x = positions[i].right + left - offset_x; + int top = positions[i].top + y; /* Truncated away. */ if (truncation && (begin_x < min_x || end_x > max_x)) continue; diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index fc355d79af..ea33b14acf 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -225,7 +225,7 @@ static bool IsConsumedFormattingCode(char32_t ch) * @return Upper left corner of the character relative to the start of the string. * @note Will only work right for single-line strings. */ -Point Layouter::GetCharPosition(std::string_view::const_iterator ch) const +ParagraphLayouter::Position Layouter::GetCharPosition(std::string_view::const_iterator ch) const { const auto &line = this->front(); @@ -245,8 +245,8 @@ Point Layouter::GetCharPosition(std::string_view::const_iterator ch) const } /* Initial position, returned if character not found. */ - const Point initial_position = {_current_text_dir == TD_LTR ? 0 : line->GetWidth(), 0}; - const Point *position = &initial_position; + const ParagraphLayouter::Position initial_position = Point{_current_text_dir == TD_LTR ? 0 : line->GetWidth(), 0}; + const ParagraphLayouter::Position *position = &initial_position; /* We couldn't find the code point index. */ if (str != ch) return *position; @@ -303,8 +303,8 @@ ptrdiff_t Layouter::GetCharAtPosition(int x, size_t line_index) const /* Not a valid glyph (empty). */ if (glyphs[i] == 0xFFFF) continue; - int begin_x = positions[i].x; - int end_x = positions[i + 1].x; + int begin_x = positions[i].left; + int end_x = positions[i].right + 1; if (IsInsideMM(x, begin_x, end_x)) { /* Found our glyph, now convert to UTF-8 string index. */ @@ -418,7 +418,7 @@ void Layouter::ReduceLineCache() * @param start_fontsize Font size to start the text with. * @return Upper left corner of the glyph associated with the character. */ -Point GetCharPosInString(std::string_view str, const char *ch, FontSize start_fontsize) +ParagraphLayouter::Position GetCharPosInString(std::string_view str, const char *ch, FontSize start_fontsize) { /* Ensure "ch" is inside "str" or at the exact end. */ assert(ch >= str.data() && (ch - str.data()) <= static_cast(str.size())); diff --git a/src/gfx_layout.h b/src/gfx_layout.h index 88aa28deb7..b400596c3e 100644 --- a/src/gfx_layout.h +++ b/src/gfx_layout.h @@ -90,6 +90,19 @@ class ParagraphLayouter { public: virtual ~ParagraphLayouter() = default; + /** Position of a glyph within a VisualRun. */ + class Position { + public: + int16_t left; ///< Left-most position of glyph. + int16_t right; ///< Right-most position of glyph. + int16_t top; ///< Top-most position of glyph. + + constexpr inline Position(int16_t left, int16_t right, int16_t top) : left(left), right(right), top(top) { } + + /** Conversion from a single point to a Position. */ + constexpr inline Position(const Point &pt) : left(pt.x), right(pt.x), top(pt.y) { } + }; + /** Visual run contains data about the bit of text with the same font. */ class VisualRun { public: @@ -97,7 +110,7 @@ public: virtual const Font *GetFont() const = 0; virtual int GetGlyphCount() const = 0; virtual std::span GetGlyphs() const = 0; - virtual std::span GetPositions() const = 0; + virtual std::span GetPositions() const = 0; virtual int GetLeading() const = 0; virtual std::span GetGlyphToCharMap() const = 0; }; @@ -176,7 +189,7 @@ public: Layouter(std::string_view str, int maxw = INT32_MAX, FontSize fontsize = FS_NORMAL); Dimension GetBounds(); - Point GetCharPosition(std::string_view::const_iterator ch) const; + ParagraphLayouter::Position GetCharPosition(std::string_view::const_iterator ch) const; ptrdiff_t GetCharAtPosition(int x, size_t line_index) const; static void Initialize(); @@ -185,7 +198,7 @@ public: static void ReduceLineCache(); }; -Point GetCharPosInString(std::string_view str, const char *ch, FontSize start_fontsize = FS_NORMAL); +ParagraphLayouter::Position GetCharPosInString(std::string_view str, const char *ch, FontSize start_fontsize = FS_NORMAL); ptrdiff_t GetCharAtPosition(std::string_view str, int x, FontSize start_fontsize = FS_NORMAL); #endif /* GFX_LAYOUT_H */ diff --git a/src/gfx_layout_fallback.cpp b/src/gfx_layout_fallback.cpp index a169cb75b6..39e5700051 100644 --- a/src/gfx_layout_fallback.cpp +++ b/src/gfx_layout_fallback.cpp @@ -40,7 +40,7 @@ public: /** Visual run contains data about the bit of text with the same font. */ class FallbackVisualRun : public ParagraphLayouter::VisualRun { std::vector glyphs; ///< The glyphs we're drawing. - std::vector positions; ///< The positions of the glyphs. + std::vector positions; ///< The positions of the glyphs. std::vector glyph_to_char; ///< The char index of the glyphs. Font *font; ///< The font used to layout these. @@ -50,7 +50,7 @@ public: const Font *GetFont() const override { return this->font; } int GetGlyphCount() const override { return static_cast(this->glyphs.size()); } std::span GetGlyphs() const override { return this->glyphs; } - std::span GetPositions() const override { return this->positions; } + std::span GetPositions() const override { return this->positions; } int GetLeading() const override { return this->GetFont()->fc->GetHeight(); } std::span GetGlyphToCharMap() const override { return this->glyph_to_char; } }; @@ -116,25 +116,22 @@ FallbackParagraphLayout::FallbackVisualRun::FallbackVisualRun(Font *font, const this->glyphs.reserve(char_count); this->glyph_to_char.reserve(char_count); - - /* Positions contains the location of the begin of each of the glyphs, and the end of the last one. */ - this->positions.reserve(char_count + 1); + this->positions.reserve(char_count); int advance = x; for (int i = 0; i < char_count; i++) { const GlyphID &glyph_id = this->glyphs.emplace_back(font->fc->MapCharToGlyph(chars[i])); + int x_advance = font->fc->GetGlyphWidth(glyph_id); if (isbuiltin) { - this->positions.emplace_back(advance, font->fc->GetAscender()); // Apply sprite font's ascender. + this->positions.emplace_back(advance, advance + x_advance - 1, font->fc->GetAscender()); // Apply sprite font's ascender. } else if (chars[i] >= SCC_SPRITE_START && chars[i] <= SCC_SPRITE_END) { - this->positions.emplace_back(advance, (font->fc->GetHeight() - ScaleSpriteTrad(FontCache::GetDefaultFontHeight(font->fc->GetSize()))) / 2); // Align sprite font to centre + this->positions.emplace_back(advance, advance + x_advance - 1, (font->fc->GetHeight() - ScaleSpriteTrad(FontCache::GetDefaultFontHeight(font->fc->GetSize()))) / 2); // Align sprite font to centre } else { - this->positions.emplace_back(advance, 0); // No ascender adjustment. + this->positions.emplace_back(advance, advance + x_advance - 1, 0); // No ascender adjustment. } - advance += font->fc->GetGlyphWidth(glyph_id); + advance += x_advance; this->glyph_to_char.push_back(char_offset + i); } - /* End-of-run position. */ - this->positions.emplace_back(advance, 0); } /** @@ -165,7 +162,9 @@ int FallbackParagraphLayout::FallbackLine::GetWidth() const * the last run gives us the end of the line and thus the width. */ const auto &run = this->GetVisualRun(this->CountRuns() - 1); - return run.GetPositions().back().x; + const auto &positions = run.GetPositions(); + if (positions.empty()) return 0; + return positions.back().right + 1; } /** diff --git a/src/gfx_layout_icu.cpp b/src/gfx_layout_icu.cpp index 9947e62391..6a5dcbe1e7 100644 --- a/src/gfx_layout_icu.cpp +++ b/src/gfx_layout_icu.cpp @@ -45,7 +45,7 @@ public: std::vector glyphs; ///< The glyphs of the run. Valid after Shape() is called. std::vector advance; ///< The advance (width) of the glyphs. Valid after Shape() is called. std::vector glyph_to_char; ///< The mapping from glyphs to characters. Valid after Shape() is called. - std::vector positions; ///< The positions of the glyphs. Valid after Shape() is called. + std::vector positions; ///< The positions of the glyphs. 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) {} @@ -62,7 +62,7 @@ public: class ICUVisualRun : public ParagraphLayouter::VisualRun { private: std::vector glyphs; - std::vector positions; + std::vector positions; std::vector glyph_to_char; int total_advance; @@ -72,7 +72,7 @@ public: ICUVisualRun(const ICURun &run, int x); std::span GetGlyphs() const override { return this->glyphs; } - std::span GetPositions() const override { return this->positions; } + std::span GetPositions() const override { return this->positions; } std::span GetGlyphToCharMap() const override { return this->glyph_to_char; } const Font *GetFont() const override { return this->font; } @@ -136,8 +136,8 @@ ICUParagraphLayout::ICUVisualRun::ICUVisualRun(const ICURun &run, int x) : this->positions.reserve(run.positions.size()); /* Copy positions, moving x coordinate by x offset. */ - for (const Point &pt : run.positions) { - this->positions.emplace_back(pt.x + x, pt.y); + for (const auto &pos : run.positions) { + this->positions.emplace_back(pos.left + x, pos.right + x, pos.top); } } @@ -179,7 +179,7 @@ void ICURun::Shape(UChar *buff, size_t buff_length) /* Reserve space, as we already know the size. */ this->glyphs.reserve(glyph_count); this->glyph_to_char.reserve(glyph_count); - this->positions.reserve(glyph_count + 1); + this->positions.reserve(glyph_count); this->advance.reserve(glyph_count); /* Prepare the glyphs/position. ICUVisualRun will give the position an offset if needed. */ @@ -189,14 +189,13 @@ void ICURun::Shape(UChar *buff, size_t buff_length) if (buff[glyph_info[i].cluster] >= SCC_SPRITE_START && buff[glyph_info[i].cluster] <= SCC_SPRITE_END && glyph_info[i].codepoint == 0) { auto glyph = this->font->fc->MapCharToGlyph(buff[glyph_info[i].cluster]); - - this->glyphs.push_back(glyph); - this->positions.emplace_back(advance, (this->font->fc->GetHeight() - ScaleSpriteTrad(FontCache::GetDefaultFontHeight(this->font->fc->GetSize()))) / 2); // Align sprite font to centre x_advance = this->font->fc->GetGlyphWidth(glyph); + this->glyphs.push_back(glyph); + this->positions.emplace_back(advance, advance + x_advance - 1, (this->font->fc->GetHeight() - ScaleSpriteTrad(FontCache::GetDefaultFontHeight(this->font->fc->GetSize()))) / 2); // Align sprite font to centre } else { - this->glyphs.push_back(glyph_info[i].codepoint); - this->positions.emplace_back(glyph_pos[i].x_offset / FONT_SCALE + advance, glyph_pos[i].y_offset / FONT_SCALE); x_advance = glyph_pos[i].x_advance / FONT_SCALE; + this->glyphs.push_back(glyph_info[i].codepoint); + this->positions.emplace_back(glyph_pos[i].x_offset / FONT_SCALE + advance, glyph_pos[i].x_offset / FONT_SCALE + advance + x_advance - 1, glyph_pos[i].y_offset / FONT_SCALE); } this->glyph_to_char.push_back(glyph_info[i].cluster); @@ -204,9 +203,6 @@ void ICURun::Shape(UChar *buff, size_t buff_length) advance += x_advance; } - /* End-of-run position. */ - this->positions.emplace_back(advance, 0); - /* Track the total advancement we made. */ this->total_advance = advance; diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index ea5e01cb86..f0de0d1cf4 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -902,10 +902,10 @@ Rect QueryString::GetBoundingRect(const Window *w, WidgetID wid, const char *fro r = ScrollEditBoxTextRect(r, *tb); /* Get location of first and last character. */ - Point p1 = GetCharPosInString(tb->buf, from, FS_NORMAL); - Point p2 = from != to ? GetCharPosInString(tb->buf, to, FS_NORMAL) : p1; + const auto p1 = GetCharPosInString(tb->buf, from, FS_NORMAL); + const auto p2 = from != to ? GetCharPosInString(tb->buf, to, FS_NORMAL) : p1; - return { Clamp(r.left + p1.x, r.left, r.right), r.top, Clamp(r.left + p2.x, r.left, r.right), r.bottom }; + return { Clamp(r.left + p1.left, r.left, r.right), r.top, Clamp(r.left + p2.right, r.left, r.right), r.bottom }; } /** diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp index 08cf974f23..cac25b46df 100644 --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -71,7 +71,7 @@ public: class CoreTextVisualRun : public ParagraphLayouter::VisualRun { private: std::vector glyphs; - std::vector positions; + std::vector positions; std::vector glyph_to_char; int total_advance = 0; @@ -82,7 +82,7 @@ public: CoreTextVisualRun(CoreTextVisualRun &&other) = default; std::span GetGlyphs() const override { return this->glyphs; } - std::span GetPositions() const override { return this->positions; } + std::span GetPositions() const override { return this->positions; } std::span GetGlyphToCharMap() const override { return this->glyph_to_char; } const Font *GetFont() const override { return this->font; } @@ -241,7 +241,9 @@ CoreTextParagraphLayout::CoreTextVisualRun::CoreTextVisualRun(CTRunRef run, Font CGPoint pts[this->glyphs.size()]; CTRunGetPositions(run, CFRangeMake(0, 0), pts); - this->positions.reserve(this->glyphs.size() + 1); + CGSize advs[this->glyphs.size()]; + CTRunGetAdvances(run, CFRangeMake(0, 0), advs); + this->positions.reserve(this->glyphs.size()); /* Convert glyph array to our data type. At the same time, substitute * the proper glyphs for our private sprite glyphs. */ @@ -251,15 +253,13 @@ CoreTextParagraphLayout::CoreTextVisualRun::CoreTextVisualRun(CTRunRef run, Font if (buff[this->glyph_to_char[i]] >= SCC_SPRITE_START && buff[this->glyph_to_char[i]] <= SCC_SPRITE_END && (gl[i] == 0 || gl[i] == 3)) { /* A glyph of 0 indidicates not found, while apparently 3 is what char 0xFFFC maps to. */ this->glyphs[i] = font->fc->MapCharToGlyph(buff[this->glyph_to_char[i]]); - this->positions.emplace_back(pts[i].x, (font->fc->GetHeight() - ScaleSpriteTrad(FontCache::GetDefaultFontHeight(font->fc->GetSize()))) / 2); // Align sprite font to centre + this->positions.emplace_back(pts[i].x, pts[i].x + advs[i].width - 1, (font->fc->GetHeight() - ScaleSpriteTrad(FontCache::GetDefaultFontHeight(font->fc->GetSize()))) / 2); // Align sprite font to centre } else { this->glyphs[i] = gl[i]; - this->positions.emplace_back(pts[i].x, pts[i].y); + this->positions.emplace_back(pts[i].x, pts[i].x + advs[i].width - 1, pts[i].y); } } this->total_advance = (int)std::ceil(CTRunGetTypographicBounds(run, CFRangeMake(0, 0), nullptr, nullptr, nullptr)); - /* End-of-run position. */ - this->positions.emplace_back(this->positions.front().x + this->total_advance, 0); } /** diff --git a/src/os/windows/string_uniscribe.cpp b/src/os/windows/string_uniscribe.cpp index 7b289734d2..0834fe6e56 100644 --- a/src/os/windows/string_uniscribe.cpp +++ b/src/os/windows/string_uniscribe.cpp @@ -74,7 +74,7 @@ public: class UniscribeVisualRun : public ParagraphLayouter::VisualRun { private: std::vector glyphs; - std::vector positions; + std::vector positions; std::vector char_to_glyph; int start_pos; @@ -89,7 +89,7 @@ public: UniscribeVisualRun(UniscribeVisualRun &&other) noexcept; std::span GetGlyphs() const override { return this->glyphs; } - std::span GetPositions() const override { return this->positions; } + std::span GetPositions() const override { return this->positions; } std::span GetGlyphToCharMap() const override; const Font *GetFont() const override { return this->font; } @@ -474,16 +474,15 @@ int UniscribeParagraphLayout::UniscribeLine::GetWidth() const UniscribeParagraphLayout::UniscribeVisualRun::UniscribeVisualRun(const UniscribeRun &range, int x) : glyphs(range.ft_glyphs), char_to_glyph(range.char_to_glyph), start_pos(range.pos), total_advance(range.total_advance), font(range.font) { this->num_glyphs = (int)glyphs.size(); - this->positions.reserve(this->num_glyphs + 1); + this->positions.reserve(this->num_glyphs); int advance = x; for (int i = 0; i < this->num_glyphs; i++) { - this->positions.emplace_back(range.offsets[i].du + advance, range.offsets[i].dv); + int x_advance = range.advances[i]; + this->positions.emplace_back(range.offsets[i].du + advance - 1, range.offsets[i].du + advance + x_advance, range.offsets[i].dv); - advance += range.advances[i]; + advance += x_advance; } - /* End-of-run position. */ - this->positions.emplace_back(advance, 0); } UniscribeParagraphLayout::UniscribeVisualRun::UniscribeVisualRun(UniscribeVisualRun&& other) noexcept diff --git a/src/textbuf.cpp b/src/textbuf.cpp index ee09223a75..4da9365791 100644 --- a/src/textbuf.cpp +++ b/src/textbuf.cpp @@ -309,15 +309,15 @@ void Textbuf::UpdateWidth() /** Update pixel position of the caret. */ void Textbuf::UpdateCaretPosition() { - this->caretxoffs = this->chars > 1 ? GetCharPosInString(this->buf, this->buf + this->caretpos, FS_NORMAL).x : 0; + this->caretxoffs = this->chars > 1 ? GetCharPosInString(this->buf, this->buf + this->caretpos, FS_NORMAL).left : 0; } /** Update pixel positions of the marked text area. */ void Textbuf::UpdateMarkedText() { if (this->markend != 0) { - this->markxoffs = GetCharPosInString(this->buf, this->buf + this->markpos, FS_NORMAL).x; - this->marklength = GetCharPosInString(this->buf, this->buf + this->markend, FS_NORMAL).x - this->markxoffs; + this->markxoffs = GetCharPosInString(this->buf, this->buf + this->markpos, FS_NORMAL).left; + this->marklength = GetCharPosInString(this->buf, this->buf + this->markend, FS_NORMAL).left - this->markxoffs; } else { this->markxoffs = this->marklength = 0; } From fce9361bf22168bd9beb799d82908c8f565cbaae Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 2 Jun 2024 08:48:51 +0100 Subject: [PATCH 625/695] Change: Position caret on left or right of glyph depending on language direction. --- src/textbuf.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/textbuf.cpp b/src/textbuf.cpp index 4da9365791..5ca5721dcb 100644 --- a/src/textbuf.cpp +++ b/src/textbuf.cpp @@ -309,15 +309,18 @@ void Textbuf::UpdateWidth() /** Update pixel position of the caret. */ void Textbuf::UpdateCaretPosition() { - this->caretxoffs = this->chars > 1 ? GetCharPosInString(this->buf, this->buf + this->caretpos, FS_NORMAL).left : 0; + const auto pos = GetCharPosInString(this->buf, this->buf + this->caretpos, FS_NORMAL); + this->caretxoffs = _current_text_dir == TD_LTR ? pos.left : pos.right; } /** Update pixel positions of the marked text area. */ void Textbuf::UpdateMarkedText() { if (this->markend != 0) { - this->markxoffs = GetCharPosInString(this->buf, this->buf + this->markpos, FS_NORMAL).left; - this->marklength = GetCharPosInString(this->buf, this->buf + this->markend, FS_NORMAL).left - this->markxoffs; + const auto pos = GetCharPosInString(this->buf, this->buf + this->markpos, FS_NORMAL); + const auto end = GetCharPosInString(this->buf, this->buf + this->markend, FS_NORMAL); + this->markxoffs = std::min(pos.left, end.left); + this->marklength = std::max(pos.right, end.right) - this->markxoffs; } else { this->markxoffs = this->marklength = 0; } From b4b2fad8e08d038b5dab8742d1db327fda5ee558 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 9 Jun 2024 10:23:47 +0100 Subject: [PATCH 626/695] Fix #12648: Ensure all uses of std::filesystem::path use native encoding. (#12650) std::filesystem::path does not expect UTF-8 strings, so they must be converted to native format first (and back to utf-8 after.) --- src/fileio.cpp | 2 +- src/game/game_text.cpp | 2 +- src/openttd.cpp | 4 ++-- src/signature.cpp | 2 +- src/strings.cpp | 16 ++++++++-------- src/survey.cpp | 2 +- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index 48c6c26db9..98b2f7fa5c 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -489,7 +489,7 @@ bool TarScanner::AddFile(const std::string &filename, size_t, [[maybe_unused]] c _tar_list[this->subdir][filename] = std::string{}; - std::string filename_base = std::filesystem::path(filename).filename().string(); + std::string filename_base = FS2OTTD(std::filesystem::path(OTTD2FS(filename)).filename()); SimplifyFileName(filename_base); TarHeader th; diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp index 2a8dab7690..682d5238e0 100644 --- a/src/game/game_text.cpp +++ b/src/game/game_text.cpp @@ -386,7 +386,7 @@ void ReconsiderGameScriptLanguage() { if (_current_data == nullptr) return; - std::string language = _current_language->file.stem().string(); + std::string language = FS2OTTD(_current_language->file.stem()); for (auto &p : _current_data->compiled_strings) { if (p.language == language) { _current_data->cur_language = &p; diff --git a/src/openttd.cpp b/src/openttd.cpp index e24a9d21fd..25082be2c5 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -578,7 +578,7 @@ int openttd_main(std::span arguments) if (mgo.opt != nullptr) { _file_to_saveload.name = mgo.opt; - std::string extension = std::filesystem::path(_file_to_saveload.name).extension().string(); + std::string extension = FS2OTTD(std::filesystem::path(OTTD2FS(_file_to_saveload.name)).extension()); auto [ft, _] = FiosGetSavegameListCallback(SLO_LOAD, _file_to_saveload.name, extension); if (ft == FIOS_TYPE_INVALID) { std::tie(ft, _) = FiosGetScenarioListCallback(SLO_LOAD, _file_to_saveload.name, extension); @@ -612,7 +612,7 @@ int openttd_main(std::span arguments) return ret; } - std::string extension = std::filesystem::path(mgo.opt).extension().string(); + std::string extension = FS2OTTD(std::filesystem::path(OTTD2FS(mgo.opt)).extension()); auto [_, title] = FiosGetSavegameListCallback(SLO_LOAD, mgo.opt, extension); _load_check_data.Clear(); diff --git a/src/signature.cpp b/src/signature.cpp index 2b64676e5d..15895388d6 100644 --- a/src/signature.cpp +++ b/src/signature.cpp @@ -245,7 +245,7 @@ static bool _ValidateSignatureFile(const std::string &filename) return false; } - std::string dirname = std::filesystem::path(filename).parent_path().string(); + std::string dirname = FS2OTTD(std::filesystem::path(OTTD2FS(filename)).parent_path()); for (auto &signature : signatures["files"]) { const std::string sig_filename = dirname + PATHSEPCHAR + signature["filename"].get(); diff --git a/src/strings.cpp b/src/strings.cpp index e069370e94..85f50da1c0 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1904,7 +1904,7 @@ bool ReadLanguagePack(const LanguageMetadata *lang) { /* Current language pack */ size_t len = 0; - std::unique_ptr lang_pack(reinterpret_cast(ReadFileToMem(lang->file.string(), len, 1U << 20).release())); + std::unique_ptr lang_pack(reinterpret_cast(ReadFileToMem(FS2OTTD(lang->file), len, 1U << 20).release())); if (!lang_pack) return false; /* End of read data (+ terminating zero added in ReadFileToMem()) */ @@ -1953,7 +1953,7 @@ bool ReadLanguagePack(const LanguageMetadata *lang) _current_language = lang; _current_text_dir = (TextDirection)_current_language->text_dir; - _config_language_file = _current_language->file.filename().string(); + _config_language_file = FS2OTTD(_current_language->file.filename()); SetCurrentGrfLangID(_current_language->newgrflangid); #ifdef _WIN32 @@ -2079,13 +2079,13 @@ static void FillLanguageList(const std::string &path) if (dir_entry.path().extension() != ".lng") continue; LanguageMetadata lmd; - lmd.file = FS2OTTD(dir_entry.path()); + lmd.file = dir_entry.path(); /* Check whether the file is of the correct version */ - if (!GetLanguageFileHeader(lmd.file.string(), &lmd)) { - Debug(misc, 3, "{} is not a valid language file", lmd.file); + if (!GetLanguageFileHeader(FS2OTTD(lmd.file), &lmd)) { + Debug(misc, 3, "{} is not a valid language file", FS2OTTD(lmd.file)); } else if (GetLanguage(lmd.newgrflangid) != nullptr) { - Debug(misc, 3, "{}'s language ID is already known", lmd.file); + Debug(misc, 3, "{}'s language ID is already known", FS2OTTD(lmd.file)); } else { _languages.push_back(lmd); } @@ -2119,7 +2119,7 @@ void InitializeLanguagePacks() /* We are trying to find a default language. The priority is by * configuration file, local environment and last, if nothing found, * English. */ - if (_config_language_file == lng.file.filename()) { + if (_config_language_file == FS2OTTD(lng.file.filename())) { chosen_language = &lng; break; } @@ -2139,7 +2139,7 @@ void InitializeLanguagePacks() chosen_language = (language_fallback != nullptr) ? language_fallback : en_GB_fallback; } - if (!ReadLanguagePack(chosen_language)) UserError("Can't read language pack '{}'", chosen_language->file); + if (!ReadLanguagePack(chosen_language)) UserError("Can't read language pack '{}'", FS2OTTD(chosen_language->file)); } /** diff --git a/src/survey.cpp b/src/survey.cpp index 89c699ad0d..0b1d62affa 100644 --- a/src/survey.cpp +++ b/src/survey.cpp @@ -258,7 +258,7 @@ void SurveyConfiguration(nlohmann::json &survey) { survey["network"] = _networking ? (_network_server ? "server" : "client") : "no"; if (_current_language != nullptr) { - survey["language"]["filename"] = _current_language->file.filename().string(); + survey["language"]["filename"] = FS2OTTD(_current_language->file.filename()); survey["language"]["name"] = _current_language->name; survey["language"]["isocode"] = _current_language->isocode; } From fa82dd6096e6797ebd83024f05cdbd8cf2869255 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 5 Jun 2024 17:31:55 +0100 Subject: [PATCH 627/695] Fix #12030: Water infrastructure totals when using DC_FORCE_CLEAR_TILE To remove objects on water --- src/landscape.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/landscape.cpp b/src/landscape.cpp index d9bc4bc659..121c603569 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -30,6 +30,7 @@ #include "core/random_func.hpp" #include "object_base.h" #include "company_func.h" +#include "company_gui.h" #include "pathfinder/aystar.h" #include "saveload/saveload.h" #include "framerate_type.h" @@ -680,7 +681,16 @@ CommandCost CmdLandscapeClear(DoCommandFlag flags, TileIndex tile) if (flags & DC_EXEC) { if (c != nullptr) c->clear_limit -= 1 << 16; - if (do_clear) DoClearSquare(tile); + if (do_clear) { + if (IsWaterTile(tile) && IsCanal(tile)) { + Owner owner = GetTileOwner(tile); + if (Company::IsValidID(owner)) { + Company::Get(owner)->infrastructure.water--; + DirtyCompanyInfrastructureWindows(owner); + } + } + DoClearSquare(tile); + } } return cost; } From 7db756e602b19e59241fd1634daf668b4f2ef6b0 Mon Sep 17 00:00:00 2001 From: Steve Goldman Date: Wed, 5 Jun 2024 10:44:22 -0500 Subject: [PATCH 628/695] Change: Do not automatically connect double depots with track --- src/rail_gui.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index aee5ef4848..6646441ac9 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -148,7 +148,12 @@ void CcRailDepot(Commands, const CommandCost &result, TileIndex tile, RailType, if (IsTileType(tile, MP_RAILWAY)) { PlaceExtraDepotRail(tile, _place_depot_extra_dir[dir], _place_depot_extra_track[dir]); - PlaceExtraDepotRail(tile, _place_depot_extra_dir[dir + 4], _place_depot_extra_track[dir + 4]); + + /* Don't place the rail straight out of the depot of there is another depot across from it. */ + Tile double_depot_tile = tile + TileOffsByDiagDir(dir); + bool is_double_depot = IsValidTile(double_depot_tile) && IsRailDepotTile(double_depot_tile); + if (!is_double_depot) PlaceExtraDepotRail(tile, _place_depot_extra_dir[dir + 4], _place_depot_extra_track[dir + 4]); + PlaceExtraDepotRail(tile, _place_depot_extra_dir[dir + 8], _place_depot_extra_track[dir + 8]); } } From 18bce69623c515128532e335e1233dd193c62b2c Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 10 Jun 2024 04:43:42 +0000 Subject: [PATCH 629/695] Update: Translations from eints galician: 3 changes by pvillaverde danish: 1 change by bscargo polish: 5 changes by pAter-exe --- src/lang/danish.txt | 1 + src/lang/galician.txt | 6 +++--- src/lang/polish.txt | 10 +++++----- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 4ade7af644..b807e03c84 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -2797,6 +2797,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Vælg l STR_STATION_BUILD_DRAG_DROP :{BLACK}Træk & slip STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Byg en station vha. træk & slip +STR_PICKER_MODE_ALL :Alle diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 22be17d592..97a968a402 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -311,8 +311,8 @@ STR_BUTTON_CANCEL :{BLACK}Cancelar STR_BUTTON_OK :{BLACK}OK # On screen keyboard window -STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . -STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:" ZXCVBNM<>? . +STR_OSK_KEYBOARD_LAYOUT :`1234567890-= qwertyuiop[]asdfghjkl;'#\zxcvbnm,./ . +STR_OSK_KEYBOARD_LAYOUT_CAPS :¬!"£$%^&*()_+ QWERTYUIOP{{}}ASDFGHJKL:@~|ZXCVBNM<>? . # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Lonxitude: {NUM} @@ -1499,7 +1499,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Calendario STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Reloxo STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutos por ano: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Selecciona o número de minutos dun ano do calendario. Por defecto son 12 minutos. Fíxao en 0 para para conxelar o calendario. Este axuste non afecta a simulación da economía do xogo, e só está dispoñible cando se usa o modo reloxo de cronometraxe +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Selecciona o número de minutos dun ano do calendario. Por defecto son 12 minutos. Fíxao en 0 para para conxelar o calendario. Increemntar a duración do ano do calendario ralentiza a introdución de vehículos, casas e outra infraestrutura. Non afecta a velocidade dos vehículos ou a simulación económica excepto pola inflación. Este axuste só está dispoñible cando se usa o modo reloxo de cronometraxe STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 55ef48909e..22718f3ad8 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -647,7 +647,7 @@ STR_UNITS_PERIODS :{NUM}{NBSP}okre # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtr: -STR_LIST_FILTER_OSKTITLE :{BLACK}Wpisz jedno lub więcej słów, aby przefiltrować listę +STR_LIST_FILTER_OSKTITLE :{BLACK}Wpisz słowa kluczowe, aby przefiltrować listę STR_LIST_FILTER_TOOLTIP :{BLACK}Wpisz jedno lub więcej słów kluczowych, aby przefiltrować listę STR_TOOLTIP_GROUP_ORDER :{BLACK}Wybierz kolejność grupowania @@ -689,8 +689,8 @@ STR_BUTTON_CANCEL :{BLACK}Anuluj STR_BUTTON_OK :{BLACK}OK # On screen keyboard window -STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . -STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:" ZXCVBNM<>? . +STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ +STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:" ZXCVBNM<>? # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Długość: {NUM} @@ -2052,8 +2052,8 @@ STR_CONFIG_SETTING_OSK_ACTIVATION :Klawiatura ekra STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Wybierz metodę włączania klawiatury ekranowej do wprowadzania tekstu do pól tekstowych używając tylko urządzenia wskazującego. Jest to dedykowane dla małych urządzeń bez klawiatury ###length 4 STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :Wyłączone -STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Podwójny klik -STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Pojedyncze kliknięcie (w przybliżeniu) +STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Podwójne kliknięcie +STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Pojedyncze kliknięcie (po odczekaniu chwili) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Pojedyncze kliknięcie (natychmiast) STR_CONFIG_SETTING_USE_RELAY_SERVICE :Używanie usługi przekaźnika: {STRING} From 4cf6d1dd796499d3b7afaf25c970f8943aa25c77 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 11 Jun 2024 08:58:03 +0100 Subject: [PATCH 630/695] Codechange: Pass WindowDesc by reference instead of pointer. (#12771) WindowDesc as passed to Windows is not optional so don't allow to it to be nullptr. --- src/ai/ai_gui.cpp | 2 +- src/airport_gui.cpp | 8 ++-- src/autoreplace_gui.cpp | 10 ++--- src/bootstrap_gui.cpp | 8 ++-- src/bridge_gui.cpp | 4 +- src/build_vehicle_gui.cpp | 4 +- src/cheat_gui.cpp | 4 +- src/company_gui.cpp | 24 +++++------ src/console_gui.cpp | 2 +- src/date_gui.cpp | 4 +- src/depot_gui.cpp | 13 +++--- src/dock_gui.cpp | 14 +++---- src/dropdown.cpp | 2 +- src/engine_gui.cpp | 4 +- src/error_gui.cpp | 2 +- src/fios_gui.cpp | 9 ++--- src/framerate_gui.cpp | 8 ++-- src/game/game_gui.cpp | 2 +- src/genworld_gui.cpp | 10 ++--- src/goal_gui.cpp | 8 ++-- src/graph_gui.cpp | 34 ++++++++-------- src/group_gui.cpp | 6 +-- src/help_gui.cpp | 4 +- src/highscore_gui.cpp | 10 ++--- src/industry_gui.cpp | 12 +++--- src/intro_gui.cpp | 4 +- src/league_gui.cpp | 8 ++-- src/linkgraph/linkgraph_gui.cpp | 4 +- src/linkgraph/linkgraph_gui.h | 2 +- src/main_gui.cpp | 4 +- src/misc_gui.cpp | 14 +++---- src/music_gui.cpp | 8 ++-- src/network/network_chat_gui.cpp | 4 +- src/network/network_content_gui.cpp | 8 ++-- src/network/network_content_gui.h | 2 +- src/network/network_gui.cpp | 24 +++++------ src/newgrf_debug_gui.cpp | 8 ++-- src/newgrf_gui.cpp | 12 +++--- src/news_gui.cpp | 12 +++--- src/object_gui.cpp | 4 +- src/order_gui.cpp | 6 +-- src/osk_gui.cpp | 4 +- src/picker_gui.cpp | 2 +- src/picker_gui.h | 2 +- src/rail_gui.cpp | 20 +++++----- src/road_gui.cpp | 14 +++---- src/screenshot_gui.cpp | 4 +- src/script/script_gui.cpp | 12 +++--- src/settings_gui.cpp | 12 +++--- src/signs_gui.cpp | 8 ++-- src/smallmap_gui.cpp | 4 +- src/station_gui.cpp | 12 +++--- src/statusbar_gui.cpp | 4 +- src/story_gui.cpp | 4 +- src/subsidy_gui.cpp | 4 +- src/terraform_gui.cpp | 10 ++--- src/textfile_gui.cpp | 2 +- src/timetable_gui.cpp | 4 +- src/toolbar_gui.cpp | 8 ++-- src/town_gui.cpp | 22 +++++----- src/transparency_gui.cpp | 4 +- src/tree_gui.cpp | 4 +- src/vehicle_gui.cpp | 20 +++++----- src/vehicle_gui_base.h | 2 +- src/viewport_gui.cpp | 4 +- src/waypoint_gui.cpp | 4 +- src/window.cpp | 62 ++++++++++++++--------------- src/window_gui.h | 10 ++--- 68 files changed, 293 insertions(+), 301 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 9bdf53a1de..3568f70410 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -97,7 +97,7 @@ struct AIConfigWindow : public Window { int line_height; ///< Height of a single AI-name line. Scrollbar *vscroll; ///< Cache of the vertical scrollbar. - AIConfigWindow() : Window(&_ai_config_desc) + AIConfigWindow() : Window(_ai_config_desc) { this->InitNested(WN_GAME_OPTIONS_AI); // Initializes 'this->line_height' as a side effect. this->vscroll = this->GetScrollbar(WID_AIC_SCROLLBAR); diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index c592d8c9cf..83ed73ee3e 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -83,7 +83,7 @@ static void PlaceAirport(TileIndex tile) struct BuildAirToolbarWindow : Window { int last_user_action; // Last started user action. - BuildAirToolbarWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + BuildAirToolbarWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->InitNested(window_number); this->OnInvalidateData(); @@ -228,7 +228,7 @@ Window *ShowBuildAirToolbar() if (!Company::IsValidID(_local_company)) return nullptr; CloseWindowByClass(WC_BUILD_TOOLBAR); - return AllocateWindowDescFront(&_air_toolbar_desc, TRANSPORT_AIR); + return AllocateWindowDescFront(_air_toolbar_desc, TRANSPORT_AIR); } class BuildAirportWindow : public PickerWindowBase { @@ -249,7 +249,7 @@ class BuildAirportWindow : public PickerWindowBase { } public: - BuildAirportWindow(WindowDesc *desc, Window *parent) : PickerWindowBase(desc, parent) + BuildAirportWindow(WindowDesc &desc, Window *parent) : PickerWindowBase(desc, parent) { this->CreateNestedTree(); @@ -626,7 +626,7 @@ static WindowDesc _build_airport_desc( static void ShowBuildAirportPicker(Window *parent) { - new BuildAirportWindow(&_build_airport_desc, parent); + new BuildAirportWindow(_build_airport_desc, parent); } void InitializeAirportGui() diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index eab2b14117..eba70f9449 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -263,7 +263,7 @@ class ReplaceVehicleWindow : public Window { } public: - ReplaceVehicleWindow(WindowDesc *desc, VehicleType vehicletype, GroupID id_g) : Window(desc) + ReplaceVehicleWindow(WindowDesc &desc, VehicleType vehicletype, GroupID id_g) : Window(desc) { this->sel_railtype = INVALID_RAILTYPE; this->sel_roadtype = INVALID_ROADTYPE; @@ -889,11 +889,9 @@ static WindowDesc _replace_vehicle_desc( void ShowReplaceGroupVehicleWindow(GroupID id_g, VehicleType vehicletype) { CloseWindowById(WC_REPLACE_VEHICLE, vehicletype); - WindowDesc *desc; switch (vehicletype) { - case VEH_TRAIN: desc = &_replace_rail_vehicle_desc; break; - case VEH_ROAD: desc = &_replace_road_vehicle_desc; break; - default: desc = &_replace_vehicle_desc; break; + case VEH_TRAIN: new ReplaceVehicleWindow(_replace_rail_vehicle_desc, vehicletype, id_g); break; + case VEH_ROAD: new ReplaceVehicleWindow(_replace_road_vehicle_desc, vehicletype, id_g); break; + default: new ReplaceVehicleWindow(_replace_vehicle_desc, vehicletype, id_g); break; } - new ReplaceVehicleWindow(desc, vehicletype, id_g); } diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index 3f19c7fae0..18a3ebb7f4 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -50,7 +50,7 @@ static WindowDesc _background_desc( /** The background for the game. */ class BootstrapBackground : public Window { public: - BootstrapBackground() : Window(&_background_desc) + BootstrapBackground() : Window(_background_desc) { this->InitNested(0); CLRBITS(this->flags, WF_WHITE_BORDER); @@ -86,7 +86,7 @@ static WindowDesc _bootstrap_errmsg_desc( /** The window for a failed bootstrap. */ class BootstrapErrorWindow : public Window { public: - BootstrapErrorWindow() : Window(&_bootstrap_errmsg_desc) + BootstrapErrorWindow() : Window(_bootstrap_errmsg_desc) { this->InitNested(1); } @@ -145,7 +145,7 @@ static WindowDesc _bootstrap_download_status_window_desc( struct BootstrapContentDownloadStatusWindow : public BaseNetworkContentDownloadStatusWindow { public: /** Simple call the constructor of the superclass. */ - BootstrapContentDownloadStatusWindow() : BaseNetworkContentDownloadStatusWindow(&_bootstrap_download_status_window_desc) + BootstrapContentDownloadStatusWindow() : BaseNetworkContentDownloadStatusWindow(_bootstrap_download_status_window_desc) { } @@ -198,7 +198,7 @@ class BootstrapAskForDownloadWindow : public Window, ContentCallback { public: /** Start listening to the content client events. */ - BootstrapAskForDownloadWindow() : Window(&_bootstrap_query_desc) + BootstrapAskForDownloadWindow() : Window(_bootstrap_query_desc) { this->InitNested(WN_CONFIRM_POPUP_QUERY_BOOTSTRAP); _network_content_client.AddCallback(this); diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index 023411b115..b6decec50b 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -151,7 +151,7 @@ private: } public: - BuildBridgeWindow(WindowDesc *desc, TileIndex start, TileIndex end, TransportType transport_type, uint8_t road_rail_type, GUIBridgeList &&bl) : Window(desc), + BuildBridgeWindow(WindowDesc &desc, TileIndex start, TileIndex end, TransportType transport_type, uint8_t road_rail_type, GUIBridgeList &&bl) : Window(desc), start_tile(start), end_tile(end), transport_type(transport_type), @@ -435,7 +435,7 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo } if (!bl.empty()) { - new BuildBridgeWindow(&_build_bridge_desc, start, end, transport_type, road_rail_type, std::move(bl)); + new BuildBridgeWindow(_build_bridge_desc, start, end, transport_type, road_rail_type, std::move(bl)); } else { ShowErrorMessage(STR_ERROR_CAN_T_BUILD_BRIDGE_HERE, errmsg, WL_INFO, TileX(end) * TILE_SIZE, TileY(end) * TILE_SIZE); } diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 12934979ef..9040a3cfd6 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1201,7 +1201,7 @@ struct BuildVehicleWindow : Window { } } - BuildVehicleWindow(WindowDesc *desc, TileIndex tile, VehicleType type) : Window(desc), vehicle_editbox(MAX_LENGTH_VEHICLE_NAME_CHARS * MAX_CHAR_LENGTH, MAX_LENGTH_VEHICLE_NAME_CHARS) + BuildVehicleWindow(WindowDesc &desc, TileIndex tile, VehicleType type) : Window(desc), vehicle_editbox(MAX_LENGTH_VEHICLE_NAME_CHARS * MAX_CHAR_LENGTH, MAX_LENGTH_VEHICLE_NAME_CHARS) { this->vehicle_type = type; this->listview_mode = tile == INVALID_TILE; @@ -1938,5 +1938,5 @@ void ShowBuildVehicleWindow(TileIndex tile, VehicleType type) CloseWindowById(WC_BUILD_VEHICLE, num); - new BuildVehicleWindow(&_build_vehicle_desc, tile, type); + new BuildVehicleWindow(_build_vehicle_desc, tile, type); } diff --git a/src/cheat_gui.cpp b/src/cheat_gui.cpp index 1e7dbaa3d2..e7fb3caa04 100644 --- a/src/cheat_gui.cpp +++ b/src/cheat_gui.cpp @@ -230,7 +230,7 @@ struct CheatWindow : Window { uint line_height; Dimension icon; ///< Dimension of company icon sprite - CheatWindow(WindowDesc *desc) : Window(desc) + CheatWindow(WindowDesc &desc) : Window(desc) { this->InitNested(); } @@ -436,5 +436,5 @@ static WindowDesc _cheats_desc( void ShowCheatWindow() { CloseWindowById(WC_CHEATS, 0); - new CheatWindow(&_cheats_desc); + new CheatWindow(_cheats_desc); } diff --git a/src/company_gui.cpp b/src/company_gui.cpp index c68e9d26e0..47d49385f4 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -336,7 +336,7 @@ struct CompanyFinancesWindow : Window { static Money max_money; ///< The maximum amount of money a company has had this 'run' bool small; ///< Window is toggled to 'small'. - CompanyFinancesWindow(WindowDesc *desc, CompanyID company) : Window(desc) + CompanyFinancesWindow(WindowDesc &desc, CompanyID company) : Window(desc) { this->small = false; this->CreateNestedTree(); @@ -548,7 +548,7 @@ void ShowCompanyFinances(CompanyID company) if (!Company::IsValidID(company)) return; if (BringWindowToFrontById(WC_FINANCES, company)) return; - new CompanyFinancesWindow(&_company_finances_desc, company); + new CompanyFinancesWindow(_company_finances_desc, company); } /* Association of liveries to livery classes */ @@ -670,7 +670,7 @@ private: } public: - SelectCompanyLiveryWindow(WindowDesc *desc, CompanyID company, GroupID group) : Window(desc) + SelectCompanyLiveryWindow(WindowDesc &desc, CompanyID company, GroupID group) : Window(desc) { this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_SCL_MATRIX_SCROLLBAR); @@ -1089,7 +1089,7 @@ void ShowCompanyLiveryWindow(CompanyID company, GroupID group) { SelectCompanyLiveryWindow *w = (SelectCompanyLiveryWindow *)BringWindowToFrontById(WC_COMPANY_COLOUR, company); if (w == nullptr) { - new SelectCompanyLiveryWindow(&_select_company_livery_desc, company, group); + new SelectCompanyLiveryWindow(_select_company_livery_desc, company, group); } else if (group != INVALID_GROUP) { w->SetSelectedGroup(company, group); } @@ -1349,7 +1349,7 @@ class SelectCompanyManagerFaceWindow : public Window } public: - SelectCompanyManagerFaceWindow(WindowDesc *desc, Window *parent) : Window(desc) + SelectCompanyManagerFaceWindow(WindowDesc &desc, Window *parent) : Window(desc) { this->advanced = false; this->CreateNestedTree(); @@ -1720,7 +1720,7 @@ static void DoSelectCompanyManagerFace(Window *parent) if (!Company::IsValidID((CompanyID)parent->window_number)) return; if (BringWindowToFrontById(WC_COMPANY_MANAGER_FACE, parent->window_number)) return; - new SelectCompanyManagerFaceWindow(&_select_company_manager_face_desc, parent); + new SelectCompanyManagerFaceWindow(_select_company_manager_face_desc, parent); } static constexpr NWidgetPart _nested_company_infrastructure_widgets[] = { @@ -1770,7 +1770,7 @@ struct CompanyInfrastructureWindow : Window uint total_width; ///< String width of the total cost line. - CompanyInfrastructureWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + CompanyInfrastructureWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->UpdateRailRoadTypes(); @@ -2094,7 +2094,7 @@ static WindowDesc _company_infrastructure_desc( static void ShowCompanyInfrastructure(CompanyID company) { if (!Company::IsValidID(company)) return; - AllocateWindowDescFront(&_company_infrastructure_desc, company); + AllocateWindowDescFront(_company_infrastructure_desc, company); } static constexpr NWidgetPart _nested_company_widgets[] = { @@ -2196,7 +2196,7 @@ struct CompanyWindow : Window CWP_RELOCATE_HIDE, ///< Hide the relocate HQ button. }; - CompanyWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + CompanyWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->InitNested(window_number); this->owner = (Owner)this->window_number; @@ -2567,7 +2567,7 @@ void ShowCompany(CompanyID company) { if (!Company::IsValidID(company)) return; - AllocateWindowDescFront(&_company_desc, company); + AllocateWindowDescFront(_company_desc, company); } /** @@ -2581,7 +2581,7 @@ void DirtyCompanyInfrastructureWindows(CompanyID company) } struct BuyCompanyWindow : Window { - BuyCompanyWindow(WindowDesc *desc, WindowNumber window_number, bool hostile_takeover) : Window(desc), hostile_takeover(hostile_takeover) + BuyCompanyWindow(WindowDesc &desc, WindowNumber window_number, bool hostile_takeover) : Window(desc), hostile_takeover(hostile_takeover) { this->InitNested(window_number); @@ -2702,6 +2702,6 @@ void ShowBuyCompanyDialog(CompanyID company, bool hostile_takeover) { auto window = BringWindowToFrontById(WC_BUY_COMPANY, company); if (window == nullptr) { - new BuyCompanyWindow(&_buy_company_desc, company, hostile_takeover); + new BuyCompanyWindow(_buy_company_desc, company, hostile_takeover); } } diff --git a/src/console_gui.cpp b/src/console_gui.cpp index 14f8ac7ec2..0f496dac1a 100644 --- a/src/console_gui.cpp +++ b/src/console_gui.cpp @@ -154,7 +154,7 @@ struct IConsoleWindow : Window int line_offset; int cursor_width; - IConsoleWindow() : Window(&_console_window_desc) + IConsoleWindow() : Window(_console_window_desc) { _iconsole_mode = ICONSOLE_OPENED; diff --git a/src/date_gui.cpp b/src/date_gui.cpp index 7faad2acf2..2a7c568e1b 100644 --- a/src/date_gui.cpp +++ b/src/date_gui.cpp @@ -40,7 +40,7 @@ struct SetDateWindow : Window { * @param max_year the maximum year (inclusive) to show in the year dropdown * @param callback the callback to call once a date has been selected */ - SetDateWindow(WindowDesc *desc, WindowNumber window_number, Window *parent, TimerGameEconomy::Date initial_date, TimerGameEconomy::Year min_year, TimerGameEconomy::Year max_year, SetDateCallback *callback, void *callback_data) : + SetDateWindow(WindowDesc &desc, WindowNumber window_number, Window *parent, TimerGameEconomy::Date initial_date, TimerGameEconomy::Year min_year, TimerGameEconomy::Year max_year, SetDateCallback *callback, void *callback_data) : Window(desc), callback(callback), callback_data(callback_data), @@ -216,5 +216,5 @@ static WindowDesc _set_date_desc( void ShowSetDateWindow(Window *parent, int window_number, TimerGameEconomy::Date initial_date, TimerGameEconomy::Year min_year, TimerGameEconomy::Year max_year, SetDateCallback *callback, void *callback_data) { CloseWindowByClass(WC_SET_DATE); - new SetDateWindow(&_set_date_desc, window_number, parent, initial_date, min_year, max_year, callback, callback_data); + new SetDateWindow(_set_date_desc, window_number, parent, initial_date, min_year, max_year, callback, callback_data); } diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index dd9def0443..de5107cec0 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -266,7 +266,7 @@ struct DepotWindow : Window { Scrollbar *hscroll; ///< Only for trains. Scrollbar *vscroll; - DepotWindow(WindowDesc *desc, TileIndex tile, VehicleType type) : Window(desc) + DepotWindow(WindowDesc &desc, TileIndex tile, VehicleType type) : Window(desc) { assert(IsCompanyBuildableVehicleType(type)); // ensure that we make the call with a valid type @@ -1142,16 +1142,13 @@ void ShowDepotWindow(TileIndex tile, VehicleType type) { if (BringWindowToFrontById(WC_VEHICLE_DEPOT, tile) != nullptr) return; - WindowDesc *desc; switch (type) { default: NOT_REACHED(); - case VEH_TRAIN: desc = &_train_depot_desc; break; - case VEH_ROAD: desc = &_road_depot_desc; break; - case VEH_SHIP: desc = &_ship_depot_desc; break; - case VEH_AIRCRAFT: desc = &_aircraft_depot_desc; break; + case VEH_TRAIN: new DepotWindow(_train_depot_desc, tile, type); break; + case VEH_ROAD: new DepotWindow(_road_depot_desc, tile, type); break; + case VEH_SHIP: new DepotWindow(_ship_depot_desc, tile, type); break; + case VEH_AIRCRAFT: new DepotWindow(_aircraft_depot_desc, tile, type); break; } - - new DepotWindow(desc, tile, type); } /** diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp index 8772a0baa5..673762dd4e 100644 --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -100,7 +100,7 @@ static TileIndex GetOtherAqueductEnd(TileIndex tile_from, TileIndex *tile_to = n struct BuildDocksToolbarWindow : Window { DockToolbarWidgets last_clicked_widget; ///< Contains the last widget that has been clicked on this toolbar. - BuildDocksToolbarWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + BuildDocksToolbarWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->last_clicked_widget = WID_DT_INVALID; this->InitNested(window_number); @@ -364,7 +364,7 @@ Window *ShowBuildDocksToolbar() if (!Company::IsValidID(_local_company)) return nullptr; CloseWindowByClass(WC_BUILD_TOOLBAR); - return AllocateWindowDescFront(&_build_docks_toolbar_desc, TRANSPORT_WATER); + return AllocateWindowDescFront(_build_docks_toolbar_desc, TRANSPORT_WATER); } /** @@ -402,7 +402,7 @@ static WindowDesc _build_docks_scen_toolbar_desc( */ Window *ShowBuildDocksScenToolbar() { - return AllocateWindowDescFront(&_build_docks_scen_toolbar_desc, TRANSPORT_WATER); + return AllocateWindowDescFront(_build_docks_scen_toolbar_desc, TRANSPORT_WATER); } /** Widget numbers of the build-dock GUI. */ @@ -416,7 +416,7 @@ enum BuildDockStationWidgets { struct BuildDocksStationWindow : public PickerWindowBase { public: - BuildDocksStationWindow(WindowDesc *desc, Window *parent) : PickerWindowBase(desc, parent) + BuildDocksStationWindow(WindowDesc &desc, Window *parent) : PickerWindowBase(desc, parent) { this->InitNested(TRANSPORT_WATER); this->LowerWidget(_settings_client.gui.station_show_coverage + BDSW_LT_OFF); @@ -507,7 +507,7 @@ static WindowDesc _build_dock_station_desc( static void ShowBuildDockStationPicker(Window *parent) { - new BuildDocksStationWindow(&_build_dock_station_desc, parent); + new BuildDocksStationWindow(_build_dock_station_desc, parent); } struct BuildDocksDepotWindow : public PickerWindowBase { @@ -522,7 +522,7 @@ private: } public: - BuildDocksDepotWindow(WindowDesc *desc, Window *parent) : PickerWindowBase(desc, parent) + BuildDocksDepotWindow(WindowDesc &desc, Window *parent) : PickerWindowBase(desc, parent) { this->InitNested(TRANSPORT_WATER); this->LowerWidget(WID_BDD_X + _ship_depot_direction); @@ -603,7 +603,7 @@ static WindowDesc _build_docks_depot_desc( static void ShowBuildDocksDepotPicker(Window *parent) { - new BuildDocksDepotWindow(&_build_docks_depot_desc, parent); + new BuildDocksDepotWindow(_build_docks_depot_desc, parent); } diff --git a/src/dropdown.cpp b/src/dropdown.cpp index 2e1cd43452..3eba2fb835 100644 --- a/src/dropdown.cpp +++ b/src/dropdown.cpp @@ -96,7 +96,7 @@ struct DropdownWindow : Window { * @param persist Dropdown menu will persist. */ DropdownWindow(Window *parent, DropDownList &&list, int selected, WidgetID button, const Rect wi_rect, bool instant_close, Colours wi_colour, bool persist) - : Window(&_dropdown_desc) + : Window(_dropdown_desc) , parent_button(button) , wi_rect(wi_rect) , list(std::move(list)) diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp index 172b22f507..31e5f68fac 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -70,7 +70,7 @@ static constexpr NWidgetPart _nested_engine_preview_widgets[] = { struct EnginePreviewWindow : Window { int vehicle_space; // The space to show the vehicle image - EnginePreviewWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + EnginePreviewWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->InitNested(window_number); @@ -154,7 +154,7 @@ static WindowDesc _engine_preview_desc( void ShowEnginePreviewWindow(EngineID engine) { - AllocateWindowDescFront(&_engine_preview_desc, engine); + AllocateWindowDescFront(_engine_preview_desc, engine); } /** diff --git a/src/error_gui.cpp b/src/error_gui.cpp index e702cdf133..982101fc50 100644 --- a/src/error_gui.cpp +++ b/src/error_gui.cpp @@ -175,7 +175,7 @@ private: public: ErrmsgWindow(const ErrorMessageData &data) : - Window(data.HasFace() ? &_errmsg_face_desc : &_errmsg_desc), + Window(data.HasFace() ? _errmsg_face_desc : _errmsg_desc), ErrorMessageData(data), display_timeout(std::chrono::seconds(3 * _settings_client.gui.errmsg_duration), [this]() { this->Close(); diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index 311f095703..2db7745c65 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -302,7 +302,7 @@ public: this->filename_editbox.text.Assign(GenerateDefaultSaveName()); } - SaveLoadWindow(WindowDesc *desc, AbstractFileType abstract_filetype, SaveLoadOperation fop) + SaveLoadWindow(WindowDesc &desc, AbstractFileType abstract_filetype, SaveLoadOperation fop) : Window(desc), filename_editbox(64), abstract_filetype(abstract_filetype), fop(fop), filter_editbox(EDITBOX_MAX_SIZE) { assert(this->fop == SLO_SAVE || this->fop == SLO_LOAD); @@ -915,13 +915,10 @@ void ShowSaveLoadDialog(AbstractFileType abstract_filetype, SaveLoadOperation fo { CloseWindowById(WC_SAVELOAD, 0); - WindowDesc *sld; if (fop == SLO_SAVE) { - sld = &_save_dialog_desc; + new SaveLoadWindow(_save_dialog_desc, abstract_filetype, fop); } else { /* Dialogue for loading a file. */ - sld = (abstract_filetype == FT_HEIGHTMAP) ? &_load_heightmap_dialog_desc : &_load_dialog_desc; + new SaveLoadWindow((abstract_filetype == FT_HEIGHTMAP) ? _load_heightmap_dialog_desc : _load_dialog_desc, abstract_filetype, fop); } - - new SaveLoadWindow(sld, abstract_filetype, fop); } diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index 56848b060a..a2c1a47049 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -448,7 +448,7 @@ struct FramerateWindow : Window { static constexpr int MIN_ELEMENTS = 5; ///< smallest number of elements to display - FramerateWindow(WindowDesc *desc, WindowNumber number) : Window(desc) + FramerateWindow(WindowDesc &desc, WindowNumber number) : Window(desc) { this->InitNested(number); this->small = this->IsShaded(); @@ -755,7 +755,7 @@ struct FrametimeGraphWindow : Window { PerformanceElement element; ///< what element this window renders graph for Dimension graph_size; ///< size of the main graph area (excluding axis labels) - FrametimeGraphWindow(WindowDesc *desc, WindowNumber number) : Window(desc) + FrametimeGraphWindow(WindowDesc &desc, WindowNumber number) : Window(desc) { this->element = (PerformanceElement)number; this->horizontal_scale = 4; @@ -1029,14 +1029,14 @@ static WindowDesc _frametime_graph_window_desc( /** Open the general framerate window */ void ShowFramerateWindow() { - AllocateWindowDescFront(&_framerate_display_desc, 0); + AllocateWindowDescFront(_framerate_display_desc, 0); } /** Open a graph window for a performance element */ void ShowFrametimeGraphWindow(PerformanceElement elem) { if (elem < PFE_FIRST || elem >= PFE_MAX) return; // maybe warn? - AllocateWindowDescFront(&_frametime_graph_window_desc, elem, true); + AllocateWindowDescFront(_frametime_graph_window_desc, elem, true); } /** Print performance statistics to game console */ diff --git a/src/game/game_gui.cpp b/src/game/game_gui.cpp index 7ad4cd7b42..8f0c1dde2c 100644 --- a/src/game/game_gui.cpp +++ b/src/game/game_gui.cpp @@ -96,7 +96,7 @@ struct GSConfigWindow : public Window { typedef std::vector VisibleSettingsList; ///< typdef for a vector of script settings VisibleSettingsList visible_settings; ///< List of visible GS settings - GSConfigWindow() : Window(&_gs_config_desc), + GSConfigWindow() : Window(_gs_config_desc), clicked_button(-1), clicked_dropdown(false), closing_dropdown(false) diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index e8dfa4b999..a9da133279 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -391,7 +391,7 @@ struct GenerateLandscapeWindow : public Window { std::string name; GenerateLandscapeWindowMode mode; - GenerateLandscapeWindow(WindowDesc *desc, WindowNumber number = 0) : Window(desc) + GenerateLandscapeWindow(WindowDesc &desc, WindowNumber number = 0) : Window(desc) { this->InitNested(number); @@ -1029,7 +1029,7 @@ static void _ShowGenerateLandscape(GenerateLandscapeWindowMode mode) if (!GetHeightmapDimensions(_file_to_saveload.detail_ftype, _file_to_saveload.name.c_str(), &x, &y)) return; } - WindowDesc *desc = (mode == GLWM_HEIGHTMAP) ? &_heightmap_load_desc : &_generate_landscape_desc; + WindowDesc &desc = (mode == GLWM_HEIGHTMAP) ? _heightmap_load_desc : _generate_landscape_desc; GenerateLandscapeWindow *w = AllocateWindowDescFront(desc, mode, true); if (mode == GLWM_HEIGHTMAP) { @@ -1075,7 +1075,7 @@ struct CreateScenarioWindow : public Window { WidgetID widget_id; - CreateScenarioWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + CreateScenarioWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->InitNested(window_number); this->LowerWidget(_settings_newgame.game_creation.landscape + WID_CS_TEMPERATE); @@ -1321,7 +1321,7 @@ static WindowDesc _create_scenario_desc( void ShowCreateScenario() { CloseWindowByClass(WC_GENERATE_LANDSCAPE); - new CreateScenarioWindow(&_create_scenario_desc, GLWM_SCENARIO); + new CreateScenarioWindow(_create_scenario_desc, GLWM_SCENARIO); } static constexpr NWidgetPart _nested_generate_progress_widgets[] = { @@ -1381,7 +1381,7 @@ static void AbortGeneratingWorldCallback(Window *, bool confirmed) struct GenerateProgressWindow : public Window { - GenerateProgressWindow() : Window(&_generate_progress_desc) + GenerateProgressWindow() : Window(_generate_progress_desc) { this->InitNested(); } diff --git a/src/goal_gui.cpp b/src/goal_gui.cpp index afbbd953d5..9104abfad3 100644 --- a/src/goal_gui.cpp +++ b/src/goal_gui.cpp @@ -40,7 +40,7 @@ enum GoalColumn { struct GoalListWindow : public Window { Scrollbar *vscroll; ///< Reference to the scrollbar widget. - GoalListWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + GoalListWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_GOAL_SCROLLBAR); @@ -317,7 +317,7 @@ void ShowGoalsList(CompanyID company) { if (!Company::IsValidID(company)) company = (CompanyID)INVALID_COMPANY; - AllocateWindowDescFront(&_goals_list_desc, company); + AllocateWindowDescFront(_goals_list_desc, company); } /** Ask a question about a goal. */ @@ -327,7 +327,7 @@ struct GoalQuestionWindow : public Window { int button[3]; ///< Buttons to display. TextColour colour; ///< Colour of the question text. - GoalQuestionWindow(WindowDesc *desc, WindowNumber window_number, TextColour colour, uint32_t button_mask, const std::string &question) : Window(desc), colour(colour) + GoalQuestionWindow(WindowDesc &desc, WindowNumber window_number, TextColour colour, uint32_t button_mask, const std::string &question) : Window(desc), colour(colour) { this->question = question; @@ -482,5 +482,5 @@ static WindowDesc _goal_question_list_desc[] = { void ShowGoalQuestion(uint16_t id, uint8_t type, uint32_t button_mask, const std::string &question) { assert(type < GQT_END); - new GoalQuestionWindow(&_goal_question_list_desc[type], id, type == 3 ? TC_WHITE : TC_BLACK, button_mask, question); + new GoalQuestionWindow(_goal_question_list_desc[type], id, type == 3 ? TC_WHITE : TC_BLACK, button_mask, question); } diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index e705e3749a..2ec9547f6e 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -49,7 +49,7 @@ static_assert(static_cast(INT64_MAX_IN_DOUBLE) < INT64_MAX); /****************/ struct GraphLegendWindow : Window { - GraphLegendWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + GraphLegendWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->InitNested(window_number); @@ -151,7 +151,7 @@ static WindowDesc _graph_legend_desc( static void ShowGraphLegend() { - AllocateWindowDescFront(&_graph_legend_desc, 0); + AllocateWindowDescFront(_graph_legend_desc, 0); } /** Contains the interval of a graph's data. */ @@ -493,7 +493,7 @@ protected: } - BaseGraphWindow(WindowDesc *desc, StringID format_str_y_axis) : + BaseGraphWindow(WindowDesc &desc, StringID format_str_y_axis) : Window(desc), format_str_y_axis(format_str_y_axis) { @@ -652,7 +652,7 @@ public: /********************/ struct OperatingProfitGraphWindow : BaseGraphWindow { - OperatingProfitGraphWindow(WindowDesc *desc, WindowNumber window_number) : + OperatingProfitGraphWindow(WindowDesc &desc, WindowNumber window_number) : BaseGraphWindow(desc, STR_JUST_CURRENCY_SHORT) { this->num_on_x_axis = GRAPH_NUM_MONTHS; @@ -702,7 +702,7 @@ static WindowDesc _operating_profit_desc( void ShowOperatingProfitGraph() { - AllocateWindowDescFront(&_operating_profit_desc, 0); + AllocateWindowDescFront(_operating_profit_desc, 0); } @@ -711,7 +711,7 @@ void ShowOperatingProfitGraph() /****************/ struct IncomeGraphWindow : BaseGraphWindow { - IncomeGraphWindow(WindowDesc *desc, WindowNumber window_number) : + IncomeGraphWindow(WindowDesc &desc, WindowNumber window_number) : BaseGraphWindow(desc, STR_JUST_CURRENCY_SHORT) { this->num_on_x_axis = GRAPH_NUM_MONTHS; @@ -760,7 +760,7 @@ static WindowDesc _income_graph_desc( void ShowIncomeGraph() { - AllocateWindowDescFront(&_income_graph_desc, 0); + AllocateWindowDescFront(_income_graph_desc, 0); } /*******************/ @@ -768,7 +768,7 @@ void ShowIncomeGraph() /*******************/ struct DeliveredCargoGraphWindow : BaseGraphWindow { - DeliveredCargoGraphWindow(WindowDesc *desc, WindowNumber window_number) : + DeliveredCargoGraphWindow(WindowDesc &desc, WindowNumber window_number) : BaseGraphWindow(desc, STR_JUST_COMMA) { this->num_on_x_axis = GRAPH_NUM_MONTHS; @@ -817,7 +817,7 @@ static WindowDesc _delivered_cargo_graph_desc( void ShowDeliveredCargoGraph() { - AllocateWindowDescFront(&_delivered_cargo_graph_desc, 0); + AllocateWindowDescFront(_delivered_cargo_graph_desc, 0); } /***********************/ @@ -825,7 +825,7 @@ void ShowDeliveredCargoGraph() /***********************/ struct PerformanceHistoryGraphWindow : BaseGraphWindow { - PerformanceHistoryGraphWindow(WindowDesc *desc, WindowNumber window_number) : + PerformanceHistoryGraphWindow(WindowDesc &desc, WindowNumber window_number) : BaseGraphWindow(desc, STR_JUST_COMMA) { this->num_on_x_axis = GRAPH_NUM_MONTHS; @@ -881,7 +881,7 @@ static WindowDesc _performance_history_desc( void ShowPerformanceHistoryGraph() { - AllocateWindowDescFront(&_performance_history_desc, 0); + AllocateWindowDescFront(_performance_history_desc, 0); } /*****************/ @@ -889,7 +889,7 @@ void ShowPerformanceHistoryGraph() /*****************/ struct CompanyValueGraphWindow : BaseGraphWindow { - CompanyValueGraphWindow(WindowDesc *desc, WindowNumber window_number) : + CompanyValueGraphWindow(WindowDesc &desc, WindowNumber window_number) : BaseGraphWindow(desc, STR_JUST_CURRENCY_SHORT) { this->num_on_x_axis = GRAPH_NUM_MONTHS; @@ -938,7 +938,7 @@ static WindowDesc _company_value_graph_desc( void ShowCompanyValueGraph() { - AllocateWindowDescFront(&_company_value_graph_desc, 0); + AllocateWindowDescFront(_company_value_graph_desc, 0); } /*****************/ @@ -950,7 +950,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { Scrollbar *vscroll; ///< Cargo list scrollbar. uint legend_width; ///< Width of legend 'blob'. - PaymentRatesGraphWindow(WindowDesc *desc, WindowNumber window_number) : + PaymentRatesGraphWindow(WindowDesc &desc, WindowNumber window_number) : BaseGraphWindow(desc, STR_JUST_CURRENCY_SHORT) { this->num_on_x_axis = 20; @@ -1176,7 +1176,7 @@ static WindowDesc _cargo_payment_rates_desc( void ShowCargoPaymentRates() { - AllocateWindowDescFront(&_cargo_payment_rates_desc, 0); + AllocateWindowDescFront(_cargo_payment_rates_desc, 0); } /*****************************/ @@ -1187,7 +1187,7 @@ struct PerformanceRatingDetailWindow : Window { static CompanyID company; int timeout; - PerformanceRatingDetailWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + PerformanceRatingDetailWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->UpdateCompanyStats(); @@ -1470,7 +1470,7 @@ static WindowDesc _performance_rating_detail_desc( void ShowPerformanceRatingDetail() { - AllocateWindowDescFront(&_performance_rating_detail_desc, 0); + AllocateWindowDescFront(_performance_rating_detail_desc, 0); } void InitializeGraphGui() diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 7e68691306..089a529203 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -388,7 +388,7 @@ private: } public: - VehicleGroupWindow(WindowDesc *desc, WindowNumber window_number) : BaseVehicleListWindow(desc, window_number) + VehicleGroupWindow(WindowDesc &desc, WindowNumber window_number) : BaseVehicleListWindow(desc, window_number) { this->CreateNestedTree(); @@ -1170,10 +1170,10 @@ void ShowCompanyGroup(CompanyID company, VehicleType vehicle_type, GroupID group const WindowNumber num = VehicleListIdentifier(VL_GROUP_LIST, vehicle_type, company).Pack(); VehicleGroupWindow *w; if (vehicle_type == VEH_TRAIN) { - w = AllocateWindowDescFront(&_train_group_desc, num, need_existing_window); + w = AllocateWindowDescFront(_train_group_desc, num, need_existing_window); } else { _other_group_desc.cls = GetWindowClassForVehicleType(vehicle_type); - w = AllocateWindowDescFront(&_other_group_desc, num, need_existing_window); + w = AllocateWindowDescFront(_other_group_desc, num, need_existing_window); } if (w != nullptr) w->SelectGroup(group); } diff --git a/src/help_gui.cpp b/src/help_gui.cpp index fdf2975393..1c6f7fb167 100644 --- a/src/help_gui.cpp +++ b/src/help_gui.cpp @@ -121,7 +121,7 @@ struct GameManualTextfileWindow : public TextfileWindow { /** Window class displaying the help window. */ struct HelpWindow : public Window { - HelpWindow(WindowDesc *desc, WindowNumber number) : Window(desc) + HelpWindow(WindowDesc &desc, WindowNumber number) : Window(desc) { this->InitNested(number); @@ -202,5 +202,5 @@ static WindowDesc _helpwin_desc( void ShowHelpWindow() { - AllocateWindowDescFront(&_helpwin_desc, 0); + AllocateWindowDescFront(_helpwin_desc, 0); } diff --git a/src/highscore_gui.cpp b/src/highscore_gui.cpp index 3cd70d1712..a8b8377463 100644 --- a/src/highscore_gui.cpp +++ b/src/highscore_gui.cpp @@ -33,7 +33,7 @@ struct EndGameHighScoreBaseWindow : Window { uint32_t background_img; int8_t rank; - EndGameHighScoreBaseWindow(WindowDesc *desc) : Window(desc) + EndGameHighScoreBaseWindow(WindowDesc &desc) : Window(desc) { this->InitNested(); CLRBITS(this->flags, WF_WHITE_BORDER); @@ -96,7 +96,7 @@ struct EndGameHighScoreBaseWindow : Window { /** End game window shown at the end of the game */ struct EndGameWindow : EndGameHighScoreBaseWindow { - EndGameWindow(WindowDesc *desc) : EndGameHighScoreBaseWindow(desc) + EndGameWindow(WindowDesc &desc) : EndGameHighScoreBaseWindow(desc) { /* Pause in single-player to have a look at the highscore at your own leisure */ if (!_networking) Command::Post(PM_PAUSED_NORMAL, true); @@ -158,7 +158,7 @@ struct EndGameWindow : EndGameHighScoreBaseWindow { struct HighScoreWindow : EndGameHighScoreBaseWindow { bool game_paused_by_player; ///< True if the game was paused by the player when the highscore window was opened. - HighScoreWindow(WindowDesc *desc, int difficulty, int8_t ranking) : EndGameHighScoreBaseWindow(desc) + HighScoreWindow(WindowDesc &desc, int difficulty, int8_t ranking) : EndGameHighScoreBaseWindow(desc) { /* pause game to show the chart */ this->game_paused_by_player = _pause_mode == PM_PAUSED_NORMAL; @@ -236,7 +236,7 @@ static WindowDesc _endgame_desc( void ShowHighscoreTable(int difficulty, int8_t ranking) { CloseWindowByClass(WC_HIGHSCORE); - new HighScoreWindow(&_highscore_desc, difficulty, ranking); + new HighScoreWindow(_highscore_desc, difficulty, ranking); } /** @@ -250,7 +250,7 @@ void ShowEndGameChart() HideVitalWindows(); CloseWindowByClass(WC_ENDSCREEN); - new EndGameWindow(&_endgame_desc); + new EndGameWindow(_endgame_desc); } static IntervalTimer _check_end_game({TimerGameCalendar::YEAR, TimerGameCalendar::Priority::NONE}, [](auto) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 35cc27d837..633d0eb118 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -403,7 +403,7 @@ class BuildIndustryWindow : public Window { } public: - BuildIndustryWindow() : Window(&_build_industry_desc) + BuildIndustryWindow() : Window(_build_industry_desc) { this->selected_type = INVALID_INDUSTRYTYPE; @@ -812,7 +812,7 @@ class IndustryViewWindow : public Window int cheat_line_height; ///< Height of each line for the #WID_IV_INFO panel public: - IndustryViewWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + IndustryViewWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->flags |= WF_DISABLE_VP_SCROLL; this->editbox_line = IL_NONE; @@ -1226,7 +1226,7 @@ static WindowDesc _industry_view_desc( void ShowIndustryViewWindow(int industry) { - AllocateWindowDescFront(&_industry_view_desc, industry); + AllocateWindowDescFront(_industry_view_desc, industry); } /** Widget definition of the industry directory gui */ @@ -1636,7 +1636,7 @@ protected: } public: - IndustryDirectoryWindow(WindowDesc *desc, WindowNumber) : Window(desc), industry_editbox(MAX_FILTER_LENGTH * MAX_CHAR_LENGTH, MAX_FILTER_LENGTH) + IndustryDirectoryWindow(WindowDesc &desc, WindowNumber) : Window(desc), industry_editbox(MAX_FILTER_LENGTH * MAX_CHAR_LENGTH, MAX_FILTER_LENGTH) { this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_ID_VSCROLLBAR); @@ -1925,7 +1925,7 @@ static WindowDesc _industry_directory_desc( void ShowIndustryDirectory() { - AllocateWindowDescFront(&_industry_directory_desc, 0); + AllocateWindowDescFront(_industry_directory_desc, 0); } /** Widgets of the industry cargoes window. */ @@ -2542,7 +2542,7 @@ struct IndustryCargoesWindow : public Window { Dimension ind_textsize; ///< Size to hold any industry type text, as well as STR_INDUSTRY_CARGOES_SELECT_INDUSTRY. Scrollbar *vscroll; - IndustryCargoesWindow(int id) : Window(&_industry_cargoes_desc) + IndustryCargoesWindow(int id) : Window(_industry_cargoes_desc) { this->OnInit(); this->CreateNestedTree(); diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index 092c5964ae..713031e5da 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -176,7 +176,7 @@ struct SelectGameWindow : public Window { } } - SelectGameWindow(WindowDesc *desc) : Window(desc) + SelectGameWindow(WindowDesc &desc) : Window(desc) { this->CreateNestedTree(); this->FinishInitNested(0); @@ -465,7 +465,7 @@ static WindowDesc _select_game_desc( void ShowSelectGameWindow() { - new SelectGameWindow(&_select_game_desc); + new SelectGameWindow(_select_game_desc); } static void AskExitGameCallback(Window *, bool confirmed) diff --git a/src/league_gui.cpp b/src/league_gui.cpp index 8b52359c92..70f2314257 100644 --- a/src/league_gui.cpp +++ b/src/league_gui.cpp @@ -86,7 +86,7 @@ private: } public: - PerformanceLeagueWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + PerformanceLeagueWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->InitNested(window_number); this->companies.ForceRebuild(); @@ -209,7 +209,7 @@ static WindowDesc _performance_league_desc( void ShowPerformanceLeagueTable() { - AllocateWindowDescFront(&_performance_league_desc, 0); + AllocateWindowDescFront(_performance_league_desc, 0); } static void HandleLinkClick(Link link) @@ -298,7 +298,7 @@ private: } public: - ScriptLeagueWindow(WindowDesc *desc, LeagueTableID table) : Window(desc) + ScriptLeagueWindow(WindowDesc &desc, LeagueTableID table) : Window(desc) { this->table = table; this->BuildTable(); @@ -445,7 +445,7 @@ static WindowDesc _script_league_desc( void ShowScriptLeagueTable(LeagueTableID table) { if (!LeagueTable::IsValidID(table)) return; - AllocateWindowDescFront(&_script_league_desc, table); + AllocateWindowDescFront(_script_league_desc, table); } void ShowFirstLeagueTable() diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index 937f24509c..f59797a812 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -548,10 +548,10 @@ static WindowDesc _linkgraph_legend_desc( */ void ShowLinkGraphLegend() { - AllocateWindowDescFront(&_linkgraph_legend_desc, 0); + AllocateWindowDescFront(_linkgraph_legend_desc, 0); } -LinkGraphLegendWindow::LinkGraphLegendWindow(WindowDesc *desc, int window_number) : Window(desc) +LinkGraphLegendWindow::LinkGraphLegendWindow(WindowDesc &desc, int window_number) : Window(desc) { this->num_cargo = _sorted_cargo_specs.size(); diff --git a/src/linkgraph/linkgraph_gui.h b/src/linkgraph/linkgraph_gui.h index a8dc91c822..ce7219fe43 100644 --- a/src/linkgraph/linkgraph_gui.h +++ b/src/linkgraph/linkgraph_gui.h @@ -105,7 +105,7 @@ void ShowLinkGraphLegend(); */ struct LinkGraphLegendWindow : Window { public: - LinkGraphLegendWindow(WindowDesc *desc, int window_number); + LinkGraphLegendWindow(WindowDesc &desc, int window_number); void SetOverlay(std::shared_ptr overlay); void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override; diff --git a/src/main_gui.cpp b/src/main_gui.cpp index 52e5a5491a..8a6b7132c9 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -211,7 +211,7 @@ enum { struct MainWindow : Window { - MainWindow(WindowDesc *desc) : Window(desc) + MainWindow(WindowDesc &desc) : Window(desc) { this->InitNested(0); CLRBITS(this->flags, WF_WHITE_BORDER); @@ -548,7 +548,7 @@ void SetupColoursAndInitialWindow() } } - new MainWindow(&_main_window_desc); + new MainWindow(_main_window_desc); /* XXX: these are not done */ switch (_game_mode) { diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index f0de0d1cf4..6c53b5f499 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -110,7 +110,7 @@ public: } } - LandInfoWindow(Tile tile) : Window(&_land_info_desc), tile(tile) + LandInfoWindow(Tile tile) : Window(_land_info_desc), tile(tile) { this->InitNested(); @@ -477,7 +477,7 @@ struct AboutWindow : public Window { int line_height; ///< The height of a single line static const int num_visible_lines = 19; ///< The number of lines visible simultaneously - AboutWindow() : Window(&_about_desc) + AboutWindow() : Window(_about_desc) { this->InitNested(WN_GAME_OPTIONS_ABOUT); @@ -671,7 +671,7 @@ struct TooltipsWindow : public Window std::vector params; ///< The string parameters. TooltipCloseCondition close_cond; ///< Condition for closing the window. - TooltipsWindow(Window *parent, StringID str, uint paramcount, TooltipCloseCondition close_tooltip) : Window(&_tool_tips_desc) + TooltipsWindow(Window *parent, StringID str, uint paramcount, TooltipCloseCondition close_tooltip) : Window(_tool_tips_desc) { this->parent = parent; this->string_id = str; @@ -971,7 +971,7 @@ struct QueryStringWindow : public Window QueryString editbox; ///< Editbox. QueryStringFlags flags; ///< Flags controlling behaviour of the window. - QueryStringWindow(StringID str, StringID caption, uint max_bytes, uint max_chars, WindowDesc *desc, Window *parent, CharSetFilter afilter, QueryStringFlags flags) : + QueryStringWindow(StringID str, StringID caption, uint max_bytes, uint max_chars, WindowDesc &desc, Window *parent, CharSetFilter afilter, QueryStringFlags flags) : Window(desc), editbox(max_bytes, max_chars) { this->editbox.text.Assign(str); @@ -1081,7 +1081,7 @@ void ShowQueryString(StringID str, StringID caption, uint maxsize, Window *paren assert(parent != nullptr); CloseWindowByClass(WC_QUERY_STRING); - new QueryStringWindow(str, caption, ((flags & QSF_LEN_IN_CHARS) ? MAX_CHAR_LENGTH : 1) * maxsize, maxsize, &_query_string_desc, parent, afilter, flags); + new QueryStringWindow(str, caption, ((flags & QSF_LEN_IN_CHARS) ? MAX_CHAR_LENGTH : 1) * maxsize, maxsize, _query_string_desc, parent, afilter, flags); } /** @@ -1092,7 +1092,7 @@ struct QueryWindow : public Window { std::vector params; ///< local copy of #_global_string_params StringID message; ///< message shown for query window - QueryWindow(WindowDesc *desc, StringID caption, StringID message, Window *parent, QueryCallbackProc *callback) : Window(desc) + QueryWindow(WindowDesc &desc, StringID caption, StringID message, Window *parent, QueryCallbackProc *callback) : Window(desc) { /* Create a backup of the variadic arguments to strings because it will be * overridden pretty often. We will copy these back for drawing */ @@ -1234,6 +1234,6 @@ void ShowQuery(StringID caption, StringID message, Window *parent, QueryCallback break; } - QueryWindow *q = new QueryWindow(&_query_desc, caption, message, parent, callback); + QueryWindow *q = new QueryWindow(_query_desc, caption, message, parent, callback); if (focus) SetFocusedWindow(q); } diff --git a/src/music_gui.cpp b/src/music_gui.cpp index 4f9e5b978d..bfac1656ef 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -477,7 +477,7 @@ void InitializeMusic() struct MusicTrackSelectionWindow : public Window { - MusicTrackSelectionWindow(WindowDesc *desc, WindowNumber number) : Window(desc) + MusicTrackSelectionWindow(WindowDesc &desc, WindowNumber number) : Window(desc) { this->InitNested(number); this->LowerWidget(WID_MTS_LIST_LEFT); @@ -676,11 +676,11 @@ static WindowDesc _music_track_selection_desc( static void ShowMusicTrackSelection() { - AllocateWindowDescFront(&_music_track_selection_desc, 0); + AllocateWindowDescFront(_music_track_selection_desc, 0); } struct MusicWindow : public Window { - MusicWindow(WindowDesc *desc, WindowNumber number) : Window(desc) + MusicWindow(WindowDesc &desc, WindowNumber number) : Window(desc) { this->InitNested(number); this->LowerWidget(_settings_client.music.playlist + WID_M_ALL); @@ -935,5 +935,5 @@ static WindowDesc _music_window_desc( void ShowMusicWindow() { - AllocateWindowDescFront(&_music_window_desc, 0); + AllocateWindowDescFront(_music_window_desc, 0); } diff --git a/src/network/network_chat_gui.cpp b/src/network/network_chat_gui.cpp index 25ab13d932..c10cf969ed 100644 --- a/src/network/network_chat_gui.cpp +++ b/src/network/network_chat_gui.cpp @@ -310,7 +310,7 @@ struct NetworkChatWindow : public Window { * @param type The type of destination. * @param dest The actual destination index. */ - NetworkChatWindow(WindowDesc *desc, DestType type, int dest) + NetworkChatWindow(WindowDesc &desc, DestType type, int dest) : Window(desc), message_editbox(NETWORK_CHAT_LENGTH), chat_tab_completion(&message_editbox.text) { this->dtype = type; @@ -445,5 +445,5 @@ static WindowDesc _chat_window_desc( void ShowNetworkChatQueryWindow(DestType type, int dest) { CloseWindowByClass(WC_SEND_NETWORK_MSG); - new NetworkChatWindow(&_chat_window_desc, type, dest); + new NetworkChatWindow(_chat_window_desc, type, dest); } diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 8facf62fe4..f20d470903 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -101,7 +101,7 @@ static WindowDesc _network_content_download_status_window_desc( std::begin(_nested_network_content_download_status_window_widgets), std::end(_nested_network_content_download_status_window_widgets) ); -BaseNetworkContentDownloadStatusWindow::BaseNetworkContentDownloadStatusWindow(WindowDesc *desc) : +BaseNetworkContentDownloadStatusWindow::BaseNetworkContentDownloadStatusWindow(WindowDesc &desc) : Window(desc), downloaded_bytes(0), downloaded_files(0), cur_id(UINT32_MAX) { _network_content_client.AddCallback(this); @@ -197,7 +197,7 @@ public: * Create a new download window based on a list of content information * with flags whether to download them or not. */ - NetworkContentDownloadStatusWindow() : BaseNetworkContentDownloadStatusWindow(&_network_content_download_status_window_desc) + NetworkContentDownloadStatusWindow() : BaseNetworkContentDownloadStatusWindow(_network_content_download_status_window_desc) { this->parent = FindWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_CONTENT_LIST); } @@ -542,7 +542,7 @@ public: * other types are only shown when content that depend on them are * selected. */ - NetworkContentListWindow(WindowDesc *desc, bool select_all, const std::bitset &types) : + NetworkContentListWindow(WindowDesc &desc, bool select_all, const std::bitset &types) : Window(desc), auto_select(select_all), filter_editbox(EDITBOX_MAX_SIZE), @@ -1144,7 +1144,7 @@ void ShowNetworkContentListWindow(ContentVector *cv, ContentType type1, ContentT } CloseWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_CONTENT_LIST); - new NetworkContentListWindow(&_network_content_list_desc, cv != nullptr, types); + new NetworkContentListWindow(_network_content_list_desc, cv != nullptr, types); #else ShowErrorMessage(STR_CONTENT_NO_ZLIB, STR_CONTENT_NO_ZLIB_SUB, WL_ERROR); /* Connection failed... clean up the mess */ diff --git a/src/network/network_content_gui.h b/src/network/network_content_gui.h index a0f014e239..b32022ec69 100644 --- a/src/network/network_content_gui.h +++ b/src/network/network_content_gui.h @@ -30,7 +30,7 @@ public: * Create the window with the given description. * @param desc The description of the window. */ - BaseNetworkContentDownloadStatusWindow(WindowDesc *desc); + BaseNetworkContentDownloadStatusWindow(WindowDesc &desc); void Close([[maybe_unused]] int data = 0) override; void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override; diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 7f279f9004..13a8ae5d69 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -430,7 +430,7 @@ protected: } public: - NetworkGameWindow(WindowDesc *desc) : Window(desc), name_editbox(NETWORK_CLIENT_NAME_LENGTH), filter_editbox(120) + NetworkGameWindow(WindowDesc &desc) : Window(desc), name_editbox(NETWORK_CLIENT_NAME_LENGTH), filter_editbox(120) { this->list_pos = SLP_INVALID; this->server = nullptr; @@ -976,14 +976,14 @@ void ShowNetworkGameWindow() } } - new NetworkGameWindow(&_network_game_window_desc); + new NetworkGameWindow(_network_game_window_desc); } struct NetworkStartServerWindow : public Window { WidgetID widget_id; ///< The widget that has the pop-up input menu QueryString name_editbox; ///< Server name editbox. - NetworkStartServerWindow(WindowDesc *desc) : Window(desc), name_editbox(NETWORK_NAME_LENGTH) + NetworkStartServerWindow(WindowDesc &desc) : Window(desc), name_editbox(NETWORK_NAME_LENGTH) { this->InitNested(WN_NETWORK_WINDOW_START); @@ -1235,7 +1235,7 @@ static void ShowNetworkStartServerWindow() CloseWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_GAME); - new NetworkStartServerWindow(&_network_start_server_window_desc); + new NetworkStartServerWindow(_network_start_server_window_desc); } /* The window below gives information about the connected clients @@ -1630,7 +1630,7 @@ private: } public: - NetworkClientListWindow(WindowDesc *desc, WindowNumber window_number) : + NetworkClientListWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc), hover_index(-1), player_self_index(-1), @@ -2066,7 +2066,7 @@ public: void ShowClientList() { - AllocateWindowDescFront(&_client_list_desc, 0); + AllocateWindowDescFront(_client_list_desc, 0); } NetworkJoinStatus _network_join_status; ///< The status of joining. @@ -2077,7 +2077,7 @@ uint32_t _network_join_bytes_total; ///< The total number of bytes to down struct NetworkJoinStatusWindow : Window { std::shared_ptr request; - NetworkJoinStatusWindow(WindowDesc *desc) : Window(desc) + NetworkJoinStatusWindow(WindowDesc &desc) : Window(desc) { this->parent = FindWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_GAME); this->InitNested(WN_NETWORK_STATUS_WINDOW_JOIN); @@ -2201,7 +2201,7 @@ static WindowDesc _network_join_status_window_desc( void ShowJoinStatusWindow() { CloseWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); - new NetworkJoinStatusWindow(&_network_join_status_window_desc); + new NetworkJoinStatusWindow(_network_join_status_window_desc); } void ShowNetworkNeedPassword(std::shared_ptr request) @@ -2221,7 +2221,7 @@ struct NetworkAskRelayWindow : public Window { std::string relay_connection_string; ///< The relay server we want to connect to. std::string token; ///< The token for this connection. - NetworkAskRelayWindow(WindowDesc *desc, Window *parent, const std::string &server_connection_string, const std::string &relay_connection_string, const std::string &token) : + NetworkAskRelayWindow(WindowDesc &desc, Window *parent, const std::string &server_connection_string, const std::string &relay_connection_string, const std::string &token) : Window(desc), server_connection_string(server_connection_string), relay_connection_string(relay_connection_string), @@ -2326,14 +2326,14 @@ void ShowNetworkAskRelay(const std::string &server_connection_string, const std: CloseWindowByClass(WC_NETWORK_ASK_RELAY, NRWCD_HANDLED); Window *parent = GetMainWindow(); - new NetworkAskRelayWindow(&_network_ask_relay_desc, parent, server_connection_string, relay_connection_string, token); + new NetworkAskRelayWindow(_network_ask_relay_desc, parent, server_connection_string, relay_connection_string, token); } /** * Window used for asking if the user wants to participate in the automated survey. */ struct NetworkAskSurveyWindow : public Window { - NetworkAskSurveyWindow(WindowDesc *desc, Window *parent) : + NetworkAskSurveyWindow(WindowDesc &desc, Window *parent) : Window(desc) { this->parent = parent; @@ -2424,7 +2424,7 @@ void ShowNetworkAskSurvey() CloseWindowByClass(WC_NETWORK_ASK_SURVEY); Window *parent = GetMainWindow(); - new NetworkAskSurveyWindow(&_network_ask_survey_desc, parent); + new NetworkAskSurveyWindow(_network_ask_survey_desc, parent); } /** Window for displaying the textfile of a survey result. */ diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index 18ce097972..d0f16329e0 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -338,7 +338,7 @@ struct NewGRFInspectWindow : Window { if (v == nullptr) this->chain_index = 0; } - NewGRFInspectWindow(WindowDesc *desc, WindowNumber wno) : Window(desc) + NewGRFInspectWindow(WindowDesc &desc, WindowNumber wno) : Window(desc) { this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_NGRFI_SCROLLBAR); @@ -697,7 +697,7 @@ void ShowNewGRFInspectWindow(GrfSpecFeature feature, uint index, const uint32_t if (!IsNewGRFInspectable(feature, index)) return; WindowNumber wno = GetInspectWindowNumber(feature, index); - WindowDesc *desc = (feature == GSF_TRAINS || feature == GSF_ROADVEHICLES) ? &_newgrf_inspect_chain_desc : &_newgrf_inspect_desc; + WindowDesc &desc = (feature == GSF_TRAINS || feature == GSF_ROADVEHICLES) ? _newgrf_inspect_chain_desc : _newgrf_inspect_desc; NewGRFInspectWindow *w = AllocateWindowDescFront(desc, wno, true); w->SetCallerGRFID(grfid); } @@ -813,7 +813,7 @@ struct SpriteAlignerWindow : Window { static bool crosshair; const Action5Type *act5_type = nullptr; ///< Sprite Area of current selected sprite. - SpriteAlignerWindow(WindowDesc *desc, WindowNumber wno) : Window(desc) + SpriteAlignerWindow(WindowDesc &desc, WindowNumber wno) : Window(desc) { /* On first opening, set initial zoom to current zoom level. */ if (SpriteAlignerWindow::zoom == ZOOM_LVL_END) SpriteAlignerWindow::zoom = _gui_zoom; @@ -1212,5 +1212,5 @@ static WindowDesc _sprite_aligner_desc( */ void ShowSpriteAlignerWindow() { - AllocateWindowDescFront(&_sprite_aligner_desc, 0); + AllocateWindowDescFront(_sprite_aligner_desc, 0); } diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index c9c11151fc..c530ed26e5 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -156,7 +156,7 @@ struct NewGRFParametersWindow : public Window { bool action14present; ///< True if action14 information is present. bool editable; ///< Allow editing parameters. - NewGRFParametersWindow(WindowDesc *desc, bool is_baseset, GRFConfig *c, bool editable) : Window(desc), + NewGRFParametersWindow(WindowDesc &desc, bool is_baseset, GRFConfig *c, bool editable) : Window(desc), grf_config(c), clicked_button(INT32_MAX), clicked_dropdown(false), @@ -551,7 +551,7 @@ static WindowDesc _newgrf_parameters_desc( void OpenGRFParameterWindow(bool is_baseset, GRFConfig *c, bool editable) { CloseWindowByClass(WC_GRF_PARAMETERS); - new NewGRFParametersWindow(&_newgrf_parameters_desc, is_baseset, c, editable); + new NewGRFParametersWindow(_newgrf_parameters_desc, is_baseset, c, editable); } /** Window for displaying the textfile of a NewGRF. */ @@ -634,7 +634,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { Scrollbar *vscroll; Scrollbar *vscroll2; - NewGRFWindow(WindowDesc *desc, bool editable, bool show_params, bool execute, GRFConfig **orig_list) : Window(desc), filter_editbox(EDITBOX_MAX_SIZE) + NewGRFWindow(WindowDesc &desc, bool editable, bool show_params, bool execute, GRFConfig **orig_list) : Window(desc), filter_editbox(EDITBOX_MAX_SIZE) { this->avail_sel = nullptr; this->avail_pos = -1; @@ -2020,7 +2020,7 @@ static void NewGRFConfirmationCallback(Window *w, bool confirmed) void ShowNewGRFSettings(bool editable, bool show_params, bool exec_changes, GRFConfig **config) { CloseWindowByClass(WC_GAME_OPTIONS); - new NewGRFWindow(&_newgrf_desc, editable, show_params, exec_changes, config); + new NewGRFWindow(_newgrf_desc, editable, show_params, exec_changes, config); } /** Widget parts of the save preset window. */ @@ -2067,7 +2067,7 @@ struct SavePresetWindow : public Window { * Constructor of the save preset window. * @param initial_text Initial text to display in the edit box, or \c nullptr. */ - SavePresetWindow(const char *initial_text) : Window(&_save_preset_desc), presetname_editbox(32) + SavePresetWindow(const char *initial_text) : Window(_save_preset_desc), presetname_editbox(32) { this->presets = GetGRFPresetList(); this->selected = -1; @@ -2207,7 +2207,7 @@ struct ScanProgressWindow : public Window { int scanned; ///< The number of NewGRFs that we have seen. /** Create the window. */ - ScanProgressWindow() : Window(&_scan_progress_desc), scanned(0) + ScanProgressWindow() : Window(_scan_progress_desc), scanned(0) { this->InitNested(1); } diff --git a/src/news_gui.cpp b/src/news_gui.cpp index b7b16dc718..cf5550b700 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -234,11 +234,11 @@ static WindowDesc *_news_window_layout[] = { &_company_news_desc, ///< NF_COMPANY }; -WindowDesc *GetNewsWindowLayout(NewsFlag flags) +WindowDesc &GetNewsWindowLayout(NewsFlag flags) { uint layout = GB(flags, NFB_WINDOW_LAYOUT, NFB_WINDOW_LAYOUT_COUNT); assert(layout < lengthof(_news_window_layout)); - return _news_window_layout[layout]; + return *_news_window_layout[layout]; } /** @@ -284,7 +284,7 @@ struct NewsWindow : Window { const NewsItem *ni; ///< News item to display. static int duration; ///< Remaining time for showing the current news message (may only be access while a news item is displayed). - NewsWindow(WindowDesc *desc, const NewsItem *ni) : Window(desc), ni(ni) + NewsWindow(WindowDesc &desc, const NewsItem *ni) : Window(desc), ni(ni) { NewsWindow::duration = 16650; const Window *w = FindWindowByClass(WC_SEND_NETWORK_MSG); @@ -296,7 +296,7 @@ struct NewsWindow : Window { this->CreateNestedTree(); /* For company news with a face we have a separate headline in param[0] */ - if (desc == &_company_news_desc) this->GetWidget(WID_N_TITLE)->widget_data = this->ni->params[0].data; + if (&desc == &_company_news_desc) this->GetWidget(WID_N_TITLE)->widget_data = this->ni->params[0].data; NWidgetCore *nwid = this->GetWidget(WID_N_SHOW_GROUP); if (ni->reftype1 == NR_VEHICLE && nwid != nullptr) { @@ -1103,7 +1103,7 @@ struct MessageHistoryWindow : Window { Scrollbar *vscroll; - MessageHistoryWindow(WindowDesc *desc) : Window(desc) + MessageHistoryWindow(WindowDesc &desc) : Window(desc) { this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_MH_SCROLLBAR); @@ -1208,5 +1208,5 @@ static WindowDesc _message_history_desc( void ShowMessageHistory() { CloseWindowById(WC_MESSAGE_HISTORY, 0); - new MessageHistoryWindow(&_message_history_desc); + new MessageHistoryWindow(_message_history_desc); } diff --git a/src/object_gui.cpp b/src/object_gui.cpp index bc8a9f6b5e..494d1445d9 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -114,7 +114,7 @@ class BuildObjectWindow : public PickerWindow { int info_height; ///< The height of the info box. public: - BuildObjectWindow(WindowDesc *desc, WindowNumber) : PickerWindow(desc, nullptr, 0, ObjectPickerCallbacks::instance), info_height(1) + BuildObjectWindow(WindowDesc &desc, WindowNumber) : PickerWindow(desc, nullptr, 0, ObjectPickerCallbacks::instance), info_height(1) { ResetObjectToPlace(); this->ConstructWindow(); @@ -410,7 +410,7 @@ Window *ShowBuildObjectPicker() { /* Don't show the place object button when there are no objects to place. */ if (ObjectPickerCallbacks::instance.IsActive()) { - return AllocateWindowDescFront(&_build_object_desc, 0); + return AllocateWindowDescFront(_build_object_desc, 0); } return nullptr; } diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 43101d1cd1..762ab62e46 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -796,7 +796,7 @@ private: } public: - OrdersWindow(WindowDesc *desc, const Vehicle *v) : Window(desc) + OrdersWindow(WindowDesc &desc, const Vehicle *v) : Window(desc) { this->vehicle = v; @@ -1794,8 +1794,8 @@ void ShowOrdersWindow(const Vehicle *v) * TODO Rewrite the order GUI to not use different WindowDescs. */ if (v->owner != _local_company) { - new OrdersWindow(&_other_orders_desc, v); + new OrdersWindow(_other_orders_desc, v); } else { - new OrdersWindow(v->IsGroundVehicle() ? &_orders_train_desc : &_orders_desc, v); + new OrdersWindow(v->IsGroundVehicle() ? _orders_train_desc : _orders_desc, v); } } diff --git a/src/osk_gui.cpp b/src/osk_gui.cpp index 1949b8008e..f3ae270576 100644 --- a/src/osk_gui.cpp +++ b/src/osk_gui.cpp @@ -42,7 +42,7 @@ struct OskWindow : public Window { std::string orig_str; ///< Original string. bool shift; ///< Is the shift effectively pressed? - OskWindow(WindowDesc *desc, Window *parent, WidgetID button) : Window(desc) + OskWindow(WindowDesc &desc, Window *parent, WidgetID button) : Window(desc) { this->parent = parent; assert(parent != nullptr); @@ -397,7 +397,7 @@ void ShowOnScreenKeyboard(Window *parent, WidgetID button) CloseWindowById(WC_OSK, 0); GetKeyboardLayout(); - new OskWindow(&_osk_desc, parent, button); + new OskWindow(_osk_desc, parent, button); } /** diff --git a/src/picker_gui.cpp b/src/picker_gui.cpp index ba221d22f4..4edde5ed23 100644 --- a/src/picker_gui.cpp +++ b/src/picker_gui.cpp @@ -155,7 +155,7 @@ static const std::initializer_list _cla static const std::initializer_list _type_sorter_funcs = { TypeIDSorter }; ///< Sort functions of the #PickerTypeList. static const std::initializer_list _type_filter_funcs = { TypeTagNameFilter }; ///< Filter functions of the #PickerTypeList. -PickerWindow::PickerWindow(WindowDesc *desc, Window *parent, int window_number, PickerCallbacks &callbacks) : PickerWindowBase(desc, parent), callbacks(callbacks), +PickerWindow::PickerWindow(WindowDesc &desc, Window *parent, int window_number, PickerCallbacks &callbacks) : PickerWindowBase(desc, parent), callbacks(callbacks), class_editbox(EDITBOX_MAX_SIZE * MAX_CHAR_LENGTH, EDITBOX_MAX_SIZE), type_editbox(EDITBOX_MAX_SIZE * MAX_CHAR_LENGTH, EDITBOX_MAX_SIZE) { diff --git a/src/picker_gui.h b/src/picker_gui.h index 78403be187..3ff9e2f314 100644 --- a/src/picker_gui.h +++ b/src/picker_gui.h @@ -170,7 +170,7 @@ public: bool has_class_picker = false; ///< Set if this window has a class picker 'component'. bool has_type_picker = false; ///< Set if this window has a type picker 'component'. - PickerWindow(WindowDesc *desc, Window *parent, int window_number, PickerCallbacks &callbacks); + PickerWindow(WindowDesc &desc, Window *parent, int window_number, PickerCallbacks &callbacks); void Close(int data = 0) override; void UpdateWidgetSize(WidgetID widget, Dimension &size, const Dimension &padding, Dimension &fill, Dimension &resize) override; void DrawWidget(const Rect &r, WidgetID widget) const override; diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 6646441ac9..3b0a0c928f 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -436,7 +436,7 @@ struct BuildRailToolbarWindow : Window { RailType railtype; ///< Rail type to build. int last_user_action; ///< Last started user action. - BuildRailToolbarWindow(WindowDesc *desc, RailType railtype) : Window(desc) + BuildRailToolbarWindow(WindowDesc &desc, RailType railtype) : Window(desc) { this->InitNested(TRANSPORT_RAIL); this->SetupRailToolbar(railtype); @@ -922,7 +922,7 @@ Window *ShowBuildRailToolbar(RailType railtype) CloseWindowByClass(WC_BUILD_TOOLBAR); _cur_railtype = railtype; _remove_button_clicked = false; - return new BuildRailToolbarWindow(&_build_rail_desc, railtype); + return new BuildRailToolbarWindow(_build_rail_desc, railtype); } /* TODO: For custom stations, respect their allowed platforms/lengths bitmasks! @@ -1076,7 +1076,7 @@ private: } public: - BuildRailStationWindow(WindowDesc *desc, Window *parent) : PickerWindow(desc, parent, TRANSPORT_RAIL, StationPickerCallbacks::instance) + BuildRailStationWindow(WindowDesc &desc, Window *parent) : PickerWindow(desc, parent, TRANSPORT_RAIL, StationPickerCallbacks::instance) { this->coverage_height = 2 * GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal; this->ConstructWindow(); @@ -1437,7 +1437,7 @@ static WindowDesc _station_builder_desc( /** Open station build window */ static Window *ShowStationBuilder(Window *parent) { - return new BuildRailStationWindow(&_station_builder_desc, parent); + return new BuildRailStationWindow(_station_builder_desc, parent); } struct BuildSignalWindow : public PickerWindowBase { @@ -1471,7 +1471,7 @@ private: } public: - BuildSignalWindow(WindowDesc *desc, Window *parent) : PickerWindowBase(desc, parent) + BuildSignalWindow(WindowDesc &desc, Window *parent) : PickerWindowBase(desc, parent) { this->CreateNestedTree(); this->SetSignalUIMode(); @@ -1694,11 +1694,11 @@ static WindowDesc _signal_builder_desc( */ static void ShowSignalBuilder(Window *parent) { - new BuildSignalWindow(&_signal_builder_desc, parent); + new BuildSignalWindow(_signal_builder_desc, parent); } struct BuildRailDepotWindow : public PickerWindowBase { - BuildRailDepotWindow(WindowDesc *desc, Window *parent) : PickerWindowBase(desc, parent) + BuildRailDepotWindow(WindowDesc &desc, Window *parent) : PickerWindowBase(desc, parent) { this->InitNested(TRANSPORT_RAIL); this->LowerWidget(WID_BRAD_DEPOT_NE + _build_depot_direction); @@ -1772,7 +1772,7 @@ static WindowDesc _build_depot_desc( static void ShowBuildTrainDepotPicker(Window *parent) { - new BuildRailDepotWindow(&_build_depot_desc, parent); + new BuildRailDepotWindow(_build_depot_desc, parent); } class WaypointPickerCallbacks : public PickerCallbacksNewGRFClass { @@ -1849,7 +1849,7 @@ public: /* static */ WaypointPickerCallbacks WaypointPickerCallbacks::instance; struct BuildRailWaypointWindow : public PickerWindow { - BuildRailWaypointWindow(WindowDesc *desc, Window *parent) : PickerWindow(desc, parent, TRANSPORT_RAIL, WaypointPickerCallbacks::instance) + BuildRailWaypointWindow(WindowDesc &desc, Window *parent) : PickerWindow(desc, parent, TRANSPORT_RAIL, WaypointPickerCallbacks::instance) { this->ConstructWindow(); this->InvalidateData(); @@ -1885,7 +1885,7 @@ static WindowDesc _build_waypoint_desc( static void ShowBuildWaypointPicker(Window *parent) { if (!WaypointPickerCallbacks::instance.IsActive()) return; - new BuildRailWaypointWindow(&_build_waypoint_desc, parent); + new BuildRailWaypointWindow(_build_waypoint_desc, parent); } /** diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 6cb897e20e..fb546b2a18 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -313,7 +313,7 @@ struct BuildRoadToolbarWindow : Window { const RoadTypeInfo *rti; ///< Information about current road type int last_started_action; ///< Last started user action. - BuildRoadToolbarWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + BuildRoadToolbarWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->Initialize(_cur_roadtype); this->InitNested(window_number); @@ -918,7 +918,7 @@ Window *ShowBuildRoadToolbar(RoadType roadtype) CloseWindowByClass(WC_BUILD_TOOLBAR); _cur_roadtype = roadtype; - return AllocateWindowDescFront(RoadTypeIsRoad(_cur_roadtype) ? &_build_road_desc : &_build_tramway_desc, TRANSPORT_ROAD); + return AllocateWindowDescFront(RoadTypeIsRoad(_cur_roadtype) ? _build_road_desc : _build_tramway_desc, TRANSPORT_ROAD); } static constexpr NWidgetPart _nested_build_road_scen_widgets[] = { @@ -1002,11 +1002,11 @@ Window *ShowBuildRoadScenToolbar(RoadType roadtype) CloseWindowById(WC_SCEN_BUILD_TOOLBAR, TRANSPORT_ROAD); _cur_roadtype = roadtype; - return AllocateWindowDescFront(RoadTypeIsRoad(_cur_roadtype) ? &_build_road_scen_desc : &_build_tramway_scen_desc, TRANSPORT_ROAD); + return AllocateWindowDescFront(RoadTypeIsRoad(_cur_roadtype) ? _build_road_scen_desc : _build_tramway_scen_desc, TRANSPORT_ROAD); } struct BuildRoadDepotWindow : public PickerWindowBase { - BuildRoadDepotWindow(WindowDesc *desc, Window *parent) : PickerWindowBase(desc, parent) + BuildRoadDepotWindow(WindowDesc &desc, Window *parent) : PickerWindowBase(desc, parent) { this->CreateNestedTree(); @@ -1091,7 +1091,7 @@ static WindowDesc _build_road_depot_desc( static void ShowRoadDepotPicker(Window *parent) { - new BuildRoadDepotWindow(&_build_road_depot_desc, parent); + new BuildRoadDepotWindow(_build_road_depot_desc, parent); } template @@ -1222,7 +1222,7 @@ private: } public: - BuildRoadStationWindow(WindowDesc *desc, Window *parent, RoadStopType rs) : PickerWindow(desc, parent, TRANSPORT_ROAD, GetRoadStopPickerCallbacks(rs)) + BuildRoadStationWindow(WindowDesc &desc, Window *parent, RoadStopType rs) : PickerWindow(desc, parent, TRANSPORT_ROAD, GetRoadStopPickerCallbacks(rs)) { this->coverage_height = 2 * GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal; @@ -1510,7 +1510,7 @@ static WindowDesc _tram_station_picker_desc( static void ShowRVStationPicker(Window *parent, RoadStopType rs) { - new BuildRoadStationWindow(RoadTypeIsRoad(_cur_roadtype) ? &_road_station_picker_desc : &_tram_station_picker_desc, parent, rs); + new BuildRoadStationWindow(RoadTypeIsRoad(_cur_roadtype) ? _road_station_picker_desc : _tram_station_picker_desc, parent, rs); } void InitializeRoadGui() diff --git a/src/screenshot_gui.cpp b/src/screenshot_gui.cpp index 2bfde67e89..237a0a4bfe 100644 --- a/src/screenshot_gui.cpp +++ b/src/screenshot_gui.cpp @@ -20,7 +20,7 @@ #include "safeguards.h" struct ScreenshotWindow : Window { - ScreenshotWindow(WindowDesc *desc) : Window(desc) + ScreenshotWindow(WindowDesc &desc) : Window(desc) { this->CreateNestedTree(); this->FinishInitNested(); @@ -74,7 +74,7 @@ static WindowDesc _screenshot_window_desc( void ShowScreenshotWindow() { CloseWindowById(WC_SCREENSHOT, 0); - new ScreenshotWindow(&_screenshot_window_desc); + new ScreenshotWindow(_screenshot_window_desc); } /** diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp index 24f71564ba..28ad637879 100644 --- a/src/script/script_gui.cpp +++ b/src/script/script_gui.cpp @@ -65,7 +65,7 @@ struct ScriptListWindow : public Window { * @param slot The company we're changing the Script for. * @param show_all Whether to show all available versions. */ - ScriptListWindow(WindowDesc *desc, CompanyID slot, bool show_all) : Window(desc), + ScriptListWindow(WindowDesc &desc, CompanyID slot, bool show_all) : Window(desc), slot(slot), show_all(show_all) { if (slot == OWNER_DEITY) { @@ -277,7 +277,7 @@ static WindowDesc _script_list_desc( void ShowScriptListWindow(CompanyID slot, bool show_all) { CloseWindowByClass(WC_SCRIPT_LIST); - new ScriptListWindow(&_script_list_desc, slot, show_all); + new ScriptListWindow(_script_list_desc, slot, show_all); } @@ -302,7 +302,7 @@ struct ScriptSettingsWindow : public Window { * @param desc The description of the window. * @param slot The company we're changing the settings for. */ - ScriptSettingsWindow(WindowDesc *desc, CompanyID slot) : Window(desc), + ScriptSettingsWindow(WindowDesc &desc, CompanyID slot) : Window(desc), slot(slot), clicked_button(-1), clicked_dropdown(false), @@ -622,7 +622,7 @@ void ShowScriptSettingsWindow(CompanyID slot) { CloseWindowByClass(WC_SCRIPT_LIST); CloseWindowByClass(WC_SCRIPT_SETTINGS); - new ScriptSettingsWindow(&_script_settings_desc, slot); + new ScriptSettingsWindow(_script_settings_desc, slot); } @@ -779,7 +779,7 @@ struct ScriptDebugWindow : public Window { * @param desc The description of the window. * @param number The window number (actually unused). */ - ScriptDebugWindow(WindowDesc *desc, WindowNumber number, Owner show_company) : Window(desc), break_editbox(MAX_BREAK_STR_STRING_LENGTH) + ScriptDebugWindow(WindowDesc &desc, WindowNumber number, Owner show_company) : Window(desc), break_editbox(MAX_BREAK_STR_STRING_LENGTH) { this->filter = ScriptDebugWindow::initial_state; this->break_string_filter = {&this->filter.case_sensitive_break_check, false}; @@ -1325,7 +1325,7 @@ Window *ShowScriptDebugWindow(CompanyID show_company, bool new_window) return w; } } - return new ScriptDebugWindow(&_script_debug_desc, i, show_company); + return new ScriptDebugWindow(_script_debug_desc, i, show_company); } else { ShowErrorMessage(STR_ERROR_AI_DEBUG_SERVER_ONLY, INVALID_STRING_ID, WL_INFO); } diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 6da28e6db5..34a5bd60df 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -359,7 +359,7 @@ struct GameOptionsWindow : Window { int gui_scale; static inline WidgetID active_tab = WID_GO_TAB_GENERAL; - GameOptionsWindow(WindowDesc *desc) : Window(desc) + GameOptionsWindow(WindowDesc &desc) : Window(desc) { this->opt = &GetGameSettings(); this->reload = false; @@ -1199,7 +1199,7 @@ static WindowDesc _game_options_desc( void ShowGameOptions() { CloseWindowByClass(WC_GAME_OPTIONS); - new GameOptionsWindow(&_game_options_desc); + new GameOptionsWindow(_game_options_desc); } static int SETTING_HEIGHT = 11; ///< Height of a single setting in the tree view in pixels @@ -2334,7 +2334,7 @@ struct GameSettingsWindow : Window { Scrollbar *vscroll; - GameSettingsWindow(WindowDesc *desc) : Window(desc), filter_editbox(50) + GameSettingsWindow(WindowDesc &desc) : Window(desc), filter_editbox(50) { this->warn_missing = WHR_NONE; this->warn_lines = 0; @@ -2909,7 +2909,7 @@ static WindowDesc _settings_selection_desc( void ShowGameSettings() { CloseWindowByClass(WC_GAME_OPTIONS); - new GameSettingsWindow(&_settings_selection_desc); + new GameSettingsWindow(_settings_selection_desc); } @@ -2985,7 +2985,7 @@ void DrawBoolButton(int x, int y, bool state, bool clickable) struct CustomCurrencyWindow : Window { int query_widget; - CustomCurrencyWindow(WindowDesc *desc) : Window(desc) + CustomCurrencyWindow(WindowDesc &desc) : Window(desc) { this->InitNested(); @@ -3217,5 +3217,5 @@ static WindowDesc _cust_currency_desc( static void ShowCustCurrency() { CloseWindowById(WC_CUSTOM_CURRENCY, 0); - new CustomCurrencyWindow(&_cust_currency_desc); + new CustomCurrencyWindow(_cust_currency_desc); } diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index abdd0b0b14..f4d7438ef3 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -142,7 +142,7 @@ struct SignListWindow : Window, SignList { int text_offset; ///< Offset of the sign text relative to the left edge of the WID_SIL_LIST widget. Scrollbar *vscroll; - SignListWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc), filter_editbox(MAX_LENGTH_SIGN_NAME_CHARS * MAX_CHAR_LENGTH, MAX_LENGTH_SIGN_NAME_CHARS) + SignListWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc), filter_editbox(MAX_LENGTH_SIGN_NAME_CHARS * MAX_CHAR_LENGTH, MAX_LENGTH_SIGN_NAME_CHARS) { this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_SIL_SCROLLBAR); @@ -398,7 +398,7 @@ static WindowDesc _sign_list_desc( */ Window *ShowSignList() { - return AllocateWindowDescFront(&_sign_list_desc, 0); + return AllocateWindowDescFront(_sign_list_desc, 0); } /** @@ -418,7 +418,7 @@ struct SignWindow : Window, SignList { QueryString name_editbox; SignID cur_sign; - SignWindow(WindowDesc *desc, const Sign *si) : Window(desc), name_editbox(MAX_LENGTH_SIGN_NAME_CHARS * MAX_CHAR_LENGTH, MAX_LENGTH_SIGN_NAME_CHARS) + SignWindow(WindowDesc &desc, const Sign *si) : Window(desc), name_editbox(MAX_LENGTH_SIGN_NAME_CHARS * MAX_CHAR_LENGTH, MAX_LENGTH_SIGN_NAME_CHARS) { this->querystrings[WID_QES_TEXT] = &this->name_editbox; this->name_editbox.caption = STR_EDIT_SIGN_CAPTION; @@ -582,7 +582,7 @@ void ShowRenameSignWindow(const Sign *si) /* Delete all other edit windows */ CloseWindowByClass(WC_QUERY_STRING); - new SignWindow(&_query_sign_edit_desc, si); + new SignWindow(_query_sign_edit_desc, si); } /** diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 81350a5f43..ca138823d6 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -1400,7 +1400,7 @@ protected: public: friend class NWidgetSmallmapDisplay; - SmallMapWindow(WindowDesc *desc, int window_number) : Window(desc) + SmallMapWindow(WindowDesc &desc, int window_number) : Window(desc) { _smallmap_industry_highlight = INVALID_INDUSTRYTYPE; this->overlay = std::make_unique(this, WID_SM_MAP, 0, this->GetOverlayCompanyMask(), 1); @@ -1994,7 +1994,7 @@ static WindowDesc _smallmap_desc( */ void ShowSmallMap() { - AllocateWindowDescFront(&_smallmap_desc, 0); + AllocateWindowDescFront(_smallmap_desc, 0); } /** diff --git a/src/station_gui.cpp b/src/station_gui.cpp index c5de52e2e9..ecf33815ac 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -384,7 +384,7 @@ protected: } public: - CompanyStationsWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + CompanyStationsWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { /* Load initial filter state. */ this->filter = CompanyStationsWindow::initial_state; @@ -781,7 +781,7 @@ void ShowCompanyStations(CompanyID company) { if (!Company::IsValidID(company)) return; - AllocateWindowDescFront(&_company_stations_desc, company); + AllocateWindowDescFront(_company_stations_desc, company); } static constexpr NWidgetPart _nested_station_view_widgets[] = { @@ -1321,7 +1321,7 @@ struct StationViewWindow : public Window { CargoDataEntry cached_destinations; ///< Cache for the flows passing through this station. CargoDataVector displayed_rows; ///< Parent entry of currently displayed rows (including collapsed ones). - StationViewWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc), + StationViewWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc), scroll_to_row(INT_MAX), grouping_index(0) { this->rating_lines = ALH_RATING; @@ -2143,7 +2143,7 @@ static WindowDesc _station_view_desc( */ void ShowStationViewWindow(StationID station) { - AllocateWindowDescFront(&_station_view_desc, station); + AllocateWindowDescFront(_station_view_desc, station); } /** Struct containing TileIndex and StationID */ @@ -2271,7 +2271,7 @@ struct SelectStationWindow : Window { TileArea area; ///< Location of new station Scrollbar *vscroll; - SelectStationWindow(WindowDesc *desc, TileArea ta, StationPickerCmdProc&& proc) : + SelectStationWindow(WindowDesc &desc, TileArea ta, StationPickerCmdProc&& proc) : Window(desc), select_station_proc(std::move(proc)), area(ta) @@ -2441,7 +2441,7 @@ void ShowSelectBaseStationIfNeeded(TileArea ta, StationPickerCmdProc&& proc) { if (StationJoinerNeeded(ta, proc)) { if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace(); - new SelectStationWindow(&_select_station_desc, ta, std::move(proc)); + new SelectStationWindow(_select_station_desc, ta, std::move(proc)); } else { proc(false, INVALID_STATION); } diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp index dd6e33da34..f7ed7b2a68 100644 --- a/src/statusbar_gui.cpp +++ b/src/statusbar_gui.cpp @@ -63,7 +63,7 @@ struct StatusBarWindow : Window { static const int COUNTER_STEP = 2; ///< this is subtracted from active counters every tick static constexpr auto REMINDER_START = std::chrono::milliseconds(1350); ///< time in ms for reminder notification (red dot on the right) to stay - StatusBarWindow(WindowDesc *desc) : Window(desc) + StatusBarWindow(WindowDesc &desc) : Window(desc) { this->ticker_scroll = TICKER_STOP; @@ -249,5 +249,5 @@ bool IsNewsTickerShown() */ void ShowStatusBar() { - new StatusBarWindow(&_main_status_desc); + new StatusBarWindow(_main_status_desc); } diff --git a/src/story_gui.cpp b/src/story_gui.cpp index 838bee7f35..c50caedf37 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -590,7 +590,7 @@ protected: } public: - StoryBookWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + StoryBookWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_SB_SCROLLBAR); @@ -1052,6 +1052,6 @@ void ShowStoryBook(CompanyID company, uint16_t page_id, bool centered) { if (!Company::IsValidID(company)) company = (CompanyID)INVALID_COMPANY; - StoryBookWindow *w = AllocateWindowDescFront(centered ? &_story_book_gs_desc : &_story_book_desc, company, true); + StoryBookWindow *w = AllocateWindowDescFront(centered ? _story_book_gs_desc : _story_book_desc, company, true); if (page_id != INVALID_STORY_PAGE) w->SetSelectedPage(page_id); } diff --git a/src/subsidy_gui.cpp b/src/subsidy_gui.cpp index 98c218e3b6..df24ba84d9 100644 --- a/src/subsidy_gui.cpp +++ b/src/subsidy_gui.cpp @@ -29,7 +29,7 @@ struct SubsidyListWindow : Window { Scrollbar *vscroll; Dimension cargo_icon_size; - SubsidyListWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + SubsidyListWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_SUL_SCROLLBAR); @@ -277,5 +277,5 @@ static WindowDesc _subsidies_list_desc( void ShowSubsidiesList() { - AllocateWindowDescFront(&_subsidies_list_desc, 0); + AllocateWindowDescFront(_subsidies_list_desc, 0); } diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp index df1d442742..f9859efd37 100644 --- a/src/terraform_gui.cpp +++ b/src/terraform_gui.cpp @@ -157,7 +157,7 @@ void PlaceProc_DemolishArea(TileIndex tile) struct TerraformToolbarWindow : Window { int last_user_action; ///< Last started user action. - TerraformToolbarWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + TerraformToolbarWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { /* This is needed as we like to have the tree available on OnInit. */ this->CreateNestedTree(); @@ -371,13 +371,13 @@ Window *ShowTerraformToolbar(Window *link) Window *w; if (link == nullptr) { - w = AllocateWindowDescFront(&_terraform_desc, 0); + w = AllocateWindowDescFront(_terraform_desc, 0); return w; } /* Delete the terraform toolbar to place it again. */ CloseWindowById(WC_SCEN_LAND_GEN, 0, true); - w = AllocateWindowDescFront(&_terraform_desc, 0); + w = AllocateWindowDescFront(_terraform_desc, 0); /* Align the terraform toolbar under the main toolbar. */ w->top -= w->height; w->SetDirty(); @@ -536,7 +536,7 @@ static void ResetLandscapeConfirmationCallback(Window *, bool confirmed) struct ScenarioEditorLandscapeGenerationWindow : Window { int last_user_action; ///< Last started user action. - ScenarioEditorLandscapeGenerationWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + ScenarioEditorLandscapeGenerationWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->CreateNestedTree(); NWidgetStacked *show_desert = this->GetWidget(WID_ETT_SHOW_PLACE_DESERT); @@ -750,5 +750,5 @@ static WindowDesc _scen_edit_land_gen_desc( */ Window *ShowEditorTerraformToolbar() { - return AllocateWindowDescFront(&_scen_edit_land_gen_desc, 0); + return AllocateWindowDescFront(_scen_edit_land_gen_desc, 0); } diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index 1ae7673715..9cfe0220fa 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -82,7 +82,7 @@ static WindowDesc _textfile_desc( std::begin(_nested_textfile_widgets), std::end(_nested_textfile_widgets) ); -TextfileWindow::TextfileWindow(TextfileType file_type) : Window(&_textfile_desc), file_type(file_type) +TextfileWindow::TextfileWindow(TextfileType file_type) : Window(_textfile_desc), file_type(file_type) { /* Init of nested tree is deferred. * TextfileWindow::ConstructWindow must be called by the inheriting window. */ diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index a8bd962001..7591e7da20 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -207,7 +207,7 @@ struct TimetableWindow : Window { bool set_start_date_all; ///< Set start date using minutes text entry for all timetable entries (ctrl-click) action. bool change_timetable_all; ///< Set wait time or speed for all timetable entries (ctrl-click) action. - TimetableWindow(WindowDesc *desc, WindowNumber window_number) : + TimetableWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc), sel_index(-1), vehicle(Vehicle::Get(window_number)), @@ -867,5 +867,5 @@ void ShowTimetableWindow(const Vehicle *v) { CloseWindowById(WC_VEHICLE_DETAILS, v->index, false); CloseWindowById(WC_VEHICLE_ORDERS, v->index, false); - AllocateWindowDescFront(&_timetable_desc, v->index); + AllocateWindowDescFront(_timetable_desc, v->index); } diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 77a5b265b9..3c06ca1a9e 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -1955,7 +1955,7 @@ static ToolbarButtonProc * const _toolbar_button_procs[] = { /** Main toolbar. */ struct MainToolbarWindow : Window { - MainToolbarWindow(WindowDesc *desc) : Window(desc) + MainToolbarWindow(WindowDesc &desc) : Window(desc) { this->InitNested(0); @@ -2296,7 +2296,7 @@ enum MainToolbarEditorHotkeys { }; struct ScenarioEditorToolbarWindow : Window { - ScenarioEditorToolbarWindow(WindowDesc *desc) : Window(desc) + ScenarioEditorToolbarWindow(WindowDesc &desc) : Window(desc) { this->InitNested(0); @@ -2562,8 +2562,8 @@ void AllocateToolbar() _last_built_tramtype = ROADTYPE_TRAM; if (_game_mode == GM_EDITOR) { - new ScenarioEditorToolbarWindow(&_toolb_scen_desc); + new ScenarioEditorToolbarWindow(_toolb_scen_desc); } else { - new MainToolbarWindow(&_toolb_normal_desc); + new MainToolbarWindow(_toolb_normal_desc); } } diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 4a9c536301..27c10d220f 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -121,7 +121,7 @@ private: } public: - TownAuthorityWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc), sel_index(-1), displayed_actions_on_previous_painting(0), available_actions(TACT_NONE) + TownAuthorityWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc), sel_index(-1), displayed_actions_on_previous_painting(0), available_actions(TACT_NONE) { this->town = Town::Get(window_number); this->enabled_actions = GetEnabledActions(); @@ -351,7 +351,7 @@ static WindowDesc _town_authority_desc( static void ShowTownAuthorityWindow(uint town) { - AllocateWindowDescFront(&_town_authority_desc, town); + AllocateWindowDescFront(_town_authority_desc, town); } @@ -363,7 +363,7 @@ private: public: static const int WID_TV_HEIGHT_NORMAL = 150; - TownViewWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + TownViewWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->CreateNestedTree(); @@ -677,9 +677,9 @@ static WindowDesc _town_editor_view_desc( void ShowTownViewWindow(TownID town) { if (_game_mode == GM_EDITOR) { - AllocateWindowDescFront(&_town_editor_view_desc, town); + AllocateWindowDescFront(_town_editor_view_desc, town); } else { - AllocateWindowDescFront(&_town_game_view_desc, town); + AllocateWindowDescFront(_town_game_view_desc, town); } } @@ -799,7 +799,7 @@ private: } public: - TownDirectoryWindow(WindowDesc *desc) : Window(desc), townname_editbox(MAX_LENGTH_TOWN_NAME_CHARS * MAX_CHAR_LENGTH, MAX_LENGTH_TOWN_NAME_CHARS) + TownDirectoryWindow(WindowDesc &desc) : Window(desc), townname_editbox(MAX_LENGTH_TOWN_NAME_CHARS * MAX_CHAR_LENGTH, MAX_LENGTH_TOWN_NAME_CHARS) { this->CreateNestedTree(); @@ -1067,7 +1067,7 @@ static WindowDesc _town_directory_desc( void ShowTownDirectory() { if (BringWindowToFrontById(WC_TOWN_DIRECTORY, 0)) return; - new TownDirectoryWindow(&_town_directory_desc); + new TownDirectoryWindow(_town_directory_desc); } void CcFoundTown(Commands, const CommandCost &result, TileIndex tile) @@ -1146,7 +1146,7 @@ private: TownNameParams params; ///< Town name parameters public: - FoundTownWindow(WindowDesc *desc, WindowNumber window_number) : + FoundTownWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc), town_size(TSZ_MEDIUM), town_layout(_settings_game.economy.town_layout), @@ -1300,7 +1300,7 @@ static WindowDesc _found_town_desc( void ShowFoundTownWindow() { if (_game_mode != GM_EDITOR && !Company::IsValidID(_local_company)) return; - AllocateWindowDescFront(&_found_town_desc, 0); + AllocateWindowDescFront(_found_town_desc, 0); } void InitializeTownGui() @@ -1558,7 +1558,7 @@ public: /* static */ HousePickerCallbacks HousePickerCallbacks::instance; struct BuildHouseWindow : public PickerWindow { - BuildHouseWindow(WindowDesc *desc, Window *parent) : PickerWindow(desc, parent, 0, HousePickerCallbacks::instance) + BuildHouseWindow(WindowDesc &desc, Window *parent) : PickerWindow(desc, parent, 0, HousePickerCallbacks::instance) { HousePickerCallbacks::instance.SetClimateMask(); this->ConstructWindow(); @@ -1639,5 +1639,5 @@ static WindowDesc _build_house_desc( void ShowBuildHousePicker(Window *parent) { if (BringWindowToFrontById(WC_BUILD_HOUSE, 0)) return; - new BuildHouseWindow(&_build_house_desc, parent); + new BuildHouseWindow(_build_house_desc, parent); } diff --git a/src/transparency_gui.cpp b/src/transparency_gui.cpp index 1a0c3a713f..0648f1e4c8 100644 --- a/src/transparency_gui.cpp +++ b/src/transparency_gui.cpp @@ -28,7 +28,7 @@ uint8_t _display_opt; ///< What do we want to draw/do? class TransparenciesWindow : public Window { public: - TransparenciesWindow(WindowDesc *desc, int window_number) : Window(desc) + TransparenciesWindow(WindowDesc &desc, int window_number) : Window(desc) { this->InitNested(window_number); } @@ -160,5 +160,5 @@ static WindowDesc _transparency_desc( */ void ShowTransparencyToolbar() { - AllocateWindowDescFront(&_transparency_desc, 0); + AllocateWindowDescFront(_transparency_desc, 0); } diff --git a/src/tree_gui.cpp b/src/tree_gui.cpp index be32a3e07c..5288b2c96b 100644 --- a/src/tree_gui.cpp +++ b/src/tree_gui.cpp @@ -139,7 +139,7 @@ class BuildTreesWindow : public Window } public: - BuildTreesWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc), tree_to_plant(-1), mode(PM_NORMAL) + BuildTreesWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc), tree_to_plant(-1), mode(PM_NORMAL) { this->CreateNestedTree(); ResetObjectToPlace(); @@ -320,5 +320,5 @@ static WindowDesc _build_trees_desc( void ShowBuildTreesToolbar() { if (_game_mode != GM_EDITOR && !Company::IsValidID(_local_company)) return; - AllocateWindowDescFront(&_build_trees_desc, 0); + AllocateWindowDescFront(_build_trees_desc, 0); } diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index e4bcdb93fd..dcfd4a80e5 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -162,7 +162,7 @@ const StringID BaseVehicleListWindow::vehicle_depot_name[] = { STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR }; -BaseVehicleListWindow::BaseVehicleListWindow(WindowDesc *desc, WindowNumber wno) : Window(desc), vli(VehicleListIdentifier::UnPack(wno)) +BaseVehicleListWindow::BaseVehicleListWindow(WindowDesc &desc, WindowNumber wno) : Window(desc), vli(VehicleListIdentifier::UnPack(wno)) { this->vehicle_sel = INVALID_VEHICLE; this->grouping = _grouping[vli.type][vli.vtype]; @@ -862,7 +862,7 @@ struct RefitWindow : public Window { this->selected_refit = nullptr; } - RefitWindow(WindowDesc *desc, const Vehicle *v, VehicleOrderID order, bool auto_refit) : Window(desc) + RefitWindow(WindowDesc &desc, const Vehicle *v, VehicleOrderID order, bool auto_refit) : Window(desc) { this->auto_refit = auto_refit; this->order = order; @@ -1293,7 +1293,7 @@ static WindowDesc _vehicle_refit_desc( void ShowVehicleRefitWindow(const Vehicle *v, VehicleOrderID order, Window *parent, bool auto_refit) { CloseWindowById(WC_VEHICLE_REFIT, v->index); - RefitWindow *w = new RefitWindow(&_vehicle_refit_desc, v, order, auto_refit); + RefitWindow *w = new RefitWindow(_vehicle_refit_desc, v, order, auto_refit); w->parent = parent; } @@ -1871,7 +1871,7 @@ private: }; public: - VehicleListWindow(WindowDesc *desc, WindowNumber window_number) : BaseVehicleListWindow(desc, window_number) + VehicleListWindow(WindowDesc &desc, WindowNumber window_number) : BaseVehicleListWindow(desc, window_number) { this->CreateNestedTree(); @@ -2236,10 +2236,10 @@ static void ShowVehicleListWindowLocal(CompanyID company, VehicleListType vlt, V WindowNumber num = VehicleListIdentifier(vlt, vehicle_type, company, unique_number).Pack(); if (vehicle_type == VEH_TRAIN) { - AllocateWindowDescFront(&_vehicle_list_train_desc, num); + AllocateWindowDescFront(_vehicle_list_train_desc, num); } else { _vehicle_list_other_desc.cls = GetWindowClassForVehicleType(vehicle_type); - AllocateWindowDescFront(&_vehicle_list_other_desc, num); + AllocateWindowDescFront(_vehicle_list_other_desc, num); } } @@ -2371,7 +2371,7 @@ struct VehicleDetailsWindow : Window { Scrollbar *vscroll; /** Initialize a newly created vehicle details window */ - VehicleDetailsWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + VehicleDetailsWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { const Vehicle *v = Vehicle::Get(window_number); @@ -2795,7 +2795,7 @@ static void ShowVehicleDetailsWindow(const Vehicle *v) { CloseWindowById(WC_VEHICLE_ORDERS, v->index, false); CloseWindowById(WC_VEHICLE_TIMETABLE, v->index, false); - AllocateWindowDescFront((v->type == VEH_TRAIN) ? &_train_vehicle_details_desc : &_nontrain_vehicle_details_desc, v->index); + AllocateWindowDescFront((v->type == VEH_TRAIN) ? _train_vehicle_details_desc : _nontrain_vehicle_details_desc, v->index); } @@ -2972,7 +2972,7 @@ private: } public: - VehicleViewWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + VehicleViewWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->flags |= WF_DISABLE_VP_SCROLL; this->CreateNestedTree(); @@ -3405,7 +3405,7 @@ static WindowDesc _train_view_desc( /** Shows the vehicle view window of the given vehicle. */ void ShowVehicleViewWindow(const Vehicle *v) { - AllocateWindowDescFront((v->type == VEH_TRAIN) ? &_train_view_desc : &_vehicle_view_desc, v->index); + AllocateWindowDescFront((v->type == VEH_TRAIN) ? _train_view_desc : _vehicle_view_desc, v->index); } /** diff --git a/src/vehicle_gui_base.h b/src/vehicle_gui_base.h index 73036fefe3..21053c4921 100644 --- a/src/vehicle_gui_base.h +++ b/src/vehicle_gui_base.h @@ -106,7 +106,7 @@ struct BaseVehicleListWindow : public Window { static const std::initializer_list vehicle_group_none_sorter_funcs; static const std::initializer_list vehicle_group_shared_orders_sorter_funcs; - BaseVehicleListWindow(WindowDesc *desc, WindowNumber wno); + BaseVehicleListWindow(WindowDesc &desc, WindowNumber wno); void OnInit() override; diff --git a/src/viewport_gui.cpp b/src/viewport_gui.cpp index e872191975..f20c10f303 100644 --- a/src/viewport_gui.cpp +++ b/src/viewport_gui.cpp @@ -52,7 +52,7 @@ static constexpr NWidgetPart _nested_extra_viewport_widgets[] = { class ExtraViewportWindow : public Window { public: - ExtraViewportWindow(WindowDesc *desc, int window_number, TileIndex tile) : Window(desc) + ExtraViewportWindow(WindowDesc &desc, int window_number, TileIndex tile) : Window(desc) { this->InitNested(window_number); @@ -160,7 +160,7 @@ void ShowExtraViewportWindow(TileIndex tile) /* find next free window number for extra viewport */ while (FindWindowById(WC_EXTRA_VIEWPORT, i) != nullptr) i++; - new ExtraViewportWindow(&_extra_viewport_desc, i, tile); + new ExtraViewportWindow(_extra_viewport_desc, i, tile); } /** diff --git a/src/waypoint_gui.cpp b/src/waypoint_gui.cpp index 2259b8b74c..985718849c 100644 --- a/src/waypoint_gui.cpp +++ b/src/waypoint_gui.cpp @@ -54,7 +54,7 @@ public: * @param desc The description of the window. * @param window_number The window number, in this case the waypoint's ID. */ - WaypointWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + WaypointWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->wp = Waypoint::Get(window_number); this->vt = (wp->string_id == STR_SV_STNAME_WAYPOINT) ? VEH_TRAIN : VEH_SHIP; @@ -196,5 +196,5 @@ static WindowDesc _waypoint_view_desc( */ void ShowWaypointWindow(const Waypoint *wp) { - AllocateWindowDescFront(&_waypoint_view_desc, wp->index); + AllocateWindowDescFront(_waypoint_view_desc, wp->index); } diff --git a/src/window.cpp b/src/window.cpp index 6a5a2eee34..012bab7537 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -195,10 +195,10 @@ void WindowDesc::SaveToConfig() void Window::ApplyDefaults() { if (this->nested_root != nullptr && this->nested_root->GetWidgetOfType(WWT_STICKYBOX) != nullptr) { - if (this->window_desc->pref_sticky) this->flags |= WF_STICKY; + if (this->window_desc.pref_sticky) this->flags |= WF_STICKY; } else { /* There is no stickybox; clear the preference in case someone tried to be funny */ - this->window_desc->pref_sticky = false; + this->window_desc.pref_sticky = false; } } @@ -616,7 +616,7 @@ static void DispatchLeftClickEvent(Window *w, int x, int y, int click_count) bool focused_widget_changed = false; /* If clicked on a window that previously did not have focus */ if (_focused_window != w && // We already have focus, right? - (w->window_desc->flags & WDF_NO_FOCUS) == 0 && // Don't lose focus to toolbars + (w->window_desc.flags & WDF_NO_FOCUS) == 0 && // Don't lose focus to toolbars widget_type != WWT_CLOSEBOX) { // Don't change focused window if 'X' (close button) was clicked focused_widget_changed = true; SetFocusedWindow(w); @@ -681,11 +681,11 @@ static void DispatchLeftClickEvent(Window *w, int x, int y, int click_count) case WWT_DEFSIZEBOX: { if (_ctrl_pressed) { - w->window_desc->pref_width = w->width; - w->window_desc->pref_height = w->height; + w->window_desc.pref_width = w->width; + w->window_desc.pref_height = w->height; } else { - int16_t def_width = std::max(std::min(w->window_desc->GetDefaultWidth(), _screen.width), w->nested_root->smallest_x); - int16_t def_height = std::max(std::min(w->window_desc->GetDefaultHeight(), _screen.height - 50), w->nested_root->smallest_y); + int16_t def_width = std::max(std::min(w->window_desc.GetDefaultWidth(), _screen.width), w->nested_root->smallest_x); + int16_t def_height = std::max(std::min(w->window_desc.GetDefaultHeight(), _screen.height - 50), w->nested_root->smallest_y); int dx = (w->resize.step_width == 0) ? 0 : def_width - w->width; int dy = (w->resize.step_height == 0) ? 0 : def_height - w->height; @@ -714,7 +714,7 @@ static void DispatchLeftClickEvent(Window *w, int x, int y, int click_count) case WWT_STICKYBOX: w->flags ^= WF_STICKY; nw->SetDirty(w); - if (_ctrl_pressed) w->window_desc->pref_sticky = (w->flags & WF_STICKY) != 0; + if (_ctrl_pressed) w->window_desc.pref_sticky = (w->flags & WF_STICKY) != 0; return; default: @@ -752,9 +752,9 @@ static void DispatchRightClickEvent(Window *w, int x, int y) } /* Right-click close is enabled and there is a closebox. */ - if (_settings_client.gui.right_click_wnd_close == RCC_YES && (w->window_desc->flags & WDF_NO_CLOSE) == 0) { + if (_settings_client.gui.right_click_wnd_close == RCC_YES && (w->window_desc.flags & WDF_NO_CLOSE) == 0) { w->Close(); - } else if (_settings_client.gui.right_click_wnd_close == RCC_YES_EXCEPT_STICKY && (w->flags & WF_STICKY) == 0 && (w->window_desc->flags & WDF_NO_CLOSE) == 0) { + } else if (_settings_client.gui.right_click_wnd_close == RCC_YES_EXCEPT_STICKY && (w->flags & WF_STICKY) == 0 && (w->window_desc.flags & WDF_NO_CLOSE) == 0) { /* Right-click close is enabled, but excluding sticky windows. */ w->Close(); } else if (_settings_client.gui.hover_delay_ms == 0 && !w->OnTooltip(pt, wid->index, TCC_RIGHT_CLICK) && wid->tool_tip != 0) { @@ -981,7 +981,7 @@ void Window::ReInit(int rx, int ry, bool reposition) if (reposition) { Point pt = this->OnInitialPosition(this->nested_root->smallest_x, this->nested_root->smallest_y, window_number); this->InitializePositionSize(pt.x, pt.y, this->nested_root->smallest_x, this->nested_root->smallest_y); - this->FindWindowPlacementAndResize(this->window_desc->GetDefaultWidth(), this->window_desc->GetDefaultHeight()); + this->FindWindowPlacementAndResize(this->window_desc.GetDefaultWidth(), this->window_desc.GetDefaultHeight()); } ResizeWindow(this, dx, dy, true, false); @@ -1365,9 +1365,9 @@ static void BringWindowToFront(Window *w, bool dirty) void Window::InitializeData(WindowNumber window_number) { /* Set up window properties; some of them are needed to set up smallest size below */ - this->window_class = this->window_desc->cls; + this->window_class = this->window_desc.cls; this->SetWhiteBorder(); - if (this->window_desc->default_pos == WDP_CENTER) this->flags |= WF_CENTERED; + if (this->window_desc.default_pos == WDP_CENTER) this->flags |= WF_CENTERED; this->owner = INVALID_OWNER; this->nested_focus = nullptr; this->window_number = window_number; @@ -1650,17 +1650,17 @@ Point GetToolbarAlignedWindowPosition(int window_width) * * @return Coordinate of the top-left corner of the new window. */ -static Point LocalGetWindowPlacement(const WindowDesc *desc, int16_t sm_width, int16_t sm_height, int window_number) +static Point LocalGetWindowPlacement(const WindowDesc &desc, int16_t sm_width, int16_t sm_height, int window_number) { Point pt; const Window *w; - int16_t default_width = std::max(desc->GetDefaultWidth(), sm_width); - int16_t default_height = std::max(desc->GetDefaultHeight(), sm_height); + int16_t default_width = std::max(desc.GetDefaultWidth(), sm_width); + int16_t default_height = std::max(desc.GetDefaultHeight(), sm_height); - if (desc->parent_cls != WC_NONE && (w = FindWindowById(desc->parent_cls, window_number)) != nullptr) { + if (desc.parent_cls != WC_NONE && (w = FindWindowById(desc.parent_cls, window_number)) != nullptr) { bool rtl = _current_text_dir == TD_RTL; - if (desc->parent_cls == WC_BUILD_TOOLBAR || desc->parent_cls == WC_SCEN_LAND_GEN) { + if (desc.parent_cls == WC_BUILD_TOOLBAR || desc.parent_cls == WC_SCEN_LAND_GEN) { pt.x = w->left + (rtl ? w->width - default_width : 0); pt.y = w->top + w->height; return pt; @@ -1685,7 +1685,7 @@ static Point LocalGetWindowPlacement(const WindowDesc *desc, int16_t sm_width, i } } - switch (desc->default_pos) { + switch (desc.default_pos) { case WDP_ALIGN_TOOLBAR: // Align to the toolbar return GetToolbarAlignedWindowPosition(default_width); @@ -1723,7 +1723,7 @@ static Point LocalGetWindowPlacement(const WindowDesc *desc, int16_t sm_width, i */ void Window::CreateNestedTree() { - this->nested_root = MakeWindowNWidgetTree(this->window_desc->nwid_begin, this->window_desc->nwid_end, &this->shade_select); + this->nested_root = MakeWindowNWidgetTree(this->window_desc.nwid_begin, this->window_desc.nwid_end, &this->shade_select); this->nested_root->FillWidgetLookup(this->widget_lookup); } @@ -1737,7 +1737,7 @@ void Window::FinishInitNested(WindowNumber window_number) this->ApplyDefaults(); Point pt = this->OnInitialPosition(this->nested_root->smallest_x, this->nested_root->smallest_y, window_number); this->InitializePositionSize(pt.x, pt.y, this->nested_root->smallest_x, this->nested_root->smallest_y); - this->FindWindowPlacementAndResize(this->window_desc->GetDefaultWidth(), this->window_desc->GetDefaultHeight()); + this->FindWindowPlacementAndResize(this->window_desc.GetDefaultWidth(), this->window_desc.GetDefaultHeight()); } /** @@ -1754,7 +1754,7 @@ void Window::InitNested(WindowNumber window_number) * Empty constructor, initialization has been moved to #InitNested() called from the constructor of the derived class. * @param desc The description of the window. */ -Window::Window(WindowDesc *desc) : window_desc(desc), scale(_gui_scale), mouse_capture_widget(-1) +Window::Window(WindowDesc &desc) : window_desc(desc), scale(_gui_scale), mouse_capture_widget(-1) { this->z_position = _z_windows.insert(_z_windows.end(), this); } @@ -2435,7 +2435,7 @@ static bool MaybeBringWindowToFront(Window *w) for (; !it.IsEnd(); ++it) { Window *u = *it; /* A modal child will prevent the activation of the parent window */ - if (u->parent == w && (u->window_desc->flags & WDF_MODAL)) { + if (u->parent == w && (u->window_desc.flags & WDF_MODAL)) { u->SetWhiteBorder(); u->SetDirty(); return false; @@ -2549,7 +2549,7 @@ void HandleToolbarHotkey(int hotkey) Window *w = FindWindowById(WC_MAIN_TOOLBAR, 0); if (w != nullptr) { - if (w->window_desc->hotkeys != nullptr) { + if (w->window_desc.hotkeys != nullptr) { if (hotkey >= 0 && w->OnHotkey(hotkey) == ES_HANDLED) return; } } @@ -2593,8 +2593,8 @@ void HandleKeypress(uint keycode, char32_t key) /* Call the event, start with the uppermost window, but ignore the toolbar. */ for (Window *w : Window::IterateFromFront()) { if (w->window_class == WC_MAIN_TOOLBAR) continue; - if (w->window_desc->hotkeys != nullptr) { - int hotkey = w->window_desc->hotkeys->CheckMatch(keycode); + if (w->window_desc.hotkeys != nullptr) { + int hotkey = w->window_desc.hotkeys->CheckMatch(keycode); if (hotkey >= 0 && w->OnHotkey(hotkey) == ES_HANDLED) return; } if (w->OnKeyPress(key, keycode) == ES_HANDLED) return; @@ -2603,8 +2603,8 @@ void HandleKeypress(uint keycode, char32_t key) Window *w = FindWindowById(WC_MAIN_TOOLBAR, 0); /* When there is no toolbar w is null, check for that */ if (w != nullptr) { - if (w->window_desc->hotkeys != nullptr) { - int hotkey = w->window_desc->hotkeys->CheckMatch(keycode); + if (w->window_desc.hotkeys != nullptr) { + int hotkey = w->window_desc.hotkeys->CheckMatch(keycode); if (hotkey >= 0 && w->OnHotkey(hotkey) == ES_HANDLED) return; } if (w->OnKeyPress(key, keycode) == ES_HANDLED) return; @@ -3243,7 +3243,7 @@ void CloseNonVitalWindows() { /* Note: the container remains stable, even when deleting windows. */ for (Window *w : Window::Iterate()) { - if ((w->window_desc->flags & WDF_NO_CLOSE) == 0 && + if ((w->window_desc.flags & WDF_NO_CLOSE) == 0 && (w->flags & WF_STICKY) == 0) { // do not delete windows which are 'pinned' w->Close(); @@ -3262,7 +3262,7 @@ void CloseAllNonVitalWindows() { /* Note: the container remains stable, even when closing windows. */ for (Window *w : Window::Iterate()) { - if ((w->window_desc->flags & WDF_NO_CLOSE) == 0) { + if ((w->window_desc.flags & WDF_NO_CLOSE) == 0) { w->Close(); } } @@ -3287,7 +3287,7 @@ void CloseConstructionWindows() { /* Note: the container remains stable, even when deleting windows. */ for (Window *w : Window::Iterate()) { - if (w->window_desc->flags & WDF_CONSTRUCTION) { + if (w->window_desc.flags & WDF_CONSTRUCTION) { w->Close(); } } diff --git a/src/window_gui.h b/src/window_gui.h index a18b9f85fb..30e1d6fd90 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -290,7 +290,7 @@ protected: virtual ~Window(); public: - Window(WindowDesc *desc); + Window(WindowDesc &desc); /** * Helper allocation function to disallow something. @@ -300,7 +300,7 @@ public: */ inline void *operator new[](size_t size) = delete; - WindowDesc *window_desc; ///< Window description + WindowDesc &window_desc; ///< Window description WindowFlags flags; ///< Window flags WindowClass window_class; ///< Window class WindowNumber window_number; ///< Window number within the window class @@ -990,7 +990,7 @@ inline const NWID *Window::GetWidget(WidgetID widnum) const class PickerWindowBase : public Window { public: - PickerWindowBase(WindowDesc *desc, Window *parent) : Window(desc) + PickerWindowBase(WindowDesc &desc, Window *parent) : Window(desc) { this->parent = parent; } @@ -1016,9 +1016,9 @@ Window *BringWindowToFrontById(WindowClass cls, T number) * @return %Window pointer of the newly created window, or the existing one if \a return_existing is set, or \c nullptr. */ template -Wcls *AllocateWindowDescFront(WindowDesc *desc, int window_number, bool return_existing = false) +Wcls *AllocateWindowDescFront(WindowDesc &desc, int window_number, bool return_existing = false) { - Wcls *w = static_cast(BringWindowToFrontById(desc->cls, window_number)); + Wcls *w = static_cast(BringWindowToFrontById(desc.cls, window_number)); if (w != nullptr) return return_existing ? w : nullptr; return new Wcls(desc, window_number); } From 68f7d585b4ec00e3b50777597e7347ffab310ada Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Tue, 11 Jun 2024 11:35:10 -0400 Subject: [PATCH 631/695] Doc: Remove resolved issue #4415 from known-bugs.txt (#12773) --- known-bugs.txt | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/known-bugs.txt b/known-bugs.txt index 1b9a465af7..e68758b1c6 100644 --- a/known-bugs.txt +++ b/known-bugs.txt @@ -215,16 +215,6 @@ Entry- and exit signals are not dragged [#4378]: for all other signal types where several in a row can serve one purpose or another. -Station build date is incorrect [#4415]: - The tile query tool will show the date of the last (re)construction - at the station and not the date of the first construction. This is - due to compatibility reasons with NewGRFs and the fact that it is - wrong to say that the station is built in a particular year when it - was completely destroyed/rebuilt later on. - The tile query tool can be fixed by changing the "Build date" text - to "Date at which the last (re)construction took place" but this is - deemed too specific and long for that window. - (Temporary) wrong colours when switching to full screen [#4511]: On Windows it can happen that you temporarily see wrong colours when switching to full screen OpenTTD, either by starting From 81b5a7c7c6a7db9a90dbcc762023f6d5accbba19 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 12 Jun 2024 04:42:02 +0000 Subject: [PATCH 632/695] Update: Translations from eints german: 62 changes by Wuzzy2 --- src/lang/german.txt | 76 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 62 insertions(+), 14 deletions(-) diff --git a/src/lang/german.txt b/src/lang/german.txt index 7e778f17e8..196d30d4c9 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -438,6 +438,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Editor verlasse STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Beenden +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Städte erzeugen +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Häuser platzieren # Settings menu ###length 16 @@ -957,6 +959,7 @@ STR_GAME_OPTIONS_VOLUME :Lautstärke STR_GAME_OPTIONS_SFX_VOLUME :Sound-Effekte STR_GAME_OPTIONS_MUSIC_VOLUME :Musik +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Währung STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Währung auswählen @@ -1054,14 +1057,15 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Dieses K STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Kantenglättung für Schriften STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Dieses Kästchen ankreuzen, um Kantenglättung für skalierbare Schriften zu aktivieren +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}× -STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Automatische Umfrage -STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Bei automatischer Umfrage teilnehmen -STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Falls aktiviert, wird OpenTTD eine Umfrage beim Verlassen des Spiels übertragen -STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}Über Umfrage und Privatsphäre -STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Dies öffnet einen Browser mit mehr Informationen über die automatische Umfrage -STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Vorschau des Umfrageergebnisses -STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Zeige die Umfrageergebnisse des gerade laufenden Spiels an +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Automatische Datenerhebung +STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Bei automatischer Datenerhebung teilnehmen +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Falls aktiviert, wird OpenTTD eine Datenerhebung beim Verlassen des Spiels übertragen +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}Über Datenerhebung und Privatsphäre +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Dies öffnet einen Browser mit mehr Informationen über die automatische Datenerhebung +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Vorschau des Datenerhebungsergebnisses +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Zeige die Datenerhebungsergebnisse des gerade laufenden Spiels an STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafik @@ -1082,6 +1086,8 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Basismus STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Ein Basismusikset auswählen STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Zusätzliche Informationen über das Basismusikset +STR_GAME_OPTIONS_ONLINE_CONTENT :Inhalt holen +STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Nach neuen und aktualisierten Inhalt zum Herunterladen prüfen STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(keine Plugins für Soziale Medien installiert!) @@ -1493,7 +1499,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalender STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Wanduhr STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minuten pro Jahr: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Die Anzahl an Minuten in einem Kalenderjahr wählen. Standartmäßig sind das 12 Minuten. Um das wechseln der Kalenderzeit auszuschalten, einfach auf 0 stellen. Diese Einstellung beeinflusst nicht die wirtschaftssimulation des Spiels und ist nur verfügbar, wenn die Wanduhr als Zeitmesser eingestellt ist +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Die Anzahl an Minuten in einem Kalenderjahr wählen. Standardmäßig sind das 12 Minuten. Um das Wechseln der Kalenderzeit auszuschalten, einfach auf 0 stellen. Wenn die Länge des Kalenderjahres erhöht wird, wird die Einführung von Fahrzeugen, Häusern und anderen Infrastrukturen verlangsamt. Dies beeinflusst nicht die Fahrzeuggeschwindigkeit oder die wirtschaftliche Simulation, außer die Inflation. Diese Einstellung ist nur verfügbar, wenn die Zeit mit der Wanduhr erfasst wird. STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special @@ -1825,6 +1831,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Setze das Stand STR_CONFIG_SETTING_SERVINT_SHIPS :Standard-Wartungsintervall für Schiffe: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Setze das Standardwartungsintervall für Schiffe. Dieses Wartungsintervall wird von allen Schiffen eingehalten, denen kein individuelles Wartungsintervall zugewiesen worden ist ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}Tag{P 0 "" e} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}Minute{P 0 "" n} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Deaktiviert @@ -2471,6 +2480,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Ihr Spielername STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Auszuübende administrative Aktionen für diesen Teilnehmer STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Auszuübende administrative Aktionen für diese Firma STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Dieser Firma beitreten +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Diesem Client autorisieren, Ihrer Firma beizutreten STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Eine Nachricht an diesen Spieler schicken STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Eine Nachricht an alle Spieler dieser Firma schicken STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Eine Nachricht an alle Zuschauer schicken @@ -2505,10 +2515,10 @@ STR_NETWORK_ASK_RELAY_NO :{BLACK}Nein STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Ja, diesmal STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Ja, nicht erneut fragen -STR_NETWORK_ASK_SURVEY_CAPTION :Bei automatischer Umfrage teilnehmen? -STR_NETWORK_ASK_SURVEY_TEXT :Möchtest du an einer automatischen Umfrage teilnehmen?{}OpenTTD wird beim Verlassen des Spiels eine Umfrage übermitteln.{}Du kannst dies jederzeit unter „Spieloptionen“ ändern. -STR_NETWORK_ASK_SURVEY_PREVIEW :Vorschau des Umfrageergebnisses -STR_NETWORK_ASK_SURVEY_LINK :Über Umfrage und Privatsphäre +STR_NETWORK_ASK_SURVEY_CAPTION :Bei automatischer Datenerhebung teilnehmen? +STR_NETWORK_ASK_SURVEY_TEXT :Möchten Sie an einer automatischen Datenerhebung teilnehmen?{}OpenTTD wird beim Verlassen des Spiels eine Datenerhebung übermitteln.{}Sie können dies jederzeit unter „Spieloptionen“ ändern. +STR_NETWORK_ASK_SURVEY_PREVIEW :Vorschau des Datenerhebungsergebnisses +STR_NETWORK_ASK_SURVEY_LINK :Über Datenerhebung und Privatsphäre STR_NETWORK_ASK_SURVEY_NO :Nein STR_NETWORK_ASK_SURVEY_YES :Ja @@ -2791,9 +2801,33 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Bahnstei STR_STATION_BUILD_DRAG_DROP :{BLACK}Klicken und Ziehen STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Stationsgröße durch Klicken und Ziehen frei wählbar +STR_PICKER_MODE_ALL :Alle +STR_PICKER_MODE_ALL_TOOLTIP :Anzeige aller Einträge von allen Klassen umschalten +STR_PICKER_MODE_USED :Benutzt +STR_PICKER_MODE_USED_TOOLTIP :Anzeige von nur existierenden Einträgen umschalten +STR_PICKER_MODE_SAVED :Gespeichert +STR_PICKER_MODE_SAVED_TOOLTIP :Anzeige von nur gespeicherten Einträgen umschalten +STR_PICKER_STATION_CLASS_TOOLTIP :Wählen Sie eine anzuzeigende Stationsklasse +STR_PICKER_STATION_TYPE_TOOLTIP :Wählen Sie einen Stationstyp zum Bauen. Strg+Klick, um in gespeicherten Einträgen hinzuzufügen oder zu entfernen +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Wählen Sie eine anzuzeigende Wegpunktklasse +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Wählen Sie einen zu bauenden Wegpunkt. Strg+Klick, um in gespeicherten Einträgen hinzuzufügen oder zu entfernen +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Wählen Sie eine anzuzeigende Busstationsklasse +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Wählen Sie einen Busstationstyp zum Bauen. Strg+Klick, um in gespeicherten Einträgen hinzuzufügen oder zu entfernen +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Wählen Sie eine anzuzeigende Lkw-Stationsklasse +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Wählen Sie einen Lkw-Stationstyp zum Bauen. Strg+Klick, um in gespeicherten Einträgen hinzuzufügen oder zu entfernen +STR_PICKER_OBJECT_CLASS_TOOLTIP :Wählen Sie eine anzuzeigende Objektklasse +STR_PICKER_OBJECT_TYPE_TOOLTIP :Wählen Sie ein zu bauenden Objekttyp. Strg+Klick, um in gespeicherten Einträgen hinzuzufügen oder zu entfernen. Ctrg+Klick+Ziehen, um Gebiet diagonal zu wählen. Zusätzlich Umschalt drücken, um nur einen Kostenvoranschlag anzuzeigen +STR_PICKER_HOUSE_CLASS_TOOLTIP :Wählen Sie eine anzuzeigende Stadtzone +STR_PICKER_HOUSE_TYPE_TOOLTIP :Wählen Sie einen Haustyp zum Bauen. Strg+Klick, um in gespeicherten Einträgen hinzuzufügen oder zu entfernen +STR_HOUSE_PICKER_CAPTION :Hausauswahl +STR_HOUSE_PICKER_CLASS_ZONE1 :Rand +STR_HOUSE_PICKER_CLASS_ZONE2 :Peripherie +STR_HOUSE_PICKER_CLASS_ZONE3 :Äußere Vororte +STR_HOUSE_PICKER_CLASS_ZONE4 :Innere Vororte +STR_HOUSE_PICKER_CLASS_ZONE5 :Stadtmitte STR_STATION_CLASS_DFLT :Standard STR_STATION_CLASS_DFLT_STATION :Standart-Haltestelle @@ -3288,7 +3322,7 @@ STR_MAPGEN_GENERATE :{WHITE}Erzeugen STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Erstelle die Welt und spiele OpenTTD! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF-Einstellungen STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}NewGRF-Einstellungen öffnen -STR_MAPGEN_AI_SETTINGS :{BLACK}KI Einstellungen +STR_MAPGEN_AI_SETTINGS :{BLACK}KI-Einstellungen STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}KI-Einstellungen öffnen STR_MAPGEN_GS_SETTINGS :{BLACK}Spielskripteinstellungen STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Spielskripteinstellungen öffnen @@ -3460,6 +3494,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Straßentyp STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF-Variable 60+x Parameter (hexadecimal) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Sprite-Ausrichtung: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Sprite-Ausrichtung: Action 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Sprite-Ausrichtung: Action 0x5 {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Nächstes Sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Gehe zum nächsten normalen Sprite und überspringe alle Pseudo-, Recolour- und Schriftsprites (springt ggf. vom ersten bis zum letzten Sprite) STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gehe zu Sprite @@ -3468,6 +3505,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Vorherig STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Gehe zum vorherigen normalen Sprite und überspringe alle Pseudo-, Recolour- und Schriftsprites (springt ggf. vom letzten bis zum ersten Sprite) STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Darstellung des aktuellen Sprites. Die Ausrichtung wird beim Zeichnen des Sprites ignoriert STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Bewege die Sprites und ändere dadurch die X- und Y-Offsets. Strg+Klick um die Sprites 8 Blöcke weit zu bewegen. +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Versatz zentriert @@ -4838,7 +4876,7 @@ STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Lizenz für die STR_TEXTFILE_README_CAPTION :{WHITE}{STRING}-Liesmich von {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING}-Änderungen von {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING}-Lizenz von {STRING} -STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Vorschau des Umfragenergebnisses +STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Vorschau des Datenerhebungsergebnisses STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}OpenTTD-Dokument „{STRING}“ @@ -4870,7 +4908,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Geschät STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Speichern läuft,{}bitte warten, bis es beendet ist! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autosicherung fehlgeschlagen STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Laufwerk nicht betriebsbereit +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Spielspeicherung fehlgeschlagen … STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Datei kann nicht gelöscht werden +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Laden des Spieles fehlgeschlagen … STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interner Fehler: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Spielstandsdatei defekt – {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spielstand wurde mit einer neueren Spielversion erstellt @@ -4975,6 +5015,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... es i STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Straßenarbeiten sind im Gange STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Stadt kann nicht gelöscht werden ...{}Eine Station oder ein Depot bezieht sich auf diese Stadt oder ein Feld im städtischen Besitz kann nicht entfernt werden. STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... es gibt keinen geeigneten Standort für die Statue im Zentrum dieser Stadt +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Haus kann nicht gebaut werden … # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... zu viele Industrien @@ -5012,6 +5053,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Flughafe STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Grenzt an mehr als eine vorhandene Station STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... Station ist zu groß +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}… nicht unterstützte Anzahl Gleise +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}… nicht unterstützte Länge STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Zu viele Stationen im Umkreis STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Zu viele Bahnsteigteile STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Zu viele Bushaltestellen @@ -5252,6 +5295,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Bitte di STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Noch keine Fahrzeuge verfügbar STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Ein neues Spiel nach {DATE_SHORT} beginnen oder ein NewGRF-Fahrzeugset mit früher verfügbaren Fahrzeugen verwenden +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Nicht-stadtbaubare Straßentypen sind verfügbar +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Ändern Sie Ihre NewGRF-Konfiguration +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Es sind noch keine von Städten baubaren Straßentypen verfügbar +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Ein neues Spiel nach {DATE_SHORT} beginnen oder ein NewGRF benutzen, dass frühe von Städten baubare Straßentypen zur Verfügung stellt # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Der Zug kann das Signal nicht gefahrlos passieren ... @@ -5803,6 +5850,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} From 55314513ce11d83df883290fbca98839ed842f67 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 12 Jun 2024 23:08:35 +0100 Subject: [PATCH 633/695] Codechange: Pass NWidgetParts as span instead of begin/end pointers. (#12779) --- src/ai/ai_gui.cpp | 2 +- src/airport_gui.cpp | 4 +-- src/autoreplace_gui.cpp | 6 ++--- src/bootstrap_gui.cpp | 8 +++--- src/bridge_gui.cpp | 2 +- src/build_vehicle_gui.cpp | 2 +- src/cheat_gui.cpp | 2 +- src/company_gui.cpp | 12 ++++----- src/console_gui.cpp | 2 +- src/date_gui.cpp | 2 +- src/depot_gui.cpp | 8 +++--- src/dock_gui.cpp | 8 +++--- src/dropdown.cpp | 2 +- src/engine_gui.cpp | 2 +- src/error_gui.cpp | 4 +-- src/fios_gui.cpp | 6 ++--- src/framerate_gui.cpp | 4 +-- src/game/game_gui.cpp | 2 +- src/genworld_gui.cpp | 8 +++--- src/goal_gui.cpp | 10 ++++---- src/graph_gui.cpp | 16 ++++++------ src/group_gui.cpp | 4 +-- src/help_gui.cpp | 2 +- src/highscore_gui.cpp | 4 +-- src/industry_gui.cpp | 8 +++--- src/intro_gui.cpp | 2 +- src/league_gui.cpp | 4 +-- src/linkgraph/linkgraph_gui.cpp | 2 +- src/main_gui.cpp | 2 +- src/misc_gui.cpp | 10 ++++---- src/music_gui.cpp | 4 +-- src/network/network_chat_gui.cpp | 2 +- src/network/network_content_gui.cpp | 4 +-- src/network/network_gui.cpp | 12 ++++----- src/newgrf_debug_gui.cpp | 6 ++--- src/newgrf_gui.cpp | 14 +++++------ src/news_gui.cpp | 12 ++++----- src/object_gui.cpp | 2 +- src/order_gui.cpp | 6 ++--- src/osk_gui.cpp | 2 +- src/picker_gui.cpp | 4 +-- src/rail_gui.cpp | 10 ++++---- src/road_gui.cpp | 14 +++++------ src/screenshot_gui.cpp | 2 +- src/script/script_gui.cpp | 6 ++--- src/settings_gui.cpp | 10 ++++---- src/signs_gui.cpp | 4 +-- src/smallmap_gui.cpp | 6 ++--- src/station_gui.cpp | 6 ++--- src/statusbar_gui.cpp | 2 +- src/story_gui.cpp | 4 +-- src/subsidy_gui.cpp | 2 +- src/terraform_gui.cpp | 4 +-- src/tests/test_window_desc.cpp | 17 ++++++------- src/textfile_gui.cpp | 2 +- src/timetable_gui.cpp | 2 +- src/toolbar_gui.cpp | 6 ++--- src/town_gui.cpp | 12 ++++----- src/transparency_gui.cpp | 2 +- src/tree_gui.cpp | 2 +- src/vehicle_gui.cpp | 14 +++++------ src/viewport_gui.cpp | 2 +- src/waypoint_gui.cpp | 2 +- src/widget.cpp | 39 +++++++++++++++-------------- src/widget_type.h | 4 +-- src/window.cpp | 7 +++--- src/window_gui.h | 5 ++-- 67 files changed, 201 insertions(+), 203 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 3568f70410..387e1dde8d 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -86,7 +86,7 @@ static WindowDesc _ai_config_desc( WDP_CENTER, nullptr, 0, 0, WC_GAME_OPTIONS, WC_NONE, 0, - std::begin(_nested_ai_config_widgets), std::end(_nested_ai_config_widgets) + _nested_ai_config_widgets ); /** diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index 83ed73ee3e..a09bc82a89 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -212,7 +212,7 @@ static WindowDesc _air_toolbar_desc( WDP_ALIGN_TOOLBAR, "toolbar_air", 0, 0, WC_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_air_toolbar_widgets), std::end(_nested_air_toolbar_widgets), + _nested_air_toolbar_widgets, &BuildAirToolbarWindow::hotkeys ); @@ -621,7 +621,7 @@ static WindowDesc _build_airport_desc( WDP_AUTO, nullptr, 0, 0, WC_BUILD_STATION, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, - std::begin(_nested_build_airport_widgets), std::end(_nested_build_airport_widgets) + _nested_build_airport_widgets ); static void ShowBuildAirportPicker(Window *parent) diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index eba70f9449..065606612a 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -766,7 +766,7 @@ static WindowDesc _replace_rail_vehicle_desc( WDP_AUTO, "replace_vehicle_train", 500, 140, WC_REPLACE_VEHICLE, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_replace_rail_vehicle_widgets), std::end(_nested_replace_rail_vehicle_widgets) + _nested_replace_rail_vehicle_widgets ); static constexpr NWidgetPart _nested_replace_road_vehicle_widgets[] = { @@ -824,7 +824,7 @@ static WindowDesc _replace_road_vehicle_desc( WDP_AUTO, "replace_vehicle_road", 500, 140, WC_REPLACE_VEHICLE, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_replace_road_vehicle_widgets), std::end(_nested_replace_road_vehicle_widgets) + _nested_replace_road_vehicle_widgets ); static constexpr NWidgetPart _nested_replace_vehicle_widgets[] = { @@ -878,7 +878,7 @@ static WindowDesc _replace_vehicle_desc( WDP_AUTO, "replace_vehicle", 456, 118, WC_REPLACE_VEHICLE, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_replace_vehicle_widgets), std::end(_nested_replace_vehicle_widgets) + _nested_replace_vehicle_widgets ); /** diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index 18a3ebb7f4..a9abfb9303 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -44,7 +44,7 @@ static WindowDesc _background_desc( WDP_MANUAL, nullptr, 0, 0, WC_BOOTSTRAP, WC_NONE, WDF_NO_CLOSE, - std::begin(_background_widgets), std::end(_background_widgets) + _background_widgets ); /** The background for the game. */ @@ -80,7 +80,7 @@ static WindowDesc _bootstrap_errmsg_desc( WDP_CENTER, nullptr, 0, 0, WC_BOOTSTRAP, WC_NONE, WDF_MODAL | WDF_NO_CLOSE, - std::begin(_nested_bootstrap_errmsg_widgets), std::end(_nested_bootstrap_errmsg_widgets) + _nested_bootstrap_errmsg_widgets ); /** The window for a failed bootstrap. */ @@ -137,7 +137,7 @@ static WindowDesc _bootstrap_download_status_window_desc( WDP_CENTER, nullptr, 0, 0, WC_NETWORK_STATUS_WINDOW, WC_NONE, WDF_MODAL | WDF_NO_CLOSE, - std::begin(_nested_bootstrap_download_status_window_widgets), std::end(_nested_bootstrap_download_status_window_widgets) + _nested_bootstrap_download_status_window_widgets ); @@ -189,7 +189,7 @@ static WindowDesc _bootstrap_query_desc( WDP_CENTER, nullptr, 0, 0, WC_CONFIRM_POPUP_QUERY, WC_NONE, WDF_NO_CLOSE, - std::begin(_bootstrap_query_widgets), std::end(_bootstrap_query_widgets) + _bootstrap_query_widgets ); /** The window for the query. It can't use the generic query window as that uses sprites that don't exist yet. */ diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index b6decec50b..51b4107fa5 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -338,7 +338,7 @@ static WindowDesc _build_bridge_desc( WDP_AUTO, "build_bridge", 200, 114, WC_BUILD_BRIDGE, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, - std::begin(_nested_build_bridge_widgets), std::end(_nested_build_bridge_widgets) + _nested_build_bridge_widgets ); /** diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 9040a3cfd6..554472e1ff 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1922,7 +1922,7 @@ static WindowDesc _build_vehicle_desc( WDP_AUTO, "build_vehicle", 240, 268, WC_BUILD_VEHICLE, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_build_vehicle_widgets), std::end(_nested_build_vehicle_widgets), + _nested_build_vehicle_widgets, &BuildVehicleWindow::hotkeys ); diff --git a/src/cheat_gui.cpp b/src/cheat_gui.cpp index e7fb3caa04..353f1f4cd3 100644 --- a/src/cheat_gui.cpp +++ b/src/cheat_gui.cpp @@ -429,7 +429,7 @@ static WindowDesc _cheats_desc( WDP_AUTO, "cheats", 0, 0, WC_CHEATS, WC_NONE, 0, - std::begin(_nested_cheat_widgets), std::end(_nested_cheat_widgets) + _nested_cheat_widgets ); /** Open cheat window. */ diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 47d49385f4..b745d0c72d 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -535,7 +535,7 @@ static WindowDesc _company_finances_desc( WDP_AUTO, "company_finances", 0, 0, WC_FINANCES, WC_NONE, 0, - std::begin(_nested_company_finances_widgets), std::end(_nested_company_finances_widgets) + _nested_company_finances_widgets ); /** @@ -1082,7 +1082,7 @@ static WindowDesc _select_company_livery_desc( WDP_AUTO, "company_color_scheme", 0, 0, WC_COMPANY_COLOUR, WC_NONE, 0, - std::begin(_nested_select_company_livery_widgets), std::end(_nested_select_company_livery_widgets) + _nested_select_company_livery_widgets ); void ShowCompanyLiveryWindow(CompanyID company, GroupID group) @@ -1707,7 +1707,7 @@ static WindowDesc _select_company_manager_face_desc( WDP_AUTO, nullptr, 0, 0, WC_COMPANY_MANAGER_FACE, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_select_company_manager_face_widgets), std::end(_nested_select_company_manager_face_widgets) + _nested_select_company_manager_face_widgets ); /** @@ -2084,7 +2084,7 @@ static WindowDesc _company_infrastructure_desc( WDP_AUTO, "company_infrastructure", 0, 0, WC_COMPANY_INFRASTRUCTURE, WC_NONE, 0, - std::begin(_nested_company_infrastructure_widgets), std::end(_nested_company_infrastructure_widgets) + _nested_company_infrastructure_widgets ); /** @@ -2556,7 +2556,7 @@ static WindowDesc _company_desc( WDP_AUTO, "company", 0, 0, WC_COMPANY, WC_NONE, 0, - std::begin(_nested_company_widgets), std::end(_nested_company_widgets) + _nested_company_widgets ); /** @@ -2690,7 +2690,7 @@ static WindowDesc _buy_company_desc( WDP_AUTO, nullptr, 0, 0, WC_BUY_COMPANY, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_buy_company_widgets), std::end(_nested_buy_company_widgets) + _nested_buy_company_widgets ); /** diff --git a/src/console_gui.cpp b/src/console_gui.cpp index 0f496dac1a..138e52477a 100644 --- a/src/console_gui.cpp +++ b/src/console_gui.cpp @@ -144,7 +144,7 @@ static WindowDesc _console_window_desc( WDP_MANUAL, nullptr, 0, 0, WC_CONSOLE, WC_NONE, 0, - std::begin(_nested_console_window_widgets), std::end(_nested_console_window_widgets) + _nested_console_window_widgets ); struct IConsoleWindow : Window diff --git a/src/date_gui.cpp b/src/date_gui.cpp index 2a7c568e1b..404f603971 100644 --- a/src/date_gui.cpp +++ b/src/date_gui.cpp @@ -200,7 +200,7 @@ static WindowDesc _set_date_desc( WDP_CENTER, nullptr, 0, 0, WC_SET_DATE, WC_NONE, 0, - std::begin(_nested_set_date_widgets), std::end(_nested_set_date_widgets) + _nested_set_date_widgets ); /** diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index de5107cec0..413de02cf7 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -89,28 +89,28 @@ static WindowDesc _train_depot_desc( WDP_AUTO, "depot_train", 362, 123, WC_VEHICLE_DEPOT, WC_NONE, 0, - std::begin(_nested_train_depot_widgets), std::end(_nested_train_depot_widgets) + _nested_train_depot_widgets ); static WindowDesc _road_depot_desc( WDP_AUTO, "depot_roadveh", 316, 97, WC_VEHICLE_DEPOT, WC_NONE, 0, - std::begin(_nested_train_depot_widgets), std::end(_nested_train_depot_widgets) + _nested_train_depot_widgets ); static WindowDesc _ship_depot_desc( WDP_AUTO, "depot_ship", 306, 99, WC_VEHICLE_DEPOT, WC_NONE, 0, - std::begin(_nested_train_depot_widgets), std::end(_nested_train_depot_widgets) + _nested_train_depot_widgets ); static WindowDesc _aircraft_depot_desc( WDP_AUTO, "depot_aircraft", 332, 99, WC_VEHICLE_DEPOT, WC_NONE, 0, - std::begin(_nested_train_depot_widgets), std::end(_nested_train_depot_widgets) + _nested_train_depot_widgets ); extern void DepotSortList(VehicleList *list); diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp index 673762dd4e..ffbf5aa63e 100644 --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -348,7 +348,7 @@ static WindowDesc _build_docks_toolbar_desc( WDP_ALIGN_TOOLBAR, "toolbar_water", 0, 0, WC_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_build_docks_toolbar_widgets), std::end(_nested_build_docks_toolbar_widgets), + _nested_build_docks_toolbar_widgets, &BuildDocksToolbarWindow::hotkeys ); @@ -392,7 +392,7 @@ static WindowDesc _build_docks_scen_toolbar_desc( WDP_AUTO, "toolbar_water_scen", 0, 0, WC_SCEN_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_build_docks_scen_toolbar_widgets), std::end(_nested_build_docks_scen_toolbar_widgets) + _nested_build_docks_scen_toolbar_widgets ); /** @@ -502,7 +502,7 @@ static WindowDesc _build_dock_station_desc( WDP_AUTO, nullptr, 0, 0, WC_BUILD_STATION, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, - std::begin(_nested_build_dock_station_widgets), std::end(_nested_build_dock_station_widgets) + _nested_build_dock_station_widgets ); static void ShowBuildDockStationPicker(Window *parent) @@ -597,7 +597,7 @@ static WindowDesc _build_docks_depot_desc( WDP_AUTO, nullptr, 0, 0, WC_BUILD_DEPOT, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, - std::begin(_nested_build_docks_depot_widgets), std::end(_nested_build_docks_depot_widgets) + _nested_build_docks_depot_widgets ); diff --git a/src/dropdown.cpp b/src/dropdown.cpp index 3eba2fb835..fe3e90eba6 100644 --- a/src/dropdown.cpp +++ b/src/dropdown.cpp @@ -65,7 +65,7 @@ static WindowDesc _dropdown_desc( WDP_MANUAL, nullptr, 0, 0, WC_DROPDOWN_MENU, WC_NONE, WDF_NO_FOCUS, - std::begin(_nested_dropdown_menu_widgets), std::end(_nested_dropdown_menu_widgets) + _nested_dropdown_menu_widgets ); /** Drop-down menu window */ diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp index 31e5f68fac..7145b85c50 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -148,7 +148,7 @@ static WindowDesc _engine_preview_desc( WDP_CENTER, nullptr, 0, 0, WC_ENGINE_PREVIEW, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_engine_preview_widgets), std::end(_nested_engine_preview_widgets) + _nested_engine_preview_widgets ); diff --git a/src/error_gui.cpp b/src/error_gui.cpp index 982101fc50..d6877fcd4b 100644 --- a/src/error_gui.cpp +++ b/src/error_gui.cpp @@ -47,7 +47,7 @@ static WindowDesc _errmsg_desc( WDP_MANUAL, nullptr, 0, 0, WC_ERRMSG, WC_NONE, 0, - std::begin(_nested_errmsg_widgets), std::end(_nested_errmsg_widgets) + _nested_errmsg_widgets ); static constexpr NWidgetPart _nested_errmsg_face_widgets[] = { @@ -67,7 +67,7 @@ static WindowDesc _errmsg_face_desc( WDP_MANUAL, nullptr, 0, 0, WC_ERRMSG, WC_NONE, 0, - std::begin(_nested_errmsg_face_widgets), std::end(_nested_errmsg_face_widgets) + _nested_errmsg_face_widgets ); /** diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index 2db7745c65..bea51f9851 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -887,7 +887,7 @@ static WindowDesc _load_dialog_desc( WDP_CENTER, "load_game", 500, 294, WC_SAVELOAD, WC_NONE, 0, - std::begin(_nested_load_dialog_widgets), std::end(_nested_load_dialog_widgets) + _nested_load_dialog_widgets ); /** Load heightmap */ @@ -895,7 +895,7 @@ static WindowDesc _load_heightmap_dialog_desc( WDP_CENTER, "load_heightmap", 257, 320, WC_SAVELOAD, WC_NONE, 0, - std::begin(_nested_load_heightmap_dialog_widgets), std::end(_nested_load_heightmap_dialog_widgets) + _nested_load_heightmap_dialog_widgets ); /** Save game/scenario */ @@ -903,7 +903,7 @@ static WindowDesc _save_dialog_desc( WDP_CENTER, "save_game", 500, 294, WC_SAVELOAD, WC_NONE, 0, - std::begin(_nested_save_dialog_widgets), std::end(_nested_save_dialog_widgets) + _nested_save_dialog_widgets ); /** diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index a2c1a47049..59325d3653 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -730,7 +730,7 @@ static WindowDesc _framerate_display_desc( WDP_AUTO, "framerate_display", 0, 0, WC_FRAMERATE_DISPLAY, WC_NONE, 0, - std::begin(_framerate_window_widgets), std::end(_framerate_window_widgets) + _framerate_window_widgets ); @@ -1021,7 +1021,7 @@ static WindowDesc _frametime_graph_window_desc( WDP_AUTO, "frametime_graph", 140, 90, WC_FRAMETIME_GRAPH, WC_NONE, 0, - std::begin(_frametime_graph_window_widgets), std::end(_frametime_graph_window_widgets) + _frametime_graph_window_widgets ); diff --git a/src/game/game_gui.cpp b/src/game/game_gui.cpp index 8f0c1dde2c..c76f1e28dd 100644 --- a/src/game/game_gui.cpp +++ b/src/game/game_gui.cpp @@ -78,7 +78,7 @@ static WindowDesc _gs_config_desc( WDP_CENTER, "settings_gs_config", 500, 350, WC_GAME_OPTIONS, WC_NONE, 0, - std::begin(_nested_gs_config_widgets), std::end(_nested_gs_config_widgets) + _nested_gs_config_widgets ); /** diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index a9da133279..d698e68e67 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -1004,14 +1004,14 @@ static WindowDesc _generate_landscape_desc( WDP_CENTER, nullptr, 0, 0, WC_GENERATE_LANDSCAPE, WC_NONE, 0, - std::begin(_nested_generate_landscape_widgets), std::end(_nested_generate_landscape_widgets) + _nested_generate_landscape_widgets ); static WindowDesc _heightmap_load_desc( WDP_CENTER, nullptr, 0, 0, WC_GENERATE_LANDSCAPE, WC_NONE, 0, - std::begin(_nested_heightmap_load_widgets), std::end(_nested_heightmap_load_widgets) + _nested_heightmap_load_widgets ); static void _ShowGenerateLandscape(GenerateLandscapeWindowMode mode) @@ -1314,7 +1314,7 @@ static WindowDesc _create_scenario_desc( WDP_CENTER, nullptr, 0, 0, WC_GENERATE_LANDSCAPE, WC_NONE, 0, - std::begin(_nested_create_scenario_widgets), std::end(_nested_create_scenario_widgets) + _nested_create_scenario_widgets ); /** Show the window to create a scenario. */ @@ -1340,7 +1340,7 @@ static WindowDesc _generate_progress_desc( WDP_CENTER, nullptr, 0, 0, WC_MODAL_PROGRESS, WC_NONE, 0, - std::begin(_nested_generate_progress_widgets), std::end(_nested_generate_progress_widgets) + _nested_generate_progress_widgets ); struct GenWorldStatus { diff --git a/src/goal_gui.cpp b/src/goal_gui.cpp index 9104abfad3..9b4573c361 100644 --- a/src/goal_gui.cpp +++ b/src/goal_gui.cpp @@ -306,7 +306,7 @@ static WindowDesc _goals_list_desc( WDP_AUTO, "list_goals", 500, 127, WC_GOALS_LIST, WC_NONE, 0, - std::begin(_nested_goals_list_widgets), std::end(_nested_goals_list_widgets) + _nested_goals_list_widgets ); /** @@ -450,25 +450,25 @@ static WindowDesc _goal_question_list_desc[] = { WDP_CENTER, nullptr, 0, 0, WC_GOAL_QUESTION, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_goal_question_widgets_question), std::end(_nested_goal_question_widgets_question), + _nested_goal_question_widgets_question, }, { WDP_CENTER, nullptr, 0, 0, WC_GOAL_QUESTION, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_goal_question_widgets_info), std::end(_nested_goal_question_widgets_info), + _nested_goal_question_widgets_info, }, { WDP_CENTER, nullptr, 0, 0, WC_GOAL_QUESTION, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_goal_question_widgets_warning), std::end(_nested_goal_question_widgets_warning), + _nested_goal_question_widgets_warning, }, { WDP_CENTER, nullptr, 0, 0, WC_GOAL_QUESTION, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_goal_question_widgets_error), std::end(_nested_goal_question_widgets_error), + _nested_goal_question_widgets_error, }, }; diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 2ec9547f6e..9424144c4c 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -146,7 +146,7 @@ static WindowDesc _graph_legend_desc( WDP_AUTO, "graph_legend", 0, 0, WC_GRAPH_LEGEND, WC_NONE, 0, - std::begin(_nested_graph_legend_widgets), std::end(_nested_graph_legend_widgets) + _nested_graph_legend_widgets ); static void ShowGraphLegend() @@ -696,7 +696,7 @@ static WindowDesc _operating_profit_desc( WDP_AUTO, "graph_operating_profit", 0, 0, WC_OPERATING_PROFIT, WC_NONE, 0, - std::begin(_nested_operating_profit_widgets), std::end(_nested_operating_profit_widgets) + _nested_operating_profit_widgets ); @@ -755,7 +755,7 @@ static WindowDesc _income_graph_desc( WDP_AUTO, "graph_income", 0, 0, WC_INCOME_GRAPH, WC_NONE, 0, - std::begin(_nested_income_graph_widgets), std::end(_nested_income_graph_widgets) + _nested_income_graph_widgets ); void ShowIncomeGraph() @@ -812,7 +812,7 @@ static WindowDesc _delivered_cargo_graph_desc( WDP_AUTO, "graph_delivered_cargo", 0, 0, WC_DELIVERED_CARGO, WC_NONE, 0, - std::begin(_nested_delivered_cargo_graph_widgets), std::end(_nested_delivered_cargo_graph_widgets) + _nested_delivered_cargo_graph_widgets ); void ShowDeliveredCargoGraph() @@ -876,7 +876,7 @@ static WindowDesc _performance_history_desc( WDP_AUTO, "graph_performance", 0, 0, WC_PERFORMANCE_HISTORY, WC_NONE, 0, - std::begin(_nested_performance_history_widgets), std::end(_nested_performance_history_widgets) + _nested_performance_history_widgets ); void ShowPerformanceHistoryGraph() @@ -933,7 +933,7 @@ static WindowDesc _company_value_graph_desc( WDP_AUTO, "graph_company_value", 0, 0, WC_COMPANY_VALUE, WC_NONE, 0, - std::begin(_nested_company_value_graph_widgets), std::end(_nested_company_value_graph_widgets) + _nested_company_value_graph_widgets ); void ShowCompanyValueGraph() @@ -1170,7 +1170,7 @@ static WindowDesc _cargo_payment_rates_desc( WDP_AUTO, "graph_cargo_payment_rates", 0, 0, WC_PAYMENT_RATES, WC_NONE, 0, - std::begin(_nested_cargo_payment_rates_widgets), std::end(_nested_cargo_payment_rates_widgets) + _nested_cargo_payment_rates_widgets ); @@ -1465,7 +1465,7 @@ static WindowDesc _performance_rating_detail_desc( WDP_AUTO, "league_details", 0, 0, WC_PERFORMANCE_DETAIL, WC_NONE, 0, - std::begin(_nested_performance_rating_detail_widgets), std::end(_nested_performance_rating_detail_widgets) + _nested_performance_rating_detail_widgets ); void ShowPerformanceRatingDetail() diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 089a529203..12545eecd5 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -1146,14 +1146,14 @@ static WindowDesc _other_group_desc( WDP_AUTO, "list_groups", 460, 246, WC_INVALID, WC_NONE, 0, - std::begin(_nested_group_widgets), std::end(_nested_group_widgets) + _nested_group_widgets ); static WindowDesc _train_group_desc( WDP_AUTO, "list_groups_train", 525, 246, WC_TRAINS_LIST, WC_NONE, 0, - std::begin(_nested_group_widgets), std::end(_nested_group_widgets) + _nested_group_widgets ); /** diff --git a/src/help_gui.cpp b/src/help_gui.cpp index 1c6f7fb167..bcfa1bc4db 100644 --- a/src/help_gui.cpp +++ b/src/help_gui.cpp @@ -197,7 +197,7 @@ static WindowDesc _helpwin_desc( WDP_CENTER, nullptr, 0, 0, WC_HELPWIN, WC_NONE, 0, - std::begin(_nested_helpwin_widgets), std::end(_nested_helpwin_widgets) + _nested_helpwin_widgets ); void ShowHelpWindow() diff --git a/src/highscore_gui.cpp b/src/highscore_gui.cpp index a8b8377463..70bf6fc5c8 100644 --- a/src/highscore_gui.cpp +++ b/src/highscore_gui.cpp @@ -218,14 +218,14 @@ static WindowDesc _highscore_desc( WDP_MANUAL, nullptr, 0, 0, WC_HIGHSCORE, WC_NONE, 0, - std::begin(_nested_highscore_widgets), std::end(_nested_highscore_widgets) + _nested_highscore_widgets ); static WindowDesc _endgame_desc( WDP_MANUAL, nullptr, 0, 0, WC_ENDSCREEN, WC_NONE, 0, - std::begin(_nested_highscore_widgets), std::end(_nested_highscore_widgets) + _nested_highscore_widgets ); /** diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 633d0eb118..b78c4c0e95 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -299,7 +299,7 @@ static WindowDesc _build_industry_desc( WDP_AUTO, "build_industry", 170, 212, WC_BUILD_INDUSTRY, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_build_industry_widgets), std::end(_nested_build_industry_widgets) + _nested_build_industry_widgets ); /** Build (fund or prospect) a new industry, */ @@ -1221,7 +1221,7 @@ static WindowDesc _industry_view_desc( WDP_AUTO, "view_industry", 260, 120, WC_INDUSTRY_VIEW, WC_NONE, 0, - std::begin(_nested_industry_view_widgets), std::end(_nested_industry_view_widgets) + _nested_industry_view_widgets ); void ShowIndustryViewWindow(int industry) @@ -1919,7 +1919,7 @@ static WindowDesc _industry_directory_desc( WDP_AUTO, "list_industries", 428, 190, WC_INDUSTRY_DIRECTORY, WC_NONE, 0, - std::begin(_nested_industry_directory_widgets), std::end(_nested_industry_directory_widgets), + _nested_industry_directory_widgets, &IndustryDirectoryWindow::hotkeys ); @@ -1958,7 +1958,7 @@ static WindowDesc _industry_cargoes_desc( WDP_AUTO, "industry_cargoes", 300, 210, WC_INDUSTRY_CARGOES, WC_NONE, 0, - std::begin(_nested_industry_cargoes_widgets), std::end(_nested_industry_cargoes_widgets) + _nested_industry_cargoes_widgets ); /** Available types of field. */ diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index 713031e5da..59bcbe39fe 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -460,7 +460,7 @@ static WindowDesc _select_game_desc( WDP_CENTER, nullptr, 0, 0, WC_SELECT_GAME, WC_NONE, WDF_NO_CLOSE, - std::begin(_nested_select_game_widgets), std::end(_nested_select_game_widgets) + _nested_select_game_widgets ); void ShowSelectGameWindow() diff --git a/src/league_gui.cpp b/src/league_gui.cpp index 70f2314257..fb62d49375 100644 --- a/src/league_gui.cpp +++ b/src/league_gui.cpp @@ -204,7 +204,7 @@ static WindowDesc _performance_league_desc( WDP_AUTO, "performance_league", 0, 0, WC_COMPANY_LEAGUE, WC_NONE, 0, - std::begin(_nested_performance_league_widgets), std::end(_nested_performance_league_widgets) + _nested_performance_league_widgets ); void ShowPerformanceLeagueTable() @@ -439,7 +439,7 @@ static WindowDesc _script_league_desc( WDP_AUTO, "script_league", 0, 0, WC_COMPANY_LEAGUE, WC_NONE, 0, - std::begin(_nested_script_league_widgets), std::end(_nested_script_league_widgets) + _nested_script_league_widgets ); void ShowScriptLeagueTable(LeagueTableID table) diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index f59797a812..02f2718e3c 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -540,7 +540,7 @@ static WindowDesc _linkgraph_legend_desc( WDP_AUTO, "toolbar_linkgraph", 0, 0, WC_LINKGRAPH_LEGEND, WC_NONE, 0, - std::begin(_nested_linkgraph_legend_widgets), std::end(_nested_linkgraph_legend_widgets) + _nested_linkgraph_legend_widgets ); /** diff --git a/src/main_gui.cpp b/src/main_gui.cpp index 8a6b7132c9..541d951285 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -517,7 +517,7 @@ static WindowDesc _main_window_desc( WDP_MANUAL, nullptr, 0, 0, WC_MAIN_WINDOW, WC_NONE, WDF_NO_CLOSE, - std::begin(_nested_main_window_widgets), std::end(_nested_main_window_widgets), + _nested_main_window_widgets, &MainWindow::hotkeys ); diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 6c53b5f499..1b3d6778c8 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -64,7 +64,7 @@ static WindowDesc _land_info_desc( WDP_AUTO, nullptr, 0, 0, WC_LAND_INFO, WC_NONE, 0, - std::begin(_nested_land_info_widgets), std::end(_nested_land_info_widgets) + _nested_land_info_widgets ); class LandInfoWindow : public Window { @@ -402,7 +402,7 @@ static WindowDesc _about_desc( WDP_CENTER, nullptr, 0, 0, WC_GAME_OPTIONS, WC_NONE, 0, - std::begin(_nested_about_widgets), std::end(_nested_about_widgets) + _nested_about_widgets ); static const std::initializer_list _credits = { @@ -661,7 +661,7 @@ static WindowDesc _tool_tips_desc( WDP_MANUAL, nullptr, 0, 0, // Coordinates and sizes are not used, WC_TOOLTIPS, WC_NONE, WDF_NO_FOCUS | WDF_NO_CLOSE, - std::begin(_nested_tooltips_widgets), std::end(_nested_tooltips_widgets) + _nested_tooltips_widgets ); /** Window for displaying a tooltip. */ @@ -1064,7 +1064,7 @@ static WindowDesc _query_string_desc( WDP_CENTER, nullptr, 0, 0, WC_QUERY_STRING, WC_NONE, 0, - std::begin(_nested_query_string_widgets), std::end(_nested_query_string_widgets) + _nested_query_string_widgets ); /** @@ -1207,7 +1207,7 @@ static WindowDesc _query_desc( WDP_CENTER, nullptr, 0, 0, WC_CONFIRM_POPUP_QUERY, WC_NONE, WDF_MODAL, - std::begin(_nested_query_widgets), std::end(_nested_query_widgets) + _nested_query_widgets ); /** diff --git a/src/music_gui.cpp b/src/music_gui.cpp index bfac1656ef..bcad0b15f0 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -671,7 +671,7 @@ static WindowDesc _music_track_selection_desc( WDP_AUTO, nullptr, 0, 0, WC_MUSIC_TRACK_SELECTION, WC_NONE, 0, - std::begin(_nested_music_track_selection_widgets), std::end(_nested_music_track_selection_widgets) + _nested_music_track_selection_widgets ); static void ShowMusicTrackSelection() @@ -930,7 +930,7 @@ static WindowDesc _music_window_desc( WDP_AUTO, "music", 0, 0, WC_MUSIC_WINDOW, WC_NONE, 0, - std::begin(_nested_music_window_widgets), std::end(_nested_music_window_widgets) + _nested_music_window_widgets ); void ShowMusicWindow() diff --git a/src/network/network_chat_gui.cpp b/src/network/network_chat_gui.cpp index c10cf969ed..92cac80a76 100644 --- a/src/network/network_chat_gui.cpp +++ b/src/network/network_chat_gui.cpp @@ -433,7 +433,7 @@ static WindowDesc _chat_window_desc( WDP_MANUAL, nullptr, 0, 0, WC_SEND_NETWORK_MSG, WC_NONE, 0, - std::begin(_nested_chat_window_widgets), std::end(_nested_chat_window_widgets) + _nested_chat_window_widgets ); diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index f20d470903..d0f8afbde5 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -98,7 +98,7 @@ static WindowDesc _network_content_download_status_window_desc( WDP_CENTER, nullptr, 0, 0, WC_NETWORK_STATUS_WINDOW, WC_NONE, WDF_MODAL, - std::begin(_nested_network_content_download_status_window_widgets), std::end(_nested_network_content_download_status_window_widgets) + _nested_network_content_download_status_window_widgets ); BaseNetworkContentDownloadStatusWindow::BaseNetworkContentDownloadStatusWindow(WindowDesc &desc) : @@ -1116,7 +1116,7 @@ static WindowDesc _network_content_list_desc( WDP_CENTER, "list_content", 630, 460, WC_NETWORK_WINDOW, WC_NONE, 0, - std::begin(_nested_network_content_list_widgets), std::end(_nested_network_content_list_widgets) + _nested_network_content_list_widgets ); /** diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 13a8ae5d69..d254ba6559 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -959,7 +959,7 @@ static WindowDesc _network_game_window_desc( WDP_CENTER, "list_servers", 1000, 730, WC_NETWORK_WINDOW, WC_NONE, 0, - std::begin(_nested_network_game_widgets), std::end(_nested_network_game_widgets) + _nested_network_game_widgets ); void ShowNetworkGameWindow() @@ -1226,7 +1226,7 @@ static WindowDesc _network_start_server_window_desc( WDP_CENTER, nullptr, 0, 0, WC_NETWORK_WINDOW, WC_NONE, 0, - std::begin(_nested_network_start_server_window_widgets), std::end(_nested_network_start_server_window_widgets) + _nested_network_start_server_window_widgets ); static void ShowNetworkStartServerWindow() @@ -1300,7 +1300,7 @@ static WindowDesc _client_list_desc( WDP_AUTO, "list_clients", 220, 300, WC_CLIENT_LIST, WC_NONE, 0, - std::begin(_nested_client_list_widgets), std::end(_nested_client_list_widgets) + _nested_client_list_widgets ); /** @@ -2195,7 +2195,7 @@ static WindowDesc _network_join_status_window_desc( WDP_CENTER, nullptr, 0, 0, WC_NETWORK_STATUS_WINDOW, WC_NONE, WDF_MODAL, - std::begin(_nested_network_join_status_window_widgets), std::end(_nested_network_join_status_window_widgets) + _nested_network_join_status_window_widgets ); void ShowJoinStatusWindow() @@ -2312,7 +2312,7 @@ static WindowDesc _network_ask_relay_desc( WDP_CENTER, nullptr, 0, 0, WC_NETWORK_ASK_RELAY, WC_NONE, WDF_MODAL, - std::begin(_nested_network_ask_relay_widgets), std::end(_nested_network_ask_relay_widgets) + _nested_network_ask_relay_widgets ); /** @@ -2410,7 +2410,7 @@ static WindowDesc _network_ask_survey_desc( WDP_CENTER, nullptr, 0, 0, WC_NETWORK_ASK_SURVEY, WC_NONE, WDF_MODAL, - std::begin(_nested_network_ask_survey_widgets), std::end(_nested_network_ask_survey_widgets) + _nested_network_ask_survey_widgets ); /** diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index d0f16329e0..34801d9d47 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -673,14 +673,14 @@ static WindowDesc _newgrf_inspect_chain_desc( WDP_AUTO, "newgrf_inspect_chain", 400, 300, WC_NEWGRF_INSPECT, WC_NONE, 0, - std::begin(_nested_newgrf_inspect_chain_widgets), std::end(_nested_newgrf_inspect_chain_widgets) + _nested_newgrf_inspect_chain_widgets ); static WindowDesc _newgrf_inspect_desc( WDP_AUTO, "newgrf_inspect", 400, 300, WC_NEWGRF_INSPECT, WC_NONE, 0, - std::begin(_nested_newgrf_inspect_widgets), std::end(_nested_newgrf_inspect_widgets) + _nested_newgrf_inspect_widgets ); /** @@ -1204,7 +1204,7 @@ static WindowDesc _sprite_aligner_desc( WDP_AUTO, "sprite_aligner", 400, 300, WC_SPRITE_ALIGNER, WC_NONE, 0, - std::begin(_nested_sprite_aligner_widgets), std::end(_nested_sprite_aligner_widgets) + _nested_sprite_aligner_widgets ); /** diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index c530ed26e5..10bc174323 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -545,7 +545,7 @@ static WindowDesc _newgrf_parameters_desc( WDP_CENTER, "settings_newgrf_config", 500, 208, WC_GRF_PARAMETERS, WC_NONE, 0, - std::begin(_nested_newgrf_parameter_widgets), std::end(_nested_newgrf_parameter_widgets) + _nested_newgrf_parameter_widgets ); void OpenGRFParameterWindow(bool is_baseset, GRFConfig *c, bool editable) @@ -1940,9 +1940,9 @@ static constexpr NWidgetPart _nested_newgrf_infopanel_widgets[] = { /** Construct nested container widget for managing the lists and the info panel of the NewGRF GUI. */ std::unique_ptr NewGRFDisplay() { - std::unique_ptr avs = MakeNWidgets(std::begin(_nested_newgrf_availables_widgets), std::end(_nested_newgrf_availables_widgets), nullptr); - std::unique_ptr acs = MakeNWidgets(std::begin(_nested_newgrf_actives_widgets), std::end(_nested_newgrf_actives_widgets), nullptr); - std::unique_ptr inf = MakeNWidgets(std::begin(_nested_newgrf_infopanel_widgets), std::end(_nested_newgrf_infopanel_widgets), nullptr); + std::unique_ptr avs = MakeNWidgets(_nested_newgrf_availables_widgets, nullptr); + std::unique_ptr acs = MakeNWidgets(_nested_newgrf_actives_widgets, nullptr); + std::unique_ptr inf = MakeNWidgets(_nested_newgrf_infopanel_widgets, nullptr); return std::make_unique(std::move(avs), std::move(acs), std::move(inf)); } @@ -1969,7 +1969,7 @@ static WindowDesc _newgrf_desc( WDP_CENTER, "settings_newgrf", 300, 263, WC_GAME_OPTIONS, WC_NONE, 0, - std::begin(_nested_newgrf_widgets), std::end(_nested_newgrf_widgets) + _nested_newgrf_widgets ); /** @@ -2053,7 +2053,7 @@ static WindowDesc _save_preset_desc( WDP_CENTER, "save_preset", 140, 110, WC_SAVE_PRESET, WC_GAME_OPTIONS, WDF_MODAL, - std::begin(_nested_save_preset_widgets), std::end(_nested_save_preset_widgets) + _nested_save_preset_widgets ); /** Class for the save preset window. */ @@ -2198,7 +2198,7 @@ static WindowDesc _scan_progress_desc( WDP_CENTER, nullptr, 0, 0, WC_MODAL_PROGRESS, WC_NONE, 0, - std::begin(_nested_scan_progress_widgets), std::end(_nested_scan_progress_widgets) + _nested_scan_progress_widgets ); /** Window for showing the progress of NewGRF scanning. */ diff --git a/src/news_gui.cpp b/src/news_gui.cpp index cf5550b700..172e0a1847 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -116,7 +116,7 @@ static WindowDesc _normal_news_desc( WDP_MANUAL, nullptr, 0, 0, WC_NEWS_WINDOW, WC_NONE, 0, - std::begin(_nested_normal_news_widgets), std::end(_nested_normal_news_widgets) + _nested_normal_news_widgets ); /* New vehicles news items. */ @@ -143,7 +143,7 @@ static WindowDesc _vehicle_news_desc( WDP_MANUAL, nullptr, 0, 0, WC_NEWS_WINDOW, WC_NONE, 0, - std::begin(_nested_vehicle_news_widgets), std::end(_nested_vehicle_news_widgets) + _nested_vehicle_news_widgets ); /* Company news items. */ @@ -171,7 +171,7 @@ static WindowDesc _company_news_desc( WDP_MANUAL, nullptr, 0, 0, WC_NEWS_WINDOW, WC_NONE, 0, - std::begin(_nested_company_news_widgets), std::end(_nested_company_news_widgets) + _nested_company_news_widgets ); /* Thin news items. */ @@ -194,7 +194,7 @@ static WindowDesc _thin_news_desc( WDP_MANUAL, nullptr, 0, 0, WC_NEWS_WINDOW, WC_NONE, 0, - std::begin(_nested_thin_news_widgets), std::end(_nested_thin_news_widgets) + _nested_thin_news_widgets ); /* Small news items. */ @@ -220,7 +220,7 @@ static WindowDesc _small_news_desc( WDP_MANUAL, nullptr, 0, 0, WC_NEWS_WINDOW, WC_NONE, 0, - std::begin(_nested_small_news_widgets), std::end(_nested_small_news_widgets) + _nested_small_news_widgets ); /** @@ -1201,7 +1201,7 @@ static WindowDesc _message_history_desc( WDP_AUTO, "list_news", 400, 140, WC_MESSAGE_HISTORY, WC_NONE, 0, - std::begin(_nested_message_history), std::end(_nested_message_history) + _nested_message_history ); /** Display window with news messages history */ diff --git a/src/object_gui.cpp b/src/object_gui.cpp index 494d1445d9..8bc2e98d4c 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -401,7 +401,7 @@ static WindowDesc _build_object_desc( WDP_AUTO, "build_object", 0, 0, WC_BUILD_OBJECT, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, - std::begin(_nested_build_object_widgets), std::end(_nested_build_object_widgets), + _nested_build_object_widgets, &BuildObjectWindow::hotkeys ); diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 762ab62e46..e83847811e 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -1677,7 +1677,7 @@ static WindowDesc _orders_train_desc( WDP_AUTO, "view_vehicle_orders_train", 384, 100, WC_VEHICLE_ORDERS, WC_VEHICLE_VIEW, WDF_CONSTRUCTION, - std::begin(_nested_orders_train_widgets), std::end(_nested_orders_train_widgets), + _nested_orders_train_widgets, &OrdersWindow::hotkeys ); @@ -1750,7 +1750,7 @@ static WindowDesc _orders_desc( WDP_AUTO, "view_vehicle_orders", 384, 100, WC_VEHICLE_ORDERS, WC_VEHICLE_VIEW, WDF_CONSTRUCTION, - std::begin(_nested_orders_widgets), std::end(_nested_orders_widgets), + _nested_orders_widgets, &OrdersWindow::hotkeys ); @@ -1777,7 +1777,7 @@ static WindowDesc _other_orders_desc( WDP_AUTO, "view_vehicle_orders_competitor", 384, 86, WC_VEHICLE_ORDERS, WC_VEHICLE_VIEW, WDF_CONSTRUCTION, - std::begin(_nested_other_orders_widgets), std::end(_nested_other_orders_widgets), + _nested_other_orders_widgets, &OrdersWindow::hotkeys ); diff --git a/src/osk_gui.cpp b/src/osk_gui.cpp index f3ae270576..9eb5de083a 100644 --- a/src/osk_gui.cpp +++ b/src/osk_gui.cpp @@ -339,7 +339,7 @@ static WindowDesc _osk_desc( WDP_CENTER, nullptr, 0, 0, WC_OSK, WC_NONE, 0, - std::begin(_nested_osk_widgets), std::end(_nested_osk_widgets) + _nested_osk_widgets ); /** diff --git a/src/picker_gui.cpp b/src/picker_gui.cpp index 4edde5ed23..f947709cea 100644 --- a/src/picker_gui.cpp +++ b/src/picker_gui.cpp @@ -635,7 +635,7 @@ std::unique_ptr MakePickerClassWidgets() EndContainer(), }; - return MakeNWidgets(std::begin(picker_class_widgets), std::end(picker_class_widgets), nullptr); + return MakeNWidgets(picker_class_widgets, nullptr); } /** Create nested widgets for the type picker widgets. */ @@ -671,5 +671,5 @@ std::unique_ptr MakePickerTypeWidgets() EndContainer(), }; - return MakeNWidgets(std::begin(picker_type_widgets), std::end(picker_type_widgets), nullptr); + return MakeNWidgets(picker_type_widgets, nullptr); } diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 3b0a0c928f..b6f4b45f76 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -901,7 +901,7 @@ static WindowDesc _build_rail_desc( WDP_ALIGN_TOOLBAR, "toolbar_rail", 0, 0, WC_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_build_rail_widgets), std::end(_nested_build_rail_widgets), + _nested_build_rail_widgets, &BuildRailToolbarWindow::hotkeys ); @@ -1430,7 +1430,7 @@ static WindowDesc _station_builder_desc( WDP_AUTO, "build_station_rail", 0, 0, WC_BUILD_STATION, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, - std::begin(_nested_station_builder_widgets), std::end(_nested_station_builder_widgets), + _nested_station_builder_widgets, &BuildRailStationWindow::hotkeys ); @@ -1686,7 +1686,7 @@ static WindowDesc _signal_builder_desc( WDP_AUTO, nullptr, 0, 0, WC_BUILD_SIGNAL, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, - std::begin(_nested_signal_builder_widgets), std::end(_nested_signal_builder_widgets) + _nested_signal_builder_widgets ); /** @@ -1767,7 +1767,7 @@ static WindowDesc _build_depot_desc( WDP_AUTO, nullptr, 0, 0, WC_BUILD_DEPOT, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, - std::begin(_nested_build_depot_widgets), std::end(_nested_build_depot_widgets) + _nested_build_depot_widgets ); static void ShowBuildTrainDepotPicker(Window *parent) @@ -1878,7 +1878,7 @@ static WindowDesc _build_waypoint_desc( WDP_AUTO, "build_waypoint", 0, 0, WC_BUILD_WAYPOINT, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, - std::begin(_nested_build_waypoint_widgets), std::end(_nested_build_waypoint_widgets), + _nested_build_waypoint_widgets, &BuildRailWaypointWindow::hotkeys ); diff --git a/src/road_gui.cpp b/src/road_gui.cpp index fb546b2a18..0f57d1ea64 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -858,7 +858,7 @@ static WindowDesc _build_road_desc( WDP_ALIGN_TOOLBAR, "toolbar_road", 0, 0, WC_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_build_road_widgets), std::end(_nested_build_road_widgets), + _nested_build_road_widgets, &BuildRoadToolbarWindow::road_hotkeys ); @@ -899,7 +899,7 @@ static WindowDesc _build_tramway_desc( WDP_ALIGN_TOOLBAR, "toolbar_tramway", 0, 0, WC_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_build_tramway_widgets), std::end(_nested_build_tramway_widgets), + _nested_build_tramway_widgets, &BuildRoadToolbarWindow::tram_hotkeys ); @@ -954,7 +954,7 @@ static WindowDesc _build_road_scen_desc( WDP_AUTO, "toolbar_road_scen", 0, 0, WC_SCEN_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_build_road_scen_widgets), std::end(_nested_build_road_scen_widgets), + _nested_build_road_scen_widgets, &BuildRoadToolbarWindow::road_hotkeys ); @@ -989,7 +989,7 @@ static WindowDesc _build_tramway_scen_desc( WDP_AUTO, "toolbar_tram_scen", 0, 0, WC_SCEN_BUILD_TOOLBAR, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_build_tramway_scen_widgets), std::end(_nested_build_tramway_scen_widgets), + _nested_build_tramway_scen_widgets, &BuildRoadToolbarWindow::tram_hotkeys ); @@ -1086,7 +1086,7 @@ static WindowDesc _build_road_depot_desc( WDP_AUTO, nullptr, 0, 0, WC_BUILD_DEPOT, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, - std::begin(_nested_build_road_depot_widgets), std::end(_nested_build_road_depot_widgets) + _nested_build_road_depot_widgets ); static void ShowRoadDepotPicker(Window *parent) @@ -1464,7 +1464,7 @@ static WindowDesc _road_station_picker_desc( WDP_AUTO, "build_station_road", 0, 0, WC_BUS_STATION, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, - std::begin(_nested_road_station_picker_widgets), std::end(_nested_road_station_picker_widgets), + _nested_road_station_picker_widgets, &BuildRoadStationWindow::road_hotkeys ); @@ -1504,7 +1504,7 @@ static WindowDesc _tram_station_picker_desc( WDP_AUTO, "build_station_tram", 0, 0, WC_BUS_STATION, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, - std::begin(_nested_tram_station_picker_widgets), std::end(_nested_tram_station_picker_widgets), + _nested_tram_station_picker_widgets, &BuildRoadStationWindow::tram_hotkeys ); diff --git a/src/screenshot_gui.cpp b/src/screenshot_gui.cpp index 237a0a4bfe..ae8ddd44a9 100644 --- a/src/screenshot_gui.cpp +++ b/src/screenshot_gui.cpp @@ -68,7 +68,7 @@ static WindowDesc _screenshot_window_desc( WDP_AUTO, "take_a_screenshot", 200, 100, WC_SCREENSHOT, WC_NONE, 0, - std::begin(_nested_screenshot), std::end(_nested_screenshot) + _nested_screenshot ); void ShowScreenshotWindow() diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp index 28ad637879..88da1556b8 100644 --- a/src/script/script_gui.cpp +++ b/src/script/script_gui.cpp @@ -266,7 +266,7 @@ static WindowDesc _script_list_desc( WDP_CENTER, "settings_script_list", 200, 234, WC_SCRIPT_LIST, WC_NONE, 0, - std::begin(_nested_script_list_widgets), std::end(_nested_script_list_widgets) + _nested_script_list_widgets ); /** @@ -611,7 +611,7 @@ static WindowDesc _script_settings_desc( WDP_CENTER, "settings_script", 500, 208, WC_SCRIPT_SETTINGS, WC_NONE, 0, - std::begin(_nested_script_settings_widgets), std::end(_nested_script_settings_widgets) + _nested_script_settings_widgets ); /** @@ -1293,7 +1293,7 @@ static WindowDesc _script_debug_desc( WDP_AUTO, "script_debug", 600, 450, WC_SCRIPT_DEBUG, WC_NONE, 0, - std::begin(_nested_script_debug_widgets), std::end(_nested_script_debug_widgets), + _nested_script_debug_widgets, &ScriptDebugWindow::hotkeys ); diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 34a5bd60df..64ab66b970 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -203,11 +203,11 @@ public: this->plugins = SocialIntegration::GetPlugins(); if (this->plugins.empty()) { - auto widget = MakeNWidgets(std::begin(_nested_social_plugins_none_widgets), std::end(_nested_social_plugins_none_widgets), nullptr); + auto widget = MakeNWidgets(_nested_social_plugins_none_widgets, nullptr); this->Add(std::move(widget)); } else { for (size_t i = 0; i < this->plugins.size(); i++) { - auto widget = MakeNWidgets(std::begin(_nested_social_plugins_widgets), std::end(_nested_social_plugins_widgets), nullptr); + auto widget = MakeNWidgets(_nested_social_plugins_widgets, nullptr); this->Add(std::move(widget)); } } @@ -1192,7 +1192,7 @@ static WindowDesc _game_options_desc( WDP_CENTER, nullptr, 0, 0, WC_GAME_OPTIONS, WC_NONE, 0, - std::begin(_nested_game_options_widgets), std::end(_nested_game_options_widgets) + _nested_game_options_widgets ); /** Open the game options window. */ @@ -2902,7 +2902,7 @@ static WindowDesc _settings_selection_desc( WDP_CENTER, "settings", 510, 450, WC_GAME_OPTIONS, WC_NONE, 0, - std::begin(_nested_settings_selection_widgets), std::end(_nested_settings_selection_widgets) + _nested_settings_selection_widgets ); /** Open advanced settings window. */ @@ -3210,7 +3210,7 @@ static WindowDesc _cust_currency_desc( WDP_CENTER, nullptr, 0, 0, WC_CUSTOM_CURRENCY, WC_NONE, 0, - std::begin(_nested_cust_currency_widgets), std::end(_nested_cust_currency_widgets) + _nested_cust_currency_widgets ); /** Open custom currency window. */ diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index f4d7438ef3..152d3a7515 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -387,7 +387,7 @@ static WindowDesc _sign_list_desc( WDP_AUTO, "list_signs", 358, 138, WC_SIGN_LIST, WC_NONE, 0, - std::begin(_nested_sign_list_widgets), std::end(_nested_sign_list_widgets), + _nested_sign_list_widgets, &SignListWindow::hotkeys ); @@ -553,7 +553,7 @@ static WindowDesc _query_sign_edit_desc( WDP_CENTER, nullptr, 0, 0, WC_QUERY_STRING, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_query_sign_edit_widgets), std::end(_nested_query_sign_edit_widgets) + _nested_query_sign_edit_widgets ); /** diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index ca138823d6..f818bc7b72 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -1950,8 +1950,8 @@ static std::unique_ptr SmallMapDisplay() { std::unique_ptr map_display = std::make_unique(); - map_display = MakeNWidgets(std::begin(_nested_smallmap_display), std::end(_nested_smallmap_display), std::move(map_display)); - map_display = MakeNWidgets(std::begin(_nested_smallmap_bar), std::end(_nested_smallmap_bar), std::move(map_display)); + map_display = MakeNWidgets(_nested_smallmap_display, std::move(map_display)); + map_display = MakeNWidgets(_nested_smallmap_bar, std::move(map_display)); return map_display; } @@ -1986,7 +1986,7 @@ static WindowDesc _smallmap_desc( WDP_AUTO, "smallmap", 484, 314, WC_SMALLMAP, WC_NONE, 0, - std::begin(_nested_smallmap_widgets), std::end(_nested_smallmap_widgets) + _nested_smallmap_widgets ); /** diff --git a/src/station_gui.cpp b/src/station_gui.cpp index ecf33815ac..c719dbfbb6 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -769,7 +769,7 @@ static WindowDesc _company_stations_desc( WDP_AUTO, "list_stations", 358, 162, WC_STATION_LIST, WC_NONE, 0, - std::begin(_nested_company_stations_widgets), std::end(_nested_company_stations_widgets) + _nested_company_stations_widgets ); /** @@ -2133,7 +2133,7 @@ static WindowDesc _station_view_desc( WDP_AUTO, "view_station", 249, 117, WC_STATION_VIEW, WC_NONE, 0, - std::begin(_nested_station_view_widgets), std::end(_nested_station_view_widgets) + _nested_station_view_widgets ); /** @@ -2391,7 +2391,7 @@ static WindowDesc _select_station_desc( WDP_AUTO, "build_station_join", 200, 180, WC_SELECT_STATION, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_select_station_widgets), std::end(_nested_select_station_widgets) + _nested_select_station_widgets ); diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp index f7ed7b2a68..d15b9222e9 100644 --- a/src/statusbar_gui.cpp +++ b/src/statusbar_gui.cpp @@ -232,7 +232,7 @@ static WindowDesc _main_status_desc( WDP_MANUAL, nullptr, 0, 0, WC_STATUS_BAR, WC_NONE, WDF_NO_FOCUS | WDF_NO_CLOSE, - std::begin(_nested_main_status_widgets), std::end(_nested_main_status_widgets) + _nested_main_status_widgets ); /** diff --git a/src/story_gui.cpp b/src/story_gui.cpp index c50caedf37..fe9d928eb2 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -970,14 +970,14 @@ static WindowDesc _story_book_desc( WDP_AUTO, "view_story", 400, 300, WC_STORY_BOOK, WC_NONE, 0, - std::begin(_nested_story_book_widgets), std::end(_nested_story_book_widgets) + _nested_story_book_widgets ); static WindowDesc _story_book_gs_desc( WDP_CENTER, "view_story_gs", 400, 300, WC_STORY_BOOK, WC_NONE, 0, - std::begin(_nested_story_book_widgets), std::end(_nested_story_book_widgets) + _nested_story_book_widgets ); static CursorID TranslateStoryPageButtonCursor(StoryPageButtonCursor cursor) diff --git a/src/subsidy_gui.cpp b/src/subsidy_gui.cpp index df24ba84d9..a7975f84bd 100644 --- a/src/subsidy_gui.cpp +++ b/src/subsidy_gui.cpp @@ -271,7 +271,7 @@ static WindowDesc _subsidies_list_desc( WDP_AUTO, "list_subsidies", 500, 127, WC_SUBSIDIES_LIST, WC_NONE, 0, - std::begin(_nested_subsidies_list_widgets), std::end(_nested_subsidies_list_widgets) + _nested_subsidies_list_widgets ); diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp index f9859efd37..3958a4457c 100644 --- a/src/terraform_gui.cpp +++ b/src/terraform_gui.cpp @@ -356,7 +356,7 @@ static WindowDesc _terraform_desc( WDP_MANUAL, "toolbar_landscape", 0, 0, WC_SCEN_LAND_GEN, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_terraform_widgets), std::end(_nested_terraform_widgets), + _nested_terraform_widgets, &TerraformToolbarWindow::hotkeys ); @@ -740,7 +740,7 @@ static WindowDesc _scen_edit_land_gen_desc( WDP_AUTO, "toolbar_landscape_scen", 0, 0, WC_SCEN_LAND_GEN, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_scen_edit_land_gen_widgets), std::end(_nested_scen_edit_land_gen_widgets), + _nested_scen_edit_land_gen_widgets, &ScenarioEditorLandscapeGenerationWindow::hotkeys ); diff --git a/src/tests/test_window_desc.cpp b/src/tests/test_window_desc.cpp index 85d2f6ebd8..0f4305c69a 100644 --- a/src/tests/test_window_desc.cpp +++ b/src/tests/test_window_desc.cpp @@ -48,7 +48,7 @@ TEST_CASE("WindowDesc - ini_key validity") const WindowDesc *window_desc = GENERATE(from_range(std::begin(*_window_descs), std::end(*_window_descs))); bool has_inikey = window_desc->ini_key != nullptr; - bool has_widget = std::any_of(window_desc->nwid_begin, window_desc->nwid_end, [](const NWidgetPart &part) { return part.type == WWT_DEFSIZEBOX || part.type == WWT_STICKYBOX; }); + bool has_widget = std::any_of(std::begin(window_desc->nwid_parts), std::end(window_desc->nwid_parts), [](const NWidgetPart &part) { return part.type == WWT_DEFSIZEBOX || part.type == WWT_STICKYBOX; }); INFO(fmt::format("{}:{}", window_desc->source_location.file_name(), window_desc->source_location.line())); CAPTURE(has_inikey); @@ -60,16 +60,15 @@ TEST_CASE("WindowDesc - ini_key validity") /** * Test if a NWidgetTree is properly closed, meaning the number of container-type parts matches the number of * EndContainer() parts. - * @param nwid_begin Pointer to beginning of nested widget parts. - * @param nwid_end Pointer to ending of nested widget parts. + * @param nwid_parts Span of nested widget parts. * @return True iff nested tree is properly closed. */ -static bool IsNWidgetTreeClosed(const NWidgetPart *nwid_begin, const NWidgetPart *nwid_end) +static bool IsNWidgetTreeClosed(std::span nwid_parts) { int depth = 0; - for (; nwid_begin < nwid_end; ++nwid_begin) { - if (IsContainerWidgetType(nwid_begin->type)) ++depth; - if (nwid_begin->type == WPT_ENDCONTAINER) --depth; + for (const auto nwid : nwid_parts) { + if (IsContainerWidgetType(nwid.type)) ++depth; + if (nwid.type == WPT_ENDCONTAINER) --depth; } return depth == 0; } @@ -80,7 +79,7 @@ TEST_CASE("WindowDesc - NWidgetParts properly closed") INFO(fmt::format("{}:{}", window_desc->source_location.file_name(), window_desc->source_location.line())); - CHECK(IsNWidgetTreeClosed(window_desc->nwid_begin, window_desc->nwid_end)); + CHECK(IsNWidgetTreeClosed(window_desc->nwid_parts)); } TEST_CASE_METHOD(WindowDescTestsFixture, "WindowDesc - NWidgetPart validity") @@ -92,6 +91,6 @@ TEST_CASE_METHOD(WindowDescTestsFixture, "WindowDesc - NWidgetPart validity") NWidgetStacked *shade_select = nullptr; std::unique_ptr root = nullptr; - REQUIRE_NOTHROW(root = MakeWindowNWidgetTree(window_desc->nwid_begin, window_desc->nwid_end, &shade_select)); + REQUIRE_NOTHROW(root = MakeWindowNWidgetTree(window_desc->nwid_parts, &shade_select)); CHECK((root != nullptr)); } diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index 9cfe0220fa..d827578dc8 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -79,7 +79,7 @@ static WindowDesc _textfile_desc( WDP_CENTER, "textfile", 630, 460, WC_TEXTFILE, WC_NONE, 0, - std::begin(_nested_textfile_widgets), std::end(_nested_textfile_widgets) + _nested_textfile_widgets ); TextfileWindow::TextfileWindow(TextfileType file_type) : Window(_textfile_desc), file_type(file_type) diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index 7591e7da20..7f89bc60c0 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -856,7 +856,7 @@ static WindowDesc _timetable_desc( WDP_AUTO, "view_vehicle_timetable", 400, 130, WC_VEHICLE_TIMETABLE, WC_VEHICLE_VIEW, WDF_CONSTRUCTION, - std::begin(_nested_timetable_widgets), std::end(_nested_timetable_widgets) + _nested_timetable_widgets ); /** diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 3c06ca1a9e..896b495bd8 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -2210,7 +2210,7 @@ static WindowDesc _toolb_normal_desc( WDP_MANUAL, nullptr, 0, 0, WC_MAIN_TOOLBAR, WC_NONE, WDF_NO_FOCUS | WDF_NO_CLOSE, - std::begin(_nested_toolbar_normal_widgets), std::end(_nested_toolbar_normal_widgets), + _nested_toolbar_normal_widgets, &MainToolbarWindow::hotkeys ); @@ -2539,7 +2539,7 @@ static constexpr NWidgetPart _nested_toolb_scen_inner_widgets[] = { static std::unique_ptr MakeScenarioToolbar() { - return MakeNWidgets(std::begin(_nested_toolb_scen_inner_widgets), std::end(_nested_toolb_scen_inner_widgets), std::make_unique()); + return MakeNWidgets(_nested_toolb_scen_inner_widgets, std::make_unique()); } static constexpr NWidgetPart _nested_toolb_scen_widgets[] = { @@ -2550,7 +2550,7 @@ static WindowDesc _toolb_scen_desc( WDP_MANUAL, nullptr, 0, 0, WC_MAIN_TOOLBAR, WC_NONE, WDF_NO_FOCUS | WDF_NO_CLOSE, - std::begin(_nested_toolb_scen_widgets), std::end(_nested_toolb_scen_widgets), + _nested_toolb_scen_widgets, &ScenarioEditorToolbarWindow::hotkeys ); diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 27c10d220f..b46b7fc9cb 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -346,7 +346,7 @@ static WindowDesc _town_authority_desc( WDP_AUTO, "view_town_authority", 317, 222, WC_TOWN_AUTHORITY, WC_NONE, 0, - std::begin(_nested_town_authority_widgets), std::end(_nested_town_authority_widgets) + _nested_town_authority_widgets ); static void ShowTownAuthorityWindow(uint town) @@ -640,7 +640,7 @@ static WindowDesc _town_game_view_desc( WDP_AUTO, "view_town", 260, TownViewWindow::WID_TV_HEIGHT_NORMAL, WC_TOWN_VIEW, WC_NONE, 0, - std::begin(_nested_town_game_view_widgets), std::end(_nested_town_game_view_widgets) + _nested_town_game_view_widgets ); static constexpr NWidgetPart _nested_town_editor_view_widgets[] = { @@ -671,7 +671,7 @@ static WindowDesc _town_editor_view_desc( WDP_AUTO, "view_town_scen", 260, TownViewWindow::WID_TV_HEIGHT_NORMAL, WC_TOWN_VIEW, WC_NONE, 0, - std::begin(_nested_town_editor_view_widgets), std::end(_nested_town_editor_view_widgets) + _nested_town_editor_view_widgets ); void ShowTownViewWindow(TownID town) @@ -1060,7 +1060,7 @@ static WindowDesc _town_directory_desc( WDP_AUTO, "list_towns", 208, 202, WC_TOWN_DIRECTORY, WC_NONE, 0, - std::begin(_nested_town_directory_widgets), std::end(_nested_town_directory_widgets), + _nested_town_directory_widgets, &TownDirectoryWindow::hotkeys ); @@ -1294,7 +1294,7 @@ static WindowDesc _found_town_desc( WDP_AUTO, "build_town", 160, 162, WC_FOUND_TOWN, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_found_town_widgets), std::end(_nested_found_town_widgets) + _nested_found_town_widgets ); void ShowFoundTownWindow() @@ -1632,7 +1632,7 @@ static WindowDesc _build_house_desc( WDP_AUTO, "build_house", 0, 0, WC_BUILD_HOUSE, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, - std::begin(_nested_build_house_widgets), std::end(_nested_build_house_widgets), + _nested_build_house_widgets, &BuildHouseWindow::hotkeys ); diff --git a/src/transparency_gui.cpp b/src/transparency_gui.cpp index 0648f1e4c8..b1758d33ae 100644 --- a/src/transparency_gui.cpp +++ b/src/transparency_gui.cpp @@ -152,7 +152,7 @@ static WindowDesc _transparency_desc( WDP_MANUAL, "toolbar_transparency", 0, 0, WC_TRANSPARENCY_TOOLBAR, WC_NONE, 0, - std::begin(_nested_transparency_widgets), std::end(_nested_transparency_widgets) + _nested_transparency_widgets ); /** diff --git a/src/tree_gui.cpp b/src/tree_gui.cpp index 5288b2c96b..4f683ee9ea 100644 --- a/src/tree_gui.cpp +++ b/src/tree_gui.cpp @@ -314,7 +314,7 @@ static WindowDesc _build_trees_desc( WDP_AUTO, "build_tree", 0, 0, WC_BUILD_TREES, WC_NONE, WDF_CONSTRUCTION, - std::begin(_nested_build_trees_widgets), std::end(_nested_build_trees_widgets) + _nested_build_trees_widgets ); void ShowBuildTreesToolbar() diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index dcfd4a80e5..a2714f9fd6 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -1280,7 +1280,7 @@ static WindowDesc _vehicle_refit_desc( WDP_AUTO, "view_vehicle_refit", 240, 174, WC_VEHICLE_REFIT, WC_VEHICLE_VIEW, WDF_CONSTRUCTION, - std::begin(_nested_vehicle_refit_widgets), std::end(_nested_vehicle_refit_widgets) + _nested_vehicle_refit_widgets ); /** @@ -2220,14 +2220,14 @@ static WindowDesc _vehicle_list_other_desc( WDP_AUTO, "list_vehicles", 260, 246, WC_INVALID, WC_NONE, 0, - std::begin(_nested_vehicle_list), std::end(_nested_vehicle_list) + _nested_vehicle_list ); static WindowDesc _vehicle_list_train_desc( WDP_AUTO, "list_vehicles_train", 325, 246, WC_TRAINS_LIST, WC_NONE, 0, - std::begin(_nested_vehicle_list), std::end(_nested_vehicle_list) + _nested_vehicle_list ); static void ShowVehicleListWindowLocal(CompanyID company, VehicleListType vlt, VehicleType vehicle_type, uint32_t unique_number) @@ -2779,7 +2779,7 @@ static WindowDesc _train_vehicle_details_desc( WDP_AUTO, "view_vehicle_details_train", 405, 178, WC_VEHICLE_DETAILS, WC_VEHICLE_VIEW, 0, - std::begin(_nested_train_vehicle_details_widgets), std::end(_nested_train_vehicle_details_widgets) + _nested_train_vehicle_details_widgets ); /** Vehicle details window descriptor for other vehicles than a train. */ @@ -2787,7 +2787,7 @@ static WindowDesc _nontrain_vehicle_details_desc( WDP_AUTO, "view_vehicle_details", 405, 113, WC_VEHICLE_DETAILS, WC_VEHICLE_VIEW, 0, - std::begin(_nested_nontrain_vehicle_details_widgets), std::end(_nested_nontrain_vehicle_details_widgets) + _nested_nontrain_vehicle_details_widgets ); /** Shows the vehicle details window of the given vehicle. */ @@ -3386,7 +3386,7 @@ static WindowDesc _vehicle_view_desc( WDP_AUTO, "view_vehicle", 250, 116, WC_VEHICLE_VIEW, WC_NONE, 0, - std::begin(_nested_vehicle_view_widgets), std::end(_nested_vehicle_view_widgets), + _nested_vehicle_view_widgets, &VehicleViewWindow::hotkeys ); @@ -3398,7 +3398,7 @@ static WindowDesc _train_view_desc( WDP_AUTO, "view_vehicle_train", 250, 134, WC_VEHICLE_VIEW, WC_NONE, 0, - std::begin(_nested_vehicle_view_widgets), std::end(_nested_vehicle_view_widgets), + _nested_vehicle_view_widgets, &VehicleViewWindow::hotkeys ); diff --git a/src/viewport_gui.cpp b/src/viewport_gui.cpp index f20c10f303..4f8e550c83 100644 --- a/src/viewport_gui.cpp +++ b/src/viewport_gui.cpp @@ -146,7 +146,7 @@ static WindowDesc _extra_viewport_desc( WDP_AUTO, "extra_viewport", 300, 268, WC_EXTRA_VIEWPORT, WC_NONE, 0, - std::begin(_nested_extra_viewport_widgets), std::end(_nested_extra_viewport_widgets) + _nested_extra_viewport_widgets ); /** diff --git a/src/waypoint_gui.cpp b/src/waypoint_gui.cpp index 985718849c..0cc5981b27 100644 --- a/src/waypoint_gui.cpp +++ b/src/waypoint_gui.cpp @@ -187,7 +187,7 @@ static WindowDesc _waypoint_view_desc( WDP_AUTO, "view_waypoint", 260, 118, WC_WAYPOINT_VIEW, WC_NONE, 0, - std::begin(_nested_waypoint_view_widgets), std::end(_nested_waypoint_view_widgets) + _nested_waypoint_view_widgets ); /** diff --git a/src/widget.cpp b/src/widget.cpp index 46353c8f72..97bf9b57bb 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -2963,13 +2963,13 @@ bool NWidgetLeaf::ButtonHit(const Point &pt) * settings that follow it, until encountering a #EndContainer, another * #NWidget, or the end of the parts array. * - * @param nwid_begin Pointer to beginning of nested widget parts. - * @param nwid_end Pointer to ending of nested widget parts. + * @param nwid_begin Iterator to beginning of nested widget parts. + * @param nwid_end Iterator to ending of nested widget parts. * @param dest Address of pointer to use for returning the composed widget. * @param fill_dest Fill the composed widget with child widgets. - * @return Pointer to remaining nested widget parts. + * @return Iterator to remaining nested widget parts. */ -static const NWidgetPart *MakeNWidget(const NWidgetPart *nwid_begin, const NWidgetPart *nwid_end, std::unique_ptr &dest, bool *fill_dest) +static std::span::iterator MakeNWidget(std::span::iterator nwid_begin, std::span::iterator nwid_end, std::unique_ptr &dest, bool *fill_dest) { dest = nullptr; *fill_dest = false; @@ -3161,12 +3161,12 @@ bool IsContainerWidgetType(WidgetType tp) /** * Build a nested widget tree by recursively filling containers with nested widgets read from their parts. - * @param nwid_begin Pointer to beginning of nested widget parts. - * @param nwid_end Pointer to ending of nested widget parts. + * @param nwid_begin Iterator to beginning of nested widget parts. + * @param nwid_end Iterator to ending of nested widget parts. * @param parent Pointer or container to use for storing the child widgets (*parent == nullptr or *parent == container or background widget). - * @return Pointer to remaining nested widget parts. + * @return Iterator to remaining nested widget parts. */ -static const NWidgetPart *MakeWidgetTree(const NWidgetPart *nwid_begin, const NWidgetPart *nwid_end, std::unique_ptr &parent) +static std::span::iterator MakeWidgetTree(std::span::iterator nwid_begin, std::span::iterator nwid_end, std::unique_ptr &parent) { /* If *parent == nullptr, only the first widget is read and returned. Otherwise, *parent must point to either * a #NWidgetContainer or a #NWidgetBackground object, and parts are added as much as possible. */ @@ -3200,23 +3200,22 @@ static const NWidgetPart *MakeWidgetTree(const NWidgetPart *nwid_begin, const NW assert(nwid_begin < nwid_end); assert(nwid_begin->type == WPT_ENDCONTAINER); - return nwid_begin + 1; // *nwid_begin is also 'used' + return std::next(nwid_begin); // *nwid_begin is also 'used' } /** * Construct a nested widget tree from an array of parts. - * @param nwid_begin Pointer to beginning of nested widget parts. - * @param nwid_end Pointer to ending of nested widget parts. + * @param nwid_parts Span of nested widget parts. * @param container Container to add the nested widgets to. In case it is nullptr a vertical container is used. * @return Root of the nested widget tree, a vertical container containing the entire GUI. * @ingroup NestedWidgetParts */ -std::unique_ptr MakeNWidgets(const NWidgetPart *nwid_begin, const NWidgetPart *nwid_end, std::unique_ptr &&container) +std::unique_ptr MakeNWidgets(std::span nwid_parts, std::unique_ptr &&container) { if (container == nullptr) container = std::make_unique(); - [[maybe_unused]] const NWidgetPart *nwid_part = MakeWidgetTree(nwid_begin, nwid_end, container); + [[maybe_unused]] auto nwid_part = MakeWidgetTree(std::begin(nwid_parts), std::end(nwid_parts), container); #ifdef WITH_ASSERT - if (nwid_part != nwid_end) [[unlikely]] throw std::runtime_error("Did not consume all NWidgetParts"); + if (nwid_part != std::end(nwid_parts)) [[unlikely]] throw std::runtime_error("Did not consume all NWidgetParts"); #endif return std::move(container); } @@ -3225,14 +3224,16 @@ std::unique_ptr MakeNWidgets(const NWidgetPart *nwid_begin, const N * Make a nested widget tree for a window from a parts array. Besides loading, it inserts a shading selection widget * between the title bar and the window body if the first widget in the parts array looks like a title bar (it is a horizontal * container with a caption widget) and has a shade box widget. - * @param nwid_begin Pointer to beginning of nested widget parts. - * @param nwid_end Pointer to ending of nested widget parts. + * @param nwid_parts Span of nested widget parts. * @param[out] shade_select Pointer to the inserted shade selection widget (\c nullptr if not unserted). * @return Root of the nested widget tree, a vertical container containing the entire GUI. * @ingroup NestedWidgetParts */ -std::unique_ptr MakeWindowNWidgetTree(const NWidgetPart *nwid_begin, const NWidgetPart *nwid_end, NWidgetStacked **shade_select) +std::unique_ptr MakeWindowNWidgetTree(std::span nwid_parts, NWidgetStacked **shade_select) { + auto nwid_begin = std::begin(nwid_parts); + auto nwid_end = std::end(nwid_parts); + *shade_select = nullptr; /* Read the first widget recursively from the array. */ @@ -3251,13 +3252,13 @@ std::unique_ptr MakeWindowNWidgetTree(const NWidgetPart *nwid_begin auto shade_stack = std::make_unique(-1); *shade_select = shade_stack.get(); /* Load the remaining parts into the shade stack. */ - shade_stack->Add(MakeNWidgets(nwid_begin, nwid_end, std::make_unique())); + shade_stack->Add(MakeNWidgets({nwid_begin, nwid_end}, std::make_unique())); root->Add(std::move(shade_stack)); return root; } /* Load the remaining parts into 'root'. */ - return MakeNWidgets(nwid_begin, nwid_end, std::move(root)); + return MakeNWidgets({nwid_begin, nwid_end}, std::move(root)); } /** diff --git a/src/widget_type.h b/src/widget_type.h index 8655dd2d1d..76dcd890c4 100644 --- a/src/widget_type.h +++ b/src/widget_type.h @@ -1332,8 +1332,8 @@ constexpr NWidgetPart NWidgetFunction(NWidgetFunctionType *func_ptr) } bool IsContainerWidgetType(WidgetType tp); -std::unique_ptr MakeNWidgets(const NWidgetPart *nwid_begin, const NWidgetPart *nwid_end, std::unique_ptr &&container); -std::unique_ptr MakeWindowNWidgetTree(const NWidgetPart *nwid_begin, const NWidgetPart *nwid_end, NWidgetStacked **shade_select); +std::unique_ptr MakeNWidgets(std::span nwid_parts, std::unique_ptr &&container); +std::unique_ptr MakeWindowNWidgetTree(std::span nwid_parts, NWidgetStacked **shade_select); std::unique_ptr MakeCompanyButtonRows(WidgetID widget_first, WidgetID widget_last, Colours button_colour, int max_length, StringID button_tooltip, bool resizable = true); diff --git a/src/window.cpp b/src/window.cpp index 012bab7537..3513b9c33a 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -104,7 +104,7 @@ std::string _windows_file; /** Window description constructor. */ WindowDesc::WindowDesc(WindowPosition def_pos, const char *ini_key, int16_t def_width_trad, int16_t def_height_trad, WindowClass window_class, WindowClass parent_class, uint32_t flags, - const NWidgetPart *nwid_begin, const NWidgetPart *nwid_end, HotkeyList *hotkeys, + const std::span nwid_parts, HotkeyList *hotkeys, const std::source_location location) : source_location(location), default_pos(def_pos), @@ -112,8 +112,7 @@ WindowDesc::WindowDesc(WindowPosition def_pos, const char *ini_key, int16_t def_ parent_cls(parent_class), ini_key(ini_key), flags(flags), - nwid_begin(nwid_begin), - nwid_end(nwid_end), + nwid_parts(nwid_parts), hotkeys(hotkeys), pref_sticky(false), pref_width(0), @@ -1723,7 +1722,7 @@ static Point LocalGetWindowPlacement(const WindowDesc &desc, int16_t sm_width, i */ void Window::CreateNestedTree() { - this->nested_root = MakeWindowNWidgetTree(this->window_desc.nwid_begin, this->window_desc.nwid_end, &this->shade_select); + this->nested_root = MakeWindowNWidgetTree(this->window_desc.nwid_parts, &this->shade_select); this->nested_root->FillWidgetLookup(this->widget_lookup); } diff --git a/src/window_gui.h b/src/window_gui.h index 30e1d6fd90..796b9b91f6 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -163,7 +163,7 @@ struct WindowDesc : ZeroedMemoryAllocator { WindowDesc(WindowPosition default_pos, const char *ini_key, int16_t def_width_trad, int16_t def_height_trad, WindowClass window_class, WindowClass parent_class, uint32_t flags, - const NWidgetPart *nwid_begin, const NWidgetPart *nwid_end, HotkeyList *hotkeys = nullptr, + const std::span nwid_parts, HotkeyList *hotkeys = nullptr, const std::source_location location = std::source_location::current()); ~WindowDesc(); @@ -174,8 +174,7 @@ struct WindowDesc : ZeroedMemoryAllocator { WindowClass parent_cls; ///< Class of the parent window. @see WindowClass const char *ini_key; ///< Key to store window defaults in openttd.cfg. \c nullptr if nothing shall be stored. uint32_t flags; ///< Flags. @see WindowDefaultFlag - const NWidgetPart *nwid_begin; ///< Beginning of nested widget parts describing the window. - const NWidgetPart *nwid_end; ///< Ending of nested widget parts describing the window. + const std::span nwid_parts; ///< Span of nested widget parts describing the window. HotkeyList *hotkeys; ///< Hotkeys for the window. bool pref_sticky; ///< Preferred stickyness. From 219995c643a09da4a82ee437c9c345e1c70b1216 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 13 Jun 2024 04:42:16 +0000 Subject: [PATCH 634/695] Update: Translations from eints polish: 1 change by pAter-exe --- src/lang/polish.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 22718f3ad8..c1c64d852b 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -5182,7 +5182,7 @@ STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Sprawdź STR_ERROR_AI_NO_AI_FOUND :Nie znaleziono SI do wczytania.{}SI jest nieaktywne i nic nie robi.{}Możesz pobrać kilka SI z przeglądarki „Dodatków Online” STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Jeden z uruchomionych skryptów przestał działać. Prosimy o zgłoszenie tego autorowi skryptu dołączając zrzut ekranu okna debugowania SI / GameScript -STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Okno debugowania SI / Game Script jest dostępne tylko na serwerze +STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Okno debugowania SI / Game Script jest dostępne tylko dla serwera # AI configuration window STR_AI_CONFIG_CAPTION_AI :{WHITE}Ustawienia SI From 77f62e0c90a9b81a791ba62b95e07477d6b68167 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 13 Jun 2024 19:06:19 +0100 Subject: [PATCH 635/695] Codechange: Shuffle OrderList members to reduce size. Size is reduced from 40 bytes to 32 bytes on 64 bit platforms. --- src/order_base.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/order_base.h b/src/order_base.h index 4bdea6140c..8f2f10c252 100644 --- a/src/order_base.h +++ b/src/order_base.h @@ -261,11 +261,11 @@ private: friend void AfterLoadVehicles(bool part_of_load); ///< For instantiating the shared vehicle chain friend SaveLoadTable GetOrderListDescription(); ///< Saving and loading of order lists. - Order *first; ///< First order of the order list. VehicleOrderID num_orders; ///< NOSAVE: How many orders there are in the list. VehicleOrderID num_manual_orders; ///< NOSAVE: How many manually added orders are there in the list. uint num_vehicles; ///< NOSAVE: Number of vehicles that share this order list. Vehicle *first_shared; ///< NOSAVE: pointer to the first vehicle in the shared order chain. + Order *first; ///< First order of the order list. TimerGameTick::Ticks timetable_duration; ///< NOSAVE: Total timetabled duration of the order list. TimerGameTick::Ticks total_duration; ///< NOSAVE: Total (timetabled or not) duration of the order list. @@ -273,7 +273,7 @@ private: public: /** Default constructor producing an invalid order list. */ OrderList(VehicleOrderID num_orders = INVALID_VEH_ORDER_ID) - : first(nullptr), num_orders(num_orders), num_manual_orders(0), num_vehicles(0), first_shared(nullptr), + : num_orders(num_orders), num_manual_orders(0), num_vehicles(0), first_shared(nullptr), first(nullptr), timetable_duration(0), total_duration(0) { } /** From 7b7e00123e30eeb1ca8ea18740f622df1c9db2fc Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 13 Jun 2024 19:09:36 +0100 Subject: [PATCH 636/695] Codechange: Shuffle RoadStop members to reduce size. Size is reduced from 40 bytes to 32 bytes on 64 bit platforms. --- src/roadstop_base.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/roadstop_base.h b/src/roadstop_base.h index 6bd3c268d8..1213773646 100644 --- a/src/roadstop_base.h +++ b/src/roadstop_base.h @@ -64,14 +64,14 @@ struct RoadStop : RoadStopPool::PoolItem<&_roadstop_pool> { void Rebuild(const RoadStop *rs, int side = -1); }; - TileIndex xy; ///< Position on the map - uint8_t status; ///< Current status of the Stop, @see RoadStopSatusFlag. Access using *Bay and *Busy functions. - struct RoadStop *next; ///< Next stop of the given type at this station + uint8_t status; ///< Current status of the Stop, @see RoadStopSatusFlag. Access using *Bay and *Busy functions. + TileIndex xy; ///< Position on the map + RoadStop *next; ///< Next stop of the given type at this station /** Initializes a RoadStop */ inline RoadStop(TileIndex tile = INVALID_TILE) : - xy(tile), - status((1 << RSSFB_BAY_COUNT) - 1) + status((1 << RSSFB_BAY_COUNT) - 1), + xy(tile) { } ~RoadStop(); From f9f07e9001eed6bcc7860b9faf33ec0d51b16f2d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 14 Jun 2024 16:32:31 +0100 Subject: [PATCH 637/695] Fix #12775: Text truncated incorrectly on Windows. (#12782) Caused by a -1 in the wrong place, which moved glyphs left one pixel. --- src/os/windows/string_uniscribe.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/os/windows/string_uniscribe.cpp b/src/os/windows/string_uniscribe.cpp index 0834fe6e56..7a4c0244d2 100644 --- a/src/os/windows/string_uniscribe.cpp +++ b/src/os/windows/string_uniscribe.cpp @@ -479,7 +479,7 @@ UniscribeParagraphLayout::UniscribeVisualRun::UniscribeVisualRun(const Uniscribe int advance = x; for (int i = 0; i < this->num_glyphs; i++) { int x_advance = range.advances[i]; - this->positions.emplace_back(range.offsets[i].du + advance - 1, range.offsets[i].du + advance + x_advance, range.offsets[i].dv); + this->positions.emplace_back(range.offsets[i].du + advance, range.offsets[i].du + advance + x_advance - 1, range.offsets[i].dv); advance += x_advance; } From b68172c225c0ff0f109cb48750069b8a3f438202 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 15 Jun 2024 10:24:17 +0100 Subject: [PATCH 638/695] Codechange: Use std::endian instead of TTD_ENDIAN where trivial. (#12778) --- src/screenshot.cpp | 14 +++++++------- src/sound.cpp | 14 +++++++------- src/sound/cocoa_s.cpp | 7 +++---- src/survey.cpp | 9 ++------- 4 files changed, 19 insertions(+), 25 deletions(-) diff --git a/src/screenshot.cpp b/src/screenshot.cpp index 0f54a89cae..90d5c82154 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -71,7 +71,7 @@ struct ScreenshotFormat { ScreenshotHandlerProc *proc; ///< Function for writing the screenshot. }; -#define MKCOLOUR(x) TO_LE32X(x) +#define MKCOLOUR(x) TO_LE32(x) /************************************************* **** SCREENSHOT CODE FOR WINDOWS BITMAP (.BMP) @@ -360,12 +360,12 @@ static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *user sig_bit.gray = 8; png_set_sBIT(png_ptr, info_ptr, &sig_bit); -#if TTD_ENDIAN == TTD_LITTLE_ENDIAN - png_set_bgr(png_ptr); - png_set_filler(png_ptr, 0, PNG_FILLER_AFTER); -#else - png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE); -#endif /* TTD_ENDIAN == TTD_LITTLE_ENDIAN */ + if constexpr (std::endian::native == std::endian::little) { + png_set_bgr(png_ptr); + png_set_filler(png_ptr, 0, PNG_FILLER_AFTER); + } else { + png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE); + } } /* use by default 64k temp memory */ diff --git a/src/sound.cpp b/src/sound.cpp index c4ab75df6c..2e51d31b26 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -137,15 +137,15 @@ static bool SetBankSource(MixerChannel *mc, const SoundEntry *sound) } } -#if TTD_ENDIAN == TTD_BIG_ENDIAN - if (sound->bits_per_sample == 16) { - uint num_samples = sound->file_size / 2; - int16_t *samples = (int16_t *)mem; - for (uint i = 0; i < num_samples; i++) { - samples[i] = BSWAP16(samples[i]); + if constexpr (std::endian::native == std::endian::big) { + if (sound->bits_per_sample == 16) { + size_t num_samples = sound->file_size / 2; + int16_t *samples = reinterpret_cast(mem); + for (size_t i = 0; i < num_samples; i++) { + samples[i] = BSWAP16(samples[i]); + } } } -#endif assert(sound->bits_per_sample == 8 || sound->bits_per_sample == 16); assert(sound->channels == 1); diff --git a/src/sound/cocoa_s.cpp b/src/sound/cocoa_s.cpp index 6c4348acdb..54198b0b5e 100644 --- a/src/sound/cocoa_s.cpp +++ b/src/sound/cocoa_s.cpp @@ -20,7 +20,6 @@ #include "../debug.h" #include "../driver.h" #include "../mixer.h" -#include "../core/endian_type.hpp" #include "cocoa_s.h" #define Rect OTTDRect @@ -58,9 +57,9 @@ std::optional SoundDriver_Cocoa::Start(const StringList &parm) requestedDesc.mBitsPerChannel = 16; requestedDesc.mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger; -#if TTD_ENDIAN == TTD_BIG_ENDIAN - requestedDesc.mFormatFlags |= kLinearPCMFormatFlagIsBigEndian; -#endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */ + if constexpr (std::endian::native == std::endian::big) { + requestedDesc.mFormatFlags |= kLinearPCMFormatFlagIsBigEndian; + } requestedDesc.mFramesPerPacket = 1; requestedDesc.mBytesPerFrame = requestedDesc.mBitsPerChannel * requestedDesc.mChannelsPerFrame / 8; diff --git a/src/survey.cpp b/src/survey.cpp index 0b1d62affa..123c82563e 100644 --- a/src/survey.cpp +++ b/src/survey.cpp @@ -219,13 +219,8 @@ void SurveyOpenTTD(nlohmann::json &survey) 32 #endif ; - survey["endian"] = -#if (TTD_ENDIAN == TTD_LITTLE_ENDIAN) - "little" -#else - "big" -#endif - ; + if constexpr (std::endian::native == std::endian::little) survey["endian"] = "little"; + if constexpr (std::endian::native == std::endian::big) survey["endian"] = "big"; survey["dedicated_build"] = #ifdef DEDICATED "yes" From 22d70f93349b2054411bba44640af02d71da86fa Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 15 Jun 2024 10:55:26 +0100 Subject: [PATCH 639/695] Codechange: Pass NewGRF ByteReader by reference. (#12786) ByteReader must be present and not null, so don't use a pointer. --- src/newgrf.cpp | 1693 ++++++++++++++++++++++++------------------------ 1 file changed, 846 insertions(+), 847 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index d547674e68..d026d4e9d4 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -304,7 +304,7 @@ public: } }; -typedef void (*SpecialSpriteHandler)(ByteReader *buf); +typedef void (*SpecialSpriteHandler)(ByteReader &buf); /** The maximum amount of stations a single GRF is allowed to add */ static const uint NUM_STATIONS_PER_GRF = UINT16_MAX - 1; @@ -746,11 +746,11 @@ static void MapSpriteMappingRecolour(PalSpriteID *grf_sprite) * @param[out] max_palette_offset Optionally returns the number of sprites in the spriteset of the palette. (0 if no spritset) * @return Read TileLayoutFlags. */ -static TileLayoutFlags ReadSpriteLayoutSprite(ByteReader *buf, bool read_flags, bool invert_action1_flag, bool use_cur_spritesets, int feature, PalSpriteID *grf_sprite, uint16_t *max_sprite_offset = nullptr, uint16_t *max_palette_offset = nullptr) +static TileLayoutFlags ReadSpriteLayoutSprite(ByteReader &buf, bool read_flags, bool invert_action1_flag, bool use_cur_spritesets, int feature, PalSpriteID *grf_sprite, uint16_t *max_sprite_offset = nullptr, uint16_t *max_palette_offset = nullptr) { - grf_sprite->sprite = buf->ReadWord(); - grf_sprite->pal = buf->ReadWord(); - TileLayoutFlags flags = read_flags ? (TileLayoutFlags)buf->ReadWord() : TLF_NOTHING; + grf_sprite->sprite = buf.ReadWord(); + grf_sprite->pal = buf.ReadWord(); + TileLayoutFlags flags = read_flags ? (TileLayoutFlags)buf.ReadWord() : TLF_NOTHING; MapSpriteMappingRecolour(grf_sprite); @@ -804,7 +804,7 @@ static TileLayoutFlags ReadSpriteLayoutSprite(ByteReader *buf, bool read_flags, * @param dts Sprite layout to insert data into. * @param index Sprite index to process; 0 for ground sprite. */ -static void ReadSpriteLayoutRegisters(ByteReader *buf, TileLayoutFlags flags, bool is_parent, NewGRFSpriteLayout *dts, uint index) +static void ReadSpriteLayoutRegisters(ByteReader &buf, TileLayoutFlags flags, bool is_parent, NewGRFSpriteLayout *dts, uint index) { if (!(flags & TLF_DRAWING_FLAGS)) return; @@ -812,23 +812,23 @@ static void ReadSpriteLayoutRegisters(ByteReader *buf, TileLayoutFlags flags, bo TileLayoutRegisters ®s = const_cast(dts->registers[index]); regs.flags = flags & TLF_DRAWING_FLAGS; - if (flags & TLF_DODRAW) regs.dodraw = buf->ReadByte(); - if (flags & TLF_SPRITE) regs.sprite = buf->ReadByte(); - if (flags & TLF_PALETTE) regs.palette = buf->ReadByte(); + if (flags & TLF_DODRAW) regs.dodraw = buf.ReadByte(); + if (flags & TLF_SPRITE) regs.sprite = buf.ReadByte(); + if (flags & TLF_PALETTE) regs.palette = buf.ReadByte(); if (is_parent) { if (flags & TLF_BB_XY_OFFSET) { - regs.delta.parent[0] = buf->ReadByte(); - regs.delta.parent[1] = buf->ReadByte(); + regs.delta.parent[0] = buf.ReadByte(); + regs.delta.parent[1] = buf.ReadByte(); } - if (flags & TLF_BB_Z_OFFSET) regs.delta.parent[2] = buf->ReadByte(); + if (flags & TLF_BB_Z_OFFSET) regs.delta.parent[2] = buf.ReadByte(); } else { - if (flags & TLF_CHILD_X_OFFSET) regs.delta.child[0] = buf->ReadByte(); - if (flags & TLF_CHILD_Y_OFFSET) regs.delta.child[1] = buf->ReadByte(); + if (flags & TLF_CHILD_X_OFFSET) regs.delta.child[0] = buf.ReadByte(); + if (flags & TLF_CHILD_Y_OFFSET) regs.delta.child[1] = buf.ReadByte(); } if (flags & TLF_SPRITE_VAR10) { - regs.sprite_var10 = buf->ReadByte(); + regs.sprite_var10 = buf.ReadByte(); if (regs.sprite_var10 > TLR_MAX_VAR10) { GrfMsg(1, "ReadSpriteLayoutRegisters: Spritelayout specifies var10 ({}) exceeding the maximal allowed value {}", regs.sprite_var10, TLR_MAX_VAR10); DisableGrf(STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT); @@ -837,7 +837,7 @@ static void ReadSpriteLayoutRegisters(ByteReader *buf, TileLayoutFlags flags, bo } if (flags & TLF_PALETTE_VAR10) { - regs.palette_var10 = buf->ReadByte(); + regs.palette_var10 = buf.ReadByte(); if (regs.palette_var10 > TLR_MAX_VAR10) { GrfMsg(1, "ReadSpriteLayoutRegisters: Spritelayout specifies var10 ({}) exceeding the maximal allowed value {}", regs.palette_var10, TLR_MAX_VAR10); DisableGrf(STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT); @@ -857,7 +857,7 @@ static void ReadSpriteLayoutRegisters(ByteReader *buf, TileLayoutFlags flags, bo * @param dts Layout container to output into * @return True on error (GRF was disabled). */ -static bool ReadSpriteLayout(ByteReader *buf, uint num_building_sprites, bool use_cur_spritesets, uint8_t feature, bool allow_var10, bool no_z_position, NewGRFSpriteLayout *dts) +static bool ReadSpriteLayout(ByteReader &buf, uint num_building_sprites, bool use_cur_spritesets, uint8_t feature, bool allow_var10, bool no_z_position, NewGRFSpriteLayout *dts) { bool has_flags = HasBit(num_building_sprites, 6); ClrBit(num_building_sprites, 6); @@ -893,15 +893,15 @@ static bool ReadSpriteLayout(ByteReader *buf, uint num_building_sprites, bool us return true; } - seq->delta_x = buf->ReadByte(); - seq->delta_y = buf->ReadByte(); + seq->delta_x = buf.ReadByte(); + seq->delta_y = buf.ReadByte(); - if (!no_z_position) seq->delta_z = buf->ReadByte(); + if (!no_z_position) seq->delta_z = buf.ReadByte(); if (seq->IsParentSprite()) { - seq->size_x = buf->ReadByte(); - seq->size_y = buf->ReadByte(); - seq->size_z = buf->ReadByte(); + seq->size_x = buf.ReadByte(); + seq->size_y = buf.ReadByte(); + seq->size_z = buf.ReadByte(); } ReadSpriteLayoutRegisters(buf, flags, seq->IsParentSprite(), dts, i + 1); @@ -995,7 +995,7 @@ enum ChangeInfoResult { CIR_INVALID_ID, ///< Attempt to modify an invalid ID }; -typedef ChangeInfoResult (*VCI_Handler)(uint engine, int numinfo, int prop, ByteReader *buf); +typedef ChangeInfoResult (*VCI_Handler)(uint engine, int numinfo, int prop, ByteReader &buf); /** * Define properties common to all vehicles @@ -1004,32 +1004,32 @@ typedef ChangeInfoResult (*VCI_Handler)(uint engine, int numinfo, int prop, Byte * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult CommonVehicleChangeInfo(EngineInfo *ei, int prop, ByteReader *buf) +static ChangeInfoResult CommonVehicleChangeInfo(EngineInfo *ei, int prop, ByteReader &buf) { switch (prop) { case 0x00: // Introduction date - ei->base_intro = buf->ReadWord() + CalendarTime::DAYS_TILL_ORIGINAL_BASE_YEAR; + ei->base_intro = buf.ReadWord() + CalendarTime::DAYS_TILL_ORIGINAL_BASE_YEAR; break; case 0x02: // Decay speed - ei->decay_speed = buf->ReadByte(); + ei->decay_speed = buf.ReadByte(); break; case 0x03: // Vehicle life - ei->lifelength = buf->ReadByte(); + ei->lifelength = buf.ReadByte(); break; case 0x04: // Model life - ei->base_life = buf->ReadByte(); + ei->base_life = buf.ReadByte(); break; case 0x06: // Climates available - ei->climates = buf->ReadByte(); + ei->climates = buf.ReadByte(); break; case PROP_VEHICLE_LOAD_AMOUNT: // 0x07 Loading speed /* Amount of cargo loaded during a vehicle's "loading tick" */ - ei->load_amount = buf->ReadByte(); + ei->load_amount = buf.ReadByte(); break; default: @@ -1047,7 +1047,7 @@ static ChangeInfoResult CommonVehicleChangeInfo(EngineInfo *ei, int prop, ByteRe * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -1060,7 +1060,7 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop switch (prop) { case 0x05: { // Track type - uint8_t tracktype = buf->ReadByte(); + uint8_t tracktype = buf.ReadByte(); if (tracktype < _cur.grffile->railtype_list.size()) { _gted[e->index].railtypelabel = _cur.grffile->railtype_list[tracktype]; @@ -1081,11 +1081,11 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop case 0x08: // AI passenger service /* Tells the AI that this engine is designed for * passenger services and shouldn't be used for freight. */ - rvi->ai_passenger_only = buf->ReadByte(); + rvi->ai_passenger_only = buf.ReadByte(); break; case PROP_TRAIN_SPEED: { // 0x09 Speed (1 unit is 1 km-ish/h) - uint16_t speed = buf->ReadWord(); + uint16_t speed = buf.ReadWord(); if (speed == 0xFFFF) speed = 0; rvi->max_speed = speed; @@ -1093,7 +1093,7 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop } case PROP_TRAIN_POWER: // 0x0B Power - rvi->power = buf->ReadWord(); + rvi->power = buf.ReadWord(); /* Set engine / wagon state based on power */ if (rvi->power != 0) { @@ -1106,15 +1106,15 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop break; case PROP_TRAIN_RUNNING_COST_FACTOR: // 0x0D Running cost factor - rvi->running_cost = buf->ReadByte(); + rvi->running_cost = buf.ReadByte(); break; case 0x0E: // Running cost base - ConvertTTDBasePrice(buf->ReadDWord(), "RailVehicleChangeInfo", &rvi->running_cost_class); + ConvertTTDBasePrice(buf.ReadDWord(), "RailVehicleChangeInfo", &rvi->running_cost_class); break; case 0x12: { // Sprite ID - uint8_t spriteid = buf->ReadByte(); + uint8_t spriteid = buf.ReadByte(); uint8_t orig_spriteid = spriteid; /* TTD sprite IDs point to a location in a 16bit array, but we use it @@ -1131,7 +1131,7 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop } case 0x13: { // Dual-headed - uint8_t dual = buf->ReadByte(); + uint8_t dual = buf.ReadByte(); if (dual != 0) { rvi->railveh_type = RAILVEH_MULTIHEAD; @@ -1143,12 +1143,12 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop } case PROP_TRAIN_CARGO_CAPACITY: // 0x14 Cargo capacity - rvi->capacity = buf->ReadByte(); + rvi->capacity = buf.ReadByte(); break; case 0x15: { // Cargo type _gted[e->index].defaultcargo_grf = _cur.grffile; - uint8_t ctype = buf->ReadByte(); + uint8_t ctype = buf.ReadByte(); if (ctype == 0xFF) { /* 0xFF is specified as 'use first refittable' */ @@ -1168,16 +1168,16 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop } case PROP_TRAIN_WEIGHT: // 0x16 Weight - SB(rvi->weight, 0, 8, buf->ReadByte()); + SB(rvi->weight, 0, 8, buf.ReadByte()); break; case PROP_TRAIN_COST_FACTOR: // 0x17 Cost factor - rvi->cost_factor = buf->ReadByte(); + rvi->cost_factor = buf.ReadByte(); break; case 0x18: // AI rank GrfMsg(2, "RailVehicleChangeInfo: Property 0x18 'AI rank' not used by NoAI, ignored."); - buf->ReadByte(); + buf.ReadByte(); break; case 0x19: { // Engine traction type @@ -1188,7 +1188,7 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop * 0x32 .. 0x37: Monorail * 0x38 .. 0x41: Maglev */ - uint8_t traction = buf->ReadByte(); + uint8_t traction = buf.ReadByte(); EngineClass engclass; if (traction <= 0x07) { @@ -1217,19 +1217,19 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop } case 0x1A: // Alter purchase list sort order - AlterVehicleListOrder(e->index, buf->ReadExtendedByte()); + AlterVehicleListOrder(e->index, buf.ReadExtendedByte()); break; case 0x1B: // Powered wagons power bonus - rvi->pow_wag_power = buf->ReadWord(); + rvi->pow_wag_power = buf.ReadWord(); break; case 0x1C: // Refit cost - ei->refit_cost = buf->ReadByte(); + ei->refit_cost = buf.ReadByte(); break; case 0x1D: { // Refit cargo - uint32_t mask = buf->ReadDWord(); + uint32_t mask = buf.ReadDWord(); _gted[e->index].UpdateRefittability(mask != 0); ei->refit_mask = TranslateRefitMask(mask); _gted[e->index].defaultcargo_grf = _cur.grffile; @@ -1237,23 +1237,23 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop } case 0x1E: // Callback - SB(ei->callback_mask, 0, 8, buf->ReadByte()); + SB(ei->callback_mask, 0, 8, buf.ReadByte()); break; case PROP_TRAIN_TRACTIVE_EFFORT: // 0x1F Tractive effort coefficient - rvi->tractive_effort = buf->ReadByte(); + rvi->tractive_effort = buf.ReadByte(); break; case 0x20: // Air drag - rvi->air_drag = buf->ReadByte(); + rvi->air_drag = buf.ReadByte(); break; case PROP_TRAIN_SHORTEN_FACTOR: // 0x21 Shorter vehicle - rvi->shorten_factor = buf->ReadByte(); + rvi->shorten_factor = buf.ReadByte(); break; case 0x22: // Visual effect - rvi->visual_effect = buf->ReadByte(); + rvi->visual_effect = buf.ReadByte(); /* Avoid accidentally setting visual_effect to the default value * Since bit 6 (disable effects) is set anyways, we can safely erase some bits. */ if (rvi->visual_effect == VE_DEFAULT) { @@ -1263,11 +1263,11 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop break; case 0x23: // Powered wagons weight bonus - rvi->pow_wag_weight = buf->ReadByte(); + rvi->pow_wag_weight = buf.ReadByte(); break; case 0x24: { // High byte of vehicle weight - uint8_t weight = buf->ReadByte(); + uint8_t weight = buf.ReadByte(); if (weight > 4) { GrfMsg(2, "RailVehicleChangeInfo: Nonsensical weight of {} tons, ignoring", weight << 8); @@ -1278,65 +1278,65 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop } case PROP_TRAIN_USER_DATA: // 0x25 User-defined bit mask to set when checking veh. var. 42 - rvi->user_def_data = buf->ReadByte(); + rvi->user_def_data = buf.ReadByte(); break; case 0x26: // Retire vehicle early - ei->retire_early = buf->ReadByte(); + ei->retire_early = buf.ReadByte(); break; case 0x27: // Miscellaneous flags - ei->misc_flags = buf->ReadByte(); + ei->misc_flags = buf.ReadByte(); _loaded_newgrf_features.has_2CC |= HasBit(ei->misc_flags, EF_USES_2CC); break; case 0x28: // Cargo classes allowed - _gted[e->index].cargo_allowed = buf->ReadWord(); + _gted[e->index].cargo_allowed = buf.ReadWord(); _gted[e->index].UpdateRefittability(_gted[e->index].cargo_allowed != 0); _gted[e->index].defaultcargo_grf = _cur.grffile; break; case 0x29: // Cargo classes disallowed - _gted[e->index].cargo_disallowed = buf->ReadWord(); + _gted[e->index].cargo_disallowed = buf.ReadWord(); _gted[e->index].UpdateRefittability(false); break; case 0x2A: // Long format introduction date (days since year 0) - ei->base_intro = buf->ReadDWord(); + ei->base_intro = buf.ReadDWord(); break; case PROP_TRAIN_CARGO_AGE_PERIOD: // 0x2B Cargo aging period - ei->cargo_age_period = buf->ReadWord(); + ei->cargo_age_period = buf.ReadWord(); break; case 0x2C: // CTT refit include list case 0x2D: { // CTT refit exclude list - uint8_t count = buf->ReadByte(); + uint8_t count = buf.ReadByte(); _gted[e->index].UpdateRefittability(prop == 0x2C && count != 0); if (prop == 0x2C) _gted[e->index].defaultcargo_grf = _cur.grffile; CargoTypes &ctt = prop == 0x2C ? _gted[e->index].ctt_include_mask : _gted[e->index].ctt_exclude_mask; ctt = 0; while (count--) { - CargoID ctype = GetCargoTranslation(buf->ReadByte(), _cur.grffile); + CargoID ctype = GetCargoTranslation(buf.ReadByte(), _cur.grffile); if (IsValidCargoID(ctype)) SetBit(ctt, ctype); } break; } case PROP_TRAIN_CURVE_SPEED_MOD: // 0x2E Curve speed modifier - rvi->curve_speed_mod = buf->ReadWord(); + rvi->curve_speed_mod = buf.ReadWord(); break; case 0x2F: // Engine variant - ei->variant_id = buf->ReadWord(); + ei->variant_id = buf.ReadWord(); break; case 0x30: // Extra miscellaneous flags - ei->extra_flags = static_cast(buf->ReadDWord()); + ei->extra_flags = static_cast(buf.ReadDWord()); break; case 0x31: // Callback additional mask - SB(ei->callback_mask, 8, 8, buf->ReadByte()); + SB(ei->callback_mask, 8, 8, buf.ReadByte()); break; default: @@ -1356,7 +1356,7 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult RoadVehicleChangeInfo(uint engine, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult RoadVehicleChangeInfo(uint engine, int numinfo, int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -1371,23 +1371,23 @@ static ChangeInfoResult RoadVehicleChangeInfo(uint engine, int numinfo, int prop case 0x05: // Road/tram type /* RoadTypeLabel is looked up later after the engine's road/tram * flag is set, however 0 means the value has not been set. */ - _gted[e->index].roadtramtype = buf->ReadByte() + 1; + _gted[e->index].roadtramtype = buf.ReadByte() + 1; break; case 0x08: // Speed (1 unit is 0.5 kmh) - rvi->max_speed = buf->ReadByte(); + rvi->max_speed = buf.ReadByte(); break; case PROP_ROADVEH_RUNNING_COST_FACTOR: // 0x09 Running cost factor - rvi->running_cost = buf->ReadByte(); + rvi->running_cost = buf.ReadByte(); break; case 0x0A: // Running cost base - ConvertTTDBasePrice(buf->ReadDWord(), "RoadVehicleChangeInfo", &rvi->running_cost_class); + ConvertTTDBasePrice(buf.ReadDWord(), "RoadVehicleChangeInfo", &rvi->running_cost_class); break; case 0x0E: { // Sprite ID - uint8_t spriteid = buf->ReadByte(); + uint8_t spriteid = buf.ReadByte(); uint8_t orig_spriteid = spriteid; /* cars have different custom id in the GRF file */ @@ -1405,12 +1405,12 @@ static ChangeInfoResult RoadVehicleChangeInfo(uint engine, int numinfo, int prop } case PROP_ROADVEH_CARGO_CAPACITY: // 0x0F Cargo capacity - rvi->capacity = buf->ReadByte(); + rvi->capacity = buf.ReadByte(); break; case 0x10: { // Cargo type _gted[e->index].defaultcargo_grf = _cur.grffile; - uint8_t ctype = buf->ReadByte(); + uint8_t ctype = buf.ReadByte(); if (ctype == 0xFF) { /* 0xFF is specified as 'use first refittable' */ @@ -1430,27 +1430,27 @@ static ChangeInfoResult RoadVehicleChangeInfo(uint engine, int numinfo, int prop } case PROP_ROADVEH_COST_FACTOR: // 0x11 Cost factor - rvi->cost_factor = buf->ReadByte(); + rvi->cost_factor = buf.ReadByte(); break; case 0x12: // SFX - rvi->sfx = GetNewGRFSoundID(_cur.grffile, buf->ReadByte()); + rvi->sfx = GetNewGRFSoundID(_cur.grffile, buf.ReadByte()); break; case PROP_ROADVEH_POWER: // Power in units of 10 HP. - rvi->power = buf->ReadByte(); + rvi->power = buf.ReadByte(); break; case PROP_ROADVEH_WEIGHT: // Weight in units of 1/4 tons. - rvi->weight = buf->ReadByte(); + rvi->weight = buf.ReadByte(); break; case PROP_ROADVEH_SPEED: // Speed in mph/0.8 - _gted[e->index].rv_max_speed = buf->ReadByte(); + _gted[e->index].rv_max_speed = buf.ReadByte(); break; case 0x16: { // Cargoes available for refitting - uint32_t mask = buf->ReadDWord(); + uint32_t mask = buf.ReadDWord(); _gted[e->index].UpdateRefittability(mask != 0); ei->refit_mask = TranslateRefitMask(mask); _gted[e->index].defaultcargo_grf = _cur.grffile; @@ -1458,51 +1458,51 @@ static ChangeInfoResult RoadVehicleChangeInfo(uint engine, int numinfo, int prop } case 0x17: // Callback mask - SB(ei->callback_mask, 0, 8, buf->ReadByte()); + SB(ei->callback_mask, 0, 8, buf.ReadByte()); break; case PROP_ROADVEH_TRACTIVE_EFFORT: // Tractive effort coefficient in 1/256. - rvi->tractive_effort = buf->ReadByte(); + rvi->tractive_effort = buf.ReadByte(); break; case 0x19: // Air drag - rvi->air_drag = buf->ReadByte(); + rvi->air_drag = buf.ReadByte(); break; case 0x1A: // Refit cost - ei->refit_cost = buf->ReadByte(); + ei->refit_cost = buf.ReadByte(); break; case 0x1B: // Retire vehicle early - ei->retire_early = buf->ReadByte(); + ei->retire_early = buf.ReadByte(); break; case 0x1C: // Miscellaneous flags - ei->misc_flags = buf->ReadByte(); + ei->misc_flags = buf.ReadByte(); _loaded_newgrf_features.has_2CC |= HasBit(ei->misc_flags, EF_USES_2CC); break; case 0x1D: // Cargo classes allowed - _gted[e->index].cargo_allowed = buf->ReadWord(); + _gted[e->index].cargo_allowed = buf.ReadWord(); _gted[e->index].UpdateRefittability(_gted[e->index].cargo_allowed != 0); _gted[e->index].defaultcargo_grf = _cur.grffile; break; case 0x1E: // Cargo classes disallowed - _gted[e->index].cargo_disallowed = buf->ReadWord(); + _gted[e->index].cargo_disallowed = buf.ReadWord(); _gted[e->index].UpdateRefittability(false); break; case 0x1F: // Long format introduction date (days since year 0) - ei->base_intro = buf->ReadDWord(); + ei->base_intro = buf.ReadDWord(); break; case 0x20: // Alter purchase list sort order - AlterVehicleListOrder(e->index, buf->ReadExtendedByte()); + AlterVehicleListOrder(e->index, buf.ReadExtendedByte()); break; case 0x21: // Visual effect - rvi->visual_effect = buf->ReadByte(); + rvi->visual_effect = buf.ReadByte(); /* Avoid accidentally setting visual_effect to the default value * Since bit 6 (disable effects) is set anyways, we can safely erase some bits. */ if (rvi->visual_effect == VE_DEFAULT) { @@ -1512,37 +1512,37 @@ static ChangeInfoResult RoadVehicleChangeInfo(uint engine, int numinfo, int prop break; case PROP_ROADVEH_CARGO_AGE_PERIOD: // 0x22 Cargo aging period - ei->cargo_age_period = buf->ReadWord(); + ei->cargo_age_period = buf.ReadWord(); break; case PROP_ROADVEH_SHORTEN_FACTOR: // 0x23 Shorter vehicle - rvi->shorten_factor = buf->ReadByte(); + rvi->shorten_factor = buf.ReadByte(); break; case 0x24: // CTT refit include list case 0x25: { // CTT refit exclude list - uint8_t count = buf->ReadByte(); + uint8_t count = buf.ReadByte(); _gted[e->index].UpdateRefittability(prop == 0x24 && count != 0); if (prop == 0x24) _gted[e->index].defaultcargo_grf = _cur.grffile; CargoTypes &ctt = prop == 0x24 ? _gted[e->index].ctt_include_mask : _gted[e->index].ctt_exclude_mask; ctt = 0; while (count--) { - CargoID ctype = GetCargoTranslation(buf->ReadByte(), _cur.grffile); + CargoID ctype = GetCargoTranslation(buf.ReadByte(), _cur.grffile); if (IsValidCargoID(ctype)) SetBit(ctt, ctype); } break; } case 0x26: // Engine variant - ei->variant_id = buf->ReadWord(); + ei->variant_id = buf.ReadWord(); break; case 0x27: // Extra miscellaneous flags - ei->extra_flags = static_cast(buf->ReadDWord()); + ei->extra_flags = static_cast(buf.ReadDWord()); break; case 0x28: // Callback additional mask - SB(ei->callback_mask, 8, 8, buf->ReadByte()); + SB(ei->callback_mask, 8, 8, buf.ReadByte()); break; default: @@ -1562,7 +1562,7 @@ static ChangeInfoResult RoadVehicleChangeInfo(uint engine, int numinfo, int prop * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult ShipVehicleChangeInfo(uint engine, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult ShipVehicleChangeInfo(uint engine, int numinfo, int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -1575,7 +1575,7 @@ static ChangeInfoResult ShipVehicleChangeInfo(uint engine, int numinfo, int prop switch (prop) { case 0x08: { // Sprite ID - uint8_t spriteid = buf->ReadByte(); + uint8_t spriteid = buf.ReadByte(); uint8_t orig_spriteid = spriteid; /* ships have different custom id in the GRF file */ @@ -1593,20 +1593,20 @@ static ChangeInfoResult ShipVehicleChangeInfo(uint engine, int numinfo, int prop } case 0x09: // Refittable - svi->old_refittable = (buf->ReadByte() != 0); + svi->old_refittable = (buf.ReadByte() != 0); break; case PROP_SHIP_COST_FACTOR: // 0x0A Cost factor - svi->cost_factor = buf->ReadByte(); + svi->cost_factor = buf.ReadByte(); break; case PROP_SHIP_SPEED: // 0x0B Speed (1 unit is 0.5 km-ish/h). Use 0x23 to achieve higher speeds. - svi->max_speed = buf->ReadByte(); + svi->max_speed = buf.ReadByte(); break; case 0x0C: { // Cargo type _gted[e->index].defaultcargo_grf = _cur.grffile; - uint8_t ctype = buf->ReadByte(); + uint8_t ctype = buf.ReadByte(); if (ctype == 0xFF) { /* 0xFF is specified as 'use first refittable' */ @@ -1626,19 +1626,19 @@ static ChangeInfoResult ShipVehicleChangeInfo(uint engine, int numinfo, int prop } case PROP_SHIP_CARGO_CAPACITY: // 0x0D Cargo capacity - svi->capacity = buf->ReadWord(); + svi->capacity = buf.ReadWord(); break; case PROP_SHIP_RUNNING_COST_FACTOR: // 0x0F Running cost factor - svi->running_cost = buf->ReadByte(); + svi->running_cost = buf.ReadByte(); break; case 0x10: // SFX - svi->sfx = GetNewGRFSoundID(_cur.grffile, buf->ReadByte()); + svi->sfx = GetNewGRFSoundID(_cur.grffile, buf.ReadByte()); break; case 0x11: { // Cargoes available for refitting - uint32_t mask = buf->ReadDWord(); + uint32_t mask = buf.ReadDWord(); _gted[e->index].UpdateRefittability(mask != 0); ei->refit_mask = TranslateRefitMask(mask); _gted[e->index].defaultcargo_grf = _cur.grffile; @@ -1646,51 +1646,51 @@ static ChangeInfoResult ShipVehicleChangeInfo(uint engine, int numinfo, int prop } case 0x12: // Callback mask - SB(ei->callback_mask, 0, 8, buf->ReadByte()); + SB(ei->callback_mask, 0, 8, buf.ReadByte()); break; case 0x13: // Refit cost - ei->refit_cost = buf->ReadByte(); + ei->refit_cost = buf.ReadByte(); break; case 0x14: // Ocean speed fraction - svi->ocean_speed_frac = buf->ReadByte(); + svi->ocean_speed_frac = buf.ReadByte(); break; case 0x15: // Canal speed fraction - svi->canal_speed_frac = buf->ReadByte(); + svi->canal_speed_frac = buf.ReadByte(); break; case 0x16: // Retire vehicle early - ei->retire_early = buf->ReadByte(); + ei->retire_early = buf.ReadByte(); break; case 0x17: // Miscellaneous flags - ei->misc_flags = buf->ReadByte(); + ei->misc_flags = buf.ReadByte(); _loaded_newgrf_features.has_2CC |= HasBit(ei->misc_flags, EF_USES_2CC); break; case 0x18: // Cargo classes allowed - _gted[e->index].cargo_allowed = buf->ReadWord(); + _gted[e->index].cargo_allowed = buf.ReadWord(); _gted[e->index].UpdateRefittability(_gted[e->index].cargo_allowed != 0); _gted[e->index].defaultcargo_grf = _cur.grffile; break; case 0x19: // Cargo classes disallowed - _gted[e->index].cargo_disallowed = buf->ReadWord(); + _gted[e->index].cargo_disallowed = buf.ReadWord(); _gted[e->index].UpdateRefittability(false); break; case 0x1A: // Long format introduction date (days since year 0) - ei->base_intro = buf->ReadDWord(); + ei->base_intro = buf.ReadDWord(); break; case 0x1B: // Alter purchase list sort order - AlterVehicleListOrder(e->index, buf->ReadExtendedByte()); + AlterVehicleListOrder(e->index, buf.ReadExtendedByte()); break; case 0x1C: // Visual effect - svi->visual_effect = buf->ReadByte(); + svi->visual_effect = buf.ReadByte(); /* Avoid accidentally setting visual_effect to the default value * Since bit 6 (disable effects) is set anyways, we can safely erase some bits. */ if (svi->visual_effect == VE_DEFAULT) { @@ -1700,41 +1700,41 @@ static ChangeInfoResult ShipVehicleChangeInfo(uint engine, int numinfo, int prop break; case PROP_SHIP_CARGO_AGE_PERIOD: // 0x1D Cargo aging period - ei->cargo_age_period = buf->ReadWord(); + ei->cargo_age_period = buf.ReadWord(); break; case 0x1E: // CTT refit include list case 0x1F: { // CTT refit exclude list - uint8_t count = buf->ReadByte(); + uint8_t count = buf.ReadByte(); _gted[e->index].UpdateRefittability(prop == 0x1E && count != 0); if (prop == 0x1E) _gted[e->index].defaultcargo_grf = _cur.grffile; CargoTypes &ctt = prop == 0x1E ? _gted[e->index].ctt_include_mask : _gted[e->index].ctt_exclude_mask; ctt = 0; while (count--) { - CargoID ctype = GetCargoTranslation(buf->ReadByte(), _cur.grffile); + CargoID ctype = GetCargoTranslation(buf.ReadByte(), _cur.grffile); if (IsValidCargoID(ctype)) SetBit(ctt, ctype); } break; } case 0x20: // Engine variant - ei->variant_id = buf->ReadWord(); + ei->variant_id = buf.ReadWord(); break; case 0x21: // Extra miscellaneous flags - ei->extra_flags = static_cast(buf->ReadDWord()); + ei->extra_flags = static_cast(buf.ReadDWord()); break; case 0x22: // Callback additional mask - SB(ei->callback_mask, 8, 8, buf->ReadByte()); + SB(ei->callback_mask, 8, 8, buf.ReadByte()); break; case 0x23: // Speed (1 unit is 0.5 km-ish/h) - svi->max_speed = buf->ReadWord(); + svi->max_speed = buf.ReadWord(); break; case 0x24: // Acceleration (1 unit is 0.5 km-ish/h per tick) - svi->acceleration = std::max(1, buf->ReadByte()); + svi->acceleration = std::max(1, buf.ReadByte()); break; default: @@ -1754,7 +1754,7 @@ static ChangeInfoResult ShipVehicleChangeInfo(uint engine, int numinfo, int prop * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult AircraftVehicleChangeInfo(uint engine, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult AircraftVehicleChangeInfo(uint engine, int numinfo, int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -1767,7 +1767,7 @@ static ChangeInfoResult AircraftVehicleChangeInfo(uint engine, int numinfo, int switch (prop) { case 0x08: { // Sprite ID - uint8_t spriteid = buf->ReadByte(); + uint8_t spriteid = buf.ReadByte(); uint8_t orig_spriteid = spriteid; /* aircraft have different custom id in the GRF file */ @@ -1785,7 +1785,7 @@ static ChangeInfoResult AircraftVehicleChangeInfo(uint engine, int numinfo, int } case 0x09: // Helicopter - if (buf->ReadByte() == 0) { + if (buf.ReadByte() == 0) { avi->subtype = AIR_HELI; } else { SB(avi->subtype, 0, 1, 1); // AIR_CTOL @@ -1793,39 +1793,39 @@ static ChangeInfoResult AircraftVehicleChangeInfo(uint engine, int numinfo, int break; case 0x0A: // Large - SB(avi->subtype, 1, 1, (buf->ReadByte() != 0 ? 1 : 0)); // AIR_FAST + SB(avi->subtype, 1, 1, (buf.ReadByte() != 0 ? 1 : 0)); // AIR_FAST break; case PROP_AIRCRAFT_COST_FACTOR: // 0x0B Cost factor - avi->cost_factor = buf->ReadByte(); + avi->cost_factor = buf.ReadByte(); break; case PROP_AIRCRAFT_SPEED: // 0x0C Speed (1 unit is 8 mph, we translate to 1 unit is 1 km-ish/h) - avi->max_speed = (buf->ReadByte() * 128) / 10; + avi->max_speed = (buf.ReadByte() * 128) / 10; break; case 0x0D: // Acceleration - avi->acceleration = buf->ReadByte(); + avi->acceleration = buf.ReadByte(); break; case PROP_AIRCRAFT_RUNNING_COST_FACTOR: // 0x0E Running cost factor - avi->running_cost = buf->ReadByte(); + avi->running_cost = buf.ReadByte(); break; case PROP_AIRCRAFT_PASSENGER_CAPACITY: // 0x0F Passenger capacity - avi->passenger_capacity = buf->ReadWord(); + avi->passenger_capacity = buf.ReadWord(); break; case PROP_AIRCRAFT_MAIL_CAPACITY: // 0x11 Mail capacity - avi->mail_capacity = buf->ReadByte(); + avi->mail_capacity = buf.ReadByte(); break; case 0x12: // SFX - avi->sfx = GetNewGRFSoundID(_cur.grffile, buf->ReadByte()); + avi->sfx = GetNewGRFSoundID(_cur.grffile, buf.ReadByte()); break; case 0x13: { // Cargoes available for refitting - uint32_t mask = buf->ReadDWord(); + uint32_t mask = buf.ReadDWord(); _gted[e->index].UpdateRefittability(mask != 0); ei->refit_mask = TranslateRefitMask(mask); _gted[e->index].defaultcargo_grf = _cur.grffile; @@ -1833,73 +1833,73 @@ static ChangeInfoResult AircraftVehicleChangeInfo(uint engine, int numinfo, int } case 0x14: // Callback mask - SB(ei->callback_mask, 0, 8, buf->ReadByte()); + SB(ei->callback_mask, 0, 8, buf.ReadByte()); break; case 0x15: // Refit cost - ei->refit_cost = buf->ReadByte(); + ei->refit_cost = buf.ReadByte(); break; case 0x16: // Retire vehicle early - ei->retire_early = buf->ReadByte(); + ei->retire_early = buf.ReadByte(); break; case 0x17: // Miscellaneous flags - ei->misc_flags = buf->ReadByte(); + ei->misc_flags = buf.ReadByte(); _loaded_newgrf_features.has_2CC |= HasBit(ei->misc_flags, EF_USES_2CC); break; case 0x18: // Cargo classes allowed - _gted[e->index].cargo_allowed = buf->ReadWord(); + _gted[e->index].cargo_allowed = buf.ReadWord(); _gted[e->index].UpdateRefittability(_gted[e->index].cargo_allowed != 0); _gted[e->index].defaultcargo_grf = _cur.grffile; break; case 0x19: // Cargo classes disallowed - _gted[e->index].cargo_disallowed = buf->ReadWord(); + _gted[e->index].cargo_disallowed = buf.ReadWord(); _gted[e->index].UpdateRefittability(false); break; case 0x1A: // Long format introduction date (days since year 0) - ei->base_intro = buf->ReadDWord(); + ei->base_intro = buf.ReadDWord(); break; case 0x1B: // Alter purchase list sort order - AlterVehicleListOrder(e->index, buf->ReadExtendedByte()); + AlterVehicleListOrder(e->index, buf.ReadExtendedByte()); break; case PROP_AIRCRAFT_CARGO_AGE_PERIOD: // 0x1C Cargo aging period - ei->cargo_age_period = buf->ReadWord(); + ei->cargo_age_period = buf.ReadWord(); break; case 0x1D: // CTT refit include list case 0x1E: { // CTT refit exclude list - uint8_t count = buf->ReadByte(); + uint8_t count = buf.ReadByte(); _gted[e->index].UpdateRefittability(prop == 0x1D && count != 0); if (prop == 0x1D) _gted[e->index].defaultcargo_grf = _cur.grffile; CargoTypes &ctt = prop == 0x1D ? _gted[e->index].ctt_include_mask : _gted[e->index].ctt_exclude_mask; ctt = 0; while (count--) { - CargoID ctype = GetCargoTranslation(buf->ReadByte(), _cur.grffile); + CargoID ctype = GetCargoTranslation(buf.ReadByte(), _cur.grffile); if (IsValidCargoID(ctype)) SetBit(ctt, ctype); } break; } case PROP_AIRCRAFT_RANGE: // 0x1F Max aircraft range - avi->max_range = buf->ReadWord(); + avi->max_range = buf.ReadWord(); break; case 0x20: // Engine variant - ei->variant_id = buf->ReadWord(); + ei->variant_id = buf.ReadWord(); break; case 0x21: // Extra miscellaneous flags - ei->extra_flags = static_cast(buf->ReadDWord()); + ei->extra_flags = static_cast(buf.ReadDWord()); break; case 0x22: // Callback additional mask - SB(ei->callback_mask, 8, 8, buf->ReadByte()); + SB(ei->callback_mask, 8, 8, buf.ReadByte()); break; default: @@ -1919,7 +1919,7 @@ static ChangeInfoResult AircraftVehicleChangeInfo(uint engine, int numinfo, int * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -1949,13 +1949,13 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte } /* Swap classid because we read it in BE meaning WAYP or DFLT */ - uint32_t classid = buf->ReadDWord(); + uint32_t classid = buf.ReadDWord(); statspec->class_index = StationClass::Allocate(BSWAP32(classid)); break; } case 0x09: { // Define sprite layout - uint16_t tiles = buf->ReadExtendedByte(); + uint16_t tiles = buf.ReadExtendedByte(); statspec->renderdata.clear(); // delete earlier loaded stuff statspec->renderdata.reserve(tiles); @@ -1963,8 +1963,8 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte NewGRFSpriteLayout *dts = &statspec->renderdata.emplace_back(); dts->consistent_max_offset = UINT16_MAX; // Spritesets are unknown, so no limit. - if (buf->HasData(4) && *(uint32_t*)buf->Data() == 0) { - buf->Skip(4); + if (buf.HasData(4) && *(uint32_t*)buf.Data() == 0) { + buf.Skip(4); extern const DrawTileSprites _station_display_datas_rail[8]; dts->Clone(&_station_display_datas_rail[t % 8]); continue; @@ -1981,13 +1981,13 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte DrawTileSeqStruct &dtss = tmp_layout.emplace_back(); MemSetT(&dtss, 0); - dtss.delta_x = buf->ReadByte(); + dtss.delta_x = buf.ReadByte(); if (dtss.IsTerminator()) break; - dtss.delta_y = buf->ReadByte(); - dtss.delta_z = buf->ReadByte(); - dtss.size_x = buf->ReadByte(); - dtss.size_y = buf->ReadByte(); - dtss.size_z = buf->ReadByte(); + dtss.delta_y = buf.ReadByte(); + dtss.delta_z = buf.ReadByte(); + dtss.size_x = buf.ReadByte(); + dtss.size_y = buf.ReadByte(); + dtss.size_z = buf.ReadByte(); ReadSpriteLayoutSprite(buf, false, true, false, GSF_STATIONS, &dtss.image); /* On error, bail out immediately. Temporary GRF data was already freed */ @@ -2005,7 +2005,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte } case 0x0A: { // Copy sprite layout - uint16_t srcid = buf->ReadExtendedByte(); + uint16_t srcid = buf.ReadExtendedByte(); const StationSpec *srcstatspec = srcid >= _cur.grffile->stations.size() ? nullptr : _cur.grffile->stations[srcid].get(); if (srcstatspec == nullptr) { @@ -2024,28 +2024,28 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte } case 0x0B: // Callback mask - statspec->callback_mask = buf->ReadByte(); + statspec->callback_mask = buf.ReadByte(); break; case 0x0C: // Disallowed number of platforms - statspec->disallowed_platforms = buf->ReadByte(); + statspec->disallowed_platforms = buf.ReadByte(); break; case 0x0D: // Disallowed platform lengths - statspec->disallowed_lengths = buf->ReadByte(); + statspec->disallowed_lengths = buf.ReadByte(); break; case 0x0E: // Define custom layout - while (buf->HasData()) { - uint8_t length = buf->ReadByte(); - uint8_t number = buf->ReadByte(); + while (buf.HasData()) { + uint8_t length = buf.ReadByte(); + uint8_t number = buf.ReadByte(); if (length == 0 || number == 0) break; if (statspec->layouts.size() < length) statspec->layouts.resize(length); if (statspec->layouts[length - 1].size() < number) statspec->layouts[length - 1].resize(number); - const uint8_t *layout = buf->ReadBytes(length * number); + const uint8_t *layout = buf.ReadBytes(length * number); statspec->layouts[length - 1][number - 1].assign(layout, layout + length * number); /* Validate tile values are only the permitted 00, 02, 04 and 06. */ @@ -2059,7 +2059,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte break; case 0x0F: { // Copy custom layout - uint16_t srcid = buf->ReadExtendedByte(); + uint16_t srcid = buf.ReadExtendedByte(); const StationSpec *srcstatspec = srcid >= _cur.grffile->stations.size() ? nullptr : _cur.grffile->stations[srcid].get(); if (srcstatspec == nullptr) { @@ -2072,56 +2072,56 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte } case 0x10: // Little/lots cargo threshold - statspec->cargo_threshold = buf->ReadWord(); + statspec->cargo_threshold = buf.ReadWord(); break; case 0x11: // Pylon placement - statspec->pylons = buf->ReadByte(); + statspec->pylons = buf.ReadByte(); break; case 0x12: // Cargo types for random triggers if (_cur.grffile->grf_version >= 7) { - statspec->cargo_triggers = TranslateRefitMask(buf->ReadDWord()); + statspec->cargo_triggers = TranslateRefitMask(buf.ReadDWord()); } else { - statspec->cargo_triggers = (CargoTypes)buf->ReadDWord(); + statspec->cargo_triggers = (CargoTypes)buf.ReadDWord(); } break; case 0x13: // General flags - statspec->flags = buf->ReadByte(); + statspec->flags = buf.ReadByte(); break; case 0x14: // Overhead wire placement - statspec->wires = buf->ReadByte(); + statspec->wires = buf.ReadByte(); break; case 0x15: // Blocked tiles - statspec->blocked = buf->ReadByte(); + statspec->blocked = buf.ReadByte(); break; case 0x16: // Animation info - statspec->animation.frames = buf->ReadByte(); - statspec->animation.status = buf->ReadByte(); + statspec->animation.frames = buf.ReadByte(); + statspec->animation.status = buf.ReadByte(); break; case 0x17: // Animation speed - statspec->animation.speed = buf->ReadByte(); + statspec->animation.speed = buf.ReadByte(); break; case 0x18: // Animation triggers - statspec->animation.triggers = buf->ReadWord(); + statspec->animation.triggers = buf.ReadWord(); break; /* 0x19 road routing (not implemented) */ case 0x1A: { // Advanced sprite layout - uint16_t tiles = buf->ReadExtendedByte(); + uint16_t tiles = buf.ReadExtendedByte(); statspec->renderdata.clear(); // delete earlier loaded stuff statspec->renderdata.reserve(tiles); for (uint t = 0; t < tiles; t++) { NewGRFSpriteLayout *dts = &statspec->renderdata.emplace_back(); - uint num_building_sprites = buf->ReadByte(); + uint num_building_sprites = buf.ReadByte(); /* On error, bail out immediately. Temporary GRF data was already freed */ if (ReadSpriteLayout(buf, num_building_sprites, false, GSF_STATIONS, true, false, dts)) return CIR_DISABLED; } @@ -2135,18 +2135,18 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte } case 0x1B: // Minimum bridge height (not implemented) - buf->ReadWord(); - buf->ReadWord(); - buf->ReadWord(); - buf->ReadWord(); + buf.ReadWord(); + buf.ReadWord(); + buf.ReadWord(); + buf.ReadWord(); break; case 0x1C: // Station Name - AddStringForMapping(buf->ReadWord(), &statspec->name); + AddStringForMapping(buf.ReadWord(), &statspec->name); break; case 0x1D: // Station Class name - AddStringForMapping(buf->ReadWord(), [statspec](StringID str) { StationClass::Get(statspec->class_index)->name = str; }); + AddStringForMapping(buf.ReadWord(), [statspec](StringID str) { StationClass::Get(statspec->class_index)->name = str; }); break; default: @@ -2166,7 +2166,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult CanalChangeInfo(uint id, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult CanalChangeInfo(uint id, int numinfo, int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -2180,11 +2180,11 @@ static ChangeInfoResult CanalChangeInfo(uint id, int numinfo, int prop, ByteRead switch (prop) { case 0x08: - cp->callback_mask = buf->ReadByte(); + cp->callback_mask = buf.ReadByte(); break; case 0x09: - cp->flags = buf->ReadByte(); + cp->flags = buf.ReadByte(); break; default: @@ -2204,7 +2204,7 @@ static ChangeInfoResult CanalChangeInfo(uint id, int numinfo, int prop, ByteRead * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult BridgeChangeInfo(uint brid, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult BridgeChangeInfo(uint brid, int numinfo, int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -2219,32 +2219,32 @@ static ChangeInfoResult BridgeChangeInfo(uint brid, int numinfo, int prop, ByteR switch (prop) { case 0x08: { // Year of availability /* We treat '0' as always available */ - uint8_t year = buf->ReadByte(); + uint8_t year = buf.ReadByte(); bridge->avail_year = (year > 0 ? CalendarTime::ORIGINAL_BASE_YEAR + year : 0); break; } case 0x09: // Minimum length - bridge->min_length = buf->ReadByte(); + bridge->min_length = buf.ReadByte(); break; case 0x0A: // Maximum length - bridge->max_length = buf->ReadByte(); + bridge->max_length = buf.ReadByte(); if (bridge->max_length > 16) bridge->max_length = UINT16_MAX; break; case 0x0B: // Cost factor - bridge->price = buf->ReadByte(); + bridge->price = buf.ReadByte(); break; case 0x0C: // Maximum speed - bridge->speed = buf->ReadWord(); + bridge->speed = buf.ReadWord(); if (bridge->speed == 0) bridge->speed = UINT16_MAX; break; case 0x0D: { // Bridge sprite tables - uint8_t tableid = buf->ReadByte(); - uint8_t numtables = buf->ReadByte(); + uint8_t tableid = buf.ReadByte(); + uint8_t numtables = buf.ReadByte(); if (bridge->sprite_table == nullptr) { /* Allocate memory for sprite table pointers and zero out */ @@ -2254,7 +2254,7 @@ static ChangeInfoResult BridgeChangeInfo(uint brid, int numinfo, int prop, ByteR for (; numtables-- != 0; tableid++) { if (tableid >= 7) { // skip invalid data GrfMsg(1, "BridgeChangeInfo: Table {} >= 7, skipping", tableid); - for (uint8_t sprite = 0; sprite < 32; sprite++) buf->ReadDWord(); + for (uint8_t sprite = 0; sprite < 32; sprite++) buf.ReadDWord(); continue; } @@ -2263,8 +2263,8 @@ static ChangeInfoResult BridgeChangeInfo(uint brid, int numinfo, int prop, ByteR } for (uint8_t sprite = 0; sprite < 32; sprite++) { - SpriteID image = buf->ReadWord(); - PaletteID pal = buf->ReadWord(); + SpriteID image = buf.ReadWord(); + PaletteID pal = buf.ReadWord(); bridge->sprite_table[tableid][sprite].sprite = image; bridge->sprite_table[tableid][sprite].pal = pal; @@ -2276,28 +2276,28 @@ static ChangeInfoResult BridgeChangeInfo(uint brid, int numinfo, int prop, ByteR } case 0x0E: // Flags; bit 0 - disable far pillars - bridge->flags = buf->ReadByte(); + bridge->flags = buf.ReadByte(); break; case 0x0F: // Long format year of availability (year since year 0) - bridge->avail_year = Clamp(TimerGameCalendar::Year(buf->ReadDWord()), CalendarTime::MIN_YEAR, CalendarTime::MAX_YEAR); + bridge->avail_year = Clamp(TimerGameCalendar::Year(buf.ReadDWord()), CalendarTime::MIN_YEAR, CalendarTime::MAX_YEAR); break; case 0x10: { // purchase string - StringID newone = GetGRFStringID(_cur.grffile->grfid, buf->ReadWord()); + StringID newone = GetGRFStringID(_cur.grffile->grfid, buf.ReadWord()); if (newone != STR_UNDEFINED) bridge->material = newone; break; } case 0x11: // description of bridge with rails or roads case 0x12: { - StringID newone = GetGRFStringID(_cur.grffile->grfid, buf->ReadWord()); + StringID newone = GetGRFStringID(_cur.grffile->grfid, buf.ReadWord()); if (newone != STR_UNDEFINED) bridge->transport_name[prop - 0x11] = newone; break; } case 0x13: // 16 bits cost multiplier - bridge->price = buf->ReadWord(); + bridge->price = buf.ReadWord(); break; default: @@ -2315,7 +2315,7 @@ static ChangeInfoResult BridgeChangeInfo(uint brid, int numinfo, int prop, ByteR * @param buf Property value. * @return ChangeInfoResult. */ -static ChangeInfoResult IgnoreTownHouseProperty(int prop, ByteReader *buf) +static ChangeInfoResult IgnoreTownHouseProperty(int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -2337,7 +2337,7 @@ static ChangeInfoResult IgnoreTownHouseProperty(int prop, ByteReader *buf) case 0x1C: case 0x1D: case 0x1F: - buf->ReadByte(); + buf.ReadByte(); break; case 0x0A: @@ -2346,25 +2346,25 @@ static ChangeInfoResult IgnoreTownHouseProperty(int prop, ByteReader *buf) case 0x13: case 0x21: case 0x22: - buf->ReadWord(); + buf.ReadWord(); break; case 0x1E: - buf->ReadDWord(); + buf.ReadDWord(); break; case 0x17: - for (uint j = 0; j < 4; j++) buf->ReadByte(); + for (uint j = 0; j < 4; j++) buf.ReadByte(); break; case 0x20: { - uint8_t count = buf->ReadByte(); - for (uint8_t j = 0; j < count; j++) buf->ReadByte(); + uint8_t count = buf.ReadByte(); + for (uint8_t j = 0; j < count; j++) buf.ReadByte(); break; } case 0x23: - buf->Skip(buf->ReadByte() * 2); + buf.Skip(buf.ReadByte() * 2); break; default: @@ -2382,7 +2382,7 @@ static ChangeInfoResult IgnoreTownHouseProperty(int prop, ByteReader *buf) * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -2406,7 +2406,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt switch (prop) { case 0x08: { // Substitute building type, and definition of a new house - uint8_t subs_id = buf->ReadByte(); + uint8_t subs_id = buf.ReadByte(); if (subs_id == 0xFF) { /* Instead of defining a new house, a substitute house id * of 0xFF disables the old house with the current id. */ @@ -2451,31 +2451,31 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt } case 0x09: // Building flags - housespec->building_flags = (BuildingFlags)buf->ReadByte(); + housespec->building_flags = (BuildingFlags)buf.ReadByte(); break; case 0x0A: { // Availability years - uint16_t years = buf->ReadWord(); + uint16_t years = buf.ReadWord(); housespec->min_year = GB(years, 0, 8) > 150 ? CalendarTime::MAX_YEAR : CalendarTime::ORIGINAL_BASE_YEAR + GB(years, 0, 8); housespec->max_year = GB(years, 8, 8) > 150 ? CalendarTime::MAX_YEAR : CalendarTime::ORIGINAL_BASE_YEAR + GB(years, 8, 8); break; } case 0x0B: // Population - housespec->population = buf->ReadByte(); + housespec->population = buf.ReadByte(); break; case 0x0C: // Mail generation multiplier - housespec->mail_generation = buf->ReadByte(); + housespec->mail_generation = buf.ReadByte(); break; case 0x0D: // Passenger acceptance case 0x0E: // Mail acceptance - housespec->cargo_acceptance[prop - 0x0D] = buf->ReadByte(); + housespec->cargo_acceptance[prop - 0x0D] = buf.ReadByte(); break; case 0x0F: { // Goods/candy, food/fizzy drinks acceptance - int8_t goods = buf->ReadByte(); + int8_t goods = buf.ReadByte(); /* If value of goods is negative, it means in fact food or, if in toyland, fizzy_drink acceptance. * Else, we have "standard" 3rd cargo type, goods or candy, for toyland once more */ @@ -2492,27 +2492,27 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt } case 0x10: // Local authority rating decrease on removal - housespec->remove_rating_decrease = buf->ReadWord(); + housespec->remove_rating_decrease = buf.ReadWord(); break; case 0x11: // Removal cost multiplier - housespec->removal_cost = buf->ReadByte(); + housespec->removal_cost = buf.ReadByte(); break; case 0x12: // Building name ID - AddStringForMapping(buf->ReadWord(), &housespec->building_name); + AddStringForMapping(buf.ReadWord(), &housespec->building_name); break; case 0x13: // Building availability mask - housespec->building_availability = (HouseZones)buf->ReadWord(); + housespec->building_availability = (HouseZones)buf.ReadWord(); break; case 0x14: // House callback mask - housespec->callback_mask |= buf->ReadByte(); + housespec->callback_mask |= buf.ReadByte(); break; case 0x15: { // House override byte - uint8_t override = buf->ReadByte(); + uint8_t override = buf.ReadByte(); /* The house being overridden must be an original house. */ if (override >= NEW_HOUSE_OFFSET) { @@ -2525,41 +2525,41 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt } case 0x16: // Periodic refresh multiplier - housespec->processing_time = std::min(buf->ReadByte(), 63u); + housespec->processing_time = std::min(buf.ReadByte(), 63u); break; case 0x17: // Four random colours to use - for (uint j = 0; j < 4; j++) housespec->random_colour[j] = static_cast(GB(buf->ReadByte(), 0, 4)); + for (uint j = 0; j < 4; j++) housespec->random_colour[j] = static_cast(GB(buf.ReadByte(), 0, 4)); break; case 0x18: // Relative probability of appearing - housespec->probability = buf->ReadByte(); + housespec->probability = buf.ReadByte(); break; case 0x19: // Extra flags - housespec->extra_flags = (HouseExtraFlags)buf->ReadByte(); + housespec->extra_flags = (HouseExtraFlags)buf.ReadByte(); break; case 0x1A: // Animation frames - housespec->animation.frames = buf->ReadByte(); + housespec->animation.frames = buf.ReadByte(); housespec->animation.status = GB(housespec->animation.frames, 7, 1); SB(housespec->animation.frames, 7, 1, 0); break; case 0x1B: // Animation speed - housespec->animation.speed = Clamp(buf->ReadByte(), 2, 16); + housespec->animation.speed = Clamp(buf.ReadByte(), 2, 16); break; case 0x1C: // Class of the building type - housespec->class_id = AllocateHouseClassID(buf->ReadByte(), _cur.grffile->grfid); + housespec->class_id = AllocateHouseClassID(buf.ReadByte(), _cur.grffile->grfid); break; case 0x1D: // Callback mask part 2 - housespec->callback_mask |= (buf->ReadByte() << 8); + housespec->callback_mask |= (buf.ReadByte() << 8); break; case 0x1E: { // Accepted cargo types - uint32_t cargotypes = buf->ReadDWord(); + uint32_t cargotypes = buf.ReadDWord(); /* Check if the cargo types should not be changed */ if (cargotypes == 0xFFFFFFFF) break; @@ -2581,29 +2581,29 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt } case 0x1F: // Minimum life span - housespec->minimum_life = buf->ReadByte(); + housespec->minimum_life = buf.ReadByte(); break; case 0x20: { // Cargo acceptance watch list - uint8_t count = buf->ReadByte(); + uint8_t count = buf.ReadByte(); for (uint8_t j = 0; j < count; j++) { - CargoID cargo = GetCargoTranslation(buf->ReadByte(), _cur.grffile); + CargoID cargo = GetCargoTranslation(buf.ReadByte(), _cur.grffile); if (IsValidCargoID(cargo)) SetBit(housespec->watched_cargoes, cargo); } break; } case 0x21: // long introduction year - housespec->min_year = buf->ReadWord(); + housespec->min_year = buf.ReadWord(); break; case 0x22: // long maximum year - housespec->max_year = buf->ReadWord(); + housespec->max_year = buf.ReadWord(); if (housespec->max_year == UINT16_MAX) housespec->max_year = CalendarTime::MAX_YEAR; break; case 0x23: { // variable length cargo types accepted - uint count = buf->ReadByte(); + uint count = buf.ReadByte(); if (count > lengthof(housespec->accepts_cargo)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); error->param_value[1] = prop; @@ -2614,8 +2614,8 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt * any risks of array overrun. */ for (uint i = 0; i < lengthof(housespec->accepts_cargo); i++) { if (i < count) { - housespec->accepts_cargo[i] = GetCargoTranslation(buf->ReadByte(), _cur.grffile); - housespec->cargo_acceptance[i] = buf->ReadByte(); + housespec->accepts_cargo[i] = GetCargoTranslation(buf.ReadByte(), _cur.grffile); + housespec->cargo_acceptance[i] = buf.ReadByte(); } else { housespec->accepts_cargo[i] = INVALID_CARGO; housespec->cargo_acceptance[i] = 0; @@ -2662,7 +2662,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt * @return ChangeInfoResult. */ template -static ChangeInfoResult LoadTranslationTable(uint gvid, int numinfo, ByteReader *buf, std::vector &translation_table, const char *name) +static ChangeInfoResult LoadTranslationTable(uint gvid, int numinfo, ByteReader &buf, std::vector &translation_table, const char *name) { if (gvid != 0) { GrfMsg(1, "LoadTranslationTable: {} translation table must start at zero", name); @@ -2672,7 +2672,7 @@ static ChangeInfoResult LoadTranslationTable(uint gvid, int numinfo, ByteReader translation_table.clear(); translation_table.reserve(numinfo); for (int i = 0; i < numinfo; i++) { - translation_table.push_back(T(BSWAP32(buf->ReadDWord()))); + translation_table.push_back(T(BSWAP32(buf.ReadDWord()))); } return CIR_SUCCESS; @@ -2684,10 +2684,10 @@ static ChangeInfoResult LoadTranslationTable(uint gvid, int numinfo, ByteReader * @param reader The source of the DWord. * @return The read DWord as string. */ -static std::string ReadDWordAsString(ByteReader *reader) +static std::string ReadDWordAsString(ByteReader &reader) { std::string output; - for (int i = 0; i < 4; i++) output.push_back(reader->ReadByte()); + for (int i = 0; i < 4; i++) output.push_back(reader.ReadByte()); return StrMakeValid(output); } @@ -2699,7 +2699,7 @@ static std::string ReadDWordAsString(ByteReader *reader) * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, ByteReader &buf) { /* Properties which are handled as a whole */ switch (prop) { @@ -2724,7 +2724,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By for (int i = 0; i < numinfo; i++) { switch (prop) { case 0x08: { // Cost base factor - int factor = buf->ReadByte(); + int factor = buf.ReadByte(); uint price = gvid + i; if (price < PR_END) { @@ -2737,7 +2737,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By case 0x0A: { // Currency display names uint curidx = GetNewgrfCurrencyIdConverted(gvid + i); - StringID newone = GetGRFStringID(_cur.grffile->grfid, buf->ReadWord()); + StringID newone = GetGRFStringID(_cur.grffile->grfid, buf.ReadWord()); if ((newone != STR_UNDEFINED) && (curidx < CURRENCY_END)) { _currency_specs[curidx].name = newone; @@ -2748,7 +2748,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By case 0x0B: { // Currency multipliers uint curidx = GetNewgrfCurrencyIdConverted(gvid + i); - uint32_t rate = buf->ReadDWord(); + uint32_t rate = buf.ReadDWord(); if (curidx < CURRENCY_END) { /* TTDPatch uses a multiple of 1000 for its conversion calculations, @@ -2763,7 +2763,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By case 0x0C: { // Currency options uint curidx = GetNewgrfCurrencyIdConverted(gvid + i); - uint16_t options = buf->ReadWord(); + uint16_t options = buf.ReadWord(); if (curidx < CURRENCY_END) { _currency_specs[curidx].separator.clear(); @@ -2803,7 +2803,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By case 0x0F: { // Euro introduction dates uint curidx = GetNewgrfCurrencyIdConverted(gvid + i); - TimerGameCalendar::Year year_euro = buf->ReadWord(); + TimerGameCalendar::Year year_euro = buf.ReadWord(); if (curidx < CURRENCY_END) { _currency_specs[curidx].to_euro = year_euro; @@ -2816,14 +2816,14 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By case 0x10: // Snow line height table if (numinfo > 1 || IsSnowLineSet()) { GrfMsg(1, "GlobalVarChangeInfo: The snowline can only be set once ({})", numinfo); - } else if (buf->Remaining() < SNOW_LINE_MONTHS * SNOW_LINE_DAYS) { - GrfMsg(1, "GlobalVarChangeInfo: Not enough entries set in the snowline table ({})", buf->Remaining()); + } else if (buf.Remaining() < SNOW_LINE_MONTHS * SNOW_LINE_DAYS) { + GrfMsg(1, "GlobalVarChangeInfo: Not enough entries set in the snowline table ({})", buf.Remaining()); } else { uint8_t table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS]; for (uint i = 0; i < SNOW_LINE_MONTHS; i++) { for (uint j = 0; j < SNOW_LINE_DAYS; j++) { - table[i][j] = buf->ReadByte(); + table[i][j] = buf.ReadByte(); if (_cur.grffile->grf_version >= 8) { if (table[i][j] != 0xFF) table[i][j] = table[i][j] * (1 + _settings_game.construction.map_height_limit) / 256; } else { @@ -2843,7 +2843,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By case 0x11: // GRF match for engine allocation /* This is loaded during the reservation stage, so just skip it here. */ /* Each entry is 8 bytes. */ - buf->Skip(8); + buf.Skip(8); break; case 0x13: // Gender translation table @@ -2855,17 +2855,17 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By GrfMsg(1, "GlobalVarChangeInfo: Language {} is not known, ignoring", curidx); /* Skip over the data. */ if (prop == 0x15) { - buf->ReadByte(); + buf.ReadByte(); } else { - while (buf->ReadByte() != 0) { - buf->ReadString(); + while (buf.ReadByte() != 0) { + buf.ReadString(); } } break; } if (prop == 0x15) { - uint plural_form = buf->ReadByte(); + uint plural_form = buf.ReadByte(); if (plural_form >= LANGUAGE_MAX_PLURAL) { GrfMsg(1, "GlobalVarChanceInfo: Plural form {} is out of range, ignoring", plural_form); } else { @@ -2874,9 +2874,9 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By break; } - uint8_t newgrf_id = buf->ReadByte(); // The NewGRF (custom) identifier. + uint8_t newgrf_id = buf.ReadByte(); // The NewGRF (custom) identifier. while (newgrf_id != 0) { - std::string_view name = buf->ReadString(); // The name for the OpenTTD identifier. + std::string_view name = buf.ReadString(); // The name for the OpenTTD identifier. /* We'll just ignore the UTF8 identifier character. This is (fairly) * safe as OpenTTD's strings gender/cases are usually in ASCII which @@ -2903,7 +2903,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By _cur.grffile->language_map[curidx].case_map.push_back(map); } } - newgrf_id = buf->ReadByte(); + newgrf_id = buf.ReadByte(); } break; } @@ -2917,7 +2917,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By return ret; } -static ChangeInfoResult GlobalVarReserveInfo(uint gvid, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult GlobalVarReserveInfo(uint gvid, int numinfo, int prop, ByteReader &buf) { /* Properties which are handled as a whole */ switch (prop) { @@ -2943,36 +2943,36 @@ static ChangeInfoResult GlobalVarReserveInfo(uint gvid, int numinfo, int prop, B switch (prop) { case 0x08: // Cost base factor case 0x15: // Plural form translation - buf->ReadByte(); + buf.ReadByte(); break; case 0x0A: // Currency display names case 0x0C: // Currency options case 0x0F: // Euro introduction dates - buf->ReadWord(); + buf.ReadWord(); break; case 0x0B: // Currency multipliers case 0x0D: // Currency prefix symbol case 0x0E: // Currency suffix symbol - buf->ReadDWord(); + buf.ReadDWord(); break; case 0x10: // Snow line height table - buf->Skip(SNOW_LINE_MONTHS * SNOW_LINE_DAYS); + buf.Skip(SNOW_LINE_MONTHS * SNOW_LINE_DAYS); break; case 0x11: { // GRF match for engine allocation - uint32_t s = buf->ReadDWord(); - uint32_t t = buf->ReadDWord(); + uint32_t s = buf.ReadDWord(); + uint32_t t = buf.ReadDWord(); SetNewGRFOverride(s, t); break; } case 0x13: // Gender translation table case 0x14: // Case translation table - while (buf->ReadByte() != 0) { - buf->ReadString(); + while (buf.ReadByte() != 0) { + buf.ReadString(); } break; @@ -2994,7 +2994,7 @@ static ChangeInfoResult GlobalVarReserveInfo(uint gvid, int numinfo, int prop, B * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -3008,7 +3008,7 @@ static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteRea switch (prop) { case 0x08: // Bit number of cargo - cs->bitnum = buf->ReadByte(); + cs->bitnum = buf.ReadByte(); if (cs->IsValid()) { cs->grffile = _cur.grffile; SetBit(_cargo_mask, cid + i); @@ -3019,11 +3019,11 @@ static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteRea break; case 0x09: // String ID for cargo type name - AddStringForMapping(buf->ReadWord(), &cs->name); + AddStringForMapping(buf.ReadWord(), &cs->name); break; case 0x0A: // String for 1 unit of cargo - AddStringForMapping(buf->ReadWord(), &cs->name_single); + AddStringForMapping(buf.ReadWord(), &cs->name_single); break; case 0x0B: // String for singular quantity of cargo (e.g. 1 tonne of coal) @@ -3031,7 +3031,7 @@ static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteRea /* String for units of cargo. This is different in OpenTTD * (e.g. tonnes) to TTDPatch (e.g. {COMMA} tonne of coal). * Property 1B is used to set OpenTTD's behaviour. */ - AddStringForMapping(buf->ReadWord(), &cs->units_volume); + AddStringForMapping(buf.ReadWord(), &cs->units_volume); break; case 0x0C: // String for plural quantity of cargo (e.g. 10 tonnes of coal) @@ -3039,56 +3039,56 @@ static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteRea /* Strings for an amount of cargo. This is different in OpenTTD * (e.g. {WEIGHT} of coal) to TTDPatch (e.g. {COMMA} tonnes of coal). * Property 1C is used to set OpenTTD's behaviour. */ - AddStringForMapping(buf->ReadWord(), &cs->quantifier); + AddStringForMapping(buf.ReadWord(), &cs->quantifier); break; case 0x0D: // String for two letter cargo abbreviation - AddStringForMapping(buf->ReadWord(), &cs->abbrev); + AddStringForMapping(buf.ReadWord(), &cs->abbrev); break; case 0x0E: // Sprite ID for cargo icon - cs->sprite = buf->ReadWord(); + cs->sprite = buf.ReadWord(); break; case 0x0F: // Weight of one unit of cargo - cs->weight = buf->ReadByte(); + cs->weight = buf.ReadByte(); break; case 0x10: // Used for payment calculation - cs->transit_periods[0] = buf->ReadByte(); + cs->transit_periods[0] = buf.ReadByte(); break; case 0x11: // Used for payment calculation - cs->transit_periods[1] = buf->ReadByte(); + cs->transit_periods[1] = buf.ReadByte(); break; case 0x12: // Base cargo price - cs->initial_payment = buf->ReadDWord(); + cs->initial_payment = buf.ReadDWord(); break; case 0x13: // Colour for station rating bars - cs->rating_colour = buf->ReadByte(); + cs->rating_colour = buf.ReadByte(); break; case 0x14: // Colour for cargo graph - cs->legend_colour = buf->ReadByte(); + cs->legend_colour = buf.ReadByte(); break; case 0x15: // Freight status - cs->is_freight = (buf->ReadByte() != 0); + cs->is_freight = (buf.ReadByte() != 0); break; case 0x16: // Cargo classes - cs->classes = buf->ReadWord(); + cs->classes = buf.ReadWord(); break; case 0x17: // Cargo label - cs->label = CargoLabel{BSWAP32(buf->ReadDWord())}; + cs->label = CargoLabel{BSWAP32(buf.ReadDWord())}; BuildCargoLabelMap(); break; case 0x18: { // Town growth substitute type - uint8_t substitute_type = buf->ReadByte(); + uint8_t substitute_type = buf.ReadByte(); switch (substitute_type) { case 0x00: cs->town_acceptance_effect = TAE_PASSENGERS; break; @@ -3105,19 +3105,19 @@ static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteRea } case 0x19: // Town growth coefficient - buf->ReadWord(); + buf.ReadWord(); break; case 0x1A: // Bitmask of callbacks to use - cs->callback_mask = buf->ReadByte(); + cs->callback_mask = buf.ReadByte(); break; case 0x1D: // Vehicle capacity muliplier - cs->multiplier = std::max(1u, buf->ReadWord()); + cs->multiplier = std::max(1u, buf.ReadWord()); break; case 0x1E: { // Town production substitute type - uint8_t substitute_type = buf->ReadByte(); + uint8_t substitute_type = buf.ReadByte(); switch (substitute_type) { case 0x00: cs->town_production_effect = TPE_PASSENGERS; break; @@ -3131,7 +3131,7 @@ static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteRea } case 0x1F: // Town production multiplier - cs->town_production_multiplier = std::max(1U, buf->ReadWord()); + cs->town_production_multiplier = std::max(1U, buf.ReadWord()); break; default: @@ -3152,7 +3152,7 @@ static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteRea * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult SoundEffectChangeInfo(uint sid, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult SoundEffectChangeInfo(uint sid, int numinfo, int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -3171,15 +3171,15 @@ static ChangeInfoResult SoundEffectChangeInfo(uint sid, int numinfo, int prop, B switch (prop) { case 0x08: // Relative volume - sound->volume = Clamp(buf->ReadByte(), 0, SOUND_EFFECT_MAX_VOLUME); + sound->volume = Clamp(buf.ReadByte(), 0, SOUND_EFFECT_MAX_VOLUME); break; case 0x09: // Priority - sound->priority = buf->ReadByte(); + sound->priority = buf.ReadByte(); break; case 0x0A: { // Override old sound - SoundID orig_sound = buf->ReadByte(); + SoundID orig_sound = buf.ReadByte(); if (orig_sound >= ORIGINAL_SAMPLE_COUNT) { GrfMsg(1, "SoundEffectChangeInfo: Original sound {} not defined (max {})", orig_sound, ORIGINAL_SAMPLE_COUNT); @@ -3207,7 +3207,7 @@ static ChangeInfoResult SoundEffectChangeInfo(uint sid, int numinfo, int prop, B * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult IgnoreIndustryTileProperty(int prop, ByteReader *buf) +static ChangeInfoResult IgnoreIndustryTileProperty(int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -3218,18 +3218,18 @@ static ChangeInfoResult IgnoreIndustryTileProperty(int prop, ByteReader *buf) case 0x10: case 0x11: case 0x12: - buf->ReadByte(); + buf.ReadByte(); break; case 0x0A: case 0x0B: case 0x0C: case 0x0F: - buf->ReadWord(); + buf.ReadWord(); break; case 0x13: - buf->Skip(buf->ReadByte() * 2); + buf.Skip(buf.ReadByte() * 2); break; default: @@ -3247,7 +3247,7 @@ static ChangeInfoResult IgnoreIndustryTileProperty(int prop, ByteReader *buf) * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -3270,7 +3270,7 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr switch (prop) { case 0x08: { // Substitute industry tile type - uint8_t subs_id = buf->ReadByte(); + uint8_t subs_id = buf.ReadByte(); if (subs_id >= NEW_INDUSTRYTILEOFFSET) { /* The substitute id must be one of the original industry tile. */ GrfMsg(2, "IndustryTilesChangeInfo: Attempt to use new industry tile {} as substitute industry tile for {}. Ignoring.", subs_id, indtid + i); @@ -3299,7 +3299,7 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr } case 0x09: { // Industry tile override - uint8_t ovrid = buf->ReadByte(); + uint8_t ovrid = buf.ReadByte(); /* The industry being overridden must be an original industry. */ if (ovrid >= NEW_INDUSTRYTILEOFFSET) { @@ -3314,7 +3314,7 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr case 0x0A: // Tile acceptance case 0x0B: case 0x0C: { - uint16_t acctp = buf->ReadWord(); + uint16_t acctp = buf.ReadWord(); tsp->accepts_cargo[prop - 0x0A] = GetCargoTranslation(GB(acctp, 0, 8), _cur.grffile); tsp->acceptance[prop - 0x0A] = Clamp(GB(acctp, 8, 8), 0, 16); tsp->accepts_cargo_label[prop - 0x0A] = CT_INVALID; @@ -3322,32 +3322,32 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr } case 0x0D: // Land shape flags - tsp->slopes_refused = (Slope)buf->ReadByte(); + tsp->slopes_refused = (Slope)buf.ReadByte(); break; case 0x0E: // Callback mask - tsp->callback_mask = buf->ReadByte(); + tsp->callback_mask = buf.ReadByte(); break; case 0x0F: // Animation information - tsp->animation.frames = buf->ReadByte(); - tsp->animation.status = buf->ReadByte(); + tsp->animation.frames = buf.ReadByte(); + tsp->animation.status = buf.ReadByte(); break; case 0x10: // Animation speed - tsp->animation.speed = buf->ReadByte(); + tsp->animation.speed = buf.ReadByte(); break; case 0x11: // Triggers for callback 25 - tsp->animation.triggers = buf->ReadByte(); + tsp->animation.triggers = buf.ReadByte(); break; case 0x12: // Special flags - tsp->special_flags = (IndustryTileSpecialFlags)buf->ReadByte(); + tsp->special_flags = (IndustryTileSpecialFlags)buf.ReadByte(); break; case 0x13: { // variable length cargo acceptance - uint8_t num_cargoes = buf->ReadByte(); + uint8_t num_cargoes = buf.ReadByte(); if (num_cargoes > std::size(tsp->acceptance)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); error->param_value[1] = prop; @@ -3355,9 +3355,9 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr } for (uint i = 0; i < std::size(tsp->acceptance); i++) { if (i < num_cargoes) { - tsp->accepts_cargo[i] = GetCargoTranslation(buf->ReadByte(), _cur.grffile); + tsp->accepts_cargo[i] = GetCargoTranslation(buf.ReadByte(), _cur.grffile); /* Tile acceptance can be negative to counteract the INDTILE_SPECIAL_ACCEPTS_ALL_CARGO flag */ - tsp->acceptance[i] = (int8_t)buf->ReadByte(); + tsp->acceptance[i] = (int8_t)buf.ReadByte(); } else { tsp->accepts_cargo[i] = INVALID_CARGO; tsp->acceptance[i] = 0; @@ -3382,7 +3382,7 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult IgnoreIndustryProperty(int prop, ByteReader *buf) +static ChangeInfoResult IgnoreIndustryProperty(int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -3398,7 +3398,7 @@ static ChangeInfoResult IgnoreIndustryProperty(int prop, ByteReader *buf) case 0x19: case 0x21: case 0x22: - buf->ReadByte(); + buf.ReadByte(); break; case 0x0C: @@ -3408,7 +3408,7 @@ static ChangeInfoResult IgnoreIndustryProperty(int prop, ByteReader *buf) case 0x1B: case 0x1F: case 0x24: - buf->ReadWord(); + buf.ReadWord(); break; case 0x11: // INDUSTRY_ORIGINAL_NUM_INPUTS bytes + 1 @@ -3418,45 +3418,45 @@ static ChangeInfoResult IgnoreIndustryProperty(int prop, ByteReader *buf) case 0x1E: case 0x20: case 0x23: - buf->ReadDWord(); + buf.ReadDWord(); break; case 0x0A: { - uint8_t num_table = buf->ReadByte(); + uint8_t num_table = buf.ReadByte(); for (uint8_t j = 0; j < num_table; j++) { for (uint k = 0;; k++) { - uint8_t x = buf->ReadByte(); + uint8_t x = buf.ReadByte(); if (x == 0xFE && k == 0) { - buf->ReadByte(); - buf->ReadByte(); + buf.ReadByte(); + buf.ReadByte(); break; } - uint8_t y = buf->ReadByte(); + uint8_t y = buf.ReadByte(); if (x == 0 && y == 0x80) break; - uint8_t gfx = buf->ReadByte(); - if (gfx == 0xFE) buf->ReadWord(); + uint8_t gfx = buf.ReadByte(); + if (gfx == 0xFE) buf.ReadWord(); } } break; } case 0x16: - for (uint8_t j = 0; j < INDUSTRY_ORIGINAL_NUM_INPUTS; j++) buf->ReadByte(); + for (uint8_t j = 0; j < INDUSTRY_ORIGINAL_NUM_INPUTS; j++) buf.ReadByte(); break; case 0x15: case 0x25: case 0x26: case 0x27: - buf->Skip(buf->ReadByte()); + buf.Skip(buf.ReadByte()); break; case 0x28: { - int num_inputs = buf->ReadByte(); - int num_outputs = buf->ReadByte(); - buf->Skip(num_inputs * num_outputs * 2); + int num_inputs = buf.ReadByte(); + int num_outputs = buf.ReadByte(); + buf.Skip(num_inputs * num_outputs * 2); break; } @@ -3505,7 +3505,7 @@ static bool ValidateIndustryLayout(const IndustryTileLayout &layout) * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -3528,7 +3528,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, switch (prop) { case 0x08: { // Substitute industry type - uint8_t subs_id = buf->ReadByte(); + uint8_t subs_id = buf.ReadByte(); if (subs_id == 0xFF) { /* Instead of defining a new industry, a substitute industry id * of 0xFF disables the old industry with the current id. */ @@ -3559,7 +3559,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } case 0x09: { // Industry type override - uint8_t ovrid = buf->ReadByte(); + uint8_t ovrid = buf.ReadByte(); /* The industry being overridden must be an original industry. */ if (ovrid >= NEW_INDUSTRYOFFSET) { @@ -3572,8 +3572,8 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } case 0x0A: { // Set industry layout(s) - uint8_t new_num_layouts = buf->ReadByte(); - uint32_t definition_size = buf->ReadDWord(); + uint8_t new_num_layouts = buf.ReadByte(); + uint32_t definition_size = buf.ReadDWord(); uint32_t bytes_read = 0; std::vector new_layouts; IndustryTileLayout layout; @@ -3592,13 +3592,13 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, layout.push_back(IndustryTileLayoutTile{}); IndustryTileLayoutTile &it = layout.back(); - it.ti.x = buf->ReadByte(); // Offsets from northermost tile + it.ti.x = buf.ReadByte(); // Offsets from northermost tile ++bytes_read; if (it.ti.x == 0xFE && k == 0) { /* This means we have to borrow the layout from an old industry */ - IndustryType type = buf->ReadByte(); - uint8_t laynbr = buf->ReadByte(); + IndustryType type = buf.ReadByte(); + uint8_t laynbr = buf.ReadByte(); bytes_read += 2; if (type >= lengthof(_origin_industry_specs)) { @@ -3615,7 +3615,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, break; } - it.ti.y = buf->ReadByte(); // Or table definition finalisation + it.ti.y = buf.ReadByte(); // Or table definition finalisation ++bytes_read; if (it.ti.x == 0 && it.ti.y == 0x80) { @@ -3624,12 +3624,12 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, break; } - it.gfx = buf->ReadByte(); + it.gfx = buf.ReadByte(); ++bytes_read; if (it.gfx == 0xFE) { /* Use a new tile from this GRF */ - int local_tile_id = buf->ReadWord(); + int local_tile_id = buf.ReadWord(); bytes_read += 2; /* Read the ID from the _industile_mngr. */ @@ -3672,56 +3672,56 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } case 0x0B: // Industry production flags - indsp->life_type = (IndustryLifeType)buf->ReadByte(); + indsp->life_type = (IndustryLifeType)buf.ReadByte(); break; case 0x0C: // Industry closure message - AddStringForMapping(buf->ReadWord(), &indsp->closure_text); + AddStringForMapping(buf.ReadWord(), &indsp->closure_text); break; case 0x0D: // Production increase message - AddStringForMapping(buf->ReadWord(), &indsp->production_up_text); + AddStringForMapping(buf.ReadWord(), &indsp->production_up_text); break; case 0x0E: // Production decrease message - AddStringForMapping(buf->ReadWord(), &indsp->production_down_text); + AddStringForMapping(buf.ReadWord(), &indsp->production_down_text); break; case 0x0F: // Fund cost multiplier - indsp->cost_multiplier = buf->ReadByte(); + indsp->cost_multiplier = buf.ReadByte(); break; case 0x10: // Production cargo types for (uint8_t j = 0; j < INDUSTRY_ORIGINAL_NUM_OUTPUTS; j++) { - indsp->produced_cargo[j] = GetCargoTranslation(buf->ReadByte(), _cur.grffile); + indsp->produced_cargo[j] = GetCargoTranslation(buf.ReadByte(), _cur.grffile); indsp->produced_cargo_label[j] = CT_INVALID; } break; case 0x11: // Acceptance cargo types for (uint8_t j = 0; j < INDUSTRY_ORIGINAL_NUM_INPUTS; j++) { - indsp->accepts_cargo[j] = GetCargoTranslation(buf->ReadByte(), _cur.grffile); + indsp->accepts_cargo[j] = GetCargoTranslation(buf.ReadByte(), _cur.grffile); indsp->accepts_cargo_label[j] = CT_INVALID; } - buf->ReadByte(); // Unnused, eat it up + buf.ReadByte(); // Unnused, eat it up break; case 0x12: // Production multipliers case 0x13: - indsp->production_rate[prop - 0x12] = buf->ReadByte(); + indsp->production_rate[prop - 0x12] = buf.ReadByte(); break; case 0x14: // Minimal amount of cargo distributed - indsp->minimal_cargo = buf->ReadByte(); + indsp->minimal_cargo = buf.ReadByte(); break; case 0x15: { // Random sound effects - uint8_t num_sounds = buf->ReadByte(); + uint8_t num_sounds = buf.ReadByte(); std::vector sounds; sounds.reserve(num_sounds); for (uint8_t j = 0; j < num_sounds; ++j) { - sounds.push_back(buf->ReadByte()); + sounds.push_back(buf.ReadByte()); } indsp->random_sounds = std::move(sounds); @@ -3729,59 +3729,59 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } case 0x16: // Conflicting industry types - for (uint8_t j = 0; j < 3; j++) indsp->conflicting[j] = buf->ReadByte(); + for (uint8_t j = 0; j < 3; j++) indsp->conflicting[j] = buf.ReadByte(); break; case 0x17: // Probability in random game - indsp->appear_creation[_settings_game.game_creation.landscape] = buf->ReadByte(); + indsp->appear_creation[_settings_game.game_creation.landscape] = buf.ReadByte(); break; case 0x18: // Probability during gameplay - indsp->appear_ingame[_settings_game.game_creation.landscape] = buf->ReadByte(); + indsp->appear_ingame[_settings_game.game_creation.landscape] = buf.ReadByte(); break; case 0x19: // Map colour - indsp->map_colour = buf->ReadByte(); + indsp->map_colour = buf.ReadByte(); break; case 0x1A: // Special industry flags to define special behavior - indsp->behaviour = (IndustryBehaviour)buf->ReadDWord(); + indsp->behaviour = (IndustryBehaviour)buf.ReadDWord(); break; case 0x1B: // New industry text ID - AddStringForMapping(buf->ReadWord(), &indsp->new_industry_text); + AddStringForMapping(buf.ReadWord(), &indsp->new_industry_text); break; case 0x1C: // Input cargo multipliers for the three input cargo types case 0x1D: case 0x1E: { - uint32_t multiples = buf->ReadDWord(); + uint32_t multiples = buf.ReadDWord(); indsp->input_cargo_multiplier[prop - 0x1C][0] = GB(multiples, 0, 16); indsp->input_cargo_multiplier[prop - 0x1C][1] = GB(multiples, 16, 16); break; } case 0x1F: // Industry name - AddStringForMapping(buf->ReadWord(), &indsp->name); + AddStringForMapping(buf.ReadWord(), &indsp->name); break; case 0x20: // Prospecting success chance - indsp->prospecting_chance = buf->ReadDWord(); + indsp->prospecting_chance = buf.ReadDWord(); break; case 0x21: // Callback mask case 0x22: { // Callback additional mask - uint8_t aflag = buf->ReadByte(); + uint8_t aflag = buf.ReadByte(); SB(indsp->callback_mask, (prop - 0x21) * 8, 8, aflag); break; } case 0x23: // removal cost multiplier - indsp->removal_cost_multiplier = buf->ReadDWord(); + indsp->removal_cost_multiplier = buf.ReadDWord(); break; case 0x24: { // name for nearby station - uint16_t str = buf->ReadWord(); + uint16_t str = buf.ReadWord(); if (str == 0) { indsp->station_name = STR_NULL; } else { @@ -3791,7 +3791,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } case 0x25: { // variable length produced cargoes - uint8_t num_cargoes = buf->ReadByte(); + uint8_t num_cargoes = buf.ReadByte(); if (num_cargoes > std::size(indsp->produced_cargo)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); error->param_value[1] = prop; @@ -3799,7 +3799,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } for (size_t i = 0; i < std::size(indsp->produced_cargo); i++) { if (i < num_cargoes) { - CargoID cargo = GetCargoTranslation(buf->ReadByte(), _cur.grffile); + CargoID cargo = GetCargoTranslation(buf.ReadByte(), _cur.grffile); indsp->produced_cargo[i] = cargo; } else { indsp->produced_cargo[i] = INVALID_CARGO; @@ -3810,7 +3810,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } case 0x26: { // variable length accepted cargoes - uint8_t num_cargoes = buf->ReadByte(); + uint8_t num_cargoes = buf.ReadByte(); if (num_cargoes > std::size(indsp->accepts_cargo)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); error->param_value[1] = prop; @@ -3818,7 +3818,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } for (size_t i = 0; i < std::size(indsp->accepts_cargo); i++) { if (i < num_cargoes) { - CargoID cargo = GetCargoTranslation(buf->ReadByte(), _cur.grffile); + CargoID cargo = GetCargoTranslation(buf.ReadByte(), _cur.grffile); indsp->accepts_cargo[i] = cargo; } else { indsp->accepts_cargo[i] = INVALID_CARGO; @@ -3829,7 +3829,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } case 0x27: { // variable length production rates - uint8_t num_cargoes = buf->ReadByte(); + uint8_t num_cargoes = buf.ReadByte(); if (num_cargoes > lengthof(indsp->production_rate)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); error->param_value[1] = prop; @@ -3837,7 +3837,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } for (uint i = 0; i < lengthof(indsp->production_rate); i++) { if (i < num_cargoes) { - indsp->production_rate[i] = buf->ReadByte(); + indsp->production_rate[i] = buf.ReadByte(); } else { indsp->production_rate[i] = 0; } @@ -3846,8 +3846,8 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } case 0x28: { // variable size input/output production multiplier table - uint8_t num_inputs = buf->ReadByte(); - uint8_t num_outputs = buf->ReadByte(); + uint8_t num_inputs = buf.ReadByte(); + uint8_t num_outputs = buf.ReadByte(); if (num_inputs > std::size(indsp->accepts_cargo) || num_outputs > std::size(indsp->produced_cargo)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); error->param_value[1] = prop; @@ -3856,7 +3856,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, for (size_t i = 0; i < std::size(indsp->accepts_cargo); i++) { for (size_t j = 0; j < std::size(indsp->produced_cargo); j++) { uint16_t mult = 0; - if (i < num_inputs && j < num_outputs) mult = buf->ReadWord(); + if (i < num_inputs && j < num_outputs) mult = buf.ReadWord(); indsp->input_cargo_multiplier[i][j] = mult; } } @@ -3880,7 +3880,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -3902,7 +3902,7 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B switch (prop) { case 0x08: { // Modify original airport - uint8_t subs_id = buf->ReadByte(); + uint8_t subs_id = buf.ReadByte(); if (subs_id == 0xFF) { /* Instead of defining a new airport, an airport id * of 0xFF disables the old airport with the current id. */ @@ -3932,8 +3932,8 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B } case 0x0A: { // Set airport layout - uint8_t num_layouts = buf->ReadByte(); - buf->ReadDWord(); // Total size of definition, unneeded. + uint8_t num_layouts = buf.ReadByte(); + buf.ReadDWord(); // Total size of definition, unneeded. uint8_t size_x = 0; uint8_t size_y = 0; @@ -3942,12 +3942,12 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B for (uint8_t j = 0; j != num_layouts; ++j) { auto &layout = layouts.emplace_back(); - layout.rotation = static_cast(buf->ReadByte() & 6); // Rotation can only be DIR_NORTH, DIR_EAST, DIR_SOUTH or DIR_WEST. + layout.rotation = static_cast(buf.ReadByte() & 6); // Rotation can only be DIR_NORTH, DIR_EAST, DIR_SOUTH or DIR_WEST. for (;;) { auto &tile = layout.tiles.emplace_back(); - tile.ti.x = buf->ReadByte(); - tile.ti.y = buf->ReadByte(); + tile.ti.x = buf.ReadByte(); + tile.ti.y = buf.ReadByte(); if (tile.ti.x == 0 && tile.ti.y == 0x80) { /* Convert terminator to our own. */ tile.ti.x = -0x80; @@ -3956,11 +3956,11 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B break; } - tile.gfx = buf->ReadByte(); + tile.gfx = buf.ReadByte(); if (tile.gfx == 0xFE) { /* Use a new tile from this GRF */ - int local_tile_id = buf->ReadWord(); + int local_tile_id = buf.ReadWord(); /* Read the ID from the _airporttile_mngr. */ uint16_t tempid = _airporttile_mngr.GetID(local_tile_id, _cur.grffile->grfid); @@ -3993,29 +3993,29 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B } case 0x0C: - as->min_year = buf->ReadWord(); - as->max_year = buf->ReadWord(); + as->min_year = buf.ReadWord(); + as->max_year = buf.ReadWord(); if (as->max_year == 0xFFFF) as->max_year = CalendarTime::MAX_YEAR; break; case 0x0D: - as->ttd_airport_type = (TTDPAirportType)buf->ReadByte(); + as->ttd_airport_type = (TTDPAirportType)buf.ReadByte(); break; case 0x0E: - as->catchment = Clamp(buf->ReadByte(), 1, MAX_CATCHMENT); + as->catchment = Clamp(buf.ReadByte(), 1, MAX_CATCHMENT); break; case 0x0F: - as->noise_level = buf->ReadByte(); + as->noise_level = buf.ReadByte(); break; case 0x10: - AddStringForMapping(buf->ReadWord(), &as->name); + AddStringForMapping(buf.ReadWord(), &as->name); break; case 0x11: // Maintenance cost factor - as->maintenance_cost = buf->ReadWord(); + as->maintenance_cost = buf.ReadWord(); break; default: @@ -4033,7 +4033,7 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult IgnoreObjectProperty(uint prop, ByteReader *buf) +static ChangeInfoResult IgnoreObjectProperty(uint prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -4046,7 +4046,7 @@ static ChangeInfoResult IgnoreObjectProperty(uint prop, ByteReader *buf) case 0x16: case 0x17: case 0x18: - buf->ReadByte(); + buf.ReadByte(); break; case 0x09: @@ -4055,13 +4055,13 @@ static ChangeInfoResult IgnoreObjectProperty(uint prop, ByteReader *buf) case 0x11: case 0x13: case 0x15: - buf->ReadWord(); + buf.ReadWord(); break; case 0x08: case 0x0E: case 0x0F: - buf->ReadDWord(); + buf.ReadDWord(); break; default: @@ -4080,7 +4080,7 @@ static ChangeInfoResult IgnoreObjectProperty(uint prop, ByteReader *buf) * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult ObjectChangeInfo(uint id, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult ObjectChangeInfo(uint id, int numinfo, int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -4113,26 +4113,26 @@ static ChangeInfoResult ObjectChangeInfo(uint id, int numinfo, int prop, ByteRea } /* Swap classid because we read it in BE. */ - uint32_t classid = buf->ReadDWord(); + uint32_t classid = buf.ReadDWord(); spec->class_index = ObjectClass::Allocate(BSWAP32(classid)); break; } case 0x09: { // Class name - AddStringForMapping(buf->ReadWord(), [spec](StringID str) { ObjectClass::Get(spec->class_index)->name = str; }); + AddStringForMapping(buf.ReadWord(), [spec](StringID str) { ObjectClass::Get(spec->class_index)->name = str; }); break; } case 0x0A: // Object name - AddStringForMapping(buf->ReadWord(), &spec->name); + AddStringForMapping(buf.ReadWord(), &spec->name); break; case 0x0B: // Climate mask - spec->climate = buf->ReadByte(); + spec->climate = buf.ReadByte(); break; case 0x0C: // Size - spec->size = buf->ReadByte(); + spec->size = buf.ReadByte(); if (GB(spec->size, 0, 4) == 0 || GB(spec->size, 4, 4) == 0) { GrfMsg(0, "ObjectChangeInfo: Invalid object size requested (0x{:X}) for object id {}. Ignoring.", spec->size, id + i); spec->size = OBJECT_SIZE_1X1; @@ -4140,50 +4140,50 @@ static ChangeInfoResult ObjectChangeInfo(uint id, int numinfo, int prop, ByteRea break; case 0x0D: // Build cost multipler - spec->build_cost_multiplier = buf->ReadByte(); + spec->build_cost_multiplier = buf.ReadByte(); spec->clear_cost_multiplier = spec->build_cost_multiplier; break; case 0x0E: // Introduction date - spec->introduction_date = buf->ReadDWord(); + spec->introduction_date = buf.ReadDWord(); break; case 0x0F: // End of life - spec->end_of_life_date = buf->ReadDWord(); + spec->end_of_life_date = buf.ReadDWord(); break; case 0x10: // Flags - spec->flags = (ObjectFlags)buf->ReadWord(); + spec->flags = (ObjectFlags)buf.ReadWord(); _loaded_newgrf_features.has_2CC |= (spec->flags & OBJECT_FLAG_2CC_COLOUR) != 0; break; case 0x11: // Animation info - spec->animation.frames = buf->ReadByte(); - spec->animation.status = buf->ReadByte(); + spec->animation.frames = buf.ReadByte(); + spec->animation.status = buf.ReadByte(); break; case 0x12: // Animation speed - spec->animation.speed = buf->ReadByte(); + spec->animation.speed = buf.ReadByte(); break; case 0x13: // Animation triggers - spec->animation.triggers = buf->ReadWord(); + spec->animation.triggers = buf.ReadWord(); break; case 0x14: // Removal cost multiplier - spec->clear_cost_multiplier = buf->ReadByte(); + spec->clear_cost_multiplier = buf.ReadByte(); break; case 0x15: // Callback mask - spec->callback_mask = buf->ReadWord(); + spec->callback_mask = buf.ReadWord(); break; case 0x16: // Building height - spec->height = buf->ReadByte(); + spec->height = buf.ReadByte(); break; case 0x17: // Views - spec->views = buf->ReadByte(); + spec->views = buf.ReadByte(); if (spec->views != 1 && spec->views != 2 && spec->views != 4) { GrfMsg(2, "ObjectChangeInfo: Invalid number of views ({}) for object id {}. Ignoring.", spec->views, id + i); spec->views = 1; @@ -4191,7 +4191,7 @@ static ChangeInfoResult ObjectChangeInfo(uint id, int numinfo, int prop, ByteRea break; case 0x18: // Amount placed on 256^2 map on map creation - spec->generate_amount = buf->ReadByte(); + spec->generate_amount = buf.ReadByte(); break; default: @@ -4211,7 +4211,7 @@ static ChangeInfoResult ObjectChangeInfo(uint id, int numinfo, int prop, ByteRea * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult RailTypeChangeInfo(uint id, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult RailTypeChangeInfo(uint id, int numinfo, int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -4231,11 +4231,11 @@ static ChangeInfoResult RailTypeChangeInfo(uint id, int numinfo, int prop, ByteR switch (prop) { case 0x08: // Label of rail type /* Skipped here as this is loaded during reservation stage. */ - buf->ReadDWord(); + buf.ReadDWord(); break; case 0x09: { // Toolbar caption of railtype (sets name as well for backwards compatibility for grf ver < 8) - uint16_t str = buf->ReadWord(); + uint16_t str = buf.ReadWord(); AddStringForMapping(str, &rti->strings.toolbar_caption); if (_cur.grffile->grf_version < 8) { AddStringForMapping(str, &rti->strings.name); @@ -4244,19 +4244,19 @@ static ChangeInfoResult RailTypeChangeInfo(uint id, int numinfo, int prop, ByteR } case 0x0A: // Menu text of railtype - AddStringForMapping(buf->ReadWord(), &rti->strings.menu_text); + AddStringForMapping(buf.ReadWord(), &rti->strings.menu_text); break; case 0x0B: // Build window caption - AddStringForMapping(buf->ReadWord(), &rti->strings.build_caption); + AddStringForMapping(buf.ReadWord(), &rti->strings.build_caption); break; case 0x0C: // Autoreplace text - AddStringForMapping(buf->ReadWord(), &rti->strings.replace_text); + AddStringForMapping(buf.ReadWord(), &rti->strings.replace_text); break; case 0x0D: // New locomotive text - AddStringForMapping(buf->ReadWord(), &rti->strings.new_loco); + AddStringForMapping(buf.ReadWord(), &rti->strings.new_loco); break; case 0x0E: // Compatible railtype list @@ -4267,9 +4267,9 @@ static ChangeInfoResult RailTypeChangeInfo(uint id, int numinfo, int prop, ByteR /* Rail type compatibility bits are added to the existing bits * to allow multiple GRFs to modify compatibility with the * default rail types. */ - int n = buf->ReadByte(); + int n = buf.ReadByte(); for (int j = 0; j != n; j++) { - RailTypeLabel label = buf->ReadDWord(); + RailTypeLabel label = buf.ReadDWord(); RailType resolved_rt = GetRailTypeByLabel(BSWAP32(label), false); if (resolved_rt != INVALID_RAILTYPE) { switch (prop) { @@ -4284,52 +4284,52 @@ static ChangeInfoResult RailTypeChangeInfo(uint id, int numinfo, int prop, ByteR } case 0x10: // Rail Type flags - rti->flags = (RailTypeFlags)buf->ReadByte(); + rti->flags = (RailTypeFlags)buf.ReadByte(); break; case 0x11: // Curve speed advantage - rti->curve_speed = buf->ReadByte(); + rti->curve_speed = buf.ReadByte(); break; case 0x12: // Station graphic - rti->fallback_railtype = Clamp(buf->ReadByte(), 0, 2); + rti->fallback_railtype = Clamp(buf.ReadByte(), 0, 2); break; case 0x13: // Construction cost factor - rti->cost_multiplier = buf->ReadWord(); + rti->cost_multiplier = buf.ReadWord(); break; case 0x14: // Speed limit - rti->max_speed = buf->ReadWord(); + rti->max_speed = buf.ReadWord(); break; case 0x15: // Acceleration model - rti->acceleration_type = Clamp(buf->ReadByte(), 0, 2); + rti->acceleration_type = Clamp(buf.ReadByte(), 0, 2); break; case 0x16: // Map colour - rti->map_colour = buf->ReadByte(); + rti->map_colour = buf.ReadByte(); break; case 0x17: // Introduction date - rti->introduction_date = buf->ReadDWord(); + rti->introduction_date = buf.ReadDWord(); break; case 0x1A: // Sort order - rti->sorting_order = buf->ReadByte(); + rti->sorting_order = buf.ReadByte(); break; case 0x1B: // Name of railtype (overridden by prop 09 for grf ver < 8) - AddStringForMapping(buf->ReadWord(), &rti->strings.name); + AddStringForMapping(buf.ReadWord(), &rti->strings.name); break; case 0x1C: // Maintenance cost factor - rti->maintenance_multiplier = buf->ReadWord(); + rti->maintenance_multiplier = buf.ReadWord(); break; case 0x1D: // Alternate rail type label list /* Skipped here as this is loaded during reservation stage. */ - for (int j = buf->ReadByte(); j != 0; j--) buf->ReadDWord(); + for (int j = buf.ReadByte(); j != 0; j--) buf.ReadDWord(); break; default: @@ -4341,7 +4341,7 @@ static ChangeInfoResult RailTypeChangeInfo(uint id, int numinfo, int prop, ByteR return ret; } -static ChangeInfoResult RailTypeReserveInfo(uint id, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult RailTypeReserveInfo(uint id, int numinfo, int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -4356,7 +4356,7 @@ static ChangeInfoResult RailTypeReserveInfo(uint id, int numinfo, int prop, Byte switch (prop) { case 0x08: // Label of rail type { - RailTypeLabel rtl = buf->ReadDWord(); + RailTypeLabel rtl = buf.ReadDWord(); rtl = BSWAP32(rtl); RailType rt = GetRailTypeByLabel(rtl, false); @@ -4378,14 +4378,14 @@ static ChangeInfoResult RailTypeReserveInfo(uint id, int numinfo, int prop, Byte case 0x14: // Speed limit case 0x1B: // Name of railtype case 0x1C: // Maintenance cost factor - buf->ReadWord(); + buf.ReadWord(); break; case 0x1D: // Alternate rail type label list if (_cur.grffile->railtype_map[id + i] != INVALID_RAILTYPE) { - int n = buf->ReadByte(); + int n = buf.ReadByte(); for (int j = 0; j != n; j++) { - _railtypes[_cur.grffile->railtype_map[id + i]].alternate_labels.push_back(BSWAP32(buf->ReadDWord())); + _railtypes[_cur.grffile->railtype_map[id + i]].alternate_labels.push_back(BSWAP32(buf.ReadDWord())); } break; } @@ -4396,7 +4396,7 @@ static ChangeInfoResult RailTypeReserveInfo(uint id, int numinfo, int prop, Byte case 0x0F: // Powered railtype list case 0x18: // Railtype list required for date introduction case 0x19: // Introduced railtype list - for (int j = buf->ReadByte(); j != 0; j--) buf->ReadDWord(); + for (int j = buf.ReadByte(); j != 0; j--) buf.ReadDWord(); break; case 0x10: // Rail Type flags @@ -4405,11 +4405,11 @@ static ChangeInfoResult RailTypeReserveInfo(uint id, int numinfo, int prop, Byte case 0x15: // Acceleration model case 0x16: // Map colour case 0x1A: // Sort order - buf->ReadByte(); + buf.ReadByte(); break; case 0x17: // Introduction date - buf->ReadDWord(); + buf.ReadDWord(); break; default: @@ -4429,7 +4429,7 @@ static ChangeInfoResult RailTypeReserveInfo(uint id, int numinfo, int prop, Byte * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult RoadTypeChangeInfo(uint id, int numinfo, int prop, ByteReader *buf, RoadTramType rtt) +static ChangeInfoResult RoadTypeChangeInfo(uint id, int numinfo, int prop, ByteReader &buf, RoadTramType rtt) { ChangeInfoResult ret = CIR_SUCCESS; @@ -4450,29 +4450,29 @@ static ChangeInfoResult RoadTypeChangeInfo(uint id, int numinfo, int prop, ByteR switch (prop) { case 0x08: // Label of road type /* Skipped here as this is loaded during reservation stage. */ - buf->ReadDWord(); + buf.ReadDWord(); break; case 0x09: { // Toolbar caption of roadtype (sets name as well for backwards compatibility for grf ver < 8) - uint16_t str = buf->ReadWord(); + uint16_t str = buf.ReadWord(); AddStringForMapping(str, &rti->strings.toolbar_caption); break; } case 0x0A: // Menu text of roadtype - AddStringForMapping(buf->ReadWord(), &rti->strings.menu_text); + AddStringForMapping(buf.ReadWord(), &rti->strings.menu_text); break; case 0x0B: // Build window caption - AddStringForMapping(buf->ReadWord(), &rti->strings.build_caption); + AddStringForMapping(buf.ReadWord(), &rti->strings.build_caption); break; case 0x0C: // Autoreplace text - AddStringForMapping(buf->ReadWord(), &rti->strings.replace_text); + AddStringForMapping(buf.ReadWord(), &rti->strings.replace_text); break; case 0x0D: // New engine text - AddStringForMapping(buf->ReadWord(), &rti->strings.new_engine); + AddStringForMapping(buf.ReadWord(), &rti->strings.new_engine); break; case 0x0F: // Powered roadtype list @@ -4481,9 +4481,9 @@ static ChangeInfoResult RoadTypeChangeInfo(uint id, int numinfo, int prop, ByteR /* Road type compatibility bits are added to the existing bits * to allow multiple GRFs to modify compatibility with the * default road types. */ - int n = buf->ReadByte(); + int n = buf.ReadByte(); for (int j = 0; j != n; j++) { - RoadTypeLabel label = buf->ReadDWord(); + RoadTypeLabel label = buf.ReadDWord(); RoadType resolved_rt = GetRoadTypeByLabel(BSWAP32(label), false); if (resolved_rt != INVALID_ROADTYPE) { switch (prop) { @@ -4503,40 +4503,40 @@ static ChangeInfoResult RoadTypeChangeInfo(uint id, int numinfo, int prop, ByteR } case 0x10: // Road Type flags - rti->flags = (RoadTypeFlags)buf->ReadByte(); + rti->flags = (RoadTypeFlags)buf.ReadByte(); break; case 0x13: // Construction cost factor - rti->cost_multiplier = buf->ReadWord(); + rti->cost_multiplier = buf.ReadWord(); break; case 0x14: // Speed limit - rti->max_speed = buf->ReadWord(); + rti->max_speed = buf.ReadWord(); break; case 0x16: // Map colour - rti->map_colour = buf->ReadByte(); + rti->map_colour = buf.ReadByte(); break; case 0x17: // Introduction date - rti->introduction_date = buf->ReadDWord(); + rti->introduction_date = buf.ReadDWord(); break; case 0x1A: // Sort order - rti->sorting_order = buf->ReadByte(); + rti->sorting_order = buf.ReadByte(); break; case 0x1B: // Name of roadtype - AddStringForMapping(buf->ReadWord(), &rti->strings.name); + AddStringForMapping(buf.ReadWord(), &rti->strings.name); break; case 0x1C: // Maintenance cost factor - rti->maintenance_multiplier = buf->ReadWord(); + rti->maintenance_multiplier = buf.ReadWord(); break; case 0x1D: // Alternate road type label list /* Skipped here as this is loaded during reservation stage. */ - for (int j = buf->ReadByte(); j != 0; j--) buf->ReadDWord(); + for (int j = buf.ReadByte(); j != 0; j--) buf.ReadDWord(); break; default: @@ -4548,18 +4548,18 @@ static ChangeInfoResult RoadTypeChangeInfo(uint id, int numinfo, int prop, ByteR return ret; } -static ChangeInfoResult RoadTypeChangeInfo(uint id, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult RoadTypeChangeInfo(uint id, int numinfo, int prop, ByteReader &buf) { return RoadTypeChangeInfo(id, numinfo, prop, buf, RTT_ROAD); } -static ChangeInfoResult TramTypeChangeInfo(uint id, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult TramTypeChangeInfo(uint id, int numinfo, int prop, ByteReader &buf) { return RoadTypeChangeInfo(id, numinfo, prop, buf, RTT_TRAM); } -static ChangeInfoResult RoadTypeReserveInfo(uint id, int numinfo, int prop, ByteReader *buf, RoadTramType rtt) +static ChangeInfoResult RoadTypeReserveInfo(uint id, int numinfo, int prop, ByteReader &buf, RoadTramType rtt) { ChangeInfoResult ret = CIR_SUCCESS; @@ -4574,7 +4574,7 @@ static ChangeInfoResult RoadTypeReserveInfo(uint id, int numinfo, int prop, Byte for (int i = 0; i < numinfo; i++) { switch (prop) { case 0x08: { // Label of road type - RoadTypeLabel rtl = buf->ReadDWord(); + RoadTypeLabel rtl = buf.ReadDWord(); rtl = BSWAP32(rtl); RoadType rt = GetRoadTypeByLabel(rtl, false); @@ -4598,14 +4598,14 @@ static ChangeInfoResult RoadTypeReserveInfo(uint id, int numinfo, int prop, Byte case 0x14: // Speed limit case 0x1B: // Name of roadtype case 0x1C: // Maintenance cost factor - buf->ReadWord(); + buf.ReadWord(); break; case 0x1D: // Alternate road type label list if (type_map[id + i] != INVALID_ROADTYPE) { - int n = buf->ReadByte(); + int n = buf.ReadByte(); for (int j = 0; j != n; j++) { - _roadtypes[type_map[id + i]].alternate_labels.push_back(BSWAP32(buf->ReadDWord())); + _roadtypes[type_map[id + i]].alternate_labels.push_back(BSWAP32(buf.ReadDWord())); } break; } @@ -4615,17 +4615,17 @@ static ChangeInfoResult RoadTypeReserveInfo(uint id, int numinfo, int prop, Byte case 0x0F: // Powered roadtype list case 0x18: // Roadtype list required for date introduction case 0x19: // Introduced roadtype list - for (int j = buf->ReadByte(); j != 0; j--) buf->ReadDWord(); + for (int j = buf.ReadByte(); j != 0; j--) buf.ReadDWord(); break; case 0x10: // Road Type flags case 0x16: // Map colour case 0x1A: // Sort order - buf->ReadByte(); + buf.ReadByte(); break; case 0x17: // Introduction date - buf->ReadDWord(); + buf.ReadDWord(); break; default: @@ -4637,17 +4637,17 @@ static ChangeInfoResult RoadTypeReserveInfo(uint id, int numinfo, int prop, Byte return ret; } -static ChangeInfoResult RoadTypeReserveInfo(uint id, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult RoadTypeReserveInfo(uint id, int numinfo, int prop, ByteReader &buf) { return RoadTypeReserveInfo(id, numinfo, prop, buf, RTT_ROAD); } -static ChangeInfoResult TramTypeReserveInfo(uint id, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult TramTypeReserveInfo(uint id, int numinfo, int prop, ByteReader &buf) { return RoadTypeReserveInfo(id, numinfo, prop, buf, RTT_TRAM); } -static ChangeInfoResult AirportTilesChangeInfo(uint airtid, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult AirportTilesChangeInfo(uint airtid, int numinfo, int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -4669,7 +4669,7 @@ static ChangeInfoResult AirportTilesChangeInfo(uint airtid, int numinfo, int pro switch (prop) { case 0x08: { // Substitute airport tile type - uint8_t subs_id = buf->ReadByte(); + uint8_t subs_id = buf.ReadByte(); if (subs_id >= NEW_AIRPORTTILE_OFFSET) { /* The substitute id must be one of the original airport tiles. */ GrfMsg(2, "AirportTileChangeInfo: Attempt to use new airport tile {} as substitute airport tile for {}. Ignoring.", subs_id, airtid + i); @@ -4694,7 +4694,7 @@ static ChangeInfoResult AirportTilesChangeInfo(uint airtid, int numinfo, int pro } case 0x09: { // Airport tile override - uint8_t override = buf->ReadByte(); + uint8_t override = buf.ReadByte(); /* The airport tile being overridden must be an original airport tile. */ if (override >= NEW_AIRPORTTILE_OFFSET) { @@ -4707,20 +4707,20 @@ static ChangeInfoResult AirportTilesChangeInfo(uint airtid, int numinfo, int pro } case 0x0E: // Callback mask - tsp->callback_mask = buf->ReadByte(); + tsp->callback_mask = buf.ReadByte(); break; case 0x0F: // Animation information - tsp->animation.frames = buf->ReadByte(); - tsp->animation.status = buf->ReadByte(); + tsp->animation.frames = buf.ReadByte(); + tsp->animation.status = buf.ReadByte(); break; case 0x10: // Animation speed - tsp->animation.speed = buf->ReadByte(); + tsp->animation.speed = buf.ReadByte(); break; case 0x11: // Animation triggers - tsp->animation.triggers = buf->ReadByte(); + tsp->animation.triggers = buf.ReadByte(); break; default: @@ -4738,7 +4738,7 @@ static ChangeInfoResult AirportTilesChangeInfo(uint airtid, int numinfo, int pro * @param buf The property value. * @return ChangeInfoResult. */ -static ChangeInfoResult IgnoreRoadStopProperty(uint prop, ByteReader *buf) +static ChangeInfoResult IgnoreRoadStopProperty(uint prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -4747,7 +4747,7 @@ static ChangeInfoResult IgnoreRoadStopProperty(uint prop, ByteReader *buf) case 0x0C: case 0x0F: case 0x11: - buf->ReadByte(); + buf.ReadByte(); break; case 0x0A: @@ -4755,13 +4755,13 @@ static ChangeInfoResult IgnoreRoadStopProperty(uint prop, ByteReader *buf) case 0x0E: case 0x10: case 0x15: - buf->ReadWord(); + buf.ReadWord(); break; case 0x08: case 0x0D: case 0x12: - buf->ReadDWord(); + buf.ReadDWord(); break; default: @@ -4772,7 +4772,7 @@ static ChangeInfoResult IgnoreRoadStopProperty(uint prop, ByteReader *buf) return ret; } -static ChangeInfoResult RoadStopChangeInfo(uint id, int numinfo, int prop, ByteReader *buf) +static ChangeInfoResult RoadStopChangeInfo(uint id, int numinfo, int prop, ByteReader &buf) { ChangeInfoResult ret = CIR_SUCCESS; @@ -4800,55 +4800,55 @@ static ChangeInfoResult RoadStopChangeInfo(uint id, int numinfo, int prop, ByteR rs = _cur.grffile->roadstops[id + i].get(); } - uint32_t classid = buf->ReadDWord(); + uint32_t classid = buf.ReadDWord(); rs->class_index = RoadStopClass::Allocate(BSWAP32(classid)); break; } case 0x09: // Road stop type - rs->stop_type = (RoadStopAvailabilityType)buf->ReadByte(); + rs->stop_type = (RoadStopAvailabilityType)buf.ReadByte(); break; case 0x0A: // Road Stop Name - AddStringForMapping(buf->ReadWord(), &rs->name); + AddStringForMapping(buf.ReadWord(), &rs->name); break; case 0x0B: // Road Stop Class name - AddStringForMapping(buf->ReadWord(), [rs](StringID str) { RoadStopClass::Get(rs->class_index)->name = str; }); + AddStringForMapping(buf.ReadWord(), [rs](StringID str) { RoadStopClass::Get(rs->class_index)->name = str; }); break; case 0x0C: // The draw mode - rs->draw_mode = (RoadStopDrawMode)buf->ReadByte(); + rs->draw_mode = (RoadStopDrawMode)buf.ReadByte(); break; case 0x0D: // Cargo types for random triggers - rs->cargo_triggers = TranslateRefitMask(buf->ReadDWord()); + rs->cargo_triggers = TranslateRefitMask(buf.ReadDWord()); break; case 0x0E: // Animation info - rs->animation.frames = buf->ReadByte(); - rs->animation.status = buf->ReadByte(); + rs->animation.frames = buf.ReadByte(); + rs->animation.status = buf.ReadByte(); break; case 0x0F: // Animation speed - rs->animation.speed = buf->ReadByte(); + rs->animation.speed = buf.ReadByte(); break; case 0x10: // Animation triggers - rs->animation.triggers = buf->ReadWord(); + rs->animation.triggers = buf.ReadWord(); break; case 0x11: // Callback mask - rs->callback_mask = buf->ReadByte(); + rs->callback_mask = buf.ReadByte(); break; case 0x12: // General flags - rs->flags = (uint8_t)buf->ReadDWord(); // Future-proofing, size this as 4 bytes, but we only need one byte's worth of flags at present + rs->flags = (uint8_t)buf.ReadDWord(); // Future-proofing, size this as 4 bytes, but we only need one byte's worth of flags at present break; case 0x15: // Cost multipliers - rs->build_cost_multiplier = buf->ReadByte(); - rs->clear_cost_multiplier = buf->ReadByte(); + rs->build_cost_multiplier = buf.ReadByte(); + rs->clear_cost_multiplier = buf.ReadByte(); break; default: @@ -4890,7 +4890,7 @@ static bool HandleChangeInfoResult(const char *caller, ChangeInfoResult cir, uin } /* Action 0x00 */ -static void FeatureChangeInfo(ByteReader *buf) +static void FeatureChangeInfo(ByteReader &buf) { /* <00> ()... * @@ -4928,10 +4928,10 @@ static void FeatureChangeInfo(ByteReader *buf) }; static_assert(GSF_END == lengthof(handler)); - uint8_t feature = buf->ReadByte(); - uint8_t numprops = buf->ReadByte(); - uint numinfo = buf->ReadByte(); - uint engine = buf->ReadExtendedByte(); + uint8_t feature = buf.ReadByte(); + uint8_t numprops = buf.ReadByte(); + uint numinfo = buf.ReadByte(); + uint engine = buf.ReadExtendedByte(); if (feature >= GSF_END) { GrfMsg(1, "FeatureChangeInfo: Unsupported feature 0x{:02X}, skipping", feature); @@ -4949,8 +4949,8 @@ static void FeatureChangeInfo(ByteReader *buf) /* Mark the feature as used by the grf */ SetBit(_cur.grffile->grf_features, feature); - while (numprops-- && buf->HasData()) { - uint8_t prop = buf->ReadByte(); + while (numprops-- && buf.HasData()) { + uint8_t prop = buf.ReadByte(); ChangeInfoResult cir = handler[feature](engine, numinfo, prop, buf); if (HandleChangeInfoResult("FeatureChangeInfo", cir, feature, prop)) return; @@ -4958,26 +4958,26 @@ static void FeatureChangeInfo(ByteReader *buf) } /* Action 0x00 (GLS_SAFETYSCAN) */ -static void SafeChangeInfo(ByteReader *buf) +static void SafeChangeInfo(ByteReader &buf) { - uint8_t feature = buf->ReadByte(); - uint8_t numprops = buf->ReadByte(); - uint numinfo = buf->ReadByte(); - buf->ReadExtendedByte(); // id + uint8_t feature = buf.ReadByte(); + uint8_t numprops = buf.ReadByte(); + uint numinfo = buf.ReadByte(); + buf.ReadExtendedByte(); // id if (feature == GSF_BRIDGES && numprops == 1) { - uint8_t prop = buf->ReadByte(); + uint8_t prop = buf.ReadByte(); /* Bridge property 0x0D is redefinition of sprite layout tables, which * is considered safe. */ if (prop == 0x0D) return; } else if (feature == GSF_GLOBALVAR && numprops == 1) { - uint8_t prop = buf->ReadByte(); + uint8_t prop = buf.ReadByte(); /* Engine ID Mappings are safe, if the source is static */ if (prop == 0x11) { bool is_safe = true; for (uint i = 0; i < numinfo; i++) { - uint32_t s = buf->ReadDWord(); - buf->ReadDWord(); // dest + uint32_t s = buf.ReadDWord(); + buf.ReadDWord(); // dest const GRFConfig *grfconfig = GetGRFConfig(s); if (grfconfig != nullptr && !HasBit(grfconfig->flags, GCF_STATIC)) { is_safe = false; @@ -4995,18 +4995,18 @@ static void SafeChangeInfo(ByteReader *buf) } /* Action 0x00 (GLS_RESERVE) */ -static void ReserveChangeInfo(ByteReader *buf) +static void ReserveChangeInfo(ByteReader &buf) { - uint8_t feature = buf->ReadByte(); + uint8_t feature = buf.ReadByte(); if (feature != GSF_CARGOES && feature != GSF_GLOBALVAR && feature != GSF_RAILTYPES && feature != GSF_ROADTYPES && feature != GSF_TRAMTYPES) return; - uint8_t numprops = buf->ReadByte(); - uint8_t numinfo = buf->ReadByte(); - uint8_t index = buf->ReadExtendedByte(); + uint8_t numprops = buf.ReadByte(); + uint8_t numinfo = buf.ReadByte(); + uint8_t index = buf.ReadExtendedByte(); - while (numprops-- && buf->HasData()) { - uint8_t prop = buf->ReadByte(); + while (numprops-- && buf.HasData()) { + uint8_t prop = buf.ReadByte(); ChangeInfoResult cir = CIR_SUCCESS; switch (feature) { @@ -5037,7 +5037,7 @@ static void ReserveChangeInfo(ByteReader *buf) } /* Action 0x01 */ -static void NewSpriteSet(ByteReader *buf) +static void NewSpriteSet(ByteReader &buf) { /* Basic format: <01> * Extended format: <01> 00 @@ -5053,17 +5053,17 @@ static void NewSpriteSet(ByteReader *buf) * In that case, use num-dirs=4. */ - uint8_t feature = buf->ReadByte(); - uint16_t num_sets = buf->ReadByte(); + uint8_t feature = buf.ReadByte(); + uint16_t num_sets = buf.ReadByte(); uint16_t first_set = 0; - if (num_sets == 0 && buf->HasData(3)) { + if (num_sets == 0 && buf.HasData(3)) { /* Extended Action1 format. * Some GRFs define zero sets of zero sprites, though there is actually no use in that. Ignore them. */ - first_set = buf->ReadExtendedByte(); - num_sets = buf->ReadExtendedByte(); + first_set = buf.ReadExtendedByte(); + num_sets = buf.ReadExtendedByte(); } - uint16_t num_ents = buf->ReadExtendedByte(); + uint16_t num_ents = buf.ReadExtendedByte(); if (feature >= GSF_END) { _cur.skip_sprites = num_sets * num_ents; @@ -5084,18 +5084,18 @@ static void NewSpriteSet(ByteReader *buf) } /* Action 0x01 (SKIP) */ -static void SkipAct1(ByteReader *buf) +static void SkipAct1(ByteReader &buf) { - buf->ReadByte(); - uint16_t num_sets = buf->ReadByte(); + buf.ReadByte(); + uint16_t num_sets = buf.ReadByte(); - if (num_sets == 0 && buf->HasData(3)) { + if (num_sets == 0 && buf.HasData(3)) { /* Extended Action1 format. * Some GRFs define zero sets of zero sprites, though there is actually no use in that. Ignore them. */ - buf->ReadExtendedByte(); // first_set - num_sets = buf->ReadExtendedByte(); + buf.ReadExtendedByte(); // first_set + num_sets = buf.ReadExtendedByte(); } - uint16_t num_ents = buf->ReadExtendedByte(); + uint16_t num_ents = buf.ReadExtendedByte(); _cur.skip_sprites = num_sets * num_ents; @@ -5150,7 +5150,7 @@ static const SpriteGroup *CreateGroupFromGroupID(uint8_t feature, uint8_t setid, } /* Action 0x02 */ -static void NewSpriteGroup(ByteReader *buf) +static void NewSpriteGroup(ByteReader &buf) { /* <02> * @@ -5164,14 +5164,14 @@ static void NewSpriteGroup(ByteReader *buf) * V feature-specific-data (huge mess, don't even look it up --pasky) */ const SpriteGroup *act_group = nullptr; - uint8_t feature = buf->ReadByte(); + uint8_t feature = buf.ReadByte(); if (feature >= GSF_END) { GrfMsg(1, "NewSpriteGroup: Unsupported feature 0x{:02X}, skipping", feature); return; } - uint8_t setid = buf->ReadByte(); - uint8_t type = buf->ReadByte(); + uint8_t setid = buf.ReadByte(); + uint8_t type = buf.ReadByte(); /* Sprite Groups are created here but they are allocated from a pool, so * we do not need to delete anything if there is an exception from the @@ -5208,23 +5208,23 @@ static void NewSpriteGroup(ByteReader *buf) DeterministicSpriteGroupAdjust &adjust = group->adjusts.emplace_back(); /* The first var adjust doesn't have an operation specified, so we set it to add. */ - adjust.operation = group->adjusts.size() == 1 ? DSGA_OP_ADD : (DeterministicSpriteGroupAdjustOperation)buf->ReadByte(); - adjust.variable = buf->ReadByte(); + adjust.operation = group->adjusts.size() == 1 ? DSGA_OP_ADD : (DeterministicSpriteGroupAdjustOperation)buf.ReadByte(); + adjust.variable = buf.ReadByte(); if (adjust.variable == 0x7E) { /* Link subroutine group */ - adjust.subroutine = GetGroupFromGroupID(setid, type, buf->ReadByte()); + adjust.subroutine = GetGroupFromGroupID(setid, type, buf.ReadByte()); } else { - adjust.parameter = IsInsideMM(adjust.variable, 0x60, 0x80) ? buf->ReadByte() : 0; + adjust.parameter = IsInsideMM(adjust.variable, 0x60, 0x80) ? buf.ReadByte() : 0; } - varadjust = buf->ReadByte(); + varadjust = buf.ReadByte(); adjust.shift_num = GB(varadjust, 0, 5); adjust.type = (DeterministicSpriteGroupAdjustType)GB(varadjust, 6, 2); - adjust.and_mask = buf->ReadVarSize(varsize); + adjust.and_mask = buf.ReadVarSize(varsize); if (adjust.type != DSGA_TYPE_NONE) { - adjust.add_val = buf->ReadVarSize(varsize); - adjust.divmod_val = buf->ReadVarSize(varsize); + adjust.add_val = buf.ReadVarSize(varsize); + adjust.divmod_val = buf.ReadVarSize(varsize); } else { adjust.add_val = 0; adjust.divmod_val = 0; @@ -5234,14 +5234,14 @@ static void NewSpriteGroup(ByteReader *buf) } while (HasBit(varadjust, 5)); std::vector ranges; - ranges.resize(buf->ReadByte()); + ranges.resize(buf.ReadByte()); for (auto &range : ranges) { - range.group = GetGroupFromGroupID(setid, type, buf->ReadWord()); - range.low = buf->ReadVarSize(varsize); - range.high = buf->ReadVarSize(varsize); + range.group = GetGroupFromGroupID(setid, type, buf.ReadWord()); + range.low = buf.ReadVarSize(varsize); + range.high = buf.ReadVarSize(varsize); } - group->default_group = GetGroupFromGroupID(setid, type, buf->ReadWord()); + group->default_group = GetGroupFromGroupID(setid, type, buf.ReadWord()); group->error_group = ranges.empty() ? group->default_group : ranges[0].group; /* nvar == 0 is a special case -- we turn our value into a callback result */ group->calculated_result = ranges.empty(); @@ -5300,22 +5300,22 @@ static void NewSpriteGroup(ByteReader *buf) if (HasBit(type, 2)) { if (feature <= GSF_AIRCRAFT) group->var_scope = VSG_SCOPE_RELATIVE; - group->count = buf->ReadByte(); + group->count = buf.ReadByte(); } - uint8_t triggers = buf->ReadByte(); + uint8_t triggers = buf.ReadByte(); group->triggers = GB(triggers, 0, 7); group->cmp_mode = HasBit(triggers, 7) ? RSG_CMP_ALL : RSG_CMP_ANY; - group->lowest_randbit = buf->ReadByte(); + group->lowest_randbit = buf.ReadByte(); - uint8_t num_groups = buf->ReadByte(); + uint8_t num_groups = buf.ReadByte(); if (!HasExactlyOneBit(num_groups)) { GrfMsg(1, "NewSpriteGroup: Random Action 2 nrand should be power of 2"); } group->groups.reserve(num_groups); for (uint i = 0; i < num_groups; i++) { - group->groups.push_back(GetGroupFromGroupID(setid, type, buf->ReadWord())); + group->groups.push_back(GetGroupFromGroupID(setid, type, buf.ReadWord())); } break; @@ -5338,7 +5338,7 @@ static void NewSpriteGroup(ByteReader *buf) case GSF_TRAMTYPES: { uint8_t num_loaded = type; - uint8_t num_loading = buf->ReadByte(); + uint8_t num_loading = buf.ReadByte(); if (!_cur.HasValidSpriteSets(feature)) { GrfMsg(0, "NewSpriteGroup: No sprite set to work on! Skipping"); @@ -5355,7 +5355,7 @@ static void NewSpriteGroup(ByteReader *buf) if (num_loaded + num_loading == 1) { /* Avoid creating 'Real' sprite group if only one option. */ - uint16_t spriteid = buf->ReadWord(); + uint16_t spriteid = buf.ReadWord(); act_group = CreateGroupFromGroupID(feature, setid, type, spriteid); GrfMsg(8, "NewSpriteGroup: one result, skipping RealSpriteGroup = subset {}", spriteid); break; @@ -5366,13 +5366,13 @@ static void NewSpriteGroup(ByteReader *buf) loaded.reserve(num_loaded); for (uint i = 0; i < num_loaded; i++) { - loaded.push_back(buf->ReadWord()); + loaded.push_back(buf.ReadWord()); GrfMsg(8, "NewSpriteGroup: + rg->loaded[{}] = subset {}", i, loaded[i]); } loading.reserve(num_loading); for (uint i = 0; i < num_loading; i++) { - loading.push_back(buf->ReadWord()); + loading.push_back(buf.ReadWord()); GrfMsg(8, "NewSpriteGroup: + rg->loading[{}] = subset {}", i, loading[i]); } @@ -5438,32 +5438,32 @@ static void NewSpriteGroup(ByteReader *buf) if (type == 0) { group->num_input = INDUSTRY_ORIGINAL_NUM_INPUTS; for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_INPUTS; i++) { - group->subtract_input[i] = (int16_t)buf->ReadWord(); // signed + group->subtract_input[i] = (int16_t)buf.ReadWord(); // signed } group->num_output = INDUSTRY_ORIGINAL_NUM_OUTPUTS; for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_OUTPUTS; i++) { - group->add_output[i] = buf->ReadWord(); // unsigned + group->add_output[i] = buf.ReadWord(); // unsigned } - group->again = buf->ReadByte(); + group->again = buf.ReadByte(); } else if (type == 1) { group->num_input = INDUSTRY_ORIGINAL_NUM_INPUTS; for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_INPUTS; i++) { - group->subtract_input[i] = buf->ReadByte(); + group->subtract_input[i] = buf.ReadByte(); } group->num_output = INDUSTRY_ORIGINAL_NUM_OUTPUTS; for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_OUTPUTS; i++) { - group->add_output[i] = buf->ReadByte(); + group->add_output[i] = buf.ReadByte(); } - group->again = buf->ReadByte(); + group->again = buf.ReadByte(); } else if (type == 2) { - group->num_input = buf->ReadByte(); + group->num_input = buf.ReadByte(); if (group->num_input > lengthof(group->subtract_input)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_INDPROD_CALLBACK); error->data = "too many inputs (max 16)"; return; } for (uint i = 0; i < group->num_input; i++) { - uint8_t rawcargo = buf->ReadByte(); + uint8_t rawcargo = buf.ReadByte(); CargoID cargo = GetCargoTranslation(rawcargo, _cur.grffile); if (!IsValidCargoID(cargo)) { /* The mapped cargo is invalid. This is permitted at this point, @@ -5476,16 +5476,16 @@ static void NewSpriteGroup(ByteReader *buf) return; } group->cargo_input[i] = cargo; - group->subtract_input[i] = buf->ReadByte(); + group->subtract_input[i] = buf.ReadByte(); } - group->num_output = buf->ReadByte(); + group->num_output = buf.ReadByte(); if (group->num_output > lengthof(group->add_output)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_INDPROD_CALLBACK); error->data = "too many outputs (max 16)"; return; } for (uint i = 0; i < group->num_output; i++) { - uint8_t rawcargo = buf->ReadByte(); + uint8_t rawcargo = buf.ReadByte(); CargoID cargo = GetCargoTranslation(rawcargo, _cur.grffile); if (!IsValidCargoID(cargo)) { /* Mark this result as invalid to use */ @@ -5496,9 +5496,9 @@ static void NewSpriteGroup(ByteReader *buf) return; } group->cargo_output[i] = cargo; - group->add_output[i] = buf->ReadByte(); + group->add_output[i] = buf.ReadByte(); } - group->again = buf->ReadByte(); + group->again = buf.ReadByte(); } else { NOT_REACHED(); } @@ -5572,7 +5572,7 @@ static bool IsValidGroupID(uint16_t groupid, const char *function) return true; } -static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idcount) +static void VehicleMapSpriteGroup(ByteReader &buf, uint8_t feature, uint8_t idcount) { static std::vector last_engines; // Engine IDs are remembered in case the next action is a wagon override. bool wagover = false; @@ -5596,7 +5596,7 @@ static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idco std::vector engines; engines.reserve(idcount); for (uint i = 0; i < idcount; i++) { - Engine *e = GetNewEngine(_cur.grffile, (VehicleType)feature, buf->ReadExtendedByte()); + Engine *e = GetNewEngine(_cur.grffile, (VehicleType)feature, buf.ReadExtendedByte()); if (e == nullptr) { /* No engine could be allocated?!? Deal with it. Okay, * this might look bad. Also make sure this NewGRF @@ -5609,10 +5609,10 @@ static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idco if (!wagover) last_engines[i] = engines[i]; } - uint8_t cidcount = buf->ReadByte(); + uint8_t cidcount = buf.ReadByte(); for (uint c = 0; c < cidcount; c++) { - uint8_t ctype = buf->ReadByte(); - uint16_t groupid = buf->ReadWord(); + uint8_t ctype = buf.ReadByte(); + uint16_t groupid = buf.ReadWord(); if (!IsValidGroupID(groupid, "VehicleMapSpriteGroup")) continue; GrfMsg(8, "VehicleMapSpriteGroup: * [{}] Cargo type 0x{:X}, group id 0x{:02X}", c, ctype, groupid); @@ -5633,7 +5633,7 @@ static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idco } } - uint16_t groupid = buf->ReadWord(); + uint16_t groupid = buf.ReadWord(); if (!IsValidGroupID(groupid, "VehicleMapSpriteGroup")) return; GrfMsg(8, "-- Default group id 0x{:04X}", groupid); @@ -5651,18 +5651,18 @@ static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idco } -static void CanalMapSpriteGroup(ByteReader *buf, uint8_t idcount) +static void CanalMapSpriteGroup(ByteReader &buf, uint8_t idcount) { std::vector cfs; cfs.reserve(idcount); for (uint i = 0; i < idcount; i++) { - cfs.push_back(buf->ReadExtendedByte()); + cfs.push_back(buf.ReadExtendedByte()); } - uint8_t cidcount = buf->ReadByte(); - buf->Skip(cidcount * 3); + uint8_t cidcount = buf.ReadByte(); + buf.Skip(cidcount * 3); - uint16_t groupid = buf->ReadWord(); + uint16_t groupid = buf.ReadWord(); if (!IsValidGroupID(groupid, "CanalMapSpriteGroup")) return; for (auto &cf : cfs) { @@ -5677,7 +5677,7 @@ static void CanalMapSpriteGroup(ByteReader *buf, uint8_t idcount) } -static void StationMapSpriteGroup(ByteReader *buf, uint8_t idcount) +static void StationMapSpriteGroup(ByteReader &buf, uint8_t idcount) { if (_cur.grffile->stations.empty()) { GrfMsg(1, "StationMapSpriteGroup: No stations defined, skipping"); @@ -5687,13 +5687,13 @@ static void StationMapSpriteGroup(ByteReader *buf, uint8_t idcount) std::vector stations; stations.reserve(idcount); for (uint i = 0; i < idcount; i++) { - stations.push_back(buf->ReadExtendedByte()); + stations.push_back(buf.ReadExtendedByte()); } - uint8_t cidcount = buf->ReadByte(); + uint8_t cidcount = buf.ReadByte(); for (uint c = 0; c < cidcount; c++) { - uint8_t ctype = buf->ReadByte(); - uint16_t groupid = buf->ReadWord(); + uint8_t ctype = buf.ReadByte(); + uint16_t groupid = buf.ReadWord(); if (!IsValidGroupID(groupid, "StationMapSpriteGroup")) continue; ctype = TranslateCargo(GSF_STATIONS, ctype); @@ -5711,7 +5711,7 @@ static void StationMapSpriteGroup(ByteReader *buf, uint8_t idcount) } } - uint16_t groupid = buf->ReadWord(); + uint16_t groupid = buf.ReadWord(); if (!IsValidGroupID(groupid, "StationMapSpriteGroup")) return; for (auto &station : stations) { @@ -5735,7 +5735,7 @@ static void StationMapSpriteGroup(ByteReader *buf, uint8_t idcount) } -static void TownHouseMapSpriteGroup(ByteReader *buf, uint8_t idcount) +static void TownHouseMapSpriteGroup(ByteReader &buf, uint8_t idcount) { if (_cur.grffile->housespec.empty()) { GrfMsg(1, "TownHouseMapSpriteGroup: No houses defined, skipping"); @@ -5745,14 +5745,14 @@ static void TownHouseMapSpriteGroup(ByteReader *buf, uint8_t idcount) std::vector houses; houses.reserve(idcount); for (uint i = 0; i < idcount; i++) { - houses.push_back(buf->ReadExtendedByte()); + houses.push_back(buf.ReadExtendedByte()); } /* Skip the cargo type section, we only care about the default group */ - uint8_t cidcount = buf->ReadByte(); - buf->Skip(cidcount * 3); + uint8_t cidcount = buf.ReadByte(); + buf.Skip(cidcount * 3); - uint16_t groupid = buf->ReadWord(); + uint16_t groupid = buf.ReadWord(); if (!IsValidGroupID(groupid, "TownHouseMapSpriteGroup")) return; for (auto &house : houses) { @@ -5767,7 +5767,7 @@ static void TownHouseMapSpriteGroup(ByteReader *buf, uint8_t idcount) } } -static void IndustryMapSpriteGroup(ByteReader *buf, uint8_t idcount) +static void IndustryMapSpriteGroup(ByteReader &buf, uint8_t idcount) { if (_cur.grffile->industryspec.empty()) { GrfMsg(1, "IndustryMapSpriteGroup: No industries defined, skipping"); @@ -5777,14 +5777,14 @@ static void IndustryMapSpriteGroup(ByteReader *buf, uint8_t idcount) std::vector industries; industries.reserve(idcount); for (uint i = 0; i < idcount; i++) { - industries.push_back(buf->ReadExtendedByte()); + industries.push_back(buf.ReadExtendedByte()); } /* Skip the cargo type section, we only care about the default group */ - uint8_t cidcount = buf->ReadByte(); - buf->Skip(cidcount * 3); + uint8_t cidcount = buf.ReadByte(); + buf.Skip(cidcount * 3); - uint16_t groupid = buf->ReadWord(); + uint16_t groupid = buf.ReadWord(); if (!IsValidGroupID(groupid, "IndustryMapSpriteGroup")) return; for (auto &industry : industries) { @@ -5799,7 +5799,7 @@ static void IndustryMapSpriteGroup(ByteReader *buf, uint8_t idcount) } } -static void IndustrytileMapSpriteGroup(ByteReader *buf, uint8_t idcount) +static void IndustrytileMapSpriteGroup(ByteReader &buf, uint8_t idcount) { if (_cur.grffile->indtspec.empty()) { GrfMsg(1, "IndustrytileMapSpriteGroup: No industry tiles defined, skipping"); @@ -5809,14 +5809,14 @@ static void IndustrytileMapSpriteGroup(ByteReader *buf, uint8_t idcount) std::vector indtiles; indtiles.reserve(idcount); for (uint i = 0; i < idcount; i++) { - indtiles.push_back(buf->ReadExtendedByte()); + indtiles.push_back(buf.ReadExtendedByte()); } /* Skip the cargo type section, we only care about the default group */ - uint8_t cidcount = buf->ReadByte(); - buf->Skip(cidcount * 3); + uint8_t cidcount = buf.ReadByte(); + buf.Skip(cidcount * 3); - uint16_t groupid = buf->ReadWord(); + uint16_t groupid = buf.ReadWord(); if (!IsValidGroupID(groupid, "IndustrytileMapSpriteGroup")) return; for (auto &indtile : indtiles) { @@ -5831,19 +5831,19 @@ static void IndustrytileMapSpriteGroup(ByteReader *buf, uint8_t idcount) } } -static void CargoMapSpriteGroup(ByteReader *buf, uint8_t idcount) +static void CargoMapSpriteGroup(ByteReader &buf, uint8_t idcount) { std::vector cargoes; cargoes.reserve(idcount); for (uint i = 0; i < idcount; i++) { - cargoes.push_back(buf->ReadExtendedByte()); + cargoes.push_back(buf.ReadExtendedByte()); } /* Skip the cargo type section, we only care about the default group */ - uint8_t cidcount = buf->ReadByte(); - buf->Skip(cidcount * 3); + uint8_t cidcount = buf.ReadByte(); + buf.Skip(cidcount * 3); - uint16_t groupid = buf->ReadWord(); + uint16_t groupid = buf.ReadWord(); if (!IsValidGroupID(groupid, "CargoMapSpriteGroup")) return; for (auto &cid : cargoes) { @@ -5858,7 +5858,7 @@ static void CargoMapSpriteGroup(ByteReader *buf, uint8_t idcount) } } -static void ObjectMapSpriteGroup(ByteReader *buf, uint8_t idcount) +static void ObjectMapSpriteGroup(ByteReader &buf, uint8_t idcount) { if (_cur.grffile->objectspec.empty()) { GrfMsg(1, "ObjectMapSpriteGroup: No object tiles defined, skipping"); @@ -5868,13 +5868,13 @@ static void ObjectMapSpriteGroup(ByteReader *buf, uint8_t idcount) std::vector objects; objects.reserve(idcount); for (uint i = 0; i < idcount; i++) { - objects.push_back(buf->ReadExtendedByte()); + objects.push_back(buf.ReadExtendedByte()); } - uint8_t cidcount = buf->ReadByte(); + uint8_t cidcount = buf.ReadByte(); for (uint c = 0; c < cidcount; c++) { - uint8_t ctype = buf->ReadByte(); - uint16_t groupid = buf->ReadWord(); + uint8_t ctype = buf.ReadByte(); + uint16_t groupid = buf.ReadWord(); if (!IsValidGroupID(groupid, "ObjectMapSpriteGroup")) continue; /* The only valid option here is purchase list sprite groups. */ @@ -5895,7 +5895,7 @@ static void ObjectMapSpriteGroup(ByteReader *buf, uint8_t idcount) } } - uint16_t groupid = buf->ReadWord(); + uint16_t groupid = buf.ReadWord(); if (!IsValidGroupID(groupid, "ObjectMapSpriteGroup")) return; for (auto &object : objects) { @@ -5917,19 +5917,19 @@ static void ObjectMapSpriteGroup(ByteReader *buf, uint8_t idcount) } } -static void RailTypeMapSpriteGroup(ByteReader *buf, uint8_t idcount) +static void RailTypeMapSpriteGroup(ByteReader &buf, uint8_t idcount) { std::vector railtypes; railtypes.reserve(idcount); for (uint i = 0; i < idcount; i++) { - uint16_t id = buf->ReadExtendedByte(); + uint16_t id = buf.ReadExtendedByte(); railtypes.push_back(id < RAILTYPE_END ? _cur.grffile->railtype_map[id] : INVALID_RAILTYPE); } - uint8_t cidcount = buf->ReadByte(); + uint8_t cidcount = buf.ReadByte(); for (uint c = 0; c < cidcount; c++) { - uint8_t ctype = buf->ReadByte(); - uint16_t groupid = buf->ReadWord(); + uint8_t ctype = buf.ReadByte(); + uint16_t groupid = buf.ReadWord(); if (!IsValidGroupID(groupid, "RailTypeMapSpriteGroup")) continue; if (ctype >= RTSG_END) continue; @@ -5946,24 +5946,24 @@ static void RailTypeMapSpriteGroup(ByteReader *buf, uint8_t idcount) } /* Railtypes do not use the default group. */ - buf->ReadWord(); + buf.ReadWord(); } -static void RoadTypeMapSpriteGroup(ByteReader *buf, uint8_t idcount, RoadTramType rtt) +static void RoadTypeMapSpriteGroup(ByteReader &buf, uint8_t idcount, RoadTramType rtt) { RoadType *type_map = (rtt == RTT_TRAM) ? _cur.grffile->tramtype_map : _cur.grffile->roadtype_map; std::vector roadtypes; roadtypes.reserve(idcount); for (uint i = 0; i < idcount; i++) { - uint16_t id = buf->ReadExtendedByte(); + uint16_t id = buf.ReadExtendedByte(); roadtypes.push_back(id < ROADTYPE_END ? type_map[id] : INVALID_ROADTYPE); } - uint8_t cidcount = buf->ReadByte(); + uint8_t cidcount = buf.ReadByte(); for (uint c = 0; c < cidcount; c++) { - uint8_t ctype = buf->ReadByte(); - uint16_t groupid = buf->ReadWord(); + uint8_t ctype = buf.ReadByte(); + uint16_t groupid = buf.ReadWord(); if (!IsValidGroupID(groupid, "RoadTypeMapSpriteGroup")) continue; if (ctype >= ROTSG_END) continue; @@ -5980,10 +5980,10 @@ static void RoadTypeMapSpriteGroup(ByteReader *buf, uint8_t idcount, RoadTramTyp } /* Roadtypes do not use the default group. */ - buf->ReadWord(); + buf.ReadWord(); } -static void AirportMapSpriteGroup(ByteReader *buf, uint8_t idcount) +static void AirportMapSpriteGroup(ByteReader &buf, uint8_t idcount) { if (_cur.grffile->airportspec.empty()) { GrfMsg(1, "AirportMapSpriteGroup: No airports defined, skipping"); @@ -5993,14 +5993,14 @@ static void AirportMapSpriteGroup(ByteReader *buf, uint8_t idcount) std::vector airports; airports.reserve(idcount); for (uint i = 0; i < idcount; i++) { - airports.push_back(buf->ReadExtendedByte()); + airports.push_back(buf.ReadExtendedByte()); } /* Skip the cargo type section, we only care about the default group */ - uint8_t cidcount = buf->ReadByte(); - buf->Skip(cidcount * 3); + uint8_t cidcount = buf.ReadByte(); + buf.Skip(cidcount * 3); - uint16_t groupid = buf->ReadWord(); + uint16_t groupid = buf.ReadWord(); if (!IsValidGroupID(groupid, "AirportMapSpriteGroup")) return; for (auto &airport : airports) { @@ -6015,7 +6015,7 @@ static void AirportMapSpriteGroup(ByteReader *buf, uint8_t idcount) } } -static void AirportTileMapSpriteGroup(ByteReader *buf, uint8_t idcount) +static void AirportTileMapSpriteGroup(ByteReader &buf, uint8_t idcount) { if (_cur.grffile->airtspec.empty()) { GrfMsg(1, "AirportTileMapSpriteGroup: No airport tiles defined, skipping"); @@ -6025,14 +6025,14 @@ static void AirportTileMapSpriteGroup(ByteReader *buf, uint8_t idcount) std::vector airptiles; airptiles.reserve(idcount); for (uint i = 0; i < idcount; i++) { - airptiles.push_back(buf->ReadExtendedByte()); + airptiles.push_back(buf.ReadExtendedByte()); } /* Skip the cargo type section, we only care about the default group */ - uint8_t cidcount = buf->ReadByte(); - buf->Skip(cidcount * 3); + uint8_t cidcount = buf.ReadByte(); + buf.Skip(cidcount * 3); - uint16_t groupid = buf->ReadWord(); + uint16_t groupid = buf.ReadWord(); if (!IsValidGroupID(groupid, "AirportTileMapSpriteGroup")) return; for (auto &airptile : airptiles) { @@ -6047,7 +6047,7 @@ static void AirportTileMapSpriteGroup(ByteReader *buf, uint8_t idcount) } } -static void RoadStopMapSpriteGroup(ByteReader *buf, uint8_t idcount) +static void RoadStopMapSpriteGroup(ByteReader &buf, uint8_t idcount) { if (_cur.grffile->roadstops.empty()) { GrfMsg(1, "RoadStopMapSpriteGroup: No roadstops defined, skipping"); @@ -6057,13 +6057,13 @@ static void RoadStopMapSpriteGroup(ByteReader *buf, uint8_t idcount) std::vector roadstops; roadstops.reserve(idcount); for (uint i = 0; i < idcount; i++) { - roadstops.push_back(buf->ReadExtendedByte()); + roadstops.push_back(buf.ReadExtendedByte()); } - uint8_t cidcount = buf->ReadByte(); + uint8_t cidcount = buf.ReadByte(); for (uint c = 0; c < cidcount; c++) { - uint8_t ctype = buf->ReadByte(); - uint16_t groupid = buf->ReadWord(); + uint8_t ctype = buf.ReadByte(); + uint16_t groupid = buf.ReadWord(); if (!IsValidGroupID(groupid, "RoadStopMapSpriteGroup")) continue; ctype = TranslateCargo(GSF_ROADSTOPS, ctype); @@ -6081,7 +6081,7 @@ static void RoadStopMapSpriteGroup(ByteReader *buf, uint8_t idcount) } } - uint16_t groupid = buf->ReadWord(); + uint16_t groupid = buf.ReadWord(); if (!IsValidGroupID(groupid, "RoadStopMapSpriteGroup")) return; for (auto &roadstop : roadstops) { @@ -6105,7 +6105,7 @@ static void RoadStopMapSpriteGroup(ByteReader *buf, uint8_t idcount) } /* Action 0x03 */ -static void FeatureMapSpriteGroup(ByteReader *buf) +static void FeatureMapSpriteGroup(ByteReader &buf) { /* <03> ... [ ]... * id-list := [] [id-list] @@ -6121,8 +6121,8 @@ static void FeatureMapSpriteGroup(ByteReader *buf) * W cid cargo ID (sprite group ID) for this type of cargo * W def-cid default cargo ID (sprite group ID) */ - uint8_t feature = buf->ReadByte(); - uint8_t idcount = buf->ReadByte(); + uint8_t feature = buf.ReadByte(); + uint8_t idcount = buf.ReadByte(); if (feature >= GSF_END) { GrfMsg(1, "FeatureMapSpriteGroup: Unsupported feature 0x{:02X}, skipping", feature); @@ -6132,8 +6132,8 @@ static void FeatureMapSpriteGroup(ByteReader *buf) /* If idcount is zero, this is a feature callback */ if (idcount == 0) { /* Skip number of cargo ids? */ - buf->ReadByte(); - uint16_t groupid = buf->ReadWord(); + buf.ReadByte(); + uint16_t groupid = buf.ReadWord(); if (!IsValidGroupID(groupid, "FeatureMapSpriteGroup")) return; GrfMsg(6, "FeatureMapSpriteGroup: Adding generic feature callback for feature 0x{:02X}", feature); @@ -6214,7 +6214,7 @@ static void FeatureMapSpriteGroup(ByteReader *buf) } /* Action 0x04 */ -static void FeatureNewName(ByteReader *buf) +static void FeatureNewName(ByteReader &buf) { /* <04> * @@ -6234,22 +6234,22 @@ static void FeatureNewName(ByteReader *buf) bool new_scheme = _cur.grffile->grf_version >= 7; - uint8_t feature = buf->ReadByte(); + uint8_t feature = buf.ReadByte(); if (feature >= GSF_END && feature != 0x48) { GrfMsg(1, "FeatureNewName: Unsupported feature 0x{:02X}, skipping", feature); return; } - uint8_t lang = buf->ReadByte(); - uint8_t num = buf->ReadByte(); + uint8_t lang = buf.ReadByte(); + uint8_t num = buf.ReadByte(); bool generic = HasBit(lang, 7); uint16_t id; if (generic) { - id = buf->ReadWord(); + id = buf.ReadWord(); } else if (feature <= GSF_AIRCRAFT) { - id = buf->ReadExtendedByte(); + id = buf.ReadExtendedByte(); } else { - id = buf->ReadByte(); + id = buf.ReadByte(); } ClrBit(lang, 7); @@ -6259,8 +6259,8 @@ static void FeatureNewName(ByteReader *buf) GrfMsg(6, "FeatureNewName: About to rename engines {}..{} (feature 0x{:02X}) in language 0x{:02X}", id, endid, feature, lang); - for (; id < endid && buf->HasData(); id++) { - const std::string_view name = buf->ReadString(); + for (; id < endid && buf.HasData(); id++) { + const std::string_view name = buf.ReadString(); GrfMsg(8, "FeatureNewName: 0x{:04X} <- {}", id, name); switch (feature) { @@ -6396,7 +6396,7 @@ std::span GetAction5Types() } /* Action 0x05 */ -static void GraphicsNew(ByteReader *buf) +static void GraphicsNew(ByteReader &buf) { /* <05> * @@ -6404,9 +6404,9 @@ static void GraphicsNew(ByteReader *buf) * E num-sprites How many sprites are in this set? * V other data Graphics type specific data. Currently unused. */ - uint8_t type = buf->ReadByte(); - uint16_t num = buf->ReadExtendedByte(); - uint16_t offset = HasBit(type, 7) ? buf->ReadExtendedByte() : 0; + uint8_t type = buf.ReadByte(); + uint16_t num = buf.ReadExtendedByte(); + uint16_t offset = HasBit(type, 7) ? buf.ReadExtendedByte() : 0; ClrBit(type, 7); // Clear the high bit as that only indicates whether there is an offset. if ((type == 0x0D) && (num == 10) && HasBit(_cur.grfconfig->flags, GCF_SYSTEM)) { @@ -6485,13 +6485,13 @@ static void GraphicsNew(ByteReader *buf) } /* Action 0x05 (SKIP) */ -static void SkipAct5(ByteReader *buf) +static void SkipAct5(ByteReader &buf) { /* Ignore type byte */ - buf->ReadByte(); + buf.ReadByte(); /* Skip the sprites of this action */ - _cur.skip_sprites = buf->ReadExtendedByte(); + _cur.skip_sprites = buf.ReadExtendedByte(); GrfMsg(3, "SkipAct5: Skipping {} sprites", _cur.skip_sprites); } @@ -6683,7 +6683,7 @@ static uint32_t GetParamVal(uint8_t param, uint32_t *cond_val) } /* Action 0x06 */ -static void CfgApply(ByteReader *buf) +static void CfgApply(ByteReader &buf) { /* <06> ... * @@ -6733,12 +6733,12 @@ static void CfgApply(ByteReader *buf) bool add_value; /* Read the parameter to apply. 0xFF indicates no more data to change. */ - param_num = buf->ReadByte(); + param_num = buf.ReadByte(); if (param_num == 0xFF) break; /* Get the size of the parameter to use. If the size covers multiple * double words, sequential parameter values are used. */ - param_size = buf->ReadByte(); + param_size = buf.ReadByte(); /* Bit 7 of param_size indicates we should add to the original value * instead of replacing it. */ @@ -6746,7 +6746,7 @@ static void CfgApply(ByteReader *buf) param_size = GB(param_size, 0, 7); /* Where to apply the data to within the pseudo sprite data. */ - offset = buf->ReadExtendedByte(); + offset = buf.ReadExtendedByte(); /* If the parameter is a GRF parameter (not an internal variable) check * if it (and all further sequential parameters) has been defined. */ @@ -6793,7 +6793,7 @@ static void DisableStaticNewGRFInfluencingNonStaticNewGRFs(GRFConfig *c) /* Action 0x07 * Action 0x09 */ -static void SkipIf(ByteReader *buf) +static void SkipIf(ByteReader &buf) { /* <07/09> * @@ -6806,9 +6806,9 @@ static void SkipIf(ByteReader *buf) uint32_t mask = 0; bool result; - uint8_t param = buf->ReadByte(); - uint8_t paramsize = buf->ReadByte(); - uint8_t condtype = buf->ReadByte(); + uint8_t param = buf.ReadByte(); + uint8_t paramsize = buf.ReadByte(); + uint8_t condtype = buf.ReadByte(); if (condtype < 2) { /* Always 1 for bit tests, the given value should be ignored. */ @@ -6816,10 +6816,10 @@ static void SkipIf(ByteReader *buf) } switch (paramsize) { - case 8: cond_val = buf->ReadDWord(); mask = buf->ReadDWord(); break; - case 4: cond_val = buf->ReadDWord(); mask = 0xFFFFFFFF; break; - case 2: cond_val = buf->ReadWord(); mask = 0x0000FFFF; break; - case 1: cond_val = buf->ReadByte(); mask = 0x000000FF; break; + case 8: cond_val = buf.ReadDWord(); mask = buf.ReadDWord(); break; + case 4: cond_val = buf.ReadDWord(); mask = 0xFFFFFFFF; break; + case 2: cond_val = buf.ReadWord(); mask = 0x0000FFFF; break; + case 1: cond_val = buf.ReadByte(); mask = 0x000000FF; break; default: break; } @@ -6931,7 +6931,7 @@ static void SkipIf(ByteReader *buf) return; } - uint8_t numsprites = buf->ReadByte(); + uint8_t numsprites = buf.ReadByte(); /* numsprites can be a GOTO label if it has been defined in the GRF * file. The jump will always be the first matching label that follows @@ -6974,11 +6974,11 @@ static void SkipIf(ByteReader *buf) /* Action 0x08 (GLS_FILESCAN) */ -static void ScanInfo(ByteReader *buf) +static void ScanInfo(ByteReader &buf) { - uint8_t grf_version = buf->ReadByte(); - uint32_t grfid = buf->ReadDWord(); - std::string_view name = buf->ReadString(); + uint8_t grf_version = buf.ReadByte(); + uint32_t grfid = buf.ReadDWord(); + std::string_view name = buf.ReadString(); _cur.grfconfig->ident.grfid = grfid; @@ -6992,8 +6992,8 @@ static void ScanInfo(ByteReader *buf) AddGRFTextToList(_cur.grfconfig->name, 0x7F, grfid, false, name); - if (buf->HasData()) { - std::string_view info = buf->ReadString(); + if (buf.HasData()) { + std::string_view info = buf.ReadString(); AddGRFTextToList(_cur.grfconfig->info, 0x7F, grfid, true, info); } @@ -7002,7 +7002,7 @@ static void ScanInfo(ByteReader *buf) } /* Action 0x08 */ -static void GRFInfo(ByteReader *buf) +static void GRFInfo(ByteReader &buf) { /* <08> * @@ -7011,9 +7011,9 @@ static void GRFInfo(ByteReader *buf) * S name name of this .grf set * S info string describing the set, and e.g. author and copyright */ - uint8_t version = buf->ReadByte(); - uint32_t grfid = buf->ReadDWord(); - std::string_view name = buf->ReadString(); + uint8_t version = buf.ReadByte(); + uint32_t grfid = buf.ReadDWord(); + std::string_view name = buf.ReadString(); if (_cur.stage < GLS_RESERVE && _cur.grfconfig->status != GCS_UNKNOWN) { DisableGrf(STR_NEWGRF_ERROR_MULTIPLE_ACTION_8); @@ -7048,7 +7048,7 @@ static bool IsGRMReservedSprite(SpriteID first_sprite, uint16_t num_sprites) } /* Action 0x0A */ -static void SpriteReplace(ByteReader *buf) +static void SpriteReplace(ByteReader &buf) { /* <0A> [ ...] * : @@ -7058,11 +7058,11 @@ static void SpriteReplace(ByteReader *buf) * B num-sprites How many sprites are in this set * W first-sprite First sprite number to replace */ - uint8_t num_sets = buf->ReadByte(); + uint8_t num_sets = buf.ReadByte(); for (uint i = 0; i < num_sets; i++) { - uint8_t num_sprites = buf->ReadByte(); - uint16_t first_sprite = buf->ReadWord(); + uint8_t num_sprites = buf.ReadByte(); + uint16_t first_sprite = buf.ReadWord(); GrfMsg(2, "SpriteReplace: [Set {}] Changing {} sprites, beginning with {}", i, num_sprites, first_sprite @@ -7095,22 +7095,22 @@ static void SpriteReplace(ByteReader *buf) } /* Action 0x0A (SKIP) */ -static void SkipActA(ByteReader *buf) +static void SkipActA(ByteReader &buf) { - uint8_t num_sets = buf->ReadByte(); + uint8_t num_sets = buf.ReadByte(); for (uint i = 0; i < num_sets; i++) { /* Skip the sprites this replaces */ - _cur.skip_sprites += buf->ReadByte(); + _cur.skip_sprites += buf.ReadByte(); /* But ignore where they go */ - buf->ReadWord(); + buf.ReadWord(); } GrfMsg(3, "SkipActA: Skipping {} sprites", _cur.skip_sprites); } /* Action 0x0B */ -static void GRFLoadError(ByteReader *buf) +static void GRFLoadError(ByteReader &buf) { /* <0B> [ 00] [] 00 [] * @@ -7144,9 +7144,9 @@ static void GRFLoadError(ByteReader *buf) STR_NEWGRF_ERROR_MSG_FATAL }; - uint8_t severity = buf->ReadByte(); - uint8_t lang = buf->ReadByte(); - uint8_t message_id = buf->ReadByte(); + uint8_t severity = buf.ReadByte(); + uint8_t lang = buf.ReadByte(); + uint8_t message_id = buf.ReadByte(); /* Skip the error if it isn't valid for the current language. */ if (!CheckGrfLangID(lang, _cur.grffile->grf_version)) return; @@ -7176,7 +7176,7 @@ static void GRFLoadError(ByteReader *buf) return; } - if (buf->Remaining() <= 1) { + if (buf.Remaining() <= 1) { GrfMsg(7, "GRFLoadError: No message data supplied."); return; } @@ -7189,8 +7189,8 @@ static void GRFLoadError(ByteReader *buf) if (message_id == 0xFF) { /* This is a custom error message. */ - if (buf->HasData()) { - std::string_view message = buf->ReadString(); + if (buf.HasData()) { + std::string_view message = buf.ReadString(); error->custom_message = TranslateTTDPatchCodes(_cur.grffile->grfid, lang, true, message, SCC_RAW_STRING_POINTER); } else { @@ -7201,8 +7201,8 @@ static void GRFLoadError(ByteReader *buf) error->message = msgstr[message_id]; } - if (buf->HasData()) { - std::string_view data = buf->ReadString(); + if (buf.HasData()) { + std::string_view data = buf.ReadString(); error->data = TranslateTTDPatchCodes(_cur.grffile->grfid, lang, true, data); } else { @@ -7211,29 +7211,29 @@ static void GRFLoadError(ByteReader *buf) } /* Only two parameter numbers can be used in the string. */ - for (uint i = 0; i < error->param_value.size() && buf->HasData(); i++) { - uint param_number = buf->ReadByte(); + for (uint i = 0; i < error->param_value.size() && buf.HasData(); i++) { + uint param_number = buf.ReadByte(); error->param_value[i] = _cur.grffile->GetParam(param_number); } } /* Action 0x0C */ -static void GRFComment(ByteReader *buf) +static void GRFComment(ByteReader &buf) { /* <0C> [] * * V ignored Anything following the 0C is ignored */ - if (!buf->HasData()) return; + if (!buf.HasData()) return; - std::string_view text = buf->ReadString(); + std::string_view text = buf.ReadString(); GrfMsg(2, "GRFComment: {}", text); } /* Action 0x0D (GLS_SAFETYSCAN) */ -static void SafeParamSet(ByteReader *buf) +static void SafeParamSet(ByteReader &buf) { - uint8_t target = buf->ReadByte(); + uint8_t target = buf.ReadByte(); /* Writing GRF parameters and some bits of 'misc GRF features' are safe. */ if (target < 0x80 || target == 0x9E) return; @@ -7376,7 +7376,7 @@ static uint32_t PerformGRM(uint32_t *grm, uint16_t num_ids, uint16_t count, uint /** Action 0x0D: Set parameter */ -static void ParamSet(ByteReader *buf) +static void ParamSet(ByteReader &buf) { /* <0D> [] * @@ -7400,13 +7400,13 @@ static void ParamSet(ByteReader *buf) * (source2 like in 05, and source1 as well) */ - uint8_t target = buf->ReadByte(); - uint8_t oper = buf->ReadByte(); - uint32_t src1 = buf->ReadByte(); - uint32_t src2 = buf->ReadByte(); + uint8_t target = buf.ReadByte(); + uint8_t oper = buf.ReadByte(); + uint32_t src1 = buf.ReadByte(); + uint32_t src2 = buf.ReadByte(); uint32_t data = 0; - if (buf->Remaining() >= 4) data = buf->ReadDWord(); + if (buf.Remaining() >= 4) data = buf.ReadDWord(); /* You can add 80 to the operation to make it apply only if the target * is not defined yet. In this respect, a parameter is taken to be @@ -7678,17 +7678,17 @@ static void ParamSet(ByteReader *buf) } /* Action 0x0E (GLS_SAFETYSCAN) */ -static void SafeGRFInhibit(ByteReader *buf) +static void SafeGRFInhibit(ByteReader &buf) { /* <0E> * * B num Number of GRFIDs that follow * D grfids GRFIDs of the files to deactivate */ - uint8_t num = buf->ReadByte(); + uint8_t num = buf.ReadByte(); for (uint i = 0; i < num; i++) { - uint32_t grfid = buf->ReadDWord(); + uint32_t grfid = buf.ReadDWord(); /* GRF is unsafe it if tries to deactivate other GRFs */ if (grfid != _cur.grfconfig->ident.grfid) { @@ -7703,17 +7703,17 @@ static void SafeGRFInhibit(ByteReader *buf) } /* Action 0x0E */ -static void GRFInhibit(ByteReader *buf) +static void GRFInhibit(ByteReader &buf) { /* <0E> * * B num Number of GRFIDs that follow * D grfids GRFIDs of the files to deactivate */ - uint8_t num = buf->ReadByte(); + uint8_t num = buf.ReadByte(); for (uint i = 0; i < num; i++) { - uint32_t grfid = buf->ReadDWord(); + uint32_t grfid = buf.ReadDWord(); GRFConfig *file = GetGRFConfig(grfid); /* Unset activation flag */ @@ -7726,7 +7726,7 @@ static void GRFInhibit(ByteReader *buf) } /** Action 0x0F - Define Town names */ -static void FeatureTownName(ByteReader *buf) +static void FeatureTownName(ByteReader &buf) { /* <0F> * @@ -7739,7 +7739,7 @@ static void FeatureTownName(ByteReader *buf) GRFTownName *townname = AddGRFTownName(grfid); - uint8_t id = buf->ReadByte(); + uint8_t id = buf.ReadByte(); GrfMsg(6, "FeatureTownName: definition 0x{:02X}", id & 0x7F); if (HasBit(id, 7)) { @@ -7747,43 +7747,43 @@ static void FeatureTownName(ByteReader *buf) ClrBit(id, 7); bool new_scheme = _cur.grffile->grf_version >= 7; - uint8_t lang = buf->ReadByte(); + uint8_t lang = buf.ReadByte(); StringID style = STR_UNDEFINED; do { ClrBit(lang, 7); - std::string_view name = buf->ReadString(); + std::string_view name = buf.ReadString(); std::string lang_name = TranslateTTDPatchCodes(grfid, lang, false, name); GrfMsg(6, "FeatureTownName: lang 0x{:X} -> '{}'", lang, lang_name); style = AddGRFString(grfid, id, lang, new_scheme, false, name, STR_UNDEFINED); - lang = buf->ReadByte(); + lang = buf.ReadByte(); } while (lang != 0); townname->styles.emplace_back(style, id); } - uint8_t parts = buf->ReadByte(); + uint8_t parts = buf.ReadByte(); GrfMsg(6, "FeatureTownName: {} parts", parts); townname->partlists[id].reserve(parts); for (uint partnum = 0; partnum < parts; partnum++) { NamePartList &partlist = townname->partlists[id].emplace_back(); - uint8_t texts = buf->ReadByte(); - partlist.bitstart = buf->ReadByte(); - partlist.bitcount = buf->ReadByte(); + uint8_t texts = buf.ReadByte(); + partlist.bitstart = buf.ReadByte(); + partlist.bitcount = buf.ReadByte(); partlist.maxprob = 0; GrfMsg(6, "FeatureTownName: part {} contains {} texts and will use GB(seed, {}, {})", partnum, texts, partlist.bitstart, partlist.bitcount); partlist.parts.reserve(texts); for (uint textnum = 0; textnum < texts; textnum++) { NamePart &part = partlist.parts.emplace_back(); - part.prob = buf->ReadByte(); + part.prob = buf.ReadByte(); if (HasBit(part.prob, 7)) { - uint8_t ref_id = buf->ReadByte(); + uint8_t ref_id = buf.ReadByte(); if (ref_id >= GRFTownName::MAX_LISTS || townname->partlists[ref_id].empty()) { GrfMsg(0, "FeatureTownName: definition 0x{:02X} doesn't exist, deactivating", ref_id); DelGRFTownName(grfid); @@ -7793,7 +7793,7 @@ static void FeatureTownName(ByteReader *buf) part.id = ref_id; GrfMsg(6, "FeatureTownName: part {}, text {}, uses intermediate definition 0x{:02X} (with probability {})", partnum, textnum, ref_id, part.prob & 0x7F); } else { - std::string_view text = buf->ReadString(); + std::string_view text = buf.ReadString(); part.text = TranslateTTDPatchCodes(grfid, 0, false, text); GrfMsg(6, "FeatureTownName: part {}, text {}, '{}' (with probability {})", partnum, textnum, part.text, part.prob); } @@ -7804,14 +7804,14 @@ static void FeatureTownName(ByteReader *buf) } /** Action 0x10 - Define goto label */ -static void DefineGotoLabel(ByteReader *buf) +static void DefineGotoLabel(ByteReader &buf) { /* <10>